From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 33B858234B for ; Wed, 21 Dec 2016 19:13:16 -0800 (PST) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga103.fm.intel.com with ESMTP; 21 Dec 2016 19:13:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,386,1477983600"; d="scan'208";a="45278323" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga005.jf.intel.com with ESMTP; 21 Dec 2016 19:13:15 -0800 Received: from fmsmsx151.amr.corp.intel.com (10.18.125.4) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 21 Dec 2016 19:13:14 -0800 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX151.amr.corp.intel.com (10.18.125.4) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 21 Dec 2016 19:13:07 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.20]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.132]) with mapi id 14.03.0248.002; Thu, 22 Dec 2016 11:13:06 +0800 From: "Wu, Jiaxin" To: "Ye, Ting" , "Fu, Siyuan" , "edk2-devel@lists.01.org" CC: "Zhang, Lubo" , "Long, Qin" , Thomas Palmer Thread-Topic: [Patch 06/10] NetworkPkg/TlsAuthConfigDxe: Provide the UI to support TLS auth configuration Thread-Index: AQHSVdyJCotNnY+fZEGhS66eElMde6EHwkmAgAsIoICAAIoX0A== Date: Thu, 22 Dec 2016 03:13:05 +0000 Message-ID: <895558F6EA4E3B41AC93A00D163B72741628DE02@SHSMSX103.ccr.corp.intel.com> References: <1481700859-76060-1-git-send-email-jiaxin.wu@intel.com> <1481700859-76060-7-git-send-email-jiaxin.wu@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNTczYTc5MjktMGI4ZC00MGU3LTliZjktOTI1OWQ1NjViYzBkIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IldaT3UzQndVOTJPOVNIWEZEVTNLVDhHYWlCSVB4a3dhU0RSaXVsK1VGTk09In0= x-ctpclassification: CTP_IC x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch 06/10] NetworkPkg/TlsAuthConfigDxe: Provide the UI to support TLS auth configuration 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: Thu, 22 Dec 2016 03:13:16 -0000 Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 VGhhbmtzIFRpbmcuIFRoZSBzdGFuZGFyZGl6YXRpb24gaXMgaW4gdGhlIHBsYW4uIEJlZm9yZSBm aW5pc2hlZCwgSSB3aWxsIGtlZXAgdGhlIGV4aXN0aW5nIEFQSXMuDQoNCkFzIHRoZSByZXR1cm4g dmFsdWUgb2YgR3VpZFRvU3RyaW5nLCB5b3UgYXJlIHJpZ2h0LCBpdCBzaG91bGQgYmUgIlNpemUi IGluc3RlYWQgb2YgIlNpemUtMSIuICBJIHdpbGwgY29ycmVjdCBpdCBiZWZvcmUgY29tbWl0IHRo ZSBwYXRjaC4NCg0KVGhhbmtzLA0KSmlheGluDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gRnJvbTogWWUsIFRpbmcNCj4gU2VudDogVGh1cnNkYXksIERlY2VtYmVyIDIyLCAyMDE2 IDEwOjUyIEFNDQo+IFRvOiBGdSwgU2l5dWFuIDxzaXl1YW4uZnVAaW50ZWwuY29tPjsgV3UsIEpp YXhpbiA8amlheGluLnd1QGludGVsLmNvbT47DQo+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ IENjOiBaaGFuZywgTHVibyA8bHViby56aGFuZ0BpbnRlbC5jb20+OyBMb25nLCBRaW4gPHFpbi5s b25nQGludGVsLmNvbT47DQo+IFRob21hcyBQYWxtZXIgPHRob21hcy5wYWxtZXJAaHBlLmNvbT4N Cj4gU3ViamVjdDogUkU6IFtQYXRjaCAwNi8xMF0gTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhl OiBQcm92aWRlIHRoZSBVSSB0bw0KPiBzdXBwb3J0IFRMUyBhdXRoIGNvbmZpZ3VyYXRpb24NCj4g DQo+IEkgYWdyZWUuIEFkZGluZyBuZXcgU3RyaW5nVG9HdWlkIGFuZCBHdWlkVG9TdHJpbmcgdG8g Y29tbW9uIGxpYnJhcnkgc2VlbXMNCj4gYSBnb29kIGlkZWEgaWYgd2UgZG9uJ3QgaGF2ZSBleGlz dGluZyBBUElzLg0KPiANCj4gSW4gR3VpZFRvU3RyaW5nLCB0aGUgY29tbWVudCBpbmRpY2F0ZXMg dGhhdCBTUHJpbnQgd2lsbCBOVUxMIHRlcm1pbmF0ZSB0aGUNCj4gc3RyaW5nLCBzbyB1c2UgU2l6 ZSAtMSB0byBza2lwIHRoZSBOVUxMLiBIb3dldmVyLCBJIHNlZSBVbmljb2RlU1ByaW50IGluDQo+ IE1kZVBrZyByZXR1cm5zIHRoZSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGluIHRoZSBw cm9kdWNlZCBvdXRwdXQNCj4gYnVmZmVyLCBub3QgaW5jbHVkaW5nIHRoZSBOdWxsLXRlcm1pbmF0 b3IuDQo+IEl0IGxvb2tzIGluY29uc2lzdGVudCB0byBtZS4gUGxlYXNlIGNoZWNrIHRoYXQuDQo+ IA0KPiBPdGhlcnMgYXJlIGdvb2QgdG8gbWUuDQo+IFJldmlld2VkLWJ5OiBZZSBUaW5nIDx0aW5n LnllQGludGVsLmNvbT4NCj4gDQo+IEJlc3QgUmVnYXJkcywNCj4gVGluZw0KPiANCj4gDQo+IC0t LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEZ1LCBTaXl1YW4NCj4gU2VudDogVGh1 cnNkYXksIERlY2VtYmVyIDE1LCAyMDE2IDEwOjIyIEFNDQo+IFRvOiBXdSwgSmlheGluIDxqaWF4 aW4ud3VAaW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gQ2M6IFllLCBUaW5n IDx0aW5nLnllQGludGVsLmNvbT47IFpoYW5nLCBMdWJvIDxsdWJvLnpoYW5nQGludGVsLmNvbT47 DQo+IExvbmcsIFFpbiA8cWluLmxvbmdAaW50ZWwuY29tPjsgVGhvbWFzIFBhbG1lciA8dGhvbWFz LnBhbG1lckBocGUuY29tPg0KPiBTdWJqZWN0OiBSRTogW1BhdGNoIDA2LzEwXSBOZXR3b3JrUGtn L1Rsc0F1dGhDb25maWdEeGU6IFByb3ZpZGUgdGhlIFVJIHRvDQo+IHN1cHBvcnQgVExTIGF1dGgg Y29uZmlndXJhdGlvbg0KPiANCj4gSGksIEppYXhpbg0KPiANCj4gUHJpbnRMaWIgc3VwcG9ydCAi JWciIHRvIHByaW50IGEgR1VJRCBzbyB5b3UgZG9uJ3QgbmVlZCB0byB1c2UgIiUwOHgtJTA0eC0N Cj4gJTA0eC0lMDJ4JTAyeC0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiIGluIEd1aWRUb1N0cmlu ZygpLg0KPiBCZXNpZGUgb2YgdGhhdCwgSSBkbyBzZWUgYSBsb3Qgb2YgZHJpdmVycyBoYXMgc2lt aWxhciBpbnRlcm5hbCBmdW5jdGlvbg0KPiBTdHJpbmdUb0d1aWQoKSBvciBTdHJUb0d1aWQoKSwg ZG8gd2UgaGF2ZSBhIGNvbW1vbiBsaWJyYXJ5IGludGVyZmFjZSBmb3IgdGhpcz8NCj4gaWYgbm90 IEkgdGhpbmsgaXQgbWF5IHdvcnRoIHRvIGNyZWF0ZSBvbmUuDQo+IA0KPiBPdGhlciBwYXJ0cyBh cmUgZ29vZCB3aXRoIG1lLg0KPiBSZXZpZXdlZC1ieTogRnUgU2l5dWFuIDxzaXl1YW4uZnVAaW50 ZWwuY29tPg0KPiANCj4gDQo+IEJlc3QgUmVnYXJkcw0KPiBTaXl1YW4NCj4gDQo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFd1LCBKaWF4aW4NCj4gU2VudDogMjAxNsTqMTLU wjE0yNUgMTU6MzQNCj4gVG86IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+IENjOiBZZSwgVGlu ZyA8dGluZy55ZUBpbnRlbC5jb20+OyBGdSwgU2l5dWFuIDxzaXl1YW4uZnVAaW50ZWwuY29tPjsg WmhhbmcsDQo+IEx1Ym8gPGx1Ym8uemhhbmdAaW50ZWwuY29tPjsgTG9uZywgUWluIDxxaW4ubG9u Z0BpbnRlbC5jb20+OyBUaG9tYXMNCj4gUGFsbWVyIDx0aG9tYXMucGFsbWVyQGhwZS5jb20+OyBX dSwgSmlheGluIDxqaWF4aW4ud3VAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbUGF0Y2ggMDYvMTBd IE5ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZTogUHJvdmlkZSB0aGUgVUkgdG8NCj4gc3VwcG9y dCBUTFMgYXV0aCBjb25maWd1cmF0aW9uDQo+IA0KPiBUaGlzIHBhdGNoIHByb3ZpZGVzIHRoZSBV SSB0byBzdXBwb3J0IFRMUyBhdXRoIGNvbmZpZ3VyYXRpb24uDQo+ICogRUZJX1NJR05BVFVSRV9M SVNUIGZvcm1hdCBpcyB1c2VkIGZvciAnVGxzQ2FDZXJ0aWZpY2F0ZScNCj4gdmFyaWFibGUuIFNv LCBUTFMgc3VwcG9ydHMgbXVsdGlwbGUgY2VydGlmaWNhdGUgY29uZmlndXJhdGlvbi4NCj4gKiBU aGUgdmFyaWFibGUgYXR0cmlidXRlIGlzIEJTIHdpdGggTlYsIHdoaWNoIG9ubHkgdGFyZ2V0IGF0 DQo+IHByZXZlbnRpbmcgcnVudGltZSBwaGFzZSBhdHRhY2suDQo+IA0KPiBDYzogWWUgVGluZyA8 dGluZy55ZUBpbnRlbC5jb20+DQo+IENjOiBGdSBTaXl1YW4gPHNpeXVhbi5mdUBpbnRlbC5jb20+ DQo+IENjOiBaaGFuZyBMdWJvIDxsdWJvLnpoYW5nQGludGVsLmNvbT4NCj4gQ2M6IExvbmcgUWlu IDxxaW4ubG9uZ0BpbnRlbC5jb20+DQo+IENjOiBUaG9tYXMgUGFsbWVyIDx0aG9tYXMucGFsbWVy QGhwZS5jb20+DQo+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFn cmVlbWVudCAxLjANCj4gU2lnbmVkLW9mZi1ieTogV3UgSmlheGluIDxqaWF4aW4ud3VAaW50ZWwu Y29tPg0KPiAtLS0NCj4gIE5ldHdvcmtQa2cvSW5jbHVkZS9HdWlkL1Rsc0F1dGhDb25maWdIaWku aCAgICAgICAgIHwgICAyNSArDQo+ICBOZXR3b3JrUGtnL0luY2x1ZGUvR3VpZC9UbHNBdXRoZW50 aWNhdGlvbi5oICAgICAgICB8ICAgMjkgKw0KPiAgTmV0d29ya1BrZy9OZXR3b3JrUGtnLmRlYyAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsNCj4gIE5ldHdvcmtQa2cvVGxzQXV0aENv bmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhlLmMgICAgIHwgIDEzNSArKw0KPiAgTmV0d29ya1BrZy9U bHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdEeGUuaW5mICAgfCAgIDczICsNCj4gIE5ldHdv cmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhlLnVuaSAgIHwgICAyMSArDQo+ ICAuLi4vVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhlRXh0cmEudW5pICAgICB8ICAg MTkgKw0KPiAgLi4uL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZVN0cmluZ3MudW5p ICAgfCAgIDM5ICsNCj4gIE5ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmln SW1wbC5jICAgIHwgMTg0MQ0KPiArKysrKysrKysrKysrKysrKysrKw0KPiAgTmV0d29ya1BrZy9U bHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdJbXBsLmggICAgfCAgMjgyICsrKw0KPiAgTmV0 d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdOdkRhdGEuaCAgfCAgIDQ5ICsN Cj4gIE5ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnVmZyLnZmciAgIHwg IDE1MiArKw0KPiAgMTIgZmlsZXMgY2hhbmdlZCwgMjY3MiBpbnNlcnRpb25zKCspDQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgTmV0d29ya1BrZy9JbmNsdWRlL0d1aWQvVGxzQXV0aENvbmZpZ0hpaS5o DQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgTmV0d29ya1BrZy9JbmNsdWRlL0d1aWQvVGxzQXV0aGVu dGljYXRpb24uaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvVGxzQXV0aENvbmZp Z0R4ZS9UbHNBdXRoQ29uZmlnRHhlLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3b3JrUGtn L1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS5pbmYNCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBOZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS51bmkNCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBOZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0 aENvbmZpZ0R4ZUV4dHJhLnVuaQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IE5ldHdvcmtQa2cv VGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhlU3RyaW5ncy51bmkNCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBOZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0ltcGwu Yw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNB dXRoQ29uZmlnSW1wbC5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgTmV0d29ya1BrZy9UbHNBdXRo Q29uZmlnRHhlL1Rsc0F1dGhDb25maWdOdkRhdGEuaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5l dHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnVmZyLnZmcg0KPiANCj4gZGlm ZiAtLWdpdCBhL05ldHdvcmtQa2cvSW5jbHVkZS9HdWlkL1Rsc0F1dGhDb25maWdIaWkuaA0KPiBi L05ldHdvcmtQa2cvSW5jbHVkZS9HdWlkL1Rsc0F1dGhDb25maWdIaWkuaA0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi45ZDIxNDI2DQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvTmV0d29ya1BrZy9JbmNsdWRlL0d1aWQvVGxzQXV0aENvbmZpZ0hpaS5oDQo+IEBAIC0w LDAgKzEsMjUgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBHVUlEcyB1c2VkIGFzIEhJSSBGb3JtU2V0 IGFuZCBISUkgUGFja2FnZSBsaXN0IEdVSUQgaW4gVGxzQXV0aENvbmZpZ0R4ZQ0KPiBkcml2ZXIu DQo+ICsNCj4gK0NvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KPiArVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1h dGVyaWFscyBhcmUgbGljZW5zZWQgYW5kIG1hZGUNCj4gYXZhaWxhYmxlIHVuZGVyDQo+ICt0aGUg dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlIHRoYXQgYWNjb21wYW5pZXMg dGhpcw0KPiBkaXN0cmlidXRpb24uDQo+ICtUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1h eSBiZSBmb3VuZCBhdA0KPiAraHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNl bnNlLnBocC4NCj4gKw0KPiArVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJT RCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4gQkFTSVMsDQo+ICtXSVRIT1VUIFdBUlJBTlRJRVMg T1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4gRVhQUkVTUyBPUiBJTVBM SUVELg0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBfX1RMU19BVVRIX0NPTkZJR19ISUlf R1VJRF9IX18NCj4gKyNkZWZpbmUgX19UTFNfQVVUSF9DT05GSUdfSElJX0dVSURfSF9fDQo+ICsN Cj4gKyNkZWZpbmUgVExTX0FVVEhfQ09ORklHX0dVSUQgXA0KPiArICB7IFwNCj4gKyAgICAweGIw ZWFlNGY4LCAweDlhMDQsIDB4NGM2ZCwgeyAweGE3LCAweDQ4LCAweDc5LCAweDNkLCAweGFhLCAw eGYsIDB4NjUsDQo+IDB4ZGYgfSBcDQo+ICsgIH0NCj4gKw0KPiArZXh0ZXJuIEVGSV9HVUlEIGdU bHNBdXRoQ29uZmlnR3VpZDsNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9OZXR3b3Jr UGtnL0luY2x1ZGUvR3VpZC9UbHNBdXRoZW50aWNhdGlvbi5oDQo+IGIvTmV0d29ya1BrZy9JbmNs dWRlL0d1aWQvVGxzQXV0aGVudGljYXRpb24uaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleCAwMDAwMDAwLi4yZTgwMGRjDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTmV0d29ya1Br Zy9JbmNsdWRlL0d1aWQvVGxzQXV0aGVudGljYXRpb24uaA0KPiBAQCAtMCwwICsxLDI5IEBADQo+ ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIGRlZmluZXMgVGxzQ2FDZXJ0aWZpY2F0ZSB2YXJp YWJsZS4NCj4gKw0KPiArQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICtUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlp bmcgbWF0ZXJpYWxzIGFyZSBsaWNlbnNlZCBhbmQgbWFkZQ0KPiBhdmFpbGFibGUgdW5kZXINCj4g K3RoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UgdGhhdCBhY2NvbXBh bmllcyB0aGlzDQo+IGRpc3RyaWJ1dGlvbi4NCj4gK1RoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vu c2UgbWF5IGJlIGZvdW5kIGF0DQo+ICtodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNk LWxpY2Vuc2UucGhwLg0KPiArDQo+ICtUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBU SEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gK1dJVEhPVVQgV0FSUkFO VElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9S IElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIF9fVExTX0FVVEhFTlRJQ0FU SU9OX0hfXw0KPiArI2RlZmluZSBfX1RMU19BVVRIRU5USUNBVElPTl9IX18NCj4gKw0KPiArLy8g UHJpdmF0ZSB2YXJpYWJsZSBmb3IgQ0EgQ2VydGlmaWNhdGUgY29uZmlndXJhdGlvbg0KPiArLy8N Cj4gKyNkZWZpbmUgRUZJX1RMU19DQV9DRVJUSUZJQ0FURV9HVUlEIFwNCj4gKyAgeyBcDQo+ICsg ICAgMHhmZDIzNDBEMCwgMHgzZGFiLCAweDQzNDksIHsgMHhhNiwgMHhjNywgMHgzYiwgMHg0Ziwg MHgxMiwgMHhiNCwgMHg4ZSwNCj4gMHhhZSB9IFwNCj4gKyAgfQ0KPiArDQo+ICsjZGVmaW5lIEVG SV9UTFNfQ0FfQ0VSVElGSUNBVEVfVkFSSUFCTEUgICAgICAgTCJUbHNDYUNlcnRpZmljYXRlIg0K PiArDQo+ICtleHRlcm4gRUZJX0dVSUQgZ0VmaVRsc0NhQ2VydGlmaWNhdGVHdWlkOw0KPiArDQo+ ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cvTmV0d29ya1BrZy5kZWMgYi9OZXR3 b3JrUGtnL05ldHdvcmtQa2cuZGVjDQo+IGluZGV4IDI2ODE4OGEuLjI0ZDQ1ZjQgMTAwNjQ0DQo+ IC0tLSBhL05ldHdvcmtQa2cvTmV0d29ya1BrZy5kZWMNCj4gKysrIGIvTmV0d29ya1BrZy9OZXR3 b3JrUGtnLmRlYw0KPiBAQCAtMzgsMTAgKzM4LDE3IEBADQo+ICAgIGdJU2NzaUNvbmZpZ0d1aWQg ICAgICAgICAgICAgID0geyAweDRiNDdkNjE2LCAweGE4ZDYsIDB4NDU1MiwgeyAweDlkLCAweDQ0 LCAweGNjLA0KPiAweGFkLCAweDJlLCAweGYsIDB4NGMsIDB4Zjl9fQ0KPiANCj4gICAgIyBJbmNs dWRlL0d1aWQvSHR0cEJvb3RDb25maWdIaWkuaA0KPiAgICBnSHR0cEJvb3RDb25maWdHdWlkICAg ICAgICAgICA9IHsgMHg0ZDIwNTgzYSwgMHg3NzY1LCAweDRlN2EsIHsgMHg4YSwgMHg2NywNCj4g MHhkYywgMHhkZSwgMHg3NCwgMHhlZSwgMHgzZSwgMHhjNSB9fQ0KPiANCj4gKyAgIyBJbmNsdWRl L0d1aWQvVGxzQXV0aENvbmZpZ0hpaS5oDQo+ICsgIGdUbHNBdXRoQ29uZmlnR3VpZCAgICAgICAg ICAgID0geyAweGIwZWFlNGY4LCAweDlhMDQsIDB4NGM2ZCwgeyAweGE3LCAweDQ4LA0KPiAweDc5 LCAweDNkLCAweGFhLCAweGYsIDB4NjUsIDB4ZGYgfX0NCj4gKw0KPiArICAjIEluY2x1ZGUvR3Vp ZC9UbHNBdXRoZW50aWNhdGlvbi5oDQo+ICsgIGdFZmlUbHNDYUNlcnRpZmljYXRlR3VpZCAgICAg ID0geyAweGZkMjM0MEQwLCAweDNkYWIsIDB4NDM0OSwgeyAweGE2LCAweGM3LA0KPiAweDNiLCAw eDRmLCAweDEyLCAweGI0LCAweDhlLCAweGFlIH19DQo+ICsNCj4gKw0KPiAgW1BjZHNGZWF0dXJl RmxhZ10NCj4gICAgIyMgSW5kaWNhdGVzIGlmIHRoZSBJUHNlYyBJS0V2MiBDZXJ0aWZpY2F0ZSBB dXRoZW50aWNhdGlvbiBmZWF0dXJlIGlzIGVuYWJsZWQNCj4gb3Igbm90LjxCUj48QlI+DQo+ICAg ICMgICBUUlVFICAtIENlcnRpZmljYXRlIEF1dGhlbnRpY2F0aW9uIGZlYXR1cmUgaXMgZW5hYmxl ZC48QlI+DQo+ICAgICMgICBGQUxTRSAtIERvZXMgbm90IHN1cHBvcnQgQ2VydGlmaWNhdGUgQXV0 aGVudGljYXRpb24uPEJSPg0KPiAgICAjIEBQcm9tcHQgRW5hYmxlIElQc2VjIElLRXYyIENlcnRp ZmljYXRlIEF1dGhlbnRpY2F0aW9uLg0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9UbHNBdXRo Q29uZmlnRHhlL1Rsc0F1dGhDb25maWdEeGUuYw0KPiBiL05ldHdvcmtQa2cvVGxzQXV0aENvbmZp Z0R4ZS9UbHNBdXRoQ29uZmlnRHhlLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgg MDAwMDAwMC4uNjQ3YmMyZg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL05ldHdvcmtQa2cvVGxz QXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhlLmMNCj4gQEAgLTAsMCArMSwxMzUgQEANCj4g Ky8qKiBAZmlsZQ0KPiArICBUaGUgRHJpdmVyRW50cnlQb2ludCBmb3IgVGxzQXV0aENvbmZpZ0R4 ZSBkcml2ZXIuDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsNCj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZh aWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+IExpY2Vu c2UNCj4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0 ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBmb3VuZCBhdA0KPiArICBodHRwOi8vb3BlbnNv dXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwLg0KPiArDQo+ICsgIFRIRSBQUk9HUkFN IElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJB U0lTLA0KPiArICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBL SU5ELCBFSVRIRVINCj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArDQo+ICsqKi8NCj4gKw0KPiAr I2luY2x1ZGUgIlRsc0F1dGhDb25maWdJbXBsLmgiDQo+ICsNCj4gKy8qKg0KPiArICBVbmxvYWRz IGFuIGltYWdlLg0KPiArDQo+ICsgIEBwYXJhbSAgSW1hZ2VIYW5kbGUgICAgICAgICAgIEhhbmRs ZSB0aGF0IGlkZW50aWZpZXMgdGhlIGltYWdlIHRvIGJlDQo+IHVubG9hZGVkLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBpbWFnZSBoYXMgYmVlbiB1bmxvYWRl ZC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSW1hZ2VIYW5kbGUgaXMgbm90 IGEgdmFsaWQgaW1hZ2UNCj4gaGFuZGxlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArVGxzQXV0aENvbmZpZ0R4ZVVubG9hZCAoDQo+ICsgIElOIEVGSV9IQU5ETEUg IEltYWdlSGFuZGxlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gKyAgVExTX0FVVEhfQ09ORklHX1BSSVZBVEVfREFUQSAgICpQcml2 YXRlRGF0YTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAg ICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlD YWxsZXJJZEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJlByaXZhdGVEYXRh DQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIEFTU0VSVCAoUHJpdmF0 ZURhdGEtPlNpZ25hdHVyZSA9PQ0KPiBUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9EQVRBX1NJR05B VFVSRSk7DQo+ICsNCj4gKyAgZ0JTLT5Vbmluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNl cyAoDQo+ICsgICAgICAgICAmSW1hZ2VIYW5kbGUsDQo+ICsgICAgICAgICAmZ0VmaUNhbGxlcklk R3VpZCwNCj4gKyAgICAgICAgIFByaXZhdGVEYXRhLA0KPiArICAgICAgICAgTlVMTA0KPiArICAg ICAgICAgKTsNCj4gKw0KPiArICBUbHNBdXRoQ29uZmlnRm9ybVVubG9hZCAoUHJpdmF0ZURhdGEp Ow0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFRoaXMgaXMgdGhlIGRlY2xhcmF0aW9uIG9mIGFuIEVGSSBpbWFnZSBlbnRyeSBwb2ludC4gVGhp cyBlbnRyeSBwb2ludCBpcw0KPiArICB0aGUgc2FtZSBmb3IgVUVGSSBBcHBsaWNhdGlvbnMsIFVF RkkgT1MgTG9hZGVycywgYW5kIFVFRkkgRHJpdmVycyBpbmNsdWRpbmcNCj4gKyAgYm90aCBkZXZp Y2UgZHJpdmVycyBhbmQgYnVzIGRyaXZlcnMuDQo+ICsNCj4gKyAgQHBhcmFtICBJbWFnZUhhbmRs ZSAgICAgICAgICAgVGhlIGZpcm13YXJlIGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBVRUZJDQo+ IGltYWdlLg0KPiArICBAcGFyYW0gIFN5c3RlbVRhYmxlICAgICAgICAgICBBIHBvaW50ZXIgdG8g dGhlIEVGSSBTeXN0ZW0gVGFibGUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFs IE90aGVycyAgICAgICAgICAgICAgICBBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLg0KPiAr KiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc0F1dGhDb25maWdEeGVEcml2ZXJF bnRyeVBvaW50ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ICsg IElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9EQVRB ICAgKlByaXZhdGVEYXRhOw0KPiArDQo+ICsgIFByaXZhdGVEYXRhID0gTlVMTDsNCj4gKw0KPiAr ICAvLw0KPiArICAvLyBJZiBhbHJlYWR5IHN0YXJ0ZWQsIHJldHVybi4NCj4gKyAgLy8NCj4gKyAg U3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgSW1hZ2VI YW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaUNhbGxlcklkR3VpZCwNCj4gKyAgICAg ICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICBJbWFnZUhhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgRUZJ X09QRU5fUFJPVE9DT0xfVEVTVF9QUk9UT0NPTA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gRUZJX0FMUkVBRFlf U1RBUlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEluaXRpYWxpemUgdGhlIHBy aXZhdGUgZGF0YSBzdHJ1Y3R1cmUuDQo+ICsgIC8vDQo+ICsgIFByaXZhdGVEYXRhID0gQWxsb2Nh dGVaZXJvUG9vbCAoc2l6ZW9mDQo+IChUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9EQVRBKSk7DQo+ ICsgIGlmIChQcml2YXRlRGF0YSA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5pdGlhbGl6ZSB0aGUg SElJIGNvbmZpZ3VyYXRpb24gZm9ybS4NCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gVGxzQXV0aENv bmZpZ0Zvcm1Jbml0IChQcml2YXRlRGF0YSk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICBnb3RvIE9OX0VSUk9SOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8g SW5zdGFsbCBwcml2YXRlIEdVSUQuDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFs bE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gKyAgICAgICAgICAgICAgICAgICZJbWFn ZUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpQ2FsbGVySWRHdWlkLA0KPiArICAg ICAgICAgICAgICAgICAgUHJpdmF0ZURhdGEsDQo+ICsgICAgICAgICAgICAgICAgICBOVUxMDQo+ ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgZ290byBPTl9FUlJPUjsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gKw0KPiArT05fRVJST1I6DQo+ICsgIFRsc0F1dGhDb25maWdGb3JtVW5sb2FkIChQcml2 YXRlRGF0YSk7DQo+ICsgIEZyZWVQb29sIChQcml2YXRlRGF0YSk7DQo+ICsNCj4gKyAgcmV0dXJu IFN0YXR1czsNCj4gK30NCj4gKw0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9UbHNBdXRoQ29u ZmlnRHhlL1Rsc0F1dGhDb25maWdEeGUuaW5mDQo+IGIvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmln RHhlL1Rsc0F1dGhDb25maWdEeGUuaW5mDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IDAwMDAwMDAuLjE5ZjA5NWUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9OZXR3b3JrUGtnL1Rs c0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS5pbmYNCj4gQEAgLTAsMCArMSw3MyBAQA0K PiArIyMgQGZpbGUNCj4gKyMgIFByb3ZpZGVzIHRoZSBjYXBhYmlsaXR5IHRvIGNvbmZpZ3VyZSBU bHMgQXV0aGVudGljYXRpb24gaW4gYSBzZXR1cCBicm93c2VyDQo+ICsjICBCeSB0aGlzIG1vZHVs ZSwgdXNlciBtYXkgY2hhbmdlIHRoZSBjb250ZW50IG9mIFRsc0NhQ2VydGlmaWNhdGUuDQo+ICsj DQo+ICsjIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPiArIyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0 ZXJpYWxzDQo+ICsjIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0KPiBCU0QgTGljZW5zZQ0KPiArIyB3aGljaCBhY2Nv bXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBt YXkgYmUNCj4gZm91bmQgYXQNCj4gKyMgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2Jz ZC1saWNlbnNlLnBocA0KPiArIyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUg QlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gKyMgV0lUSE9VVCBXQVJSQU5U SUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1Ig SU1QTElFRC4NCj4gKyMNCj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArICBJTkZfVkVSU0lP TiAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KPiArICBCQVNFX05BTUUgICAgICAgICAgICAg ICAgID0gVGxzQXV0aENvbmZpZ0R4ZQ0KPiArICBNT0RVTEVfVU5JX0ZJTEUgICAgICAgICAgID0g VGxzQXV0aENvbmZpZ0R4ZS51bmkNCj4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICA9IDdj YTEwMjRmLWViMTctMTFlNS05ZGJhLTI4ZDI0NDdjNDgyOQ0KPiArICBNT0RVTEVfVFlQRSAgICAg ICAgICAgICAgID0gRFhFX0RSSVZFUg0KPiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgID0g MS4wDQo+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgPSBUbHNBdXRoQ29uZmlnRHhlRHJp dmVyRW50cnlQb2ludA0KPiArICBVTkxPQURfSU1BR0UgICAgICAgICAgICAgID0gVGxzQXV0aENv bmZpZ0R4ZVVubG9hZA0KPiArDQo+ICsjDQo+ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAg ICAgICA9IElBMzIgWDY0DQo+ICsjDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4gKyAgTWRlUGtnL01k ZVBrZy5kZWMNCj4gKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gKyAgTmV0d29y a1BrZy9OZXR3b3JrUGtnLmRlYw0KPiArDQo+ICtbU291cmNlc10NCj4gKyAgVGxzQXV0aENvbmZp Z0ltcGwuYw0KPiArICBUbHNBdXRoQ29uZmlnSW1wbC5oDQo+ICsgIFRsc0F1dGhDb25maWdOdkRh dGEuaA0KPiArICBUbHNBdXRoQ29uZmlnRHhlLmMNCj4gKyAgVGxzQXV0aENvbmZpZ0R4ZVN0cmlu Z3MudW5pDQo+ICsgIFRsc0F1dGhDb25maWdWZnIudmZyDQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nl c10NCj4gKyAgQmFzZUxpYg0KPiArICBCYXNlTWVtb3J5TGliDQo+ICsgIE1lbW9yeUFsbG9jYXRp b25MaWINCj4gKyAgVWVmaUxpYg0KPiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gKyAg VWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliDQo+ICsgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+ ICsgIERlYnVnTGliDQo+ICsgIEhpaUxpYg0KPiArICBEZXZpY2VQYXRoTGliDQo+ICsgIFVlZmlI aWlTZXJ2aWNlc0xpYg0KPiArICBGaWxlRXhwbG9yZXJMaWINCj4gKyAgUHJpbnRMaWINCj4gKw0K PiArW1Byb3RvY29sc10NCj4gKyAgZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQgICAgICAgICAg ICAgICAgICAgICMjIFBST0RVQ0VTDQo+ICsgIGdFZmlIaWlDb25maWdBY2Nlc3NQcm90b2NvbEd1 aWQgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KPiArICBnRWZpU2ltcGxlRmlsZVN5c3RlbVBy b3RvY29sR3VpZCAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+ICsNCj4gK1tH dWlkc10NCj4gKyAgZ1Rsc0F1dGhDb25maWdHdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMjIFBST0RVQ0VTICAjIyBHVUlEDQo+ICsgIGdFZmlDZXJ0WDUwOUd1aWQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIyBDT05TVU1FUyAgIyMgR1VJRCAgIyBJbmRpY2F0ZSB0aGUNCj4g Y2VydCB0eXBlDQo+ICsgIGdFZmlJZnJUaWFub0d1aWQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIyBDT05TVU1FUyAgIyMgSElJDQo+ICsgIGdFZmlUbHNDYUNlcnRpZmljYXRlR3VpZCAg ICAgICAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUyAgIyMgR1VJRA0KPiArDQo+ICtbRGVwZXhd DQo+ICsgIGdFZmlIaWlDb25maWdSb3V0aW5nUHJvdG9jb2xHdWlkICBBTkQNCj4gKyAgZ0VmaUhp aURhdGFiYXNlUHJvdG9jb2xHdWlkDQo+ICsNCj4gK1tVc2VyRXh0ZW5zaW9ucy5UaWFub0NvcmUu IkV4dHJhRmlsZXMiXQ0KPiArICBUbHNBdXRoQ29uZmlnRHhlRXh0cmEudW5pDQo+IGRpZmYgLS1n aXQgYS9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS51bmkNCj4g Yi9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS51bmkNCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uZjk5YTE0Zg0KPiAtLS0gL2Rldi9u dWxsDQo+ICsrKyBiL05ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhl LnVuaQ0KPiBAQCAtMCwwICsxLDIxIEBADQo+ICsvLyAvKiogQGZpbGUNCj4gKy8vIFByb3ZpZGVz IHRoZSBjYXBhYmlsaXR5IHRvIGNvbmZpZ3VyZSBUbHMgQXV0aGVudGljYXRpb24gaW4gYSBzZXR1 cCBicm93c2VyDQo+ICsvLw0KPiArLy8gQnkgdGhpcyBtb2R1bGUsIHVzZXIgbWF5IGNoYW5nZSB0 aGUgY29udGVudCBvZiBUbHNDYUNlcnRpZmljYXRlLg0KPiArLy8NCj4gKy8vIENvcHlyaWdodCAo YykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAr Ly8NCj4gKy8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4g Ky8vIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBj b25kaXRpb25zIG9mIHRoZQ0KPiBCU0QgTGljZW5zZQ0KPiArLy8gd2hpY2ggYWNjb21wYW5pZXMg dGhpcyBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+ IGZvdW5kIGF0DQo+ICsvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vu c2UucGhwDQo+ICsvLyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJ Q0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBP UiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElNUExJ RUQuDQo+ICsvLw0KPiArLy8gKiovDQo+ICsNCj4gKw0KPiArI3N0cmluZyBTVFJfTU9EVUxFX0FC U1RSQUNUICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiUHJvdmlkZXMgdGhlDQo+IGNhcGFi aWxpdHkgdG8gY29uZmlndXJlIFRscyBBdXRoZW50aWNhdGlvbiBpbiBhIHNldHVwIGJyb3dzZXIi DQo+ICsNCj4gKyNzdHJpbmcgU1RSX01PRFVMRV9ERVNDUklQVElPTiAgICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgIkJ5IHRoaXMgbW9kdWxlLA0KPiB1c2VyIG1heSBjaGFuZ2UgdGhlIGNvbnRlbnQg b2YgVGxzQ2FDZXJ0aWZpY2F0ZS4iDQo+ICsNCj4gZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cvVGxz QXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhlRXh0cmEudW5pDQo+IGIvTmV0d29ya1BrZy9U bHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdEeGVFeHRyYS51bmkNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uZWU0YzQ5Zg0KPiAtLS0gL2Rldi9udWxsDQo+ICsr KyBiL05ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhlRXh0cmEudW5p DQo+IEBAIC0wLDAgKzEsMTkgQEANCj4gKy8vIC8qKiBAZmlsZQ0KPiArLy8gVGxzQXV0aENvbmZp Z0R4ZSBMb2NhbGl6ZWQgU3RyaW5ncyBhbmQgQ29udGVudA0KPiArLy8NCj4gKy8vIENvcHlyaWdo dCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0K PiArLy8NCj4gKy8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN Cj4gKy8vIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZQ0KPiBCU0QgTGljZW5zZQ0KPiArLy8gd2hpY2ggYWNjb21wYW5p ZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJl DQo+IGZvdW5kIGF0DQo+ICsvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxp Y2Vuc2UucGhwDQo+ICsvLyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNE IExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gKy8vIFdJVEhPVVQgV0FSUkFOVElF UyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElN UExJRUQuDQo+ICsvLw0KPiArLy8gKiovDQo+ICsNCj4gKyNzdHJpbmcgU1RSX1BST1BFUlRJRVNf TU9EVUxFX05BTUUNCj4gKyNsYW5ndWFnZSBlbi1VUw0KPiArIlRMUyBBdXRoIENvbmZpZyBEWEUi DQo+ICsNCj4gKw0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rs c0F1dGhDb25maWdEeGVTdHJpbmdzLnVuaQ0KPiBiL05ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4 ZS9UbHNBdXRoQ29uZmlnRHhlU3RyaW5ncy51bmkNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g aW5kZXggMDAwMDAwMC4uYThmN2U0Mw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL05ldHdvcmtQ a2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhlU3RyaW5ncy51bmkNCj4gQEAgLTAs MCArMSwzOSBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFN0cmluZyBkZWZpbml0aW9ucyBmb3IgVGxz IEF1dGhlbnRpY2F0aW9uIENvbmZpZ3VyYXRpb24gZm9ybS4NCj4gKw0KPiArQ29weXJpZ2h0IChj KSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICtU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICthcmUgbGljZW5z ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0 aGUgQlNEDQo+IExpY2Vuc2UNCj4gK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9u LiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gZm91bmQgYXQNCj4gK2h0 dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiArVEhF IFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJ UyINCj4gQkFTSVMsDQo+ICtXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9G IEFOWSBLSU5ELCBFSVRIRVINCj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArDQo+ICsqKi8NCj4g Kw0KPiArI2xhbmdkZWYgZW4tVVMgIkVuZ2xpc2giDQo+ICsNCj4gKyNzdHJpbmcgU1RSX1RMU19B VVRIX0NPTkZJR19USVRMRSAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJUbHMg QXV0aA0KPiBDb25maWd1cmF0aW9uIg0KPiArI3N0cmluZyBTVFJfVExTX0FVVEhfQ09ORklHX0hF TFAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlByZXNzDQo+IDxFbnRlcj4g dG8gc2VsZWN0IFRscyBBdXRoIENvbmZpZ3VyYXRpb24uIg0KPiArDQo+ICsjc3RyaW5nIFNUUl9U TFNfQVVUSF9DT05GSUdfU0VSVkVSX0NBICAgICAgICAgCQkgI2xhbmd1YWdlDQo+IGVuLVVTICJT ZXJ2ZXIgQ0EgQ29uZmlndXJhdGlvbiINCj4gKyNzdHJpbmcgU1RSX1RMU19BVVRIX0NPTkZJR19T RVJWRVJfQ0FfSEVMUCAgICAJCSAjbGFuZ3VhZ2UNCj4gZW4tVVMgIlByZXNzIDxFbnRlcj4gdG8g Y29uZmlndXJlIFNlcnZlciBDQS4iDQo+ICsjc3RyaW5nIFNUUl9UTFNfQVVUSF9DT05GSUdfQ0xJ RU5UX0NFUlQgICAgICAgICAJICNsYW5ndWFnZSBlbi1VUw0KPiAiQ2xpZW50IENlcnQgQ29uZmln dXJhdGlvbiINCj4gKyNzdHJpbmcgU1RSX1RMU19BVVRIX0NPTkZJR19DTElFTlRfQ0VSVF9IRUxQ ICAgIAkgI2xhbmd1YWdlDQo+IGVuLVVTICJDbGllbnQgY2VydCBjb25maWd1cmF0aW9uIGlzIHVu c3VwcG9ydGVkIGN1cnJlbnRseS4iDQo+ICsNCj4gKyNzdHJpbmcgU1RSX1RMU19BVVRIX0NPTkZJ R19FTlJPTExfQ0VSVCAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTDQo+ICJFbnJvbGwgQ2Vy dCINCj4gKyNzdHJpbmcgU1RSX1RMU19BVVRIX0NPTkZJR19FTlJPTExfQ0VSVF9IRUxQICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTDQo+ICJQcmVzcyA8RW50ZXI+IHRvIGVucm9sbCBjZXJ0LiINCj4g KyNzdHJpbmcgU1RSX1RMU19BVVRIX0NPTkZJR19ERUxFVEVfQ0VSVCAgICAgICAgICAgICAgI2xh bmd1YWdlIGVuLVVTDQo+ICJEZWxldGUgQ2VydCINCj4gKyNzdHJpbmcgU1RSX1RMU19BVVRIX0NP TkZJR19ERUxFVEVfQ0VSVF9IRUxQICAgICAgICAgI2xhbmd1YWdlIGVuLVVTDQo+ICJQcmVzcyA8 RW50ZXI+IHRvIGRlbGV0ZSBjZXJ0LiINCj4gKw0KPiArI3N0cmluZyBTVFJfVExTX0FVVEhfQ09O RklHX0FERF9DRVJUX0ZJTEUgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMNCj4gIkVucm9sbCBD ZXJ0IFVzaW5nIEZpbGUiDQo+ICsNCj4gKyNzdHJpbmcgU1RSX1RMU19BVVRIX0NPTkZJR19DRVJU X0dVSUQgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJDZXJ0DQo+IEdVSUQiDQo+ICsj c3RyaW5nIFNUUl9UTFNfQVVUSF9DT05GSUdfQ0VSVF9HVUlEX0hFTFAgICAgICAgICAgICNsYW5n dWFnZSBlbi1VUw0KPiAiSW5wdXQgZGlnaXQgY2hhcmFjdGVyIGluIDExMTExMTExLTIyMjItMzMz My00NDQ0LTEyMzQ1Njc4OTBhYiBmb3JtYXQuIg0KPiArI3N0cmluZyBTVFJfVExTX0FVVEhfQ09O RklHX1NBVkVfQU5EX0VYSVQgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMNCj4gIkNvbW1pdCBD aGFuZ2VzIGFuZCBFeGl0Ig0KPiArI3N0cmluZyBTVFJfVExTX0FVVEhfQ09ORklHX05PX1NBVkVf QU5EX0VYSVQgICAgICAgICAjbGFuZ3VhZ2UgZW4tDQo+IFVTICJEaXNjYXJkIENoYW5nZXMgYW5k IEV4aXQiDQo+ICsNCj4gKyNzdHJpbmcgU1RSX0NFUlRfVFlQRV9QQ0tTX0dVSUQgICAgICAgICAg ICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJHVUlEIGZvcg0KPiBDRVJUIg0KPiArDQo+ICsj c3RyaW5nIFNUUl9OVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5n dWFnZSBlbi1VUyAiIg0KPiBcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUNCj4gZGlmZiAtLWdp dCBhL05ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnSW1wbC5jDQo+IGIv TmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdJbXBsLmMNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uMTEzMmNhYw0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL05ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnSW1wbC5j DQo+IEBAIC0wLDAgKzEsMTg0MSBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFRoZSBNaXNjZWxsYW5l b3VzIFJvdXRpbmVzIGZvciBUbHNBdXRoQ29uZmlnRHhlIGRyaXZlci4NCj4gKw0KPiArQ29weXJp Z2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQo+ICsNCj4gK1RoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4g K2FyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QNCj4gTGljZW5zZQ0KPiArd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBmb3Vu ZCBhdA0KPiAraHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0K PiArDQo+ICtUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0Ug T04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNF TlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsN Cj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiVGxzQXV0aENvbmZpZ0ltcGwuaCINCj4gKw0KPiAr Vk9JRCAgICAgICAgICAgICAgICAgICAgKm1TdGFydE9wQ29kZUhhbmRsZSA9IE5VTEw7DQo+ICtW T0lEICAgICAgICAgICAgICAgICAgICAqbUVuZE9wQ29kZUhhbmRsZSAgID0gTlVMTDsNCj4gK0VG SV9JRlJfR1VJRF9MQUJFTCAgICAgICptU3RhcnRMYWJlbCAgICAgICAgPSBOVUxMOw0KPiArRUZJ X0lGUl9HVUlEX0xBQkVMICAgICAgKm1FbmRMYWJlbCAgICAgICAgICA9IE5VTEw7DQo+ICsNCj4g Kw0KPiArQ0hBUjE2ICAgICAgICAgICAgICAgICAgbVRsc0F1dGhDb25maWdTdG9yYWdlTmFtZVtd ID0NCj4gTCJUTFNfQVVUSF9DT05GSUdfSUZSX05WREFUQSI7DQo+ICsNCj4gK1RMU19BVVRIX0NP TkZJR19QUklWQVRFX0RBVEEgICAgICAqbVRsc0F1dGhQcml2YXRlRGF0YSA9IE5VTEw7DQo+ICsN Cj4gK0hJSV9WRU5ET1JfREVWSUNFX1BBVEggIG1UbHNBdXRoQ29uZmlnSGlpVmVuZG9yRGV2aWNl UGF0aCA9IHsNCj4gKyAgew0KPiArICAgIHsNCj4gKyAgICAgIEhBUkRXQVJFX0RFVklDRV9QQVRI LA0KPiArICAgICAgSFdfVkVORE9SX0RQLA0KPiArICAgICAgew0KPiArICAgICAgICAoVUlOVDgp IChzaXplb2YgKFZFTkRPUl9ERVZJQ0VfUEFUSCkpLA0KPiArICAgICAgICAoVUlOVDgpICgoc2l6 ZW9mIChWRU5ET1JfREVWSUNFX1BBVEgpKSA+PiA4KQ0KPiArICAgICAgfQ0KPiArICAgIH0sDQo+ ICsgICAgVExTX0FVVEhfQ09ORklHX0dVSUQNCj4gKyAgfSwNCj4gKyAgew0KPiArICAgIEVORF9E RVZJQ0VfUEFUSF9UWVBFLA0KPiArICAgIEVORF9FTlRJUkVfREVWSUNFX1BBVEhfU1VCVFlQRSwN Cj4gKyAgICB7DQo+ICsgICAgICAoVUlOVDgpIChFTkRfREVWSUNFX1BBVEhfTEVOR1RIKSwNCj4g KyAgICAgIChVSU5UOCkgKChFTkRfREVWSUNFX1BBVEhfTEVOR1RIKSA+PiA4KQ0KPiArICAgIH0N Cj4gKyAgfQ0KPiArfTsNCj4gKw0KPiArLy8NCj4gKy8vIFBvc3NpYmxlIERFUi1lbmNvZGVkIGNl cnRpZmljYXRlIGZpbGUgc3VmZml4ZXMsIGVuZCB3aXRoIE5VTEwgcG9pbnRlci4NCj4gKy8vDQo+ ICtDSEFSMTYqIG1EZXJQZW1FbmNvZGVkU3VmZml4W10gPSB7DQo+ICsgIEwiLmNlciIsDQo+ICsg IEwiLmRlciIsDQo+ICsgIEwiLmNydCIsDQo+ICsgIEwiLnBlbSIsDQo+ICsgIE5VTEwNCj4gK307 DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvZGUgY2hlY2tzIGlmIHRoZSBGaWxlU3VmZml4IGlz IG9uZSBvZiB0aGUgcG9zc2libGUgREVSL1BFTS1lbmNvZGVkDQo+IGNlcnRpZmljYXRlIHN1ZmZp eC4NCj4gKw0KPiArICBAcGFyYW1baW5dIEZpbGVTdWZmaXggICAgICAgICAgICBUaGUgc3VmZml4 IG9mIHRoZSBpbnB1dCBjZXJ0aWZpY2F0ZSBmaWxlDQo+ICsNCj4gKyAgQHJldHZhbCAgICBUUlVF ICAgICAgICAgICBJdCdzIGEgREVSL1BFTS1lbmNvZGVkIGNlcnRpZmljYXRlLg0KPiArICBAcmV0 dmFsICAgIEZBTFNFICAgICAgICAgIEl0J3MgTk9UIGEgREVSL1BFTS1lbmNvZGVkIGNlcnRpZmlj YXRlLg0KPiArDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzRGVyUGVtRW5jb2RlQ2VydGlmaWNh dGUgKA0KPiArICBJTiBDT05TVCBDSEFSMTYgICAgICAgICAqRmlsZVN1ZmZpeA0KPiArKQ0KPiAr ew0KPiArICBVSU5UTiAgICAgSW5kZXg7DQo+ICsgIGZvciAoSW5kZXggPSAwOyBtRGVyUGVtRW5j b2RlZFN1ZmZpeFtJbmRleF0gIT0gTlVMTDsgSW5kZXgrKykgew0KPiArICAgIGlmIChTdHJDbXAg KEZpbGVTdWZmaXgsIG1EZXJQZW1FbmNvZGVkU3VmZml4W0luZGV4XSkgPT0gMCkgew0KPiArICAg ICAgcmV0dXJuIFRSVUU7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsgIHJldHVybiBGQUxTRTsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFdvcmtlciBmdW5jdGlvbiB0aGF0IHByaW50cyBhbiBFRklf R1VJRCBpbnRvIHNwZWNpZmllZCBCdWZmZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgR3Vp ZCAgICAgICAgICBQb2ludGVyIHRvIEdVSUQgdG8gcHJpbnQuDQo+ICsgIEBwYXJhbVtpbl0gICAg IEJ1ZmZlciAgICAgICAgQnVmZmVyIHRvIHByaW50IEd1aWQgaW50by4NCj4gKyAgQHBhcmFtW2lu XSAgICAgQnVmZmVyU2l6ZSAgICBTaXplIG9mIEJ1ZmZlci4NCj4gKw0KPiArICBAcmV0dmFsICAg IE51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuDQo+ICsNCj4gKyoqLw0KPiArVUlOVE4NCj4g K0d1aWRUb1N0cmluZyAoDQo+ICsgIElOICBFRklfR1VJRCAgKkd1aWQsDQo+ICsgIElOICBDSEFS MTYgICAgKkJ1ZmZlciwNCj4gKyAgSU4gIFVJTlROICAgICBCdWZmZXJTaXplDQo+ICsgICkNCj4g K3sNCj4gKyAgVUlOVE4gU2l6ZTsNCj4gKw0KPiArICBTaXplID0gVW5pY29kZVNQcmludCAoDQo+ ICsgICAgICAgICAgICBCdWZmZXIsDQo+ICsgICAgICAgICAgICBCdWZmZXJTaXplLA0KPiArICAg ICAgICAgICAgTCIlMDh4LSUwNHgtJTA0eC0lMDJ4JTAyeC0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUw MngiLA0KPiArICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGExLA0KPiArICAgICAgICAgICAg KFVJTlROKUd1aWQtPkRhdGEyLA0KPiArICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGEzLA0K PiArICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGE0WzBdLA0KPiArICAgICAgICAgICAgKFVJ TlROKUd1aWQtPkRhdGE0WzFdLA0KPiArICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGE0WzJd LA0KPiArICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGE0WzNdLA0KPiArICAgICAgICAgICAg KFVJTlROKUd1aWQtPkRhdGE0WzRdLA0KPiArICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGE0 WzVdLA0KPiArICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGE0WzZdLA0KPiArICAgICAgICAg ICAgKFVJTlROKUd1aWQtPkRhdGE0WzddDQo+ICsgICAgICAgICAgICApOw0KPiArDQo+ICsgIC8v DQo+ICsgIC8vIFNQcmludCB3aWxsIG51bGwgdGVybWluYXRlIHRoZSBzdHJpbmcuIFRoZSAtMSBz a2lwcyB0aGUgbnVsbA0KPiArICAvLw0KPiArICByZXR1cm4gU2l6ZSAtIDE7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBDb252ZXJ0IGEgU3RyaW5nIHRvIEd1aWQgVmFsdWUuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgIFN0ciAgICAgICAgU3BlY2lmaWVzIHRoZSBTdHJpbmcgdG8gYmUgY29udmVy dGVkLg0KPiArICBAcGFyYW1baW5dICAgU3RyTGVuICAgICBOdW1iZXIgb2YgVW5pY29kZSBDaGFy YWN0ZXJzIG9mIFN0cmluZyAoZXhjbHVzaXZlDQo+IFwwKQ0KPiArICBAcGFyYW1bb3V0XSAgR3Vp ZCAgICAgICBSZXR1cm4gdGhlIHJlc3VsdCBHdWlkIHZhbHVlLg0KPiArDQo+ICsgIEByZXR2YWwg ICAgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQgc3VjY2Vz c2Z1bGx5Lg0KPiArICBAcmV0dmFsICAgIEVGSV9OT1RfRk9VTkQgICAgICAgICBJbnZhbGlkIHN0 cmluZy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtTdHJpbmdUb0d1aWQgKA0KPiAr ICBJTiAgIENIQVIxNiAgICAgICAgICAgKlN0ciwNCj4gKyAgSU4gICBVSU5UTiAgICAgICAgICAg IFN0ckxlbiwNCj4gKyAgT1VUICBFRklfR1VJRCAgICAgICAgICpHdWlkDQo+ICsgICkNCj4gK3sN Cj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICpQdHJCdWZmZXI7DQo+ICsgIENIQVIxNiAgICAgICAg ICAgICAqUHRyUG9zaXRpb247DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAqQnVmZmVyOw0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgRGF0YTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgIEluZGV4 Ow0KPiArICBVSU5UMTYgICAgICAgICAgICAgRGlnaXRzWzNdOw0KPiArDQo+ICsgIEJ1ZmZlciA9 IChDSEFSMTYgKikgQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChDSEFSMTYpICogKFN0ckxlbiAr IDEpKTsNCj4gKyAgaWYgKEJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gKyAgU3RyQ3B5UyAoQnVmZmVyLCAoU3RyTGVu ICsgMSksIFN0cik7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gRGF0YTENCj4gKyAgLy8NCj4gKyAg UHRyQnVmZmVyICAgICAgID0gQnVmZmVyOw0KPiArICBQdHJQb3NpdGlvbiAgICAgPSBQdHJCdWZm ZXI7DQo+ICsgIHdoaWxlICgqUHRyQnVmZmVyICE9IEwnXDAnKSB7DQo+ICsgICAgaWYgKCpQdHJC dWZmZXIgPT0gTCctJykgew0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArICAgIFB0ckJ1 ZmZlcisrOw0KPiArICB9DQo+ICsgIGlmICgqUHRyQnVmZmVyID09IEwnXDAnKSB7DQo+ICsgICAg RnJlZVBvb2wgKEJ1ZmZlcik7DQo+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICsgIH0N Cj4gKw0KPiArICAqUHRyQnVmZmVyICAgICAgPSBMJ1wwJzsNCj4gKyAgRGF0YSAgICAgICAgICAg ID0gU3RySGV4VG9VaW50biAoUHRyUG9zaXRpb24pOw0KPiArICBHdWlkLT5EYXRhMSAgICAgPSAo VUlOVDMyKURhdGE7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gRGF0YTINCj4gKyAgLy8NCj4gKyAg UHRyQnVmZmVyKys7DQo+ICsgIFB0clBvc2l0aW9uICAgICA9IFB0ckJ1ZmZlcjsNCj4gKyAgd2hp bGUgKCpQdHJCdWZmZXIgIT0gTCdcMCcpIHsNCj4gKyAgICBpZiAoKlB0ckJ1ZmZlciA9PSBMJy0n KSB7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgICAgUHRyQnVmZmVyKys7DQo+ICsg IH0NCj4gKyAgaWYgKCpQdHJCdWZmZXIgPT0gTCdcMCcpIHsNCj4gKyAgICBGcmVlUG9vbCAoQnVm ZmVyKTsNCj4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gKyAgfQ0KPiArICAqUHRyQnVm ZmVyICAgICAgPSBMJ1wwJzsNCj4gKyAgRGF0YSAgICAgICAgICAgID0gU3RySGV4VG9VaW50biAo UHRyUG9zaXRpb24pOw0KPiArICBHdWlkLT5EYXRhMiAgICAgPSAoVUlOVDE2KURhdGE7DQo+ICsN Cj4gKyAgLy8NCj4gKyAgLy8gRGF0YTMNCj4gKyAgLy8NCj4gKyAgUHRyQnVmZmVyKys7DQo+ICsg IFB0clBvc2l0aW9uICAgICA9IFB0ckJ1ZmZlcjsNCj4gKyAgd2hpbGUgKCpQdHJCdWZmZXIgIT0g TCdcMCcpIHsNCj4gKyAgICBpZiAoKlB0ckJ1ZmZlciA9PSBMJy0nKSB7DQo+ICsgICAgICBicmVh azsNCj4gKyAgICB9DQo+ICsgICAgUHRyQnVmZmVyKys7DQo+ICsgIH0NCj4gKyAgaWYgKCpQdHJC dWZmZXIgPT0gTCdcMCcpIHsNCj4gKyAgICBGcmVlUG9vbCAoQnVmZmVyKTsNCj4gKyAgICByZXR1 cm4gRUZJX05PVF9GT1VORDsNCj4gKyAgfQ0KPiArICAqUHRyQnVmZmVyICAgICAgPSBMJ1wwJzsN Cj4gKyAgRGF0YSAgICAgICAgICAgID0gU3RySGV4VG9VaW50biAoUHRyUG9zaXRpb24pOw0KPiAr ICBHdWlkLT5EYXRhMyAgICAgPSAoVUlOVDE2KURhdGE7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8g RGF0YTRbMC4uMV0NCj4gKyAgLy8NCj4gKyAgZm9yICggSW5kZXggPSAwIDsgSW5kZXggPCAyIDsg SW5kZXgrKykgew0KPiArICAgIFB0ckJ1ZmZlcisrOw0KPiArICAgIGlmICgoKlB0ckJ1ZmZlciA9 PSBMJ1wwJykgfHwgKCAqKFB0ckJ1ZmZlciArIDEpID09IEwnXDAnKSkgew0KPiArICAgICAgRnJl ZVBvb2wgKEJ1ZmZlcik7DQo+ICsgICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gKyAgICB9 DQo+ICsgICAgRGlnaXRzWzBdICAgICA9ICpQdHJCdWZmZXI7DQo+ICsgICAgUHRyQnVmZmVyKys7 DQo+ICsgICAgRGlnaXRzWzFdICAgICA9ICpQdHJCdWZmZXI7DQo+ICsgICAgRGlnaXRzWzJdICAg ICA9IEwnXDAnOw0KPiArICAgIERhdGEgICAgICAgICAgPSBTdHJIZXhUb1VpbnRuIChEaWdpdHMp Ow0KPiArICAgIEd1aWQtPkRhdGE0W0luZGV4XSA9IChVSU5UOClEYXRhOw0KPiArICB9DQo+ICsN Cj4gKyAgLy8NCj4gKyAgLy8gc2tpcCB0aGUgJy0nDQo+ICsgIC8vDQo+ICsgIFB0ckJ1ZmZlcisr Ow0KPiArICBpZiAoKCpQdHJCdWZmZXIgIT0gTCctJyApIHx8ICggKlB0ckJ1ZmZlciA9PSBMJ1ww JykpIHsNCj4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8v DQo+ICsgIC8vIERhdGE0WzIuLjddDQo+ICsgIC8vDQo+ICsgIGZvciAoIDsgSW5kZXggPCA4OyBJ bmRleCsrKSB7DQo+ICsgICAgUHRyQnVmZmVyKys7DQo+ICsgICAgaWYgKCgqUHRyQnVmZmVyID09 IEwnXDAnKSB8fCAoICooUHRyQnVmZmVyICsgMSkgPT0gTCdcMCcpKSB7DQo+ICsgICAgICBGcmVl UG9vbCAoQnVmZmVyKTsNCj4gKyAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArICAgIH0N Cj4gKyAgICBEaWdpdHNbMF0gICAgID0gKlB0ckJ1ZmZlcjsNCj4gKyAgICBQdHJCdWZmZXIrKzsN Cj4gKyAgICBEaWdpdHNbMV0gICAgID0gKlB0ckJ1ZmZlcjsNCj4gKyAgICBEaWdpdHNbMl0gICAg ID0gTCdcMCc7DQo+ICsgICAgRGF0YSAgICAgICAgICA9IFN0ckhleFRvVWludG4gKERpZ2l0cyk7 DQo+ICsgICAgR3VpZC0+RGF0YTRbSW5kZXhdID0gKFVJTlQ4KURhdGE7DQo+ICsgIH0NCj4gKw0K PiArICBGcmVlUG9vbCAoQnVmZmVyKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgIExpc3QgYWxsIGNlcnQgaW4gc3BlY2lmaWVkIGRh dGFiYXNlIGJ5IEdVSUQgaW4gdGhlIHBhZ2UNCj4gKyAgZm9yIHVzZXIgdG8gc2VsZWN0IGFuZCBk ZWxldGUgYXMgbmVlZGVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgUHJpdmF0ZURhdGEgICAg ICAgICBNb2R1bGUncyBwcml2YXRlIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gICAgVmFyaWFibGVO YW1lICAgICAgICBUaGUgdmFyaWFibGUgbmFtZSBvZiB0aGUgdmVuZG9yJ3MNCj4gc2lnbmF0dXJl IGRhdGFiYXNlLg0KPiArICBAcGFyYW1baW5dICAgIFZlbmRvckd1aWQgICAgICAgICAgQSB1bmlx dWUgaWRlbnRpZmllciBmb3IgdGhlIHZlbmRvci4NCj4gKyAgQHBhcmFtW2luXSAgICBMYWJlbE51 bWJlciAgICAgICAgIExhYmVsIG51bWJlciB0byBpbnNlcnQgb3Bjb2Rlcy4NCj4gKyAgQHBhcmFt W2luXSAgICBGb3JtSWQgICAgICAgICAgICAgIEZvcm0gSUQgb2YgY3VycmVudCBwYWdlLg0KPiAr ICBAcGFyYW1baW5dICAgIFF1ZXN0aW9uSWRCYXNlICAgICAgQmFzZSBxdWVzdGlvbiBpZCBvZiB0 aGUgc2lnbmF0dXJlIGxpc3QuDQo+ICsNCj4gKyAgQHJldHZhbCAgIEVGSV9TVUNDRVNTICAgICAg ICAgICAgIFN1Y2Nlc3MgdG8gdXBkYXRlIHRoZSBzaWduYXR1cmUgbGlzdCBwYWdlDQo+ICsgIEBy ZXR2YWwgICBFRklfT1VUX09GX1JFU09VUkNFUyAgICBVbmFibGUgdG8gYWxsb2NhdGUgcmVxdWly ZWQgcmVzb3VyY2VzLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1VwZGF0ZURlbGV0 ZVBhZ2UgKA0KPiArICBJTiBUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9EQVRBICAgICAqUHJpdmF0 ZSwNCj4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFt ZSwNCj4gKyAgSU4gRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgKlZlbmRvckd1aWQs DQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsTnVtYmVyLA0K PiArICBJTiBFRklfRk9STV9JRCAgICAgICAgICAgICAgICAgICAgICBGb3JtSWQsDQo+ICsgIElO IEVGSV9RVUVTVElPTl9JRCAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSWRCYXNlDQo+ICsgICkN Cj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlO VDMyICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgQ2VydENvdW50Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgR3Vp ZEluZGV4Ow0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgKlN0YXJ0T3BDb2RlSGFu ZGxlOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgKkVuZE9wQ29kZUhhbmRsZTsN Cj4gKyAgRUZJX0lGUl9HVUlEX0xBQkVMICAgICAgICAgICpTdGFydExhYmVsOw0KPiArICBFRklf SUZSX0dVSURfTEFCRUwgICAgICAgICAgKkVuZExhYmVsOw0KPiArICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgRGF0YVNpemU7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAq RGF0YTsNCj4gKyAgRUZJX1NJR05BVFVSRV9MSVNUICAgICAgICAgICpDZXJ0TGlzdDsNCj4gKyAg RUZJX1NJR05BVFVSRV9EQVRBICAgICAgICAgICpDZXJ0Ow0KPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgSXRlbURhdGFTaXplOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAg ICAgKkd1aWRTdHI7DQo+ICsgIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICBHdWlkSUQ7DQo+ ICsgIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICBIZWxwOw0KPiArDQo+ICsgIERhdGEgICAg ID0gTlVMTDsNCj4gKyAgQ2VydExpc3QgPSBOVUxMOw0KPiArICBDZXJ0ICAgICA9IE5VTEw7DQo+ ICsgIEd1aWRTdHIgID0gTlVMTDsNCj4gKyAgU3RhcnRPcENvZGVIYW5kbGUgPSBOVUxMOw0KPiAr ICBFbmRPcENvZGVIYW5kbGUgICA9IE5VTEw7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5pdGlh bGl6ZSB0aGUgY29udGFpbmVyIGZvciBkeW5hbWljIG9wY29kZXMuDQo+ICsgIC8vDQo+ICsgIFN0 YXJ0T3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+ICsgIGlmIChT dGFydE9wQ29kZUhhbmRsZSA9PSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+ICsgICAgZ290byBPTl9FWElUOw0KPiArICB9DQo+ICsNCj4gKyAgRW5kT3BD b2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+ICsgIGlmIChFbmRPcENv ZGVIYW5kbGUgPT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPiArICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENy ZWF0ZSBIaWkgRXh0ZW5kIExhYmVsIE9wQ29kZS4NCj4gKyAgLy8NCj4gKyAgU3RhcnRMYWJlbCA9 IChFRklfSUZSX0dVSURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAoDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJ RF9MQUJFTCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0K PiArICBTdGFydExhYmVsLT5FeHRlbmRPcENvZGUgID0gRUZJX0lGUl9FWFRFTkRfT1BfTEFCRUw7 DQo+ICsgIFN0YXJ0TGFiZWwtPk51bWJlciAgICAgICAgPSBMYWJlbE51bWJlcjsNCj4gKw0KPiAr ICBFbmRMYWJlbCA9IChFRklfSUZSX0dVSURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAo DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZE9wQ29kZUhhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFu b0d1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9H VUlEX0xBQkVMKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0K PiArICBFbmRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0K PiArICBFbmRMYWJlbC0+TnVtYmVyICAgICAgICA9IExBQkVMX0VORDsNCj4gKw0KPiArICAvLw0K PiArICAvLyBSZWFkIFZhcmlhYmxlLg0KPiArICAvLw0KPiArICBEYXRhU2l6ZSA9IDA7DQo+ICsg IFN0YXR1cyA9IGdSVC0+R2V0VmFyaWFibGUgKFZhcmlhYmxlTmFtZSwgVmVuZG9yR3VpZCwgTlVM TCwgJkRhdGFTaXplLA0KPiBEYXRhKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiBT dGF0dXMgIT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ ICsgIH0NCj4gKw0KPiArICBEYXRhID0gKFVJTlQ4ICopIEFsbG9jYXRlWmVyb1Bvb2wgKERhdGFT aXplKTsNCj4gKyAgaWYgKERhdGEgPT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPiArICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0 YXR1cyA9IGdSVC0+R2V0VmFyaWFibGUgKFZhcmlhYmxlTmFtZSwgVmVuZG9yR3VpZCwgTlVMTCwg JkRhdGFTaXplLA0KPiBEYXRhKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsgIEd1aWRTdHIgPSBBbGxvY2F0ZVpl cm9Qb29sICgxMDApOw0KPiArICBpZiAoR3VpZFN0ciA9PSBOVUxMKSB7DQo+ICsgICAgU3RhdHVz ID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgZ290byBPTl9FWElUOw0KPiArICB9DQo+ ICsNCj4gKyAgLy8NCj4gKyAgLy8gRW51bWVyYXRlIGFsbCBkYXRhLg0KPiArICAvLw0KPiArICBJ dGVtRGF0YVNpemUgPSAoVUlOVDMyKSBEYXRhU2l6ZTsNCj4gKyAgQ2VydExpc3QgPSAoRUZJX1NJ R05BVFVSRV9MSVNUICopIERhdGE7DQo+ICsgIEd1aWRJbmRleCA9IDA7DQo+ICsNCj4gKyAgd2hp bGUgKChJdGVtRGF0YVNpemUgPiAwKSAmJiAoSXRlbURhdGFTaXplID49IENlcnRMaXN0LT5TaWdu YXR1cmVMaXN0U2l6ZSkpDQo+IHsNCj4gKw0KPiArICAgIGlmIChDb21wYXJlR3VpZCAoJkNlcnRM aXN0LT5TaWduYXR1cmVUeXBlLCAmZ0VmaUNlcnRYNTA5R3VpZCkpIHsNCj4gKyAgICAgIEhlbHAg PSBTVFJJTkdfVE9LRU4gKFNUUl9DRVJUX1RZUEVfUENLU19HVUlEKTsNCj4gKyAgICB9IGVsc2Ug ew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIFRoZSBzaWduYXR1cmUgdHlwZSBpcyBub3Qgc3Vw cG9ydGVkIGluIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uDQo+ICsgICAgICAvLw0KPiArICAgICAg SXRlbURhdGFTaXplIC09IENlcnRMaXN0LT5TaWduYXR1cmVMaXN0U2l6ZTsNCj4gKyAgICAgIENl cnRMaXN0ID0gKEVGSV9TSUdOQVRVUkVfTElTVCAqKSAoKFVJTlQ4ICopIENlcnRMaXN0ICsgQ2Vy dExpc3QtDQo+ID5TaWduYXR1cmVMaXN0U2l6ZSk7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICBDZXJ0Q291bnQgID0gKENlcnRMaXN0LT5TaWduYXR1cmVMaXN0U2l6 ZSAtIHNpemVvZiAoRUZJX1NJR05BVFVSRV9MSVNUKSAtDQo+IENlcnRMaXN0LT5TaWduYXR1cmVI ZWFkZXJTaXplKSAvIENlcnRMaXN0LT5TaWduYXR1cmVTaXplOw0KPiArICAgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IENlcnRDb3VudDsgSW5kZXgrKykgew0KPiArICAgICAgQ2VydCA9IChFRklf U0lHTkFUVVJFX0RBVEEgKikgKChVSU5UOCAqKSBDZXJ0TGlzdA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc2l6ZW9mIChFRklfU0lHTkFUVVJFX0xJ U1QpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBD ZXJ0TGlzdC0+U2lnbmF0dXJlSGVhZGVyU2l6ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsgSW5kZXggKiBDZXJ0TGlzdC0+U2lnbmF0dXJlU2l6ZSk7 DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gRGlzcGxheSBHVUlEIGFuZCBoZWxwDQo+ICsgICAg ICAvLw0KPiArICAgICAgR3VpZFRvU3RyaW5nICgmQ2VydC0+U2lnbmF0dXJlT3duZXIsIEd1aWRT dHIsIDEwMCk7DQo+ICsgICAgICBHdWlkSUQgID0gSGlpU2V0U3RyaW5nIChQcml2YXRlLT5SZWdp c3RlcmVkSGFuZGxlLCAwLCBHdWlkU3RyLCBOVUxMKTsNCj4gKyAgICAgIEhpaUNyZWF0ZUNoZWNr Qm94T3BDb2RlICgNCj4gKyAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUsDQo+ICsgICAgICAgIChF RklfUVVFU1RJT05fSUQpIChRdWVzdGlvbklkQmFzZSArIEd1aWRJbmRleCsrKSwNCj4gKyAgICAg ICAgMCwNCj4gKyAgICAgICAgMCwNCj4gKyAgICAgICAgR3VpZElELA0KPiArICAgICAgICBIZWxw LA0KPiArICAgICAgICBFRklfSUZSX0ZMQUdfQ0FMTEJBQ0ssDQo+ICsgICAgICAgIDAsDQo+ICsg ICAgICAgIE5VTEwNCj4gKyAgICAgICAgKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBJdGVtRGF0 YVNpemUgLT0gQ2VydExpc3QtPlNpZ25hdHVyZUxpc3RTaXplOw0KPiArICAgIENlcnRMaXN0ID0g KEVGSV9TSUdOQVRVUkVfTElTVCAqKSAoKFVJTlQ4ICopIENlcnRMaXN0ICsgQ2VydExpc3QtDQo+ ID5TaWduYXR1cmVMaXN0U2l6ZSk7DQo+ICsgIH0NCj4gKw0KPiArT05fRVhJVDoNCj4gKyAgSGlp VXBkYXRlRm9ybSAoDQo+ICsgICAgUHJpdmF0ZS0+UmVnaXN0ZXJlZEhhbmRsZSwNCj4gKyAgICAm Z1Rsc0F1dGhDb25maWdHdWlkLA0KPiArICAgIEZvcm1JZCwNCj4gKyAgICBTdGFydE9wQ29kZUhh bmRsZSwNCj4gKyAgICBFbmRPcENvZGVIYW5kbGUNCj4gKyAgICApOw0KPiArDQo+ICsgIGlmIChT dGFydE9wQ29kZUhhbmRsZSAhPSBOVUxMKSB7DQo+ICsgICAgSGlpRnJlZU9wQ29kZUhhbmRsZSAo U3RhcnRPcENvZGVIYW5kbGUpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEVuZE9wQ29kZUhhbmRs ZSAhPSBOVUxMKSB7DQo+ICsgICAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRW5kT3BDb2RlSGFuZGxl KTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChEYXRhICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9v bCAoRGF0YSk7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoR3VpZFN0ciAhPSBOVUxMKSB7DQo+ICsg ICAgRnJlZVBvb2wgKEd1aWRTdHIpOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRGVsZXRlIG9uZSBlbnRyeSBmcm9tIGNlcnQg ZGF0YWJhc2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICBQcml2YXRlRGF0YSAgICAgICAgIE1v ZHVsZSdzIHByaXZhdGUgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgICBWYXJpYWJsZU5hbWUgICAg ICAgIFRoZSB2YXJpYWJsZSBuYW1lIG9mIHRoZSBkYXRhYmFzZS4NCj4gKyAgQHBhcmFtW2luXSAg ICBWZW5kb3JHdWlkICAgICAgICAgIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB2ZW5kb3Iu DQo+ICsgIEBwYXJhbVtpbl0gICAgTGFiZWxOdW1iZXIgICAgICAgICBMYWJlbCBudW1iZXIgdG8g aW5zZXJ0IG9wY29kZXMuDQo+ICsgIEBwYXJhbVtpbl0gICAgRm9ybUlkICAgICAgICAgICAgICBG b3JtIElEIG9mIGN1cnJlbnQgcGFnZS4NCj4gKyAgQHBhcmFtW2luXSAgICBRdWVzdGlvbklkQmFz ZSAgICAgIEJhc2UgcXVlc3Rpb24gaWQgb2YgdGhlIGNlcnQgbGlzdC4NCj4gKyAgQHBhcmFtW2lu XSAgICBEZWxldGVJbmRleCAgICAgICAgIENlcnQgaW5kZXggdG8gZGVsZXRlLg0KPiArDQo+ICsg IEByZXR2YWwgICBFRklfU1VDQ0VTUyAgICAgICAgICAgICBEZWxldGUgc2lnYW50dXJlIHN1Y2Nl c3NmdWxseS4NCj4gKyAgQHJldHZhbCAgIEVGSV9OT1RfRk9VTkQgICAgICAgICAgIENhbid0IGZp bmQgdGhlIHNpZ25hdHVyZSBpdGVtLA0KPiArICBAcmV0dmFsICAgRUZJX09VVF9PRl9SRVNPVVJD RVMgICAgQ291bGQgbm90IGFsbG9jYXRlIG5lZWRlZCByZXNvdXJjZXMuDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0RlbGV0ZUNlcnQgKA0KPiArICBJTiBUTFNfQVVUSF9DT05GSUdfUFJJVkFU RV9EQVRBICAgICAqUHJpdmF0ZSwNCj4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICAgICAgKlZhcmlhYmxlTmFtZSwNCj4gKyAgSU4gRUZJX0dVSUQgICAgICAgICAgICAgICAgICAg ICAgICAgKlZlbmRvckd1aWQsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAg ICAgIExhYmVsTnVtYmVyLA0KPiArICBJTiBFRklfRk9STV9JRCAgICAgICAgICAgICAgICAgICAg ICBGb3JtSWQsDQo+ICsgIElOIEVGSV9RVUVTVElPTl9JRCAgICAgICAgICAgICAgICAgIFF1ZXN0 aW9uSWRCYXNlLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWxl dGVJbmRleA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBT dGF0dXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZTsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICpEYXRhOw0KPiArICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgICAgKk9sZERhdGE7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBB dHRyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIEVGSV9T SUdOQVRVUkVfTElTVCAgICAgICAgICAqQ2VydExpc3Q7DQo+ICsgIEVGSV9TSUdOQVRVUkVfTElT VCAgICAgICAgICAqTmV3Q2VydExpc3Q7DQo+ICsgIEVGSV9TSUdOQVRVUkVfREFUQSAgICAgICAg ICAqQ2VydDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIENlcnRDb3VudDsNCj4g KyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgIE9mZnNldDsNCj4gKyAgQk9PTEVBTiAgICAg ICAgICAgICAgICAgICAgIElzSXRlbUZvdW5kOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgSXRlbURhdGFTaXplOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgR3Vp ZEluZGV4Ow0KPiArDQo+ICsgIERhdGEgICAgICAgICAgICA9IE5VTEw7DQo+ICsgIE9sZERhdGEg ICAgICAgICA9IE5VTEw7DQo+ICsgIENlcnRMaXN0ICAgICAgICA9IE5VTEw7DQo+ICsgIENlcnQg ICAgICAgICAgICA9IE5VTEw7DQo+ICsgIEF0dHIgICAgICAgICAgICA9IDA7DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gR2V0IG9yaWdpbmFsIHNpZ25hdHVyZSBsaXN0IGRhdGEuDQo+ICsgIC8vDQo+ ICsgIERhdGFTaXplID0gMDsNCj4gKyAgU3RhdHVzID0gZ1JULT5HZXRWYXJpYWJsZSAoVmFyaWFi bGVOYW1lLCBWZW5kb3JHdWlkLCBOVUxMLCAmRGF0YVNpemUsDQo+IE5VTEwpOw0KPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpICYmIFN0YXR1cyAhPSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0K PiArICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsgIE9sZERhdGEgPSAoVUlOVDgg KikgQWxsb2NhdGVaZXJvUG9vbCAoRGF0YVNpemUpOw0KPiArICBpZiAoT2xkRGF0YSA9PSBOVUxM KSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgZ290byBP Tl9FWElUOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ1JULT5HZXRWYXJpYWJsZSAoVmFy aWFibGVOYW1lLCBWZW5kb3JHdWlkLCAmQXR0ciwgJkRhdGFTaXplLA0KPiBPbGREYXRhKTsNCj4g KyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgZ290byBPTl9FWElUOw0KPiArICB9 DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQWxsb2NhdGUgc3BhY2UgZm9yIG5ldyB2YXJpYWJsZS4N Cj4gKyAgLy8NCj4gKyAgRGF0YSA9IChVSU5UOCopIEFsbG9jYXRlWmVyb1Bvb2wgKERhdGFTaXpl KTsNCj4gKyAgaWYgKERhdGEgPT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyAgPSAgRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQo+ICsgICAgZ290byBPTl9FWElUOw0KPiArICB9DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gRW51bWVyYXRlIGFsbCBkYXRhIGFuZCBlcmFzaW5nIHRoZSB0YXJnZXQgaXRlbS4N Cj4gKyAgLy8NCj4gKyAgSXNJdGVtRm91bmQgPSBGQUxTRTsNCj4gKyAgSXRlbURhdGFTaXplID0g KFVJTlQzMikgRGF0YVNpemU7DQo+ICsgIENlcnRMaXN0ID0gKEVGSV9TSUdOQVRVUkVfTElTVCAq KSBPbGREYXRhOw0KPiArICBPZmZzZXQgPSAwOw0KPiArICBHdWlkSW5kZXggPSAwOw0KPiArICB3 aGlsZSAoKEl0ZW1EYXRhU2l6ZSA+IDApICYmIChJdGVtRGF0YVNpemUgPj0gQ2VydExpc3QtPlNp Z25hdHVyZUxpc3RTaXplKSkNCj4gew0KPiArICAgIGlmIChDb21wYXJlR3VpZCAoJkNlcnRMaXN0 LT5TaWduYXR1cmVUeXBlLCAmZ0VmaUNlcnRYNTA5R3VpZCkpIHsNCj4gKyAgICAgIC8vDQo+ICsg ICAgICAvLyBDb3B5IEVGSV9TSUdOQVRVUkVfTElTVCBoZWFkZXIgdGhlbiBjYWxjdWxhdGUgdGhl IHNpZ25hdHVyZSBjb3VudA0KPiBpbiB0aGlzIGxpc3QuDQo+ICsgICAgICAvLw0KPiArICAgICAg Q29weU1lbSAoRGF0YSArIE9mZnNldCwgQ2VydExpc3QsIChzaXplb2YoRUZJX1NJR05BVFVSRV9M SVNUKSArDQo+IENlcnRMaXN0LT5TaWduYXR1cmVIZWFkZXJTaXplKSk7DQo+ICsgICAgICBOZXdD ZXJ0TGlzdCA9IChFRklfU0lHTkFUVVJFX0xJU1QqKSAoRGF0YSArIE9mZnNldCk7DQo+ICsgICAg ICBPZmZzZXQgKz0gKHNpemVvZihFRklfU0lHTkFUVVJFX0xJU1QpICsgQ2VydExpc3QtDQo+ID5T aWduYXR1cmVIZWFkZXJTaXplKTsNCj4gKyAgICAgIENlcnQgICAgICA9IChFRklfU0lHTkFUVVJF X0RBVEEgKikgKChVSU5UOCAqKSBDZXJ0TGlzdCArIHNpemVvZg0KPiAoRUZJX1NJR05BVFVSRV9M SVNUKSArIENlcnRMaXN0LT5TaWduYXR1cmVIZWFkZXJTaXplKTsNCj4gKyAgICAgIENlcnRDb3Vu dCAgPSAoQ2VydExpc3QtPlNpZ25hdHVyZUxpc3RTaXplIC0gc2l6ZW9mIChFRklfU0lHTkFUVVJF X0xJU1QpIC0NCj4gQ2VydExpc3QtPlNpZ25hdHVyZUhlYWRlclNpemUpIC8gQ2VydExpc3QtPlNp Z25hdHVyZVNpemU7DQo+ICsgICAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDZXJ0Q291bnQ7 IEluZGV4KyspIHsNCj4gKyAgICAgICAgaWYgKEd1aWRJbmRleCA9PSBEZWxldGVJbmRleCkgew0K PiArICAgICAgICAgIC8vDQo+ICsgICAgICAgICAgLy8gRmluZCBpdCEgU2tpcCBpdCENCj4gKyAg ICAgICAgICAvLw0KPiArICAgICAgICAgIE5ld0NlcnRMaXN0LT5TaWduYXR1cmVMaXN0U2l6ZSAt PSBDZXJ0TGlzdC0+U2lnbmF0dXJlU2l6ZTsNCj4gKyAgICAgICAgICBJc0l0ZW1Gb3VuZCA9IFRS VUU7DQo+ICsgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgLy8NCj4gKyAgICAgICAgICAv LyBUaGlzIGl0ZW0gZG9lc24ndCBtYXRjaC4gQ29weSBpdCB0byB0aGUgRGF0YSBidWZmZXIuDQo+ ICsgICAgICAgICAgLy8NCj4gKyAgICAgICAgICBDb3B5TWVtIChEYXRhICsgT2Zmc2V0LCAoVUlO VDgqKShDZXJ0KSwgQ2VydExpc3QtPlNpZ25hdHVyZVNpemUpOw0KPiArICAgICAgICAgIE9mZnNl dCArPSBDZXJ0TGlzdC0+U2lnbmF0dXJlU2l6ZTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBH dWlkSW5kZXgrKzsNCj4gKyAgICAgICAgQ2VydCA9IChFRklfU0lHTkFUVVJFX0RBVEEgKikgKChV SU5UOCAqKSBDZXJ0ICsgQ2VydExpc3QtDQo+ID5TaWduYXR1cmVTaXplKTsNCj4gKyAgICAgIH0N Cj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIFRoaXMgTGlzdCBkb2Vz bid0IG1hdGNoLiBKdXN0IGNvcHkgaXQgdG8gdGhlIERhdGEgYnVmZmVyLg0KPiArICAgICAgLy8N Cj4gKyAgICAgIENvcHlNZW0gKERhdGEgKyBPZmZzZXQsIChVSU5UOCopKENlcnRMaXN0KSwgQ2Vy dExpc3QtDQo+ID5TaWduYXR1cmVMaXN0U2l6ZSk7DQo+ICsgICAgICBPZmZzZXQgKz0gQ2VydExp c3QtPlNpZ25hdHVyZUxpc3RTaXplOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEl0ZW1EYXRhU2l6 ZSAtPSBDZXJ0TGlzdC0+U2lnbmF0dXJlTGlzdFNpemU7DQo+ICsgICAgQ2VydExpc3QgPSAoRUZJ X1NJR05BVFVSRV9MSVNUICopICgoVUlOVDggKikgQ2VydExpc3QgKyBDZXJ0TGlzdC0NCj4gPlNp Z25hdHVyZUxpc3RTaXplKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICghSXNJdGVtRm91bmQpIHsN Cj4gKyAgICAvLw0KPiArICAgIC8vIERvZXNuJ3QgZmluZCB0aGUgc2lnbmF0dXJlIEl0ZW0hDQo+ ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPiArICAgIGdvdG8gT05f RVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIERlbGV0ZSB0aGUgRUZJX1NJR05B VFVSRV9MSVNUIGhlYWRlciBpZiB0aGVyZSBpcyBubyBzaWduYXR1cmUgaW4gdGhlDQo+IGxpc3Qu DQo+ICsgIC8vDQo+ICsgIEl0ZW1EYXRhU2l6ZSA9IE9mZnNldDsNCj4gKyAgQ2VydExpc3QgPSAo RUZJX1NJR05BVFVSRV9MSVNUICopIERhdGE7DQo+ICsgIE9mZnNldCA9IDA7DQo+ICsgIFplcm9N ZW0gKE9sZERhdGEsIEl0ZW1EYXRhU2l6ZSk7DQo+ICsgIHdoaWxlICgoSXRlbURhdGFTaXplID4g MCkgJiYgKEl0ZW1EYXRhU2l6ZSA+PSBDZXJ0TGlzdC0+U2lnbmF0dXJlTGlzdFNpemUpKQ0KPiB7 DQo+ICsgICAgQ2VydENvdW50ICA9IChDZXJ0TGlzdC0+U2lnbmF0dXJlTGlzdFNpemUgLSBzaXpl b2YgKEVGSV9TSUdOQVRVUkVfTElTVCkgLQ0KPiBDZXJ0TGlzdC0+U2lnbmF0dXJlSGVhZGVyU2l6 ZSkgLyBDZXJ0TGlzdC0+U2lnbmF0dXJlU2l6ZTsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8s ICIgICAgICAgQ2VydENvdW50ID0gJXhcbiIsIENlcnRDb3VudCkpOw0KPiArICAgIGlmIChDZXJ0 Q291bnQgIT0gMCkgew0KPiArICAgICAgQ29weU1lbSAoT2xkRGF0YSArIE9mZnNldCwgKFVJTlQ4 KikoQ2VydExpc3QpLCBDZXJ0TGlzdC0NCj4gPlNpZ25hdHVyZUxpc3RTaXplKTsNCj4gKyAgICAg IE9mZnNldCArPSBDZXJ0TGlzdC0+U2lnbmF0dXJlTGlzdFNpemU7DQo+ICsgICAgfQ0KPiArICAg IEl0ZW1EYXRhU2l6ZSAtPSBDZXJ0TGlzdC0+U2lnbmF0dXJlTGlzdFNpemU7DQo+ICsgICAgQ2Vy dExpc3QgPSAoRUZJX1NJR05BVFVSRV9MSVNUICopICgoVUlOVDggKikgQ2VydExpc3QgKyBDZXJ0 TGlzdC0NCj4gPlNpZ25hdHVyZUxpc3RTaXplKTsNCj4gKyAgfQ0KPiArDQo+ICsgIERhdGFTaXpl ID0gT2Zmc2V0Ow0KPiArDQo+ICsgIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUoDQo+ICsgICAg ICAgICAgICAgICAgICBWYXJpYWJsZU5hbWUsDQo+ICsgICAgICAgICAgICAgICAgICBWZW5kb3JH dWlkLA0KPiArICAgICAgICAgICAgICAgICAgQXR0ciwNCj4gKyAgICAgICAgICAgICAgICAgIERh dGFTaXplLA0KPiArICAgICAgICAgICAgICAgICAgT2xkRGF0YQ0KPiArICAgICAgICAgICAgICAg ICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVC VUdfRVJST1IsICJGYWlsZWQgdG8gc2V0IHZhcmlhYmxlLCBTdGF0dXMgPSAlclxuIiwgU3RhdHVz KSk7DQo+ICsgICAgZ290byBPTl9FWElUOw0KPiArICB9DQo+ICsNCj4gK09OX0VYSVQ6DQo+ICsg IGlmIChEYXRhICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbChEYXRhKTsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmIChPbGREYXRhICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbChPbGREYXRhKTsN Cj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBVcGRhdGVEZWxldGVQYWdlICgNCj4gKyAgICAgICAg ICAgUHJpdmF0ZSwNCj4gKyAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KPiArICAgICAgICAgICBW ZW5kb3JHdWlkLA0KPiArICAgICAgICAgICBMYWJlbE51bWJlciwNCj4gKyAgICAgICAgICAgRm9y bUlkLA0KPiArICAgICAgICAgICBRdWVzdGlvbklkQmFzZQ0KPiArICAgICAgICAgICApOw0KPiAr fQ0KPiArDQo+ICsNCj4gKy8qKg0KPiArICBDbG9zZSBhbiBvcGVuIGZpbGUgaGFuZGxlLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gRmlsZUhhbmRsZSAgICAgICAgICAgVGhlIGZpbGUgaGFuZGxlIHRv IGNsb3NlLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0Nsb3NlRmlsZSAoDQo+ICsgIElOIEVG SV9GSUxFX0hBTkRMRSAgIEZpbGVIYW5kbGUNCj4gKyAgKQ0KPiArew0KPiArICBpZiAoRmlsZUhh bmRsZSAhPSBOVUxMKSB7DQo+ICsgICAgRmlsZUhhbmRsZS0+Q2xvc2UgKEZpbGVIYW5kbGUpOw0K PiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZWFkIGZpbGUgY29udGVudCBpbnRvIEJ1 ZmZlclB0ciwgdGhlIHNpemUgb2YgdGhlIGFsbG9jYXRlIGJ1ZmZlcg0KPiArICBpcyAqRmlsZVNp emUgcGx1cyBBZGR0aW9uQWxsb2NhdGVTaXplLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICAg RmlsZUhhbmRsZSAgICAgICAgICAgIFRoZSBmaWxlIHRvIGJlIHJlYWQuDQo+ICsgIEBwYXJhbVtp biwgb3V0XSAgQnVmZmVyUHRyICAgICAgICAgICAgIFBvaW50ZXJzIHRvIHRoZSBwb2ludGVyIG9m IGFsbG9jYXRlZA0KPiBidWZmZXIuDQo+ICsgIEBwYXJhbVtvdXRdICAgICAgRmlsZVNpemUgICAg ICAgICAgICAgIFNpemUgb2YgaW5wdXQgZmlsZQ0KPiArICBAcGFyYW1baW5dICAgICAgIEFkZHRp b25BbGxvY2F0ZVNpemUgICBBZGR0aW9uIHNpemUgdGhlIGJ1ZmZlciBuZWVkIHRvIGJlDQo+IGFs bG9jYXRlZC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4g Y2FzZSB0aGUgYnVmZmVyIG5lZWQgdG8gY29udGFpbiBvdGhlcnMgYmVzaWRlcyB0aGUNCj4gZmls ZSBjb250ZW50Lg0KPiArDQo+ICsgIEByZXR2YWwgICBFRklfU1VDQ0VTUyAgICAgICAgICAgICAg ICAgIFRoZSBmaWxlIHdhcyByZWFkIGludG8gdGhlIGJ1ZmZlci4NCj4gKyAgQHJldHZhbCAgIEVG SV9JTlZBTElEX1BBUkFNRVRFUiAgICAgICAgQSBwYXJhbWV0ZXIgd2FzIGludmFsaWQuDQo+ICsg IEByZXR2YWwgICBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgICAgIEEgbWVtb3J5IGFsbG9jYXRp b24gZmFpbGVkLg0KPiArICBAcmV0dmFsICAgb3RoZXJzICAgICAgICAgICAgICAgICAgICAgICBV bmV4cGVjdGVkIGVycm9yLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1JlYWRGaWxl Q29udGVudCAoDQo+ICsgIElOICAgICAgRUZJX0ZJTEVfSEFORExFICAgICAgICAgICBGaWxlSGFu ZGxlLA0KPiArICBJTiBPVVQgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgKipCdWZmZXJQdHIs DQo+ICsgICAgIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAqRmlsZVNpemUsDQo+ICsg IElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGR0aW9uQWxsb2NhdGVTaXplDQo+ ICsgICkNCj4gKw0KPiArew0KPiArICBVSU5UTiAgICAgIEJ1ZmZlclNpemU7DQo+ICsgIFVJTlQ2 NCAgICAgU291cmNlRmlsZVNpemU7DQo+ICsgIFZPSUQgICAgICAgKkJ1ZmZlcjsNCj4gKyAgRUZJ X1NUQVRVUyBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChGaWxlSGFuZGxlID09IE5VTEwpIHx8IChG aWxlU2l6ZSA9PSBOVUxMKSkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQo+ICsgIH0NCj4gKw0KPiArICBCdWZmZXIgPSBOVUxMOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8v IEdldCB0aGUgZmlsZSBzaXplDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEZpbGVIYW5kbGUtPlNl dFBvc2l0aW9uIChGaWxlSGFuZGxlLCAoVUlOVDY0KSAtMSk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0 dXMgPSBGaWxlSGFuZGxlLT5HZXRQb3NpdGlvbiAoRmlsZUhhbmRsZSwgJlNvdXJjZUZpbGVTaXpl KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdvdG8gT05fRVhJVDsN Cj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IEZpbGVIYW5kbGUtPlNldFBvc2l0aW9uIChGaWxl SGFuZGxlLCAwKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdvdG8g T05fRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsgIEJ1ZmZlclNpemUgPSAoVUlOVE4pIFNvdXJjZUZp bGVTaXplICsgQWRkdGlvbkFsbG9jYXRlU2l6ZTsNCj4gKyAgQnVmZmVyID0gIEFsbG9jYXRlWmVy b1Bvb2woQnVmZmVyU2l6ZSk7DQo+ICsgIGlmIChCdWZmZXIgPT0gTlVMTCkgew0KPiArICAgIHJl dHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIEJ1ZmZlclNpemUg PSAoVUlOVE4pIFNvdXJjZUZpbGVTaXplOw0KPiArICAqRmlsZVNpemUgID0gQnVmZmVyU2l6ZTsN Cj4gKw0KPiArICBTdGF0dXMgPSBGaWxlSGFuZGxlLT5SZWFkIChGaWxlSGFuZGxlLCAmQnVmZmVy U2l6ZSwgQnVmZmVyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCBCdWZmZXJTaXpl ICE9ICpGaWxlU2l6ZSkgew0KPiArICAgIEZyZWVQb29sIChCdWZmZXIpOw0KPiArICAgIEJ1ZmZl ciA9IE5VTEw7DQo+ICsgICAgU3RhdHVzICA9IEVGSV9CQURfQlVGRkVSX1NJWkU7DQo+ICsgICAg Z290byBPTl9FWElUOw0KPiArICB9DQo+ICsNCj4gK09OX0VYSVQ6DQo+ICsNCj4gKyAgKkJ1ZmZl clB0ciA9IEJ1ZmZlcjsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBvcGVuIGEgZmlsZSBvciBkaXJlY3RvcnkgcmVmZXJlbmNl ZCBieSBEZXZpY2VQYXRoLg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gb3BlbnMgYSBmaWxlIHdp dGggdGhlIG9wZW4gbW9kZSBhY2NvcmRpbmcgdG8gdGhlIGZpbGUgcGF0aC4NCj4gVGhlDQo+ICsg IEF0dHJpYnV0ZXMgaXMgdmFsaWQgb25seSBmb3IgRUZJX0ZJTEVfTU9ERV9DUkVBVEUuDQo+ICsN Cj4gKyAgQHBhcmFtW2luLCBvdXRdICBGaWxlUGF0aCAgICAgICAgT24gaW5wdXQsIHRoZSBkZXZp Y2UgcGF0aCB0byB0aGUgZmlsZS4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT24gb3V0cHV0LCB0aGUgcmVtYWluaW5nIGRldmljZSBwYXRoLg0KPiArICBAcGFyYW1bb3V0 XSAgICAgIEZpbGVIYW5kbGUgICAgICBQb2ludGVyIHRvIHRoZSBmaWxlIGhhbmRsZS4NCj4gKyAg QHBhcmFtW2luXSAgICAgICBPcGVuTW9kZSAgICAgICAgVGhlIG1vZGUgdG8gb3BlbiB0aGUgZmls ZSB3aXRoLg0KPiArICBAcGFyYW1baW5dICAgICAgIEF0dHJpYnV0ZXMgICAgICBUaGUgZmlsZSdz IGZpbGUgYXR0cmlidXRlcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICAgICBUaGUgaW5mb3JtYXRpb24gd2FzIHNldC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgICAgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVl Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgICBDb3VsZCBub3Qgb3BlbiB0 aGUgZmlsZSBwYXRoLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgICBUaGUg c3BlY2lmaWVkIGZpbGUgY291bGQgbm90IGJlIGZvdW5kIG9uDQo+IHRoZQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugb3IgdGhlIGZpbGUgc3lzdGVtIGNvdWxk IG5vdCBiZSBmb3VuZCBvbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGUgZGV2aWNlLg0KPiArICBAcmV0dmFsIEVGSV9OT19NRURJQSAgICAgICAgICAgICBUaGUgZGV2 aWNlIGhhcyBubyBtZWRpdW0uDQo+ICsgIEByZXR2YWwgRUZJX01FRElBX0NIQU5HRUQgICAgICAg IFRoZSBkZXZpY2UgaGFzIGEgZGlmZmVyZW50IG1lZGl1bSBpbiBpdA0KPiBvciB0aGUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaXVtIGlzIG5vIGxvbmdlciBzdXBw b3J0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICAgIFRoZSBkZXZpY2Ug cmVwb3J0ZWQgYW4gZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX1ZPTFVNRV9DT1JSVVBURUQgICAg IFRoZSBmaWxlIHN5c3RlbSBzdHJ1Y3R1cmVzIGFyZQ0KPiBjb3JydXB0ZWQuDQo+ICsgIEByZXR2 YWwgRUZJX1dSSVRFX1BST1RFQ1RFRCAgICAgIFRoZSBmaWxlIG9yIG1lZGl1bSBpcyB3cml0ZSBw cm90ZWN0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAgIFRoZSBmaWxl IHdhcyBvcGVuZWQgcmVhZCBvbmx5Lg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT ICAgICBOb3QgZW5vdWdoIHJlc291cmNlcyB3ZXJlIGF2YWlsYWJsZQ0KPiB0byBvcGVuIHRoZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLg0KPiArICBAcmV0dmFs IEVGSV9WT0xVTUVfRlVMTCAgICAgICAgICBUaGUgdm9sdW1lIGlzIGZ1bGwuDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArT3BlbkZpbGVCeURldmljZVBhdGggKA0KPiArICBJ TiBPVVQgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqKkZpbGVQYXRoLA0KPiArICBPVVQg RUZJX0ZJTEVfSEFORExFICAgICAgICAgICAgICAgICAqRmlsZUhhbmRsZSwNCj4gKyAgSU4gVUlO VDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3Blbk1vZGUsDQo+ICsgIElOIFVJTlQ2NCAg ICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMNCj4gKyAgKQ0KPiArew0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1NJTVBMRV9G SUxFX1NZU1RFTV9QUk9UT0NPTCAqRWZpU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sOw0KPiArICBF RklfRklMRV9QUk9UT0NPTCAgICAgICAgICAgICAgICpIYW5kbGUxOw0KPiArICBFRklfRklMRV9Q Uk9UT0NPTCAgICAgICAgICAgICAgICpIYW5kbGUyOw0KPiArICBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgICAgIERldmljZUhhbmRsZTsNCj4gKw0KPiArICBpZiAoKEZpbGVQYXRoID09IE5V TEwgfHwgRmlsZUhhbmRsZSA9PSBOVUxMKSkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZURldmljZVBh dGggKA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xH dWlkLA0KPiArICAgICAgICAgICAgICAgICAgRmlsZVBhdGgsDQo+ICsgICAgICAgICAgICAgICAg ICAmRGV2aWNlSGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsg IFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sKA0KPiArICAgICAgICAgICAgICAgICAgRGV2aWNl SGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9j b2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQqKikmRWZpU2ltcGxlRmlsZVN5c3Rl bVByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAgZ0ltYWdlSGFuZGxlLA0KPiArICAgICAg ICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09M X0dFVF9QUk9UT0NPTA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBT dGF0dXMgPSBFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2wtDQo+ID5PcGVuVm9sdW1lKEVmaVNp bXBsZUZpbGVTeXN0ZW1Qcm90b2NvbCwgJkhhbmRsZTEpOw0KPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgRmlsZUhhbmRsZSA9IE5VTEw7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIGdvIGRvd24gZGlyZWN0b3JpZXMgb25l IG5vZGUgYXQgYSB0aW1lLg0KPiArICAvLw0KPiArICB3aGlsZSAoIUlzRGV2aWNlUGF0aEVuZCAo KkZpbGVQYXRoKSkgew0KPiArICAgIC8vDQo+ICsgICAgLy8gRm9yIGZpbGUgc3lzdGVtIGFjY2Vz cyBlYWNoIG5vZGUgc2hvdWxkIGJlIGEgZmlsZSBwYXRoIGNvbXBvbmVudA0KPiArICAgIC8vDQo+ ICsgICAgaWYgKERldmljZVBhdGhUeXBlICAgICgqRmlsZVBhdGgpICE9IE1FRElBX0RFVklDRV9Q QVRIIHx8DQo+ICsgICAgICAgIERldmljZVBhdGhTdWJUeXBlICgqRmlsZVBhdGgpICE9IE1FRElB X0ZJTEVQQVRIX0RQDQo+ICsgICAgICAgKSB7DQo+ICsgICAgICBGaWxlSGFuZGxlID0gTlVMTDsN Cj4gKyAgICAgIHJldHVybiAoRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gKyAgICB9DQo+ICsg ICAgLy8NCj4gKyAgICAvLyBPcGVuIHRoaXMgZmlsZSBwYXRoIG5vZGUNCj4gKyAgICAvLw0KPiAr ICAgIEhhbmRsZTIgID0gSGFuZGxlMTsNCj4gKyAgICBIYW5kbGUxID0gTlVMTDsNCj4gKw0KPiAr ICAgIC8vDQo+ICsgICAgLy8gVHJ5IHRvIHRlc3Qgb3BlbmluZyBhbiBleGlzdGluZyBmaWxlDQo+ ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBIYW5kbGUyLT5PcGVuICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIEhhbmRsZTIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAmSGFuZGxl MSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICgoRklMRVBBVEhfREVWSUNFX1BBVEgqKSpG aWxlUGF0aCktPlBhdGhOYW1lLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgT3Blbk1vZGUg Jn5FRklfRklMRV9NT0RFX0NSRUFURSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIDANCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIHNl ZSBpZiB0aGUgZXJyb3Igd2FzIHRoYXQgaXQgbmVlZHMgdG8gYmUgY3JlYXRlZA0KPiArICAgIC8v DQo+ICsgICAgaWYgKChFRklfRVJST1IgKFN0YXR1cykpICYmIChPcGVuTW9kZSAhPSAoT3Blbk1v ZGUNCj4gJn5FRklfRklMRV9NT0RFX0NSRUFURSkpKSB7DQo+ICsgICAgICBTdGF0dXMgPSBIYW5k bGUyLT5PcGVuICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlMiwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgJkhhbmRsZTEsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICgoRklMRVBBVEhfREVWSUNFX1BBVEgqKSpGaWxlUGF0aCktPlBhdGhOYW1lLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuTW9kZSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgQXR0cmlidXRlcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiAr ICAgIH0NCj4gKyAgICAvLw0KPiArICAgIC8vIENsb3NlIHRoZSBsYXN0IG5vZGUNCj4gKyAgICAv Lw0KPiArICAgIEhhbmRsZTItPkNsb3NlIChIYW5kbGUyKTsNCj4gKw0KPiArICAgIGlmIChFRklf RVJST1IoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIChTdGF0dXMpOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIC8vDQo+ICsgICAgLy8gR2V0IHRoZSBuZXh0IG5vZGUNCj4gKyAgICAvLw0KPiAr ICAgICpGaWxlUGF0aCA9IE5leHREZXZpY2VQYXRoTm9kZSAoKkZpbGVQYXRoKTsNCj4gKyAgfQ0K PiArDQo+ICsgIC8vDQo+ICsgIC8vIFRoaXMgaXMgYSB3ZWFrIHNwb3Qgc2luY2UgaWYgdGhlIHVu ZGVmaW5lZCBTSEVMTF9GSUxFX0hBTkRMRSBmb3JtYXQNCj4gY2hhbmdlcyB0aGlzIG11c3QgY2hh bmdlIGFsc28hDQo+ICsgIC8vDQo+ICsgICpGaWxlSGFuZGxlID0gKFZPSUQqKUhhbmRsZTE7DQo+ ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVu Y3Rpb24gY29udmVydHMgYW4gaW5wdXQgZGV2aWNlIHN0cnVjdHVyZSB0byBhIFVuaWNvZGUgc3Ry aW5nLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gRGV2UGF0aCAgICAgICAgICAgICAgICAgIEEgcG9p bnRlciB0byB0aGUgZGV2aWNlIHBhdGggc3RydWN0dXJlLg0KPiArDQo+ICsgIEByZXR1cm4gQSBu ZXcgYWxsb2NhdGVkIFVuaWNvZGUgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgZGV2aWNlIHBh dGguDQo+ICsNCj4gKyoqLw0KPiArQ0hBUjE2ICoNCj4gK0VGSUFQSQ0KPiArRGV2aWNlUGF0aFRv U3RyICgNCj4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqRGV2UGF0aA0KPiAr ICApDQo+ICt7DQo+ICsgIHJldHVybiBDb252ZXJ0RGV2aWNlUGF0aFRvVGV4dCAoDQo+ICsgICAg ICAgICAgIERldlBhdGgsDQo+ICsgICAgICAgICAgIEZBTFNFLA0KPiArICAgICAgICAgICBUUlVF DQo+ICsgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgIEV4dHJhY3Qg ZmlsZW5hbWUgZnJvbSBkZXZpY2UgcGF0aC4gVGhlIHJldHVybmVkIGJ1ZmZlciBpcyBhbGxvY2F0 ZWQgdXNpbmcNCj4gQWxsb2NhdGVDb3B5UG9vbC4NCj4gKyAgVGhlIGNhbGxlciBpcyByZXNwb25z aWJsZSBmb3IgZnJlZWluZyB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB1c2luZyBGcmVlUG9vbCgpLiBJ Zg0KPiByZXR1cm4gTlVMTA0KPiArICBtZWFucyBub3QgZW5vdWdoIG1lbW9yeSByZXNvdXJjZS4N Cj4gKw0KPiArICBAcGFyYW0gRGV2aWNlUGF0aCAgICAgICBEZXZpY2UgcGF0aC4NCj4gKw0KPiAr ICBAcmV0dmFsIE5VTEwgICAgICAgICAgICBOb3QgZW5vdWdoIG1lbW9yeSByZXNvdXJlY2UgZm9y IEFsbG9jYXRlQ29weVBvb2wuDQo+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgIEEgbmV3IGFs bG9jYXRlZCBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBmaWxlIG5hbWUuDQo+ICsNCj4gKyoq Lw0KPiArQ0hBUjE2ICoNCj4gK0V4dHJhY3RGaWxlTmFtZUZyb21EZXZpY2VQYXRoICgNCj4gKyAg SU4gICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgKkRldmljZVBhdGgNCj4gKyAgKQ0KPiArew0K PiArICBDSEFSMTYgICAgICAgICAgKlN0cmluZzsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICpNYXRj aFN0cmluZzsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICpMYXN0TWF0Y2g7DQo+ICsgIENIQVIxNiAg ICAgICAgICAqRmlsZU5hbWU7DQo+ICsgIFVJTlROICAgICAgICAgICBMZW5ndGg7DQo+ICsNCj4g KyAgQVNTRVJUKERldmljZVBhdGggIT0gTlVMTCk7DQo+ICsNCj4gKyAgU3RyaW5nID0gRGV2aWNl UGF0aFRvU3RyKERldmljZVBhdGgpOw0KPiArICBNYXRjaFN0cmluZyA9IFN0cmluZzsNCj4gKyAg TGFzdE1hdGNoICAgPSBTdHJpbmc7DQo+ICsgIEZpbGVOYW1lICAgID0gTlVMTDsNCj4gKw0KPiAr ICB3aGlsZShNYXRjaFN0cmluZyAhPSBOVUxMKXsNCj4gKyAgICBMYXN0TWF0Y2ggICA9IE1hdGNo U3RyaW5nICsgMTsNCj4gKyAgICBNYXRjaFN0cmluZyA9IFN0clN0cihMYXN0TWF0Y2gsTCJcXCIp Ow0KPiArICB9DQo+ICsNCj4gKyAgTGVuZ3RoID0gU3RyTGVuKExhc3RNYXRjaCk7DQo+ICsgIEZp bGVOYW1lID0gQWxsb2NhdGVDb3B5UG9vbCAoKExlbmd0aCArIDEpICogc2l6ZW9mKENIQVIxNiks IExhc3RNYXRjaCk7DQo+ICsgIGlmIChGaWxlTmFtZSAhPSBOVUxMKSB7DQo+ICsgICAgKihGaWxl TmFtZSArIExlbmd0aCkgPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgRnJlZVBvb2woU3RyaW5nKTsN Cj4gKw0KPiArICByZXR1cm4gRmlsZU5hbWU7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBFbnJv bGwgYSBuZXcgWDUwOSBjZXJ0aWZpY2F0ZSBpbnRvIFZhcmlhYmxlLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gUHJpdmF0ZURhdGEgICAgIFRoZSBtb2R1bGUncyBwcml2YXRlIGRhdGEuDQo+ICsgIEBw YXJhbVtpbl0gVmFyaWFibGVOYW1lICAgIFZhcmlhYmxlIG5hbWUgb2YgQ0EgZGF0YWJhc2UuDQo+ ICsNCj4gKyAgQHJldHZhbCAgIEVGSV9TVUNDRVNTICAgICAgICAgICAgTmV3IFg1MDkgaXMgZW5y b2xsZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsICAgRUZJX09VVF9PRl9SRVNPVVJDRVMg ICBDb3VsZCBub3QgYWxsb2NhdGUgbmVlZGVkIHJlc291cmNlcy4NCj4gKw0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtFbnJvbGxYNTA5dG9WYXJpYWJsZSAoDQo+ICsgIElOIFRMU19BVVRIX0NP TkZJR19QUklWQVRFX0RBVEEgICAqUHJpdmF0ZSwNCj4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgWDUwOURhdGFTaXplOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKlg1MDlEYXRhOw0KPiArICBFRklfU0lHTkFUVVJFX0xJU1QgICAgICAgICAg ICAgICAgKkNBQ2VydDsNCj4gKyAgRUZJX1NJR05BVFVSRV9EQVRBICAgICAgICAgICAgICAgICpD QUNlcnREYXRhOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGE7 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZTsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ0RhdGFTaXplOw0KPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cjsNCj4gKw0KPiArICBYNTA5RGF0YVNp emUgID0gMDsNCj4gKyAgU2lnRGF0YVNpemUgICA9IDA7DQo+ICsgIERhdGFTaXplICAgICAgPSAw Ow0KPiArICBYNTA5RGF0YSAgICAgID0gTlVMTDsNCj4gKyAgQ0FDZXJ0ICAgICAgICA9IE5VTEw7 DQo+ICsgIENBQ2VydERhdGEgICAgPSBOVUxMOw0KPiArICBEYXRhICAgICAgICAgID0gTlVMTDsN Cj4gKw0KPiArICBTdGF0dXMgPSBSZWFkRmlsZUNvbnRlbnQgKA0KPiArICAgICAgICAgICAgIFBy aXZhdGUtPkZpbGVDb250ZXh0LT5GSGFuZGxlLA0KPiArICAgICAgICAgICAgICZYNTA5RGF0YSwN Cj4gKyAgICAgICAgICAgICAmWDUwOURhdGFTaXplLA0KPiArICAgICAgICAgICAgIDANCj4gKyAg ICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ290 byBPTl9FWElUOw0KPiArICB9DQo+ICsgIEFTU0VSVCAoWDUwOURhdGEgIT0gTlVMTCk7DQo+ICsN Cj4gKyAgU2lnRGF0YVNpemUgPSBzaXplb2YoRUZJX1NJR05BVFVSRV9MSVNUKSArIHNpemVvZihF RklfU0lHTkFUVVJFX0RBVEEpDQo+IC0gMSArIFg1MDlEYXRhU2l6ZTsNCj4gKw0KPiArICBEYXRh ID0gQWxsb2NhdGVaZXJvUG9vbCAoU2lnRGF0YVNpemUpOw0KPiArICBpZiAoRGF0YSA9PSBOVUxM KSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgZ290byBP Tl9FWElUOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gRmlsbCBDZXJ0aWZpY2F0ZSBE YXRhYmFzZSBwYXJhbWV0ZXJzLg0KPiArICAvLw0KPiArICBDQUNlcnQgPSAoRUZJX1NJR05BVFVS RV9MSVNUKikgRGF0YTsNCj4gKyAgQ0FDZXJ0LT5TaWduYXR1cmVMaXN0U2l6ZSAgID0gKFVJTlQz MikgU2lnRGF0YVNpemU7DQo+ICsgIENBQ2VydC0+U2lnbmF0dXJlSGVhZGVyU2l6ZSA9IDA7DQo+ ICsgIENBQ2VydC0+U2lnbmF0dXJlU2l6ZSA9IChVSU5UMzIpIChzaXplb2YoRUZJX1NJR05BVFVS RV9EQVRBKSAtIDEgKw0KPiBYNTA5RGF0YVNpemUpOw0KPiArICBDb3B5R3VpZCAoJkNBQ2VydC0+ U2lnbmF0dXJlVHlwZSwgJmdFZmlDZXJ0WDUwOUd1aWQpOw0KPiArDQo+ICsgIENBQ2VydERhdGEg PSAoRUZJX1NJR05BVFVSRV9EQVRBKikgKChVSU5UOCogKSBDQUNlcnQgKyBzaXplb2YNCj4gKEVG SV9TSUdOQVRVUkVfTElTVCkpOw0KPiArICBDb3B5R3VpZCAoJkNBQ2VydERhdGEtPlNpZ25hdHVy ZU93bmVyLCBQcml2YXRlLT5DZXJ0R3VpZCk7DQo+ICsgIENvcHlNZW0gKChVSU5UOCogKSAoQ0FD ZXJ0RGF0YS0+U2lnbmF0dXJlRGF0YSksIFg1MDlEYXRhLA0KPiBYNTA5RGF0YVNpemUpOw0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIGlmIHNpZ25hdHVyZSBkYXRhYmFzZSBlbnRyeSBoYXMg YmVlbiBhbHJlYWR5IGV4aXN0ZWQuDQo+ICsgIC8vIElmIHRydWUsIHVzZSBFRklfVkFSSUFCTEVf QVBQRU5EX1dSSVRFIGF0dHJpYnV0ZSB0byBhcHBlbmQgdGhlDQo+ICsgIC8vIG5ldyBzaWduYXR1 cmUgZGF0YSB0byBvcmlnaW5hbCB2YXJpYWJsZQ0KPiArICAvLw0KPiArICBBdHRyID0gVExTX0FV VEhfQ09ORklHX1ZBUl9CQVNFX0FUVFI7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ1JULT5HZXRWYXJp YWJsZSgNCj4gKyAgICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCj4gKyAgICAgICAgICAg ICAgICAgICZnRWZpVGxzQ2FDZXJ0aWZpY2F0ZUd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBO VUxMLA0KPiArICAgICAgICAgICAgICAgICAgJkRhdGFTaXplLA0KPiArICAgICAgICAgICAgICAg ICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklf QlVGRkVSX1RPT19TTUFMTCkgew0KPiArICAgIEF0dHIgfD0gRUZJX1ZBUklBQkxFX0FQUEVORF9X UklURTsNCj4gKyAgfSBlbHNlIGlmIChTdGF0dXMgIT0gRUZJX05PVF9GT1VORCkgew0KPiArICAg IGdvdG8gT05fRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFi bGUoDQo+ICsgICAgICAgICAgICAgICAgICBWYXJpYWJsZU5hbWUsDQo+ICsgICAgICAgICAgICAg ICAgICAmZ0VmaVRsc0NhQ2VydGlmaWNhdGVHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgQXR0 ciwNCj4gKyAgICAgICAgICAgICAgICAgIFNpZ0RhdGFTaXplLA0KPiArICAgICAgICAgICAgICAg ICAgRGF0YQ0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICtPTl9FWElUOg0K PiArDQo+ICsgIENsb3NlRmlsZSAoUHJpdmF0ZS0+RmlsZUNvbnRleHQtPkZIYW5kbGUpOw0KPiAr ICBpZiAoUHJpdmF0ZS0+RmlsZUNvbnRleHQtPkZpbGVOYW1lICE9IE5VTEwpIHsNCj4gKyAgICBG cmVlUG9vbChQcml2YXRlLT5GaWxlQ29udGV4dC0+RmlsZU5hbWUpOw0KPiArICAgIFByaXZhdGUt PkZpbGVDb250ZXh0LT5GaWxlTmFtZSA9IE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICBQcml2YXRl LT5GaWxlQ29udGV4dC0+RkhhbmRsZSA9IE5VTEw7DQo+ICsNCj4gKyAgaWYgKFByaXZhdGUtPkNl cnRHdWlkICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbCAoUHJpdmF0ZS0+Q2VydEd1aWQpOw0K PiArICAgIFByaXZhdGUtPkNlcnRHdWlkID0gTlVMTDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChE YXRhICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbCAoRGF0YSk7DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoWDUwOURhdGEgIT0gTlVMTCkgew0KPiArICAgIEZyZWVQb29sIChYNTA5RGF0YSk7DQo+ ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg RW5yb2xsIENlcnQgaW50byBUbHNDYUNlcnRpZmljYXRlLiBUaGUgR1VJRCB3aWxsIGJlIFByaXZh dGUtPkNlcnRHdWlkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUHJpdmF0ZURhdGEgICAgIFRoZSBt b2R1bGUncyBwcml2YXRlIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGVOYW1lICAgIFZh cmlhYmxlIG5hbWUgb2Ygc2lnbmF0dXJlIGRhdGFiYXNlLg0KPiArDQo+ICsgIEByZXR2YWwgICBF RklfU1VDQ0VTUyAgICAgICAgICAgIE5ldyBDZXJ0IGVucm9sbGVkIHN1Y2Nlc3NmdWxseS4NCj4g KyAgQHJldHZhbCAgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVGhlIHBhcmFtZXRlciBpcyBpbnZh bGlkLg0KPiArICBAcmV0dmFsICAgRUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGUgQ2VydCBmaWxl IGlzIHVuc3VwcG9ydGVkIHR5cGUuDQo+ICsgIEByZXR2YWwgICBvdGhlcnMgICAgICAgICAgICAg ICAgIEZhaWwgdG8gZW5yb2xsIENlcnQgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtFbnJvbGxDZXJ0RGF0YWJhc2UgKA0KPiArICBJTiBUTFNfQVVUSF9DT05GSUdfUFJJVkFU RV9EQVRBICAqUHJpdmF0ZSwNCj4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAg KlZhcmlhYmxlTmFtZQ0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQxNiogICAgICBGaWxlUG9zdEZp eDsNCj4gKyAgVUlOVE4gICAgICAgIE5hbWVMZW5ndGg7DQo+ICsNCj4gKyAgaWYgKChQcml2YXRl LT5GaWxlQ29udGV4dC0+RmlsZU5hbWUgPT0gTlVMTCkgfHwgKFByaXZhdGUtPkZpbGVDb250ZXh0 LQ0KPiA+RkhhbmRsZSA9PSBOVUxMKSB8fCAoUHJpdmF0ZS0+Q2VydEd1aWQgPT0gTlVMTCkpIHsN Cj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gUGFyc2UgdGhlIGZpbGUncyBwb3N0Zml4Lg0KPiArICAvLw0KPiArICBOYW1l TGVuZ3RoID0gU3RyTGVuIChQcml2YXRlLT5GaWxlQ29udGV4dC0+RmlsZU5hbWUpOw0KPiArICBp ZiAoTmFtZUxlbmd0aCA8PSA0KSB7DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4gKyAgfQ0KPiArICBGaWxlUG9zdEZpeCA9IFByaXZhdGUtPkZpbGVDb250ZXh0LT5GaWxl TmFtZSArIE5hbWVMZW5ndGggLSA0Ow0KPiArDQo+ICsgIGlmIChJc0RlclBlbUVuY29kZUNlcnRp ZmljYXRlIChGaWxlUG9zdEZpeCkpIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIFN1cHBvcnRzIERF Ui1lbmNvZGVkIFg1MDkgY2VydGlmaWNhdGUuDQo+ICsgICAgLy8NCj4gKyAgICByZXR1cm4gRW5y b2xsWDUwOXRvVmFyaWFibGUgKFByaXZhdGUsIFZhcmlhYmxlTmFtZSk7DQo+ICsgIH0NCj4gKw0K PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVm cmVzaCB0aGUgZ2xvYmFsIFVwZGF0ZURhdGEgc3RydWN0dXJlLg0KPiArDQo+ICsqKi8NCj4gK1ZP SUQNCj4gK1JlZnJlc2hVcGRhdGVEYXRhICgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsg IC8vDQo+ICsgIC8vIEZyZWUgY3VycmVudCB1cGRhdGVkIGRhdGUNCj4gKyAgLy8NCj4gKyAgaWYg KG1TdGFydE9wQ29kZUhhbmRsZSAhPSBOVUxMKSB7DQo+ICsgICAgSGlpRnJlZU9wQ29kZUhhbmRs ZSAobVN0YXJ0T3BDb2RlSGFuZGxlKTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENy ZWF0ZSBuZXcgT3BDb2RlIEhhbmRsZQ0KPiArICAvLw0KPiArICBtU3RhcnRPcENvZGVIYW5kbGUg PSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBDcmVh dGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUgYXMgdGhlIHN0YXJ0IG9wY29kZQ0KPiArICAvLw0K PiArICBtU3RhcnRMYWJlbCA9IChFRklfSUZSX0dVSURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9w Q29kZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFy dE9wQ29kZUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOw0KPiArICBtU3RhcnRMYWJlbC0+RXh0ZW5kT3BDb2RlID0g RUZJX0lGUl9FWFRFTkRfT1BfTEFCRUw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDbGVhbiB1 cCB0aGUgZHluYW1pYyBvcGNvZGUgYXQgbGFiZWwgYW5kIGZvcm0gc3BlY2lmaWVkIGJ5IGJvdGgg TGFiZWxJZC4NCj4gKw0KPiArICBAcGFyYW1baW5dIExhYmVsSWQgICAgICAgICBJdCBpcyBib3Ro IHRoZSBGb3JtIElEIGFuZCBMYWJlbCBJRCBmb3Igb3Bjb2RlDQo+IGRlbGV0aW9uLg0KPiArICBA cGFyYW1baW5dIFByaXZhdGVEYXRhICAgICBNb2R1bGUgcHJpdmF0ZSBkYXRhLg0KPiArDQo+ICsq Ki8NCj4gK1ZPSUQNCj4gK0NsZWFuVXBQYWdlICgNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWxJZCwNCj4gKyAgSU4gVExTX0FVVEhfQ09ORklHX1BSSVZBVEVf REFUQSAgICAgKlByaXZhdGVEYXRhDQo+ICsgICkNCj4gK3sNCj4gKyAgUmVmcmVzaFVwZGF0ZURh dGEgKCk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gUmVtb3ZlIGFsbCBvcC1jb2RlcyBmcm9tIGR5 bmFtaWMgcGFnZQ0KPiArICAvLw0KPiArICBtU3RhcnRMYWJlbC0+TnVtYmVyID0gTGFiZWxJZDsN Cj4gKyAgSGlpVXBkYXRlRm9ybSAoDQo+ICsgICAgUHJpdmF0ZURhdGEtPlJlZ2lzdGVyZWRIYW5k bGUsDQo+ICsgICAgJmdUbHNBdXRoQ29uZmlnR3VpZCwNCj4gKyAgICBMYWJlbElkLA0KPiArICAg IG1TdGFydE9wQ29kZUhhbmRsZSwgLy8gTGFiZWwgTGFiZWxJZA0KPiArICAgIG1FbmRPcENvZGVI YW5kbGUgICAgLy8gTEFCRUxfRU5EDQo+ICsgICAgKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFVwZGF0ZSB0aGUgZm9ybSBiYXNlIG9uIHRoZSBzZWxlY3RlZCBmaWxlLg0KPiArDQo+ICsgIEBw YXJhbSBGaWxlUGF0aCAgIFBvaW50IHRvIHRoZSBmaWxlIHBhdGguDQo+ICsgIEBwYXJhbSBGb3Jt SWQgICAgIFRoZSBmb3JtIG5lZWQgdG8gZGlzcGxheS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUg ICBFeGl0IGNhbGxlciBmdW5jdGlvbi4NCj4gKyAgQHJldHZhbCBGQUxTRSAgTm90IGV4aXQgY2Fs bGVyIGZ1bmN0aW9uLg0KPiArDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK1VwZGF0ZVBhZ2UoDQo+ ICsgIElOICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpGaWxlUGF0aCwNCj4gKyAgSU4gIEVG SV9GT1JNX0lEICAgICAgICAgICAgICAgRm9ybUlkDQo+ICsgICkNCj4gK3sNCj4gKyAgQ0hBUjE2 ICAgICAgICAgICAgICAgICpGaWxlTmFtZTsNCj4gKyAgRUZJX1NUUklOR19JRCAgICAgICAgIFN0 cmluZ1Rva2VuOw0KPiArDQo+ICsgIEZpbGVOYW1lID0gTlVMTDsNCj4gKw0KPiArICBpZiAoRmls ZVBhdGggIT0gTlVMTCkgew0KPiArICAgIEZpbGVOYW1lID0gRXh0cmFjdEZpbGVOYW1lRnJvbURl dmljZVBhdGgoRmlsZVBhdGgpOw0KPiArICB9DQo+ICsgIGlmIChGaWxlTmFtZSA9PSBOVUxMKSB7 DQo+ICsgICAgLy8NCj4gKyAgICAvLyBGaWxlTmFtZSA9IE5VTEwgaGFzIHR3byBjYXNlOg0KPiAr ICAgIC8vIDEuIEZpbGVQYXRoID09IE5VTEwsIG5vdCBzZWxlY3QgZmlsZS4NCj4gKyAgICAvLyAy LiBGaWxlUGF0aCAhPSBOVUxMLCBidXQgRXh0cmFjdEZpbGVOYW1lRnJvbURldmljZVBhdGggcmV0 dXJuIE5VTEwNCj4gbm90IGVub3VnaCBtZW1vcnkgcmVzb3VyY2UuDQo+ICsgICAgLy8gSW4gdGhl c2UgdHdvIGNhc2UsIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBmb3JtLCBhbmQgZXhpdCB0aGUgY2Fs bGVyDQo+IGZ1bmN0aW9uLg0KPiArICAgIC8vDQo+ICsgICAgcmV0dXJuIFRSVUU7DQo+ICsgIH0N Cj4gKyAgU3RyaW5nVG9rZW4gPSAgSGlpU2V0U3RyaW5nIChtVGxzQXV0aFByaXZhdGVEYXRhLT5S ZWdpc3RlcmVkSGFuZGxlLCAwLA0KPiBGaWxlTmFtZSwgTlVMTCk7DQo+ICsNCj4gKyAgbVRsc0F1 dGhQcml2YXRlRGF0YS0+RmlsZUNvbnRleHQtPkZpbGVOYW1lID0gRmlsZU5hbWU7DQo+ICsNCj4g KyAgT3BlbkZpbGVCeURldmljZVBhdGggKA0KPiArICAgICZGaWxlUGF0aCwNCj4gKyAgICAmbVRs c0F1dGhQcml2YXRlRGF0YS0+RmlsZUNvbnRleHQtPkZIYW5kbGUsDQo+ICsgICAgRUZJX0ZJTEVf TU9ERV9SRUFELA0KPiArICAgIDANCj4gKyAgICApOw0KPiArICAvLw0KPiArICAvLyBDcmVhdGUg U3VidGl0bGUgb3AtY29kZSBmb3IgdGhlIGRpc3BsYXkgc3RyaW5nIG9mIHRoZSBvcHRpb24uDQo+ ICsgIC8vDQo+ICsgIFJlZnJlc2hVcGRhdGVEYXRhICgpOw0KPiArICBtU3RhcnRMYWJlbC0+TnVt YmVyID0gRm9ybUlkOw0KPiArDQo+ICsgIEhpaUNyZWF0ZVN1YlRpdGxlT3BDb2RlICgNCj4gKyAg ICBtU3RhcnRPcENvZGVIYW5kbGUsDQo+ICsgICAgU3RyaW5nVG9rZW4sDQo+ICsgICAgMCwNCj4g KyAgICAwLA0KPiArICAgIDANCj4gKyAgICk7DQo+ICsNCj4gKyAgSGlpVXBkYXRlRm9ybSAoDQo+ ICsgICAgbVRsc0F1dGhQcml2YXRlRGF0YS0+UmVnaXN0ZXJlZEhhbmRsZSwNCj4gKyAgICAmZ1Rs c0F1dGhDb25maWdHdWlkLA0KPiArICAgIEZvcm1JZCwNCj4gKyAgICBtU3RhcnRPcENvZGVIYW5k bGUsIC8vLyBMYWJlbCBGb3JtSWQNCj4gKyAgICBtRW5kT3BDb2RlSGFuZGxlICAgIC8vLyBMQUJF TF9FTkQNCj4gKyAgICApOw0KPiArDQo+ICsgIHJldHVybiBUUlVFOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgVXBkYXRlIHRoZSBmb3JtIGJhc2Ugb24gdGhlIGlucHV0IGZpbGUgcGF0aCBpbmZv Lg0KPiArDQo+ICsgIEBwYXJhbSBGaWxlUGF0aCAgICBQb2ludCB0byB0aGUgZmlsZSBwYXRoLg0K PiArDQo+ICsgIEByZXR2YWwgVFJVRSAgIEV4aXQgY2FsbGVyIGZ1bmN0aW9uLg0KPiArICBAcmV0 dmFsIEZBTFNFICBOb3QgZXhpdCBjYWxsZXIgZnVuY3Rpb24uDQo+ICsqKi8NCj4gK0JPT0xFQU4N Cj4gK1VwZGF0ZUNBRnJvbUZpbGUgKA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wg ICAgKkZpbGVQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIFVwZGF0ZVBhZ2UoRmlsZVBh dGgsIFRMU19BVVRIX0NPTkZJR19GT1JNSUQ0X0ZPUk0pOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgVW5sb2FkIHRoZSBjb25maWd1cmF0aW9uIGZvcm0sIHRoaXMgaW5jbHVkZXM6IGRlbGV0ZSBh bGwgdGhlIGNvbmZpZ3VyYXRpb24NCj4gKyAgZW50cmllcywgdW5pbnN0YWxsIHRoZSBmb3JtIGNh bGxiYWNrIHByb3RvY29sLCBhbmQgZnJlZSB0aGUgcmVzb3VyY2VzIHVzZWQuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgUHJpdmF0ZSAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBkcml2ZXIgcHJp dmF0ZSBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhl IGNvbmZpZ3VyYXRpb24gZm9ybSBpcyB1bmxvYWRlZC4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAg ICAgICAgICAgICAgICBGYWlsZWQgdG8gdW5sb2FkIHRoZSBmb3JtLg0KPiArDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK1Rsc0F1dGhDb25maWdGb3JtVW5sb2FkICgNCj4gKyAgSU4gVExTX0FV VEhfQ09ORklHX1BSSVZBVEVfREFUQSAgICAgKlByaXZhdGUNCj4gKyAgKQ0KPiArew0KPiArICBp ZiAoUHJpdmF0ZS0+RHJpdmVySGFuZGxlICE9IE5VTEwpIHsNCj4gKyAgICAvLw0KPiArICAgIC8v IFVuaW5zdGFsbCBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wNCj4gKyAgICAvLw0KPiAr ICAgIGdCUy0+VW5pbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiArICAgICAg ICAgICBQcml2YXRlLT5Ecml2ZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpRGV2aWNlUGF0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgJm1UbHNBdXRoQ29uZmlnSGlpVmVuZG9yRGV2 aWNlUGF0aCwNCj4gKyAgICAgICAgICAgJmdFZmlIaWlDb25maWdBY2Nlc3NQcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgICZQcml2YXRlLT5Db25maWdBY2Nlc3MsDQo+ICsgICAgICAgICAgIE5V TEwNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBQcml2YXRlLT5Ecml2ZXJIYW5kbGUgPSBOVUxM Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKFByaXZhdGUtPlJlZ2lzdGVyZWRIYW5kbGUgIT0gTlVM TCkgew0KPiArICAgIC8vDQo+ICsgICAgLy8gUmVtb3ZlIEhJSSBwYWNrYWdlIGxpc3QNCj4gKyAg ICAvLw0KPiArICAgIEhpaVJlbW92ZVBhY2thZ2VzIChQcml2YXRlLT5SZWdpc3RlcmVkSGFuZGxl KTsNCj4gKyAgICBQcml2YXRlLT5SZWdpc3RlcmVkSGFuZGxlID0gTlVMTDsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmIChQcml2YXRlLT5DZXJ0R3VpZCAhPSBOVUxMKSB7DQo+ICsgICAgRnJlZVBvb2wg KFByaXZhdGUtPkNlcnRHdWlkKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChQcml2YXRlLT5GaWxl Q29udGV4dCAhPSBOVUxMKSB7DQo+ICsgICAgRnJlZVBvb2wgKFByaXZhdGUtPkZpbGVDb250ZXh0 KTsNCj4gKyAgfQ0KPiArDQo+ICsgIEZyZWVQb29sIChQcml2YXRlKTsNCj4gKw0KPiArICBpZiAo bVN0YXJ0T3BDb2RlSGFuZGxlICE9IE5VTEwpIHsNCj4gKyAgICBIaWlGcmVlT3BDb2RlSGFuZGxl IChtU3RhcnRPcENvZGVIYW5kbGUpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKG1FbmRPcENvZGVI YW5kbGUgIT0gTlVMTCkgew0KPiArICAgIEhpaUZyZWVPcENvZGVIYW5kbGUgKG1FbmRPcENvZGVI YW5kbGUpOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiAr DQo+ICsNCj4gKy8qKg0KPiArICBJbml0aWFsaXplIHRoZSBjb25maWd1cmF0aW9uIGZvcm0uDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgUHJpdmF0ZSAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBk cml2ZXIgcHJpdmF0ZSBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gZm9ybSBpcyBpbml0aWFsaXplZC4NCj4gKyAgQHJldHZh bCBFRklfT1VUX09GX1JFU09VUkNFUyAgICBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5Lg0KPiAr DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Rsc0F1dGhDb25maWdGb3JtSW5pdCAoDQo+ICsg IElOIFRMU19BVVRIX0NPTkZJR19QUklWQVRFX0RBVEEgICAgICpQcml2YXRlDQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0K PiArICBQcml2YXRlLT5TaWduYXR1cmUgPSBUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9EQVRBX1NJ R05BVFVSRTsNCj4gKw0KPiArICBQcml2YXRlLT5Db25maWdBY2Nlc3MuRXh0cmFjdENvbmZpZyA9 IFRsc0F1dGhDb25maWdBY2Nlc3NFeHRyYWN0Q29uZmlnOw0KPiArICBQcml2YXRlLT5Db25maWdB Y2Nlc3MuUm91dGVDb25maWcgICA9IFRsc0F1dGhDb25maWdBY2Nlc3NSb3V0ZUNvbmZpZzsNCj4g KyAgUHJpdmF0ZS0+Q29uZmlnQWNjZXNzLkNhbGxiYWNrICAgICAgPSBUbHNBdXRoQ29uZmlnQWNj ZXNzQ2FsbGJhY2s7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5zdGFsbCBEZXZpY2UgUGF0aCBQ cm90b2NvbCBhbmQgQ29uZmlnIEFjY2VzcyBwcm90b2NvbCB0byBkcml2ZXIgaGFuZGxlLg0KPiAr ICAvLw0KPiArICBTdGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNl cyAoDQo+ICsgICAgICAgICAgICAgICAgICAmUHJpdmF0ZS0+RHJpdmVySGFuZGxlLA0KPiArICAg ICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAg ICAgICAgICAgJm1UbHNBdXRoQ29uZmlnSGlpVmVuZG9yRGV2aWNlUGF0aCwNCj4gKyAgICAgICAg ICAgICAgICAgICZnRWZpSGlpQ29uZmlnQWNjZXNzUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAg ICAgICAgICAgJlByaXZhdGUtPkNvbmZpZ0FjY2VzcywNCj4gKyAgICAgICAgICAgICAgICAgIE5V TEwNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8g UHVibGlzaCBvdXIgSElJIGRhdGEuDQo+ICsgIC8vDQo+ICsgIFByaXZhdGUtPlJlZ2lzdGVyZWRI YW5kbGUgPSBIaWlBZGRQYWNrYWdlcyAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZnVGxzQXV0aENvbmZpZ0d1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFByaXZhdGUtPkRyaXZlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVGxzQXV0aENvbmZpZ0R4ZVN0cmluZ3MsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRsc0F1dGhDb25maWdWZnJCaW4sDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgaWYgKFByaXZhdGUtPlJlZ2lzdGVyZWRIYW5kbGUgPT0gTlVMTCkgew0KPiArICAgIFN0YXR1 cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgIGdvdG8gRXJyb3I7DQo+ICsgIH0NCj4g Kw0KPiArICBQcml2YXRlLT5GaWxlQ29udGV4dCA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0K PiAoVExTX0FVVEhfQ09ORklHX0ZJTEVfQ09OVEVYVCkpOw0KPiArICBpZiAoUHJpdmF0ZS0+Rmls ZUNvbnRleHQgPT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPiArICAgIGdvdG8gRXJyb3I7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0 IE9wQ29kZSBIYW5kbGUgYW5kIEFsbG9jYXRlIHNwYWNlIGZvciBjcmVhdGlvbiBvZiBCdWZmZXIN Cj4gKyAgLy8NCj4gKyAgbVN0YXJ0T3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5k bGUgKCk7DQo+ICsgIGlmIChtU3RhcnRPcENvZGVIYW5kbGUgPT0gTlVMTCkgew0KPiArICAgIFN0 YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgIGdvdG8gRXJyb3I7DQo+ICsgIH0N Cj4gKw0KPiArICBtRW5kT3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7 DQo+ICsgIGlmIChtRW5kT3BDb2RlSGFuZGxlID09IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICBnb3RvIEVycm9yOw0KPiArICB9DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gQ3JlYXRlIEhpaSBFeHRlbmQgTGFiZWwgT3BDb2RlIGFzIHRoZSBzdGFy dCBvcGNvZGUNCj4gKyAgLy8NCj4gKyAgbVN0YXJ0TGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVM ICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtU3RhcnRPcENvZGVIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgbVN0YXJ0TGFi ZWwtPkV4dGVuZE9wQ29kZSA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPiArDQo+ICsgIC8v DQo+ICsgIC8vIENyZWF0ZSBIaWkgRXh0ZW5kIExhYmVsIE9wQ29kZSBhcyB0aGUgZW5kIG9wY29k ZQ0KPiArICAvLw0KPiArICBtRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNy ZWF0ZUd1aWRPcENvZGUgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbUVuZE9wQ29kZUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgbUVuZExhYmVsLT5FeHRlbmRPcENvZGUgPSBFRklf SUZSX0VYVEVORF9PUF9MQUJFTDsNCj4gKyAgbUVuZExhYmVsLT5OdW1iZXIgICAgICAgPSBMQUJF TF9FTkQ7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArDQo+ICtFcnJvcjoNCj4g KyAgVGxzQXV0aENvbmZpZ0Zvcm1VbmxvYWQgKFByaXZhdGUpOw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUg Y2FsbGVyIHRvIHJlcXVlc3QgdGhlIGN1cnJlbnQNCj4gKyAgY29uZmlndXJhdGlvbiBmb3Igb25l IG9yIG1vcmUgbmFtZWQgZWxlbWVudHMuIFRoZSByZXN1bHRpbmcNCj4gKyAgc3RyaW5nIGlzIGlu IDxDb25maWdBbHRSZXNwPiBmb3JtYXQuIEFueSBhbmQgYWxsIGFsdGVybmF0aXZlDQo+ICsgIGNv bmZpZ3VyYXRpb24gc3RyaW5ncyBzaGFsbCBhbHNvIGJlIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2Yg dGhlDQo+ICsgIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzdHJpbmcuIElmIHRoZXkgYXJlLCB0aGV5 IG11c3QgYXBwZWFyDQo+ICsgIGFmdGVyIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIFRoZXkg bXVzdCBjb250YWluIHRoZSBzYW1lDQo+ICsgIHJvdXRpbmcgKEdVSUQsIE5BTUUsIFBBVEgpIGFz IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc3RyaW5nLg0KPiArICBUaGV5IG11c3QgaGF2ZSBh biBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIGluZGljYXRpbmcgdGhlIHR5cGUgb2YNCj4gKyAgYWx0 ZXJuYXRpdmUgY29uZmlndXJhdGlvbiB0aGUgc3RyaW5nIHJlcHJlc2VudHMsDQo+ICsgICJBTFRD Rkc9PFN0cmluZ1Rva2VuPiIuIFRoYXQgPFN0cmluZ1Rva2VuPiAod2hlbg0KPiArICBjb252ZXJ0 ZWQgZnJvbSBIZXggVU5JQ09ERSB0byBiaW5hcnkpIGlzIGEgcmVmZXJlbmNlIHRvIGENCj4gKyAg c3RyaW5nIGluIHRoZSBhc3NvY2lhdGVkIHN0cmluZyBwYWNrLg0KPiArDQo+ICsgIEBwYXJhbSBU aGlzICAgICAgIFBvaW50cyB0byB0aGUgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MLg0K PiArDQo+ICsgIEBwYXJhbSBSZXF1ZXN0ICAgIEEgbnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3Ry aW5nIGluDQo+ICsgICAgICAgICAgICAgICAgICAgIDxDb25maWdSZXF1ZXN0PiBmb3JtYXQuIE5v dGUgdGhhdCB0aGlzDQo+ICsgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHRoZSByb3V0aW5n IGluZm9ybWF0aW9uIGFzIHdlbGwgYXMNCj4gKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmZp Z3VyYWJsZSBuYW1lIC8gdmFsdWUgcGFpcnMuIEl0IGlzDQo+ICsgICAgICAgICAgICAgICAgICAg IGludmFsaWQgZm9yIHRoaXMgc3RyaW5nIHRvIGJlIGluDQo+ICsgICAgICAgICAgICAgICAgICAg IDxNdWx0aUNvbmZpZ1JlcXVlc3Q+IGZvcm1hdC4NCj4gKyAgICAgICAgICAgICAgICAgICAgSWYg YSBOVUxMIGlzIHBhc3NlZCBpbiBmb3IgdGhlIFJlcXVlc3QgZmllbGQsDQo+ICsgICAgICAgICAg ICAgICAgICAgIGFsbCBvZiB0aGUgc2V0dGluZ3MgYmVpbmcgYWJzdHJhY3RlZCBieSB0aGlzIGZ1 bmN0aW9uDQo+ICsgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFJl c3VsdHMgZmllbGQuICBJbiBhZGRpdGlvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgaWYgYSBD b25maWdIZHIgaXMgcGFzc2VkIGluIHdpdGggbm8gcmVxdWVzdCBlbGVtZW50cywNCj4gKyAgICAg ICAgICAgICAgICAgICAgYWxsIG9mIHRoZSBzZXR0aW5ncyBiZWluZyBhYnN0cmFjdGVkIGZvciB0 aGF0IHBhcnRpY3VsYXINCj4gKyAgICAgICAgICAgICAgICAgICAgQ29uZmlnSGRyIHJlZmVyZW5j ZSB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBSZXN1bHRzIEZpZWxkLg0KPiArDQo+ICsgIEBwYXJh bSBQcm9ncmVzcyAgIE9uIHJldHVybiwgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGluIHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0IHN0cmluZy4gUG9pbnRzIHRvIHRoZSBzdHJpbmcn cyBudWxsDQo+ICsgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0b3IgaWYgcmVxdWVzdCB3YXMg c3VjY2Vzc2Z1bC4gUG9pbnRzDQo+ICsgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBtb3N0IHJl Y2VudCAiJiIgYmVmb3JlIHRoZSBmaXJzdA0KPiArICAgICAgICAgICAgICAgICAgICBmYWlsaW5n IG5hbWUgLyB2YWx1ZSBwYWlyIChvciB0aGUgYmVnaW5uaW5nDQo+ICsgICAgICAgICAgICAgICAg ICAgIG9mIHRoZSBzdHJpbmcgaWYgdGhlIGZhaWx1cmUgaXMgaW4gdGhlIGZpcnN0DQo+ICsgICAg ICAgICAgICAgICAgICAgIG5hbWUgLyB2YWx1ZSBwYWlyKSBpZiB0aGUgcmVxdWVzdCB3YXMgbm90 DQo+ICsgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWwuDQo+ICsNCj4gKyAgQHBhcmFtIFJl c3VsdHMgICAgQSBudWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcgaW4NCj4gKyAgICAgICAg ICAgICAgICAgICAgPE11bHRpQ29uZmlnQWx0UmVzcD4gZm9ybWF0IHdoaWNoIGhhcyBhbGwgdmFs dWVzDQo+ICsgICAgICAgICAgICAgICAgICAgIGZpbGxlZCBpbiBmb3IgdGhlIG5hbWVzIGluIHRo ZSBSZXF1ZXN0IHN0cmluZy4NCj4gKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRvIGJlIGFs bG9jYXRlZCBieSB0aGUgY2FsbGVkIGZ1bmN0aW9uLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgICAgVGhlIFJlc3VsdHMgc3RyaW5nIGlzIGZpbGxlZCB3aXRoIHRoZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBjb3JyZXNwb25kaW5n IHRvIGFsbCByZXF1ZXN0ZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu YW1lcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIE5vdCBlbm91 Z2ggbWVtb3J5IHRvIHN0b3JlIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBhcnRzIG9mIHRoZSByZXN1bHRzIHRoYXQgbXVzdCBiZQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0b3JlZCBhd2FpdGluZyBwb3NzaWJsZSBmdXR1cmUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbHMuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgICBSb3V0aW5nIGRhdGEgZG9lc24ndCBtYXRjaCBh bnkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbm93biBkcml2ZXIuIFBy b2dyZXNzIHNldCB0byB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm aXJzdCBjaGFyYWN0ZXIgaW4gdGhlIHJvdXRpbmcgaGVhZGVyLg0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5vdGU6IFRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IHRoYXQgdGhl DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHZhbGlkYXRlIHRo ZSByb3V0aW5nIGRhdGEuIEl0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bXVzdCBza2lwIHRoZSA8Q29uZmlnSGRyPiBpbiBvcmRlciB0bw0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgdGhlIG5hbWVzLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSICAgSWxsZWdhbCBzeW50YXguIFByb2dyZXNzIHNldA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG1vc3QgcmVjZW50ICImIiBiZWZv cmUgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Igb3IgdGhl IGJlZ2lubmluZyBvZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJpbmcuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBVbmtub3du IG5hbWUuIFByb2dyZXNzIHBvaW50cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRvIHRoZSAmIGJlZm9yZSB0aGUgbmFtZSBpbg0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHF1ZXN0aW9uLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArVGxzQXV0aENvbmZpZ0FjY2Vzc0V4dHJhY3RDb25maWcgKA0KPiArICBJTiBDT05T VCAgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gQ09OU1Qg IEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdCwNCj4gKyAgT1VUICAgICAg IEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgKlByb2dyZXNzLA0KPiArICBPVVQgICAg ICAgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0cw0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplOw0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZTsNCj4gKyAgRUZJX1NUUklORyAgICAgICAg ICAgICAgICAgICAgICAgIENvbmZpZ1JlcXVlc3Q7DQo+ICsgIEVGSV9TVFJJTkcgICAgICAgICAg ICAgICAgICAgICAgICBDb25maWdSZXF1ZXN0SGRyOw0KPiArICBUTFNfQVVUSF9DT05GSUdfUFJJ VkFURV9EQVRBICAgICAgKlByaXZhdGU7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICBBbGxvY2F0ZWRSZXF1ZXN0Ow0KPiArDQo+ICsgIGlmIChQcm9ncmVzcyA9PSBOVUxM IHx8IFJlc3VsdHMgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQo+ICsgIH0NCj4gKw0KPiArICBBbGxvY2F0ZWRSZXF1ZXN0ID0gRkFMU0U7DQo+ICsgIENv bmZpZ1JlcXVlc3RIZHIgPSBOVUxMOw0KPiArICBDb25maWdSZXF1ZXN0ICAgID0gTlVMTDsNCj4g KyAgU2l6ZSAgICAgICAgICAgICA9IDA7DQo+ICsNCj4gKyAgUHJpdmF0ZSAgICAgICAgICA9IFRM U19BVVRIX0NPTkZJR19QUklWQVRFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgQnVmZmVy U2l6ZSAgICAgICA9IHNpemVvZiAoVExTX0FVVEhfQ09ORklHX0lGUl9OVkRBVEEpOw0KPiArICBa ZXJvTWVtICgmUHJpdmF0ZS0+VGxzQXV0aENvbmZpZ052RGF0YSwgQnVmZmVyU2l6ZSk7DQo+ICsN Cj4gKyAgKlByb2dyZXNzICAgICAgICA9IFJlcXVlc3Q7DQo+ICsNCj4gKyAgaWYgKChSZXF1ZXN0 ICE9IE5VTEwpICYmICFIaWlJc0NvbmZpZ0hkck1hdGNoIChSZXF1ZXN0LA0KPiAmZ1Rsc0F1dGhD b25maWdHdWlkLCBtVGxzQXV0aENvbmZpZ1N0b3JhZ2VOYW1lKSkgew0KPiArICAgIHJldHVybiBF RklfTk9UX0ZPVU5EOw0KPiArICB9DQo+ICsNCj4gKyAgQ29uZmlnUmVxdWVzdCA9IFJlcXVlc3Q7 DQo+ICsgIGlmICgoUmVxdWVzdCA9PSBOVUxMKSB8fCAoU3RyU3RyIChSZXF1ZXN0LCBMIk9GRlNF VCIpID09IE5VTEwpKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBSZXF1ZXN0IGlzIHNldCB0byBO VUxMIG9yIE9GRlNFVCBpcyBOVUxMLCBjb25zdHJ1Y3QgZnVsbCByZXF1ZXN0IHN0cmluZy4NCj4g KyAgICAvLw0KPiArICAgIC8vIEFsbG9jYXRlIGFuZCBmaWxsIGEgYnVmZmVyIGxhcmdlIGVub3Vn aCB0byBob2xkIHRoZSA8Q29uZmlnSGRyPg0KPiB0ZW1wbGF0ZQ0KPiArICAgIC8vIGZvbGxvd2Vk IGJ5ICImT0ZGU0VUPTAmV0lEVEg9V1dXV1dXV1dXV1dXV1dXVyINCj4gZm9sbG93ZWQgYnkgYSBO dWxsLXRlcm1pbmF0b3INCj4gKyAgICAvLw0KPiArICAgIENvbmZpZ1JlcXVlc3RIZHIgPSBIaWlD b25zdHJ1Y3RDb25maWdIZHIgKCZnVGxzQXV0aENvbmZpZ0d1aWQsDQo+IG1UbHNBdXRoQ29uZmln U3RvcmFnZU5hbWUsIFByaXZhdGUtPkRyaXZlckhhbmRsZSk7DQo+ICsgICAgU2l6ZSA9IChTdHJM ZW4gKENvbmZpZ1JlcXVlc3RIZHIpICsgMzIgKyAxKSAqIHNpemVvZiAoQ0hBUjE2KTsNCj4gKyAg ICBDb25maWdSZXF1ZXN0ID0gQWxsb2NhdGVaZXJvUG9vbCAoU2l6ZSk7DQo+ICsgICAgQVNTRVJU IChDb25maWdSZXF1ZXN0ICE9IE5VTEwpOw0KPiArICAgIEFsbG9jYXRlZFJlcXVlc3QgPSBUUlVF Ow0KPiArICAgIFVuaWNvZGVTUHJpbnQgKENvbmZpZ1JlcXVlc3QsIFNpemUsIEwiJXMmT0ZGU0VU PTAmV0lEVEg9JTAxNkxYIiwNCj4gQ29uZmlnUmVxdWVzdEhkciwgKFVJTlQ2NClCdWZmZXJTaXpl KTsNCj4gKyAgICBGcmVlUG9vbCAoQ29uZmlnUmVxdWVzdEhkcik7DQo+ICsgICAgQ29uZmlnUmVx dWVzdEhkciA9IE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnSGlpQ29uZmlnUm91 dGluZy0+QmxvY2tUb0NvbmZpZyAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdIaWlDb25maWdSb3V0aW5nLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD b25maWdSZXF1ZXN0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUlOVDgg KikgJlByaXZhdGUtPlRsc0F1dGhDb25maWdOdkRhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJ1ZmZlclNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlc3VsdHMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyZXNz DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgLy8NCj4g KyAgLy8gRnJlZSB0aGUgYWxsb2NhdGVkIGNvbmZpZyByZXF1ZXN0IHN0cmluZy4NCj4gKyAgLy8N Cj4gKyAgaWYgKEFsbG9jYXRlZFJlcXVlc3QpIHsNCj4gKyAgICBGcmVlUG9vbCAoQ29uZmlnUmVx dWVzdCk7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBTZXQgUHJvZ3Jlc3Mgc3RyaW5n IHRvIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHN0cmluZy4NCj4gKyAgLy8NCj4gKyAgaWYgKFJlcXVl c3QgPT0gTlVMTCkgew0KPiArICAgICpQcm9ncmVzcyA9IE5VTEw7DQo+ICsgIH0gZWxzZSBpZiAo U3RyU3RyIChSZXF1ZXN0LCBMIk9GRlNFVCIpID09IE5VTEwpIHsNCj4gKyAgICAqUHJvZ3Jlc3Mg PSBSZXF1ZXN0ICsgU3RyTGVuIChSZXF1ZXN0KTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBT dGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gYXBwbGll cyBjaGFuZ2VzIGluIGEgZHJpdmVyJ3MgY29uZmlndXJhdGlvbi4NCj4gKyAgSW5wdXQgaXMgYSBD b25maWd1cmF0aW9uLCB3aGljaCBoYXMgdGhlIHJvdXRpbmcgZGF0YSBmb3IgdGhpcw0KPiArICBk cml2ZXIgZm9sbG93ZWQgYnkgbmFtZSAvIHZhbHVlIGNvbmZpZ3VyYXRpb24gcGFpcnMuIFRoZSBk cml2ZXINCj4gKyAgbXVzdCBhcHBseSB0aG9zZSBwYWlycyB0byBpdHMgY29uZmlndXJhYmxlIHN0 b3JhZ2UuIElmIHRoZQ0KPiArICBkcml2ZXIncyBjb25maWd1cmF0aW9uIGlzIHN0b3JlZCBpbiBh IGxpbmVhciBibG9jayBvZiBkYXRhDQo+ICsgIGFuZCB0aGUgZHJpdmVyJ3MgbmFtZSAvIHZhbHVl IHBhaXJzIGFyZSBpbiA8QmxvY2tDb25maWc+DQo+ICsgIGZvcm1hdCwgaXQgbWF5IHVzZSB0aGUg Q29uZmlnVG9CbG9jayBoZWxwZXIgZnVuY3Rpb24gKGFib3ZlKSB0bw0KPiArICBzaW1wbGlmeSB0 aGUgam9iLg0KPiArDQo+ICsgIEBwYXJhbSBUaGlzICAgICAgICAgICBQb2ludHMgdG8gdGhlIEVG SV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTC4NCj4gKw0KPiArICBAcGFyYW0gQ29uZmlndXJh dGlvbiAgQSBudWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcgaW4NCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIDxDb25maWdTdHJpbmc+IGZvcm1hdC4NCj4gKw0KPiArICBAcGFyYW0gUHJv Z3Jlc3MgICAgICAgQSBwb2ludGVyIHRvIGEgc3RyaW5nIGZpbGxlZCBpbiB3aXRoIHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0IG9mIHRoZSBtb3N0IHJlY2VudCAnJicgYmVm b3JlIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgZmFpbGluZyBuYW1lIC8g dmFsdWUgcGFpciAob3IgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm4gaW5n IG9mIHRoZSBzdHJpbmcgaWYgdGhlIGZhaWx1cmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg IGlzIGluIHRoZSBmaXJzdCBuYW1lIC8gdmFsdWUgcGFpcikgb3INCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIHRoZSB0ZXJtaW5hdGluZyBOVUxMIGlmIGFsbCB3YXMNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIHN1Y2Nlc3NmdWwuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgICBUaGUgcmVzdWx0cyBoYXZlIGJlZW4gZGlzdHJpYnV0ZWQgb3IgYXJlDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXRpbmcgZGlzdHJpYnV0aW9uLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgTm90IGVub3VnaCBtZW1v cnkgdG8gc3RvcmUgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy dHMgb2YgdGhlIHJlc3VsdHMgdGhhdCBtdXN0IGJlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RvcmVkIGF3YWl0aW5nIHBvc3NpYmxlIGZ1dHVyZQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29scy4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUlMgIFBhc3NpbmcgaW4gYSBOVUxMIGZvciB0aGUNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHRzIHBhcmFtZXRlciB3b3VsZCByZXN1 bHQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIHR5cGUgb2Yg ZXJyb3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgICBUYXJnZXQg Zm9yIHRoZSBzcGVjaWZpZWQgcm91dGluZyBkYXRhDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2FzIG5vdCBmb3VuZA0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArVGxzQXV0aENvbmZpZ0FjY2Vzc1JvdXRlQ29uZmlnICgNCj4gKyAgSU4gQ09O U1QgIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIENPTlNU ICBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24sDQo+ICsgIE9V VCAgICAgICBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICpQcm9ncmVzcw0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZTsNCj4gKyAgVExT X0FVVEhfQ09ORklHX1BSSVZBVEVfREFUQSAgICAgKlByaXZhdGU7DQo+ICsNCj4gKyAgaWYgKFBy b2dyZXNzID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K PiArICB9DQo+ICsgICpQcm9ncmVzcyA9IENvbmZpZ3VyYXRpb247DQo+ICsNCj4gKyAgaWYgKENv bmZpZ3VyYXRpb24gPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBDaGVjayByb3V0aW5nIGRhdGEgaW4g PENvbmZpZ0hkcj4uDQo+ICsgIC8vIE5vdGU6IHRoZXJlIGlzIG5vIG5hbWUgZm9yIE5hbWUvVmFs dWUgc3RvcmFnZSwgb25seSBHVUlEIHdpbGwgYmUNCj4gY2hlY2tlZA0KPiArICAvLw0KPiArICBp ZiAoIUhpaUlzQ29uZmlnSGRyTWF0Y2ggKENvbmZpZ3VyYXRpb24sICZnVGxzQXV0aENvbmZpZ0d1 aWQsDQo+IG1UbHNBdXRoQ29uZmlnU3RvcmFnZU5hbWUpKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9O T1RfRk9VTkQ7DQo+ICsgIH0NCj4gKw0KPiArICBQcml2YXRlID0gVExTX0FVVEhfQ09ORklHX1BS SVZBVEVfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBCdWZmZXJTaXplID0gc2l6ZW9mIChU TFNfQVVUSF9DT05GSUdfSUZSX05WREFUQSk7DQo+ICsgIFplcm9NZW0gKCZQcml2YXRlLT5UbHNB dXRoQ29uZmlnTnZEYXRhLCBCdWZmZXJTaXplKTsNCj4gKw0KPiArICBTdGF0dXMgPSBnSGlpQ29u ZmlnUm91dGluZy0+Q29uZmlnVG9CbG9jayAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdIaWlDb25maWdSb3V0aW5nLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDb25maWd1cmF0aW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo VUlOVDggKikgJlByaXZhdGUtPlRsc0F1dGhDb25maWdOdkRhdGEsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZCdWZmZXJTaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQcm9ncmVzcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr DQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHByb3ZpZGUgcmVzdWx0cyBkYXRhIHRv IHRoZSBkcml2ZXIuDQo+ICsgIFRoaXMgZGF0YSBjb25zaXN0cyBvZiBhIHVuaXF1ZSBrZXkgdGhh dCBpcyB1c2VkIHRvIGlkZW50aWZ5DQo+ICsgIHdoaWNoIGRhdGEgaXMgZWl0aGVyIGJlaW5nIHBh c3NlZCBiYWNrIG9yIGJlaW5nIGFza2VkIGZvci4NCj4gKw0KPiArICBAcGFyYW0gIFRoaXMgICAg ICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9D T0wuDQo+ICsgIEBwYXJhbSAgQWN0aW9uICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHR5 cGUgb2YgYWN0aW9uIHRha2VuIGJ5IHRoZSBicm93c2VyLg0KPiArICBAcGFyYW0gIFF1ZXN0aW9u SWQgICAgICAgICAgICAgQSB1bmlxdWUgdmFsdWUgd2hpY2ggaXMgc2VudCB0byB0aGUgb3JpZ2lu YWwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGluZyBkcml2ZXIg c28gdGhhdCBpdCBjYW4gaWRlbnRpZnkgdGhlIHR5cGUNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9mIGRhdGEgdG8gZXhwZWN0LiBUaGUgZm9ybWF0IG9mIHRoZSBkYXRhIHRl bmRzIHRvDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5IGJhc2VkIG9u IHRoZSBvcGNvZGUgdGhhdCBnZW5lcmF0ZWQgdGhlIGNhbGxiYWNrLg0KPiArICBAcGFyYW0gIFR5 cGUgICAgICAgICAgICAgICAgICAgVGhlIHR5cGUgb2YgdmFsdWUgZm9yIHRoZSBxdWVzdGlvbi4N Cj4gKyAgQHBhcmFtICBWYWx1ZSAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0 YSBiZWluZyBzZW50IHRvIHRoZSBvcmlnaW5hbA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXhwb3J0aW5nIGRyaXZlci4NCj4gKyAgQHBhcmFtICBBY3Rpb25SZXF1ZXN0ICAg ICAgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSBhY3Rpb24gcmVxdWVzdGVkIGJ5DQo+IHRo ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgZnVuY3Rpb24u DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBjYWxsYmFjayBz dWNjZXNzZnVsbHkgaGFuZGxlZCB0aGUgYWN0aW9uLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTICAgTm90IGVub3VnaCBzdG9yYWdlIGlzIGF2YWlsYWJsZSB0byBob2xkDQo+IHRo ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIGl0cyBk YXRhLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhlIHZhcmlhYmxlIGNv dWxkIG5vdCBiZSBzYXZlZC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIFRo ZSBzcGVjaWZpZWQgQWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkNCj4gdGhlDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay4NCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtUbHNBdXRoQ29uZmlnQWNjZXNzQ2FsbGJhY2sgKA0KPiArICBJTiAg ICAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICAgKlRoaXMsDQo+ICsgIElO ICAgICBFRklfQlJPV1NFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICBBY3Rpb24sDQo+ICsg IElOICAgICBFRklfUVVFU1RJT05fSUQgICAgICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklk LA0KPiArICBJTiAgICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlw ZSwNCj4gKyAgSU4gT1VUIEVGSV9JRlJfVFlQRV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICpW YWx1ZSwNCj4gKyAgT1VUICAgIEVGSV9CUk9XU0VSX0FDVElPTl9SRVFVRVNUICAgICAgICAgICAg ICpBY3Rpb25SZXF1ZXN0DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0lOUFVUX0tFWSAgICAgICAg ICAgICAgICAgICBLZXk7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiArICBUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9EQVRBICAgICpQcml2YXRlOw0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemU7DQo+ICsgIFRMU19B VVRIX0NPTkZJR19JRlJfTlZEQVRBICAgICAgKklmck52RGF0YTsNCj4gKyAgVUlOVDE2ICAgICAg ICAgICAgICAgICAgICAgICAgICBMYWJlbElkOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgICAgICAgICpGaWxlOw0KPiArDQo+ICsgIFN0YXR1cyAgICAgICAgICAgPSBFRklfU1VDQ0VT UzsNCj4gKyAgRmlsZSAgICAgICAgICAgICA9IE5VTEw7DQo+ICsNCj4gKyAgaWYgKChUaGlzID09 IE5VTEwpIHx8IChWYWx1ZSA9PSBOVUxMKSB8fCAoQWN0aW9uUmVxdWVzdCA9PSBOVUxMKSkgew0K PiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBQ cml2YXRlID0gVExTX0FVVEhfQ09ORklHX1BSSVZBVEVfRlJPTV9USElTIChUaGlzKTsNCj4gKw0K PiArICBtVGxzQXV0aFByaXZhdGVEYXRhID0gUHJpdmF0ZTsNCj4gKw0KPiArICAvLw0KPiArICAv LyBSZXRyaWV2ZSB1bmNvbW1pdHRlZCBkYXRhIGZyb20gQnJvd3Nlcg0KPiArICAvLw0KPiArICBC dWZmZXJTaXplID0gc2l6ZW9mIChUTFNfQVVUSF9DT05GSUdfSUZSX05WREFUQSk7DQo+ICsgIElm ck52RGF0YSA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJ1ZmZlclNpemUpOw0KPiArICBpZiAoSWZyTnZE YXRhID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsg IH0NCj4gKw0KPiArICBIaWlHZXRCcm93c2VyRGF0YSAoJmdUbHNBdXRoQ29uZmlnR3VpZCwgbVRs c0F1dGhDb25maWdTdG9yYWdlTmFtZSwNCj4gQnVmZmVyU2l6ZSwgKFVJTlQ4ICopIElmck52RGF0 YSk7DQo+ICsNCj4gKyAgaWYgKChBY3Rpb24gIT0gRUZJX0JST1dTRVJfQUNUSU9OX0NIQU5HRUQp ICYmDQo+ICsgICAgICAoQWN0aW9uICE9IEVGSV9CUk9XU0VSX0FDVElPTl9DSEFOR0lORykpIHsN Cj4gKyAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+ICsgICAgZ290byBFWElUOw0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKEFjdGlvbiA9PSBFRklfQlJPV1NFUl9BQ1RJT05fQ0hBTkdJTkcp IHsNCj4gKyAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQpIHsNCj4gKyAgICBjYXNlIEtFWV9UTFNfQVVU SF9DT05GSUdfQ0xJRU5UX0NFUlQ6DQo+ICsgICAgY2FzZSBLRVlfVExTX0FVVEhfQ09ORklHX1NF UlZFUl9DQToNCj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBDbGVhciBDZXJ0IEdVSUQuDQo+ICsg ICAgICAvLw0KPiArICAgICAgWmVyb01lbSAoSWZyTnZEYXRhLT5DZXJ0R3VpZCwgc2l6ZW9mIChJ ZnJOdkRhdGEtPkNlcnRHdWlkKSk7DQo+ICsgICAgICBpZiAoUHJpdmF0ZS0+Q2VydEd1aWQgPT0g TlVMTCkgew0KPiArICAgICAgICBQcml2YXRlLT5DZXJ0R3VpZCA9IChFRklfR1VJRCAqKSBBbGxv Y2F0ZVplcm9Qb29sIChzaXplb2YgKEVGSV9HVUlEKSk7DQo+ICsgICAgICAgIGlmIChQcml2YXRl LT5DZXJ0R3VpZCA9PSBOVUxMKSB7DQo+ICsgICAgICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsgICAgICBpZiAoUXVlc3Rpb25J ZCA9PSBLRVlfVExTX0FVVEhfQ09ORklHX0NMSUVOVF9DRVJUKSB7DQo+ICsgICAgICAgIExhYmVs SWQgPSBUTFNfQVVUSF9DT05GSUdfRk9STUlEM19GT1JNOw0KPiArICAgICAgfSBlbHNlIGlmIChR dWVzdGlvbklkID09IEtFWV9UTFNfQVVUSF9DT05GSUdfU0VSVkVSX0NBKSB7DQo+ICsgICAgICAg IExhYmVsSWQgPSBUTFNfQVVUSF9DT05GSUdfRk9STUlENF9GT1JNOw0KPiArICAgICAgfQ0KPiAr DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gUmVmcmVzaCBzZWxlY3RlZCBmaWxlLg0KPiArICAg ICAgLy8NCj4gKyAgICAgIENsZWFuVXBQYWdlIChMYWJlbElkLCBQcml2YXRlKTsNCj4gKyAgICAg IGJyZWFrOw0KPiArICAgIGNhc2UgS0VZX1RMU19BVVRIX0NPTkZJR19FTlJPTExfQ0VSVF9GUk9N X0ZJTEU6DQo+ICsgICAgICBDaG9vc2VGaWxlKCBOVUxMLCBOVUxMLCAoQ0hPT1NFX0hBTkRMRVIp IFVwZGF0ZUNBRnJvbUZpbGUsICZGaWxlKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAg Y2FzZSBLRVlfVExTX0FVVEhfQ09ORklHX1ZBTFVFX1NBVkVfQU5EX0VYSVQ6DQo+ICsgICAgICBT dGF0dXMgPSBFbnJvbGxDZXJ0RGF0YWJhc2UgKFByaXZhdGUsDQo+IEVGSV9UTFNfQ0FfQ0VSVElG SUNBVEVfVkFSSUFCTEUpOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgICAgICBDcmVhdGVQb3BVcCAoDQo+ICsgICAgICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9C QUNLR1JPVU5EX0JMVUUsDQo+ICsgICAgICAgICAgJktleSwNCj4gKyAgICAgICAgICBMIkVSUk9S OiBFbnJvbGwgQ2VydCBGYWlsdXJlISIsDQo+ICsgICAgICAgICAgTlVMTA0KPiArICAgICAgICAg ICk7DQo+ICsgICAgICB9DQo+ICsgICAgICBicmVhazsNCj4gKw0KPiArICAgIGNhc2UgS0VZX1RM U19BVVRIX0NPTkZJR19WQUxVRV9OT19TQVZFX0FORF9FWElUOg0KPiArICAgICAgaWYgKFByaXZh dGUtPkZpbGVDb250ZXh0LT5GSGFuZGxlICE9IE5VTEwpIHsNCj4gKyAgICAgICAgQ2xvc2VGaWxl IChQcml2YXRlLT5GaWxlQ29udGV4dC0+RkhhbmRsZSk7DQo+ICsgICAgICAgIFByaXZhdGUtPkZp bGVDb250ZXh0LT5GSGFuZGxlID0gTlVMTDsNCj4gKyAgICAgICAgaWYgKFByaXZhdGUtPkZpbGVD b250ZXh0LT5GaWxlTmFtZSE9IE5VTEwpew0KPiArICAgICAgICAgIEZyZWVQb29sKFByaXZhdGUt PkZpbGVDb250ZXh0LT5GaWxlTmFtZSk7DQo+ICsgICAgICAgICAgUHJpdmF0ZS0+RmlsZUNvbnRl eHQtPkZpbGVOYW1lID0gTlVMTDsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArDQo+ICsg ICAgICBpZiAoUHJpdmF0ZS0+Q2VydEd1aWQhPSBOVUxMKSB7DQo+ICsgICAgICAgIEZyZWVQb29s IChQcml2YXRlLT5DZXJ0R3VpZCk7DQo+ICsgICAgICAgIFByaXZhdGUtPkNlcnRHdWlkID0gTlVM TDsNCj4gKyAgICAgIH0NCj4gKyAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAgY2FzZSBLRVlfVExT X0FVVEhfQ09ORklHX0RFTEVURV9DRVJUOg0KPiArICAgICAgVXBkYXRlRGVsZXRlUGFnZSAoDQo+ ICsgICAgICAgIFByaXZhdGUsDQo+ICsgICAgICAgIEVGSV9UTFNfQ0FfQ0VSVElGSUNBVEVfVkFS SUFCTEUsDQo+ICsgICAgICAgICZnRWZpVGxzQ2FDZXJ0aWZpY2F0ZUd1aWQsDQo+ICsgICAgICAg IExBQkVMX0NBX0RFTEVURSwNCj4gKyAgICAgICAgVExTX0FVVEhfQ09ORklHX0ZPUk1JRDVfRk9S TSwNCj4gKyAgICAgICAgT1BUSU9OX0RFTF9DQV9FU1RJT05fSUQNCj4gKyAgICAgICAgKTsNCj4g KyAgICAgICBicmVhazsNCj4gKw0KPiArICAgIGRlZmF1bHQ6DQo+ICsgICAgICBpZiAoKFF1ZXN0 aW9uSWQgPj0gT1BUSU9OX0RFTF9DQV9FU1RJT05fSUQpICYmDQo+ICsgICAgICAgICAgICAgICAg IChRdWVzdGlvbklkIDwgKE9QVElPTl9ERUxfQ0FfRVNUSU9OX0lEICsNCj4gT1BUSU9OX0NPTkZJ R19SQU5HRSkpKSAgew0KPiArICAgICAgICBEZWxldGVDZXJ0ICgNCj4gKyAgICAgICAgICBQcml2 YXRlLA0KPiArICAgICAgICAgIEVGSV9UTFNfQ0FfQ0VSVElGSUNBVEVfVkFSSUFCTEUsDQo+ICsg ICAgICAgICAgJmdFZmlUbHNDYUNlcnRpZmljYXRlR3VpZCwNCj4gKyAgICAgICAgICBMQUJFTF9D QV9ERUxFVEUsDQo+ICsgICAgICAgICAgVExTX0FVVEhfQ09ORklHX0ZPUk1JRDVfRk9STSwNCj4g KyAgICAgICAgICBPUFRJT05fREVMX0NBX0VTVElPTl9JRCwNCj4gKyAgICAgICAgICBRdWVzdGlv bklkIC0gT1BUSU9OX0RFTF9DQV9FU1RJT05fSUQNCj4gKyAgICAgICAgICApOw0KPiArICAgICAg fQ0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArICB9IGVsc2UgaWYgKEFjdGlvbiA9PSBF RklfQlJPV1NFUl9BQ1RJT05fQ0hBTkdFRCkgew0KPiArICAgIHN3aXRjaCAoUXVlc3Rpb25JZCkg ew0KPiArICAgIGNhc2UgS0VZX1RMU19BVVRIX0NPTkZJR19DRVJUX0dVSUQ6DQo+ICsgICAgICBB U1NFUlQgKFByaXZhdGUtPkNlcnRHdWlkICE9IE5VTEwpOw0KPiArICAgICAgU3RhdHVzID0gU3Ry aW5nVG9HdWlkICgNCj4gKyAgICAgICAgICAgICAgICAgSWZyTnZEYXRhLT5DZXJ0R3VpZCwNCj4g KyAgICAgICAgICAgICAgICAgU3RyTGVuIChJZnJOdkRhdGEtPkNlcnRHdWlkKSwNCj4gKyAgICAg ICAgICAgICAgICAgUHJpdmF0ZS0+Q2VydEd1aWQNCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4g KyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsg ICAgICB9DQo+ICsNCj4gKyAgICAgICpBY3Rpb25SZXF1ZXN0ID0gRUZJX0JST1dTRVJfQUNUSU9O X1JFUVVFU1RfRk9STV9BUFBMWTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGRlZmF1bHQ6DQo+ ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArRVhJVDoNCj4gKw0KPiAr ICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIEJ1ZmZlclNpemUgPSBzaXplb2Yg KFRMU19BVVRIX0NPTkZJR19JRlJfTlZEQVRBKTsNCj4gKyAgICBIaWlTZXRCcm93c2VyRGF0YSAo JmdUbHNBdXRoQ29uZmlnR3VpZCwgbVRsc0F1dGhDb25maWdTdG9yYWdlTmFtZSwNCj4gQnVmZmVy U2l6ZSwgKFVJTlQ4KikgSWZyTnZEYXRhLCBOVUxMKTsNCj4gKyAgfQ0KPiArDQo+ICsgIEZyZWVQ b29sIChJZnJOdkRhdGEpOw0KPiArDQo+ICsgIGlmIChGaWxlICE9IE5VTEwpew0KPiArICAgIEZy ZWVQb29sKEZpbGUpOw0KPiArICAgIEZpbGUgPSBOVUxMOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiArDQo+ICt9DQo+IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL1Rs c0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0ltcGwuaA0KPiBiL05ldHdvcmtQa2cvVGxzQXV0 aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnSW1wbC5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4IDAwMDAwMDAuLjM5OGY3YjYNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9OZXR3b3Jr UGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0ltcGwuaA0KPiBAQCAtMCwwICsxLDI4 MiBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEhlYWRlciBmaWxlIG9mIE1pc2NlbGxhbmVvdXMgUm91 dGluZXMgZm9yIFRsc0F1dGhDb25maWdEeGUgZHJpdmVyLg0KPiArDQo+ICtDb3B5cmlnaHQgKGMp IDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKw0K PiArVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArYXJlIGxp Y2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEJTRA0KPiBMaWNlbnNlDQo+ICt3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1 dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5kIGF0DQo+ ICtodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4g K1RIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAi QVMgSVMiDQo+IEJBU0lTLA0KPiArV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9O UyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiov DQo+ICsNCj4gKyNpZm5kZWYgX19UTFNfQVVUSF9DT05GSUdfSU1QTF9IX18NCj4gKyNkZWZpbmUg X19UTFNfQVVUSF9DT05GSUdfSU1QTF9IX18NCj4gKw0KPiArI2luY2x1ZGUgPFVlZmkuaD4NCj4g Kw0KPiArI2luY2x1ZGUgPFByb3RvY29sL0hpaUNvbmZpZ0FjY2Vzcy5oPg0KPiArI2luY2x1ZGUg PFByb3RvY29sL1NpbXBsZUZpbGVTeXN0ZW0uaD4NCj4gKw0KPiArLy8NCj4gKy8vIExpYnJhcmll cw0KPiArLy8NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5o Pg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ICsjaW5jbHVkZSA8 TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+ DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9E ZWJ1Z0xpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KPiArI2lu Y2x1ZGUgPExpYnJhcnkvSGlpTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpSGlpU2Vy dmljZXNMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0ZpbGVFeHBsb3JlckxpYi5oPg0KPiAr I2luY2x1ZGUgPExpYnJhcnkvUHJpbnRMaWIuaD4NCj4gKw0KPiArI2luY2x1ZGUgPEd1aWQvTWRl TW9kdWxlSGlpLmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9JbWFnZUF1dGhlbnRpY2F0aW9uLmg+DQo+ ICsjaW5jbHVkZSA8R3VpZC9UbHNBdXRoZW50aWNhdGlvbi5oPg0KPiArDQo+ICsNCj4gKy8vDQo+ ICsvLyBJbmNsdWRlIGZpbGVzIHdpdGggZnVuY3Rpb24gcHJvdG90eXBlcw0KPiArLy8NCj4gKyNp bmNsdWRlICJUbHNBdXRoQ29uZmlnTnZEYXRhLmgiDQo+ICsNCj4gK2V4dGVybiAgIFVJTlQ4ICAg ICAgIFRsc0F1dGhDb25maWdEeGVTdHJpbmdzW107DQo+ICtleHRlcm4gICBVSU5UOCAgICAgICBU bHNBdXRoQ29uZmlnVmZyQmluW107DQo+ICsNCj4gKyNkZWZpbmUgVExTX0FVVEhfQ09ORklHX1BS SVZBVEVfREFUQV9TSUdOQVRVUkUgICAgU0lHTkFUVVJFXzMyDQo+ICgnVCcsICdBJywgJ0MnLCAn RCcpDQo+ICsjZGVmaW5lIFRMU19BVVRIX0NPTkZJR19QUklWQVRFX0ZST01fVEhJUyhhKSAgICAg IENSIChhLA0KPiBUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9EQVRBLCBDb25maWdBY2Nlc3MsDQo+ IFRMU19BVVRIX0NPTkZJR19QUklWQVRFX0RBVEFfU0lHTkFUVVJFKQ0KPiArDQo+ICsjZGVmaW5l IFRMU19BVVRIX0NPTkZJR19WQVJfQkFTRV9BVFRSDQo+IChFRklfVkFSSUFCTEVfTk9OX1ZPTEFU SUxFIHwgRUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUykNCj4gKw0KPiArdHlwZWRlZiBz dHJ1Y3QgX1RMU19BVVRIX0NPTkZJR19QUklWQVRFX0RBVEENCj4gVExTX0FVVEhfQ09ORklHX1BS SVZBVEVfREFUQTsNCj4gK3R5cGVkZWYgc3RydWN0IF9UTFNfQVVUSF9DT05GSUdfRklMRV9DT05U RVhUDQo+IFRMU19BVVRIX0NPTkZJR19GSUxFX0NPTlRFWFQ7DQo+ICsNCj4gKy8vLw0KPiArLy8v IEhJSSBzcGVjaWZpYyBWZW5kb3IgRGV2aWNlIFBhdGggZGVmaW5pdGlvbi4NCj4gKy8vLw0KPiAr dHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBWRU5ET1JfREVWSUNFX1BBVEggICAgICAgICAgICAgICAg VmVuZG9yRGV2aWNlUGF0aDsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAg IEVuZDsNCj4gK30gSElJX1ZFTkRPUl9ERVZJQ0VfUEFUSDsNCj4gKw0KPiArc3RydWN0IF9UTFNf QVVUSF9DT05GSUdfRklMRV9DT05URVhUIHsNCj4gKyAgRUZJX0ZJTEVfSEFORExFICAgICAgICAg ICAgICAgICAgIEZIYW5kbGU7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqRmlsZU5hbWU7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgX1RMU19BVVRIX0NPTkZJR19QUklW QVRFX0RBVEEgew0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0 dXJlOw0KPiArDQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJI YW5kbGU7DQo+ICsgIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVk SGFuZGxlOw0KPiArICBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgICAgQ29uZmlnQWNj ZXNzOw0KPiArICBUTFNfQVVUSF9DT05GSUdfSUZSX05WREFUQSAgICAgICAgVGxzQXV0aENvbmZp Z052RGF0YTsNCj4gKw0KPiArICBUTFNfQVVUSF9DT05GSUdfRklMRV9DT05URVhUICAgICAgKkZp bGVDb250ZXh0Ow0KPiArDQo+ICsgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAq Q2VydEd1aWQ7DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAgVW5sb2FkIHRoZSBjb25maWd1cmF0 aW9uIGZvcm0sIHRoaXMgaW5jbHVkZXM6IGRlbGV0ZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24NCj4g KyAgZW50cmllcywgdW5pbnN0YWxsIHRoZSBmb3JtIGNhbGxiYWNrIHByb3RvY29sLCBhbmQgZnJl ZSB0aGUgcmVzb3VyY2VzIHVzZWQuDQo+ICsgIFRoZSBmb3JtIHdpbGwgb25seSBiZSB1bmxvYWQg Y29tcGxldGVseSB3aGVuIGJvdGggSVA0IGFuZCBJUDYgc3RhY2sgYXJlDQo+IHN0b3BwZWQuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgUHJpdmF0ZSAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBk cml2ZXIgcHJpdmF0ZSBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gZm9ybSBpcyB1bmxvYWRlZC4NCj4gKyAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgICAgICAgICBGYWlsZWQgdG8gdW5sb2FkIHRoZSBmb3JtLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Rsc0F1dGhDb25maWdGb3JtVW5sb2FkICgNCj4gKyAg SU4gVExTX0FVVEhfQ09ORklHX1BSSVZBVEVfREFUQSAgICAgKlByaXZhdGUNCj4gKyAgKTsNCj4g Kw0KPiArLyoqDQo+ICsgIEluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gZm9ybS4NCj4gKw0K PiArICBAcGFyYW1baW5dICBQcml2YXRlICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGRyaXZl ciBwcml2YXRlIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg ICBUaGUgY29uZmlndXJhdGlvbiBmb3JtIGlzIGluaXRpYWxpemVkLg0KPiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICAgIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArVGxzQXV0aENvbmZpZ0Zvcm1Jbml0ICgNCj4gKyAgSU4g VExTX0FVVEhfQ09ORklHX1BSSVZBVEVfREFUQSAgICAgKlByaXZhdGUNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGNhbGxlciB0byByZXF1 ZXN0IHRoZSBjdXJyZW50DQo+ICsgIGNvbmZpZ3VyYXRpb24gZm9yIG9uZSBvciBtb3JlIG5hbWVk IGVsZW1lbnRzLiBUaGUgcmVzdWx0aW5nDQo+ICsgIHN0cmluZyBpcyBpbiA8Q29uZmlnQWx0UmVz cD4gZm9ybWF0LiBBbnkgYW5kIGFsbCBhbHRlcm5hdGl2ZQ0KPiArICBjb25maWd1cmF0aW9uIHN0 cmluZ3Mgc2hhbGwgYWxzbyBiZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZQ0KPiArICBjdXJy ZW50IGNvbmZpZ3VyYXRpb24gc3RyaW5nLiBJZiB0aGV5IGFyZSwgdGhleSBtdXN0IGFwcGVhcg0K PiArICBhZnRlciB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBUaGV5IG11c3QgY29udGFpbiB0 aGUgc2FtZQ0KPiArICByb3V0aW5nIChHVUlELCBOQU1FLCBQQVRIKSBhcyB0aGUgY3VycmVudCBj b25maWd1cmF0aW9uIHN0cmluZy4NCj4gKyAgVGhleSBtdXN0IGhhdmUgYW4gYWRkaXRpb25hbCBk ZXNjcmlwdGlvbiBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mDQo+ICsgIGFsdGVybmF0aXZlIGNvbmZp Z3VyYXRpb24gdGhlIHN0cmluZyByZXByZXNlbnRzLA0KPiArICAiQUxUQ0ZHPTxTdHJpbmdUb2tl bj4iLiBUaGF0IDxTdHJpbmdUb2tlbj4gKHdoZW4NCj4gKyAgY29udmVydGVkIGZyb20gSGV4IFVO SUNPREUgdG8gYmluYXJ5KSBpcyBhIHJlZmVyZW5jZSB0byBhDQo+ICsgIHN0cmluZyBpbiB0aGUg YXNzb2NpYXRlZCBzdHJpbmcgcGFjay4NCj4gKw0KPiArICBAcGFyYW0gVGhpcyAgICAgICBQb2lu dHMgdG8gdGhlIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTC4NCj4gKw0KPiArICBAcGFy YW0gUmVxdWVzdCAgICBBIG51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZyBpbg0KPiArICAg ICAgICAgICAgICAgICAgICA8Q29uZmlnUmVxdWVzdD4gZm9ybWF0LiBOb3RlIHRoYXQgdGhpcw0K PiArICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyB0aGUgcm91dGluZyBpbmZvcm1hdGlvbiBh cyB3ZWxsIGFzDQo+ICsgICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmFibGUgbmFtZSAv IHZhbHVlIHBhaXJzLiBJdCBpcw0KPiArICAgICAgICAgICAgICAgICAgICBpbnZhbGlkIGZvciB0 aGlzIHN0cmluZyB0byBiZSBpbg0KPiArICAgICAgICAgICAgICAgICAgICA8TXVsdGlDb25maWdS ZXF1ZXN0PiBmb3JtYXQuDQo+ICsgICAgICAgICAgICAgICAgICAgIElmIGEgTlVMTCBpcyBwYXNz ZWQgaW4gZm9yIHRoZSBSZXF1ZXN0IGZpZWxkLA0KPiArICAgICAgICAgICAgICAgICAgICBhbGwg b2YgdGhlIHNldHRpbmdzIGJlaW5nIGFic3RyYWN0ZWQgYnkgdGhpcyBmdW5jdGlvbg0KPiArICAg ICAgICAgICAgICAgICAgICB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBSZXN1bHRzIGZpZWxkLiAg SW4gYWRkaXRpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgIGlmIGEgQ29uZmlnSGRyIGlzIHBh c3NlZCBpbiB3aXRoIG5vIHJlcXVlc3QgZWxlbWVudHMsDQo+ICsgICAgICAgICAgICAgICAgICAg IGFsbCBvZiB0aGUgc2V0dGluZ3MgYmVpbmcgYWJzdHJhY3RlZCBmb3IgdGhhdCBwYXJ0aWN1bGFy DQo+ICsgICAgICAgICAgICAgICAgICAgIENvbmZpZ0hkciByZWZlcmVuY2Ugd2lsbCBiZSByZXR1 cm5lZCBpbiB0aGUgUmVzdWx0cyBGaWVsZC4NCj4gKw0KPiArICBAcGFyYW0gUHJvZ3Jlc3MgICBP biByZXR1cm4sIHBvaW50cyB0byBhIGNoYXJhY3RlciBpbiB0aGUNCj4gKyAgICAgICAgICAgICAg ICAgICAgUmVxdWVzdCBzdHJpbmcuIFBvaW50cyB0byB0aGUgc3RyaW5nJ3MgbnVsbA0KPiArICAg ICAgICAgICAgICAgICAgICB0ZXJtaW5hdG9yIGlmIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwuIFBv aW50cw0KPiArICAgICAgICAgICAgICAgICAgICB0byB0aGUgbW9zdCByZWNlbnQgIiYiIGJlZm9y ZSB0aGUgZmlyc3QNCj4gKyAgICAgICAgICAgICAgICAgICAgZmFpbGluZyBuYW1lIC8gdmFsdWUg cGFpciAob3IgdGhlIGJlZ2lubmluZw0KPiArICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3Ry aW5nIGlmIHRoZSBmYWlsdXJlIGlzIGluIHRoZSBmaXJzdA0KPiArICAgICAgICAgICAgICAgICAg ICBuYW1lIC8gdmFsdWUgcGFpcikgaWYgdGhlIHJlcXVlc3Qgd2FzIG5vdA0KPiArICAgICAgICAg ICAgICAgICAgICBzdWNjZXNzZnVsLg0KPiArDQo+ICsgIEBwYXJhbSBSZXN1bHRzICAgIEEgbnVs bC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIGluDQo+ICsgICAgICAgICAgICAgICAgICAgIDxN dWx0aUNvbmZpZ0FsdFJlc3A+IGZvcm1hdCB3aGljaCBoYXMgYWxsIHZhbHVlcw0KPiArICAgICAg ICAgICAgICAgICAgICBmaWxsZWQgaW4gZm9yIHRoZSBuYW1lcyBpbiB0aGUgUmVxdWVzdCBzdHJp bmcuDQo+ICsgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0byBiZSBhbGxvY2F0ZWQgYnkgdGhl IGNhbGxlZCBmdW5jdGlvbi4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICAgIFRoZSBSZXN1bHRzIHN0cmluZyBpcyBmaWxsZWQgd2l0aCB0aGUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBhbGwgcmVxdWVz dGVkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICBOb3QgZW5vdWdoIG1lbW9yeSB0byBz dG9yZSB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyBvZiB0 aGUgcmVzdWx0cyB0aGF0IG11c3QgYmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdG9yZWQgYXdhaXRpbmcgcG9zc2libGUgZnV0dXJlDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJvdG9jb2xzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX05PVF9G T1VORCAgICAgICAgICAgUm91dGluZyBkYXRhIGRvZXNuJ3QgbWF0Y2ggYW55DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAga25vd24gZHJpdmVyLiBQcm9ncmVzcyBzZXQgdG8g dGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgY2hhcmFjdGVy IGluIHRoZSByb3V0aW5nIGhlYWRlci4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOb3RlOiBUaGVyZSBpcyBubyByZXF1aXJlbWVudCB0aGF0IHRoZQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciB2YWxpZGF0ZSB0aGUgcm91dGluZyBkYXRh LiBJdA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3Qgc2tpcCB0aGUg PENvbmZpZ0hkcj4gaW4gb3JkZXIgdG8NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwcm9jZXNzIHRoZSBuYW1lcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgIElsbGVnYWwgc3ludGF4LiBQcm9ncmVzcyBzZXQNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0byBtb3N0IHJlY2VudCAiJiIgYmVmb3JlIHRoZQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIG9yIHRoZSBiZWdpbm5pbmcgb2Yg dGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgVW5rbm93biBuYW1lLiBQcm9ncmVz cyBwb2ludHMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgJiBi ZWZvcmUgdGhlIG5hbWUgaW4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBx dWVzdGlvbi4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc0F1 dGhDb25maWdBY2Nlc3NFeHRyYWN0Q29uZmlnICgNCj4gKyAgSU4gQ09OU1QgIEVGSV9ISUlfQ09O RklHX0FDQ0VTU19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIENPTlNUICBFRklfU1RSSU5HICAg ICAgICAgICAgICAgICAgICAgIFJlcXVlc3QsDQo+ICsgIE9VVCAgICAgICBFRklfU1RSSU5HICAg ICAgICAgICAgICAgICAgICAgICpQcm9ncmVzcywNCj4gKyAgT1VUICAgICAgIEVGSV9TVFJJTkcg ICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdHMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsN Cj4gKyAgVGhpcyBmdW5jdGlvbiBhcHBsaWVzIGNoYW5nZXMgaW4gYSBkcml2ZXIncyBjb25maWd1 cmF0aW9uLg0KPiArICBJbnB1dCBpcyBhIENvbmZpZ3VyYXRpb24sIHdoaWNoIGhhcyB0aGUgcm91 dGluZyBkYXRhIGZvciB0aGlzDQo+ICsgIGRyaXZlciBmb2xsb3dlZCBieSBuYW1lIC8gdmFsdWUg Y29uZmlndXJhdGlvbiBwYWlycy4gVGhlIGRyaXZlcg0KPiArICBtdXN0IGFwcGx5IHRob3NlIHBh aXJzIHRvIGl0cyBjb25maWd1cmFibGUgc3RvcmFnZS4gSWYgdGhlDQo+ICsgIGRyaXZlcidzIGNv bmZpZ3VyYXRpb24gaXMgc3RvcmVkIGluIGEgbGluZWFyIGJsb2NrIG9mIGRhdGENCj4gKyAgYW5k IHRoZSBkcml2ZXIncyBuYW1lIC8gdmFsdWUgcGFpcnMgYXJlIGluIDxCbG9ja0NvbmZpZz4NCj4g KyAgZm9ybWF0LCBpdCBtYXkgdXNlIHRoZSBDb25maWdUb0Jsb2NrIGhlbHBlciBmdW5jdGlvbiAo YWJvdmUpIHRvDQo+ICsgIHNpbXBsaWZ5IHRoZSBqb2IuDQo+ICsNCj4gKyAgQHBhcmFtIFRoaXMg ICAgICAgICAgIFBvaW50cyB0byB0aGUgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MLg0K PiArDQo+ICsgIEBwYXJhbSBDb25maWd1cmF0aW9uICBBIG51bGwtdGVybWluYXRlZCBVbmljb2Rl IHN0cmluZyBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgPENvbmZpZ1N0cmluZz4gZm9y bWF0Lg0KPiArDQo+ICsgIEBwYXJhbSBQcm9ncmVzcyAgICAgICBBIHBvaW50ZXIgdG8gYSBzdHJp bmcgZmlsbGVkIGluIHdpdGggdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQg b2YgdGhlIG1vc3QgcmVjZW50ICcmJyBiZWZvcmUgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICBmaXJzdCBmYWlsaW5nIG5hbWUgLyB2YWx1ZSBwYWlyIChvciB0aGUNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgIGJlZ2lubiBpbmcgb2YgdGhlIHN0cmluZyBpZiB0aGUgZmFpbHVyZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgaXMgaW4gdGhlIGZpcnN0IG5hbWUgLyB2YWx1ZSBw YWlyKSBvcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRlcm1pbmF0aW5nIE5VTEwg aWYgYWxsIHdhcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bC4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSByZXN1bHRzIGhhdmUgYmVl biBkaXN0cmlidXRlZCBvciBhcmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhd2FpdGluZyBkaXN0cmlidXRpb24uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JF U09VUkNFUyAgICBOb3QgZW5vdWdoIG1lbW9yeSB0byBzdG9yZSB0aGUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyBvZiB0aGUgcmVzdWx0cyB0aGF0IG11c3QgYmUN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZWQgYXdhaXRpbmcgcG9z c2libGUgZnV0dXJlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9j b2xzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSUyAgUGFzc2luZyBp biBhIE5VTEwgZm9yIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl c3VsdHMgcGFyYW1ldGVyIHdvdWxkIHJlc3VsdA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluIHRoaXMgdHlwZSBvZiBlcnJvci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9O T1RfRk9VTkQgICAgICAgICAgIFRhcmdldCBmb3IgdGhlIHNwZWNpZmllZCByb3V0aW5nIGRhdGEN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgbm90IGZvdW5kDQo+ICsN Cj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHNBdXRoQ29uZmlnQWNjZXNz Um91dGVDb25maWcgKA0KPiArICBJTiBDT05TVCAgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RP Q09MICAqVGhpcywNCj4gKyAgSU4gQ09OU1QgIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAg ICAgQ29uZmlndXJhdGlvbiwNCj4gKyAgT1VUICAgICAgIEVGSV9TVFJJTkcgICAgICAgICAgICAg ICAgICAgICAgKlByb2dyZXNzDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArDQo+ICsgIFRoaXMg ZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHByb3ZpZGUgcmVzdWx0cyBkYXRhIHRvIHRoZSBkcml2ZXIu DQo+ICsgIFRoaXMgZGF0YSBjb25zaXN0cyBvZiBhIHVuaXF1ZSBrZXkgdGhhdCBpcyB1c2VkIHRv IGlkZW50aWZ5DQo+ICsgIHdoaWNoIGRhdGEgaXMgZWl0aGVyIGJlaW5nIHBhc3NlZCBiYWNrIG9y IGJlaW5nIGFza2VkIGZvci4NCj4gKw0KPiArICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAg ICAgUG9pbnRzIHRvIHRoZSBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wuDQo+ICsgIEBw YXJhbSAgQWN0aW9uICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgYWN0aW9u IHRha2VuIGJ5IHRoZSBicm93c2VyLg0KPiArICBAcGFyYW0gIFF1ZXN0aW9uSWQgICAgICAgICAg ICAgQSB1bmlxdWUgdmFsdWUgd2hpY2ggaXMgc2VudCB0byB0aGUgb3JpZ2luYWwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGluZyBkcml2ZXIgc28gdGhhdCBpdCBj YW4gaWRlbnRpZnkgdGhlIHR5cGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG9mIGRhdGEgdG8gZXhwZWN0LiBUaGUgZm9ybWF0IG9mIHRoZSBkYXRhIHRlbmRzIHRvDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5IGJhc2VkIG9uIHRoZSBvcGNvZGUg dGhhdCBnZW5lcmF0ZWQgdGhlIGNhbGxiYWNrLg0KPiArICBAcGFyYW0gIFR5cGUgICAgICAgICAg ICAgICAgICAgVGhlIHR5cGUgb2YgdmFsdWUgZm9yIHRoZSBxdWVzdGlvbi4NCj4gKyAgQHBhcmFt ICBWYWx1ZSAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSBiZWluZyBzZW50 IHRvIHRoZSBvcmlnaW5hbA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw b3J0aW5nIGRyaXZlci4NCj4gKyAgQHBhcmFtICBBY3Rpb25SZXF1ZXN0ICAgICAgICAgIE9uIHJl dHVybiwgcG9pbnRzIHRvIHRoZSBhY3Rpb24gcmVxdWVzdGVkIGJ5DQo+IHRoZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgZnVuY3Rpb24uDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBjYWxsYmFjayBzdWNjZXNzZnVsbHkg aGFuZGxlZCB0aGUgYWN0aW9uLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAg Tm90IGVub3VnaCBzdG9yYWdlIGlzIGF2YWlsYWJsZSB0byBob2xkDQo+IHRoZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIGl0cyBkYXRhLg0KPiArICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhlIHZhcmlhYmxlIGNvdWxkIG5vdCBiZSBz YXZlZC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIFRoZSBzcGVjaWZpZWQg QWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkNCj4gdGhlDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjYWxsYmFjay4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJ DQo+ICtUbHNBdXRoQ29uZmlnQWNjZXNzQ2FsbGJhY2sgKA0KPiArICBJTiAgICAgQ09OU1QgRUZJ X0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICAgKlRoaXMsDQo+ICsgIElOICAgICBFRklfQlJP V1NFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICBBY3Rpb24sDQo+ICsgIElOICAgICBFRklf UVVFU1RJT05fSUQgICAgICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklkLA0KPiArICBJTiAg ICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSwNCj4gKyAgSU4g T1VUIEVGSV9JRlJfVFlQRV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICpWYWx1ZSwNCj4gKyAg T1VUICAgIEVGSV9CUk9XU0VSX0FDVElPTl9SRVFVRVNUICAgICAgICAgICAgICpBY3Rpb25SZXF1 ZXN0DQo+ICsgICk7DQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+IGRpZmYgLS1naXQgYS9OZXR3b3Jr UGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ052RGF0YS5oDQo+IGIvTmV0d29ya1Br Zy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdOdkRhdGEuaA0KPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi5mNDUzMjAxDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdOdkRhdGEuaA0KPiBA QCAtMCwwICsxLDQ5IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgSGVhZGVyIGZpbGUgZm9yIE5WIGRh dGEgc3RydWN0dXJlIGRlZmluaXRpb24uDQo+ICsNCj4gK0NvcHlyaWdodCAoYykgMjAxNiwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArVGhpcyBwcm9ncmFt IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArYXJlIGxpY2Vuc2VkIGFuZCBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPiBM aWNlbnNlDQo+ICt3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxs IHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5kIGF0DQo+ICtodHRwOi8vb3BlbnNv dXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gK1RIRSBQUk9HUkFNIElT IERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lT LA0KPiArV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwg RUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpZm5k ZWYgX19UTFNfQVVUSF9DT05GSUdfTlZfREFUQV9IX18NCj4gKyNkZWZpbmUgX19UTFNfQVVUSF9D T05GSUdfTlZfREFUQV9IX18NCj4gKw0KPiArI2luY2x1ZGUgPEd1aWQvVGxzQXV0aENvbmZpZ0hp aS5oPg0KPiArDQo+ICsjZGVmaW5lIFRMU19BVVRIX0NPTkZJR19HVUlEX1NJWkUgICAgICAgICAg ICAgICAgIDM2DQo+ICsjZGVmaW5lIFRMU19BVVRIX0NPTkZJR19HVUlEX1NUT1JBR0VfU0laRSAg ICAgICAgIDM3DQo+ICsNCj4gKyNkZWZpbmUgVExTX0FVVEhfQ09ORklHX0ZPUk1JRDFfRk9STSAg ICAgICAgICAgICAgMQ0KPiArI2RlZmluZSBUTFNfQVVUSF9DT05GSUdfRk9STUlEMl9GT1JNICAg ICAgICAgICAgICAyDQo+ICsjZGVmaW5lIFRMU19BVVRIX0NPTkZJR19GT1JNSUQzX0ZPUk0gICAg ICAgICAgICAgIDMNCj4gKyNkZWZpbmUgVExTX0FVVEhfQ09ORklHX0ZPUk1JRDRfRk9STSAgICAg ICAgICAgICAgNA0KPiArI2RlZmluZSBUTFNfQVVUSF9DT05GSUdfRk9STUlENV9GT1JNICAgICAg ICAgICAgICA1DQo+ICsNCj4gKw0KPiArI2RlZmluZSBLRVlfVExTX0FVVEhfQ09ORklHX1NFUlZF Ul9DQSAgICAgICAgICAgICAgICAgIDB4MTAwMA0KPiArI2RlZmluZSBLRVlfVExTX0FVVEhfQ09O RklHX0NMSUVOVF9DRVJUICAgICAgICAgICAgICAgIDB4MTAwMQ0KPiArI2RlZmluZSBLRVlfVExT X0FVVEhfQ09ORklHX0VOUk9MTF9DRVJUICAgICAgICAgICAgICAgIDB4MTAwMg0KPiArI2RlZmlu ZSBLRVlfVExTX0FVVEhfQ09ORklHX0RFTEVURV9DRVJUICAgICAgICAgICAgICAgIDB4MTAwMw0K PiArI2RlZmluZSBLRVlfVExTX0FVVEhfQ09ORklHX0VOUk9MTF9DRVJUX0ZST01fRklMRSAgICAg IDB4MTAwNA0KPiArI2RlZmluZSBLRVlfVExTX0FVVEhfQ09ORklHX0NFUlRfR1VJRCAgICAgICAg ICAgICAgICAgIDB4MTAwNQ0KPiArI2RlZmluZSBLRVlfVExTX0FVVEhfQ09ORklHX1ZBTFVFX1NB VkVfQU5EX0VYSVQgICAgICAgIDB4MTAwNg0KPiArI2RlZmluZSBLRVlfVExTX0FVVEhfQ09ORklH X1ZBTFVFX05PX1NBVkVfQU5EX0VYSVQgICAgIDB4MTAwNw0KPiArDQo+ICsjZGVmaW5lIE9QVElP Tl9ERUxfQ0FfRVNUSU9OX0lEICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwDQo+ICsjZGVm aW5lIE9QVElPTl9DT05GSUdfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAw DQo+ICsNCj4gKyNkZWZpbmUgTEFCRUxfQ0FfREVMRVRFICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAweDExMDENCj4gKyNkZWZpbmUgTEFCRUxfRU5EICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweGZmZmYNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBD SEFSMTYgICAgQ2VydEd1aWRbVExTX0FVVEhfQ09ORklHX0dVSURfU1RPUkFHRV9TSVpFXTsNCj4g K30gVExTX0FVVEhfQ09ORklHX0lGUl9OVkRBVEE7DQo+ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0t Z2l0IGEvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdWZnIudmZyDQo+ IGIvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdWZnIudmZyDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmZiMTMwZDkNCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ1Zm ci52ZnINCj4gQEAgLTAsMCArMSwxNTIgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBWRlIgZmlsZSB1 c2VkIGJ5IFRsc0F1dGhDb25maWdEeGUgZHJpdmVyLg0KPiArDQo+ICsgIENvcHlyaWdodCAoYykg MjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArDQo+ ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKyAgYXJl IGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEJTRA0KPiBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlz dHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gZm91bmQg YXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4N Cj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VO U0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJF UFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4N Cj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJUbHNBdXRoQ29uZmlnTnZEYXRhLmgiDQo+ ICsNCj4gK2Zvcm1zZXQNCj4gKyAgZ3VpZCAgID0gVExTX0FVVEhfQ09ORklHX0dVSUQsDQo+ICsg IHRpdGxlICA9IFNUUklOR19UT0tFTihTVFJfVExTX0FVVEhfQ09ORklHX1RJVExFKSwNCj4gKyAg aGVscCAgID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfSEVMUCksDQo+ICsNCj4g KyAgdmFyc3RvcmUgVExTX0FVVEhfQ09ORklHX0lGUl9OVkRBVEEsDQo+ICsgICAgbmFtZSA9IFRM U19BVVRIX0NPTkZJR19JRlJfTlZEQVRBLA0KPiArICAgIGd1aWQgPSBUTFNfQVVUSF9DT05GSUdf R1VJRDsNCj4gKw0KPiArICAvLw0KPiArICAvLyAjIzEgRm9ybTE6IE1haW4gZm9ybSBmb3IgVGxz IEF1dGggY29uZmlncmF0aW9uDQo+ICsgIC8vDQo+ICsgIGZvcm0gZm9ybWlkID0gVExTX0FVVEhf Q09ORklHX0ZPUk1JRDFfRk9STSwNCj4gKyAgICB0aXRsZSAgPSBTVFJJTkdfVE9LRU4oU1RSX1RM U19BVVRIX0NPTkZJR19USVRMRSk7DQo+ICsNCj4gKyAgICBzdWJ0aXRsZSB0ZXh0ID0gU1RSSU5H X1RPS0VOKFNUUl9OVUxMKTsNCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gRGlzcGxheSBTZXJ2 ZXIgQ0EgY29uZmlncmF0aW9uDQo+ICsgICAgLy8NCj4gKyAgICBnb3RvIFRMU19BVVRIX0NPTkZJ R19GT1JNSUQyX0ZPUk0sDQo+ICsgICAgICAgICBwcm9tcHQgPSBTVFJJTkdfVE9LRU4oU1RSX1RM U19BVVRIX0NPTkZJR19TRVJWRVJfQ0EpLA0KPiArICAgICAgICAgaGVscCAgID0gU1RSSU5HX1RP S0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfU0VSVkVSX0NBX0hFTFApLA0KPiArICAgICAgICAgZmxh Z3MgID0gSU5URVJBQ1RJVkUsDQo+ICsgICAgICAgICBrZXkgICAgPSBLRVlfVExTX0FVVEhfQ09O RklHX1NFUlZFUl9DQTsNCj4gKw0KPiArICAgIHN1YnRpdGxlIHRleHQgPSBTVFJJTkdfVE9LRU4o U1RSX05VTEwpOw0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBEaXNwbGF5IENsaWVudCBjZXJ0 IGNvbmZpZ3JhdGlvbg0KPiArICAgIC8vDQo+ICsgICAgZ3JheW91dGlmIFRSVUU7IC8vLyBDdXJy ZW50IHVuc3VwcG9ydGVkLg0KPiArICAgIGdvdG8gVExTX0FVVEhfQ09ORklHX0ZPUk1JRDNfRk9S TSwNCj4gKyAgICAgICAgIHByb21wdCA9IFNUUklOR19UT0tFTihTVFJfVExTX0FVVEhfQ09ORklH X0NMSUVOVF9DRVJUKSwNCj4gKyAgICAgICAgIGhlbHAgICA9IFNUUklOR19UT0tFTihTVFJfVExT X0FVVEhfQ09ORklHX0NMSUVOVF9DRVJUX0hFTFApLA0KPiArICAgICAgICAgZmxhZ3MgID0gSU5U RVJBQ1RJVkUsDQo+ICsgICAgICAgICBrZXkgICAgPSBLRVlfVExTX0FVVEhfQ09ORklHX0NMSUVO VF9DRVJUOw0KPiArICAgIGVuZGlmOw0KPiArICBlbmRmb3JtOw0KPiArDQo+ICsgIC8vDQo+ICsg IC8vICMjMiBGb3JtMjogQ0EgY29uZmlndXJhdGlvbg0KPiArICAvLw0KPiArICBmb3JtIGZvcm1p ZCA9IFRMU19BVVRIX0NPTkZJR19GT1JNSUQyX0ZPUk0sDQo+ICsgICAgdGl0bGUgID0gU1RSSU5H X1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfU0VSVkVSX0NBKTsNCj4gKw0KPiArICAgIHN1YnRp dGxlIHRleHQgPSBTVFJJTkdfVE9LRU4oU1RSX05VTEwpOw0KPiArDQo+ICsgICAgZ290byBUTFNf QVVUSF9DT05GSUdfRk9STUlENF9GT1JNLA0KPiArICAgICAgICAgcHJvbXB0ID0gU1RSSU5HX1RP S0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfRU5ST0xMX0NFUlQpLA0KPiArICAgICAgICAgaGVscCAg ID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfRU5ST0xMX0NFUlRfSEVMUCksDQo+ ICsgICAgICAgICBmbGFncyAgPSBJTlRFUkFDVElWRSwNCj4gKyAgICAgICAgIGtleSAgICA9IEtF WV9UTFNfQVVUSF9DT05GSUdfRU5ST0xMX0NFUlQ7DQo+ICsNCj4gKyAgICBzdWJ0aXRsZSB0ZXh0 ID0gU1RSSU5HX1RPS0VOKFNUUl9OVUxMKTsNCj4gKw0KPiArICAgIGdvdG8gVExTX0FVVEhfQ09O RklHX0ZPUk1JRDVfRk9STSwNCj4gKyAgICAgICAgIHByb21wdCA9IFNUUklOR19UT0tFTihTVFJf VExTX0FVVEhfQ09ORklHX0RFTEVURV9DRVJUKSwNCj4gKyAgICAgICAgIGhlbHAgICA9IFNUUklO R19UT0tFTihTVFJfVExTX0FVVEhfQ09ORklHX0RFTEVURV9DRVJUX0hFTFApLA0KPiArICAgICAg ICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQo+ICsgICAgICAgICBrZXkgICAgPSBLRVlfVExTX0FV VEhfQ09ORklHX0RFTEVURV9DRVJUOw0KPiArICBlbmRmb3JtOw0KPiArDQo+ICsgIC8vDQo+ICsg IC8vICMjMyBGb3JtMyA6IENsaWVudCBjZXJ0IGNvbmZpZ3VyYXRpb24NCj4gKyAgLy8NCj4gKyAg Zm9ybSBmb3JtaWQgPSBUTFNfQVVUSF9DT05GSUdfRk9STUlEM19GT1JNLA0KPiArICAgIHRpdGxl ICA9IFNUUklOR19UT0tFTihTVFJfVExTX0FVVEhfQ09ORklHX0NMSUVOVF9DRVJUKTsNCj4gKw0K PiArICAgIHN1YnRpdGxlIHRleHQgPSBTVFJJTkdfVE9LRU4oU1RSX05VTEwpOw0KPiArDQo+ICsg IC8vDQo+ICsgIC8vIFRPRE8uLi4NCj4gKyAgLy8NCj4gKyAgZW5kZm9ybTsNCj4gKw0KPiArICAv Lw0KPiArICAvLyAjIzQgRm9ybTQ6IEVucm9sbCBjZXJ0IGZvciBDQQ0KPiArICAvLw0KPiArICBm b3JtIGZvcm1pZCA9IFRMU19BVVRIX0NPTkZJR19GT1JNSUQ0X0ZPUk0sDQo+ICsgICAgdGl0bGUg ID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfRU5ST0xMX0NFUlQpOw0KPiArDQo+ ICsgICAgc3VidGl0bGUgdGV4dCA9IFNUUklOR19UT0tFTihTVFJfTlVMTCk7DQo+ICsNCj4gKyAg ICBnb3RvIFRMU19BVVRIX0NPTkZJR19GT1JNSUQ0X0ZPUk0sDQo+ICsgICAgICAgICBwcm9tcHQg PSBTVFJJTkdfVE9LRU4oU1RSX1RMU19BVVRIX0NPTkZJR19BRERfQ0VSVF9GSUxFKSwNCj4gKyAg ICAgICAgIGhlbHAgPSBTVFJJTkdfVE9LRU4oU1RSX1RMU19BVVRIX0NPTkZJR19BRERfQ0VSVF9G SUxFKSwNCj4gKyAgICAgICAgIGZsYWdzID0gSU5URVJBQ1RJVkUsDQo+ICsgICAgICAgICBrZXkg PSBLRVlfVExTX0FVVEhfQ09ORklHX0VOUk9MTF9DRVJUX0ZST01fRklMRTsNCj4gKw0KPiArICAg IHN1YnRpdGxlIHRleHQgPSBTVFJJTkdfVE9LRU4oU1RSX05VTEwpOw0KPiArICAgIGxhYmVsIFRM U19BVVRIX0NPTkZJR19GT1JNSUQ0X0ZPUk07DQo+ICsgICAgbGFiZWwgTEFCRUxfRU5EOw0KPiAr ICAgIHN1YnRpdGxlIHRleHQgPSBTVFJJTkdfVE9LRU4oU1RSX05VTEwpOw0KPiArDQo+ICsgICAg c3RyaW5nICB2YXJpZCAgID0gVExTX0FVVEhfQ09ORklHX0lGUl9OVkRBVEEuQ2VydEd1aWQsDQo+ ICsgICAgICAgICAgICBwcm9tcHQgID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdf Q0VSVF9HVUlEKSwNCj4gKyAgICAgICAgICAgIGhlbHAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX1RM U19BVVRIX0NPTkZJR19DRVJUX0dVSURfSEVMUCksDQo+ICsgICAgICAgICAgICBmbGFncyAgID0g SU5URVJBQ1RJVkUsDQo+ICsgICAgICAgICAgICBrZXkgICAgID0gS0VZX1RMU19BVVRIX0NPTkZJ R19DRVJUX0dVSUQsDQo+ICsgICAgICAgICAgICBtaW5zaXplID0gVExTX0FVVEhfQ09ORklHX0dV SURfU0laRSwNCj4gKyAgICAgICAgICAgIG1heHNpemUgPSBUTFNfQVVUSF9DT05GSUdfR1VJRF9T SVpFLA0KPiArICAgIGVuZHN0cmluZzsNCj4gKw0KPiArICAgIHN1YnRpdGxlIHRleHQgPSBTVFJJ TkdfVE9LRU4oU1RSX05VTEwpOw0KPiArICAgIHN1YnRpdGxlIHRleHQgPSBTVFJJTkdfVE9LRU4o U1RSX05VTEwpOw0KPiArDQo+ICsgICAgZ290byBUTFNfQVVUSF9DT05GSUdfRk9STUlEMV9GT1JN LA0KPiArICAgICAgICAgcHJvbXB0ID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdf U0FWRV9BTkRfRVhJVCksDQo+ICsgICAgICAgICBoZWxwICAgPSBTVFJJTkdfVE9LRU4oU1RSX1RM U19BVVRIX0NPTkZJR19TQVZFX0FORF9FWElUKSwNCj4gKyAgICAgICAgIGZsYWdzICA9IElOVEVS QUNUSVZFLA0KPiArICAgICAgICAga2V5ICAgID0gS0VZX1RMU19BVVRIX0NPTkZJR19WQUxVRV9T QVZFX0FORF9FWElUOw0KPiArDQo+ICsgICAgZ290byBUTFNfQVVUSF9DT05GSUdfRk9STUlEMV9G T1JNLA0KPiArICAgICAgICAgcHJvbXB0ID0NCj4gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9D T05GSUdfTk9fU0FWRV9BTkRfRVhJVCksDQo+ICsgICAgICAgICBoZWxwICAgPQ0KPiBTVFJJTkdf VE9LRU4oU1RSX1RMU19BVVRIX0NPTkZJR19OT19TQVZFX0FORF9FWElUKSwNCj4gKyAgICAgICAg IGZsYWdzICA9IElOVEVSQUNUSVZFLA0KPiArICAgICAgICAga2V5ICAgID0gS0VZX1RMU19BVVRI X0NPTkZJR19WQUxVRV9OT19TQVZFX0FORF9FWElUOw0KPiArDQo+ICsgIGVuZGZvcm07DQo+ICsN Cj4gKyAgLy8NCj4gKyAgLy8gIyM1IEZvcm01OiBEZWxldGUgY2VydCBmb3IgQ0ENCj4gKyAgLy8N Cj4gKyAgZm9ybSBmb3JtaWQgPSBUTFNfQVVUSF9DT05GSUdfRk9STUlENV9GT1JNLA0KPiArICAg IHRpdGxlICA9IFNUUklOR19UT0tFTihTVFJfVExTX0FVVEhfQ09ORklHX0RFTEVURV9DRVJUKTsN Cj4gKw0KPiArICAgIGxhYmVsIExBQkVMX0NBX0RFTEVURTsNCj4gKyAgICBsYWJlbCBMQUJFTF9F TkQ7DQo+ICsNCj4gKyAgICBzdWJ0aXRsZSB0ZXh0ID0gU1RSSU5HX1RPS0VOKFNUUl9OVUxMKTsN Cj4gKw0KPiArICBlbmRmb3JtOw0KPiArDQo+ICtlbmRmb3Jtc2V0Ow0KPiAtLQ0KPiAxLjkuNS5t c3lzZ2l0LjENCg0K