From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (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 6777E81C62 for ; Wed, 14 Dec 2016 18:22:26 -0800 (PST) Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga101.fm.intel.com with ESMTP; 14 Dec 2016 18:22:25 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,349,1477983600"; d="scan'208";a="42759789" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga006.fm.intel.com with ESMTP; 14 Dec 2016 18:22:25 -0800 Received: from fmsmsx116.amr.corp.intel.com (10.18.116.20) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 14 Dec 2016 18:22:25 -0800 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by fmsmsx116.amr.corp.intel.com (10.18.116.20) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 14 Dec 2016 18:22:24 -0800 Received: from shsmsx151.ccr.corp.intel.com ([169.254.3.77]) by shsmsx102.ccr.corp.intel.com ([169.254.2.54]) with mapi id 14.03.0248.002; Thu, 15 Dec 2016 10:22:21 +0800 From: "Fu, Siyuan" To: "Wu, Jiaxin" , "edk2-devel@lists.01.org" CC: "Ye, Ting" , "Zhang, Lubo" , "Long, Qin" , Thomas Palmer Thread-Topic: [Patch 06/10] NetworkPkg/TlsAuthConfigDxe: Provide the UI to support TLS auth configuration Thread-Index: AQHSVdyKG1Y5KgoCF0GYrpwS7d0Q1KEHIkuw Date: Thu, 15 Dec 2016 02:22:19 +0000 Message-ID: References: <1481700859-76060-1-git-send-email-jiaxin.wu@intel.com> <1481700859-76060-7-git-send-email-jiaxin.wu@intel.com> In-Reply-To: <1481700859-76060-7-git-send-email-jiaxin.wu@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_IC x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZWQzMjFmNGEtMTIwYS00ZDNmLTk2YjAtODcwZTZjZjNkYTRmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6Ikg2d25VekRleXMrWFh2bUtwbGxpSTNnTWR3NnI0U2J2dW9ESHJnNGVHQWM9In0= 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, 15 Dec 2016 02:22:26 -0000 Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 SGksIEppYXhpbg0KDQpQcmludExpYiBzdXBwb3J0ICIlZyIgdG8gcHJpbnQgYSBHVUlEIHNvIHlv dSBkb24ndCBuZWVkIHRvIHVzZSAiJTA4eC0lMDR4LSUwNHgtJTAyeCUwMngtJTAyeCUwMnglMDJ4 JTAyeCUwMnglMDJ4IiBpbiBHdWlkVG9TdHJpbmcoKS4gDQpCZXNpZGUgb2YgdGhhdCwgSSBkbyBz ZWUgYSBsb3Qgb2YgZHJpdmVycyBoYXMgc2ltaWxhciBpbnRlcm5hbCBmdW5jdGlvbiBTdHJpbmdU b0d1aWQoKSBvciBTdHJUb0d1aWQoKSwgZG8gd2UgaGF2ZSBhIGNvbW1vbiBsaWJyYXJ5IGludGVy ZmFjZSBmb3IgdGhpcz8gaWYgbm90IEkgdGhpbmsgaXQgbWF5IHdvcnRoIHRvIGNyZWF0ZSBvbmUu DQoNCk90aGVyIHBhcnRzIGFyZSBnb29kIHdpdGggbWUuDQpSZXZpZXdlZC1ieTogRnUgU2l5dWFu IDxzaXl1YW4uZnVAaW50ZWwuY29tPg0KDQoNCkJlc3QgUmVnYXJkcw0KU2l5dWFuDQoNCi0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBXdSwgSmlheGluIA0KU2VudDogMjAxNsTqMTLU wjE0yNUgMTU6MzQNClRvOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KQ2M6IFllLCBUaW5nIDx0 aW5nLnllQGludGVsLmNvbT47IEZ1LCBTaXl1YW4gPHNpeXVhbi5mdUBpbnRlbC5jb20+OyBaaGFu ZywgTHVibyA8bHViby56aGFuZ0BpbnRlbC5jb20+OyBMb25nLCBRaW4gPHFpbi5sb25nQGludGVs LmNvbT47IFRob21hcyBQYWxtZXIgPHRob21hcy5wYWxtZXJAaHBlLmNvbT47IFd1LCBKaWF4aW4g PGppYXhpbi53dUBpbnRlbC5jb20+DQpTdWJqZWN0OiBbUGF0Y2ggMDYvMTBdIE5ldHdvcmtQa2cv VGxzQXV0aENvbmZpZ0R4ZTogUHJvdmlkZSB0aGUgVUkgdG8gc3VwcG9ydCBUTFMgYXV0aCBjb25m aWd1cmF0aW9uDQoNClRoaXMgcGF0Y2ggcHJvdmlkZXMgdGhlIFVJIHRvIHN1cHBvcnQgVExTIGF1 dGggY29uZmlndXJhdGlvbi4NCiogRUZJX1NJR05BVFVSRV9MSVNUIGZvcm1hdCBpcyB1c2VkIGZv ciAnVGxzQ2FDZXJ0aWZpY2F0ZScNCnZhcmlhYmxlLiBTbywgVExTIHN1cHBvcnRzIG11bHRpcGxl IGNlcnRpZmljYXRlIGNvbmZpZ3VyYXRpb24uDQoqIFRoZSB2YXJpYWJsZSBhdHRyaWJ1dGUgaXMg QlMgd2l0aCBOViwgd2hpY2ggb25seSB0YXJnZXQgYXQNCnByZXZlbnRpbmcgcnVudGltZSBwaGFz ZSBhdHRhY2suDQoNCkNjOiBZZSBUaW5nIDx0aW5nLnllQGludGVsLmNvbT4NCkNjOiBGdSBTaXl1 YW4gPHNpeXVhbi5mdUBpbnRlbC5jb20+DQpDYzogWmhhbmcgTHVibyA8bHViby56aGFuZ0BpbnRl bC5jb20+DQpDYzogTG9uZyBRaW4gPHFpbi5sb25nQGludGVsLmNvbT4NCkNjOiBUaG9tYXMgUGFs bWVyIDx0aG9tYXMucGFsbWVyQGhwZS5jb20+DQpDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3Jl IENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4wDQpTaWduZWQtb2ZmLWJ5OiBXdSBKaWF4aW4gPGpp YXhpbi53dUBpbnRlbC5jb20+DQotLS0NCiBOZXR3b3JrUGtnL0luY2x1ZGUvR3VpZC9UbHNBdXRo Q29uZmlnSGlpLmggICAgICAgICB8ICAgMjUgKw0KIE5ldHdvcmtQa2cvSW5jbHVkZS9HdWlkL1Rs c0F1dGhlbnRpY2F0aW9uLmggICAgICAgIHwgICAyOSArDQogTmV0d29ya1BrZy9OZXR3b3JrUGtn LmRlYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsNCiBOZXR3b3JrUGtnL1Rsc0F1 dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS5jICAgICB8ICAxMzUgKysNCiBOZXR3b3JrUGtn L1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS5pbmYgICB8ICAgNzMgKw0KIE5ldHdv cmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhlLnVuaSAgIHwgICAyMSArDQog Li4uL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZUV4dHJhLnVuaSAgICAgfCAgIDE5 ICsNCiAuLi4vVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhlU3RyaW5ncy51bmkgICB8 ICAgMzkgKw0KIE5ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnSW1wbC5j ICAgIHwgMTg0MSArKysrKysrKysrKysrKysrKysrKw0KIE5ldHdvcmtQa2cvVGxzQXV0aENvbmZp Z0R4ZS9UbHNBdXRoQ29uZmlnSW1wbC5oICAgIHwgIDI4MiArKysNCiBOZXR3b3JrUGtnL1Rsc0F1 dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ052RGF0YS5oICB8ICAgNDkgKw0KIE5ldHdvcmtQa2cv VGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnVmZyLnZmciAgIHwgIDE1MiArKw0KIDEyIGZp bGVzIGNoYW5nZWQsIDI2NzIgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3 b3JrUGtnL0luY2x1ZGUvR3VpZC9UbHNBdXRoQ29uZmlnSGlpLmgNCiBjcmVhdGUgbW9kZSAxMDA2 NDQgTmV0d29ya1BrZy9JbmNsdWRlL0d1aWQvVGxzQXV0aGVudGljYXRpb24uaA0KIGNyZWF0ZSBt b2RlIDEwMDY0NCBOZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS5j DQogY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRo Q29uZmlnRHhlLmluZg0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3b3JrUGtnL1Rsc0F1dGhDb25m aWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS51bmkNCiBjcmVhdGUgbW9kZSAxMDA2NDQgTmV0d29ya1Br Zy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdEeGVFeHRyYS51bmkNCiBjcmVhdGUgbW9k ZSAxMDA2NDQgTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdEeGVTdHJp bmdzLnVuaQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUv VGxzQXV0aENvbmZpZ0ltcGwuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3b3JrUGtnL1Rsc0F1 dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0ltcGwuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3 b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ052RGF0YS5oDQogY3JlYXRlIG1v ZGUgMTAwNjQ0IE5ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnVmZyLnZm cg0KDQpkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9JbmNsdWRlL0d1aWQvVGxzQXV0aENvbmZpZ0hp aS5oIGIvTmV0d29ya1BrZy9JbmNsdWRlL0d1aWQvVGxzQXV0aENvbmZpZ0hpaS5oDQpuZXcgZmls ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uOWQyMTQyNg0KLS0tIC9kZXYvbnVsbA0KKysr IGIvTmV0d29ya1BrZy9JbmNsdWRlL0d1aWQvVGxzQXV0aENvbmZpZ0hpaS5oDQpAQCAtMCwwICsx LDI1IEBADQorLyoqIEBmaWxlDQorICBHVUlEcyB1c2VkIGFzIEhJSSBGb3JtU2V0IGFuZCBISUkg UGFja2FnZSBsaXN0IEdVSUQgaW4gVGxzQXV0aENvbmZpZ0R4ZSBkcml2ZXIuIA0KKyAgDQorQ29w eXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQorVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbGlj ZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIA0KK3RoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUgQlNEIExpY2Vuc2UgdGhhdCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4g IA0KK1RoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQoraHR0cDov L29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKw0KK1RIRSBQUk9HUkFNIElTIERJU1RSSUJV VEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCAgICAgICAgICAg ICAgICAgICAgIA0KK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5Z IEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQorDQorKiovDQorDQorI2lmbmRlZiBf X1RMU19BVVRIX0NPTkZJR19ISUlfR1VJRF9IX18NCisjZGVmaW5lIF9fVExTX0FVVEhfQ09ORklH X0hJSV9HVUlEX0hfXw0KKw0KKyNkZWZpbmUgVExTX0FVVEhfQ09ORklHX0dVSUQgXA0KKyAgeyBc DQorICAgIDB4YjBlYWU0ZjgsIDB4OWEwNCwgMHg0YzZkLCB7IDB4YTcsIDB4NDgsIDB4NzksIDB4 M2QsIDB4YWEsIDB4ZiwgMHg2NSwgMHhkZiB9IFwNCisgIH0NCisNCitleHRlcm4gRUZJX0dVSUQg Z1Rsc0F1dGhDb25maWdHdWlkOw0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cv SW5jbHVkZS9HdWlkL1Rsc0F1dGhlbnRpY2F0aW9uLmggYi9OZXR3b3JrUGtnL0luY2x1ZGUvR3Vp ZC9UbHNBdXRoZW50aWNhdGlvbi5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MC4uMmU4MDBkYw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvTmV0d29ya1BrZy9JbmNsdWRlL0d1aWQv VGxzQXV0aGVudGljYXRpb24uaA0KQEAgLTAsMCArMSwyOSBAQA0KKy8qKiBAZmlsZQ0KKyAgVGhp cyBmaWxlIGRlZmluZXMgVGxzQ2FDZXJ0aWZpY2F0ZSB2YXJpYWJsZS4NCisgIA0KK0NvcHlyaWdo dCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0K K1RoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIGxpY2Vuc2Vk IGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciANCit0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIEJTRCBMaWNlbnNlIHRoYXQgYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICANCitU aGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KK2h0dHA6Ly9vcGVu c291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAuICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICANCisNCitUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBV TkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgICAgICAgICAgICAgICAg ICAgICANCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5E LCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKw0KKyoqLw0KKw0KKyNpZm5kZWYgX19UTFNf QVVUSEVOVElDQVRJT05fSF9fDQorI2RlZmluZSBfX1RMU19BVVRIRU5USUNBVElPTl9IX18NCisN CisvLyBQcml2YXRlIHZhcmlhYmxlIGZvciBDQSBDZXJ0aWZpY2F0ZSBjb25maWd1cmF0aW9uDQor Ly8NCisjZGVmaW5lIEVGSV9UTFNfQ0FfQ0VSVElGSUNBVEVfR1VJRCBcDQorICB7IFwNCisgICAg MHhmZDIzNDBEMCwgMHgzZGFiLCAweDQzNDksIHsgMHhhNiwgMHhjNywgMHgzYiwgMHg0ZiwgMHgx MiwgMHhiNCwgMHg4ZSwgMHhhZSB9IFwNCisgIH0NCisNCisjZGVmaW5lIEVGSV9UTFNfQ0FfQ0VS VElGSUNBVEVfVkFSSUFCTEUgICAgICAgTCJUbHNDYUNlcnRpZmljYXRlIg0KKw0KK2V4dGVybiBF RklfR1VJRCBnRWZpVGxzQ2FDZXJ0aWZpY2F0ZUd1aWQ7DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0 IGEvTmV0d29ya1BrZy9OZXR3b3JrUGtnLmRlYyBiL05ldHdvcmtQa2cvTmV0d29ya1BrZy5kZWMN CmluZGV4IDI2ODE4OGEuLjI0ZDQ1ZjQgMTAwNjQ0DQotLS0gYS9OZXR3b3JrUGtnL05ldHdvcmtQ a2cuZGVjDQorKysgYi9OZXR3b3JrUGtnL05ldHdvcmtQa2cuZGVjDQpAQCAtMzgsMTAgKzM4LDE3 IEBADQogICBnSVNjc2lDb25maWdHdWlkICAgICAgICAgICAgICA9IHsgMHg0YjQ3ZDYxNiwgMHhh OGQ2LCAweDQ1NTIsIHsgMHg5ZCwgMHg0NCwgMHhjYywgMHhhZCwgMHgyZSwgMHhmLCAweDRjLCAw eGY5fX0NCiANCiAgICMgSW5jbHVkZS9HdWlkL0h0dHBCb290Q29uZmlnSGlpLmgNCiAgIGdIdHRw Qm9vdENvbmZpZ0d1aWQgICAgICAgICAgID0geyAweDRkMjA1ODNhLCAweDc3NjUsIDB4NGU3YSwg eyAweDhhLCAweDY3LCAweGRjLCAweGRlLCAweDc0LCAweGVlLCAweDNlLCAweGM1IH19DQogDQor ICAjIEluY2x1ZGUvR3VpZC9UbHNBdXRoQ29uZmlnSGlpLmgNCisgIGdUbHNBdXRoQ29uZmlnR3Vp ZCAgICAgICAgICAgID0geyAweGIwZWFlNGY4LCAweDlhMDQsIDB4NGM2ZCwgeyAweGE3LCAweDQ4 LCAweDc5LCAweDNkLCAweGFhLCAweGYsIDB4NjUsIDB4ZGYgfX0NCisgIA0KKyAgIyBJbmNsdWRl L0d1aWQvVGxzQXV0aGVudGljYXRpb24uaA0KKyAgZ0VmaVRsc0NhQ2VydGlmaWNhdGVHdWlkICAg ICAgPSB7IDB4ZmQyMzQwRDAsIDB4M2RhYiwgMHg0MzQ5LCB7IDB4YTYsIDB4YzcsIDB4M2IsIDB4 NGYsIDB4MTIsIDB4YjQsIDB4OGUsIDB4YWUgfX0NCisgIA0KKw0KIFtQY2RzRmVhdHVyZUZsYWdd DQogICAjIyBJbmRpY2F0ZXMgaWYgdGhlIElQc2VjIElLRXYyIENlcnRpZmljYXRlIEF1dGhlbnRp Y2F0aW9uIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBub3QuPEJSPjxCUj4NCiAgICMgICBUUlVFICAt IENlcnRpZmljYXRlIEF1dGhlbnRpY2F0aW9uIGZlYXR1cmUgaXMgZW5hYmxlZC48QlI+DQogICAj ICAgRkFMU0UgLSBEb2VzIG5vdCBzdXBwb3J0IENlcnRpZmljYXRlIEF1dGhlbnRpY2F0aW9uLjxC Uj4NCiAgICMgQFByb21wdCBFbmFibGUgSVBzZWMgSUtFdjIgQ2VydGlmaWNhdGUgQXV0aGVudGlj YXRpb24uDQpkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhD b25maWdEeGUuYyBiL05ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhl LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi42NDdiYzJmDQotLS0gL2Rl di9udWxsDQorKysgYi9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4 ZS5jDQpAQCAtMCwwICsxLDEzNSBAQA0KKy8qKiBAZmlsZQ0KKyAgVGhlIERyaXZlckVudHJ5UG9p bnQgZm9yIFRsc0F1dGhDb25maWdEeGUgZHJpdmVyLg0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDE2 LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorDQorICBUaGlz IHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICBhcmUgbGljZW5zZWQg YW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg QlNEIExpY2Vuc2UNCisgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhl IGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCisgIGh0dHA6Ly9vcGVu c291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAuDQorDQorICBUSEUgUFJPR1JBTSBJ UyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywN CisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJ VEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQorDQorKiovDQorDQorI2luY2x1ZGUgIlRsc0F1dGhD b25maWdJbXBsLmgiDQorDQorLyoqDQorICBVbmxvYWRzIGFuIGltYWdlLg0KKw0KKyAgQHBhcmFt ICBJbWFnZUhhbmRsZSAgICAgICAgICAgSGFuZGxlIHRoYXQgaWRlbnRpZmllcyB0aGUgaW1hZ2Ug dG8gYmUgdW5sb2FkZWQuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg aW1hZ2UgaGFzIGJlZW4gdW5sb2FkZWQuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBJbWFnZUhhbmRsZSBpcyBub3QgYSB2YWxpZCBpbWFnZSBoYW5kbGUuDQorDQorKiovDQorRUZJ X1NUQVRVUyANCitFRklBUEkNCitUbHNBdXRoQ29uZmlnRHhlVW5sb2FkICgNCisgIElOIEVGSV9I QU5ETEUgIEltYWdlSGFuZGxlDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCisgIFRMU19BVVRIX0NPTkZJR19QUklWQVRFX0RBVEEgICAqUHJpdmF0 ZURhdGE7DQorDQorICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCisgICAgICAgICAg ICAgICAgICBJbWFnZUhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAmZ0VmaUNhbGxlcklkR3Vp ZCwNCisgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJlByaXZhdGVEYXRhDQorICAgICAgICAg ICAgICAgICAgKTsgIA0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4g U3RhdHVzOyAgDQorICB9DQorICANCisgIEFTU0VSVCAoUHJpdmF0ZURhdGEtPlNpZ25hdHVyZSA9 PSBUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9EQVRBX1NJR05BVFVSRSk7DQorDQorICBnQlMtPlVu aW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCisgICAgICAgICAmSW1hZ2VIYW5k bGUsDQorICAgICAgICAgJmdFZmlDYWxsZXJJZEd1aWQsDQorICAgICAgICAgUHJpdmF0ZURhdGEs DQorICAgICAgICAgTlVMTA0KKyAgICAgICAgICk7DQorICANCisgIFRsc0F1dGhDb25maWdGb3Jt VW5sb2FkIChQcml2YXRlRGF0YSk7DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0K Ky8qKg0KKyAgVGhpcyBpcyB0aGUgZGVjbGFyYXRpb24gb2YgYW4gRUZJIGltYWdlIGVudHJ5IHBv aW50LiBUaGlzIGVudHJ5IHBvaW50IGlzDQorICB0aGUgc2FtZSBmb3IgVUVGSSBBcHBsaWNhdGlv bnMsIFVFRkkgT1MgTG9hZGVycywgYW5kIFVFRkkgRHJpdmVycyBpbmNsdWRpbmcNCisgIGJvdGgg ZGV2aWNlIGRyaXZlcnMgYW5kIGJ1cyBkcml2ZXJzLg0KKw0KKyAgQHBhcmFtICBJbWFnZUhhbmRs ZSAgICAgICAgICAgVGhlIGZpcm13YXJlIGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBVRUZJIGlt YWdlLg0KKyAgQHBhcmFtICBTeXN0ZW1UYWJsZSAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBF RkkgU3lzdGVtIFRhYmxlLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBPdGhlcnMgICAg ICAgICAgICAgICAgQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZC4NCisqKi8NCitFRklfU1RB VFVTDQorRUZJQVBJDQorVGxzQXV0aENvbmZpZ0R4ZURyaXZlckVudHJ5UG9pbnQgKA0KKyAgSU4g RUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQorICBJTiBFRklfU1lTVEVNX1RBQkxFICAq U3lzdGVtVGFibGUNCisgICkNCit7DQorICBFRklfU1RBVFVTICBTdGF0dXM7DQorDQorICBUTFNf QVVUSF9DT05GSUdfUFJJVkFURV9EQVRBICAgKlByaXZhdGVEYXRhOw0KKw0KKyAgUHJpdmF0ZURh dGEgPSBOVUxMOw0KKyAgDQorICAvLw0KKyAgLy8gSWYgYWxyZWFkeSBzdGFydGVkLCByZXR1cm4u DQorICAvLw0KKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAg ICAgIEltYWdlSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICZnRWZpQ2FsbGVySWRHdWlkLA0K KyAgICAgICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAgICAgICAgICAgSW1hZ2VIYW5kbGUs DQorICAgICAgICAgICAgICAgICAgSW1hZ2VIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgRUZJ X09QRU5fUFJPVE9DT0xfVEVTVF9QUk9UT0NPTA0KKyAgICAgICAgICAgICAgICAgICk7DQorICBp ZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gRUZJX0FMUkVBRFlfU1RBUlRF RDsNCisgIH0NCisNCisgIC8vDQorICAvLyBJbml0aWFsaXplIHRoZSBwcml2YXRlIGRhdGEgc3Ry dWN0dXJlLg0KKyAgLy8NCisgIFByaXZhdGVEYXRhID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9m IChUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9EQVRBKSk7DQorICBpZiAoUHJpdmF0ZURhdGEgPT0g TlVMTCkgew0KKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICB9DQorDQorICAv Lw0KKyAgLy8gSW5pdGlhbGl6ZSB0aGUgSElJIGNvbmZpZ3VyYXRpb24gZm9ybS4NCisgIC8vDQor ICBTdGF0dXMgPSBUbHNBdXRoQ29uZmlnRm9ybUluaXQgKFByaXZhdGVEYXRhKTsNCisgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgZ290byBPTl9FUlJPUjsNCisgIH0NCisNCisgIC8v DQorICAvLyBJbnN0YWxsIHByaXZhdGUgR1VJRC4NCisgIC8vICAgIA0KKyAgU3RhdHVzID0gZ0JT LT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KKyAgICAgICAgICAgICAgICAg ICZJbWFnZUhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAmZ0VmaUNhbGxlcklkR3VpZCwNCisg ICAgICAgICAgICAgICAgICBQcml2YXRlRGF0YSwNCisgICAgICAgICAgICAgICAgICBOVUxMDQor ICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAg Z290byBPTl9FUlJPUjsNCisgIH0NCisgIA0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKw0KK09O X0VSUk9SOg0KKyAgVGxzQXV0aENvbmZpZ0Zvcm1VbmxvYWQgKFByaXZhdGVEYXRhKTsNCisgIEZy ZWVQb29sIChQcml2YXRlRGF0YSk7DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCmRpZmYg LS1naXQgYS9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS5pbmYg Yi9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS5pbmYNCm5ldyBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi4xOWYwOTVlDQotLS0gL2Rldi9udWxsDQor KysgYi9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS5pbmYNCkBA IC0wLDAgKzEsNzMgQEANCisjIyBAZmlsZQ0KKyMgIFByb3ZpZGVzIHRoZSBjYXBhYmlsaXR5IHRv IGNvbmZpZ3VyZSBUbHMgQXV0aGVudGljYXRpb24gaW4gYSBzZXR1cCBicm93c2VyDQorIyAgQnkg dGhpcyBtb2R1bGUsIHVzZXIgbWF5IGNoYW5nZSB0aGUgY29udGVudCBvZiBUbHNDYUNlcnRpZmlj YXRlLg0KKyMNCisjIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuPEJSPg0KKyMgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5n IG1hdGVyaWFscw0KKyMgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUg dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQorIyB3aGljaCBhY2NvbXBh bmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkg YmUgZm91bmQgYXQNCisjIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5z ZS5waHANCisjIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5T RSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VO VEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCisjDQorIyMN CisNCitbRGVmaW5lc10NCisgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1 DQorICBCQVNFX05BTUUgICAgICAgICAgICAgICAgID0gVGxzQXV0aENvbmZpZ0R4ZQ0KKyAgTU9E VUxFX1VOSV9GSUxFICAgICAgICAgICA9IFRsc0F1dGhDb25maWdEeGUudW5pDQorICBGSUxFX0dV SUQgICAgICAgICAgICAgICAgID0gN2NhMTAyNGYtZWIxNy0xMWU1LTlkYmEtMjhkMjQ0N2M0ODI5 DQorICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KKyAgVkVSU0lPTl9T VFJJTkcgICAgICAgICAgICA9IDEuMA0KKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICA9IFRs c0F1dGhDb25maWdEeGVEcml2ZXJFbnRyeVBvaW50DQorICBVTkxPQURfSU1BR0UgICAgICAgICAg ICAgID0gVGxzQXV0aENvbmZpZ0R4ZVVubG9hZA0KKw0KKyMNCisjICBWQUxJRF9BUkNISVRFQ1RV UkVTICAgICAgICAgICA9IElBMzIgWDY0DQorIw0KKyAgDQorW1BhY2thZ2VzXQ0KKyAgTWRlUGtn L01kZVBrZy5kZWMNCisgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQorICBOZXR3b3Jr UGtnL05ldHdvcmtQa2cuZGVjDQorDQorW1NvdXJjZXNdDQorICBUbHNBdXRoQ29uZmlnSW1wbC5j DQorICBUbHNBdXRoQ29uZmlnSW1wbC5oDQorICBUbHNBdXRoQ29uZmlnTnZEYXRhLmgNCisgIFRs c0F1dGhDb25maWdEeGUuYw0KKyAgVGxzQXV0aENvbmZpZ0R4ZVN0cmluZ3MudW5pDQorICBUbHNB dXRoQ29uZmlnVmZyLnZmcg0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisgIEJhc2VMaWINCisgIEJh c2VNZW1vcnlMaWINCisgIE1lbW9yeUFsbG9jYXRpb25MaWINCisgIFVlZmlMaWINCisgIFVlZmlC b290U2VydmljZXNUYWJsZUxpYg0KKyAgVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliDQorICBV ZWZpRHJpdmVyRW50cnlQb2ludA0KKyAgRGVidWdMaWINCisgIEhpaUxpYg0KKyAgRGV2aWNlUGF0 aExpYg0KKyAgVWVmaUhpaVNlcnZpY2VzTGliDQorICBGaWxlRXhwbG9yZXJMaWINCisgIFByaW50 TGliDQorICANCitbUHJvdG9jb2xzXQ0KKyAgZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQgICAg ICAgICAgICAgICAgICAgICMjIFBST0RVQ0VTDQorICBnRWZpSGlpQ29uZmlnQWNjZXNzUHJvdG9j b2xHdWlkICAgICAgICAgICAgICAgIyMgUFJPRFVDRVMNCisgIGdFZmlTaW1wbGVGaWxlU3lzdGVt UHJvdG9jb2xHdWlkICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCisNCitbR3Vp ZHNdDQorICBnVGxzQXV0aENvbmZpZ0d1aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMg UFJPRFVDRVMgICMjIEdVSUQNCisgIGdFZmlDZXJ0WDUwOUd1aWQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjIyBDT05TVU1FUyAgIyMgR1VJRCAgIyBJbmRpY2F0ZSB0aGUgY2VydCB0eXBl DQorICBnRWZpSWZyVGlhbm9HdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgQ09O U1VNRVMgICMjIEhJSQ0KKyAgZ0VmaVRsc0NhQ2VydGlmaWNhdGVHdWlkICAgICAgICAgICAgICAg ICAgICAgICMjIFBST0RVQ0VTICAjIyBHVUlEDQorDQorW0RlcGV4XQ0KKyAgZ0VmaUhpaUNvbmZp Z1JvdXRpbmdQcm90b2NvbEd1aWQgIEFORA0KKyAgZ0VmaUhpaURhdGFiYXNlUHJvdG9jb2xHdWlk DQorICANCitbVXNlckV4dGVuc2lvbnMuVGlhbm9Db3JlLiJFeHRyYUZpbGVzIl0NCisgIFRsc0F1 dGhDb25maWdEeGVFeHRyYS51bmkNCmRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL1Rsc0F1dGhDb25m aWdEeGUvVGxzQXV0aENvbmZpZ0R4ZS51bmkgYi9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUv VGxzQXV0aENvbmZpZ0R4ZS51bmkNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw Li5mOTlhMTRmDQotLS0gL2Rldi9udWxsDQorKysgYi9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdE eGUvVGxzQXV0aENvbmZpZ0R4ZS51bmkNCkBAIC0wLDAgKzEsMjEgQEANCisvLyAvKiogQGZpbGUN CisvLyBQcm92aWRlcyB0aGUgY2FwYWJpbGl0eSB0byBjb25maWd1cmUgVGxzIEF1dGhlbnRpY2F0 aW9uIGluIGEgc2V0dXAgYnJvd3Nlcg0KKy8vDQorLy8gQnkgdGhpcyBtb2R1bGUsIHVzZXIgbWF5 IGNoYW5nZSB0aGUgY29udGVudCBvZiBUbHNDYUNlcnRpZmljYXRlLg0KKy8vDQorLy8gQ29weXJp Z2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQorLy8NCisvLyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQor Ly8gYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQorLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0 DQorLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KKy8v IFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAi QVMgSVMiIEJBU0lTLA0KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMg T0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQorLy8NCisvLyAqKi8NCisN CisNCisjc3RyaW5nIFNUUl9NT0RVTEVfQUJTVFJBQ1QgICAgICAgICAgICAgI2xhbmd1YWdlIGVu LVVTICJQcm92aWRlcyB0aGUgY2FwYWJpbGl0eSB0byBjb25maWd1cmUgVGxzIEF1dGhlbnRpY2F0 aW9uIGluIGEgc2V0dXAgYnJvd3NlciINCisNCisjc3RyaW5nIFNUUl9NT0RVTEVfREVTQ1JJUFRJ T04gICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJCeSB0aGlzIG1vZHVsZSwgdXNlciBtYXkgY2hh bmdlIHRoZSBjb250ZW50IG9mIFRsc0NhQ2VydGlmaWNhdGUuIg0KKw0KZGlmZiAtLWdpdCBhL05l dHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnRHhlRXh0cmEudW5pIGIvTmV0 d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdEeGVFeHRyYS51bmkNCm5ldyBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5lZTRjNDlmDQotLS0gL2Rldi9udWxsDQor KysgYi9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZUV4dHJhLnVu aQ0KQEAgLTAsMCArMSwxOSBAQA0KKy8vIC8qKiBAZmlsZQ0KKy8vIFRsc0F1dGhDb25maWdEeGUg TG9jYWxpemVkIFN0cmluZ3MgYW5kIENvbnRlbnQNCisvLw0KKy8vIENvcHlyaWdodCAoYykgMjAx NiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKy8vDQorLy8g VGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKy8vIGFyZSBsaWNl bnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBCU0QgTGljZW5zZQ0KKy8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9u LiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKy8vIGh0dHA6 Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCisvLyBUSEUgUFJPR1JB TSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJ UywNCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5E LCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKy8vDQorLy8gKiovDQorDQorI3N0cmluZyBT VFJfUFJPUEVSVElFU19NT0RVTEVfTkFNRSANCisjbGFuZ3VhZ2UgZW4tVVMgDQorIlRMUyBBdXRo IENvbmZpZyBEWEUiDQorDQorDQpkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmln RHhlL1Rsc0F1dGhDb25maWdEeGVTdHJpbmdzLnVuaSBiL05ldHdvcmtQa2cvVGxzQXV0aENvbmZp Z0R4ZS9UbHNBdXRoQ29uZmlnRHhlU3RyaW5ncy51bmkNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwLi5hOGY3ZTQzDQotLS0gL2Rldi9udWxsDQorKysgYi9OZXR3b3JrUGtnL1Rs c0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0R4ZVN0cmluZ3MudW5pDQpAQCAtMCwwICsxLDM5 IEBADQorLyoqIEBmaWxlDQorICBTdHJpbmcgZGVmaW5pdGlvbnMgZm9yIFRscyBBdXRoZW50aWNh dGlvbiBDb25maWd1cmF0aW9uIGZvcm0uDQorDQorQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KK2FyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFi bGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KK3do aWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUg bGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCitodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMv YnNkLWxpY2Vuc2UucGhwDQorDQorVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhF IEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorV0lUSE9VVCBXQVJSQU5USUVTIE9S IFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4N CisNCisqKi8NCisNCisjbGFuZ2RlZiBlbi1VUyAiRW5nbGlzaCINCisNCisjc3RyaW5nIFNUUl9U TFNfQVVUSF9DT05GSUdfVElUTEUgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAi VGxzIEF1dGggQ29uZmlndXJhdGlvbiINCisjc3RyaW5nIFNUUl9UTFNfQVVUSF9DT05GSUdfSEVM UCAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiUHJlc3MgPEVudGVyPiB0byBz ZWxlY3QgVGxzIEF1dGggQ29uZmlndXJhdGlvbi4iDQorDQorI3N0cmluZyBTVFJfVExTX0FVVEhf Q09ORklHX1NFUlZFUl9DQSAgICAgICAgIAkJICNsYW5ndWFnZSBlbi1VUyAiU2VydmVyIENBIENv bmZpZ3VyYXRpb24iDQorI3N0cmluZyBTVFJfVExTX0FVVEhfQ09ORklHX1NFUlZFUl9DQV9IRUxQ ICAgIAkJICNsYW5ndWFnZSBlbi1VUyAiUHJlc3MgPEVudGVyPiB0byBjb25maWd1cmUgU2VydmVy IENBLiINCisjc3RyaW5nIFNUUl9UTFNfQVVUSF9DT05GSUdfQ0xJRU5UX0NFUlQgICAgICAgICAJ ICNsYW5ndWFnZSBlbi1VUyAiQ2xpZW50IENlcnQgQ29uZmlndXJhdGlvbiINCisjc3RyaW5nIFNU Ul9UTFNfQVVUSF9DT05GSUdfQ0xJRU5UX0NFUlRfSEVMUCAgICAJICNsYW5ndWFnZSBlbi1VUyAi Q2xpZW50IGNlcnQgY29uZmlndXJhdGlvbiBpcyB1bnN1cHBvcnRlZCBjdXJyZW50bHkuIg0KKw0K KyNzdHJpbmcgU1RSX1RMU19BVVRIX0NPTkZJR19FTlJPTExfQ0VSVCAgICAgICAgICAgICAgI2xh bmd1YWdlIGVuLVVTICJFbnJvbGwgQ2VydCIgICAgDQorI3N0cmluZyBTVFJfVExTX0FVVEhfQ09O RklHX0VOUk9MTF9DRVJUX0hFTFAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlByZXNzIDxFbnRl cj4gdG8gZW5yb2xsIGNlcnQuIg0KKyNzdHJpbmcgU1RSX1RMU19BVVRIX0NPTkZJR19ERUxFVEVf Q0VSVCAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJEZWxldGUgQ2VydCIgICAgDQorI3N0 cmluZyBTVFJfVExTX0FVVEhfQ09ORklHX0RFTEVURV9DRVJUX0hFTFAgICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgIlByZXNzIDxFbnRlcj4gdG8gZGVsZXRlIGNlcnQuIg0KKw0KKyNzdHJpbmcgU1RS X1RMU19BVVRIX0NPTkZJR19BRERfQ0VSVF9GSUxFICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVT ICJFbnJvbGwgQ2VydCBVc2luZyBGaWxlIg0KKw0KKyNzdHJpbmcgU1RSX1RMU19BVVRIX0NPTkZJ R19DRVJUX0dVSUQgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJDZXJ0IEdVSUQiDQor I3N0cmluZyBTVFJfVExTX0FVVEhfQ09ORklHX0NFUlRfR1VJRF9IRUxQICAgICAgICAgICAjbGFu Z3VhZ2UgZW4tVVMgIklucHV0IGRpZ2l0IGNoYXJhY3RlciBpbiAxMTExMTExMS0yMjIyLTMzMzMt NDQ0NC0xMjM0NTY3ODkwYWIgZm9ybWF0LiINCisjc3RyaW5nIFNUUl9UTFNfQVVUSF9DT05GSUdf U0FWRV9BTkRfRVhJVCAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiQ29tbWl0IENoYW5nZXMg YW5kIEV4aXQiDQorI3N0cmluZyBTVFJfVExTX0FVVEhfQ09ORklHX05PX1NBVkVfQU5EX0VYSVQg ICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIkRpc2NhcmQgQ2hhbmdlcyBhbmQgRXhpdCINCisNCisj c3RyaW5nIFNUUl9DRVJUX1RZUEVfUENLU19HVUlEICAgICAgICAgICAgICAgICAgICAgICNsYW5n dWFnZSBlbi1VUyAiR1VJRCBmb3IgQ0VSVCINCisNCisjc3RyaW5nIFNUUl9OVUxMICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiIg0KXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlDQpkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmln RHhlL1Rsc0F1dGhDb25maWdJbXBsLmMgYi9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxz QXV0aENvbmZpZ0ltcGwuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjEx MzJjYWMNCi0tLSAvZGV2L251bGwNCisrKyBiL05ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9U bHNBdXRoQ29uZmlnSW1wbC5jDQpAQCAtMCwwICsxLDE4NDEgQEANCisvKiogQGZpbGUNCisgIFRo ZSBNaXNjZWxsYW5lb3VzIFJvdXRpbmVzIGZvciBUbHNBdXRoQ29uZmlnRHhlIGRyaXZlci4NCisN CitDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCisNCitUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxz DQorYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQord2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0 cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0K K2h0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCisNCitUSEUg UFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElT IiBCQVNJUywNCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBL SU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKw0KKyoqLw0KKw0KKyNpbmNsdWRlICJU bHNBdXRoQ29uZmlnSW1wbC5oIg0KKw0KK1ZPSUQgICAgICAgICAgICAgICAgICAgICptU3RhcnRP cENvZGVIYW5kbGUgPSBOVUxMOw0KK1ZPSUQgICAgICAgICAgICAgICAgICAgICptRW5kT3BDb2Rl SGFuZGxlICAgPSBOVUxMOw0KK0VGSV9JRlJfR1VJRF9MQUJFTCAgICAgICptU3RhcnRMYWJlbCAg ICAgICAgPSBOVUxMOw0KK0VGSV9JRlJfR1VJRF9MQUJFTCAgICAgICptRW5kTGFiZWwgICAgICAg ICAgPSBOVUxMOw0KKw0KKw0KK0NIQVIxNiAgICAgICAgICAgICAgICAgIG1UbHNBdXRoQ29uZmln U3RvcmFnZU5hbWVbXSA9IEwiVExTX0FVVEhfQ09ORklHX0lGUl9OVkRBVEEiOw0KKw0KK1RMU19B VVRIX0NPTkZJR19QUklWQVRFX0RBVEEgICAgICAqbVRsc0F1dGhQcml2YXRlRGF0YSA9IE5VTEw7 DQorDQorSElJX1ZFTkRPUl9ERVZJQ0VfUEFUSCAgbVRsc0F1dGhDb25maWdIaWlWZW5kb3JEZXZp Y2VQYXRoID0gew0KKyAgew0KKyAgICB7DQorICAgICAgSEFSRFdBUkVfREVWSUNFX1BBVEgsDQor ICAgICAgSFdfVkVORE9SX0RQLA0KKyAgICAgIHsNCisgICAgICAgIChVSU5UOCkgKHNpemVvZiAo VkVORE9SX0RFVklDRV9QQVRIKSksDQorICAgICAgICAoVUlOVDgpICgoc2l6ZW9mIChWRU5ET1Jf REVWSUNFX1BBVEgpKSA+PiA4KQ0KKyAgICAgIH0NCisgICAgfSwNCisgICAgVExTX0FVVEhfQ09O RklHX0dVSUQNCisgIH0sDQorICB7DQorICAgIEVORF9ERVZJQ0VfUEFUSF9UWVBFLA0KKyAgICBF TkRfRU5USVJFX0RFVklDRV9QQVRIX1NVQlRZUEUsDQorICAgIHsNCisgICAgICAoVUlOVDgpIChF TkRfREVWSUNFX1BBVEhfTEVOR1RIKSwNCisgICAgICAoVUlOVDgpICgoRU5EX0RFVklDRV9QQVRI X0xFTkdUSCkgPj4gOCkNCisgICAgfQ0KKyAgfQ0KK307DQorDQorLy8NCisvLyBQb3NzaWJsZSBE RVItZW5jb2RlZCBjZXJ0aWZpY2F0ZSBmaWxlIHN1ZmZpeGVzLCBlbmQgd2l0aCBOVUxMIHBvaW50 ZXIuDQorLy8NCitDSEFSMTYqIG1EZXJQZW1FbmNvZGVkU3VmZml4W10gPSB7DQorICBMIi5jZXIi LA0KKyAgTCIuZGVyIiwNCisgIEwiLmNydCIsDQorICBMIi5wZW0iLA0KKyAgTlVMTA0KK307DQor DQorLyoqDQorICBUaGlzIGNvZGUgY2hlY2tzIGlmIHRoZSBGaWxlU3VmZml4IGlzIG9uZSBvZiB0 aGUgcG9zc2libGUgREVSL1BFTS1lbmNvZGVkIGNlcnRpZmljYXRlIHN1ZmZpeC4NCisNCisgIEBw YXJhbVtpbl0gRmlsZVN1ZmZpeCAgICAgICAgICAgIFRoZSBzdWZmaXggb2YgdGhlIGlucHV0IGNl cnRpZmljYXRlIGZpbGUNCisNCisgIEByZXR2YWwgICAgVFJVRSAgICAgICAgICAgSXQncyBhIERF Ui9QRU0tZW5jb2RlZCBjZXJ0aWZpY2F0ZS4NCisgIEByZXR2YWwgICAgRkFMU0UgICAgICAgICAg SXQncyBOT1QgYSBERVIvUEVNLWVuY29kZWQgY2VydGlmaWNhdGUuDQorDQorKiovDQorQk9PTEVB Tg0KK0lzRGVyUGVtRW5jb2RlQ2VydGlmaWNhdGUgKA0KKyAgSU4gQ09OU1QgQ0hBUjE2ICAgICAg ICAgKkZpbGVTdWZmaXgNCispDQorew0KKyAgVUlOVE4gICAgIEluZGV4Ow0KKyAgZm9yIChJbmRl eCA9IDA7IG1EZXJQZW1FbmNvZGVkU3VmZml4W0luZGV4XSAhPSBOVUxMOyBJbmRleCsrKSB7DQor ICAgIGlmIChTdHJDbXAgKEZpbGVTdWZmaXgsIG1EZXJQZW1FbmNvZGVkU3VmZml4W0luZGV4XSkg PT0gMCkgew0KKyAgICAgIHJldHVybiBUUlVFOw0KKyAgICB9DQorICB9DQorICByZXR1cm4gRkFM U0U7DQorfQ0KKw0KKy8qKg0KKyAgV29ya2VyIGZ1bmN0aW9uIHRoYXQgcHJpbnRzIGFuIEVGSV9H VUlEIGludG8gc3BlY2lmaWVkIEJ1ZmZlci4NCisNCisgIEBwYXJhbVtpbl0gICAgIEd1aWQgICAg ICAgICAgUG9pbnRlciB0byBHVUlEIHRvIHByaW50Lg0KKyAgQHBhcmFtW2luXSAgICAgQnVmZmVy ICAgICAgICBCdWZmZXIgdG8gcHJpbnQgR3VpZCBpbnRvLg0KKyAgQHBhcmFtW2luXSAgICAgQnVm ZmVyU2l6ZSAgICBTaXplIG9mIEJ1ZmZlci4NCisgIA0KKyAgQHJldHZhbCAgICBOdW1iZXIgb2Yg Y2hhcmFjdGVycyBwcmludGVkLg0KKw0KKyoqLw0KK1VJTlRODQorR3VpZFRvU3RyaW5nICgNCisg IElOICBFRklfR1VJRCAgKkd1aWQsDQorICBJTiAgQ0hBUjE2ICAgICpCdWZmZXIsDQorICBJTiAg VUlOVE4gICAgIEJ1ZmZlclNpemUNCisgICkNCit7DQorICBVSU5UTiBTaXplOw0KKw0KKyAgU2l6 ZSA9IFVuaWNvZGVTUHJpbnQgKA0KKyAgICAgICAgICAgIEJ1ZmZlciwNCisgICAgICAgICAgICBC dWZmZXJTaXplLCANCisgICAgICAgICAgICBMIiUwOHgtJTA0eC0lMDR4LSUwMnglMDJ4LSUwMngl MDJ4JTAyeCUwMnglMDJ4JTAyeCIsDQorICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGExLCAg ICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGEyLA0KKyAg ICAgICAgICAgIChVSU5UTilHdWlkLT5EYXRhMywNCisgICAgICAgICAgICAoVUlOVE4pR3VpZC0+ RGF0YTRbMF0sDQorICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGE0WzFdLA0KKyAgICAgICAg ICAgIChVSU5UTilHdWlkLT5EYXRhNFsyXSwNCisgICAgICAgICAgICAoVUlOVE4pR3VpZC0+RGF0 YTRbM10sDQorICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGE0WzRdLA0KKyAgICAgICAgICAg IChVSU5UTilHdWlkLT5EYXRhNFs1XSwNCisgICAgICAgICAgICAoVUlOVE4pR3VpZC0+RGF0YTRb Nl0sDQorICAgICAgICAgICAgKFVJTlROKUd1aWQtPkRhdGE0WzddDQorICAgICAgICAgICAgKTsN CisNCisgIC8vDQorICAvLyBTUHJpbnQgd2lsbCBudWxsIHRlcm1pbmF0ZSB0aGUgc3RyaW5nLiBU aGUgLTEgc2tpcHMgdGhlIG51bGwNCisgIC8vDQorICByZXR1cm4gU2l6ZSAtIDE7DQorfQ0KKw0K Ky8qKg0KKyAgQ29udmVydCBhIFN0cmluZyB0byBHdWlkIFZhbHVlLg0KKw0KKyAgQHBhcmFtW2lu XSAgIFN0ciAgICAgICAgU3BlY2lmaWVzIHRoZSBTdHJpbmcgdG8gYmUgY29udmVydGVkLg0KKyAg QHBhcmFtW2luXSAgIFN0ckxlbiAgICAgTnVtYmVyIG9mIFVuaWNvZGUgQ2hhcmFjdGVycyBvZiBT dHJpbmcgKGV4Y2x1c2l2ZSBcMCkNCisgIEBwYXJhbVtvdXRdICBHdWlkICAgICAgIFJldHVybiB0 aGUgcmVzdWx0IEd1aWQgdmFsdWUuDQorDQorICBAcmV0dmFsICAgIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwg ICAgRUZJX05PVF9GT1VORCAgICAgICAgIEludmFsaWQgc3RyaW5nLg0KKw0KKyoqLw0KK0VGSV9T VEFUVVMNCitTdHJpbmdUb0d1aWQgKA0KKyAgSU4gICBDSEFSMTYgICAgICAgICAgICpTdHIsIA0K KyAgSU4gICBVSU5UTiAgICAgICAgICAgIFN0ckxlbiwgDQorICBPVVQgIEVGSV9HVUlEICAgICAg ICAgKkd1aWQNCisgICkNCit7DQorICBDSEFSMTYgICAgICAgICAgICAgKlB0ckJ1ZmZlcjsNCisg IENIQVIxNiAgICAgICAgICAgICAqUHRyUG9zaXRpb247DQorICBVSU5UMTYgICAgICAgICAgICAg KkJ1ZmZlcjsNCisgIFVJTlROICAgICAgICAgICAgICBEYXRhOw0KKyAgVUlOVE4gICAgICAgICAg ICAgIEluZGV4Ow0KKyAgVUlOVDE2ICAgICAgICAgICAgIERpZ2l0c1szXTsNCisNCisgIEJ1ZmZl ciA9IChDSEFSMTYgKikgQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChDSEFSMTYpICogKFN0ckxl biArIDEpKTsNCisgIGlmIChCdWZmZXIgPT0gTlVMTCkgew0KKyAgICByZXR1cm4gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQorICB9DQorDQorICBTdHJDcHlTIChCdWZmZXIsIChTdHJMZW4gKyAxKSwg U3RyKTsNCisNCisgIC8vDQorICAvLyBEYXRhMQ0KKyAgLy8NCisgIFB0ckJ1ZmZlciAgICAgICA9 IEJ1ZmZlcjsNCisgIFB0clBvc2l0aW9uICAgICA9IFB0ckJ1ZmZlcjsgDQorICB3aGlsZSAoKlB0 ckJ1ZmZlciAhPSBMJ1wwJykgew0KKyAgICBpZiAoKlB0ckJ1ZmZlciA9PSBMJy0nKSB7DQorICAg ICAgYnJlYWs7DQorICAgIH0NCisgICAgUHRyQnVmZmVyKys7DQorICB9DQorICBpZiAoKlB0ckJ1 ZmZlciA9PSBMJ1wwJykgew0KKyAgICBGcmVlUG9vbCAoQnVmZmVyKTsNCisgICAgcmV0dXJuIEVG SV9OT1RfRk9VTkQ7DQorICB9DQorDQorICAqUHRyQnVmZmVyICAgICAgPSBMJ1wwJzsNCisgIERh dGEgICAgICAgICAgICA9IFN0ckhleFRvVWludG4gKFB0clBvc2l0aW9uKTsNCisgIEd1aWQtPkRh dGExICAgICA9IChVSU5UMzIpRGF0YTsNCisNCisgIC8vDQorICAvLyBEYXRhMg0KKyAgLy8NCisg IFB0ckJ1ZmZlcisrOw0KKyAgUHRyUG9zaXRpb24gICAgID0gUHRyQnVmZmVyOw0KKyAgd2hpbGUg KCpQdHJCdWZmZXIgIT0gTCdcMCcpIHsNCisgICAgaWYgKCpQdHJCdWZmZXIgPT0gTCctJykgew0K KyAgICAgIGJyZWFrOw0KKyAgICB9DQorICAgIFB0ckJ1ZmZlcisrOw0KKyAgfQ0KKyAgaWYgKCpQ dHJCdWZmZXIgPT0gTCdcMCcpIHsNCisgICAgRnJlZVBvb2wgKEJ1ZmZlcik7DQorICAgIHJldHVy biBFRklfTk9UX0ZPVU5EOw0KKyAgfQ0KKyAgKlB0ckJ1ZmZlciAgICAgID0gTCdcMCc7DQorICBE YXRhICAgICAgICAgICAgPSBTdHJIZXhUb1VpbnRuIChQdHJQb3NpdGlvbik7DQorICBHdWlkLT5E YXRhMiAgICAgPSAoVUlOVDE2KURhdGE7DQorDQorICAvLw0KKyAgLy8gRGF0YTMNCisgIC8vDQor ICBQdHJCdWZmZXIrKzsNCisgIFB0clBvc2l0aW9uICAgICA9IFB0ckJ1ZmZlcjsNCisgIHdoaWxl ICgqUHRyQnVmZmVyICE9IEwnXDAnKSB7DQorICAgIGlmICgqUHRyQnVmZmVyID09IEwnLScpIHsN CisgICAgICBicmVhazsNCisgICAgfQ0KKyAgICBQdHJCdWZmZXIrKzsNCisgIH0NCisgIGlmICgq UHRyQnVmZmVyID09IEwnXDAnKSB7DQorICAgIEZyZWVQb29sIChCdWZmZXIpOw0KKyAgICByZXR1 cm4gRUZJX05PVF9GT1VORDsNCisgIH0NCisgICpQdHJCdWZmZXIgICAgICA9IEwnXDAnOw0KKyAg RGF0YSAgICAgICAgICAgID0gU3RySGV4VG9VaW50biAoUHRyUG9zaXRpb24pOw0KKyAgR3VpZC0+ RGF0YTMgICAgID0gKFVJTlQxNilEYXRhOw0KKw0KKyAgLy8NCisgIC8vIERhdGE0WzAuLjFdDQor ICAvLw0KKyAgZm9yICggSW5kZXggPSAwIDsgSW5kZXggPCAyIDsgSW5kZXgrKykgew0KKyAgICBQ dHJCdWZmZXIrKzsNCisgICAgaWYgKCgqUHRyQnVmZmVyID09IEwnXDAnKSB8fCAoICooUHRyQnVm ZmVyICsgMSkgPT0gTCdcMCcpKSB7DQorICAgICAgRnJlZVBvb2wgKEJ1ZmZlcik7DQorICAgICAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQorICAgIH0NCisgICAgRGlnaXRzWzBdICAgICA9ICpQdHJC dWZmZXI7DQorICAgIFB0ckJ1ZmZlcisrOw0KKyAgICBEaWdpdHNbMV0gICAgID0gKlB0ckJ1ZmZl cjsNCisgICAgRGlnaXRzWzJdICAgICA9IEwnXDAnOw0KKyAgICBEYXRhICAgICAgICAgID0gU3Ry SGV4VG9VaW50biAoRGlnaXRzKTsNCisgICAgR3VpZC0+RGF0YTRbSW5kZXhdID0gKFVJTlQ4KURh dGE7DQorICB9DQorDQorICAvLw0KKyAgLy8gc2tpcCB0aGUgJy0nDQorICAvLw0KKyAgUHRyQnVm ZmVyKys7DQorICBpZiAoKCpQdHJCdWZmZXIgIT0gTCctJyApIHx8ICggKlB0ckJ1ZmZlciA9PSBM J1wwJykpIHsNCisgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQorICB9DQorDQorICAvLw0KKyAg Ly8gRGF0YTRbMi4uN10NCisgIC8vDQorICBmb3IgKCA7IEluZGV4IDwgODsgSW5kZXgrKykgew0K KyAgICBQdHJCdWZmZXIrKzsNCisgICAgaWYgKCgqUHRyQnVmZmVyID09IEwnXDAnKSB8fCAoICoo UHRyQnVmZmVyICsgMSkgPT0gTCdcMCcpKSB7DQorICAgICAgRnJlZVBvb2wgKEJ1ZmZlcik7DQor ICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQorICAgIH0NCisgICAgRGlnaXRzWzBdICAgICA9 ICpQdHJCdWZmZXI7DQorICAgIFB0ckJ1ZmZlcisrOw0KKyAgICBEaWdpdHNbMV0gICAgID0gKlB0 ckJ1ZmZlcjsNCisgICAgRGlnaXRzWzJdICAgICA9IEwnXDAnOw0KKyAgICBEYXRhICAgICAgICAg ID0gU3RySGV4VG9VaW50biAoRGlnaXRzKTsNCisgICAgR3VpZC0+RGF0YTRbSW5kZXhdID0gKFVJ TlQ4KURhdGE7DQorICB9DQorDQorICBGcmVlUG9vbCAoQnVmZmVyKTsNCisgIA0KKyAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KK30NCisNCisNCisvKioNCisgIExpc3QgYWxsIGNlcnQgaW4gc3BlY2lm aWVkIGRhdGFiYXNlIGJ5IEdVSUQgaW4gdGhlIHBhZ2UgDQorICBmb3IgdXNlciB0byBzZWxlY3Qg YW5kIGRlbGV0ZSBhcyBuZWVkZWQuDQorDQorICBAcGFyYW1baW5dICAgIFByaXZhdGVEYXRhICAg ICAgICAgTW9kdWxlJ3MgcHJpdmF0ZSBkYXRhLg0KKyAgQHBhcmFtW2luXSAgICBWYXJpYWJsZU5h bWUgICAgICAgIFRoZSB2YXJpYWJsZSBuYW1lIG9mIHRoZSB2ZW5kb3IncyBzaWduYXR1cmUgZGF0 YWJhc2UuDQorICBAcGFyYW1baW5dICAgIFZlbmRvckd1aWQgICAgICAgICAgQSB1bmlxdWUgaWRl bnRpZmllciBmb3IgdGhlIHZlbmRvci4NCisgIEBwYXJhbVtpbl0gICAgTGFiZWxOdW1iZXIgICAg ICAgICBMYWJlbCBudW1iZXIgdG8gaW5zZXJ0IG9wY29kZXMuDQorICBAcGFyYW1baW5dICAgIEZv cm1JZCAgICAgICAgICAgICAgRm9ybSBJRCBvZiBjdXJyZW50IHBhZ2UuDQorICBAcGFyYW1baW5d ICAgIFF1ZXN0aW9uSWRCYXNlICAgICAgQmFzZSBxdWVzdGlvbiBpZCBvZiB0aGUgc2lnbmF0dXJl IGxpc3QuDQorDQorICBAcmV0dmFsICAgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgU3VjY2VzcyB0 byB1cGRhdGUgdGhlIHNpZ25hdHVyZSBsaXN0IHBhZ2UNCisgIEByZXR2YWwgICBFRklfT1VUX09G X1JFU09VUkNFUyAgICBVbmFibGUgdG8gYWxsb2NhdGUgcmVxdWlyZWQgcmVzb3VyY2VzLg0KKw0K KyoqLw0KK0VGSV9TVEFUVVMNCitVcGRhdGVEZWxldGVQYWdlICgNCisgIElOIFRMU19BVVRIX0NP TkZJR19QUklWQVRFX0RBVEEgICAgICpQcml2YXRlLA0KKyAgSU4gQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCisgIElOIEVGSV9HVUlEICAgICAgICAgICAg ICAgICAgICAgICAgICpWZW5kb3JHdWlkLA0KKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWxOdW1iZXIsDQorICBJTiBFRklfRk9STV9JRCAgICAgICAgICAgICAgICAg ICAgICBGb3JtSWQsDQorICBJTiBFRklfUVVFU1RJT05fSUQgICAgICAgICAgICAgICAgICBRdWVz dGlvbklkQmFzZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQorICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgQ2VydENvdW50Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgIEd1aWRJbmRleDsNCisgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAqU3RhcnRPcENv ZGVIYW5kbGU7DQorICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgKkVuZE9wQ29kZUhhbmRs ZTsNCisgIEVGSV9JRlJfR1VJRF9MQUJFTCAgICAgICAgICAqU3RhcnRMYWJlbDsNCisgIEVGSV9J RlJfR1VJRF9MQUJFTCAgICAgICAgICAqRW5kTGFiZWw7DQorICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgRGF0YVNpemU7DQorICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgKkRhdGE7 DQorICBFRklfU0lHTkFUVVJFX0xJU1QgICAgICAgICAgKkNlcnRMaXN0Ow0KKyAgRUZJX1NJR05B VFVSRV9EQVRBICAgICAgICAgICpDZXJ0Ow0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAg IEl0ZW1EYXRhU2l6ZTsNCisgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAqR3VpZFN0cjsN CisgIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICBHdWlkSUQ7DQorICBFRklfU1RSSU5HX0lE ICAgICAgICAgICAgICAgSGVscDsNCisNCisgIERhdGEgICAgID0gTlVMTDsNCisgIENlcnRMaXN0 ID0gTlVMTDsNCisgIENlcnQgICAgID0gTlVMTDsNCisgIEd1aWRTdHIgID0gTlVMTDsNCisgIFN0 YXJ0T3BDb2RlSGFuZGxlID0gTlVMTDsNCisgIEVuZE9wQ29kZUhhbmRsZSAgID0gTlVMTDsNCisN CisgIC8vDQorICAvLyBJbml0aWFsaXplIHRoZSBjb250YWluZXIgZm9yIGR5bmFtaWMgb3Bjb2Rl cy4NCisgIC8vDQorICBTdGFydE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxl ICgpOw0KKyAgaWYgKFN0YXJ0T3BDb2RlSGFuZGxlID09IE5VTEwpIHsNCisgICAgU3RhdHVzID0g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICAgIGdvdG8gT05fRVhJVDsNCisgIH0NCisNCisgIEVu ZE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KKyAgaWYgKEVuZE9w Q29kZUhhbmRsZSA9PSBOVUxMKSB7DQorICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KKyAgICBnb3RvIE9OX0VYSVQ7DQorICB9DQorDQorICAvLw0KKyAgLy8gQ3JlYXRlIEhpaSBF eHRlbmQgTGFiZWwgT3BDb2RlLg0KKyAgLy8NCisgIFN0YXJ0TGFiZWwgPSAoRUZJX0lGUl9HVUlE X0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTdGFydE9wQ29kZUhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KKyAgU3RhcnRMYWJlbC0+RXh0ZW5kT3BD b2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KKyAgU3RhcnRMYWJlbC0+TnVtYmVyICAg ICAgICA9IExhYmVsTnVtYmVyOw0KKw0KKyAgRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVM ICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRW5kT3BDb2RlSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KKyAgRW5kTGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVO RF9PUF9MQUJFTDsNCisgIEVuZExhYmVsLT5OdW1iZXIgICAgICAgID0gTEFCRUxfRU5EOw0KKw0K KyAgLy8NCisgIC8vIFJlYWQgVmFyaWFibGUuDQorICAvLw0KKyAgRGF0YVNpemUgPSAwOw0KKyAg U3RhdHVzID0gZ1JULT5HZXRWYXJpYWJsZSAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkLCBOVUxM LCAmRGF0YVNpemUsIERhdGEpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiBTdGF0dXMg IT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCisgICAgZ290byBPTl9FWElUOw0KKyAgfQ0KKw0K KyAgRGF0YSA9IChVSU5UOCAqKSBBbGxvY2F0ZVplcm9Qb29sIChEYXRhU2l6ZSk7DQorICBpZiAo RGF0YSA9PSBOVUxMKSB7DQorICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KKyAg ICBnb3RvIE9OX0VYSVQ7DQorICB9DQorDQorICBTdGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlIChW YXJpYWJsZU5hbWUsIFZlbmRvckd1aWQsIE5VTEwsICZEYXRhU2l6ZSwgRGF0YSk7DQorICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIGdvdG8gT05fRVhJVDsNCisgIH0NCisNCisgIEd1 aWRTdHIgPSBBbGxvY2F0ZVplcm9Qb29sICgxMDApOw0KKyAgaWYgKEd1aWRTdHIgPT0gTlVMTCkg ew0KKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgICAgZ290byBPTl9FWElU Ow0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIEVudW1lcmF0ZSBhbGwgZGF0YS4NCisgIC8vDQorICBJ dGVtRGF0YVNpemUgPSAoVUlOVDMyKSBEYXRhU2l6ZTsNCisgIENlcnRMaXN0ID0gKEVGSV9TSUdO QVRVUkVfTElTVCAqKSBEYXRhOw0KKyAgR3VpZEluZGV4ID0gMDsNCisNCisgIHdoaWxlICgoSXRl bURhdGFTaXplID4gMCkgJiYgKEl0ZW1EYXRhU2l6ZSA+PSBDZXJ0TGlzdC0+U2lnbmF0dXJlTGlz dFNpemUpKSB7DQorDQorICAgIGlmIChDb21wYXJlR3VpZCAoJkNlcnRMaXN0LT5TaWduYXR1cmVU eXBlLCAmZ0VmaUNlcnRYNTA5R3VpZCkpIHsNCisgICAgICBIZWxwID0gU1RSSU5HX1RPS0VOIChT VFJfQ0VSVF9UWVBFX1BDS1NfR1VJRCk7DQorICAgIH0gZWxzZSB7DQorICAgICAgLy8NCisgICAg ICAvLyBUaGUgc2lnbmF0dXJlIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBpbiBjdXJyZW50IGltcGxl bWVudGF0aW9uLg0KKyAgICAgIC8vDQorICAgICAgSXRlbURhdGFTaXplIC09IENlcnRMaXN0LT5T aWduYXR1cmVMaXN0U2l6ZTsNCisgICAgICBDZXJ0TGlzdCA9IChFRklfU0lHTkFUVVJFX0xJU1Qg KikgKChVSU5UOCAqKSBDZXJ0TGlzdCArIENlcnRMaXN0LT5TaWduYXR1cmVMaXN0U2l6ZSk7DQor ICAgICAgY29udGludWU7DQorICAgIH0NCisNCisgICAgQ2VydENvdW50ICA9IChDZXJ0TGlzdC0+ U2lnbmF0dXJlTGlzdFNpemUgLSBzaXplb2YgKEVGSV9TSUdOQVRVUkVfTElTVCkgLSBDZXJ0TGlz dC0+U2lnbmF0dXJlSGVhZGVyU2l6ZSkgLyBDZXJ0TGlzdC0+U2lnbmF0dXJlU2l6ZTsNCisgICAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ2VydENvdW50OyBJbmRleCsrKSB7DQorICAgICAgQ2Vy dCA9IChFRklfU0lHTkFUVVJFX0RBVEEgKikgKChVSU5UOCAqKSBDZXJ0TGlzdA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZiAoRUZJX1NJR05B VFVSRV9MSVNUKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArIENlcnRMaXN0LT5TaWduYXR1cmVIZWFkZXJTaXplDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICsgSW5kZXggKiBDZXJ0TGlzdC0+U2lnbmF0dXJlU2l6 ZSk7DQorICAgICAgLy8NCisgICAgICAvLyBEaXNwbGF5IEdVSUQgYW5kIGhlbHANCisgICAgICAv Lw0KKyAgICAgIEd1aWRUb1N0cmluZyAoJkNlcnQtPlNpZ25hdHVyZU93bmVyLCBHdWlkU3RyLCAx MDApOw0KKyAgICAgIEd1aWRJRCAgPSBIaWlTZXRTdHJpbmcgKFByaXZhdGUtPlJlZ2lzdGVyZWRI YW5kbGUsIDAsIEd1aWRTdHIsIE5VTEwpOw0KKyAgICAgIEhpaUNyZWF0ZUNoZWNrQm94T3BDb2Rl ICgNCisgICAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlLA0KKyAgICAgICAgKEVGSV9RVUVTVElPTl9J RCkgKFF1ZXN0aW9uSWRCYXNlICsgR3VpZEluZGV4KyspLA0KKyAgICAgICAgMCwNCisgICAgICAg IDAsDQorICAgICAgICBHdWlkSUQsDQorICAgICAgICBIZWxwLA0KKyAgICAgICAgRUZJX0lGUl9G TEFHX0NBTExCQUNLLA0KKyAgICAgICAgMCwNCisgICAgICAgIE5VTEwNCisgICAgICAgICk7DQor ICAgIH0NCisNCisgICAgSXRlbURhdGFTaXplIC09IENlcnRMaXN0LT5TaWduYXR1cmVMaXN0U2l6 ZTsNCisgICAgQ2VydExpc3QgPSAoRUZJX1NJR05BVFVSRV9MSVNUICopICgoVUlOVDggKikgQ2Vy dExpc3QgKyBDZXJ0TGlzdC0+U2lnbmF0dXJlTGlzdFNpemUpOw0KKyAgfQ0KKw0KK09OX0VYSVQ6 DQorICBIaWlVcGRhdGVGb3JtICgNCisgICAgUHJpdmF0ZS0+UmVnaXN0ZXJlZEhhbmRsZSwNCisg ICAgJmdUbHNBdXRoQ29uZmlnR3VpZCwNCisgICAgRm9ybUlkLA0KKyAgICBTdGFydE9wQ29kZUhh bmRsZSwNCisgICAgRW5kT3BDb2RlSGFuZGxlDQorICAgICk7DQorDQorICBpZiAoU3RhcnRPcENv ZGVIYW5kbGUgIT0gTlVMTCkgew0KKyAgICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFydE9wQ29k ZUhhbmRsZSk7DQorICB9DQorDQorICBpZiAoRW5kT3BDb2RlSGFuZGxlICE9IE5VTEwpIHsNCisg ICAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRW5kT3BDb2RlSGFuZGxlKTsNCisgIH0NCisNCisgIGlm IChEYXRhICE9IE5VTEwpIHsNCisgICAgRnJlZVBvb2wgKERhdGEpOw0KKyAgfQ0KKw0KKyAgaWYg KEd1aWRTdHIgIT0gTlVMTCkgew0KKyAgICBGcmVlUG9vbCAoR3VpZFN0cik7DQorICB9DQorDQor ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KKy8qKg0KKyAgRGVsZXRlIG9uZSBlbnRyeSBm cm9tIGNlcnQgZGF0YWJhc2UuDQorDQorICBAcGFyYW1baW5dICAgIFByaXZhdGVEYXRhICAgICAg ICAgTW9kdWxlJ3MgcHJpdmF0ZSBkYXRhLg0KKyAgQHBhcmFtW2luXSAgICBWYXJpYWJsZU5hbWUg ICAgICAgIFRoZSB2YXJpYWJsZSBuYW1lIG9mIHRoZSBkYXRhYmFzZS4NCisgIEBwYXJhbVtpbl0g ICAgVmVuZG9yR3VpZCAgICAgICAgICBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdmVuZG9y Lg0KKyAgQHBhcmFtW2luXSAgICBMYWJlbE51bWJlciAgICAgICAgIExhYmVsIG51bWJlciB0byBp bnNlcnQgb3Bjb2Rlcy4NCisgIEBwYXJhbVtpbl0gICAgRm9ybUlkICAgICAgICAgICAgICBGb3Jt IElEIG9mIGN1cnJlbnQgcGFnZS4NCisgIEBwYXJhbVtpbl0gICAgUXVlc3Rpb25JZEJhc2UgICAg ICBCYXNlIHF1ZXN0aW9uIGlkIG9mIHRoZSBjZXJ0IGxpc3QuDQorICBAcGFyYW1baW5dICAgIERl bGV0ZUluZGV4ICAgICAgICAgQ2VydCBpbmRleCB0byBkZWxldGUuDQorDQorICBAcmV0dmFsICAg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgRGVsZXRlIHNpZ2FudHVyZSBzdWNjZXNzZnVsbHkuDQor ICBAcmV0dmFsICAgRUZJX05PVF9GT1VORCAgICAgICAgICAgQ2FuJ3QgZmluZCB0aGUgc2lnbmF0 dXJlIGl0ZW0sDQorICBAcmV0dmFsICAgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgQ291bGQgbm90 IGFsbG9jYXRlIG5lZWRlZCByZXNvdXJjZXMuDQorKiovDQorRUZJX1NUQVRVUw0KK0RlbGV0ZUNl cnQgKA0KKyAgSU4gVExTX0FVVEhfQ09ORklHX1BSSVZBVEVfREFUQSAgICAgKlByaXZhdGUsDQor ICBJTiBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAqVmFyaWFibGVOYW1lLA0KKyAg SU4gRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgKlZlbmRvckd1aWQsDQorICBJTiBV SU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbE51bWJlciwNCisgIElOIEVGSV9G T1JNX0lEICAgICAgICAgICAgICAgICAgICAgIEZvcm1JZCwNCisgIElOIEVGSV9RVUVTVElPTl9J RCAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSWRCYXNlLA0KKyAgSU4gVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGVsZXRlSW5kZXgNCisgICkNCit7DQorICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIERh dGFTaXplOw0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICpEYXRhOw0KKyAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICpPbGREYXRhOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgIEF0dHI7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQorICBF RklfU0lHTkFUVVJFX0xJU1QgICAgICAgICAgKkNlcnRMaXN0Ow0KKyAgRUZJX1NJR05BVFVSRV9M SVNUICAgICAgICAgICpOZXdDZXJ0TGlzdDsNCisgIEVGSV9TSUdOQVRVUkVfREFUQSAgICAgICAg ICAqQ2VydDsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBDZXJ0Q291bnQ7DQorICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0Ow0KKyAgQk9PTEVBTiAgICAgICAgICAg ICAgICAgICAgIElzSXRlbUZvdW5kOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgIEl0 ZW1EYXRhU2l6ZTsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBHdWlkSW5kZXg7DQor DQorICBEYXRhICAgICAgICAgICAgPSBOVUxMOw0KKyAgT2xkRGF0YSAgICAgICAgID0gTlVMTDsN CisgIENlcnRMaXN0ICAgICAgICA9IE5VTEw7DQorICBDZXJ0ICAgICAgICAgICAgPSBOVUxMOw0K KyAgQXR0ciAgICAgICAgICAgID0gMDsNCisNCisgIC8vDQorICAvLyBHZXQgb3JpZ2luYWwgc2ln bmF0dXJlIGxpc3QgZGF0YS4NCisgIC8vDQorICBEYXRhU2l6ZSA9IDA7DQorICBTdGF0dXMgPSBn UlQtPkdldFZhcmlhYmxlIChWYXJpYWJsZU5hbWUsIFZlbmRvckd1aWQsIE5VTEwsICZEYXRhU2l6 ZSwgTlVMTCk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpICYmIFN0YXR1cyAhPSBFRklfQlVG RkVSX1RPT19TTUFMTCkgew0KKyAgICBnb3RvIE9OX0VYSVQ7DQorICB9DQorDQorICBPbGREYXRh ID0gKFVJTlQ4ICopIEFsbG9jYXRlWmVyb1Bvb2wgKERhdGFTaXplKTsNCisgIGlmIChPbGREYXRh ID09IE5VTEwpIHsNCisgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICAgIGdv dG8gT05fRVhJVDsNCisgIH0NCisNCisgIFN0YXR1cyA9IGdSVC0+R2V0VmFyaWFibGUgKFZhcmlh YmxlTmFtZSwgVmVuZG9yR3VpZCwgJkF0dHIsICZEYXRhU2l6ZSwgT2xkRGF0YSk7DQorICBpZiAo RUZJX0VSUk9SKFN0YXR1cykpIHsNCisgICAgZ290byBPTl9FWElUOw0KKyAgfQ0KKw0KKyAgLy8N CisgIC8vIEFsbG9jYXRlIHNwYWNlIGZvciBuZXcgdmFyaWFibGUuDQorICAvLw0KKyAgRGF0YSA9 IChVSU5UOCopIEFsbG9jYXRlWmVyb1Bvb2wgKERhdGFTaXplKTsNCisgIGlmIChEYXRhID09IE5V TEwpIHsNCisgICAgU3RhdHVzICA9ICBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgICAgZ290byBP Tl9FWElUOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIEVudW1lcmF0ZSBhbGwgZGF0YSBhbmQgZXJh c2luZyB0aGUgdGFyZ2V0IGl0ZW0uDQorICAvLw0KKyAgSXNJdGVtRm91bmQgPSBGQUxTRTsNCisg IEl0ZW1EYXRhU2l6ZSA9IChVSU5UMzIpIERhdGFTaXplOw0KKyAgQ2VydExpc3QgPSAoRUZJX1NJ R05BVFVSRV9MSVNUICopIE9sZERhdGE7DQorICBPZmZzZXQgPSAwOw0KKyAgR3VpZEluZGV4ID0g MDsNCisgIHdoaWxlICgoSXRlbURhdGFTaXplID4gMCkgJiYgKEl0ZW1EYXRhU2l6ZSA+PSBDZXJ0 TGlzdC0+U2lnbmF0dXJlTGlzdFNpemUpKSB7DQorICAgIGlmIChDb21wYXJlR3VpZCAoJkNlcnRM aXN0LT5TaWduYXR1cmVUeXBlLCAmZ0VmaUNlcnRYNTA5R3VpZCkpIHsNCisgICAgICAvLw0KKyAg ICAgIC8vIENvcHkgRUZJX1NJR05BVFVSRV9MSVNUIGhlYWRlciB0aGVuIGNhbGN1bGF0ZSB0aGUg c2lnbmF0dXJlIGNvdW50IGluIHRoaXMgbGlzdC4NCisgICAgICAvLw0KKyAgICAgIENvcHlNZW0g KERhdGEgKyBPZmZzZXQsIENlcnRMaXN0LCAoc2l6ZW9mKEVGSV9TSUdOQVRVUkVfTElTVCkgKyBD ZXJ0TGlzdC0+U2lnbmF0dXJlSGVhZGVyU2l6ZSkpOw0KKyAgICAgIE5ld0NlcnRMaXN0ID0gKEVG SV9TSUdOQVRVUkVfTElTVCopIChEYXRhICsgT2Zmc2V0KTsNCisgICAgICBPZmZzZXQgKz0gKHNp emVvZihFRklfU0lHTkFUVVJFX0xJU1QpICsgQ2VydExpc3QtPlNpZ25hdHVyZUhlYWRlclNpemUp Ow0KKyAgICAgIENlcnQgICAgICA9IChFRklfU0lHTkFUVVJFX0RBVEEgKikgKChVSU5UOCAqKSBD ZXJ0TGlzdCArIHNpemVvZiAoRUZJX1NJR05BVFVSRV9MSVNUKSArIENlcnRMaXN0LT5TaWduYXR1 cmVIZWFkZXJTaXplKTsNCisgICAgICBDZXJ0Q291bnQgID0gKENlcnRMaXN0LT5TaWduYXR1cmVM aXN0U2l6ZSAtIHNpemVvZiAoRUZJX1NJR05BVFVSRV9MSVNUKSAtIENlcnRMaXN0LT5TaWduYXR1 cmVIZWFkZXJTaXplKSAvIENlcnRMaXN0LT5TaWduYXR1cmVTaXplOw0KKyAgICAgIGZvciAoSW5k ZXggPSAwOyBJbmRleCA8IENlcnRDb3VudDsgSW5kZXgrKykgew0KKyAgICAgICAgaWYgKEd1aWRJ bmRleCA9PSBEZWxldGVJbmRleCkgew0KKyAgICAgICAgICAvLw0KKyAgICAgICAgICAvLyBGaW5k IGl0ISBTa2lwIGl0IQ0KKyAgICAgICAgICAvLw0KKyAgICAgICAgICBOZXdDZXJ0TGlzdC0+U2ln bmF0dXJlTGlzdFNpemUgLT0gQ2VydExpc3QtPlNpZ25hdHVyZVNpemU7DQorICAgICAgICAgIElz SXRlbUZvdW5kID0gVFJVRTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgIC8vDQorICAg ICAgICAgIC8vIFRoaXMgaXRlbSBkb2Vzbid0IG1hdGNoLiBDb3B5IGl0IHRvIHRoZSBEYXRhIGJ1 ZmZlci4NCisgICAgICAgICAgLy8NCisgICAgICAgICAgQ29weU1lbSAoRGF0YSArIE9mZnNldCwg KFVJTlQ4KikoQ2VydCksIENlcnRMaXN0LT5TaWduYXR1cmVTaXplKTsNCisgICAgICAgICAgT2Zm c2V0ICs9IENlcnRMaXN0LT5TaWduYXR1cmVTaXplOw0KKyAgICAgICAgfQ0KKyAgICAgICAgR3Vp ZEluZGV4Kys7DQorICAgICAgICBDZXJ0ID0gKEVGSV9TSUdOQVRVUkVfREFUQSAqKSAoKFVJTlQ4 ICopIENlcnQgKyBDZXJ0TGlzdC0+U2lnbmF0dXJlU2l6ZSk7DQorICAgICAgfQ0KKyAgICB9IGVs c2Ugew0KKyAgICAgIC8vDQorICAgICAgLy8gVGhpcyBMaXN0IGRvZXNuJ3QgbWF0Y2guIEp1c3Qg Y29weSBpdCB0byB0aGUgRGF0YSBidWZmZXIuDQorICAgICAgLy8NCisgICAgICBDb3B5TWVtIChE YXRhICsgT2Zmc2V0LCAoVUlOVDgqKShDZXJ0TGlzdCksIENlcnRMaXN0LT5TaWduYXR1cmVMaXN0 U2l6ZSk7DQorICAgICAgT2Zmc2V0ICs9IENlcnRMaXN0LT5TaWduYXR1cmVMaXN0U2l6ZTsNCisg ICAgfQ0KKw0KKyAgICBJdGVtRGF0YVNpemUgLT0gQ2VydExpc3QtPlNpZ25hdHVyZUxpc3RTaXpl Ow0KKyAgICBDZXJ0TGlzdCA9IChFRklfU0lHTkFUVVJFX0xJU1QgKikgKChVSU5UOCAqKSBDZXJ0 TGlzdCArIENlcnRMaXN0LT5TaWduYXR1cmVMaXN0U2l6ZSk7DQorICB9DQorDQorICBpZiAoIUlz SXRlbUZvdW5kKSB7DQorICAgIC8vDQorICAgIC8vIERvZXNuJ3QgZmluZCB0aGUgc2lnbmF0dXJl IEl0ZW0hDQorICAgIC8vDQorICAgIFN0YXR1cyA9IEVGSV9OT1RfRk9VTkQ7DQorICAgIGdvdG8g T05fRVhJVDsNCisgIH0NCisNCisgIC8vDQorICAvLyBEZWxldGUgdGhlIEVGSV9TSUdOQVRVUkVf TElTVCBoZWFkZXIgaWYgdGhlcmUgaXMgbm8gc2lnbmF0dXJlIGluIHRoZSBsaXN0Lg0KKyAgLy8N CisgIEl0ZW1EYXRhU2l6ZSA9IE9mZnNldDsNCisgIENlcnRMaXN0ID0gKEVGSV9TSUdOQVRVUkVf TElTVCAqKSBEYXRhOw0KKyAgT2Zmc2V0ID0gMDsNCisgIFplcm9NZW0gKE9sZERhdGEsIEl0ZW1E YXRhU2l6ZSk7DQorICB3aGlsZSAoKEl0ZW1EYXRhU2l6ZSA+IDApICYmIChJdGVtRGF0YVNpemUg Pj0gQ2VydExpc3QtPlNpZ25hdHVyZUxpc3RTaXplKSkgew0KKyAgICBDZXJ0Q291bnQgID0gKENl cnRMaXN0LT5TaWduYXR1cmVMaXN0U2l6ZSAtIHNpemVvZiAoRUZJX1NJR05BVFVSRV9MSVNUKSAt IENlcnRMaXN0LT5TaWduYXR1cmVIZWFkZXJTaXplKSAvIENlcnRMaXN0LT5TaWduYXR1cmVTaXpl Ow0KKyAgICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgICAgQ2VydENvdW50ID0gJXhcbiIsIENl cnRDb3VudCkpOw0KKyAgICBpZiAoQ2VydENvdW50ICE9IDApIHsNCisgICAgICBDb3B5TWVtIChP bGREYXRhICsgT2Zmc2V0LCAoVUlOVDgqKShDZXJ0TGlzdCksIENlcnRMaXN0LT5TaWduYXR1cmVM aXN0U2l6ZSk7DQorICAgICAgT2Zmc2V0ICs9IENlcnRMaXN0LT5TaWduYXR1cmVMaXN0U2l6ZTsN CisgICAgfQ0KKyAgICBJdGVtRGF0YVNpemUgLT0gQ2VydExpc3QtPlNpZ25hdHVyZUxpc3RTaXpl Ow0KKyAgICBDZXJ0TGlzdCA9IChFRklfU0lHTkFUVVJFX0xJU1QgKikgKChVSU5UOCAqKSBDZXJ0 TGlzdCArIENlcnRMaXN0LT5TaWduYXR1cmVMaXN0U2l6ZSk7DQorICB9DQorDQorICBEYXRhU2l6 ZSA9IE9mZnNldDsNCisNCisgIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUoDQorICAgICAgICAg ICAgICAgICAgVmFyaWFibGVOYW1lLA0KKyAgICAgICAgICAgICAgICAgIFZlbmRvckd1aWQsDQor ICAgICAgICAgICAgICAgICAgQXR0ciwNCisgICAgICAgICAgICAgICAgICBEYXRhU2l6ZSwNCisg ICAgICAgICAgICAgICAgICBPbGREYXRhDQorICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZhaWxlZCB0 byBzZXQgdmFyaWFibGUsIFN0YXR1cyA9ICVyXG4iLCBTdGF0dXMpKTsNCisgICAgZ290byBPTl9F WElUOw0KKyAgfQ0KKw0KK09OX0VYSVQ6DQorICBpZiAoRGF0YSAhPSBOVUxMKSB7DQorICAgIEZy ZWVQb29sKERhdGEpOw0KKyAgfQ0KKw0KKyAgaWYgKE9sZERhdGEgIT0gTlVMTCkgew0KKyAgICBG cmVlUG9vbChPbGREYXRhKTsNCisgIH0NCisNCisgIHJldHVybiBVcGRhdGVEZWxldGVQYWdlICgN CisgICAgICAgICAgIFByaXZhdGUsDQorICAgICAgICAgICBWYXJpYWJsZU5hbWUsDQorICAgICAg ICAgICBWZW5kb3JHdWlkLA0KKyAgICAgICAgICAgTGFiZWxOdW1iZXIsDQorICAgICAgICAgICBG b3JtSWQsDQorICAgICAgICAgICBRdWVzdGlvbklkQmFzZQ0KKyAgICAgICAgICAgKTsNCit9DQor DQorDQorLyoqDQorICBDbG9zZSBhbiBvcGVuIGZpbGUgaGFuZGxlLg0KKw0KKyAgQHBhcmFtW2lu XSBGaWxlSGFuZGxlICAgICAgICAgICBUaGUgZmlsZSBoYW5kbGUgdG8gY2xvc2UuDQorICANCisq Ki8NCitWT0lEDQorQ2xvc2VGaWxlICgNCisgIElOIEVGSV9GSUxFX0hBTkRMRSAgIEZpbGVIYW5k bGUNCisgICkNCit7DQorICBpZiAoRmlsZUhhbmRsZSAhPSBOVUxMKSB7DQorICAgIEZpbGVIYW5k bGUtPkNsb3NlIChGaWxlSGFuZGxlKTsgIA0KKyAgfQ0KK30NCisNCisvKioNCisgIFJlYWQgZmls ZSBjb250ZW50IGludG8gQnVmZmVyUHRyLCB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGUgYnVmZmVy IA0KKyAgaXMgKkZpbGVTaXplIHBsdXMgQWRkdGlvbkFsbG9jYXRlU2l6ZS4NCisNCisgIEBwYXJh bVtpbl0gICAgICAgRmlsZUhhbmRsZSAgICAgICAgICAgIFRoZSBmaWxlIHRvIGJlIHJlYWQuDQor ICBAcGFyYW1baW4sIG91dF0gIEJ1ZmZlclB0ciAgICAgICAgICAgICBQb2ludGVycyB0byB0aGUg cG9pbnRlciBvZiBhbGxvY2F0ZWQgYnVmZmVyLg0KKyAgQHBhcmFtW291dF0gICAgICBGaWxlU2l6 ZSAgICAgICAgICAgICAgU2l6ZSBvZiBpbnB1dCBmaWxlDQorICBAcGFyYW1baW5dICAgICAgIEFk ZHRpb25BbGxvY2F0ZVNpemUgICBBZGR0aW9uIHNpemUgdGhlIGJ1ZmZlciBuZWVkIHRvIGJlIGFs bG9jYXRlZC4gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBj YXNlIHRoZSBidWZmZXIgbmVlZCB0byBjb250YWluIG90aGVycyBiZXNpZGVzIHRoZSBmaWxlIGNv bnRlbnQuDQorICANCisgIEByZXR2YWwgICBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgIFRo ZSBmaWxlIHdhcyByZWFkIGludG8gdGhlIGJ1ZmZlci4NCisgIEByZXR2YWwgICBFRklfSU5WQUxJ RF9QQVJBTUVURVIgICAgICAgIEEgcGFyYW1ldGVyIHdhcyBpbnZhbGlkLg0KKyAgQHJldHZhbCAg IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICAgICAgQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQu DQorICBAcmV0dmFsICAgb3RoZXJzICAgICAgICAgICAgICAgICAgICAgICBVbmV4cGVjdGVkIGVy cm9yLg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitSZWFkRmlsZUNvbnRlbnQgKA0KKyAgSU4gICAg ICBFRklfRklMRV9IQU5ETEUgICAgICAgICAgIEZpbGVIYW5kbGUsDQorICBJTiBPVVQgIFZPSUQg ICAgICAgICAgICAgICAgICAgICAgKipCdWZmZXJQdHIsDQorICAgICBPVVQgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgKkZpbGVTaXplLA0KKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgIEFkZHRpb25BbGxvY2F0ZVNpemUNCisgICkNCisNCit7DQorICBVSU5UTiAgICAgIEJ1 ZmZlclNpemU7DQorICBVSU5UNjQgICAgIFNvdXJjZUZpbGVTaXplOw0KKyAgVk9JRCAgICAgICAq QnVmZmVyOw0KKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQorDQorICBpZiAoKEZpbGVIYW5kbGUgPT0g TlVMTCkgfHwgKEZpbGVTaXplID09IE5VTEwpKSB7DQorICAgIHJldHVybiBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQorICB9DQorDQorICBCdWZmZXIgPSBOVUxMOw0KKw0KKyAgLy8NCisgIC8vIEdl dCB0aGUgZmlsZSBzaXplDQorICAvLw0KKyAgU3RhdHVzID0gRmlsZUhhbmRsZS0+U2V0UG9zaXRp b24gKEZpbGVIYW5kbGUsIChVSU5UNjQpIC0xKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCisgICAgZ290byBPTl9FWElUOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gRmlsZUhhbmRsZS0+ R2V0UG9zaXRpb24gKEZpbGVIYW5kbGUsICZTb3VyY2VGaWxlU2l6ZSk7DQorICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQorICAgIGdvdG8gT05fRVhJVDsNCisgIH0NCisgIA0KKyAgU3RhdHVz ID0gRmlsZUhhbmRsZS0+U2V0UG9zaXRpb24gKEZpbGVIYW5kbGUsIDApOw0KKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KKyAgICBnb3RvIE9OX0VYSVQ7DQorICB9DQorDQorICBCdWZmZXJT aXplID0gKFVJTlROKSBTb3VyY2VGaWxlU2l6ZSArIEFkZHRpb25BbGxvY2F0ZVNpemU7DQorICBC dWZmZXIgPSAgQWxsb2NhdGVaZXJvUG9vbChCdWZmZXJTaXplKTsNCisgIGlmIChCdWZmZXIgPT0g TlVMTCkgew0KKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICB9DQorDQorICBC dWZmZXJTaXplID0gKFVJTlROKSBTb3VyY2VGaWxlU2l6ZTsNCisgICpGaWxlU2l6ZSAgPSBCdWZm ZXJTaXplOw0KKw0KKyAgU3RhdHVzID0gRmlsZUhhbmRsZS0+UmVhZCAoRmlsZUhhbmRsZSwgJkJ1 ZmZlclNpemUsIEJ1ZmZlcik7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IEJ1ZmZlclNp emUgIT0gKkZpbGVTaXplKSB7DQorICAgIEZyZWVQb29sIChCdWZmZXIpOw0KKyAgICBCdWZmZXIg PSBOVUxMOw0KKyAgICBTdGF0dXMgID0gRUZJX0JBRF9CVUZGRVJfU0laRTsNCisgICAgZ290byBP Tl9FWElUOw0KKyAgfQ0KKw0KK09OX0VYSVQ6DQorICANCisgICpCdWZmZXJQdHIgPSBCdWZmZXI7 DQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisvKioNCisgIFRoaXMgZnVuY3Rpb24gd2lsbCBv cGVuIGEgZmlsZSBvciBkaXJlY3RvcnkgcmVmZXJlbmNlZCBieSBEZXZpY2VQYXRoLg0KKw0KKyAg VGhpcyBmdW5jdGlvbiBvcGVucyBhIGZpbGUgd2l0aCB0aGUgb3BlbiBtb2RlIGFjY29yZGluZyB0 byB0aGUgZmlsZSBwYXRoLiBUaGUNCisgIEF0dHJpYnV0ZXMgaXMgdmFsaWQgb25seSBmb3IgRUZJ X0ZJTEVfTU9ERV9DUkVBVEUuDQorDQorICBAcGFyYW1baW4sIG91dF0gIEZpbGVQYXRoICAgICAg ICBPbiBpbnB1dCwgdGhlIGRldmljZSBwYXRoIHRvIHRoZSBmaWxlLg0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgcmVtYWluaW5nIGRldmljZSBwYXRo Lg0KKyAgQHBhcmFtW291dF0gICAgICBGaWxlSGFuZGxlICAgICAgUG9pbnRlciB0byB0aGUgZmls ZSBoYW5kbGUuDQorICBAcGFyYW1baW5dICAgICAgIE9wZW5Nb2RlICAgICAgICBUaGUgbW9kZSB0 byBvcGVuIHRoZSBmaWxlIHdpdGguDQorICBAcGFyYW1baW5dICAgICAgIEF0dHJpYnV0ZXMgICAg ICBUaGUgZmlsZSdzIGZpbGUgYXR0cmlidXRlcy4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICAgIFRoZSBpbmZvcm1hdGlvbiB3YXMgc2V0Lg0KKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgICAgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZh bHVlLg0KKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICAgQ291bGQgbm90IG9wZW4g dGhlIGZpbGUgcGF0aC4NCisgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgIFRoZSBz cGVjaWZpZWQgZmlsZSBjb3VsZCBub3QgYmUgZm91bmQgb24gdGhlDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugb3IgdGhlIGZpbGUgc3lzdGVtIGNvdWxkIG5vdCBi ZSBmb3VuZCBvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRldmlj ZS4NCisgIEByZXR2YWwgRUZJX05PX01FRElBICAgICAgICAgICAgIFRoZSBkZXZpY2UgaGFzIG5v IG1lZGl1bS4NCisgIEByZXR2YWwgRUZJX01FRElBX0NIQU5HRUQgICAgICAgIFRoZSBkZXZpY2Ug aGFzIGEgZGlmZmVyZW50IG1lZGl1bSBpbiBpdCBvciB0aGUNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1lZGl1bSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLg0KKyAgQHJldHZh bCBFRklfREVWSUNFX0VSUk9SICAgICAgICAgVGhlIGRldmljZSByZXBvcnRlZCBhbiBlcnJvci4N CisgIEByZXR2YWwgRUZJX1ZPTFVNRV9DT1JSVVBURUQgICAgIFRoZSBmaWxlIHN5c3RlbSBzdHJ1 Y3R1cmVzIGFyZSBjb3JydXB0ZWQuDQorICBAcmV0dmFsIEVGSV9XUklURV9QUk9URUNURUQgICAg ICBUaGUgZmlsZSBvciBtZWRpdW0gaXMgd3JpdGUgcHJvdGVjdGVkLg0KKyAgQHJldHZhbCBFRklf QUNDRVNTX0RFTklFRCAgICAgICAgVGhlIGZpbGUgd2FzIG9wZW5lZCByZWFkIG9ubHkuDQorICBA cmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICBOb3QgZW5vdWdoIHJlc291cmNlcyB3ZXJl IGF2YWlsYWJsZSB0byBvcGVuIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmlsZS4NCisgIEByZXR2YWwgRUZJX1ZPTFVNRV9GVUxMICAgICAgICAgIFRoZSB2b2x1bWUg aXMgZnVsbC4NCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorT3BlbkZpbGVCeURldmljZVBh dGggKA0KKyAgSU4gT1VUIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKipGaWxlUGF0aCwN CisgIE9VVCBFRklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICpGaWxlSGFuZGxlLA0KKyAg SU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3Blbk1vZGUsDQorICBJTiBVSU5U NjQgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzDQorICApDQorew0KKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfU0lNUExFX0ZJTEVf U1lTVEVNX1BST1RPQ09MICpFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2w7DQorICBFRklfRklM RV9QUk9UT0NPTCAgICAgICAgICAgICAgICpIYW5kbGUxOw0KKyAgRUZJX0ZJTEVfUFJPVE9DT0wg ICAgICAgICAgICAgICAqSGFuZGxlMjsNCisgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg ICAgRGV2aWNlSGFuZGxlOw0KKw0KKyAgaWYgKChGaWxlUGF0aCA9PSBOVUxMIHx8IEZpbGVIYW5k bGUgPT0gTlVMTCkpIHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0N CisNCisgIFN0YXR1cyA9IGdCUy0+TG9jYXRlRGV2aWNlUGF0aCAoDQorICAgICAgICAgICAgICAg ICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAg IEZpbGVQYXRoLA0KKyAgICAgICAgICAgICAgICAgICZEZXZpY2VIYW5kbGUNCisgICAgICAgICAg ICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3Rh dHVzOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2woDQorICAgICAgICAg ICAgICAgICAgRGV2aWNlSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICZnRWZpU2ltcGxlRmls ZVN5c3RlbVByb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICAoVk9JRCoqKSZFZmlTaW1w bGVGaWxlU3lzdGVtUHJvdG9jb2wsDQorICAgICAgICAgICAgICAgICAgZ0ltYWdlSGFuZGxlLA0K KyAgICAgICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJP VE9DT0xfR0VUX1BST1RPQ09MDQorICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIFN0YXR1cyA9 IEVmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbC0+T3BlblZvbHVtZShFZmlTaW1wbGVGaWxlU3lz dGVtUHJvdG9jb2wsICZIYW5kbGUxKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisg ICAgRmlsZUhhbmRsZSA9IE5VTEw7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAv Lw0KKyAgLy8gZ28gZG93biBkaXJlY3RvcmllcyBvbmUgbm9kZSBhdCBhIHRpbWUuDQorICAvLw0K KyAgd2hpbGUgKCFJc0RldmljZVBhdGhFbmQgKCpGaWxlUGF0aCkpIHsNCisgICAgLy8NCisgICAg Ly8gRm9yIGZpbGUgc3lzdGVtIGFjY2VzcyBlYWNoIG5vZGUgc2hvdWxkIGJlIGEgZmlsZSBwYXRo IGNvbXBvbmVudA0KKyAgICAvLw0KKyAgICBpZiAoRGV2aWNlUGF0aFR5cGUgICAgKCpGaWxlUGF0 aCkgIT0gTUVESUFfREVWSUNFX1BBVEggfHwNCisgICAgICAgIERldmljZVBhdGhTdWJUeXBlICgq RmlsZVBhdGgpICE9IE1FRElBX0ZJTEVQQVRIX0RQDQorICAgICAgICkgew0KKyAgICAgIEZpbGVI YW5kbGUgPSBOVUxMOw0KKyAgICAgIHJldHVybiAoRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCisg ICAgfQ0KKyAgICAvLw0KKyAgICAvLyBPcGVuIHRoaXMgZmlsZSBwYXRoIG5vZGUNCisgICAgLy8N CisgICAgSGFuZGxlMiAgPSBIYW5kbGUxOw0KKyAgICBIYW5kbGUxID0gTlVMTDsNCisNCisgICAg Ly8NCisgICAgLy8gVHJ5IHRvIHRlc3Qgb3BlbmluZyBhbiBleGlzdGluZyBmaWxlDQorICAgIC8v DQorICAgIFN0YXR1cyA9IEhhbmRsZTItPk9wZW4gKA0KKyAgICAgICAgICAgICAgICAgICAgICAg IEhhbmRsZTIsDQorICAgICAgICAgICAgICAgICAgICAgICAgJkhhbmRsZTEsDQorICAgICAgICAg ICAgICAgICAgICAgICAgKChGSUxFUEFUSF9ERVZJQ0VfUEFUSCopKkZpbGVQYXRoKS0+UGF0aE5h bWUsDQorICAgICAgICAgICAgICAgICAgICAgICAgT3Blbk1vZGUgJn5FRklfRklMRV9NT0RFX0NS RUFURSwNCisgICAgICAgICAgICAgICAgICAgICAgICAwDQorICAgICAgICAgICAgICAgICAgICAg ICAgKTsNCisNCisgICAgLy8NCisgICAgLy8gc2VlIGlmIHRoZSBlcnJvciB3YXMgdGhhdCBpdCBu ZWVkcyB0byBiZSBjcmVhdGVkDQorICAgIC8vDQorICAgIGlmICgoRUZJX0VSUk9SIChTdGF0dXMp KSAmJiAoT3Blbk1vZGUgIT0gKE9wZW5Nb2RlICZ+RUZJX0ZJTEVfTU9ERV9DUkVBVEUpKSkgew0K KyAgICAgIFN0YXR1cyA9IEhhbmRsZTItPk9wZW4gKA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgSGFuZGxlMiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICZIYW5kbGUxLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgKChGSUxFUEFUSF9ERVZJQ0VfUEFUSCopKkZpbGVQYXRoKS0+ UGF0aE5hbWUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuTW9kZSwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICk7DQorICAgIH0NCisgICAgLy8NCisgICAgLy8gQ2xvc2UgdGhlIGxhc3Qgbm9kZQ0KKyAgICAv Lw0KKyAgICBIYW5kbGUyLT5DbG9zZSAoSGFuZGxlMik7DQorDQorICAgIGlmIChFRklfRVJST1Io U3RhdHVzKSkgew0KKyAgICAgIHJldHVybiAoU3RhdHVzKTsNCisgICAgfQ0KKw0KKyAgICAvLw0K KyAgICAvLyBHZXQgdGhlIG5leHQgbm9kZQ0KKyAgICAvLw0KKyAgICAqRmlsZVBhdGggPSBOZXh0 RGV2aWNlUGF0aE5vZGUgKCpGaWxlUGF0aCk7DQorICB9DQorDQorICAvLw0KKyAgLy8gVGhpcyBp cyBhIHdlYWsgc3BvdCBzaW5jZSBpZiB0aGUgdW5kZWZpbmVkIFNIRUxMX0ZJTEVfSEFORExFIGZv cm1hdCBjaGFuZ2VzIHRoaXMgbXVzdCBjaGFuZ2UgYWxzbyENCisgIC8vDQorICAqRmlsZUhhbmRs ZSA9IChWT0lEKilIYW5kbGUxOw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioN CisgIFRoaXMgZnVuY3Rpb24gY29udmVydHMgYW4gaW5wdXQgZGV2aWNlIHN0cnVjdHVyZSB0byBh IFVuaWNvZGUgc3RyaW5nLg0KKw0KKyAgQHBhcmFtW2luXSBEZXZQYXRoICAgICAgICAgICAgICAg ICAgQSBwb2ludGVyIHRvIHRoZSBkZXZpY2UgcGF0aCBzdHJ1Y3R1cmUuDQorDQorICBAcmV0dXJu IEEgbmV3IGFsbG9jYXRlZCBVbmljb2RlIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGRldmlj ZSBwYXRoLg0KKw0KKyoqLw0KK0NIQVIxNiAqDQorRUZJQVBJDQorRGV2aWNlUGF0aFRvU3RyICgN CisgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKkRldlBhdGgNCisgICkNCit7DQor ICByZXR1cm4gQ29udmVydERldmljZVBhdGhUb1RleHQgKA0KKyAgICAgICAgICAgRGV2UGF0aCwN CisgICAgICAgICAgIEZBTFNFLA0KKyAgICAgICAgICAgVFJVRQ0KKyAgICAgICAgICAgKTsNCit9 DQorDQorDQorLyoqDQorICBFeHRyYWN0IGZpbGVuYW1lIGZyb20gZGV2aWNlIHBhdGguIFRoZSBy ZXR1cm5lZCBidWZmZXIgaXMgYWxsb2NhdGVkIHVzaW5nIEFsbG9jYXRlQ29weVBvb2wuDQorICBU aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZSBhbGxvY2F0ZWQgYnVmZmVy IHVzaW5nIEZyZWVQb29sKCkuIElmIHJldHVybiBOVUxMDQorICBtZWFucyBub3QgZW5vdWdoIG1l bW9yeSByZXNvdXJjZS4NCisNCisgIEBwYXJhbSBEZXZpY2VQYXRoICAgICAgIERldmljZSBwYXRo Lg0KKw0KKyAgQHJldHZhbCBOVUxMICAgICAgICAgICAgTm90IGVub3VnaCBtZW1vcnkgcmVzb3Vy ZWNlIGZvciBBbGxvY2F0ZUNvcHlQb29sLg0KKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgQSBu ZXcgYWxsb2NhdGVkIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGZpbGUgbmFtZS4NCisNCisq Ki8NCitDSEFSMTYgKg0KK0V4dHJhY3RGaWxlTmFtZUZyb21EZXZpY2VQYXRoICgNCisgIElOICAg RUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICpEZXZpY2VQYXRoDQorICApDQorew0KKyAgQ0hBUjE2 ICAgICAgICAgICpTdHJpbmc7DQorICBDSEFSMTYgICAgICAgICAgKk1hdGNoU3RyaW5nOw0KKyAg Q0hBUjE2ICAgICAgICAgICpMYXN0TWF0Y2g7DQorICBDSEFSMTYgICAgICAgICAgKkZpbGVOYW1l Ow0KKyAgVUlOVE4gICAgICAgICAgIExlbmd0aDsNCisNCisgIEFTU0VSVChEZXZpY2VQYXRoICE9 IE5VTEwpOw0KKw0KKyAgU3RyaW5nID0gRGV2aWNlUGF0aFRvU3RyKERldmljZVBhdGgpOw0KKyAg TWF0Y2hTdHJpbmcgPSBTdHJpbmc7DQorICBMYXN0TWF0Y2ggICA9IFN0cmluZzsNCisgIEZpbGVO YW1lICAgID0gTlVMTDsNCisNCisgIHdoaWxlKE1hdGNoU3RyaW5nICE9IE5VTEwpew0KKyAgICBM YXN0TWF0Y2ggICA9IE1hdGNoU3RyaW5nICsgMTsNCisgICAgTWF0Y2hTdHJpbmcgPSBTdHJTdHIo TGFzdE1hdGNoLEwiXFwiKTsNCisgIH0NCisNCisgIExlbmd0aCA9IFN0ckxlbihMYXN0TWF0Y2gp Ow0KKyAgRmlsZU5hbWUgPSBBbGxvY2F0ZUNvcHlQb29sICgoTGVuZ3RoICsgMSkgKiBzaXplb2Yo Q0hBUjE2KSwgTGFzdE1hdGNoKTsNCisgIGlmIChGaWxlTmFtZSAhPSBOVUxMKSB7DQorICAgICoo RmlsZU5hbWUgKyBMZW5ndGgpID0gMDsNCisgIH0NCisNCisgIEZyZWVQb29sKFN0cmluZyk7DQor DQorICByZXR1cm4gRmlsZU5hbWU7DQorfQ0KKw0KKy8qKg0KKyAgRW5yb2xsIGEgbmV3IFg1MDkg Y2VydGlmaWNhdGUgaW50byBWYXJpYWJsZS4NCisNCisgIEBwYXJhbVtpbl0gUHJpdmF0ZURhdGEg ICAgIFRoZSBtb2R1bGUncyBwcml2YXRlIGRhdGEuDQorICBAcGFyYW1baW5dIFZhcmlhYmxlTmFt ZSAgICBWYXJpYWJsZSBuYW1lIG9mIENBIGRhdGFiYXNlLg0KKw0KKyAgQHJldHZhbCAgIEVGSV9T VUNDRVNTICAgICAgICAgICAgTmV3IFg1MDkgaXMgZW5yb2xsZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAg QHJldHZhbCAgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgQ291bGQgbm90IGFsbG9jYXRlIG5lZWRl ZCByZXNvdXJjZXMuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0Vucm9sbFg1MDl0b1ZhcmlhYmxl ICgNCisgIElOIFRMU19BVVRIX0NPTkZJR19QUklWQVRFX0RBVEEgICAqUHJpdmF0ZSwNCisgIElO IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAqVmFyaWFibGVOYW1lDQorICApDQorew0K KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5RGF0YVNpemU7DQorICBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKlg1MDlEYXRhOw0KKyAgRUZJX1NJR05BVFVSRV9MSVNUICAg ICAgICAgICAgICAgICpDQUNlcnQ7DQorICBFRklfU0lHTkFUVVJFX0RBVEEgICAgICAgICAgICAg ICAgKkNBQ2VydERhdGE7DQorICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRh dGE7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemU7DQorICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnRGF0YVNpemU7DQorICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cjsNCisNCisgIFg1MDlEYXRhU2l6ZSAgPSAw Ow0KKyAgU2lnRGF0YVNpemUgICA9IDA7DQorICBEYXRhU2l6ZSAgICAgID0gMDsNCisgIFg1MDlE YXRhICAgICAgPSBOVUxMOw0KKyAgQ0FDZXJ0ICAgICAgICA9IE5VTEw7DQorICBDQUNlcnREYXRh ICAgID0gTlVMTDsNCisgIERhdGEgICAgICAgICAgPSBOVUxMOw0KKw0KKyAgU3RhdHVzID0gUmVh ZEZpbGVDb250ZW50ICgNCisgICAgICAgICAgICAgUHJpdmF0ZS0+RmlsZUNvbnRleHQtPkZIYW5k bGUsDQorICAgICAgICAgICAgICZYNTA5RGF0YSwNCisgICAgICAgICAgICAgJlg1MDlEYXRhU2l6 ZSwNCisgICAgICAgICAgICAgMA0KKyAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KKyAgICBnb3RvIE9OX0VYSVQ7DQorICB9DQorICBBU1NFUlQgKFg1MDlEYXRh ICE9IE5VTEwpOw0KKw0KKyAgU2lnRGF0YVNpemUgPSBzaXplb2YoRUZJX1NJR05BVFVSRV9MSVNU KSArIHNpemVvZihFRklfU0lHTkFUVVJFX0RBVEEpIC0gMSArIFg1MDlEYXRhU2l6ZTsNCisNCisg IERhdGEgPSBBbGxvY2F0ZVplcm9Qb29sIChTaWdEYXRhU2l6ZSk7DQorICBpZiAoRGF0YSA9PSBO VUxMKSB7DQorICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KKyAgICBnb3RvIE9O X0VYSVQ7DQorICB9DQorDQorICAvLw0KKyAgLy8gRmlsbCBDZXJ0aWZpY2F0ZSBEYXRhYmFzZSBw YXJhbWV0ZXJzLg0KKyAgLy8NCisgIENBQ2VydCA9IChFRklfU0lHTkFUVVJFX0xJU1QqKSBEYXRh Ow0KKyAgQ0FDZXJ0LT5TaWduYXR1cmVMaXN0U2l6ZSAgID0gKFVJTlQzMikgU2lnRGF0YVNpemU7 DQorICBDQUNlcnQtPlNpZ25hdHVyZUhlYWRlclNpemUgPSAwOw0KKyAgQ0FDZXJ0LT5TaWduYXR1 cmVTaXplID0gKFVJTlQzMikgKHNpemVvZihFRklfU0lHTkFUVVJFX0RBVEEpIC0gMSArIFg1MDlE YXRhU2l6ZSk7DQorICBDb3B5R3VpZCAoJkNBQ2VydC0+U2lnbmF0dXJlVHlwZSwgJmdFZmlDZXJ0 WDUwOUd1aWQpOw0KKw0KKyAgQ0FDZXJ0RGF0YSA9IChFRklfU0lHTkFUVVJFX0RBVEEqKSAoKFVJ TlQ4KiApIENBQ2VydCArIHNpemVvZiAoRUZJX1NJR05BVFVSRV9MSVNUKSk7DQorICBDb3B5R3Vp ZCAoJkNBQ2VydERhdGEtPlNpZ25hdHVyZU93bmVyLCBQcml2YXRlLT5DZXJ0R3VpZCk7DQorICBD b3B5TWVtICgoVUlOVDgqICkgKENBQ2VydERhdGEtPlNpZ25hdHVyZURhdGEpLCBYNTA5RGF0YSwg WDUwOURhdGFTaXplKTsNCisNCisgIC8vDQorICAvLyBDaGVjayBpZiBzaWduYXR1cmUgZGF0YWJh c2UgZW50cnkgaGFzIGJlZW4gYWxyZWFkeSBleGlzdGVkLg0KKyAgLy8gSWYgdHJ1ZSwgdXNlIEVG SV9WQVJJQUJMRV9BUFBFTkRfV1JJVEUgYXR0cmlidXRlIHRvIGFwcGVuZCB0aGUNCisgIC8vIG5l dyBzaWduYXR1cmUgZGF0YSB0byBvcmlnaW5hbCB2YXJpYWJsZQ0KKyAgLy8NCisgIEF0dHIgPSBU TFNfQVVUSF9DT05GSUdfVkFSX0JBU0VfQVRUUjsNCisNCisgIFN0YXR1cyA9IGdSVC0+R2V0VmFy aWFibGUoDQorICAgICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KKyAgICAgICAgICAgICAg ICAgICZnRWZpVGxzQ2FDZXJ0aWZpY2F0ZUd1aWQsDQorICAgICAgICAgICAgICAgICAgTlVMTCwN CisgICAgICAgICAgICAgICAgICAmRGF0YVNpemUsDQorICAgICAgICAgICAgICAgICAgTlVMTA0K KyAgICAgICAgICAgICAgICAgICk7DQorICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NN QUxMKSB7DQorICAgIEF0dHIgfD0gRUZJX1ZBUklBQkxFX0FQUEVORF9XUklURTsNCisgIH0gZWxz ZSBpZiAoU3RhdHVzICE9IEVGSV9OT1RfRk9VTkQpIHsNCisgICAgZ290byBPTl9FWElUOw0KKyAg fQ0KKw0KKyAgU3RhdHVzID0gZ1JULT5TZXRWYXJpYWJsZSgNCisgICAgICAgICAgICAgICAgICBW YXJpYWJsZU5hbWUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlUbHNDYUNlcnRpZmljYXRlR3Vp ZCwNCisgICAgICAgICAgICAgICAgICBBdHRyLA0KKyAgICAgICAgICAgICAgICAgIFNpZ0RhdGFT aXplLA0KKyAgICAgICAgICAgICAgICAgIERhdGENCisgICAgICAgICAgICAgICAgICApOw0KKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBnb3RvIE9OX0VYSVQ7DQorICB9DQorDQor T05fRVhJVDoNCisNCisgIENsb3NlRmlsZSAoUHJpdmF0ZS0+RmlsZUNvbnRleHQtPkZIYW5kbGUp Ow0KKyAgaWYgKFByaXZhdGUtPkZpbGVDb250ZXh0LT5GaWxlTmFtZSAhPSBOVUxMKSB7DQorICAg IEZyZWVQb29sKFByaXZhdGUtPkZpbGVDb250ZXh0LT5GaWxlTmFtZSk7DQorICAgIFByaXZhdGUt PkZpbGVDb250ZXh0LT5GaWxlTmFtZSA9IE5VTEw7DQorICB9DQorDQorICBQcml2YXRlLT5GaWxl Q29udGV4dC0+RkhhbmRsZSA9IE5VTEw7DQorDQorICBpZiAoUHJpdmF0ZS0+Q2VydEd1aWQgIT0g TlVMTCkgew0KKyAgICBGcmVlUG9vbCAoUHJpdmF0ZS0+Q2VydEd1aWQpOw0KKyAgICBQcml2YXRl LT5DZXJ0R3VpZCA9IE5VTEw7DQorICB9DQorDQorICBpZiAoRGF0YSAhPSBOVUxMKSB7DQorICAg IEZyZWVQb29sIChEYXRhKTsNCisgIH0NCisNCisgIGlmIChYNTA5RGF0YSAhPSBOVUxMKSB7DQor ICAgIEZyZWVQb29sIChYNTA5RGF0YSk7DQorICB9DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30N CisNCisvKioNCisgIEVucm9sbCBDZXJ0IGludG8gVGxzQ2FDZXJ0aWZpY2F0ZS4gVGhlIEdVSUQg d2lsbCBiZSBQcml2YXRlLT5DZXJ0R3VpZC4NCisNCisgIEBwYXJhbVtpbl0gUHJpdmF0ZURhdGEg ICAgIFRoZSBtb2R1bGUncyBwcml2YXRlIGRhdGEuDQorICBAcGFyYW1baW5dIFZhcmlhYmxlTmFt ZSAgICBWYXJpYWJsZSBuYW1lIG9mIHNpZ25hdHVyZSBkYXRhYmFzZS4NCisNCisgIEByZXR2YWwg ICBFRklfU1VDQ0VTUyAgICAgICAgICAgIE5ldyBDZXJ0IGVucm9sbGVkIHN1Y2Nlc3NmdWxseS4N CisgIEByZXR2YWwgICBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFRoZSBwYXJhbWV0ZXIgaXMgaW52 YWxpZC4NCisgIEByZXR2YWwgICBFRklfVU5TVVBQT1JURUQgICAgICAgIFRoZSBDZXJ0IGZpbGUg aXMgdW5zdXBwb3J0ZWQgdHlwZS4NCisgIEByZXR2YWwgICBvdGhlcnMgICAgICAgICAgICAgICAg IEZhaWwgdG8gZW5yb2xsIENlcnQgZGF0YS4NCisNCisqKi8NCitFRklfU1RBVFVTDQorRW5yb2xs Q2VydERhdGFiYXNlICgNCisgIElOIFRMU19BVVRIX0NPTkZJR19QUklWQVRFX0RBVEEgICpQcml2 YXRlLA0KKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZQ0K KyAgKQ0KK3sNCisgIFVJTlQxNiogICAgICBGaWxlUG9zdEZpeDsNCisgIFVJTlROICAgICAgICBO YW1lTGVuZ3RoOw0KKw0KKyAgaWYgKChQcml2YXRlLT5GaWxlQ29udGV4dC0+RmlsZU5hbWUgPT0g TlVMTCkgfHwgKFByaXZhdGUtPkZpbGVDb250ZXh0LT5GSGFuZGxlID09IE5VTEwpIHx8IChQcml2 YXRlLT5DZXJ0R3VpZCA9PSBOVUxMKSkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIFBhcnNlIHRoZSBmaWxlJ3MgcG9zdGZpeC4NCisg IC8vDQorICBOYW1lTGVuZ3RoID0gU3RyTGVuIChQcml2YXRlLT5GaWxlQ29udGV4dC0+RmlsZU5h bWUpOw0KKyAgaWYgKE5hbWVMZW5ndGggPD0gNCkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KKyAgfQ0KKyAgRmlsZVBvc3RGaXggPSBQcml2YXRlLT5GaWxlQ29udGV4dC0+ RmlsZU5hbWUgKyBOYW1lTGVuZ3RoIC0gNDsNCisNCisgIGlmIChJc0RlclBlbUVuY29kZUNlcnRp ZmljYXRlIChGaWxlUG9zdEZpeCkpIHsNCisgICAgLy8NCisgICAgLy8gU3VwcG9ydHMgREVSLWVu Y29kZWQgWDUwOSBjZXJ0aWZpY2F0ZS4NCisgICAgLy8NCisgICAgcmV0dXJuIEVucm9sbFg1MDl0 b1ZhcmlhYmxlIChQcml2YXRlLCBWYXJpYWJsZU5hbWUpOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIEVG SV9VTlNVUFBPUlRFRDsNCit9DQorDQorLyoqDQorICBSZWZyZXNoIHRoZSBnbG9iYWwgVXBkYXRl RGF0YSBzdHJ1Y3R1cmUuDQorDQorKiovDQorVk9JRA0KK1JlZnJlc2hVcGRhdGVEYXRhICgNCisg IFZPSUQNCisgICkNCit7DQorICAvLw0KKyAgLy8gRnJlZSBjdXJyZW50IHVwZGF0ZWQgZGF0ZQ0K KyAgLy8NCisgIGlmIChtU3RhcnRPcENvZGVIYW5kbGUgIT0gTlVMTCkgew0KKyAgICBIaWlGcmVl T3BDb2RlSGFuZGxlIChtU3RhcnRPcENvZGVIYW5kbGUpOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8v IENyZWF0ZSBuZXcgT3BDb2RlIEhhbmRsZQ0KKyAgLy8NCisgIG1TdGFydE9wQ29kZUhhbmRsZSA9 IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KKw0KKyAgLy8NCisgIC8vIENyZWF0ZSBIaWkg RXh0ZW5kIExhYmVsIE9wQ29kZSBhcyB0aGUgc3RhcnQgb3Bjb2RlDQorICAvLw0KKyAgbVN0YXJ0 TGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXJ0T3BDb2RlSGFuZGxl LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFu b0d1aWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfSUZS X0dVSURfTEFCRUwpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Ow0KKyAgbVN0YXJ0TGFiZWwtPkV4dGVuZE9wQ29kZSA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVM Ow0KK30NCisNCisvKioNCisgIENsZWFuIHVwIHRoZSBkeW5hbWljIG9wY29kZSBhdCBsYWJlbCBh bmQgZm9ybSBzcGVjaWZpZWQgYnkgYm90aCBMYWJlbElkLg0KKw0KKyAgQHBhcmFtW2luXSBMYWJl bElkICAgICAgICAgSXQgaXMgYm90aCB0aGUgRm9ybSBJRCBhbmQgTGFiZWwgSUQgZm9yIG9wY29k ZSBkZWxldGlvbi4NCisgIEBwYXJhbVtpbl0gUHJpdmF0ZURhdGEgICAgIE1vZHVsZSBwcml2YXRl IGRhdGEuDQorDQorKiovDQorVk9JRA0KK0NsZWFuVXBQYWdlICgNCisgIElOIFVJTlQxNiAgICAg ICAgICAgICAgICAgICAgICAgICAgIExhYmVsSWQsDQorICBJTiBUTFNfQVVUSF9DT05GSUdfUFJJ VkFURV9EQVRBICAgICAqUHJpdmF0ZURhdGENCisgICkNCit7DQorICBSZWZyZXNoVXBkYXRlRGF0 YSAoKTsNCisNCisgIC8vDQorICAvLyBSZW1vdmUgYWxsIG9wLWNvZGVzIGZyb20gZHluYW1pYyBw YWdlDQorICAvLw0KKyAgbVN0YXJ0TGFiZWwtPk51bWJlciA9IExhYmVsSWQ7DQorICBIaWlVcGRh dGVGb3JtICgNCisgICAgUHJpdmF0ZURhdGEtPlJlZ2lzdGVyZWRIYW5kbGUsDQorICAgICZnVGxz QXV0aENvbmZpZ0d1aWQsDQorICAgIExhYmVsSWQsDQorICAgIG1TdGFydE9wQ29kZUhhbmRsZSwg Ly8gTGFiZWwgTGFiZWxJZA0KKyAgICBtRW5kT3BDb2RlSGFuZGxlICAgIC8vIExBQkVMX0VORA0K KyAgICApOw0KK30NCisNCisvKioNCisgIFVwZGF0ZSB0aGUgZm9ybSBiYXNlIG9uIHRoZSBzZWxl Y3RlZCBmaWxlLg0KKw0KKyAgQHBhcmFtIEZpbGVQYXRoICAgUG9pbnQgdG8gdGhlIGZpbGUgcGF0 aC4NCisgIEBwYXJhbSBGb3JtSWQgICAgIFRoZSBmb3JtIG5lZWQgdG8gZGlzcGxheS4NCisNCisg IEByZXR2YWwgVFJVRSAgIEV4aXQgY2FsbGVyIGZ1bmN0aW9uLg0KKyAgQHJldHZhbCBGQUxTRSAg Tm90IGV4aXQgY2FsbGVyIGZ1bmN0aW9uLg0KKw0KKyoqLw0KK0JPT0xFQU4NCitVcGRhdGVQYWdl KA0KKyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKkZpbGVQYXRoLA0KKyAgSU4gIEVG SV9GT1JNX0lEICAgICAgICAgICAgICAgRm9ybUlkDQorICApDQorew0KKyAgQ0hBUjE2ICAgICAg ICAgICAgICAgICpGaWxlTmFtZTsNCisgIEVGSV9TVFJJTkdfSUQgICAgICAgICBTdHJpbmdUb2tl bjsNCisNCisgIEZpbGVOYW1lID0gTlVMTDsNCisNCisgIGlmIChGaWxlUGF0aCAhPSBOVUxMKSB7 DQorICAgIEZpbGVOYW1lID0gRXh0cmFjdEZpbGVOYW1lRnJvbURldmljZVBhdGgoRmlsZVBhdGgp Ow0KKyAgfQ0KKyAgaWYgKEZpbGVOYW1lID09IE5VTEwpIHsNCisgICAgLy8NCisgICAgLy8gRmls ZU5hbWUgPSBOVUxMIGhhcyB0d28gY2FzZToNCisgICAgLy8gMS4gRmlsZVBhdGggPT0gTlVMTCwg bm90IHNlbGVjdCBmaWxlLg0KKyAgICAvLyAyLiBGaWxlUGF0aCAhPSBOVUxMLCBidXQgRXh0cmFj dEZpbGVOYW1lRnJvbURldmljZVBhdGggcmV0dXJuIE5VTEwgbm90IGVub3VnaCBtZW1vcnkgcmVz b3VyY2UuDQorICAgIC8vIEluIHRoZXNlIHR3byBjYXNlLCBubyBuZWVkIHRvIHVwZGF0ZSB0aGUg Zm9ybSwgYW5kIGV4aXQgdGhlIGNhbGxlciBmdW5jdGlvbi4NCisgICAgLy8NCisgICAgcmV0dXJu IFRSVUU7DQorICB9DQorICBTdHJpbmdUb2tlbiA9ICBIaWlTZXRTdHJpbmcgKG1UbHNBdXRoUHJp dmF0ZURhdGEtPlJlZ2lzdGVyZWRIYW5kbGUsIDAsIEZpbGVOYW1lLCBOVUxMKTsNCisNCisgIG1U bHNBdXRoUHJpdmF0ZURhdGEtPkZpbGVDb250ZXh0LT5GaWxlTmFtZSA9IEZpbGVOYW1lOw0KKw0K KyAgT3BlbkZpbGVCeURldmljZVBhdGggKA0KKyAgICAmRmlsZVBhdGgsDQorICAgICZtVGxzQXV0 aFByaXZhdGVEYXRhLT5GaWxlQ29udGV4dC0+RkhhbmRsZSwNCisgICAgRUZJX0ZJTEVfTU9ERV9S RUFELA0KKyAgICAwDQorICAgICk7DQorICAvLw0KKyAgLy8gQ3JlYXRlIFN1YnRpdGxlIG9wLWNv ZGUgZm9yIHRoZSBkaXNwbGF5IHN0cmluZyBvZiB0aGUgb3B0aW9uLg0KKyAgLy8NCisgIFJlZnJl c2hVcGRhdGVEYXRhICgpOw0KKyAgbVN0YXJ0TGFiZWwtPk51bWJlciA9IEZvcm1JZDsNCisNCisg IEhpaUNyZWF0ZVN1YlRpdGxlT3BDb2RlICgNCisgICAgbVN0YXJ0T3BDb2RlSGFuZGxlLA0KKyAg ICBTdHJpbmdUb2tlbiwNCisgICAgMCwNCisgICAgMCwNCisgICAgMA0KKyAgICk7DQorDQorICBI aWlVcGRhdGVGb3JtICgNCisgICAgbVRsc0F1dGhQcml2YXRlRGF0YS0+UmVnaXN0ZXJlZEhhbmRs ZSwNCisgICAgJmdUbHNBdXRoQ29uZmlnR3VpZCwNCisgICAgRm9ybUlkLA0KKyAgICBtU3RhcnRP cENvZGVIYW5kbGUsIC8vLyBMYWJlbCBGb3JtSWQNCisgICAgbUVuZE9wQ29kZUhhbmRsZSAgICAv Ly8gTEFCRUxfRU5EDQorICAgICk7DQorDQorICByZXR1cm4gVFJVRTsNCit9DQorDQorLyoqDQor ICBVcGRhdGUgdGhlIGZvcm0gYmFzZSBvbiB0aGUgaW5wdXQgZmlsZSBwYXRoIGluZm8uDQorDQor ICBAcGFyYW0gRmlsZVBhdGggICAgUG9pbnQgdG8gdGhlIGZpbGUgcGF0aC4NCisNCisgIEByZXR2 YWwgVFJVRSAgIEV4aXQgY2FsbGVyIGZ1bmN0aW9uLg0KKyAgQHJldHZhbCBGQUxTRSAgTm90IGV4 aXQgY2FsbGVyIGZ1bmN0aW9uLg0KKyoqLw0KK0JPT0xFQU4NCitVcGRhdGVDQUZyb21GaWxlICgN CisgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAqRmlsZVBhdGgNCisgICkNCit7DQor ICByZXR1cm4gVXBkYXRlUGFnZShGaWxlUGF0aCwgVExTX0FVVEhfQ09ORklHX0ZPUk1JRDRfRk9S TSk7DQorfQ0KKw0KKy8qKg0KKyAgVW5sb2FkIHRoZSBjb25maWd1cmF0aW9uIGZvcm0sIHRoaXMg aW5jbHVkZXM6IGRlbGV0ZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24NCisgIGVudHJpZXMsIHVuaW5z dGFsbCB0aGUgZm9ybSBjYWxsYmFjayBwcm90b2NvbCwgYW5kIGZyZWUgdGhlIHJlc291cmNlcyB1 c2VkLg0KKw0KKyAgQHBhcmFtW2luXSAgUHJpdmF0ZSAgICAgICAgICAgICBQb2ludGVyIHRvIHRo ZSBkcml2ZXIgcHJpdmF0ZSBkYXRhLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgICBUaGUgY29uZmlndXJhdGlvbiBmb3JtIGlzIHVubG9hZGVkLg0KKyAgQHJldHZhbCBPdGhl cnMgICAgICAgICAgICAgICAgICBGYWlsZWQgdG8gdW5sb2FkIHRoZSBmb3JtLg0KKw0KKyoqLw0K K0VGSV9TVEFUVVMNCitUbHNBdXRoQ29uZmlnRm9ybVVubG9hZCAoDQorICBJTiBUTFNfQVVUSF9D T05GSUdfUFJJVkFURV9EQVRBICAgICAqUHJpdmF0ZQ0KKyAgKQ0KK3sNCisgIGlmIChQcml2YXRl LT5Ecml2ZXJIYW5kbGUgIT0gTlVMTCkgew0KKyAgICAvLw0KKyAgICAvLyBVbmluc3RhbGwgRUZJ X0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MDQorICAgIC8vDQorICAgIGdCUy0+VW5pbnN0YWxs TXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KKyAgICAgICAgICAgUHJpdmF0ZS0+RHJpdmVy SGFuZGxlLA0KKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KKyAgICAg ICAgICAgJm1UbHNBdXRoQ29uZmlnSGlpVmVuZG9yRGV2aWNlUGF0aCwNCisgICAgICAgICAgICZn RWZpSGlpQ29uZmlnQWNjZXNzUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgJlByaXZhdGUtPkNv bmZpZ0FjY2VzcywNCisgICAgICAgICAgIE5VTEwNCisgICAgICAgICAgICk7DQorICAgIFByaXZh dGUtPkRyaXZlckhhbmRsZSA9IE5VTEw7DQorICB9DQorDQorICBpZiAoUHJpdmF0ZS0+UmVnaXN0 ZXJlZEhhbmRsZSAhPSBOVUxMKSB7DQorICAgIC8vDQorICAgIC8vIFJlbW92ZSBISUkgcGFja2Fn ZSBsaXN0DQorICAgIC8vDQorICAgIEhpaVJlbW92ZVBhY2thZ2VzIChQcml2YXRlLT5SZWdpc3Rl cmVkSGFuZGxlKTsNCisgICAgUHJpdmF0ZS0+UmVnaXN0ZXJlZEhhbmRsZSA9IE5VTEw7DQorICB9 DQorDQorICBpZiAoUHJpdmF0ZS0+Q2VydEd1aWQgIT0gTlVMTCkgew0KKyAgICBGcmVlUG9vbCAo UHJpdmF0ZS0+Q2VydEd1aWQpOw0KKyAgfQ0KKw0KKyAgaWYgKFByaXZhdGUtPkZpbGVDb250ZXh0 ICE9IE5VTEwpIHsNCisgICAgRnJlZVBvb2wgKFByaXZhdGUtPkZpbGVDb250ZXh0KTsNCisgIH0N CisNCisgIEZyZWVQb29sIChQcml2YXRlKTsNCisNCisgIGlmIChtU3RhcnRPcENvZGVIYW5kbGUg IT0gTlVMTCkgew0KKyAgICBIaWlGcmVlT3BDb2RlSGFuZGxlIChtU3RhcnRPcENvZGVIYW5kbGUp Ow0KKyAgfQ0KKw0KKyAgaWYgKG1FbmRPcENvZGVIYW5kbGUgIT0gTlVMTCkgew0KKyAgICBIaWlG cmVlT3BDb2RlSGFuZGxlIChtRW5kT3BDb2RlSGFuZGxlKTsNCisgIH0NCisNCisgIHJldHVybiBF RklfU1VDQ0VTUzsNCit9DQorDQorDQorLyoqDQorICBJbml0aWFsaXplIHRoZSBjb25maWd1cmF0 aW9uIGZvcm0uDQorDQorICBAcGFyYW1baW5dICBQcml2YXRlICAgICAgICAgICAgIFBvaW50ZXIg dG8gdGhlIGRyaXZlciBwcml2YXRlIGRhdGEuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZvcm0gaXMgaW5pdGlhbGl6ZWQuDQorICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQor DQorKiovDQorRUZJX1NUQVRVUw0KK1Rsc0F1dGhDb25maWdGb3JtSW5pdCAoDQorICBJTiBUTFNf QVVUSF9DT05GSUdfUFJJVkFURV9EQVRBICAgICAqUHJpdmF0ZQ0KKyAgKQ0KK3sNCisgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorDQorICBQcml2YXRlLT5TaWdu YXR1cmUgPSBUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9EQVRBX1NJR05BVFVSRTsNCisgIA0KKyAg UHJpdmF0ZS0+Q29uZmlnQWNjZXNzLkV4dHJhY3RDb25maWcgPSBUbHNBdXRoQ29uZmlnQWNjZXNz RXh0cmFjdENvbmZpZzsNCisgIFByaXZhdGUtPkNvbmZpZ0FjY2Vzcy5Sb3V0ZUNvbmZpZyAgID0g VGxzQXV0aENvbmZpZ0FjY2Vzc1JvdXRlQ29uZmlnOw0KKyAgUHJpdmF0ZS0+Q29uZmlnQWNjZXNz LkNhbGxiYWNrICAgICAgPSBUbHNBdXRoQ29uZmlnQWNjZXNzQ2FsbGJhY2s7DQorDQorICAvLw0K KyAgLy8gSW5zdGFsbCBEZXZpY2UgUGF0aCBQcm90b2NvbCBhbmQgQ29uZmlnIEFjY2VzcyBwcm90 b2NvbCB0byBkcml2ZXIgaGFuZGxlLg0KKyAgLy8NCisgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11 bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCisgICAgICAgICAgICAgICAgICAmUHJpdmF0ZS0+ RHJpdmVySGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29s R3VpZCwNCisgICAgICAgICAgICAgICAgICAmbVRsc0F1dGhDb25maWdIaWlWZW5kb3JEZXZpY2VQ YXRoLA0KKyAgICAgICAgICAgICAgICAgICZnRWZpSGlpQ29uZmlnQWNjZXNzUHJvdG9jb2xHdWlk LA0KKyAgICAgICAgICAgICAgICAgICZQcml2YXRlLT5Db25maWdBY2Nlc3MsDQorICAgICAgICAg ICAgICAgICAgTlVMTA0KKyAgICAgICAgICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorICANCisgIC8vDQorICAvLyBQ dWJsaXNoIG91ciBISUkgZGF0YS4NCisgIC8vDQorICBQcml2YXRlLT5SZWdpc3RlcmVkSGFuZGxl ID0gSGlpQWRkUGFja2FnZXMgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdU bHNBdXRoQ29uZmlnR3VpZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaXZh dGUtPkRyaXZlckhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRsc0F1 dGhDb25maWdEeGVTdHJpbmdzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGxz QXV0aENvbmZpZ1ZmckJpbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorICBpZiAoUHJpdmF0ZS0+UmVn aXN0ZXJlZEhhbmRsZSA9PSBOVUxMKSB7DQorICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KKyAgICBnb3RvIEVycm9yOw0KKyAgfQ0KKw0KKyAgUHJpdmF0ZS0+RmlsZUNvbnRleHQg PSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFRMU19BVVRIX0NPTkZJR19GSUxFX0NPTlRFWFQp KTsNCisgIGlmIChQcml2YXRlLT5GaWxlQ29udGV4dCA9PSBOVUxMKSB7DQorICAgIFN0YXR1cyA9 IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KKyAgICBnb3RvIEVycm9yOw0KKyAgfQ0KKw0KKyAgLy8N CisgIC8vIEluaXQgT3BDb2RlIEhhbmRsZSBhbmQgQWxsb2NhdGUgc3BhY2UgZm9yIGNyZWF0aW9u IG9mIEJ1ZmZlcg0KKyAgLy8NCisgIG1TdGFydE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BD b2RlSGFuZGxlICgpOw0KKyAgaWYgKG1TdGFydE9wQ29kZUhhbmRsZSA9PSBOVUxMKSB7DQorICAg IFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KKyAgICBnb3RvIEVycm9yOw0KKyAgfQ0K Kw0KKyAgbUVuZE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KKyAg aWYgKG1FbmRPcENvZGVIYW5kbGUgPT0gTlVMTCkgew0KKyAgICBTdGF0dXMgPSBFRklfT1VUX09G X1JFU09VUkNFUzsNCisgICAgZ290byBFcnJvcjsNCisgIH0NCisNCisgIC8vDQorICAvLyBDcmVh dGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUgYXMgdGhlIHN0YXJ0IG9wY29kZQ0KKyAgLy8NCisg IG1TdGFydExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVhdGVHdWlkT3BDb2Rl ICgNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFydE9wQ29k ZUhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZp SWZyVGlhbm9HdWlkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAo RUZJX0lGUl9HVUlEX0xBQkVMKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsNCisgIG1TdGFydExhYmVsLT5FeHRlbmRPcENvZGUgPSBFRklfSUZSX0VYVEVORF9P UF9MQUJFTDsNCisNCisgIC8vDQorICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUg YXMgdGhlIGVuZCBvcGNvZGUNCisgIC8vDQorICBtRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xB QkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1FbmRPcENvZGVIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOw0KKyAgbUVuZExhYmVsLT5FeHRlbmRPcENvZGUgPSBFRklf SUZSX0VYVEVORF9PUF9MQUJFTDsNCisgIG1FbmRMYWJlbC0+TnVtYmVyICAgICAgID0gTEFCRUxf RU5EOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyAgDQorRXJyb3I6DQorICBUbHNBdXRo Q29uZmlnRm9ybVVubG9hZCAoUHJpdmF0ZSk7DQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisv KioNCisgICANCisgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSBjYWxsZXIgdG8gcmVxdWVzdCB0 aGUgY3VycmVudA0KKyAgY29uZmlndXJhdGlvbiBmb3Igb25lIG9yIG1vcmUgbmFtZWQgZWxlbWVu dHMuIFRoZSByZXN1bHRpbmcNCisgIHN0cmluZyBpcyBpbiA8Q29uZmlnQWx0UmVzcD4gZm9ybWF0 LiBBbnkgYW5kIGFsbCBhbHRlcm5hdGl2ZQ0KKyAgY29uZmlndXJhdGlvbiBzdHJpbmdzIHNoYWxs IGFsc28gYmUgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUNCisgIGN1cnJlbnQgY29uZmlndXJh dGlvbiBzdHJpbmcuIElmIHRoZXkgYXJlLCB0aGV5IG11c3QgYXBwZWFyDQorICBhZnRlciB0aGUg Y3VycmVudCBjb25maWd1cmF0aW9uLiBUaGV5IG11c3QgY29udGFpbiB0aGUgc2FtZQ0KKyAgcm91 dGluZyAoR1VJRCwgTkFNRSwgUEFUSCkgYXMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzdHJp bmcuDQorICBUaGV5IG11c3QgaGF2ZSBhbiBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIGluZGljYXRp bmcgdGhlIHR5cGUgb2YNCisgIGFsdGVybmF0aXZlIGNvbmZpZ3VyYXRpb24gdGhlIHN0cmluZyBy ZXByZXNlbnRzLA0KKyAgIkFMVENGRz08U3RyaW5nVG9rZW4+Ii4gVGhhdCA8U3RyaW5nVG9rZW4+ ICh3aGVuDQorICBjb252ZXJ0ZWQgZnJvbSBIZXggVU5JQ09ERSB0byBiaW5hcnkpIGlzIGEgcmVm ZXJlbmNlIHRvIGENCisgIHN0cmluZyBpbiB0aGUgYXNzb2NpYXRlZCBzdHJpbmcgcGFjay4NCisN CisgIEBwYXJhbSBUaGlzICAgICAgIFBvaW50cyB0byB0aGUgRUZJX0hJSV9DT05GSUdfQUNDRVNT X1BST1RPQ09MLg0KKw0KKyAgQHBhcmFtIFJlcXVlc3QgICAgQSBudWxsLXRlcm1pbmF0ZWQgVW5p Y29kZSBzdHJpbmcgaW4NCisgICAgICAgICAgICAgICAgICAgIDxDb25maWdSZXF1ZXN0PiBmb3Jt YXQuIE5vdGUgdGhhdCB0aGlzDQorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyB0aGUgcm91 dGluZyBpbmZvcm1hdGlvbiBhcyB3ZWxsIGFzDQorICAgICAgICAgICAgICAgICAgICB0aGUgY29u ZmlndXJhYmxlIG5hbWUgLyB2YWx1ZSBwYWlycy4gSXQgaXMNCisgICAgICAgICAgICAgICAgICAg IGludmFsaWQgZm9yIHRoaXMgc3RyaW5nIHRvIGJlIGluDQorICAgICAgICAgICAgICAgICAgICA8 TXVsdGlDb25maWdSZXF1ZXN0PiBmb3JtYXQuIA0KKyAgICAgICAgICAgICAgICAgICAgSWYgYSBO VUxMIGlzIHBhc3NlZCBpbiBmb3IgdGhlIFJlcXVlc3QgZmllbGQsIA0KKyAgICAgICAgICAgICAg ICAgICAgYWxsIG9mIHRoZSBzZXR0aW5ncyBiZWluZyBhYnN0cmFjdGVkIGJ5IHRoaXMgZnVuY3Rp b24gDQorICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBSZXN1bHRz IGZpZWxkLiAgSW4gYWRkaXRpb24sIA0KKyAgICAgICAgICAgICAgICAgICAgaWYgYSBDb25maWdI ZHIgaXMgcGFzc2VkIGluIHdpdGggbm8gcmVxdWVzdCBlbGVtZW50cywgDQorICAgICAgICAgICAg ICAgICAgICBhbGwgb2YgdGhlIHNldHRpbmdzIGJlaW5nIGFic3RyYWN0ZWQgZm9yIHRoYXQgcGFy dGljdWxhciANCisgICAgICAgICAgICAgICAgICAgIENvbmZpZ0hkciByZWZlcmVuY2Ugd2lsbCBi ZSByZXR1cm5lZCBpbiB0aGUgUmVzdWx0cyBGaWVsZC4NCisNCisgIEBwYXJhbSBQcm9ncmVzcyAg IE9uIHJldHVybiwgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGluIHRoZQ0KKyAgICAgICAgICAgICAg ICAgICAgUmVxdWVzdCBzdHJpbmcuIFBvaW50cyB0byB0aGUgc3RyaW5nJ3MgbnVsbA0KKyAgICAg ICAgICAgICAgICAgICAgdGVybWluYXRvciBpZiByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsLiBQb2lu dHMNCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBtb3N0IHJlY2VudCAiJiIgYmVmb3JlIHRo ZSBmaXJzdA0KKyAgICAgICAgICAgICAgICAgICAgZmFpbGluZyBuYW1lIC8gdmFsdWUgcGFpciAo b3IgdGhlIGJlZ2lubmluZw0KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHN0cmluZyBpZiB0 aGUgZmFpbHVyZSBpcyBpbiB0aGUgZmlyc3QNCisgICAgICAgICAgICAgICAgICAgIG5hbWUgLyB2 YWx1ZSBwYWlyKSBpZiB0aGUgcmVxdWVzdCB3YXMgbm90DQorICAgICAgICAgICAgICAgICAgICBz dWNjZXNzZnVsLg0KKw0KKyAgQHBhcmFtIFJlc3VsdHMgICAgQSBudWxsLXRlcm1pbmF0ZWQgVW5p Y29kZSBzdHJpbmcgaW4NCisgICAgICAgICAgICAgICAgICAgIDxNdWx0aUNvbmZpZ0FsdFJlc3A+ IGZvcm1hdCB3aGljaCBoYXMgYWxsIHZhbHVlcw0KKyAgICAgICAgICAgICAgICAgICAgZmlsbGVk IGluIGZvciB0aGUgbmFtZXMgaW4gdGhlIFJlcXVlc3Qgc3RyaW5nLg0KKyAgICAgICAgICAgICAg ICAgICAgU3RyaW5nIHRvIGJlIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVkIGZ1bmN0aW9uLg0KKw0K KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgUmVzdWx0cyBzdHJpbmcgaXMg ZmlsbGVkIHdpdGggdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl cyBjb3JyZXNwb25kaW5nIHRvIGFsbCByZXF1ZXN0ZWQNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbmFtZXMuDQorDQorICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAg IE5vdCBlbm91Z2ggbWVtb3J5IHRvIHN0b3JlIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYXJ0cyBvZiB0aGUgcmVzdWx0cyB0aGF0IG11c3QgYmUNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVkIGF3YWl0aW5nIHBvc3NpYmxlIGZ1dHVyZQ0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbHMuDQorDQorICBAcmV0 dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgIFJvdXRpbmcgZGF0YSBkb2Vzbid0IG1hdGNoIGFu eQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbm93biBkcml2ZXIuIFByb2dy ZXNzIHNldCB0byB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Qg Y2hhcmFjdGVyIGluIHRoZSByb3V0aW5nIGhlYWRlci4NCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTm90ZTogVGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgdGhhdCB0aGUNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHZhbGlkYXRlIHRoZSByb3V0aW5n IGRhdGEuIEl0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3Qgc2tpcCB0 aGUgPENvbmZpZ0hkcj4gaW4gb3JkZXIgdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJvY2VzcyB0aGUgbmFtZXMuDQorDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgIElsbGVnYWwgc3ludGF4LiBQcm9ncmVzcyBzZXQNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdG8gbW9zdCByZWNlbnQgIiYiIGJlZm9yZSB0aGUNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Igb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLg0KKw0KKyAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgICBVbmtub3duIG5hbWUuIFByb2dyZXNzIHBvaW50cw0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgJiBiZWZvcmUgdGhlIG5hbWUg aW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24uDQorDQorKiov DQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1Rsc0F1dGhDb25maWdBY2Nlc3NFeHRyYWN0Q29uZmln ICgNCisgIElOIENPTlNUICBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgICpUaGlzLA0K KyAgSU4gQ09OU1QgIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdCwNCisg IE9VVCAgICAgICBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICpQcm9ncmVzcywNCisg IE9VVCAgICAgICBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICpSZXN1bHRzDQorICAp DQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplOw0KKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNpemU7DQorICBFRklfU1RSSU5HICAgICAgICAgICAg ICAgICAgICAgICAgQ29uZmlnUmVxdWVzdDsNCisgIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAg ICAgICAgICBDb25maWdSZXF1ZXN0SGRyOw0KKyAgVExTX0FVVEhfQ09ORklHX1BSSVZBVEVfREFU QSAgICAgICpQcml2YXRlOw0KKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFs bG9jYXRlZFJlcXVlc3Q7DQorDQorICBpZiAoUHJvZ3Jlc3MgPT0gTlVMTCB8fCBSZXN1bHRzID09 IE5VTEwpIHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisg IEFsbG9jYXRlZFJlcXVlc3QgPSBGQUxTRTsNCisgIENvbmZpZ1JlcXVlc3RIZHIgPSBOVUxMOw0K KyAgQ29uZmlnUmVxdWVzdCAgICA9IE5VTEw7DQorICBTaXplICAgICAgICAgICAgID0gMDsNCisN CisgIFByaXZhdGUgICAgICAgICAgPSBUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9GUk9NX1RISVMg KFRoaXMpOw0KKw0KKyAgQnVmZmVyU2l6ZSAgICAgICA9IHNpemVvZiAoVExTX0FVVEhfQ09ORklH X0lGUl9OVkRBVEEpOw0KKyAgWmVyb01lbSAoJlByaXZhdGUtPlRsc0F1dGhDb25maWdOdkRhdGEs IEJ1ZmZlclNpemUpOw0KKyAgDQorICAqUHJvZ3Jlc3MgICAgICAgID0gUmVxdWVzdDsNCisNCisg IGlmICgoUmVxdWVzdCAhPSBOVUxMKSAmJiAhSGlpSXNDb25maWdIZHJNYXRjaCAoUmVxdWVzdCwg JmdUbHNBdXRoQ29uZmlnR3VpZCwgbVRsc0F1dGhDb25maWdTdG9yYWdlTmFtZSkpIHsNCisgICAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQorICB9DQorICANCisgIENvbmZpZ1JlcXVlc3QgPSBSZXF1 ZXN0Ow0KKyAgaWYgKChSZXF1ZXN0ID09IE5VTEwpIHx8IChTdHJTdHIgKFJlcXVlc3QsIEwiT0ZG U0VUIikgPT0gTlVMTCkpIHsNCisgICAgLy8NCisgICAgLy8gUmVxdWVzdCBpcyBzZXQgdG8gTlVM TCBvciBPRkZTRVQgaXMgTlVMTCwgY29uc3RydWN0IGZ1bGwgcmVxdWVzdCBzdHJpbmcuDQorICAg IC8vDQorICAgIC8vIEFsbG9jYXRlIGFuZCBmaWxsIGEgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBo b2xkIHRoZSA8Q29uZmlnSGRyPiB0ZW1wbGF0ZQ0KKyAgICAvLyBmb2xsb3dlZCBieSAiJk9GRlNF VD0wJldJRFRIPVdXV1dXV1dXV1dXV1dXV1ciIGZvbGxvd2VkIGJ5IGEgTnVsbC10ZXJtaW5hdG9y DQorICAgIC8vDQorICAgIENvbmZpZ1JlcXVlc3RIZHIgPSBIaWlDb25zdHJ1Y3RDb25maWdIZHIg KCZnVGxzQXV0aENvbmZpZ0d1aWQsIG1UbHNBdXRoQ29uZmlnU3RvcmFnZU5hbWUsIFByaXZhdGUt PkRyaXZlckhhbmRsZSk7DQorICAgIFNpemUgPSAoU3RyTGVuIChDb25maWdSZXF1ZXN0SGRyKSAr IDMyICsgMSkgKiBzaXplb2YgKENIQVIxNik7DQorICAgIENvbmZpZ1JlcXVlc3QgPSBBbGxvY2F0 ZVplcm9Qb29sIChTaXplKTsNCisgICAgQVNTRVJUIChDb25maWdSZXF1ZXN0ICE9IE5VTEwpOw0K KyAgICBBbGxvY2F0ZWRSZXF1ZXN0ID0gVFJVRTsNCisgICAgVW5pY29kZVNQcmludCAoQ29uZmln UmVxdWVzdCwgU2l6ZSwgTCIlcyZPRkZTRVQ9MCZXSURUSD0lMDE2TFgiLCBDb25maWdSZXF1ZXN0 SGRyLCAoVUlOVDY0KUJ1ZmZlclNpemUpOw0KKyAgICBGcmVlUG9vbCAoQ29uZmlnUmVxdWVzdEhk cik7DQorICAgIENvbmZpZ1JlcXVlc3RIZHIgPSBOVUxMOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0g Z0hpaUNvbmZpZ1JvdXRpbmctPkJsb2NrVG9Db25maWcgKA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ0hpaUNvbmZpZ1JvdXRpbmcsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDb25maWdSZXF1ZXN0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KFVJTlQ4ICopICZQcml2YXRlLT5UbHNBdXRoQ29uZmlnTnZEYXRhLA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlc3VsdHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmVz cw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCisNCisgIC8vDQorICAvLyBG cmVlIHRoZSBhbGxvY2F0ZWQgY29uZmlnIHJlcXVlc3Qgc3RyaW5nLg0KKyAgLy8NCisgIGlmIChB bGxvY2F0ZWRSZXF1ZXN0KSB7DQorICAgIEZyZWVQb29sIChDb25maWdSZXF1ZXN0KTsNCisgIH0N CisNCisgIC8vDQorICAvLyBTZXQgUHJvZ3Jlc3Mgc3RyaW5nIHRvIHRoZSBvcmlnaW5hbCByZXF1 ZXN0IHN0cmluZy4NCisgIC8vDQorICBpZiAoUmVxdWVzdCA9PSBOVUxMKSB7DQorICAgICpQcm9n cmVzcyA9IE5VTEw7DQorICB9IGVsc2UgaWYgKFN0clN0ciAoUmVxdWVzdCwgTCJPRkZTRVQiKSA9 PSBOVUxMKSB7DQorICAgICpQcm9ncmVzcyA9IFJlcXVlc3QgKyBTdHJMZW4gKFJlcXVlc3QpOw0K KyAgfQ0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorLyoqDQorICAgDQorICBUaGlzIGZ1 bmN0aW9uIGFwcGxpZXMgY2hhbmdlcyBpbiBhIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24uDQorICBJ bnB1dCBpcyBhIENvbmZpZ3VyYXRpb24sIHdoaWNoIGhhcyB0aGUgcm91dGluZyBkYXRhIGZvciB0 aGlzDQorICBkcml2ZXIgZm9sbG93ZWQgYnkgbmFtZSAvIHZhbHVlIGNvbmZpZ3VyYXRpb24gcGFp cnMuIFRoZSBkcml2ZXINCisgIG11c3QgYXBwbHkgdGhvc2UgcGFpcnMgdG8gaXRzIGNvbmZpZ3Vy YWJsZSBzdG9yYWdlLiBJZiB0aGUNCisgIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24gaXMgc3RvcmVk IGluIGEgbGluZWFyIGJsb2NrIG9mIGRhdGENCisgIGFuZCB0aGUgZHJpdmVyJ3MgbmFtZSAvIHZh bHVlIHBhaXJzIGFyZSBpbiA8QmxvY2tDb25maWc+DQorICBmb3JtYXQsIGl0IG1heSB1c2UgdGhl IENvbmZpZ1RvQmxvY2sgaGVscGVyIGZ1bmN0aW9uIChhYm92ZSkgdG8NCisgIHNpbXBsaWZ5IHRo ZSBqb2IuDQorDQorICBAcGFyYW0gVGhpcyAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBFRklfSElJ X0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wuDQorDQorICBAcGFyYW0gQ29uZmlndXJhdGlvbiAgQSBu dWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcgaW4NCisgICAgICAgICAgICAgICAgICAgICAg ICA8Q29uZmlnU3RyaW5nPiBmb3JtYXQuIA0KKyAgDQorICBAcGFyYW0gUHJvZ3Jlc3MgICAgICAg QSBwb2ludGVyIHRvIGEgc3RyaW5nIGZpbGxlZCBpbiB3aXRoIHRoZQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgIG9mZnNldCBvZiB0aGUgbW9zdCByZWNlbnQgJyYnIGJlZm9yZSB0aGUNCisgICAg ICAgICAgICAgICAgICAgICAgICBmaXJzdCBmYWlsaW5nIG5hbWUgLyB2YWx1ZSBwYWlyIChvciB0 aGUNCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm4gaW5nIG9mIHRoZSBzdHJpbmcgaWYg dGhlIGZhaWx1cmUNCisgICAgICAgICAgICAgICAgICAgICAgICBpcyBpbiB0aGUgZmlyc3QgbmFt ZSAvIHZhbHVlIHBhaXIpIG9yDQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRlcm1pbmF0 aW5nIE5VTEwgaWYgYWxsIHdhcw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWwu DQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSByZXN1bHRzIGhhdmUg YmVlbiBkaXN0cmlidXRlZCBvciBhcmUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXdhaXRpbmcgZGlzdHJpYnV0aW9uLg0KKyAgDQorICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTICAgIE5vdCBlbm91Z2ggbWVtb3J5IHRvIHN0b3JlIHRoZQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwYXJ0cyBvZiB0aGUgcmVzdWx0cyB0aGF0IG11c3QgYmUNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVkIGF3YWl0aW5nIHBvc3NpYmxl IGZ1dHVyZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbHMuDQor ICANCisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSUyAgUGFzc2luZyBpbiBhIE5VTEwg Zm9yIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHRzIHBhcmFt ZXRlciB3b3VsZCByZXN1bHQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g dGhpcyB0eXBlIG9mIGVycm9yLg0KKyAgDQorICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAg ICAgIFRhcmdldCBmb3IgdGhlIHNwZWNpZmllZCByb3V0aW5nIGRhdGENCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2FzIG5vdCBmb3VuZA0KKw0KKyoqLw0KK0VGSV9TVEFUVVMN CitFRklBUEkNCitUbHNBdXRoQ29uZmlnQWNjZXNzUm91dGVDb25maWcgKA0KKyAgSU4gQ09OU1Qg IEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTCAgKlRoaXMsDQorICBJTiBDT05TVCAgRUZJ X1NUUklORyAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLA0KKyAgT1VUICAgICAg IEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgKlByb2dyZXNzDQorICApDQorew0KKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZTsNCisgIFRMU19BVVRIX0NPTkZJR19QUklW QVRFX0RBVEEgICAgICpQcml2YXRlOw0KKw0KKyAgaWYgKFByb2dyZXNzID09IE5VTEwpIHsNCisg ICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisgICpQcm9ncmVzcyA9IENv bmZpZ3VyYXRpb247DQorDQorICBpZiAoQ29uZmlndXJhdGlvbiA9PSBOVUxMKSB7DQorICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICAvLw0KKyAgLy8gQ2hlY2sg cm91dGluZyBkYXRhIGluIDxDb25maWdIZHI+Lg0KKyAgLy8gTm90ZTogdGhlcmUgaXMgbm8gbmFt ZSBmb3IgTmFtZS9WYWx1ZSBzdG9yYWdlLCBvbmx5IEdVSUQgd2lsbCBiZSBjaGVja2VkDQorICAv Lw0KKyAgaWYgKCFIaWlJc0NvbmZpZ0hkck1hdGNoIChDb25maWd1cmF0aW9uLCAmZ1Rsc0F1dGhD b25maWdHdWlkLCBtVGxzQXV0aENvbmZpZ1N0b3JhZ2VOYW1lKSkgew0KKyAgICByZXR1cm4gRUZJ X05PVF9GT1VORDsNCisgIH0NCisNCisgIFByaXZhdGUgPSBUTFNfQVVUSF9DT05GSUdfUFJJVkFU RV9GUk9NX1RISVMgKFRoaXMpOw0KKyAgDQorICBCdWZmZXJTaXplID0gc2l6ZW9mIChUTFNfQVVU SF9DT05GSUdfSUZSX05WREFUQSk7DQorICBaZXJvTWVtICgmUHJpdmF0ZS0+VGxzQXV0aENvbmZp Z052RGF0YSwgQnVmZmVyU2l6ZSk7DQorDQorICBTdGF0dXMgPSBnSGlpQ29uZmlnUm91dGluZy0+ Q29uZmlnVG9CbG9jayAoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnSGlpQ29u ZmlnUm91dGluZywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRp b24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUlOVDggKikgJlByaXZhdGUt PlRsc0F1dGhDb25maWdOdkRhdGEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm QnVmZmVyU2l6ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyZXNzDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIFN0YXR1czsN Cit9ICANCisNCisvKioNCisgICANCisgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHByb3Zp ZGUgcmVzdWx0cyBkYXRhIHRvIHRoZSBkcml2ZXIuDQorICBUaGlzIGRhdGEgY29uc2lzdHMgb2Yg YSB1bmlxdWUga2V5IHRoYXQgaXMgdXNlZCB0byBpZGVudGlmeQ0KKyAgd2hpY2ggZGF0YSBpcyBl aXRoZXIgYmVpbmcgcGFzc2VkIGJhY2sgb3IgYmVpbmcgYXNrZWQgZm9yLg0KKw0KKyAgQHBhcmFt ICBUaGlzICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgRUZJX0hJSV9DT05GSUdfQUND RVNTX1BST1RPQ09MLg0KKyAgQHBhcmFtICBBY3Rpb24gICAgICAgICAgICAgICAgIFNwZWNpZmll cyB0aGUgdHlwZSBvZiBhY3Rpb24gdGFrZW4gYnkgdGhlIGJyb3dzZXIuDQorICBAcGFyYW0gIFF1 ZXN0aW9uSWQgICAgICAgICAgICAgQSB1bmlxdWUgdmFsdWUgd2hpY2ggaXMgc2VudCB0byB0aGUg b3JpZ2luYWwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRpbmcgZHJp dmVyIHNvIHRoYXQgaXQgY2FuIGlkZW50aWZ5IHRoZSB0eXBlDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb2YgZGF0YSB0byBleHBlY3QuIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGEg dGVuZHMgdG8gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyeSBiYXNlZCBv biB0aGUgb3Bjb2RlIHRoYXQgZ2VuZXJhdGVkIHRoZSBjYWxsYmFjay4NCisgIEBwYXJhbSAgVHlw ZSAgICAgICAgICAgICAgICAgICBUaGUgdHlwZSBvZiB2YWx1ZSBmb3IgdGhlIHF1ZXN0aW9uLg0K KyAgQHBhcmFtICBWYWx1ZSAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSBi ZWluZyBzZW50IHRvIHRoZSBvcmlnaW5hbA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGV4cG9ydGluZyBkcml2ZXIuDQorICBAcGFyYW0gIEFjdGlvblJlcXVlc3QgICAgICAgICAg T24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIGFjdGlvbiByZXF1ZXN0ZWQgYnkgdGhlDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgZnVuY3Rpb24uDQorDQorICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIGNhbGxiYWNrIHN1Y2Nlc3NmdWxseSBoYW5k bGVkIHRoZSBhY3Rpb24uDQorICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgTm90IGVu b3VnaCBzdG9yYWdlIGlzIGF2YWlsYWJsZSB0byBob2xkIHRoZQ0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCBpdHMgZGF0YS4NCisgIEByZXR2YWwgRUZJX0RF VklDRV9FUlJPUiAgICAgICBUaGUgdmFyaWFibGUgY291bGQgbm90IGJlIHNhdmVkLg0KKyAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIFRoZSBzcGVjaWZpZWQgQWN0aW9uIGlzIG5vdCBz dXBwb3J0ZWQgYnkgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJh Y2suDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1Rsc0F1dGhDb25maWdBY2Nlc3NDYWxs YmFjayAoDQorICBJTiAgICAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICAg KlRoaXMsDQorICBJTiAgICAgRUZJX0JST1dTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAg QWN0aW9uLA0KKyAgSU4gICAgIEVGSV9RVUVTVElPTl9JRCAgICAgICAgICAgICAgICAgICAgICAg IFF1ZXN0aW9uSWQsDQorICBJTiAgICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVHlwZSwNCisgIElOIE9VVCBFRklfSUZSX1RZUEVfVkFMVUUgICAgICAgICAgICAgICAg ICAgICAqVmFsdWUsDQorICBPVVQgICAgRUZJX0JST1dTRVJfQUNUSU9OX1JFUVVFU1QgICAgICAg ICAgICAgKkFjdGlvblJlcXVlc3QNCisgICkNCit7DQorICBFRklfSU5QVVRfS0VZICAgICAgICAg ICAgICAgICAgIEtleTsNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KKyAgVExTX0FVVEhfQ09ORklHX1BSSVZBVEVfREFUQSAgICAqUHJpdmF0ZTsNCisgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZTsNCisgIFRMU19BVVRIX0NPTkZJ R19JRlJfTlZEQVRBICAgICAgKklmck52RGF0YTsNCisgIFVJTlQxNiAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWxJZDsNCisgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgKkZp bGU7DQorDQorICBTdGF0dXMgICAgICAgICAgID0gRUZJX1NVQ0NFU1M7DQorICBGaWxlICAgICAg ICAgICAgID0gTlVMTDsNCisNCisgIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoVmFsdWUgPT0gTlVM TCkgfHwgKEFjdGlvblJlcXVlc3QgPT0gTlVMTCkpIHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCisgIH0NCisgIA0KKyAgUHJpdmF0ZSA9IFRMU19BVVRIX0NPTkZJR19QUklW QVRFX0ZST01fVEhJUyAoVGhpcyk7DQorDQorICBtVGxzQXV0aFByaXZhdGVEYXRhID0gUHJpdmF0 ZTsNCisNCisgIC8vDQorICAvLyBSZXRyaWV2ZSB1bmNvbW1pdHRlZCBkYXRhIGZyb20gQnJvd3Nl cg0KKyAgLy8NCisgIEJ1ZmZlclNpemUgPSBzaXplb2YgKFRMU19BVVRIX0NPTkZJR19JRlJfTlZE QVRBKTsNCisgIElmck52RGF0YSA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJ1ZmZlclNpemUpOw0KKyAg aWYgKElmck52RGF0YSA9PSBOVUxMKSB7DQorICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNF UzsNCisgIH0NCisNCisgIEhpaUdldEJyb3dzZXJEYXRhICgmZ1Rsc0F1dGhDb25maWdHdWlkLCBt VGxzQXV0aENvbmZpZ1N0b3JhZ2VOYW1lLCBCdWZmZXJTaXplLCAoVUlOVDggKikgSWZyTnZEYXRh KTsNCisNCisgIGlmICgoQWN0aW9uICE9IEVGSV9CUk9XU0VSX0FDVElPTl9DSEFOR0VEKSAmJg0K KyAgICAgIChBY3Rpb24gIT0gRUZJX0JST1dTRVJfQUNUSU9OX0NIQU5HSU5HKSkgew0KKyAgICBT dGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQorICAgIGdvdG8gRVhJVDsNCisgIH0NCisNCisgIGlm IChBY3Rpb24gPT0gRUZJX0JST1dTRVJfQUNUSU9OX0NIQU5HSU5HKSB7DQorICAgIHN3aXRjaCAo UXVlc3Rpb25JZCkgew0KKyAgICBjYXNlIEtFWV9UTFNfQVVUSF9DT05GSUdfQ0xJRU5UX0NFUlQ6 DQorICAgIGNhc2UgS0VZX1RMU19BVVRIX0NPTkZJR19TRVJWRVJfQ0E6DQorICAgICAgLy8NCisg ICAgICAvLyBDbGVhciBDZXJ0IEdVSUQuDQorICAgICAgLy8NCisgICAgICBaZXJvTWVtIChJZnJO dkRhdGEtPkNlcnRHdWlkLCBzaXplb2YgKElmck52RGF0YS0+Q2VydEd1aWQpKTsNCisgICAgICBp ZiAoUHJpdmF0ZS0+Q2VydEd1aWQgPT0gTlVMTCkgew0KKyAgICAgICAgUHJpdmF0ZS0+Q2VydEd1 aWQgPSAoRUZJX0dVSUQgKikgQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChFRklfR1VJRCkpOw0K KyAgICAgICAgaWYgKFByaXZhdGUtPkNlcnRHdWlkID09IE5VTEwpIHsNCisgICAgICAgICAgcmV0 dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgICBp ZiAoUXVlc3Rpb25JZCA9PSBLRVlfVExTX0FVVEhfQ09ORklHX0NMSUVOVF9DRVJUKSB7DQorICAg ICAgICBMYWJlbElkID0gVExTX0FVVEhfQ09ORklHX0ZPUk1JRDNfRk9STTsNCisgICAgICB9IGVs c2UgaWYgKFF1ZXN0aW9uSWQgPT0gS0VZX1RMU19BVVRIX0NPTkZJR19TRVJWRVJfQ0EpIHsNCisg ICAgICAgIExhYmVsSWQgPSBUTFNfQVVUSF9DT05GSUdfRk9STUlENF9GT1JNOw0KKyAgICAgIH0N CisNCisgICAgICAvLw0KKyAgICAgIC8vIFJlZnJlc2ggc2VsZWN0ZWQgZmlsZS4NCisgICAgICAv Lw0KKyAgICAgIENsZWFuVXBQYWdlIChMYWJlbElkLCBQcml2YXRlKTsNCisgICAgICBicmVhazsN CisgICAgY2FzZSBLRVlfVExTX0FVVEhfQ09ORklHX0VOUk9MTF9DRVJUX0ZST01fRklMRToNCisg ICAgICBDaG9vc2VGaWxlKCBOVUxMLCBOVUxMLCAoQ0hPT1NFX0hBTkRMRVIpIFVwZGF0ZUNBRnJv bUZpbGUsICZGaWxlKTsNCisgICAgICBicmVhazsNCisNCisgICAgY2FzZSBLRVlfVExTX0FVVEhf Q09ORklHX1ZBTFVFX1NBVkVfQU5EX0VYSVQ6DQorICAgICAgU3RhdHVzID0gRW5yb2xsQ2VydERh dGFiYXNlIChQcml2YXRlLCBFRklfVExTX0NBX0NFUlRJRklDQVRFX1ZBUklBQkxFKTsNCisgICAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgICBDcmVhdGVQb3BVcCAoDQorICAg ICAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KKyAgICAgICAgICAm S2V5LA0KKyAgICAgICAgICBMIkVSUk9SOiBFbnJvbGwgQ2VydCBGYWlsdXJlISIsDQorICAgICAg ICAgIE5VTEwNCisgICAgICAgICAgKTsNCisgICAgICB9DQorICAgICAgYnJlYWs7DQorDQorICAg IGNhc2UgS0VZX1RMU19BVVRIX0NPTkZJR19WQUxVRV9OT19TQVZFX0FORF9FWElUOg0KKyAgICAg IGlmIChQcml2YXRlLT5GaWxlQ29udGV4dC0+RkhhbmRsZSAhPSBOVUxMKSB7DQorICAgICAgICBD bG9zZUZpbGUgKFByaXZhdGUtPkZpbGVDb250ZXh0LT5GSGFuZGxlKTsNCisgICAgICAgIFByaXZh dGUtPkZpbGVDb250ZXh0LT5GSGFuZGxlID0gTlVMTDsNCisgICAgICAgIGlmIChQcml2YXRlLT5G aWxlQ29udGV4dC0+RmlsZU5hbWUhPSBOVUxMKXsNCisgICAgICAgICAgRnJlZVBvb2woUHJpdmF0 ZS0+RmlsZUNvbnRleHQtPkZpbGVOYW1lKTsNCisgICAgICAgICAgUHJpdmF0ZS0+RmlsZUNvbnRl eHQtPkZpbGVOYW1lID0gTlVMTDsNCisgICAgICAgIH0NCisgICAgICB9DQorDQorICAgICAgaWYg KFByaXZhdGUtPkNlcnRHdWlkIT0gTlVMTCkgew0KKyAgICAgICAgRnJlZVBvb2wgKFByaXZhdGUt PkNlcnRHdWlkKTsNCisgICAgICAgIFByaXZhdGUtPkNlcnRHdWlkID0gTlVMTDsNCisgICAgICB9 DQorICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgS0VZX1RMU19BVVRIX0NPTkZJR19ERUxFVEVf Q0VSVDoNCisgICAgICBVcGRhdGVEZWxldGVQYWdlICgNCisgICAgICAgIFByaXZhdGUsDQorICAg ICAgICBFRklfVExTX0NBX0NFUlRJRklDQVRFX1ZBUklBQkxFLA0KKyAgICAgICAgJmdFZmlUbHND YUNlcnRpZmljYXRlR3VpZCwNCisgICAgICAgIExBQkVMX0NBX0RFTEVURSwNCisgICAgICAgIFRM U19BVVRIX0NPTkZJR19GT1JNSUQ1X0ZPUk0sDQorICAgICAgICBPUFRJT05fREVMX0NBX0VTVElP Tl9JRA0KKyAgICAgICAgKTsNCisgICAgICAgYnJlYWs7DQorICAgICAgDQorICAgIGRlZmF1bHQ6 DQorICAgICAgaWYgKChRdWVzdGlvbklkID49IE9QVElPTl9ERUxfQ0FfRVNUSU9OX0lEKSAmJg0K KyAgICAgICAgICAgICAgICAgKFF1ZXN0aW9uSWQgPCAoT1BUSU9OX0RFTF9DQV9FU1RJT05fSUQg KyBPUFRJT05fQ09ORklHX1JBTkdFKSkpICB7DQorICAgICAgICBEZWxldGVDZXJ0ICgNCisgICAg ICAgICAgUHJpdmF0ZSwNCisgICAgICAgICAgRUZJX1RMU19DQV9DRVJUSUZJQ0FURV9WQVJJQUJM RSwNCisgICAgICAgICAgJmdFZmlUbHNDYUNlcnRpZmljYXRlR3VpZCwNCisgICAgICAgICAgTEFC RUxfQ0FfREVMRVRFLA0KKyAgICAgICAgICBUTFNfQVVUSF9DT05GSUdfRk9STUlENV9GT1JNLA0K KyAgICAgICAgICBPUFRJT05fREVMX0NBX0VTVElPTl9JRCwNCisgICAgICAgICAgUXVlc3Rpb25J ZCAtIE9QVElPTl9ERUxfQ0FfRVNUSU9OX0lEDQorICAgICAgICAgICk7DQorICAgICAgfQ0KKyAg ICAgIGJyZWFrOw0KKyAgICB9DQorICB9IGVsc2UgaWYgKEFjdGlvbiA9PSBFRklfQlJPV1NFUl9B Q1RJT05fQ0hBTkdFRCkgew0KKyAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQpIHsNCisgICAgY2FzZSBL RVlfVExTX0FVVEhfQ09ORklHX0NFUlRfR1VJRDoNCisgICAgICBBU1NFUlQgKFByaXZhdGUtPkNl cnRHdWlkICE9IE5VTEwpOw0KKyAgICAgIFN0YXR1cyA9IFN0cmluZ1RvR3VpZCAoDQorICAgICAg ICAgICAgICAgICBJZnJOdkRhdGEtPkNlcnRHdWlkLA0KKyAgICAgICAgICAgICAgICAgU3RyTGVu IChJZnJOdkRhdGEtPkNlcnRHdWlkKSwNCisgICAgICAgICAgICAgICAgIFByaXZhdGUtPkNlcnRH dWlkDQorICAgICAgICAgICAgICAgICApOw0KKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisNCisgICAgICAqQWN0aW9uUmVxdWVzdCA9 IEVGSV9CUk9XU0VSX0FDVElPTl9SRVFVRVNUX0ZPUk1fQVBQTFk7DQorICAgICAgYnJlYWs7DQor ICAgIGRlZmF1bHQ6DQorICAgICAgYnJlYWs7DQorICAgIH0NCisgIH0NCisgIA0KK0VYSVQ6DQor DQorICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBCdWZmZXJTaXplID0gc2l6ZW9m IChUTFNfQVVUSF9DT05GSUdfSUZSX05WREFUQSk7DQorICAgIEhpaVNldEJyb3dzZXJEYXRhICgm Z1Rsc0F1dGhDb25maWdHdWlkLCBtVGxzQXV0aENvbmZpZ1N0b3JhZ2VOYW1lLCBCdWZmZXJTaXpl LCAoVUlOVDgqKSBJZnJOdkRhdGEsIE5VTEwpOw0KKyAgfQ0KKw0KKyAgRnJlZVBvb2wgKElmck52 RGF0YSk7DQorDQorICBpZiAoRmlsZSAhPSBOVUxMKXsNCisgICAgRnJlZVBvb2woRmlsZSk7DQor ICAgIEZpbGUgPSBOVUxMOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKw0KK30N CmRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ0lt cGwuaCBiL05ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnSW1wbC5oDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMzk4ZjdiNg0KLS0tIC9kZXYvbnVs bA0KKysrIGIvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdJbXBsLmgN CkBAIC0wLDAgKzEsMjgyIEBADQorLyoqIEBmaWxlDQorICBIZWFkZXIgZmlsZSBvZiBNaXNjZWxs YW5lb3VzIFJvdXRpbmVzIGZvciBUbHNBdXRoQ29uZmlnRHhlIGRyaXZlci4NCisNCitDb3B5cmln aHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N CisNCitUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorYXJlIGxp Y2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEJTRCBMaWNlbnNlDQord2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24u ICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KK2h0dHA6Ly9v cGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCisNCitUSEUgUFJPR1JBTSBJ UyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywN CitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI RVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKw0KKyoqLw0KKw0KKyNpZm5kZWYgX19UTFNfQVVUSF9D T05GSUdfSU1QTF9IX18NCisjZGVmaW5lIF9fVExTX0FVVEhfQ09ORklHX0lNUExfSF9fDQorDQor I2luY2x1ZGUgPFVlZmkuaD4NCisNCisjaW5jbHVkZSA8UHJvdG9jb2wvSGlpQ29uZmlnQWNjZXNz Lmg+DQorI2luY2x1ZGUgPFByb3RvY29sL1NpbXBsZUZpbGVTeXN0ZW0uaD4NCisNCisvLw0KKy8v IExpYnJhcmllcw0KKy8vDQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxl TGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+ DQorI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KKyNpbmNsdWRlIDxM aWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQor I2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGli Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KKyNpbmNsdWRlIDxMaWJy YXJ5L0hpaUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlIaWlTZXJ2aWNlc0xpYi5oPg0K KyNpbmNsdWRlIDxMaWJyYXJ5L0ZpbGVFeHBsb3JlckxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5 L1ByaW50TGliLmg+DQorDQorI2luY2x1ZGUgPEd1aWQvTWRlTW9kdWxlSGlpLmg+DQorI2luY2x1 ZGUgPEd1aWQvSW1hZ2VBdXRoZW50aWNhdGlvbi5oPg0KKyNpbmNsdWRlIDxHdWlkL1Rsc0F1dGhl bnRpY2F0aW9uLmg+DQorDQorDQorLy8NCisvLyBJbmNsdWRlIGZpbGVzIHdpdGggZnVuY3Rpb24g cHJvdG90eXBlcw0KKy8vDQorI2luY2x1ZGUgIlRsc0F1dGhDb25maWdOdkRhdGEuaCINCisNCitl eHRlcm4gICBVSU5UOCAgICAgICBUbHNBdXRoQ29uZmlnRHhlU3RyaW5nc1tdOw0KK2V4dGVybiAg IFVJTlQ4ICAgICAgIFRsc0F1dGhDb25maWdWZnJCaW5bXTsNCisNCisjZGVmaW5lIFRMU19BVVRI X0NPTkZJR19QUklWQVRFX0RBVEFfU0lHTkFUVVJFICAgIFNJR05BVFVSRV8zMiAoJ1QnLCAnQScs ICdDJywgJ0QnKQ0KKyNkZWZpbmUgVExTX0FVVEhfQ09ORklHX1BSSVZBVEVfRlJPTV9USElTKGEp ICAgICAgQ1IgKGEsIFRMU19BVVRIX0NPTkZJR19QUklWQVRFX0RBVEEsIENvbmZpZ0FjY2Vzcywg VExTX0FVVEhfQ09ORklHX1BSSVZBVEVfREFUQV9TSUdOQVRVUkUpDQorDQorI2RlZmluZSBUTFNf QVVUSF9DT05GSUdfVkFSX0JBU0VfQVRUUiAgKEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfCBF RklfVkFSSUFCTEVfQk9PVFNFUlZJQ0VfQUNDRVNTKQ0KKw0KK3R5cGVkZWYgc3RydWN0IF9UTFNf QVVUSF9DT05GSUdfUFJJVkFURV9EQVRBICAgICAgVExTX0FVVEhfQ09ORklHX1BSSVZBVEVfREFU QTsNCit0eXBlZGVmIHN0cnVjdCBfVExTX0FVVEhfQ09ORklHX0ZJTEVfQ09OVEVYVCAgICAgIFRM U19BVVRIX0NPTkZJR19GSUxFX0NPTlRFWFQ7DQorDQorLy8vDQorLy8vIEhJSSBzcGVjaWZpYyBW ZW5kb3IgRGV2aWNlIFBhdGggZGVmaW5pdGlvbi4NCisvLy8NCit0eXBlZGVmIHN0cnVjdCB7DQor ICBWRU5ET1JfREVWSUNFX1BBVEggICAgICAgICAgICAgICAgVmVuZG9yRGV2aWNlUGF0aDsNCisg IEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgICBFbmQ7DQorfSBISUlfVkVORE9SX0RF VklDRV9QQVRIOw0KKw0KK3N0cnVjdCBfVExTX0FVVEhfQ09ORklHX0ZJTEVfQ09OVEVYVCB7DQor ICBFRklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICAgRkhhbmRsZTsNCisgIFVJTlQxNiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqRmlsZU5hbWU7DQorfTsNCisNCitzdHJ1Y3QgX1RM U19BVVRIX0NPTkZJR19QUklWQVRFX0RBVEEgew0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNpZ25hdHVyZTsNCisNCisgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg ICAgICBEcml2ZXJIYW5kbGU7DQorICBFRklfSElJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXJlZEhhbmRsZTsNCisgIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTCAgICBD b25maWdBY2Nlc3M7DQorICBUTFNfQVVUSF9DT05GSUdfSUZSX05WREFUQSAgICAgICAgVGxzQXV0 aENvbmZpZ052RGF0YTsNCisNCisgIFRMU19BVVRIX0NPTkZJR19GSUxFX0NPTlRFWFQgICAgICAq RmlsZUNvbnRleHQ7DQorDQorICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgKkNl cnRHdWlkOw0KK307DQorDQorLyoqDQorICBVbmxvYWQgdGhlIGNvbmZpZ3VyYXRpb24gZm9ybSwg dGhpcyBpbmNsdWRlczogZGVsZXRlIGFsbCB0aGUgY29uZmlndXJhdGlvbg0KKyAgZW50cmllcywg dW5pbnN0YWxsIHRoZSBmb3JtIGNhbGxiYWNrIHByb3RvY29sLCBhbmQgZnJlZSB0aGUgcmVzb3Vy Y2VzIHVzZWQuDQorICBUaGUgZm9ybSB3aWxsIG9ubHkgYmUgdW5sb2FkIGNvbXBsZXRlbHkgd2hl biBib3RoIElQNCBhbmQgSVA2IHN0YWNrIGFyZSBzdG9wcGVkLg0KKw0KKyAgQHBhcmFtW2luXSAg UHJpdmF0ZSAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBkcml2ZXIgcHJpdmF0ZSBkYXRhLg0K Kw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBm b3JtIGlzIHVubG9hZGVkLg0KKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgICBGYWls ZWQgdG8gdW5sb2FkIHRoZSBmb3JtLg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitUbHNBdXRoQ29u ZmlnRm9ybVVubG9hZCAoDQorICBJTiBUTFNfQVVUSF9DT05GSUdfUFJJVkFURV9EQVRBICAgICAq UHJpdmF0ZQ0KKyAgKTsNCisNCisvKioNCisgIEluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24g Zm9ybS4NCisNCisgIEBwYXJhbVtpbl0gIFByaXZhdGUgICAgICAgICAgICAgUG9pbnRlciB0byB0 aGUgZHJpdmVyIHByaXZhdGUgZGF0YS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gZm9ybSBpcyBpbml0aWFsaXplZC4NCisgIEByZXR2YWwg RUZJX09VVF9PRl9SRVNPVVJDRVMgICAgRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4NCisNCisq Ki8NCitFRklfU1RBVFVTDQorVGxzQXV0aENvbmZpZ0Zvcm1Jbml0ICgNCisgIElOIFRMU19BVVRI X0NPTkZJR19QUklWQVRFX0RBVEEgICAgICpQcml2YXRlDQorICApOw0KKw0KKy8qKg0KKyAgIA0K KyAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGNhbGxlciB0byByZXF1ZXN0IHRoZSBjdXJyZW50 DQorICBjb25maWd1cmF0aW9uIGZvciBvbmUgb3IgbW9yZSBuYW1lZCBlbGVtZW50cy4gVGhlIHJl c3VsdGluZw0KKyAgc3RyaW5nIGlzIGluIDxDb25maWdBbHRSZXNwPiBmb3JtYXQuIEFueSBhbmQg YWxsIGFsdGVybmF0aXZlDQorICBjb25maWd1cmF0aW9uIHN0cmluZ3Mgc2hhbGwgYWxzbyBiZSBh cHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZQ0KKyAgY3VycmVudCBjb25maWd1cmF0aW9uIHN0cmlu Zy4gSWYgdGhleSBhcmUsIHRoZXkgbXVzdCBhcHBlYXINCisgIGFmdGVyIHRoZSBjdXJyZW50IGNv bmZpZ3VyYXRpb24uIFRoZXkgbXVzdCBjb250YWluIHRoZSBzYW1lDQorICByb3V0aW5nIChHVUlE LCBOQU1FLCBQQVRIKSBhcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHN0cmluZy4NCisgIFRo ZXkgbXVzdCBoYXZlIGFuIGFkZGl0aW9uYWwgZGVzY3JpcHRpb24gaW5kaWNhdGluZyB0aGUgdHlw ZSBvZg0KKyAgYWx0ZXJuYXRpdmUgY29uZmlndXJhdGlvbiB0aGUgc3RyaW5nIHJlcHJlc2VudHMs DQorICAiQUxUQ0ZHPTxTdHJpbmdUb2tlbj4iLiBUaGF0IDxTdHJpbmdUb2tlbj4gKHdoZW4NCisg IGNvbnZlcnRlZCBmcm9tIEhleCBVTklDT0RFIHRvIGJpbmFyeSkgaXMgYSByZWZlcmVuY2UgdG8g YQ0KKyAgc3RyaW5nIGluIHRoZSBhc3NvY2lhdGVkIHN0cmluZyBwYWNrLg0KKw0KKyAgQHBhcmFt IFRoaXMgICAgICAgUG9pbnRzIHRvIHRoZSBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wu DQorDQorICBAcGFyYW0gUmVxdWVzdCAgICBBIG51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmlu ZyBpbg0KKyAgICAgICAgICAgICAgICAgICAgPENvbmZpZ1JlcXVlc3Q+IGZvcm1hdC4gTm90ZSB0 aGF0IHRoaXMNCisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHRoZSByb3V0aW5nIGluZm9y bWF0aW9uIGFzIHdlbGwgYXMNCisgICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmFibGUg bmFtZSAvIHZhbHVlIHBhaXJzLiBJdCBpcw0KKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZCBm b3IgdGhpcyBzdHJpbmcgdG8gYmUgaW4NCisgICAgICAgICAgICAgICAgICAgIDxNdWx0aUNvbmZp Z1JlcXVlc3Q+IGZvcm1hdC4gDQorICAgICAgICAgICAgICAgICAgICBJZiBhIE5VTEwgaXMgcGFz c2VkIGluIGZvciB0aGUgUmVxdWVzdCBmaWVsZCwgDQorICAgICAgICAgICAgICAgICAgICBhbGwg b2YgdGhlIHNldHRpbmdzIGJlaW5nIGFic3RyYWN0ZWQgYnkgdGhpcyBmdW5jdGlvbiANCisgICAg ICAgICAgICAgICAgICAgIHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFJlc3VsdHMgZmllbGQuICBJ biBhZGRpdGlvbiwgDQorICAgICAgICAgICAgICAgICAgICBpZiBhIENvbmZpZ0hkciBpcyBwYXNz ZWQgaW4gd2l0aCBubyByZXF1ZXN0IGVsZW1lbnRzLCANCisgICAgICAgICAgICAgICAgICAgIGFs bCBvZiB0aGUgc2V0dGluZ3MgYmVpbmcgYWJzdHJhY3RlZCBmb3IgdGhhdCBwYXJ0aWN1bGFyIA0K KyAgICAgICAgICAgICAgICAgICAgQ29uZmlnSGRyIHJlZmVyZW5jZSB3aWxsIGJlIHJldHVybmVk IGluIHRoZSBSZXN1bHRzIEZpZWxkLg0KKw0KKyAgQHBhcmFtIFByb2dyZXNzICAgT24gcmV0dXJu LCBwb2ludHMgdG8gYSBjaGFyYWN0ZXIgaW4gdGhlDQorICAgICAgICAgICAgICAgICAgICBSZXF1 ZXN0IHN0cmluZy4gUG9pbnRzIHRvIHRoZSBzdHJpbmcncyBudWxsDQorICAgICAgICAgICAgICAg ICAgICB0ZXJtaW5hdG9yIGlmIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwuIFBvaW50cw0KKyAgICAg ICAgICAgICAgICAgICAgdG8gdGhlIG1vc3QgcmVjZW50ICImIiBiZWZvcmUgdGhlIGZpcnN0DQor ICAgICAgICAgICAgICAgICAgICBmYWlsaW5nIG5hbWUgLyB2YWx1ZSBwYWlyIChvciB0aGUgYmVn aW5uaW5nDQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3RyaW5nIGlmIHRoZSBmYWlsdXJl IGlzIGluIHRoZSBmaXJzdA0KKyAgICAgICAgICAgICAgICAgICAgbmFtZSAvIHZhbHVlIHBhaXIp IGlmIHRoZSByZXF1ZXN0IHdhcyBub3QNCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWwu DQorDQorICBAcGFyYW0gUmVzdWx0cyAgICBBIG51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmlu ZyBpbg0KKyAgICAgICAgICAgICAgICAgICAgPE11bHRpQ29uZmlnQWx0UmVzcD4gZm9ybWF0IHdo aWNoIGhhcyBhbGwgdmFsdWVzDQorICAgICAgICAgICAgICAgICAgICBmaWxsZWQgaW4gZm9yIHRo ZSBuYW1lcyBpbiB0aGUgUmVxdWVzdCBzdHJpbmcuDQorICAgICAgICAgICAgICAgICAgICBTdHJp bmcgdG8gYmUgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZWQgZnVuY3Rpb24uDQorDQorICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBSZXN1bHRzIHN0cmluZyBpcyBmaWxsZWQgd2l0 aCB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGNvcnJlc3Bv bmRpbmcgdG8gYWxsIHJlcXVlc3RlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuYW1lcy4NCisNCisgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgTm90IGVub3Vn aCBtZW1vcnkgdG8gc3RvcmUgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhcnRzIG9mIHRoZSByZXN1bHRzIHRoYXQgbXVzdCBiZQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdG9yZWQgYXdhaXRpbmcgcG9zc2libGUgZnV0dXJlDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29scy4NCisNCisgIEByZXR2YWwgRUZJX05P VF9GT1VORCAgICAgICAgICAgUm91dGluZyBkYXRhIGRvZXNuJ3QgbWF0Y2ggYW55DQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duIGRyaXZlci4gUHJvZ3Jlc3Mgc2V0IHRv IHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBjaGFyYWN0ZXIg aW4gdGhlIHJvdXRpbmcgaGVhZGVyLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOb3RlOiBUaGVyZSBpcyBubyByZXF1aXJlbWVudCB0aGF0IHRoZQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkcml2ZXIgdmFsaWRhdGUgdGhlIHJvdXRpbmcgZGF0YS4gSXQN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBza2lwIHRoZSA8Q29uZmln SGRyPiBpbiBvcmRlciB0bw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9j ZXNzIHRoZSBuYW1lcy4NCisNCisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgSWxs ZWdhbCBzeW50YXguIFByb2dyZXNzIHNldA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0byBtb3N0IHJlY2VudCAiJiIgYmVmb3JlIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlcnJvciBvciB0aGUgYmVnaW5uaW5nIG9mIHRoZQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuDQorDQorICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiAgIFVua25vd24gbmFtZS4gUHJvZ3Jlc3MgcG9pbnRzDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSAmIGJlZm9yZSB0aGUgbmFtZSBpbg0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi4NCisNCisqKi8NCitFRklfU1RB VFVTDQorRUZJQVBJDQorVGxzQXV0aENvbmZpZ0FjY2Vzc0V4dHJhY3RDb25maWcgKA0KKyAgSU4g Q09OU1QgIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTCAgKlRoaXMsDQorICBJTiBDT05T VCAgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0LA0KKyAgT1VUICAgICAg IEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgKlByb2dyZXNzLA0KKyAgT1VUICAgICAg IEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdHMNCisgICk7DQorDQorLyoq DQorICAgDQorICBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgY2hhbmdlcyBpbiBhIGRyaXZlcidzIGNv bmZpZ3VyYXRpb24uDQorICBJbnB1dCBpcyBhIENvbmZpZ3VyYXRpb24sIHdoaWNoIGhhcyB0aGUg cm91dGluZyBkYXRhIGZvciB0aGlzDQorICBkcml2ZXIgZm9sbG93ZWQgYnkgbmFtZSAvIHZhbHVl IGNvbmZpZ3VyYXRpb24gcGFpcnMuIFRoZSBkcml2ZXINCisgIG11c3QgYXBwbHkgdGhvc2UgcGFp cnMgdG8gaXRzIGNvbmZpZ3VyYWJsZSBzdG9yYWdlLiBJZiB0aGUNCisgIGRyaXZlcidzIGNvbmZp Z3VyYXRpb24gaXMgc3RvcmVkIGluIGEgbGluZWFyIGJsb2NrIG9mIGRhdGENCisgIGFuZCB0aGUg ZHJpdmVyJ3MgbmFtZSAvIHZhbHVlIHBhaXJzIGFyZSBpbiA8QmxvY2tDb25maWc+DQorICBmb3Jt YXQsIGl0IG1heSB1c2UgdGhlIENvbmZpZ1RvQmxvY2sgaGVscGVyIGZ1bmN0aW9uIChhYm92ZSkg dG8NCisgIHNpbXBsaWZ5IHRoZSBqb2IuDQorDQorICBAcGFyYW0gVGhpcyAgICAgICAgICAgUG9p bnRzIHRvIHRoZSBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wuDQorDQorICBAcGFyYW0g Q29uZmlndXJhdGlvbiAgQSBudWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcgaW4NCisgICAg ICAgICAgICAgICAgICAgICAgICA8Q29uZmlnU3RyaW5nPiBmb3JtYXQuIA0KKyAgDQorICBAcGFy YW0gUHJvZ3Jlc3MgICAgICAgQSBwb2ludGVyIHRvIGEgc3RyaW5nIGZpbGxlZCBpbiB3aXRoIHRo ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCBvZiB0aGUgbW9zdCByZWNlbnQgJyYn IGJlZm9yZSB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBmYWlsaW5nIG5hbWUg LyB2YWx1ZSBwYWlyIChvciB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm4gaW5n IG9mIHRoZSBzdHJpbmcgaWYgdGhlIGZhaWx1cmUNCisgICAgICAgICAgICAgICAgICAgICAgICBp cyBpbiB0aGUgZmlyc3QgbmFtZSAvIHZhbHVlIHBhaXIpIG9yDQorICAgICAgICAgICAgICAgICAg ICAgICAgdGhlIHRlcm1pbmF0aW5nIE5VTEwgaWYgYWxsIHdhcw0KKyAgICAgICAgICAgICAgICAg ICAgICAgIHN1Y2Nlc3NmdWwuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg IFRoZSByZXN1bHRzIGhhdmUgYmVlbiBkaXN0cmlidXRlZCBvciBhcmUNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXdhaXRpbmcgZGlzdHJpYnV0aW9uLg0KKyAgDQorICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIE5vdCBlbm91Z2ggbWVtb3J5IHRvIHN0b3JlIHRo ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyBvZiB0aGUgcmVzdWx0 cyB0aGF0IG11c3QgYmUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVk IGF3YWl0aW5nIHBvc3NpYmxlIGZ1dHVyZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwcm90b2NvbHMuDQorICANCisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSUyAg UGFzc2luZyBpbiBhIE5VTEwgZm9yIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZXN1bHRzIHBhcmFtZXRlciB3b3VsZCByZXN1bHQNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW4gdGhpcyB0eXBlIG9mIGVycm9yLg0KKyAgDQorICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgICAgICAgICAgIFRhcmdldCBmb3IgdGhlIHNwZWNpZmllZCByb3V0aW5nIGRh dGENCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIG5vdCBmb3VuZA0KKw0K KyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitUbHNBdXRoQ29uZmlnQWNjZXNzUm91dGVDb25m aWcgKA0KKyAgSU4gQ09OU1QgIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTCAgKlRoaXMs DQorICBJTiBDT05TVCAgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0 aW9uLA0KKyAgT1VUICAgICAgIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgKlByb2dy ZXNzDQorICApOyAgDQorDQorLyoqDQorICAgDQorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0 byBwcm92aWRlIHJlc3VsdHMgZGF0YSB0byB0aGUgZHJpdmVyLg0KKyAgVGhpcyBkYXRhIGNvbnNp c3RzIG9mIGEgdW5pcXVlIGtleSB0aGF0IGlzIHVzZWQgdG8gaWRlbnRpZnkNCisgIHdoaWNoIGRh dGEgaXMgZWl0aGVyIGJlaW5nIHBhc3NlZCBiYWNrIG9yIGJlaW5nIGFza2VkIGZvci4NCisNCisg IEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIEVGSV9ISUlfQ09O RklHX0FDQ0VTU19QUk9UT0NPTC4NCisgIEBwYXJhbSAgQWN0aW9uICAgICAgICAgICAgICAgICBT cGVjaWZpZXMgdGhlIHR5cGUgb2YgYWN0aW9uIHRha2VuIGJ5IHRoZSBicm93c2VyLg0KKyAgQHBh cmFtICBRdWVzdGlvbklkICAgICAgICAgICAgIEEgdW5pcXVlIHZhbHVlIHdoaWNoIGlzIHNlbnQg dG8gdGhlIG9yaWdpbmFsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0 aW5nIGRyaXZlciBzbyB0aGF0IGl0IGNhbiBpZGVudGlmeSB0aGUgdHlwZQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9mIGRhdGEgdG8gZXhwZWN0LiBUaGUgZm9ybWF0IG9mIHRo ZSBkYXRhIHRlbmRzIHRvIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnkg YmFzZWQgb24gdGhlIG9wY29kZSB0aGF0IGdlbmVyYXRlZCB0aGUgY2FsbGJhY2suDQorICBAcGFy YW0gIFR5cGUgICAgICAgICAgICAgICAgICAgVGhlIHR5cGUgb2YgdmFsdWUgZm9yIHRoZSBxdWVz dGlvbi4NCisgIEBwYXJhbSAgVmFsdWUgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IGRhdGEgYmVpbmcgc2VudCB0byB0aGUgb3JpZ2luYWwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBleHBvcnRpbmcgZHJpdmVyLg0KKyAgQHBhcmFtICBBY3Rpb25SZXF1ZXN0ICAg ICAgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSBhY3Rpb24gcmVxdWVzdGVkIGJ5IHRoZQ0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrIGZ1bmN0aW9uLg0KKw0K KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBjYWxsYmFjayBzdWNjZXNzZnVs bHkgaGFuZGxlZCB0aGUgYWN0aW9uLg0KKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAg IE5vdCBlbm91Z2ggc3RvcmFnZSBpcyBhdmFpbGFibGUgdG8gaG9sZCB0aGUNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgaXRzIGRhdGEuDQorICBAcmV0dmFs IEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhlIHZhcmlhYmxlIGNvdWxkIG5vdCBiZSBzYXZlZC4N CisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGUgc3BlY2lmaWVkIEFjdGlvbiBp cyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhbGxiYWNrLg0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitUbHNBdXRoQ29uZmlnQWNj ZXNzQ2FsbGJhY2sgKA0KKyAgSU4gICAgIENPTlNUIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9U T0NPTCAgICpUaGlzLA0KKyAgSU4gICAgIEVGSV9CUk9XU0VSX0FDVElPTiAgICAgICAgICAgICAg ICAgICAgIEFjdGlvbiwNCisgIElOICAgICBFRklfUVVFU1RJT05fSUQgICAgICAgICAgICAgICAg ICAgICAgICBRdWVzdGlvbklkLA0KKyAgSU4gICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFR5cGUsDQorICBJTiBPVVQgRUZJX0lGUl9UWVBFX1ZBTFVFICAgICAgICAg ICAgICAgICAgICAgKlZhbHVlLA0KKyAgT1VUICAgIEVGSV9CUk9XU0VSX0FDVElPTl9SRVFVRVNU ICAgICAgICAgICAgICpBY3Rpb25SZXF1ZXN0DQorICApOw0KKw0KKyNlbmRpZg0KKw0KZGlmZiAt LWdpdCBhL05ldHdvcmtQa2cvVGxzQXV0aENvbmZpZ0R4ZS9UbHNBdXRoQ29uZmlnTnZEYXRhLmgg Yi9OZXR3b3JrUGtnL1Rsc0F1dGhDb25maWdEeGUvVGxzQXV0aENvbmZpZ052RGF0YS5oDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZjQ1MzIwMQ0KLS0tIC9kZXYvbnVsbA0K KysrIGIvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdOdkRhdGEuaA0K QEAgLTAsMCArMSw0OSBAQA0KKy8qKiBAZmlsZQ0KKyAgSGVhZGVyIGZpbGUgZm9yIE5WIGRhdGEg c3RydWN0dXJlIGRlZmluaXRpb24uDQorDQorQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorVGhpcyBwcm9ncmFtIGFuZCB0aGUg YWNjb21wYW55aW5nIG1hdGVyaWFscw0KK2FyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUg dW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KK3doaWNo IGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGlj ZW5zZSBtYXkgYmUgZm91bmQgYXQNCitodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNk LWxpY2Vuc2UucGhwDQorDQorVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJT RCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJF UFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCisN CisqKi8NCisNCisjaWZuZGVmIF9fVExTX0FVVEhfQ09ORklHX05WX0RBVEFfSF9fDQorI2RlZmlu ZSBfX1RMU19BVVRIX0NPTkZJR19OVl9EQVRBX0hfXw0KKw0KKyNpbmNsdWRlIDxHdWlkL1Rsc0F1 dGhDb25maWdIaWkuaD4NCisNCisjZGVmaW5lIFRMU19BVVRIX0NPTkZJR19HVUlEX1NJWkUgICAg ICAgICAgICAgICAgIDM2DQorI2RlZmluZSBUTFNfQVVUSF9DT05GSUdfR1VJRF9TVE9SQUdFX1NJ WkUgICAgICAgICAzNw0KKw0KKyNkZWZpbmUgVExTX0FVVEhfQ09ORklHX0ZPUk1JRDFfRk9STSAg ICAgICAgICAgICAgMQ0KKyNkZWZpbmUgVExTX0FVVEhfQ09ORklHX0ZPUk1JRDJfRk9STSAgICAg ICAgICAgICAgMg0KKyNkZWZpbmUgVExTX0FVVEhfQ09ORklHX0ZPUk1JRDNfRk9STSAgICAgICAg ICAgICAgMw0KKyNkZWZpbmUgVExTX0FVVEhfQ09ORklHX0ZPUk1JRDRfRk9STSAgICAgICAgICAg ICAgNA0KKyNkZWZpbmUgVExTX0FVVEhfQ09ORklHX0ZPUk1JRDVfRk9STSAgICAgICAgICAgICAg NQ0KKw0KKw0KKyNkZWZpbmUgS0VZX1RMU19BVVRIX0NPTkZJR19TRVJWRVJfQ0EgICAgICAgICAg ICAgICAgICAweDEwMDANCisjZGVmaW5lIEtFWV9UTFNfQVVUSF9DT05GSUdfQ0xJRU5UX0NFUlQg ICAgICAgICAgICAgICAgMHgxMDAxDQorI2RlZmluZSBLRVlfVExTX0FVVEhfQ09ORklHX0VOUk9M TF9DRVJUICAgICAgICAgICAgICAgIDB4MTAwMg0KKyNkZWZpbmUgS0VZX1RMU19BVVRIX0NPTkZJ R19ERUxFVEVfQ0VSVCAgICAgICAgICAgICAgICAweDEwMDMNCisjZGVmaW5lIEtFWV9UTFNfQVVU SF9DT05GSUdfRU5ST0xMX0NFUlRfRlJPTV9GSUxFICAgICAgMHgxMDA0DQorI2RlZmluZSBLRVlf VExTX0FVVEhfQ09ORklHX0NFUlRfR1VJRCAgICAgICAgICAgICAgICAgIDB4MTAwNQ0KKyNkZWZp bmUgS0VZX1RMU19BVVRIX0NPTkZJR19WQUxVRV9TQVZFX0FORF9FWElUICAgICAgICAweDEwMDYN CisjZGVmaW5lIEtFWV9UTFNfQVVUSF9DT05GSUdfVkFMVUVfTk9fU0FWRV9BTkRfRVhJVCAgICAg MHgxMDA3DQorDQorI2RlZmluZSBPUFRJT05fREVMX0NBX0VTVElPTl9JRCAgICAgICAgICAgICAg ICAgICAgICAgIDB4MjAwMA0KKyNkZWZpbmUgT1BUSU9OX0NPTkZJR19SQU5HRSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDEwMDANCisNCisjZGVmaW5lIExBQkVMX0NBX0RFTEVURSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTAxDQorI2RlZmluZSBMQUJFTF9FTkQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZg0KKw0KK3R5cGVkZWYgc3Ry dWN0IHsNCisgIENIQVIxNiAgICBDZXJ0R3VpZFtUTFNfQVVUSF9DT05GSUdfR1VJRF9TVE9SQUdF X1NJWkVdOw0KK30gVExTX0FVVEhfQ09ORklHX0lGUl9OVkRBVEE7DQorDQorI2VuZGlmDQpkaWZm IC0tZ2l0IGEvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdWZnIudmZy IGIvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdWZnIudmZyDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZmIxMzBkOQ0KLS0tIC9kZXYvbnVsbA0K KysrIGIvTmV0d29ya1BrZy9UbHNBdXRoQ29uZmlnRHhlL1Rsc0F1dGhDb25maWdWZnIudmZyDQpA QCAtMCwwICsxLDE1MiBAQA0KKy8qKiBAZmlsZQ0KKyAgVkZSIGZpbGUgdXNlZCBieSBUbHNBdXRo Q29uZmlnRHhlIGRyaXZlci4NCisNCisgIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKw0KKyAgVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWls YWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQor ICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2Yg dGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQorICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvYnNkLWxpY2Vuc2UucGhwLg0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQg VU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdB UlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBP UiBJTVBMSUVELg0KKw0KKyoqLw0KKw0KKyNpbmNsdWRlICJUbHNBdXRoQ29uZmlnTnZEYXRhLmgi DQorDQorZm9ybXNldA0KKyAgZ3VpZCAgID0gVExTX0FVVEhfQ09ORklHX0dVSUQsDQorICB0aXRs ZSAgPSBTVFJJTkdfVE9LRU4oU1RSX1RMU19BVVRIX0NPTkZJR19USVRMRSksDQorICBoZWxwICAg PSBTVFJJTkdfVE9LRU4oU1RSX1RMU19BVVRIX0NPTkZJR19IRUxQKSwNCisNCisgIHZhcnN0b3Jl IFRMU19BVVRIX0NPTkZJR19JRlJfTlZEQVRBLA0KKyAgICBuYW1lID0gVExTX0FVVEhfQ09ORklH X0lGUl9OVkRBVEEsDQorICAgIGd1aWQgPSBUTFNfQVVUSF9DT05GSUdfR1VJRDsNCisNCisgIC8v DQorICAvLyAjIzEgRm9ybTE6IE1haW4gZm9ybSBmb3IgVGxzIEF1dGggY29uZmlncmF0aW9uDQor ICAvLw0KKyAgZm9ybSBmb3JtaWQgPSBUTFNfQVVUSF9DT05GSUdfRk9STUlEMV9GT1JNLA0KKyAg ICB0aXRsZSAgPSBTVFJJTkdfVE9LRU4oU1RSX1RMU19BVVRIX0NPTkZJR19USVRMRSk7DQorDQor ICAgIHN1YnRpdGxlIHRleHQgPSBTVFJJTkdfVE9LRU4oU1RSX05VTEwpOw0KKyAgICANCisgICAg Ly8NCisgICAgLy8gRGlzcGxheSBTZXJ2ZXIgQ0EgY29uZmlncmF0aW9uDQorICAgIC8vDQorICAg IGdvdG8gVExTX0FVVEhfQ09ORklHX0ZPUk1JRDJfRk9STSwNCisgICAgICAgICBwcm9tcHQgPSBT VFJJTkdfVE9LRU4oU1RSX1RMU19BVVRIX0NPTkZJR19TRVJWRVJfQ0EpLA0KKyAgICAgICAgIGhl bHAgICA9IFNUUklOR19UT0tFTihTVFJfVExTX0FVVEhfQ09ORklHX1NFUlZFUl9DQV9IRUxQKSwN CisgICAgICAgICBmbGFncyAgPSBJTlRFUkFDVElWRSwNCisgICAgICAgICBrZXkgICAgPSBLRVlf VExTX0FVVEhfQ09ORklHX1NFUlZFUl9DQTsNCisNCisgICAgc3VidGl0bGUgdGV4dCA9IFNUUklO R19UT0tFTihTVFJfTlVMTCk7DQorDQorICAgIC8vDQorICAgIC8vIERpc3BsYXkgQ2xpZW50IGNl cnQgY29uZmlncmF0aW9uDQorICAgIC8vDQorICAgIGdyYXlvdXRpZiBUUlVFOyAvLy8gQ3VycmVu dCB1bnN1cHBvcnRlZC4NCisgICAgZ290byBUTFNfQVVUSF9DT05GSUdfRk9STUlEM19GT1JNLA0K KyAgICAgICAgIHByb21wdCA9IFNUUklOR19UT0tFTihTVFJfVExTX0FVVEhfQ09ORklHX0NMSUVO VF9DRVJUKSwNCisgICAgICAgICBoZWxwICAgPSBTVFJJTkdfVE9LRU4oU1RSX1RMU19BVVRIX0NP TkZJR19DTElFTlRfQ0VSVF9IRUxQKSwNCisgICAgICAgICBmbGFncyAgPSBJTlRFUkFDVElWRSwN CisgICAgICAgICBrZXkgICAgPSBLRVlfVExTX0FVVEhfQ09ORklHX0NMSUVOVF9DRVJUOw0KKyAg ICBlbmRpZjsNCisgIGVuZGZvcm07IA0KKw0KKyAgLy8NCisgIC8vICMjMiBGb3JtMjogQ0EgY29u ZmlndXJhdGlvbg0KKyAgLy8NCisgIGZvcm0gZm9ybWlkID0gVExTX0FVVEhfQ09ORklHX0ZPUk1J RDJfRk9STSwNCisgICAgdGl0bGUgID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdf U0VSVkVSX0NBKTsNCisNCisgICAgc3VidGl0bGUgdGV4dCA9IFNUUklOR19UT0tFTihTVFJfTlVM TCk7DQorDQorICAgIGdvdG8gVExTX0FVVEhfQ09ORklHX0ZPUk1JRDRfRk9STSwNCisgICAgICAg ICBwcm9tcHQgPSBTVFJJTkdfVE9LRU4oU1RSX1RMU19BVVRIX0NPTkZJR19FTlJPTExfQ0VSVCks DQorICAgICAgICAgaGVscCAgID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfRU5S T0xMX0NFUlRfSEVMUCksDQorICAgICAgICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQorICAgICAg ICAga2V5ICAgID0gS0VZX1RMU19BVVRIX0NPTkZJR19FTlJPTExfQ0VSVDsNCisNCisgICAgc3Vi dGl0bGUgdGV4dCA9IFNUUklOR19UT0tFTihTVFJfTlVMTCk7DQorDQorICAgIGdvdG8gVExTX0FV VEhfQ09ORklHX0ZPUk1JRDVfRk9STSwNCisgICAgICAgICBwcm9tcHQgPSBTVFJJTkdfVE9LRU4o U1RSX1RMU19BVVRIX0NPTkZJR19ERUxFVEVfQ0VSVCksDQorICAgICAgICAgaGVscCAgID0gU1RS SU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfREVMRVRFX0NFUlRfSEVMUCksDQorICAgICAg ICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQorICAgICAgICAga2V5ICAgID0gS0VZX1RMU19BVVRI X0NPTkZJR19ERUxFVEVfQ0VSVDsNCisgIGVuZGZvcm07DQorDQorICAvLw0KKyAgLy8gIyMzIEZv cm0zIDogQ2xpZW50IGNlcnQgY29uZmlndXJhdGlvbg0KKyAgLy8NCisgIGZvcm0gZm9ybWlkID0g VExTX0FVVEhfQ09ORklHX0ZPUk1JRDNfRk9STSwNCisgICAgdGl0bGUgID0gU1RSSU5HX1RPS0VO KFNUUl9UTFNfQVVUSF9DT05GSUdfQ0xJRU5UX0NFUlQpOw0KKyAgICANCisgICAgc3VidGl0bGUg dGV4dCA9IFNUUklOR19UT0tFTihTVFJfTlVMTCk7DQorDQorICAvLw0KKyAgLy8gVE9ETy4uLg0K KyAgLy8NCisgIGVuZGZvcm07DQorDQorICAvLw0KKyAgLy8gIyM0IEZvcm00OiBFbnJvbGwgY2Vy dCBmb3IgQ0ENCisgIC8vDQorICBmb3JtIGZvcm1pZCA9IFRMU19BVVRIX0NPTkZJR19GT1JNSUQ0 X0ZPUk0sDQorICAgIHRpdGxlICA9IFNUUklOR19UT0tFTihTVFJfVExTX0FVVEhfQ09ORklHX0VO Uk9MTF9DRVJUKTsNCisgICAgDQorICAgIHN1YnRpdGxlIHRleHQgPSBTVFJJTkdfVE9LRU4oU1RS X05VTEwpOw0KKw0KKyAgICBnb3RvIFRMU19BVVRIX0NPTkZJR19GT1JNSUQ0X0ZPUk0sDQorICAg ICAgICAgcHJvbXB0ID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfQUREX0NFUlRf RklMRSksDQorICAgICAgICAgaGVscCA9IFNUUklOR19UT0tFTihTVFJfVExTX0FVVEhfQ09ORklH X0FERF9DRVJUX0ZJTEUpLA0KKyAgICAgICAgIGZsYWdzID0gSU5URVJBQ1RJVkUsDQorICAgICAg ICAga2V5ID0gS0VZX1RMU19BVVRIX0NPTkZJR19FTlJPTExfQ0VSVF9GUk9NX0ZJTEU7DQorDQor ICAgIHN1YnRpdGxlIHRleHQgPSBTVFJJTkdfVE9LRU4oU1RSX05VTEwpOw0KKyAgICBsYWJlbCBU TFNfQVVUSF9DT05GSUdfRk9STUlENF9GT1JNOw0KKyAgICBsYWJlbCBMQUJFTF9FTkQ7DQorICAg IHN1YnRpdGxlIHRleHQgPSBTVFJJTkdfVE9LRU4oU1RSX05VTEwpOw0KKw0KKyAgICBzdHJpbmcg IHZhcmlkICAgPSBUTFNfQVVUSF9DT05GSUdfSUZSX05WREFUQS5DZXJ0R3VpZCwNCisgICAgICAg ICAgICBwcm9tcHQgID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfQ0VSVF9HVUlE KSwNCisgICAgICAgICAgICBoZWxwICAgID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05G SUdfQ0VSVF9HVUlEX0hFTFApLA0KKyAgICAgICAgICAgIGZsYWdzICAgPSBJTlRFUkFDVElWRSwN CisgICAgICAgICAgICBrZXkgICAgID0gS0VZX1RMU19BVVRIX0NPTkZJR19DRVJUX0dVSUQsDQor ICAgICAgICAgICAgbWluc2l6ZSA9IFRMU19BVVRIX0NPTkZJR19HVUlEX1NJWkUsDQorICAgICAg ICAgICAgbWF4c2l6ZSA9IFRMU19BVVRIX0NPTkZJR19HVUlEX1NJWkUsDQorICAgIGVuZHN0cmlu ZzsNCisNCisgICAgc3VidGl0bGUgdGV4dCA9IFNUUklOR19UT0tFTihTVFJfTlVMTCk7DQorICAg IHN1YnRpdGxlIHRleHQgPSBTVFJJTkdfVE9LRU4oU1RSX05VTEwpOw0KKw0KKyAgICBnb3RvIFRM U19BVVRIX0NPTkZJR19GT1JNSUQxX0ZPUk0sDQorICAgICAgICAgcHJvbXB0ID0gU1RSSU5HX1RP S0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfU0FWRV9BTkRfRVhJVCksDQorICAgICAgICAgaGVscCAg ID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfU0FWRV9BTkRfRVhJVCksDQorICAg ICAgICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQorICAgICAgICAga2V5ICAgID0gS0VZX1RMU19B VVRIX0NPTkZJR19WQUxVRV9TQVZFX0FORF9FWElUOw0KKw0KKyAgICBnb3RvIFRMU19BVVRIX0NP TkZJR19GT1JNSUQxX0ZPUk0sDQorICAgICAgICAgcHJvbXB0ID0gU1RSSU5HX1RPS0VOKFNUUl9U TFNfQVVUSF9DT05GSUdfTk9fU0FWRV9BTkRfRVhJVCksDQorICAgICAgICAgaGVscCAgID0gU1RS SU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfTk9fU0FWRV9BTkRfRVhJVCksDQorICAgICAg ICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQorICAgICAgICAga2V5ICAgID0gS0VZX1RMU19BVVRI X0NPTkZJR19WQUxVRV9OT19TQVZFX0FORF9FWElUOw0KKyAgICAgICAgIA0KKyAgZW5kZm9ybTsN CisNCisgIC8vDQorICAvLyAjIzUgRm9ybTU6IERlbGV0ZSBjZXJ0IGZvciBDQQ0KKyAgLy8NCisg IGZvcm0gZm9ybWlkID0gVExTX0FVVEhfQ09ORklHX0ZPUk1JRDVfRk9STSwNCisgICAgdGl0bGUg ID0gU1RSSU5HX1RPS0VOKFNUUl9UTFNfQVVUSF9DT05GSUdfREVMRVRFX0NFUlQpOw0KKw0KKyAg ICBsYWJlbCBMQUJFTF9DQV9ERUxFVEU7DQorICAgIGxhYmVsIExBQkVMX0VORDsNCisgICAgDQor ICAgIHN1YnRpdGxlIHRleHQgPSBTVFJJTkdfVE9LRU4oU1RSX05VTEwpOw0KKw0KKyAgZW5kZm9y bTsNCisgIA0KK2VuZGZvcm1zZXQ7DQotLSANCjEuOS41Lm1zeXNnaXQuMQ0KDQo=