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.126; helo=mga18.intel.com; envelope-from=jian.j.wang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (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 A5073211EA9E7 for ; Tue, 12 Jun 2018 01:44:46 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Jun 2018 01:44:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,213,1526367600"; d="scan'208";a="49203840" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga006.jf.intel.com with ESMTP; 12 Jun 2018 01:44:45 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 12 Jun 2018 01:44:45 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.51]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.82]) with mapi id 14.03.0319.002; Tue, 12 Jun 2018 16:44:43 +0800 From: "Wang, Jian J" To: Laszlo Ersek , "edk2-devel@lists.01.org" CC: "Ni, Ruiyu" , "Yao, Jiewen" , "Dong, Eric" , "Zeng, Star" Thread-Topic: [edk2] [PATCH 1/2] UefiCpuPkg/CpuDxe: allow accessing (DXE) page table in SMM mode Thread-Index: AQHUAVMeL2RB1sB9GkWja9060Lz8dqRac5uAgAFnGkD//+SYAIAAidWQ Date: Tue, 12 Jun 2018 08:44:43 +0000 Message-ID: References: <20180611070833.5440-1-jian.j.wang@intel.com> <20180611070833.5440-2-jian.j.wang@intel.com> <9bd67c0c-027f-ab42-3aba-5f90291d306e@redhat.com> In-Reply-To: <9bd67c0c-027f-ab42-3aba-5f90291d306e@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZTY5MDE3NDQtN2JiOS00ZTA2LTk3MjEtYTU4ZWUxMmM1ZDJhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiR3Nlb3lOS1JLUWtMZTV2RHBTVHNERUlUOE9kc01qXC9hZml2Q1BJSDRXb1ZLdk5rNDhaOTlaNExRTytUTk4zWUoifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.200.100 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 1/2] UefiCpuPkg/CpuDxe: allow accessing (DXE) page table in SMM mode X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Jun 2018 08:44:46 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvLA0KDQpSZWdhcmRzLA0KSmlhbg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gRnJvbTogTGFzemxvIEVyc2VrIFttYWlsdG86bGVyc2VrQHJlZGhhdC5jb21dDQo+ IFNlbnQ6IFR1ZXNkYXksIEp1bmUgMTIsIDIwMTggNDowNSBQTQ0KPiBUbzogV2FuZywgSmlhbiBK IDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzog TmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0Bp bnRlbC5jb20+OyBEb25nLA0KPiBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPjsgWmVuZywgU3Rh ciA8c3Rhci56ZW5nQGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggMS8y XSBVZWZpQ3B1UGtnL0NwdUR4ZTogYWxsb3cgYWNjZXNzaW5nIChEWEUpDQo+IHBhZ2UgdGFibGUg aW4gU01NIG1vZGUNCj4gDQo+IE9uIDA2LzEyLzE4IDA2OjMyLCBXYW5nLCBKaWFuIEogd3JvdGU6 DQo+ID4gSGkgTGFzemxvLA0KPiA+DQo+ID4gVGhhbmsgeW91IHZlcnkgbXVjaCBmb3Igc3VjaCB0 aG9yb3VnaCByZXZpZXcuIEknZCBsaWtlIHRvIGV4cGxhaW4gYSBiaXQgaW4NCj4gYWR2YW5jZS4N Cj4gPg0KPiA+IFB1dHRpbmcgYXNpZGUgdGhlIHNwZWNpZmljIGNvZGluZyBpc3N1ZXMgaW4gbXkg cGF0Y2gsIG9uZSB0aGluZyBpcyBjbGVhciB0aGF0DQo+IFNNTSBtb2RlDQo+ID4gaGFzIGl0cyBv d24gcGFnZSB0YWJsZS4gQ3B1RHhlIHNob3VsZCBub3QgdG91Y2ggaXQgZXZlbiBpZiBpdHMgcHVi bGljIGludGVyZmFjZSBpcw0KPiBjYWxsZWQNCj4gPiB2aWEgZ0JTIHNlcnZpY2VzLCBiZWNhdXNl IGl0IGhhcyBubyBrbm93bGVkZ2Ugb2YgU01NIGludGVybmFsIHRoaW5ncyBhbmQgaXQNCj4gbWln aHQNCj4gPiBqZW9wYXJkaXplIFNNTSBvcGVyYXRpb24gaWYgaXQgZG9lcy4gQnV0IGN1cnJlbnQg Q3B1RHhlIGRvZXNuJ3QgdGFrZSB0aGlzIGludG8NCj4gYWNjb3VudC4NCj4gDQo+IENhbiB5b3Ug ZXhwbGFpbiB0aGlzIGluIG1vcmUgZGV0YWlsPyBJIG1lYW4sIHdoZW4gQ3B1RHhlIHByb3RvY29s DQo+IG1lbWJlcnMgYXJlIGNhbGxlZCBvdXRzaWRlIG9mIFNNTSwgQ3B1RHhlIG9idmlvdXNseSBj YW4ndCBtZXNzIHdpdGggU01NDQo+IHBhZ2UgdGFibGVzLCBiZWNhdXNlIHRob3NlIGFyZSBsb2Nh dGVkIGluIFNNUkFNLCBhbmQgbm9uLVNNTSBjb2RlIGNhbm5vdA0KPiBhY2Nlc3MgU01SQU0gKGF0 IHRoYXQgcG9pbnQpLg0KPiANCj4gU28sIEkgdGhpbmsgeW91IG1lYW4gdGhhdCwgQ3B1RHhlIGN1 cnJlbnRseSBtb2RpZmllcyB3aGF0ZXZlciBwYWdlDQo+IHRhYmxlcyBhcmUgcG9pbnRlZC10byBi eSBDUjMsIGV2ZW4gaWYgQ3B1RHhlIHByb3RvY29sIG1lbWJlcnMgYXJlDQo+IChpbmRpcmVjdGx5 KSBpbnZva2VkIGZyb20gY29kZSB0aGF0IHJ1bnMgaW4gU01NLiBUaGlzIHJlc3VsdHMgaW4gQ3B1 RHhlDQo+IG1lc3Npbmcgd2l0aCBTTU0gcGFnZSB0YWJsZXMgdGhhdCB3ZXJlIG5vdCBtZWFudCBm b3IgQ3B1RHhlIHRvIG1vZGlmeS4NCj4gSXMgbXkgdW5kZXJzdGFuZGluZyBjb3JyZWN0Pw0KPiAN Cg0KWWVzLiBJIHdhcyBqdXN0IHRhbGtpbmcgYWJvdXQgU01NIG1vZGUuIENwdUR4ZSBjYW5ub3Qg dG91Y2ggU01NIHBhZ2UgdGFibGUNCmluIG5vbi1TTU0gbW9kZS4NCg0KPiA+IEkgdGhpbmsgaXQg c2hvdWxkIGJlIGZpeGVkIGFueXdheSwgZXZlbiB0aGVyZSdzIG5vIEhlYXAgR3VhcmQgZmVhdHVy ZSwNCj4gDQo+IE9LLCBpZiBteSBhYm92ZSBzdW1tYXJ5IGlzIGNvcnJlY3QsIHRoZW4gdGhpcyBt YWtlcyBzZW5zZSB0byBtZS4NCj4gDQoNClNvIHdlJ3JlIG9uZSB0aGUgc2FtZSBwYWdlLg0KDQo+ ID4gc2luY2UgY3VycmVudA0KPiA+IGRlc2lnbiBhbGxvd3MgU01NIHRvIHRvdWNoIG1lbW9yeSBv d25lZCBieSBEWEUgYnV0IG5vdCB2aWNlIHZlcnNhLg0KPiANCj4gUmlnaHQ7IGl0IGlzIHZhbGlk IGZvciBhIHRyYWRpdGlvbmFsIFNNTSBkcml2ZXIgdG8gYWxsb2NhdGUgYW5kIGZyZWUNCj4gYm90 aCBTTVJBTSBhbmQgRFhFIG1lbW9yeSBpbiBpdHMgZW50cnkgcG9pbnQgZnVuY3Rpb24uDQo+IA0K PiA+IFRoZSBiYXNpYyBpZGVhIG9mIHRoaXMgcGF0Y2ggaXMsIGlmIHdlIHdhbnQgdG8gYWNjZXNz IERYRSBwYWdlIHRhYmxlIGluIFNNTQ0KPiBtb2RlLCB3ZQ0KPiA+IGNhbm5vdCBkbyB0aGlzIHZp YSBDUjMgcmVnaXN0ZXIgKGl0IGhhcyBiZWVuIHJlbG9hZGVkIGJ5IFNNTSkgZGlyZWN0bHkgYnV0 IHZpYSBhDQo+IHN0b3JlZA0KPiA+IHZhbHVlIGluIGEgZ2xvYmFsLiBUaGlzIGlzIGZlYXNpYmxl IGJlY2F1c2UgcGFnZSB0YWJsZSBpcyBqdXN0IGEgY2h1bmsgb2Ygbm9ybWFsDQo+IG1lbW9yeS4N Cj4gPiBBbGwgd2UgbmVlZCBpcyBhbiBlbnRyeSBhZGRyZXNzIHBvaW50ZXIuIFdoZW4gZXhpdGlu ZyBTTU0gbW9kZSBiYWNrIHRvIERYRSwNCj4gdGhlDQo+ID4gdXBkYXRlZCBwYWdlIHRhYmxlIHdp bGwgdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkgb25jZSBDUjMgaXMgcmVzdG9yZWQgdG8gRFhFDQo+ IHZlcnNpb24uDQo+ID4gVGhhdCBtZWFucyB3ZSBjYW4gY2hhbmdlIERYRSBwYWdlIHRhYmxlIGF0 dHJpYnV0ZXMgZXZlbiBpbiBTTU0gbW9kZS4NCj4gDQo+IE1ha2VzIHNlbnNlLg0KPiANCj4gPiBQ bGVhc2Ugc2VlIG15IG90aGVyIHJlc3BvbnNlcyBiZWxvdy4NCj4gDQo+IE9LOg0KPiANCj4gW3Nu aXBdDQo+IA0KPiA+PiAoMikgQ2FuIHlvdSByZW1pbmQgbWUgaG93IHRoZSBTTU0gcGFnZSB0YWJs ZXMgbWFwIG5vbi1TTVJBTSBtZW1vcnk/DQo+ID4+DQo+ID4+IEJlY2F1c2UsIEkgYXNzdW1lIHRo YXQsIGFmdGVyIGEgRnJlZVBhZ2VzKCkgbGliYXJ5IEFQSSBjYWxsLCB0aGUgZnJlZWQNCj4gPj4g bWVtb3J5IHNob3VsZCBub3QgYmUgYWNjZXNzaWJsZSB0byBlaXRoZXIgU01NIGNvZGUgb3Igbm9y bWFsIERYRSBjb2RlLg0KPiA+PiBUaGlzIHNlZW1zIHRvIGltcGx5IHRoYXQgYm90aCBzZXRzIG9m IHBhZ2UgdGFibGVzIHNob3VsZCBiZSBtb2RpZmllZC4NCj4gPj4gV2hhdCBhbSBJIG1pc3Npbmc/ DQo+ID4+DQo+ID4NCj4gPiBGb3IgYm90aCBTTU0gYW5kIERYRSwgd2UganVzdCBkbyAxOjEgZnVs bCBtZW1vcnkgbWFwcGluZyBpbiBwYWdpbmcgYnV0IGluDQo+ID4gZGlmZmVyZW50IHBhZ2UgdGFi bGVzLiBBcyBmYXIgYXMgSSBrbm93LCB0aGVyZSdzIG5vIHN1Y2ggcnVsZXMgdGhhdCBmcmVlZCBw YWdlcw0KPiA+IHNob3VsZCBub3QgYmUgYWNjZXNzaWJsZS4gSSB0aGluayBpdCdzIGp1c3QgaW1w bGVtZW50YXRpb24gZGVwZW5kZW50Lg0KPiANCj4gTGV0J3MgYXNzdW1lIHdlIGhhdmUgYSBEWEUg cGFnZSBhbGxvY2F0aW9uLCB3aXRoIHRoZSBoZWFwIGd1YXJkIGVuYWJsZWQuDQo+IFRvIG15IHVu ZGVyc3RhbmRpbmcsIHRoZSBhbGxvY2F0ZWQgYXJlYSBpcyBwcmVjZWRlZCBhbmQgc3VjY2VlZGVk IGJ5IDENCj4gcGFnZSBvbiBlYWNoIGVuZCwgYW5kIGJvdGggb2YgdGhvc2UgcGFnZXMgYXJlIG1h cmtlZCBhcyBpbmFjY2Vzc2libGUsIHNvDQo+IHRoYXQgd2UgZ2V0IGEgcGFnZSBmYXVsdCBvbiBi dWZmZXIgb3ZlcmZsb3cgLyB1bmRlcmZsb3cuDQo+IA0KPiBCZWNhdXNlIHRyYWRpdGlvbmFsIFNN TSBkcml2ZXJzIGFyZSBhbGxvd2VkIHRvIHdvcmsgd2l0aCBEWEUgbWVtb3J5IGluDQo+IHRoZWly IGVudHJ5IHBvaW50IGZ1bmN0aW9ucywgSSAqYmVsaWV2ZSogKEknbSBub3Qgc3VyZSkgdGhhdCB0 aGUgZ3VhcmQNCj4gcGFnZXMgc2hvdWxkIGJlIG1hcmtlZCBhcyBpbmFjY2Vzc2libGUgaW4gYm90 aCB0aGUgRFhFIHBhZ2UgdGFibGVzIGFuZA0KPiBpbiB0aGUgU01NIHBhZ2UgdGFibGVzOyBzbyB0 aGF0IGJ1ZmZlciBvdmVyZmxvdy91bmRlcmZsb3cgdHJhcCBpbiBib3RoDQo+IG9wZXJhdGluZyBt b2Rlcy4gSXMgbXkgdW5kZXJzdGFuZGluZyBjb3JyZWN0Pw0KPiANCj4gRldJVywgSSBiYXNlZCBt eSBxdWVzdGlvbiBpbiAoMikgb24gdGhlIGFib3ZlIHVuZGVyc3RhZGluZyAtLSBpZiB0aGUNCj4g aGVhcCBndWFyZCBmZWF0dXJlIG1hcmtzIHRoZSBndWFyZCBwYWdlcyBpbmFjY2Vzc2libGUgZm9y IGJvdGggb3BlcmF0aW5nDQo+IG1vZGVzIGF0IGFsbG9jYXRpb24gdGltZSwgdGhlbiB3aGF0ZXZl ciBQVEUtbGV2ZWwgInVuZG8iIGlzIHBlcmZvcm1lZCBhdA0KPiBnQlMtPkZyZWVQYWdlcygpIHRp bWUsIHNob3VsZCBsaWtlbHkgYWxzbyBtb2RpZnkgYm90aCBzZXRzIG9mIHBhZ2UgdGFibGVzLg0K PiANCj4gT2YgY291cnNlLCBpZiB0aGUgRFhFIGhlYXAgZ3VhcmQgbW9kaWZpZXMgdGhlIFBURXMg Zm9yIHRoZSBndWFyZCBwYWdlcw0KPiBvbmx5IGluIHRoZSBEWEUgcGFnZSB0YWJsZXMsIGF0IGFs bG9jYXRpb24gdGltZSwgdGhlbiB0aGUgU01NIHBhZ2UNCj4gdGFibGVzIGFyZSBpcnJlbGV2YW50 IGF0IHJlbGVhc2UgdGltZSBhcyB3ZWxsLg0KPiANCg0KWW91J3JlIHJpZ2h0IGZyb20gdGhpcyBw ZXJzcGVjdGl2ZS4gQnV0IGl0IG1lYW5zIHdlIG5lZWQgdG8gbWVyZ2UgRFhFIHBhZ2UgdGFibGUN CmludG8gU01NIHBhZ2UgdGFibGUgZHVyaW5nIHN3aXRjaGluZyBpbnRvIFNNTSBtb2RlIGFuZCBz eW5jIGJhY2sgd2hlbiBleGl0aW5nLg0KV2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gbWFr ZSBzdXJlIFNNUkFNIHBhcnQgd29uJ3QgYmUgY2hhbmdlZCBpbmV4cGVydGx5Lg0KQ29uc2lkZXJp bmcgdGhlcmUncyBmZXcgY2hhbmNlcyB3ZSdsbCBmcmVlIERYRSBtZW1vcnkgaW4gU01NIG1vZGUs IEknbSBub3Qgc3VyZQ0KdGhpcyBpcyB3b3J0aHkgb2YgZG9pbmcgaW4gcHJhY3RpY2UsIG5vdCB0 byBtZW50aW9uIEhlYXAgR3VhcmQgaXMganVzdCBhIGRlYnVnIGZlYXR1cmUuDQpGdXJ0aGVybW9y ZSwgd2UgZG8gYSBsb3Qgb2Ygc2VjdXJpdHkgdGhpbmdzIGluIFNNTSBtb2RlLiBJJ20gd29uZGVy aW5nIGlmIHN1Y2ggDQpraW5kIG9mIGNoYW5nZSB3aWxsIGNvbXByb21pc2UgYW55IHNlY3VyaXR5 IHNjaGVtZS4gTWF5YmUgd2UgbmVlZCBtb3JlIHN0dWR5DQpvbiB0aGlzLg0KDQo+IFtzbmlwXQ0K PiANCj4gPj4+ICtCT09MRUFODQo+ID4+PiArSXNJblNtbSAoDQo+ID4+PiArICBWT0lEDQo+ID4+ PiArICApDQo+ID4+PiArew0KPiA+Pj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVz Ow0KPiA+Pj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgSW5TbW07DQo+ID4+PiArDQo+ID4+ PiArICBJblNtbSA9IEZBTFNFOw0KPiA+Pj4gKyAgaWYgKG1TbW1CYXNlMiA9PSBOVUxMKSB7DQo+ ID4+PiArICAgIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZpU21tQmFzZTJQcm90 b2NvbEd1aWQsIE5VTEwsDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChWT0lEICoqKSZtU21tQmFzZTIpOw0KPiA+Pg0KPiA+PiAoNykgSW5kZW50YXRpb24gaXMgaW5j b3JyZWN0Lg0KPiA+Pg0KPiA+DQo+ID4gSXQnbGwgYmUgZml4ZWQuDQo+ID4NCj4gPj4+ICsgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+Pj4gKyAgICAgIG1TbW1CYXNlMiA9IE5VTEw7 DQo+ID4+PiArICAgIH0NCj4gPj4NCj4gPj4gKDgpIEkgdGhpbmsgeW91IGNhbiBzaW1wbHkgZHJv cCB0aGUgRUZJX0VSUk9SIChTdGF0dXMpIGJyYW5jaDsNCj4gPj4gIm1TbW1CYXNlMiIgd2lsbCBz aW1wbHkgcmVtYWluIE5VTEwuDQo+IA0KPiBZb3UgZGlkbid0IGNvbW1lbnQgb24gdGhpczogZG8g eW91IGFncmVlLCBvciBpcyBpdCBuZWNlc3NhcnkgZm9yIHNvbWUNCj4gcmVhc29uIHRvIHJlLWFz c2lnbiBOVUxMIHRvIG1TbW1CYXNlMj8gKEZvciBleGFtcGxlLCBhIHN0YXRpYyBhbmFseXplcg0K PiBvciBhIGNvbXBpbGVyIGNvbXBsYWlucyBldGMuLi4pDQo+IA0KDQpTb3JyeSBJIG1pc3NlZCB0 aGlzIG9uZS4gSSBhZ3JlZSB3aXRoIHlvdS4gSSB0aGluayB0aGVyZSBzaG91bGQgbm8gc3RhdGlj IGFuYWx5emVyDQppc3N1ZSBoZXJlLg0KDQo+IFtzbmlwXQ0KPiANCj4gPj4+IEBAIC01MDcsNyAr NTM3LDEwIEBAIElzUmVhZE9ubHlQYWdlV3JpdGVQcm90ZWN0ZWQgKA0KPiA+Pj4gICAgVk9JRA0K PiA+Pj4gICAgKQ0KPiA+Pj4gIHsNCj4gPj4+IC0gIHJldHVybiAoKEFzbVJlYWRDcjAgKCkgJiBC SVQxNikgIT0gMCk7DQo+ID4+PiArICBpZiAoIUlzSW5TbW0gKCkpIHsNCj4gPj4+ICsgICAgcmV0 dXJuICgoQXNtUmVhZENyMCAoKSAmIEJJVDE2KSAhPSAwKTsNCj4gPj4+ICsgIH0NCj4gPj4+ICsg IHJldHVybiBGQUxTRTsNCj4gPj4+ICB9DQo+ID4+Pg0KPiA+Pj4gIC8qKg0KPiA+Pj4gQEAgLTUx OCw3ICs1NTEsOSBAQCBEaXNhYmxlUmVhZE9ubHlQYWdlV3JpdGVQcm90ZWN0ICgNCj4gPj4+ICAg IFZPSUQNCj4gPj4+ICAgICkNCj4gPj4+ICB7DQo+ID4+PiAtICBBc21Xcml0ZUNyMCAoQXNtUmVh ZENyMCgpICYgfkJJVDE2KTsNCj4gPj4+ICsgIGlmICghSXNJblNtbSAoKSkgew0KPiA+Pj4gKyAg ICBBc21Xcml0ZUNyMCAoQXNtUmVhZENyMCAoKSAmIH5CSVQxNik7DQo+ID4+PiArICB9DQo+ID4+ PiAgfQ0KPiA+Pj4NCj4gPj4+ICAvKioNCj4gPj4+IEBAIC01MjksNyArNTY0LDkgQEAgRW5hYmxl UmVhZE9ubHlQYWdlV3JpdGVQcm90ZWN0ICgNCj4gPj4+ICAgIFZPSUQNCj4gPj4+ICAgICkNCj4g Pj4+ICB7DQo+ID4+PiAtICBBc21Xcml0ZUNyMCAoQXNtUmVhZENyMCgpIHwgQklUMTYpOw0KPiA+ Pj4gKyAgaWYgKCFJc0luU21tICgpKSB7DQo+ID4+PiArICAgIEFzbVdyaXRlQ3IwIChBc21SZWFk Q3IwICgpIHwgQklUMTYpOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gIH0NCj4gPj4NCj4gPj4gKDExKSBJ IGRvbid0IHVuZGVyc3RhbmQgdGhlc2UgY2hhbmdlcyBhdCBhbGwuIFdoeSBhcmUgdGhlc2UgZnVu Y3Rpb25zDQo+ID4+IG5vLW9wcyB3aGVuIENwdUR4ZSBpcyBpbnZva2VkIGluIE1hbmFnZW1lbnQg TW9kZT8NCj4gPj4NCj4gPg0KPiA+IENSMC5CSVQxNiBpcyB1c2VkIHRvIHByb3RlY3QgY3VycmVu dCAoYWN0aXZlKSBwYWdlIHRhYmxlLg0KPiANCj4gVGhlIFNETSB3cml0ZXMsDQo+IA0KPiAgICAg V3JpdGUgUHJvdGVjdCAoYml0IDE2IG9mIENSMCkgwpcgV2hlbiBzZXQsIGluaGliaXRzIHN1cGVy dmlzb3ItbGV2ZWwNCj4gICAgIHByb2NlZHVyZXMgZnJvbSB3cml0aW5nIGludG8gcmVhZC1vbmx5 IHBhZ2VzOyB3aGVuIGNsZWFyLCBhbGxvd3MNCj4gICAgIHN1cGVydmlzb3ItbGV2ZWwgcHJvY2Vk dXJlcyB0byB3cml0ZSBpbnRvIHJlYWQtb25seSBwYWdlcw0KPiAgICAgKHJlZ2FyZGxlc3Mgb2Yg dGhlIFUvUyBiaXQgc2V0dGluZzsgc2VlIFNlY3Rpb24gNC4xLjMgYW5kIFNlY3Rpb24NCj4gICAg IDQuNikuIFRoaXMgZmxhZyBmYWNpbGl0YXRlcyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29weS1v bi13cml0ZQ0KPiAgICAgbWV0aG9kIG9mIGNyZWF0aW5nIGEgbmV3IHByb2Nlc3MgKGZvcmtpbmcp IHVzZWQgYnkgb3BlcmF0aW5nIHN5c3RlbXMNCj4gICAgIHN1Y2ggYXMgVU5JWC4NCj4gDQo+IEZp cnN0LCBJIHRoaW5rIHdlIHNob3VsZCB1c2UgYSBtYWNybyBmb3IgIndyaXRlIHByb3RlY3QiIHRo YXQgaXMgbW9yZQ0KPiB0ZWxsaW5nIHRoYW4ganVzdCBCSVQxNi4gV2UgaGF2ZSAiQ1IwX1dQIiBp biBib3RoDQo+IC0gTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9YNjQvVmlydHVhbE1lbW9y eS5oDQo+IC0gVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9QaVNtbUNwdUR4ZVNtbS5oDQo+IA0K PiBzbyBtYXliZSB3ZSBzaG91bGQgbW92ZSB0aGF0IHRvIHNvbWUgSW5kdXN0cnlTdGFuZGFyZCBo ZWFkZXIuIFNob3VsZCBiZQ0KPiBhIHNlcGFyYXRlIHBhdGNoIC8gQlogYW55d2F5Lg0KPiANCj4g U2Vjb25kLCBmcm9tIGxvb2tpbmcgYXQgdGhlIENwdUR4ZSBjb2RlLCBpdCBzZWVtcyBsaWtlIHdl IG1hcCB0aGUgRFhFDQo+IHBhZ2UgdGFibGVzIHIvbyBtb3N0IG9mIHRoZSB0aW1lIChpbiB0aGUg RFhFIHBhZ2UgdGFibGVzIHRoZW1zZWx2ZXMpLA0KPiByZWdhcmRsZXNzIG9mIHZhcmlvdXMgc2Vj dXJpdHkgUENEcy4gQW5kIHRoZSBXUCBiaXQgbWFrZXMgdGhhdCBtYXBwaW5nDQo+IGVmZmVjdGl2 ZS4gSXMgdGhhdCBjb3JyZWN0Pw0KPiANCj4gSW4gdHVybiwgYXJlIHRoZSBEWEUgcGFnZSB0YWJs ZXMgbWFwcGVkIHIvdyBpbiB0aGUgU01NIHBhZ2UgdGFibGVzPw0KPiBCZWNhdXNlLCBpZiB0aGV5 IGFyZSwgdGhlbiBJIHRoaW5rIENSMC5XUCBtYWtlcyBubyBkaWZmZXJlbmNlIGluIFNNTSwNCj4g Zm9yIGFjY2Vzc2luZyB0aGUgRFhFIHBhZ2UgdGFibGVzLiBJbiB0aGF0IGNhc2UsIEkgYWdyZWUg d2UgaGFkIGJldHRlcg0KPiBub3QgdG91Y2ggQ1IwIHdoZW4gdGhlIENwdUR4ZSBjb2RlIGV4ZWN1 dGVzIGluIFNNTS4NCj4gDQoNCkkgYWdyZWUgdXNpbmcgQ1IwX1dQIGlzIGJldHRlci4gSSdsbCBj aGFuZ2UgaXQgaW4gdjIuDQpBbmQgU01NIHBhZ2UgdGFibGVzIGRvZXNuJ3QgdGFrZSBjYXJlIG9m IERYRSBwYWdlIHRhYmxlcy4gU28gaW4gU01NIG1vZGUsDQpEWEUgcGFnZSB0YWJsZXMgYXJlIG5v dCBwcm90ZWN0ZWQuIEJ1dCBzdGlsbCwgaXQnZCBiZSBiZXR0ZXIgbm90IHRvIHRvdWNoIFNNTQ0K cGFnaW5nIHNldHRpbmdzIGluIG5vbi1TTU0gY29kZS4NCg0KPiA+IEluIENwdUR4ZSwgd2Ugc2hv dWxkDQo+ID4gbm90IHRvdWNoIFNNTSBwYWdlIHRhYmxlIGlmIGluIFNNTSBtb2RlLiBBbHRob3Vn aCBpdCBsb29rcyBsaWtlIHRoZXJlJ3Mgbm8NCj4gPiBwcm9ibGVtIHRvIHNldCB0aGlzIGJpdCBh bnl3YXkgYmVjYXVzZSB3ZSBqdXN0IHdhbnQgdG8gYWNjZXNzIERYRSBwYWdlIHRhYmxlLA0KPiA+ IEkgZG9uJ3Qgd2FudCB0byByaXNrIHRvIGV4cG9zZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBoZXJl LiBTbyBJIHRoaW5rIGl0IG1heSBiZQ0KPiBzYWZlcg0KPiA+IG5vdCB0byB0b3VjaCBhbnkgU01N IHBhZ2luZyBzZXR0aW5ncyBmcm9tIG5vbi1TTU0gY29kZS4NCj4gDQo+IE9LIC0tIHBsZWFzZSBh ZGQgYSAqbG90KiBvZiBjb21tZW50cyB0byB0aGUgY29kZSBhYm91dCB0aGlzLiA6KQ0KPiANCg0K U3VyZS4NCg0KPiBUaGFua3MhDQo+IExhc3psbw0K