From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.151; helo=mga17.intel.com; envelope-from=jian.j.wang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (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 8C0A5210E38D7 for ; Wed, 22 Aug 2018 00:13:54 -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 fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Aug 2018 00:13:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,273,1531810800"; d="scan'208,217";a="68135829" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga006.jf.intel.com with ESMTP; 22 Aug 2018 00:13:52 -0700 Received: from fmsmsx124.amr.corp.intel.com (10.18.125.39) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 22 Aug 2018 00:13:51 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx124.amr.corp.intel.com (10.18.125.39) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 22 Aug 2018 00:13:51 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.240]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.205]) with mapi id 14.03.0319.002; Wed, 22 Aug 2018 15:13:48 +0800 From: "Wang, Jian J" To: Laszlo Ersek , "edk2-devel@lists.01.org" CC: "Ni, Ruiyu" , "Dong, Eric" Thread-Topic: [edk2] [PATCH v2 3/4] UefiCpuPkg/CpuDxe: implement non-stop mode for uefi Thread-Index: AQHUOPvtXknViyEYqUOtgoAKOIoToaTJxtqAgAGS+uA= Date: Wed, 22 Aug 2018 07:13:47 +0000 Message-ID: References: <20180821030515.10156-1-jian.j.wang@intel.com> <20180821030515.10156-4-jian.j.wang@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMzM2YzIzOTktOTU4MS00Zjk2LTlhMzctMDdmZWFlMTMwMDdjIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoic3BKa1BVVEgrczVVMXlJbjNcLzdPWkVmYk5uUnFzdm93VlpXaXplVHJ0UUdrTnV6MUJtNHFnTFkyMzJmb1Z6OGkifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [PATCH v2 3/4] UefiCpuPkg/CpuDxe: implement non-stop mode for uefi 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: Wed, 22 Aug 2018 07:13:54 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvLA0KDQpSZWdhcmRzLA0KSmlhbg0KDQpGcm9tOiBMYXN6bG8gRXJzZWsgW21haWx0 bzpsZXJzZWtAcmVkaGF0LmNvbV0NClNlbnQ6IFR1ZXNkYXksIEF1Z3VzdCAyMSwgMjAxOCAxMDo1 OSBQTQ0KVG86IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tPjsgZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmcNCkNjOiBOaSwgUnVpeXUgPHJ1aXl1Lm5pQGludGVsLmNvbT47IERvbmcs IEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+DQpTdWJqZWN0OiBSZTogW2VkazJdIFtQQVRDSCB2 MiAzLzRdIFVlZmlDcHVQa2cvQ3B1RHhlOiBpbXBsZW1lbnQgbm9uLXN0b3AgbW9kZSBmb3IgdWVm aQ0KDQpJIG9ubHkgaGF2ZSBzb21lIHN1cGVyZmljaWFsIGNvbW1lbnRzIGhlcmUuDQoNCk9uIDA4 LzIxLzE4IDA1OjA1LCBKaWFuIEogV2FuZyB3cm90ZToNCj4+IHYyIGNoYW5nZXM6DQo+PiAgICBu L2ENCj4NCj4gU2FtZSBhcyBTTU0gcHJvZmlsZSBmZWF0dXJlLCBhIHNwZWNpYWwgI1BGIGlzIHVz ZWQgdG8gc2V0IHBhZ2UgYXR0cmlidXRlDQo+IHRvICdwcmVzZW50JyBhbmQgYSBzcGVjaWFsICNE QiBoYW5kbGVyIHRvIHJlc2V0IGl0IGJhY2sgdG8gJ25vdC1wcmVzZW50JywNCj4gcmlnaHQgYWZ0 ZXIgdGhlIGluc3RydWN0aW9uIGNhdXNpbmcgI1BGIGdvdCBleGVjdXRlZC4NCj4NCj4gU2luY2Ug dGhlIG5ldyAjUEYgaGFuZGxlciB3b24ndCBlbnRlciBpbnRvIGRlYWQtbG9vcCwgdGhlIGluc3Ry dWN0aW9uDQo+IHdoaWNoIGNhdXNlZCB0aGUgI1BGIHdpbGwgZ2V0IGNoYW5jZSB0byByZS1leGVj dXRlIHdpdGggYWNjZXNzaWJsZSBwYWdlcy4NCj4NCj4gVGhlIGV4Y2VwdGlvbiBtZXNzYWdlIHdp bGwgc3RpbGwgYmUgcHJpbnRlZCBvdXQgb24gZGVidWcgY29uc29sZSBzbyB0aGF0DQo+IHRoZSBk ZXZlbG9wZXIvUUEgY2FuIGZpbmQgdGhhdCB0aGVyZSdzIHBvdGVudGlhbCBoZWFwIG92ZXJmbG93 IG9yIG51bGwNCj4gcG9pbnRlciBhY2Nlc3Mgb2NjdXJyZWQuDQo+DQo+IENjOiBFcmljIERvbmcg PGVyaWMuZG9uZ0BpbnRlbC5jb208bWFpbHRvOmVyaWMuZG9uZ0BpbnRlbC5jb20+Pg0KPiBDYzog TGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbTxtYWlsdG86bGVyc2VrQHJlZGhhdC5jb20+ Pg0KPiBDYzogUnVpeXUgTmkgPHJ1aXl1Lm5pQGludGVsLmNvbTxtYWlsdG86cnVpeXUubmlAaW50 ZWwuY29tPj4NCj4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdy ZWVtZW50IDEuMQ0KPiBTaWduZWQtb2ZmLWJ5OiBKaWFuIEogV2FuZyA8amlhbi5qLndhbmdAaW50 ZWwuY29tPG1haWx0bzpqaWFuLmoud2FuZ0BpbnRlbC5jb20+Pg0KPiAtLS0NCj4gIFVlZmlDcHVQ a2cvQ3B1RHhlL0NwdUR4ZS5oICAgICAgIHwgIDM5ICsrKysrKw0KPiAgVWVmaUNwdVBrZy9DcHVE eGUvQ3B1RHhlLmluZiAgICAgfCAgIDMgKw0KPiAgVWVmaUNwdVBrZy9DcHVEeGUvQ3B1TXAuYyAg ICAgICAgfCAgMzQgKysrKy0NCj4gIFVlZmlDcHVQa2cvQ3B1RHhlL0NwdVBhZ2VUYWJsZS5jIHwg MjcxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgNCBmaWxlcyBj aGFuZ2VkLCAzNDEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkNCj4NCj4gZGlmZiAtLWdp dCBhL1VlZmlDcHVQa2cvQ3B1RHhlL0NwdUR4ZS5oIGIvVWVmaUNwdVBrZy9DcHVEeGUvQ3B1RHhl LmgNCj4gaW5kZXggNTQwZjVmMmRiZi4uN2Q2NWUzOWU5MCAxMDA2NDQNCj4gLS0tIGEvVWVmaUNw dVBrZy9DcHVEeGUvQ3B1RHhlLmgNCj4gKysrIGIvVWVmaUNwdVBrZy9DcHVEeGUvQ3B1RHhlLmgN Cj4gQEAgLTU3LDYgKzU3LDEyIEBADQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBFRklfTUVNT1JZX1JPICAgIFwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkNCj4NCj4gKyNkZWZpbmUgSEVBUF9HVUFSRF9OT05TVE9QX01PREUgICAg ICAgXA0KPiArICAgICAgICAoKFBjZEdldDggKFBjZEhlYXBHdWFyZFByb3BlcnR5TWFzaykgJiAo QklUNnxCSVQxfEJJVDApKSA+IEJJVDYpDQo+ICsNCj4gKyNkZWZpbmUgTlVMTF9ERVRFQ1RJT05f Tk9OU1RPUF9NT0RFICAgXA0KPiArICAgICAgICAoKFBjZEdldDggKFBjZE51bGxQb2ludGVyRGV0 ZWN0aW9uUHJvcGVydHlNYXNrKSAmIChCSVQ2fEJJVDApKSA+IEJJVDYpDQo+ICsNCj4gIC8qKg0K PiAgICBGbHVzaCBDUFUgZGF0YSBjYWNoZS4gSWYgdGhlIGluc3RydWN0aW9uIGNhY2hlIGlzIGZ1 bGx5IGNvaGVyZW50DQo+ICAgIHdpdGggYWxsIERNQSBvcGVyYXRpb25zIHRoZW4gZnVuY3Rpb24g Y2FuIGp1c3QgcmV0dXJuIEVGSV9TVUNDRVNTLg0KPiBAQCAtMjczLDcgKzI3OSw0MCBAQCBSZWZy ZXNoR2NkTWVtb3J5QXR0cmlidXRlc0Zyb21QYWdpbmcgKA0KPiAgICBWT0lEDQo+ICAgICk7DQo+ DQo+ICsvKioNCj4gKyAgU3BlY2lhbCBoYW5kbGVyIGZvciAjREIgZXhjZXB0aW9uLCB3aGljaCB3 aWxsIHJlc3RvcmUgdGhlIHBhZ2UgYXR0cmlidXRlcw0KPiArICAobm90LXByZXNlbnQpLiBJdCBz aG91bGQgd29yayB3aXRoICNQRiBoYW5kbGVyIHdoaWNoIHdpbGwgc2V0IHBhZ2VzIHRvDQo+ICsg ICdwcmVzZW50Jy4NCj4gKw0KPiArICBAcGFyYW0gRXhjZXB0aW9uVHlwZSAgRXhjZXB0aW9uIHR5 cGUuDQo+ICsgIEBwYXJhbSBTeXN0ZW1Db250ZXh0ICBQb2ludGVyIHRvIEVGSV9TWVNURU1fQ09O VEVYVC4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtFRklBUEkNCj4gK0RlYnVnRXhjZXB0aW9u SGFuZGxlciAoDQo+ICsgIElOIEVGSV9FWENFUFRJT05fVFlQRSAgIEludGVycnVwdFR5cGUsDQo+ ICsgIElOIEVGSV9TWVNURU1fQ09OVEVYVCAgIFN5c3RlbUNvbnRleHQNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFNwZWNpYWwgaGFuZGxlciBmb3IgI1BGIGV4Y2VwdGlvbiwgd2hpY2ggd2ls bCBzZXQgdGhlIHBhZ2VzIHdoaWNoIGNhdXNlZA0KPiArICAjUEYgdG8gYmUgJ3ByZXNlbnQnLiBU aGUgYXR0cmlidXRlIG9mIHRob3NlIHBhZ2VzIHNob3VsZCBiZSByZXN0b3JlZCBpbg0KPiArICB0 aGUgc3Vic2VxdWVudCAjREIgaGFuZGxlci4NCj4gKw0KPiArICBAcGFyYW0gRXhjZXB0aW9uVHlw ZSAgRXhjZXB0aW9uIHR5cGUuDQo+ICsgIEBwYXJhbSBTeXN0ZW1Db250ZXh0ICBQb2ludGVyIHRv IEVGSV9TWVNURU1fQ09OVEVYVC4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtFRklBUEkNCj4g K1BhZ2VGYXVsdEV4Y2VwdGlvbkhhbmRsZXIgKA0KPiArICBJTiBFRklfRVhDRVBUSU9OX1RZUEUg ICBJbnRlcnJ1cHRUeXBlLA0KPiArICBJTiBFRklfU1lTVEVNX0NPTlRFWFQgICBTeXN0ZW1Db250 ZXh0DQo+ICsgICk7DQo+ICsNCj4gIGV4dGVybiBCT09MRUFOIG1Jc0FsbG9jYXRpbmdQYWdlVGFi bGU7DQo+ICtleHRlcm4gVUlOVE4gICBtTnVtYmVyT2ZQcm9jZXNzb3JzOw0KPg0KPiAgI2VuZGlm DQo+DQo+IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL0NwdUR4ZS9DcHVEeGUuaW5mIGIvVWVmaUNw dVBrZy9DcHVEeGUvQ3B1RHhlLmluZg0KPiBpbmRleCA2YTE5OWI3MmY3Li45N2EzODFiMDQ2IDEw MDY0NA0KPiAtLS0gYS9VZWZpQ3B1UGtnL0NwdUR4ZS9DcHVEeGUuaW5mDQo+ICsrKyBiL1VlZmlD cHVQa2cvQ3B1RHhlL0NwdUR4ZS5pbmYNCj4gQEAgLTQ2LDYgKzQ2LDcgQEANCj4gICAgUmVwb3J0 U3RhdHVzQ29kZUxpYg0KPiAgICBNcEluaXRMaWINCj4gICAgVGltZXJMaWINCj4gKyAgUGVDb2Zm R2V0RW50cnlQb2ludExpYg0KPg0KPiAgW1NvdXJjZXNdDQo+ICAgIENwdUR4ZS5jDQo+IEBAIC03 OSw2ICs4MCw4IEBADQo+ICBbUGNkXQ0KPiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1 aWQuUGNkUHRlTWVtb3J5RW5jcnlwdGlvbkFkZHJlc3NPck1hc2sgICAgIyMgQ09OU1VNRVMNCj4g ICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENwdVN0YWNrR3VhcmQgICAgICAg ICAgICAgICAgICAgICAgICMjIENPTlNVTUVTDQo+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNw YWNlR3VpZC5QY2RIZWFwR3VhcmRQcm9wZXJ0eU1hc2sgICAgICAgICAgICAgICAjIyBDT05TVU1F Uw0KPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkTnVsbFBvaW50ZXJEZXRl Y3Rpb25Qcm9wZXJ0eU1hc2sgICAgIyMgQ09OU1VNRVMNCj4gICAgZ1VlZmlDcHVQa2dUb2tlblNw YWNlR3VpZC5QY2RDcHVTdGFja1N3aXRjaEV4Y2VwdGlvbkxpc3QgICAgICAgICAgICAgICMjIENP TlNVTUVTDQo+ICAgIGdVZWZpQ3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1S25vd25Hb29kU3Rh Y2tTaXplICAgICAgICAgICAgICAgICAgICAjIyBDT05TVU1FUw0KPg0KPiBkaWZmIC0tZ2l0IGEv VWVmaUNwdVBrZy9DcHVEeGUvQ3B1TXAuYyBiL1VlZmlDcHVQa2cvQ3B1RHhlL0NwdU1wLmMNCj4g aW5kZXggODIxNDVlNzYyNC4uZjg0ODllYjFjMyAxMDA2NDQNCj4gLS0tIGEvVWVmaUNwdVBrZy9D cHVEeGUvQ3B1TXAuYw0KPiArKysgYi9VZWZpQ3B1UGtnL0NwdUR4ZS9DcHVNcC5jDQo+IEBAIC02 NzMsMTAgKzY3Myw2IEBAIEluaXRpYWxpemVNcEV4Y2VwdGlvblN0YWNrU3dpdGNoSGFuZGxlcnMg KA0KPiAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICpHZHRCdWZmZXI7DQo+ICAg IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgKlN0YWNrVG9wOw0KPg0KPiAtICBpZiAo IVBjZEdldEJvb2wgKFBjZENwdVN0YWNrR3VhcmQpKSB7DQo+IC0gICAgcmV0dXJuOw0KPiAtICB9 DQo+IC0NCj4gICAgRXhjZXB0aW9uTnVtYmVyID0gRml4ZWRQY2RHZXRTaXplIChQY2RDcHVTdGFj a1N3aXRjaEV4Y2VwdGlvbkxpc3QpOw0KPiAgICBOZXdTdGFja1NpemUgPSBGaXhlZFBjZEdldDMy IChQY2RDcHVLbm93bkdvb2RTdGFja1NpemUpICogRXhjZXB0aW9uTnVtYmVyOw0KPg0KPiBAQCAt NzkwLDYgKzc4NiwzMiBAQCBJbml0aWFsaXplTXBFeGNlcHRpb25TdGFja1N3aXRjaEhhbmRsZXJz ICgNCj4gICAgfQ0KPiAgfQ0KPg0KPiArLyoqDQo+ICsgIEluaXRpYWxpemVzIE1QIGV4Y2VwdGlv bnMgaGFuZGxlcnMgZm9yIHNwZWNpYWwgZmVhdHVyZXMsIHN1Y2ggYXMgSGVhcCBHdWFyZA0KPiAr ICBhbmQgU3RhY2sgR3VhcmQuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0luaXRpYWxpemVNcEV4Y2Vw dGlvbkhhbmRsZXJzICgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIC8vDQo+ICsgIC8v IEVuYWJsZSBub24tc3RvcCBtb2RlIGZvciAjUEYgdHJpZ2dlcmVkIGJ5IEhlYXAgR3VhcmQgb3Ig TlVMTCBQb2ludGVyDQo+ICsgIC8vIERldGVjdGlvbi4NCj4gKyAgLy8NCj4gKyAgaWYgKEhFQVBf R1VBUkRfTk9OU1RPUF9NT0RFIHx8IE5VTExfREVURUNUSU9OX05PTlNUT1BfTU9ERSkgew0KPiAr ICAgIFJlZ2lzdGVyQ3B1SW50ZXJydXB0SGFuZGxlcihFWENFUFRfSUEzMl9ERUJVRywgRGVidWdF eGNlcHRpb25IYW5kbGVyKTsNCj4gKyAgICBSZWdpc3RlckNwdUludGVycnVwdEhhbmRsZXIoRVhD RVBUX0lBMzJfUEFHRV9GQVVMVCwgUGFnZUZhdWx0RXhjZXB0aW9uSGFuZGxlcik7DQo+ICsgIH0N Cj4gKw0KPiArICAvLw0KPiArICAvLyBTZXR1cCBzdGFjayBzd2l0Y2ggZm9yIFN0YWNrIEd1YXJk IGZlYXR1cmUuDQo+ICsgIC8vDQo+ICsgIGlmIChQY2RHZXRCb29sIChQY2RDcHVTdGFja0d1YXJk KSkgew0KPiArICAgIEluaXRpYWxpemVNcEV4Y2VwdGlvblN0YWNrU3dpdGNoSGFuZGxlcnMoKTsN Cj4gKyAgfQ0KPiArfQ0KPiArDQo+ICAvKioNCj4gICAgSW5pdGlhbGl6ZSBNdWx0aS1wcm9jZXNz b3Igc3VwcG9ydC4NCj4NCj4gQEAgLTgxNCw5ICs4MzYsOSBAQCBJbml0aWFsaXplTXBTdXBwb3J0 ICgNCj4gICAgREVCVUcgKChERUJVR19JTkZPLCAiRGV0ZWN0IENQVSBjb3VudDogJWRcbiIsIG1O dW1iZXJPZlByb2Nlc3NvcnMpKTsNCj4NCj4gICAgLy8NCj4gLSAgLy8gSW5pdGlhbGl6ZSBleGNl cHRpb24gc3RhY2sgc3dpdGNoIGhhbmRsZXJzIGZvciBlYWNoIGxvZ2ljIHByb2Nlc3Nvci4NCj4g KyAgLy8gSW5pdGlhbGl6ZSBzcGVjaWFsIGV4Y2VwdGlvbiBoYW5kbGVycyBmb3IgZWFjaCBsb2dp YyBwcm9jZXNzb3IuDQo+ICAgIC8vDQo+IC0gIEluaXRpYWxpemVNcEV4Y2VwdGlvblN0YWNrU3dp dGNoSGFuZGxlcnMgKCk7DQo+ICsgIEluaXRpYWxpemVNcEV4Y2VwdGlvbkhhbmRsZXJzICgpOw0K Pg0KPiAgICAvLw0KPiAgICAvLyBVcGRhdGUgQ1BVIGhlYWx0aHkgaW5mb3JtYXRpb24gZnJvbSBH dWlkZWQgSE9CDQoNClRoZSByZXdvcmtpbmcgb2YgdGhlIEluaXRpYWxpemVNcEV4Y2VwdGlvblN0 YWNrU3dpdGNoSGFuZGxlcnMoKSAvDQpQY2RHZXRCb29sIChQY2RDcHVTdGFja0d1YXJkKSBjYWxs IHNpdGVzIGxvb2sgT0sgdG8gbWUuDQoNCigxKSBIb3dldmVyLCBzb21lIHdoaXRlc3BhY2UgaXMg bWlzc2luZyBiZWZvcmUgb3BlbmluZyBwYXJlbnRoZXNlcy4gU2VlDQplZy4gYWZ0ZXIgIlJlZ2lz dGVyQ3B1SW50ZXJydXB0SGFuZGxlciIuDQoNClBsZWFzZSBjaGVjayB0aGUgcmVzdCBvZiB0aGUg Y29kZSBmb3IgdGhhdCBhcyB3ZWxsLg0KDQpbSmlhbl0gU3VyZS4gSeKAmWxsIGNoZWNrIGl0Lg0K DQoNCj4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvQ3B1RHhlL0NwdVBhZ2VUYWJsZS5jIGIvVWVm aUNwdVBrZy9DcHVEeGUvQ3B1UGFnZVRhYmxlLmMNCj4gaW5kZXggZGYwMjE3OThjMC4uYjY1Zjc0 YmQ3MiAxMDA2NDQNCj4gLS0tIGEvVWVmaUNwdVBrZy9DcHVEeGUvQ3B1UGFnZVRhYmxlLmMNCj4g KysrIGIvVWVmaUNwdVBrZy9DcHVEeGUvQ3B1UGFnZVRhYmxlLmMNCj4gQEAgLTIyLDYgKzIyLDEw IEBADQo+ICAjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ICAjaW5j bHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiAgI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RT ZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9QZUNvZmZHZXRFbnRyeVBv aW50TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9TZXJpYWxQb3J0TGliLmg+DQo+ICsjaW5j bHVkZSA8TGlicmFyeS9TeW5jaHJvbml6YXRpb25MaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L1ByaW50TGliLmg+DQo+ICAjaW5jbHVkZSA8UHJvdG9jb2wvTXBTZXJ2aWNlLmg+DQo+ICAjaW5j bHVkZSA8UHJvdG9jb2wvU21tQmFzZTIuaD4NCj4gICNpbmNsdWRlIDxSZWdpc3Rlci9DcHVpZC5o Pg0KPiBAQCAtNzMsNiArNzcsMTAgQEANCj4gICNkZWZpbmUgUEFHSU5HXzJNX0FERFJFU1NfTUFT S182NCAweDAwMEZGRkZGRkZFMDAwMDB1bGwNCj4gICNkZWZpbmUgUEFHSU5HXzFHX0FERFJFU1Nf TUFTS182NCAweDAwMEZGRkZGQzAwMDAwMDB1bGwNCj4NCj4gKyNkZWZpbmUgTUFYX1BGX0VOVFJZ X0NPVU5UICAgICAgICAxMA0KPiArI2RlZmluZSBNQVhfREVCVUdfTUVTU0FHRV9MRU5HVEggIDB4 MTAwDQo+ICsjZGVmaW5lIElBMzJfUEZfRUNfSUQgICAgICAgICAgICAgQklUNA0KPiArDQo+ICB0 eXBlZGVmIGVudW0gew0KPiAgICBQYWdlTm9uZSwNCj4gICAgUGFnZTRLLA0KPiBAQCAtMTAyLDYg KzExMCwxMyBAQCBQQUdFX1RBQkxFX1BPT0wgICAgICAgICAgICAgICAgICAgKm1QYWdlVGFibGVQ b29sID0gTlVMTDsNCj4gIFBBR0VfVEFCTEVfTElCX1BBR0lOR19DT05URVhUICAgICBtUGFnaW5n Q29udGV4dDsNCj4gIEVGSV9TTU1fQkFTRTJfUFJPVE9DT0wgICAgICAgICAgICAqbVNtbUJhc2Uy ID0gTlVMTDsNCj4NCj4gKy8vDQo+ICsvLyBSZWNvcmQgdGhlIHBhZ2UgZmF1bHQgZXhjZXB0aW9u IGNvdW50IGZvciBvbmUgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uLg0KPiArLy8NCj4gK1VJTlROICAg ICAgICAgICAgICAgICAgICAgKm1QRkVudHJ5Q291bnQ7DQo+ICtVSU5UNjQgICAgICAgICAgICAg ICAgICAgICgqbUxhc3RQRkVudHJ5VmFsdWUpW01BWF9QRl9FTlRSWV9DT1VOVF07DQoNCigyKSAi bUxhc3RQRkVudHJ5VmFsdWUiIHNlZW1zIHVudXNlZC4NCg0KW0ppYW5dIFlvdeKAmXJlIHJpZ2h0 LiBJdCBzaG91bGQgYmUgcmVtb3ZlZC4NCg0KPiArVUlOVDY0ICAgICAgICAgICAgICAgICAgICAq KCptTGFzdFBGRW50cnlQb2ludGVyKVtNQVhfUEZfRU5UUllfQ09VTlRdOw0KDQooMykgSSB0aGlu ayBtUEZFbnRyeUNvdW50IGFuZCBtTGFzdFBGRW50cnlQb2ludGVyIGNvdWxkIGJlIG1hZGUgU1RB VElDLg0KKE5vdCBzdXJlIGlmIHRoYXQncyBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YgdGhl IHZhcmlhYmxlIGRlZmluaXRpb25zDQp0aG91Z2gsIGluIHRoaXMgZmlsZS4pDQoNCltKaWFuXSBJ IGRvdWJsZSBjaGVja2VkLiBObyBTVEFUSUMgdXNlZC4gU28gbGV04oCZcyBrZWVwIGl0IGFzIGlz Lg0KDQo+ICsNCj4gIC8qKg0KPiAgIENoZWNrIGlmIGN1cnJlbnQgZXhlY3V0aW9uIGVudmlyb25t ZW50IGlzIGluIFNNTSBtb2RlIG9yIG5vdCwgdmlhDQo+ICAgRUZJX1NNTV9CQVNFMl9QUk9UT0NP TC4NCj4gQEAgLTExMzUsNiArMTE1MCwyNTMgQEAgQWxsb2NhdGVQYWdlVGFibGVNZW1vcnkgKA0K PiAgICByZXR1cm4gQnVmZmVyOw0KPiAgfQ0KPg0KPiArLyoqDQo+ICsgIFByaW50cyBhIG1lc3Nh Z2UgdG8gdGhlIHNlcmlhbCBwb3J0Lg0KPiArDQo+ICsgIEBwYXJhbSAgRm9ybWF0ICAgICAgRm9y bWF0IHN0cmluZyBmb3IgdGhlIG1lc3NhZ2UgdG8gcHJpbnQuDQo+ICsgIEBwYXJhbSAgLi4uICAg ICAgICAgVmFyaWFibGUgYXJndW1lbnQgbGlzdCB3aG9zZSBjb250ZW50cyBhcmUgYWNjZXNzZWQN Cj4gKyAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgZm9ybWF0IHN0cmluZyBzcGVj aWZpZWQgYnkgRm9ybWF0Lg0KPiArDQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArVk9JRA0KPiArRUZJ QVBJDQo+ICtJbnRlcm5hbFByaW50TWVzc2FnZSAoDQo+ICsgIElOICBDT05TVCBDSEFSOCAgKkZv cm1hdCwNCj4gKyAgLi4uDQo+ICsgICkNCj4gK3sNCj4gKyAgQ0hBUjggICAgQnVmZmVyW01BWF9E RUJVR19NRVNTQUdFX0xFTkdUSF07DQo+ICsgIFZBX0xJU1QgIE1hcmtlcjsNCj4gKw0KPiArICAv Lw0KPiArICAvLyBDb252ZXJ0IHRoZSBtZXNzYWdlIHRvIGFuIEFTQ0lJIFN0cmluZw0KPiArICAv Lw0KPiArICBWQV9TVEFSVCAoTWFya2VyLCBGb3JtYXQpOw0KPiArICBBc2NpaVZTUHJpbnQgKEJ1 ZmZlciwgc2l6ZW9mIChCdWZmZXIpLCBGb3JtYXQsIE1hcmtlcik7DQo+ICsgIFZBX0VORCAoTWFy a2VyKTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBTZW5kIHRoZSBwcmludCBzdHJpbmcgdG8gYSBT ZXJpYWwgUG9ydA0KPiArICAvLw0KPiArICBTZXJpYWxQb3J0V3JpdGUgKChVSU5UOCAqKUJ1ZmZl ciwgQXNjaWlTdHJMZW4gKEJ1ZmZlcikpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRmluZCBh bmQgZGlzcGxheSBpbWFnZSBiYXNlIGFkZHJlc3MgYW5kIHJldHVybiBpbWFnZSBiYXNlIGFuZCBp dHMgZW50cnkgcG9pbnQuDQo+ICsNCj4gKyAgQHBhcmFtIEN1cnJlbnRJcCAgICAgIEN1cnJlbnQg aW5zdHJ1Y3Rpb24gcG9pbnRlci4NCj4gKw0KPiArKiovDQo+ICtTVEFUSUMNCj4gK1ZPSUQNCj4g K0R1bXBNb2R1bGVJbWFnZUluZm8gKA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgIEN1cnJl bnRJcA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ ZTMyRGF0YTsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQZGJQ b2ludGVyOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkVudHJ5 UG9pbnQ7DQo+ICsNCj4gKyAgUGUzMkRhdGEgPSBQZUNvZmZTZWFyY2hJbWFnZUJhc2UgKEN1cnJl bnRJcCk7DQo+ICsgIGlmIChQZTMyRGF0YSA9PSAwKSB7DQo+ICsgICAgSW50ZXJuYWxQcmludE1l c3NhZ2UgKCIhISEhIENhbid0IGZpbmQgaW1hZ2UgaW5mb3JtYXRpb24uICEhISFcbiIpOw0KPiAr ICB9IGVsc2Ugew0KPiArICAgIC8vDQo+ICsgICAgLy8gRmluZCBJbWFnZSBCYXNlIGVudHJ5IHBv aW50DQo+ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBQZUNvZmZMb2FkZXJHZXRFbnRyeVBvaW50 ICgoVk9JRCAqKSBQZTMyRGF0YSwgJkVudHJ5UG9pbnQpOw0KPiArICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICAgIEVudHJ5UG9pbnQgPSBOVUxMOw0KPiArICAgIH0NCj4gKyAg ICBJbnRlcm5hbFByaW50TWVzc2FnZSAoIiEhISEgRmluZCBpbWFnZSBiYXNlZCBvbiBJUCgweCV4 KSAiLCBDdXJyZW50SXApOw0KPiArICAgIFBkYlBvaW50ZXIgPSBQZUNvZmZMb2FkZXJHZXRQZGJQ b2ludGVyICgoVk9JRCAqKSBQZTMyRGF0YSk7DQo+ICsgICAgaWYgKFBkYlBvaW50ZXIgIT0gTlVM TCkgew0KPiArICAgICAgSW50ZXJuYWxQcmludE1lc3NhZ2UgKCIlYSIsIFBkYlBvaW50ZXIpOw0K PiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBJbnRlcm5hbFByaW50TWVzc2FnZSAoIihObyBQREIp ICIgKTsNCj4gKyAgICB9DQo+ICsgICAgSW50ZXJuYWxQcmludE1lc3NhZ2UgKA0KPiArICAgICAg IiAoSW1hZ2VCYXNlPSUwMTZscCwgRW50cnlQb2ludD0lMDE2cCkgISEhIVxuIiwNCj4gKyAgICAg IChWT0lEICopIFBlMzJEYXRhLA0KPiArICAgICAgRW50cnlQb2ludA0KPiArICAgICAgKTsNCj4g KyAgfQ0KPiArfQ0KDQooNCkgV2h5IGlzIHRoaXMgZnVuY3Rpb24gY29waWVkIGhlcmU/IEZyb20g YSBxdWljayBjaGVjaywgaXQgbG9va3MNCmlkZW50aWNhbCB0byBEdW1wTW9kdWxlSW1hZ2VJbmZv KCkgaW4NCiJVZWZpQ3B1UGtnL0xpYnJhcnkvQ3B1RXhjZXB0aW9uSGFuZGxlckxpYi9DcHVFeGNl cHRpb25Db21tb24uYyIuDQoNCkFuZCwgRHVtcE1vZHVsZUltYWdlSW5mbygpIGlzIGFuIGV4dGVy biBmdW5jdGlvbiBpbg0KIlVlZmlDcHVQa2cvTGlicmFyeS9DcHVFeGNlcHRpb25IYW5kbGVyTGli L0NwdUV4Y2VwdGlvbkNvbW1vbi5oIiwgYW5kIHdlDQphcmUgKGxpa2VseSkgYWxyZWFkeSBsaW5r aW5nIGFnYWluc3QgdGhhdCBsaWJyYXJ5IGluc3RhbmNlLiBBcyBhIHJlc3VsdA0Kd2UnbGwgaGF2 ZSB0aGUgc2FtZSBmdW5jdGlvbiB0d2ljZSBpbiBDcHVEeGUsIG9uY2UgYXMgU1RBVElDLCBhbmQN CmFub3RoZXIgdGltZSBhcyBleHRlcm4uDQoNCklmIHRoaXMgaXMgYSB1c2VmdWwgdXRpbGl0eSBm dW5jdGlvbiwgdGhlbiBpdCBzaG91bGQgYmUgZWxldmF0ZWQgdG8gYQ0KcHVibGljIGxpYnJhcnkg QVBJLCBhbmQgdXNlZCBmcm9tIHRoZXJlLiAoSSBkb24ndCBrbm93IHdoZXJlIHRvIGFkZCBpdCwN CkkganVzdCBmaW5kIHRoaXMgY29kZSBkdXBsaWNhdGlvbiByZWdyZXR0YWJsZS4pDQoNCltKaWFu XSBJIHJldmlld2VkIHRoZSB3aG9sZSB3b3JraW5nIG1vZGVsIGFnYWluLiBJIHRoaW5rIHdlIGRv buKAmXQgbmVlZCB0byBkdW1wDQp0aGUgaW1hZ2UgaW5mb3JtYXRpb24gaGVyZSwgYmVjYXVzZSwg aWYgdGhlcmXigJlzIGFuIGlzc3VlIGRldGVjdGVkLCB0aGUgZGV2ZWxvcGVycw0Kd2lsbCBkaXNh YmxlIHRoZSBub24tc3RvcCBtb2RlIGFueXdheSBpbiBvcmRlciB0byBmaW5kIHRoZSByb290IGNh dXNlLiBUaGVuIHRoZQ0KaW1hZ2UgaW5mb3JtYXRpb24gY2FuIGJlIGR1bXBlZCAobm9ybWFsIG1v ZGUpLiBTbyB3ZSBjYW4ganVzdCBkdW1wIGNwdQ0KaW5mb3JtYXRpb24gdG8gdGVsbCB0aGUgdXNl ciB0aGF0IHRoZXJl4oCZcyBhbiBleGNlcHRpb24gaGVyZS4gQW5kIGR1bXBpbmcgY3B1DQppbmZv cm1hdGlvbiBpcyBhbHJlYWR5IGEgcHVibGljIGludGVyZmFjZSBzbyB3ZSBkb27igJl0IG5lZWQg dG8gZHVwbGljYXRlIGFueSBjb2RlDQpoZXJlLg0KDQpUaGFua3MNCkxhc3psbw0KDQo+ICsNCj4g Ky8qKg0KPiArICBTcGVjaWFsIGhhbmRsZXIgZm9yICNEQiBleGNlcHRpb24sIHdoaWNoIHdpbGwg cmVzdG9yZSB0aGUgcGFnZSBhdHRyaWJ1dGVzDQo+ICsgIChub3QtcHJlc2VudCkuIEl0IHNob3Vs ZCB3b3JrIHdpdGggI1BGIGhhbmRsZXIgd2hpY2ggd2lsbCBzZXQgcGFnZXMgdG8NCj4gKyAgJ3By ZXNlbnQnLg0KPiArDQo+ICsgIEBwYXJhbSBFeGNlcHRpb25UeXBlICBFeGNlcHRpb24gdHlwZS4N Cj4gKyAgQHBhcmFtIFN5c3RlbUNvbnRleHQgIFBvaW50ZXIgdG8gRUZJX1NZU1RFTV9DT05URVhU Lg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0VGSUFQSQ0KPiArRGVidWdFeGNlcHRpb25IYW5k bGVyICgNCj4gKyAgSU4gRUZJX0VYQ0VQVElPTl9UWVBFICAgRXhjZXB0aW9uVHlwZSwNCj4gKyAg SU4gRUZJX1NZU1RFTV9DT05URVhUICAgU3lzdGVtQ29udGV4dA0KPiArICApDQo+ICt7DQo+ICsg IFVJTlROICAgICBDcHVJbmRleDsNCj4gKyAgVUlOVE4gICAgIFBGRW50cnk7DQo+ICsgIEJPT0xF QU4gICBJc1dwRW5hYmxlZDsNCj4gKw0KPiArICBNcEluaXRMaWJXaG9BbUkgKCZDcHVJbmRleCk7 DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2xlYXIgbGFzdCBQRiBlbnRyaWVzDQo+ICsgIC8vDQo+ ICsgIElzV3BFbmFibGVkID0gSXNSZWFkT25seVBhZ2VXcml0ZVByb3RlY3RlZCAoKTsNCj4gKyAg aWYgKElzV3BFbmFibGVkKSB7DQo+ICsgICAgRGlzYWJsZVJlYWRPbmx5UGFnZVdyaXRlUHJvdGVj dCAoKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoUEZFbnRyeSA9IDA7IFBGRW50cnkgPCBtUEZF bnRyeUNvdW50W0NwdUluZGV4XTsgUEZFbnRyeSsrKSB7DQo+ICsgICAgaWYgKG1MYXN0UEZFbnRy eVBvaW50ZXJbQ3B1SW5kZXhdW1BGRW50cnldICE9IE5VTEwpIHsNCj4gKyAgICAgICptTGFzdFBG RW50cnlQb2ludGVyW0NwdUluZGV4XVtQRkVudHJ5XSAmPSB+SUEzMl9QR19QOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArDQo+ICsgIGlmIChJc1dwRW5hYmxlZCkgew0KPiArICAgIEVuYWJsZVJlYWRP bmx5UGFnZVdyaXRlUHJvdGVjdCAoKTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFJl c2V0IHBhZ2UgZmF1bHQgZXhjZXB0aW9uIGNvdW50IGZvciBuZXh0IHBhZ2UgZmF1bHQuDQo+ICsg IC8vDQo+ICsgIG1QRkVudHJ5Q291bnRbQ3B1SW5kZXhdID0gMDsNCj4gKw0KPiArICAvLw0KPiAr ICAvLyBGbHVzaCBUTEINCj4gKyAgLy8NCj4gKyAgQ3B1Rmx1c2hUbGIgKCk7DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gQ2xlYXIgVEYgaW4gRUZMQUdTDQo+ICsgIC8vDQo+ICsgIGlmIChtUGFnaW5n Q29udGV4dC5NYWNoaW5lVHlwZSA9PSBJTUFHRV9GSUxFX01BQ0hJTkVfSTM4Nikgew0KPiArICAg IFN5c3RlbUNvbnRleHQuU3lzdGVtQ29udGV4dElhMzItPkVmbGFncyAmPSAoVUlOVDMyKX5CSVQ4 Ow0KPiArICB9IGVsc2Ugew0KPiArICAgIFN5c3RlbUNvbnRleHQuU3lzdGVtQ29udGV4dFg2NC0+ UmZsYWdzICY9IChVSU5UNjQpfkJJVDg7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFNwZWNpYWwgaGFuZGxlciBmb3IgI1BGIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBzZXQgdGhlIHBh Z2VzIHdoaWNoIGNhdXNlZA0KPiArICAjUEYgdG8gYmUgJ3ByZXNlbnQnLiBUaGUgYXR0cmlidXRl IG9mIHRob3NlIHBhZ2VzIHNob3VsZCBiZSByZXN0b3JlZCBpbg0KPiArICB0aGUgc3Vic2VxdWVu dCAjREIgaGFuZGxlci4NCj4gKw0KPiArICBAcGFyYW0gRXhjZXB0aW9uVHlwZSAgRXhjZXB0aW9u IHR5cGUuDQo+ICsgIEBwYXJhbSBTeXN0ZW1Db250ZXh0ICBQb2ludGVyIHRvIEVGSV9TWVNURU1f Q09OVEVYVC4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtFRklBUEkNCj4gK1BhZ2VGYXVsdEV4 Y2VwdGlvbkhhbmRsZXIgKA0KPiArICBJTiBFRklfRVhDRVBUSU9OX1RZUEUgICBFeGNlcHRpb25U eXBlLA0KPiArICBJTiBFRklfU1lTVEVNX0NPTlRFWFQgICBTeXN0ZW1Db250ZXh0DQo+ICsgICkN Cj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsg IFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgUEZBZGRyZXNzOw0KPiArICBQQUdFX1RB QkxFX0xJQl9QQUdJTkdfQ09OVEVYVCAgIFBhZ2luZ0NvbnRleHQ7DQo+ICsgIFBBR0VfQVRUUklC VVRFICAgICAgICAgICAgICAgICAgUGFnZUF0dHJpYnV0ZTsNCj4gKyAgVUlOVDY0ICAgICAgICAg ICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAg ICAgICAgICAgICpQYWdlRW50cnk7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW5kZXg7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3B1SW5kZXg7 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFnZU51bWJlcjsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50SXA7DQo+ICsgIEJPT0xFQU4g ICAgICAgICAgICAgICAgICAgICAgICAgTm9uU3RvcE1vZGU7DQo+ICsNCj4gKyAgUEZBZGRyZXNz ID0gQXNtUmVhZENyMiAoKSAmIH5FRklfUEFHRV9NQVNLOw0KPiArICBpZiAoUEZBZGRyZXNzIDwg QkFTRV80S0IpIHsNCj4gKyAgICBOb25TdG9wTW9kZSA9IE5VTExfREVURUNUSU9OX05PTlNUT1Bf TU9ERSA/IFRSVUUgOiBGQUxTRTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBOb25TdG9wTW9kZSA9 IEhFQVBfR1VBUkRfTk9OU1RPUF9NT0RFID8gVFJVRSA6IEZBTFNFOw0KPiArICB9DQo+ICsNCj4g KyAgaWYgKE5vblN0b3BNb2RlKSB7DQo+ICsgICAgTXBJbml0TGliV2hvQW1JKCZDcHVJbmRleCk7 DQo+ICsgICAgR2V0Q3VycmVudFBhZ2luZ0NvbnRleHQgKCZQYWdpbmdDb250ZXh0KTsNCj4gKyAg ICAvLw0KPiArICAgIC8vIE1lbW9yeSBvcGVyYXRpb24gY3Jvc3MgcGFnZSBib3VuZGFyeSwgbGlr ZSAicmVwIG1vdiIgaW5zdHJ1Y3Rpb24sIHdpbGwNCj4gKyAgICAvLyBjYXVzZSBpbmZpbml0ZSBs b29wIGJldHdlZW4gdGhpcyBhbmQgRGVidWcgVHJhcCBoYW5kbGVyLiBXZSBoYXZlIHRvIG1ha2UN Cj4gKyAgICAvLyBzdXJlIHRoYXQgY3VycmVudCBwYWdlIGFuZCB0aGUgcGFnZSBmb2xsb3dlZCBh cmUgYm90aCBpbiBQUkVTRU5UIHN0YXRlLg0KPiArICAgIC8vDQo+ICsgICAgUGFnZU51bWJlciA9 IDI7DQo+ICsgICAgd2hpbGUgKFBhZ2VOdW1iZXIgPiAwKSB7DQo+ICsgICAgICBQYWdlRW50cnkg PSBHZXRQYWdlVGFibGVFbnRyeSgmUGFnaW5nQ29udGV4dCwgUEZBZGRyZXNzLCAmUGFnZUF0dHJp YnV0ZSk7DQo+ICsgICAgICBBU1NFUlQoUGFnZUVudHJ5ICE9IE5VTEwpOw0KPiArDQo+ICsgICAg ICBpZiAoUGFnZUVudHJ5ICE9IE5VTEwpIHsNCj4gKyAgICAgICAgQXR0cmlidXRlcyA9IEdldEF0 dHJpYnV0ZXNGcm9tUGFnZUVudHJ5KFBhZ2VFbnRyeSk7DQo+ICsgICAgICAgIGlmICgoQXR0cmli dXRlcyAmIEVGSV9NRU1PUllfUlApICE9IDApIHsNCj4gKyAgICAgICAgICBBdHRyaWJ1dGVzICY9 IH5FRklfTUVNT1JZX1JQOw0KPiArICAgICAgICAgIFN0YXR1cyA9IEFzc2lnbk1lbW9yeVBhZ2VB dHRyaWJ1dGVzICgmUGFnaW5nQ29udGV4dCwgUEZBZGRyZXNzLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfUEFHRV9TSVpFLCBBdHRyaWJ1dGVz LCBOVUxMKTsNCj4gKyAgICAgICAgICBpZiAoIUVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAg ICAgICAgICBJbmRleCA9IG1QRkVudHJ5Q291bnRbQ3B1SW5kZXhdOw0KPiArICAgICAgICAgICAg Ly8NCj4gKyAgICAgICAgICAgIC8vIFJlLXJldHJpZXZlIHBhZ2UgZW50cnkgYmVjYXVzZSBhYm92 ZSBjYWxsaW5nIG1pZ2h0IHVwZGF0ZSBwYWdlDQo+ICsgICAgICAgICAgICAvLyB0YWJsZSBkdWUg dG8gdGFibGUgc3BsaXQuDQo+ICsgICAgICAgICAgICAvLw0KPiArICAgICAgICAgICAgUGFnZUVu dHJ5ID0gR2V0UGFnZVRhYmxlRW50cnkoJlBhZ2luZ0NvbnRleHQsIFBGQWRkcmVzcywgJlBhZ2VB dHRyaWJ1dGUpOw0KPiArICAgICAgICAgICAgbUxhc3RQRkVudHJ5UG9pbnRlcltDcHVJbmRleF1b SW5kZXgrK10gPSBQYWdlRW50cnk7DQo+ICsgICAgICAgICAgICBtUEZFbnRyeUNvdW50W0NwdUlu ZGV4XSA9IEluZGV4Ow0KPiArICAgICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0K PiArDQo+ICsgICAgICBQRkFkZHJlc3MgKz0gRUZJX1BBR0VfU0laRTsNCj4gKyAgICAgIC0tUGFn ZU51bWJlcjsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0aWFs aXplIHRoZSBzZXJpYWwgcG9ydCBiZWZvcmUgZHVtcGluZy4NCj4gKyAgLy8NCj4gKyAgU2VyaWFs UG9ydEluaXRpYWxpemUgKCk7DQo+ICsgIC8vDQo+ICsgIC8vIERpc3BsYXkgRXhjZXB0aW9uVHlw ZSwgQ1BVIGluZm9ybWF0aW9uIGFuZCBJbWFnZSBpbmZvcm1hdGlvbg0KPiArICAvLw0KPiArICBE dW1wQ3B1Q29udGV4dCAoRXhjZXB0aW9uVHlwZSwgU3lzdGVtQ29udGV4dCk7DQo+ICsgIC8vDQo+ ICsgIC8vIER1bXAgbW9kdWxlIGltYWdlIGJhc2UgYW5kIG1vZHVsZSBlbnRyeSBwb2ludCBieSBS SVANCj4gKyAgLy8NCj4gKyAgaWYgKG1QYWdpbmdDb250ZXh0Lk1hY2hpbmVUeXBlID09IElNQUdF X0ZJTEVfTUFDSElORV9JMzg2KSB7DQo+ICsgICAgaWYgKChTeXN0ZW1Db250ZXh0LlN5c3RlbUNv bnRleHRJYTMyLT5FeGNlcHRpb25EYXRhICYgSUEzMl9QRl9FQ19JRCkgIT0gMCkgew0KPiArICAg ICAgLy8NCj4gKyAgICAgIC8vIFRoZSBFSVAgaW4gU3lzdGVtQ29udGV4dCBjb3VsZCBub3QgYmUg dXNlZA0KPiArICAgICAgLy8gaWYgaXQgaXMgcGFnZSBmYXVsdCB3aXRoIEkvRCBzZXQuDQo+ICsg ICAgICAvLw0KPiArICAgICAgQ3VycmVudElwID0gKihVSU5UTiAqKShVSU5UTilTeXN0ZW1Db250 ZXh0LlN5c3RlbUNvbnRleHRJYTMyLT5Fc3A7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIEN1 cnJlbnRJcCA9IChVSU5UTilTeXN0ZW1Db250ZXh0LlN5c3RlbUNvbnRleHRJYTMyLT5FaXA7DQo+ ICsgICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAgIGlmICgoU3lzdGVtQ29udGV4dC5TeXN0ZW1D b250ZXh0WDY0LT5FeGNlcHRpb25EYXRhICYgSUEzMl9QRl9FQ19JRCkgIT0gMCkgew0KPiArICAg ICAgLy8NCj4gKyAgICAgIC8vIFRoZSBSSVAgaW4gU3lzdGVtQ29udGV4dCBjb3VsZCBub3QgYmUg dXNlZA0KPiArICAgICAgLy8gaWYgaXQgaXMgcGFnZSBmYXVsdCB3aXRoIEkvRCBzZXQuDQo+ICsg ICAgICAvLw0KPiArICAgICAgQ3VycmVudElwID0gKihVSU5UTiAqKShVSU5UTilTeXN0ZW1Db250 ZXh0LlN5c3RlbUNvbnRleHRYNjQtPlJzcDsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgQ3Vy cmVudElwID0gKFVJTlROKVN5c3RlbUNvbnRleHQuU3lzdGVtQ29udGV4dFg2NC0+UmlwOw0KPiAr ICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIER1bXBNb2R1bGVJbWFnZUluZm8gKEN1cnJlbnRJcCk7 DQo+ICsNCj4gKyAgaWYgKCFOb25TdG9wTW9kZSkgew0KPiArICAgIENwdURlYWRMb29wKCk7DQo+ ICsgIH0NCj4gK30NCj4gKw0KPiAgLyoqDQo+ICAgIEluaXRpYWxpemUgdGhlIFBhZ2UgVGFibGUg bGliLg0KPiAgKiovDQo+IEBAIC0xMTU4LDYgKzE0MjAsMTUgQEAgSW5pdGlhbGl6ZVBhZ2VUYWJs ZUxpYiAoDQo+ICAgICAgRW5hYmxlUmVhZE9ubHlQYWdlV3JpdGVQcm90ZWN0ICgpOw0KPiAgICB9 DQo+DQo+ICsgIGlmIChIRUFQX0dVQVJEX05PTlNUT1BfTU9ERSB8fCBOVUxMX0RFVEVDVElPTl9O T05TVE9QX01PREUpIHsNCj4gKyAgICBtUEZFbnRyeUNvdW50ID0gKFVJTlROICopQWxsb2NhdGVa ZXJvUG9vbCAoc2l6ZW9mIChVSU5UTikgKiBtTnVtYmVyT2ZQcm9jZXNzb3JzKTsNCj4gKyAgICBB U1NFUlQgKG1QRkVudHJ5Q291bnQgIT0gTlVMTCk7DQo+ICsNCj4gKyAgICBtTGFzdFBGRW50cnlQ b2ludGVyID0gKFVJTlQ2NCAqKCopW01BWF9QRl9FTlRSWV9DT1VOVF0pDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgIEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAobUxhc3RQRkVudHJ5UG9p bnRlclswXSkgKiBtTnVtYmVyT2ZQcm9jZXNzb3JzKTsNCj4gKyAgICBBU1NFUlQgKG1MYXN0UEZF bnRyeVBvaW50ZXIgIT0gTlVMTCk7DQo+ICsgIH0NCj4gKw0KPiAgICBERUJVRyAoKERFQlVHX0lO Rk8sICJDdXJyZW50UGFnaW5nQ29udGV4dDpcbiIsIEN1cnJlbnRQYWdpbmdDb250ZXh0Lk1hY2hp bmVUeXBlKSk7DQo+ICAgIERFQlVHICgoREVCVUdfSU5GTywgIiAgTWFjaGluZVR5cGUgICAtIDB4 JXhcbiIsIEN1cnJlbnRQYWdpbmdDb250ZXh0Lk1hY2hpbmVUeXBlKSk7DQo+ICAgIERFQlVHICgo REVCVUdfSU5GTywgIiAgUGFnZVRhYmxlQmFzZSAtIDB4JXhcbiIsIEN1cnJlbnRQYWdpbmdDb250 ZXh0LkNvbnRleHREYXRhLlg2NC5QYWdlVGFibGVCYXNlKSk7DQo+DQo=