From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.20; helo=mga02.intel.com; envelope-from=narendra.k.vanguput@intel.com; receiver=edk2-devel@lists.01.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id BB6822194EB70 for ; Wed, 20 Mar 2019 19:48:47 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Mar 2019 19:48:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,251,1549958400"; d="scan'208";a="216062988" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga001.jf.intel.com with ESMTP; 20 Mar 2019 19:48:46 -0700 Received: from FMSMSX110.amr.corp.intel.com (10.18.116.10) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 20 Mar 2019 19:48:46 -0700 Received: from bgsmsx103.gar.corp.intel.com (10.223.4.130) by fmsmsx110.amr.corp.intel.com (10.18.116.10) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 20 Mar 2019 19:48:45 -0700 Received: from bgsmsx102.gar.corp.intel.com ([169.254.2.2]) by BGSMSX103.gar.corp.intel.com ([169.254.4.38]) with mapi id 14.03.0415.000; Thu, 21 Mar 2019 08:18:43 +0530 From: "Vanguput, Narendra K" To: "Dong, Eric" , Laszlo Ersek , "edk2-devel@lists.01.org" CC: "Yao, Jiewen" , "Chinnusamy, Rajkumar K" , "Ni, Ray" Thread-Topic: [edk2] [PATCH v4] UefiCpuPkg\CpuSmm: Save & restore CR2 on-demand paging in SMM Thread-Index: AQHU3ZhxjExzRrAnTk2ZA+HdsMFbi6YUXU2AgABlNYCAACfbAIAAe1dg Date: Thu, 21 Mar 2019 02:48:42 +0000 Message-ID: <020B34E8430BB544AB9E0330B597780A664DD68C@BGSMSX102.gar.corp.intel.com> References: <20190318143825.17352-1-narendra.k.vanguput@intel.com> <020B34E8430BB544AB9E0330B597780A664DCD0C@BGSMSX102.gar.corp.intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZjc3YWVmNDMtNzY5OS00NzMwLThjMjAtZjVjN2E1OTYyZWExIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoidnM0enI3Nm9cL1RGSVc1Zmo5R0sySk1XMkpLQXJUbUxcLzlBVk42ckFWa3lJcE4xOWlRZWJXRkMrbVJmV1J1ZmhpIn0= x-originating-ip: [10.223.10.10] MIME-Version: 1.0 Subject: Re: [PATCH v4] UefiCpuPkg\CpuSmm: Save & restore CR2 on-demand paging in SMM X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Mar 2019 02:48:48 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzIEVyaWMhLg0KDQpXaWxsIGdvIGFzIHBlciB0aGUgY29tbWVudCAjMSBzdWdnZXN0ZWQg YW5kIHVwZGF0ZSBmdXJ0aGVyIGluIHRoZSBjb2RlIHJldmlldy4NCg0KVGhhbmtzLA0KTmFyZW4N Cg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBEb25nLCBFcmljDQo+IFNl bnQ6IFRodXJzZGF5LCBNYXJjaCAyMSwgMjAxOSA2OjI2IEFNDQo+IFRvOiBWYW5ndXB1dCwgTmFy ZW5kcmEgSyA8bmFyZW5kcmEuay52YW5ndXB1dEBpbnRlbC5jb20+OyBMYXN6bG8gRXJzZWsNCj4g PGxlcnNla0ByZWRoYXQuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gQ2M6IFlhbywg Smlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IENoaW5udXNhbXksIFJhamt1bWFyIEsNCj4g PHJhamt1bWFyLmsuY2hpbm51c2FteUBpbnRlbC5jb20+OyBOaSwgUmF5IDxyYXkubmlAaW50ZWwu Y29tPg0KPiBTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCB2NF0gVWVmaUNwdVBrZ1xDcHVTbW06 IFNhdmUgJiByZXN0b3JlIENSMiBvbi0NCj4gZGVtYW5kIHBhZ2luZyBpbiBTTU0NCj4gDQo+IEhp IE5hcmVuLA0KPiANCj4gSSBhZ3JlZSB3aXRoIExhc3psbydzIGNvbW1lbnQgZm9yICMxLiBJIHRo aW5rIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgSUEzMi9YNjQNCj4gYXJlIG11Y2ggY2xlYXIgdGhh biB0aGUgY3VycmVudCBvbmUuIEkgdGhpbmsgaW4gY3VycmVudCBFREsyIGNvZGViYXNlLCBtYW55 DQo+IHNpbWlsYXIgY2FzZXMgYWxyZWFkeSBleGl0cy4NCj4gDQo+IFRoYW5rcywNCj4gRXJpYw0K PiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IFZhbmd1cHV0LCBO YXJlbmRyYSBLDQo+ID4gU2VudDogVGh1cnNkYXksIE1hcmNoIDIxLCAyMDE5IDE6MjggQU0NCj4g PiBUbzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT47IGVkazItZGV2ZWxAbGlzdHMu MDEub3JnDQo+ID4gQ2M6IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IERvbmcs IEVyaWMNCj4gPiA8ZXJpYy5kb25nQGludGVsLmNvbT47IENoaW5udXNhbXksIFJhamt1bWFyIEsN Cj4gPiA8cmFqa3VtYXIuay5jaGlubnVzYW15QGludGVsLmNvbT47IE5pLCBSYXkgPHJheS5uaUBp bnRlbC5jb20+DQo+ID4gU3ViamVjdDogUkU6IFtlZGsyXSBbUEFUQ0ggdjRdIFVlZmlDcHVQa2dc Q3B1U21tOiBTYXZlICYgcmVzdG9yZSBDUjINCj4gPiBvbi0gZGVtYW5kIHBhZ2luZyBpbiBTTU0N Cj4gPg0KPiA+IEhpIExhc3psbywNCj4gPg0KPiA+IFRoYW5rcyBmb3IgeW91ciBjb21tZW50cy4N Cj4gPg0KPiA+IEZvciB5b3VyIGNvbW1lbnQgIzEsIE15IHRob3VnaHRzIGFyZSB3aGVuIHdlIGFk ZCB0d28gZnVuY3Rpb25zDQo+ID4gKFNhdmVDcjIgJiBSZXN0b3JlQ3IyKS4gRm9yIElBMzIsIGl0 IGFjdHVhbGx5IGRvbid0IHNhdmUgYW5kIHJlc3RvcmUsIHNpbXBseQ0KPiByZXR1cm5zLg0KPiA+ IExhdGVyLCBpdCBtaWdodCBiZSBjb25mdXNpbmcgdW5sZXNzIGlmIHdlIGtub3cgdGhlIGJhY2tn cm91bmQgYW5kIGdvbmUNCj4gPiB0aHJvdWdoIDY0IGJpdCBzdXBwb3J0ZWQgY29kZS4gQW5kIGFs c28gaXRzIGtpbmQgb2YgYWRkaW5nIG1vcmUgY29kZQ0KPiA+IHdoaWxlIHdlIGhhdmUgYWx0ZXJu YXRlIHNvbHV0aW9uLg0KPiA+IEluIHRoZSBwcm9wb3NlZCBjaGFuZ2VzLCBJIGZlbHQgaXRzIHN0 cmFpZ2h0IGZvcndhcmQgYW5kIGxpZ2h0IGNoYW5nZXMgbmVlZGVkLg0KPiA+IFllcywgSSB3b3Vs ZCBsaWtlIHRvIGhlYXIgZnJvbSBvdGhlciByZXZpZXdlcnMgdG9vIHRvIHRha2UgdGhlIHJpZ2h0 IG9wdGlvbi4NCj4gPg0KPiA+IEZvciBjb21tZW50cyAjMiAmICM0LCBZZXMsIEkgbm90aWZpZWQg aXQsIHdhaXRpbmcgdG8gdXBkYXRlIGFsb25nIHdpdGgNCj4gPiBvdGhlciBjb21tZW50cy4NCj4g Pg0KPiA+IEZvciBjb21tZW50cyAjMyAmICM1LCB3aWxsIGNvbnNpZGVyIHRoZW0uIFdpbGwgYWRq dXN0IHRoZSBuby4NCj4gPiBjaGFyYWN0ZXJzIGFuZCB3aWxsIG1vdmUgZXh0ZXJuIG9mIG1DcHVT bW1TdGF0aWNQYWdlVGFibGUgdG8NCj4gUGlTbW1DcHVEeGVTbW0uaCBmaWxlLg0KPiA+DQo+ID4g VGhhbmtzLA0KPiA+IE5hcmVuDQo+ID4NCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PiA+IEZyb206IExhc3psbyBFcnNlayBbbWFpbHRvOmxlcnNla0ByZWRoYXQuY29tXQ0KPiA+IFNl bnQ6IFdlZG5lc2RheSwgTWFyY2ggMjAsIDIwMTkgMTA6MDEgUE0NCj4gPiBUbzogVmFuZ3VwdXQs IE5hcmVuZHJhIEsgPG5hcmVuZHJhLmsudmFuZ3VwdXRAaW50ZWwuY29tPjsgZWRrMi0NCj4gPiBk ZXZlbEBsaXN0cy4wMS5vcmcNCj4gPiBDYzogWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwu Y29tPjsgRG9uZywgRXJpYw0KPiA+IDxlcmljLmRvbmdAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6 IFJlOiBbZWRrMl0gW1BBVENIIHY0XSBVZWZpQ3B1UGtnXENwdVNtbTogU2F2ZSAmIHJlc3RvcmUg Q1IyDQo+ID4gb24tIGRlbWFuZCBwYWdpbmcgaW4gU01NDQo+ID4NCj4gPiBPbiAwMy8xOC8xOSAx NTozOCwgbmt2YW5ndXAgd3JvdGU6DQo+ID4gPiBCWjogaHR0cHM6Ly9idWd6aWxsYS50aWFub2Nv cmUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkzDQo+ID4gPg0KPiA+ID4gRm9yIGV2ZXJ5IFNNSSBv Y2N1cnJlbmNlLCBzYXZlIGFuZCByZXN0b3JlIENSMiByZWdpc3RlciBvbmx5IHdoZW4NCj4gPiA+ IFNNTSBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnQgaXMgZW5hYmxlZCBpbiA2NCBiaXQgb3BlcmF0 aW9uIG1vZGUuDQo+ID4gPg0KPiA+ID4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250 cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiA+ID4gU2lnbmVkLW9mZi1ieTogVmFuZ3VwdXQgTmFy ZW5kcmEgSyA8bmFyZW5kcmEuay52YW5ndXB1dEBpbnRlbC5jb20+DQo+ID4gPiBDYzogRXJpYyBE b25nIDxlcmljLmRvbmdAaW50ZWwuY29tPg0KPiA+ID4gQ2M6IFJheSBOaSA8cmF5Lm5pQGludGVs LmNvbT4NCj4gPiA+IENjOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiA+ID4g Q2M6IFlhbyBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiA+ID4gLS0tDQo+ID4gPiAg VWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9NcFNlcnZpY2UuYyAgIHwgMjIgKysrKysrKysrKysr KystLS0tLQ0KPiA+IC0tLQ0KPiA+ID4gIFVlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vWDY0L1Bh Z2VUYmwuYyB8ICAyICstDQo+ID4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCsp LCA5IGRlbGV0aW9ucygtKQ0KPiA+ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL1Bp U21tQ3B1RHhlU21tL01wU2VydmljZS5jDQo+ID4gPiBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVT bW0vTXBTZXJ2aWNlLmMNCj4gPiA+IGluZGV4IDNiMGIzYjUyYWMuLjBjMDdiMzFjNGYgMTAwNjQ0 DQo+ID4gPiAtLS0gYS9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL01wU2VydmljZS5jDQo+ID4g PiArKysgYi9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL01wU2VydmljZS5jDQo+ID4gPiBAQCAt MjgsNiArMjgsNyBAQCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1TZW1hcGhvcmVTaXplOw0KPiA+ID4gIFNQSU5fTE9DSyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKm1QRkxvY2sgPSBOVUxMOw0KPiA+ID4gIFNNTV9DUFVfU1lOQ19NT0RFICAg ICAgICAgICAgICAgICAgICAgICAgICAgbUNwdVNtbVN5bmNNb2RlOw0KPiA+ID4gIEJPT0xFQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1hY2hpbmVDaGVja1N1cHBvcnRl ZCA9IEZBTFNFOw0KPiA+ID4gK0JPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbUNwdVNtbVN0YXRpY1BhZ2VUYWJsZSA9IFRSVUU7DQo+ID4NCj4gPiBIbW1tLiBUaGlz IGNoYW5nZSBpcyBhIGJpdCBkYXJpbmcsIGJ1dCBJIHRoaW5rIGl0IGNvdWxkIGJlIHZhbGlkLg0K PiA+DQo+ID4gLSBJbiB0aGUgSUEzMiBidWlsZCwgbUNwdVNtbVN0YXRpY1BhZ2VUYWJsZSB3b3Vs ZCBuZXZlciBiZSBtb2RpZmllZCwNCj4gPiBvciByZWFkLCBieSAqcHJlZXhpc3RlbnQqIGNvZGUg KGJlY2F1c2UgYWxsIHRoYXQgY29kZSBpcyBpbiBYNjQvUGFnZVRibC5jKS4NCj4gPiBBbmQgdGhl IG5ldyBjb2RlLCBhZGRlZCBieSB0aGlzIHBhdGNoLCB3b3VsZCAocHJlc3VtYWJseSkgd29yayBm aW5lLA0KPiA+IHdpdGggdGhlIGluaXRpYWwgVFJVRSB2YWx1ZS4NCj4gPg0KPiA+IC0gSW4gdGhl IFg2NCBidWlsZCwgdGhlIHByZWV4aXN0ZW50IGNvZGUgd291bGQgbmV2ZXIgcmVhZCB0aGUgaW5p dGlhbA0KPiA+IHZhbHVlICh3aGljaCB3ZSBub3cgc2V0IHRvIFRSVUUgaGVyZSksIGkuZS4gYmVm b3JlIG92ZXJ3cml0aW5nIHRoZQ0KPiA+IHZhcmlhYmxlIGZyb20gdGhlIFBDRCAtLSBiZWNhdXNl IHRoYXQgd291bGQgbWVhbiBhIGJ1ZyBpbiB0aGUNCj4gPiBwcmVleGlzdGVudCBjb2RlLiAoV2Vs bCwgdW5sZXNzIHRoYXQgY29kZSByZWxpZWQgb24gdGhlIHplcm8gaW5pdGlhbCB2YWx1ZSBvZg0K PiB0aGUgdmFyaWFibGUpLg0KPiA+DQo+ID4gKDEpIEkgdGhpbmsgSSdkIGxpa2UgdG8gZGVmZXIg b24gdGhpcyB0byBvdGhlciBVZWZpQ3B1UGtnIHJldmlld2Vycy4NCj4gPiBIb25lc3RseSBJIGZp bmQgdGhpcyBzdHlsZSBxdWVzdGlvbmFibGUuIEl0IG1ha2VzIG1lIGZlZWwgdW5jb21mb3J0YWJs ZS4NCj4gPiBJJ2QgcHJlZmVyIHRoZSBuZXcgQVBJcyB3aXRoIHRoZSBzZXBhcmF0ZSBJQTMyL1g2 NCBpbXBsZW1lbnRhdGlvbnMNCj4gPiB0aGF0IEkgc3VnZ2VzdGVkIGluIG15IHYyIHJldmlldy4g QnV0IGlmIG90aGVyIHJldmlld2VycyBsaWtlIHRoaXMgb25lDQo+ID4gYmV0dGVyLCBJIHdvbid0 IG1pbmQuDQo+ID4NCj4gPiAoQWZ0ZXIgaGVhcmluZyB0aGVpciBvcGluaW9ucywgSSdkIGF0dGVt cHQgdG8gZmluZCB0aGUgdGltZSB0bw0KPiA+IHJlZ3Jlc3Npb24gdGVzdCB0aGUgcGF0Y2ggKG9y IG1heWJlIHY1KSwgdG9vLikNCj4gPg0KPiA+IEFzc3VtaW5nIG90aGVyIHJldmlld2VycyBwcmVm ZXIgdGhpcyBhcHByb2FjaCBvdmVyIG15IHN1Z2dlc3Rpb24sIEkNCj4gPiBoYXZlIHNvbWUgb3Ro ZXIgY29tbWVudHM6DQo+ID4NCj4gPiA+DQo+ID4gPiAgLyoqDQo+ID4gPiAgICBQZXJmb3JtcyBh biBhdG9taWMgY29tcGFyZSBleGNoYW5nZSBvcGVyYXRpb24gdG8gZ2V0IHNlbWFwaG9yZS4NCj4g PiA+IEBAIC0xMTExLDEwICsxMTEyLDEzIEBAIFNtaVJlbmRlenZvdXMgKA0KPiA+ID4NCj4gPiA+ ICAgIEFTU0VSVChDcHVJbmRleCA8IG1NYXhOdW1iZXJPZkNwdXMpOw0KPiA+ID4NCj4gPiA+IC0g IC8vDQo+ID4gPiAtICAvLyBTYXZlIENyMiBiZWNhdXNlIFBhZ2UgRmF1bHQgZXhjZXB0aW9uIGlu IFNNTSBtYXkgb3ZlcnJpZGUgaXRzDQo+ID4gPiB2YWx1ZQ0KPiA+ID4gLSAgLy8NCj4gPiA+IC0g IENyMiA9IEFzbVJlYWRDcjIgKCk7DQo+ID4gPiArICAgIGlmICghbUNwdVNtbVN0YXRpY1BhZ2VU YWJsZSkgew0KPiA+ID4gKyAgICAvLw0KPiA+ID4gKyAgICAvLyBTYXZlIGFuZCByZXN0b3JlIENy MiB3aGVuIHVzaW5nIG9uLWRlbWFuZCBwYWdpbmcgZm9yIGFib3ZlDQo+ID4gPiArIDRHDQo+ID4g bWVtb3J5IGJlY2F1c2UgUGFnZSBGYXVsdA0KPiA+ID4gKyAgICAvLyBleGNlcHRpb24gaW4gU01N IG1heSBvdmVycmlkZSBpdHMgdmFsdWUNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgQ3IyID0g QXNtUmVhZENyMiAoKTsNCj4gPiA+ICsgIH0NCj4gPg0KPiA+ICgyKSBUaGUgaW5kZW50YXRpb24g b2YgdGhlICJpZiIgaXMgYnJva2VuLg0KPiA+DQo+ID4gKDMpIEdpdmVuIHRoYXQgd2UncmUgYWxy ZWFkeSB1c2luZyB0d28gY29tbWVudCBsaW5lcywgSSdkIHN1Z2dlc3Qgbm90DQo+ID4gZXhjZWVk aW5nIDgwIGNoYXJhY3RlcnMgcGVyIGxpbmUuDQo+ID4NCj4gPiA+DQo+ID4gPiAgICAvLw0KPiA+ ID4gICAgLy8gUGVyZm9ybSBDUFUgc3BlY2lmaWMgZW50cnkgaG9va3MgQEAgLTEyNTMsMTAgKzEy NTcsMTIgQEANCj4gPiA+IFNtaVJlbmRlenZvdXMgKA0KPiA+ID4NCj4gPiA+ICBFeGl0Og0KPiA+ ID4gICAgU21tQ3B1RmVhdHVyZXNSZW5kZXp2b3VzRXhpdCAoQ3B1SW5kZXgpOw0KPiA+ID4gLSAg Ly8NCj4gPiA+IC0gIC8vIFJlc3RvcmUgQ3IyDQo+ID4gPiAtICAvLw0KPiA+ID4gLSAgQXNtV3Jp dGVDcjIgKENyMik7DQo+ID4gPiArICAgIGlmICghbUNwdVNtbVN0YXRpY1BhZ2VUYWJsZSkgew0K PiA+DQo+ID4gKDQpIHNhbWUgYXMgKDIpLg0KPiA+DQo+ID4gPiArICAgIC8vDQo+ID4gPiArICAg IC8vIFJlc3RvcmUgQ3IyDQo+ID4gPiArICAgIC8vDQo+ID4gPiArICAgIEFzbVdyaXRlQ3IyIChD cjIpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gIH0NCj4gPiA+DQo+ID4gPiAgLyoqDQo+ID4gPiBkaWZm IC0tZ2l0IGEvVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9YNjQvUGFnZVRibC5jDQo+ID4gPiBi L1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vWDY0L1BhZ2VUYmwuYw0KPiA+ID4gaW5kZXggMmM3 N2NiNDdhNC4uZTQ0NGI4YTAzMSAxMDA2NDQNCj4gPiA+IC0tLSBhL1VlZmlDcHVQa2cvUGlTbW1D cHVEeGVTbW0vWDY0L1BhZ2VUYmwuYw0KPiA+ID4gKysrIGIvVWVmaUNwdVBrZy9QaVNtbUNwdUR4 ZVNtbS9YNjQvUGFnZVRibC5jDQo+ID4gPiBAQCAtMjEsNyArMjEsNyBAQCBXSVRIT1VUIFdBUlJB TlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GDQo+ID4gQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNT IE9SIElNUExJRUQuDQo+ID4gPg0KPiA+ID4gIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICAg ICAgICAgIG1QYWdlUG9vbCA9IElOSVRJQUxJWkVfTElTVF9IRUFEX1ZBUklBQkxFDQo+ID4gKG1Q YWdlUG9vbCk7DQo+ID4gPiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbTFH UGFnZVRhYmxlU3VwcG9ydCA9IEZBTFNFOw0KPiA+ID4gLUJPT0xFQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1DcHVTbW1TdGF0aWNQYWdlVGFibGU7DQo+ID4gPiArZXh0ZXJuIEJPT0xF QU4gICAgICAgICAgICAgICAgICAgICAgbUNwdVNtbVN0YXRpY1BhZ2VUYWJsZTsNCj4gPg0KPiA+ ICg1KSBUaGlzIGlzIGdlbmVyYWxseSBub3QgZ3JlYXQgc3R5bGUsIGFuZCBpdCBjb25mbGljdHMg d2l0aCB0aGUNCj4gPiBleGlzdGVudCBjb2RlIG9mIHRoaXMgZHJpdmVyLiBOYW1lbHksIGRlY2xh cmF0aW9ucyBvZiB2YXJpYWJsZXMgd2l0aA0KPiA+IGZpbGUgc2NvcGUsIHN0YXRpYyBzdG9yYWdl IGR1cmF0aW9uLCBhbmQgZXh0ZXJuYWwgbGlua2FnZSwgc2hvdWxkIGdvDQo+ID4gaW50byAiUGlT bW1DcHVEeGVTbW0uaCItLSB3ZSBhbHJlYWR5IGdvdCBhIGJ1bmNoIG9mIHRoZW0gdGhlcmUuDQo+ ID4NCj4gPiBUaGFua3MNCj4gPiBMYXN6bG8NCj4gPg0KPiA+ID4NCj4gPiA+ICAvKioNCj4gPiA+ ICAgIERpc2FibGUgQ0VULg0KPiA+ID4NCg0K