From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.65, mailfrom: jian.j.wang@intel.com) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by groups.io with SMTP; Tue, 14 May 2019 00:58:46 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 May 2019 00:58:45 -0700 X-ExtLoop1: 1 Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga005.fm.intel.com with ESMTP; 14 May 2019 00:58:45 -0700 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 14 May 2019 00:58:44 -0700 Received: from shsmsx154.ccr.corp.intel.com (10.239.6.54) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 14 May 2019 00:58:44 -0700 Received: from shsmsx107.ccr.corp.intel.com ([169.254.9.7]) by SHSMSX154.ccr.corp.intel.com ([169.254.7.136]) with mapi id 14.03.0415.000; Tue, 14 May 2019 15:58:42 +0800 From: "Wang, Jian J" To: "devel@edk2.groups.io" , "Wang, Jian J" , "lersek@redhat.com" CC: "Zeng, Star" , "Dong, Eric" , "Ni, Ray" Subject: Re: [edk2-devel] [PATCH] UefiCpuPkg PiSmmCpuDxeSmm: Only support IN/OUT IO save state read (CVE-2018-12182) Thread-Topic: [edk2-devel] [PATCH] UefiCpuPkg PiSmmCpuDxeSmm: Only support IN/OUT IO save state read (CVE-2018-12182) Thread-Index: AQHVCato/d9ofl9dlkOpamiFLiG4IqZp73WQgABS2DA= Date: Tue, 14 May 2019 07:58:42 +0000 Message-ID: References: <20190510051615.318124-1-jian.j.wang@intel.com> <09a4eb80-b18a-223e-654c-1cb0384a87e8@redhat.com> <159E6E221B567624.17306@groups.io> In-Reply-To: <159E6E221B567624.17306@groups.io> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYTIyODk4NjEtYmYyNS00NzExLWE5MDctZWEwOTk0MmQ2YWZhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoibDBFWjErZ0RMR2lIaDFTMGhhTTdOZ2lTdHc0N29mNE9wXC9QQjVMajBvR2tVWG93cDZQR1RUYnBORU9UZHJwT0IifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: jian.j.wang@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UHVzaEAgY2Y1NzRmMGExODM4NjY1NDk4ZTQzZTljMDI5ZDhjMTIxMWNiYmZhMw0KDQpSZWdhcmRz LA0KSmlhbg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZGV2ZWxA ZWRrMi5ncm91cHMuaW8gW21haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pb10gT24gQmVoYWxmIE9m IFdhbmcsDQo+IEppYW4gSg0KPiBTZW50OiBUdWVzZGF5LCBNYXkgMTQsIDIwMTkgMTE6MTQgQU0N Cj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBsZXJzZWtAcmVkaGF0LmNvbQ0KPiBDYzogWmVu ZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT47IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRl bC5jb20+OyBOaSwNCj4gUmF5IDxyYXkubmlAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW2Vk azItZGV2ZWxdIFtQQVRDSF0gVWVmaUNwdVBrZyBQaVNtbUNwdUR4ZVNtbTogT25seSBzdXBwb3J0 DQo+IElOL09VVCBJTyBzYXZlIHN0YXRlIHJlYWQgKENWRS0yMDE4LTEyMTgyKQ0KPiANCj4gTGFz emxvLA0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IGRldmVs QGVkazIuZ3JvdXBzLmlvIFttYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW9dIE9uIEJlaGFsZiBP Zg0KPiA+IExhc3psbyBFcnNlaw0KPiA+IFNlbnQ6IFR1ZXNkYXksIE1heSAxNCwgMjAxOSAxMjo0 NiBBTQ0KPiA+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgV2FuZywgSmlhbiBKIDxqaWFuLmou d2FuZ0BpbnRlbC5jb20+DQo+ID4gQ2M6IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+ OyBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPjsgTmksDQo+ID4gUmF5IDxyYXkubmlA aW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BBVENIXSBVZWZpQ3B1 UGtnIFBpU21tQ3B1RHhlU21tOiBPbmx5DQo+IHN1cHBvcnQNCj4gPiBJTi9PVVQgSU8gc2F2ZSBz dGF0ZSByZWFkIChDVkUtMjAxOC0xMjE4MikNCj4gPg0KPiA+IE9uIDA1LzEwLzE5IDA3OjE2LCBX YW5nLCBKaWFuIEogd3JvdGU6DQo+ID4gPiBGcm9tOiBTdGFyIFplbmcgPHN0YXIuemVuZ0BpbnRl bC5jb20+DQo+ID4gPg0KPiA+ID4gQlo6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9z aG93X2J1Zy5jZ2k/aWQ9MTEzNg0KPiA+ID4gQ1ZFOiBDVkUtMjAxOC0xMjE4Mg0KPiA+ID4NCj4g PiA+IEN1c3RvbWVyIG1ldCBzeXN0ZW0gaGFuZy11cCBkdXJpbmcgc2VyaWFsIHBvcnQgbG9vcGJh Y2sgdGVzdCBpbiBPUy4NCj4gPiA+IEl0IGlzIGEgY29ybmVyIGNhc2UgaGFwcGVuZWQgd2l0aCBv bmUgQ1BVIGNvcmUgZG9pbmcgIm91dCBkeCxhbCIgYW5kDQo+ID4gPiBhbm90aGVyIENQVSBjb3Jl KHMpIGRvaW5nICJyZXAgb3V0cyBkeCxieXRlIHB0ciBbcnNpXSIuDQo+ID4gPg0KPiA+ID4gRGV0 YWlsZWQgY29kZSBmbG93IGlzIGFzIGJlbG93Lg0KPiA+ID4NCj4gPiA+IDEuIFNlcmlhbCBwb3J0 IGxvb3BiYWNrIHRlc3QgaW4gT1MuDQo+ID4gPiBPbmUgQ1BVIGNvcmU6ICJvdXQgZHgsYWwiIC0+ IFdyaXRpbmcgQjJoLCBTTUkgd2lsbCBoYXBwZW4uDQo+ID4gPiBBbm90aGVyIENQVSBjb3JlKHMp OiAicmVwIG91dHMgZHgsYnl0ZSBwdHIgW3JzaV0iLg0KPiA+ID4NCj4gPiA+IDIuIFNNSSBoYXBw ZW5zIHRvIGVudGVyIFNNTS4NCj4gPiA+ICJvdXQgZHgiIChTTU1fSU9fVFlQRV9PVVRfRFgpIGlz IHNhdmVkIGFzIEkvTyBpbnN0cnVjdGlvbiB0eXBlIGluDQo+ID4gPiBTTVJBTSBzYXZlIHN0YXRl IGZvciBDUFUgZG9pbmcgIm91dCBkeCxhbCIuDQo+ID4gPiAicmVwIG91dHMgZHgiIChTTU1fSU9f VFlQRV9SRVBfT1VUUykgaXMgc2F2ZWQgYXMgSS9PIGluc3RydWN0aW9uDQo+ID4gPiB0eXBlIGFu ZCByc2kgaXMgc2F2ZSBhcyBJL08gTWVtb3J5IEFkZHJlc3MgaW4gU01SQU0gc2F2ZSBzdGF0ZSBm b3INCj4gPiA+IENQVSBkb2luZyAicmVwIG91dHMgZHgsIGJ5dGUgcHRyIFtyc2ldIi4NCj4gPiA+ DQo+ID4gPiBOT1RFOiBJL08gTWVtb3J5IEFkZHJlc3MgKHJzaSkgaXMgYSB2aXJ0dWFsIGFkZHJl c3MgbWFwcGVkIGJ5DQo+ID4gPiBPUy9WaXJ0dWFsIE1hY2hpbmUuDQo+ID4gPg0KPiA+ID4gMy4g U29tZSBTTU0gY29kZSBjYWxscyBFRklfU01NX0NQVV9QUk9UT0NPTC5SZWFkU2F2ZVN0YXRlKCkg d2l0aA0KPiA+ID4gRUZJX1NNTV9TQVZFX1NUQVRFX1JFR0lTVEVSX0lPIGFuZCBwYXJzZSBkYXRh IHJldHVybmVkLg0KPiA+ID4NCj4gPiA+IEZvciBleGFtcGxlOg0KPiA+ID4gaHR0cHM6Ly9naXRo dWIuY29tL3RpYW5vY29yZS9lZGsyL2Jsb2IvbWFzdGVyL1F1YXJrU29jUGtnLw0KPiA+ID4NCj4g Pg0KPiBRdWFya05vcnRoQ2x1c3Rlci9TbW0vRHhlU21tL1FuY1NtbURpc3BhdGNoZXIvUU5DL1FO Q1NtbVN3LmMjTDcNCj4gPiA2DQo+ID4gPg0KPiA+ID4gNC4gU21tUmVhZFNhdmVTdGF0ZSgpIGlz IGV4ZWN1dGVkIHRvIHJlYWQgc2F2ZSBzdGF0ZSBmb3INCj4gPiA+IEVGSV9TTU1fU0FWRV9TVEFU RV9SRUdJU1RFUl9JTy4NCj4gPiA+DQo+ID4gPiAtIFRoZSBTbW1SZWFkU2F2ZVN0YXRlKCkgZnVu Y3Rpb24gaW4NCj4gPiA+ICAgIlVlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vUGlTbW1DcHVEeGVT bW0uYyIgY2FsbHMgdGhlDQo+ID4gPiAgIFNtbUNwdUZlYXR1cmVzUmVhZFNhdmVTdGF0ZVJlZ2lz dGVyKCkgZnVuY3Rpb24sIGZyb20gdGhlIHBsYXRmb3JtJ3MNCj4gPiA+ICAgU21tQ3B1RmVhdHVy ZXNMaWIgaW5zdGFuY2UuDQo+ID4gPg0KPiA+ID4gLSBJZiB0aGF0IHBsYXRmb3JtLXNwZWNpZmlj IGZ1bmN0aW9uIHJldHVybnMgRUZJX1VOU1VQUE9SVEVELCB0aGVuDQo+ID4gPiAgIFBpU21tQ3B1 RHhlU21tIGZhbGxzIGJhY2sgdG8gdGhlIGNvbW1vbiBmdW5jdGlvbg0KPiA+ID4gICBSZWFkU2F2 ZVN0YXRlUmVnaXN0ZXIoKSwgZGVmaW5lZCBpbiBmaWxlDQo+ID4gPiAgICJVZWZpQ3B1UGtnL1Bp U21tQ3B1RHhlU21tL1NtcmFtU2F2ZVN0YXRlLmMiLg0KPiA+ID4NCj4gPiA+IEN1cnJlbnQgUmVh ZFNhdmVTdGF0ZVJlZ2lzdGVyKCkgaW4NCj4gPiA+IFVlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0v U21yYW1TYXZlU3RhdGUuYyBpcyB0cnlpbmcgdG8gY29weSBkYXRhDQo+ID4gPiBmcm9tIEkvTyBN ZW1vcnkgQWRkcmVzcyBmb3IgRUZJX1NNTV9TQVZFX1NUQVRFX0lPX1RZUEVfUkVQX1BSRUZJWCwN Cj4gPiA+IFBGIHdpbGwgaGFwcGVuIGFzIFNNTSBwYWdlIHRhYmxlIGRvZXMgbm90IGtub3cgYW5k IGNvdmVyIHRoaXMNCj4gPiA+IE9TL1ZpcnR1YWwgTWFjaGluZSB2aXJ0dWFsIGFkZHJlc3MuDQo+ ID4gPg0KPiA+ID4gU2FtZSBjYXNlIGlzIGZvciBTbW1DcHVGZWF0dXJlc1JlYWRTYXZlU3RhdGVS ZWdpc3RlcigpIGluIHBsYXRmb3JtLQ0KPiA+ID4gc3BlY2lmaWMgU21tQ3B1RmVhdHVyZXNMaWIg aW5zdGFuY2UgaWYgaXQgaGFzIHNpbWlsYXIgaW1wbGVtZW50YXRpb24NCj4gPiA+IHRvIHJlYWQg c2F2ZSBzdGF0ZSBmb3IgRUZJX1NNTV9TQVZFX1NUQVRFX1JFR0lTVEVSX0lPIHdpdGgNCj4gPiA+ IEVGSV9TTU1fU0FWRV9TVEFURV9JT19UWVBFX1JFUF9QUkVGSVguDQo+ID4gPg0KPiA+ID4gU2Ft ZSBjYXNlIGlzIGZvciAiaW5zIiwgJ291dHMnIGFuZCAncmVwIGlucycuDQo+ID4gPg0KPiA+ID4g U28gdG8gZml4IHRoZSBwcm9ibGVtLCB0aGlzIHBhdGNoIHVwZGF0ZXMgdGhlIGNvZGUgdG8gb25s eSBzdXBwb3J0DQo+ID4gPiBJTi9PVVQsIGJ1dCBub3QgSU5TL09VVFMvUkVQIElOUy9SRVAgT1VU UyBmb3IgU21tUmVhZFNhdmVTdGF0ZSgpLg0KPiA+ID4NCj4gPiA+IENjOiBFcmljIERvbmcgPGVy aWMuZG9uZ0BpbnRlbC5jb20+DQo+ID4gPiBDYzogUmF5IE5pIDxyYXkubmlAaW50ZWwuY29tPg0K PiA+ID4gQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4gPiBTaWduZWQt b2ZmLWJ5OiBTdGFyIFplbmcgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+ID4gPiAtLS0NCj4gPiA+ ICBVZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1NtcmFtU2F2ZVN0YXRlLmMgfCAxNyArKysrKysr KystLS0tLS0tLQ0KPiA+ID4gIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDggZGVs ZXRpb25zKC0pDQo+ID4gPg0KPiA+ID4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvUGlTbW1DcHVE eGVTbW0vU21yYW1TYXZlU3RhdGUuYw0KPiA+IGIvVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9T bXJhbVNhdmVTdGF0ZS5jDQo+ID4gPiBpbmRleCAyNmUzNjVlYWJjLi4wOGNiOWMwNWNmIDEwMDY0 NA0KPiA+ID4gLS0tIGEvVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9TbXJhbVNhdmVTdGF0ZS5j DQo+ID4gPiArKysgYi9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1NtcmFtU2F2ZVN0YXRlLmMN Cj4gPiA+IEBAIC0zNjAsNyArMzYwLDYgQEAgUmVhZFNhdmVTdGF0ZVJlZ2lzdGVyICgNCj4gPiA+ ICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBTbW1SZXZJZDsNCj4gPiA+ICAgIFNNUkFN X1NBVkVfU1RBVEVfSU9NSVNDICAgICBJb01pc2M7DQo+ID4gPiAgICBFRklfU01NX1NBVkVfU1RB VEVfSU9fSU5GTyAgKklvSW5mbzsNCj4gPiA+IC0gIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAqSW9NZW1BZGRyOw0KPiA+ID4NCj4gPiA+ICAgIC8vDQo+ID4gPiAgICAvLyBDaGVjayBmb3Ig c3BlY2lhbCBFRklfU01NX1NBVkVfU1RBVEVfUkVHSVNURVJfTE1BDQo+ID4gPiBAQCAtNDA2LDYg KzQwNSwxNCBAQCBSZWFkU2F2ZVN0YXRlUmVnaXN0ZXIgKA0KPiA+ID4gICAgICAgIHJldHVybiBF RklfTk9UX0ZPVU5EOw0KPiA+ID4gICAgICB9DQo+ID4gPg0KPiA+ID4gKyAgICAvLw0KPiA+ID4g KyAgICAvLyBPbmx5IHN1cHBvcnQgSU4vT1VULCBidXQgbm90IElOUy9PVVRTL1JFUCBJTlMvUkVQ IE9VVFMuDQo+ID4gPiArICAgIC8vDQo+ID4gPiArICAgIGlmICgobVNtbUNwdUlvVHlwZVtJb01p c2MuQml0cy5UeXBlXSAhPQ0KPiA+IEVGSV9TTU1fU0FWRV9TVEFURV9JT19UWVBFX0lOUFVUKSAm Jg0KPiA+ID4gKyAgICAgICAgKG1TbW1DcHVJb1R5cGVbSW9NaXNjLkJpdHMuVHlwZV0gIT0NCj4g PiBFRklfU01NX1NBVkVfU1RBVEVfSU9fVFlQRV9PVVRQVVQpKSB7DQo+ID4gPiArICAgICAgcmV0 dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPg0KPiA+IEkgdGhpbmsgdGhpcyByZXR1cm4gdmFsdWUg KEVGSV9VTlNVUFBPUlRFRCkgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGgNCj4gPiBFRklfTk9UX0ZP VU5ELCBoZXJlLg0KPiA+DQo+ID4gVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgZnVuY3Rpb24g d2lsbCBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjYWxsZXIsDQo+ID4gdGhyb3VnaCBTbW1SZWFkU2F2 ZVN0YXRlKCkNCj4gPiBbVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9QaVNtbUNwdUR4ZVNtbS5j XS4NCj4gPg0KPiA+IFRoZSBsYXR0ZXIgZnVuY3Rpb24gaW1wbGVtZW50cyBFRklfTU1fQ1BVX1BS T1RPQ09MLlJlYWRTYXZlU3RhdGUoKSwNCj4gYW5kDQo+ID4gdGhlIFBJLTEuNyBzcGVjIHdyaXRl cywNCj4gPg0KPiA+ICAgICBJZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgdGhlIHNwZWNpZmll ZCByZWdpc3RlciBSZWdpc3RlciwgdGhlbg0KPiA+ICAgICBFRklfTk9UX0ZPVU5EIHNob3VsZCBi ZSByZXR1cm5lZC4gSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IHRoZQ0KPiA+ICAgICBzcGVj aWZpZWQgcmVnaXN0ZXIgd2lkdGggV2lkdGggLCB0aGVuIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBp cw0KPiA+ICAgICByZXR1cm5lZC4NCj4gPg0KPiA+IEkgZG9uJ3QgZmVlbCB0b28gc3Ryb25nbHkg YWJvdXQgdGhpcywgYnV0IEkgdGhpbmsgaXQncyB3b3J0aA0KPiA+IGNvbnNpZGVyaW5nLiBJZiBv dGhlcnMgdGhpbmsgRUZJX1VOU1VQUE9SVEVEIGlzIGJldHRlciwgSSdtIE9LIHdpdGgNCj4gPiB0 aGF0LCBpbiB0aGUgZW5kLg0KPiA+DQo+ID4gRWl0aGVyIHdheSwNCj4gPg0KPiA+IFJldmlld2Vk LWJ5OiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiA+DQo+IA0KPiBJIGFncmVl LiBFRklfTk9UX0ZPVU5EIGlzIGJldHRlciB0aGFuIEVGSV9VTlNVUFBPUlRFRC4gQXQgbGVhc3Qg cmV0dXJuaW5nDQo+IEVGSV9VTlNVUFBPUlRFRCB3aWxsIHNvbWV3aGF0IGJyZWFrIHNwZWMuIFRo YW5rcyBmb3IgY2F0Y2hpbmcgdGhpcy4NCj4gDQo+IFJlZ2FyZHMsDQo+IEppYW4NCj4gDQo+ID4g VGhhbmtzDQo+ID4gTGFzemxvDQo+ID4NCj4gPg0KPiA+DQo+ID4gPiArICAgIH0NCj4gPiA+ICsN Cj4gPiA+ICAgICAgLy8NCj4gPiA+ICAgICAgLy8gQ29tcHV0ZSBpbmRleCBmb3IgdGhlIEkvTyBM ZW5ndGggYW5kIEkvTyBUeXBlIGxvb2t1cCB0YWJsZXMNCj4gPiA+ICAgICAgLy8NCj4gPiA+IEBA IC00MjUsMTMgKzQzMiw3IEBAIFJlYWRTYXZlU3RhdGVSZWdpc3RlciAoDQo+ID4gPiAgICAgIElv SW5mby0+SW9Qb3J0ID0gKFVJTlQxNilJb01pc2MuQml0cy5Qb3J0Ow0KPiA+ID4gICAgICBJb0lu Zm8tPklvV2lkdGggPSBtU21tQ3B1SW9XaWR0aFtJb01pc2MuQml0cy5MZW5ndGhdLklvV2lkdGg7 DQo+ID4gPiAgICAgIElvSW5mby0+SW9UeXBlID0gbVNtbUNwdUlvVHlwZVtJb01pc2MuQml0cy5U eXBlXTsNCj4gPiA+IC0gICAgaWYgKElvSW5mby0+SW9UeXBlID09IEVGSV9TTU1fU0FWRV9TVEFU RV9JT19UWVBFX0lOUFVUIHx8IElvSW5mby0NCj4gPiA+SW9UeXBlID09IEVGSV9TTU1fU0FWRV9T VEFURV9JT19UWVBFX09VVFBVVCkgew0KPiA+ID4gLSAgICAgIFJlYWRTYXZlU3RhdGVSZWdpc3Rl ciAoQ3B1SW5kZXgsDQo+IEVGSV9TTU1fU0FWRV9TVEFURV9SRUdJU1RFUl9SQVgsDQo+ID4gbVNt bUNwdUlvV2lkdGhbSW9NaXNjLkJpdHMuTGVuZ3RoXS5XaWR0aCwgJklvSW5mby0+SW9EYXRhKTsN Cj4gPiA+IC0gICAgfQ0KPiA+ID4gLSAgICBlbHNlIHsNCj4gPiA+IC0gICAgICBSZWFkU2F2ZVN0 YXRlUmVnaXN0ZXJCeUluZGV4KENwdUluZGV4LA0KPiA+IFNNTV9TQVZFX1NUQVRFX1JFR0lTVEVS X0lPTUVNQUREUl9JTkRFWCwgc2l6ZW9mKElvTWVtQWRkciksDQo+ID4gJklvTWVtQWRkcik7DQo+ ID4gPiAtICAgICAgQ29weU1lbSgmSW9JbmZvLT5Jb0RhdGEsIElvTWVtQWRkciwNCj4gPiBtU21t Q3B1SW9XaWR0aFtJb01pc2MuQml0cy5MZW5ndGhdLldpZHRoKTsNCj4gPiA+IC0gICAgfQ0KPiA+ ID4gKyAgICBSZWFkU2F2ZVN0YXRlUmVnaXN0ZXIgKENwdUluZGV4LA0KPiBFRklfU01NX1NBVkVf U1RBVEVfUkVHSVNURVJfUkFYLA0KPiA+IG1TbW1DcHVJb1dpZHRoW0lvTWlzYy5CaXRzLkxlbmd0 aF0uV2lkdGgsICZJb0luZm8tPklvRGF0YSk7DQo+ID4gPiAgICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gPiA+ICAgIH0NCj4gPiA+DQo+ID4gPg0KPiA+DQo+ID4NCj4gPg0KPiANCj4gDQo+IA0K DQo=