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 B113C21A16ECF for ; Fri, 26 May 2017 18:25:41 -0700 (PDT) Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 May 2017 18:26:36 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.38,400,1491289200"; d="scan'208,217";a="107592931" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga006.fm.intel.com with ESMTP; 26 May 2017 18:26:36 -0700 Received: from fmsmsx126.amr.corp.intel.com (10.18.125.43) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 26 May 2017 18:26:36 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX126.amr.corp.intel.com (10.18.125.43) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 26 May 2017 18:26:34 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.146]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.37]) with mapi id 14.03.0319.002; Sat, 27 May 2017 09:26:33 +0800 From: "Yao, Jiewen" To: Brijesh Singh , "Justen, Jordan L" , "Fan, Jeff" , "edk2-devel@lists.01.org" CC: "Thomas.Lendacky@amd.com" , "leo.duran@amd.com" , Laszlo Ersek Thread-Topic: [PATCH v6 04/17] OvmfPkg/BaseMemcryptSevLib: Add SEV helper library Thread-Index: AQHS1mJTaKr7kcCNaEm4MiHSFF5i5aIGlReAgADOKoA= Date: Sat, 27 May 2017 01:26:32 +0000 Message-ID: <74D8A39837DF1E4DA445A8C0B3885C503A95D586@shsmsx102.ccr.corp.intel.com> References: <1495809845-32472-1-git-send-email-brijesh.singh@amd.com> <1495809845-32472-5-git-send-email-brijesh.singh@amd.com> <149583207795.25973.8215621482706964409@jljusten-skl> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 10.0.102.7 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.22 Subject: Re: [PATCH v6 04/17] OvmfPkg/BaseMemcryptSevLib: Add SEV helper library X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 May 2017 01:25:42 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QWdyZWUuIFBlciBteSB1bmRlcnN0YW5kaW5nIHRoaXMgZHJpdmVyIGlzIG9ubHkgbmVlZGVkIGZv ciB2aXJ0dWFsaXphdGlvbiBmaXJtd2FyZSwgaXQgaXMgbm90IG5lZWRlZCBmb3IgYSByZWFsIHBs YXRmb3JtIGZpcm13YXJlLiBQdXR0aW5nIGl0IHRvIE9WTUYgbWFrZXMgbW9yZSBzZW5zZS4NCg0K VGhhbmsgeW91DQpZYW8gSmlld2VuDQoNCkZyb206IEJyaWplc2ggU2luZ2ggW21haWx0bzpicmlq ZXNoLnNpbmdoQGFtZC5jb21dDQpTZW50OiBTYXR1cmRheSwgTWF5IDI3LCAyMDE3IDU6MDcgQU0N ClRvOiBKdXN0ZW4sIEpvcmRhbiBMIDxqb3JkYW4ubC5qdXN0ZW5AaW50ZWwuY29tPjsgWWFvLCBK aWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgRmFuLCBKZWZmIDxqZWZmLmZhbkBpbnRlbC5j b20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KQ2M6IGJyaWplc2guc2luZ2hAYW1kLmNvbTsg VGhvbWFzLkxlbmRhY2t5QGFtZC5jb207IGxlby5kdXJhbkBhbWQuY29tOyBMYXN6bG8gRXJzZWsg PGxlcnNla0ByZWRoYXQuY29tPg0KU3ViamVjdDogUmU6IFtQQVRDSCB2NiAwNC8xN10gT3ZtZlBr Zy9CYXNlTWVtY3J5cHRTZXZMaWI6IEFkZCBTRVYgaGVscGVyIGxpYnJhcnkNCg0KSGkgSm9yZGFu LA0KDQpJIGRvbid0IGhhdmUgYW55IHN0cm9uZyBmZWVsaW5nIG9uIHdoZXJlIHRoaXMgbGliIHNo b3VsZCBnbywgYnV0IHNpbmNlIFNFViAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbikN CmZlYXR1cmUgaXMgYXBwbGljYWJsZSBvbmx5IHdoZW4gYXJlIGJ1aWxkaW5nL2Jvb3RpbmcgdGhl IE9WTUYgcGxhdGZvcm0gaGVuY2UgSSB0aG91Z2h0IE9WTUYgaXMgdGhlIHJpZ2h0IHBsYWNlDQpm b3IgaXQuDQoNClRoYW5rcw0KQnJpamVzaA0KDQpPbiAwNS8yNi8yMDE3IDAzOjU0IFBNLCBKb3Jk YW4gSnVzdGVuIHdyb3RlOg0KPiBKaWV3ZW4sIEplZmYsIEJyaWplc2gsDQo+DQo+IElzIHRoZXJl IGEgcmVhc29uIHRoaXMgc2hvdWxkbid0IGdvIHVuZGVyIFVlZmlDcHVQa2cgcmF0aGVyIHRoYW4N Cj4gT3ZtZlBrZz8NCj4NCj4gLUpvcmRhbg0KPg0KPiBPbiAyMDE3LTA1LTI2IDA3OjQzOjUyLCBC cmlqZXNoIFNpbmdoIHdyb3RlOg0KPj4gQWRkIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRp b24gKFNFVikgaGVscGVyIGxpYnJhcnkuDQo+PiBUaGUgbGlicmFyeSBwcm92aWRlcyB0aGUgcm91 dGluZXMgdG86DQo+PiAtICBzZXQgb3IgY2xlYXIgbWVtb3J5IGVuY3J5cHRpb24gYml0IGZvciBh IGdpdmVuIG1lbW9yeSByZWdpb24uDQo+PiAtICBxdWVyeSB3aGV0aGVyIFNFViBpcyBlbmFibGVk Lg0KPj4NCj4+DQo+PiBDYzogSm9yZGFuIEp1c3RlbiA8am9yZGFuLmwuanVzdGVuQGludGVsLmNv bTxtYWlsdG86am9yZGFuLmwuanVzdGVuQGludGVsLmNvbT4+DQo+PiBDYzogTGFzemxvIEVyc2Vr IDxsZXJzZWtAcmVkaGF0LmNvbTxtYWlsdG86bGVyc2VrQHJlZGhhdC5jb20+Pg0KPj4gQ29udHJp YnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMA0KPj4gU2ln bmVkLW9mZi1ieTogQnJpamVzaCBTaW5naCA8YnJpamVzaC5zaW5naEBhbWQuY29tPG1haWx0bzpi cmlqZXNoLnNpbmdoQGFtZC5jb20+Pg0KPj4gUmV2aWV3ZWQtYnk6IExhc3psbyBFcnNlayA8bGVy c2VrQHJlZGhhdC5jb208bWFpbHRvOmxlcnNla0ByZWRoYXQuY29tPj4NCj4+IC0tLQ0KPj4gICBP dm1mUGtnL092bWZQa2dJYTMyLmRzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDEgKw0KPj4gICBPdm1mUGtnL092bWZQa2dJYTMyWDY0LmRzYyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKw0KPj4gICBPdm1mUGtnL092bWZQa2dY NjQuZHNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKw0K Pj4gICBPdm1mUGtnL0xpYnJhcnkvQmFzZU1lbUVuY3J5cHRTZXZMaWIvQmFzZU1lbUVuY3J5cHRT ZXZMaWIuaW5mICAgfCAgNTAgKysrDQo+PiAgIE92bWZQa2cvSW5jbHVkZS9MaWJyYXJ5L01lbUVu Y3J5cHRTZXZMaWIuaCAgICAgICAgICAgICAgICAgICAgICB8ICA4MSArKysrDQo+PiAgIE92bWZQ a2cvTGlicmFyeS9CYXNlTWVtRW5jcnlwdFNldkxpYi9YNjQvVmlydHVhbE1lbW9yeS5oICAgICAg ICB8IDE4NCArKysrKysrKw0KPj4gICBPdm1mUGtnL0xpYnJhcnkvQmFzZU1lbUVuY3J5cHRTZXZM aWIvSWEzMi9NZW1FbmNyeXB0U2V2TGliLmMgICAgfCAgODQgKysrKw0KPj4gICBPdm1mUGtnL0xp YnJhcnkvQmFzZU1lbUVuY3J5cHRTZXZMaWIvTWVtRW5jcnlwdFNldkxpYkludGVybmFsLmMgfCAg OTAgKysrKw0KPj4gICBPdm1mUGtnL0xpYnJhcnkvQmFzZU1lbUVuY3J5cHRTZXZMaWIvWDY0L01l bUVuY3J5cHRTZXZMaWIuYyAgICAgfCAgODQgKysrKw0KPj4gICBPdm1mUGtnL0xpYnJhcnkvQmFz ZU1lbUVuY3J5cHRTZXZMaWIvWDY0L1ZpcnR1YWxNZW1vcnkuYyAgICAgICAgfCA0MzkgKysrKysr KysrKysrKysrKysrKysNCj4+ICAgMTAgZmlsZXMgY2hhbmdlZCwgMTAxNSBpbnNlcnRpb25zKCsp DQo+Pg0KPj4gZGlmZiAtLWdpdCBhL092bWZQa2cvT3ZtZlBrZ0lhMzIuZHNjIGIvT3ZtZlBrZy9P dm1mUGtnSWEzMi5kc2MNCj4+IGluZGV4IGI1Yzg3NGI2NWFmYy4uOTg2OTFjMGE2ZDk5IDEwMDY0 NA0KPj4gLS0tIGEvT3ZtZlBrZy9Pdm1mUGtnSWEzMi5kc2MNCj4+ICsrKyBiL092bWZQa2cvT3Zt ZlBrZ0lhMzIuZHNjDQo+PiBAQCAtMTQ1LDYgKzE0NSw3IEBAIFtMaWJyYXJ5Q2xhc3Nlc10NCj4+ ICAgICBRZW11RndDZmdMaWJ8T3ZtZlBrZy9MaWJyYXJ5L1FlbXVGd0NmZ0xpYi9RZW11RndDZmdM aWIuaW5mDQo+PiAgICAgVmlydGlvTGlifE92bWZQa2cvTGlicmFyeS9WaXJ0aW9MaWIvVmlydGlv TGliLmluZg0KPj4gICAgIExvYWRMaW51eExpYnxPdm1mUGtnL0xpYnJhcnkvTG9hZExpbnV4TGli L0xvYWRMaW51eExpYi5pbmYNCj4+ICsgIE1lbUVuY3J5cHRTZXZMaWJ8T3ZtZlBrZy9MaWJyYXJ5 L0Jhc2VNZW1FbmNyeXB0U2V2TGliL0Jhc2VNZW1FbmNyeXB0U2V2TGliLmluZg0KPj4gICAhaWYg JChTTU1fUkVRVUlSRSkgPT0gRkFMU0UNCj4+ICAgICBMb2NrQm94TGlifE92bWZQa2cvTGlicmFy eS9Mb2NrQm94TGliL0xvY2tCb3hCYXNlTGliLmluZg0KPj4gICAhZW5kaWYNCj4+IGRpZmYgLS1n aXQgYS9Pdm1mUGtnL092bWZQa2dJYTMyWDY0LmRzYyBiL092bWZQa2cvT3ZtZlBrZ0lhMzJYNjQu ZHNjDQo+PiBpbmRleCAxZDA3MWNhYzJiZWYuLjNiNTE1MTNhNGQ5NSAxMDA2NDQNCj4+IC0tLSBh L092bWZQa2cvT3ZtZlBrZ0lhMzJYNjQuZHNjDQo+PiArKysgYi9Pdm1mUGtnL092bWZQa2dJYTMy WDY0LmRzYw0KPj4gQEAgLTE1MCw2ICsxNTAsNyBAQCBbTGlicmFyeUNsYXNzZXNdDQo+PiAgICAg UWVtdUZ3Q2ZnTGlifE92bWZQa2cvTGlicmFyeS9RZW11RndDZmdMaWIvUWVtdUZ3Q2ZnTGliLmlu Zg0KPj4gICAgIFZpcnRpb0xpYnxPdm1mUGtnL0xpYnJhcnkvVmlydGlvTGliL1ZpcnRpb0xpYi5p bmYNCj4+ICAgICBMb2FkTGludXhMaWJ8T3ZtZlBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9Mb2Fk TGludXhMaWIuaW5mDQo+PiArICBNZW1FbmNyeXB0U2V2TGlifE92bWZQa2cvTGlicmFyeS9CYXNl TWVtRW5jcnlwdFNldkxpYi9CYXNlTWVtRW5jcnlwdFNldkxpYi5pbmYNCj4+ICAgIWlmICQoU01N X1JFUVVJUkUpID09IEZBTFNFDQo+PiAgICAgTG9ja0JveExpYnxPdm1mUGtnL0xpYnJhcnkvTG9j a0JveExpYi9Mb2NrQm94QmFzZUxpYi5pbmYNCj4+ICAgIWVuZGlmDQo+PiBkaWZmIC0tZ2l0IGEv T3ZtZlBrZy9Pdm1mUGtnWDY0LmRzYyBiL092bWZQa2cvT3ZtZlBrZ1g2NC5kc2MNCj4+IGluZGV4 IDJiZWE3NTQzNzc4OC4uZWJmMDdjZDU4NWRkIDEwMDY0NA0KPj4gLS0tIGEvT3ZtZlBrZy9Pdm1m UGtnWDY0LmRzYw0KPj4gKysrIGIvT3ZtZlBrZy9Pdm1mUGtnWDY0LmRzYw0KPj4gQEAgLTE1MCw2 ICsxNTAsNyBAQCBbTGlicmFyeUNsYXNzZXNdDQo+PiAgICAgUWVtdUZ3Q2ZnTGlifE92bWZQa2cv TGlicmFyeS9RZW11RndDZmdMaWIvUWVtdUZ3Q2ZnTGliLmluZg0KPj4gICAgIFZpcnRpb0xpYnxP dm1mUGtnL0xpYnJhcnkvVmlydGlvTGliL1ZpcnRpb0xpYi5pbmYNCj4+ICAgICBMb2FkTGludXhM aWJ8T3ZtZlBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9Mb2FkTGludXhMaWIuaW5mDQo+PiArICBN ZW1FbmNyeXB0U2V2TGlifE92bWZQa2cvTGlicmFyeS9CYXNlTWVtRW5jcnlwdFNldkxpYi9CYXNl TWVtRW5jcnlwdFNldkxpYi5pbmYNCj4+ICAgIWlmICQoU01NX1JFUVVJUkUpID09IEZBTFNFDQo+ PiAgICAgTG9ja0JveExpYnxPdm1mUGtnL0xpYnJhcnkvTG9ja0JveExpYi9Mb2NrQm94QmFzZUxp Yi5pbmYNCj4+ICAgIWVuZGlmDQo+PiBkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9MaWJyYXJ5L0Jhc2VN ZW1FbmNyeXB0U2V2TGliL0Jhc2VNZW1FbmNyeXB0U2V2TGliLmluZiBiL092bWZQa2cvTGlicmFy eS9CYXNlTWVtRW5jcnlwdFNldkxpYi9CYXNlTWVtRW5jcnlwdFNldkxpYi5pbmYNCj4+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjNjZmQ4MGEyOGMxZA0KPj4g LS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvT3ZtZlBrZy9MaWJyYXJ5L0Jhc2VNZW1FbmNyeXB0U2V2 TGliL0Jhc2VNZW1FbmNyeXB0U2V2TGliLmluZg0KPj4gQEAgLTAsMCArMSw1MCBAQA0KPj4gKyMj IEBmaWxlDQo+PiArIyAgTGlicmFyeSBwcm92aWRlcyB0aGUgaGVscGVyIGZ1bmN0aW9ucyBmb3Ig U0VWIGd1ZXN0DQo+PiArIw0KPj4gKyMgQ29weXJpZ2h0IChjKSAyMDE3IEFkdmFuY2VkIE1pY3Jv IERldmljZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4gKyMNCj4+ICsjICBUaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+PiArIyAgYXJlIGxpY2Vuc2Vk IGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl IEJTRA0KPj4gKyMgIExpY2Vuc2Ugd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24u IFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UNCj4+ICsjICBtYXkgYmUgZm91bmQgYXQgaHR0 cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPj4gKyMgIFRIRSBQ Uk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMi IEJBU0lTLA0KPj4gKyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0Yg QU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+PiArIw0KPj4gKyMNCj4+ICsj Iw0KPj4gKw0KPj4gK1tEZWZpbmVzXQ0KPj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAg ICAgID0gMS4yNQ0KPj4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gTWVtRW5j cnlwdFNldkxpYg0KPj4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gYzE1OTQ2 MzEtMzg4OC00YmU0LTk0OWYtOWM2MzBkYmM4NDJiDQo+PiArICBNT0RVTEVfVFlQRSAgICAgICAg ICAgICAgICAgICAgPSBCQVNFDQo+PiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAg PSAxLjANCj4+ICsgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9IE1lbUVuY3J5cHRT ZXZMaWJ8UEVJTSBEWEVfRFJJVkVSIERYRV9SVU5USU1FX0RSSVZFUiBEWEVfU01NX0RSSVZFUiBV RUZJX0RSSVZFUg0KPj4gKw0KPj4gKyMNCj4+ICsjIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24g aXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWlyZWQgYnkgdGhlIGJ1aWxkIHRvb2xz Lg0KPj4gKyMNCj4+ICsjIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQN Cj4+ICsjDQo+PiArDQo+PiArW1BhY2thZ2VzXQ0KPj4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4+ ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+PiArICBPdm1mUGtnL092bWZQa2cu ZGVjDQo+PiArICBVZWZpQ3B1UGtnL1VlZmlDcHVQa2cuZGVjDQo+PiArDQo+PiArW1NvdXJjZXMu WDY0XQ0KPj4gKyAgTWVtRW5jcnlwdFNldkxpYkludGVybmFsLmMNCj4+ICsgIFg2NC9NZW1FbmNy eXB0U2V2TGliLmMNCj4+ICsgIFg2NC9WaXJ0dWFsTWVtb3J5LmMNCj4+ICsNCj4+ICtbU291cmNl cy5JQTMyXQ0KPj4gKyAgTWVtRW5jcnlwdFNldkxpYkludGVybmFsLmMNCj4+ICsgIElhMzIvTWVt RW5jcnlwdFNldkxpYi5jDQo+PiArDQo+PiArW0xpYnJhcnlDbGFzc2VzXQ0KPj4gKyAgQmFzZUxp Yg0KPj4gKyAgQ3B1TGliDQo+PiArICBDYWNoZU1haW50ZW5hbmNlTGliDQo+PiArICBEZWJ1Z0xp Yg0KPj4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPj4gZGlmZiAtLWdpdCBhL092bWZQa2cvSW5j bHVkZS9MaWJyYXJ5L01lbUVuY3J5cHRTZXZMaWIuaCBiL092bWZQa2cvSW5jbHVkZS9MaWJyYXJ5 L01lbUVuY3J5cHRTZXZMaWIuaA0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAw MDAwMDAwMDAwMC4uYjY3NTM3NjI0MjNlDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9Pdm1m UGtnL0luY2x1ZGUvTGlicmFyeS9NZW1FbmNyeXB0U2V2TGliLmgNCj4+IEBAIC0wLDAgKzEsODEg QEANCj4+ICsvKiogQGZpbGUNCj4+ICsNCj4+ICsgIERlZmluZSBTZWN1cmUgRW5jcnlwdGVkIFZp cnR1YWxpemF0aW9uIChTRVYpIGJhc2UgbGlicmFyeSBoZWxwZXIgZnVuY3Rpb24NCj4+ICsNCj4+ ICsgIENvcHlyaWdodCAoYykgMjAxNywgQU1EIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl cnZlZC48QlI+DQo+PiArDQo+PiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcg bWF0ZXJpYWxzIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUNCj4+ICsgIHVuZGVyIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2Ugd2hpY2ggYWNjb21wYW5p ZXMgdGhpcw0KPj4gKyAgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5z ZSBtYXkgYmUgZm91bmQgYXQNCj4+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9i c2QtbGljZW5zZS5waHANCj4+ICsNCj4+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVO REVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPj4gKyAgV0lUSE9VVCBX QVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1Mg T1IgSU1QTElFRC4NCj4+ICsNCj4+ICsqKi8NCj4+ICsNCj4+ICsjaWZuZGVmIF9NRU1fRU5DUllQ VF9TRVZfTElCX0hfDQo+PiArI2RlZmluZSBfTUVNX0VOQ1JZUFRfU0VWX0xJQl9IXw0KPj4gKw0K Pj4gKyNpbmNsdWRlIDxCYXNlLmg+DQo+PiArDQo+PiArLyoqDQo+PiArICBSZXR1cm5zIGEgYm9v bGVhbiB0byBpbmRpY2F0ZSB3aGV0aGVyIFNFViBpcyBlbmFibGVkDQo+PiArDQo+PiArICBAcmV0 dmFsIFRSVUUgICAgICAgICAgIFNFViBpcyBhY3RpdmUNCj4+ICsgIEByZXR2YWwgRkFMU0UgICAg ICAgICAgU0VWIGlzIG5vdCBlbmFibGVkDQo+PiArICAqKi8NCj4+ICtCT09MRUFODQo+PiArRUZJ QVBJDQo+PiArTWVtRW5jcnlwdFNldklzRW5hYmxlZCAoDQo+PiArICBWT0lEDQo+PiArICApOw0K Pj4gKw0KPj4gKy8qKg0KPj4gKyAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgbWVtb3J5IGVuY3J5cHRp b24gYml0IGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBzcGVjaWZpZWQNCj4+ICsgIGJ5IEJhc2VBZGRy ZXNzIGFuZCBOdW1iZXIgb2YgcGFnZXMgZnJvbSB0aGUgY3VycmVudCBwYWdlIHRhYmxlIGNvbnRl eHQuDQo+PiArDQo+PiArICBAcGFyYW1baW5dICBCYXNlQWRkcmVzcyAgICAgICAgICAgVGhlIHBo eXNpY2FsIGFkZHJlc3MgdGhhdCBpcyB0aGUgc3RhcnQgYWRkcmVzcw0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGEgbWVtb3J5IHJlZ2lvbi4NCj4+ICsgIEBwYXJh bVtpbl0gIE51bWJlck9mUGFnZXMgICAgICAgICBUaGUgbnVtYmVyIG9mIHBhZ2VzIGZyb20gc3Rh cnQgbWVtb3J5IHJlZ2lvbi4NCj4+ICsgIEBwYXJhbVtpbl0gIEZsdXNoICAgICAgICAgICAgICAg ICBGbHVzaCB0aGUgY2FjaGVzIGJlZm9yZSBjbGVhcmluZyB0aGUgYml0DQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vc3RseSBUUlVFIGV4Y2VwdCBNTUlPIGFkZHJl c3NlcykNCj4+ICsNCj4+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICAgICBUaGUg YXR0cmlidXRlcyB3ZXJlIGNsZWFyZWQgZm9yIHRoZSBtZW1vcnkgcmVnaW9uLg0KPj4gKyAgQHJl dHZhbCBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVIgIE51bWJlciBvZiBwYWdlcyBpcyB6ZXJvLg0K Pj4gKyAgQHJldHZhbCBSRVRVUk5fVU5TVVBQT1JURUQgICAgICAgIENsZWFyaW5nIG1lbW9yeSBl bmNyeXB0aW9uIGF0dHJpYnV0ZSBpcyBub3QNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdXBwb3J0ZWQNCj4+ICsgICoqLw0KPj4gK1JFVFVSTl9TVEFUVVMNCj4+ICtF RklBUEkNCj4+ICtNZW1FbmNyeXB0U2V2Q2xlYXJQYWdlRW5jTWFzayAoDQo+PiArICBJTiBQSFlT SUNBTF9BRERSRVNTICAgICAgICAgQ3IzQmFzZUFkZHJlc3MsDQo+PiArICBJTiBQSFlTSUNBTF9B RERSRVNTICAgICAgICAgQmFzZUFkZHJlc3MsDQo+PiArICBJTiBVSU5UTiAgICAgICAgICAgICAg ICAgICAgTnVtYmVyT2ZQYWdlcywNCj4+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICBD YWNoZUZsdXNoDQo+PiArICApOw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgVGhpcyBmdW5jdGlvbiBz ZXRzIG1lbW9yeSBlbmNyeXB0aW9uIGJpdCBmb3IgdGhlIG1lbW9yeSByZWdpb24gc3BlY2lmaWVk IGJ5DQo+PiArICBCYXNlQWRkcmVzcyBhbmQgTnVtYmVyIG9mIHBhZ2VzIGZyb20gdGhlIGN1cnJl bnQgcGFnZSB0YWJsZSBjb250ZXh0Lg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgQmFzZUFkZHJl c3MgICAgICAgICAgIFRoZSBwaHlzaWNhbCBhZGRyZXNzIHRoYXQgaXMgdGhlIHN0YXJ0IGFkZHJl c3MNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBhIG1lbW9yeSBy ZWdpb24uDQo+PiArICBAcGFyYW1baW5dICBOdW1iZXJPZlBhZ2VzICAgICAgICAgVGhlIG51bWJl ciBvZiBwYWdlcyBmcm9tIHN0YXJ0IG1lbW9yeSByZWdpb24uDQo+PiArICBAcGFyYW1baW5dICBG bHVzaCAgICAgICAgICAgICAgICAgRmx1c2ggdGhlIGNhY2hlcyBiZWZvcmUgY2xlYXJpbmcgdGhl IGJpdA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3N0bHkgVFJV RSBleGNlcHQgTU1JTyBhZGRyZXNzZXMpDQo+PiArDQo+PiArICBAcmV0dmFsIFJFVFVSTl9TVUND RVNTICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZXMgd2VyZSBzZXQgZm9yIHRoZSBtZW1vcnkgcmVn aW9uLg0KPj4gKyAgQHJldHZhbCBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVIgIE51bWJlciBvZiBw YWdlcyBpcyB6ZXJvLg0KPj4gKyAgQHJldHZhbCBSRVRVUk5fVU5TVVBQT1JURUQgICAgICAgIENs ZWFyaW5nIG1lbW9yeSBlbmNyeXB0aW9uIGF0dHJpYnV0ZSBpcyBub3QNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQNCj4+ICsgICoqLw0KPj4gK1JFVFVS Tl9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtNZW1FbmNyeXB0U2V2U2V0UGFnZUVuY01hc2sgKA0K Pj4gKyAgSU4gUEhZU0lDQUxfQUREUkVTUyAgICAgICAgIENyM0Jhc2VBZGRyZXNzLA0KPj4gKyAg SU4gUEhZU0lDQUxfQUREUkVTUyAgICAgICAgIEJhc2VBZGRyZXNzLA0KPj4gKyAgSU4gVUlOVE4g ICAgICAgICAgICAgICAgICAgIE51bWJlck9mUGFnZXMsDQo+PiArICBJTiBCT09MRUFOICAgICAg ICAgICAgICAgICAgQ2FjaGVGbHVzaA0KPj4gKyAgKTsNCj4+ICsjZW5kaWYgLy8gX01FTV9FTkNS WVBUX1NFVl9MSUJfSF8NCj4+IGRpZmYgLS1naXQgYS9Pdm1mUGtnL0xpYnJhcnkvQmFzZU1lbUVu Y3J5cHRTZXZMaWIvWDY0L1ZpcnR1YWxNZW1vcnkuaCBiL092bWZQa2cvTGlicmFyeS9CYXNlTWVt RW5jcnlwdFNldkxpYi9YNjQvVmlydHVhbE1lbW9yeS5oDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAwLi43MGNkMjE4N2EzMjYNCj4+IC0tLSAvZGV2L251bGwN Cj4+ICsrKyBiL092bWZQa2cvTGlicmFyeS9CYXNlTWVtRW5jcnlwdFNldkxpYi9YNjQvVmlydHVh bE1lbW9yeS5oDQo+PiBAQCAtMCwwICsxLDE4NCBAQA0KPj4gKy8qKiBAZmlsZQ0KPj4gKw0KPj4g KyAgVmlydHVhbCBNZW1vcnkgTWFuYWdlbWVudCBTZXJ2aWNlcyB0byBzZXQgb3IgY2xlYXIgdGhl IG1lbW9yeSBlbmNyeXB0aW9uIGJpdA0KPj4gKw0KPj4gK0NvcHlyaWdodCAoYykgMjAwNiAtIDIw MTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4+ICtDb3B5 cmlnaHQgKGMpIDIwMTcsIEFNRCBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJS Pg0KPj4gKw0KPj4gK1RoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN Cj4+ICthcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCj4+ICt3aGljaCBhY2NvbXBhbmllcyB0aGlz IGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5k IGF0DQo+PiAraHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0K Pj4gKw0KPj4gK1RIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5T RSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPj4gK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNF TlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+PiArDQo+ PiArQ29kZSBpcyBkZXJpdmVkIGZyb20gTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9YNjQv VmlydHVhbE1lbW9yeS5oDQo+PiArDQo+PiArKiovDQo+PiArDQo+PiArI2lmbmRlZiBfX1ZJUlRV QUxfTUVNT1JZX18NCj4+ICsjZGVmaW5lIF9fVklSVFVBTF9NRU1PUllfXw0KPj4gKw0KPj4gKyNp bmNsdWRlIDxVZWZpLmg+DQo+PiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPj4gKyNp bmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4+ICsjaW5jbHVkZSA8TGlicmFyeS9E ZWJ1Z0xpYi5oPg0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4N Cj4+ICsNCj4+ICsjaW5jbHVkZSA8TGlicmFyeS9DYWNoZU1haW50ZW5hbmNlTGliLmg+DQo+PiAr I2RlZmluZSBTWVNfQ09ERTY0X1NFTCAweDM4DQo+PiArDQo+PiArI3ByYWdtYSBwYWNrKDEpDQo+ PiArDQo+PiArLy8NCj4+ICsvLyBQYWdlLU1hcCBMZXZlbC00IE9mZnNldCAoUE1MNCkgYW5kDQo+ PiArLy8gUGFnZS1EaXJlY3RvcnktUG9pbnRlciBPZmZzZXQgKFBEUEUpIGVudHJpZXMgNEsgJiAy TUINCj4+ICsvLw0KPj4gKw0KPj4gK3R5cGVkZWYgdW5pb24gew0KPj4gKyAgc3RydWN0IHsNCj4+ ICsgICAgVUlOVDY0ICBQcmVzZW50OjE7ICAgICAgICAgICAgICAgIC8vIDAgPSBOb3QgcHJlc2Vu dCBpbiBtZW1vcnksIDEgPSBQcmVzZW50IGluIG1lbW9yeQ0KPj4gKyAgICBVSU5UNjQgIFJlYWRX cml0ZToxOyAgICAgICAgICAgICAgLy8gMCA9IFJlYWQtT25seSwgMT0gUmVhZC9Xcml0ZQ0KPj4g KyAgICBVSU5UNjQgIFVzZXJTdXBlcnZpc29yOjE7ICAgICAgICAgLy8gMCA9IFN1cGVydmlzb3Is IDE9VXNlcg0KPj4gKyAgICBVSU5UNjQgIFdyaXRlVGhyb3VnaDoxOyAgICAgICAgICAgLy8gMCA9 IFdyaXRlLUJhY2sgY2FjaGluZywgMT1Xcml0ZS1UaHJvdWdoIGNhY2hpbmcNCj4+ICsgICAgVUlO VDY0ICBDYWNoZURpc2FibGVkOjE7ICAgICAgICAgIC8vIDAgPSBDYWNoZWQsIDE9Tm9uLUNhY2hl ZA0KPj4gKyAgICBVSU5UNjQgIEFjY2Vzc2VkOjE7ICAgICAgICAgICAgICAgLy8gMCA9IE5vdCBh Y2Nlc3NlZCwgMSA9IEFjY2Vzc2VkIChzZXQgYnkgQ1BVKQ0KPj4gKyAgICBVSU5UNjQgIFJlc2Vy dmVkOjE7ICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQNCj4+ICsgICAgVUlOVDY0ICBNdXN0QmVa ZXJvOjI7ICAgICAgICAgICAgIC8vIE11c3QgQmUgWmVybw0KPj4gKyAgICBVSU5UNjQgIEF2YWls YWJsZTozOyAgICAgICAgICAgICAgLy8gQXZhaWxhYmxlIGZvciB1c2UgYnkgc3lzdGVtIHNvZnR3 YXJlDQo+PiArICAgIFVJTlQ2NCAgUGFnZVRhYmxlQmFzZUFkZHJlc3M6NDA7ICAvLyBQYWdlIFRh YmxlIEJhc2UgQWRkcmVzcw0KPj4gKyAgICBVSU5UNjQgIEF2YWJpbGFibGVIaWdoOjExOyAgICAg ICAgLy8gQXZhaWxhYmxlIGZvciB1c2UgYnkgc3lzdGVtIHNvZnR3YXJlDQo+PiArICAgIFVJTlQ2 NCAgTng6MTsgICAgICAgICAgICAgICAgICAgICAvLyBObyBFeGVjdXRlIGJpdA0KPj4gKyAgfSBC aXRzOw0KPj4gKyAgVUlOVDY0ICAgIFVpbnQ2NDsNCj4+ICt9IFBBR0VfTUFQX0FORF9ESVJFQ1RP UllfUE9JTlRFUjsNCj4+ICsNCj4+ICsvLw0KPj4gKy8vIFBhZ2UgVGFibGUgRW50cnkgNEtCDQo+ PiArLy8NCj4+ICt0eXBlZGVmIHVuaW9uIHsNCj4+ICsgIHN0cnVjdCB7DQo+PiArICAgIFVJTlQ2 NCAgUHJlc2VudDoxOyAgICAgICAgICAgICAgICAvLyAwID0gTm90IHByZXNlbnQgaW4gbWVtb3J5 LCAxID0gUHJlc2VudCBpbiBtZW1vcnkNCj4+ICsgICAgVUlOVDY0ICBSZWFkV3JpdGU6MTsgICAg ICAgICAgICAgIC8vIDAgPSBSZWFkLU9ubHksIDE9IFJlYWQvV3JpdGUNCj4+ICsgICAgVUlOVDY0 ICBVc2VyU3VwZXJ2aXNvcjoxOyAgICAgICAgIC8vIDAgPSBTdXBlcnZpc29yLCAxPVVzZXINCj4+ ICsgICAgVUlOVDY0ICBXcml0ZVRocm91Z2g6MTsgICAgICAgICAgIC8vIDAgPSBXcml0ZS1CYWNr IGNhY2hpbmcsIDE9V3JpdGUtVGhyb3VnaCBjYWNoaW5nDQo+PiArICAgIFVJTlQ2NCAgQ2FjaGVE aXNhYmxlZDoxOyAgICAgICAgICAvLyAwID0gQ2FjaGVkLCAxPU5vbi1DYWNoZWQNCj4+ICsgICAg VUlOVDY0ICBBY2Nlc3NlZDoxOyAgICAgICAgICAgICAgIC8vIDAgPSBOb3QgYWNjZXNzZWQsIDEg PSBBY2Nlc3NlZCAoc2V0IGJ5IENQVSkNCj4+ICsgICAgVUlOVDY0ICBEaXJ0eToxOyAgICAgICAg ICAgICAgICAgIC8vIDAgPSBOb3QgRGlydHksIDEgPSB3cml0dGVuIGJ5IHByb2Nlc3NvciBvbiBh Y2Nlc3MgdG8gcGFnZQ0KPj4gKyAgICBVSU5UNjQgIFBBVDoxOyAgICAgICAgICAgICAgICAgICAg Ly8NCj4+ICsgICAgVUlOVDY0ICBHbG9iYWw6MTsgICAgICAgICAgICAgICAgIC8vIDAgPSBOb3Qg Z2xvYmFsIHBhZ2UsIDEgPSBnbG9iYWwgcGFnZSBUTEIgbm90IGNsZWFyZWQgb24gQ1IzIHdyaXRl DQo+PiArICAgIFVJTlQ2NCAgQXZhaWxhYmxlOjM7ICAgICAgICAgICAgICAvLyBBdmFpbGFibGUg Zm9yIHVzZSBieSBzeXN0ZW0gc29mdHdhcmUNCj4+ICsgICAgVUlOVDY0ICBQYWdlVGFibGVCYXNl QWRkcmVzczo0MDsgIC8vIFBhZ2UgVGFibGUgQmFzZSBBZGRyZXNzDQo+PiArICAgIFVJTlQ2NCAg QXZhYmlsYWJsZUhpZ2g6MTE7ICAgICAgICAvLyBBdmFpbGFibGUgZm9yIHVzZSBieSBzeXN0ZW0g c29mdHdhcmUNCj4+ICsgICAgVUlOVDY0ICBOeDoxOyAgICAgICAgICAgICAgICAgICAgIC8vIDAg PSBFeGVjdXRlIENvZGUsIDEgPSBObyBDb2RlIEV4ZWN1dGlvbg0KPj4gKyAgfSBCaXRzOw0KPj4g KyAgVUlOVDY0ICAgIFVpbnQ2NDsNCj4+ICt9IFBBR0VfVEFCTEVfNEtfRU5UUlk7DQo+PiArDQo+ PiArLy8NCj4+ICsvLyBQYWdlIFRhYmxlIEVudHJ5IDJNQg0KPj4gKy8vDQo+PiArdHlwZWRlZiB1 bmlvbiB7DQo+PiArICBzdHJ1Y3Qgew0KPj4gKyAgICBVSU5UNjQgIFByZXNlbnQ6MTsgICAgICAg ICAgICAgICAgLy8gMCA9IE5vdCBwcmVzZW50IGluIG1lbW9yeSwgMSA9IFByZXNlbnQgaW4gbWVt b3J5DQo+PiArICAgIFVJTlQ2NCAgUmVhZFdyaXRlOjE7ICAgICAgICAgICAgICAvLyAwID0gUmVh ZC1Pbmx5LCAxPSBSZWFkL1dyaXRlDQo+PiArICAgIFVJTlQ2NCAgVXNlclN1cGVydmlzb3I6MTsg ICAgICAgICAvLyAwID0gU3VwZXJ2aXNvciwgMT1Vc2VyDQo+PiArICAgIFVJTlQ2NCAgV3JpdGVU aHJvdWdoOjE7ICAgICAgICAgICAvLyAwID0gV3JpdGUtQmFjayBjYWNoaW5nLCAxPVdyaXRlLVRo cm91Z2ggY2FjaGluZw0KPj4gKyAgICBVSU5UNjQgIENhY2hlRGlzYWJsZWQ6MTsgICAgICAgICAg Ly8gMCA9IENhY2hlZCwgMT1Ob24tQ2FjaGVkDQo+PiArICAgIFVJTlQ2NCAgQWNjZXNzZWQ6MTsg ICAgICAgICAgICAgICAvLyAwID0gTm90IGFjY2Vzc2VkLCAxID0gQWNjZXNzZWQgKHNldCBieSBD UFUpDQo+PiArICAgIFVJTlQ2NCAgRGlydHk6MTsgICAgICAgICAgICAgICAgICAvLyAwID0gTm90 IERpcnR5LCAxID0gd3JpdHRlbiBieSBwcm9jZXNzb3Igb24gYWNjZXNzIHRvIHBhZ2UNCj4+ICsg ICAgVUlOVDY0ICBNdXN0QmUxOjE7ICAgICAgICAgICAgICAgIC8vIE11c3QgYmUgMQ0KPj4gKyAg ICBVSU5UNjQgIEdsb2JhbDoxOyAgICAgICAgICAgICAgICAgLy8gMCA9IE5vdCBnbG9iYWwgcGFn ZSwgMSA9IGdsb2JhbCBwYWdlIFRMQiBub3QgY2xlYXJlZCBvbiBDUjMgd3JpdGUNCj4+ICsgICAg VUlOVDY0ICBBdmFpbGFibGU6MzsgICAgICAgICAgICAgIC8vIEF2YWlsYWJsZSBmb3IgdXNlIGJ5 IHN5c3RlbSBzb2Z0d2FyZQ0KPj4gKyAgICBVSU5UNjQgIFBBVDoxOyAgICAgICAgICAgICAgICAg ICAgLy8NCj4+ICsgICAgVUlOVDY0ICBNdXN0QmVaZXJvOjg7ICAgICAgICAgICAgIC8vIE11c3Qg YmUgemVybzsNCj4+ICsgICAgVUlOVDY0ICBQYWdlVGFibGVCYXNlQWRkcmVzczozMTsgIC8vIFBh Z2UgVGFibGUgQmFzZSBBZGRyZXNzDQo+PiArICAgIFVJTlQ2NCAgQXZhYmlsYWJsZUhpZ2g6MTE7 ICAgICAgICAvLyBBdmFpbGFibGUgZm9yIHVzZSBieSBzeXN0ZW0gc29mdHdhcmUNCj4+ICsgICAg VUlOVDY0ICBOeDoxOyAgICAgICAgICAgICAgICAgICAgIC8vIDAgPSBFeGVjdXRlIENvZGUsIDEg PSBObyBDb2RlIEV4ZWN1dGlvbg0KPj4gKyAgfSBCaXRzOw0KPj4gKyAgVUlOVDY0ICAgIFVpbnQ2 NDsNCj4+ICt9IFBBR0VfVEFCTEVfRU5UUlk7DQo+PiArDQo+PiArLy8NCj4+ICsvLyBQYWdlIFRh YmxlIEVudHJ5IDFHQg0KPj4gKy8vDQo+PiArdHlwZWRlZiB1bmlvbiB7DQo+PiArICBzdHJ1Y3Qg ew0KPj4gKyAgICBVSU5UNjQgIFByZXNlbnQ6MTsgICAgICAgICAgICAgICAgLy8gMCA9IE5vdCBw cmVzZW50IGluIG1lbW9yeSwgMSA9IFByZXNlbnQgaW4gbWVtb3J5DQo+PiArICAgIFVJTlQ2NCAg UmVhZFdyaXRlOjE7ICAgICAgICAgICAgICAvLyAwID0gUmVhZC1Pbmx5LCAxPSBSZWFkL1dyaXRl DQo+PiArICAgIFVJTlQ2NCAgVXNlclN1cGVydmlzb3I6MTsgICAgICAgICAvLyAwID0gU3VwZXJ2 aXNvciwgMT1Vc2VyDQo+PiArICAgIFVJTlQ2NCAgV3JpdGVUaHJvdWdoOjE7ICAgICAgICAgICAv LyAwID0gV3JpdGUtQmFjayBjYWNoaW5nLCAxPVdyaXRlLVRocm91Z2ggY2FjaGluZw0KPj4gKyAg ICBVSU5UNjQgIENhY2hlRGlzYWJsZWQ6MTsgICAgICAgICAgLy8gMCA9IENhY2hlZCwgMT1Ob24t Q2FjaGVkDQo+PiArICAgIFVJTlQ2NCAgQWNjZXNzZWQ6MTsgICAgICAgICAgICAgICAvLyAwID0g Tm90IGFjY2Vzc2VkLCAxID0gQWNjZXNzZWQgKHNldCBieSBDUFUpDQo+PiArICAgIFVJTlQ2NCAg RGlydHk6MTsgICAgICAgICAgICAgICAgICAvLyAwID0gTm90IERpcnR5LCAxID0gd3JpdHRlbiBi eSBwcm9jZXNzb3Igb24gYWNjZXNzIHRvIHBhZ2UNCj4+ICsgICAgVUlOVDY0ICBNdXN0QmUxOjE7 ICAgICAgICAgICAgICAgIC8vIE11c3QgYmUgMQ0KPj4gKyAgICBVSU5UNjQgIEdsb2JhbDoxOyAg ICAgICAgICAgICAgICAgLy8gMCA9IE5vdCBnbG9iYWwgcGFnZSwgMSA9IGdsb2JhbCBwYWdlIFRM QiBub3QgY2xlYXJlZCBvbiBDUjMgd3JpdGUNCj4+ICsgICAgVUlOVDY0ICBBdmFpbGFibGU6Mzsg ICAgICAgICAgICAgIC8vIEF2YWlsYWJsZSBmb3IgdXNlIGJ5IHN5c3RlbSBzb2Z0d2FyZQ0KPj4g KyAgICBVSU5UNjQgIFBBVDoxOyAgICAgICAgICAgICAgICAgICAgLy8NCj4+ICsgICAgVUlOVDY0 ICBNdXN0QmVaZXJvOjE3OyAgICAgICAgICAgIC8vIE11c3QgYmUgemVybzsNCj4+ICsgICAgVUlO VDY0ICBQYWdlVGFibGVCYXNlQWRkcmVzczoyMjsgIC8vIFBhZ2UgVGFibGUgQmFzZSBBZGRyZXNz DQo+PiArICAgIFVJTlQ2NCAgQXZhYmlsYWJsZUhpZ2g6MTE7ICAgICAgICAvLyBBdmFpbGFibGUg Zm9yIHVzZSBieSBzeXN0ZW0gc29mdHdhcmUNCj4+ICsgICAgVUlOVDY0ICBOeDoxOyAgICAgICAg ICAgICAgICAgICAgIC8vIDAgPSBFeGVjdXRlIENvZGUsIDEgPSBObyBDb2RlIEV4ZWN1dGlvbg0K Pj4gKyAgfSBCaXRzOw0KPj4gKyAgVUlOVDY0ICAgIFVpbnQ2NDsNCj4+ICt9IFBBR0VfVEFCTEVf MUdfRU5UUlk7DQo+PiArDQo+PiArI3ByYWdtYSBwYWNrKCkNCj4+ICsNCj4+ICsjZGVmaW5lIElB MzJfUEdfUCAgICAgICAgICAgICAgICAgICBCSVQwDQo+PiArI2RlZmluZSBJQTMyX1BHX1JXICAg ICAgICAgICAgICAgICAgQklUMQ0KPj4gKw0KPj4gKyNkZWZpbmUgUEFHRVRBQkxFX0VOVFJZX01B U0sgICAgICAgICgoMVVMIDw8IDkpIC0gMSkNCj4+ICsjZGVmaW5lIFBNTDRfT0ZGU0VUKHgpICAg ICAgICAgICAgICAoICh4ID4+IDM5KSAmIFBBR0VUQUJMRV9FTlRSWV9NQVNLKQ0KPj4gKyNkZWZp bmUgUERQX09GRlNFVCh4KSAgICAgICAgICAgICAgICggKHggPj4gMzApICYgUEFHRVRBQkxFX0VO VFJZX01BU0spDQo+PiArI2RlZmluZSBQREVfT0ZGU0VUKHgpICAgICAgICAgICAgICAgKCAoeCA+ PiAyMSkgJiBQQUdFVEFCTEVfRU5UUllfTUFTSykNCj4+ICsjZGVmaW5lIFBURV9PRkZTRVQoeCkg ICAgICAgICAgICAgICAoICh4ID4+IDEyKSAmIFBBR0VUQUJMRV9FTlRSWV9NQVNLKQ0KPj4gKyNk ZWZpbmUgUEFHSU5HXzFHX0FERFJFU1NfTUFTS182NCAgIDB4MDAwRkZGRkZDMDAwMDAwMHVsbA0K Pj4gKw0KPj4gKy8qKg0KPj4gKyAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgbWVtb3J5IGVuY3J5cHRp b24gYml0IGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBzcGVjaWZpZWQgYnkgUGh5c2ljYWxBZGRyZXNz DQo+PiArICBhbmQgbGVuZ3RoIGZyb20gdGhlIGN1cnJlbnQgcGFnZSB0YWJsZSBjb250ZXh0Lg0K Pj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgUGh5c2ljYWxBZGRyZXNzICAgICAgICAgVGhlIHBoeXNp Y2FsIGFkZHJlc3MgdGhhdCBpcyB0aGUgc3RhcnQgYWRkcmVzcyBvZiBhIG1lbW9yeSByZWdpb24u DQo+PiArICBAcGFyYW1baW5dICBMZW5ndGggICAgICAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9m IG1lbW9yeSByZWdpb24NCj4+ICsgIEBwYXJhbVtpbl0gIEZsdXNoICAgICAgICAgICAgICAgICAg IEZsdXNoIHRoZSBjYWNoZXMgYmVmb3JlIGFwcGx5aW5nIHRoZSBlbmNyeXB0aW9uIG1hc2sNCj4+ ICsNCj4+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1 dGVzIHdlcmUgY2xlYXJlZCBmb3IgdGhlIG1lbW9yeSByZWdpb24uDQo+PiArICBAcmV0dmFsIFJF VFVSTl9JTlZBTElEX1BBUkFNRVRFUiAgICBOdW1iZXIgb2YgcGFnZXMgaXMgemVyby4NCj4+ICsg IEByZXR2YWwgUkVUVVJOX1VOU1VQUE9SVEVEICAgICAgICAgIFNldHRpbmcgdGhlIG1lbW9yeSBl bmN5cnB0aW9uIGF0dHJpYnV0ZSBpcyBub3Qgc3VwcG9ydGVkDQo+PiArKiovDQo+PiArUkVUVVJO X1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0ludGVybmFsTWVtRW5jcnlwdFNldlNldE1lbW9yeURl Y3J5cHRlZCAoDQo+PiArICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgQ3IzQmFzZUFkZHJlc3Ms DQo+PiArICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgUGh5c2ljYWxBZGRyZXNzLA0KPj4gKyAg SU4gIFVJTlQ2NCAgICAgICAgICAgICAgIExlbmd0aCwNCj4+ICsgIElOICBCT09MRUFOICAgICAg ICAgICAgICBDYWNoZUZsdXNoDQo+PiArICApOw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgVGhpcyBm dW5jdGlvbiBzZXRzIG1lbW9yeSBlbmNyeXB0aW9uIGJpdCBmb3IgdGhlIG1lbW9yeSByZWdpb24g c3BlY2lmaWVkIGJ5DQo+PiArICBQaHlzaWNhbEFkZHJlc3MgYW5kIGxlbmd0aCBmcm9tIHRoZSBj dXJyZW50IHBhZ2UgdGFibGUgY29udGV4dC4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gIFBoeXNp Y2FsQWRkcmVzcyAgICAgICAgIFRoZSBwaHlzaWNhbCBhZGRyZXNzIHRoYXQgaXMgdGhlIHN0YXJ0 IGFkZHJlc3MNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGEg bWVtb3J5IHJlZ2lvbi4NCj4+ICsgIEBwYXJhbVtpbl0gIExlbmd0aCAgICAgICAgICAgICAgICAg IFRoZSBsZW5ndGggb2YgbWVtb3J5IHJlZ2lvbg0KPj4gKyAgQHBhcmFtW2luXSAgRmx1c2ggICAg ICAgICAgICAgICAgICAgRmx1c2ggdGhlIGNhY2hlcyBiZWZvcmUgYXBwbHlpbmcgdGhlDQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uIG1hc2sNCj4+ ICsNCj4+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1 dGVzIHdlcmUgY2xlYXJlZCBmb3IgdGhlIG1lbW9yeSByZWdpb24uDQo+PiArICBAcmV0dmFsIFJF VFVSTl9JTlZBTElEX1BBUkFNRVRFUiAgICBOdW1iZXIgb2YgcGFnZXMgaXMgemVyby4NCj4+ICsg IEByZXR2YWwgUkVUVVJOX1VOU1VQUE9SVEVEICAgICAgICAgIFNldHRpbmcgdGhlIG1lbW9yeSBl bmN5cnB0aW9uIGF0dHJpYnV0ZSBpcw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbm90IHN1cHBvcnRlZA0KPj4gKyoqLw0KPj4gK1JFVFVSTl9TVEFUVVMNCj4+ICtF RklBUEkNCj4+ICtJbnRlcm5hbE1lbUVuY3J5cHRTZXZTZXRNZW1vcnlFbmNyeXB0ZWQgKA0KPj4g KyAgSU4gIFBIWVNJQ0FMX0FERFJFU1MgICAgIENyM0Jhc2VBZGRyZXNzLA0KPj4gKyAgSU4gIFBI WVNJQ0FMX0FERFJFU1MgICAgIFBoeXNpY2FsQWRkcmVzcywNCj4+ICsgIElOICBVSU5UNjQgICAg ICAgICAgICAgICBMZW5ndGgsDQo+PiArICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgQ2FjaGVG bHVzaA0KPj4gKyAgKTsNCj4+ICsNCj4+ICsjZW5kaWYNCj4+IGRpZmYgLS1naXQgYS9Pdm1mUGtn L0xpYnJhcnkvQmFzZU1lbUVuY3J5cHRTZXZMaWIvSWEzMi9NZW1FbmNyeXB0U2V2TGliLmMgYi9P dm1mUGtnL0xpYnJhcnkvQmFzZU1lbUVuY3J5cHRTZXZMaWIvSWEzMi9NZW1FbmNyeXB0U2V2TGli LmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmEyZWE5 OTAxOTkxNw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvT3ZtZlBrZy9MaWJyYXJ5L0Jhc2VN ZW1FbmNyeXB0U2V2TGliL0lhMzIvTWVtRW5jcnlwdFNldkxpYi5jDQo+PiBAQCAtMCwwICsxLDg0 IEBADQo+PiArLyoqIEBmaWxlDQo+PiArDQo+PiArICBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxp emF0aW9uIChTRVYpIGxpYnJhcnkgaGVscGVyIGZ1bmN0aW9uDQo+PiArDQo+PiArICBDb3B5cmln aHQgKGMpIDIwMTcsIEFNRCBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0K Pj4gKw0KPj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0K Pj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPj4gKyAgTGljZW5zZSB3aGljaCBhY2NvbXBhbmllcyB0 aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5DQo+PiAr ICBiZSBmb3VuZCBhdCBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2Uu cGhwDQo+PiArDQo+PiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNE IExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBP UiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQu DQo+PiArDQo+PiArKiovDQo+PiArDQo+PiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0K Pj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+PiArI2luY2x1ZGUgPFJlZ2lzdGVy L0NwdWlkLmg+DQo+PiArI2luY2x1ZGUgPFJlZ2lzdGVyL0FtZC9DcHVpZC5oPg0KPj4gKyNpbmNs dWRlIDxSZWdpc3Rlci9BbWQvTXNyLmg+DQo+PiArI2luY2x1ZGUgPExpYnJhcnkvTWVtRW5jcnlw dFNldkxpYi5oPg0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgbWVt b3J5IGVuY3J5cHRpb24gYml0IGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBzcGVjaWZpZWQNCj4+ICsg IGJ5IEJhc2VBZGRyZXNzIGFuZCBOdW1iZXIgb2YgcGFnZXMgZnJvbSB0aGUgY3VycmVudCBwYWdl IHRhYmxlIGNvbnRleHQuDQo+PiArDQo+PiArICBAcGFyYW1baW5dICBDcjNCYXNlQWRkcmVzcyAg ICAgICAgQ3IzIEJhc2UgQWRkcmVzcyAoaWYgemVybyB0aGVuIHVzZSBjdXJyZW50IENSMykNCj4+ ICsgIEBwYXJhbVtpbl0gIEJhc2VBZGRyZXNzICAgICAgICAgICBUaGUgcGh5c2ljYWwgYWRkcmVz cyB0aGF0IGlzIHRoZSBzdGFydCBhZGRyZXNzDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb2YgYSBtZW1vcnkgcmVnaW9uLg0KPj4gKyAgQHBhcmFtW2luXSAgTnVtYmVy T2ZQYWdlcyAgICAgICAgIFRoZSBudW1iZXIgb2YgcGFnZXMgZnJvbSBzdGFydCBtZW1vcnkgcmVn aW9uLg0KPj4gKyAgQHBhcmFtW2luXSAgRmx1c2ggICAgICAgICAgICAgICAgIEZsdXNoIHRoZSBj YWNoZXMgYmVmb3JlIGNsZWFyaW5nIHRoZSBiaXQNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobW9zdGx5IFRSVUUgZXhjZXB0IE1NSU8gYWRkcmVzc2VzKQ0KPj4gKw0K Pj4gKyAgQHJldHZhbCBSRVRVUk5fU1VDQ0VTUyAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGVzIHdl cmUgY2xlYXJlZCBmb3IgdGhlIG1lbW9yeSByZWdpb24uDQo+PiArICBAcmV0dmFsIFJFVFVSTl9J TlZBTElEX1BBUkFNRVRFUiAgTnVtYmVyIG9mIHBhZ2VzIGlzIHplcm8uDQo+PiArICBAcmV0dmFs IFJFVFVSTl9VTlNVUFBPUlRFRCAgICAgICAgQ2xlYXJpbmcgbWVtb3J5IGVuY3J5cHRpb24gYXR0 cmlidXRlIGlzIG5vdA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1 cHBvcnRlZA0KPj4gKyAgKiovDQo+PiArUkVUVVJOX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK01l bUVuY3J5cHRTZXZDbGVhclBhZ2VFbmNNYXNrICgNCj4+ICsgIElOIFBIWVNJQ0FMX0FERFJFU1Mg ICAgICAgICBDcjNCYXNlQWRkcmVzcywNCj4+ICsgIElOIFBIWVNJQ0FMX0FERFJFU1MgICAgICAg ICBCYXNlQWRkcmVzcywNCj4+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICBOdW1iZXJP ZlBhZ2VzLA0KPj4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAgIEZsdXNoDQo+PiArICAp DQo+PiArew0KPj4gKyAgLy8NCj4+ICsgIC8vIE1lbW9yeSBlbmNyeXB0aW9uIGJpdCBpcyBub3Qg YWNjZXNzaWJsZSBpbiAzMi1iaXQgbW9kZQ0KPj4gKyAgLy8NCj4+ICsgIHJldHVybiBSRVRVUk5f VU5TVVBQT1JURUQ7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgVGhpcyBmdW5jdGlvbiBz ZXRzIG1lbW9yeSBlbmNyeXB0aW9uIGJpdCBmb3IgdGhlIG1lbW9yeSByZWdpb24gc3BlY2lmaWVk IGJ5DQo+PiArICBCYXNlQWRkcmVzcyBhbmQgTnVtYmVyIG9mIHBhZ2VzIGZyb20gdGhlIGN1cnJl bnQgcGFnZSB0YWJsZSBjb250ZXh0Lg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgQ3IzQmFzZUFk ZHJlc3MgICAgICAgIENyMyBCYXNlIEFkZHJlc3MgKGlmIHplcm8gdGhlbiB1c2UgY3VycmVudCBD UjMpDQo+PiArICBAcGFyYW1baW5dICBCYXNlQWRkcmVzcyAgICAgICAgICAgVGhlIHBoeXNpY2Fs IGFkZHJlc3MgdGhhdCBpcyB0aGUgc3RhcnQgYWRkcmVzcw0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9mIGEgbWVtb3J5IHJlZ2lvbi4NCj4+ICsgIEBwYXJhbVtpbl0g IE51bWJlck9mUGFnZXMgICAgICAgICBUaGUgbnVtYmVyIG9mIHBhZ2VzIGZyb20gc3RhcnQgbWVt b3J5IHJlZ2lvbi4NCj4+ICsgIEBwYXJhbVtpbl0gIEZsdXNoICAgICAgICAgICAgICAgICBGbHVz aCB0aGUgY2FjaGVzIGJlZm9yZSBjbGVhcmluZyB0aGUgYml0DQo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKG1vc3RseSBUUlVFIGV4Y2VwdCBNTUlPIGFkZHJlc3NlcykN Cj4+ICsNCj4+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICAgICBUaGUgYXR0cmli dXRlcyB3ZXJlIHNldCBmb3IgdGhlIG1lbW9yeSByZWdpb24uDQo+PiArICBAcmV0dmFsIFJFVFVS Tl9JTlZBTElEX1BBUkFNRVRFUiAgTnVtYmVyIG9mIHBhZ2VzIGlzIHplcm8uDQo+PiArICBAcmV0 dmFsIFJFVFVSTl9VTlNVUFBPUlRFRCAgICAgICAgQ2xlYXJpbmcgbWVtb3J5IGVuY3J5cHRpb24g YXR0cmlidXRlIGlzIG5vdA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN1cHBvcnRlZA0KPj4gKyAgKiovDQo+PiArUkVUVVJOX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4g K01lbUVuY3J5cHRTZXZTZXRQYWdlRW5jTWFzayAoDQo+PiArICBJTiBQSFlTSUNBTF9BRERSRVNT ICAgICAgICAgQ3IzQmFzZUFkZHJlc3MsDQo+PiArICBJTiBQSFlTSUNBTF9BRERSRVNTICAgICAg ICAgQmFzZUFkZHJlc3MsDQo+PiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgTnVtYmVy T2ZQYWdlcywNCj4+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICBGbHVzaA0KPj4gKyAg KQ0KPj4gK3sNCj4+ICsgIC8vDQo+PiArICAvLyBNZW1vcnkgZW5jcnlwdGlvbiBiaXQgaXMgbm90 IGFjY2Vzc2libGUgaW4gMzItYml0IG1vZGUNCj4+ICsgIC8vDQo+PiArICByZXR1cm4gUkVUVVJO X1VOU1VQUE9SVEVEOw0KPj4gK30NCj4+IGRpZmYgLS1naXQgYS9Pdm1mUGtnL0xpYnJhcnkvQmFz ZU1lbUVuY3J5cHRTZXZMaWIvTWVtRW5jcnlwdFNldkxpYkludGVybmFsLmMgYi9Pdm1mUGtnL0xp YnJhcnkvQmFzZU1lbUVuY3J5cHRTZXZMaWIvTWVtRW5jcnlwdFNldkxpYkludGVybmFsLmMNCj4+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjAwMmYwNzljN2Vi Mw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvT3ZtZlBrZy9MaWJyYXJ5L0Jhc2VNZW1FbmNy eXB0U2V2TGliL01lbUVuY3J5cHRTZXZMaWJJbnRlcm5hbC5jDQo+PiBAQCAtMCwwICsxLDkwIEBA DQo+PiArLyoqIEBmaWxlDQo+PiArDQo+PiArICBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0 aW9uIChTRVYpIGxpYnJhcnkgaGVscGVyIGZ1bmN0aW9uDQo+PiArDQo+PiArICBDb3B5cmlnaHQg KGMpIDIwMTcsIEFNRCBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4g Kw0KPj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPj4g KyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgb2YgdGhlIEJTRA0KPj4gKyAgTGljZW5zZSB3aGljaCBhY2NvbXBhbmllcyB0aGlz IGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5DQo+PiArICBi ZSBmb3VuZCBhdCBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhw DQo+PiArDQo+PiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJ Q0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBS RVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ PiArDQo+PiArKiovDQo+PiArDQo+PiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPj4g KyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+PiArI2luY2x1ZGUgPFJlZ2lzdGVyL0Nw dWlkLmg+DQo+PiArI2luY2x1ZGUgPFJlZ2lzdGVyL0FtZC9DcHVpZC5oPg0KPj4gKyNpbmNsdWRl IDxSZWdpc3Rlci9BbWQvTXNyLmg+DQo+PiArI2luY2x1ZGUgPExpYnJhcnkvTWVtRW5jcnlwdFNl dkxpYi5oPg0KPj4gKw0KPj4gK1NUQVRJQyBCT09MRUFOIG1TZXZTdGF0dXMgPSBGQUxTRTsNCj4+ ICtTVEFUSUMgQk9PTEVBTiBtU2V2U3RhdHVzQ2hlY2tlZCA9IEZBTFNFOw0KPj4gKw0KPj4gKy8q Kg0KPj4gKw0KPj4gKyAgUmV0dXJucyBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgd2hldGhlciBTRVYg aXMgZW5hYmxlZA0KPj4gKw0KPj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgICBTRVYgaXMgZW5h YmxlZA0KPj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICBTRVYgaXMgbm90IGVuYWJsZWQNCj4+ ICsgICoqLw0KPj4gK1NUQVRJQw0KPj4gK0JPT0xFQU4NCj4+ICtFRklBUEkNCj4+ICtJbnRlcm5h bE1lbUVuY3J5cHRTZXZJc0VuYWJsZWQgKA0KPj4gKyAgVk9JRA0KPj4gKyAgKQ0KPj4gK3sNCj4+ ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdFYXg7DQo+PiArICBNU1Jf U0VWX1NUQVRVU19SRUdJU1RFUiAgICAgICAgICAgTXNyOw0KPj4gKyAgQ1BVSURfTUVNT1JZX0VO Q1JZUFRJT05fSU5GT19FQVggIEVheDsNCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBDaGVjayBp ZiBtZW1vcnkgZW5jcnlwdGlvbiBsZWFmIGV4aXN0DQo+PiArICAvLw0KPj4gKyAgQXNtQ3B1aWQg KENQVUlEX0VYVEVOREVEX0ZVTkNUSU9OLCAmUmVnRWF4LCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4+ ICsgIGlmIChSZWdFYXggPj0gQ1BVSURfTUVNT1JZX0VOQ1JZUFRJT05fSU5GTykgew0KPj4gKyAg ICAvLw0KPj4gKyAgICAvLyBDUFVJRCBGbjgwMDBfMDAxRltFQVhdIEJpdCAxIChTZXYgc3VwcG9y dGVkKQ0KPj4gKyAgICAvLw0KPj4gKyAgICBBc21DcHVpZCAoQ1BVSURfTUVNT1JZX0VOQ1JZUFRJ T05fSU5GTywgJkVheC5VaW50MzIsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPj4gKw0KPj4gKyAgICBp ZiAoRWF4LkJpdHMuU2V2Qml0KSB7DQo+PiArICAgICAgLy8NCj4+ICsgICAgICAvLyBDaGVjayBN U1JfMHhDMDAxMDEzMSBCaXQgMCAoU2V2IEVuYWJsZWQpDQo+PiArICAgICAgLy8NCj4+ICsgICAg ICBNc3IuVWludDMyID0gQXNtUmVhZE1zcjMyIChNU1JfU0VWX1NUQVRVUyk7DQo+PiArICAgICAg aWYgKE1zci5CaXRzLlNldkJpdCkgew0KPj4gKyAgICAgICAgcmV0dXJuIFRSVUU7DQo+PiArICAg ICAgfQ0KPj4gKyAgICB9DQo+PiArICB9DQo+PiArDQo+PiArICByZXR1cm4gRkFMU0U7DQo+PiAr fQ0KPj4gKw0KPj4gKy8qKg0KPj4gKw0KPj4gKyAgUmV0dXJucyBhIGJvb2xlYW4gdG8gaW5kaWNh dGUgd2hldGhlciBTRVYgaXMgZW5hYmxlZA0KPj4gKw0KPj4gKyAgQHJldHZhbCBUUlVFICAgICAg ICAgICBTRVYgaXMgZW5hYmxlZA0KPj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICBTRVYgaXMg bm90IGVuYWJsZWQNCj4+ICsgICoqLw0KPj4gK0JPT0xFQU4NCj4+ICtFRklBUEkNCj4+ICtNZW1F bmNyeXB0U2V2SXNFbmFibGVkICgNCj4+ICsgIFZPSUQNCj4+ICsgICkNCj4+ICt7DQo+PiArICBp ZiAobVNldlN0YXR1c0NoZWNrZWQpIHsNCj4+ICsgICAgcmV0dXJuIG1TZXZTdGF0dXM7DQo+PiAr ICB9DQo+PiArDQo+PiArICBtU2V2U3RhdHVzID0gSW50ZXJuYWxNZW1FbmNyeXB0U2V2SXNFbmFi bGVkKCk7DQo+PiArICBtU2V2U3RhdHVzQ2hlY2tlZCA9IFRSVUU7DQo+PiArDQo+PiArICByZXR1 cm4gbVNldlN0YXR1czsNCj4+ICt9DQo+PiBkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9MaWJyYXJ5L0Jh c2VNZW1FbmNyeXB0U2V2TGliL1g2NC9NZW1FbmNyeXB0U2V2TGliLmMgYi9Pdm1mUGtnL0xpYnJh cnkvQmFzZU1lbUVuY3J5cHRTZXZMaWIvWDY0L01lbUVuY3J5cHRTZXZMaWIuYw0KPj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uOWVjNzY3MDhiZDdiDQo+PiAt LS0gL2Rldi9udWxsDQo+PiArKysgYi9Pdm1mUGtnL0xpYnJhcnkvQmFzZU1lbUVuY3J5cHRTZXZM aWIvWDY0L01lbUVuY3J5cHRTZXZMaWIuYw0KPj4gQEAgLTAsMCArMSw4NCBAQA0KPj4gKy8qKiBA ZmlsZQ0KPj4gKw0KPj4gKyAgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBs aWJyYXJ5IGhlbHBlciBmdW5jdGlvbg0KPj4gKw0KPj4gKyAgQ29weXJpZ2h0IChjKSAyMDE3LCBB TUQgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4+ICsNCj4+ICsgIFRo aXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4+ICsgIGFyZSBsaWNl bnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBCU0QNCj4+ICsgIExpY2Vuc2Ugd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRp b24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heQ0KPj4gKyAgYmUgZm91bmQgYXQg aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPj4gKw0KPj4g KyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFO ICJBUyBJUyIgQkFTSVMsDQo+PiArICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJ T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPj4gKw0KPj4gKyoq Lw0KPj4gKw0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4+ICsjaW5jbHVkZSA8 TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPj4gKyNpbmNsdWRlIDxSZWdpc3Rlci9DcHVpZC5oPg0KPj4g KyNpbmNsdWRlIDxSZWdpc3Rlci9BbWQvQ3B1aWQuaD4NCj4+ICsjaW5jbHVkZSA8UmVnaXN0ZXIv QW1kL01zci5oPg0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbUVuY3J5cHRTZXZMaWIuaD4NCj4+ ICsNCj4+ICsjaW5jbHVkZSAiVmlydHVhbE1lbW9yeS5oIg0KPj4gKw0KPj4gKy8qKg0KPj4gKw0K Pj4gKyAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgbWVtb3J5IGVuY3J5cHRpb24gYml0IGZvciB0aGUg bWVtb3J5IHJlZ2lvbiBzcGVjaWZpZWQgYnkNCj4+ICsgIEJhc2VBZGRyZXNzIGFuZCBOdW1iZXIg b2YgcGFnZXMgZnJvbSB0aGUgY3VycmVudCBwYWdlIHRhYmxlIGNvbnRleHQuDQo+PiArDQo+PiAr ICBAcGFyYW1baW5dICBDcjNCYXNlQWRkcmVzcyAgICAgICAgICBDcjMgQmFzZSBBZGRyZXNzIChp ZiB6ZXJvIHRoZW4gdXNlIGN1cnJlbnQgQ1IzKQ0KPj4gKyAgQHBhcmFtW2luXSAgQmFzZUFkZHJl c3MgICAgICAgICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3MgdGhhdCBpcyB0aGUgc3RhcnQgYWRk cmVzcw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSBtZW1v cnkgcmVnaW9uLg0KPj4gKyAgQHBhcmFtW2luXSAgTnVtYmVyT2ZQYWdlcyAgICAgICAgICAgVGhl IG51bWJlciBvZiBwYWdlcyBmcm9tIHN0YXJ0IG1lbW9yeSByZWdpb24uDQo+PiArICBAcGFyYW1b aW5dICBGbHVzaCAgICAgICAgICAgICAgICAgICBGbHVzaCB0aGUgY2FjaGVzIGJlZm9yZSBjbGVh cmluZyB0aGUgYml0DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bW9zdGx5IFRSVUUgZXhjZXB0IE1NSU8gYWRkcmVzc2VzKQ0KPj4gKw0KPj4gKyAgQHJldHZhbCBS RVRVUk5fU1VDQ0VTUyAgICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZXMgd2VyZSBjbGVhcmVkIGZv ciB0aGUgbWVtb3J5DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWdpb24uDQo+PiArICBAcmV0dmFsIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUiAgICBOdW1iZXIg b2YgcGFnZXMgaXMgemVyby4NCj4+ICsgIEByZXR2YWwgUkVUVVJOX1VOU1VQUE9SVEVEICAgICAg ICAgIENsZWFyaW5nIHRoZSBtZW1vcnkgZW5jcnlwdGlvbiBhdHRyaWJ1dGUgaXMNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzdXBwb3J0ZWQNCj4+ICsgICoq Lw0KPj4gK1JFVFVSTl9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtNZW1FbmNyeXB0U2V2Q2xlYXJQ YWdlRW5jTWFzayAoDQo+PiArICBJTiBQSFlTSUNBTF9BRERSRVNTICAgICAgICAgQ3IzQmFzZUFk ZHJlc3MsDQo+PiArICBJTiBQSFlTSUNBTF9BRERSRVNTICAgICAgICAgQmFzZUFkZHJlc3MsDQo+ PiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgTnVtUGFnZXMsDQo+PiArICBJTiBCT09M RUFOICAgICAgICAgICAgICAgICAgRmx1c2gNCj4+ICsgICkNCj4+ICt7DQo+PiArICByZXR1cm4g SW50ZXJuYWxNZW1FbmNyeXB0U2V2U2V0TWVtb3J5RGVjcnlwdGVkIChDcjNCYXNlQWRkcmVzcywg QmFzZUFkZHJlc3MsIEVGSV9QQUdFU19UT19TSVpFKE51bVBhZ2VzKSwgRmx1c2gpOw0KPj4gK30N Cj4+ICsNCj4+ICsvKioNCj4+ICsNCj4+ICsgIFRoaXMgZnVuY3Rpb24gY2xlYXJzIG1lbW9yeSBl bmNyeXB0aW9uIGJpdCBmb3IgdGhlIG1lbW9yeSByZWdpb24gc3BlY2lmaWVkIGJ5DQo+PiArICBC YXNlQWRkcmVzcyBhbmQgTnVtYmVyIG9mIHBhZ2VzIGZyb20gdGhlIGN1cnJlbnQgcGFnZSB0YWJs ZSBjb250ZXh0Lg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgQ3IzQmFzZUFkZHJlc3MgICAgICAg ICAgQ3IzIEJhc2UgQWRkcmVzcyAoaWYgemVybyB0aGVuIHVzZSBjdXJyZW50IENSMykNCj4+ICsg IEBwYXJhbVtpbl0gIEJhc2VBZGRyZXNzICAgICAgICAgICAgIFRoZSBwaHlzaWNhbCBhZGRyZXNz IHRoYXQgaXMgdGhlIHN0YXJ0IGFkZHJlc3MNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9mIGEgbWVtb3J5IHJlZ2lvbi4NCj4+ICsgIEBwYXJhbVtpbl0gIE51bWJl ck9mUGFnZXMgICAgICAgICAgIFRoZSBudW1iZXIgb2YgcGFnZXMgZnJvbSBzdGFydCBtZW1vcnkg cmVnaW9uLg0KPj4gKyAgQHBhcmFtW2luXSAgRmx1c2ggICAgICAgICAgICAgICAgICAgRmx1c2gg dGhlIGNhY2hlcyBiZWZvcmUgY2xlYXJpbmcgdGhlIGJpdA0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKG1vc3RseSBUUlVFIGV4Y2VwdCBNTUlPIGFkZHJlc3NlcykN Cj4+ICsNCj4+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICAgICAgIFRoZSBhdHRy aWJ1dGVzIHdlcmUgY2xlYXJlZCBmb3IgdGhlIG1lbW9yeQ0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLg0KPj4gKyAgQHJldHZhbCBSRVRVUk5fSU5WQUxJ RF9QQVJBTUVURVIgICAgTnVtYmVyIG9mIHBhZ2VzIGlzIHplcm8uDQo+PiArICBAcmV0dmFsIFJF VFVSTl9VTlNVUFBPUlRFRCAgICAgICAgICBDbGVhcmluZyB0aGUgbWVtb3J5IGVuY3J5cHRpb24g YXR0cmlidXRlIGlzDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu b3Qgc3VwcG9ydGVkDQo+PiArICAqKi8NCj4+ICtSRVRVUk5fU1RBVFVTDQo+PiArRUZJQVBJDQo+ PiArTWVtRW5jcnlwdFNldlNldFBhZ2VFbmNNYXNrICgNCj4+ICsgIElOIFBIWVNJQ0FMX0FERFJF U1MgICAgICAgICBDcjNCYXNlQWRkcmVzcywNCj4+ICsgIElOIFBIWVNJQ0FMX0FERFJFU1MgICAg ICAgICBCYXNlQWRkcmVzcywNCj4+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICBOdW1Q YWdlcywNCj4+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICBGbHVzaA0KPj4gKyAgKQ0K Pj4gK3sNCj4+ICsgIHJldHVybiBJbnRlcm5hbE1lbUVuY3J5cHRTZXZTZXRNZW1vcnlFbmNyeXB0 ZWQgKENyM0Jhc2VBZGRyZXNzLCBCYXNlQWRkcmVzcywgRUZJX1BBR0VTX1RPX1NJWkUoTnVtUGFn ZXMpLCBGbHVzaCk7DQo+PiArfQ0KPj4gZGlmZiAtLWdpdCBhL092bWZQa2cvTGlicmFyeS9CYXNl TWVtRW5jcnlwdFNldkxpYi9YNjQvVmlydHVhbE1lbW9yeS5jIGIvT3ZtZlBrZy9MaWJyYXJ5L0Jh c2VNZW1FbmNyeXB0U2V2TGliL1g2NC9WaXJ0dWFsTWVtb3J5LmMNCj4+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjdjYmJmOTE1ZjQ0Mw0KPj4gLS0tIC9kZXYv bnVsbA0KPj4gKysrIGIvT3ZtZlBrZy9MaWJyYXJ5L0Jhc2VNZW1FbmNyeXB0U2V2TGliL1g2NC9W aXJ0dWFsTWVtb3J5LmMNCj4+IEBAIC0wLDAgKzEsNDM5IEBADQo+PiArLyoqIEBmaWxlDQo+PiAr DQo+PiArICBWaXJ0dWFsIE1lbW9yeSBNYW5hZ2VtZW50IFNlcnZpY2VzIHRvIHNldCBvciBjbGVh ciB0aGUgbWVtb3J5IGVuY3J5cHRpb24gYml0DQo+PiArDQo+PiArQ29weXJpZ2h0IChjKSAyMDA2 IC0gMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4g K0NvcHlyaWdodCAoYykgMjAxNywgQU1EIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQo+PiArDQo+PiArVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVy aWFscw0KPj4gK2FyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1z IGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPj4gK3doaWNoIGFjY29tcGFuaWVz IHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUg Zm91bmQgYXQNCj4+ICtodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2Uu cGhwDQo+PiArDQo+PiArVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBM SUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+PiArV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJF UFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4+ ICsNCj4+ICtDb2RlIGlzIGRlcml2ZWQgZnJvbSBNZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWlt L1g2NC9WaXJ0dWFsTWVtb3J5LmMNCj4+ICsNCj4+ICsqKi8NCj4+ICsNCj4+ICsjaW5jbHVkZSA8 TGlicmFyeS9DcHVMaWIuaD4NCj4+ICsjaW5jbHVkZSA8UmVnaXN0ZXIvQ3B1aWQuaD4NCj4+ICsj aW5jbHVkZSA8UmVnaXN0ZXIvQW1kL0NwdWlkLmg+DQo+PiArDQo+PiArI2luY2x1ZGUgIlZpcnR1 YWxNZW1vcnkuaCINCj4+ICsNCj4+ICtTVEFUSUMgQk9PTEVBTiBtQWRkcmVzc0VuY01hc2tDaGVj a2VkID0gRkFMU0U7DQo+PiArU1RBVElDIFVJTlQ2NCAgbUFkZHJlc3NFbmNNYXNrOw0KPj4gKw0K Pj4gK3R5cGVkZWYgZW51bSB7DQo+PiArICAgU2V0Q0JpdCwNCj4+ICsgICBDbGVhckNCaXQNCj4+ ICt9IE1BUF9SQU5HRV9NT0RFOw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgR2V0IHRoZSBtZW1vcnkg ZW5jcnlwdGlvbiBtYXNrDQo+PiArDQo+PiArICBAcGFyYW1bb3V0XSAgICAgIEVuY3J5cHRpb25N YXNrICAgICAgICBjb250YWlucyB0aGUgcHRlIG1hc2suDQo+PiArDQo+PiArKiovDQo+PiArU1RB VElDDQo+PiArVUlOVDY0DQo+PiArR2V0TWVtRW5jcnlwdGlvbkFkZHJlc3NNYXNrICgNCj4+ICsg IFZPSUQNCj4+ICsgICkNCj4+ICt7DQo+PiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRW5jcnlwdGlvbk1hc2s7DQo+PiArICBDUFVJRF9NRU1PUllfRU5DUllQVElPTl9JTkZP X0VCWCAgRWJ4Ow0KPj4gKw0KPj4gKyAgaWYgKG1BZGRyZXNzRW5jTWFza0NoZWNrZWQpIHsNCj4+ ICsgICAgcmV0dXJuIG1BZGRyZXNzRW5jTWFzazsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIC8vDQo+ PiArICAvLyBDUFVJRCBGbjgwMDBfMDAxRltFQlhdIEJpdCAwOjUgKG1lbW9yeSBlbmNyeXB0aW9u IGJpdCBwb3NpdGlvbikNCj4+ICsgIC8vDQo+PiArICBBc21DcHVpZCAoQ1BVSURfTUVNT1JZX0VO Q1JZUFRJT05fSU5GTywgTlVMTCwgJkVieC5VaW50MzIsIE5VTEwsIE5VTEwpOw0KPj4gKyAgRW5j cnlwdGlvbk1hc2sgPSBMU2hpZnRVNjQgKDEsIEVieC5CaXRzLlB0ZVBvc0JpdHMpOw0KPj4gKw0K Pj4gKyAgbUFkZHJlc3NFbmNNYXNrID0gRW5jcnlwdGlvbk1hc2sgJiBQQUdJTkdfMUdfQUREUkVT U19NQVNLXzY0Ow0KPj4gKyAgbUFkZHJlc3NFbmNNYXNrQ2hlY2tlZCA9IFRSVUU7DQo+PiArDQo+ PiArICByZXR1cm4gbUFkZHJlc3NFbmNNYXNrOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsg IFNwbGl0IDJNIHBhZ2UgdG8gNEsuDQo+PiArDQo+PiArICBAcGFyYW1baW5dICAgICAgUGh5c2lj YWxBZGRyZXNzICAgICAgIFN0YXJ0IHBoeXNpY2FsIGFkZHJlc3MgdGhlIDJNIHBhZ2UgY292ZXJl ZC4NCj4+ICsgIEBwYXJhbVtpbiwgb3V0XSBQYWdlRW50cnkyTSAgICAgICAgICAgUG9pbnRlciB0 byAyTSBwYWdlIGVudHJ5Lg0KPj4gKyAgQHBhcmFtW2luXSAgICAgIFN0YWNrQmFzZSAgICAgICAg ICAgICBTdGFjayBiYXNlIGFkZHJlc3MuDQo+PiArICBAcGFyYW1baW5dICAgICAgU3RhY2tTaXpl ICAgICAgICAgICAgIFN0YWNrIHNpemUuDQo+PiArDQo+PiArKiovDQo+PiArU1RBVElDDQo+PiAr Vk9JRA0KPj4gK1NwbGl0Mk1QYWdlVG80SyAoDQo+PiArICBJTiAgICAgICAgUEhZU0lDQUxfQURE UkVTUyAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzcywNCj4+ICsgIElOICBPVVQgICBVSU5U NjQgICAgICAgICAgICAgICAgICAgICAgICAqUGFnZUVudHJ5Mk0sDQo+PiArICBJTiAgICAgICAg UEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgICAgIFN0YWNrQmFzZSwNCj4+ICsgIElOICAgICAg ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTaXplDQo+PiArICApDQo+PiAr ew0KPj4gKyAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVz czRLOw0KPj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4T2ZQYWdl VGFibGVFbnRyaWVzOw0KPj4gKyAgUEFHRV9UQUJMRV80S19FTlRSWSAgICAgICAgICAgICAgICpQ YWdlVGFibGVFbnRyeSwgKlBhZ2VUYWJsZUVudHJ5MTsNCj4+ICsgIFVJTlQ2NCAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBZGRyZXNzRW5jTWFzazsNCj4+ICsNCj4+ICsgIFBhZ2VUYWJsZUVu dHJ5ID0gQWxsb2NhdGVQYWdlcygxKTsNCj4+ICsNCj4+ICsgIFBhZ2VUYWJsZUVudHJ5MSA9IFBh Z2VUYWJsZUVudHJ5Ow0KPj4gKw0KPj4gKyAgQWRkcmVzc0VuY01hc2sgPSBHZXRNZW1FbmNyeXB0 aW9uQWRkcmVzc01hc2sgKCk7DQo+PiArDQo+PiArICBBU1NFUlQgKFBhZ2VUYWJsZUVudHJ5ICE9 IE5VTEwpOw0KPj4gKyAgQVNTRVJUICgqUGFnZUVudHJ5Mk0gJiBBZGRyZXNzRW5jTWFzayk7DQo+ PiArDQo+PiArICBQaHlzaWNhbEFkZHJlc3M0SyA9IFBoeXNpY2FsQWRkcmVzczsNCj4+ICsgIGZv ciAoSW5kZXhPZlBhZ2VUYWJsZUVudHJpZXMgPSAwOyBJbmRleE9mUGFnZVRhYmxlRW50cmllcyA8 IDUxMjsgSW5kZXhPZlBhZ2VUYWJsZUVudHJpZXMrKywgUGFnZVRhYmxlRW50cnkrKywgUGh5c2lj YWxBZGRyZXNzNEsgKz0gU0laRV80S0IpIHsNCj4+ICsgICAgLy8NCj4+ICsgICAgLy8gRmlsbCBp biB0aGUgUGFnZSBUYWJsZSBlbnRyaWVzDQo+PiArICAgIC8vDQo+PiArICAgIFBhZ2VUYWJsZUVu dHJ5LT5VaW50NjQgPSAoVUlOVDY0KSBQaHlzaWNhbEFkZHJlc3M0SyB8IEFkZHJlc3NFbmNNYXNr Ow0KPj4gKyAgICBQYWdlVGFibGVFbnRyeS0+Qml0cy5SZWFkV3JpdGUgPSAxOw0KPj4gKyAgICBQ YWdlVGFibGVFbnRyeS0+Qml0cy5QcmVzZW50ID0gMTsNCj4+ICsgICAgaWYgKChQaHlzaWNhbEFk ZHJlc3M0SyA+PSBTdGFja0Jhc2UpICYmIChQaHlzaWNhbEFkZHJlc3M0SyA8IFN0YWNrQmFzZSAr IFN0YWNrU2l6ZSkpIHsNCj4+ICsgICAgICAvLw0KPj4gKyAgICAgIC8vIFNldCBOeCBiaXQgZm9y IHN0YWNrLg0KPj4gKyAgICAgIC8vDQo+PiArICAgICAgUGFnZVRhYmxlRW50cnktPkJpdHMuTngg PSAxOw0KPj4gKyAgICB9DQo+PiArICB9DQo+PiArDQo+PiArICAvLw0KPj4gKyAgLy8gRmlsbCBp biAyTSBwYWdlIGVudHJ5Lg0KPj4gKyAgLy8NCj4+ICsgICpQYWdlRW50cnkyTSA9IChVSU5UNjQp IChVSU5UTikgUGFnZVRhYmxlRW50cnkxIHwgSUEzMl9QR19QIHwgSUEzMl9QR19SVyB8IEFkZHJl c3NFbmNNYXNrOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIFNwbGl0IDFHIHBhZ2UgdG8g Mk0uDQo+PiArDQo+PiArICBAcGFyYW1baW5dICAgICAgUGh5c2ljYWxBZGRyZXNzICAgICAgIFN0 YXJ0IHBoeXNpY2FsIGFkZHJlc3MgdGhlIDFHIHBhZ2UgY292ZXJlZC4NCj4+ICsgIEBwYXJhbVtp biwgb3V0XSBQYWdlRW50cnkxRyAgICAgICAgICAgUG9pbnRlciB0byAxRyBwYWdlIGVudHJ5Lg0K Pj4gKyAgQHBhcmFtW2luXSAgICAgIFN0YWNrQmFzZSAgICAgICAgICAgICBTdGFjayBiYXNlIGFk ZHJlc3MuDQo+PiArICBAcGFyYW1baW5dICAgICAgU3RhY2tTaXplICAgICAgICAgICAgIFN0YWNr IHNpemUuDQo+PiArDQo+PiArKiovDQo+PiArU1RBVElDDQo+PiArVk9JRA0KPj4gK1NwbGl0MUdQ YWdlVG8yTSAoDQo+PiArICBJTiAgICAgICAgICBQSFlTSUNBTF9BRERSRVNTICAgICAgICAgICAg ICAgUGh5c2ljYWxBZGRyZXNzLA0KPj4gKyAgSU4gIE9VVCAgICAgVUlOVDY0ICAgICAgICAgICAg ICAgICAgICAgICAgICpQYWdlRW50cnkxRywNCj4+ICsgIElOICAgICAgICAgIFBIWVNJQ0FMX0FE RFJFU1MgICAgICAgICAgICAgICBTdGFja0Jhc2UsDQo+PiArICBJTiAgICAgICAgICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTaXplDQo+PiArICApDQo+PiArew0KPj4gKyAg UEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzczJNOw0KPj4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4T2ZQYWdlRGlyZWN0b3J5 RW50cmllczsNCj4+ICsgIFBBR0VfVEFCTEVfRU5UUlkgICAgICAgICAgICAgICAgICAqUGFnZURp cmVjdG9yeUVudHJ5Ow0KPj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFk ZHJlc3NFbmNNYXNrOw0KPj4gKw0KPj4gKyAgUGFnZURpcmVjdG9yeUVudHJ5ID0gQWxsb2NhdGVQ YWdlcygxKTsNCj4+ICsNCj4+ICsgIEFkZHJlc3NFbmNNYXNrID0gR2V0TWVtRW5jcnlwdGlvbkFk ZHJlc3NNYXNrICgpOw0KPj4gKyAgQVNTRVJUIChQYWdlRGlyZWN0b3J5RW50cnkgIT0gTlVMTCk7 DQo+PiArICBBU1NFUlQgKCpQYWdlRW50cnkxRyAmIEdldE1lbUVuY3J5cHRpb25BZGRyZXNzTWFz ayAoKSk7DQo+PiArICAvLw0KPj4gKyAgLy8gRmlsbCBpbiAxRyBwYWdlIGVudHJ5Lg0KPj4gKyAg Ly8NCj4+ICsgICpQYWdlRW50cnkxRyA9IChVSU5UNjQpIChVSU5UTikgUGFnZURpcmVjdG9yeUVu dHJ5IHwgSUEzMl9QR19QIHwgSUEzMl9QR19SVyB8IEFkZHJlc3NFbmNNYXNrOw0KPj4gKw0KPj4g KyAgUGh5c2ljYWxBZGRyZXNzMk0gPSBQaHlzaWNhbEFkZHJlc3M7DQo+PiArICBmb3IgKEluZGV4 T2ZQYWdlRGlyZWN0b3J5RW50cmllcyA9IDA7IEluZGV4T2ZQYWdlRGlyZWN0b3J5RW50cmllcyA8 IDUxMjsgSW5kZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzKyssIFBhZ2VEaXJlY3RvcnlFbnRyeSsr LCBQaHlzaWNhbEFkZHJlc3MyTSArPSBTSVpFXzJNQikgew0KPj4gKyAgICBpZiAoKFBoeXNpY2Fs QWRkcmVzczJNIDwgU3RhY2tCYXNlICsgU3RhY2tTaXplKSAmJiAoKFBoeXNpY2FsQWRkcmVzczJN ICsgU0laRV8yTUIpID4gU3RhY2tCYXNlKSkgew0KPj4gKyAgICAgIC8vDQo+PiArICAgICAgLy8g TmVlZCB0byBzcGxpdCB0aGlzIDJNIHBhZ2UgdGhhdCBjb3ZlcnMgc3RhY2sgcmFuZ2UuDQo+PiAr ICAgICAgLy8NCj4+ICsgICAgICBTcGxpdDJNUGFnZVRvNEsgKFBoeXNpY2FsQWRkcmVzczJNLCAo VUlOVDY0ICopIFBhZ2VEaXJlY3RvcnlFbnRyeSwgU3RhY2tCYXNlLCBTdGFja1NpemUpOw0KPj4g KyAgICB9IGVsc2Ugew0KPj4gKyAgICAgIC8vDQo+PiArICAgICAgLy8gRmlsbCBpbiB0aGUgUGFn ZSBEaXJlY3RvcnkgZW50cmllcw0KPj4gKyAgICAgIC8vDQo+PiArICAgICAgUGFnZURpcmVjdG9y eUVudHJ5LT5VaW50NjQgPSAoVUlOVDY0KSBQaHlzaWNhbEFkZHJlc3MyTSB8IEFkZHJlc3NFbmNN YXNrOw0KPj4gKyAgICAgIFBhZ2VEaXJlY3RvcnlFbnRyeS0+Qml0cy5SZWFkV3JpdGUgPSAxOw0K Pj4gKyAgICAgIFBhZ2VEaXJlY3RvcnlFbnRyeS0+Qml0cy5QcmVzZW50ID0gMTsNCj4+ICsgICAg ICBQYWdlRGlyZWN0b3J5RW50cnktPkJpdHMuTXVzdEJlMSA9IDE7DQo+PiArICAgIH0NCj4+ICsg IH0NCj4+ICt9DQo+PiArDQo+PiArDQo+PiArLyoqDQo+PiArICBTZXQgb3IgQ2xlYXIgdGhlIG1l bW9yeSBlbmNyeXB0aW9uIGJpdA0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgICAgIFBhZ2V0YWJs ZVBvaW50ICAgICAgICBQYWdlIHRhYmxlIGVudHJ5IHBvaW50ZXIgKFBURSkuDQo+PiArICBAcGFy YW1baW5dICAgICAgTW9kZSAgICAgICAgICAgICAgICAgIFNldCBvciBDbGVhciBlbmNyeXB0aW9u IGJpdA0KPj4gKw0KPj4gKyoqLw0KPj4gK1NUQVRJQyBWT0lEDQo+PiArU2V0T3JDbGVhckNCaXQo DQo+PiArICBJTiAgIE9VVCAgICAgVUlOVDY0KiAgICAgICAgICAgIFBhZ2VUYWJsZVBvaW50ZXIs DQo+PiArICBJTiAgICAgICAgICAgTUFQX1JBTkdFX01PREUgICAgIE1vZGUNCj4+ICsgICkNCj4+ ICt7DQo+PiArICBVSU5UNjQgICAgICBBZGRyZXNzRW5jTWFzazsNCj4+ICsNCj4+ICsgIEFkZHJl c3NFbmNNYXNrID0gR2V0TWVtRW5jcnlwdGlvbkFkZHJlc3NNYXNrICgpOw0KPj4gKw0KPj4gKyAg aWYgKE1vZGUgPT0gU2V0Q0JpdCkgew0KPj4gKyAgICAqUGFnZVRhYmxlUG9pbnRlciB8PSBBZGRy ZXNzRW5jTWFzazsNCj4+ICsgIH0gZWxzZSB7DQo+PiArICAgICpQYWdlVGFibGVQb2ludGVyICY9 IH5BZGRyZXNzRW5jTWFzazsNCj4+ICsgIH0NCj4+ICsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+ PiArICBUaGlzIGZ1bmN0aW9uIGVpdGhlciBzZXRzIG9yIGNsZWFycyBtZW1vcnkgZW5jcnlwdGlv biBiaXQgZm9yIHRoZSBtZW1vcnkgcmVnaW9uDQo+PiArICBzcGVjaWZpZWQgYnkgUGh5c2ljYWxB ZGRyZXNzIGFuZCBsZW5ndGggZnJvbSB0aGUgY3VycmVudCBwYWdlIHRhYmxlIGNvbnRleHQuDQo+ PiArDQo+PiArICBUaGUgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCB0aGUgcGh5c2ljYWxBZGRy ZXNzIG9uZSBwYWdlIGF0IGEgdGltZSwgYW5kIHNldA0KPj4gKyAgb3IgY2xlYXJzIHRoZSBtZW1v cnkgZW5jcnlwdGlvbiBtYXNrIGluIHRoZSBwYWdlIHRhYmxlLiBJZiBpdCBlbmNvdW50ZXJzDQo+ PiArICB0aGF0IGEgZ2l2ZW4gcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpcyBwYXJ0IG9mIGxhcmdl IHBhZ2UgdGhlbiBpdCBhdHRlbXB0cyB0bw0KPj4gKyAgY2hhbmdlIHRoZSBhdHRyaWJ1dGUgYXQg b25lIGdvIChiYXNlZCBvbiBzaXplKSwgb3RoZXJ3aXNlIGl0IHNwbGl0cyB0aGUNCj4+ICsgIGxh cmdlIHBhZ2VzIGludG8gc21hbGxlciAoZS5nIDJNIHBhZ2UgaW50byA0SyBwYWdlcykgYW5kIHRo ZW4gdHJ5IHRvIHNldCBvcg0KPj4gKyAgY2xlYXIgdGhlIGVuY3J5cHRpb24gYml0IG9uIHRoZSBz bWFsbGVzdCBwYWdlIHNpemUuDQo+PiArDQo+PiArICBAcGFyYW1baW5dICBQaHlzaWNhbEFkZHJl c3MgICAgICAgICBUaGUgcGh5c2ljYWwgYWRkcmVzcyB0aGF0IGlzIHRoZSBzdGFydA0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyBvZiBhIG1lbW9yeSBy ZWdpb24uDQo+PiArICBAcGFyYW1baW5dICBMZW5ndGggICAgICAgICAgICAgICAgICBUaGUgbGVu Z3RoIG9mIG1lbW9yeSByZWdpb24NCj4+ICsgIEBwYXJhbVtpbl0gIE1vZGUgICAgICAgICAgICAg ICAgICAgIFNldCBvciBDbGVhciBtb2RlDQo+PiArICBAcGFyYW1baW5dICBGbHVzaCAgICAgICAg ICAgICAgICAgICBGbHVzaCB0aGUgY2FjaGVzIGJlZm9yZSBhcHBseWluZyB0aGUNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRpb24gbWFzaw0KPj4gKw0K Pj4gKyAgQHJldHZhbCBSRVRVUk5fU1VDQ0VTUyAgICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZXMg d2VyZSBjbGVhcmVkIGZvciB0aGUgbWVtb3J5DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZWdpb24uDQo+PiArICBAcmV0dmFsIFJFVFVSTl9JTlZBTElEX1BBUkFN RVRFUiAgICBOdW1iZXIgb2YgcGFnZXMgaXMgemVyby4NCj4+ICsgIEByZXR2YWwgUkVUVVJOX1VO U1VQUE9SVEVEICAgICAgICAgIFNldHRpbmcgdGhlIG1lbW9yeSBlbmN5cnB0aW9uIGF0dHJpYnV0 ZSBpcw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHN1cHBv cnRlZA0KPj4gKyoqLw0KPj4gKw0KPj4gK1NUQVRJQw0KPj4gK1JFVFVSTl9TVEFUVVMNCj4+ICtF RklBUEkNCj4+ICtTZXRNZW1vcnlFbmNEZWMgKA0KPj4gKyAgSU4gICAgUEhZU0lDQUxfQUREUkVT UyAgICAgICAgIENyM0Jhc2VBZGRyZXNzLA0KPj4gKyAgSU4gICAgUEhZU0lDQUxfQUREUkVTUyAg ICAgICAgIFBoeXNpY2FsQWRkcmVzcywNCj4+ICsgIElOICAgIFVJTlROICAgICAgICAgICAgICAg ICAgICBMZW5ndGgsDQo+PiArICBJTiAgICBNQVBfUkFOR0VfTU9ERSAgICAgICAgICAgTW9kZSwN Cj4+ICsgIElOICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICBDYWNoZUZsdXNoDQo+PiArICAp DQo+PiArew0KPj4gKyAgUEFHRV9NQVBfQU5EX0RJUkVDVE9SWV9QT0lOVEVSICpQYWdlTWFwTGV2 ZWw0RW50cnk7DQo+PiArICBQQUdFX01BUF9BTkRfRElSRUNUT1JZX1BPSU5URVIgKlBhZ2VVcHBl ckRpcmVjdG9yeVBvaW50ZXJFbnRyeTsNCj4+ICsgIFBBR0VfTUFQX0FORF9ESVJFQ1RPUllfUE9J TlRFUiAqUGFnZURpcmVjdG9yeVBvaW50ZXJFbnRyeTsNCj4+ICsgIFBBR0VfVEFCTEVfMUdfRU5U UlkgICAgICAgICAgICAqUGFnZURpcmVjdG9yeTFHRW50cnk7DQo+PiArICBQQUdFX1RBQkxFX0VO VFJZICAgICAgICAgICAgICAgKlBhZ2VEaXJlY3RvcnkyTUVudHJ5Ow0KPj4gKyAgUEFHRV9UQUJM RV80S19FTlRSWSAgICAgICAgICAgICpQYWdlVGFibGVFbnRyeTsNCj4+ICsgIFVJTlQ2NCAgICAg ICAgICAgICAgICAgICAgICAgICBQZ1RhYmxlTWFzazsNCj4+ICsgIFVJTlQ2NCAgICAgICAgICAg ICAgICAgICAgICAgICBBZGRyZXNzRW5jTWFzazsNCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBD aGVjayBpZiB3ZSBoYXZlIGEgdmFsaWQgbWVtb3J5IGVuY3J5cHRpb24gbWFzaw0KPj4gKyAgLy8N Cj4+ICsgIEFkZHJlc3NFbmNNYXNrID0gR2V0TWVtRW5jcnlwdGlvbkFkZHJlc3NNYXNrICgpOw0K Pj4gKyAgaWYgKCFBZGRyZXNzRW5jTWFzaykgew0KPj4gKyAgICByZXR1cm4gUkVUVVJOX0FDQ0VT U19ERU5JRUQ7DQo+PiArICB9DQo+PiArDQo+PiArICBQZ1RhYmxlTWFzayA9IEFkZHJlc3NFbmNN YXNrIHwgRUZJX1BBR0VfTUFTSzsNCj4+ICsNCj4+ICsgIGlmIChMZW5ndGggPT0gMCkgew0KPj4g KyAgICByZXR1cm4gUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4gKyAgfQ0KPj4gKw0KPj4g KyAgLy8NCj4+ICsgIC8vIFdlIGFyZSBnb2luZyB0byBjaGFuZ2UgdGhlIG1lbW9yeSBlbmNyeXB0 aW9uIGF0dHJpYnV0ZSBmcm9tIEM9MCAtPiBDPTEgb3INCj4+ICsgIC8vIHZpY2UgdmVyc2EgRmx1 c2ggdGhlIGNhY2hlcyB0byBlbnN1cmUgdGhhdCBkYXRhIGlzIHdyaXR0ZW4gaW50byBtZW1vcnkg d2l0aA0KPj4gKyAgLy8gY29ycmVjdCBDLWJpdA0KPj4gKyAgLy8NCj4+ICsgIGlmIChDYWNoZUZs dXNoKSB7DQo+PiArICAgIFdyaXRlQmFja0ludmFsaWRhdGVEYXRhQ2FjaGVSYW5nZSgoVk9JRCop IChVSU5UTilQaHlzaWNhbEFkZHJlc3MsIExlbmd0aCk7DQo+PiArICB9DQo+PiArDQo+PiArICB3 aGlsZSAoTGVuZ3RoKQ0KPj4gKyAgew0KPj4gKyAgICAvLw0KPj4gKyAgICAvLyBJZiBDcjNCYXNl QWRkcmVzcyBpcyBub3Qgc3BlY2lmaWVkIHRoZW4gcmVhZCB0aGUgY3VycmVudCBDUjMNCj4+ICsg ICAgLy8NCj4+ICsgICAgaWYgKENyM0Jhc2VBZGRyZXNzID09IDApIHsNCj4+ICsgICAgICBDcjNC YXNlQWRkcmVzcyA9IEFzbVJlYWRDcjMoKTsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBQYWdl TWFwTGV2ZWw0RW50cnkgPSAoVk9JRCopIChDcjNCYXNlQWRkcmVzcyAmIH5QZ1RhYmxlTWFzayk7 DQo+PiArICAgIFBhZ2VNYXBMZXZlbDRFbnRyeSArPSBQTUw0X09GRlNFVChQaHlzaWNhbEFkZHJl c3MpOw0KPj4gKyAgICBpZiAoIVBhZ2VNYXBMZXZlbDRFbnRyeS0+Qml0cy5QcmVzZW50KSB7DQo+ PiArICAgICAgREVCVUcgKChERUJVR19XQVJOLA0KPj4gKyAgICAgICAgIiVhOiVhIEVSUk9SIGJh ZCBQTUw0IGZvciAlbHhcbiIsIGdFZmlDYWxsZXJCYXNlTmFtZSwgX19GVU5DVElPTl9fLA0KPj4g KyAgICAgICAgUGh5c2ljYWxBZGRyZXNzKSk7DQo+PiArICAgICAgcmV0dXJuIFJFVFVSTl9OT19N QVBQSU5HOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIFBhZ2VEaXJlY3RvcnkxR0VudHJ5ID0g KFZPSUQqKSAoKFBhZ2VNYXBMZXZlbDRFbnRyeS0+Qml0cy5QYWdlVGFibGVCYXNlQWRkcmVzczw8 MTIpICYgflBnVGFibGVNYXNrKTsNCj4+ICsgICAgUGFnZURpcmVjdG9yeTFHRW50cnkgKz0gUERQ X09GRlNFVChQaHlzaWNhbEFkZHJlc3MpOw0KPj4gKyAgICBpZiAoIVBhZ2VEaXJlY3RvcnkxR0Vu dHJ5LT5CaXRzLlByZXNlbnQpIHsNCj4+ICsgICAgICBERUJVRyAoKERFQlVHX1dBUk4sDQo+PiAr ICAgICAgICAiJWE6JWEgRVJST1IgYmFkIFBEUEUgZm9yICVseFxuIiwgZ0VmaUNhbGxlckJhc2VO YW1lLA0KPj4gKyAgICAgICAgIF9fRlVOQ1RJT05fXywgUGh5c2ljYWxBZGRyZXNzKSk7DQo+PiAr ICAgICAgcmV0dXJuIFJFVFVSTl9OT19NQVBQSU5HOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAg IC8vDQo+PiArICAgIC8vIElmIHRoZSBNdXN0QmUxIGJpdCBpcyBub3QgMSwgaXQncyBub3QgYWN0 dWFsbHkgYSAxR0IgZW50cnkNCj4+ICsgICAgLy8NCj4+ICsgICAgaWYgKFBhZ2VEaXJlY3Rvcnkx R0VudHJ5LT5CaXRzLk11c3RCZTEpIHsNCj4+ICsgICAgICAvLw0KPj4gKyAgICAgIC8vIFZhbGlk IDFHQiBwYWdlDQo+PiArICAgICAgLy8gSWYgd2UgaGF2ZSBhdCBsZWFzdCAxR0IgdG8gZ28sIHdl IGNhbiBqdXN0IHVwZGF0ZSB0aGlzIGVudHJ5DQo+PiArICAgICAgLy8NCj4+ICsgICAgICBpZiAo IShQaHlzaWNhbEFkZHJlc3MgJiAoQklUMzAgLSAxKSkgJiYgTGVuZ3RoID49IEJJVDMwKSB7DQo+ PiArICAgICAgICBTZXRPckNsZWFyQ0JpdCgmUGFnZURpcmVjdG9yeTFHRW50cnktPlVpbnQ2NCwg TW9kZSk7DQo+PiArICAgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsDQo+PiArICAgICAgICAg ICIlYTolYSBVcGRhdGVkIDFHQiBlbnRyeSBmb3IgJWx4XG4iLCBnRWZpQ2FsbGVyQmFzZU5hbWUs DQo+PiArICAgICAgICAgIF9fRlVOQ1RJT05fXywgUGh5c2ljYWxBZGRyZXNzKSk7DQo+PiArICAg ICAgICBQaHlzaWNhbEFkZHJlc3MgKz0gQklUMzA7DQo+PiArICAgICAgICBMZW5ndGggLT0gQklU MzA7DQo+PiArICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgIC8vDQo+PiArICAgICAgICAvLyBX ZSBtdXN0IHNwbGl0IHRoZSBwYWdlDQo+PiArICAgICAgICAvLw0KPj4gKyAgICAgICAgREVCVUcg KChERUJVR19WRVJCT1NFLA0KPj4gKyAgICAgICAgICAiJWE6JWEgU3BsaXRpbmcgMUdCIHBhZ2Vc biIsIGdFZmlDYWxsZXJCYXNlTmFtZSwgX19GVU5DVElPTl9fKSk7DQo+PiArICAgICAgICBTcGxp dDFHUGFnZVRvMk0oKChVSU5UNjQpUGFnZURpcmVjdG9yeTFHRW50cnktPkJpdHMuUGFnZVRhYmxl QmFzZUFkZHJlc3MpPDwzMCwgKFVJTlQ2NCopIFBhZ2VEaXJlY3RvcnkxR0VudHJ5LCAwLCAwKTsN Cj4+ICsgICAgICAgIGNvbnRpbnVlOw0KPj4gKyAgICAgIH0NCj4+ICsgICAgfSBlbHNlIHsNCj4+ ICsgICAgICAvLw0KPj4gKyAgICAgIC8vIEFjdHVhbGx5IGEgUERQDQo+PiArICAgICAgLy8NCj4+ ICsgICAgICBQYWdlVXBwZXJEaXJlY3RvcnlQb2ludGVyRW50cnkgPSAoUEFHRV9NQVBfQU5EX0RJ UkVDVE9SWV9QT0lOVEVSKikgUGFnZURpcmVjdG9yeTFHRW50cnk7DQo+PiArICAgICAgUGFnZURp cmVjdG9yeTJNRW50cnkgPSAoVk9JRCopICgoUGFnZVVwcGVyRGlyZWN0b3J5UG9pbnRlckVudHJ5 LT5CaXRzLlBhZ2VUYWJsZUJhc2VBZGRyZXNzPDwxMikgJiB+UGdUYWJsZU1hc2spOw0KPj4gKyAg ICAgIFBhZ2VEaXJlY3RvcnkyTUVudHJ5ICs9IFBERV9PRkZTRVQoUGh5c2ljYWxBZGRyZXNzKTsN Cj4+ICsgICAgICBpZiAoIVBhZ2VEaXJlY3RvcnkyTUVudHJ5LT5CaXRzLlByZXNlbnQpIHsNCj4+ ICsgICAgICAgIERFQlVHICgoREVCVUdfV0FSTiwNCj4+ICsgICAgICAgICAgIiVhOiVhIEVSUk9S IGJhZCBQREUgZm9yICVseFxuIiwgZ0VmaUNhbGxlckJhc2VOYW1lLCBfX0ZVTkNUSU9OX18sDQo+ PiArICAgICAgICAgIFBoeXNpY2FsQWRkcmVzcykpOw0KPj4gKyAgICAgICAgcmV0dXJuIFJFVFVS Tl9OT19NQVBQSU5HOw0KPj4gKyAgICAgIH0NCj4+ICsgICAgICAvLw0KPj4gKyAgICAgIC8vIElm IHRoZSBNdXN0QmUxIGJpdCBpcyBub3QgYSAxLCBpdCdzIG5vdCBhIDJNQiBlbnRyeQ0KPj4gKyAg ICAgIC8vDQo+PiArICAgICAgaWYgKFBhZ2VEaXJlY3RvcnkyTUVudHJ5LT5CaXRzLk11c3RCZTEp IHsNCj4+ICsgICAgICAgIC8vDQo+PiArICAgICAgICAvLyBWYWxpZCAyTUIgcGFnZQ0KPj4gKyAg ICAgICAgLy8gSWYgd2UgaGF2ZSBhdCBsZWFzdCAyTUIgbGVmdCB0byBnbywgd2UgY2FuIGp1c3Qg dXBkYXRlIHRoaXMgZW50cnkNCj4+ICsgICAgICAgIC8vDQo+PiArICAgICAgICBpZiAoIShQaHlz aWNhbEFkZHJlc3MgJiAoQklUMjEtMSkpICYmIExlbmd0aCA+PSBCSVQyMSkgew0KPj4gKyAgICAg ICAgICBTZXRPckNsZWFyQ0JpdCAoJlBhZ2VEaXJlY3RvcnkyTUVudHJ5LT5VaW50NjQsIE1vZGUp Ow0KPj4gKyAgICAgICAgICBQaHlzaWNhbEFkZHJlc3MgKz0gQklUMjE7DQo+PiArICAgICAgICAg IExlbmd0aCAtPSBCSVQyMTsNCj4+ICsgICAgICAgIH0gZWxzZSB7DQo+PiArICAgICAgICAgIC8v DQo+PiArICAgICAgICAgIC8vIFdlIG11c3Qgc3BsaXQgdXAgdGhpcyBwYWdlIGludG8gNEsgcGFn ZXMNCj4+ICsgICAgICAgICAgLy8NCj4+ICsgICAgICAgICAgREVCVUcgKChERUJVR19WRVJCT1NF LA0KPj4gKyAgICAgICAgICAgICIlYTolYSBTcGxpdGluZyAyTUIgcGFnZSBhdCAlbHhcbiIsIGdF ZmlDYWxsZXJCYXNlTmFtZSxfX0ZVTkNUSU9OX18sDQo+PiArICAgICAgICAgICAgUGh5c2ljYWxB ZGRyZXNzKSk7DQo+PiArICAgICAgICAgIFNwbGl0Mk1QYWdlVG80SyAoKChVSU5UNjQpUGFnZURp cmVjdG9yeTJNRW50cnktPkJpdHMuUGFnZVRhYmxlQmFzZUFkZHJlc3MpIDw8IDIxLCAoVUlOVDY0 KikgUGFnZURpcmVjdG9yeTJNRW50cnksIDAsIDApOw0KPj4gKyAgICAgICAgICBjb250aW51ZTsN Cj4+ICsgICAgICAgIH0NCj4+ICsgICAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgUGFnZURpcmVj dG9yeVBvaW50ZXJFbnRyeSA9IChQQUdFX01BUF9BTkRfRElSRUNUT1JZX1BPSU5URVIqKSBQYWdl RGlyZWN0b3J5Mk1FbnRyeTsNCj4+ICsgICAgICAgIFBhZ2VUYWJsZUVudHJ5ID0gKFZPSUQqKSAo UGFnZURpcmVjdG9yeVBvaW50ZXJFbnRyeS0+Qml0cy5QYWdlVGFibGVCYXNlQWRkcmVzczw8MTIg JiB+UGdUYWJsZU1hc2spOw0KPj4gKyAgICAgICAgUGFnZVRhYmxlRW50cnkgKz0gUFRFX09GRlNF VChQaHlzaWNhbEFkZHJlc3MpOw0KPj4gKyAgICAgICAgaWYgKCFQYWdlVGFibGVFbnRyeS0+Qml0 cy5QcmVzZW50KSB7DQo+PiArICAgICAgICAgIERFQlVHICgoREVCVUdfV0FSTiwNCj4+ICsgICAg ICAgICAgICAiJWE6JWEgRVJST1IgYmFkIFBURSBmb3IgJWx4XG4iLCBnRWZpQ2FsbGVyQmFzZU5h bWUsDQo+PiArICAgICAgICAgICAgX19GVU5DVElPTl9fLCBQaHlzaWNhbEFkZHJlc3MpKTsNCj4+ ICsgICAgICAgICAgcmV0dXJuIFJFVFVSTl9OT19NQVBQSU5HOw0KPj4gKyAgICAgICAgfQ0KPj4g KyAgICAgICAgU2V0T3JDbGVhckNCaXQgKCZQYWdlVGFibGVFbnRyeS0+VWludDY0LCBNb2RlKTsN Cj4+ICsgICAgICAgIFBoeXNpY2FsQWRkcmVzcyArPSBFRklfUEFHRV9TSVpFOw0KPj4gKyAgICAg ICAgTGVuZ3RoIC09IEVGSV9QQUdFX1NJWkU7DQo+PiArICAgICAgfQ0KPj4gKyAgICB9DQo+PiAr ICB9DQo+PiArDQo+PiArICAvLw0KPj4gKyAgLy8gRmx1c2ggVExCDQo+PiArICAvLw0KPj4gKyAg Q3B1Rmx1c2hUbGIoKTsNCj4+ICsNCj4+ICsgIHJldHVybiBSRVRVUk5fU1VDQ0VTUzsNCj4+ICt9 DQo+PiArDQo+PiArLyoqDQo+PiArICBUaGlzIGZ1bmN0aW9uIGNsZWFycyBtZW1vcnkgZW5jcnlw dGlvbiBiaXQgZm9yIHRoZSBtZW1vcnkgcmVnaW9uIHNwZWNpZmllZCBieQ0KPj4gKyAgUGh5c2lj YWxBZGRyZXNzIGFuZCBsZW5ndGggZnJvbSB0aGUgY3VycmVudCBwYWdlIHRhYmxlIGNvbnRleHQu DQo+PiArDQo+PiArICBAcGFyYW1baW5dICBQaHlzaWNhbEFkZHJlc3MgICAgICAgICBUaGUgcGh5 c2ljYWwgYWRkcmVzcyB0aGF0IGlzIHRoZSBzdGFydA0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYWRkcmVzcyBvZiBhIG1lbW9yeSByZWdpb24uDQo+PiArICBAcGFy YW1baW5dICBMZW5ndGggICAgICAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIG1lbW9yeSByZWdp b24NCj4+ICsgIEBwYXJhbVtpbl0gIEZsdXNoICAgICAgICAgICAgICAgICAgIEZsdXNoIHRoZSBj YWNoZXMgYmVmb3JlIGFwcGx5aW5nIHRoZQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW5jcnlwdGlvbiBtYXNrDQo+PiArDQo+PiArICBAcmV0dmFsIFJFVFVSTl9T VUNDRVNTICAgICAgICAgICAgICBUaGUgYXR0cmlidXRlcyB3ZXJlIGNsZWFyZWQgZm9yIHRoZSBt ZW1vcnkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi4N Cj4+ICsgIEByZXR2YWwgUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSICAgIE51bWJlciBvZiBwYWdl cyBpcyB6ZXJvLg0KPj4gKyAgQHJldHZhbCBSRVRVUk5fVU5TVVBQT1JURUQgICAgICAgICAgU2V0 dGluZyB0aGUgbWVtb3J5IGVuY3lycHRpb24gYXR0cmlidXRlIGlzDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc3VwcG9ydGVkDQo+PiArKiovDQo+PiArUkVU VVJOX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0ludGVybmFsTWVtRW5jcnlwdFNldlNldE1lbW9y eURlY3J5cHRlZCAoDQo+PiArICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQ3IzQmFzZUFk ZHJlc3MsDQo+PiArICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgUGh5c2ljYWxBZGRyZXNz LA0KPj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgIExlbmd0aCwNCj4+ICsgIElOICBC T09MRUFOICAgICAgICAgICAgICAgICBGbHVzaA0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsNCj4+ICsg IERFQlVHICgoREVCVUdfVkVSQk9TRSwNCj4+ICsgICAgIiVhOiVhIENsZWFyIEMtYml0IENyMyAl THggQmFzZSAlTHggTGVuZ3RoICVMeCBmbHVzaCAlZFxuIiwNCj4+ICsgICAgZ0VmaUNhbGxlckJh c2VOYW1lLCBfX0ZVTkNUSU9OX18sIENyM0Jhc2VBZGRyZXNzLCBQaHlzaWNhbEFkZHJlc3MsIExl bmd0aCwNCj4+ICsgICAgRmx1c2gpKTsNCj4+ICsgIHJldHVybiBTZXRNZW1vcnlFbmNEZWMgKENy M0Jhc2VBZGRyZXNzLCBQaHlzaWNhbEFkZHJlc3MsIExlbmd0aCwgQ2xlYXJDQml0LCBGbHVzaCk7 DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgVGhpcyBmdW5jdGlvbiBzZXRzIG1lbW9yeSBl bmNyeXB0aW9uIGJpdCBmb3IgdGhlIG1lbW9yeSByZWdpb24gc3BlY2lmaWVkIGJ5DQo+PiArICBQ aHlzaWNhbEFkZHJlc3MgYW5kIGxlbmd0aCBmcm9tIHRoZSBjdXJyZW50IHBhZ2UgdGFibGUgY29u dGV4dC4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gIFBoeXNpY2FsQWRkcmVzcyAgICAgICAgIFRo ZSBwaHlzaWNhbCBhZGRyZXNzIHRoYXQgaXMgdGhlIHN0YXJ0IGFkZHJlc3MNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGEgbWVtb3J5IHJlZ2lvbi4NCj4+ICsg IEBwYXJhbVtpbl0gIExlbmd0aCAgICAgICAgICAgICAgICAgIFRoZSBsZW5ndGggb2YgbWVtb3J5 IHJlZ2lvbg0KPj4gKyAgQHBhcmFtW2luXSAgRmx1c2ggICAgICAgICAgICAgICAgICAgRmx1c2gg dGhlIGNhY2hlcyBiZWZvcmUgYXBwbHlpbmcgdGhlDQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uIG1hc2sNCj4+ICsNCj4+ICsgIEByZXR2YWwgUkVU VVJOX1NVQ0NFU1MgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGVzIHdlcmUgY2xlYXJlZCBmb3Ig dGhlIG1lbW9yeQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVn aW9uLg0KPj4gKyAgQHJldHZhbCBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVIgICAgTnVtYmVyIG9m IHBhZ2VzIGlzIHplcm8uDQo+PiArICBAcmV0dmFsIFJFVFVSTl9VTlNVUFBPUlRFRCAgICAgICAg ICBTZXR0aW5nIHRoZSBtZW1vcnkgZW5jeXJwdGlvbiBhdHRyaWJ1dGUgaXMNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzdXBwb3J0ZWQNCj4+ICsqKi8NCj4+ ICtSRVRVUk5fU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArSW50ZXJuYWxNZW1FbmNyeXB0U2V2U2V0 TWVtb3J5RW5jcnlwdGVkICgNCj4+ICsgIElOICBQSFlTSUNBTF9BRERSRVNTICAgICAgICBDcjNC YXNlQWRkcmVzcywNCj4+ICsgIElOICBQSFlTSUNBTF9BRERSRVNTICAgICAgICBQaHlzaWNhbEFk ZHJlc3MsDQo+PiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPj4gKyAg SU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgIEZsdXNoDQo+PiArICApDQo+PiArew0KPj4gKyAg REVCVUcgKChERUJVR19WRVJCT1NFLA0KPj4gKyAgICAiJWE6JWEgU2V0IEMtYml0IENyMyAlTHgg QmFzZSAlTHggTGVuZ3RoICVMeCBmbHVzaCAlZFxuIiwNCj4+ICsgICAgZ0VmaUNhbGxlckJhc2VO YW1lLCBfX0ZVTkNUSU9OX18sIENyM0Jhc2VBZGRyZXNzLCBQaHlzaWNhbEFkZHJlc3MsIExlbmd0 aCwNCj4+ICsgICAgRmx1c2gpKTsNCj4+ICsgIHJldHVybiBTZXRNZW1vcnlFbmNEZWMgKENyM0Jh c2VBZGRyZXNzLCBQaHlzaWNhbEFkZHJlc3MsIExlbmd0aCwgU2V0Q0JpdCwgRmx1c2gpOw0KPj4g K30NCj4+IC0tDQo+PiAyLjcuNA0KPj4NCg==