From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id E56B31A1E1B for ; Mon, 3 Oct 2016 11:35:58 -0700 (PDT) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga103.jf.intel.com with ESMTP; 03 Oct 2016 11:35:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,438,1473145200"; d="scan'208,217";a="1059911589" Received: from orsmsx107.amr.corp.intel.com ([10.22.240.5]) by orsmga002.jf.intel.com with ESMTP; 03 Oct 2016 11:35:56 -0700 Received: from orsmsx104.amr.corp.intel.com ([169.254.4.228]) by ORSMSX107.amr.corp.intel.com ([169.254.1.231]) with mapi id 14.03.0248.002; Mon, 3 Oct 2016 11:35:55 -0700 From: "Rothman, Michael A" To: "Carsey, Jaben" , "Ni, Ruiyu" , "Yao, Jiewen" , "Kinney, Michael D" , "edk2-devel@lists.01.org" CC: "Tian, Feng" , "Zhang, Chao B" , "Gao, Liming" , "Zeng, Star" , "Rothman, Michael A" Thread-Topic: [PATCH 17/45] MdeModulePkg/CapsuleApp: Add CapsuleApp application. Thread-Index: AQHSGe3DeL7lFxDYVkaw4/aM3tsV1aCQNkoAgABDtQCAANHfAIAAl42AgAC9VQCABHT9QA== Date: Mon, 3 Oct 2016 18:35:54 +0000 Message-ID: References: <1474440326-9292-1-git-send-email-jiewen.yao@intel.com> <1474440326-9292-18-git-send-email-jiewen.yao@intel.com> <74D8A39837DF1E4DA445A8C0B3885C503869ADBD@shsmsx102.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D58E0E64C@SHSMSX104.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D58E0F608@SHSMSX104.ccr.corp.intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.22.254.140] MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.21 Subject: Re: [PATCH 17/45] MdeModulePkg/CapsuleApp: Add CapsuleApp application. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Oct 2016 18:35:59 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 WW91IG1lYW4gdXBkYXRlIHRoZSBMb2FkT3B0aW9ucyByZWZlcmVuY2UgdG8gcmVmZXIgdG8gdGhl IEVGSV9MT0FEX09QVElPTiBzdHJ1Y3R1cmU/IEJlY2F1c2UgdGhhdOKAmXMgaW4gZXNzZW5jZSB3 aGF0IGl0IG1lYW5zLg0KDQpUaGFua3MsDQpNaWtlIFJvdGhtYW4NCijov4jlhYsg572X5pav5pu8 IC8g4KSu4KS+4KSH4KSV4KSyIOCksOCli+CkpeCljeCkruClh+CkqOCljSAvINCc0LjRhdCw0LjQ uyDQoNC+0YLQvNCw0L0gLyDXntep15Qg16jXldeY157XnykNCteo15XXoteUINei15nXp9eo15kg 16nXnCDXl9eq15XXnNeZ150NCg0KRnJvbTogQ2Fyc2V5LCBKYWJlbg0KU2VudDogRnJpZGF5LCBT ZXB0ZW1iZXIgMzAsIDIwMTYgODozMSBBTQ0KVG86IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwu Y29tPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgS2lubmV5LCBNaWNoYWVs IEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc7 IFJvdGhtYW4sIE1pY2hhZWwgQSA8bWljaGFlbC5hLnJvdGhtYW5AaW50ZWwuY29tPg0KQ2M6IFRp YW4sIEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb20+OyBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhh bmdAaW50ZWwuY29tPjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPjsgWmVuZywg U3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT47IENhcnNleSwgSmFiZW4gPGphYmVuLmNhcnNleUBp bnRlbC5jb20+DQpTdWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3Vs ZUFwcDogQWRkIENhcHN1bGVBcHAgYXBwbGljYXRpb24uDQoNCk1pa2UgUm90aG1hbiwNCg0KQ2Fu IHdlIGdldCBMb2FkT3B0aW9ucyBhbmQgTG9hZE9wdGlvbnNTaXplIGNsYXJpZmllZCBpbiB0aGUg VUVGSSBTcGVjPyAgVGhpcyBzZWVtcyBsaWtlIGEgc2ltcGxlIGNsYXJpZmljYXRpb24gYW5kIEkg d291bGQgYXJndWUgaXRzIG5lZWRlZC4gIFRoZSBVRUZJIFNoZWxsIGlzIG5vdCB0aGUgb25seSBw cm9kdWNlciBvZiB0aGlzIHByb3RvY29sLiAgQkRTIGxhdW5jaGVzIHRoaW5ncyAobGlrZSB0aGUg VUVGSSBTaGVsbCBpdHNlbGYpIGFuZCB0aGUgc2hlbGwgYWxyZWFkeSBjb25zdW1lcyBpdCBmb3Ig aXRzZWxmIChhbmQgaXQgd29ya3MpLiAgSSB0aGluayBpdCBqdXN0IG5lZWRzIGNsYXJpZmljYXRp b24gc28gcGVvcGxlIGNhbiBkZXBlbmQgb24gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbm90 IGNoYW5naW5nLg0KDQotSmFiZW4NCg0KRnJvbTogTmksIFJ1aXl1DQpTZW50OiBUaHVyc2RheSwg U2VwdGVtYmVyIDI5LCAyMDE2IDk6MTMgUE0NClRvOiBDYXJzZXksIEphYmVuIDxqYWJlbi5jYXJz ZXlAaW50ZWwuY29tPG1haWx0bzpqYWJlbi5jYXJzZXlAaW50ZWwuY29tPj47IFlhbywgSmlld2Vu IDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+PjsgS2lu bmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVs LmQua2lubmV5QGludGVsLmNvbT4+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpDYzogVGlhbiwgRmVuZyA8ZmVuZy50aWFuQGludGVsLmNv bTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+OyBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhh bmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj47IEdhbywgTGltaW5n IDxsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+PjsgWmVu ZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNvbT4+ DQpTdWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDogQWRk IENhcHN1bGVBcHAgYXBwbGljYXRpb24uDQpJbXBvcnRhbmNlOiBIaWdoDQoNClN1cHBvc2luZyB1 c2VyIGlucHV0cyDigJxDYXBzdWxlQXBwLmVmaSBQYXJhbWV0ZXIxIFBhcmFtZXRlcjLigJ0uDQpU aGVyZSBpcyBubyBzcGVjIHRvIGRlZmluZSB3aGF0IHRoZSBMb2FkT3B0aW9uIHNob3VsZCBlcXVh bCB0by4NCklmIHRoZXJlIGlzIGFub3RoZXIgVUVGSSBTaGVsbCBpbXBsZW1lbnRhdGlvbiwgaXQg Y291bGQgaW50ZXJwcmV0IHRoZSBjb21tYW5kIGxpbmUgdGhlbiBzZXRzIG9ubHkg4oCcUGFyYW1l dGVyMSBQYXJhbWV0ZXIy4oCdIGludG8gTG9hZE9wdGlvbiwgb3Igc2V0cyDigJxDYXBzdWxlQXBw LmVmaVx0UGFyYW1ldGVyMVx0UGFyYW1ldGVyMuKAnSB0byBMb2FkT3B0aW9uLCBvciBzZXRzIOKA nFtTaGVsbF1cdENhcHN1bGVBcHAuZWZpXHRQYXJhbWV0ZXIxXHRQYXJhbWV0ZXIy4oCdIHRvIExv YWRPcHRpb24uDQpCZWNhdXNlIGl04oCccHJvZHVjZXPigJ0gc3VjaCBMb2FkT3B0aW9uLCBpdCBr bm93cyBob3cgdG8g4oCcY29uc3VtZeKAnS9wYXJzZSBpdCB0byBnZXQgdGhlIEFSR1ZzLg0KDQpT byBJIHN1Z2dlc3Qgd2UgcHV0IHRoZSBDYXBzdWxlQXBwIGluIFNoZWxsUGtnIGFuZCBsZXQgaXQg dXNlIHRoZSBTaGVsbFBhcmFtZXRlciBwcm90b2NvbC4NCg0KUmVnYXJkcywNClJheQ0KDQpGcm9t OiBDYXJzZXksIEphYmVuDQpTZW50OiBGcmlkYXksIFNlcHRlbWJlciAzMCwgMjAxNiAzOjExIEFN DQpUbzogTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb208bWFpbHRvOnJ1aXl1Lm5pQGludGVs LmNvbT4+OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55 YW9AaW50ZWwuY29tPj47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVs LmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+PjsgZWRrMi1kZXZlbEBsaXN0 cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0KQ2M6IFRpYW4sIEZlbmcg PGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20+PjsgWmhhbmcs IENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVs LmNvbT4+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5n YW9AaW50ZWwuY29tPj47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0 YXIuemVuZ0BpbnRlbC5jb20+PjsgQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fyc2V5QGludGVsLmNv bTxtYWlsdG86amFiZW4uY2Fyc2V5QGludGVsLmNvbT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDE3 LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDogQWRkIENhcHN1bGVBcHAgYXBwbGljYXRpb24u DQoNCkkgYW0gY29uZnVzZWQuDQoNCldoeSBpcyBMb2FkT3B0aW9uIGFuZCBMb2FkT3B0aW9uU2l6 ZSBub3Qgd29ya2luZz8gIFRoaXMgaXMgc3BlY2lmaWVkIGFzIHBhcnQgb2YgVUVGSSBTcGVjIChO b3RlOiBOb3QgVUVGSSBTaGVsbCBTcGVjKSBhcyBhIHN0YW5kYXJkIHdheSB0byBwYXNzIHBhcmFt ZXRlcnMgdG8gVUVGSSBhcHBsaWF0aW9ucy4gIEkgdGhpbmsgdGhpcyBzaG91bGQgd29yayAoYWx0 aG91Z2ggaXQgaXMgbW9yZSB3b3JrIHRoYW4ganVzdCBleGFtaW5pbmcgYXJnYy9hcmd2KS4NCg0K LUphYmVuDQoNCkZyb206IE5pLCBSdWl5dQ0KU2VudDogV2VkbmVzZGF5LCBTZXB0ZW1iZXIgMjgs IDIwMTYgMTE6NDAgUE0NClRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFp bHRvOmppZXdlbi55YW9AaW50ZWwuY29tPj47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQu a2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+PjsgZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0KQ2M6 IFRpYW4sIEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5j b20+PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5i LnpoYW5nQGludGVsLmNvbT4+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFp bHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5j b208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+PjsgQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fy c2V5QGludGVsLmNvbTxtYWlsdG86amFiZW4uY2Fyc2V5QGludGVsLmNvbT4+DQpTdWJqZWN0OiBS RTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDogQWRkIENhcHN1bGVBcHAg YXBwbGljYXRpb24uDQpJbXBvcnRhbmNlOiBIaWdoDQoNCkppZXdlbiwNClRoZSB3YXkgQ2Fwc3Vs ZUFwcCBleHRyYWN0cyB0aGUgQVJHViBhc3N1bWVzIFVFRkkgU2hlbGwgZW5jb2RlcyB0aGUgcGFy YW1ldGVycyB1c2luZyBhIGNlcnRhaW4gd2F5LiBCdXQgdGhlIHBhcmFtZXRlciBlbmNvZGluZyB3 YXkgaXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgU2hlbGwgc3BlYy4NCk1heWJlIHdlIGNhbiBwdXQg dGhlIENhcHN1bGVBcHAgaW4gU2hlbGxQa2csIHRoZW4gbGV0IGl0IGRpcmVjdGx5IHVzZSBTaGVs bFBhcmFtZXRlciBwcm90b2NvbCB0byBnZXQgdGhlIEFSR1YuDQoNCkNvcHlpbmcgSmFiZW4uDQoN ClJlZ2FyZHMsDQpSYXkNCg0KRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtYm91 bmNlc0BsaXN0cy4wMS5vcmddIE9uIEJlaGFsZiBPZiBZYW8sIEppZXdlbg0KU2VudDogVGh1cnNk YXksIFNlcHRlbWJlciAyOSwgMjAxNiAxMDozNyBBTQ0KVG86IEtpbm5leSwgTWljaGFlbCBEIDxt aWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b20+PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEu b3JnPg0KQ2M6IFRpYW4sIEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlh bkBpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWls dG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRl bC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFplbmcsIFN0YXIgPHN0YXIuemVu Z0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+Pg0KU3ViamVjdDogUmU6IFtl ZGsyXSBbUEFUQ0ggMTcvNDVdIE1kZU1vZHVsZVBrZy9DYXBzdWxlQXBwOiBBZGQgQ2Fwc3VsZUFw cCBhcHBsaWNhdGlvbi4NCg0KUmlnaHQuIENhcHN1bGVPbkRpc2sgaXMgbm90IHN1cHBvcnRlZCBp biBCSU9TIHlldC4NCkkgd2lsbCByZW1vdmUgaXQgaW4gQ2Fwc3VsZUFwcC4NCg0KQ2Fwc3VsZUFw cCBqdXN0IHdvcmtzIGFzIGFuIGFnZW50IHRvIHBhc3MgY2Fwc3VsZSB0byBDYXBzdWxlRHhlUnVu dGltZSBkcml2ZXIuDQpTbyBpdCBpcyBjaGVja2VkIGJ5IENhcHN1bGVEeGVSdW50aW1lLCBub3Qg Q2Fwc3VsZUFwcC4NCg0KVGhhbmsgeW91DQpZYW8gSmlld2VuDQoNCkZyb206IEtpbm5leSwgTWlj aGFlbCBEDQpTZW50OiBUaHVyc2RheSwgU2VwdGVtYmVyIDI5LCAyMDE2IDk6MDYgQU0NClRvOiBZ YW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50ZWwu Y29tPj47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAx Lm9yZz47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWls dG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pg0KQ2M6IFRpYW4sIEZlbmcgPGZlbmcudGlh bkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20+PjsgWmVuZywgU3RhciA8c3Rh ci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNvbT4+OyBHYW8sIExpbWlu ZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFpo YW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56aGFuZ0Bp bnRlbC5jb20+Pg0KU3ViamVjdDogUkU6IFtQQVRDSCAxNy80NV0gTWRlTW9kdWxlUGtnL0NhcHN1 bGVBcHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0aW9uLg0KDQpKaWV3ZW4sDQoNCkRvZXMgdGhl IGNhcHN1bGUgb24gZGlzayBmZWF0dXJlIHByb3ZpZGVkIGJ5IHRoaXMgYXBwIHdvcms/DQoNCkkg dHJpZWQgaXQgd2l0aCB0aGUgUXVhcmtQbGF0Zm9ybVBrZyBjYXBzdWxlIGFuZCBJIGNhbiBnZXQN ClRoZSBhcHAgdG8gY29weSB0aGUgY2Fwc3VsZSB0byBhbiBFRkkgU3lzdGVtIFBhcnRpdGlvbiwg YnV0DQpUaGUgbG9naWMgYWZ0ZXIgdGhhdCBwb2ludCBsb29rcyBpbmNvbXBsZXRlLg0KDQpBbHNv LCBpZiBJIGNsZWFyIHRoZSBQZXJzaXN0IGFuZCBSZXNldCBmbGFncyBvbiB0aGUgY2Fwc3VsZSwN CnRoZSBpbW1lZGlhdGUgcHJvY2Vzc2luZyBvZiB0aGUgY2Fwc3VsZSBkb2VzIG5vdCB3b3JrLg0K DQpJcyB0aGVyZSBhbnkgRlcgY29kZSB0aGF0IHdpbGwgbG9vayBmb3IgY2Fwc3VsZXMgb24gZGlz az8NCg0KSWYgdGhlcmUgYXJlIGluY29tcGxldGUgZmVhdHVyZXMgaW4gQ2Fwc3VsZUFwcCwgdGhl biBJIHRoaW5rDQp3ZSBzaG91bGQgcmVtb3ZlIHRoZW0uDQoNCk1pa2UNCg0KPiAtLS0tLU9yaWdp bmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBZYW8sIEppZXdlbg0KPiBTZW50OiBUdWVzZGF5LCBT ZXB0ZW1iZXIgMjAsIDIwMTYgMTE6NDUgUE0NCj4gVG86IGVkazItZGV2ZWxAbGlzdHMuMDEub3Jn PG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4w MS5vcmclM2NtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+Pg0KPiBDYzogVGlhbiwgRmVu ZyA8ZmVuZy50aWFuQGludGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbTxtYWlsdG86 ZmVuZy50aWFuQGludGVsLmNvbSUzY21haWx0bzpmZW5nLnRpYW5AaW50ZWwuY29tPj4+OyBaZW5n LCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29tPG1h aWx0bzpzdGFyLnplbmdAaW50ZWwuY29tJTNjbWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+Pj47 IEtpbm5leSwgTWljaGFlbA0KPiBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwu Y29tJTNjbWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj4+OyBHYW8sIExpbWluZyA8 bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzps aW1pbmcuZ2FvQGludGVsLmNvbSUzY21haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+PjsgWmhh bmcsIENoYW8gQg0KPiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5n QGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbSUzY21haWx0bzpjaGFvLmIu emhhbmdAaW50ZWwuY29tPj4+DQo+IFN1YmplY3Q6IFtQQVRDSCAxNy80NV0gTWRlTW9kdWxlUGtn L0NhcHN1bGVBcHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0aW9uLg0KPg0KPiBUaGlzIENhcHN1 bGVBcHAgY2FuIGhlbHAgcGVyZm9ybSBjYXBzdWxlIHVwZGF0ZSBpbiBVRUZJIHNoZWxsIGVudmly b25tZW50Lg0KPiBJdCBjYW4gYWxzbyBkdW1wIGNhcHN1bGUgaW5mb3JtYXRpb24sIGNhcHN1bGUg c3RhdHVzIHZhcmlhYmxlLCBFU1JUIGFuZCBGTVAuDQo+DQo+IENjOiBGZW5nIFRpYW4gPGZlbmcu dGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlh bkBpbnRlbC5jb20lM2NtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+Pg0KPiBDYzogU3RhciBa ZW5nIDxzdGFyLnplbmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29tPG1haWx0 bzpzdGFyLnplbmdAaW50ZWwuY29tJTNjbWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+Pj4NCj4g Q2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzpt aWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b20lM2NtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pj4NCj4gQ2M6IExpbWluZyBH YW8gPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWls dG86bGltaW5nLmdhb0BpbnRlbC5jb20lM2NtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+Pj4N Cj4gQ2M6IENoYW8gWmhhbmcgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56 aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5jb20lM2NtYWlsdG86Y2hh by5iLnpoYW5nQGludGVsLmNvbT4+Pg0KPiBDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENv bnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4wDQo+IFNpZ25lZC1vZmYtYnk6IEppZXdlbiBZYW8gPGpp ZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amll d2VuLnlhb0BpbnRlbC5jb20lM2NtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+Pj4NCj4gLS0t DQo+ICBNZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9BcHBTdXBwb3J0LmMgICAg ICAgIHwgIDQ4MCArKysrKysrKysNCj4gIE1kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxl QXBwL0NhcHN1bGVBcHAuYyAgICAgICAgfCAxMDQ3ICsrKysrKysrKysrKysrKysrKysrDQo+ICBN ZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwLmluZiAgICAgIHwg ICA3MSArKw0KPiAgTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFw cC51bmkgICAgICB8ICAgMjIgKw0KPiAgTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVB cHAvQ2Fwc3VsZUFwcEV4dHJhLnVuaSB8ICAgMTkgKw0KPiAgTWRlTW9kdWxlUGtnL0FwcGxpY2F0 aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUR1bXAuYyAgICAgICB8ICA4NDAgKysrKysrKysrKysrKysr Kw0KPiAgNiBmaWxlcyBjaGFuZ2VkLCAyNDc5IGluc2VydGlvbnMoKykNCj4NCj4gZGlmZiAtLWdp dCBhL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0FwcFN1cHBvcnQuYw0KPiBi L01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0FwcFN1cHBvcnQuYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4zNjUwNjdkDQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQXBwU3VwcG9y dC5jDQo+IEBAIC0wLDAgKzEsNDgwIEBADQo+ICsvKiogQGZpbGUNCj4gKyAgQSBzaGVsbCBhcHBs aWNhdGlvbiB0aGF0IHRyaWdnZXJzIGNhcHN1bGUgdXBkYXRlIHByb2Nlc3MuDQo+ICsNCj4gKyAg Q29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN Cj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29tcGFuaWVzIHRo aXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91 bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBo cA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElD RU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPiArICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQ UkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiAr DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L0Jhc2VMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsjaW5jbHVk ZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlB bGxvY2F0aW9uTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFi bGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNUYWJsZUxp Yi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJh cnkvUHJpbnRMaWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Mb2FkZWRJbWFnZS5oPg0KPiAr I2luY2x1ZGUgPFByb3RvY29sL1NpbXBsZUZpbGVTeXN0ZW0uaD4NCj4gKyNpbmNsdWRlIDxHdWlk L0ZpbGVJbmZvLmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9HcHQuaD4NCj4gKw0KPiArI2RlZmluZSBN QVhfQVJHX05VTSAgICAgMTENCj4gKw0KPiArVUlOVE4gIEFyZ2MgPSAwOw0KPiArQ0hBUjE2ICpB cmd2W01BWF9BUkdfTlVNXTsNCj4gK0NIQVIxNiAqQXJnQnVmZmVyOw0KPiArDQo+ICsvKioNCj4g Kw0KPiArICBUaGlzIGZ1bmN0aW9uIHBhcnNlIGFwcGxpY2F0aW9uIEFSRy4NCj4gKw0KPiArICBA cmV0dXJuIFN0YXR1cw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtHZXRBcmcgKA0KPiArICBW T0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgKkRh dGE7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplOw0KPiArICBD SEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAqSW5kZXg7DQo+ICsgIENIQVIxNiAgICAgICAg ICAgICAgICAgICAgICAgICpFbmQ7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAg ICpESW5kZXg7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g KyAgRUZJX0xPQURFRF9JTUFHRV9QUk9UT0NPTCAgICAgKkxvYWRlZEltYWdlOw0KPiArDQo+ICsg IFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgZ0lt YWdlSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlMb2FkZWRJbWFnZVByb3RvY29s R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEKiopJkxvYWRlZEltYWdlDQo+ICsgICAg ICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgRGF0YSA9IExvYWRlZEltYWdlLT5Mb2Fk T3B0aW9uczsNCj4gKyAgRGF0YVNpemUgPSBMb2FkZWRJbWFnZS0+TG9hZE9wdGlvbnNTaXplOw0K PiArDQo+ICsgIEVuZCA9IChDSEFSMTYqKShVSU5UTikoRGF0YSArIERhdGFTaXplKTsNCj4gKyAg U3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wgKEVmaUJvb3RTZXJ2aWNlc0RhdGEsIERhdGFTaXpl LCAoVk9JRCAqKikmQXJnQnVmZmVyKTsNCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsN Cj4gKyAgREluZGV4ID0gQXJnQnVmZmVyOw0KPiArICBBcmd2W0FyZ2MrK10gPSBBcmdCdWZmZXI7 DQo+ICsgIGZvciAoSW5kZXggPSAoQ0hBUjE2KilEYXRhOyBJbmRleCA8IEVuZDsgKSB7DQo+ICsg ICAgaWYgKCpJbmRleCA9PSBMJyAnKSB7DQo+ICsgICAgICAqREluZGV4ID0gTCdcMCc7DQo+ICsg ICAgICBpZiAoQXJnYyA+PSBNQVhfQVJHX05VTSkgew0KPiArICAgICAgICByZXR1cm4gRUZJX1VO U1VQUE9SVEVEOw0KPiArICAgICAgfQ0KPiArICAgICAgQXJndltBcmdjKytdID0gKCsrIERJbmRl eCk7DQo+ICsgICAgICB3aGlsZSgqSW5kZXggPT0gTCcgJykgew0KPiArICAgICAgICBJbmRleCAr KzsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgICAgKCooREluZGV4ICsrKSkgPSAoKihJbmRl eCArKykpOw0KPiArICB9DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIENsZWFyIEFQUCBBUkcuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0NsZWFuQXJnICgN Cj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIEZyZWVQb29sIChBcmd2WzBdKTsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFJldHVybiBGaWxlIFN5c3RlbSBWb2x1bWUgY29udGFpbmluZyB0 aGlzIHNoZWxsIGFwcGxpY2F0aW9uLg0KPiArDQo+ICsgIEByZXR1cm4gRmlsZSBTeXN0ZW0gVm9s dW1lIGNvbnRhaW5pbmcgdGhpcyBzaGVsbCBhcHBsaWNhdGlvbi4NCj4gKyoqLw0KPiArRUZJX1NJ TVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAqDQo+ICtHZXRNeVZvbCAoDQo+ICsgIFZPSUQNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiArICBFRklfTE9BREVEX0lNQUdFX1BST1RPQ09MICAgICAgICAgKkxvYWRlZEltYWdlOw0K PiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAgKlZvbDsNCj4gKw0KPiArICBT dGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIGdJbWFn ZUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpTG9hZGVkSW1hZ2VQcm90b2NvbEd1 aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmTG9hZGVkSW1hZ2UNCj4gKyAgICAg ICAgICAgICAgICAgICk7DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ICsNCj4g KyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBM b2FkZWRJbWFnZS0+RGV2aWNlSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlTaW1w bGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiop JlZvbA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICByZXR1cm4gVm9sOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIE5VTEw7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZWFkIGEgZmlsZSBmcm9tIHRoaXMgdm9sdW1lLg0K PiArDQo+ICsgIEBwYXJhbSBWb2wgICAgICAgICAgICAgRmlsZSBTeXN0ZW0gVm9sdW1lDQo+ICsg IEBwYXJhbSBGaWxlTmFtZSAgICAgICAgVGhlIGZpbGUgdG8gYmUgcmVhZC4NCj4gKyAgQHBhcmFt IEJ1ZmZlclNpemUgICAgICBUaGUgZmlsZSBidWZmZXIgc2l6ZQ0KPiArICBAcGFyYW0gQnVmZmVy ICAgICAgICAgIFRoZSBmaWxlIGJ1ZmZlcg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgUmVhZCBmaWxlIHN1Y2Nlc3NmdWxseQ0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgIEZp bGUgbm90IGZvdW5kDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1JlYWRGaWxlRnJvbVZvbCAo DQo+ICsgIElOICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAgKlZvbCwNCj4gKyAg SU4gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRmlsZU5hbWUsDQo+ICsgIE9V VCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlclNpemUsDQo+ICsgIE9V VCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipCdWZmZXINCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBF RklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICAgUm9vdERpcjsNCj4gKyAgRUZJX0ZJTEVf SEFORExFICAgICAgICAgICAgICAgICAgIEhhbmRsZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZpbGVJbmZvU2l6ZTsNCj4gKyAgRUZJX0ZJTEVfSU5GTyAgICAgICAg ICAgICAgICAgICAgICpGaWxlSW5mbzsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRlbXBCdWZmZXJTaXplOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKlRlbXBCdWZmZXI7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gT3BlbiB0aGUgcm9vdCBk aXJlY3RvcnkNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gVm9sLT5PcGVuVm9sdW1lIChWb2wsICZS b290RGlyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBT dGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBPcGVuIHRoZSBmaWxlDQo+ICsg IC8vDQo+ICsgIFN0YXR1cyA9IFJvb3REaXItPk9wZW4gKA0KPiArICAgICAgICAgICAgICAgICAg ICAgIFJvb3REaXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgJkhhbmRsZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICBGaWxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBFRklf RklMRV9NT0RFX1JFQUQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgMA0KPiArICAgICAgICAg ICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBS b290RGlyLT5DbG9zZSAoUm9vdERpcik7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0K PiArDQo+ICsgIFJvb3REaXItPkNsb3NlIChSb290RGlyKTsNCj4gKw0KPiArICAvLw0KPiArICAv LyBHZXQgdGhlIGZpbGUgaW5mb3JtYXRpb24NCj4gKyAgLy8NCj4gKyAgRmlsZUluZm9TaXplID0g c2l6ZW9mKEVGSV9GSUxFX0lORk8pICsgMTAyNDsNCj4gKw0KPiArICBGaWxlSW5mbyA9IEFsbG9j YXRlWmVyb1Bvb2wgKEZpbGVJbmZvU2l6ZSk7DQo+ICsgIGlmIChGaWxlSW5mbyA9PSBOVUxMKSB7 DQo+ICsgICAgSGFuZGxlLT5DbG9zZSAoSGFuZGxlKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gSGFuZGxlLT5HZXRJbmZvICgNCj4gKyAgICAgICAg ICAgICAgICAgICAgIEhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICZnRWZpRmlsZUlu Zm9HdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgJkZpbGVJbmZvU2l6ZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgIEZpbGVJbmZvDQo+ICsgICAgICAgICAgICAgICAgICAgICApOw0KPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgSGFuZGxlLT5DbG9zZSAoSGFuZGxl KTsNCj4gKyAgICBnQlMtPkZyZWVQb29sIChGaWxlSW5mbyk7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEFsbG9jYXRlIGJ1ZmZlciBmb3IgdGhl IGZpbGUgZGF0YS4gVGhlIGxhc3QgQ0hBUjE2IGlzIGZvciBMJ1wwJw0KPiArICAvLw0KPiArICBU ZW1wQnVmZmVyU2l6ZSA9IChVSU5UTikgRmlsZUluZm8tPkZpbGVTaXplICsgc2l6ZW9mKENIQVIx Nik7DQo+ICsgIFRlbXBCdWZmZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChUZW1wQnVmZmVyU2l6ZSk7 DQo+ICsgIGlmIChUZW1wQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICBIYW5kbGUtPkNsb3NlIChI YW5kbGUpOw0KPiArICAgIGdCUy0+RnJlZVBvb2wgKEZpbGVJbmZvKTsNCj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgZ0JTLT5GcmVlUG9vbCAoRmlsZUluZm8pOw0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIFJlYWQgdGhlIGZpbGUgZGF0YSB0byB0aGUgYnVmZmVyDQo+ICsg IC8vDQo+ICsgIFN0YXR1cyA9IEhhbmRsZS0+UmVhZCAoDQo+ICsgICAgICAgICAgICAgICAgICAg ICBIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAmVGVtcEJ1ZmZlclNpemUsDQo+ICsg ICAgICAgICAgICAgICAgICAgICBUZW1wQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAgICAgICAp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgSGFuZGxlLT5DbG9zZSAo SGFuZGxlKTsNCj4gKyAgICBnQlMtPkZyZWVQb29sIChUZW1wQnVmZmVyKTsNCj4gKyAgICByZXR1 cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgSGFuZGxlLT5DbG9zZSAoSGFuZGxlKTsNCj4g Kw0KPiArICAqQnVmZmVyU2l6ZSA9IFRlbXBCdWZmZXJTaXplOw0KPiArICAqQnVmZmVyICAgICA9 IFRlbXBCdWZmZXI7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFJlYWQgYSBmaWxlLg0KPiArICBJZiBTY2FuRnMgaXMgRkxBU0UsIGl0IHdpbGwgdXNl IHRoaXMgVm9sIGFzIGRlZmF1bHQgRnMuDQo+ICsgIElmIFNjYW5GcyBpcyBUUlVFLCBpdCB3aWxs IHNjYW4gYWxsIEZTIGFuZCBjaGVjayB0aGUgZmlsZS4NCj4gKyAgICBJZiB0aGVyZSBpcyBvbmx5 IG9uZSBmaWxlIG1hdGNoIHRoZSBuYW1lLCBpdCB3aWxsIGJlIHJlYWQuDQo+ICsgICAgSWYgdGhl cmUgaXMgbW9yZSB0aGFuIG9uZSBmaWxlIG1hdGNoIHRoZSBuYW1lLCBpdCB3aWxsIHJldHVybiBF cnJvci4NCj4gKw0KPiArICBAcGFyYW0gVGhpc1ZvbCAgICAgICAgIEZpbGUgU3lzdGVtIFZvbHVt ZQ0KPiArICBAcGFyYW0gRmlsZU5hbWUgICAgICAgIFRoZSBmaWxlIHRvIGJlIHJlYWQuDQo+ICsg IEBwYXJhbSBCdWZmZXJTaXplICAgICAgVGhlIGZpbGUgYnVmZmVyIHNpemUNCj4gKyAgQHBhcmFt IEJ1ZmZlciAgICAgICAgICBUaGUgZmlsZSBidWZmZXINCj4gKyAgQHBhcmFtIFNjYW5GcyAgICAg ICAgICBOZWVkIFNjYW4gYWxsIEZTDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBS ZWFkIGZpbGUgc3VjY2Vzc2Z1bGx5DQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgRmlsZSBu b3QgZm91bmQNCj4gKyAgQHJldHZhbCBFRklfTk9fTUFQUElORyBUaGVyZSBpcyBkdXBsaWNhdGVk IGZpbGVzIGZvdW5kDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1JlYWRGaWxlVG9CdWZmZXJF eCAoDQo+ICsgIElOIE9VVCBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAgKipUaGlz Vm9sLA0KPiArICBJTiAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpGaWxl TmFtZSwNCj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVm ZmVyU2l6ZSwNCj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq KkJ1ZmZlciwNCj4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT Y2FuRnMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAgKlZvbDsN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBCdWZmZXJTaXplOw0K PiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRlbXBCdWZmZXI7DQo+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb0hhbmRsZXM7DQo+ICsgIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8g Q2hlY2sgcGFyYW1ldGVycw0KPiArICAvLw0KPiArICBpZiAoKEZpbGVOYW1lID09IE5VTEwpIHx8 IChCdWZmZXIgPT0gTlVMTCkgfHwgKFRoaXNWb2wgPT0gTlVMTCkpIHsNCj4gKyAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gbm90 IHNjYW4gZnMNCj4gKyAgLy8NCj4gKyAgaWYgKCFTY2FuRnMpIHsNCj4gKyAgICBpZiAoKlRoaXNW b2wgPT0gTlVMTCkgew0KPiArICAgICAgKlRoaXNWb2wgPSBHZXRNeVZvbCAoKTsNCj4gKyAgICAg IGlmICgqVGhpc1ZvbCA9PSBOVUxMKSB7DQo+ICsgICAgICAgIHJldHVybiBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICAgIC8vDQo+ICsgICAgLy8gUmVh ZCBmaWxlIGRpcmVjdGx5IGZyb20gVm9sDQo+ICsgICAgLy8NCj4gKyAgICByZXR1cm4gUmVhZEZp bGVGcm9tVm9sICgqVGhpc1ZvbCwgRmlsZU5hbWUsIEJ1ZmZlclNpemUsIEJ1ZmZlcik7DQo+ICsg IH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBuZWVkIHNjYW4gZnMNCj4gKyAgLy8NCj4gKw0KPiAr ICAvLw0KPiArICAvLyBHZXQgYWxsIFZvbCBoYW5kbGUNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0g Z0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgIEJ5UHJvdG9j b2wsDQo+ICsgICAgICAgICAgICAgICAgICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xH dWlkLA0KPiArICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAg Jk5vSGFuZGxlcywNCj4gKyAgICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ICsgICAg ICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoTm9IYW5k bGVzID09IDApKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICsgIH0NCj4gKw0K PiArICAvLw0KPiArICAvLyBXYWxrIHRocm91Z2ggZWFjaCBWb2wNCj4gKyAgLy8NCj4gKyAgKlRo aXNWb2wgPSBOVUxMOw0KPiArICAqQnVmZmVyU2l6ZSA9IDA7DQo+ICsgICpCdWZmZXIgICAgID0g TlVMTDsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTm9IYW5kbGVzOyBJbmRleCsrKSB7 DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAg ICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZp U2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZP SUQgKiopJlZvbA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJS T1IoU3RhdHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg U3RhdHVzID0gUmVhZEZpbGVGcm9tVm9sIChWb2wsIEZpbGVOYW1lLCAmVGVtcEJ1ZmZlclNpemUs ICZUZW1wQnVmZmVyKTsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg ICAgLy8NCj4gKyAgICAgIC8vIFJlYWQgZmlsZSBPSywgY2hlY2sgZHVwbGljYXRpb24NCj4gKyAg ICAgIC8vDQo+ICsgICAgICBpZiAoKlRoaXNWb2wgIT0gTlVMTCkgew0KPiArICAgICAgICAvLw0K PiArICAgICAgICAvLyBGaW5kIHRoZSBkdXBsaWNhdGVkIGZpbGUNCj4gKyAgICAgICAgLy8NCj4g KyAgICAgICAgZ0JTLT5GcmVlUG9vbCAoVGVtcEJ1ZmZlcik7DQo+ICsgICAgICAgIGdCUy0+RnJl ZVBvb2wgKCpCdWZmZXIpOw0KPiArICAgICAgICBQcmludCAoTCJEdXBsaWNhdGVkIEZpbGVOYW1l IGZvdW5kIVxuIik7DQo+ICsgICAgICAgIHJldHVybiBFRklfTk9fTUFQUElORzsNCj4gKyAgICAg IH0gZWxzZSB7DQo+ICsgICAgICAgIC8vDQo+ICsgICAgICAgIC8vIFJlY29yZCB2YWx1ZQ0KPiAr ICAgICAgICAvLw0KPiArICAgICAgICAqVGhpc1ZvbCA9IFZvbDsNCj4gKyAgICAgICAgKkJ1ZmZl clNpemUgPSBUZW1wQnVmZmVyU2l6ZTsNCj4gKyAgICAgICAgKkJ1ZmZlciAgICAgPSBUZW1wQnVm ZmVyOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8v IFNjYW4gRnMgZG9uZQ0KPiArICAvLw0KPiArICBpZiAoKlRoaXNWb2wgPT0gTlVMTCkgew0KPiAr ICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8g RG9uZQ0KPiArICAvLw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBSZWFkIGEgZmlsZS4NCj4gKw0KPiArICBAcGFyYW0gRmlsZU5hbWUgICAgICAgIFRo ZSBmaWxlIHRvIGJlIHJlYWQuDQo+ICsgIEBwYXJhbSBCdWZmZXJTaXplICAgICAgVGhlIGZpbGUg YnVmZmVyIHNpemUNCj4gKyAgQHBhcmFtIEJ1ZmZlciAgICAgICAgICBUaGUgZmlsZSBidWZmZXIN Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIFJlYWQgZmlsZSBzdWNjZXNzZnVsbHkN Cj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICBGaWxlIG5vdCBmb3VuZA0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtSZWFkRmlsZVRvQnVmZmVyICgNCj4gKyAgSU4gIENIQVIxNiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqRmlsZU5hbWUsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlclNpemUsDQo+ICsgIE9VVCBWT0lEICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKipCdWZmZXINCj4gKyAgKQ0KPiArew0KPiArICBF RklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAgKlZvbDsNCj4gKyAgVm9sID0gTlVMTDsN Cj4gKyAgcmV0dXJuIFJlYWRGaWxlVG9CdWZmZXJFeCgmVm9sLCBGaWxlTmFtZSwgQnVmZmVyU2l6 ZSwgQnVmZmVyLCBGQUxTRSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBXcml0ZSBhIGZpbGUu DQo+ICsNCj4gKyAgQHBhcmFtIEZpbGVOYW1lICAgICAgICBUaGUgZmlsZSB0byBiZSB3cml0dGVu Lg0KPiArICBAcGFyYW0gQnVmZmVyU2l6ZSAgICAgIFRoZSBmaWxlIGJ1ZmZlciBzaXplDQo+ICsg IEBwYXJhbSBCdWZmZXIgICAgICAgICAgVGhlIGZpbGUgYnVmZmVyDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICBXcml0ZSBmaWxlIHN1Y2Nlc3NmdWxseQ0KPiArKiovDQo+ICtFRklf U1RBVFVTDQo+ICtXcml0ZUZpbGVGcm9tQnVmZmVyKA0KPiArICBJTiAgQ0hBUjE2ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpGaWxlTmFtZSwNCj4gKyAgSU4gIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplLA0KPiArICBJTiAgVk9JRCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXINCj4gKyAgKQ0KPiArew0KPiArICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfRklMRV9IQU5E TEUgICAgICAgICAgICAgICAgICAgUm9vdERpcjsNCj4gKyAgRUZJX0ZJTEVfSEFORExFICAgICAg ICAgICAgICAgICAgIEhhbmRsZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRlbXBCdWZmZXJTaXplOw0KPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09M ICAgKlZvbDsNCj4gKw0KPiArICBWb2wgPSBHZXRNeVZvbCgpOw0KPiArDQo+ICsgIC8vDQo+ICsg IC8vIE9wZW4gdGhlIHJvb3QgZGlyZWN0b3J5DQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IFZvbC0+ T3BlblZvbHVtZSAoVm9sLCAmUm9vdERpcik7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8g T3BlbiB0aGUgZmlsZQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBSb290RGlyLT5PcGVuICgNCj4g KyAgICAgICAgICAgICAgICAgICAgICBSb290RGlyLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICZIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRmlsZU5hbWUsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9SRUFEIHwgRUZJX0ZJTEVfTU9ERV9XUklURXwg RUZJX0ZJTEVfTU9ERV9DUkVBVEUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgMA0KPiArICAg ICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICBSb290RGlyLT5DbG9zZSAoUm9vdERpcik7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4g KyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIERlbGV0ZSBmaWxlDQo+ICsgIC8vDQo+ICsgIFN0 YXR1cyA9IEhhbmRsZS0+RGVsZXRlKEhhbmRsZSk7DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVz KSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAv LyBPcGVuIHRoZSBmaWxlIGFnYWluDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IFJvb3REaXItPk9w ZW4gKA0KPiArICAgICAgICAgICAgICAgICAgICAgIFJvb3REaXIsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgJkhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBGaWxlTmFtZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQgfCBFRklfRklMRV9NT0RF X1dSSVRFfCBFRklfRklMRV9NT0RFX0NSRUFURSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAw DQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIFJvb3REaXItPkNsb3NlIChSb290RGlyKTsNCj4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiArICB9DQo+ICsNCj4gKyAgUm9vdERpci0+Q2xvc2UgKFJvb3REaXIpOw0KPiArDQo+ ICsgIC8vDQo+ICsgIC8vIFdyaXRlIHRoZSBmaWxlIGRhdGEgZnJvbSB0aGUgYnVmZmVyDQo+ICsg IC8vDQo+ICsgIFRlbXBCdWZmZXJTaXplID0gQnVmZmVyU2l6ZTsNCj4gKyAgU3RhdHVzID0gSGFu ZGxlLT5Xcml0ZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICBIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAmVGVtcEJ1ZmZlclNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICBC dWZmZXINCj4gKyAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICBIYW5kbGUtPkNsb3NlIChIYW5kbGUpOw0KPiArICAgIHJldHVybiBT dGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBIYW5kbGUtPkNsb3NlIChIYW5kbGUpOw0KPiArDQo+ ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9k dWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5jDQo+IGIvTWRlTW9kdWxl UGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5jDQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjBhMjg1NTcNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwLmMNCj4gQEAg LTAsMCArMSwxMDQ3IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgQSBzaGVsbCBhcHBsaWNhdGlvbiB0 aGF0IHRyaWdnZXJzIGNhcHN1bGUgdXBkYXRlIHByb2Nlc3MuDQo+ICsNCj4gKyAgQ29weXJpZ2h0 IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKyAgYXJl IGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJp YnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4g KyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArDQo+ ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBB TiAiQVMgSVMiIEJBU0lTLA0KPiArICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJ T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArDQo+ICsqKi8N Cj4gKw0KPiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIu aD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFy eS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9u TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4N Cj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYi5oPg0KPiAr I2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvUHJpbnRM aWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Mb2FkZWRJbWFnZS5oPg0KPiArI2luY2x1ZGUg PFByb3RvY29sL1NpbXBsZUZpbGVTeXN0ZW0uaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9HcmFw aGljc091dHB1dC5oPg0KPiArI2luY2x1ZGUgPEd1aWQvRmlsZUluZm8uaD4NCj4gKyNpbmNsdWRl IDxHdWlkL0dwdC5oPg0KPiArI2luY2x1ZGUgPEd1aWQvR2xvYmFsVmFyaWFibGUuaD4NCj4gKyNp bmNsdWRlIDxHdWlkL0NhcHN1bGVSZXBvcnQuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL1N5c3RlbVJl c291cmNlVGFibGUuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0ZtcENhcHN1bGUuaD4NCj4gKyNpbmNs dWRlIDxJbmR1c3RyeVN0YW5kYXJkL1dpbmRvd3NVeENhcHN1bGUuaD4NCj4gKw0KPiArI2RlZmlu ZSBDQVBTVUxFX0hFQURFUl9TSVpFICAweDIwDQo+ICsNCj4gKyNkZWZpbmUgTkVTVEVEX0NBUFNV TEVfSEVBREVSX1NJWkUgIFNJWkVfNEtCDQo+ICsjZGVmaW5lIFNZU1RFTV9GSVJNV0FSRV9GTEFH IDB4NTAwMDANCj4gKyNkZWZpbmUgREVWSUNFX0ZJUk1XQVJFX0ZMQUcgMHg3ODAxMA0KPiArDQo+ ICsjZGVmaW5lIEVGSV9DQVBTVUxFX0ZST01fRklMRV9ESVIgICAgICAgICAgICAgICAgICAgICAg ICAgICBMIlxcRUZJXFxVcGRhdGVDYXBzdWxlXFw8ZmlsZTovLy9cXEVGSVxVcGRhdGVDYXBzdWxl XD48ZmlsZTovLy9cXEVGSVxVcGRhdGVDYXBzdWxlXCUzY2ZpbGU6XEVGSVxVcGRhdGVDYXBzdWxl XCUzZT4iDQo+ICsjZGVmaW5lIEVGSV9PU19JTkRJQ0FUSU9OU19GSUxFX0NBUFNVTEVfREVMSVZF UllfU1VQUE9SVEVEICAweDAwMDAwMDAwMDAwMDAwMDQNCj4gKw0KPiArI2RlZmluZSBNQUpPUl9W RVJTSU9OICAgMQ0KPiArI2RlZmluZSBNSU5PUl9WRVJTSU9OICAgMA0KPiArDQo+ICsjZGVmaW5l IE1BWF9BUkdfTlVNICAgICAxMQ0KPiArI2RlZmluZSBNQVhfQ0FQU1VMRV9OVU0gKE1BWF9BUkdf TlVNIC0gMSkNCj4gKw0KPiArZXh0ZXJuIFVJTlROICBBcmdjOw0KPiArZXh0ZXJuIENIQVIxNiAq QXJndltdOw0KPiArDQo+ICsvLw0KPiArLy8gRGVmaW5lIGhvdyBtYW55IGJsb2NrIGRlc2NyaXB0 b3JzIHdlIHdhbnQgdG8gdGVzdCB3aXRoLg0KPiArLy8NCj4gK1VJTlROICBOdW1iZXJPZkRlc2Ny aXB0b3JzID0gMTsNCj4gK1VJTlROICBDYXBzdWxlRmlyc3RJbmRleDsNCj4gK1VJTlROICBDYXBz dWxlTGFzdEluZGV4Ow0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBjYXBzdWxlIGluZm9ybWF0aW9u DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBjYXBzdWxlIGlu Zm9ybWF0aW9uIGlzIGR1bXBlZC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAg IElucHV0IHBhcmFtZXRlciBpcyBub3QgdmFsaWQuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0R1bXBDYXBzdWxlKA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBEdW1w IGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICBUaGUgY2Fwc3VsZSBzdGF0dXMgdmFyaWFibGUgaXMgZHVtcGVkLg0KPiArICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgSW5wdXQgcGFyYW1ldGVyIGlzIG5vdCB2YWxp ZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRG1wQ2Fwc3VsZVN0YXR1c1ZhcmlhYmxlKA0K PiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIEZNUCBwcm90b2NvbCBp bmZvLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRm1wRGF0YSgNCj4gKyAgVk9JRA0KPiArICAp Ow0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBFU1JUIGluZm8uDQo+ICsqKi8NCj4gK1ZPSUQNCj4g K0R1bXBFc3J0RGF0YSgNCj4gKyAgVk9JRA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmVh ZCBhIGZpbGUuDQo+ICsNCj4gKyAgQHBhcmFtIEZpbGVOYW1lICAgICAgICBUaGUgZmlsZSB0byBi ZSByZWFkLg0KPiArICBAcGFyYW0gQnVmZmVyU2l6ZSAgICAgIFRoZSBmaWxlIGJ1ZmZlciBzaXpl DQo+ICsgIEBwYXJhbSBCdWZmZXIgICAgICAgICAgVGhlIGZpbGUgYnVmZmVyDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICBSZWFkIGZpbGUgc3VjY2Vzc2Z1bGx5DQo+ICsgIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgRmlsZSBub3QgZm91bmQNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArUmVhZEZpbGVUb0J1ZmZlcigNCj4gKyAgSU4gIENIQVIxNiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqRmlsZU5hbWUsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKkJ1ZmZlclNpemUsDQo+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKipCdWZmZXINCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFdyaXRl IGEgZmlsZS4NCj4gKw0KPiArICBAcGFyYW0gRmlsZU5hbWUgICAgICAgIFRoZSBmaWxlIHRvIGJl IHdyaXR0ZW4uDQo+ICsgIEBwYXJhbSBCdWZmZXJTaXplICAgICAgVGhlIGZpbGUgYnVmZmVyIHNp emUNCj4gKyAgQHBhcmFtIEJ1ZmZlciAgICAgICAgICBUaGUgZmlsZSBidWZmZXINCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIFdyaXRlIGZpbGUgc3VjY2Vzc2Z1bGx5DQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK1dyaXRlRmlsZUZyb21CdWZmZXIoDQo+ICsgIElOICBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkZpbGVOYW1lLA0KPiArICBJTiAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemUsDQo+ICsgIElOICBWT0lE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcg0KPiArICApOw0KPiArDQo+ ICsvKioNCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHBhcnNlIGFwcGxpY2F0aW9uIEFSRy4NCj4g Kw0KPiArICBAcmV0dXJuIFN0YXR1cw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtHZXRBcmcg KA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBDbGVhciBBUFAgQVJHLg0K PiArKiovDQo+ICtWT0lEDQo+ICtDbGVhbkFyZyAoDQo+ICsgIFZPSUQNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIENyZWF0ZSBVWCBjYXBzdWxlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgICBUaGUgY2Fwc3VsZSBoZWFkZXIgaXMgYXBwZW5kZWQuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBJbnB1dCBwYXJhbWV0ZXIgaXMgbm90IHZhbGlk Lg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgTm8gZW5vdWdoIHJlc291cmNl IHRvIGNyZWF0ZSBVWCBjYXBzdWxlLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtDcmVhdGVC bXBGbXAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBDSEFSMTYgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKk91dHB1dENhcHN1bGVOYW1lOw0KPiArICBWT0lE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJtcEJ1ZmZlcjsNCj4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVTaXpl Ow0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJt cE5hbWU7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqRnVsbENhcHN1bGVCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGdWxsQ2Fwc3VsZUJ1ZmZlclNpemU7DQo+ICsgIEVGSV9ESVNQTEFZ X0NBUFNVTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAqRGlzcGxheUNhcHN1bGU7DQo+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIEVGSV9HUkFQSElDU19PVVRQVVRfUFJPVE9DT0wgICAgICAgICAgICAgICAgICAqR29wOw0K PiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2woJmdFZmlHcmFwaGljc091dHB1 dFByb3RvY29sR3VpZCwgTlVMTCwgKFZPSUQgKiopJkdvcCk7DQo+ICsgIGlmIChFRklfRVJST1Io U3RhdHVzKSkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogTk8gR09QIGlzIGZvdW5kLlxu Iik7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArICBQcmludChM IkN1cnJlbnQgR09QOiBNb2RlIC0gJWQsICIsIEdvcC0+TW9kZS0+TW9kZSk7DQo+ICsgIFByaW50 KEwiSG9yaXpvbnRhbFJlc29sdXRpb24gLSAlZCwgIiwgR29wLT5Nb2RlLT5JbmZvLT5Ib3Jpem9u dGFsUmVzb2x1dGlvbik7DQo+ICsgIFByaW50KEwiVmVydGljYWxSZXNvbHV0aW9uIC0gJWRcbiIs IEdvcC0+TW9kZS0+SW5mby0+VmVydGljYWxSZXNvbHV0aW9uKTsNCj4gKyAgLy8gSG9yaXpvbnRh bFJlc29sdXRpb24gPj0gQk1QX0lNQUdFX0hFQURFUi5QaXhlbFdpZHRoDQo+ICsgIC8vIFZlcnRp Y2FsUmVzb2x1dGlvbiAgID49IEJNUF9JTUFHRV9IRUFERVIuUGl4ZWxIZWlnaHQNCj4gKw0KPiAr ICBpZiAoQXJnYyAhPSA1KSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBJbnZhbGlkIFBh cmFtZXRlci5cbiIpOw0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4g Kw0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbM10sIEwiLU8iKSAhPSAwKSB7DQo+ICsgICAgUHJpbnQo TCJDYXBzdWxlQXBwOiBOTyBvdXRwdXQgY2Fwc3VsZSBuYW1lLlxuIik7DQo+ICsgICAgcmV0dXJu IEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArICBPdXRwdXRDYXBzdWxlTmFtZSA9IEFyZ3Zb NF07DQo+ICsNCj4gKyAgQm1wQnVmZmVyID0gTlVMTDsNCj4gKyAgRmlsZVNpemUgPSAwOw0KPiAr ICBGdWxsQ2Fwc3VsZUJ1ZmZlciA9IE5VTEw7DQo+ICsNCj4gKyAgQm1wTmFtZSA9IEFyZ3ZbMl07 DQo+ICsgIFN0YXR1cyA9IFJlYWRGaWxlVG9CdWZmZXIoQm1wTmFtZSwgJkZpbGVTaXplLCAmQm1w QnVmZmVyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgUHJpbnQoTCJD YXBzdWxlQXBwOiBCTVAgaW1hZ2UgKCVzKSBpcyBub3QgZm91bmQuXG4iLCBCbXBOYW1lKTsNCj4g KyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBGdWxsQ2Fwc3VsZUJ1ZmZlclNpemUg PSBzaXplb2YoRUZJX0RJU1BMQVlfQ0FQU1VMRSkgKyBGaWxlU2l6ZTsNCj4gKyAgRnVsbENhcHN1 bGVCdWZmZXIgPSBBbGxvY2F0ZVBvb2woRnVsbENhcHN1bGVCdWZmZXJTaXplKTsNCj4gKyAgaWYg KEZ1bGxDYXBzdWxlQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6 IENhcHN1bGUgQnVmZmVyIHNpemUgKDB4JXgpIHRvbyBiaWcuXG4iLA0KPiBGdWxsQ2Fwc3VsZUJ1 ZmZlclNpemUpOw0KPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAg IGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIERpc3BsYXlDYXBzdWxlID0gKEVGSV9ESVNQ TEFZX0NBUFNVTEUgKilGdWxsQ2Fwc3VsZUJ1ZmZlcjsNCj4gKyAgQ29weUd1aWQoJkRpc3BsYXlD YXBzdWxlLT5DYXBzdWxlSGVhZGVyLkNhcHN1bGVHdWlkLCAmZ1dpbmRvd3NVeENhcHN1bGVHdWlk KTsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFkZXIuSGVhZGVyU2l6ZSA9IHNpemVv ZihEaXNwbGF5Q2Fwc3VsZS0+Q2Fwc3VsZUhlYWRlcik7DQo+ICsgIERpc3BsYXlDYXBzdWxlLT5D YXBzdWxlSGVhZGVyLkZsYWdzID0gQ0FQU1VMRV9GTEFHU19QRVJTSVNUX0FDUk9TU19SRVNFVDsN Cj4gKyAgRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFkZXIuQ2Fwc3VsZUltYWdlU2l6ZSA9IChV SU5UMzIpRnVsbENhcHN1bGVCdWZmZXJTaXplOw0KPiArDQo+ICsgIERpc3BsYXlDYXBzdWxlLT5J bWFnZVBheWxvYWQuVmVyc2lvbiA9IDE7DQo+ICsgIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxv YWQuQ2hlY2tzdW0gPSAwOw0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLkltYWdl VHlwZSA9IDA7IC8vIEJNUA0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLlJlc2Vy dmVkID0gMDsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5Nb2RlID0gR29wLT5N b2RlLT5Nb2RlOw0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLk9mZnNldFggPSAw Ow0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLk9mZnNldFkgPSAwOw0KPiArDQo+ ICsgIENvcHlNZW0oKERpc3BsYXlDYXBzdWxlICsgMSksIEJtcEJ1ZmZlciwgRmlsZVNpemUpOw0K PiArDQo+ICsgIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuQ2hlY2tzdW0gPSBDYWxjdWxh dGVDaGVja1N1bTgoRnVsbENhcHN1bGVCdWZmZXIsDQo+IEZ1bGxDYXBzdWxlQnVmZmVyU2l6ZSk7 DQo+ICsNCj4gKyAgU3RhdHVzID0gV3JpdGVGaWxlRnJvbUJ1ZmZlcihPdXRwdXRDYXBzdWxlTmFt ZSwgRnVsbENhcHN1bGVCdWZmZXJTaXplLA0KPiBGdWxsQ2Fwc3VsZUJ1ZmZlcik7DQo+ICsgIFBy aW50KEwiQ2Fwc3VsZUFwcDogV3JpdGUgJXMgJXJcbiIsIE91dHB1dENhcHN1bGVOYW1lLCBTdGF0 dXMpOw0KPiArDQo+ICtEb25lOg0KPiArICBpZiAoQm1wQnVmZmVyICE9IE5VTEwpIHsNCj4gKyAg ICBGcmVlUG9vbChCbXBCdWZmZXIpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEZ1bGxDYXBzdWxl QnVmZmVyICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbChGdWxsQ2Fwc3VsZUJ1ZmZlcik7DQo+ ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg R2V0IEltYWdlVHlwZUlkIGluIHRoZSBGTVAgY2Fwc3VsZSBoZWFkZXIuDQo+ICsNCj4gKyAgQHBh cmFtIENhcHN1bGVIZWFkZXIgIFRoZSBGTVAgY2Fwc3VsZSBpbWFnZSBoZWFkZXIuDQo+ICsNCj4g KyAgQHJldHVybiBJbWFnZVR5cGVJZA0KPiArKiovDQo+ICtFRklfR1VJRCAqDQo+ICtHZXRDYXBz dWxlSW1hZ2VUeXBlSWQoDQo+ICsgIElOIEVGSV9DQVBTVUxFX0hFQURFUiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqQ2Fwc3VsZUhlYWRlcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9GSVJN V0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSEVBREVSICAgICAgICpGbXBDYXBzdWxlSGVhZGVyOw0K PiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSXRlbU9m ZnNldExpc3Q7DQo+ICsgIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSU1BR0VfSEVB REVSICpJbWFnZUhlYWRlcjsNCj4gKw0KPiArICBGbXBDYXBzdWxlSGVhZGVyID0gKEVGSV9GSVJN V0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSEVBREVSICopKChVSU5UOCAqKUNhcHN1bGVIZWFkZXIN Cj4gKyBDYXBzdWxlSGVhZGVyLT5IZWFkZXJTaXplKTsNCj4gKyAgSXRlbU9mZnNldExpc3QgPSAo VUlOVDY0ICopKEZtcENhcHN1bGVIZWFkZXIgKyAxKTsNCj4gKyAgaWYgKEZtcENhcHN1bGVIZWFk ZXItPlBheWxvYWRJdGVtQ291bnQgPT0gMCkgew0KPiArICAgIHJldHVybiBOVUxMOw0KPiArICB9 DQo+ICsgIEltYWdlSGVhZGVyID0gKEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSU1B R0VfSEVBREVSICopKChVSU5UOA0KPiAqKUZtcENhcHN1bGVIZWFkZXIgKyBJdGVtT2Zmc2V0TGlz dFtGbXBDYXBzdWxlSGVhZGVyLT5FbWJlZGRlZERyaXZlckNvdW50XSk7DQo+ICsgIHJldHVybiAm SW1hZ2VIZWFkZXItPlVwZGF0ZUltYWdlVHlwZUlkOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg R2V0IEVTUlQgRndUeXBlIGFjY29yZGluZyB0byBJbWFnZVR5cGVJZA0KPiArDQo+ICsgIEBwYXJh bSAgSW1hZ2VUeXBlSWQgICBJbWFnZVR5cGVJZCBvZiBhbiBGTVAgY2Fwc3VsZS4NCj4gKw0KPiAr ICBAcmV0dXJuIEVTUlQgRndUeXBlDQo+ICsqKi8NCj4gK1VJTlQzMg0KPiArR2V0RXNydEZ3VHlw ZSgNCj4gKyAgSU4gIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqSW1hZ2VUeXBlSWQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsgIEVGSV9TWVNURU1fUkVTT1VSQ0VfVEFCTEUgICpFc3J0Ow0KPiAr ICBFRklfU1lTVEVNX1JFU09VUkNFX0VOVFJZICAqRXNydEVudHJ5Ow0KPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBDaGVjayBFU1JU DQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEVmaUdldFN5c3RlbUNvbmZpZ3VyYXRpb25UYWJsZSgm Z0VmaVN5c3RlbVJlc291cmNlVGFibGVHdWlkLCAoVk9JRA0KPiAqKikmRXNydCk7DQo+ICsgIGlm ICghRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBFc3J0RW50cnkgPSAoVk9JRCAqKShFc3J0 ICsgMSk7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRXNydC0+RndSZXNvdXJjZUNv dW50OyBJbmRleCsrLCBFc3J0RW50cnkrKykgew0KPiArICAgICAgaWYgKENvbXBhcmVHdWlkKCZF c3J0RW50cnktPkZ3Q2xhc3MsIEltYWdlVHlwZUlkKSkgew0KPiArICAgICAgICByZXR1cm4gRXNy dEVudHJ5LT5Gd1R5cGU7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAg cmV0dXJuIEVTUlRfRldfVFlQRV9VTktOT1dOOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQXBw ZW5kIGEgY2Fwc3VsZSBoZWFkZXIgb24gdG9wIG9mIGN1cnJlbnQgaW1hZ2UuDQo+ICsgIFRoaXMg ZnVuY3Rpb24gZm9sbG93cyBXaW5kb3dzIFVFRkkgRmlybXdhcmUgVXBkYXRlIFBsYXRmb3JtIGRv Y3VtZW50Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY2Fw c3VsZSBoZWFkZXIgaXMgYXBwZW5kZWQuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgICBJbnB1dCBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTICAgTm8gZW5vdWdoIHJlc291cmNlIHRvIGFwcGVuZCBjYXBzdWxlIGhlYWRl ci4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArQ3JlYXRlTmVzdGVkRm1wKA0KPiArICBWT0lE DQo+ICsgICkNCj4gK3sNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpPdXRwdXRDYXBzdWxlTmFtZTsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpDYXBzdWxlQnVmZmVyOw0KPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZVNpemU7DQo+ICsgIENIQVIx NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3VsZU5hbWU7DQo+ ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRnVsbENh cHN1bGVCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGdWxsQ2Fwc3VsZUJ1ZmZlclNpemU7DQo+ICsgIEVGSV9DQVBTVUxFX0hFQURFUiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqTmVzdGVkQ2Fwc3VsZUhlYWRlcjsNCj4gKyAgRUZJ X0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJbWFnZVR5cGVJZDsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ3VHlw ZTsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gKw0KPiArICBpZiAoQXJnYyAhPSA1KSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxl QXBwOiBJbnZhbGlkIFBhcmFtZXRlci5cbiIpOw0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JU RUQ7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbM10sIEwiLU8iKSAhPSAwKSB7 DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBOTyBvdXRwdXQgY2Fwc3VsZSBuYW1lLlxuIik7 DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArICBPdXRwdXRDYXBz dWxlTmFtZSA9IEFyZ3ZbNF07DQo+ICsNCj4gKyAgQ2Fwc3VsZUJ1ZmZlciA9IE5VTEw7DQo+ICsg IEZpbGVTaXplID0gMDsNCj4gKyAgRnVsbENhcHN1bGVCdWZmZXIgPSBOVUxMOw0KPiArDQo+ICsg IENhcHN1bGVOYW1lID0gQXJndlsyXTsNCj4gKyAgU3RhdHVzID0gUmVhZEZpbGVUb0J1ZmZlcihD YXBzdWxlTmFtZSwgJkZpbGVTaXplLCAmQ2Fwc3VsZUJ1ZmZlcik7DQo+ICsgIGlmIChFRklfRVJS T1IoU3RhdHVzKSkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogQ2Fwc3VsZSBpbWFnZSAo JXMpIGlzIG5vdCBmb3VuZC5cbiIsIENhcHN1bGVOYW1lKTsNCj4gKyAgICBnb3RvIERvbmU7DQo+ ICsgIH0NCj4gKw0KPiArICBJbWFnZVR5cGVJZCA9IEdldENhcHN1bGVJbWFnZVR5cGVJZChDYXBz dWxlQnVmZmVyKTsNCj4gKyAgaWYgKEltYWdlVHlwZUlkID09IE5VTEwpIHsNCj4gKyAgICBQcmlu dChMIkNhcHN1bGVBcHA6IENhcHN1bGUgSW1hZ2VUeXBlSWQgaXMgbm90IGZvdW5kLlxuIik7DQo+ ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsgIEZ3VHlwZSA9IEdldEVzcnRGd1R5cGUoSW1h Z2VUeXBlSWQpOw0KPiArICBpZiAoKEZ3VHlwZSAhPSBFU1JUX0ZXX1RZUEVfU1lTVEVNRklSTVdB UkUpICYmIChGd1R5cGUgIT0NCj4gRVNSVF9GV19UWVBFX0RFVklDRUZJUk1XQVJFKSkgew0KPiAr ICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogQ2Fwc3VsZSBGd1R5cGUgaXMgaW52YWxpZC5cbiIpOw0K PiArICAgIGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIEZ1bGxDYXBzdWxlQnVmZmVyU2l6 ZSA9IE5FU1RFRF9DQVBTVUxFX0hFQURFUl9TSVpFICsgRmlsZVNpemU7DQo+ICsgIEZ1bGxDYXBz dWxlQnVmZmVyID0gQWxsb2NhdGVQb29sKEZ1bGxDYXBzdWxlQnVmZmVyU2l6ZSk7DQo+ICsgIGlm IChGdWxsQ2Fwc3VsZUJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBw OiBDYXBzdWxlIEJ1ZmZlciBzaXplICgweCV4KSB0b28gYmlnLlxuIiwNCj4gRnVsbENhcHN1bGVC dWZmZXJTaXplKTsNCj4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAg ICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBOZXN0ZWRDYXBzdWxlSGVhZGVyID0gKEVG SV9DQVBTVUxFX0hFQURFUiAqKUZ1bGxDYXBzdWxlQnVmZmVyOw0KPiArICBaZXJvTWVtKE5lc3Rl ZENhcHN1bGVIZWFkZXIsIE5FU1RFRF9DQVBTVUxFX0hFQURFUl9TSVpFKTsNCj4gKyAgQ29weUd1 aWQoJk5lc3RlZENhcHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkLCBJbWFnZVR5cGVJZCk7DQo+ICsg IE5lc3RlZENhcHN1bGVIZWFkZXItPkhlYWRlclNpemUgPSBORVNURURfQ0FQU1VMRV9IRUFERVJf U0laRTsNCj4gKyAgTmVzdGVkQ2Fwc3VsZUhlYWRlci0+RmxhZ3MgPSAoRndUeXBlID09IEVTUlRf RldfVFlQRV9ERVZJQ0VGSVJNV0FSRSkgPw0KPiBTWVNURU1fRklSTVdBUkVfRkxBRyA6IERFVklD RV9GSVJNV0FSRV9GTEFHOw0KPiArICBOZXN0ZWRDYXBzdWxlSGVhZGVyLT5DYXBzdWxlSW1hZ2VT aXplID0gKFVJTlQzMilGdWxsQ2Fwc3VsZUJ1ZmZlclNpemU7DQo+ICsNCj4gKyAgQ29weU1lbSgo VUlOVDggKilOZXN0ZWRDYXBzdWxlSGVhZGVyICsgTmVzdGVkQ2Fwc3VsZUhlYWRlci0+SGVhZGVy U2l6ZSwNCj4gQ2Fwc3VsZUJ1ZmZlciwgRmlsZVNpemUpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFdy aXRlRmlsZUZyb21CdWZmZXIoT3V0cHV0Q2Fwc3VsZU5hbWUsIEZ1bGxDYXBzdWxlQnVmZmVyU2l6 ZSwNCj4gRnVsbENhcHN1bGVCdWZmZXIpOw0KPiArICBQcmludChMIkNhcHN1bGVBcHA6IFdyaXRl ICVzICVyXG4iLCBPdXRwdXRDYXBzdWxlTmFtZSwgU3RhdHVzKTsNCj4gKw0KPiArRG9uZToNCj4g KyAgaWYgKENhcHN1bGVCdWZmZXIgIT0gTlVMTCkgew0KPiArICAgIEZyZWVQb29sKENhcHN1bGVC dWZmZXIpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEZ1bGxDYXBzdWxlQnVmZmVyICE9IE5VTEwp IHsNCj4gKyAgICBGcmVlUG9vbChGdWxsQ2Fwc3VsZUJ1ZmZlcik7DQo+ICsgIH0NCj4gKw0KPiAr ICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qKg0KPiArICBDbGVhciBjYXBz dWxlIHN0YXR1cyB2YXJpYWJsZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgVGhlIGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlIGlzIGNsZWFyZWQuDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0NsZWFyQ2Fwc3VsZVN0YXR1c1ZhcmlhYmxlKA0KPiArICBWT0lEDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4g KyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZVZhck5hbWVbMjBd Ow0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqVGVtcFZhck5hbWU7 DQo+ICsNCj4gKyAgU3RyQ3B5UyAoQ2Fwc3VsZVZhck5hbWUsIHNpemVvZihDYXBzdWxlVmFyTmFt ZSkvc2l6ZW9mKENhcHN1bGVWYXJOYW1lWzBdKSwNCj4gTCJDYXBzdWxlIik7DQo+ICsgIFRlbXBW YXJOYW1lID0gQ2Fwc3VsZVZhck5hbWUgKyBTdHJMZW4gKENhcHN1bGVWYXJOYW1lKTsNCj4gKyAg SW5kZXggPSAwOw0KPiArDQo+ICsgIHdoaWxlIChUUlVFKSB7DQo+ICsgICAgVW5pY29kZVNQcmlu dCAoVGVtcFZhck5hbWUsIDUgKiBzaXplb2YoQ0hBUjE2KSwgTCIlMDR4IiwgSW5kZXgpOw0KPiAr DQo+ICsgICAgU3RhdHVzID0gZ1JULT5TZXRWYXJpYWJsZSAoDQo+ICsgICAgICAgICAgICAgICAg ICAgIENhcHN1bGVWYXJOYW1lLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaUNhcHN1bGVS ZXBvcnRHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICBFRklfVkFSSUFCTEVfTk9OX1ZPTEFU SUxFIHwgRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTIHwNCj4gRUZJX1ZBUklBQkxFX0JPT1RT RVJWSUNFX0FDQ0VTUywNCj4gKyAgICAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgKFZPSUQgKilOVUxMDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAg aWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gVGhlcmUg aXMgbm8gY2Fwc3VsZSB2YXJpYWJsZXMsIHF1aXQNCj4gKyAgICAgIC8vDQo+ICsgICAgICBicmVh azsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBJbmRleCsrOw0KPiArICAgIGlmIChJbmRleCA+IDB4 RkZGRikgew0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IHRoZSBhY3RpdmUg VUVGSSBzeXN0ZW0gcGFydGl0aW9uIGZyb20gYm9vdG9wdGlvbiBsaXN0Lg0KPiArDQo+ICsgIEBw YXJhbVtvdXRdIEZzICAgIFNpbXBsZSBGaWxlIFN5c3RlbSBwcm90b2NvbCBvbiB0aGUgYWN0aXZl IFVFRkkgc3lzdGVtIHBhcnRpdGlvbg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICBh Y3RpdmUgVUVGSSBzeXN0ZW0gcGFydGl0aW9uIGZvdW5kDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK0dldEVmaVN5c1BhcnRpdGlvbigNCj4gKyAgT1VUIEVGSV9TSU1QTEVfRklMRV9TWVNURU1f UFJPVE9DT0wgKipGcw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAg KkZzVGVtcDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9IYW5kbGVz Ow0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlczsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAgSGFuZGxl cyA9IE5VTEw7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gc2VhcmNoIGZvciBFRkkgc3lzdGVtIHBh cnRpdGlvbiBwcm90b2NvbCBvbiBCb290IG9wdGlvbiBkZXZpY2UgcGF0aA0KPiArICAvLw0KPiAr ICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlcihCeVByb3RvY29sLCAmZ0VmaVBhcnRU eXBlU3lzdGVtUGFydEd1aWQsIE5VTEwsDQo+ICZOb0hhbmRsZXMsICZIYW5kbGVzKTsNCj4gKyAg aWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0K PiArDQo+ICsgIC8vDQo+ICsgIC8vIFNraXAgQm9vdE9wdGlvbnMgd2l0aGluIEZWDQo+ICsgIC8v DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE5vSGFuZGxlczsgSW5kZXgrKykgew0KPiAr ICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKEhhbmRsZXNbSW5kZXhdLCAmZ0VmaVNp bXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQsDQo+IChWT0lEICoqKSZGc1RlbXApOw0KPiArICAg IGlmICghRUZJX0VSUk9SIChTdGF0dXMpKXsNCj4gKyAgICAgICpGcyA9IEZzVGVtcDsNCj4gKyAg ICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgQ29weSBhIGxpc3Qgb2YgY2Fwc3VsZSBpbWFnZXMgdG8gdGhlIGFj dGl2ZSBVRUZJIHN5c3RlbSBwYXJ0aXRpb24gZnJvbSBib290b3B0aW9uDQo+IGxpc3QuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSBDYXBzdWxlQnVmZmVyICAgIEFuIGFycmF5IG9mIHBvaW50ZXIgdG8g Y2Fwc3VsZSBpbWFnZXMNCj4gKyAgQHBhcmFtW2luXSBGaWxlU2l6ZSAgICAgICAgIEFuIGFycmF5 IG9mIFVJTlROIHRvIGNhcHN1bGUgaW1hZ2VzIHNpemUNCj4gKyAgQHBhcmFtW2luXSBDYXBzdWxl TnVtICAgICAgIFRoZSBjb3VudCBvZiBjYXBzdWxlIGltYWdlcw0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICBDYXBzdWxlIGltYWdlcyBhcmUgY29waWVkIHRvIHRoZSBhY3RpdmUgVUVG SSBzeXN0ZW0gcGFydGl0aW9uDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0NvcHlDYXBzdWxl VG9BY3RpdmVFZmlQYXJ0aXRpb24oDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICoqQ2Fwc3VsZUJ1ZmZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgKkZpbGVTaXplLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBDYXBz dWxlTnVtDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3Vs ZU5hbWU7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiAr ICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAqRnM7DQo+ICsgIEVGSV9GSUxFX0hB TkRMRSAgICAgICAgICAgICAgICAgIFJvb3REaXI7DQo+ICsgIEVGSV9GSUxFX0hBTkRMRSAgICAg ICAgICAgICAgICAgIENhcHN1bGVEaXI7DQo+ICsgIEVGSV9GSUxFX0hBTkRMRSAgICAgICAgICAg ICAgICAgIERlc3RIYW5kbGU7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg IERhdGFTaXplOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICBPc0luZGlj YXRpb247DQo+ICsNCj4gKyAgUm9vdERpciAgICAgID0gTlVMTDsNCj4gKyAgQ2Fwc3VsZURpciAg ID0gTlVMTDsNCj4gKw0KPiArICBTdGF0dXMgPSBHZXRFZmlTeXNQYXJ0aXRpb24oJkZzKTsNCj4g KyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgUHJpbnQgKEwiQ2FuIG5vdCBmaW5k IGFjdGl2ZSBVRUZJIFN5c3RlbSBQYXJ0aXRpb25cbiIpOw0KPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBGcy0+T3BlblZvbHVtZShGcywgJlJvb3REaXIp Ow0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBnb3RvIEVYSVQ7DQo+ICsg IH0NCj4gKw0KPiArICBTdGF0dXMgPSBSb290RGlyLT5PcGVuKA0KPiArICAgICAgICAgICAgICAg ICAgICAgIFJvb3REaXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgJkNhcHN1bGVEaXIsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgRUZJX0NBUFNVTEVfRlJPTV9GSUxFX0RJUiwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQgfCBFRklfRklMRV9NT0RFX1dS SVRFIHwgRUZJX0ZJTEVfTU9ERV9DUkVBVEUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRUZJ X0ZJTEVfRElSRUNUT1JZDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVG SV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgZ290byBFWElUOw0KPiArICB9DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gUmVhZCB0aGUgaW5wdXQgZmlsZXMuDQo+ICsgIC8vDQo+ICsgIGZvciAoSW5k ZXggPSAwOyBJbmRleCA8IENhcHN1bGVOdW07IEluZGV4KyspIHsNCj4gKyAgICBDYXBzdWxlTmFt ZSA9IEFyZ3ZbQ2Fwc3VsZUZpcnN0SW5kZXggKyBJbmRleF07DQo+ICsgICAgU3RhdHVzID0gQ2Fw c3VsZURpci0+T3BlbigNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVEaXIs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzdEhhbmRsZSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIENhcHN1bGVOYW1lLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgRUZJX0ZJTEVfTU9ERV9SRUFEIHwgRUZJX0ZJTEVfTU9ERV9XUklURSB8DQo+IEVGSV9G SUxFX01PREVfQ1JFQVRFLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0ZJTEVf QVJDSElWRQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJ X0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogJXMgb3BlbiBl cnJvciAtICVyXG4iLCBDYXBzdWxlTmFtZSwgU3RhdHVzKTsNCj4gKyAgICAgIGNvbnRpbnVlOw0K PiArICAgIH0NCj4gKw0KPiArICAgIERhdGFTaXplID0gRmlsZVNpemVbSW5kZXhdOw0KPiArICAg IFN0YXR1cyA9IERlc3RIYW5kbGUtPldyaXRlKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgRGVzdEhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZEYXRhU2l6ZSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVCdWZmZXJbSW5kZXhdDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIERlc3RIYW5kbGUtPkNsb3NlKERl c3RIYW5kbGUpOw0KPiArICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgICAgUHJp bnQoTCJDYXBzdWxlQXBwOiAlcyB3cml0ZSBlcnJvciAtICVyLCBGaWxlU2l6ZSAtIDB4JXhcbiIs IENhcHN1bGVOYW1lLA0KPiBTdGF0dXMsIEZpbGVTaXplW0luZGV4XSk7DQo+ICsgICAgfQ0KPiAr ICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ1JULT5HZXRWYXJpYWJsZSAoDQo+ICsgICAgICAgICAg ICAgICAgICBMIk9zSW5kaWNhdGlvbnMiLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlHbG9i YWxWYXJpYWJsZUd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAg ICAgICAgICAgJkRhdGFTaXplLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKikgJk9zSW5k aWNhdGlvbg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9S KFN0YXR1cykgfHwgRGF0YVNpemUgIT0gc2l6ZW9mKE9zSW5kaWNhdGlvbikpIHsNCj4gKyAgICBP c0luZGljYXRpb24gPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gU2V0IE9zSW5k aWNhdGlvbnMgVmFyaWFibGUgRUZJX09TX0lORElDQVRJT05TX0ZJTEVfQ0FQU1VMRV9ERUxJVkVS WV9TVVBQT1JURUQgYml0DQo+ICsgIC8vDQo+ICsgIE9zSW5kaWNhdGlvbiB8PSBFRklfT1NfSU5E SUNBVElPTlNfRklMRV9DQVBTVUxFX0RFTElWRVJZX1NVUFBPUlRFRDsNCj4gKyAgU3RhdHVzID0g Z1JULT5TZXRWYXJpYWJsZSAoDQo+ICsgICAgICAgICAgICAgICAgICBMIk9zSW5kaWNhdGlvbnMi LA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQsDQo+ICsgICAg ICAgICAgICAgICAgICBFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFIHwgRUZJX1ZBUklBQkxFX1JV TlRJTUVfQUNDRVNTIHwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9WQVJJQUJMRV9CT09UU0VS VklDRV9BQ0NFU1MsDQo+ICsgICAgICAgICAgICAgICAgICBzaXplb2YoT3NJbmRpY2F0aW9uKSwN Cj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICopJk9zSW5kaWNhdGlvbg0KPiArICAgICAgICAg ICAgICAgICAgKTsNCj4gKw0KPiArDQo+ICtFWElUOg0KPiArICBpZiAoUm9vdERpciAhPSBOVUxM KSB7DQo+ICsgICAgUm9vdERpci0+Q2xvc2UoUm9vdERpcik7DQo+ICsgIH0NCj4gKw0KPiArICBp ZiAoQ2Fwc3VsZURpciAhPSBOVUxMKSB7DQo+ICsgICAgQ2Fwc3VsZURpci0+Q2xvc2UoQ2Fwc3Vs ZURpcik7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgQnVpbGQgR2F0aGVyIGxpc3QgZm9yIGEgbGlzdCBvZiBjYXBzdWxlIGltYWdlcy4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBDYXBzdWxlQnVmZmVyICAgIEFuIGFycmF5IG9mIHBvaW50 ZXIgdG8gY2Fwc3VsZSBpbWFnZXMNCj4gKyAgQHBhcmFtW2luXSAgRmlsZVNpemUgICAgICAgICBB biBhcnJheSBvZiBVSU5UTiB0byBjYXBzdWxlIGltYWdlcyBzaXplDQo+ICsgIEBwYXJhbVtpbl0g IENhcHN1bGVOdW0gICAgICAgVGhlIGNvdW50IG9mIGNhcHN1bGUgaW1hZ2VzDQo+ICsgIEBwYXJh bVtvdXRdIEJsb2NrRGVzY3JpcHRvcnMgVGhlIGJsb2NrIGRlc2NyaXB0b3JzIGZvciB0aGUgY2Fw c3VsZSBpbWFnZXMNCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTIFRoZSBibG9jayBkZXNj cmlwdG9ycyBmb3IgdGhlIGNhcHN1bGUgaW1hZ2VzIGFyZSBjb25zdHJ1Y3RlZC4NCj4gKyoqLw0K PiArRUZJX1NUQVRVUw0KPiArQnVpbGRHYXRoZXJMaXN0KA0KPiArICBJTiBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAqKkNhcHN1bGVCdWZmZXIsDQo+ICsgIElOIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICpGaWxlU2l6ZSwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgQ2Fwc3VsZU51bSwNCj4gKyAgT1VUIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBU T1IgKipCbG9ja0Rlc2NyaXB0b3JzDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9S ICAqQmxvY2tEZXNjcmlwdG9yczE7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1Ig ICpCbG9ja0Rlc2NyaXB0b3JzMjsNCj4gKyAgRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAg KkJsb2NrRGVzY3JpcHRvclByZTsNCj4gKyAgRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAg KkJsb2NrRGVzY3JpcHRvcnNIZWFkZXI7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBU T1IgICpUZW1wQmxvY2tQdHI7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICpU ZW1wRGF0YVB0cjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZUxlZnQ7 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFNpemU7DQo+ICsgIElOVDMyICAg ICAgICAgICAgICAgICAgICAgICAgIENvdW50Ow0KPiArICBJTlQzMiAgICAgICAgICAgICAgICAg ICAgICAgICBOdW1iZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 Ow0KPiArDQo+ICsgIFRlbXBCbG9ja1B0ciAgICAgICAgICAgPSBOVUxMOw0KPiArICBCbG9ja0Rl c2NyaXB0b3JzMSAgICAgID0gTlVMTDsNCj4gKyAgQmxvY2tEZXNjcmlwdG9yczIgICAgICA9IE5V TEw7DQo+ICsgIEJsb2NrRGVzY3JpcHRvclByZSAgICAgPSBOVUxMOw0KPiArICBCbG9ja0Rlc2Ny aXB0b3JzSGVhZGVyID0gTlVMTDsNCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBD YXBzdWxlTnVtOyBJbmRleCsrKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBBbGxvY2F0ZSBtZW1v cnkgZm9yIHRoZSBkZXNjcmlwdG9ycy4NCj4gKyAgICAvLw0KPiArICAgIGlmIChOdW1iZXJPZkRl c2NyaXB0b3JzID09IDEpIHsNCj4gKyAgICAgIENvdW50ID0gMjsNCj4gKyAgICB9IGVsc2Ugew0K PiArICAgICAgQ291bnQgPSAoSU5UMzIpKE51bWJlck9mRGVzY3JpcHRvcnMgKyAyKSAvIDI7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgU2l6ZSAgICAgICAgICAgICAgID0gQ291bnQgKiBzaXplb2Yg KEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IpOw0KPiArICAgIEJsb2NrRGVzY3JpcHRvcnMx ICA9IEFsbG9jYXRlUnVudGltZVplcm9Qb29sIChTaXplKTsNCj4gKyAgICBpZiAoQmxvY2tEZXNj cmlwdG9yczEgPT0gTlVMTCkgew0KPiArICAgICAgUHJpbnQgKEwiQ2Fwc3VsZUFwcDogZmFpbGVk IHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGVzY3JpcHRvcnNcbiIpOw0KPiArICAgICAgU3RhdHVz ID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICBnb3RvIEVSUkVYSVQ7DQo+ICsgICAg fSBlbHNlIHsNCj4gKyAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGNyZWF0aW5nIGNhcHN1bGUg ZGVzY3JpcHRvcnMgYXQgMHglWFxuIiwgKFVJTlROKQ0KPiBCbG9ja0Rlc2NyaXB0b3JzMSk7DQo+ ICsgICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBjYXBzdWxlIGRhdGEgc3RhcnRzICAgICAgICAg IGF0IDB4JVggd2l0aCBzaXplIDB4JVhcbiIsDQo+IChVSU5UTikgQ2Fwc3VsZUJ1ZmZlciwgRmls ZVNpemUpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gUmVjb3JkIGRlc2Np cnB0b3IgaGVhZGVyDQo+ICsgICAgLy8NCj4gKyAgICBpZiAoSW5kZXggPT0gMCkgew0KPiArICAg ICAgQmxvY2tEZXNjcmlwdG9yc0hlYWRlciA9IEJsb2NrRGVzY3JpcHRvcnMxOw0KPiArICAgIH0N Cj4gKw0KPiArICAgIGlmIChCbG9ja0Rlc2NyaXB0b3JQcmUgIT0gTlVMTCkgew0KPiArICAgICAg QmxvY2tEZXNjcmlwdG9yUHJlLT5Vbmlvbi5Db250aW51YXRpb25Qb2ludGVyID0gKFVJTlROKSBC bG9ja0Rlc2NyaXB0b3JzMTsNCj4gKyAgICAgIEJsb2NrRGVzY3JpcHRvclByZS0+TGVuZ3RoID0g MDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEZpbGwgdGhlbSBpbg0KPiAr ICAgIC8vDQo+ICsgICAgVGVtcEJsb2NrUHRyICA9IEJsb2NrRGVzY3JpcHRvcnMxOw0KPiArICAg IFRlbXBEYXRhUHRyICAgPSBDYXBzdWxlQnVmZmVyW0luZGV4XTsNCj4gKyAgICBTaXplTGVmdCAg ICAgID0gRmlsZVNpemVbSW5kZXhdOw0KPiArICAgIGZvciAoTnVtYmVyID0gMDsgKE51bWJlciA8 IENvdW50IC0gMSkgJiYgKFNpemVMZWZ0ICE9IDApOyBOdW1iZXIrKykgew0KPiArICAgICAgLy8N Cj4gKyAgICAgIC8vIERpdmlkZSByZW1haW5pbmcgZGF0YSBpbiBoYWxmDQo+ICsgICAgICAvLw0K PiArICAgICAgaWYgKE51bWJlck9mRGVzY3JpcHRvcnMgIT0gMSkgew0KPiArICAgICAgICBpZiAo U2l6ZUxlZnQgPT0gMSkgew0KPiArICAgICAgICAgIFNpemUgPSAxOw0KPiArICAgICAgICB9IGVs c2Ugew0KPiArICAgICAgICAgIFNpemUgPSBTaXplTGVmdCAvIDI7DQo+ICsgICAgICAgIH0NCj4g KyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIFNpemUgPSBTaXplTGVmdDsNCj4gKyAgICAgIH0N Cj4gKyAgICAgIFRlbXBCbG9ja1B0ci0+VW5pb24uRGF0YUJsb2NrICAgID0gKFVJTlROKVRlbXBE YXRhUHRyOw0KPiArICAgICAgVGVtcEJsb2NrUHRyLT5MZW5ndGggID0gU2l6ZTsNCj4gKyAgICAg IFByaW50IChMIkNhcHN1bGVBcHA6IGNhcHN1bGUgYmxvY2svc2l6ZSAgICAgICAgICAgICAgMHgl WC8weCVYXG4iLCAoVUlOVE4pDQo+IFRlbXBEYXRhUHRyLCBTaXplKTsNCj4gKyAgICAgIFNpemVM ZWZ0IC09IFNpemU7DQo+ICsgICAgICBUZW1wRGF0YVB0ciArPSBTaXplOw0KPiArICAgICAgVGVt cEJsb2NrUHRyKys7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBBbGxvY2F0 ZSB0aGUgc2Vjb25kIGxpc3QsIHBvaW50IHRoZSBmaXJzdCBibG9jaydzIGxhc3QgZW50cnkgdG8g cG9pbnQNCj4gKyAgICAvLyB0byB0aGlzIG9uZSwgYW5kIGZpbGwgdGhpcyBvbmUgaW4uIFdvcnN0 IGNhc2UgaXMgdGhhdCB0aGUgcHJldmlvdXMNCj4gKyAgICAvLyBsaXN0IG9ubHkgaGFkIG9uZSBl bGVtZW50IHRoYXQgcG9pbnRlZCBoZXJlLCBzbyB3ZSBuZWVkIGF0IGxlYXN0IHR3bw0KPiArICAg IC8vIGVsZW1lbnRzIC0tIG9uZSB0byBwb2ludCB0byBhbGwgdGhlIGRhdGEsIGFub3RoZXIgdG8g dGVybWluYXRlIHRoZSBsaXN0Lg0KPiArICAgIC8vDQo+ICsgICAgaWYgKChOdW1iZXJPZkRlc2Ny aXB0b3JzICE9IDEpICYmIChTaXplTGVmdCAhPSAwKSkgew0KPiArICAgICAgQ291bnQgPSAoSU5U MzIpKE51bWJlck9mRGVzY3JpcHRvcnMgKyAyKSAtIENvdW50Ow0KPiArICAgICAgaWYgKENvdW50 ID09IDEpIHsNCj4gKyAgICAgICAgQ291bnQrKzsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAg U2l6ZSAgICAgICAgICAgICAgPSBDb3VudCAqIHNpemVvZiAoRUZJX0NBUFNVTEVfQkxPQ0tfREVT Q1JJUFRPUik7DQo+ICsgICAgICBCbG9ja0Rlc2NyaXB0b3JzMiA9IEFsbG9jYXRlUnVudGltZVpl cm9Qb29sIChTaXplKTsNCj4gKyAgICAgIGlmIChCbG9ja0Rlc2NyaXB0b3JzMiA9PSBOVUxMKSB7 DQo+ICsgICAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1v cnkgZm9yIGRlc2NyaXB0b3JzXG4iKTsNCj4gKyAgICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+ICsgICAgICAgIGdvdG8gRVJSRVhJVDsNCj4gKyAgICAgIH0NCj4gKw0KPiAr ICAgICAgLy8NCj4gKyAgICAgIC8vIFBvaW50IHRoZSBmaXJzdCBsaXN0J3MgbGFzdCBlbGVtZW50 IHRvIHBvaW50IHRvIHRoaXMgc2Vjb25kIGxpc3QuDQo+ICsgICAgICAvLw0KPiArICAgICAgVGVt cEJsb2NrUHRyLT5Vbmlvbi5Db250aW51YXRpb25Qb2ludGVyICAgPSAoVUlOVE4pIEJsb2NrRGVz Y3JpcHRvcnMyOw0KPiArDQo+ICsgICAgICBUZW1wQmxvY2tQdHItPkxlbmd0aCAgPSAwOw0KPiAr ICAgICAgVGVtcEJsb2NrUHRyID0gQmxvY2tEZXNjcmlwdG9yczI7DQo+ICsgICAgICBmb3IgKE51 bWJlciA9IDA7IE51bWJlciA8IENvdW50IC0gMTsgTnVtYmVyKyspIHsNCj4gKyAgICAgICAgLy8N Cj4gKyAgICAgICAgLy8gSWYgc2Vjb25kLXRvLWxhc3Qgb25lLCB0aGVuIGR1bXAgcmVzdCB0byB0 aGlzIGVsZW1lbnQNCj4gKyAgICAgICAgLy8NCj4gKyAgICAgICAgaWYgKE51bWJlciA9PSAoQ291 bnQgLSAyKSkgew0KPiArICAgICAgICAgIFNpemUgPSBTaXplTGVmdDsNCj4gKyAgICAgICAgfSBl bHNlIHsNCj4gKyAgICAgICAgICAvLw0KPiArICAgICAgICAgIC8vIERpdmlkZSByZW1haW5pbmcg ZGF0YSBpbiBoYWxmDQo+ICsgICAgICAgICAgLy8NCj4gKyAgICAgICAgICBpZiAoU2l6ZUxlZnQg PT0gMSkgew0KPiArICAgICAgICAgICAgU2l6ZSA9IDE7DQo+ICsgICAgICAgICAgfSBlbHNlIHsN Cj4gKyAgICAgICAgICAgIFNpemUgPSBTaXplTGVmdCAvIDI7DQo+ICsgICAgICAgICAgfQ0KPiAr ICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgVGVtcEJsb2NrUHRyLT5Vbmlvbi5EYXRhQmxvY2sg ICAgPSAoVUlOVE4pVGVtcERhdGFQdHI7DQo+ICsgICAgICAgIFRlbXBCbG9ja1B0ci0+TGVuZ3Ro ICA9IFNpemU7DQo+ICsgICAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGNhcHN1bGUgYmxvY2sv c2l6ZSAgICAgICAgICAgICAgMHglWC8weCVYXG4iLCAoVUlOVE4pDQo+IFRlbXBEYXRhUHRyLCBT aXplKTsNCj4gKyAgICAgICAgU2l6ZUxlZnQgLT0gU2l6ZTsNCj4gKyAgICAgICAgVGVtcERhdGFQ dHIgKz0gU2l6ZTsNCj4gKyAgICAgICAgVGVtcEJsb2NrUHRyKys7DQo+ICsgICAgICAgIGlmIChT aXplTGVmdCA9PSAwKSB7DQo+ICsgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgIH0NCj4gKyAg ICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBCbG9ja0Rlc2NyaXB0b3JQcmUgPSBUZW1wQmxv Y2tQdHI7DQo+ICsgICAgQmxvY2tEZXNjcmlwdG9yczEgID0gTlVMTDsNCj4gKyAgfQ0KPiArDQo+ ICsgIC8vDQo+ICsgIC8vIE51bGwtdGVybWluYXRlLg0KPiArICAvLw0KPiArICBpZiAoVGVtcEJs b2NrUHRyICE9IE5VTEwpIHsNCj4gKyAgICBUZW1wQmxvY2tQdHItPlVuaW9uLkNvbnRpbnVhdGlv blBvaW50ZXIgICAgPSAoVUlOVE4pTlVMTDsNCj4gKyAgICBUZW1wQmxvY2tQdHItPkxlbmd0aCAg PSAwOw0KPiArICAgICpCbG9ja0Rlc2NyaXB0b3JzID0gQmxvY2tEZXNjcmlwdG9yc0hlYWRlcjsN Cj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKw0KPiArRVJSRVhJVDoN Cj4gKyAgaWYgKEJsb2NrRGVzY3JpcHRvcnMxICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbChC bG9ja0Rlc2NyaXB0b3JzMSk7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQmxvY2tEZXNjcmlwdG9y czIgIT0gTlVMTCkgew0KPiArICAgIEZyZWVQb29sKEJsb2NrRGVzY3JpcHRvcnMyKTsNCj4gKyAg fQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDbGVh ciB0aGUgR2F0aGVyIGxpc3QgZm9yIGEgbGlzdCBvZiBjYXBzdWxlIGltYWdlcy4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBCbG9ja0Rlc2NyaXB0b3JzIFRoZSBibG9jayBkZXNjcmlwdG9ycyBmb3Ig dGhlIGNhcHN1bGUgaW1hZ2VzDQo+ICsgIEBwYXJhbVtpbl0gIENhcHN1bGVOdW0gICAgICAgVGhl IGNvdW50IG9mIGNhcHN1bGUgaW1hZ2VzDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0NsZWFuR2F0aGVy TGlzdCgNCj4gKyAgSU4gRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAgICpCbG9ja0Rlc2Ny aXB0b3JzLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZU51 bQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgICAqVGVt cEJsb2NrUHRyOw0KPiArICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SICAgKlRlbXBCbG9j a1B0cjE7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgICAqVGVtcEJsb2NrUHRy MjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArDQo+ICsg IGlmIChCbG9ja0Rlc2NyaXB0b3JzICE9IE5VTEwpIHsNCj4gKyAgICBUZW1wQmxvY2tQdHIxID0g QmxvY2tEZXNjcmlwdG9yczsNCj4gKyAgICB3aGlsZSAoMSl7DQo+ICsgICAgICBUZW1wQmxvY2tQ dHIgPSBUZW1wQmxvY2tQdHIxOw0KPiArICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ2Fw c3VsZU51bTsgSW5kZXgrKykgew0KPiArICAgICAgICBpZiAoVGVtcEJsb2NrUHRyW0luZGV4XS5M ZW5ndGggPT0gMCkgew0KPiArICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICB9DQo+ICsgICAg ICB9DQo+ICsNCj4gKyAgICAgIGlmIChUZW1wQmxvY2tQdHJbSW5kZXhdLlVuaW9uLkNvbnRpbnVh dGlvblBvaW50ZXIgPT0gKFVJTlROKU5VTEwpIHsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAg ICB9DQo+ICsNCj4gKyAgICAgIFRlbXBCbG9ja1B0cjIgPSAoVk9JRCAqKSAoKFVJTlROKSBUZW1w QmxvY2tQdHItPlVuaW9uLkNvbnRpbnVhdGlvblBvaW50ZXIpOw0KPiArICAgICAgRnJlZVBvb2wo VGVtcEJsb2NrUHRyMSk7DQo+ICsgICAgICBUZW1wQmxvY2tQdHIxID0gVGVtcEJsb2NrUHRyMjsN Cj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFByaW50IEFQUCB1c2Fn ZS4NCj4gKyoqLw0KPiArVk9JRA0KPiArUHJpbnRVc2FnZSAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0K PiArew0KPiArICBQcmludChMIkNhcHN1bGVBcHA6ICB1c2FnZVxuIik7DQo+ICsgIFByaW50KEwi ICBDYXBzdWxlQXBwIFstRl0gPENhcHN1bGUuLi4+IFstTlJdXG4iKTsNCj4gKyAgUHJpbnQoTCIg IENhcHN1bGVBcHAgLVNcbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFwcCAtQ1xuIik7DQo+ ICsgIFByaW50KEwiICBDYXBzdWxlQXBwIC1QXG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVB cHAgLUVcbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFwcCAtRyA8Qk1QPiAtTyA8Q2Fwc3Vs ZT5cbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFwcCAtTiA8Q2Fwc3VsZT4gLU8gPE5lc3Rl ZENhcHN1bGU+XG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVBcHAgLUR8LURTIDxDYXBzdWxl PlxuIik7DQo+ICsgIFByaW50KEwiUGFyYW1ldGVyOlxuIik7DQo+ICsgIFByaW50KEwiICAtRjog IFB1dCBjYXBzdWxlIGZpbGUgdG8gZGlzay5cbiIpOw0KPiArICBQcmludChMIiAgICAgICBObyAt RiBtZWFucyB0byBwdXQgY2Fwc3VsZSBmaWxlIGluIG1lbW9yeS5cbiIpOw0KPiArICBQcmludChM IiAgLU5SOiBObyBSZXNldC5cbiIpOw0KPiArICBQcmludChMIiAgLVM6ICBEdW1wIGNhcHN1bGUg c3RhdHVzLlxuIik7DQo+ICsgIFByaW50KEwiICAtQzogIENsZWFyIGNhcHN1bGUgc3RhdHVzLlxu Iik7DQo+ICsgIFByaW50KEwiICAtUDogIER1bXAgRk1QIHByb3RvY29sIGluZm8uXG4iKTsNCj4g KyAgUHJpbnQoTCIgIC1FOiAgRHVtcCBFU1JUIHRhYmxlIGluZm8uXG4iKTsNCj4gKyAgUHJpbnQo TCIgIC1HOiAgSW5wdXQgQk1QIGZpbGUgbmFtZVxuIik7DQo+ICsgIFByaW50KEwiICAtTjogIEFw cGVuZCBDYXBzdWxlIEhlYWRlciBhY2Nyb2RpbmcgdG8gV2luZG93cyBGaXJtd2FyZSBVcGRhdGVc biIpOw0KPiArICBQcmludChMIiAgLU86ICBPdXRwdXQgQ2Fwc3VsZSBmaWxlIG5hbWVcbiIpOw0K PiArICBQcmludChMIiAgLUQ6ICBEdW1wIENhcHN1bGVcbiIpOw0KPiArICBQcmludChMIiAgLURT OiBEdW1wIENhcHN1bGUgd2l0aCBTeXN0ZW0gRk1QIGZvcm1hdFxuIik7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBVcGRhdGUgQ2Fwc3VsZSBpbWFnZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBJ bWFnZUhhbmRsZSAgICAgVGhlIGltYWdlIGhhbmRsZS4NCj4gKyAgQHBhcmFtW2luXSAgU3lzdGVt VGFibGUgICAgIFRoZSBzeXN0ZW0gdGFibGUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgIENvbW1hbmQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIENvbW1hbmQgdXNhZ2UgZXJyb3IuDQo+ICsgIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBUaGUgaW5wdXQgZmlsZSBjYW4ndCBiZSBmb3VuZC4N Cj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVZWZpTWFpbiAoDQo+ICsgIElO IEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICBJTiBFRklfU1lTVEVNX1RBQkxF ICAqU3lzdGVtVGFibGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVT aXplW01BWF9DQVBTVUxFX05VTV07DQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAg ICpDYXBzdWxlQnVmZmVyW01BWF9DQVBTVUxFX05VTV07DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NL X0RFU0NSSVBUT1IgICpCbG9ja0Rlc2NyaXB0b3JzOw0KPiArICBFRklfQ0FQU1VMRV9IRUFERVIg ICAgICAgICAgICAgKkNhcHN1bGVIZWFkZXJBcnJheVtNQVhfQ0FQU1VMRV9OVU0gKyAxXTsNCj4g KyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgIE1heENhcHN1bGVTaXplOw0KPiArICBF RklfUkVTRVRfVFlQRSAgICAgICAgICAgICAgICAgUmVzZXRUeXBlOw0KPiArICBCT09MRUFOICAg ICAgICAgICAgICAgICAgICAgICAgTmVlZFJlc2V0Ow0KPiArICBCT09MRUFOICAgICAgICAgICAg ICAgICAgICAgICAgTm9SZXNldDsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAg IE5lZWRDb3B5T25EaXNrOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgKkNh cHN1bGVOYW1lOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZU51 bTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArDQo+ICsg IFN0YXR1cyA9IEdldEFyZygpOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAg ICBQcmludFVzYWdlKCk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArICBpZiAo QXJnYyA8IDIpIHsNCj4gKyAgICBQcmludFVzYWdlKCk7DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4g KyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsgIGlmICgoU3Ry Q21wKEFyZ3ZbMV0sIEwiLUQiKSA9PSAwKSB8fA0KPiArICAgICAgKFN0ckNtcChBcmd2WzFdLCBM Ii1EUyIpID09IDApKSB7DQo+ICsgICAgU3RhdHVzID0gRHVtcENhcHN1bGUoKTsNCj4gKyAgICBD bGVhbkFyZygpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKyAgaWYgKFN0ckNt cChBcmd2WzFdLCBMIi1HIikgPT0gMCkgew0KPiArICAgIFN0YXR1cyA9IENyZWF0ZUJtcEZtcCgp Ow0KPiArICAgIENsZWFuQXJnKCk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiAr ICBpZiAoU3RyQ21wKEFyZ3ZbMV0sIEwiLU4iKSA9PSAwKSB7DQo+ICsgICAgU3RhdHVzID0gQ3Jl YXRlTmVzdGVkRm1wKCk7DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4gKyAgICByZXR1cm4gU3RhdHVz Ow0KPiArICB9DQo+ICsgIGlmIChTdHJDbXAoQXJndlsxXSwgTCItUyIpID09IDApIHsNCj4gKyAg ICBTdGF0dXMgPSBEbXBDYXBzdWxlU3RhdHVzVmFyaWFibGUoKTsNCj4gKyAgICBDbGVhbkFyZygp Ow0KPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArICBpZiAoU3RyQ21wKEFy Z3ZbMV0sIEwiLUMiKSA9PSAwKSB7DQo+ICsgICAgU3RhdHVzID0gQ2xlYXJDYXBzdWxlU3RhdHVz VmFyaWFibGUoKTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgIH0NCj4gKyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1QIikgPT0gMCkgew0KPiArICAgIER1 bXBGbXBEYXRhKCk7DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4gKyAgICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+ICsgIH0NCj4gKyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1FIikgPT0gMCkgew0KPiAr ICAgIER1bXBFc3J0RGF0YSgpOw0KPiArICAgIENsZWFuQXJnKCk7DQo+ICsgICAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiArICB9DQo+ICsgIGlmIChTdHJDbXAoQXJndlsxXSwgTCItRiIpID09IDAp IHsNCj4gKyAgICBOZWVkQ29weU9uRGlzayA9IFRSVUU7DQo+ICsgICAgQ2Fwc3VsZUZpcnN0SW5k ZXggPSAyOw0KPiArICB9IGVsc2Ugew0KPiArICAgIE5lZWRDb3B5T25EaXNrID0gRkFMU0U7DQo+ ICsgICAgQ2Fwc3VsZUZpcnN0SW5kZXggPSAxOw0KPiArICB9DQo+ICsgIGlmIChTdHJDbXAoQXJn dltBcmdjIC0gMV0sIEwiLU5SIikgPT0gMCkgew0KPiArICAgIE5vUmVzZXQgPSBUUlVFOw0KPiAr ICAgIENhcHN1bGVMYXN0SW5kZXggPSBBcmdjIC0gMjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBO b1Jlc2V0ID0gRkFMU0U7DQo+ICsgICAgQ2Fwc3VsZUxhc3RJbmRleCA9IEFyZ2MgLSAxOw0KPiAr ICB9DQo+ICsgIENhcHN1bGVOdW0gPSBDYXBzdWxlTGFzdEluZGV4IC0gQ2Fwc3VsZUZpcnN0SW5k ZXggKyAxOw0KPiArDQo+ICsgIGlmIChDYXBzdWxlRmlyc3RJbmRleCA+IENhcHN1bGVMYXN0SW5k ZXgpIHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IE5PIGNhcHN1bGUgaW1hZ2UuXG4iKTsN Cj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsg IH0NCj4gKyAgaWYgKENhcHN1bGVOdW0gPiBNQVhfQ0FQU1VMRV9OVU0pIHsNCj4gKyAgICBQcmlu dChMIkNhcHN1bGVBcHA6IFRvbyBtYW55IGNhcHN1bGUgaW1hZ2VzLlxuIik7DQo+ICsgICAgQ2xl YW5BcmcoKTsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9DQo+ICsNCj4g KyAgWmVyb01lbSgmQ2Fwc3VsZUJ1ZmZlciwgc2l6ZW9mKENhcHN1bGVCdWZmZXIpKTsNCj4gKyAg WmVyb01lbSgmRmlsZVNpemUsIHNpemVvZihGaWxlU2l6ZSkpOw0KPiArICBCbG9ja0Rlc2NyaXB0 b3JzID0gTlVMTDsNCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDYXBzdWxlTnVt OyBJbmRleCsrKSB7DQo+ICsgICAgQ2Fwc3VsZU5hbWUgPSBBcmd2W0NhcHN1bGVGaXJzdEluZGV4 ICsgSW5kZXhdOw0KPiArICAgIFN0YXR1cyA9IFJlYWRGaWxlVG9CdWZmZXIoQ2Fwc3VsZU5hbWUs ICZGaWxlU2l6ZVtJbmRleF0sICZDYXBzdWxlQnVmZmVyW0luZGV4XSk7DQo+ICsgICAgaWYgKEVG SV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBQcmludChMIkNhcHN1bGVBcHA6IGNhcHN1bGUg aW1hZ2UgKCVzKSBpcyBub3QgZm91bmQuXG4iLCBDYXBzdWxlTmFtZSk7DQo+ICsgICAgICBnb3Rv IERvbmU7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5lZWRDb3B5T25EaXNrKSB7 DQo+ICsgICAgU3RhdHVzID0gQ29weUNhcHN1bGVUb0FjdGl2ZUVmaVBhcnRpdGlvbihDYXBzdWxl QnVmZmVyLCBGaWxlU2l6ZSwgQ2Fwc3VsZU51bSk7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgLy8N Cj4gKyAgICAvLyBFdmVyeSBjYXBzdWxlIHVzZSAyIGRlc2NyaXB0b3IgMSBmb3IgZGF0YSAxIGZv ciBlbmQNCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IEJ1aWxkR2F0aGVyTGlzdChDYXBzdWxl QnVmZmVyLCBGaWxlU2l6ZSwgQ2Fwc3VsZU51bSwgJkJsb2NrRGVzY3JpcHRvcnMpOw0KPiArICB9 DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAg fQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENhbGwgdGhlIHJ1bnRpbWUgc2VydmljZSBjYXBzdWxl Lg0KPiArICAvLw0KPiArICBOZWVkUmVzZXQgPSBGQUxTRTsNCj4gKyAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgQ2Fwc3VsZU51bTsgSW5kZXgrKykgew0KPiArICAgIENhcHN1bGVIZWFkZXJBcnJh eVtJbmRleF0gPSAoRUZJX0NBUFNVTEVfSEVBREVSICopIENhcHN1bGVCdWZmZXJbSW5kZXhdOw0K PiArICAgIGlmICgoQ2Fwc3VsZUhlYWRlckFycmF5W0luZGV4XS0+RmxhZ3MgJiBDQVBTVUxFX0ZM QUdTX1BFUlNJU1RfQUNST1NTX1JFU0VUKSAhPSAwKQ0KPiB7DQo+ICsgICAgICBOZWVkUmVzZXQg PSBUUlVFOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArICBDYXBzdWxlSGVhZGVyQXJyYXlbQ2Fwc3Vs ZU51bV0gPSBOVUxMOw0KPiArICBpZiAoTm9SZXNldCkgew0KPiArICAgIE5lZWRSZXNldCA9IEZB TFNFOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5xdWlyZSBwbGF0Zm9ybSBjYXBh YmlsaXR5IG9mIFVwZGF0ZUNhcHN1bGUuDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IGdSVC0+UXVl cnlDYXBzdWxlQ2FwYWJpbGl0aWVzIChDYXBzdWxlSGVhZGVyQXJyYXksIENhcHN1bGVOdW0sDQo+ ICZNYXhDYXBzdWxlU2l6ZSwgJlJlc2V0VHlwZSk7DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVz KSkgew0KPiArICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGZhaWxlZCB0byBxdWVyeSBjYXBzdWxl IGNhcGFiaWxpdHkgLSAlclxuIiwgU3RhdHVzKTsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0N Cj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDYXBzdWxlTnVtOyBJbmRleCsrKSB7 DQo+ICsgICAgaWYgKEZpbGVTaXplW0luZGV4XSA+IE1heENhcHN1bGVTaXplKSB7DQo+ICsgICAg ICBQcmludCAoTCJDYXBzdWxlQXBwOiBjYXBzdWxlIGlzIHRvbyBsYXJnZSB0byB1cGRhdGUsICVs ZCBpcyBhbGxvd2VkXG4iLA0KPiBNYXhDYXBzdWxlU2l6ZSk7DQo+ICsgICAgICBTdGF0dXMgPSBF RklfVU5TVVBQT1JURUQ7DQo+ICsgICAgICBnb3RvIERvbmU7DQo+ICsgICAgfQ0KPiArICB9DQo+ ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgd2hldGhlciB0aGUgaW5wdXQgY2Fwc3VsZSBpbWFn ZSBoYXMgdGhlIGZsYWcgb2YgcGVyc2lzdCBhY3Jvc3Mgc3lzdGVtDQo+IHJlc2V0Lg0KPiArICAv Lw0KPiArICBpZiAoTmVlZFJlc2V0KSB7DQo+ICsgICAgU3RhdHVzID0gZ1JULT5VcGRhdGVDYXBz dWxlKENhcHN1bGVIZWFkZXJBcnJheSxDYXBzdWxlTnVtLChVSU5UTikNCj4gQmxvY2tEZXNjcmlw dG9ycyk7DQo+ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykgew0KPiArICAgICAgUHJp bnQgKEwiQ2Fwc3VsZUFwcDogZmFpbGVkIHRvIHVwZGF0ZSBjYXBzdWxlIC0gJXJcbiIsIFN0YXR1 cyk7DQo+ICsgICAgICBnb3RvIERvbmU7DQo+ICsgICAgfQ0KPiArICAgIC8vDQo+ICsgICAgLy8g Rm9yIGNhcHN1bGUgd2hvIGhhcyByZXNldCBmbGFnLCBhZnRlciBjYWxsaW5nIFVwZGF0ZUNhcHN1 bGUgc2VydmljZSx0cmlnZXIgYQ0KPiArICAgIC8vIHN5c3RlbSByZXNldCB0byBwcm9jZXNzIGNh cHN1bGUgcGVyc2lzdCBhY3Jvc3MgYSBzeXN0ZW0gcmVzZXQuDQo+ICsgICAgLy8NCj4gKyAgICBn UlQtPlJlc2V0U3lzdGVtIChSZXNldFR5cGUsIEVGSV9TVUNDRVNTLCAwLCBOVUxMKTsNCj4gKyAg fSBlbHNlIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIEZvciBjYXBzdWxlIHdobyBoYXMgbm8gcmVz ZXQgZmxhZywgb25seSBjYWxsIFVwZGF0ZUNhcHN1bGUgU2VydmljZSB3aXRob3V0IGENCj4gKyAg ICAvLyBzeXN0ZW0gcmVzZXQuIFRoZSBzZXJ2aWNlIHdpbGwgcHJvY2VzcyB0aGUgY2Fwc3VsZSBp bW1lZGlhdGVseS4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IGdSVC0+VXBkYXRlQ2Fwc3Vs ZSAoQ2Fwc3VsZUhlYWRlckFycmF5LENhcHN1bGVOdW0sKFVJTlROKQ0KPiBCbG9ja0Rlc2NyaXB0 b3JzKTsNCj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7DQo+ICsgICAgICBQcmlu dCAoTCJDYXBzdWxlQXBwOiBmYWlsZWQgdG8gdXBkYXRlIGNhcHN1bGUgLSAlclxuIiwgU3RhdHVz KTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4g Kw0KPiArRG9uZToNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ2Fwc3VsZU51bTsgSW5k ZXgrKykgew0KPiArICAgIGlmIChDYXBzdWxlQnVmZmVyW0luZGV4XSAhPSBOVUxMKSB7DQo+ICsg ICAgICBGcmVlUG9vbCAoQ2Fwc3VsZUJ1ZmZlcltJbmRleF0pOw0KPiArICAgIH0NCj4gKyAgfQ0K PiArDQo+ICsgIENsZWFuR2F0aGVyTGlzdChCbG9ja0Rlc2NyaXB0b3JzLCBDYXBzdWxlTnVtKTsN Cj4gKyAgQ2xlYW5BcmcoKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiBkaWZm IC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5p bmYNCj4gYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwLmlu Zg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi43ZWU0NGZjDQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAv Q2Fwc3VsZUFwcC5pbmYNCj4gQEAgLTAsMCArMSw3MSBAQA0KPiArIyMgIEBmaWxlDQo+ICsjICBB IHNoZWxsIGFwcGxpY2F0aW9uIHRoYXQgdHJpZ2dlcnMgY2Fwc3VsZSB1cGRhdGUgcHJvY2Vzcy4N Cj4gKyMNCj4gKyMgVGhpcyBhcHBsaWNhdGlvbiBjYW4gdHJpZ2dlciBjYXBzdWxlIHVwZGF0ZSBw cm9jZXNzLiBJdCBjYW4gYWxzbw0KPiArIyBnZW5lcmF0ZSBjYXBzdWxlIGltYWdlLCBvciBkdW1w IGNhcHN1bGUgdmFyaWFibGUgaW5mb3JtYXRpb24uDQo+ICsjDQo+ICsjICBDb3B5cmlnaHQgKGMp IDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyMg IFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKyMgIGFyZSBs aWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25z IG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArIyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmli dXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiAr IyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArIw0K PiArIyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9O IEFOICJBUyBJUyIgQkFTSVMsDQo+ICsjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5U QVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArIw0KPiAr IyMNCj4gKw0KPiArW0RlZmluZXNdDQo+ICsgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAg ICA9IDB4MDAwMTAwMDYNCj4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gQ2Fw c3VsZUFwcA0KPiArICBNT0RVTEVfVU5JX0ZJTEUgICAgICAgICAgICAgICAgPSBDYXBzdWxlQXBw LnVuaQ0KPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSA0Q0VGMzFEQS04Njgy LTQyNzQtOUNDNC1BRUU3NTE2QTVFN0INCj4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAg ICAgID0gVUVGSV9BUFBMSUNBVElPTg0KPiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAg ICAgPSAxLjANCj4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gVWVmaU1haW4N Cj4gKw0KPiArIw0KPiArIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVu Y2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCj4gKyMNCj4gKyMg IFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQNCj4gKyMNCj4gKw0KPiAr W1NvdXJjZXNdDQo+ICsgIENhcHN1bGVBcHAuYw0KPiArICBDYXBzdWxlRHVtcC5jDQo+ICsgIEFw cFN1cHBvcnQuYw0KPiArDQo+ICtbUGFja2FnZXNdDQo+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ICsNCj4gK1tHdWlkc10NCj4gKyAg Z0VmaUZpbGVJbmZvR3VpZA0KPiArICBnRWZpUGFydFR5cGVTeXN0ZW1QYXJ0R3VpZA0KPiArICBn RWZpR2xvYmFsVmFyaWFibGVHdWlkDQo+ICsgIGdFZmlDYXBzdWxlUmVwb3J0R3VpZA0KPiArICBn RWZpRm1wQ2Fwc3VsZUd1aWQNCj4gKyAgZ1dpbmRvd3NVeENhcHN1bGVHdWlkDQo+ICsgIGdFZmlD ZXJ0VHlwZVJzYTIwNDhTaGEyNTZHdWlkDQo+ICsgIGdFZmlDZXJ0UGtjczdHdWlkDQo+ICsgIGdF ZmlTeXN0ZW1SZXNvdXJjZVRhYmxlR3VpZA0KPiArDQo+ICtbUHJvdG9jb2xzXQ0KPiArICBnRWZp TG9hZGVkSW1hZ2VQcm90b2NvbEd1aWQNCj4gKyAgZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2Nv bEd1aWQNCj4gKyAgZ0VmaUdyYXBoaWNzT3V0cHV0UHJvdG9jb2xHdWlkDQo+ICsgIGdFZmlGaXJt d2FyZU1hbmFnZW1lbnRQcm90b2NvbEd1aWQNCj4gKw0KPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiAr ICBCYXNlTGliDQo+ICsgIFVlZmlBcHBsaWNhdGlvbkVudHJ5UG9pbnQNCj4gKyAgRGVidWdMaWIN Cj4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIN Cj4gKyAgVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliDQo+ICsgIFVlZmlMaWINCj4gKyAgUHJp bnRMaWINCj4gKyAgRWRraWlTeXN0ZW1DYXBzdWxlTGliDQo+ICsNCj4gK1tVc2VyRXh0ZW5zaW9u cy5UaWFub0NvcmUuIkV4dHJhRmlsZXMiXQ0KPiArICBDYXBzdWxlQXBwRXh0cmEudW5pDQo+IGRp ZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBw LnVuaQ0KPiBiL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHAu dW5pDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjU0ZDZlMTINCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFw cC9DYXBzdWxlQXBwLnVuaQ0KPiBAQCAtMCwwICsxLDIyIEBADQo+ICsvLyAvKiogQGZpbGUNCj4g Ky8vIEEgc2hlbGwgYXBwbGljYXRpb24gdGhhdCB0cmlnZ2VycyBjYXBzdWxlIHVwZGF0ZSBwcm9j ZXNzLg0KPiArLy8NCj4gKy8vIFRoaXMgYXBwbGljYXRpb24gY2FuIHRyaWdnZXIgY2Fwc3VsZSB1 cGRhdGUgcHJvY2Vzcy4gSXQgY2FuIGFsc28NCj4gKy8vIGdlbmVyYXRlIGNhcHN1bGUgaW1hZ2Us IG9yIGR1bXAgY2Fwc3VsZSB2YXJpYWJsZSBpbmZvcm1hdGlvbi4NCj4gKy8vDQo+ICsvLyBDb3B5 cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gKy8vDQo+ICsvLyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJp YWxzDQo+ICsvLyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCj4gKy8vIHdoaWNoIGFjY29tcGFu aWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBi ZSBmb3VuZCBhdA0KPiArLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNl bnNlLnBocA0KPiArLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBM SUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+ICsvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig UkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0K PiArLy8NCj4gKy8vICoqLw0KPiArDQo+ICsNCj4gKyNzdHJpbmcgU1RSX01PRFVMRV9BQlNUUkFD VCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIkEgc2hlbGwgYXBwbGljYXRpb24gdGhhdA0K PiB0cmlnZ2VycyBjYXBzdWxlIHVwZGF0ZSBwcm9jZXNzLiINCj4gKw0KPiArI3N0cmluZyBTVFJf TU9EVUxFX0RFU0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiVGhpcyBhcHBsaWNh dGlvbiBjYW4gdHJpZ2dlcg0KPiBjYXBzdWxlIHVwZGF0ZSBwcm9jZXNzLiBJdCBjYW4gYWxzbyBn ZW5lcmF0ZSBjYXBzdWxlIGltYWdlLCBvciBkdW1wIGNhcHN1bGUgdmFyaWFibGUNCj4gaW5mb3Jt YXRpb24uIg0KPiArDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fw c3VsZUFwcC9DYXBzdWxlQXBwRXh0cmEudW5pDQo+IGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9u L0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcEV4dHJhLnVuaQ0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCAwMDAwMDAwLi5iNWE4ODQwDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlTW9k dWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcEV4dHJhLnVuaQ0KPiBAQCAt MCwwICsxLDE5IEBADQo+ICsvLyAvKiogQGZpbGUNCj4gKy8vIENhcHN1bGVBcHAgTG9jYWxpemVk IFN0cmluZ3MgYW5kIENvbnRlbnQNCj4gKy8vDQo+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIElu dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKy8vDQo+ICsvLyBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsvLyBhcmUgbGlj ZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgQlNEIExpY2Vuc2UNCj4gKy8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0 aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiArLy8g aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArLy8gVEhF IFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJ UyIgQkFTSVMsDQo+ICsvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9G IEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArLy8NCj4gKy8vICoqLw0K PiArDQo+ICsjc3RyaW5nIFNUUl9QUk9QRVJUSUVTX01PRFVMRV9OQU1FDQo+ICsjbGFuZ3VhZ2Ug ZW4tVVMNCj4gKyJDYXBzdWxlIEFwcGxpY2F0aW9uIg0KPiArDQo+ICsNCj4gZGlmZiAtLWdpdCBh L01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVEdW1wLmMNCj4gYi9N ZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlRHVtcC5jDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmM1NmY0MWYNCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlRHVt cC5jDQo+IEBAIC0wLDAgKzEsODQwIEBADQo+ICsvKiogQGZpbGUNCj4gKyAgRHVtcCBDYXBzdWxl IGltYWdlIGluZm9ybWF0aW9uLg0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBUaGlzIHByb2dyYW0g YW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFk ZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGlj ZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxs IHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291 cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiArICBUSEUgUFJPR1JBTSBJ UyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywN Cj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwg RUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRl IDxQaUR4ZS5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiArI2luY2x1ZGUg PExpYnJhcnkvRGVidWdMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIu aD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gKyNpbmNs dWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExp YnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFy eS9VZWZpTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KPiArI2luY2x1 ZGUgPExpYnJhcnkvRWRraWlTeXN0ZW1DYXBzdWxlTGliLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9j b2wvRmlybXdhcmVNYW5hZ2VtZW50Lmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9JbWFnZUF1dGhlbnRp Y2F0aW9uLmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9FZGtpaVN5c3RlbUZtcENhcHN1bGUuaD4NCj4g KyNpbmNsdWRlIDxHdWlkL0NhcHN1bGVSZXBvcnQuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL1N5c3Rl bVJlc291cmNlVGFibGUuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0ZtcENhcHN1bGUuaD4NCj4gKyNp bmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL1dpbmRvd3NVeENhcHN1bGUuaD4NCj4gKw0KPiArLyoq DQo+ICsgIFJlYWQgYSBmaWxlLg0KPiArDQo+ICsgIEBwYXJhbSBGaWxlTmFtZSAgICAgICAgVGhl IGZpbGUgdG8gYmUgcmVhZC4NCj4gKyAgQHBhcmFtIEJ1ZmZlclNpemUgICAgICBUaGUgZmlsZSBi dWZmZXIgc2l6ZQ0KPiArICBAcGFyYW0gQnVmZmVyICAgICAgICAgIFRoZSBmaWxlIGJ1ZmZlcg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgUmVhZCBmaWxlIHN1Y2Nlc3NmdWxseQ0K PiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgIEZpbGUgbm90IGZvdW5kDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK1JlYWRGaWxlVG9CdWZmZXIoDQo+ICsgIElOICBDSEFSMTYgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKkZpbGVOYW1lLA0KPiArICBPVVQgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJTaXplLA0KPiArICBPVVQgVk9JRCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoqQnVmZmVyDQo+ICsgICk7DQo+ICsNCj4gK2V4dGVy biBVSU5UTiAgQXJnYzsNCj4gK2V4dGVybiBDSEFSMTYgKkFyZ3ZbXTsNCj4gKw0KPiArLyoqDQo+ ICsgIER1bXAgVVggY2Fwc3VsZSBpbmZvcm1hdGlvbi4NCj4gKw0KPiArICBAcGFyYW0gQ2Fwc3Vs ZUhlYWRlciAgICAgIFRoZSBVWCBjYXBzdWxlIGhlYWRlcg0KPiArKiovDQo+ICtWT0lEDQo+ICtE dW1wVXhDYXBzdWxlKA0KPiArICBJTiBFRklfQ0FQU1VMRV9IRUFERVIgICpDYXBzdWxlSGVhZGVy DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0RJU1BMQVlfQ0FQU1VMRSAgICAgICAgICAgICAgICAg ICAgICAgICAgICpEaXNwbGF5Q2Fwc3VsZTsNCj4gKyAgRGlzcGxheUNhcHN1bGUgPSAoRUZJX0RJ U1BMQVlfQ0FQU1VMRSAqKUNhcHN1bGVIZWFkZXI7DQo+ICsgIFByaW50KEwiW1V4Q2FwdXN1bGVd XG4iKTsNCj4gKyAgUHJpbnQoTCJDYXBzdWxlSGVhZGVyOlxuIik7DQo+ICsgIFByaW50KEwiICBD YXBzdWxlR3VpZCAgICAgIC0gJWdcbiIsICZEaXNwbGF5Q2Fwc3VsZS0+Q2Fwc3VsZUhlYWRlci5D YXBzdWxlR3VpZCk7DQo+ICsgIFByaW50KEwiICBIZWFkZXJTaXplICAgICAgIC0gMHgleFxuIiwg RGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFkZXIuSGVhZGVyU2l6ZSk7DQo+ICsgIFByaW50KEwi ICBGbGFncyAgICAgICAgICAgIC0gMHgleFxuIiwgRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFk ZXIuRmxhZ3MpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUltYWdlU2l6ZSAtIDB4JXhcbiIsIERp c3BsYXlDYXBzdWxlLQ0KPiA+Q2Fwc3VsZUhlYWRlci5DYXBzdWxlSW1hZ2VTaXplKTsNCj4gKyAg UHJpbnQoTCJJbWFnZVBheWxvYWQ6XG4iKTsNCj4gKyAgUHJpbnQoTCIgIFZlcnNpb24gICAgICAg ICAgLSAweCV4XG4iLCBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLlZlcnNpb24pOw0KPiAr ICBQcmludChMIiAgQ2hlY2tzdW0gICAgICAgICAtIDB4JXhcbiIsIERpc3BsYXlDYXBzdWxlLT5J bWFnZVBheWxvYWQuQ2hlY2tzdW0pOw0KPiArICBQcmludChMIiAgSW1hZ2VUeXBlICAgICAgICAt IDB4JXhcbiIsIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuSW1hZ2VUeXBlKTsNCj4gKyAg UHJpbnQoTCIgIE1vZGUgICAgICAgICAgICAgLSAweCV4XG4iLCBEaXNwbGF5Q2Fwc3VsZS0+SW1h Z2VQYXlsb2FkLk1vZGUpOw0KPiArICBQcmludChMIiAgT2Zmc2V0WCAgICAgICAgICAtIDB4JXhc biIsIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuT2Zmc2V0WCk7DQo+ICsgIFByaW50KEwi ICBPZmZzZXRZICAgICAgICAgIC0gMHgleFxuIiwgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9h ZC5PZmZzZXRZKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgRk1QIGltYWdlIGF1dGhl bnRpY2F0aW9uIGluZm9ybWF0aW9uLg0KPiArDQo+ICsgIEBwYXJhbSBJbWFnZSAgICAgIFRoZSBG TVAgY2Fwc3VsZSBpbWFnZQ0KPiArICBAcGFyYW0gSW1hZ2VTaXplICBUaGUgc2l6ZSBvZiB0aGUg Rk1QIGNhcHN1bGUgaW1hZ2UgaW4gYnl0ZXMuDQo+ICsNCj4gKyAgQHJldHVybiB0aGUgc2l6ZSBv ZiBGTVAgYXV0aGVudGljYXRpb24uDQo+ICsqKi8NCj4gK1VJTlRODQo+ICtEdW1wSW1hZ2VBdXRo ZW50aWNhdGlvbigNCj4gKyAgSU4gVk9JRCAgICpJbWFnZSwNCj4gKyAgSU4gVUlOVE4gIEltYWdl U2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9BVVRIRU5USUNBVElP TiAgICAgICAgICAgICAqSW1hZ2VBdXRoZW50aWNhdGlvbjsNCj4gKw0KPiArICBJbWFnZUF1dGhl bnRpY2F0aW9uID0gSW1hZ2U7DQo+ICsgIGlmIChDb21wYXJlR3VpZCgmSW1hZ2VBdXRoZW50aWNh dGlvbi0+QXV0aEluZm8uQ2VydFR5cGUsICZnRWZpQ2VydFBrY3M3R3VpZCkgfHwNCj4gKyAgICAg IENvbXBhcmVHdWlkKCZJbWFnZUF1dGhlbnRpY2F0aW9uLT5BdXRoSW5mby5DZXJ0VHlwZSwNCj4g JmdFZmlDZXJ0VHlwZVJzYTIwNDhTaGEyNTZHdWlkKSkgew0KPiArICAgIFByaW50KEwiW0ltYWdl QXV0aGVudGljYXRpb25dXG4iKTsNCj4gKyAgICBQcmludChMIiAgTW9ub3RvbmljQ291bnQgICAt IDB4JWx4XG4iLCBJbWFnZUF1dGhlbnRpY2F0aW9uLT5Nb25vdG9uaWNDb3VudCk7DQo+ICsgICAg UHJpbnQoTCJXSU5fQ0VSVElGSUNBVEU6XG4iKTsNCj4gKyAgICBQcmludChMIiAgZHdMZW5ndGgg ICAgICAgICAtIDB4JXhcbiIsIEltYWdlQXV0aGVudGljYXRpb24tPkF1dGhJbmZvLkhkci5kd0xl bmd0aCk7DQo+ICsgICAgUHJpbnQoTCIgIHdSZXZpc2lvbiAgICAgICAgLSAweCV4XG4iLCBJbWFn ZUF1dGhlbnRpY2F0aW9uLQ0KPiA+QXV0aEluZm8uSGRyLndSZXZpc2lvbik7DQo+ICsgICAgUHJp bnQoTCIgIHdDZXJ0aWZpY2F0ZVR5cGUgLSAweCV4XG4iLCBJbWFnZUF1dGhlbnRpY2F0aW9uLQ0K PiA+QXV0aEluZm8uSGRyLndDZXJ0aWZpY2F0ZVR5cGUpOw0KPiArICAgIFByaW50KEwiICBDZXJ0 VHlwZSAgICAgICAgIC0gJWdcbiIsICZJbWFnZUF1dGhlbnRpY2F0aW9uLT5BdXRoSW5mby5DZXJ0 VHlwZSk7DQo+ICsgICAgcmV0dXJuIHNpemVvZihJbWFnZUF1dGhlbnRpY2F0aW9uLT5Nb25vdG9u aWNDb3VudCkgKyBJbWFnZUF1dGhlbnRpY2F0aW9uLQ0KPiA+QXV0aEluZm8uSGRyLmR3TGVuZ3Ro Ow0KPiArICB9IGVsc2Ugew0KPiArICAgIHJldHVybiAwOw0KPiArICB9DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBEdW1wIEVES0lJIHN5c3RlbSBGTVAgY2Fwc3VsZS4NCj4gKw0KPiArICBAcGFy YW0gSW1hZ2UgICAgICBUaGUgRURLSUkgc3lzdGVtIEZNUCBjYXBzdWxlLg0KPiArICBAcGFyYW0g SW1hZ2VTaXplICBUaGUgc2l6ZSBvZiB0aGUgRURLSUkgc3lzdGVtIEZNUCBjYXBzdWxlIGluIGJ5 dGVzLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRWRraWlTeXN0ZW1GbXBDYXBzdWxlKA0KPiAr ICBJTiBWT0lEICAgKkltYWdlLA0KPiArICBJTiBVSU5UTiAgSW1hZ2VTaXplDQo+ICsgICkNCj4g K3sNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElt YWdlT2Zmc2V0Ow0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKkJpb3NJbWFnZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJpb3NJbWFnZVNpemU7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ7DQo+ICsgIEVES0lJX1NZU1RFTV9GSVJNV0FS RV9JTUFHRV9ERVNDUklQVE9SICAgICAgICAqVGVtcEltYWdlRm1wSW5mbzsNCj4gKyAgRURLSUlf U1lTVEVNX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICpJbWFnZUZtcEluZm87DQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUZt cEluZm9TaXplOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFdlIGRvIG5vdCBrbm93IGlmIHRoZXJl IGlzIEVGSV9GSVJNV0FSRV9JTUFHRV9BVVRIRU5USUNBVElPTi4NCj4gKyAgLy8gc28ganVzdCAq dHJ5KiB0byBwYXJzZSBpdA0KPiArICAvLw0KPiArICBJbWFnZU9mZnNldCA9IER1bXBJbWFnZUF1 dGhlbnRpY2F0aW9uKEltYWdlLCBJbWFnZVNpemUpOw0KPiArICBJbWFnZSA9IChVSU5UOCAqKUlt YWdlICsgSW1hZ2VPZmZzZXQ7DQo+ICsgIEltYWdlU2l6ZSAtPSBJbWFnZU9mZnNldDsNCj4gKyAg UHJpbnQoTCJbSW1hZ2VdXG4iKTsNCj4gKyAgUHJpbnQoTCIgIEltYWdlU2l6ZSAgIC0gMHgleFxu IiwgSW1hZ2VTaXplKTsNCj4gKw0KPiArICBSZXN1bHQgPSBFeHRyYWN0Q29uZmlnSW1hZ2UoSW1h Z2UsIEltYWdlU2l6ZSwgJkJpb3NJbWFnZSwgJkJpb3NJbWFnZVNpemUpOw0KPiArICBpZiAoUmVz dWx0KSB7DQo+ICsgICAgUHJpbnQoTCIgIENvbmZpZ0ZpbGVTaXplICAtIDB4JXhcbiIsIEJpb3NJ bWFnZVNpemUpOw0KPiArICB9DQo+ICsgIFJlc3VsdCA9IEV4dHJhY3REcml2ZXJGdkltYWdlKElt YWdlLCBJbWFnZVNpemUsICZCaW9zSW1hZ2UsICZCaW9zSW1hZ2VTaXplKTsNCj4gKyAgaWYgKFJl c3VsdCkgew0KPiArICAgIFByaW50KEwiICBEcml2ZXJGdlNpemUgICAgLSAweCV4XG4iLCBCaW9z SW1hZ2VTaXplKTsNCj4gKyAgfQ0KPiArICBSZXN1bHQgPSBFeHRyYWN0U3lzdGVtRmlybXdhcmVJ bWFnZShJbWFnZSwgSW1hZ2VTaXplLCAmQmlvc0ltYWdlLCAmQmlvc0ltYWdlU2l6ZSk7DQo+ICsg IGlmIChSZXN1bHQpIHsNCj4gKyAgICBQcmludChMIiAgQmlvc0ltYWdlU2l6ZSAgIC0gMHgleFxu IiwgQmlvc0ltYWdlU2l6ZSk7DQo+ICsgIH0NCj4gKyAgUmVzdWx0ID0gRXh0cmFjdFN5c3RlbUZp cm13YXJlSW1hZ2VGbXBJbmZvKEJpb3NJbWFnZSwgQmlvc0ltYWdlU2l6ZSwNCj4gJlRlbXBJbWFn ZUZtcEluZm8sICZJbWFnZUZtcEluZm9TaXplKTsNCj4gKyAgaWYgKFJlc3VsdCkgew0KPiArICAg IEltYWdlRm1wSW5mbyA9IEFsbG9jYXRlQ29weVBvb2woSW1hZ2VGbXBJbmZvU2l6ZSwgVGVtcElt YWdlRm1wSW5mbyk7DQo+ICsgICAgaWYgKEltYWdlRm1wSW5mbyAhPSBOVUxMKSB7DQo+ICsgICAg ICBQcmludChMIltJbWFnZUZtcEluZm9dXG4iKTsNCj4gKyAgICAgIFByaW50KEwiICBTaWduYXR1 cmUgICAgICAgICAgICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tPlNpZ25hdHVy ZSk7DQo+ICsgICAgICBQcmludChMIiAgSGVhZGVyTGVuZ3RoICAgICAgICAgICAgICAgICAgIC0g MHgleFxuIiwgSW1hZ2VGbXBJbmZvLT5IZWFkZXJMZW5ndGgpOw0KPiArICAgICAgUHJpbnQoTCIg IExlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEltYWdlRm1wSW5mby0+ TGVuZ3RoKTsNCj4gKyAgICAgIFByaW50KEwiICBQYWNrYWdlVmVyc2lvbiAgICAgICAgICAgICAg ICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5QYWNrYWdlVmVyc2lvbik7DQo+ICsgICAg ICBQcmludChMIiAgUGFja2FnZVZlcnNpb25OYW1lU3RyaW5nT2Zmc2V0IC0gMHgleFxuIiwgSW1h Z2VGbXBJbmZvLQ0KPiA+UGFja2FnZVZlcnNpb25OYW1lU3RyaW5nT2Zmc2V0KTsNCj4gKyAgICAg IGlmIChJbWFnZUZtcEluZm8tPlBhY2thZ2VWZXJzaW9uTmFtZVN0cmluZ09mZnNldCAhPSAwKSB7 DQo+ICsgICAgICAgIFByaW50KEwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAl c1xuIiwgKFVJTlQ4ICopSW1hZ2VGbXBJbmZvICsNCj4gSW1hZ2VGbXBJbmZvLT5QYWNrYWdlVmVy c2lvbk5hbWVTdHJpbmdPZmZzZXQpOw0KPiArICAgICAgfQ0KPiArICAgICAgUHJpbnQoTCIgIElt YWdlSW5kZXggICAgICAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEltYWdlRm1wSW5mby0+SW1h Z2VJbmRleCk7DQo+ICsgICAgICBQcmludChMIiAgSW1hZ2VUeXBlSWQgICAgICAgICAgICAgICAg ICAgIC0gJWdcbiIsICZJbWFnZUZtcEluZm8tPkltYWdlVHlwZUlkKTsNCj4gKyAgICAgIFByaW50 KEwiICBJbWFnZUlkICAgICAgICAgICAgICAgICAgICAgICAgLSAweCVseFxuIiwgSW1hZ2VGbXBJ bmZvLT5JbWFnZUlkKTsNCj4gKyAgICAgIFByaW50KEwiICBJbWFnZUlkTmFtZVN0cmluZ09mZnNl dCAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5JbWFnZUlkTmFtZVN0cmluZ09m ZnNldCk7DQo+ICsgICAgICBpZiAoSW1hZ2VGbXBJbmZvLT5JbWFnZUlkTmFtZVN0cmluZ09mZnNl dCAhPSAwKSB7DQo+ICsgICAgICAgIFByaW50KEwiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLSAlc1xuIiwgKFVJTlQ4ICopSW1hZ2VGbXBJbmZvICsNCj4gSW1hZ2VGbXBJbmZvLT5J bWFnZUlkTmFtZVN0cmluZ09mZnNldCk7DQo+ICsgICAgICB9DQo+ICsgICAgICBQcmludChMIiAg VmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLT5W ZXJzaW9uKTsNCj4gKyAgICAgIFByaW50KEwiICBWZXJzaW9uTmFtZVN0cmluZ09mZnNldCAgICAg ICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5WZXJzaW9uTmFtZVN0cmluZ09mZnNldCk7 DQo+ICsgICAgICBpZiAoSW1hZ2VGbXBJbmZvLT5WZXJzaW9uTmFtZVN0cmluZ09mZnNldCAhPSAw KSB7DQo+ICsgICAgICAgIFByaW50KEwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LSAlc1xuIiwgKFVJTlQ4ICopSW1hZ2VGbXBJbmZvICsNCj4gSW1hZ2VGbXBJbmZvLT5WZXJzaW9u TmFtZVN0cmluZ09mZnNldCk7DQo+ICsgICAgICB9DQo+ICsgICAgICBQcmludChMIiAgU2l6ZSAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0gMHglbHhcbiIsIEltYWdlRm1wSW5mby0+U2l6ZSk7 DQo+ICsgICAgICBQcmludChMIiAgQXR0cmlidXRlc1N1cHBvcnRlZCAgICAgICAgICAgIC0gMHgl bHhcbiIsIEltYWdlRm1wSW5mby0NCj4gPkF0dHJpYnV0ZXNTdXBwb3J0ZWQpOw0KPiArICAgICAg UHJpbnQoTCIgIEF0dHJpYnV0ZXNTZXR0aW5nICAgICAgICAgICAgICAtIDB4JWx4XG4iLCBJbWFn ZUZtcEluZm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGluZyk7DQo+ICsgICAgICBQcmludChMIiAgQ29t cGF0aWJpbGl0aWVzICAgICAgICAgICAgICAgIC0gMHglbHhcbiIsIEltYWdlRm1wSW5mby0NCj4g PkNvbXBhdGliaWxpdGllcyk7DQo+ICsgICAgICBQcmludChMIiAgTG93ZXN0U3VwcG9ydGVkSW1h Z2VWZXJzaW9uICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+TG93ZXN0U3VwcG9ydGVk SW1hZ2VWZXJzaW9uKTsNCj4gKyAgICAgIFByaW50KEwiICBMYXN0QXR0ZW1wdFZlcnNpb24gICAg ICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5MYXN0QXR0ZW1wdFZlcnNpb24p Ow0KPiArICAgICAgUHJpbnQoTCIgIExhc3RBdHRlbXB0U3RhdHVzICAgICAgICAgICAgICAtIDB4 JXhcbiIsIEltYWdlRm1wSW5mby0NCj4gPkxhc3RBdHRlbXB0U3RhdHVzKTsNCj4gKyAgICAgIFBy aW50KEwiICBIYXJkd2FyZUluc3RhbmNlICAgICAgICAgICAgICAgLSAweCVseFxuIiwgSW1hZ2VG bXBJbmZvLQ0KPiA+SGFyZHdhcmVJbnN0YW5jZSk7DQo+ICsgICAgICBQcmludChMIiAgVmVyc2lv biAgICAgICAgICAgICAgICAgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLT5WZXJzaW9u KTsNCj4gKyAgICAgIEZyZWVQb29sKEltYWdlRm1wSW5mbyk7DQo+ICsgICAgfQ0KPiArICB9DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIGEgbm9uLW5lc3RlZCBGTVAgY2Fwc3VsZS4NCj4g Kw0KPiArICBAcGFyYW0gIENhcHN1bGVIZWFkZXIgIEEgcG9pbnRlciB0byBDYXBzdWxlSGVhZGVy DQo+ICsgIEBwYXJhbSAgSXNTeXN0ZW1GbXAgICAgSWYgaXQgaXMgYSBzeXN0ZW0gRk1QDQo+ICsq Ki8NCj4gK1ZPSUQNCj4gK0R1bXBGbXBDYXBzdWxlKA0KPiArICBJTiBFRklfQ0FQU1VMRV9IRUFE RVIgICpDYXBzdWxlSGVhZGVyLA0KPiArICBJTiBCT09MRUFOICAgICAgICAgICAgIElzU3lzdGVt Rm1wDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9I RUFERVIgICAgICAgICpGbXBDYXBzdWxlSGVhZGVyOw0KPiArICBVSU5UNjQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkl0ZW1PZmZzZXRMaXN0Ow0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudDsNCj4gKyAgRUZJ X0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFHRV9IRUFERVIgICpGbXBJbWFnZUhlYWRl cjsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJ bWFnZTsNCj4gKw0KPiArICBQcmludChMIltGbXBDYXB1c3VsZV1cbiIpOw0KPiArICBQcmludChM IkNhcHN1bGVIZWFkZXI6XG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVHdWlkICAgICAgLSAl Z1xuIiwgJkNhcHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkKTsNCj4gKyAgUHJpbnQoTCIgIEhlYWRl clNpemUgICAgICAgLSAweCV4XG4iLCBDYXBzdWxlSGVhZGVyLT5IZWFkZXJTaXplKTsNCj4gKyAg UHJpbnQoTCIgIEZsYWdzICAgICAgICAgICAgLSAweCV4XG4iLCBDYXBzdWxlSGVhZGVyLT5GbGFn cyk7DQo+ICsgIFByaW50KEwiICBDYXBzdWxlSW1hZ2VTaXplIC0gMHgleFxuIiwgQ2Fwc3VsZUhl YWRlci0+Q2Fwc3VsZUltYWdlU2l6ZSk7DQo+ICsNCj4gKyAgRm1wQ2Fwc3VsZUhlYWRlciA9IChF RklfRklSTVdBUkVfTUFOQUdFTUVOVF9DQVBTVUxFX0hFQURFUiAqKSgoVUlOVDggKilDYXBzdWxl SGVhZGVyDQo+ICsgQ2Fwc3VsZUhlYWRlci0+SGVhZGVyU2l6ZSk7DQo+ICsgIEl0ZW1PZmZzZXRM aXN0ID0gKFVJTlQ2NCAqKShGbXBDYXBzdWxlSGVhZGVyICsgMSk7DQo+ICsgIFByaW50KEwiRm1w SGVhZGVyOlxuIik7DQo+ICsgIFByaW50KEwiICBWZXJzaW9uICAgICAgICAgICAgIC0gMHgleFxu IiwgRm1wQ2Fwc3VsZUhlYWRlci0+VmVyc2lvbik7DQo+ICsgIFByaW50KEwiICBFbWJlZGRlZERy aXZlckNvdW50IC0gMHgleFxuIiwgRm1wQ2Fwc3VsZUhlYWRlci0+RW1iZWRkZWREcml2ZXJDb3Vu dCk7DQo+ICsgIFByaW50KEwiICBQYXlsb2FkSXRlbUNvdW50ICAgIC0gMHgleFxuIiwgRm1wQ2Fw c3VsZUhlYWRlci0+UGF5bG9hZEl0ZW1Db3VudCk7DQo+ICsgIENvdW50ID0gRm1wQ2Fwc3VsZUhl YWRlci0+RW1iZWRkZWREcml2ZXJDb3VudCArIEZtcENhcHN1bGVIZWFkZXItPlBheWxvYWRJdGVt Q291bnQ7DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENvdW50OyBJbmRleCsrKSB7DQo+ ICsgICAgUHJpbnQoTCIgIE9mZnNldFslZF0gICAgICAgICAgIC0gMHgleFxuIiwgSW5kZXgsIEl0 ZW1PZmZzZXRMaXN0W0luZGV4XSk7DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gRm1w Q2Fwc3VsZUhlYWRlci0+RW1iZWRkZWREcml2ZXJDb3VudDsgSW5kZXggPCBDb3VudDsgSW5kZXgr Kykgew0KPiArICAgIFByaW50KEwiRm1wUGF5bG9hZFslZF0gSW1hZ2VIZWFkZXI6XG4iLCBJbmRl eCk7DQo+ICsgICAgRm1wSW1hZ2VIZWFkZXIgPSAoRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQ U1VMRV9JTUFHRV9IRUFERVIgKikoKFVJTlQ4DQo+ICopRm1wQ2Fwc3VsZUhlYWRlciArIEl0ZW1P ZmZzZXRMaXN0W0luZGV4XSk7DQo+ICsgICAgUHJpbnQoTCIgIFZlcnNpb24gICAgICAgICAgICAg ICAgLSAweCV4XG4iLCBGbXBJbWFnZUhlYWRlci0+VmVyc2lvbik7DQo+ICsgICAgUHJpbnQoTCIg IFVwZGF0ZUltYWdlVHlwZUlkICAgICAgLSAlZ1xuIiwgJkZtcEltYWdlSGVhZGVyLT5VcGRhdGVJ bWFnZVR5cGVJZCk7DQo+ICsgICAgUHJpbnQoTCIgIFVwZGF0ZUltYWdlSW5kZXggICAgICAgLSAw eCV4XG4iLCBGbXBJbWFnZUhlYWRlci0+VXBkYXRlSW1hZ2VJbmRleCk7DQo+ICsgICAgUHJpbnQo TCIgIFVwZGF0ZUltYWdlU2l6ZSAgICAgICAgLSAweCV4XG4iLCBGbXBJbWFnZUhlYWRlci0+VXBk YXRlSW1hZ2VTaXplKTsNCj4gKyAgICBQcmludChMIiAgVXBkYXRlVmVuZG9yQ29kZVNpemUgICAt IDB4JXhcbiIsIEZtcEltYWdlSGVhZGVyLT5VcGRhdGVWZW5kb3JDb2RlU2l6ZSk7DQo+ICsgICAg aWYgKEZtcEltYWdlSGVhZGVyLT5WZXJzaW9uID49DQo+IEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5U X0NBUFNVTEVfSU1BR0VfSEVBREVSX0lOSVRfVkVSU0lPTikgew0KPiArICAgICAgUHJpbnQoTCIg IFVwZGF0ZUhhcmR3YXJlSW5zdGFuY2UgLSAweCVseFxuIiwgRm1wSW1hZ2VIZWFkZXItDQo+ID5V cGRhdGVIYXJkd2FyZUluc3RhbmNlKTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKEZtcEltYWdlSGVh ZGVyLT5WZXJzaW9uID49DQo+IEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSU1BR0Vf SEVBREVSX0lOSVRfVkVSU0lPTikgew0KPiArICAgICAgSW1hZ2UgPSAoVUlOVDggKikoRm1wSW1h Z2VIZWFkZXIgKyAxKTsNCj4gKyAgICB9ICBlbHNlIHsNCj4gKyAgICAgIEltYWdlID0gKFVJTlQ4 ICopRm1wSW1hZ2VIZWFkZXIgKw0KPiBPRkZTRVRfT0YoRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRf Q0FQU1VMRV9JTUFHRV9IRUFERVIsIFVwZGF0ZUhhcmR3YXJlSW5zdGFuY2UpOw0KPiArICAgIH0N Cj4gKyAgICBpZiAoSXNTeXN0ZW1GbXApIHsNCj4gKyAgICAgIER1bXBFZGtpaVN5c3RlbUZtcENh cHN1bGUoSW1hZ2UsIEZtcEltYWdlSGVhZGVyLT5VcGRhdGVJbWFnZVNpemUpOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0dXJuIGlmIHRoZXJlIGlzIGEgRk1Q IGhlYWRlciBiZWxvdyBjYXBzdWxlIGhlYWRlci4NCj4gKw0KPiArICBAcGFyYW1baW5dIENhcHN1 bGVIZWFkZXIgQSBwb2ludGVyIHRvIEVGSV9DQVBTVUxFX0hFQURFUg0KPiArDQo+ICsgIEByZXR2 YWwgVFJVRSAgVGhlcmUgaXMgYSBGTVAgaGVhZGVyIGJlbG93IGNhcHN1bGUgaGVhZGVyLg0KPiAr ICBAcmV0dmFsIEZBTFNFIFRoZXJlIGlzIG5vdCBhIEZNUCBoZWFkZXIgYmVsb3cgY2Fwc3VsZSBo ZWFkZXINCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArSXNOZXN0ZWRGbXBDYXBzdWxlKA0KPiArICBJ TiBFRklfQ0FQU1VMRV9IRUFERVIgICAgICAgICAqQ2Fwc3VsZUhlYWRlcg0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1NZU1RF TV9SRVNPVVJDRV9UQUJMRSAgKkVzcnQ7DQo+ICsgIEVGSV9TWVNURU1fUkVTT1VSQ0VfRU5UUlkg ICpFc3J0RW50cnk7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiAr ICBCT09MRUFOICAgICAgICAgICAgICAgICAgICBFc3J0R3VpZEZvdW5kOw0KPiArICBFRklfQ0FQ U1VMRV9IRUFERVIgICAgICAgICAqTmVzdGVkQ2Fwc3VsZUhlYWRlcjsNCj4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgTmVzdGVkQ2Fwc3VsZVNpemU7DQo+ICsNCj4gKyAgLy8NCj4gKyAg Ly8gQ2hlY2sgRVNSVA0KPiArICAvLw0KPiArICBFc3J0R3VpZEZvdW5kID0gRkFMU0U7DQo+ICsg IFN0YXR1cyA9IEVmaUdldFN5c3RlbUNvbmZpZ3VyYXRpb25UYWJsZSgmZ0VmaVN5c3RlbVJlc291 cmNlVGFibGVHdWlkLCAoVk9JRA0KPiAqKikmRXNydCk7DQo+ICsgIGlmICghRUZJX0VSUk9SKFN0 YXR1cykpIHsNCj4gKyAgICBFc3J0RW50cnkgPSAoVk9JRCAqKShFc3J0ICsgMSk7DQo+ICsgICAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgRXNydC0+RndSZXNvdXJjZUNvdW50OyBJbmRleCsrLCBF c3J0RW50cnkrKykgew0KPiArICAgICAgaWYgKENvbXBhcmVHdWlkKCZFc3J0RW50cnktPkZ3Q2xh c3MsICZDYXBzdWxlSGVhZGVyLT5DYXBzdWxlR3VpZCkpIHsNCj4gKyAgICAgICAgRXNydEd1aWRG b3VuZCA9IFRSVUU7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4g KyAgfQ0KPiArDQo+ICsgIGlmICghRXNydEd1aWRGb3VuZCkgew0KPiArICAgIHJldHVybiBGQUxT RTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIG5lc3RlZCBjYXBzdWxlIGhl YWRlcg0KPiArICAvLyBGTVAgR1VJRCBhZnRlciBFU1JUIG9uZQ0KPiArICAvLw0KPiArICBOZXN0 ZWRDYXBzdWxlSGVhZGVyID0gKEVGSV9DQVBTVUxFX0hFQURFUiAqKSgoVUlOVDggKilDYXBzdWxl SGVhZGVyICsgQ2Fwc3VsZUhlYWRlci0NCj4gPkhlYWRlclNpemUpOw0KPiArICBOZXN0ZWRDYXBz dWxlU2l6ZSA9IChVSU5UTilDYXBzdWxlSGVhZGVyICsgQ2Fwc3VsZUhlYWRlci0+SGVhZGVyU2l6 ZSAtDQo+IChVSU5UTilOZXN0ZWRDYXBzdWxlSGVhZGVyOw0KPiArICBpZiAoTmVzdGVkQ2Fwc3Vs ZVNpemUgPCBzaXplb2YoRUZJX0NBUFNVTEVfSEVBREVSKSkgew0KPiArICAgIHJldHVybiBGQUxT RTsNCj4gKyAgfQ0KPiArICBpZiAoIUNvbXBhcmVHdWlkKCZOZXN0ZWRDYXBzdWxlSGVhZGVyLT5D YXBzdWxlR3VpZCwgJmdFZmlGbXBDYXBzdWxlR3VpZCkpIHsNCj4gKyAgICByZXR1cm4gRkFMU0U7 DQo+ICsgIH0NCj4gKyAgcmV0dXJuIFRSVUU7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1w IGNhcHN1bGUgaW5mb3JtYXRpb24NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgVGhlIGNhcHN1bGUgaW5mb3JtYXRpb24gaXMgZHVtcGVkLg0KPiArICBAcmV0dmFsIEVG SV9VTlNVUFBPUlRFRCAgICAgICAgSW5wdXQgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZC4NCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArRHVtcENhcHN1bGUoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiAr ew0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNh cHN1bGVOYW1lOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKkJ1ZmZlcjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZpbGVTaXplOw0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSXNTeXN0ZW1GbXA7DQo+ICsgIEVGSV9DQVBTVUxFX0hFQURFUiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3VsZUhlYWRlcjsNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAo QXJnYyAhPSAzKSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBJbnZhbGlkIFBhcmFtZXRl ci5cbiIpOw0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKw0KPiAr ICBJc1N5c3RlbUZtcCA9IEZBTFNFOw0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbMV0sIEwiLURTIikg PT0gMCkgew0KPiArICAgIElzU3lzdGVtRm1wID0gVFJVRTsNCj4gKyAgfQ0KPiArDQo+ICsgIENh cHN1bGVOYW1lID0gQXJndlsyXTsNCj4gKyAgU3RhdHVzID0gUmVhZEZpbGVUb0J1ZmZlcihDYXBz dWxlTmFtZSwgJkZpbGVTaXplLCAmQnVmZmVyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMp KSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBDYXBzdWxlICglcykgaXMgbm90IGZvdW5k LlxuIiwgQ2Fwc3VsZU5hbWUpOw0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsg IENhcHN1bGVIZWFkZXIgPSBCdWZmZXI7DQo+ICsgIGlmIChDb21wYXJlR3VpZCgmQ2Fwc3VsZUhl YWRlci0+Q2Fwc3VsZUd1aWQsICZnV2luZG93c1V4Q2Fwc3VsZUd1aWQpKSB7DQo+ICsgICAgRHVt cFV4Q2Fwc3VsZShDYXBzdWxlSGVhZGVyKTsNCj4gKyAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsN Cj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQ29tcGFyZUd1aWQoJkNh cHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkLCAmZ0VmaUZtcENhcHN1bGVHdWlkKSkgew0KPiArICAg IER1bXBGbXBDYXBzdWxlKENhcHN1bGVIZWFkZXIsIElzU3lzdGVtRm1wKTsNCj4gKyAgfQ0KPiAr ICBpZiAoSXNOZXN0ZWRGbXBDYXBzdWxlKENhcHN1bGVIZWFkZXIpKSB7DQo+ICsgICAgUHJpbnQo TCJbTmVzdGVkQ2FwdXN1bGVdXG4iKTsNCj4gKyAgICBQcmludChMIkNhcHN1bGVIZWFkZXI6XG4i KTsNCj4gKyAgICBQcmludChMIiAgQ2Fwc3VsZUd1aWQgICAgICAtICVnXG4iLCAmQ2Fwc3VsZUhl YWRlci0+Q2Fwc3VsZUd1aWQpOw0KPiArICAgIFByaW50KEwiICBIZWFkZXJTaXplICAgICAgIC0g MHgleFxuIiwgQ2Fwc3VsZUhlYWRlci0+SGVhZGVyU2l6ZSk7DQo+ICsgICAgUHJpbnQoTCIgIEZs YWdzICAgICAgICAgICAgLSAweCV4XG4iLCBDYXBzdWxlSGVhZGVyLT5GbGFncyk7DQo+ICsgICAg UHJpbnQoTCIgIENhcHN1bGVJbWFnZVNpemUgLSAweCV4XG4iLCBDYXBzdWxlSGVhZGVyLT5DYXBz dWxlSW1hZ2VTaXplKTsNCj4gKyAgICBEdW1wRm1wQ2Fwc3VsZSgoRUZJX0NBUFNVTEVfSEVBREVS ICopKChVSU5UTilDYXBzdWxlSGVhZGVyICsgQ2Fwc3VsZUhlYWRlci0NCj4gPkhlYWRlclNpemUp LCBJc1N5c3RlbUZtcCk7DQo+ICsgIH0NCj4gKw0KPiArRG9uZToNCj4gKyAgRnJlZVBvb2woQnVm ZmVyKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1bXAg Y2Fwc3VsZSBzdGF0dXMgdmFyaWFibGUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgIFRoZSBjYXBzdWxlIHN0YXR1cyB2YXJpYWJsZSBpcyBkdW1wZWQuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBJbnB1dCBwYXJhbWV0ZXIgaXMgbm90IHZhbGlk Lg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEbXBDYXBzdWxlU3RhdHVzVmFyaWFibGUoDQo+ ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBzdWxl VmFyTmFtZVsyMF07DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpU ZW1wVmFyTmFtZTsNCj4gKyAgRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxFX0hFQURFUiAgKkNh cHN1bGVSZXN1bHQ7DQo+ICsgIEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJMRV9GTVAgICAgICpD YXBzdWxlUmVzdWx0Rm1wOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDYXBzdWxlRmlsZU5hbWVTaXplOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDYXBzdWxlSW5kZXhEYXRhWzEyXTsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKkNhcHN1bGVJbmRleDsNCj4gKw0KPiArICBTdGF0dXMgPSBHZXRWYXJp YWJsZTIoDQo+ICsgICAgICAgICAgICAgTCJDYXBzdWxlTWF4IiwNCj4gKyAgICAgICAgICAgICAm Z0VmaUNhcHN1bGVSZXBvcnRHdWlkLA0KPiArICAgICAgICAgICAgIChWT0lEICoqKSZDYXBzdWxl SW5kZXgsDQo+ICsgICAgICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlm ICghRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBDb3B5TWVtKENhcHN1bGVJbmRleERhdGEs IENhcHN1bGVJbmRleCwgMTEgKiBzaXplb2YoQ0hBUjE2KSk7DQo+ICsgICAgQ2Fwc3VsZUluZGV4 RGF0YVsxMV0gPSAwOw0KPiArICAgIFByaW50KEwiQ2Fwc3VsZU1heCAtICVzXG4iLCBDYXBzdWxl SW5kZXhEYXRhKTsNCj4gKyAgICBGcmVlUG9vbChDYXBzdWxlSW5kZXgpOw0KPiArICB9DQo+ICsg IFN0YXR1cyA9IEdldFZhcmlhYmxlMigNCj4gKyAgICAgICAgICAgICBMIkNhcHN1bGVMYXN0IiwN Cj4gKyAgICAgICAgICAgICAmZ0VmaUNhcHN1bGVSZXBvcnRHdWlkLA0KPiArICAgICAgICAgICAg IChWT0lEICoqKSZDYXBzdWxlSW5kZXgsDQo+ICsgICAgICAgICAgICAgTlVMTA0KPiArICAgICAg ICAgICAgICk7DQo+ICsgIGlmICghRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBDb3B5TWVt KENhcHN1bGVJbmRleERhdGEsIENhcHN1bGVJbmRleCwgMTEgKiBzaXplb2YoQ0hBUjE2KSk7DQo+ ICsgICAgQ2Fwc3VsZUluZGV4RGF0YVsxMV0gPSAwOw0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUxh c3QgLSAlc1xuIiwgQ2Fwc3VsZUluZGV4RGF0YSk7DQo+ICsgICAgRnJlZVBvb2woQ2Fwc3VsZUlu ZGV4KTsNCj4gKyAgfQ0KPiArDQo+ICsNCj4gKyAgU3RyQ3B5UyAoQ2Fwc3VsZVZhck5hbWUsIHNp emVvZihDYXBzdWxlVmFyTmFtZSkvc2l6ZW9mKENhcHN1bGVWYXJOYW1lWzBdKSwNCj4gTCJDYXBz dWxlIik7DQo+ICsgIFRlbXBWYXJOYW1lID0gQ2Fwc3VsZVZhck5hbWUgKyBTdHJMZW4gKENhcHN1 bGVWYXJOYW1lKTsNCj4gKyAgSW5kZXggPSAwOw0KPiArDQo+ICsgIHdoaWxlIChUUlVFKSB7DQo+ ICsgICAgVW5pY29kZVNQcmludCAoVGVtcFZhck5hbWUsIDUgKiBzaXplb2YoQ0hBUjE2KSwgTCIl MDR4IiwgSW5kZXgpOw0KPiArDQo+ICsgICAgU3RhdHVzID0gR2V0VmFyaWFibGUyICgNCj4gKyAg ICAgICAgICAgICAgIENhcHN1bGVWYXJOYW1lLA0KPiArICAgICAgICAgICAgICAgJmdFZmlDYXBz dWxlUmVwb3J0R3VpZCwNCj4gKyAgICAgICAgICAgICAgIChWT0lEICoqKSAmQ2Fwc3VsZVJlc3Vs dCwNCj4gKyAgICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICk7DQo+ICsgICAg aWYgKFN0YXR1cyA9PSBFRklfTk9UX0ZPVU5EKSB7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9 IGVsc2UgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIGRpc3BsYXkgY2Fwc3VsZSBwcm9jZXNzIHN0 YXR1cw0KPiArICAgIC8vDQo+ICsgICAgaWYgKENhcHN1bGVSZXN1bHQtPlZhcmlhYmxlVG90YWxT aXplID49DQo+IHNpemVvZihFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfSEVBREVSKSkgew0K PiArICAgICAgUHJpbnQgKEwiQ2Fwc3VsZU5hbWU6ICVzXG4iLCBDYXBzdWxlVmFyTmFtZSk7DQo+ ICsgICAgICBQcmludCAoTCIgIENhcHN1bGUgR3VpZDogJWdcbiIsICZDYXBzdWxlUmVzdWx0LT5D YXBzdWxlR3VpZCk7DQo+ICsgICAgICBQcmludCAoTCIgIENhcHN1bGUgUHJvY2Vzc2VkVGltZTog JXRcbiIsICZDYXBzdWxlUmVzdWx0LT5DYXBzdWxlUHJvY2Vzc2VkKTsNCj4gKyAgICAgIFByaW50 IChMIiAgQ2Fwc3VsZSBTdGF0dXM6ICVyXG4iLCBDYXBzdWxlUmVzdWx0LT5DYXBzdWxlU3RhdHVz KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoQ29tcGFyZUd1aWQoJkNhcHN1bGVSZXN1bHQt PkNhcHN1bGVHdWlkLCAmZ0VmaUZtcENhcHN1bGVHdWlkKSkgew0KPiArICAgICAgaWYgKENhcHN1 bGVSZXN1bHQtPlZhcmlhYmxlVG90YWxTaXplID49DQo+IHNpemVvZihFRklfQ0FQU1VMRV9SRVNV TFRfVkFSSUFCTEVfSEVBREVSKSArIHNpemVvZihFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVf Rk1QKSkgew0KPiArICAgICAgICBDYXBzdWxlUmVzdWx0Rm1wID0gKEVGSV9DQVBTVUxFX1JFU1VM VF9WQVJJQUJMRV9GTVAgKikoQ2Fwc3VsZVJlc3VsdCArIDEpOw0KPiArICAgICAgICBQcmludChM IiAgQ2Fwc3VsZSBGTVAgVmVyc2lvbjogMHgleFxuIiwgQ2Fwc3VsZVJlc3VsdEZtcC0+VmVyc2lv bik7DQo+ICsgICAgICAgIFByaW50KEwiICBDYXBzdWxlIEZNUCBQYXlsb2FkSW5kZXg6IDB4JXhc biIsIENhcHN1bGVSZXN1bHRGbXAtPlBheWxvYWRJbmRleCk7DQo+ICsgICAgICAgIFByaW50KEwi ICBDYXBzdWxlIEZNUCBVcGRhdGVJbWFnZUluZGV4OiAweCV4XG4iLCBDYXBzdWxlUmVzdWx0Rm1w LQ0KPiA+VXBkYXRlSW1hZ2VJbmRleCk7DQo+ICsgICAgICAgIFByaW50KEwiICBDYXBzdWxlIEZN UCBVcGRhdGVJbWFnZVR5cGVJZDogJWdcbiIsICZDYXBzdWxlUmVzdWx0Rm1wLQ0KPiA+VXBkYXRl SW1hZ2VUeXBlSWQpOw0KPiArICAgICAgICBpZiAoQ2Fwc3VsZVJlc3VsdC0+VmFyaWFibGVUb3Rh bFNpemUgPg0KPiBzaXplb2YoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxFX0hFQURFUikgKyBz aXplb2YoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxFX0ZNUCkpIHsNCj4gKyAgICAgICAgICBQ cmludChMIiAgQ2Fwc3VsZSBGTVAgQ2Fwc3VsZUZpbGVOYW1lOiAlc1xuIiwgKENhcHN1bGVSZXN1 bHRGbXAgKyAxKSk7DQo+ICsgICAgICAgICAgQ2Fwc3VsZUZpbGVOYW1lU2l6ZSA9IFN0clNpemUo KENIQVIxNiAqKShDYXBzdWxlUmVzdWx0Rm1wICsgMSkpOw0KPiArICAgICAgICAgIGlmIChDYXBz dWxlUmVzdWx0LT5WYXJpYWJsZVRvdGFsU2l6ZSA+DQo+IHNpemVvZihFRklfQ0FQU1VMRV9SRVNV TFRfVkFSSUFCTEVfSEVBREVSKSArIHNpemVvZihFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVf Rk1QKSArDQo+IENhcHN1bGVGaWxlTmFtZVNpemUpIHsNCj4gKyAgICAgICAgICAgIFByaW50KEwi ICBDYXBzdWxlIEZNUCBDYXBzdWxlVGFyZ2V0OiAlc1xuIiwgKFVJTlQ4ICopKENhcHN1bGVSZXN1 bHRGbXAgKw0KPiAxKSArIENhcHN1bGVGaWxlTmFtZVNpemUpOw0KPiArICAgICAgICAgIH0NCj4g KyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIEZyZWVQb29sKENh cHN1bGVSZXN1bHQpOw0KPiArDQo+ICsgICAgSW5kZXgrKzsNCj4gKyAgICBpZiAoSW5kZXggPiAw eEZGRkYpIHsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJl dHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArQ0hBUjggKm1Gd1R5cGVTdHJpbmdbXSA9 IHsNCj4gKyAgIlVua25vd24iLA0KPiArICAiU3lzdGVtRmlybXdhcmUiLA0KPiArICAiRGV2aWNl RmlybXdhcmUiLA0KPiArICAiVWVmaURyaXZlciIsDQo+ICt9Ow0KPiArDQo+ICtDSEFSOCAqbUxh c3RBdHRlbXB0U3RhdHVzU3RyaW5nW10gPSB7DQo+ICsgICJTdWNjZXNzIiwNCj4gKyAgIkVycm9y OiBVbnN1Y2Nlc3NmdWwiLA0KPiArICAiRXJyb3I6IEluc3VmZmljaWVudCBSZXNvdXJjZXMiLA0K PiArICAiRXJyb3I6IEluY29ycmVjdCBWZXJzaW9uIiwNCj4gKyAgIkVycm9yOiBJbnZhbGlkIEZv cm1hdCIsDQo+ICsgICJFcnJvcjogQXV0aCBFcnJvciIsDQo+ICsgICJFcnJvcjogUG93ZXIgRXZl bnQgQUMiLA0KPiArICAiRXJyb3I6IFBvd2VyIEV2ZW50IEJhdHRlcnkiLA0KPiArfTsNCj4gKw0K PiArLyoqDQo+ICsgIENvbnZlcnQgRndUeXBlIHRvIGEgc3RyaW5nLg0KPiArDQo+ICsgIEBwYXJh bSBGd1R5cGUgIEZ3VHlwZSBpbiBFU1JUDQo+ICsNCj4gKyAgQHJldHVybiBhIHN0cmluZyBmb3Ig RndUeXBlLg0KPiArKiovDQo+ICtDSEFSOCAqDQo+ICtGd1R5cGVUb1N0cmluZygNCj4gKyAgSU4g VUlOVDMyIEZ3VHlwZQ0KPiArICApDQo+ICt7DQo+ICsgIGlmIChGd1R5cGUgPCBzaXplb2YobUZ3 VHlwZVN0cmluZykgLyBzaXplb2YobUZ3VHlwZVN0cmluZ1swXSkpIHsNCj4gKyAgICByZXR1cm4g bUZ3VHlwZVN0cmluZ1tGd1R5cGVdOw0KPiArICB9IGVsc2Ugew0KPiArICAgIHJldHVybiAiSW52 YWxpZCI7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENvbnZlcnQgTGFzdEF0dGVt cHRTdGF0dXMgdG8gYSBzdHJpbmcuDQo+ICsNCj4gKyAgQHBhcmFtIExhc3RBdHRlbXB0U3RhdHVz ICBMYXN0QXR0ZW1wdFN0YXR1cyBpbiBGTVAgb3IgRVNSVA0KPiArDQo+ICsgIEByZXR1cm4gYSBz dHJpbmcgZm9yIExhc3RBdHRlbXB0U3RhdHVzLg0KPiArKiovDQo+ICtDSEFSOCAqDQo+ICtMYXN0 QXR0ZW1wdFN0YXR1c1RvU3RyaW5nKA0KPiArICBJTiBVSU5UMzIgTGFzdEF0dGVtcHRTdGF0dXMN Cj4gKyAgKQ0KPiArew0KPiArICBpZiAoTGFzdEF0dGVtcHRTdGF0dXMgPCBzaXplb2YobUxhc3RB dHRlbXB0U3RhdHVzU3RyaW5nKSAvDQo+IHNpemVvZihtTGFzdEF0dGVtcHRTdGF0dXNTdHJpbmdb MF0pKSB7DQo+ICsgICAgcmV0dXJuIG1MYXN0QXR0ZW1wdFN0YXR1c1N0cmluZ1tMYXN0QXR0ZW1w dFN0YXR1c107DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgcmV0dXJuICJFcnJvcjogVW5rbm93biI7 DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgRVNSVCBlbnRyeS4NCj4gKw0K PiArICBAcGFyYW0gRXNydEVudHJ5ICBFU1JUIGVudHJ5DQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0R1 bXBFc3J0RW50cnkoDQo+ICsgIElOIEVGSV9TWVNURU1fUkVTT1VSQ0VfRU5UUlkgICpFc3J0RW50 cnkNCj4gKyAgKQ0KPiArew0KPiArICBQcmludChMIiAgRndDbGFzcyAgICAgICAgICAgICAgICAg IC0gJWdcbiIsICZFc3J0RW50cnktPkZ3Q2xhc3MpOw0KPiArICBQcmludChMIiAgRndUeXBlICAg ICAgICAgICAgICAgICAgIC0gMHgleCAoJWEpXG4iLCBFc3J0RW50cnktPkZ3VHlwZSwNCj4gRndU eXBlVG9TdHJpbmcoRXNydEVudHJ5LT5Gd1R5cGUpKTsNCj4gKyAgUHJpbnQoTCIgIEZ3VmVyc2lv biAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEVzcnRFbnRyeS0+RndWZXJzaW9uKTsNCj4gKyAg UHJpbnQoTCIgIExvd2VzdFN1cHBvcnRlZEZ3VmVyc2lvbiAtIDB4JXhcbiIsIEVzcnRFbnRyeS0+ TG93ZXN0U3VwcG9ydGVkRndWZXJzaW9uKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVGbGFncyAg ICAgICAgICAgICAtIDB4JXhcbiIsIEVzcnRFbnRyeS0+Q2Fwc3VsZUZsYWdzKTsNCj4gKyAgUHJp bnQoTCIgICAgUEVSU0lTVF9BQ1JPU1NfUkVTRVQgICAtIDB4JXhcbiIsIEVzcnRFbnRyeS0+Q2Fw c3VsZUZsYWdzICYNCj4gQ0FQU1VMRV9GTEFHU19QRVJTSVNUX0FDUk9TU19SRVNFVCk7DQo+ICsg IFByaW50KEwiICAgIFBPUFVMQVRFX1NZU1RFTV9UQUJMRSAgLSAweCV4XG4iLCBFc3J0RW50cnkt PkNhcHN1bGVGbGFncyAmDQo+IENBUFNVTEVfRkxBR1NfUE9QVUxBVEVfU1lTVEVNX1RBQkxFKTsN Cj4gKyAgUHJpbnQoTCIgICAgSU5JVElBVEVfUkVTRVQgICAgICAgICAtIDB4JXhcbiIsIEVzcnRF bnRyeS0+Q2Fwc3VsZUZsYWdzICYNCj4gQ0FQU1VMRV9GTEFHU19JTklUSUFURV9SRVNFVCk7DQo+ ICsgIFByaW50KEwiICBMYXN0QXR0ZW1wdFZlcnNpb24gICAgICAgLSAweCV4XG4iLCBFc3J0RW50 cnktPkxhc3RBdHRlbXB0VmVyc2lvbik7DQo+ICsgIFByaW50KEwiICBMYXN0QXR0ZW1wdFN0YXR1 cyAgICAgICAgLSAweCV4ICglYSlcbiIsIEVzcnRFbnRyeS0+TGFzdEF0dGVtcHRTdGF0dXMsDQo+ IExhc3RBdHRlbXB0U3RhdHVzVG9TdHJpbmcoRXNydEVudHJ5LT5MYXN0QXR0ZW1wdFN0YXR1cykp Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBFU1JUIHRhYmxlLg0KPiArDQo+ICsgIEBw YXJhbSBFc3J0ICBFU1JUIHRhYmxlDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0R1bXBFc3J0KA0KPiAr ICBJTiBFRklfU1lTVEVNX1JFU09VUkNFX1RBQkxFICAqRXNydA0KPiArICApDQo+ICt7DQo+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBFRklfU1lTVEVNX1JFU09V UkNFX0VOVFJZICAqRXNydEVudHJ5Ow0KPiArDQo+ICsgIFByaW50KEwiRUZJX1NZU1RFTV9SRVNP VVJDRV9UQUJMRTpcbiIpOw0KPiArICBQcmludChMIkZ3UmVzb3VyY2VDb3VudCAgICAtIDB4JXhc biIsIEVzcnQtPkZ3UmVzb3VyY2VDb3VudCk7DQo+ICsgIFByaW50KEwiRndSZXNvdXJjZUNvdW50 TWF4IC0gMHgleFxuIiwgRXNydC0+RndSZXNvdXJjZUNvdW50TWF4KTsNCj4gKyAgUHJpbnQoTCJG d1Jlc291cmNlVmVyc2lvbiAgLSAweCVseFxuIiwgRXNydC0+RndSZXNvdXJjZVZlcnNpb24pOw0K PiArDQo+ICsgIEVzcnRFbnRyeSA9IChWT0lEICopKEVzcnQgKyAxKTsNCj4gKyAgZm9yIChJbmRl eCA9IDA7IEluZGV4IDwgRXNydC0+RndSZXNvdXJjZUNvdW50OyBJbmRleCsrKSB7DQo+ICsgICAg UHJpbnQoTCJFRklfU1lTVEVNX1JFU09VUkNFX0VOVFJZICglZCk6XG4iLCBJbmRleCk7DQo+ICsg ICAgRHVtcEVzcnRFbnRyeShFc3J0RW50cnkpOw0KPiArICAgIEVzcnRFbnRyeSsrOw0KPiArICB9 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIEVTUlQgaW5mby4NCj4gKyoqLw0KPiArVk9J RA0KPiArRHVtcEVzcnREYXRhICgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1NZU1RFTV9SRVNPVVJDRV9U QUJMRSAgKkVzcnQ7DQo+ICsNCj4gKyAgUHJpbnQoTCIjIyMjIyMjIyMjIyMjI1xuIik7DQo+ICsg IFByaW50KEwiIyBFU1JUIFRBQkxFICNcbiIpOw0KPiArICBQcmludChMIiMjIyMjIyMjIyMjIyMj XG4iKTsNCj4gKw0KPiArICBTdGF0dXMgPSBFZmlHZXRTeXN0ZW1Db25maWd1cmF0aW9uVGFibGUg KCZnRWZpU3lzdGVtUmVzb3VyY2VUYWJsZUd1aWQsIChWT0lEDQo+ICoqKSZFc3J0KTsNCj4gKyAg aWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgUHJpbnQoTCJFU1JUIC0gJXJcbiIsIFN0 YXR1cyk7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsgIER1bXBFc3J0KEVzcnQpOw0KPiAr ICBQcmludChMIlxuIik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIEZNUCBpbmZvcm1h dGlvbi4NCj4gKw0KPiArICBAcGFyYW0gSW1hZ2VJbmZvU2l6ZSAgICAgICBUaGUgc2l6ZSBvZiBJ bWFnZUluZm8sIGluIGJ5dGVzLg0KPiArICBAcGFyYW0gSW1hZ2VJbmZvICAgICAgICAgICBBIHBv aW50ZXIgdG8gRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IuDQo+ICsgIEBwYXJhbSBEZXNj cmlwdG9yVmVyc2lvbiAgIFRoZSB2ZXJzaW9uIG9mIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQ VE9SLg0KPiArICBAcGFyYW0gRGVzY3JpcHRvckNvdW50ICAgICBUaGUgY291bnQgb2YgRUZJX0ZJ Uk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IuDQo+ICsgIEBwYXJhbSBEZXNjcmlwdG9yU2l6ZSAgICAg IFRoZSBzaXplIG9mIGFuIGluZGl2aWR1YWwgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1Is DQo+IGluIGJ5dGVzLg0KPiArICBAcGFyYW0gUGFja2FnZVZlcnNpb24gICAgICBUaGUgdmVyc2lv biBvZiBwYWNrYWdlLg0KPiArICBAcGFyYW0gUGFja2FnZVZlcnNpb25OYW1lICBUaGUgdmVyc2lv biBuYW1lIG9mIHBhY2thZ2UuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0R1bXBGbXBJbWFnZUluZm8o DQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvU2l6ZSwN Cj4gKyAgSU4gRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAqSW1hZ2VJbmZvLA0KPiAr ICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JWZXJzaW9uLA0K PiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JDb3VudCwN Cj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yU2l6ZSwN Cj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbiwN Cj4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFja2FnZVZlcnNpb25O YW1lDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAg ICAgICAgICAgICAgICpDdXJyZW50SW1hZ2VJbmZvOw0KPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAgUHJpbnQoTCIgIERl c2NyaXB0b3JWZXJzaW9uICAtIDB4JXhcbiIsIERlc2NyaXB0b3JWZXJzaW9uKTsNCj4gKyAgUHJp bnQoTCIgIERlc2NyaXB0b3JDb3VudCAgICAtIDB4JXhcbiIsIERlc2NyaXB0b3JDb3VudCk7DQo+ ICsgIFByaW50KEwiICBEZXNjcmlwdG9yU2l6ZSAgICAgLSAweCV4XG4iLCBEZXNjcmlwdG9yU2l6 ZSk7DQo+ICsgIFByaW50KEwiICBQYWNrYWdlVmVyc2lvbiAgICAgLSAweCV4XG4iLCBQYWNrYWdl VmVyc2lvbik7DQo+ICsgIFByaW50KEwiICBQYWNrYWdlVmVyc2lvbk5hbWUgLSBcIiVzXCJcbiIs IFBhY2thZ2VWZXJzaW9uTmFtZSk7DQo+ICsgIEN1cnJlbnRJbWFnZUluZm8gPSBJbWFnZUluZm87 DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IERlc2NyaXB0b3JDb3VudDsgSW5kZXgrKykg ew0KPiArICAgIFByaW50KEwiICBJbWFnZURlc2NyaXB0b3IgKCVkKVxuIiwgSW5kZXgpOw0KPiAr ICAgIFByaW50KEwiICAgIEltYWdlSW5kZXggICAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEN1 cnJlbnRJbWFnZUluZm8tPkltYWdlSW5kZXgpOw0KPiArICAgIFByaW50KEwiICAgIEltYWdlVHlw ZUlkICAgICAgICAgICAgICAgICAtICVnXG4iLCAmQ3VycmVudEltYWdlSW5mby0+SW1hZ2VUeXBl SWQpOw0KPiArICAgIFByaW50KEwiICAgIEltYWdlSWQgICAgICAgICAgICAgICAgICAgICAtIDB4 JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLT5JbWFnZUlkKTsNCj4gKyAgICBQcmludChMIiAgICBJ bWFnZUlkTmFtZSAgICAgICAgICAgICAgICAgLSBcIiVzXCJcbiIsIEN1cnJlbnRJbWFnZUluZm8t DQo+ID5JbWFnZUlkTmFtZSk7DQo+ICsgICAgUHJpbnQoTCIgICAgVmVyc2lvbiAgICAgICAgICAg ICAgICAgICAgIC0gMHgleFxuIiwgQ3VycmVudEltYWdlSW5mby0+VmVyc2lvbik7DQo+ICsgICAg UHJpbnQoTCIgICAgVmVyc2lvbk5hbWUgICAgICAgICAgICAgICAgIC0gXCIlc1wiXG4iLCBDdXJy ZW50SW1hZ2VJbmZvLQ0KPiA+VmVyc2lvbk5hbWUpOw0KPiArICAgIFByaW50KEwiICAgIFNpemUg ICAgICAgICAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEN1cnJlbnRJbWFnZUluZm8tPlNpemUp Ow0KPiArICAgIFByaW50KEwiICAgIEF0dHJpYnV0ZXNTdXBwb3J0ZWQgICAgICAgICAtIDB4JWx4 XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRlc1N1cHBvcnRlZCk7DQo+ICsgICAg UHJpbnQoTCIgICAgICBJTUFHRV9VUERBVEFCTEUgICAgICAgICAgIC0gMHglbHhcbiIsIEN1cnJl bnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU3VwcG9ydGVkICYgSU1BR0VfQVRUUklCVVRFX0lN QUdFX1VQREFUQUJMRSk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBSRVNFVF9SRVFVSVJFRCAgICAg ICAgICAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU3VwcG9y dGVkICYgSU1BR0VfQVRUUklCVVRFX1JFU0VUX1JFUVVJUkVEKTsNCj4gKyAgICBQcmludChMIiAg ICAgIEFVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEICAgLSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5m by0NCj4gPkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJiBJTUFHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJ T05fUkVRVUlSRUQpOw0KPiArICAgIFByaW50KEwiICAgICAgSU5fVVNFICAgICAgICAgICAgICAg ICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRlc1N1cHBvcnRl ZCAmIElNQUdFX0FUVFJJQlVURV9JTl9VU0UpOw0KPiArICAgIFByaW50KEwiICAgICAgVUVGSV9J TUFHRSAgICAgICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0 cmlidXRlc1N1cHBvcnRlZCAmIElNQUdFX0FUVFJJQlVURV9VRUZJX0lNQUdFKTsNCj4gKyAgICBQ cmludChMIiAgICBBdHRyaWJ1dGVzU2V0dGluZyAgICAgICAgICAgLSAweCVseFxuIiwgQ3VycmVu dEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTZXR0aW5nKTsNCj4gKyAgICBQcmludChMIiAgICAg IElNQUdFX1VQREFUQUJMRSAgICAgICAgICAgLSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5mby0N Cj4gPkF0dHJpYnV0ZXNTZXR0aW5nICYgSU1BR0VfQVRUUklCVVRFX0lNQUdFX1VQREFUQUJMRSk7 DQo+ICsgICAgUHJpbnQoTCIgICAgICBSRVNFVF9SRVFVSVJFRCAgICAgICAgICAgIC0gMHglbHhc biIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGluZyAmIElNQUdFX0FUVFJJ QlVURV9SRVNFVF9SRVFVSVJFRCk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBBVVRIRU5USUNBVElP Tl9SRVFVSVJFRCAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVz U2V0dGluZyAmIElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCk7DQo+ICsg ICAgUHJpbnQoTCIgICAgICBJTl9VU0UgICAgICAgICAgICAgICAgICAgIC0gMHglbHhcbiIsIEN1 cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGluZyAmIElNQUdFX0FUVFJJQlVURV9J Tl9VU0UpOw0KPiArICAgIFByaW50KEwiICAgICAgVUVGSV9JTUFHRSAgICAgICAgICAgICAgICAt IDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRlc1NldHRpbmcgJiBJTUFH RV9BVFRSSUJVVEVfVUVGSV9JTUFHRSk7DQo+ICsgICAgUHJpbnQoTCIgICAgQ29tcGF0aWJpbGl0 aWVzICAgICAgICAgICAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5Db21wYXRp YmlsaXRpZXMpOw0KPiArICAgIFByaW50KEwiICAgICAgQ09NUEFUSUJfQ0hFQ0tfU1VQUE9SVEVE ICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+Q29tcGF0aWJpbGl0aWVzICYgSU1B R0VfQ09NUEFUSUJJTElUWV9DSEVDS19TVVBQT1JURUQpOw0KPiArICAgIGlmIChEZXNjcmlwdG9y VmVyc2lvbiA+IDEpIHsNCj4gKyAgICAgIFByaW50KEwiICAgIExvd2VzdFN1cHBvcnRlZEltYWdl VmVyc2lvbiAtIDB4JXhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5Mb3dlc3RTdXBwb3J0ZWRJ bWFnZVZlcnNpb24pOw0KPiArICAgICAgaWYgKERlc2NyaXB0b3JWZXJzaW9uID4gMikgew0KPiAr ICAgICAgICBQcmludChMIiAgICBMYXN0QXR0ZW1wdFZlcnNpb24gICAgICAgICAgLSAweCV4XG4i LCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+TGFzdEF0dGVtcHRWZXJzaW9uKTsNCj4gKyAgICAgICAg UHJpbnQoTCIgICAgTGFzdEF0dGVtcHRTdGF0dXMgICAgICAgICAgIC0gMHgleCAoJWEpXG4iLCBD dXJyZW50SW1hZ2VJbmZvLQ0KPiA+TGFzdEF0dGVtcHRTdGF0dXMsIExhc3RBdHRlbXB0U3RhdHVz VG9TdHJpbmcoQ3VycmVudEltYWdlSW5mby0+TGFzdEF0dGVtcHRTdGF0dXMpKTsNCj4gKyAgICAg ICAgUHJpbnQoTCIgICAgSGFyZHdhcmVJbnN0YW5jZSAgICAgICAgICAgIC0gMHglbHhcbiIsIEN1 cnJlbnRJbWFnZUluZm8tDQo+ID5IYXJkd2FyZUluc3RhbmNlKTsNCj4gKyAgICAgIH0NCj4gKyAg ICB9DQo+ICsgICAgLy8NCj4gKyAgICAvLyBVc2UgRGVzY3JpcHRvclNpemUgdG8gbW92ZSBJbWFn ZUluZm8gUG9pbnRlciB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBkaWZmZXJlbnQNCj4gSW1hZ2VJ bmZvIHZlcnNpb24NCj4gKyAgICAvLw0KPiArICAgIEN1cnJlbnRJbWFnZUluZm8gPSAoRUZJX0ZJ Uk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgKikoKFVJTlQ4ICopQ3VycmVudEltYWdlSW5mbyArDQo+ IERlc2NyaXB0b3JTaXplKTsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBG TVAgcGFja2FnZSBpbmZvcm1hdGlvbi4NCj4gKw0KPiArICBAcGFyYW0gUGFja2FnZVZlcnNpb24g ICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgcGFja2FnZS4NCj4gKyAgQHBhcmFtIFBhY2thZ2VW ZXJzaW9uTmFtZSAgICAgICAgIFRoZSB2ZXJzaW9uIG5hbWUgb2YgcGFja2FnZS4NCj4gKyAgQHBh cmFtIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbiAgIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBQYWNr YWdlVmVyc2lvbk5hbWUuDQo+ICsgIEBwYXJhbSBBdHRyaWJ1dGVzU3VwcG9ydGVkICAgICAgICBQ YWNrYWdlIGF0dHJpYnV0ZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMNCj4gZGV2aWNlLg0K PiArICBAcGFyYW0gQXR0cmlidXRlc1NldHRpbmcgICAgICAgICAgUGFja2FnZSBhdHRyaWJ1dGVz Lg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRm1wUGFja2FnZUluZm8oDQo+ICsgIElOIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uLA0KPiArICBJTiBDSEFS MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFja2FnZVZlcnNpb25OYW1lLA0KPiArICBJ TiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbk5hbWVNYXhM ZW4sDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXNT dXBwb3J0ZWQsDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJp YnV0ZXNTZXR0aW5nDQo+ICsgICkNCj4gK3sNCj4gKyAgUHJpbnQoTCIgIFBhY2thZ2VWZXJzaW9u ICAgICAgICAgICAgICAtIDB4JXhcbiIsIFBhY2thZ2VWZXJzaW9uKTsNCj4gKyAgUHJpbnQoTCIg IFBhY2thZ2VWZXJzaW9uTmFtZSAgICAgICAgICAtIFwiJXNcIlxuIiwgUGFja2FnZVZlcnNpb25O YW1lKTsNCj4gKyAgUHJpbnQoTCIgIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbiAgICAtIDB4JXhc biIsIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbik7DQo+ICsgIFByaW50KEwiICBBdHRyaWJ1dGVz U3VwcG9ydGVkICAgICAgICAgLSAweCVseFxuIiwgQXR0cmlidXRlc1N1cHBvcnRlZCk7DQo+ICsg IFByaW50KEwiICAgIElNQUdFX1VQREFUQUJMRSAgICAgICAgICAgLSAweCVseFxuIiwgQXR0cmli dXRlc1N1cHBvcnRlZCAmDQo+IElNQUdFX0FUVFJJQlVURV9JTUFHRV9VUERBVEFCTEUpOw0KPiAr ICBQcmludChMIiAgICBSRVNFVF9SRVFVSVJFRCAgICAgICAgICAgIC0gMHglbHhcbiIsIEF0dHJp YnV0ZXNTdXBwb3J0ZWQgJg0KPiBJTUFHRV9BVFRSSUJVVEVfUkVTRVRfUkVRVUlSRUQpOw0KPiAr ICBQcmludChMIiAgICBBVVRIRU5USUNBVElPTl9SRVFVSVJFRCAgIC0gMHglbHhcbiIsIEF0dHJp YnV0ZXNTdXBwb3J0ZWQgJg0KPiBJTUFHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlS RUQpOw0KPiArICBQcmludChMIiAgQXR0cmlidXRlc1NldHRpbmcgICAgICAgICAgIC0gMHglbHhc biIsIEF0dHJpYnV0ZXNTZXR0aW5nKTsNCj4gKyAgUHJpbnQoTCIgICAgSU1BR0VfVVBEQVRBQkxF ICAgICAgICAgICAtIDB4JWx4XG4iLCBBdHRyaWJ1dGVzU2V0dGluZyAmDQo+IElNQUdFX0FUVFJJ QlVURV9JTUFHRV9VUERBVEFCTEUpOw0KPiArICBQcmludChMIiAgICBSRVNFVF9SRVFVSVJFRCAg ICAgICAgICAgIC0gMHglbHhcbiIsIEF0dHJpYnV0ZXNTZXR0aW5nICYNCj4gSU1BR0VfQVRUUklC VVRFX1JFU0VUX1JFUVVJUkVEKTsNCj4gKyAgUHJpbnQoTCIgICAgQVVUSEVOVElDQVRJT05fUkVR VUlSRUQgICAtIDB4JWx4XG4iLCBBdHRyaWJ1dGVzU2V0dGluZyAmDQo+IElNQUdFX0FUVFJJQlVU RV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1w IEZNUCBwcm90b2NvbCBpbmZvLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRm1wRGF0YSAoDQo+ ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9Q Uk9UT0NPTCAgICAgICAgICAgICAgKkZtcDsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpIYW5kbGVCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkhhbmRsZXM7DQo+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAg RUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICpGbXBJbWFnZUlu Zm9CdWY7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJbWFnZUluZm9TaXplOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRm1wSW1hZ2VJbmZvRGVzY3JpcHRvclZlcjsNCj4gKyAgVUlOVDggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZtcEltYWdlSW5mb0NvdW50Ow0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRv clNpemU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQYWNrYWdlVmVyc2lvbjsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpQYWNrYWdlVmVyc2lvbk5hbWU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbk5hbWVNYXhMZW47DQo+ ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1 dGVzU3VwcG9ydGVkOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQXR0cmlidXRlc1NldHRpbmc7DQo+ICsNCj4gKyAgUHJpbnQoTCIjIyMjIyMjIyMj IyNcbiIpOw0KPiArICBQcmludChMIiMgRk1QIERBVEEgI1xuIik7DQo+ICsgIFByaW50KEwiIyMj IyMjIyMjIyMjXG4iKTsNCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0K PiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICZn RWZpRmlybXdhcmVNYW5hZ2VtZW50UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAg TlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICZOdW1iZXJPZkhhbmRsZXMsDQo+ICsgICAgICAg ICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBp ZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBQcmludChMIkZNUCBwcm90b2NvbCAtICVy XG4iLCBFRklfTk9UX0ZPVU5EKTsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBm b3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZkhhbmRsZXM7IEluZGV4KyspIHsNCj4gKyAg ICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sKA0KPiArICAgICAgICAgICAgICAgICAgICBI YW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaUZpcm13YXJl TWFuYWdlbWVudFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiop JkZtcA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IoU3Rh dHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgSW1hZ2VJ bmZvU2l6ZSA9IDA7DQo+ICsgICAgU3RhdHVzID0gRm1wLT5HZXRJbWFnZUluZm8gKA0KPiArICAg ICAgICAgICAgICAgICAgICBGbXAsDQo+ICsgICAgICAgICAgICAgICAgICAgICZJbWFnZUluZm9T aXplLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAg ICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAg ICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAg ICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKFN0YXR1 cyAhPSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAg fQ0KPiArDQo+ICsgICAgRm1wSW1hZ2VJbmZvQnVmID0gTlVMTDsNCj4gKyAgICBGbXBJbWFnZUlu Zm9CdWYgPSBBbGxvY2F0ZVplcm9Qb29sIChJbWFnZUluZm9TaXplKTsNCj4gKyAgICBpZiAoRm1w SW1hZ2VJbmZvQnVmID09IE5VTEwpIHsNCj4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiArICAgICAgZ290byBFWElUOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFBhY2th Z2VWZXJzaW9uTmFtZSA9IE5VTEw7DQo+ICsgICAgU3RhdHVzID0gRm1wLT5HZXRJbWFnZUluZm8g KA0KPiArICAgICAgICAgICAgICAgICAgICBGbXAsDQo+ICsgICAgICAgICAgICAgICAgICAgICZJ bWFnZUluZm9TaXplLCAgICAgICAgICAgICAgIC8vIEltYWdlSW5mb1NpemUNCj4gKyAgICAgICAg ICAgICAgICAgICAgRm1wSW1hZ2VJbmZvQnVmLCAgICAgICAgICAgICAgLy8gSW1hZ2VJbmZvDQo+ ICsgICAgICAgICAgICAgICAgICAgICZGbXBJbWFnZUluZm9EZXNjcmlwdG9yVmVyLCAgIC8vIERl c2NyaXB0b3JWZXJzaW9uDQo+ICsgICAgICAgICAgICAgICAgICAgICZGbXBJbWFnZUluZm9Db3Vu dCwgICAgICAgICAgIC8vIERlc2NyaXB0b3JDb3VudA0KPiArICAgICAgICAgICAgICAgICAgICAm RGVzY3JpcHRvclNpemUsICAgICAgICAgICAgICAvLyBEZXNjcmlwdG9yU2l6ZQ0KPiArICAgICAg ICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb24sICAgICAgICAgICAgICAvLyBQYWNrYWdlVmVy c2lvbg0KPiArICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb25OYW1lICAgICAgICAg ICAvLyBQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0K PiArICAgIC8vDQo+ICsgICAgLy8gSWYgRk1QIEdldEluZm9ybWF0aW9uIGludGVyZmFjZSBmYWls ZWQsIHNraXAgdGhpcyByZXNvdXJjZQ0KPiArICAgIC8vDQo+ICsgICAgaWYgKEVGSV9FUlJPUihT dGF0dXMpKSB7DQo+ICsgICAgICBQcmludChMIkZNUCAoJWQpIEltYWdlSW5mbyAtICVyXG4iLCBJ bmRleCwgU3RhdHVzKTsNCj4gKyAgICAgIEZyZWVQb29sKEZtcEltYWdlSW5mb0J1Zik7DQo+ICsg ICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBQcmludChMIkZNUCAoJWQpIElt YWdlSW5mbzpcbiIsIEluZGV4KTsNCj4gKyAgICBEdW1wRm1wSW1hZ2VJbmZvKA0KPiArICAgICAg SW1hZ2VJbmZvU2l6ZSwgICAgICAgICAgICAgICAvLyBJbWFnZUluZm9TaXplDQo+ICsgICAgICBG bXBJbWFnZUluZm9CdWYsICAgICAgICAgICAgIC8vIEltYWdlSW5mbw0KPiArICAgICAgRm1wSW1h Z2VJbmZvRGVzY3JpcHRvclZlciwgICAvLyBEZXNjcmlwdG9yVmVyc2lvbg0KPiArICAgICAgRm1w SW1hZ2VJbmZvQ291bnQsICAgICAgICAgICAvLyBEZXNjcmlwdG9yQ291bnQNCj4gKyAgICAgIERl c2NyaXB0b3JTaXplLCAgICAgICAgICAgICAgLy8gRGVzY3JpcHRvclNpemUNCj4gKyAgICAgIFBh Y2thZ2VWZXJzaW9uLCAgICAgICAgICAgICAgLy8gUGFja2FnZVZlcnNpb24NCj4gKyAgICAgIFBh Y2thZ2VWZXJzaW9uTmFtZSAgICAgICAgICAgLy8gUGFja2FnZVZlcnNpb25OYW1lDQo+ICsgICAg ICApOw0KPiArDQo+ICsgICAgaWYgKFBhY2thZ2VWZXJzaW9uTmFtZSAhPSBOVUxMKSB7DQo+ICsg ICAgICBGcmVlUG9vbChQYWNrYWdlVmVyc2lvbk5hbWUpOw0KPiArICAgIH0NCj4gKyAgICBGcmVl UG9vbChGbXBJbWFnZUluZm9CdWYpOw0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBHZXQgcGFj a2FnZSBpbmZvDQo+ICsgICAgLy8NCj4gKyAgICBQYWNrYWdlVmVyc2lvbk5hbWUgPSBOVUxMOw0K PiArICAgIFN0YXR1cyA9IEZtcC0+R2V0UGFja2FnZUluZm8gKA0KPiArICAgICAgICAgICAgICAg ICAgICBGbXAsDQo+ICsgICAgICAgICAgICAgICAgICAgICZQYWNrYWdlVmVyc2lvbiwgICAgICAg ICAgICAgIC8vIFBhY2thZ2VWZXJzaW9uDQo+ICsgICAgICAgICAgICAgICAgICAgICZQYWNrYWdl VmVyc2lvbk5hbWUsICAgICAgICAgIC8vIFBhY2thZ2VWZXJzaW9uTmFtZQ0KPiArICAgICAgICAg ICAgICAgICAgICAmUGFja2FnZVZlcnNpb25OYW1lTWF4TGVuLCAgICAvLyBQYWNrYWdlVmVyc2lv bk5hbWVNYXhMZW4NCj4gKyAgICAgICAgICAgICAgICAgICAgJkF0dHJpYnV0ZXNTdXBwb3J0ZWQs ICAgICAgICAgLy8gQXR0cmlidXRlc1N1cHBvcnRlZA0KPiArICAgICAgICAgICAgICAgICAgICAm QXR0cmlidXRlc1NldHRpbmcgICAgICAgICAgICAvLyBBdHRyaWJ1dGVzU2V0dGluZw0KPiArICAg ICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiAr ICAgICAgUHJpbnQoTCJGTVAgKCVkKSBQYWNrYWdlSW5mbyAtICVyXG4iLCBJbmRleCwgU3RhdHVz KTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgUHJpbnQoTCJGTVAgKCVkKSBJbWFnZUluZm86 XG4iLCBJbmRleCk7DQo+ICsgICAgICBEdW1wRm1wUGFja2FnZUluZm8oDQo+ICsgICAgICAgIFBh Y2thZ2VWZXJzaW9uLCAgICAgICAgICAgICAgLy8gUGFja2FnZVZlcnNpb24NCj4gKyAgICAgICAg UGFja2FnZVZlcnNpb25OYW1lLCAgICAgICAgICAvLyBQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAg ICAgICAgUGFja2FnZVZlcnNpb25OYW1lTWF4TGVuLCAgICAvLyBQYWNrYWdlVmVyc2lvbk5hbWVN YXhMZW4NCj4gKyAgICAgICAgQXR0cmlidXRlc1N1cHBvcnRlZCwgICAgICAgICAvLyBBdHRyaWJ1 dGVzU3VwcG9ydGVkDQo+ICsgICAgICAgIEF0dHJpYnV0ZXNTZXR0aW5nICAgICAgICAgICAgLy8g QXR0cmlidXRlc1NldHRpbmcNCj4gKyAgICAgICAgKTsNCj4gKw0KPiArICAgICAgaWYgKFBhY2th Z2VWZXJzaW9uTmFtZSAhPSBOVUxMKSB7DQo+ICsgICAgICAgIEZyZWVQb29sKFBhY2thZ2VWZXJz aW9uTmFtZSk7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsgIFByaW50KEwiXG4i KTsNCj4gKw0KPiArRVhJVDoNCj4gKyAgRnJlZVBvb2woSGFuZGxlQnVmZmVyKTsNCj4gK30NCj4g LS0NCj4gMi43LjQud2luZG93cy4xDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXw0KZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCmVkazItZGV2ZWxAbGlzdHMu MDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4NCmh0dHBzOi8vbGlzdHMuMDEu b3JnL21haWxtYW4vbGlzdGluZm8vZWRrMi1kZXZlbA0K