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.100; helo=mga07.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (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 003F62116370E for ; Wed, 13 Jun 2018 19:02:04 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Jun 2018 19:02:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,220,1526367600"; d="scan'208";a="66838834" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga002.jf.intel.com with ESMTP; 13 Jun 2018 19:02:03 -0700 Received: from fmsmsx124.amr.corp.intel.com (10.18.125.39) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 13 Jun 2018 19:02:02 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx124.amr.corp.intel.com (10.18.125.39) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 13 Jun 2018 19:02:02 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.223]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.116]) with mapi id 14.03.0319.002; Thu, 14 Jun 2018 10:02:00 +0800 From: "Dong, Eric" To: "Wang, Jian J" , Laszlo Ersek , "edk2-devel@lists.01.org" CC: "Ni, Ruiyu" , "Yao, Jiewen" Thread-Topic: [edk2] [PATCH v2 1/2] UefiCpuPkg/CpuDxe: allow accessing (DXE) page table in SMM mode Thread-Index: AQHUAthXo9qRdxV14kiO0Tnmhff3SKRdxXAAgAChJACAAJsTkA== Date: Thu, 14 Jun 2018 02:01:59 +0000 Message-ID: References: <20180613053501.4604-1-jian.j.wang@intel.com> <20180613053501.4604-2-jian.j.wang@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v2 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: Thu, 14 Jun 2018 02:02:05 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UmV2aWV3ZWQtYnk6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCg0KLS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IFdhbmcsIEppYW4gSiANClNlbnQ6IFRodXJzZGF5LCBK dW5lIDE0LCAyMDE4IDg6NDcgQU0NClRvOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29t PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCkNjOiBOaSwgUnVpeXUgPHJ1aXl1Lm5pQGludGVs LmNvbT47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IERvbmcsIEVyaWMgPGVy aWMuZG9uZ0BpbnRlbC5jb20+DQpTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCB2MiAxLzJdIFVl ZmlDcHVQa2cvQ3B1RHhlOiBhbGxvdyBhY2Nlc3NpbmcgKERYRSkgcGFnZSB0YWJsZSBpbiBTTU0g bW9kZQ0KDQpIaSBMYXN6bG8sDQoNClJlZ2FyZHMsDQpKaWFuDQoNCj4gLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj4gRnJvbTogTGFzemxvIEVyc2VrIFttYWlsdG86bGVyc2VrQHJlZGhhdC5j b21dDQo+IFNlbnQ6IFdlZG5lc2RheSwgSnVuZSAxMywgMjAxOCAxMToxMCBQTQ0KPiBUbzogV2Fu ZywgSmlhbiBKIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9y Zw0KPiBDYzogTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+OyBZYW8sIEppZXdlbiANCj4g PGppZXdlbi55YW9AaW50ZWwuY29tPjsgRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT4N Cj4gU3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggdjIgMS8yXSBVZWZpQ3B1UGtnL0NwdUR4ZTog YWxsb3cgYWNjZXNzaW5nIA0KPiAoRFhFKSBwYWdlIHRhYmxlIGluIFNNTSBtb2RlDQo+IA0KPiBI aSBKaWFuLA0KPiANCj4gSSBoYXZlIHRocmVlIGNvbW1lbnRzOg0KPiANCj4gT24gMDYvMTMvMTgg MDc6MzUsIEppYW4gSiBXYW5nIHdyb3RlOg0KPiA+PiB2MjoNCj4gPj4gICBhLiBhZGQgbW9yZSBz cGVjaWZpYyBleHBsYW5hdGlvbnMgaW4gY29tbWl0IG1lc3NhZ2UNCj4gPj4gICBiLiBhZGQgbW9y ZSBjb21tZW50cyBpbiBjb2RlDQo+ID4+ICAgYy4gcmVtb3ZlIHJlZHVuZGFudCBsb2dpYyBpbiBJ c0luU21tKCkNCj4gPj4gICBkLiBmaXggYSBsb2dpYyBob2xlIGluIEdldEN1cnJlbnRQYWdpbmdD b250ZXh0KCkNCj4gPj4gICBlLiByZXBsYWNlIG1lYW5sZXNzIGNvbnN0YW50IG1hY3JvIHdpdGgg bWVhbmluZyBvbmVzDQo+ID4NCj4gPiBUaGUgTWRlUGtnL0xpYnJhcnkvU21tTWVtb3J5QWxsb2Nh dGlvbkxpYiwgdXNlZCBvbmx5IGJ5DQo+IERYRV9TTU1fRFJJVkVSLA0KPiA+IGFsbG93cyB0byBm cmVlIG1lbW9yeSBhbGxvY2F0ZWQgaW4gRFhFIChiZWZvcmUgRW5kT2ZEeGUpLiBUaGlzIGlzIA0K PiA+IGRvbmUgYnkgY2hlY2tpbmcgdGhlIG1lbW9yeSByYW5nZSBhbmQgY2FsbGluZyBnQlMgc2Vy dmljZXMgdG8gZG8gDQo+ID4gcmVhbCBvcGVyYXRpb24gaWYgdGhlIG1lbW9yeSB0byBmcmVlIGlz IG91dCBvZiBTTVJBTS4gSWYgc29tZSBtZW1vcnkgDQo+ID4gcmVsYXRlZCBmZWF0dXJlcywgbGlr ZSBIZWFwIEd1YXJkLCBhcmUgZW5hYmxlZCwgZ0JTIGludGVyZmFjZSB3aWxsIA0KPiA+IHR1cm4g dG8gRUZJX0NQVV9BUkNIX1BST1RPQ09MLlNldE1lbW9yeUF0dHJpYnV0ZXMoKSwgcHJvdmlkZWQg YnkgRFhFIA0KPiA+IGRyaXZlciBVZWZpQ3B1UGtnL0NwdUR4ZSwgdG8gY2hhbmdlIG1lbW9yeSBw YWdpbmcgYXR0cmlidXRlcy4gVGhpcyANCj4gPiBtZWFucyB3ZSBoYXZlIHBhcnQgb2YgRFhFIGNv ZGUgcnVubmluZyBpbiBTTU0gbW9kZSBpbiBjZXJ0YWluIA0KPiA+IGNpcmN1bXN0YW5jZXMuDQo+ ID4NCj4gPiBCZWNhdXNlIHBhZ2UgdGFibGUgaW4gU01NIG1vZGUgaXMgZGlmZmVyZW50IGZyb20g RFhFIG1vZGUgYW5kIENwdUR4ZSANCj4gPiBhbHdheXMgdXNlcyBjdXJyZW50IHJlZ2lzdGVycyAo Q1IwLCBDUjMsIGV0Yy4pIHRvIGdldCBtZW1vcnkgcGFnaW5nIA0KPiA+IGF0dHJpYnV0ZXMsIGl0 IGNhbm5vdCBnZXQgdGhlIGNvcnJlY3QgYXR0cmlidXRlcyBvZiBEWEUgbWVtb3J5IGluIA0KPiA+ IFNNTSBtb2RlIGZyb20gU01NIHBhZ2UgdGFibGUuIFRoaXMgd2lsbCBjYXVzZSBpbmNvcnJlY3Qg bWVtb3J5IA0KPiA+IG1hbmlwdWxhdGlvbnMsIGxpa2UgZmFpbCB0aGUgcmVsZWFzaW5nIG9mIEd1 YXJkIHBhZ2VzIGlmIEhlYXAgR3VhcmQgaXMgZW5hYmxlZC4NCj4gPg0KPiA+IFRoZSBzb2x1dGlv biBpbiB0aGlzIHBhdGNoIGlzIHRvIHN0b3JlIHRoZSBEWEUgcGFnZSB0YWJsZSANCj4gPiBpbmZv cm1hdGlvbiAoZS5nLiB2YWx1ZSBvZiBDUjAsIENSMyByZWdpc3RlcnMsIGV0Yy4pIGluIGEgZ2xv YmFsIA0KPiA+IHZhcmlhYmxlIG9mIENwdUR4ZSBkcml2ZXIuIElmIENwdUR4ZSBkZXRlY3RzIGl0 J3MgaW4gU01NIG1vZGUsIGl0IA0KPiA+IHdpbGwgdXNlIHRoaXMgZ2xvYmFsIHZhcmlhYmxlIHRv IGFjY2VzcyBwYWdlIHRhYmxlIGluc3RlYWQgb2YgY3VycmVudCBwcm9jZXNzb3IgcmVnaXN0ZXJz Lg0KPiA+IFRoaXMgY2FuIGF2b2lkIHJldHJpZXZpbmcgd3JvbmcgRFhFIG1lbW9yeSBwYWdpbmcg YXR0cmlidXRlcyBhbmQgDQo+ID4gY2hhbmdpbmcgU01NIHBhZ2UgdGFibGUgYXR0cmlidXRlcyB1 bmV4cGVjdGVkbHkuDQo+ID4NCj4gPiBDYzogRXJpYyBEb25nIDxlcmljLmRvbmdAaW50ZWwuY29t Pg0KPiA+IENjOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiA+IENjOiBKaWV3 ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NCj4gPiBDYzogUnVpeXUgTmkgPHJ1aXl1Lm5p QGludGVsLmNvbT4NCj4gPiBDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlv biBBZ3JlZW1lbnQgMS4xDQo+ID4gU2lnbmVkLW9mZi1ieTogSmlhbiBKIFdhbmcgPGppYW4uai53 YW5nQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgVWVmaUNwdVBrZy9DcHVEeGUvQ3B1RHhlLmlu ZiAgICAgfCAgIDEgKw0KPiA+ICBVZWZpQ3B1UGtnL0NwdUR4ZS9DcHVQYWdlVGFibGUuYyB8IDE1 OQ0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0NCj4gPiAgMiBmaWxl cyBjaGFuZ2VkLCAxMjMgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBk aWZmIC0tZ2l0IGEvVWVmaUNwdVBrZy9DcHVEeGUvQ3B1RHhlLmluZiANCj4gPiBiL1VlZmlDcHVQ a2cvQ3B1RHhlL0NwdUR4ZS5pbmYgaW5kZXggM2M5MzhjZWU1My4uY2UyYmQzNjI3YyAxMDA2NDQN Cj4gPiAtLS0gYS9VZWZpQ3B1UGtnL0NwdUR4ZS9DcHVEeGUuaW5mDQo+ID4gKysrIGIvVWVmaUNw dVBrZy9DcHVEeGUvQ3B1RHhlLmluZg0KPiA+IEBAIC02Niw2ICs2Niw3IEBADQo+ID4gIFtQcm90 b2NvbHNdDQo+ID4gICAgZ0VmaUNwdUFyY2hQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAg ICAgICMjIFBST0RVQ0VTDQo+ID4gICAgZ0VmaU1wU2VydmljZVByb3RvY29sR3VpZCAgICAgICAg ICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+ID4gKyAgZ0VmaVNtbUJhc2UyUHJvdG9jb2xHdWlk ICAgICAgICAgICAgICAgICAgICAgICMjIENPTlNVTUVTDQo+IA0KPiAoMSkgSW4gbXkgdjEgcmV2 aWV3LCBJIHN1Z2dlc3RlZCAiU09NRVRJTUVTX0NPTlNVTUVTIiBmb3IgdGhpcyBoaW50Lg0KPiAN Cj4gQW5kIHRoYXQncyBiZWNhdXNlIENwdUR4ZSBjYW4gYmUgaW5jbHVkZWQgaW4gcGxhdGZvcm0g YnVpbGRzIHRoYXQgDQo+IGRvbid0IGluY2x1ZGUgdGhlIFNNTSBkcml2ZXIgc3RhY2sgYXQgYWxs OyBpbiB0aGF0IGNhc2UsIA0KPiBnRWZpU21tQmFzZTJQcm90b2NvbEd1aWQgd2lsbCBub3QgYmUg YXZhaWxhYmxlIGFuZCB3aWxsIG5vdCBiZSBjb25zdW1lZC4NCj4gSW4gb3RoZXIgd29yZHMsIHdl IGNhbm5vdCBzYXkgdGhhdCB0aGUgcHJvdG9jb2wgaXMgYWx3YXlzIGNvbnN1bWVkLg0KPiANCg0K TWFrZSBzZW5zZS4NCg0KPiA+DQo+ID4gIFtHdWlkc10NCj4gPiAgICBnSWRsZUxvb3BFdmVudEd1 aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMgICAgICAgICAgICMjIEV2 ZW50DQo+ID4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvQ3B1RHhlL0NwdVBhZ2VUYWJsZS5jDQo+ IGIvVWVmaUNwdVBrZy9DcHVEeGUvQ3B1UGFnZVRhYmxlLmMNCj4gPiBpbmRleCBlMjU5NWI0ZDg5 Li5iN2U3NTkyMmI2IDEwMDY0NA0KPiA+IC0tLSBhL1VlZmlDcHVQa2cvQ3B1RHhlL0NwdVBhZ2VU YWJsZS5jDQo+ID4gKysrIGIvVWVmaUNwdVBrZy9DcHVEeGUvQ3B1UGFnZVRhYmxlLmMNCj4gPiBA QCAtMjMsMTAgKzIzLDIxIEBADQo+ID4gICNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ ID4gICNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPiA+ICAj aW5jbHVkZSA8UHJvdG9jb2wvTXBTZXJ2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxQcm90b2NvbC9T bW1CYXNlMi5oPg0KPiA+ICsjaW5jbHVkZSA8UmVnaXN0ZXIvQ3B1aWQuaD4NCj4gPiArI2luY2x1 ZGUgPFJlZ2lzdGVyL01zci5oPg0KPiA+DQo+ID4gICNpbmNsdWRlICJDcHVEeGUuaCINCj4gPiAg I2luY2x1ZGUgIkNwdVBhZ2VUYWJsZS5oIg0KPiA+DQo+ID4gKy8vLw0KPiA+ICsvLy8gUGFnaW5n IHJlZ2lzdGVycw0KPiA+ICsvLy8NCj4gPiArI2RlZmluZSBDUjBfV1AgICAgICAgICAgICAgICAg ICAgICAgQklUMTYNCj4gPiArI2RlZmluZSBDUjBfUEcgICAgICAgICAgICAgICAgICAgICAgQklU MzENCj4gPiArI2RlZmluZSBDUjRfUFNFICAgICAgICAgICAgICAgICAgICAgQklUNA0KPiA+ICsj ZGVmaW5lIENSNF9QQUUgICAgICAgICAgICAgICAgICAgICBCSVQ1DQo+IA0KPiAoMmEpIEkgdGhp bmsgdGhlIEJJVHh4IC0+IENSeF94eCBtYWNybyByZXBsYWNlbWVudHMgc2hvdWxkIGhhdmUgYmVl biANCj4gc3BsaXQgdG8gYSBzZXBhcmF0ZSBwYXRjaC4NCj4gDQoNClN1cmUuDQoNCj4gPiArDQo+ ID4gIC8vLw0KPiA+ICAvLy8gUGFnZSBUYWJsZSBFbnRyeQ0KPiA+ICAvLy8NCj4gPiBAQCAtODcs NyArOTgsNDYgQEAgUEFHRV9BVFRSSUJVVEVfVEFCTEUgbVBhZ2VBdHRyaWJ1dGVUYWJsZVtdID0g ew0KPiA+ICAgIHtQYWdlMUcsICBTSVpFXzFHQiwgUEFHSU5HXzFHX0FERFJFU1NfTUFTS182NH0s ICB9Ow0KPiA+DQo+ID4gLVBBR0VfVEFCTEVfUE9PTCAgICptUGFnZVRhYmxlUG9vbCA9IE5VTEw7 DQo+ID4gK1BBR0VfVEFCTEVfUE9PTCAgICAgICAgICAgICAgICAgICAqbVBhZ2VUYWJsZVBvb2wg PSBOVUxMOw0KPiA+ICtQQUdFX1RBQkxFX0xJQl9QQUdJTkdfQ09OVEVYVCAgICAgbVBhZ2luZ0Nv bnRleHQ7DQo+ID4gK0VGSV9TTU1fQkFTRTJfUFJPVE9DT0wgICAgICAgICAgICAqbVNtbUJhc2Uy ID0gTlVMTDsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgQ2hlY2sgaWYgY3VycmVudCBleGVjdXRp b24gZW52aXJvbm1lbnQgaXMgaW4gU01NIG1vZGUgb3Igbm90LCB2aWEgIA0KPiA+ICtFRklfU01N X0JBU0UyX1BST1RPQ09MLg0KPiA+ICsNCj4gPiArIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ug b2YgdGhlIGZhY3QgdGhhdA0KPiBNZGVQa2dcTGlicmFyeVxTbW1NZW1vcnlBbGxvY2F0aW9uTGli DQo+ID4gKyBzdXBwb3J0cyB0byBmcmVlIG1lbW9yeSBvdXRzaWRlIFNNUkFNLiBUaGUgbGlicmFy eSB3aWxsIGNhbGwgDQo+ID4gKyBnQlMtPkZyZWVQb29sKCkNCj4gb3INCj4gPiArIGdCUy0+RnJl ZVBhZ2VzKCkgYW5kIHRoZW4gU2V0TWVtb3J5U3BhY2VBdHRyaWJ1dGVzIGludGVyZmFjZSBpbiAN Cj4gPiArIGdCUy0+dHVybiB0bw0KPiBjaGFuZ2UNCj4gPiArIG1lbW9yeSBwYWdpbmcgYXR0cmli dXRlcyBkdXJpbmcgZnJlZSBvcGVyYXRpb24sIGlmIHNvbWUgbWVtb3J5IA0KPiA+ICsgcmVsYXRl ZA0KPiBmZWF0dXJlcw0KPiA+ICsgYXJlIGVuYWJsZWQgKGxpa2UgSGVhcCBHdWFyZCkuDQo+ID4g Kw0KPiA+ICsgVGhpcyBtZWFucyB0aGF0IFNldE1lbW9yeVNwYWNlQXR0cmlidXRlcygpIGhhcyBj aGFuY2UgdG8gcnVuIGluIA0KPiA+ICsgU01NDQo+IG1vZGUuIFRoaXMNCj4gPiArIHdpbGwgY2F1 c2UgaW5jb3JyZWN0IHJlc3VsdCBiZWNhdXNlIFNNTSBtb2RlIGFsd2F5cyBsb2FkcyBpdHMgb3du IA0KPiA+ICsgcGFnZQ0KPiB0YWJsZXMsDQo+ID4gKyB3aGljaCBhcmUgdXN1YWxseSBkaWZmZXJl bnQgZnJvbSBEWEUuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gDQo+ID4gKyBkZXRlY3QN Cj4gc3VjaA0KPiA+ICsgc2l0dWF0aW9uIGFuZCBoZWxwIHRvIGF2b2lkIGZ1cnRoZXIgbWlzb3Bl cmF0aW9ucy4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgIEluIFNNTSBtb2RlLg0KPiA+ ICsgIEByZXR2YWwgRkFMU0UgICBOb3QgaW4gU01NIG1vZGUuDQo+ID4gKyoqLw0KPiA+ICtCT09M RUFODQo+ID4gK0lzSW5TbW0gKA0KPiA+ICsgIFZPSUQNCj4gPiArICApDQo+ID4gK3sNCj4gPiAr ICBCT09MRUFOICAgICAgICAgICAgICAgICBJblNtbTsNCj4gPiArDQo+ID4gKyAgSW5TbW0gPSBG QUxTRTsNCj4gPiArICBpZiAobVNtbUJhc2UyID09IE5VTEwpIHsNCj4gPiArICAgIGdCUy0+TG9j YXRlUHJvdG9jb2wgKCZnRWZpU21tQmFzZTJQcm90b2NvbEd1aWQsIE5VTEwsIChWT0lEDQo+ICoq KSZtU21tQmFzZTIpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKG1TbW1CYXNlMiAhPSBO VUxMKSB7DQo+ID4gKyAgICBtU21tQmFzZTItPkluU21tIChtU21tQmFzZTIsICZJblNtbSk7ICB9 DQo+ID4gKw0KPiA+ICsgIHJldHVybiBJblNtbTsNCj4gPiArfQ0KPiA+DQo+ID4gIC8qKg0KPiA+ ICAgIFJldHVybiBjdXJyZW50IHBhZ2luZyBjb250ZXh0Lg0KPiA+IEBAIC05OSw0NSArMTQ5LDYx IEBAIEdldEN1cnJlbnRQYWdpbmdDb250ZXh0ICgNCj4gPiAgICBJTiBPVVQgUEFHRV9UQUJMRV9M SUJfUEFHSU5HX0NPTlRFWFQgICAgICpQYWdpbmdDb250ZXh0DQo+ID4gICAgKQ0KPiA+ICB7DQo+ ID4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0VheDsNCj4gPiAtICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICAgUmVnRWR4Ow0KPiA+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnRWF4Ow0KPiA+ICsgIENQVUlEX0VYVEVOREVEX0NQVV9TSUdf RURYICAgICAgUmVnRWR4Ow0KPiA+ICsgIE1TUl9JQTMyX0VGRVJfUkVHSVNURVIgICAgICAgICAg TXNyRWZlcjsNCj4gPg0KPiA+IC0gIFplcm9NZW0oUGFnaW5nQ29udGV4dCwgc2l6ZW9mKCpQYWdp bmdDb250ZXh0KSk7DQo+ID4gLSAgaWYgKHNpemVvZihVSU5UTikgPT0gc2l6ZW9mKFVJTlQ2NCkp IHsNCj4gPiAtICAgIFBhZ2luZ0NvbnRleHQtPk1hY2hpbmVUeXBlID0gSU1BR0VfRklMRV9NQUNI SU5FX1g2NDsNCj4gPiAtICB9IGVsc2Ugew0KPiA+IC0gICAgUGFnaW5nQ29udGV4dC0+TWFjaGlu ZVR5cGUgPSBJTUFHRV9GSUxFX01BQ0hJTkVfSTM4NjsNCj4gPiAtICB9DQo+ID4gLSAgaWYgKChB c21SZWFkQ3IwICgpICYgQklUMzEpICE9IDApIHsNCj4gPiAtICAgIFBhZ2luZ0NvbnRleHQtPkNv bnRleHREYXRhLlg2NC5QYWdlVGFibGVCYXNlID0gKEFzbVJlYWRDcjMgKCkgJg0KPiBQQUdJTkdf NEtfQUREUkVTU19NQVNLXzY0KTsNCj4gPiAtICB9IGVsc2Ugew0KPiA+IC0gICAgUGFnaW5nQ29u dGV4dC0+Q29udGV4dERhdGEuWDY0LlBhZ2VUYWJsZUJhc2UgPSAwOw0KPiA+IC0gIH0NCj4gPiAr ICAvLw0KPiA+ICsgIC8vIERvbid0IHJldHJpZXZlIGN1cnJlbnQgcGFnaW5nIGNvbnRleHQgZnJv bSBwcm9jZXNzb3IgaWYgaW4gU01NIG1vZGUuDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoIUlzSW5T bW0gKCkpIHsNCj4gPiArICAgIFplcm9NZW0gKCZtUGFnaW5nQ29udGV4dCwgc2l6ZW9mKG1QYWdp bmdDb250ZXh0KSk7DQo+ID4NCj4gPiAtICBpZiAoKEFzbVJlYWRDcjQgKCkgJiBCSVQ0KSAhPSAw KSB7DQo+ID4gLSAgICBQYWdpbmdDb250ZXh0LT5Db250ZXh0RGF0YS5JYTMyLkF0dHJpYnV0ZXMg fD0NCj4gUEFHRV9UQUJMRV9MSUJfUEFHSU5HX0NPTlRFWFRfSUEzMl9YNjRfQVRUUklCVVRFU19Q U0U7DQo+ID4gLSAgfQ0KPiA+IC0gIGlmICgoQXNtUmVhZENyNCAoKSAmIEJJVDUpICE9IDApIHsN Cj4gPiAtICAgIFBhZ2luZ0NvbnRleHQtPkNvbnRleHREYXRhLklhMzIuQXR0cmlidXRlcyB8PQ0K PiBQQUdFX1RBQkxFX0xJQl9QQUdJTkdfQ09OVEVYVF9JQTMyX1g2NF9BVFRSSUJVVEVTX1BBRTsN Cj4gPiAtICB9DQo+ID4gLSAgaWYgKChBc21SZWFkQ3IwICgpICYgQklUMTYpICE9IDApIHsNCj4g PiAtICAgIFBhZ2luZ0NvbnRleHQtPkNvbnRleHREYXRhLklhMzIuQXR0cmlidXRlcyB8PQ0KPiBQ QUdFX1RBQkxFX0xJQl9QQUdJTkdfQ09OVEVYVF9JQTMyX1g2NF9BVFRSSUJVVEVTX1dQX0VOQUJM RTsNCj4gPiAtICB9DQo+ID4gKyAgICBpZiAoc2l6ZW9mKFVJTlROKSA9PSBzaXplb2YoVUlOVDY0 KSkgew0KPiA+ICsgICAgICBtUGFnaW5nQ29udGV4dC5NYWNoaW5lVHlwZSA9IElNQUdFX0ZJTEVf TUFDSElORV9YNjQ7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBtUGFnaW5nQ29udGV4 dC5NYWNoaW5lVHlwZSA9IElNQUdFX0ZJTEVfTUFDSElORV9JMzg2Ow0KPiA+ICsgICAgfQ0KPiA+ ICsgICAgaWYgKChBc21SZWFkQ3IwICgpICYgQ1IwX1BHKSAhPSAwKSB7DQo+ID4gKyAgICAgIG1Q YWdpbmdDb250ZXh0LkNvbnRleHREYXRhLlg2NC5QYWdlVGFibGVCYXNlID0gKEFzbVJlYWRDcjMg KCkgDQo+ID4gKyAmDQo+IFBBR0lOR180S19BRERSRVNTX01BU0tfNjQpOw0KPiA+ICsgICAgfSBl bHNlIHsNCj4gPiArICAgICAgbVBhZ2luZ0NvbnRleHQuQ29udGV4dERhdGEuWDY0LlBhZ2VUYWJs ZUJhc2UgPSAwOw0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gLSAgQXNtQ3B1aWQgKDB4ODAwMDAwMDAs ICZSZWdFYXgsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+IC0gIGlmIChSZWdFYXggPiAweDgwMDAw MDAwKSB7DQo+ID4gLSAgICBBc21DcHVpZCAoMHg4MDAwMDAwMSwgTlVMTCwgTlVMTCwgTlVMTCwg JlJlZ0VkeCk7DQo+ID4gLSAgICBpZiAoKFJlZ0VkeCAmIEJJVDIwKSAhPSAwKSB7DQo+ID4gLSAg ICAgIC8vIFhEIHN1cHBvcnRlZA0KPiA+IC0gICAgICBpZiAoKEFzbVJlYWRNc3I2NCAoMHhDMDAw MDA4MCkgJiBCSVQxMSkgIT0gMCkgew0KPiA+IC0gICAgICAgIC8vIFhEIGFjdGl2YXRlZA0KPiA+ IC0gICAgICAgIFBhZ2luZ0NvbnRleHQtPkNvbnRleHREYXRhLklhMzIuQXR0cmlidXRlcyB8PQ0K PiBQQUdFX1RBQkxFX0xJQl9QQUdJTkdfQ09OVEVYVF9JQTMyX1g2NF9BVFRSSUJVVEVTX1hEX0FD VElWQVRFRDsNCj4gPiAtICAgICAgfQ0KPiA+ICsgICAgaWYgKChBc21SZWFkQ3I0ICgpICYgQ1I0 X1BTRSkgIT0gMCkgew0KPiA+ICsgICAgICBtUGFnaW5nQ29udGV4dC5Db250ZXh0RGF0YS5JYTMy LkF0dHJpYnV0ZXMgfD0NCj4gUEFHRV9UQUJMRV9MSUJfUEFHSU5HX0NPTlRFWFRfSUEzMl9YNjRf QVRUUklCVVRFU19QU0U7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBpZiAoKEFzbVJlYWRDcjQgKCkg JiBDUjRfUEFFKSAhPSAwKSB7DQo+ID4gKyAgICAgIG1QYWdpbmdDb250ZXh0LkNvbnRleHREYXRh LklhMzIuQXR0cmlidXRlcyB8PQ0KPiBQQUdFX1RBQkxFX0xJQl9QQUdJTkdfQ09OVEVYVF9JQTMy X1g2NF9BVFRSSUJVVEVTX1BBRTsNCj4gPiArICAgIH0NCj4gPiArICAgIGlmICgoQXNtUmVhZENy MCAoKSAmIENSMF9XUCkgIT0gMCkgew0KPiA+ICsgICAgICBtUGFnaW5nQ29udGV4dC5Db250ZXh0 RGF0YS5JYTMyLkF0dHJpYnV0ZXMgfD0NCj4gUEFHRV9UQUJMRV9MSUJfUEFHSU5HX0NPTlRFWFRf SUEzMl9YNjRfQVRUUklCVVRFU19XUF9FTkFCTEU7DQo+ID4gICAgICB9DQo+ID4gLSAgICBpZiAo KFJlZ0VkeCAmIEJJVDI2KSAhPSAwKSB7DQo+ID4gLSAgICAgIFBhZ2luZ0NvbnRleHQtPkNvbnRl eHREYXRhLklhMzIuQXR0cmlidXRlcyB8PQ0KPiBQQUdFX1RBQkxFX0xJQl9QQUdJTkdfQ09OVEVY VF9JQTMyX1g2NF9BVFRSSUJVVEVTX1BBR0VfMUdfU1VQUE8NCj4gUlQ7DQo+ID4gKw0KPiA+ICsg ICAgQXNtQ3B1aWQgKENQVUlEX0VYVEVOREVEX0ZVTkNUSU9OLCAmUmVnRWF4LCBOVUxMLCBOVUxM LCBOVUxMKTsNCj4gPiArICAgIGlmIChSZWdFYXggPj0gQ1BVSURfRVhURU5ERURfQ1BVX1NJRykg ew0KPiANCj4gKDJiKSBTaW1pbGFybHkgdG8gKDJhKSwgdGhpcyBjbGVhbnVwICh3aGljaCBpcyBj b3JyZWN0LCBhbmQgd2VsY29tZSkgDQo+IHNob3VsZCBoYXZlIGJlZW4gc3BsaXQgdG8gYSBzZXBh cmF0ZSBwYXRjaC4NCj4gDQoNCg0KT2suDQoNCj4gPiArICAgICAgQXNtQ3B1aWQgKENQVUlEX0VY VEVOREVEX0NQVV9TSUcsIE5VTEwsIE5VTEwsIE5VTEwsIChVSU5UMzINCj4gKikmUmVnRWR4KTsN Cj4gDQo+ICgzKSBJIHRoaW5rIGl0IHdvdWxkIGJlIG1vcmUgaWRpb21hdGljIHRvIHBhc3MgJlJl Z0VkeC5VaW50MzIgYXMgdGhlIA0KPiBsYXN0IGFyZ3VtZW50LiBIb3dldmVyLCB0aGlzIG1ldGhv ZCB3b3JrcyBhcyB3ZWxsLg0KPiANCg0KWW91ciB3YXkgaXMgYmV0dGVyLiBBdCBsZWFzdCBpdCBz YXZlcyBhIHR5cGUgY2FzdC4NCg0KPiANCj4gSSBkb24ndCB0aGluayB0aGF0IHBvc3RpbmcgYSB2 MyBpcyBuZWNlc3NhcnkganVzdCBiZWNhdXNlIG9mIHRoZXNlIA0KPiByZW1hcmtzLiBQbGVhc2Ug Zml4ICgxKSB0aG91Z2gsIGp1c3QgYmVmb3JlIHlvdSBwdXNoIHRoZSBwYXRjaC4NCj4gDQo+ICog Rm9yIHRoaXMgcGF0Y2gsIHdpdGggKDEpIHVwZGF0ZWQ6DQo+IA0KPiBSZXZpZXdlZC1ieTogTGFz emxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gDQo+ICogRm9yIHRoZSBzZXJpZXM6DQo+ IA0KPiBSZWdyZXNzaW9uLXRlc3RlZC1ieTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNv bT4NCj4gDQo+IEZvciB0aGUgcmVncmVzc2lvbiB0ZXN0aW5nLCBJIHVzZWQgT1ZNRiBidWlsdCBi b3RoIHdpdGggYW5kIHdpdGhvdXQgU01NLg0KPiBBbHNvLCBmb3IgcGF0Y2ggIzIsIHBsZWFzZSBy ZW1lbWJlciB0aGF0IE9WTUYgZG9lcyBub3QgZW5hYmxlIHRoZSBwYWdlIA0KPiBndWFyZCBmZWF0 dXJlLg0KPiANCg0KVGhhbmsgeW91IHZlcnkgbXVjaCBmb3IgdGhlIHRlc3QuDQoNCj4gVGhhbmtz IQ0KPiBMYXN6bG8NCj4gDQo+IA0KPiA+ICsNCj4gPiArICAgICAgaWYgKFJlZ0VkeC5CaXRzLk5Y ICE9IDApIHsNCj4gPiArICAgICAgICAvLyBYRCBzdXBwb3J0ZWQNCj4gPiArICAgICAgICBNc3JF ZmVyLlVpbnQ2NCA9IEFzbVJlYWRNc3I2NChNU1JfQ09SRV9JQTMyX0VGRVIpOw0KPiA+ICsgICAg ICAgIGlmIChNc3JFZmVyLkJpdHMuTlhFICE9IDApIHsNCj4gPiArICAgICAgICAgIC8vIFhEIGFj dGl2YXRlZA0KPiA+ICsgICAgICAgICAgbVBhZ2luZ0NvbnRleHQuQ29udGV4dERhdGEuSWEzMi5B dHRyaWJ1dGVzIHw9DQo+IFBBR0VfVEFCTEVfTElCX1BBR0lOR19DT05URVhUX0lBMzJfWDY0X0FU VFJJQlVURVNfWERfQUNUSVZBVEVEOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICAgaWYgKFJlZ0VkeC5CaXRzLlBhZ2UxR0IgIT0gMCkgew0KPiA+ICsgICAg ICAgIG1QYWdpbmdDb250ZXh0LkNvbnRleHREYXRhLklhMzIuQXR0cmlidXRlcyB8PQ0KPiBQQUdF X1RBQkxFX0xJQl9QQUdJTkdfQ09OVEVYVF9JQTMyX1g2NF9BVFRSSUJVVEVTX1BBR0VfMUdfU1VQ UE8NCj4gUlQ7DQo+ID4gKyAgICAgIH0NCj4gPiAgICAgIH0NCj4gPiAgICB9DQo+ID4gKw0KPiA+ ICsgIC8vDQo+ID4gKyAgLy8gVGhpcyBjYW4gYXZvaWQgZ2V0dGluZyBTTU0gcGFnaW5nIGNvbnRl eHQgaWYgaW4gU01NIG1vZGUuIFdlIA0KPiA+ICsgY2Fubm90DQo+IGFzc3VtZQ0KPiA+ICsgIC8v IFNNTSBtb2RlIHNoYXJlcyB0aGUgc2FtZSBwYWdpbmcgY29udGV4dCBhcyBEWEUuDQo+ID4gKyAg Ly8NCj4gPiArICBDb3B5TWVtIChQYWdpbmdDb250ZXh0LCAmbVBhZ2luZ0NvbnRleHQsIHNpemVv ZiANCj4gPiArIChtUGFnaW5nQ29udGV4dCkpOw0KPiA+ICB9DQo+ID4NCj4gPiAgLyoqDQo+ID4g QEAgLTUwNyw3ICs1NzMsMTQgQEAgSXNSZWFkT25seVBhZ2VXcml0ZVByb3RlY3RlZCAoDQo+ID4g ICAgVk9JRA0KPiA+ICAgICkNCj4gPiAgew0KPiA+IC0gIHJldHVybiAoKEFzbVJlYWRDcjAgKCkg JiBCSVQxNikgIT0gMCk7DQo+ID4gKyAgLy8NCj4gPiArICAvLyBUbyBhdm9pZCB1bmZvcnNlZW4g Y29uc2VxdWVuY2VzLCBkb24ndCB0b3VjaCBwYWdpbmcgc2V0dGluZ3MgDQo+ID4gKyBpbiBTTU0N Cj4gbW9kZQ0KPiA+ICsgIC8vIGluIHRoaXMgZHJpdmVyLg0KPiA+ICsgIC8vDQo+ID4gKyAgaWYg KCFJc0luU21tICgpKSB7DQo+ID4gKyAgICByZXR1cm4gKChBc21SZWFkQ3IwICgpICYgQ1IwX1dQ KSAhPSAwKTsgIH0gIHJldHVybiBGQUxTRTsNCj4gPiAgfQ0KPiA+DQo+ID4gIC8qKg0KPiA+IEBA IC01MTgsNyArNTkxLDEzIEBAIERpc2FibGVSZWFkT25seVBhZ2VXcml0ZVByb3RlY3QgKA0KPiA+ ICAgIFZPSUQNCj4gPiAgICApDQo+ID4gIHsNCj4gPiAtICBBc21Xcml0ZUNyMCAoQXNtUmVhZENy MCgpICYgfkJJVDE2KTsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFRvIGF2b2lkIHVuZm9yc2VlbiBj b25zZXF1ZW5jZXMsIGRvbid0IHRvdWNoIHBhZ2luZyBzZXR0aW5ncyANCj4gPiArIGluIFNNTQ0K PiBtb2RlDQo+ID4gKyAgLy8gaW4gdGhpcyBkcml2ZXIuDQo+ID4gKyAgLy8NCj4gPiArICBpZiAo IUlzSW5TbW0gKCkpIHsNCj4gPiArICAgIEFzbVdyaXRlQ3IwIChBc21SZWFkQ3IwICgpICYgfkNS MF9XUCk7ICB9DQo+ID4gIH0NCj4gPg0KPiA+ICAvKioNCj4gPiBAQCAtNTI5LDcgKzYwOCwxMyBA QCBFbmFibGVSZWFkT25seVBhZ2VXcml0ZVByb3RlY3QgKA0KPiA+ICAgIFZPSUQNCj4gPiAgICAp DQo+ID4gIHsNCj4gPiAtICBBc21Xcml0ZUNyMCAoQXNtUmVhZENyMCgpIHwgQklUMTYpOw0KPiA+ ICsgIC8vDQo+ID4gKyAgLy8gVG8gYXZvaWQgdW5mb3JzZWVuIGNvbnNlcXVlbmNlcywgZG9uJ3Qg dG91Y2ggcGFnaW5nIHNldHRpbmdzIA0KPiA+ICsgaW4gU01NDQo+IG1vZGUNCj4gPiArICAvLyBp biB0aGlzIGRyaXZlci4NCj4gPiArICAvLw0KPiA+ICsgIGlmICghSXNJblNtbSAoKSkgew0KPiA+ ICsgICAgQXNtV3JpdGVDcjAgKEFzbVJlYWRDcjAgKCkgfCBDUjBfV1ApOyAgfQ0KPiA+ICB9DQo+ ID4NCj4gPiAgLyoqDQo+ID4NCg0K