From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.88; helo=mga01.intel.com; envelope-from=liming.gao@intel.com; receiver=edk2-devel@lists.01.org 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 523ED211ACEB7 for ; Tue, 8 Jan 2019 17:38:53 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Jan 2019 17:38:52 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,455,1539673200"; d="scan'208";a="134205899" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga004.fm.intel.com with ESMTP; 08 Jan 2019 17:38:52 -0800 Received: from fmsmsx154.amr.corp.intel.com (10.18.116.70) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 8 Jan 2019 17:38:51 -0800 Received: from shsmsx107.ccr.corp.intel.com (10.239.4.96) by FMSMSX154.amr.corp.intel.com (10.18.116.70) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 8 Jan 2019 17:38:48 -0800 Received: from shsmsx152.ccr.corp.intel.com ([169.254.6.44]) by SHSMSX107.ccr.corp.intel.com ([169.254.9.239]) with mapi id 14.03.0415.000; Wed, 9 Jan 2019 09:38:46 +0800 From: "Gao, Liming" To: "Chen, Chen A" , "edk2-devel@lists.01.org" CC: "Zhang, Chao B" Thread-Topic: [edk2] [PATCH] SecurityPkg: Remove code under UserIdentification folder. Thread-Index: AQHUp7jo5KbEieEaNkSQSrXNde2i06WmKIyA Date: Wed, 9 Jan 2019 01:38:44 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E3ADF77@SHSMSX152.ccr.corp.intel.com> References: <20190109010913.29524-1-chen.a.chen@intel.com> In-Reply-To: <20190109010913.29524-1-chen.a.chen@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH] SecurityPkg: Remove code under UserIdentification folder. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Jan 2019 01:38:53 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Q291bGQgeW91IGNyZWF0ZSBCWiBmb3IgdGhpcyBjaGFuZ2U/IA0KDQo+LS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj5Gcm9tOiBlZGsyLWRldmVsIFttYWlsdG86ZWRrMi1kZXZlbC1ib3VuY2Vz QGxpc3RzLjAxLm9yZ10gT24gQmVoYWxmIE9mDQo+Y2hlbmNoZTQNCj5TZW50OiBXZWRuZXNkYXks IEphbnVhcnkgMDksIDIwMTkgOTowOSBBTQ0KPlRvOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0K PkNjOiBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPg0KPlN1YmplY3Q6IFtl ZGsyXSBbUEFUQ0hdIFNlY3VyaXR5UGtnOiBSZW1vdmUgY29kZSB1bmRlciBVc2VySWRlbnRpZmlj YXRpb24NCj5mb2xkZXIuDQo+DQo+MS4gVXNlcklkZW50aWZ5TWFuYWdlckR4ZSBpcyB1c2VkIHRv IHByb3ZpZGUgVXNlck1hbmFnZXJQcm90b2NvbC4NCj4yLiBVc2VyUHJvZmlsZU1hbmFnZXJEeGUg cHJvdmlkZSBVSSBzZXR0aW5nDQo+My4gUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlICYgVXNiQ3Jl ZGVudGlhbFByb3ZpZGVyRHhlIGFyZQ0KPmltcGxlbWVudGF0aW9uDQo+ICAgZXhhbXBsZXMuDQo+ DQo+UmVtb3ZlIGFib3ZlIGZlYXR1cmVzIGJlY2F1c2Ugb2Ygbm8gcGxhdGZvcm0gdXNlIGl0Lg0K Pg0KPkNjOiBaaGFuZyBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb20+DQo+Q29udHJpYnV0 ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPlNpZ25lZC1v ZmYtYnk6IENoZW4gQSBDaGVuIDxjaGVuLmEuY2hlbkBpbnRlbC5jb20+DQo+LS0tDQo+IC4uLi9J bmNsdWRlL0d1aWQvVXNiQ3JlZGVudGlhbFByb3ZpZGVySGlpLmggICAgICAgIHwgICAyOSAtDQo+ IFNlY3VyaXR5UGtnL0luY2x1ZGUvR3VpZC9Vc2VySWRlbnRpZnlNYW5hZ2VySGlpLmggIHwgICAy NSAtDQo+IFNlY3VyaXR5UGtnL0luY2x1ZGUvR3VpZC9Vc2VyUHJvZmlsZU1hbmFnZXJIaWkuaCAg IHwgICAyNSAtDQo+IFNlY3VyaXR5UGtnL1NlY3VyaXR5UGtnLmRlYyAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAxMiAtDQo+IFNlY3VyaXR5UGtnL1NlY3VyaXR5UGtnLmRzYyAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgNCAtDQo+IC4uLi9Qd2RDcmVkZW50aWFsUHJvdmlkZXIuYyAgICAg ICAgICAgICAgICAgICAgICAgIHwgMTQ2NCAtLS0tLS0tLQ0KPiAuLi4vUHdkQ3JlZGVudGlhbFBy b3ZpZGVyLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAzNzQgLS0NCj4gLi4uL1B3ZENyZWRl bnRpYWxQcm92aWRlci51bmkgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxIC0NCj4gLi4uL1B3 ZENyZWRlbnRpYWxQcm92aWRlckRhdGEuaCAgICAgICAgICAgICAgICAgICAgfCAgIDMwIC0NCj4g Li4uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS5pbmYgICAgICAgICAgICAgICAgICAgfCAgIDY1 IC0NCj4gLi4uL1B3ZENyZWRlbnRpYWxQcm92aWRlckV4dHJhLnVuaSAgICAgICAgICAgICAgICAg fCAgIDE5IC0NCj4gLi4uL1B3ZENyZWRlbnRpYWxQcm92aWRlclN0cmluZ3MudW5pICAgICAgICAg ICAgICAgfCAgIDM4IC0NCj4gLi4uL1B3ZENyZWRlbnRpYWxQcm92aWRlclZmci5WZnIgICAgICAg ICAgICAgICAgICAgfCAgIDM0IC0NCj4gLi4uL1VzYkNyZWRlbnRpYWxQcm92aWRlci5jICAgICAg ICAgICAgICAgICAgICAgICAgfCAxNDEwIC0tLS0tLS0tDQo+IC4uLi9Vc2JDcmVkZW50aWFsUHJv dmlkZXIuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDM2MSAtLQ0KPiAuLi4vVXNiQ3JlZGVu dGlhbFByb3ZpZGVyLnVuaSAgICAgICAgICAgICAgICAgICAgICB8ICAgMjMgLQ0KPiAuLi4vVXNi Q3JlZGVudGlhbFByb3ZpZGVyRHhlLmluZiAgICAgICAgICAgICAgICAgICB8ICAgNzAgLQ0KPiAu Li4vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRXh0cmEudW5pICAgICAgICAgICAgICAgICB8ICAgMTkg LQ0KPiAuLi4vVXNiQ3JlZGVudGlhbFByb3ZpZGVyU3RyaW5ncy51bmkgICAgICAgICAgICAgICB8 ICAgMjkgLQ0KPiAuLi4vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Mb2FkRGVmZXJyZWRJbWFnZS5j ICAgICB8ICAxNDggLQ0KPiAuLi4vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlN YW5hZ2VyLmMgICB8IDM3NjYgLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gLi4uL1VzZXJJZGVudGlm eU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuYWdlci5oICAgfCAgNDEzIC0tLQ0KPiAuLi4vVXNl cklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW5hZ2VyLnVuaSB8ICAgMjEgLQ0KPiAu Li4vVXNlcklkZW50aWZ5TWFuYWdlckRhdGEuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMzUg LQ0KPiAuLi4vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS5pbmYgICAgICAgICAgICAgICAgICAgICB8 ICAgNzkgLQ0KPiAuLi4vVXNlcklkZW50aWZ5TWFuYWdlckV4dHJhLnVuaSAgICAgICAgICAgICAg ICAgICB8ICAgMTkgLQ0KPiAuLi4vVXNlcklkZW50aWZ5TWFuYWdlclN0cmluZ3MudW5pICAgICAg ICAgICAgICAgICB8ICAgMjcgLQ0KPiAuLi4vVXNlcklkZW50aWZ5TWFuYWdlclZmci5WZnIgICAg ICAgICAgICAgICAgICAgICB8ICAgNDMgLQ0KPiAuLi4vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL01v ZGlmeUFjY2Vzc1BvbGljeS5jICAgICB8ICA2ODggLS0tLQ0KPiAuLi4vVXNlclByb2ZpbGVNYW5h Z2VyRHhlL01vZGlmeUlkZW50aXR5UG9saWN5LmMgICB8ICA1MTYgLS0tDQo+IC4uLi9Vc2VyUHJv ZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVBZGQuYyAgICAgICAgIHwgIDM3MiAtLQ0KPiAuLi4v VXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlRGVsZXRlLmMgICAgICB8ICAzNDMgLS0N Cj4gLi4uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnZXIuYyAgICAgfCAg ODg3IC0tLS0tDQo+IC4uLi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZ2Vy LmggICAgIHwgIDQ0NCAtLS0NCj4gLi4uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmls ZU1hbmFnZXIudW5pICAgfCAgIDIyIC0NCj4gLi4uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2Vy UHJvZmlsZU1hbmFnZXJEYXRhLmggfCAgMTU4IC0NCj4gLi4uL1VzZXJQcm9maWxlTWFuYWdlckR4 ZS5pbmYgICAgICAgICAgICAgICAgICAgICAgfCAgIDcyIC0NCj4gLi4uL1VzZXJQcm9maWxlTWFu YWdlckV4dHJhLnVuaSAgICAgICAgICAgICAgICAgICAgfCAgIDE5IC0NCj4gLi4uL1VzZXJQcm9m aWxlTWFuYWdlclN0cmluZ3MudW5pICAgICAgICAgICAgICAgICAgfCAgMTU4IC0NCj4gLi4uL1Vz ZXJQcm9maWxlTWFuYWdlclZmci5WZnIgICAgICAgICAgICAgICAgICAgICAgfCAgMjQ0IC0tDQo+ IC4uLi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNb2RpZnkuYyAgICAgIHwgMTQ3 NSAtLS0tLS0tLQ0KPiA0MSBmaWxlcyBjaGFuZ2VkLCAxNDAwMSBkZWxldGlvbnMoLSkNCj4gZGVs ZXRlIG1vZGUgMTAwNjQ0IFNlY3VyaXR5UGtnL0luY2x1ZGUvR3VpZC9Vc2JDcmVkZW50aWFsUHJv dmlkZXJIaWkuaA0KPiBkZWxldGUgbW9kZSAxMDA2NDQgU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlk L1VzZXJJZGVudGlmeU1hbmFnZXJIaWkuaA0KPiBkZWxldGUgbW9kZSAxMDA2NDQgU2VjdXJpdHlQ a2cvSW5jbHVkZS9HdWlkL1VzZXJQcm9maWxlTWFuYWdlckhpaS5oDQo+IGRlbGV0ZSBtb2RlIDEw MDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlk ZXJEeGUvUHdkQ3JlZGVudGlhbFBybw0KPnZpZGVyLmMNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+ U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Q d2RDcmVkZW50aWFsUHJvDQo+dmlkZXIuaA0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5TZWN1cml0 eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRl bnRpYWxQcm8NCj52aWRlci51bmkNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cv VXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFs UHJvDQo+dmlkZXJEYXRhLmgNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNl cklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUHJv DQo+dmlkZXJEeGUuaW5mDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbFBybw0K PnZpZGVyRXh0cmEudW5pDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbFBybw0K PnZpZGVyU3RyaW5ncy51bmkNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNl cklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUHJv DQo+dmlkZXJWZnIuVmZyDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFBybw0K PnZpZGVyLmMNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZp Y2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHJvDQo+dmlkZXIu aA0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v VXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWxQcm8NCj52aWRlci51bmkNCj4g ZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNy ZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHJvDQo+dmlkZXJEeGUuaW5mDQo+IGRl bGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JDcmVk ZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFBybw0KPnZpZGVyRXh0cmEudW5pDQo+IGRl bGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JDcmVk ZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFBybw0KPnZpZGVyU3RyaW5ncy51bmkNCj4g ZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJ ZGVudGlmeU1hbmFnZXJEeGUvTG9hZERlZmVycmVkSW1hZw0KPmUuYw0KPiBkZWxldGUgbW9kZSAx MDA2NDQNCj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdl ckR4ZS9Vc2VySWRlbnRpZnlNYW5hZw0KPmVyLmMNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2Vj dXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklk ZW50aWZ5TWFuYWcNCj5lci5oDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1Vz ZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbmFn DQo+ZXIudW5pDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlm aWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbmFnDQo+ZXJEYXRh LmgNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9u L1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuYWcNCj5lckR4ZS5pbmYNCj4g ZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJ ZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuYWcNCj5lckV4dHJhLnVuaQ0KPiBkZWxl dGUgbW9kZSAxMDA2NDQNCj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50 aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW5hZw0KPmVyU3RyaW5ncy51bmkNCj4gZGVsZXRl IG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlm eU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuYWcNCj5lclZmci5WZnINCj4gZGVsZXRlIG1vZGUg MTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdl ckR4ZS9Nb2RpZnlBY2Nlc3NQb2xpY3kuDQo+Yw0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5TZWN1 cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL01vZGlmeUlk ZW50aXR5UG9saWN5DQo+LmMNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNl cklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZUFkZC5jDQo+ IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2Vy UHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVEZWxldGUuYw0KPiBkZWxldGUgbW9kZSAxMDA2 NDQNCj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhl L1VzZXJQcm9maWxlTWFuYWdlci4NCj5jDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5 UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVN YW5hZ2VyLg0KPmgNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50 aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnZXIuDQo+dW5p DQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9V c2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZ2VyDQo+RGF0YS5oDQo+IGRlbGV0 ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmls ZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZ2VyDQo+RHhlLmluZg0KPiBkZWxldGUgbW9kZSAx MDA2NDQNCj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2Vy RHhlL1VzZXJQcm9maWxlTWFuYWdlcg0KPkV4dHJhLnVuaQ0KPiBkZWxldGUgbW9kZSAxMDA2NDQN Cj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1Vz ZXJQcm9maWxlTWFuYWdlcg0KPlN0cmluZ3MudW5pDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNl Y3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclBy b2ZpbGVNYW5hZ2VyDQo+VmZyLlZmcg0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTW9k aWZ5LmMNCj4NCj5kaWZmIC0tZ2l0IGEvU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzYkNyZWRl bnRpYWxQcm92aWRlckhpaS5oDQo+Yi9TZWN1cml0eVBrZy9JbmNsdWRlL0d1aWQvVXNiQ3JlZGVu dGlhbFByb3ZpZGVySGlpLmgNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCAwNTlk NjhmMzJlLi4wMDAwMDAwMDAwDQo+LS0tIGEvU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzYkNy ZWRlbnRpYWxQcm92aWRlckhpaS5oDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDI5ICswLDAgQEAN Cj4tLyoqIEBmaWxlDQo+LSAgR1VJRCB1c2VkIGFzIEhJSSBQYWNrYWdlIGxpc3QgR1VJRCBpbiBV c2JDcmVkZW50aWFsUHJvdmlkZXJEeGUgZHJpdmVyLg0KPi0NCj4tQ29weXJpZ2h0IChjKSAyMDEx IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi1U aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LWFyZSBsaWNlbnNl ZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRo ZSBCU0QNCj5MaWNlbnNlDQo+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAg VGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi1odHRwOi8v b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LQ0KPi1USEUgUFJPR1JB TSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJ UywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwg RUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0NCj4tKiovDQo+LQ0KPi0jaWZuZGVmIF9f VVNCX0NSRURFTlRJQUxfUFJPVklERVJfSElJX0hfXw0KPi0jZGVmaW5lIF9fVVNCX0NSRURFTlRJ QUxfUFJPVklERVJfSElJX0hfXw0KPi0NCj4tLy8NCj4tLy8gVXNlZCBmb3Igc2F2ZSBwYXNzd29y ZCBjcmVkZW50aWFsIGFuZCBmb3JtIGJyb3dzZXINCj4tLy8gQW5kIHVzZWQgYXMgcHJvdmlkZXIg aWRlbnRpZmllcg0KPi0vLw0KPi0jZGVmaW5lIFVTQl9DUkVERU5USUFMX1BST1ZJREVSX0dVSUQg XA0KPi0gIHsgXA0KPi0gICAgMHhkMDg0OWVkMSwgMHhhODhjLCAweDRiYTYsIHsgMHhiMSwgMHhk NiwgMHhhYiwgMHg1MCwgMHhlMiwgMHg4MCwgMHhiNywNCj4weGE5IH1cDQo+LSAgfQ0KPi0NCj4t ZXh0ZXJuIEVGSV9HVUlEIGdVc2JDcmVkZW50aWFsUHJvdmlkZXJHdWlkOw0KPi0NCj4tI2VuZGlm DQo+ZGlmZiAtLWdpdCBhL1NlY3VyaXR5UGtnL0luY2x1ZGUvR3VpZC9Vc2VySWRlbnRpZnlNYW5h Z2VySGlpLmgNCj5iL1NlY3VyaXR5UGtnL0luY2x1ZGUvR3VpZC9Vc2VySWRlbnRpZnlNYW5hZ2Vy SGlpLmgNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCAzMjNjNTFmMGY2Li4wMDAw MDAwMDAwDQo+LS0tIGEvU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzZXJJZGVudGlmeU1hbmFn ZXJIaWkuaA0KPisrKyAvZGV2L251bGwNCj5AQCAtMSwyNSArMCwwIEBADQo+LS8qKiBAZmlsZQ0K Pi0gIEdVSUQgdXNlZCBhcyBISUkgRm9ybVNldCBhbmQgSElJIFBhY2thZ2UgbGlzdCBHVUlEIGlu DQo+VXNlcklkZW50aWZ5TWFuYWdlckR4ZSBkcml2ZXIuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIw MTEgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vu c2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24u ICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6 Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9H UkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJB U0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5E LCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpZm5kZWYg X19VU0VSX0lERU5USUZZX01BTkFHRVJfSElJX0hfXw0KPi0jZGVmaW5lIF9fVVNFUl9JREVOVElG WV9NQU5BR0VSX0hJSV9IX18NCj4tDQo+LSNkZWZpbmUgVVNFUl9JREVOVElGWV9NQU5BR0VSX0dV SUQgXA0KPi0gIHsgXA0KPi0gICAgMHgzY2NkM2RkOCwgMHg4ZDQ1LCAweDRmZWQsIHsgMHg5Niwg MHgyZCwgMHgyYiwgMHgzOCwgMHhjZCwgMHg4MiwgMHhiMywNCj4weGM0IH0gXA0KPi0gIH0NCj4t DQo+LWV4dGVybiBFRklfR1VJRCBnVXNlcklkZW50aWZ5TWFuYWdlckd1aWQ7DQo+LQ0KPi0jZW5k aWYNCj5kaWZmIC0tZ2l0IGEvU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzZXJQcm9maWxlTWFu YWdlckhpaS5oDQo+Yi9TZWN1cml0eVBrZy9JbmNsdWRlL0d1aWQvVXNlclByb2ZpbGVNYW5hZ2Vy SGlpLmgNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCAxMDUwNTkzNTBjLi4wMDAw MDAwMDAwDQo+LS0tIGEvU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzZXJQcm9maWxlTWFuYWdl ckhpaS5oDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDI1ICswLDAgQEANCj4tLyoqIEBmaWxlDQo+ LSAgR1VJRCB1c2VkIGFzIEhJSSBGb3JtU2V0IGFuZCBISUkgUGFja2FnZSBsaXN0IEdVSUQgaW4N Cj5Vc2VyUHJvZmlsZU1hbmFnZXJEeGUgZHJpdmVyLg0KPi0NCj4tQ29weXJpZ2h0IChjKSAyMDEx IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi1U aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LWFyZSBsaWNlbnNl ZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRo ZSBCU0QNCj5MaWNlbnNlDQo+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAg VGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi1odHRwOi8v b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LQ0KPi1USEUgUFJPR1JB TSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJ UywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwg RUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0NCj4tKiovDQo+LQ0KPi0jaWZuZGVmIF9f VVNFUl9QUk9GSUxFX01BTkFHRVJfSElJX0hfXw0KPi0jZGVmaW5lIF9fVVNFUl9QUk9GSUxFX01B TkFHRVJfSElJX0hfXw0KPi0NCj4tI2RlZmluZSBVU0VSX1BST0ZJTEVfTUFOQUdFUl9HVUlEIFwN Cj4tICB7IFwNCj4tICAgIDB4YzM1ZjI3MmMsIDB4OTdjMiwgMHg0NjVhLCB7IDB4YTIsIDB4MTYs IDB4NjksIDB4NmIsIDB4NjYsIDB4OGEsIDB4OGMsIDB4ZmUgfQ0KPlwNCj4tICB9DQo+LQ0KPi1l eHRlcm4gRUZJX0dVSUQgZ1VzZXJQcm9maWxlTWFuYWdlckd1aWQ7DQo+LQ0KPi0jZW5kaWYNCj5k aWZmIC0tZ2l0IGEvU2VjdXJpdHlQa2cvU2VjdXJpdHlQa2cuZGVjIGIvU2VjdXJpdHlQa2cvU2Vj dXJpdHlQa2cuZGVjDQo+aW5kZXggOGQ2NGI0ZmVmZS4uMGMyYWZlMjkzOCAxMDA2NDQNCj4tLS0g YS9TZWN1cml0eVBrZy9TZWN1cml0eVBrZy5kZWMNCj4rKysgYi9TZWN1cml0eVBrZy9TZWN1cml0 eVBrZy5kZWMNCj5AQCAtMTM5LDIyICsxMzksMTAgQEANCj4gICAjICBJbmNsdWRlL0d1aWQvVGNn MlBoeXNpY2FsUHJlc2VuY2VEYXRhLmgNCj4gICBnRWZpVGNnMlBoeXNpY2FsUHJlc2VuY2VHdWlk ID0geyAweGFlYjljNWMxLCAweDk0ZjEsIDB4NGQwMiwgeyAweGJmLCAweGQ5LA0KPjB4NDYsIDB4 MiwgMHhkYiwgMHgyZCwgMHgzYywgMHg1NCB9fQ0KPg0KPi0gICMjIEdVSUQgdXNlZCBmb3IgZm9y bSBicm93c2VyLCBwYXNzd29yZCBjcmVkZW50aWFsIGFuZCBwcm92aWRlciBpZGVudGlmaWVyLg0K Pi0gICMgSW5jbHVkZS9HdWlkL1B3ZENyZWRlbnRpYWxQcm92aWRlckhpaS5oDQo+LSAgZ1B3ZENy ZWRlbnRpYWxQcm92aWRlckd1aWQgICAgICAgICA9IHsgMHg3OGI5ZWM4YiwgMHhjMDAwLCAweDQ2 YzUsIHsgMHhhYywNCj4weDkzLCAweDI0LCAweGEwLCAweGMxLCAweGJiLCAweDAsIDB4Y2UgfX0N Cj4tDQo+LSAgIyMgR1VJRCB1c2VkIGZvciBmb3JtIGJyb3dzZXIsIFVTQiBjcmVkZW50aWFsIGFu ZCBwcm92aWRlciBpZGVudGlmaWVyLg0KPi0gICMgIEluY2x1ZGUvR3VpZC9Vc2JDcmVkZW50aWFs UHJvdmlkZXJIaWkuaA0KPi0gIGdVc2JDcmVkZW50aWFsUHJvdmlkZXJHdWlkICAgICAgICAgPSB7 IDB4ZDA4NDllZDEsIDB4YTg4YywgMHg0YmE2LCB7IDB4YjEsDQo+MHhkNiwgMHhhYiwgMHg1MCwg MHhlMiwgMHg4MCwgMHhiNywgMHhhOSB9fQ0KPi0NCj4gICAjIyBHVUlEIHVzZWQgZm9yIEZvcm1T ZXQgZ3VpZCBhbmQgdXNlciBwcm9maWxlIHZhcmlhYmxlLg0KPiAgICMgSW5jbHVkZS9HdWlkL1Vz ZXJJZGVudGlmeU1hbmFnZXJIaWkuaA0KPiAgIGdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCAgICAg ICAgICAgPSB7IDB4M2NjZDNkZDgsIDB4OGQ0NSwgMHg0ZmVkLCB7IDB4OTYsDQo+MHgyZCwgMHgy YiwgMHgzOCwgMHhjZCwgMHg4MiwgMHhiMywgMHhjNCB9fQ0KPg0KPi0gICMjIEdVSUQgdXNlZCBm b3IgRm9ybVNldC4NCj4tICAjICBJbmNsdWRlL0d1aWQvVXNlclByb2ZpbGVNYW5hZ2VySGlpLmgN Cj4tICBnVXNlclByb2ZpbGVNYW5hZ2VyR3VpZCAgICAgICAgICAgID0geyAweGMzNWYyNzJjLCAw eDk3YzIsIDB4NDY1YSwgeyAweGEyLCAweDE2LA0KPjB4NjksIDB4NmIsIDB4NjYsIDB4OGEsIDB4 OGMsIDB4ZmUgfX0NCj4tDQo+ICAgIyMgR1VJRCB1c2VkIGZvciBGb3JtU2V0Lg0KPiAgICMgIElu Y2x1ZGUvR3VpZC9UY2dDb25maWdIaWkuaA0KPiAgIGdUY2dDb25maWdGb3JtU2V0R3VpZCAgICAg ICAgICAgICAgPSB7IDB4YjBmOTAxZTQsIDB4YzQyNCwgMHg0NWRlLCB7IDB4OTAsIDB4ODEsDQo+ MHg5NSwgMHhlMiwgMHhiLCAweGRlLCAweDZmLCAweGI1IH19DQo+ZGlmZiAtLWdpdCBhL1NlY3Vy aXR5UGtnL1NlY3VyaXR5UGtnLmRzYyBiL1NlY3VyaXR5UGtnL1NlY3VyaXR5UGtnLmRzYw0KPmlu ZGV4IDY4YTI5NTMxNjIuLjE5YWFlYmZmMWYgMTAwNjQ0DQo+LS0tIGEvU2VjdXJpdHlQa2cvU2Vj dXJpdHlQa2cuZHNjDQo+KysrIGIvU2VjdXJpdHlQa2cvU2VjdXJpdHlQa2cuZHNjDQo+QEAgLTE0 Niw4ICsxNDYsNiBAQA0KPiAgIFNlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRp b25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuaW5mDQo+ICAgI1NlY3VyaXR5UGtnL0xpYnJh cnkvRHhlRGVmZXJJbWFnZUxvYWRMaWIvRHhlRGVmZXJJbWFnZUxvYWRMaWIuaW5mDQo+DQo+U2Vj dXJpdHlQa2cvTGlicmFyeS9EeGVJbWFnZUF1dGhlbnRpY2F0aW9uU3RhdHVzTGliL0R4ZUltYWdl QXV0aGVudGljYXRpDQo+b25TdGF0dXNMaWIuaW5mDQo+LQ0KPiNTZWN1cml0eVBrZy9Vc2VySWRl bnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW5hDQo+Z2Vy RHhlLmluZg0KPi0NCj4jU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxl TWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnZQ0KPnJEeGUuaW5mDQo+DQo+ICAgIw0KPiAgICMg VFBNDQo+QEAgLTIwMCw4ICsxOTgsNiBAQA0KPiAgIFNlY3VyaXR5UGtnL0xpYnJhcnkvQXV0aFZh cmlhYmxlTGliL0F1dGhWYXJpYWJsZUxpYi5pbmYNCj4NCj4gW0NvbXBvbmVudHMuSUEzMiwgQ29t cG9uZW50cy5YNjRdDQo+LSMNCj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3Jl ZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQcm8NCj52aWRlckR4ZS5pbmYNCj4tIw0K PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUv VXNiQ3JlZGVudGlhbFBybw0KPnZpZGVyRHhlLmluZg0KPg0KPlNlY3VyaXR5UGtnL1ZhcmlhYmxl QXV0aGVudGljYXRlZC9TZWN1cmVCb290Q29uZmlnRHhlL1NlY3VyZUJvb3RDb25maWcNCj5EeGUu aW5mDQo+DQo+ICAgIw0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNh dGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbFANCj5yb3ZpZGVyLmMN Cj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJE eGUvUHdkQ3JlZGVudGlhbA0KPlByb3ZpZGVyLmMNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQN Cj5pbmRleCA1MmZjNjhiNWVlLi4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2Vy SWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQDQo+ cm92aWRlci5jDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDE0NjQgKzAsMCBAQA0KPi0vKiogQGZp bGUNCj4tICBQYXNzd29yZCBDcmVkZW50aWFsIFByb3ZpZGVyIGRyaXZlciBpbXBsZW1lbnRhdGlv bi4NCj4tDQo+LUNvcHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4tKEMpIENvcHlyaWdodCAyMDE4IEhld2xldHQgUGFj a2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRo ZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFi bGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+ LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0 aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBV TkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJS QU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBP UiBJTVBMSUVELg0KPi0NCj4tKiovDQo+LQ0KPi0jaW5jbHVkZSAiUHdkQ3JlZGVudGlhbFByb3Zp ZGVyLmgiDQo+LQ0KPi1DUkVERU5USUFMX1RBQkxFICAgICAgICAgICAgKm1Qd2RUYWJsZSAgICAg ID0gTlVMTDsNCj4tUFdEX1BST1ZJREVSX0NBTExCQUNLX0lORk8gICptQ2FsbGJhY2tJbmZvICA9 IE5VTEw7DQo+LVBBU1NXT1JEX0NSRURFTlRJQUxfSU5GTyAgICAqbVB3ZEluZm9IYW5kbGUgPSBO VUxMOw0KPi0NCj4tSElJX1ZFTkRPUl9ERVZJQ0VfUEFUSCAgICAgIG1IaWlWZW5kb3JEZXZpY2VQ YXRoID0gew0KPi0gIHsNCj4tICAgIHsNCj4tICAgICAgSEFSRFdBUkVfREVWSUNFX1BBVEgsDQo+ LSAgICAgIEhXX1ZFTkRPUl9EUCwNCj4tICAgICAgew0KPi0gICAgICAgIChVSU5UOCkgKHNpemVv ZiAoVkVORE9SX0RFVklDRV9QQVRIKSksDQo+LSAgICAgICAgKFVJTlQ4KSAoKHNpemVvZiAoVkVO RE9SX0RFVklDRV9QQVRIKSkgPj4gOCkNCj4tICAgICAgfQ0KPi0gICAgfSwNCj4tICAgIFBXRF9D UkVERU5USUFMX1BST1ZJREVSX0dVSUQNCj4tICB9LA0KPi0gIHsNCj4tICAgIEVORF9ERVZJQ0Vf UEFUSF9UWVBFLA0KPi0gICAgRU5EX0VOVElSRV9ERVZJQ0VfUEFUSF9TVUJUWVBFLA0KPi0gICAg ew0KPi0gICAgICAoVUlOVDgpIChFTkRfREVWSUNFX1BBVEhfTEVOR1RIKSwNCj4tICAgICAgKFVJ TlQ4KSAoKEVORF9ERVZJQ0VfUEFUSF9MRU5HVEgpID4+IDgpDQo+LSAgICB9DQo+LSAgfQ0KPi19 Ow0KPi0NCj4tRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgIGdQd2RDcmVkZW50aWFsUHJv dmlkZXJEcml2ZXIgPSB7DQo+LSAgUFdEX0NSRURFTlRJQUxfUFJPVklERVJfR1VJRCwNCj4tICBF RklfVVNFUl9DUkVERU5USUFMX0NMQVNTX1BBU1NXT1JELA0KPi0gIENyZWRlbnRpYWxFbnJvbGws DQo+LSAgQ3JlZGVudGlhbEZvcm0sDQo+LSAgQ3JlZGVudGlhbFRpbGUsDQo+LSAgQ3JlZGVudGlh bFRpdGxlLA0KPi0gIENyZWRlbnRpYWxVc2VyLA0KPi0gIENyZWRlbnRpYWxTZWxlY3QsDQo+LSAg Q3JlZGVudGlhbERlc2VsZWN0LA0KPi0gIENyZWRlbnRpYWxEZWZhdWx0LA0KPi0gIENyZWRlbnRp YWxHZXRJbmZvLA0KPi0gIENyZWRlbnRpYWxHZXROZXh0SW5mbywNCj4tICBFRklfQ1JFREVOVElB TF9DQVBBQklMSVRJRVNfRU5ST0xMLA0KPi0gIENyZWRlbnRpYWxEZWxldGUNCj4tfTsNCj4tDQo+ LQ0KPi0vKioNCj4tICBHZXQgc3RyaW5nIGJ5IHN0cmluZyBpZCBmcm9tIEhJSSBJbnRlcmZhY2Uu DQo+LQ0KPi0NCj4tICBAcGFyYW1baW5dIElkICAgICAgU3RyaW5nIElEIHRvIGdldCB0aGUgc3Ry aW5nIGZyb20uDQo+LQ0KPi0gIEByZXR2YWwgIENIQVIxNiAqICBTdHJpbmcgZnJvbSBJRC4NCj4t ICBAcmV0dmFsICBOVUxMICAgICAgSWYgZXJyb3Igb2NjdXJzLg0KPi0NCj4tKiovDQo+LUNIQVIx NiAqDQo+LUdldFN0cmluZ0J5SWQgKA0KPi0gIElOIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAg SWQNCj4tICApDQo+LXsNCj4tICAvLw0KPi0gIC8vIEdldCB0aGUgY3VycmVudCBzdHJpbmcgZm9y IHRoZSBjdXJyZW50IExhbmd1YWdlLg0KPi0gIC8vDQo+LSAgcmV0dXJuIEhpaUdldFN0cmluZyAo bUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCBJZCwgTlVMTCk7DQo+LX0NCj4tDQo+LQ0KPi0vKioN Cj4tICBFeHBhbmQgcGFzc3dvcmQgdGFibGUgc2l6ZS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUV4 cGFuZFRhYmxlU2l6ZSAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIENSRURFTlRJQUxfVEFC TEUgICpOZXdUYWJsZTsNCj4tICBVSU5UTiAgICAgICAgICAgICBDb3VudDsNCj4tDQo+LSAgQ291 bnQgPSBtUHdkVGFibGUtPk1heENvdW50ICsgUEFTU1dPUkRfVEFCTEVfSU5DOw0KPi0gIC8vDQo+ LSAgLy8gQ3JlYXRlIG5ldyBjcmVkZW50aWFsIHRhYmxlLg0KPi0gIC8vDQo+LSAgTmV3VGFibGUg PSAoQ1JFREVOVElBTF9UQUJMRSAqKSBBbGxvY2F0ZVplcm9Qb29sICgNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChDUkVERU5USUFMX1RBQkxFKSArDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDb3VudCAtIDEpICogc2l6ZW9mIChQ QVNTV09SRF9JTkZPKQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0K Pi0gIEFTU0VSVCAoTmV3VGFibGUgIT0gTlVMTCk7DQo+LQ0KPi0gIE5ld1RhYmxlLT5NYXhDb3Vu dCAgICA9IENvdW50Ow0KPi0gIE5ld1RhYmxlLT5Db3VudCAgICAgICA9IG1Qd2RUYWJsZS0+Q291 bnQ7DQo+LSAgTmV3VGFibGUtPlZhbGlkSW5kZXggID0gbVB3ZFRhYmxlLT5WYWxpZEluZGV4Ow0K Pi0gIC8vDQo+LSAgLy8gQ29weSBvbGQgZW50cmllcw0KPi0gIC8vDQo+LSAgQ29weU1lbSAoDQo+ LSAgICAmTmV3VGFibGUtPlVzZXJJbmZvLA0KPi0gICAgJm1Qd2RUYWJsZS0+VXNlckluZm8sDQo+ LSAgICBtUHdkVGFibGUtPkNvdW50ICogc2l6ZW9mIChQQVNTV09SRF9JTkZPKQ0KPi0gICAgKTsN Cj4tICBGcmVlUG9vbCAobVB3ZFRhYmxlKTsNCj4tICBtUHdkVGFibGUgPSBOZXdUYWJsZTsNCj4t fQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEFkZCwgdXBkYXRlIG9yIGRlbGV0ZSBpbmZvIGluIHRhYmxl LCBhbmQgc3luYyB3aXRoIE5WIHZhcmlhYmxlLg0KPi0NCj4tICBAcGFyYW1baW5dICBJbmRleCAg ICAgVGhlIGluZGV4IG9mIHRoZSBwYXNzd29yZCBpbiB0YWJsZS4gSWYgaW5kZXggaXMgZm91bmQg aW4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsIHVwZGF0ZSB0aGUgaW5mbywgZWxz ZSBhZGQgdGhlIGludG8gdG8gdGFibGUuDQo+LSAgQHBhcmFtW2luXSAgSW5mbyAgICAgIFRoZSBu ZXcgcGFzc3dvcmQgaW5mbyB0byBhZGQgaW50byB0YWJsZS5JZiBJbmZvIGlzIE5VTEwsDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGUgaW5mbyBieSBJbmRleC4NCj4tDQo+LSAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEluZm8gaXMgTlVMTCB3aGVuIHNhdmUgdGhl IGluZm8uDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIE1vZGlmeSB0aGUgdGFi bGUgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBGYWls ZWQgdG8gbW9kaWZ5IHRoZSB0YWJsZS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LU1vZGlm eVRhYmxlICgNCj4tICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW5kZXgsDQo+LSAgSU4gIFBBU1NXT1JEX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogSW5mbyBPUFRJT05BTA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgU3Rh dHVzOw0KPi0gIFBBU1NXT1JEX0lORk8gICAgKk5ld1Bhc3N3b3JkSW5mbzsNCj4tDQo+LSAgTmV3 UGFzc3dvcmRJbmZvID0gTlVMTDsNCj4tDQo+LSAgaWYgKEluZGV4IDwgbVB3ZFRhYmxlLT5Db3Vu dCkgew0KPi0gICAgaWYgKEluZm8gPT0gTlVMTCkgew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBE ZWxldGUgdGhlIHNwZWNpZmllZCBlbnRyeS4NCj4tICAgICAgLy8NCj4tICAgICAgbVB3ZFRhYmxl LT5Db3VudC0tOw0KPi0gICAgICBpZiAoSW5kZXggIT0gbVB3ZFRhYmxlLT5Db3VudCkgew0KPi0g ICAgICAgIE5ld1Bhc3N3b3JkSW5mbyA9ICZtUHdkVGFibGUtPlVzZXJJbmZvW21Qd2RUYWJsZS0+ Q291bnRdOw0KPi0gICAgICB9DQo+LSAgICB9IGVsc2Ugew0KPi0gICAgICAvLw0KPi0gICAgICAv LyBVcGRhdGUgdGhlIHNwZWNpZmllZCBlbnRyeS4NCj4tICAgICAgLy8NCj4tICAgICAgTmV3UGFz c3dvcmRJbmZvID0gSW5mbzsNCj4tICAgIH0NCj4tICB9IGVsc2Ugew0KPi0gICAgLy8NCj4tICAg IC8vIEFkZCBhIG5ldyBwYXNzd29yZCBpbmZvLg0KPi0gICAgLy8NCj4tICAgIGlmIChJbmZvID09 IE5VTEwpIHsNCj4tICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICAgIH0N Cj4tDQo+LSAgICBpZiAobVB3ZFRhYmxlLT5Db3VudCA+PSBtUHdkVGFibGUtPk1heENvdW50KSB7 DQo+LSAgICAgIEV4cGFuZFRhYmxlU2l6ZSAoKTsNCj4tICAgIH0NCj4tDQo+LSAgICBOZXdQYXNz d29yZEluZm8gPSBJbmZvOw0KPi0gICAgbVB3ZFRhYmxlLT5Db3VudCsrOw0KPi0gIH0NCj4tDQo+ LSAgaWYgKE5ld1Bhc3N3b3JkSW5mbyAhPSBOVUxMKSB7DQo+LSAgICBDb3B5TWVtICgmbVB3ZFRh YmxlLT5Vc2VySW5mb1tJbmRleF0sIE5ld1Bhc3N3b3JkSW5mbywgc2l6ZW9mDQo+KFBBU1NXT1JE X0lORk8pKTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSB0aGUgY3JlZGVudGlhbCB0 YWJsZS4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUgKA0KPi0gICAgICAg ICAgICAgICAgICBMIlB3ZENyZWRlbnRpYWwiLA0KPi0gICAgICAgICAgICAgICAgICAmZ1B3ZENy ZWRlbnRpYWxQcm92aWRlckd1aWQsDQo+LSAgICAgICAgICAgICAgICAgIEVGSV9WQVJJQUJMRV9O T05fVk9MQVRJTEUgfA0KPkVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1MsDQo+LSAgICAg ICAgICAgICAgICAgIG1Qd2RUYWJsZS0+Q291bnQgKiBzaXplb2YgKFBBU1NXT1JEX0lORk8pLA0K Pi0gICAgICAgICAgICAgICAgICAmbVB3ZFRhYmxlLT5Vc2VySW5mbw0KPi0gICAgICAgICAgICAg ICAgICApOw0KPi0gIHJldHVybiBTdGF0dXM7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBDcmVh dGUgYSBwYXNzd29yZCB0YWJsZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIENy ZWF0ZSBhIHBhc3N3b3JkIHRhYmxlIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIE90aGVycyAg ICAgICAgICAgRmFpbGVkIHRvIGNyZWF0ZSBhIHBhc3N3b3JkLg0KPi0NCj4tKiovDQo+LUVGSV9T VEFUVVMNCj4tSW5pdENyZWRlbnRpYWxUYWJsZSAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0g IEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tICBVSU5UOCAgICAgICAqVmFyOw0KPi0gIFVJTlROICAg ICAgIFZhclNpemU7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IFBhc3N3b3JkIGNyZWRlbnRpYWwg ZGF0YSBmcm9tIE5WIHZhcmlhYmxlLg0KPi0gIC8vDQo+LSAgVmFyU2l6ZSA9IDA7DQo+LSAgVmFy ICAgICA9IE5VTEw7DQo+LSAgU3RhdHVzICA9IGdSVC0+R2V0VmFyaWFibGUgKA0KPi0gICAgICAg ICAgICAgICAgICAgTCJQd2RDcmVkZW50aWFsIiwNCj4tICAgICAgICAgICAgICAgICAgICZnUHdk Q3JlZGVudGlhbFByb3ZpZGVyR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAg ICAgICAgICAgICAgICAgICAmVmFyU2l6ZSwNCj4tICAgICAgICAgICAgICAgICAgIFZhcg0KPi0g ICAgICAgICAgICAgICAgICAgKTsNCj4tICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NN QUxMKSB7DQo+LSAgICBWYXIgPSBBbGxvY2F0ZVplcm9Qb29sIChWYXJTaXplKTsNCj4tICAgIGlm IChWYXIgPT0gTlVMTCkgew0KPi0gICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ LSAgICB9DQo+LSAgICBTdGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlICgNCj4tICAgICAgICAgICAg ICAgICAgICBMIlB3ZENyZWRlbnRpYWwiLA0KPi0gICAgICAgICAgICAgICAgICAgICZnUHdkQ3Jl ZGVudGlhbFByb3ZpZGVyR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAg ICAgICAgICAgICAgICAgICZWYXJTaXplLA0KPi0gICAgICAgICAgICAgICAgICAgIFZhcg0KPi0g ICAgICAgICAgICAgICAgICAgICk7DQo+LSAgfQ0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykg JiYgKFN0YXR1cyAhPSBFRklfTk9UX0ZPVU5EKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4t ICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ3JlYXRlIHRoZSBwYXNzd29yZCBjcmVkZW50aWFsIHRh YmxlLg0KPi0gIC8vDQo+LSAgbVB3ZFRhYmxlID0gQWxsb2NhdGVaZXJvUG9vbCAoDQo+LSAgICAg ICAgICAgICAgICBzaXplb2YgKENSRURFTlRJQUxfVEFCTEUpIC0gc2l6ZW9mIChQQVNTV09SRF9J TkZPKSArDQo+LSAgICAgICAgICAgICAgICBQQVNTV09SRF9UQUJMRV9JTkMgKiBzaXplb2YgKFBB U1NXT1JEX0lORk8pICsNCj4tICAgICAgICAgICAgICAgIFZhclNpemUNCj4tICAgICAgICAgICAg ICAgICk7DQo+LSAgaWYgKG1Qd2RUYWJsZSA9PSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAoVmFy KTsNCj4tICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9DQo+LQ0KPi0gIG1Q d2RUYWJsZS0+Q291bnQgICAgICA9IFZhclNpemUgLyBzaXplb2YgKFBBU1NXT1JEX0lORk8pOw0K Pi0gIG1Qd2RUYWJsZS0+TWF4Q291bnQgICA9IG1Qd2RUYWJsZS0+Q291bnQgKyBQQVNTV09SRF9U QUJMRV9JTkM7DQo+LSAgbVB3ZFRhYmxlLT5WYWxpZEluZGV4ID0gMDsNCj4tICBpZiAoVmFyICE9 IE5VTEwpIHsNCj4tICAgIENvcHlNZW0gKG1Qd2RUYWJsZS0+VXNlckluZm8sIFZhciwgVmFyU2l6 ZSk7DQo+LSAgICBGcmVlUG9vbCAoVmFyKTsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgSGFzaCB0aGUgcGFzc3dvcmQgdG8gZ2V0IGNyZWRl bnRpYWwuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICBQYXNzd29yZCAgICAgICBQb2ludHMgdG8gdGhl IGlucHV0IHBhc3N3b3JkLg0KPi0gIEBwYXJhbVtpbl0gICBQYXNzd29yZFNpemUgICBUaGUgc2l6 ZSBvZiBwYXNzd29yZCwgaW4gYnl0ZXMuDQo+LSAgQHBhcmFtW291dF0gIENyZWRlbnRpYWwgICAg IFBvaW50cyB0byB0aGUgaGFzaGVkIHJlc3VsdC4NCj4tDQo+LSAgQHJldHZhbCAgICAgIFRSVUUg ICAgICAgICAgIEhhc2ggdGhlIHBhc3N3b3JkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsICAg ICAgRkFMU0UgICAgICAgICAgRmFpbGVkIHRvIGhhc2ggdGhlIHBhc3N3b3JkLg0KPi0NCj4tKiov DQo+LUJPT0xFQU4NCj4tR2VuZXJhdGVDcmVkZW50aWFsICgNCj4tICBJTiAgICAgIENIQVIxNiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQYXNzd29yZCwNCj4tICBJTiAgICAgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3N3b3JkU2l6ZSwNCj4tICAgICBPVVQg IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpDcmVkZW50aWFsDQo+LSAgKQ0K Pi17DQo+LSAgQk9PTEVBTiAgICAgICAgICAgU3RhdHVzOw0KPi0gIFVJTlROICAgICAgICAgICAg IEhhc2hTaXplOw0KPi0gIFZPSUQgICAgICAgICAgICAgICpIYXNoOw0KPi0NCj4tICBIYXNoU2l6 ZSA9IFNoYTFHZXRDb250ZXh0U2l6ZSAoKTsNCj4tICBIYXNoICAgICA9IEFsbG9jYXRlUG9vbCAo SGFzaFNpemUpOw0KPi0gIEFTU0VSVCAoSGFzaCAhPSBOVUxMKTsNCj4tDQo+LSAgU3RhdHVzID0g U2hhMUluaXQgKEhhc2gpOw0KPi0gIGlmICghU3RhdHVzKSB7DQo+LSAgICBnb3RvIERvbmU7DQo+ LSAgfQ0KPi0NCj4tICBTdGF0dXMgPSBTaGExVXBkYXRlIChIYXNoLCBQYXNzd29yZCwgUGFzc3dv cmRTaXplKTsNCj4tICBpZiAoIVN0YXR1cykgew0KPi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4t DQo+LSAgU3RhdHVzID0gU2hhMUZpbmFsIChIYXNoLCBDcmVkZW50aWFsKTsNCj4tDQo+LURvbmU6 DQo+LSAgRnJlZVBvb2wgKEhhc2gpOw0KPi0gIHJldHVybiBTdGF0dXM7DQo+LX0NCj4tDQo+LQ0K Pi0vKioNCj4tICBHZXQgcGFzc3dvcmQgZnJvbSB1c2VyIGlucHV0Lg0KPi0NCj4tICBAcGFyYW1b aW5dICAgRmlyc3RQd2QgICAgICAgSWYgVHJ1ZSwgcHJvbXB0IHRvIGlucHV0IHRoZSBmaXJzdCBw YXNzd29yZC4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgRmFsc2UsIHByb21w dCB0byBpbnB1dCBwYXNzd29yZCBhZ2Fpbi4NCj4tICBAcGFyYW1bb3V0XSAgQ3JlZGVudGlhbCAg ICAgUG9pbnRzIHRvIHRoZSBpbnB1dCBwYXNzd29yZC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUdl dFBhc3N3b3JkICgNCj4tICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGaXJzdFB3ZCwNCj4tICBPVVQgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqQ3JlZGVudGlhbA0KPi0gICkNCj4tew0KPi0gIEVGSV9JTlBVVF9LRVkgS2V5Ow0KPi0gIENI QVIxNiAgICAgICAgUGFzc3dvcmRNYXNrW0NSRURFTlRJQUxfTEVOICsgMV07DQo+LSAgQ0hBUjE2 ICAgICAgICBQYXNzd29yZFtDUkVERU5USUFMX0xFTl07DQo+LSAgVUlOVE4gICAgICAgICBQYXNz d29yZExlbjsNCj4tICBDSEFSMTYgICAgICAgICpRdWVzdGlvblN0cjsNCj4tICBDSEFSMTYgICAg ICAgICpMaW5lU3RyOw0KPi0NCj4tICBQYXNzd29yZExlbiA9IDA7DQo+LSAgd2hpbGUgKFRSVUUp IHsNCj4tICAgIFBhc3N3b3JkTWFza1tQYXNzd29yZExlbl0gICAgID0gTCdfJzsNCj4tICAgIFBh c3N3b3JkTWFza1tQYXNzd29yZExlbiArIDFdID0gTCdcMCc7DQo+LSAgICBMaW5lU3RyID0gR2V0 U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VOIChTVFJfRFJBV19BX0xJTkUpKTsNCj4tICAgIGlmIChG aXJzdFB3ZCkgew0KPi0gICAgICBRdWVzdGlvblN0ciA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19U T0tFTiAoU1RSX0lOUFVUX1BBU1NXT1JEKSk7DQo+LSAgICB9IGVsc2Ugew0KPi0gICAgICBRdWVz dGlvblN0ciA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPihTVFJfSU5QVVRfUEFTU1dP UkRfQUdBSU4pKTsNCj4tICAgIH0NCj4tICAgIENyZWF0ZVBvcFVwICgNCj4tICAgICAgRUZJX0xJ R0hUR1JBWSB8IEVGSV9CQUNLR1JPVU5EX0JMVUUsDQo+LSAgICAgICZLZXksDQo+LSAgICAgIFF1 ZXN0aW9uU3RyLA0KPi0gICAgICBMaW5lU3RyLA0KPi0gICAgICBQYXNzd29yZE1hc2ssDQo+LSAg ICAgIE5VTEwNCj4tICAgICAgKTsNCj4tICAgIEZyZWVQb29sIChRdWVzdGlvblN0cik7DQo+LSAg ICBGcmVlUG9vbCAoTGluZVN0cik7DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIENoZWNrIGtleSBz dHJva2UNCj4tICAgIC8vDQo+LSAgICBpZiAoS2V5LlNjYW5Db2RlID09IFNDQU5fTlVMTCkgew0K Pi0gICAgICBpZiAoS2V5LlVuaWNvZGVDaGFyID09IENIQVJfQ0FSUklBR0VfUkVUVVJOKSB7DQo+ LSAgICAgICAgYnJlYWs7DQo+LSAgICAgIH0gZWxzZSBpZiAoS2V5LlVuaWNvZGVDaGFyID09IENI QVJfQkFDS1NQQUNFKSB7DQo+LSAgICAgICAgaWYgKFBhc3N3b3JkTGVuID4gMCkgew0KPi0gICAg ICAgICAgUGFzc3dvcmRMZW4tLTsNCj4tICAgICAgICB9DQo+LSAgICAgIH0gZWxzZSBpZiAoKEtl eS5Vbmljb2RlQ2hhciA9PSBDSEFSX05VTEwpIHx8DQo+LSAgICAgICAgICAgICAgICAgKEtleS5V bmljb2RlQ2hhciA9PSBDSEFSX1RBQikgfHwNCj4tICAgICAgICAgICAgICAgICAoS2V5LlVuaWNv ZGVDaGFyID09IENIQVJfTElORUZFRUQpKSB7DQo+LSAgICAgICAgY29udGludWU7DQo+LSAgICAg IH0gZWxzZSB7DQo+LSAgICAgICAgUGFzc3dvcmRbUGFzc3dvcmRMZW5dID0gS2V5LlVuaWNvZGVD aGFyOw0KPi0gICAgICAgIFBhc3N3b3JkTWFza1tQYXNzd29yZExlbl0gPSBMJyonOw0KPi0gICAg ICAgIFBhc3N3b3JkTGVuKys7DQo+LSAgICAgICAgaWYgKFBhc3N3b3JkTGVuID09IENSRURFTlRJ QUxfTEVOKSB7DQo+LSAgICAgICAgICBicmVhazsNCj4tICAgICAgICB9DQo+LSAgICAgIH0NCj4t ICAgIH0NCj4tICB9DQo+LQ0KPi0gIFBhc3N3b3JkTGVuID0gUGFzc3dvcmRMZW4gKiBzaXplb2Yg KENIQVIxNik7DQo+LSAgR2VuZXJhdGVDcmVkZW50aWFsIChQYXNzd29yZCwgUGFzc3dvcmRMZW4s IChVSU5UOCAqKUNyZWRlbnRpYWwpOw0KPi19DQo+LQ0KPi0vKioNCj4tICBDaGVjayB3aGV0aGVy IHRoZSBwYXNzd29yZCBjYW4gYmUgZm91bmQgb24gdGhpcyBwcm92aWRlci4NCj4tDQo+LSAgQHBh cmFtW2luXSAgUGFzc3dvcmQgICAgICAgICAgIFRoZSBwYXNzd29yZCB0byBiZSBmb3VuZC4NCj4t DQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIEZvdW5kIHBhc3N3b3JkIHN1Y2Vz c2Z1bGx5Lg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBGYWlsIHRvIGZpbmQg dGhlIHBhc3N3b3JkLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tQ2hlY2tQYXNzd29yZCAo DQo+LSAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQYXNz d29yZA0KPi0gICkNCj4tew0KPi0gIFVJTlROICAgICAgSW5kZXg7DQo+LSAgQ0hBUjggICAgICAq UHdkOw0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHBhc3N3b3JkIGNyZWRlbnRpYWwuDQo+LSAg Ly8NCj4tICBtUHdkVGFibGUtPlZhbGlkSW5kZXggPSAwOw0KPi0gIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IG1Qd2RUYWJsZS0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgIFB3ZCA9IG1Qd2RUYWJs ZS0+VXNlckluZm9bSW5kZXhdLlBhc3N3b3JkOw0KPi0gICAgaWYgKENvbXBhcmVNZW0gKFB3ZCwg UGFzc3dvcmQsIENSRURFTlRJQUxfTEVOKSA9PSAwKSB7DQo+LSAgICAgIG1Qd2RUYWJsZS0+VmFs aWRJbmRleCA9IEluZGV4ICsgMTsNCj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAg fQ0KPi0gIH0NCj4tDQo+LSAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LX0NCj4tDQo+LQ0KPi0v KioNCj4tICBGaW5kIGEgdXNlciBpbmZvbWF0aW9uIHJlY29yZCBieSB0aGUgaW5mb3JtYXRpb24g cmVjb3JkIHR5cGUuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgYWxsIHVzZXIgaW5m b3JtYXRpb24gcmVjb3JkcyBvZiBVc2VyIGZyb20gYmVnaW5uaW5nDQo+LSAgdW50aWwgZWl0aGVy IHRoZSBpbmZvcm1hdGlvbiBpcyBmb3VuZCwgb3IgdGhlcmUgYXJlIG5vIG1vcmUgdXNlciBpbmZv bWF0aW9uDQo+LSAgcmVjb3Jkcy4gQSBtYXRjaCBvY2N1cnMgd2hlbiBhIEluZm8uSW5mb1R5cGUg ZmllbGQgbWF0Y2hlcyB0aGUgdXNlcg0KPmluZm9ybWF0aW9uDQo+LSAgcmVjb3JkIHR5cGUuDQo+ LQ0KPi0gIEBwYXJhbVtpbl0gICAgIFVzZXIgICAgICBQb2ludHMgdG8gdGhlIHVzZXIgcHJvZmls ZSByZWNvcmQgdG8gc2VhcmNoLg0KPi0gIEBwYXJhbVtpbl0gICAgIEluZm9UeXBlICBUaGUgaW5m b21hdGlvbiB0eXBlIHRvIGJlIHNlYXJjaGVkLg0KPi0gIEBwYXJhbVtvdXRdICAgIEluZm8gICAg ICBQb2ludHMgdG8gdGhlIHVzZXIgaW5mbyBmb3VuZCwgdGhlIGNhbGxlciBpcyByZXNwb25zaWJs ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0byBmcmVlLg0KPi0NCj4tICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgRmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbiBzdWNjZXNzZnVsbHku DQo+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgIEZhaWwgdG8gZmluZCB0aGUgdXNlciBpbmZv cm1hdGlvbi4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUZpbmRVc2VySW5mb0J5VHlwZSAo DQo+LSAgSU4gICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgIFVzZXIs DQo+LSAgSU4gICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9U eXBlLA0KPi0gIE9VVCAgICAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAq KkluZm8NCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7 DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgKlVzZXJJbmZvOw0KPi0gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgIFVzZXJJbmZvU2l6ZTsNCj4tICBFRklfVVNFUl9JTkZPX0hBTkRM RSAgICAgICBVc2VySW5mb0hhbmRsZTsNCj4tICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAq VXNlck1hbmFnZXI7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRmluZCB1c2VyIGluZm9ybWF0aW9uIGJ5 IGluZm9ybWF0aW9uIHR5cGUuDQo+LSAgLy8NCj4tICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+LSAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgU3RhdHVzID0g Z0JTLT5Mb2NhdGVQcm90b2NvbCAoDQo+LSAgICAgICAgICAgICAgICAgICZnRWZpVXNlck1hbmFn ZXJQcm90b2NvbEd1aWQsDQo+LSAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSAmVXNlck1hbmFnZXINCj4tICAgICAgICAgICAgICAgICAgKTsNCj4t ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsN Cj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IGVhY2ggdXNlciBpbmZvcm1hdGlvbi4NCj4t ICAvLw0KPi0NCj4tICBVc2VySW5mb0hhbmRsZSA9IE5VTEw7DQo+LSAgVXNlckluZm8gICAgICAg PSBOVUxMOw0KPi0gIFVzZXJJbmZvU2l6ZSAgID0gMDsNCj4tICB3aGlsZSAoVFJVRSkgew0KPi0g ICAgU3RhdHVzID0gVXNlck1hbmFnZXItPkdldE5leHRJbmZvIChVc2VyTWFuYWdlciwgVXNlciwN Cj4mVXNlckluZm9IYW5kbGUpOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0g ICAgICBicmVhazsNCj4tICAgIH0NCj4tICAgIC8vDQo+LSAgICAvLyBHZXQgaW5mb3JtYXRpb24u DQo+LSAgICAvLw0KPi0gICAgU3RhdHVzID0gVXNlck1hbmFnZXItPkdldEluZm8gKA0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgVXNlck1hbmFnZXIsDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVc2VyLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckluZm9I YW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZVc2VySW5mb1NpemUNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+LSAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7 DQo+LSAgICAgIGlmIChVc2VySW5mbyAhPSBOVUxMKSB7DQo+LSAgICAgICAgRnJlZVBvb2wgKFVz ZXJJbmZvKTsNCj4tICAgICAgfQ0KPi0gICAgICBVc2VySW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wg KFVzZXJJbmZvU2l6ZSk7DQo+LSAgICAgIGlmIChVc2VySW5mbyA9PSBOVUxMKSB7DQo+LSAgICAg ICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gICAgICB9DQo+LSAgICAgIFN0YXR1 cyA9IFVzZXJNYW5hZ2VyLT5HZXRJbmZvICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVXNlck1hbmFnZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIsDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJbmZvSGFuZGxlLA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJlVzZXJJbmZvU2l6ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Ow0KPi0gICAgfQ0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBicmVh azsNCj4tICAgIH0NCj4tDQo+LSAgICBBU1NFUlQgKFVzZXJJbmZvICE9IE5VTEwpOw0KPi0gICAg aWYgKFVzZXJJbmZvLT5JbmZvVHlwZSA9PSBJbmZvVHlwZSkgew0KPi0gICAgICAqSW5mbyA9IFVz ZXJJbmZvOw0KPi0gICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgICB9DQo+LSAgfQ0KPi0N Cj4tICBpZiAoVXNlckluZm8gIT0gTlVMTCkgew0KPi0gICAgRnJlZVBvb2wgKFVzZXJJbmZvKTsN Cj4tICB9DQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFRoaXMg ZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSByZXN1bHRzIG9mIGNoYW5nZXMgaW4gY29uZmlndXJhdGlv bi4NCj4tDQo+LSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUg RUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MLg0KPi0gIEBwYXJhbSAgQWN0aW9uICAgICAg ICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgYWN0aW9uIHRha2VuIGJ5IHRoZSBicm93 c2VyLg0KPi0gIEBwYXJhbSAgUXVlc3Rpb25JZCAgICAgICAgICAgICBBIHVuaXF1ZSB2YWx1ZSB3 aGljaCBpcyBzZW50IHRvIHRoZSBvcmlnaW5hbA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBleHBvcnRpbmcgZHJpdmVyIHNvIHRoYXQgaXQgY2FuIGlkZW50aWZ5IHRoZSB0eXBl DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGRhdGEgdG8gZXhwZWN0Lg0K Pi0gIEBwYXJhbSAgVHlwZSAgICAgICAgICAgICAgICAgICBUaGUgdHlwZSBvZiB2YWx1ZSBmb3Ig dGhlIHF1ZXN0aW9uLg0KPi0gIEBwYXJhbSAgVmFsdWUgICAgICAgICAgICAgICAgICBBIHBvaW50 ZXIgdG8gdGhlIGRhdGEgYmVpbmcgc2VudCB0byB0aGUgb3JpZ2luYWwNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXhwb3J0aW5nIGRyaXZlci4NCj4tICBAcGFyYW0gIEFjdGlv blJlcXVlc3QgICAgICAgICAgT24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIGFjdGlvbiByZXF1ZXN0 ZWQgYnkNCj50aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sg ZnVuY3Rpb24uDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY2Fs bGJhY2sgc3VjY2Vzc2Z1bGx5IGhhbmRsZWQgdGhlIGFjdGlvbi4NCj4tICBAcmV0dmFsIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTICAgTm90IGVub3VnaCBzdG9yYWdlIGlzIGF2YWlsYWJsZSB0byBob2xk DQo+dGhlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCBp dHMgZGF0YS4NCj4tICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhlIHZhcmlhYmxl IGNvdWxkIG5vdCBiZSBzYXZlZC4NCj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAg VGhlIHNwZWNpZmllZCBBY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRV Uw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbERyaXZlckNhbGxiYWNrICgNCj4tICBJTiAgQ09OU1Qg RUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICAgKlRoaXMsDQo+LSAgSU4gIEVGSV9CUk9X U0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgIEFjdGlvbiwNCj4tICBJTiAgRUZJX1FVRVNU SU9OX0lEICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JZCwNCj4tICBJTiAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSwNCj4tICBJTiAgRUZJX0lGUl9U WVBFX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgKlZhbHVlLA0KPi0gIE9VVCBFRklfQlJPV1NF Ul9BQ1RJT05fUkVRVUVTVCAgICAgICAgICAgICAqQWN0aW9uUmVxdWVzdA0KPi0gICkNCj4tew0K Pi0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPi0gIEVGSV9JTlBVVF9LRVkgS2V5Ow0KPi0gIENI QVI4ICAgICAgICAgUGFzc3dvcmRbQ1JFREVOVElBTF9MRU5dOw0KPi0gIENIQVIxNiAgICAgICAg KlByb21wdFN0cjsNCj4tDQo+LSAgaWYgKEFjdGlvbiA9PSBFRklfQlJPV1NFUl9BQ1RJT05fQ0hB TkdFRCkgew0KPi0gICAgaWYgKFF1ZXN0aW9uSWQgPT0gS0VZX0dFVF9QQVNTV09SRCkgew0KPi0g ICAgICAvLw0KPi0gICAgICAvLyBHZXQgYW5kIGNoZWNrIHBhc3N3b3JkLg0KPi0gICAgICAvLw0K Pi0gICAgICBHZXRQYXNzd29yZCAoVFJVRSwgUGFzc3dvcmQpOw0KPi0gICAgICBTdGF0dXMgPSBD aGVja1Bhc3N3b3JkIChQYXNzd29yZCk7DQo+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4tICAgICAgICBQcm9tcHRTdHIgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4o U1RSX1BBU1NXT1JEX0lOQ09SUkVDVCkpOw0KPi0gICAgICAgIENyZWF0ZVBvcFVwICgNCj4tICAg ICAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPi0gICAgICAgICAg JktleSwNCj4tICAgICAgICAgIEwiIiwNCj4tICAgICAgICAgIFByb21wdFN0ciwNCj4tICAgICAg ICAgIEwiIiwNCj4tICAgICAgICAgIE5VTEwNCj4tICAgICAgICAgICk7DQo+LSAgICAgICAgRnJl ZVBvb2wgKFByb21wdFN0cik7DQo+LSAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4tICAgICAgfQ0K Pi0gICAgICAqQWN0aW9uUmVxdWVzdCAgPSBFRklfQlJPV1NFUl9BQ1RJT05fUkVRVUVTVF9FWElU Ow0KPi0gICAgfQ0KPi0gICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gIH0NCj4tDQo+LSAgLy8N Cj4tICAvLyBBbGwgb3RoZXIgYWN0aW9uIHJldHVybiB1bnN1cHBvcnRlZC4NCj4tICAvLw0KPi0g IHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBUaGlzIGZ1 bmN0aW9uIGFsbG93cyBhIGNhbGxlciB0byBleHRyYWN0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRp b24gZm9yIG9uZQ0KPi0gIG9yIG1vcmUgbmFtZWQgZWxlbWVudHMgZnJvbSB0aGUgdGFyZ2V0IGRy aXZlci4NCj4tDQo+LQ0KPi0gIEBwYXJhbSBUaGlzICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBF RklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wuDQo+LSAgQHBhcmFtIFJlcXVlc3QgICAgICAg ICBBIG51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZyBpbiA8Q29uZmlnUmVxdWVzdD4NCj5m b3JtYXQuDQo+LSAgQHBhcmFtIFByb2dyZXNzICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byBh IGNoYXJhY3RlciBpbiB0aGUgUmVxdWVzdCBzdHJpbmcuDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICBQb2ludHMgdG8gdGhlIHN0cmluZydzIG51bGwgdGVybWluYXRvciBpZiByZXF1ZXN0IHdh cyBzdWNjZXNzZnVsLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBt b3N0IHJlY2VudCAnJicgYmVmb3JlIHRoZSBmaXJzdCBmYWlsaW5nIG5hbWUvdmFsdWUNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgIHBhaXIgKG9yIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmlu ZyBpZiB0aGUgZmFpbHVyZSBpcyBpbiB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGZp cnN0IG5hbWUvdmFsdWUgcGFpcikgaWYgdGhlIHJlcXVlc3Qgd2FzIG5vdCBzdWNjZXNzZnVsLg0K Pi0gIEBwYXJhbSBSZXN1bHRzICAgICAgICAgQSBudWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJp bmcgaW4gPENvbmZpZ0FsdFJlc3A+DQo+Zm9ybWF0IHdoaWNoDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICBoYXMgYWxsIHZhbHVlcyBmaWxsZWQgaW4gZm9yIHRoZSBuYW1lcyBpbiB0aGUgUmVx dWVzdCBzdHJpbmcuDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG8gYmUgYWxs b2NhdGVkIGJ5IHRoZSBjYWxsZWQgZnVuY3Rpb24uDQo+LQ0KPi0gIEByZXR2YWwgIEVGSV9TVUND RVNTICAgICAgICAgICAgVGhlIFJlc3VsdHMgaXMgZmlsbGVkIHdpdGggdGhlIHJlcXVlc3RlZCB2 YWx1ZXMuDQo+LSAgQHJldHZhbCAgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBOb3QgZW5vdWdoIG1l bW9yeSB0byBzdG9yZSB0aGUNCj5yZXN1bHRzLg0KPi0gIEByZXR2YWwgIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgUmVxdWVzdCBpcyBpbGxlZ2FsIHN5bnRheCwgb3IgdW5rbm93bg0KPm5hbWUuDQo+ LSAgQHJldHZhbCAgRUZJX05PVF9GT1VORCAgICAgICAgICBSb3V0aW5nIGRhdGEgZG9lc24ndCBt YXRjaCBhbnkgc3RvcmFnZSBpbg0KPnRoaXMgZHJpdmVyLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFU VVMNCj4tRUZJQVBJDQo+LUZha2VFeHRyYWN0Q29uZmlnICgNCj4tICBJTiAgQ09OU1QgRUZJX0hJ SV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICAgKlRoaXMsDQo+LSAgSU4gIENPTlNUIEVGSV9TVFJJ TkcgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QsDQo+LSAgT1VUIEVGSV9TVFJJTkcgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpQcm9ncmVzcywNCj4tICBPVVQgRUZJX1NUUklORyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdHMNCj4tICApDQo+LXsNCj4tICBpZiAo UHJvZ3Jlc3MgPT0gTlVMTCB8fCBSZXN1bHRzID09IE5VTEwpIHsNCj4tICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0gICpQcm9ncmVzcyA9IFJlcXVlc3Q7DQo+LSAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LX0NCj4tDQo+LS8qKg0KPi0gIFRoaXMgZnVuY3Rpb24g cHJvY2Vzc2VzIHRoZSByZXN1bHRzIG9mIGNoYW5nZXMgaW4gY29uZmlndXJhdGlvbi4NCj4tDQo+ LQ0KPi0gIEBwYXJhbSBUaGlzICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBFRklfSElJX0NPTkZJ R19BQ0NFU1NfUFJPVE9DT0wuDQo+LSAgQHBhcmFtIENvbmZpZ3VyYXRpb24gICBBIG51bGwtdGVy bWluYXRlZCBVbmljb2RlIHN0cmluZyBpbiA8Q29uZmlnUmVzcD4NCj5mb3JtYXQuDQo+LSAgQHBh cmFtIFByb2dyZXNzICAgICAgICBBIHBvaW50ZXIgdG8gYSBzdHJpbmcgZmlsbGVkIGluIHdpdGgg dGhlIG9mZnNldCBvZiB0aGUNCj5tb3N0DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICByZWNl bnQgJyYnIGJlZm9yZSB0aGUgZmlyc3QgZmFpbGluZyBuYW1lL3ZhbHVlIHBhaXIgKG9yIHRoZQ0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgaWYgdGhl IGZhaWx1cmUgaXMgaW4gdGhlIGZpcnN0DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l L3ZhbHVlIHBhaXIpIG9yIHRoZSB0ZXJtaW5hdGluZyBOVUxMIGlmIGFsbCB3YXMgc3VjY2Vzc2Z1 bC4NCj4tDQo+LSAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgUmVzdWx0cyBp cyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgQ29uZmlndXJhdGlvbiBpcyBOVUxMLg0KPi0gIEByZXR2YWwgIEVGSV9OT1RfRk9VTkQg ICAgICAgICAgUm91dGluZyBkYXRhIGRvZXNuJ3QgbWF0Y2ggYW55IHN0b3JhZ2UgaW4NCj50aGlz IGRyaXZlci4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1GYWtlUm91dGVD b25maWcgKA0KPi0gIElOICBDT05TVCBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgICAq VGhpcywNCj4tICBJTiAgQ09OU1QgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgQ29u ZmlndXJhdGlvbiwNCj4tICBPVVQgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKlByb2dyZXNzDQo+LSAgKQ0KPi17DQo+LSAgaWYgKENvbmZpZ3VyYXRpb24gPT0gTlVMTCB8 fCBQcm9ncmVzcyA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPi0gIH0NCj4tDQo+LSAgKlByb2dyZXNzID0gQ29uZmlndXJhdGlvbjsNCj4tDQo+LSAgcmV0 dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LX0NCj4tDQo+LS8qKg0KPi0gIFRoaXMgZnVuY3Rpb24gaW5p dGlhbGl6ZSB0aGUgZGF0YSBtYWlubHkgdXNlZCBpbiBmb3JtIGJyb3dzZXIuDQo+LQ0KPi0gIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgSW5pdGlhbGl6ZSBmb3JtIGRhdGEgc3VjY2Vzc2Z1 bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgRmFpbCB0byBJbml0aWFsaXpl IGZvcm0gZGF0YS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUluaXRGb3JtQnJvd3NlciAo DQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBT dGF0dXM7DQo+LSAgUFdEX1BST1ZJREVSX0NBTExCQUNLX0lORk8gICpDYWxsYmFja0luZm87DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gSW5pdGlhbGl6ZSBkcml2ZXIgcHJpdmF0ZSBkYXRhLg0KPi0gIC8v DQo+LSAgQ2FsbGJhY2tJbmZvID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChQV0RfUFJPVklE RVJfQ0FMTEJBQ0tfSU5GTykpOw0KPi0gIGlmIChDYWxsYmFja0luZm8gPT0gTlVMTCkgew0KPi0g ICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gIH0NCj4tDQo+LSAgQ2FsbGJhY2tJ bmZvLT5TaWduYXR1cmUgICAgICAgICAgICAgICAgICAgPSBQV0RfUFJPVklERVJfU0lHTkFUVVJF Ow0KPi0gIENhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNzLkV4dHJhY3RDb25maWcgID0gRmFrZUV4 dHJhY3RDb25maWc7DQo+LSAgQ2FsbGJhY2tJbmZvLT5Db25maWdBY2Nlc3MuUm91dGVDb25maWcg ICAgPSBGYWtlUm91dGVDb25maWc7DQo+LSAgQ2FsbGJhY2tJbmZvLT5Db25maWdBY2Nlc3MuQ2Fs bGJhY2sgICAgICAgPSBDcmVkZW50aWFsRHJpdmVyQ2FsbGJhY2s7DQo+LSAgQ2FsbGJhY2tJbmZv LT5Ecml2ZXJIYW5kbGUgID0gTlVMTDsNCj4tDQo+LSAgLy8NCj4tICAvLyBJbnN0YWxsIERldmlj ZSBQYXRoIFByb3RvY29sIGFuZCBDb25maWcgQWNjZXNzIHByb3RvY29sIHRvIGRyaXZlciBoYW5k bGUuDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50 ZXJmYWNlcyAoDQo+LSAgICAgICAgICAgICAgICAgICZDYWxsYmFja0luZm8tPkRyaXZlckhhbmRs ZSwNCj4tICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPi0g ICAgICAgICAgICAgICAgICAmbUhpaVZlbmRvckRldmljZVBhdGgsDQo+LSAgICAgICAgICAgICAg ICAgICZnRWZpSGlpQ29uZmlnQWNjZXNzUHJvdG9jb2xHdWlkLA0KPi0gICAgICAgICAgICAgICAg ICAmQ2FsbGJhY2tJbmZvLT5Db25maWdBY2Nlc3MsDQo+LSAgICAgICAgICAgICAgICAgIE5VTEwN Cj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0K Pi0NCj4tICAvLw0KPi0gIC8vIFB1Ymxpc2ggSElJIGRhdGEuDQo+LSAgLy8NCj4tICBDYWxsYmFj a0luZm8tPkhpaUhhbmRsZSA9IEhpaUFkZFBhY2thZ2VzICgNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmdQd2RDcmVkZW50aWFsUHJvdmlkZXJHdWlkLA0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDYWxsYmFja0luZm8tPkRyaXZlckhhbmRsZSwNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHdkQ3JlZGVudGlhbFByb3ZpZGVyU3RyaW5ncywNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHdkQ3JlZGVudGlhbFByb3ZpZGVyVmZyQmluLA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQo+LSAgaWYgKENhbGxiYWNrSW5mby0+SGlpSGFuZGxlID09IE5VTEwp IHsNCj4tICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9DQo+LSAgbUNhbGxi YWNrSW5mbyA9IENhbGxiYWNrSW5mbzsNCj4tDQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0N Cj4tDQo+LS8qKg0KPi0gIEVucm9sbCBhIHVzZXIgb24gYSBjcmVkZW50aWFsIHByb3ZpZGVyLg0K Pi0NCj4tICBUaGlzIGZ1bmN0aW9uIGVucm9sbHMgYSB1c2VyIG9uIHRoaXMgY3JlZGVudGlhbCBw cm92aWRlci4gSWYgdGhlIHVzZXIgZXhpc3RzIG9uDQo+LSAgdGhpcyBjcmVkZW50aWFsIHByb3Zp ZGVyLCB1cGRhdGUgdGhlIHVzZXIgaW5mb3JtYXRpb24gb24gdGhpcyBjcmVkZW50aWFsDQo+cHJv dmlkZXI7DQo+LSAgb3RoZXJ3aXNlIGFkZCB0aGUgdXNlciBpbmZvcm1hdGlvbiBvbiBjcmVkZW50 aWFsIHByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgICAgICAgUG9p bnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4N Cj4tICBAcGFyYW1baW5dIFVzZXIgICAgICAgICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSB0byBl bnJvbGwuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHByb2Zp bGUgd2FzIHN1Y2Nlc3NmdWxseSBlbnJvbGxlZC4NCj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVO SUVEICAgICAgQ3VycmVudCB1c2VyIHByb2ZpbGUgZG9lcyBub3QgcGVybWl0DQo+ZW5yb2xsbWVu dCBvbiB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBwcm9maWxl IGhhbmRsZS4gRWl0aGVyIHRoZSB1c2VyIHByb2ZpbGUgY2Fubm90IGVucm9sbA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBhbnkgdXNlciBwcm9maWxlIG9yIGNhbm5vdCBl bnJvbGwgb24gYSB1c2VyIHByb2ZpbGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb3RoZXIgdGhhbiB0aGUgY3VycmVudCB1c2VyIHByb2ZpbGUuDQo+LSAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgIFRoaXMgY3JlZGVudGlhbCBwcm92aWRlciBkb2VzIG5vdCBzdXBw b3J0DQo+ZW5yb2xsbWVudCBpbg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGUgcHJlLU9TLg0KPi0gIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICBUaGUgbmV3IGNy ZWRlbnRpYWwgY291bGQgbm90IGJlIGNyZWF0ZWQNCj5iZWNhdXNlIG9mIGEgZGV2aWNlDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLg0KPi0gIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSICBVc2VyIGRvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgdXNlcg0KPnBy b2ZpbGUgaGFuZGxlLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRl bnRpYWxFbnJvbGwgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NP TCAgICAgICAqVGhpcywNCj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAg ICAgICAgICAgVXNlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg U3RhdHVzOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+LSAgUEFTU1dP UkRfSU5GTyAgICAgICAgICAgICBQd2RJbmZvOw0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAg ICAgKlVzZXJJbmZvOw0KPi0gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRbQ1JF REVOVElBTF9MRU5dOw0KPi0gIEVGSV9JTlBVVF9LRVkgICAgICAgICAgICAgS2V5Ow0KPi0gIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgKlVzZXJJZDsNCj4tICBDSEFSMTYgICAgICAgICAgICAg ICAgICAgICpRdWVzdGlvblN0cjsNCj4tICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICpQcm9t cHRTdHI7DQo+LQ0KPi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoVXNlciA9PSBOVUxMKSkgew0K Pi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+ LSAgLy8gR2V0IFVzZXIgSWRlbnRpZmllci4NCj4tICAvLw0KPi0gIFVzZXJJbmZvID0gTlVMTDsN Cj4tICBTdGF0dXMgPSBGaW5kVXNlckluZm9CeVR5cGUgKA0KPi0gICAgICAgICAgICAgVXNlciwN Cj4tICAgICAgICAgICAgIEVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQsDQo+LSAgICAg ICAgICAgICAmVXNlckluZm8NCj4tICAgICAgICAgICAgICk7DQo+LSAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+ LQ0KPi0gIENvcHlNZW0gKFB3ZEluZm8uVXNlcklkLCAoVUlOVDggKikgKFVzZXJJbmZvICsgMSks IHNpemVvZg0KPihFRklfVVNFUl9JTkZPX0lERU5USUZJRVIpKTsNCj4tICBGcmVlUG9vbCAoVXNl ckluZm8pOw0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCBwYXNzd29yZCBmcm9tIHVzZXIuDQo+LSAg Ly8NCj4tICB3aGlsZSAoVFJVRSkgew0KPi0gICAgLy8NCj4tICAgIC8vIElucHV0IHBhc3N3b3Jk Lg0KPi0gICAgLy8NCj4tICAgIEdldFBhc3N3b3JkIChUUlVFLCBQd2RJbmZvLlBhc3N3b3JkKTsN Cj4tDQo+LSAgICAvLw0KPi0gICAgLy8gSW5wdXQgcGFzc3dvcmQgYWdhaW4uDQo+LSAgICAvLw0K Pi0gICAgR2V0UGFzc3dvcmQgKEZBTFNFLCBQYXNzd29yZCk7DQo+LQ0KPi0gICAgLy8NCj4tICAg IC8vIENvbXBhcmUgdGhlIHR3byBwYXNzd29yZCBjb25zaXN0ZW5jeS4NCj4tICAgIC8vDQo+LSAg ICBpZiAoQ29tcGFyZU1lbSAoUHdkSW5mby5QYXNzd29yZCwgUGFzc3dvcmQsIENSRURFTlRJQUxf TEVOKSA9PSAwKSB7DQo+LSAgICAgIGJyZWFrOw0KPi0gICAgfQ0KPi0NCj4tICAgIFF1ZXN0aW9u U3RyID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+KFNUUl9QQVNTV09SRF9NSVNNQVRD SCkpOw0KPi0gICAgUHJvbXB0U3RyICAgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4o U1RSX0lOUFVUX1BBU1NXT1JEX0FHQUlOKSk7DQo+LSAgICBDcmVhdGVQb3BVcCAoDQo+LSAgICAg IEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPi0gICAgICAmS2V5LA0KPi0g ICAgICBRdWVzdGlvblN0ciwNCj4tICAgICAgTCIiLA0KPi0gICAgICBQcm9tcHRTdHIsDQo+LSAg ICAgIE5VTEwNCj4tICAgICAgKTsNCj4tICAgIEZyZWVQb29sIChRdWVzdGlvblN0cik7DQo+LSAg ICBGcmVlUG9vbCAoUHJvbXB0U3RyKTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sg d2hldGhlciBVc2VyIGlzIGV2ZXIgZW5yb2xsZWQgaW4gdGhlIHByb3ZpZGVyLg0KPi0gIC8vDQo+ LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVB3ZFRhYmxlLT5Db3VudDsgSW5kZXgrKykgew0K Pi0gICAgVXNlcklkID0gKFVJTlQ4ICopICZtUHdkVGFibGUtPlVzZXJJbmZvW0luZGV4XS5Vc2Vy SWQ7DQo+LSAgICBpZiAoQ29tcGFyZU1lbSAoVXNlcklkLCAoVUlOVDggKikgJlB3ZEluZm8uVXNl cklkLCBzaXplb2YNCj4oRUZJX1VTRVJfSU5GT19JREVOVElGSUVSKSkgPT0gMCkgew0KPi0gICAg ICAvLw0KPi0gICAgICAvLyBVc2VyIGFscmVhZHkgZXhpc3RzLCB1cGRhdGUgdGhlIHBhc3N3b3Jk Lg0KPi0gICAgICAvLw0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIC8v DQo+LSAgLy8gRW5yb2xsIHRoZSBVc2VyIHRvIHRoZSBwcm92aWRlci4NCj4tICAvLw0KPi0gIFN0 YXR1cyA9IE1vZGlmeVRhYmxlIChJbmRleCwgJlB3ZEluZm8pOw0KPi0gIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4tICAgIHJldHVybiBTdGF0dXM7DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBSZXR1cm5zIHRoZSB1c2VyIGlu dGVyZmFjZSBpbmZvcm1hdGlvbiB1c2VkIGR1cmluZyB1c2VyIGlkZW50aWZpY2F0aW9uLg0KPi0N Cj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZvcm0gdXNl ZCB3aGVuIGludGVyYWN0aW5nDQo+d2l0aCB0aGUNCj4tICB1c2VyIGR1cmluZyB1c2VyIGlkZW50 aWZpY2F0aW9uLiBUaGUgZm9ybSBpcyB0aGUgZmlyc3QgZW5hYmxlZCBmb3JtIGluIHRoZQ0KPmZv cm0tc2V0DQo+LSAgY2xhc3MgRUZJX0hJSV9VU0VSX0NSRURFTlRJQUxfRk9STVNFVF9HVUlEIGlu c3RhbGxlZCBvbiB0aGUgSElJDQo+aGFuZGxlIEhpaUhhbmRsZS4gSWYNCj4tICB0aGUgdXNlciBj cmVkZW50aWFsIHByb3ZpZGVyIGRvZXMgbm90IHJlcXVpcmUgYSBmb3JtIHRvIGlkZW50aWZ5IHRo ZSB1c2VyLA0KPnRoZW4gdGhpcw0KPi0gIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gRUZJX05PVF9G T1VORC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0 YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1b b3V0XSBIaWkgICAgICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFzZSBoYW5kbGUu DQo+LSAgQHBhcmFtW291dF0gRm9ybVNldElkICBPbiByZXR1cm4sIGhvbGRzIHRoZSBpZGVudGlm aWVyIG9mIHRoZSBmb3JtIHNldA0KPndoaWNoIGNvbnRhaW5zDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICB0aGUgZm9ybSB1c2VkIGR1cmluZyB1c2VyIGlkZW50aWZpY2F0aW9uLg0KPi0gIEBw YXJhbVtvdXRdIEZvcm1JZCAgICAgT24gcmV0dXJuLCBob2xkcyB0aGUgaWRlbnRpZmllciBvZiB0 aGUgZm9ybSB1c2VkDQo+ZHVyaW5nIHVzZXINCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGlk ZW50aWZpY2F0aW9uLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgRm9y bSByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAg ICAgIEZvcm0gbm90IHJldHVybmVkLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS ICBIaWkgaXMgTlVMTCBvciBGb3JtU2V0SWQgaXMgTlVMTCBvcg0KPkZvcm1JZCBpcyBOVUxMLg0K Pi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxGb3JtICgNCj4t ICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+ LSAgT1VUICAgICAgIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgICAgICpIaWksDQo+ LSAgT1VUICAgICAgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICpGb3JtU2V0 SWQsDQo+LSAgT1VUICAgICAgIEVGSV9GT1JNX0lEICAgICAgICAgICAgICAgICAgICAgICAgICpG b3JtSWQNCj4tICApDQo+LXsNCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKEhpaSA9PSBOVUxM KSB8fA0KPi0gICAgICAoRm9ybVNldElkID09IE5VTEwpIHx8IChGb3JtSWQgPT0gTlVMTCkpIHsN Cj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICAqSGlp ICAgICAgID0gbUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlOw0KPi0gICpGb3JtSWQgICAgPSBGT1JN SURfR0VUX1BBU1NXT1JEX0ZPUk07DQo+LSAgQ29weUd1aWQgKEZvcm1TZXRJZCwgJmdQd2RDcmVk ZW50aWFsUHJvdmlkZXJHdWlkKTsNCj4tDQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+ LQ0KPi0NCj4tLyoqDQo+LSAgUmV0dXJucyBiaXRtYXAgdXNlZCB0byBkZXNjcmliZSB0aGUgY3Jl ZGVudGlhbCBwcm92aWRlciB0eXBlLg0KPi0NCj4tICBUaGlzIG9wdGlvbmFsIGZ1bmN0aW9uIHJl dHVybnMgYSBiaXRtYXAgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlDQo+bnVtYmVy DQo+LSAgb2YgcGl4ZWxzIHNwZWNpZmllZCBieSBXaWR0aCBhbmQgSGVpZ2h0LiBJZiBubyBzdWNo IGJpdG1hcCBleGlzdHMsIHRoZW4NCj5FRklfTk9UX0ZPVU5EDQo+LSAgaXMgcmV0dXJuZWQuDQo+ LQ0KPi0gIEBwYXJhbVtpbl0gICAgICBUaGlzICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9m IHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbiwgb3V0 XSBXaWR0aCAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIGRlc2lyZWQgYml0bWFwIHdpZHRoLiBJ Zg0KPk5VTEwgdGhlbiBubw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBpbmZv cm1hdGlvbiB3aWxsIGJlIHJldHVybmVkLiBPbiBleGl0LCBwb2ludHMgdG8gdGhlDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgd2lkdGggb2YgdGhlIGJpdG1hcCByZXR1cm5lZC4NCj4tICBA cGFyYW1baW4sIG91dF0gSGVpZ2h0ICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBkZXNpcmVkIGJp dG1hcCBoZWlnaHQuIElmDQo+TlVMTCB0aGVuIG5vDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgYml0bWFwIGluZm9ybWF0aW9uIHdpbGwgYmUgcmV0dXJuZWQuIE9uIGV4aXQsIHBvaW50cyB0 byB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgb2YgdGhlIGJpdG1hcCBy ZXR1cm5lZA0KPi0gIEBwYXJhbVtvdXRdICAgICBIaWkgICAgIE9uIHJldHVybiwgaG9sZHMgdGhl IEhJSSBkYXRhYmFzZSBoYW5kbGUuDQo+LSAgQHBhcmFtW291dF0gICAgIEltYWdlICAgT24gcmV0 dXJuLCBob2xkcyB0aGUgSElJIGltYWdlIGlkZW50aWZpZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICBJbWFnZSBpZGVudGlmaWVyIHJldHVybmVkIHN1Y2Nlc3NmdWxs eS4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgSW1hZ2UgaWRlbnRpZmllciBu b3QgcmV0dXJuZWQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEhpaSBpcyBO VUxMIG9yIEltYWdlIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkN Cj4tQ3JlZGVudGlhbFRpbGUgKA0KPi0gIElOICBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJf UFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqV2lkdGgsDQo+LSAgSU4gIE9VVCAgICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqSGVpZ2h0LA0KPi0gICAgICBPVVQgICAgRUZJX0hJSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgICAgKkhpaSwNCj4tICAgICAgT1VUICAgIEVGSV9JTUFHRV9J RCAgICAgICAgICAgICAgICAgICAgICAgICpJbWFnZQ0KPi0gICkNCj4tew0KPi0gIGlmICgoVGhp cyA9PSBOVUxMKSB8fCAoSGlpID09IE5VTEwpIHx8IChJbWFnZSA9PSBOVUxMKSkgew0KPi0gICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9OT1Rf Rk9VTkQ7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBSZXR1cm5zIHN0cmluZyB1c2VkIHRvIGRl c2NyaWJlIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIHR5cGUuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rp b24gcmV0dXJucyBhIHN0cmluZyB3aGljaCBkZXNjcmliZXMgdGhlIGNyZWRlbnRpYWwgcHJvdmlk ZXIuIElmIG5vDQo+LSAgc3VjaCBzdHJpbmcgZXhpc3RzLCB0aGVuIEVGSV9OT1RfRk9VTkQgaXMg cmV0dXJuZWQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgUG9pbnRzIHRvIHRoaXMg aW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBh cmFtW291dF0gSGlpICAgICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgZGF0YWJhc2UgaGFu ZGxlLg0KPi0gIEBwYXJhbVtvdXRdIFN0cmluZyAgICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJ IHN0cmluZyBpZGVudGlmaWVyLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICAgU3RyaW5nIGlkZW50aWZpZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwg RUZJX05PVF9GT1VORCAgICAgICAgICBTdHJpbmcgaWRlbnRpZmllciBub3QgcmV0dXJuZWQuDQo+ LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEhpaSBpcyBOVUxMIG9yIFN0cmluZyBp cyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxU aXRsZSAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAg ICpUaGlzLA0KPi0gIE9VVCAgICAgICBFRklfSElJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAg ICAqSGlpLA0KPi0gIE9VVCAgICAgICBFRklfU1RSSU5HX0lEICAgICAgICAgICAgICAgICAgICAg ICAqU3RyaW5nDQo+LSAgKQ0KPi17DQo+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChIaWkgPT0g TlVMTCkgfHwgKFN0cmluZyA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2V0IEhpaSBoYW5kbGUgYW5kIFN0 cmluZyBJRC4NCj4tICAvLw0KPi0gICpIaWkgICAgPSBtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGU7 DQo+LSAgKlN0cmluZyA9IFNUUklOR19UT0tFTiAoU1RSX0NSRURFTlRJQUxfVElUTEUpOw0KPi0N Cj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBSZXR1cm4g dGhlIHVzZXIgaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnRseSBhdXRoZW50 aWNhdGVkIHVzZXIuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdXNlciBpZGVu dGlmaWVyIG9mIHRoZSB1c2VyIGF1dGhlbnRpY2F0ZWQgYnkgdGhpcw0KPmNyZWRlbnRpYWwNCj4t ICBwcm92aWRlci4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwt cmVsYXRlZCBpbmZvcm1hdGlvbiBoYXMNCj5iZWVuDQo+LSAgc3VibWl0dGVkIG9uIGEgZm9ybSwg T1IgYWZ0ZXIgYSBjYWxsIHRvIERlZmF1bHQoKSBoYXMgcmV0dXJuZWQgdGhhdCB0aGlzDQo+Y3Jl ZGVudGlhbCBpcw0KPi0gIHJlYWR5IHRvIGxvZyBvbi4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhp cyAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JF REVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgICAgVGhlIHVz ZXIgcHJvZmlsZSBoYW5kbGUgb2YgdGhlIHVzZXIgcHJvZmlsZSBjdXJyZW50bHkNCj5iZWluZw0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyZWQgYnkgdGhlIHVzZXIgaWRl bnRpdHkgbWFuYWdlci4gSWYgTlVMTCwgdGhlbiBubyB1c2VyDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJvZmlsZSBpcyBjdXJyZW50bHkgdW5kZXIgY29uc2lkZXJhdGlvbi4NCj4t ICBAcGFyYW1bb3V0XSBJZGVudGlmaWVyICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgdXNl ciBpZGVudGlmaWVyLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNl ciBpZGVudGlmaWVyIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVGSV9OT1Rf UkVBRFkgICAgICAgICAgTm8gdXNlciBpZGVudGlmaWVyIGNhbiBiZSByZXR1cm5lZC4NCj4tICBA cmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgVGhlIHVzZXIgaGFzIGJlZW4gbG9ja2VkIG91 dCBvZiB0aGlzIHVzZXINCj5jcmVkZW50aWFsLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSICBUaGlzIGlzIE5VTEwsIG9yIElkZW50aWZpZXIgaXMgTlVMTC4NCj4tICBAcmV0dmFs IEVGSV9OT1RfRk9VTkQgICAgICAgICAgVXNlciBpcyBub3QgTlVMTCwgYW5kIHRoZSBzcGVjaWZp ZWQgdXNlcg0KPmhhbmRsZSBjYW4ndCBiZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmb3VuZCBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2UNCj4tDQo+LSoqLw0KPi1FRklfU1RB VFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsVXNlciAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VS X0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIElOICAgICAgICBFRklfVVNF Ul9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyLA0KPi0gIE9VVCAgICAgICBFRklfVVNF Ul9JTkZPX0lERU5USUZJRVIgICAgICAgICAgICAqSWRlbnRpZmllcg0KPi0gICkNCj4tew0KPi0g IEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPi0gIFVJTlROICAgICAgICAgSW5kZXg7DQo+LSAgRUZJ X1VTRVJfSU5GTyAqVXNlckluZm87DQo+LSAgVUlOVDggICAgICAgICAqVXNlcklkOw0KPi0gIFVJ TlQ4ICAgICAgICAgKk5ld1VzZXJJZDsNCj4tICBDSEFSOCAgICAgICAgICpQd2Q7DQo+LSAgQ0hB UjggICAgICAgICAqTmV3UHdkOw0KPi0NCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKElkZW50 aWZpZXIgPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ LSAgfQ0KPi0NCj4tICBpZiAobVB3ZFRhYmxlLT5WYWxpZEluZGV4ID09IDApIHsNCj4tICAgIC8v DQo+LSAgICAvLyBObyBwYXNzd29yZCBpbnB1dCwgb3IgdGhlIGlucHV0IHBhc3N3b3JkIGRvZXNu J3QgbWF0Y2gNCj4tICAgIC8vIGFueW9uZSBpbiBQd2RUYWJsZS4NCj4tICAgIC8vDQo+LSAgICBy ZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4tICB9DQo+LQ0KPi0gIGlmIChVc2VyID09IE5VTEwpIHsN Cj4tICAgIC8vDQo+LSAgICAvLyBSZXR1cm4gdGhlIHVzZXIgSUQgd2hvc2UgcGFzc3dvcmQgbWF0 Y2hlcyB0aGUgaW5wdXQgcGFzc3dvcmQuDQo+LSAgICAvLw0KPi0gICAgQ29weU1lbSAoDQo+LSAg ICAgIElkZW50aWZpZXIsDQo+LSAgICAgICZtUHdkVGFibGUtPlVzZXJJbmZvW21Qd2RUYWJsZS0+ VmFsaWRJbmRleCAtIDFdLlVzZXJJZCwNCj4tICAgICAgc2l6ZW9mIChFRklfVVNFUl9JTkZPX0lE RU5USUZJRVIpDQo+LSAgICAgICk7DQo+LSAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgfQ0K Pi0NCj4tICAvLw0KPi0gIC8vIEdldCB0aGUgVXNlcidzIElELg0KPi0gIC8vDQo+LSAgU3RhdHVz ID0gRmluZFVzZXJJbmZvQnlUeXBlICgNCj4tICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAgICAg ICAgICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JELA0KPi0gICAgICAgICAgICAgJlVz ZXJJbmZvDQo+LSAgICAgICAgICAgICApOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4tICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBD aGVjayB3aGV0aGVyIHRoZSBpbnB1dCBwYXNzd29yZCBtYXRjaGVzIG9uZSBpbiBQd2RUYWJsZS4N Cj4tICAvLw0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qd2RUYWJsZS0+Q291bnQ7IElu ZGV4KyspIHsNCj4tICAgIFVzZXJJZCAgICA9IChVSU5UOCAqKSAmbVB3ZFRhYmxlLT5Vc2VySW5m b1tJbmRleF0uVXNlcklkOw0KPi0gICAgTmV3VXNlcklkID0gKFVJTlQ4ICopIChVc2VySW5mbyAr IDEpOw0KPi0gICAgaWYgKENvbXBhcmVNZW0gKFVzZXJJZCwgTmV3VXNlcklkLCBzaXplb2YgKEVG SV9VU0VSX0lORk9fSURFTlRJRklFUikpDQo+PT0gMCkgew0KPi0gICAgICBQd2QgICAgPSBtUHdk VGFibGUtPlVzZXJJbmZvW0luZGV4XS5QYXNzd29yZDsNCj4tICAgICAgTmV3UHdkID0gbVB3ZFRh YmxlLT5Vc2VySW5mb1ttUHdkVGFibGUtPlZhbGlkSW5kZXggLSAxXS5QYXNzd29yZDsNCj4tICAg ICAgaWYgKENvbXBhcmVNZW0gKFB3ZCwgTmV3UHdkLCBDUkVERU5USUFMX0xFTikgPT0gMCkgew0K Pi0gICAgICAgIENvcHlNZW0gKElkZW50aWZpZXIsIFVzZXJJZCwgc2l6ZW9mIChFRklfVVNFUl9J TkZPX0lERU5USUZJRVIpKTsNCj4tICAgICAgICBGcmVlUG9vbCAoVXNlckluZm8pOw0KPi0gICAg ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICAgICAgfQ0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+ LSAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4tICByZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4tfQ0K Pi0NCj4tDQo+LS8qKg0KPi0gIEluZGljYXRlIHRoYXQgdXNlciBpbnRlcmZhY2UgaW50ZXJhY3Rp b24gaGFzIGJlZ3VuIGZvciB0aGUgc3BlY2lmaWVkDQo+Y3JlZGVudGlhbC4NCj4tDQo+LSAgVGhp cyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgaXMgc2VsZWN0 ZWQgYnkgdGhlIHVzZXIuIElmDQo+LSAgQXV0b0xvZ29uIHJldHVybnMgRkFMU0UsIHRoZW4gdGhl IHVzZXIgaW50ZXJmYWNlIHdpbGwgYmUgY29uc3RydWN0ZWQgYnkgdGhlDQo+VXNlcg0KPi0gIElk ZW50aXR5IE1hbmFnZXIuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgUG9pbnRzIHRv IHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+ LSAgQHBhcmFtW291dF0gQXV0b0xvZ29uICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgY3JlZGVu dGlhbCBwcm92aWRlcidzDQo+Y2FwYWJpbGl0aWVzDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICBhZnRlciB0aGUgY3JlZGVudGlhbCBwcm92aWRlciBoYXMgYmVlbiBzZWxlY3RlZCBieSB0aGUg dXNlci4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIENyZWRlbnRpYWwg cHJvdmlkZXIgc3VjY2Vzc2Z1bGx5IHNlbGVjdGVkLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICBBdXRvTG9nb24gaXMgTlVMTC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+ LUVGSUFQSQ0KPi1DcmVkZW50aWFsU2VsZWN0ICgNCj4tICBJTiAgQ09OU1QgIEVGSV9VU0VSX0NS RURFTlRJQUwyX1BST1RPQ09MICAgKlRoaXMsDQo+LSAgT1VUICAgICAgICBFRklfQ1JFREVOVElB TF9MT0dPTl9GTEFHUyAgICAgICpBdXRvTG9nb24NCj4tICApDQo+LXsNCj4tICBpZiAoKFRoaXMg PT0gTlVMTCkgfHwgKEF1dG9Mb2dvbiA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LSAgKkF1dG9Mb2dvbiA9IDA7DQo+LQ0KPi0gIHJldHVy biBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEluZGljYXRlIHRoYXQgdXNl ciBpbnRlcmZhY2UgaW50ZXJhY3Rpb24gaGFzIGVuZGVkIGZvciB0aGUgc3BlY2lmaWVkDQo+Y3Jl ZGVudGlhbC4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGNyZWRlbnRp YWwgcHJvdmlkZXIgaXMgZGVzZWxlY3RlZCBieSB0aGUgdXNlci4NCj4tDQo+LSAgQHBhcmFtW2lu XSBUaGlzICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9D UkVERU5USUFMMl9QUk9UT0NPTC4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBDcmVk ZW50aWFsIHByb3ZpZGVyIHN1Y2Nlc3NmdWxseSBkZXNlbGVjdGVkLg0KPi0NCj4tKiovDQo+LUVG SV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxEZXNlbGVjdCAoDQo+LSAgSU4gQ09OU1Qg IEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzDQo+LSAgKQ0KPi17DQo+ LSAgaWYgKFRoaXMgPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+ LSAgUmV0dXJuIHRoZSBkZWZhdWx0IGxvZ29uIGJlaGF2aW9yIGZvciB0aGlzIHVzZXIgY3JlZGVu dGlhbC4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXBvcnRzIHRoZSBkZWZhdWx0IGxvZ2luIGJl aGF2aW9yIHJlZ2FyZGluZyB0aGlzIGNyZWRlbnRpYWwNCj5wcm92aWRlci4NCj4tDQo+LSAgQHBh cmFtW2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklf VVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1bb3V0XSBBdXRvTG9nb24gIE9u IHJldHVybiwgaG9sZHMgd2hldGhlciB0aGUgY3JlZGVudGlhbCBwcm92aWRlcg0KPnNob3VsZCBi ZSB1c2VkDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBieSBkZWZhdWx0IHRvIGF1dG9tYXRp Y2FsbHkgbG9nIG9uIHRoZSB1c2VyLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgRGVmYXVsdCBpbmZvcm1hdGlvbiBzdWNjZXNzZnVsbHkgcmV0dXJuZWQuDQo+LSAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEF1dG9Mb2dvbiBpcyBOVUxMLg0KPi0NCj4tKiov DQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxEZWZhdWx0ICgNCj4tICBJTiBD T05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgT1VU ICAgICAgIEVGSV9DUkVERU5USUFMX0xPR09OX0ZMQUdTICAgICAgICAgICpBdXRvTG9nb24NCj4t ICApDQo+LXsNCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKEF1dG9Mb2dvbiA9PSBOVUxMKSkg ew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LSAgKkF1dG9M b2dvbiA9IDA7DQo+LQ0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8q Kg0KPi0gIFJldHVybiBpbmZvcm1hdGlvbiBhdHRhY2hlZCB0byB0aGUgY3JlZGVudGlhbCBwcm92 aWRlci4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHVzZXIgaW5mb3JtYXRpb24uDQo+ LQ0KPi0gIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3Rh bmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtp bl0gICAgICBVc2VySW5mbyAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbiBkYXRh IHJlY29yZC4NCj4tICBAcGFyYW1bb3V0XSAgICAgSW5mbyAgICAgICAgICBPbiBlbnRyeSwgcG9p bnRzIHRvIGEgYnVmZmVyIG9mIGF0IGxlYXN0ICpJbmZvU2l6ZQ0KPmJ5dGVzLiBPbg0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQsIGhvbGRzIHRoZSB1c2VyIGluZm9ybWF0 aW9uLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRvIGhvbGQgdGhlIGluZm9ybWF0aW9uLCB0aGVuIEVGSV9CVUZGRVJfVE9PX1NN QUxMIGlzDQo+cmV0dXJuZWQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQg SW5mb1NpemUgaXMgdXBkYXRlZCB0byBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMNCj5hY3R1 YWxseQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkLg0KPi0gIEBw YXJhbVtpbiwgb3V0XSBJbmZvU2l6ZSAgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHNpemUg b2YgSW5mby4gT24gcmV0dXJuLA0KPnBvaW50cyB0byB0aGUNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBJbmZvcm1hdGlvbiByZXR1cm5lZCBzdWNjZXNzZnVs bHkuDQo+LSAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgVGhlIHNpemUgc3BlY2lmaWVk IGJ5IEluZm9TaXplIGlzIHRvbyBzbWFsbA0KPnRvIGhvbGQgYWxsIG9mIHRoZQ0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgaW5mb3JtYXRpb24uIFRoZSBzaXplIHJlcXVp cmVkIGlzIHJldHVybmVkIGluICpJbmZvU2l6ZS4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBJbmZvIGlzIE5VTEwgb3IgSW5mb1NpemUgaXMgTlVMTC4NCj4tICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgICAgICAgICBUaGUgc3BlY2lmaWVkIFVzZXJJbmZvIGRvZXMgbm90IHJlZmVy IHRvIGENCj52YWxpZCB1c2VyIGluZm8gaGFuZGxlLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMN Cj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxHZXRJbmZvICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJf Q1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VS X0lORk9fSEFORExFICAgICAgICAgICAgICAgIFVzZXJJbmZvLA0KPi0gIE9VVCAgICAgICBFRklf VVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAqSW5mbywNCj4tICBJTiBPVVQgICAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkluZm9TaXplDQo+LSAgKQ0KPi17DQo+ LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICpDcmVkZW50aWFsSW5mbzsNCj4tICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+LQ0KPi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAo SW5mb1NpemUgPT0gTlVMTCkgfHwgKEluZm8gPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICBpZiAoKFVzZXJJbmZvID09IE5VTEwp IHx8IChtUHdkSW5mb0hhbmRsZSA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9OT1RfRk9V TkQ7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEZpbmQgaW5mb3JtYXRpb24gaGFuZGxlIGlu IGNyZWRlbnRpYWwgaW5mbyB0YWJsZS4NCj4tICAvLw0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IG1Qd2RJbmZvSGFuZGxlLT5Db3VudDsgSW5kZXgrKykgew0KPi0gICAgQ3JlZGVudGlhbElu Zm8gPSBtUHdkSW5mb0hhbmRsZS0+SW5mb1tJbmRleF07DQo+LSAgICBpZiAoVXNlckluZm8gPT0g KEVGSV9VU0VSX0lORk9fSEFORExFKUNyZWRlbnRpYWxJbmZvKSB7DQo+LSAgICAgIC8vDQo+LSAg ICAgIC8vIFRoZSBoYW5kbGUgaXMgZm91bmQsIGNvcHkgdGhlIHVzZXIgaW5mby4NCj4tICAgICAg Ly8NCj4tICAgICAgaWYgKENyZWRlbnRpYWxJbmZvLT5JbmZvU2l6ZSA+ICpJbmZvU2l6ZSkgew0K Pi0gICAgICAgICpJbmZvU2l6ZSA9IENyZWRlbnRpYWxJbmZvLT5JbmZvU2l6ZTsNCj4tICAgICAg ICByZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+LSAgICAgIH0NCj4tICAgICAgQ29weU1l bSAoSW5mbywgQ3JlZGVudGlhbEluZm8sIENyZWRlbnRpYWxJbmZvLT5JbmZvU2l6ZSk7DQo+LSAg ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIHJldHVybiBF RklfTk9UX0ZPVU5EOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRW51bWVyYXRlIGFsbCBvZiB0 aGUgdXNlciBpbmZvcm1hdGlvbnMgb24gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LQ0KPi0g IFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV4dCB1c2VyIGluZm9ybWF0aW9uIHJlY29yZC4g VG8gcmV0cmlldmUgdGhlIGZpcnN0DQo+dXNlcg0KPi0gIGluZm9ybWF0aW9uIHJlY29yZCBoYW5k bGUsIHBvaW50IFVzZXJJbmZvIGF0IGEgTlVMTC4gRWFjaCBzdWJzZXF1ZW50IGNhbGwNCj53aWxs IHJldHJpZXZlDQo+LSAgYW5vdGhlciB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBoYW5kbGUgdW50 aWwgdGhlcmUgYXJlIG5vIG1vcmUsIGF0IHdoaWNoDQo+cG9pbnQgVXNlckluZm8NCj4tICB3aWxs IHBvaW50IHRvIE5VTEwuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICBQb2ludHMg dG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4N Cj4tICBAcGFyYW1baW4sIG91dF0gVXNlckluZm8gT24gZW50cnksIHBvaW50cyB0byB0aGUgcHJl dmlvdXMgdXNlciBpbmZvcm1hdGlvbg0KPmhhbmRsZSBvciBOVUxMDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRvIHN0YXJ0IGVudW1lcmF0aW9uLiBPbiBleGl0LCBwb2ludHMgdG8gdGhl IG5leHQgdXNlcg0KPmluZm9ybWF0aW9uDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh bmRsZSBvciBOVUxMIGlmIHRoZXJlIGlzIG5vIG1vcmUgdXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+ LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFVzZXIgaW5mb3JtYXRpb24gcmV0dXJu ZWQuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIE5vIG1vcmUgdXNlciBpbmZv cm1hdGlvbiBmb3VuZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNlcklu Zm8gaXMgTlVMTC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50 aWFsR2V0TmV4dEluZm8gKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9U T0NPTCAgICAgICAqVGhpcywNCj4tICBJTiBPVVQgICAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAg ICAgICAgICAgICAgKlVzZXJJbmZvDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAg ICAgICAgICpJbmZvOw0KPi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAqUHJvdk5hbWVTdHI7 DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgIEluZm9MZW47DQo+LSAgVUlOVE4gICAgICAg ICAgICAgICAgICAgIEluZGV4Ow0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICBQcm92U3Ry TGVuOw0KPi0NCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFVzZXJJbmZvID09IE5VTEwpKSB7 DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgaWYg KG1Qd2RJbmZvSGFuZGxlID09IE5VTEwpIHsNCj4tICAgIC8vDQo+LSAgICAvLyBJbml0aWxpemVk IHVzZXIgaW5mbyB0YWJsZS4gVGhlcmUgYXJlIDQgdXNlciBpbmZvIHJlY29yZHMgaW4gdGhlIHRh YmxlLg0KPi0gICAgLy8NCj4tICAgIEluZm9MZW4gID0gc2l6ZW9mIChQQVNTV09SRF9DUkVERU5U SUFMX0lORk8pICsgKDQgLSAxKSAqIHNpemVvZg0KPihFRklfVVNFUl9JTkZPICopOw0KPi0gICAg bVB3ZEluZm9IYW5kbGUgPSBBbGxvY2F0ZVplcm9Qb29sIChJbmZvTGVuKTsNCj4tICAgIGlmICht UHdkSW5mb0hhbmRsZSA9PSBOVUxMKSB7DQo+LSAgICAgICpVc2VySW5mbyA9IE5VTEw7DQo+LSAg ICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi0gICAgfQ0KPi0NCj4tICAgIC8vDQo+LSAgICAv LyBUaGUgZmlyc3QgaW5mb3JtYXRpb24sIENyZWRlbnRpYWwgUHJvdmlkZXIgaW5mby4NCj4tICAg IC8vDQo+LSAgICBJbmZvTGVuID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZiAoRUZJ X0dVSUQpOw0KPi0gICAgSW5mbyAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKEluZm9MZW4pOw0KPi0g ICAgQVNTRVJUIChJbmZvICE9IE5VTEwpOw0KPi0NCj4tICAgIEluZm8tPkluZm9UeXBlICAgID0g RUZJX1VTRVJfSU5GT19DUkVERU5USUFMX1BST1ZJREVSX1JFQ09SRDsNCj4tICAgIEluZm8tPklu Zm9TaXplICAgID0gKFVJTlQzMikgSW5mb0xlbjsNCj4tICAgIEluZm8tPkluZm9BdHRyaWJzID0g RUZJX1VTRVJfSU5GT19QUk9URUNURUQ7DQo+LSAgICBDb3B5R3VpZCAoJkluZm8tPkNyZWRlbnRp YWwsICZnUHdkQ3JlZGVudGlhbFByb3ZpZGVyR3VpZCk7DQo+LSAgICBDb3B5R3VpZCAoKEVGSV9H VUlEICopKEluZm8gKyAxKSwgJmdQd2RDcmVkZW50aWFsUHJvdmlkZXJHdWlkKTsNCj4tDQo+LSAg ICBtUHdkSW5mb0hhbmRsZS0+SW5mb1swXSA9IEluZm87DQo+LSAgICBtUHdkSW5mb0hhbmRsZS0+ Q291bnQrKzsNCj4tDQo+LSAgICAvLw0KPi0gICAgLy8gVGhlIHNlY29uZCBpbmZvcm1hdGlvbiwg Q3JlZGVudGlhbCBQcm92aWRlciBuYW1lIGluZm8uDQo+LSAgICAvLw0KPi0gICAgUHJvdk5hbWVT dHIgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4gKFNUUl9QUk9WSURFUl9OQU1FKSk7DQo+ LSAgICBQcm92U3RyTGVuICA9IFN0clNpemUgKFByb3ZOYW1lU3RyKTsNCj4tICAgIEluZm9MZW4g ICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIFByb3ZTdHJMZW47DQo+LSAgICBJbmZvICAg ICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKEluZm9MZW4pOw0KPi0gICAgQVNTRVJUIChJbmZvICE9 IE5VTEwpOw0KPi0NCj4tICAgIEluZm8tPkluZm9UeXBlICAgID0NCj5FRklfVVNFUl9JTkZPX0NS RURFTlRJQUxfUFJPVklERVJfTkFNRV9SRUNPUkQ7DQo+LSAgICBJbmZvLT5JbmZvU2l6ZSAgICA9 IChVSU5UMzIpIEluZm9MZW47DQo+LSAgICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lO Rk9fUFJPVEVDVEVEOw0KPi0gICAgQ29weUd1aWQgKCZJbmZvLT5DcmVkZW50aWFsLCAmZ1B3ZENy ZWRlbnRpYWxQcm92aWRlckd1aWQpOw0KPi0gICAgQ29weU1lbSAoKFVJTlQ4KikoSW5mbyArIDEp LCBQcm92TmFtZVN0ciwgUHJvdlN0ckxlbik7DQo+LSAgICBGcmVlUG9vbCAoUHJvdk5hbWVTdHIp Ow0KPi0NCj4tICAgIG1Qd2RJbmZvSGFuZGxlLT5JbmZvWzFdID0gSW5mbzsNCj4tICAgIG1Qd2RJ bmZvSGFuZGxlLT5Db3VudCsrOw0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBUaGUgdGhpcmQgaW5m b3JtYXRpb24sIENyZWRlbnRpYWwgUHJvdmlkZXIgdHlwZSBpbmZvLg0KPi0gICAgLy8NCj4tICAg IEluZm9MZW4gPSBzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgc2l6ZW9mIChFRklfR1VJRCk7DQo+ LSAgICBJbmZvICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoSW5mb0xlbik7DQo+LSAgICBBU1NFUlQg KEluZm8gIT0gTlVMTCk7DQo+LQ0KPi0gICAgSW5mby0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9J TkZPX0NSRURFTlRJQUxfVFlQRV9SRUNPUkQ7DQo+LSAgICBJbmZvLT5JbmZvU2l6ZSAgICA9IChV SU5UMzIpIEluZm9MZW47DQo+LSAgICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9f UFJPVEVDVEVEOw0KPi0gICAgQ29weUd1aWQgKCZJbmZvLT5DcmVkZW50aWFsLCAmZ1B3ZENyZWRl bnRpYWxQcm92aWRlckd1aWQpOw0KPi0gICAgQ29weUd1aWQgKChFRklfR1VJRCAqKShJbmZvICsg MSksICZnRWZpVXNlckNyZWRlbnRpYWxDbGFzc1Bhc3N3b3JkR3VpZCk7DQo+LQ0KPi0gICAgbVB3 ZEluZm9IYW5kbGUtPkluZm9bMl0gPSBJbmZvOw0KPi0gICAgbVB3ZEluZm9IYW5kbGUtPkNvdW50 Kys7DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIFRoZSBmb3VydGggaW5mb3JtYXRpb24sIENyZWRl bnRpYWwgUHJvdmlkZXIgdHlwZSBuYW1lIGluZm8uDQo+LSAgICAvLw0KPi0gICAgUHJvdk5hbWVT dHIgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4oU1RSX1BST1ZJREVSX1RZUEVfTkFN RSkpOw0KPi0gICAgUHJvdlN0ckxlbiAgPSBTdHJTaXplIChQcm92TmFtZVN0cik7DQo+LSAgICBJ bmZvTGVuICAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBQcm92U3RyTGVuOw0KPi0gICAg SW5mbyAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChJbmZvTGVuKTsNCj4tICAgIEFTU0VSVCAo SW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAgICBJbmZvLT5JbmZvVHlwZSAgICA9DQo+RUZJX1VTRVJf SU5GT19DUkVERU5USUFMX1BST1ZJREVSX05BTUVfUkVDT1JEOw0KPi0gICAgSW5mby0+SW5mb1Np emUgICAgPSAoVUlOVDMyKSBJbmZvTGVuOw0KPi0gICAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklf VVNFUl9JTkZPX1BST1RFQ1RFRDsNCj4tICAgIENvcHlHdWlkICgmSW5mby0+Q3JlZGVudGlhbCwg JmdQd2RDcmVkZW50aWFsUHJvdmlkZXJHdWlkKTsNCj4tICAgIENvcHlNZW0gKChVSU5UOCopKElu Zm8gKyAxKSwgUHJvdk5hbWVTdHIsIFByb3ZTdHJMZW4pOw0KPi0gICAgRnJlZVBvb2wgKFByb3ZO YW1lU3RyKTsNCj4tDQo+LSAgICBtUHdkSW5mb0hhbmRsZS0+SW5mb1szXSA9IEluZm87DQo+LSAg ICBtUHdkSW5mb0hhbmRsZS0+Q291bnQrKzsNCj4tICB9DQo+LQ0KPi0gIGlmICgqVXNlckluZm8g PT0gTlVMTCkgew0KPi0gICAgLy8NCj4tICAgIC8vIFJldHVybiB0aGUgZmlyc3QgaW5mbyBoYW5k bGUuDQo+LSAgICAvLw0KPi0gICAgKlVzZXJJbmZvID0gKEVGSV9VU0VSX0lORk9fSEFORExFKSBt UHdkSW5mb0hhbmRsZS0+SW5mb1swXTsNCj4tICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICB9 DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRmluZCBpbmZvcm1hdGlvbiBoYW5kbGUgaW4gY3JlZGVudGlh bCBpbmZvIHRhYmxlLg0KPi0gIC8vDQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVB3ZElu Zm9IYW5kbGUtPkNvdW50OyBJbmRleCsrKSB7DQo+LSAgICBJbmZvID0gbVB3ZEluZm9IYW5kbGUt PkluZm9bSW5kZXhdOw0KPi0gICAgaWYgKCpVc2VySW5mbyA9PSAoRUZJX1VTRVJfSU5GT19IQU5E TEUpSW5mbykgew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBUaGUgaGFuZGxlIGlzIGZvdW5kLCBn ZXQgdGhlIG5leHQgb25lLg0KPi0gICAgICAvLw0KPi0gICAgICBpZiAoSW5kZXggPT0gbVB3ZElu Zm9IYW5kbGUtPkNvdW50IC0gMSkgew0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gQWxyZWFk eSBsYXN0IG9uZS4NCj4tICAgICAgICAvLw0KPi0gICAgICAgICpVc2VySW5mbyA9IE5VTEw7DQo+ LSAgICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIElu ZGV4Kys7DQo+LSAgICAgICpVc2VySW5mbyA9IChFRklfVVNFUl9JTkZPX0hBTkRMRSltUHdkSW5m b0hhbmRsZS0+SW5mb1tJbmRleF07DQo+LSAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICAg IH0NCj4tICB9DQo+LQ0KPi0gICpVc2VySW5mbyA9IE5VTEw7DQo+LSAgcmV0dXJuIEVGSV9OT1Rf Rk9VTkQ7DQo+LX0NCj4tDQo+LS8qKg0KPi0gIERlbGV0ZSBhIHVzZXIgb24gdGhpcyBjcmVkZW50 aWFsIHByb3ZpZGVyLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYSB1c2VyIG9uIHRo aXMgY3JlZGVudGlhbCBwcm92aWRlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAgVGhpcyAgICAg ICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJ QUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbl0gICAgIFVzZXIgICAgICAgICAgICBUaGUgdXNl ciBwcm9maWxlIGhhbmRsZSB0byBkZWxldGUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLg0KPi0gIEBy ZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBDdXJyZW50IHVzZXIgcHJvZmlsZSBkb2VzIG5v dCBwZXJtaXQNCj5kZWxldGlvbiBvbiB0aGUgdXNlciBwcm9maWxlIGhhbmRsZS4NCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWl0aGVyIHRoZSB1c2VyIHByb2ZpbGUgY2Fubm90 IGRlbGV0ZSBvbiBhbnkgdXNlciBwcm9maWxlIG9yDQo+Y2Fubm90IGRlbGV0ZQ0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBhIHVzZXIgcHJvZmlsZSBvdGhlciB0aGFuIHRo ZSBjdXJyZW50IHVzZXIgcHJvZmlsZS4NCj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAg ICAgVGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyIGRvZXMgbm90IHN1cHBvcnQNCj5kZWxldGlvbiBp biB0aGUgcHJlLU9TLg0KPi0gIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICBUaGUgbmV3 IGNyZWRlbnRpYWwgY291bGQgbm90IGJlIGRlbGV0ZWQNCj5iZWNhdXNlIG9mIGEgZGV2aWNlIGVy cm9yLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2VyIGRvZXMgbm90IHJl ZmVyIHRvIGEgdmFsaWQgdXNlcg0KPnByb2ZpbGUgaGFuZGxlLg0KPi0qKi8NCj4tRUZJX1NUQVRV Uw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbERlbGV0ZSAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VS X0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIElOICAgICAgICBFRklfVVNF Ul9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAg ICAqVXNlckluZm87DQo+LSAgVUlOVDggICAgICAgICAgICAgICAgICAgICAqVXNlcklkOw0KPi0g IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgKk5ld1VzZXJJZDsNCj4tICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgIEluZGV4Ow0KPi0NCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFVzZXIg PT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0K Pi0NCj4tICAvLw0KPi0gIC8vIEdldCBVc2VyIElkZW50aWZpZXIuDQo+LSAgLy8NCj4tICBVc2Vy SW5mbyA9IE5VTEw7DQo+LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlICgNCj4tICAgICAg ICAgICAgIFVzZXIsDQo+LSAgICAgICAgICAgICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVD T1JELA0KPi0gICAgICAgICAgICAgJlVzZXJJbmZvDQo+LSAgICAgICAgICAgICApOw0KPi0gIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEZpbmQgdGhlIHVzZXIgYnkgdXNlciBpZGVu dGlmaWVyIGluIG1Qd2RUYWJsZS4NCj4tICAvLw0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IG1Qd2RUYWJsZS0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgIFVzZXJJZCAgICA9IChVSU5UOCAq KSAmbVB3ZFRhYmxlLT5Vc2VySW5mb1tJbmRleF0uVXNlcklkOw0KPi0gICAgTmV3VXNlcklkID0g KFVJTlQ4ICopIChVc2VySW5mbyArIDEpOw0KPi0gICAgaWYgKENvbXBhcmVNZW0gKFVzZXJJZCwg TmV3VXNlcklkLCBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJRklFUikpDQo+PT0gMCkgew0K Pi0gICAgICAvLw0KPi0gICAgICAvLyBGb3VuZCB0aGUgdXNlciwgZGVsZXRlIGl0Lg0KPi0gICAg ICAvLw0KPi0gICAgICBNb2RpZnlUYWJsZSAoSW5kZXgsIE5VTEwpOw0KPi0gICAgICBicmVhazsN Cj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIEZyZWVQb29sIChVc2VySW5mbyk7DQo+LSAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgTWFpbiBlbnRyeSBmb3IgdGhp cyBkcml2ZXIuDQo+LQ0KPi0gIEBwYXJhbSBJbWFnZUhhbmRsZSAgICAgSW1hZ2UgaGFuZGxlIHRo aXMgZHJpdmVyLg0KPi0gIEBwYXJhbSBTeXN0ZW1UYWJsZSAgICAgUG9pbnRlciB0byBTeXN0ZW1U YWJsZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDRVNTICAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5 cyBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklB UEkNCj4tUGFzc3dvcmRQcm92aWRlckluaXQgKA0KPi0gIElOIEVGSV9IQU5ETEUgICAgICAgIElt YWdlSGFuZGxlLA0KPi0gIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPi0gICkN Cj4tew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tDQo+LSAgLy8NCj4tICAvLyBJdCBpcyBO T1Qgcm9idXN0IGVub3VnaCB0byBiZSBpbmNsdWRlZCBpbiBwcm9kdWN0aW9uLg0KPi0gIC8vDQo+ LSAgI2Vycm9yICJUaGlzIGltcGxlbWVudGF0aW9uIGlzIGp1c3QgYSBzYW1wbGUsIHBsZWFzZSBj b21tZW50IHRoaXMgbGluZSBpZiB5b3UNCj5yZWFsbHkgd2FudCB0byB1c2UgdGhpcyBkcml2ZXIu Ig0KPi0NCj4tICAvLw0KPi0gIC8vIEluaXQgY3JlZGVudGlhbCB0YWJsZS4NCj4tICAvLw0KPi0g IFN0YXR1cyA9IEluaXRDcmVkZW50aWFsVGFibGUgKCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8g SW5pdCBGb3JtIEJyb3dzZXIuDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBJbml0Rm9ybUJyb3dzZXIg KCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsN Cj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5zdGFsbCBwcm90b2NvbCBpbnRlcmZhY2VzIGZv ciB0aGUgcGFzc3dvcmQgY3JlZGVudGlhbCBwcm92aWRlci4NCj4tICAvLw0KPi0gIFN0YXR1cyA9 IGdCUy0+SW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4tICAgICAgICAgICAgICAgICAgJm1D YWxsYmFja0luZm8tPkRyaXZlckhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgJmdFZmlVc2Vy Q3JlZGVudGlhbDJQcm90b2NvbEd1aWQsDQo+LSAgICAgICAgICAgICAgICAgIEVGSV9OQVRJVkVf SU5URVJGQUNFLA0KPi0gICAgICAgICAgICAgICAgICAmZ1B3ZENyZWRlbnRpYWxQcm92aWRlckRy aXZlcg0KPi0gICAgICAgICAgICAgICAgICApOw0KPi0gIHJldHVybiBTdGF0dXM7DQo+LX0NCj5k aWZmIC0tZ2l0DQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlh bFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQDQo+cm92aWRlci5oDQo+Yi9TZWN1cml0eVBrZy9V c2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwN Cj5Qcm92aWRlci5oDQo+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+aW5kZXggZmQ3ODI1NDlm ZC4uMDAwMDAwMDAwMA0KPi0tLQ0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3 ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUA0KPnJvdmlkZXIuaA0KPisrKyAv ZGV2L251bGwNCj5AQCAtMSwzNzQgKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBQYXNzd29yZCBD cmVkZW50aWFsIFByb3ZpZGVyIGRyaXZlciBoZWFkZXIgZmlsZS4NCj4tDQo+LUNvcHlyaWdodCAo YykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPi1hcmUg bGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1 dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4t aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0NCj4tVEhF IFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJ UyIgQkFTSVMsDQo+LVdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5Z IEtJTkQsIEVJVEhFUg0KPkVYUFJFU1MgT1IgSU1QTElFRC4NCj4tDQo+LSoqLw0KPi0NCj4tI2lm bmRlZiBfUEFTU1dPUkRfQ1JFREVOVElBTF9QUk9WSURFUl9IXw0KPi0jZGVmaW5lIF9QQVNTV09S RF9DUkVERU5USUFMX1BST1ZJREVSX0hfDQo+LQ0KPi0jaW5jbHVkZSA8VWVmaS5oPg0KPi0NCj4t I2luY2x1ZGUgPEd1aWQvR2xvYmFsVmFyaWFibGUuaD4NCj4tDQo+LSNpbmNsdWRlIDxQcm90b2Nv bC9IaWlDb25maWdBY2Nlc3MuaD4NCj4tI2luY2x1ZGUgPFByb3RvY29sL1VzZXJDcmVkZW50aWFs Mi5oPg0KPi0jaW5jbHVkZSA8UHJvdG9jb2wvVXNlck1hbmFnZXIuaD4NCj4tDQo+LSNpbmNsdWRl IDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYi5oPg0KPi0jaW5jbHVkZSA8TGli cmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvTWVt b3J5QWxsb2NhdGlvbkxpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+ DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L0RldmljZVBhdGhMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJh cnkvRGVidWdMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPi0jaW5jbHVk ZSA8TGlicmFyeS9QcmludExpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9IaWlMaWIuaD4NCj4t I2luY2x1ZGUgPExpYnJhcnkvQmFzZUNyeXB0TGliLmg+DQo+LQ0KPi0jaW5jbHVkZSAiUHdkQ3Jl ZGVudGlhbFByb3ZpZGVyRGF0YS5oIg0KPi0NCj4tZXh0ZXJuIFVJTlQ4ICAgICAgUHdkQ3JlZGVu dGlhbFByb3ZpZGVyU3RyaW5nc1tdOw0KPi1leHRlcm4gVUlOVDggICAgICBQd2RDcmVkZW50aWFs UHJvdmlkZXJWZnJCaW5bXTsNCj4tDQo+LSNkZWZpbmUgUEFTU1dPUkRfVEFCTEVfSU5DICAxNg0K Pi0jZGVmaW5lIENSRURFTlRJQUxfTEVOICAgICAgMjANCj4tDQo+LS8vDQo+LS8vIFBhc3N3b3Jk IGNyZWRlbnRpYWwgaW5mb3JtYXRpb24uDQo+LS8vDQo+LXR5cGVkZWYgc3RydWN0IHsNCj4tICBF RklfVVNFUl9JTkZPX0lERU5USUZJRVIgIFVzZXJJZDsNCj4tICBDSEFSOCAgICAgICAgICAgICAg ICAgICAgIFBhc3N3b3JkW0NSRURFTlRJQUxfTEVOXTsNCj4tfSBQQVNTV09SRF9JTkZPOw0KPi0N Cj4tLy8NCj4tLy8gUGFzc3dvcmQgY3JlZGVudGlhbCB0YWJsZS4NCj4tLy8NCj4tdHlwZWRlZiBz dHJ1Y3Qgew0KPi0gIFVJTlROICAgICAgICAgQ291bnQ7DQo+LSAgVUlOVE4gICAgICAgICBNYXhD b3VudDsNCj4tICBVSU5UTiAgICAgICAgIFZhbGlkSW5kZXg7DQo+LSAgUEFTU1dPUkRfSU5GTyBV c2VySW5mb1sxXTsNCj4tfSBDUkVERU5USUFMX1RBQkxFOw0KPi0NCj4tLy8NCj4tLy8gVGhlIHVz ZXIgaW5mb3JtYXRpb24gb24gdGhlIHBhc3N3b3JkIHByb3ZpZGVyLg0KPi0vLw0KPi10eXBlZGVm IHN0cnVjdCB7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQ7DQo+LSAg RUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKkluZm9bMV07DQo+LX0gUEFTU1dPUkRfQ1JF REVOVElBTF9JTkZPOw0KPi0NCj4tLy8vDQo+LS8vLyBISUkgc3BlY2lmaWMgVmVuZG9yIERldmlj ZSBQYXRoIGRlZmluaXRpb24uDQo+LS8vLw0KPi10eXBlZGVmIHN0cnVjdCB7DQo+LSAgVkVORE9S X0RFVklDRV9QQVRIICAgICAgICBWZW5kb3JEZXZpY2VQYXRoOw0KPi0gIEVGSV9ERVZJQ0VfUEFU SF9QUk9UT0NPTCAgRW5kOw0KPi19IEhJSV9WRU5ET1JfREVWSUNFX1BBVEg7DQo+LQ0KPi0jZGVm aW5lIFBXRF9QUk9WSURFUl9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMiAoJ1AnLCAnVycsICdEJywg J1AnKQ0KPi0NCj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgU2lnbmF0dXJlOw0KPi0gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAg RHJpdmVySGFuZGxlOw0KPi0gIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgSGlpSGFu ZGxlOw0KPi0gIC8vDQo+LSAgLy8gUHJvZHVjZWQgcHJvdG9jb2wuDQo+LSAgLy8NCj4tICBFRklf SElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgIENvbmZpZ0FjY2VzczsNCj4tfSBQV0RfUFJPVklE RVJfQ0FMTEJBQ0tfSU5GTzsNCj4tDQo+LQ0KPi0vKioNCj4tICBFbnJvbGwgYSB1c2VyIG9uIGEg Y3JlZGVudGlhbCBwcm92aWRlci4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBlbnJvbGxzIGEgdXNl ciBvbiB0aGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIuIElmIHRoZSB1c2VyIGV4aXN0cyBvbg0KPi0g IHRoaXMgY3JlZGVudGlhbCBwcm92aWRlciwgdXBkYXRlIHRoZSB1c2VyIGluZm9ybWF0aW9uIG9u IHRoaXMgY3JlZGVudGlhbA0KPnByb3ZpZGVyOw0KPi0gIG90aGVyd2lzZSBkZWxldGUgdGhlIHVz ZXIgaW5mb3JtYXRpb24gb24gY3JlZGVudGlhbCBwcm92aWRlci4NCj4tDQo+LSAgQHBhcmFtW2lu XSBUaGlzICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mDQo+RUZJX1VT RVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luXSBVc2VyICAgICAgICAgICAg ICAgIFRoZSB1c2VyIHByb2ZpbGUgdG8gZW5yb2xsLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgVXNlciBwcm9maWxlIHdhcyBzdWNjZXNzZnVsbHkgZW5yb2xsZWQuDQo+ LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgIEN1cnJlbnQgdXNlciBwcm9maWxlIGRv ZXMgbm90IHBlcm1pdA0KPmVucm9sbG1lbnQgb24gdGhlDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVzZXIgcHJvZmlsZSBoYW5kbGUuIEVpdGhlciB0aGUgdXNlciBwcm9maWxl IGNhbm5vdCBlbnJvbGwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gYW55 IHVzZXIgcHJvZmlsZSBvciBjYW5ub3QgZW5yb2xsIG9uIGEgdXNlciBwcm9maWxlDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgdXNlciBw cm9maWxlLg0KPi0gIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGlzIGNyZWRlbnRp YWwgcHJvdmlkZXIgZG9lcyBub3Qgc3VwcG9ydA0KPmVucm9sbG1lbnQgaW4NCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByZS1PUy4NCj4tICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICAgVGhlIG5ldyBjcmVkZW50aWFsIGNvdWxkIG5vdCBiZSBjcmVhdGVkDQo+ YmVjYXVzZSBvZiBhIGRldmljZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl cnJvci4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNlciBkb2VzIG5vdCBy ZWZlciB0byBhIHZhbGlkIHVzZXINCj5wcm9maWxlIGhhbmRsZS4NCj4tDQo+LSoqLw0KPi1FRklf U1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsRW5yb2xsICgNCj4tICBJTiBDT05TVCAgRUZJ X1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVG SV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXINCj4tICApOw0KPi0NCj4tLyoq DQo+LSAgUmV0dXJucyB0aGUgdXNlciBpbnRlcmZhY2UgaW5mb3JtYXRpb24gdXNlZCBkdXJpbmcg dXNlciBpZGVudGlmaWNhdGlvbi4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGluZm9y bWF0aW9uIGFib3V0IHRoZSBmb3JtIHVzZWQgd2hlbiBpbnRlcmFjdGluZw0KPndpdGggdGhlDQo+ LSAgdXNlciBkdXJpbmcgdXNlciBpZGVudGlmaWNhdGlvbi4gVGhlIGZvcm0gaXMgdGhlIGZpcnN0 IGVuYWJsZWQgZm9ybSBpbiB0aGUNCj5mb3JtLXNldA0KPi0gIGNsYXNzIEVGSV9ISUlfVVNFUl9D UkVERU5USUFMX0ZPUk1TRVRfR1VJRCBpbnN0YWxsZWQgb24gdGhlIEhJSQ0KPmhhbmRsZSBIaWlI YW5kbGUuIElmDQo+LSAgdGhlIHVzZXIgY3JlZGVudGlhbCBwcm92aWRlciBkb2VzIG5vdCByZXF1 aXJlIGEgZm9ybSB0byBpZGVudGlmeSB0aGUgdXNlciwNCj50aGVuIHRoaXMNCj4tICBmdW5jdGlv biBzaG91bGQgcmV0dXJuIEVGSV9OT1RfRk9VTkQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFRoaXMg ICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElB TDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW291dF0gSGlpICAgICAgICBPbiByZXR1cm4sIGhvbGRz IHRoZSBISUkgZGF0YWJhc2UgaGFuZGxlLg0KPi0gIEBwYXJhbVtvdXRdIEZvcm1TZXRJZCAgT24g cmV0dXJuLCBob2xkcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgZm9ybSBzZXQNCj53aGljaCBjb250 YWlucw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvcm0gdXNlZCBkdXJpbmcgdXNl ciBpZGVudGlmaWNhdGlvbi4NCj4tICBAcGFyYW1bb3V0XSBGb3JtSWQgICAgIE9uIHJldHVybiwg aG9sZHMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGZvcm0gdXNlZA0KPmR1cmluZyB1c2VyDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWNhdGlvbi4NCj4tDQo+LSAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgIEZvcm0gcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEBy ZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBGb3JtIG5vdCByZXR1cm5lZC4NCj4tICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgRm9ybVNldElkIGlzIE5V TEwgb3INCj5Gb3JtSWQgaXMgTlVMTC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQ SQ0KPi1DcmVkZW50aWFsRm9ybSAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwy X1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIE9VVCAgICAgICBFRklfSElJX0hBTkRMRSAgICAg ICAgICAgICAgICAgICAgICAqSGlpLA0KPi0gIE9VVCAgICAgICBFRklfR1VJRCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqRm9ybVNldElkLA0KPi0gIE9VVCAgICAgICBFRklfRk9STV9JRCAg ICAgICAgICAgICAgICAgICAgICAgICAqRm9ybUlkDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIFJl dHVybnMgYml0bWFwIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgdHlw ZS4NCj4tDQo+LSAgVGhpcyBvcHRpb25hbCBmdW5jdGlvbiByZXR1cm5zIGEgYml0bWFwIHdoaWNo IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUNCj5udW1iZXINCj4tICBvZiBwaXhlbHMgc3Bl Y2lmaWVkIGJ5IFdpZHRoIGFuZCBIZWlnaHQuIElmIG5vIHN1Y2ggYml0bWFwIGV4aXN0cywgdGhl bg0KPkVGSV9OT1RfRk9VTkQNCj4tICBpcyByZXR1cm5lZC4NCj4tDQo+LSAgQHBhcmFtW2luXSAg ICAgIFRoaXMgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JF REVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luLCBvdXRdIFdpZHRoICAgT24gZW50cnks IHBvaW50cyB0byB0aGUgZGVzaXJlZCBiaXRtYXAgd2lkdGguIElmDQo+TlVMTCB0aGVuIG5vDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIGluZm9ybWF0aW9uIHdpbGwgYmUgcmV0 dXJuZWQuIE9uIGV4aXQsIHBvaW50cyB0byB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICB3aWR0aCBvZiB0aGUgYml0bWFwIHJldHVybmVkLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBIZWln aHQgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIGRlc2lyZWQgYml0bWFwIGhlaWdodC4gSWYNCj5O VUxMIHRoZW4gbm8NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgaW5mb3JtYXRp b24gd2lsbCBiZSByZXR1cm5lZC4gT24gZXhpdCwgcG9pbnRzIHRvIHRoZQ0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgIGhlaWdodCBvZiB0aGUgYml0bWFwIHJldHVybmVkDQo+LSAgQHBhcmFt W291dF0gICAgIEhpaSAgICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJIGRhdGFiYXNlIGhhbmRs ZS4NCj4tICBAcGFyYW1bb3V0XSAgICAgSW1hZ2UgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkg aW1hZ2UgaWRlbnRpZmllci4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg IEltYWdlIGlkZW50aWZpZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgRUZJ X05PVF9GT1VORCAgICAgICAgICBJbWFnZSBpZGVudGlmaWVyIG5vdCByZXR1cm5lZC4NCj4tICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgSW1hZ2UgaXMgTlVM TC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsVGlsZSAo DQo+LSAgSU4gIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhp cywNCj4tICBJTiAgT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpX aWR0aCwNCj4tICBJTiAgT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpIZWlnaHQsDQo+LSAgICAgIE9VVCAgICBFRklfSElJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICAgICAqSGlpLA0KPi0gICAgICBPVVQgICAgRUZJX0lNQUdFX0lEICAgICAgICAgICAgICAgICAg ICAgICAgKkltYWdlDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIFJldHVybnMgc3RyaW5nIHVzZWQg dG8gZGVzY3JpYmUgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgdHlwZS4NCj4tDQo+LSAgVGhpcyBm dW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIHdoaWNoIGRlc2NyaWJlcyB0aGUgY3JlZGVudGlhbCBw cm92aWRlci4gSWYgbm8NCj4tICBzdWNoIHN0cmluZyBleGlzdHMsIHRoZW4gRUZJX05PVF9GT1VO RCBpcyByZXR1cm5lZC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8g dGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4t ICBAcGFyYW1bb3V0XSBIaWkgICAgICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFz ZSBoYW5kbGUuDQo+LSAgQHBhcmFtW291dF0gU3RyaW5nICAgICBPbiByZXR1cm4sIGhvbGRzIHRo ZSBISUkgc3RyaW5nIGlkZW50aWZpZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBTdHJpbmcgaWRlbnRpZmllciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJl dHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIFN0cmluZyBpZGVudGlmaWVyIG5vdCByZXR1cm5l ZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgU3Ry aW5nIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVu dGlhbFRpdGxlICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wg ICAgICAgKlRoaXMsDQo+LSAgT1VUICAgICAgIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAg ICAgICAgICpIaWksDQo+LSAgT1VUICAgICAgIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAg ICAgICAgICpTdHJpbmcNCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgUmV0dXJuIHRoZSB1c2VyIGlk ZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50bHkgYXV0aGVudGljYXRlZCB1c2Vy Lg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVzZXIgaWRlbnRpZmllciBvZiB0 aGUgdXNlciBhdXRoZW50aWNhdGVkIGJ5IHRoaXMNCj5jcmVkZW50aWFsDQo+LSAgcHJvdmlkZXIu IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFsLXJlbGF0ZWQgaW5m b3JtYXRpb24gaGFzDQo+YmVlbg0KPi0gIHN1Ym1pdHRlZCBvbiBhIGZvcm0gT1IgYWZ0ZXIgYSBj YWxsIHRvIERlZmF1bHQoKSBoYXMgcmV0dXJuZWQgdGhhdCB0aGlzDQo+Y3JlZGVudGlhbCBpcw0K Pi0gIHJlYWR5IHRvIGxvZyBvbi4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAg UG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJP VE9DT0wuDQo+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSBo YW5kbGUgb2YgdGhlIHVzZXIgcHJvZmlsZSBjdXJyZW50bHkNCj5iZWluZw0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyZWQgYnkgdGhlIHVzZXIgaWRlbnRpdHkgbWFuYWdl ci4gSWYgTlVMTCwgdGhlbiBubyB1c2VyDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJvZmlsZSBpcyBjdXJyZW50bHkgdW5kZXIgY29uc2lkZXJhdGlvbi4NCj4tICBAcGFyYW1bb3V0 XSBJZGVudGlmaWVyICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgdXNlciBpZGVudGlmaWVy Lg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciBpZGVudGlmaWVy IHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAgICAg ICAgTm8gdXNlciBpZGVudGlmaWVyIGNhbiBiZSByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9B Q0NFU1NfREVOSUVEICAgICAgVGhlIHVzZXIgaGFzIGJlZW4gbG9ja2VkIG91dCBvZiB0aGlzIHVz ZXINCj5jcmVkZW50aWFsLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGlz IGlzIE5VTEwsIG9yIElkZW50aWZpZXIgaXMgTlVMTC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9V TkQgICAgICAgICAgVXNlciBpcyBub3QgTlVMTCwgYW5kIHRoZSBzcGVjaWZpZWQgdXNlcg0KPmhh bmRsZSBjYW4ndCBiZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBp biB1c2VyIHByb2ZpbGUgZGF0YWJhc2UNCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQ SQ0KPi1DcmVkZW50aWFsVXNlciAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwy X1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hB TkRMRSAgICAgICAgICAgICBVc2VyLA0KPi0gIE9VVCAgICAgICBFRklfVVNFUl9JTkZPX0lERU5U SUZJRVIgICAgICAgICAgICAqSWRlbnRpZmllcg0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBJbmRp Y2F0ZSB0aGF0IHVzZXIgaW50ZXJmYWNlIGludGVyYWN0aW9uIGhhcyBiZWd1biBmb3IgdGhlIHNw ZWNpZmllZA0KPmNyZWRlbnRpYWwuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdo ZW4gYSBjcmVkZW50aWFsIHByb3ZpZGVyIGlzIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLiBJZg0KPi0g IEF1dG9Mb2dvbiByZXR1cm5zIEZBTFNFLCB0aGVuIHRoZSB1c2VyIGludGVyZmFjZSB3aWxsIGJl IGNvbnN0cnVjdGVkIGJ5IHRoZQ0KPlVzZXINCj4tICBJZGVudGl0eSBNYW5hZ2VyLg0KPi0NCj4t ICBAcGFyYW1baW5dICBUaGlzICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0K PkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtvdXRdIEF1dG9Mb2dv biAgT24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIncw0KPmNhcGFi aWxpdGllcw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwg cHJvdmlkZXIgaGFzIGJlZW4gc2VsZWN0ZWQgYnkgdGhlIHVzZXIuDQo+LQ0KPi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICBDcmVkZW50aWFsIHByb3ZpZGVyIHN1Y2Nlc3NmdWxseSBz ZWxlY3RlZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgQXV0b0xvZ29uIGlz IE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbFNl bGVjdCAoDQo+LSAgSU4gIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICpU aGlzLA0KPi0gIE9VVCAgICAgICAgRUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR1MgICAgICAqQXV0 b0xvZ29uDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIEluZGljYXRlIHRoYXQgdXNlciBpbnRlcmZh Y2UgaW50ZXJhY3Rpb24gaGFzIGVuZGVkIGZvciB0aGUgc3BlY2lmaWVkDQo+Y3JlZGVudGlhbC4N Cj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGNyZWRlbnRpYWwgcHJvdmlk ZXIgaXMgZGVzZWxlY3RlZCBieSB0aGUgdXNlci4NCj4tDQo+LSAgQHBhcmFtW2luXSBUaGlzICAg ICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFM Ml9QUk9UT0NPTC4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBDcmVkZW50aWFsIHBy b3ZpZGVyIHN1Y2Nlc3NmdWxseSBkZXNlbGVjdGVkLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMN Cj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxEZXNlbGVjdCAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VS X0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0g IFJldHVybiB0aGUgZGVmYXVsdCBsb2dvbiBiZWhhdmlvciBmb3IgdGhpcyB1c2VyIGNyZWRlbnRp YWwuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gcmVwb3J0cyB0aGUgZGVmYXVsdCBsb2dpbiBiZWhh dmlvciByZWdhcmRpbmcgdGhpcyBjcmVkZW50aWFsDQo+cHJvdmlkZXIuDQo+LQ0KPi0gIEBwYXJh bVtpbl0gIFRoaXMgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VT RVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW291dF0gQXV0b0xvZ29uICBPbiBy ZXR1cm4sIGhvbGRzIHdoZXRoZXIgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXINCj5zaG91bGQgYmUg dXNlZA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCB0byBhdXRvbWF0aWNh bGx5IGxvZyBvbiB0aGUgdXNlci4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgIERlZmF1bHQgaW5mb3JtYXRpb24gc3VjY2Vzc2Z1bGx5IHJldHVybmVkLg0KPi0gIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBBdXRvTG9nb24gaXMgTlVMTC4NCj4tDQo+LSoqLw0K Pi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsRGVmYXVsdCAoDQo+LSAgSU4gQ09O U1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIE9VVCAg ICAgICBFRklfQ1JFREVOVElBTF9MT0dPTl9GTEFHUyAgICAgICAgICAqQXV0b0xvZ29uDQo+LSAg KTsNCj4tDQo+LS8qKg0KPi0gIFJldHVybiBpbmZvcm1hdGlvbiBhdHRhY2hlZCB0byB0aGUgY3Jl ZGVudGlhbCBwcm92aWRlci4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHVzZXIgaW5m b3JtYXRpb24uDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIFBvaW50cyB0 byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0K Pi0gIEBwYXJhbVtpbl0gICAgICBVc2VySW5mbyAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciBpbmZv cm1hdGlvbiBkYXRhIHJlY29yZC4NCj4tICBAcGFyYW1bb3V0XSAgICAgSW5mbyAgICAgICAgICBP biBlbnRyeSwgcG9pbnRzIHRvIGEgYnVmZmVyIG9mIGF0IGxlYXN0ICpJbmZvU2l6ZQ0KPmJ5dGVz LiBPbg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQsIGhvbGRzIHRoZSB1 c2VyIGluZm9ybWF0aW9uLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbA0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRvIGhvbGQgdGhlIGluZm9ybWF0aW9uLCB0aGVuIEVGSV9C VUZGRVJfVE9PX1NNQUxMIGlzDQo+cmV0dXJuZWQNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhbmQgSW5mb1NpemUgaXMgdXBkYXRlZCB0byBjb250YWluIHRoZSBudW1iZXIgb2Yg Ynl0ZXMNCj5hY3R1YWxseQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVp cmVkLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBJbmZvU2l6ZSAgICAgIE9uIGVudHJ5LCBwb2ludHMg dG8gdGhlIHNpemUgb2YgSW5mby4gT24gcmV0dXJuLA0KPnBvaW50cyB0byB0aGUNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0K Pi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBJbmZvcm1hdGlvbiByZXR1cm5l ZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgVGhlIHNp emUgc3BlY2lmaWVkIGJ5IEluZm9TaXplIGlzIHRvbyBzbWFsbA0KPnRvIGhvbGQgYWxsIG9mIHRo ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgaW5mb3JtYXRpb24uIFRo ZSBzaXplIHJlcXVpcmVkIGlzIHJldHVybmVkIGluICpJbmZvU2l6ZS4NCj4tICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBJbmZvIGlzIE5VTEwgb3IgSW5mb1NpemUgaXMgTlVMTC4NCj4t ICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgc3BlY2lmaWVkIFVzZXJJbmZvIGRv ZXMgbm90IHJlZmVyIHRvIGENCj52YWxpZCB1c2VyIGluZm8gaGFuZGxlLg0KPi0NCj4tKiovDQo+ LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxHZXRJbmZvICgNCj4tICBJTiBDT05T VCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gICAg ICAgIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgIFVzZXJJbmZvLA0KPi0gIE9V VCAgICAgICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAqSW5mbywNCj4tICBJ TiBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkluZm9TaXplDQo+ LSAgKTsNCj4tDQo+LQ0KPi0vKioNCj4tICBFbnVtZXJhdGUgYWxsIG9mIHRoZSB1c2VyIGluZm9y bWF0aW9ucyBvbiB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4NCj4tDQo+LSAgVGhpcyBmdW5jdGlv biByZXR1cm5zIHRoZSBuZXh0IHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkLiBUbyByZXRyaWV2ZSB0 aGUgZmlyc3QNCj51c2VyDQo+LSAgaW5mb3JtYXRpb24gcmVjb3JkIGhhbmRsZSwgcG9pbnQgVXNl ckluZm8gYXQgYSBOVUxMLiBFYWNoIHN1YnNlcXVlbnQgY2FsbA0KPndpbGwgcmV0cmlldmUNCj4t ICBhbm90aGVyIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIGhhbmRsZSB1bnRpbCB0aGVyZSBhcmUg bm8gbW9yZSwgYXQgd2hpY2gNCj5wb2ludCBVc2VySW5mbw0KPi0gIHdpbGwgcG9pbnQgdG8gTlVM TC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAgIFBvaW50cyB0byB0aGlzIGluc3Rh bmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtp biwgb3V0XSBVc2VySW5mbyBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBwcmV2aW91cyB1c2VyIGlu Zm9ybWF0aW9uDQo+aGFuZGxlIG9yIE5VTEwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg dG8gc3RhcnQgZW51bWVyYXRpb24uIE9uIGV4aXQsIHBvaW50cyB0byB0aGUgbmV4dCB1c2VyDQo+ aW5mb3JtYXRpb24NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIG9yIE5VTEwg aWYgdGhlcmUgaXMgbm8gbW9yZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgVXNlciBpbmZvcm1hdGlvbiByZXR1cm5lZC4NCj4tICBAcmV0 dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgTm8gbW9yZSB1c2VyIGluZm9ybWF0aW9uIGZvdW5k Lg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2VySW5mbyBpcyBOVUxMLg0K Pi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxHZXROZXh0SW5m byAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpU aGlzLA0KPi0gIElOIE9VVCAgICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICAq VXNlckluZm8NCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgRGVsZXRlIGEgdXNlciBvbiB0aGlzIGNy ZWRlbnRpYWwgcHJvdmlkZXIuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBhIHVzZXIg b24gdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1baW5dICAgICBUaGlz ICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JF REVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luXSAgICAgVXNlciAgICAgICAgICAgIFRo ZSB1c2VyIHByb2ZpbGUgaGFuZGxlIHRvIGRlbGV0ZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgIFVzZXIgcHJvZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuDQo+ LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgIEN1cnJlbnQgdXNlciBwcm9maWxlIGRv ZXMgbm90IHBlcm1pdA0KPmRlbGV0aW9uIG9uIHRoZSB1c2VyIHByb2ZpbGUgaGFuZGxlLg0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFaXRoZXIgdGhlIHVzZXIgcHJvZmlsZSBj YW5ub3QgZGVsZXRlIG9uIGFueSB1c2VyIHByb2ZpbGUgb3INCj5jYW5ub3QgZGVsZXRlDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIGEgdXNlciBwcm9maWxlIG90aGVyIHRo YW4gdGhlIGN1cnJlbnQgdXNlciBwcm9maWxlLg0KPi0gIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVE ICAgICAgICBUaGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIgZG9lcyBub3Qgc3VwcG9ydA0KPmRlbGV0 aW9uIGluIHRoZSBwcmUtT1MuDQo+LSAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRo ZSBuZXcgY3JlZGVudGlhbCBjb3VsZCBub3QgYmUgZGVsZXRlZA0KPmJlY2F1c2Ugb2YgYSBkZXZp Y2UgZXJyb3IuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFVzZXIgZG9lcyBu b3QgcmVmZXIgdG8gYSB2YWxpZCB1c2VyDQo+cHJvZmlsZSBoYW5kbGUuDQo+LSoqLw0KPi1FRklf U1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsRGVsZXRlICgNCj4tICBJTiBDT05TVCAgRUZJ X1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVG SV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXINCj4tICApOw0KPi0NCj4tI2Vu ZGlmDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENy ZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUA0KPnJvdmlkZXIudW5pDQo+Yi9TZWN1 cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENy ZWRlbnRpYWwNCj5Qcm92aWRlci51bmkNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRl eCA3NDllOWE4ZjE3Li4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRp ZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQDQo+cm92aWRl ci51bmkNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMjEgKzAsMCBAQA0KPi0vLyAvKiogQGZpbGUN Cj4tLy8gUHJvdmlkZXMgYSBwYXNzd29yZCBjcmVkZW50aWFsIHByb3ZpZGVyIGltcGxlbWVudGF0 aW9uDQo+LS8vDQo+LS8vIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgcGFzc3dvcmQgY3JlZGVudGlh bCBwcm92aWRlciBpbXBsZW1lbnRhdGlvbi4NCj4tLy8NCj4tLy8gQ29weXJpZ2h0IChjKSAyMDA5 IC0gMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi0v Lw0KPi0vLyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LS8v IGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMg ZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5k IGF0DQo+LS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAN Cj4tLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9O IEFOICJBUyBJUyINCj5CQVNJUywNCj4tLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VO VEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0vLw0K Pi0vLyAqKi8NCj4tDQo+LQ0KPi0jc3RyaW5nIFNUUl9NT0RVTEVfQUJTVFJBQ1QgICAgICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTICJQcm92aWRlcyBhDQo+cGFzc3dvcmQgY3JlZGVudGlhbCBwcm92 aWRlciBpbXBsZW1lbnRhdGlvbiINCj4tDQo+LSNzdHJpbmcgU1RSX01PRFVMRV9ERVNDUklQVElP TiAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlRoaXMgbW9kdWxlDQo+cHJvdmlkZXMgYSBwYXNz d29yZCBjcmVkZW50aWFsIHByb3ZpZGVyIGltcGxlbWVudGF0aW9uLiINCj4tDQo+ZGlmZiAtLWdp dA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRl ckR4ZS9Qd2RDcmVkZW50aWFsUA0KPnJvdmlkZXJEYXRhLmgNCj5iL1NlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbA0KPlBy b3ZpZGVyRGF0YS5oDQo+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+aW5kZXggMzFiZGZlNGM1 MC4uMDAwMDAwMDAwMA0KPi0tLQ0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3 ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUA0KPnJvdmlkZXJEYXRhLmgNCj4r KysgL2Rldi9udWxsDQo+QEAgLTEsMzAgKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBEYXRhIHN0 cnVjdHVyZSB1c2VkIGJ5IHRoZSBQYXNzd29yZCBDcmVkZW50aWFsIFByb3ZpZGVyIGRyaXZlci4N Cj4tDQo+LUNvcHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5n IG1hdGVyaWFscw0KPi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0 ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi13aGljaCBhY2NvbXBh bmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5 IGJlDQo+Zm91bmQgYXQNCj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNl bnNlLnBocA0KPi0NCj4tVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBM SUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+LVdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBS RVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPkVYUFJFU1MgT1IgSU1QTElFRC4NCj4t DQo+LSoqLw0KPi0NCj4tI2lmbmRlZiBfUFdEX0NSRURFTlRJQUxfUFJPVklERVJfREFUQV9IXw0K Pi0jZGVmaW5lIF9QV0RfQ1JFREVOVElBTF9QUk9WSURFUl9EQVRBX0hfDQo+LQ0KPi0jaW5jbHVk ZSA8R3VpZC9Qd2RDcmVkZW50aWFsUHJvdmlkZXJIaWkuaD4NCj4tDQo+LS8vDQo+LS8vIEZvcm1z IGRlZmluaXRpb24NCj4tLy8NCj4tI2RlZmluZSBGT1JNSURfR0VUX1BBU1NXT1JEX0ZPUk0gICAg ICAxDQo+LQ0KPi0vLw0KPi0vLyBLZXkgZGVmaW5hdGlvbg0KPi0vLw0KPi0jZGVmaW5lIEtFWV9H RVRfUEFTU1dPUkQgICAgICAgICAgICAgIDB4MTAwMA0KPi0NCj4tI2VuZGlmDQo+ZGlmZiAtLWdp dA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRl ckR4ZS9Qd2RDcmVkZW50aWFsUA0KPnJvdmlkZXJEeGUuaW5mDQo+Yi9TZWN1cml0eVBrZy9Vc2Vy SWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwNCj5Q cm92aWRlckR4ZS5pbmYNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCBhYjdiYTJj OTEzLi4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v UHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQDQo+cm92aWRlckR4ZS5pbmYN Cj4rKysgL2Rldi9udWxsDQo+QEAgLTEsNjUgKzAsMCBAQA0KPi0jIyBAZmlsZQ0KPi0jICBQcm92 aWRlcyBhIHBhc3N3b3JkIGNyZWRlbnRpYWwgcHJvdmlkZXIgaW1wbGVtZW50YXRpb24NCj4tIyAg VGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBwYXNzd29yZCBjcmVkZW50aWFsIHByb3ZpZGVyIGltcGxl bWVudGF0aW9uLg0KPi0jDQo+LSMgQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi0jIFRoaXMgcHJvZ3JhbSBhbmQg dGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tIyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZh aWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5z ZQ0KPi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0 IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LSMgaHR0cDovL29wZW5zb3VyY2Uu b3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0jIFRIRSBQUk9HUkFNIElTIERJU1RSSUJV VEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+LSMgV0lU SE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+ RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0jDQo+LSMjDQo+LQ0KPi1bRGVmaW5lc10NCj4tICBJTkZf VkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1DQo+LSAgQkFTRV9OQU1FICAg ICAgICAgICAgICAgICAgICAgID0gUHdkQ3JlZGVudGlhbFByb3ZpZGVyDQo+LSAgTU9EVUxFX1VO SV9GSUxFICAgICAgICAgICAgICAgID0gUHdkQ3JlZGVudGlhbFByb3ZpZGVyLnVuaQ0KPi0gIEZJ TEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IEQ2QzU4OUVBLUREMjktNDllZi05N0Y2LTFB OUZFMTlBMDRFMA0KPi0gIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IFVFRklfRFJJ VkVSDQo+LSAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+LSAgRU5UUllf UE9JTlQgICAgICAgICAgICAgICAgICAgID0gUGFzc3dvcmRQcm92aWRlckluaXQNCj4tDQo+LVtT b3VyY2VzXQ0KPi0gIFB3ZENyZWRlbnRpYWxQcm92aWRlci5jDQo+LSAgUHdkQ3JlZGVudGlhbFBy b3ZpZGVyLmgNCj4tICBQd2RDcmVkZW50aWFsUHJvdmlkZXJEYXRhLmgNCj4tICBQd2RDcmVkZW50 aWFsUHJvdmlkZXJWZnIuVmZyDQo+LSAgUHdkQ3JlZGVudGlhbFByb3ZpZGVyU3RyaW5ncy51bmkN Cj4tDQo+LVtQYWNrYWdlc10NCj4tICBNZGVQa2cvTWRlUGtnLmRlYw0KPi0gIE1kZU1vZHVsZVBr Zy9NZGVNb2R1bGVQa2cuZGVjDQo+LSAgQ3J5cHRvUGtnL0NyeXB0b1BrZy5kZWMNCj4tICBTZWN1 cml0eVBrZy9TZWN1cml0eVBrZy5kZWMNCj4tDQo+LVtMaWJyYXJ5Q2xhc3Nlc10NCj4tICBVZWZp UnVudGltZVNlcnZpY2VzVGFibGVMaWINCj4tICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4t ICBVZWZpRHJpdmVyRW50cnlQb2ludA0KPi0gIE1lbW9yeUFsbG9jYXRpb25MaWINCj4tICBCYXNl TWVtb3J5TGliDQo+LSAgRGVidWdMaWINCj4tICBIaWlMaWINCj4tICBVZWZpTGliDQo+LSAgQmFz ZUNyeXB0TGliDQo+LQ0KPi1bR3VpZHNdDQo+LSAgZ0VmaVVzZXJDcmVkZW50aWFsQ2xhc3NQYXNz d29yZEd1aWQgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0KPiMjIEdVSUQNCj4tDQo+ LSAgIyMgUFJPRFVDRVMgICAgICAgICAgICAgIyMgVmFyaWFibGU6TCJQd2RDcmVkZW50aWFsIg0K Pi0gICMjIENPTlNVTUVTICAgICAgICAgICAgICMjIFZhcmlhYmxlOkwiUHdkQ3JlZGVudGlhbCIN Cj4tICAjIyBDT05TVU1FUyAgICAgICAgICAgICAjIyBISUkNCj4tICAjIyBTT01FVElNRVNfQ09O U1VNRVMgICAjIyBHVUlEICAgICAgICAgICAgICAgIyAgVGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIN Cj5pZGVudGlmaWVyDQo+LSAgZ1B3ZENyZWRlbnRpYWxQcm92aWRlckd1aWQNCj4tDQo+LVtQcm90 b2NvbHNdDQo+LSAgZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAg ICMjIFBST0RVQ0VTDQo+LSAgZ0VmaUhpaUNvbmZpZ0FjY2Vzc1Byb3RvY29sR3VpZCAgICAgICAg ICAgICAgICMjIFBST0RVQ0VTDQo+LSAgZ0VmaVVzZXJDcmVkZW50aWFsMlByb3RvY29sR3VpZCAg ICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+LSAgZ0VmaVVzZXJNYW5hZ2VyUHJvdG9jb2xHdWlk ICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0KPi0NCj4tW1VzZXJFeHRl bnNpb25zLlRpYW5vQ29yZS4iRXh0cmFGaWxlcyJdDQo+LSAgUHdkQ3JlZGVudGlhbFByb3ZpZGVy RXh0cmEudW5pDQo+LQ0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNh dGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbFANCj5yb3ZpZGVyRXh0 cmEudW5pDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFBy b3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwNCj5Qcm92aWRlckV4dHJhLnVuaQ0KPmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NA0KPmluZGV4IGJjYzIyMGE1MWQuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1Nl Y3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUvUHdk Q3JlZGVudGlhbFANCj5yb3ZpZGVyRXh0cmEudW5pDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDE5 ICswLDAgQEANCj4tLy8gLyoqIEBmaWxlDQo+LS8vIFB3ZENyZWRlbnRpYWxQcm92aWRlciBMb2Nh bGl6ZWQgU3RyaW5ncyBhbmQgQ29udGVudA0KPi0vLw0KPi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMg LSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LS8v DQo+LS8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tLy8g YXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRp dGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4tLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQg YXQNCj4tLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0K Pi0vLyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04g QU4gIkFTIElTIg0KPkJBU0lTLA0KPi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5U QVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LS8vDQo+ LS8vICoqLw0KPi0NCj4tI3N0cmluZyBTVFJfUFJPUEVSVElFU19NT0RVTEVfTkFNRQ0KPi0jbGFu Z3VhZ2UgZW4tVVMNCj4tIlBhc3N3b3JkIENyZWRlbnRpYWwgUHJvdmlkZXIiDQo+LQ0KPi0NCj5k aWZmIC0tZ2l0DQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlh bFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQDQo+cm92aWRlclN0cmluZ3MudW5pDQo+Yi9TZWN1 cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENy ZWRlbnRpYWwNCj5Qcm92aWRlclN0cmluZ3MudW5pDQo+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 DQo+aW5kZXggZTdiMzEyNmY4My4uMDAwMDAwMDAwMA0KPi0tLQ0KPmEvU2VjdXJpdHlQa2cvVXNl cklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUA0K PnJvdmlkZXJTdHJpbmdzLnVuaQ0KPisrKyAvZGV2L251bGwNCj5AQCAtMSwzOCArMCwwIEBADQo+ LS8qKiBAZmlsZQ0KPi0gIFN0cmluZyBkZWZpbml0aW9ucyBmb3IgdGhlIFBhc3N3b3JkIENyZWRl bnRpYWwgUHJvdmlkZXIuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQg dGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWls YWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UN Cj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9m IHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9s aWNlbnNlcy9ic2QtbGljZW5zZS5waHAuDQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRF RCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBX QVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVT UyBPUiBJTVBMSUVELg0KPi0NCj4tKiovDQo+LQ0KPi0jbGFuZ2RlZiBlbi1VUyAiRW5nbGlzaCIN Cj4tI2xhbmdkZWYgZnItRlIgICJGcmFuY2FpcyINCj4tDQo+LSNzdHJpbmcgU1RSX0NSRURFTlRJ QUxfVElUTEUgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlBhc3N3b3JkDQo+ Q3JlZGVudGlhbCBQcm92aWRlciINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJQYXNzd29yZCBDcmVkZW50aWFsIFBy b3ZpZGVyDQo+KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0ZPUk1fVElUTEUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiR2V0IFBhc3N3b3JkIg0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1G UiAgIkdldCBQYXNzd29yZChGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9OVUxMX1NUUklORyAgICAg ICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIiINCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICIi DQo+LSNzdHJpbmcgU1RSX0lOUFVUX1BBU1NXT1JEICAgICAgICAgICAgICAgICAgICAgICAgI2xh bmd1YWdlIGVuLVVTICAiUGxlYXNlIElucHV0DQo+UGFzc3dvcmQiDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiUGxl YXNlIElucHV0IFBhc3N3b3JkKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1BST1ZJREVSX05BTUUg ICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIklOVEVMDQo+UGFzc3dv cmQgQ3JlZGVudGlhbCBQcm92aWRlciINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJJTlRFTCBQYXNzd29yZCBDcmVk ZW50aWFsDQo+UHJvdmlkZXIoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfUFJPVklERVJfVFlQRV9O QU1FICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJQYXNzd29yZA0KPkNyZWRl bnRpYWwgUHJvdmlkZXIiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiUGFzc3dvcmQgQ3JlZGVudGlhbA0KPlByb3Zp ZGVyKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0lOUFVUX1BBU1NXT1JEX0FHQUlOICAgICAgICAg ICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiSW5wdXQNCj5QYXNzd29yZCBBZ2FpbiINCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2Ug ZnItRlIgICJJbnB1dCBQYXNzd29yZCBBZ2FpbiAoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfRFJB V19BX0xJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICItLS0t LS0tLS0tLS0tLS0tLS0tLS0NCj4tLS0tLS0tLSINCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICItLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iDQo+LSNzdHJpbmcgU1RSX1BBU1NXT1JEX0lOQ09SUkVD VCAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiICAgICBJbmNvcnJlY3QNCj5Q YXNzd29yZCEgICAgICINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICIgICAgSW5jb3JyZWN0IFBhc3N3b3JkISAoRnJl bmNoKSAgICAiDQo+LSNzdHJpbmcgU1RSX1BBU1NXT1JEX01JU01BVENIICAgICAgICAgICAgICAg ICAgICAgI2xhbmd1YWdlIGVuLVVTICAiICAgIFRoZQ0KPlBhc3N3b3JkIE1pc21hdGNoISAgICAi DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xh bmd1YWdlIGZyLUZSICAiICAgVGhlIFBhc3N3b3JkIE1pc21hdGNoISAoRnJlbmNoKQ0KPiINCj4t DQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRl bnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUA0KPnJvdmlkZXJWZnIuVmZyDQo+Yi9TZWN1 cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENy ZWRlbnRpYWwNCj5Qcm92aWRlclZmci5WZnINCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5p bmRleCA2MDk3MjIwM2IwLi4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRl bnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQDQo+cm92 aWRlclZmci5WZnINCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMzQgKzAsMCBAQA0KPi0vKiogQGZp bGUNCj4tICBQYXNzd29yZCBDcmVkZW50aWFsIFByb3ZpZGVyIGZvcm1zZXQuDQo+LQ0KPi1Db3B5 cmlnaHQgKGMpIDIwMDkgLSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN Cj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5k IGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4t DQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBB TiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05T IE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4t DQo+LSNpbmNsdWRlICJQd2RDcmVkZW50aWFsUHJvdmlkZXJEYXRhLmgiDQo+LQ0KPi1mb3Jtc2V0 DQo+LSAgZ3VpZCAgICAgID0gUFdEX0NSRURFTlRJQUxfUFJPVklERVJfR1VJRCwNCj4tICB0aXRs ZSAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0NSRURFTlRJQUxfVElUTEUpLA0KPi0gIGhlbHAgICAg ICA9IFNUUklOR19UT0tFTihTVFJfTlVMTF9TVFJJTkcpLA0KPi0gIGNsYXNzZ3VpZCA9IFBXRF9D UkVERU5USUFMX1BST1ZJREVSX0dVSUQsDQo+LQ0KPi0gIGZvcm0gZm9ybWlkID0gRk9STUlEX0dF VF9QQVNTV09SRF9GT1JNLA0KPi0gICAgdGl0bGUgPSBTVFJJTkdfVE9LRU4oU1RSX0ZPUk1fVElU TEUpOw0KPi0NCj4tICAgIHRleHQNCj4tICAgICAgaGVscCAgID0gU1RSSU5HX1RPS0VOKFNUUl9O VUxMX1NUUklORyksDQo+LSAgICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfSU5QVVRfUEFT U1dPUkQpLA0KPi0gICAgICBmbGFncyAgPSBJTlRFUkFDVElWRSwNCj4tICAgICAga2V5ICAgID0g S0VZX0dFVF9QQVNTV09SRDsNCj4tDQo+LSAgZW5kZm9ybTsNCj4tDQo+LWVuZGZvcm1zZXQ7DQo+ XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cv VXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFs UHINCj5vdmlkZXIuYw0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRl bnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5vdmlkZXIuYw0KPmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NA0KPmluZGV4IDg0MWU5NzUxMDMuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1Nl Y3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUvVXNi Q3JlZGVudGlhbFByDQo+b3ZpZGVyLmMNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMTQxMCArMCww IEBADQo+LS8qKiBAZmlsZQ0KPi0gIFVzYiBDcmVkZW50aWFsIFByb3ZpZGVyIGRyaXZlciBpbXBs ZW1lbmV0YXRpb24uDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJs ZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4t d2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRo ZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNl bnNlcy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVO REVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJB TlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9S IElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpbmNsdWRlICJVc2JDcmVkZW50aWFsUHJvdmlk ZXIuaCINCj4tDQo+LUNSRURFTlRJQUxfVEFCTEUgICAgICAgICAgICAqbVVzYlRhYmxlICAgICAg ID0gTlVMTDsNCj4tVVNCX1BST1ZJREVSX0NBTExCQUNLX0lORk8gICptQ2FsbGJhY2tJbmZvICAg PSBOVUxMOw0KPi1VU0JfQ1JFREVOVElBTF9JTkZPICAgICAgICAgKm1Vc2JJbmZvSGFuZGxlICA9 IE5VTEw7DQo+LQ0KPi1FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgZ1VzYkNyZWRlbnRp YWxQcm92aWRlckRyaXZlciA9IHsNCj4tICBVU0JfQ1JFREVOVElBTF9QUk9WSURFUl9HVUlELA0K Pi0gIEVGSV9VU0VSX0NSRURFTlRJQUxfQ0xBU1NfU0VDVVJFX0NBUkQsDQo+LSAgQ3JlZGVudGlh bEVucm9sbCwNCj4tICBDcmVkZW50aWFsRm9ybSwNCj4tICBDcmVkZW50aWFsVGlsZSwNCj4tICBD cmVkZW50aWFsVGl0bGUsDQo+LSAgQ3JlZGVudGlhbFVzZXIsDQo+LSAgQ3JlZGVudGlhbFNlbGVj dCwNCj4tICBDcmVkZW50aWFsRGVzZWxlY3QsDQo+LSAgQ3JlZGVudGlhbERlZmF1bHQsDQo+LSAg Q3JlZGVudGlhbEdldEluZm8sDQo+LSAgQ3JlZGVudGlhbEdldE5leHRJbmZvLA0KPi0gIEVGSV9D UkVERU5USUFMX0NBUEFCSUxJVElFU19FTlJPTEwsDQo+LSAgQ3JlZGVudGlhbERlbGV0ZQ0KPi19 Ow0KPi0NCj4tDQo+LS8qKg0KPi0gIEdldCBzdHJpbmcgYnkgc3RyaW5nIGlkIGZyb20gSElJIElu dGVyZmFjZS4NCj4tDQo+LQ0KPi0gIEBwYXJhbVtpbl0gSWQgICAgICBTdHJpbmcgSUQgdG8gZ2V0 IHRoZSBzdHJpbmcgZnJvbS4NCj4tDQo+LSAgQHJldHZhbCAgQ0hBUjE2ICogIFN0cmluZyBmcm9t IElELg0KPi0gIEByZXR2YWwgIE5VTEwgICAgICBJZiBlcnJvciBvY2N1cnMuDQo+LQ0KPi0qKi8N Cj4tQ0hBUjE2ICoNCj4tR2V0U3RyaW5nQnlJZCAoDQo+LSAgSU4gRUZJX1NUUklOR19JRCAgICAg ICAgICAgICBJZA0KPi0gICkNCj4tew0KPi0gIC8vDQo+LSAgLy8gR2V0IHRoZSBjdXJyZW50IHN0 cmluZyBmb3IgdGhlIGN1cnJlbnQgTGFuZ3VhZ2UNCj4tICAvLw0KPi0gIHJldHVybiBIaWlHZXRT dHJpbmcgKG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgSWQsIE5VTEwpOw0KPi19DQo+LQ0KPi0N Cj4tLyoqDQo+LSAgRXhwYW5kIHBhc3N3b3JkIHRhYmxlIHNpemUuDQo+LQ0KPi0qKi8NCj4tVk9J RA0KPi1FeHBhbmRUYWJsZVNpemUgKA0KPi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBDUkVERU5U SUFMX1RBQkxFICAqTmV3VGFibGU7DQo+LSAgVUlOVE4gICAgICAgICAgICAgQ291bnQ7DQo+LQ0K Pi0gIENvdW50ID0gbVVzYlRhYmxlLT5NYXhDb3VudCArIFVTQl9UQUJMRV9JTkM7DQo+LSAgLy8N Cj4tICAvLyBDcmVhdGUgbmV3IGNyZWRlbnRpYWwgdGFibGUuDQo+LSAgLy8NCj4tICBOZXdUYWJs ZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKA0KPi0gICAgICAgICAgICAgICBzaXplb2YgKENSRURFTlRJ QUxfVEFCTEUpIC0gc2l6ZW9mIChVU0JfSU5GTykgKw0KPi0gICAgICAgICAgICAgICBDb3VudCAq IHNpemVvZiAoVVNCX0lORk8pDQo+LSAgICAgICAgICAgICAgICk7DQo+LSAgQVNTRVJUIChOZXdU YWJsZSAhPSBOVUxMKTsNCj4tDQo+LSAgTmV3VGFibGUtPk1heENvdW50ID0gQ291bnQ7DQo+LSAg TmV3VGFibGUtPkNvdW50ICAgID0gbVVzYlRhYmxlLT5Db3VudDsNCj4tDQo+LSAgLy8NCj4tICAv LyBDb3B5IG9sZCBlbnRyaWVzLg0KPi0gIC8vDQo+LSAgQ29weU1lbSAoDQo+LSAgICAmTmV3VGFi bGUtPlVzZXJJbmZvLA0KPi0gICAgJm1Vc2JUYWJsZS0+VXNlckluZm8sDQo+LSAgICBtVXNiVGFi bGUtPkNvdW50ICogc2l6ZW9mIChVU0JfSU5GTykNCj4tICAgICk7DQo+LSAgRnJlZVBvb2wgKG1V c2JUYWJsZSk7DQo+LSAgbVVzYlRhYmxlID0gTmV3VGFibGU7DQo+LX0NCj4tDQo+LQ0KPi0vKioN Cj4tICBBZGQsIHVwZGF0ZSBvciBkZWxldGUgaW5mbyBpbiB0YWJsZSwgYW5kIHN5bmMgd2l0aCBO ViB2YXJpYWJsZS4NCj4tDQo+LSAgQHBhcmFtW2luXSAgSW5kZXggICAgIFRoZSBpbmRleCBvZiB0 aGUgcGFzc3dvcmQgaW4gdGFibGUuIElmIGluZGV4IGlzIGZvdW5kIGluDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgIHRhYmxlLCB1cGRhdGUgdGhlIGluZm8sIGVsc2UgYWRkIHRoZSBpbnRvIHRv IHRhYmxlLg0KPi0gIEBwYXJhbVtpbl0gIEluZm8gICAgICBUaGUgbmV3IGNyZWRlbnRpYWwgaW5m byB0byBhZGQgaW50byB0YWJsZS4gSWYgSW5mbyBpcyBOVUxMLA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICBkZWxldGUgdGhlIGluZm8gYnkgSW5kZXguDQo+LQ0KPi0gIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSICBJbmZvIGlzIE5VTEwgd2hlbiBzYXZlIHRoZSBpbmZvLg0KPi0gIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBNb2RpZnkgdGhlIHRhYmxlIHN1Y2Nlc3NmdWxs eS4NCj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgRmFpbGVkIHRvIG1vZGlmeSB0 aGUgdGFibGUuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1Nb2RpZnlUYWJsZSAoDQo+LSAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCwNCj4tICBJTiAg VVNCX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSW5mbyBPUFRJT05BTA0KPi0g ICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tICBVU0JfSU5GTyAgICAqTmV3VXNi SW5mbzsNCj4tDQo+LSAgTmV3VXNiSW5mbyA9IE5VTEw7DQo+LSAgaWYgKEluZGV4IDwgbVVzYlRh YmxlLT5Db3VudCkgew0KPi0gICAgaWYgKEluZm8gPT0gTlVMTCkgew0KPi0gICAgICAvLw0KPi0g ICAgICAvLyBEZWxldGUgdGhlIHNwZWNpZmllZCBlbnRyeS4NCj4tICAgICAgLy8NCj4tICAgICAg bVVzYlRhYmxlLT5Db3VudC0tOw0KPi0gICAgICBpZiAoSW5kZXggIT0gbVVzYlRhYmxlLT5Db3Vu dCkgew0KPi0gICAgICAgIE5ld1VzYkluZm8gPSAmbVVzYlRhYmxlLT5Vc2VySW5mb1ttVXNiVGFi bGUtPkNvdW50XTsNCj4tICAgICAgfQ0KPi0gICAgfSBlbHNlIHsNCj4tICAgICAgLy8NCj4tICAg ICAgLy8gVXBkYXRlIHRoZSBzcGVjaWZpZWQgZW50cnkuDQo+LSAgICAgIC8vDQo+LSAgICAgIE5l d1VzYkluZm8gPSBJbmZvOw0KPi0gICAgfQ0KPi0gIH0gZWxzZSB7DQo+LSAgICAvLw0KPi0gICAg Ly8gQWRkIGEgbmV3IGVudHJ5DQo+LSAgICAvLw0KPi0gICAgaWYgKEluZm8gPT0gTlVMTCkgew0K Pi0gICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gICAgfQ0KPi0NCj4tICAg IGlmIChtVXNiVGFibGUtPkNvdW50ID49IG1Vc2JUYWJsZS0+TWF4Q291bnQpIHsNCj4tICAgICAg RXhwYW5kVGFibGVTaXplICgpOw0KPi0gICAgfQ0KPi0NCj4tICAgIE5ld1VzYkluZm8gPSBJbmZv Ow0KPi0gICAgbVVzYlRhYmxlLT5Db3VudCsrOw0KPi0gIH0NCj4tDQo+LSAgaWYgKE5ld1VzYklu Zm8gIT0gTlVMTCkgew0KPi0gICAgQ29weU1lbSAoJm1Vc2JUYWJsZS0+VXNlckluZm9bSW5kZXhd LCBOZXdVc2JJbmZvLCBzaXplb2YNCj4oVVNCX0lORk8pKTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+ LSAgLy8gU2F2ZSB0aGUgY3JlZGVudGlhbCB0YWJsZS4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IGdS VC0+U2V0VmFyaWFibGUgKA0KPi0gICAgICAgICAgICAgICAgICBMIlVzYkNyZWRlbnRpYWwiLA0K Pi0gICAgICAgICAgICAgICAgICAmZ1VzYkNyZWRlbnRpYWxQcm92aWRlckd1aWQsDQo+LSAgICAg ICAgICAgICAgICAgIEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfA0KPkVGSV9WQVJJQUJMRV9C T09UU0VSVklDRV9BQ0NFU1MsDQo+LSAgICAgICAgICAgICAgICAgIG1Vc2JUYWJsZS0+Q291bnQg KiBzaXplb2YgKFVTQl9JTkZPKSwNCj4tICAgICAgICAgICAgICAgICAgJm1Vc2JUYWJsZS0+VXNl ckluZm8NCj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICByZXR1cm4gU3RhdHVzOw0KPi19DQo+ LQ0KPi0NCj4tLyoqDQo+LSAgQ3JlYXRlIGEgY3JlZGVudGlhbCB0YWJsZQ0KPi0NCj4tICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgQ3JlYXRlIGEgY3JlZGVudGlhbCB0YWJsZSBzdWNjZXNzZnVs bHkuDQo+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgIEZhaWxlZCB0byBjcmVhdGUgYSBwYXNz d29yZC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUluaXRDcmVkZW50aWFsVGFibGUgKA0K Pi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LSAgVUlOVDgg ICAgICAgKlZhcjsNCj4tICBVSU5UTiAgICAgICBWYXJTaXplOw0KPi0NCj4tICAvLw0KPi0gIC8v IEdldCBVc2IgY3JlZGVudGlhbCBkYXRhIGZyb20gTlYgdmFyaWFibGUuDQo+LSAgLy8NCj4tICBW YXJTaXplID0gMDsNCj4tICBWYXIgICAgID0gTlVMTDsNCj4tICBTdGF0dXMgID0gZ1JULT5HZXRW YXJpYWJsZSAoDQo+LSAgICAgICAgICAgICAgICAgICBMIlVzYkNyZWRlbnRpYWwiLA0KPi0gICAg ICAgICAgICAgICAgICAgJmdVc2JDcmVkZW50aWFsUHJvdmlkZXJHdWlkLA0KPi0gICAgICAgICAg ICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICZWYXJTaXplLA0KPi0gICAgICAg ICAgICAgICAgICAgVmFyDQo+LSAgICAgICAgICAgICAgICAgICApOw0KPi0gIGlmIChTdGF0dXMg PT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4tICAgIFZhciA9IEFsbG9jYXRlWmVyb1Bvb2wg KFZhclNpemUpOw0KPi0gICAgaWYgKFZhciA9PSBOVUxMKSB7DQo+LSAgICAgIHJldHVybiBFRklf T1VUX09GX1JFU09VUkNFUzsNCj4tICAgIH0NCj4tICAgIFN0YXR1cyA9IGdSVC0+R2V0VmFyaWFi bGUgKA0KPi0gICAgICAgICAgICAgICAgICAgIEwiVXNiQ3JlZGVudGlhbCIsDQo+LSAgICAgICAg ICAgICAgICAgICAgJmdVc2JDcmVkZW50aWFsUHJvdmlkZXJHdWlkLA0KPi0gICAgICAgICAgICAg ICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICAgJlZhclNpemUsDQo+LSAgICAgICAg ICAgICAgICAgICAgVmFyDQo+LSAgICAgICAgICAgICAgICAgICAgKTsNCj4tICB9DQo+LSAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoU3RhdHVzICE9IEVGSV9OT1RfRk9VTkQpKSB7DQo+LSAg ICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBJbml0IFVzYiBjcmVk ZW50aWFsIHRhYmxlLg0KPi0gIC8vDQo+LSAgbVVzYlRhYmxlID0gQWxsb2NhdGVaZXJvUG9vbCAo DQo+LSAgICAgICAgICAgICAgICBzaXplb2YgKENSRURFTlRJQUxfVEFCTEUpIC0gc2l6ZW9mIChV U0JfSU5GTykgKw0KPi0gICAgICAgICAgICAgICAgVVNCX1RBQkxFX0lOQyAqIHNpemVvZiAoVVNC X0lORk8pICsNCj4tICAgICAgICAgICAgICAgIFZhclNpemUNCj4tICAgICAgICAgICAgICAgICk7 DQo+LSAgaWYgKG1Vc2JUYWJsZSA9PSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAoVmFyKTsNCj4t ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9DQo+LQ0KPi0gIG1Vc2JUYWJs ZS0+Q291bnQgICAgICA9IFZhclNpemUgLyBzaXplb2YgKFVTQl9JTkZPKTsNCj4tICBtVXNiVGFi bGUtPk1heENvdW50ICAgPSBtVXNiVGFibGUtPkNvdW50ICsgVVNCX1RBQkxFX0lOQzsNCj4tICBp ZiAoVmFyICE9IE5VTEwpIHsNCj4tICAgIENvcHlNZW0gKG1Vc2JUYWJsZS0+VXNlckluZm8sIFZh ciwgVmFyU2l6ZSk7DQo+LSAgICBGcmVlUG9vbCAoVmFyKTsNCj4tICB9DQo+LSAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgUmVhZCB0aGUgc3BlY2lmaWVkIGZp bGUgYnkgRmlsZU5hbWUgaW4gdGhlIFVzYiBrZXkgYW5kIHJldHVybiB0aGUgZmlsZSBzaXplIGlu DQo+QnVmZmVyU2l6ZQ0KPi0gIGFuZCBmaWxlIGNvbnRlbnQgaW4gQnVmZmVyLg0KPi0gIE5vdGU6 IHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZnJlZSB0aGUgYnVmZmVyIG1lbW9yeS4NCj4t DQo+LSAgQHBhcmFtICBGaWxlTmFtZSAgICAgICAgICAgICAgIEZpbGUgdG8gcmVhZC4NCj4tICBA cGFyYW0gIEJ1ZmZlciAgICAgICAgICAgICAgICAgUmV0dXJuZWQgd2l0aCBkYXRhIHJlYWQgZnJv bSB0aGUgZmlsZS4NCj4tICBAcGFyYW0gIEJ1ZmZlclNpemUgICAgICAgICAgICAgU2l6ZSBvZiB0 aGUgZGF0YSBidWZmZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBU aGUgY29tbWFuZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgRUZJX09VVF9P Rl9SRVNPVVJDRVMgICBSZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWxlZC4NCj4tICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgICAgICAgICAgRmlsZSBub3QgZm91bmQuDQo+LSAgQHJldHZhbCBFRklfREVW SUNFX0VSUk9SICAgICAgIERldmljZSBJL08gZXJyb3IuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRV Uw0KPi1HZXRGaWxlRGF0YSAoDQo+LSAgSU4gICAgIENIQVIxNiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpGaWxlTmFtZSwNCj4tICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKipCdWZmZXIsDQo+LSAgT1VUIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJTaXplDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmRleDsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg IEhhbmRsZUNvdW50Ow0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRj aEJ1ZmZlclNpemU7DQo+LSAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAqSGFuZGxl QnVmZmVyOw0KPi0gIEVGSV9GSUxFICAgICAgICAgICAgICAgICAgICAgICAgKlJvb3RGczsNCj4t ICBFRklfRklMRSAgICAgICAgICAgICAgICAgICAgICAgICpGaWxlSGFuZGxlOw0KPi0gIEVGSV9G SUxFX0lORk8gICAgICAgICAgICAgICAgICAgKkZpbGVJbmZvOw0KPi0gIEVGSV9TSU1QTEVfRklM RV9TWVNURU1fUFJPVE9DT0wgKlNpbXBsZUZpbGVTeXN0ZW07DQo+LSAgRUZJX0JMT0NLX0lPX1BS T1RPQ09MICAgICAgICAgICAqQmxrSW87DQo+LQ0KPi0gIEZpbGVJbmZvICAgICAgPSBOVUxMOw0K Pi0gIEZpbGVIYW5kbGUgICAgPSBOVUxMOw0KPi0NCj4tICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhh bmRsZUJ1ZmZlciAoDQo+LSAgICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+LSAgICAgICAg ICAgICAgICAgICZnRWZpU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR3VpZCwNCj4tICAgICAgICAg ICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPi0gICAg ICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIkNh biBub3QgTG9jYXRlIFNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbFxuIikpOw0KPi0gICAgZ290byBE b25lOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBGaW5kIGFuZCBvcGVuIHRoZSBmaWxlIGlu IHJlbW92YWJsZSBtZWRpYSBkaXNrLg0KPi0gIC8vDQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCj4tICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJv dG9jb2wgKA0KPi0gICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+LSAg ICAgICAgICAgICAgICAgICAgJmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkLA0KPi0gICAgICAgICAg ICAgICAgICAgIChWT0lEICoqKSAmQmxrSW8NCj4tICAgICAgICAgICAgICAgICAgICApOw0KPi0g ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBjb250aW51ZTsNCj4tICAgIH0N Cj4tDQo+LSAgICBpZiAoQmxrSW8tPk1lZGlhLT5SZW1vdmFibGVNZWRpYSkgew0KPi0gICAgICBT dGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4tICAgICAgICAgICAgICAgICAgICAgIEhh bmRsZUJ1ZmZlcltJbmRleF0sDQo+LSAgICAgICAgICAgICAgICAgICAgICAmZ0VmaVNpbXBsZUZp bGVTeXN0ZW1Qcm90b2NvbEd1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikg JlNpbXBsZUZpbGVTeXN0ZW0NCj4tICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgICBjb250aW51ZTsNCj4tICAgICAgfQ0K Pi0NCj4tICAgICAgU3RhdHVzID0gU2ltcGxlRmlsZVN5c3RlbS0+T3BlblZvbHVtZSAoDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltcGxlRmlsZVN5c3RlbSwNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUm9vdEZzDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsNCj4tICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPi0gICAgICAgIGNvbnRpbnVlOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICBTdGF0dXMgPSBS b290RnMtPk9wZW4gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgUm9vdEZzLA0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgJkZpbGVIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICBGaWxlTmFtZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVf UkVBRCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIDANCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICk7DQo+LSAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgICAg YnJlYWs7DQo+LSAgICAgIH0NCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIEZyZWVQb29sIChIYW5k bGVCdWZmZXIpOw0KPi0NCj4tICBpZiAoSW5kZXggPj0gSGFuZGxlQ291bnQpIHsNCj4tICAgIERF QlVHICgoREVCVUdfRVJST1IsICJDYW4gbm90IGZvdW5kIHRoZSB0b2tlbiBmaWxlIVxuIikpOw0K Pi0gICAgU3RhdHVzID0gRUZJX05PVF9GT1VORDsNCj4tICAgIGdvdG8gRG9uZTsNCj4tICB9DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gRmlndXJlIG91dCBob3cgYmlnIHRoZSBmaWxlIGlzLg0KPi0gIC8v DQo+LSAgU2NyYXRjaEJ1ZmZlclNpemUgPSAwOw0KPi0gIFN0YXR1cyA9IEZpbGVIYW5kbGUtPkdl dEluZm8gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICBGaWxlSGFuZGxlLA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAmZ0VmaUZpbGVJbmZvR3VpZCwNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgJlNjcmF0Y2hCdWZmZXJTaXplLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxM DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSAmJiAoU3RhdHVzICE9IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSkgew0KPi0gICAgREVCVUcgKChE RUJVR19FUlJPUiwgIkNhbiBub3Qgb2J0YWluIGZpbGUgc2l6ZSBpbmZvIVxuIikpOw0KPi0gICAg U3RhdHVzID0gRUZJX0RFVklDRV9FUlJPUjsNCj4tICAgIGdvdG8gRG9uZTsNCj4tICB9DQo+LQ0K Pi0gIEZpbGVJbmZvID0gQWxsb2NhdGVaZXJvUG9vbCAoU2NyYXRjaEJ1ZmZlclNpemUpOw0KPi0g IGlmIChGaWxlSW5mbyA9PSBOVUxMKSB7DQo+LSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQ2Fu IG5vdCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUgdG9rZW4NCj5maWxlIVxuIikpOw0K Pi0gICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+LSAgICBnb3RvIERvbmU7DQo+ LSAgfQ0KPi0NCj4tICBTdGF0dXMgPSBGaWxlSGFuZGxlLT5HZXRJbmZvICgNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgRmlsZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgJmdF ZmlGaWxlSW5mb0d1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICZTY3JhdGNoQnVmZmVy U2l6ZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgRmlsZUluZm8NCj4tICAgICAgICAgICAg ICAgICAgICAgICAgKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBERUJV RyAoKERFQlVHX0VSUk9SLCAiQ2FuIG5vdCBvYnRhaW4gZmlsZSBpbmZvIGZyb20gdGhlIHRva2Vu IGZpbGUhXG4iKSk7DQo+LSAgICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOw0KPi0gICAgZ290 byBEb25lOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3Ig dGhlIGZpbGUuDQo+LSAgLy8NCj4tICAqQnVmZmVyU2l6ZSA9IChVSU5UMzIpIEZpbGVJbmZvLT5G aWxlU2l6ZTsNCj4tICAqQnVmZmVyICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKCpCdWZmZXJTaXpl KTsNCj4tICBpZiAoKkJ1ZmZlciA9PSBOVUxMKSB7DQo+LSAgICBERUJVRyAoKERFQlVHX0VSUk9S LCAiQ2FuIG5vdCBhbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgdGhlIGZpbGUhXG4iKSk7DQo+LSAgICBT dGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICAgIGdvdG8gRG9uZTsNCj4tICB9DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gTG9hZCBmaWxlIGludG8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuDQo+ LSAgLy8NCj4tICBTdGF0dXMgPSBGaWxlSGFuZGxlLT5SZWFkIChGaWxlSGFuZGxlLCBCdWZmZXJT aXplLCAqQnVmZmVyKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBGcmVl UG9vbCAoKkJ1ZmZlcik7DQo+LSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQ2FuIG5vdCByZWFk IHRoZSB0b2tlbiBmaWxlIVxuIikpOw0KPi0gICAgU3RhdHVzID0gRUZJX0RFVklDRV9FUlJPUjsN Cj4tICAgIGdvdG8gRG9uZTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2xvc2UgZmlsZS4N Cj4tICAvLw0KPi0gIFN0YXR1cyA9IEZpbGVIYW5kbGUtPkNsb3NlIChGaWxlSGFuZGxlKTsNCj4t ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBGcmVlUG9vbCAoKkJ1ZmZlcik7DQo+ LSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQ2FuIG5vdCBjbG9zZSB0aGUgdG9rZW4gZmlsZSAh XG4iKSk7DQo+LSAgICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOw0KPi0gIH0NCj4tDQo+LURv bmU6DQo+LQ0KPi0gIGlmIChGaWxlSW5mbyAhPSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAoRmls ZUluZm8pOw0KPi0gIH0NCj4tDQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8q Kg0KPi0gIEhhc2ggdGhlIGRhdGEgdG8gZ2V0IGNyZWRlbnRpYWwuDQo+LQ0KPi0gIEBwYXJhbVtp bl0gICBCdWZmZXIgICAgICAgICBQb2ludHMgdG8gdGhlIGRhdGEgYnVmZmVyDQo+LSAgQHBhcmFt W2luXSAgIEJ1ZmZlclNpemUgICAgIFRoZSBzaXplIG9mIGRhdGEgaW4gYnVmZmVyLCBpbiBieXRl cy4NCj4tICBAcGFyYW1bb3V0XSAgQ3JlZGVudGlhbCAgICAgUG9pbnRzIHRvIHRoZSBoYXNoZWQg cmVzdWx0DQo+LQ0KPi0gIEByZXR2YWwgICAgICBUUlVFICAgICAgICAgICBIYXNoIHRoZSBkYXRh IHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsICAgICAgRkFMU0UgICAgICAgICAgRmFpbGVkIHRv IGhhc2ggdGhlIGRhdGEuDQo+LQ0KPi0qKi8NCj4tQk9PTEVBTg0KPi1HZW5lcmF0ZUNyZWRlbnRp YWwgKA0KPi0gIElOICAgICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1 ZmZlciwNCj4tICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1 ZmZlclNpemUsDQo+LSAgICAgT1VUICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqQ3JlZGVudGlhbA0KPi0gICkNCj4tew0KPi0gIEJPT0xFQU4gICAgICAgICAgIFN0YXR1czsN Cj4tICBVSU5UTiAgICAgICAgICAgICBIYXNoU2l6ZTsNCj4tICBWT0lEICAgICAgICAgICAgICAq SGFzaDsNCj4tDQo+LSAgSGFzaFNpemUgPSBTaGExR2V0Q29udGV4dFNpemUgKCk7DQo+LSAgSGFz aCAgICAgPSBBbGxvY2F0ZVBvb2wgKEhhc2hTaXplKTsNCj4tICBBU1NFUlQgKEhhc2ggIT0gTlVM TCk7DQo+LQ0KPi0gIFN0YXR1cyA9IFNoYTFJbml0IChIYXNoKTsNCj4tICBpZiAoIVN0YXR1cykg ew0KPi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4tDQo+LSAgU3RhdHVzID0gU2hhMVVwZGF0ZSAo SGFzaCwgQnVmZmVyLCBCdWZmZXJTaXplKTsNCj4tICBpZiAoIVN0YXR1cykgew0KPi0gICAgZ290 byBEb25lOw0KPi0gIH0NCj4tDQo+LSAgU3RhdHVzID0gU2hhMUZpbmFsIChIYXNoLCBDcmVkZW50 aWFsKTsNCj4tDQo+LURvbmU6DQo+LSAgRnJlZVBvb2wgKEhhc2gpOw0KPi0gIHJldHVybiBTdGF0 dXM7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBSZWFkIHRoZSB0b2tlbiBmaWxlLCBhbmQgZGVm YXVsdCB0aGUgVG9rZW4gaXMgc2F2ZWQgYXQgdGhlIGJlZ2luaW5nIG9mIHRoZSBmaWxlLg0KPi0N Cj4tICBAcGFyYW1bb3V0XSAgVG9rZW4gICAgICAgICAgICBUb2tlbiByZWFkIGZyb20gYSBUb2tl biBmaWxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBSZWFkIGEgVG9r ZW4gc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgIEZhaWxz IHRvIHJlYWQgYSBUb2tlbi4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUdldFRva2VuICgN Cj4tICBPVVQgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqVG9rZW4NCj4t ICApDQo+LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LSAgVUlOVDggICAgICAgKkJ1ZmZl cjsNCj4tICBVSU5UTiAgICAgICBCdWZTaXplOw0KPi0gIENIQVIxNiAgICAgICpUb2tlbkZpbGU7 DQo+LQ0KPi0gIEJ1ZlNpemUgPSAwOw0KPi0gIEJ1ZmZlciAgPSBOVUxMOw0KPi0gIFRva2VuRmls ZSA9IFBjZEdldFB0ciAoUGNkRml4ZWRVc2JDcmVkZW50aWFsUHJvdmlkZXJUb2tlbkZpbGVOYW1l KTsNCj4tICBTdGF0dXMgPSBHZXRGaWxlRGF0YSAoVG9rZW5GaWxlLCAoVk9JRCAqKSZCdWZmZXIs ICZCdWZTaXplKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBERUJVRyAo KERFQlVHX0VSUk9SLCAiUmVhZCBmaWxlICVzIGZyb20gVVNCIGVycm9yISBTdGF0dXM9KCVyKVxu IiwNCj5Ub2tlbkZpbGUsIFN0YXR1cykpOw0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+ LQ0KPi0gIGlmICghR2VuZXJhdGVDcmVkZW50aWFsIChCdWZmZXIsIEJ1ZlNpemUsIFRva2VuKSkg ew0KPi0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIkdlbmVyYXRlIGNyZWRlbnRpYWwgZnJvbSBy ZWFkIGRhdGEgZmFpbGVkIVxuIikpOw0KPi0gICAgRnJlZVBvb2wgKEJ1ZmZlcik7DQo+LSAgICBy ZXR1cm4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTjsNCj4tICB9DQo+LQ0KPi0gIEZyZWVQb29sIChC dWZmZXIpOw0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0g IEZpbmQgYSB1c2VyIGluZm9tYXRpb24gcmVjb3JkIGJ5IHRoZSBpbmZvcm1hdGlvbiByZWNvcmQg dHlwZS4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBhbGwgdXNlciBpbmZvcm1hdGlv biByZWNvcmRzIG9mIFVzZXIgZnJvbSBiZWdpbm5pbmcNCj4tICB1bnRpbCBlaXRoZXIgdGhlIGlu Zm9ybWF0aW9uIGlzIGZvdW5kIG9yIHRoZXJlIGFyZSBubyBtb3JlIHVzZXIgaW5mb21hdGlvbg0K Pi0gIHJlY29yZC4gQSBtYXRjaCBvY2N1cnMgd2hlbiBhIEluZm8uSW5mb1R5cGUgZmllbGQgbWF0 Y2hlcyB0aGUgdXNlcg0KPmluZm9ybWF0aW9uDQo+LSAgcmVjb3JkIHR5cGUuDQo+LQ0KPi0gIEBw YXJhbVtpbl0gICAgIFVzZXIgICAgICBQb2ludHMgdG8gdGhlIHVzZXIgcHJvZmlsZSByZWNvcmQg dG8gc2VhcmNoLg0KPi0gIEBwYXJhbVtpbl0gICAgIEluZm9UeXBlICBUaGUgaW5mb21hdGlvbiB0 eXBlIHRvIGJlIHNlYXJjaGVkLg0KPi0gIEBwYXJhbVtvdXRdICAgIEluZm8gICAgICBQb2ludHMg dG8gdGhlIHVzZXIgaW5mbyBmb3VuZCwgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQ0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICB0byBmcmVlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgRmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbiBzdWNjZXNzZnVsbHkuDQo+LSAgQHJl dHZhbCBPdGhlcnMgICAgICAgICAgIEZhaWwgdG8gZmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbi4N Cj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUZpbmRVc2VySW5mb0J5VHlwZSAoDQo+LSAgSU4g ICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgSU4g ICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9UeXBlLA0KPi0g IE9VVCAgICAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAqKkluZm8NCj4t ICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJ X1VTRVJfSU5GTyAgICAgICAgICAgICAgKlVzZXJJbmZvOw0KPi0gIFVJTlROICAgICAgICAgICAg ICAgICAgICAgIFVzZXJJbmZvU2l6ZTsNCj4tICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICBV c2VySW5mb0hhbmRsZTsNCj4tICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAqVXNlck1hbmFn ZXI7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRmluZCB1c2VyIGluZm9ybWF0aW9uIGJ5IGluZm9ybWF0 aW9uIHR5cGUuDQo+LSAgLy8NCj4tICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgU3RhdHVzID0gZ0JTLT5Mb2Nh dGVQcm90b2NvbCAoDQo+LSAgICAgICAgICAgICAgICAgICZnRWZpVXNlck1hbmFnZXJQcm90b2Nv bEd1aWQsDQo+LSAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgIChW T0lEICoqKSAmVXNlck1hbmFnZXINCj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tICB9DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IGVhY2ggdXNlciBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0N Cj4tICBVc2VySW5mb0hhbmRsZSA9IE5VTEw7DQo+LSAgVXNlckluZm8gICAgICAgPSBOVUxMOw0K Pi0gIFVzZXJJbmZvU2l6ZSAgID0gMDsNCj4tICB3aGlsZSAoVFJVRSkgew0KPi0gICAgU3RhdHVz ID0gVXNlck1hbmFnZXItPkdldE5leHRJbmZvIChVc2VyTWFuYWdlciwgVXNlciwNCj4mVXNlcklu Zm9IYW5kbGUpOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBicmVh azsNCj4tICAgIH0NCj4tICAgIC8vDQo+LSAgICAvLyBHZXQgaW5mb3JtYXRpb24uDQo+LSAgICAv Lw0KPi0gICAgU3RhdHVzID0gVXNlck1hbmFnZXItPkdldEluZm8gKA0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgVXNlck1hbmFnZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVc2VyLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckluZm9IYW5kbGUsDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZVc2VySW5mb1NpemUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7DQo+LSAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+LSAgICAg IGlmIChVc2VySW5mbyAhPSBOVUxMKSB7DQo+LSAgICAgICAgRnJlZVBvb2wgKFVzZXJJbmZvKTsN Cj4tICAgICAgfQ0KPi0gICAgICBVc2VySW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKFVzZXJJbmZv U2l6ZSk7DQo+LSAgICAgIGlmIChVc2VySW5mbyA9PSBOVUxMKSB7DQo+LSAgICAgICAgcmV0dXJu IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gICAgICB9DQo+LSAgICAgIFN0YXR1cyA9IFVzZXJN YW5hZ2VyLT5HZXRJbmZvICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlck1h bmFnZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVzZXJJbmZvSGFuZGxlLA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVc2VySW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JlVzZXJJbmZvU2l6ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gICAg fQ0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBicmVhazsNCj4tICAg IH0NCj4tDQo+LSAgICBBU1NFUlQgKFVzZXJJbmZvICE9IE5VTEwpOw0KPi0gICAgaWYgKFVzZXJJ bmZvLT5JbmZvVHlwZSA9PSBJbmZvVHlwZSkgew0KPi0gICAgICAqSW5mbyA9IFVzZXJJbmZvOw0K Pi0gICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICBpZiAo VXNlckluZm8gIT0gTlVMTCkgew0KPi0gICAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4tICB9DQo+ LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFRoaXMgZnVuY3Rpb24g aW5pdGlhbGl6ZSB0aGUgZGF0YSBtYWlubHkgdXNlZCBpbiBmb3JtIGJyb3dzZXIuDQo+LQ0KPi0g IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgSW5pdGlhbGl6ZSBmb3JtIGRhdGEgc3VjY2Vz c2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgRmFpbCB0byBJbml0aWFs aXplIGZvcm0gZGF0YS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUluaXRGb3JtQnJvd3Nl ciAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIFVTQl9QUk9WSURFUl9DQUxMQkFDS19JTkZP ICAqQ2FsbGJhY2tJbmZvOw0KPi0NCj4tICAvLw0KPi0gIC8vIEluaXRpYWxpemUgZHJpdmVyIHBy aXZhdGUgZGF0YS4NCj4tICAvLw0KPi0gIENhbGxiYWNrSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wg KHNpemVvZiAoVVNCX1BST1ZJREVSX0NBTExCQUNLX0lORk8pKTsNCj4tICBpZiAoQ2FsbGJhY2tJ bmZvID09IE5VTEwpIHsNCj4tICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9 DQo+LQ0KPi0gIENhbGxiYWNrSW5mby0+RHJpdmVySGFuZGxlICA9IE5VTEw7DQo+LQ0KPi0gIC8v DQo+LSAgLy8gUHVibGlzaCBISUkgZGF0YS4NCj4tICAvLw0KPi0gIENhbGxiYWNrSW5mby0+SGlp SGFuZGxlID0gSGlpQWRkUGFja2FnZXMgKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZ1VzYkNyZWRlbnRpYWxQcm92aWRlckd1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENhbGxiYWNrSW5mby0+RHJpdmVySGFuZGxlLA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVc2JDcmVkZW50aWFsUHJvdmlkZXJTdHJpbmdzLA0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 DQo+LSAgaWYgKENhbGxiYWNrSW5mby0+SGlpSGFuZGxlID09IE5VTEwpIHsNCj4tICAgIHJldHVy biBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9DQo+LSAgbUNhbGxiYWNrSW5mbyA9IENhbGxi YWNrSW5mbzsNCj4tDQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoq DQo+LSAgRW5yb2xsIGEgdXNlciBvbiBhIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LQ0KPi0gIFRo aXMgZnVuY3Rpb24gZW5yb2xscyBhIHVzZXIgb24gdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLiBJ ZiB0aGUgdXNlciBleGlzdHMgb24NCj4tICB0aGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIsIHVwZGF0 ZSB0aGUgdXNlciBpbmZvcm1hdGlvbiBvbiB0aGlzIGNyZWRlbnRpYWwNCj5wcm92aWRlcjsNCj4t ICBvdGhlcndpc2UgYWRkIHRoZSB1c2VyIGluZm9ybWF0aW9uIG9uIGNyZWRlbnRpYWwgcHJvdmlk ZXIuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gVGhpcyAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhp cyBpbnN0YW5jZSBvZg0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJh bVtpbl0gVXNlciAgICAgICAgICAgICAgICBUaGUgdXNlciBwcm9maWxlIHRvIGVucm9sbC4NCj4t DQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFVzZXIgcHJvZmlsZSB3YXMgc3Vj Y2Vzc2Z1bGx5IGVucm9sbGVkLg0KPi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBD dXJyZW50IHVzZXIgcHJvZmlsZSBkb2VzIG5vdCBwZXJtaXQNCj5lbnJvbGxtZW50IG9uIHRoZQ0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByb2ZpbGUgaGFuZGxlLiBF aXRoZXIgdGhlIHVzZXIgcHJvZmlsZSBjYW5ub3QgZW5yb2xsDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9uIGFueSB1c2VyIHByb2ZpbGUgb3IgY2Fubm90IGVucm9sbCBvbiBh IHVzZXIgcHJvZmlsZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciB0 aGFuIHRoZSBjdXJyZW50IHVzZXIgcHJvZmlsZS4NCj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRF RCAgICAgICAgVGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyIGRvZXMgbm90IHN1cHBvcnQNCj5lbnJv bGxtZW50IGluDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcmUtT1Mu DQo+LSAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSBuZXcgY3JlZGVudGlhbCBj b3VsZCBub3QgYmUgY3JlYXRlZA0KPmJlY2F1c2Ugb2YgYSBkZXZpY2UNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXJyb3IuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgIFVzZXIgZG9lcyBub3QgcmVmZXIgdG8gYSB2YWxpZCB1c2VyDQo+cHJvZmlsZSBoYW5k bGUuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbEVucm9s bCAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpU aGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBV c2VyDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4tICBVU0JfSU5GTyAgICAgICAg ICAgICAgICAgIFVzYkluZm87DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAqVXNlcklu Zm87DQo+LSAgRUZJX0lOUFVUX0tFWSAgICAgICAgICAgICBLZXk7DQo+LSAgVUlOVDggICAgICAg ICAgICAgICAgICAgICAqVXNlcklkOw0KPi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgKlF1 ZXN0aW9uU3RyOw0KPi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgKlByb21wdFN0cjsNCj4t DQo+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChVc2VyID09IE5VTEwpKSB7DQo+LSAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBHZXQg VXNlciBJZGVudGlmaWVyDQo+LSAgLy8NCj4tICBVc2VySW5mbyA9IE5VTEw7DQo+LSAgU3RhdHVz ID0gRmluZFVzZXJJbmZvQnlUeXBlICgNCj4tICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAgICAg ICAgICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JELA0KPi0gICAgICAgICAgICAgJlVz ZXJJbmZvDQo+LSAgICAgICAgICAgICApOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICBDb3B5 TWVtIChVc2JJbmZvLlVzZXJJZCwgKFVJTlQ4ICopIChVc2VySW5mbyArIDEpLCBzaXplb2YNCj4o RUZJX1VTRVJfSU5GT19JREVOVElGSUVSKSk7DQo+LSAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4t DQo+LSAgLy8NCj4tICAvLyBHZXQgVG9rZW4gYW5kIFVzZXIgSUQgdG8gVXNiSW5mby4NCj4tICAv Lw0KPi0gIFN0YXR1cyA9IEdldFRva2VuIChVc2JJbmZvLlRva2VuKTsNCj4tICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+LSAgICBRdWVzdGlvblN0ciA9IEdldFN0cmluZ0J5SWQgKFNUUklO R19UT0tFTg0KPihTVFJfUkVBRF9VU0JfVE9LRU5fRVJST1IpKTsNCj4tICAgIFByb21wdFN0ciAg ID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VOIChTVFJfSU5TRVJUX1VTQl9UT0tFTikpOw0K Pi0gICAgQ3JlYXRlUG9wVXAgKA0KPi0gICAgICBFRklfTElHSFRHUkFZIHwgRUZJX0JBQ0tHUk9V TkRfQkxVRSwNCj4tICAgICAgJktleSwNCj4tICAgICAgUXVlc3Rpb25TdHIsDQo+LSAgICAgIEwi IiwNCj4tICAgICAgUHJvbXB0U3RyLA0KPi0gICAgICBOVUxMDQo+LSAgICAgICk7DQo+LSAgICBG cmVlUG9vbCAoUXVlc3Rpb25TdHIpOw0KPi0gICAgRnJlZVBvb2wgKFByb21wdFN0cik7DQo+LSAg ICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayB3aGV0aGVy IFVzZXIgaXMgZXZlciBlbnJvbGxlZCBpbiB0aGUgcHJvdmlkZXIuDQo+LSAgLy8NCj4tICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBtVXNiVGFibGUtPkNvdW50OyBJbmRleCsrKSB7DQo+LSAgICBV c2VySWQgPSAoVUlOVDggKikgJm1Vc2JUYWJsZS0+VXNlckluZm9bSW5kZXhdLlVzZXJJZDsNCj4t ICAgIGlmIChDb21wYXJlTWVtIChVc2VySWQsIChVSU5UOCAqKSAmVXNiSW5mby5Vc2VySWQsIHNp emVvZg0KPihFRklfVVNFUl9JTkZPX0lERU5USUZJRVIpKSA9PSAwKSB7DQo+LSAgICAgIC8vDQo+ LSAgICAgIC8vIFVzZXIgYWxyZWFkeSBleGlzdHMsIHVwZGF0ZSB0aGUgcGFzc3dvcmQuDQo+LSAg ICAgIC8vDQo+LSAgICAgIGJyZWFrOw0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAv LyBFbnJvbGwgdGhlIFVzZXIgdG8gdGhlIHByb3ZpZGVyLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0g TW9kaWZ5VGFibGUgKEluZGV4LCAmVXNiSW5mbyk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIHJldHVybiBFRklfU1VD Q0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFJldHVybnMgdGhlIHVzZXIgaW50ZXJmYWNl IGluZm9ybWF0aW9uIHVzZWQgZHVyaW5nIHVzZXIgaWRlbnRpZmljYXRpb24uDQo+LQ0KPi0gIFRo aXMgZnVuY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9ybSB1c2VkIHdoZW4g aW50ZXJhY3RpbmcNCj53aXRoIHRoZQ0KPi0gIHVzZXIgZHVyaW5nIHVzZXIgaWRlbnRpZmljYXRp b24uIFRoZSBmb3JtIGlzIHRoZSBmaXJzdCBlbmFibGVkIGZvcm0gaW4gdGhlDQo+Zm9ybS1zZXQN Cj4tICBjbGFzcyBFRklfSElJX1VTRVJfQ1JFREVOVElBTF9GT1JNU0VUX0dVSUQgaW5zdGFsbGVk IG9uIHRoZSBISUkNCj5oYW5kbGUgSGlpSGFuZGxlLiBJZg0KPi0gIHRoZSB1c2VyIGNyZWRlbnRp YWwgcHJvdmlkZXIgZG9lcyBub3QgcmVxdWlyZSBhIGZvcm0gdG8gaWRlbnRpZnkgdGhlIHVzZXIs DQo+dGhlbiB0aGlzDQo+LSAgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBFRklfTk9UX0ZPVU5ELg0K Pi0NCj4tICBAcGFyYW1baW5dICBUaGlzICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9m IHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtvdXRdIEhp aSAgICAgICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJIGRhdGFiYXNlIGhhbmRsZS4NCj4tICBA cGFyYW1bb3V0XSBGb3JtU2V0SWQgIE9uIHJldHVybiwgaG9sZHMgdGhlIGlkZW50aWZpZXIgb2Yg dGhlIGZvcm0gc2V0DQo+d2hpY2ggY29udGFpbnMNCj4tICAgICAgICAgICAgICAgICAgICAgICAg IHRoZSBmb3JtIHVzZWQgZHVyaW5nIHVzZXIgaWRlbnRpZmljYXRpb24uDQo+LSAgQHBhcmFtW291 dF0gRm9ybUlkICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBmb3Jt IHVzZWQNCj5kdXJpbmcgdXNlcg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmlj YXRpb24uDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBGb3JtIHJldHVy bmVkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgRm9y bSBub3QgcmV0dXJuZWQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEhpaSBp cyBOVUxMIG9yIEZvcm1TZXRJZCBpcyBOVUxMIG9yDQo+Rm9ybUlkIGlzIE5VTEwuDQo+LQ0KPi0q Ki8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbEZvcm0gKA0KPi0gIElOIENP TlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4tICBPVVQg ICAgICAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgKkhpaSwNCj4tICBPVVQg ICAgICAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkZvcm1TZXRJZCwNCj4t ICBPVVQgICAgICAgRUZJX0ZPUk1fSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkZvcm1JZA0K Pi0gICkNCj4tew0KPi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoSGlpID09IE5VTEwpIHx8DQo+ LSAgICAgIChGb3JtU2V0SWQgPT0gTlVMTCkgfHwgKEZvcm1JZCA9PSBOVUxMKSkgew0KPi0gICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9OT1Rf Rk9VTkQ7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBSZXR1cm5zIGJpdG1hcCB1c2VkIHRvIGRl c2NyaWJlIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIHR5cGUuDQo+LQ0KPi0gIFRoaXMgb3B0aW9u YWwgZnVuY3Rpb24gcmV0dXJucyBhIGJpdG1hcCB3aGljaCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwg dG8gdGhlDQo+bnVtYmVyDQo+LSAgb2YgcGl4ZWxzIHNwZWNpZmllZCBieSBXaWR0aCBhbmQgSGVp Z2h0LiBJZiBubyBzdWNoIGJpdG1hcCBleGlzdHMsIHRoZW4NCj5FRklfTk9UX0ZPVU5EDQo+LSAg aXMgcmV0dXJuZWQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICAgIFRoaXMgICAgUG9pbnRzIHRvIHRo aXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAg QHBhcmFtW2luLCBvdXRdIFdpZHRoICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBkZXNpcmVkIGJp dG1hcCB3aWR0aC4gSWYNCj5OVUxMIHRoZW4gbm8NCj4tICAgICAgICAgICAgICAgICAgICAgICAg IGJpdG1hcCBpbmZvcm1hdGlvbiB3aWxsIGJlIHJldHVybmVkLiBPbiBleGl0LCBwb2ludHMgdG8g dGhlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCBvZiB0aGUgYml0bWFwIHJldHVy bmVkLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBIZWlnaHQgT24gZW50cnksIHBvaW50cyB0byB0aGUg ZGVzaXJlZCBiaXRtYXAgaGVpZ2h0LiBJZg0KPk5VTEwgdGhlbiBubw0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgYml0bWFwIGluZm9ybWF0aW9uIHdpbGwgYmUgcmV0dXJuZWQuIE9uIGV4aXQs IHBvaW50cyB0byB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCBvZiB0aGUg Yml0bWFwIHJldHVybmVkLg0KPi0gIEBwYXJhbVtvdXRdICAgIEhpaSAgICAgT24gcmV0dXJuLCBo b2xkcyB0aGUgSElJIGRhdGFiYXNlIGhhbmRsZS4NCj4tICBAcGFyYW1bb3V0XSAgICBJbWFnZSAg IE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBpbWFnZSBpZGVudGlmaWVyLg0KPi0NCj4tICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgSW1hZ2UgaWRlbnRpZmllciByZXR1cm5lZCBzdWNj ZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIEltYWdlIGlkZW50 aWZpZXIgbm90IHJldHVybmVkLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBI aWkgaXMgTlVMTCBvciBJbWFnZSBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4t RUZJQVBJDQo+LUNyZWRlbnRpYWxUaWxlICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVO VElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gT1VUICAgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpXaWR0aCwNCj4tICBJTiBPVVQgICAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKkhlaWdodCwNCj4tICBPVVQgICAgICAgRUZJX0hJSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgICAgKkhpaSwNCj4tICBPVVQgICAgICAgRUZJX0lNQUdF X0lEICAgICAgICAgICAgICAgICAgICAgICAgKkltYWdlDQo+LSAgKQ0KPi17DQo+LSAgaWYgKChU aGlzID09IE5VTEwpIHx8IChIaWkgPT0gTlVMTCkgfHwgKEltYWdlID09IE5VTEwpKSB7DQo+LSAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tICByZXR1cm4gRUZJX05P VF9GT1VORDsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFJldHVybnMgc3RyaW5nIHVzZWQgdG8g ZGVzY3JpYmUgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgdHlwZS4NCj4tDQo+LSAgVGhpcyBmdW5j dGlvbiByZXR1cm5zIGEgc3RyaW5nIHdoaWNoIGRlc2NyaWJlcyB0aGUgY3JlZGVudGlhbCBwcm92 aWRlci4gSWYgbm8NCj4tICBzdWNoIHN0cmluZyBleGlzdHMsIHRoZW4gRUZJX05PVF9GT1VORCBp cyByZXR1cm5lZC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhp cyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBA cGFyYW1bb3V0XSBIaWkgICAgICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFzZSBo YW5kbGUuDQo+LSAgQHBhcmFtW291dF0gU3RyaW5nICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBI SUkgc3RyaW5nIGlkZW50aWZpZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICBTdHJpbmcgaWRlbnRpZmllciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZh bCBFRklfTk9UX0ZPVU5EICAgICAgICAgIFN0cmluZyBpZGVudGlmaWVyIG5vdCByZXR1cm5lZC4N Cj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgU3RyaW5n IGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlh bFRpdGxlICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAg ICAgKlRoaXMsDQo+LSAgT1VUICAgICAgIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAg ICAgICpIaWksDQo+LSAgT1VUICAgICAgIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgICAg ICAgICpTdHJpbmcNCj4tICApDQo+LXsNCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKEhpaSA9 PSBOVUxMKSB8fCAoU3RyaW5nID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPi0gIH0NCj4tICAvLw0KPi0gIC8vIFNldCBIaWkgaGFuZGxlIGFuZCBTdHJp bmcgSUQuDQo+LSAgLy8NCj4tICAqSGlpICAgID0gbUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlOw0K Pi0gICpTdHJpbmcgPSBTVFJJTkdfVE9LRU4gKFNUUl9DUkVERU5USUFMX1RJVExFKTsNCj4tDQo+ LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgUmV0dXJuIHRo ZSB1c2VyIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50bHkgYXV0aGVudGlj YXRlZCB1c2VyLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVzZXIgaWRlbnRp ZmllciBvZiB0aGUgdXNlciBhdXRoZW50aWNhdGVkIGJ5IHRoaXMNCj5jcmVkZW50aWFsDQo+LSAg cHJvdmlkZXIuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFsLXJl bGF0ZWQgaW5mb3JtYXRpb24gaGFzDQo+YmVlbg0KPi0gIHN1Ym1pdHRlZCBvbiBhIGZvcm0gT1Ig YWZ0ZXIgYSBjYWxsIHRvIERlZmF1bHQoKSBoYXMgcmV0dXJuZWQgdGhhdCB0aGlzDQo+Y3JlZGVu dGlhbCBpcw0KPi0gIHJlYWR5IHRvIGxvZyBvbi4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAg ICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVO VElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgICAgVGhlIHVzZXIg cHJvZmlsZSBoYW5kbGUgb2YgdGhlIHVzZXIgcHJvZmlsZSBjdXJyZW50bHkNCj5iZWluZw0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyZWQgYnkgdGhlIHVzZXIgaWRlbnRp dHkgbWFuYWdlci4gSWYgTlVMTCwgdGhlbiBubyB1c2VyDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJvZmlsZSBpcyBjdXJyZW50bHkgdW5kZXIgY29uc2lkZXJhdGlvbi4NCj4tICBA cGFyYW1bb3V0XSBJZGVudGlmaWVyICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgdXNlciBp ZGVudGlmaWVyLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciBp ZGVudGlmaWVyIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVGSV9OT1RfUkVB RFkgICAgICAgICAgTm8gdXNlciBpZGVudGlmaWVyIGNhbiBiZSByZXR1cm5lZC4NCj4tICBAcmV0 dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgVGhlIHVzZXIgaGFzIGJlZW4gbG9ja2VkIG91dCBv ZiB0aGlzIHVzZXINCj5jcmVkZW50aWFsLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSICBUaGlzIGlzIE5VTEwsIG9yIElkZW50aWZpZXIgaXMgTlVMTC4NCj4tICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgICAgICAgICAgVXNlciBpcyBub3QgTlVMTCwgYW5kIHRoZSBzcGVjaWZpZWQg dXNlcg0KPmhhbmRsZSBjYW4ndCBiZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmb3VuZCBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRV Uw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbFVzZXIgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9D UkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4tICBJTiAgICAgICAgRUZJX1VTRVJf UFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgVXNlciwNCj4tICBPVVQgICAgICAgRUZJX1VTRVJf SU5GT19JREVOVElGSUVSICAgICAgICAgICAgKklkZW50aWZpZXINCj4tICApDQo+LXsNCj4tICBF RklfU1RBVFVTICAgIFN0YXR1czsNCj4tICBVSU5UTiAgICAgICAgIEluZGV4Ow0KPi0gIEVGSV9V U0VSX0lORk8gKlVzZXJJbmZvOw0KPi0gIFVJTlQ4ICAgICAgICAgKlVzZXJJZDsNCj4tICBVSU5U OCAgICAgICAgICpOZXdVc2VySWQ7DQo+LSAgVUlOVDggICAgICAgICAqVXNlclRva2VuOw0KPi0g IFVJTlQ4ICAgICAgICAgUmVhZFRva2VuW0hBU0hFRF9DUkVERU5USUFMX0xFTl07DQo+LSAgRUZJ X0lOUFVUX0tFWSBLZXk7DQo+LSAgQ0hBUjE2ICAgICAgICAqUXVlc3Rpb25TdHI7DQo+LSAgQ0hB UjE2ICAgICAgICAqUHJvbXB0U3RyOw0KPi0NCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKElk ZW50aWZpZXIgPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQo+LSAgfQ0KPi0NCj4tICBpZiAoVXNlciA9PSBOVUxMKSB7DQo+LSAgICAvLw0KPi0gICAgLy8g VmVyaWZ5IHRoZSBhdXRvIGxvZ29uIHVzZXIsIGdldCB1c2VyIGlkIGJ5IG1hdGNoZWQgdG9rZW4u DQo+LSAgICAvLw0KPi0gICAgaWYgKG1Vc2JUYWJsZS0+Q291bnQgPT0gMCkgew0KPi0gICAgICBy ZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4tICAgIH0NCj4tDQo+LSAgICAvLw0KPi0gICAgLy8gTm8g dXNlciBzZWxlY3RlZCwgZ2V0IHRva2VuIGZpcnN0IGFuZCB2ZXJpZnkgdGhlIHVzZXIgZXhpc3Rl ZCBpbiB1c2VyDQo+ZGF0YWJhc2UuDQo+LSAgICAvLw0KPi0gICAgU3RhdHVzID0gR2V0VG9rZW4g KFJlYWRUb2tlbik7DQo+LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgIHJl dHVybiBFRklfTk9UX1JFQURZOw0KPi0gICAgfQ0KPi0NCj4tICAgIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IG1Vc2JUYWJsZS0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgICAgLy8NCj4tICAgICAg Ly8gZmluZCB0aGUgc3BlY2lmaWVkIGNyZWRlbnRpYWwgaW4gdGhlIFVzYiBjcmVkZW50aWFsIGRh dGFiYXNlLg0KPi0gICAgICAvLw0KPi0gICAgICBVc2VyVG9rZW4gPSBtVXNiVGFibGUtPlVzZXJJ bmZvW0luZGV4XS5Ub2tlbjsNCj4tICAgICAgaWYgKENvbXBhcmVNZW0gKFVzZXJUb2tlbiwgUmVh ZFRva2VuLCBIQVNIRURfQ1JFREVOVElBTF9MRU4pID09DQo+MCkgew0KPi0gICAgICAgIFVzZXJJ ZCAgPSAoVUlOVDggKikgJm1Vc2JUYWJsZS0+VXNlckluZm9bSW5kZXhdLlVzZXJJZDsNCj4tICAg ICAgICBDb3B5TWVtIChJZGVudGlmaWVyLCBVc2VySWQsIHNpemVvZiAoRUZJX1VTRVJfSU5GT19J REVOVElGSUVSKSk7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgICB9DQo+ LSAgICB9DQo+LQ0KPi0gICAgcmV0dXJuIEVGSV9OT1RfUkVBRFk7DQo+LSAgfQ0KPi0NCj4tICAv Lw0KPi0gIC8vIFVzZXIgaXMgbm90IE5VTEwgaGVyZS4gUmVhZCBhIHRva2VuLCBhbmQgY2hlY2sg d2hldGhlciB0aGUgdG9rZW4NCj5tYXRjaGVzIHdpdGgNCj4tICAvLyB0aGUgc2VsZWN0ZWQgdXNl cidzIFRva2VuLiBJZiBub3QsIHRyeSB0byBmaW5kIGEgdG9rZW4gaW4gdG9rZW4gREIgdG8NCj5t YXRjaGVzDQo+LSAgLy8gd2l0aCByZWFkIHRva2VuLg0KPi0gIC8vDQo+LQ0KPi0gIFN0YXR1cyA9 IEdldFRva2VuIChSZWFkVG9rZW4pOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4t ICAgIFF1ZXN0aW9uU3RyID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+KFNUUl9SRUFE X1VTQl9UT0tFTl9FUlJPUikpOw0KPi0gICAgUHJvbXB0U3RyICAgPSBHZXRTdHJpbmdCeUlkIChT VFJJTkdfVE9LRU4gKFNUUl9JTlNFUlRfVVNCX1RPS0VOKSk7DQo+LSAgICBDcmVhdGVQb3BVcCAo DQo+LSAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPi0gICAgICAm S2V5LA0KPi0gICAgICBRdWVzdGlvblN0ciwNCj4tICAgICAgTCIiLA0KPi0gICAgICBQcm9tcHRT dHIsDQo+LSAgICAgIE5VTEwNCj4tICAgICAgKTsNCj4tICAgIEZyZWVQb29sIChRdWVzdGlvblN0 cik7DQo+LSAgICBGcmVlUG9vbCAoUHJvbXB0U3RyKTsNCj4tICAgIHJldHVybiBFRklfTk9UX0ZP VU5EOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBHZXQgdGhlIHNlbGVjdGVkIHVzZXIncyBp ZGVudGlmaWVyLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlIChVc2Vy LCBFRklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JELA0KPiZVc2VySW5mbyk7DQo+LSAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAg fQ0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHRoZSBzZWxlY3RlZCB1c2VyJ3MgVG9rZW4gd2l0 aCB0aGUgcmVhZCB0b2tlbi4NCj4tICAvLw0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1V c2JUYWJsZS0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgIFVzZXJJZCAgICA9IChVSU5UOCAqKSAm bVVzYlRhYmxlLT5Vc2VySW5mb1tJbmRleF0uVXNlcklkOw0KPi0gICAgTmV3VXNlcklkID0gKFVJ TlQ4ICopIChVc2VySW5mbyArIDEpOw0KPi0gICAgaWYgKENvbXBhcmVNZW0gKFVzZXJJZCwgTmV3 VXNlcklkLCBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJRklFUikpDQo+PT0gMCkgew0KPi0g ICAgICAvLw0KPi0gICAgICAvLyBUaGUgdXNlcidzIElEIGlzIGZvdW5kIGluIHRoZSBVc2JUYWJs ZS4NCj4tICAgICAgLy8NCj4tICAgICAgVXNlclRva2VuID0gbVVzYlRhYmxlLT5Vc2VySW5mb1tJ bmRleF0uVG9rZW47DQo+LSAgICAgIGlmIChDb21wYXJlTWVtIChVc2VyVG9rZW4sIFJlYWRUb2tl biwgSEFTSEVEX0NSRURFTlRJQUxfTEVOKSA9PQ0KPjApIHsNCj4tICAgICAgICAvLw0KPi0gICAg ICAgIC8vIFRoZSByZWFkIHRva2VuIG1hdGNoZXMgd2l0aCB0aGUgb25lIGluIFVzYlRhYmxlLg0K Pi0gICAgICAgIC8vDQo+LSAgICAgICAgQ29weU1lbSAoSWRlbnRpZmllciwgVXNlcklkLCBzaXpl b2YgKEVGSV9VU0VSX0lORk9fSURFTlRJRklFUikpOw0KPi0gICAgICAgIEZyZWVQb29sIChVc2Vy SW5mbyk7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgICB9DQo+LSAgICB9 DQo+LSAgfQ0KPi0NCj4tICBGcmVlUG9vbCAoVXNlckluZm8pOw0KPi0NCj4tICByZXR1cm4gRUZJ X05PVF9SRUFEWTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEluZGljYXRlIHRoYXQgdXNlciBp bnRlcmZhY2UgaW50ZXJhY3Rpb24gaGFzIGJlZ3VuIGZvciB0aGUgc3BlY2lmaWVkDQo+Y3JlZGVu dGlhbC4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGNyZWRlbnRpYWwg cHJvdmlkZXIgaXMgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuIElmDQo+LSAgQXV0b0xvZ29uIHJldHVy bnMgRkFMU0UsIHRoZW4gdGhlIHVzZXIgaW50ZXJmYWNlIHdpbGwgYmUgY29uc3RydWN0ZWQgYnkg dGhlDQo+VXNlcg0KPi0gIElkZW50aXR5IE1hbmFnZXIuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFRo aXMgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVO VElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW291dF0gQXV0b0xvZ29uICBPbiByZXR1cm4sIHBv aW50cyB0byB0aGUgY3JlZGVudGlhbCBwcm92aWRlcidzDQo+Y2FwYWJpbGl0aWVzDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgY3JlZGVudGlhbCBwcm92aWRlciBoYXMgYmVl biBzZWxlY3RlZCBieSB0aGUgdXNlci4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgIENyZWRlbnRpYWwgcHJvdmlkZXIgc3VjY2Vzc2Z1bGx5IHNlbGVjdGVkLg0KPi0gIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBBdXRvTG9nb24gaXMgTlVMTC4NCj4tDQo+LSoq Lw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsU2VsZWN0ICgNCj4tICBJTiAg Q09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgKlRoaXMsDQo+LSAgT1VUICAg ICAgICBFRklfQ1JFREVOVElBTF9MT0dPTl9GTEFHUyAgICAgICpBdXRvTG9nb24NCj4tICApDQo+ LXsNCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKEF1dG9Mb2dvbiA9PSBOVUxMKSkgew0KPi0g ICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gICpBdXRvTG9n b24gPSBFRklfQ1JFREVOVElBTF9MT0dPTl9GTEFHX0RFRkFVTFQgfA0KPkVGSV9DUkVERU5USUFM X0xPR09OX0ZMQUdfQVVUTzsNCj4tDQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0K Pi0NCj4tLyoqDQo+LSAgSW5kaWNhdGUgdGhhdCB1c2VyIGludGVyZmFjZSBpbnRlcmFjdGlvbiBo YXMgZW5kZWQgZm9yIHRoZSBzcGVjaWZpZWQNCj5jcmVkZW50aWFsLg0KPi0NCj4tICBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgY3JlZGVudGlhbCBwcm92aWRlciBpcyBkZXNlbGVjdGVk IGJ5IHRoZSB1c2VyLg0KPi0NCj4tICBAcGFyYW1baW5dIFRoaXMgICAgICAgIFBvaW50cyB0byB0 aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0N Cj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIENyZWRlbnRpYWwgcHJvdmlkZXIgc3VjY2Vzc2Z1 bGx5IGRlc2VsZWN0ZWQuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3Jl ZGVudGlhbERlc2VsZWN0ICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJP VE9DT0wgICAgICAgKlRoaXMNCj4tICApDQo+LXsNCj4tICBpZiAoVGhpcyA9PSBOVUxMKSB7DQo+ LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBSZXR1cm4gdGhlIGRlZmF1bHQgbG9n b24gYmVoYXZpb3IgZm9yIHRoaXMgdXNlciBjcmVkZW50aWFsLg0KPi0NCj4tICBUaGlzIGZ1bmN0 aW9uIHJlcG9ydHMgdGhlIGRlZmF1bHQgbG9naW4gYmVoYXZpb3IgcmVnYXJkaW5nIHRoaXMgY3Jl ZGVudGlhbA0KPnByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1baW5dICBUaGlzICAgICAgIFBvaW50 cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09M Lg0KPi0gIEBwYXJhbVtvdXRdIEF1dG9Mb2dvbiAgT24gcmV0dXJuLCBob2xkcyB3aGV0aGVyIHRo ZSBjcmVkZW50aWFsIHByb3ZpZGVyDQo+c2hvdWxkIGJlIHVzZWQNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgIGJ5IGRlZmF1bHQgdG8gYXV0b21hdGljYWxseSBsb2cgb24gdGhlIHVzZXIuDQo+ LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBEZWZhdWx0IGluZm9ybWF0aW9u IHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiAgQXV0b0xvZ29uIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkN Cj4tQ3JlZGVudGlhbERlZmF1bHQgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFM Ml9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4tICBPVVQgICAgICAgRUZJX0NSRURFTlRJQUxfTE9H T05fRkxBR1MgICAgICAgICAgKkF1dG9Mb2dvbg0KPi0gICkNCj4tew0KPi0gIGlmICgoVGhpcyA9 PSBOVUxMKSB8fCAoQXV0b0xvZ29uID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgKkF1dG9Mb2dvbiA9IEVGSV9DUkVERU5USUFM X0xPR09OX0ZMQUdfREVGQVVMVCB8DQo+RUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR19BVVRPOw0K Pi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFJldHVybiBp bmZvcm1hdGlvbiBhdHRhY2hlZCB0byB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4NCj4tDQo+LSAg VGhpcyBmdW5jdGlvbiByZXR1cm5zIHVzZXIgaW5mb3JtYXRpb24uDQo+LQ0KPi0gIEBwYXJhbVtp bl0gICAgICBUaGlzICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVG SV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbl0gICAgICBVc2VySW5m byAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbiBkYXRhIHJlY29yZC4NCj4tICBA cGFyYW1bb3V0XSAgICAgSW5mbyAgICAgICAgICBPbiBlbnRyeSwgcG9pbnRzIHRvIGEgYnVmZmVy IG9mIGF0IGxlYXN0ICpJbmZvU2l6ZQ0KPmJ5dGVzLiBPbg0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGV4aXQsIGhvbGRzIHRoZSB1c2VyIGluZm9ybWF0aW9uLiBJZiB0aGUgYnVm ZmVyIGlzIHRvbyBzbWFsbA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGhv bGQgdGhlIGluZm9ybWF0aW9uLCB0aGVuIEVGSV9CVUZGRVJfVE9PX1NNQUxMIGlzDQo+cmV0dXJu ZWQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgSW5mb1NpemUgaXMgdXBk YXRlZCB0byBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMNCj5hY3R1YWxseQ0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBJ bmZvU2l6ZSAgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHNpemUgb2YgSW5mby4gT24gcmV0 dXJuLA0KPnBvaW50cyB0byB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBJbmZvcm1hdGlvbiByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZh bCBFRklfQlVGRkVSX1RPT19TTUFMTCAgVGhlIHNpemUgc3BlY2lmaWVkIGJ5IEluZm9TaXplIGlz IHRvbyBzbWFsbA0KPnRvIGhvbGQgYWxsIG9mIHRoZQ0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVzZXIgaW5mb3JtYXRpb24uIFRoZSBzaXplIHJlcXVpcmVkIGlzIHJldHVybmVk IGluICpJbmZvU2l6ZS4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbmZvIGlz IE5VTEwgb3IgSW5mb1NpemUgaXMgTlVMTC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAg ICAgICBUaGUgc3BlY2lmaWVkIFVzZXJJbmZvIGRvZXMgbm90IHJlZmVyIHRvIGENCj52YWxpZCB1 c2VyIGluZm8gaGFuZGxlLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNy ZWRlbnRpYWxHZXRJbmZvICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJP VE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX0lORk9fSEFORExFICAg ICAgICAgICAgICAgIFVzZXJJbmZvLA0KPi0gIE9VVCAgICAgICBFRklfVVNFUl9JTkZPICAgICAg ICAgICAgICAgICAgICAgICAqSW5mbywNCj4tICBJTiBPVVQgICAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKkluZm9TaXplDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1VTRVJfSU5G TyAgICAgICAgICAgICpDcmVkZW50aWFsSW5mbzsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgSW5kZXg7DQo+LQ0KPi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoSW5mb1NpemUgPT0gTlVM TCkgfHwgKEluZm8gPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQo+LSAgfQ0KPi0NCj4tICBpZiAoKFVzZXJJbmZvID09IE5VTEwpIHx8IChtVXNiSW5mb0hh bmRsZSA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgfQ0KPi0N Cj4tICAvLw0KPi0gIC8vIEZpbmQgaW5mb3JtYXRpb24gaGFuZGxlIGluIGNyZWRlbnRpYWwgaW5m byB0YWJsZS4NCj4tICAvLw0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Vc2JJbmZvSGFu ZGxlLT5Db3VudDsgSW5kZXgrKykgew0KPi0gICAgQ3JlZGVudGlhbEluZm8gPSBtVXNiSW5mb0hh bmRsZS0+SW5mb1tJbmRleF07DQo+LSAgICBpZiAoVXNlckluZm8gPT0gKEVGSV9VU0VSX0lORk9f SEFORExFKUNyZWRlbnRpYWxJbmZvKSB7DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIFRoZSBoYW5k bGUgaXMgZm91bmQsIGNvcHkgdGhlIHVzZXIgaW5mby4NCj4tICAgICAgLy8NCj4tICAgICAgaWYg KENyZWRlbnRpYWxJbmZvLT5JbmZvU2l6ZSA+ICpJbmZvU2l6ZSkgew0KPi0gICAgICAgICpJbmZv U2l6ZSA9IENyZWRlbnRpYWxJbmZvLT5JbmZvU2l6ZTsNCj4tICAgICAgICByZXR1cm4gRUZJX0JV RkZFUl9UT09fU01BTEw7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIENvcHlNZW0gKEluZm8sIENy ZWRlbnRpYWxJbmZvLCBDcmVkZW50aWFsSW5mby0+SW5mb1NpemUpOw0KPi0gICAgICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX05PVF9GT1VO RDsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEVudW1lcmF0ZSBhbGwgb2YgdGhlIHVzZXIgaW5m b3JtYXRpb25zIG9uIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0NCj4tICBUaGlzIGZ1bmN0 aW9uIHJldHVybnMgdGhlIG5leHQgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQuIFRvIHJldHJpZXZl IHRoZSBmaXJzdA0KPnVzZXINCj4tICBpbmZvcm1hdGlvbiByZWNvcmQgaGFuZGxlLCBwb2ludCBV c2VySW5mbyBhdCBhIE5VTEwuIEVhY2ggc3Vic2VxdWVudCBjYWxsDQo+d2lsbCByZXRyaWV2ZQ0K Pi0gIGFub3RoZXIgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgaGFuZGxlIHVudGlsIHRoZXJlIGFy ZSBubyBtb3JlLCBhdCB3aGljaA0KPnBvaW50IFVzZXJJbmZvDQo+LSAgd2lsbCBwb2ludCB0byBO VUxMLg0KPi0NCj4tICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAgUG9pbnRzIHRvIHRoaXMgaW5z dGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFt W2luLCBvdXRdIFVzZXJJbmZvIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHByZXZpb3VzIHVzZXIg aW5mb3JtYXRpb24NCj5oYW5kbGUgb3IgTlVMTA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICB0byBzdGFydCBlbnVtZXJhdGlvbi4gT24gZXhpdCwgcG9pbnRzIHRvIHRoZSBuZXh0IHVzZXIN Cj5pbmZvcm1hdGlvbg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgb3IgTlVM TCBpZiB0aGVyZSBpcyBubyBtb3JlIHVzZXIgaW5mb3JtYXRpb24uDQo+LQ0KPi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIGluZm9ybWF0aW9uIHJldHVybmVkLg0KPi0gIEBy ZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBObyBtb3JlIHVzZXIgaW5mb3JtYXRpb24gZm91 bmQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFVzZXJJbmZvIGlzIE5VTEwu DQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbEdldE5leHRJ bmZvICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAg KlRoaXMsDQo+LSAgSU4gT1VUICAgIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAg ICpVc2VySW5mbw0KPi0gICkNCj4tew0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAqSW5m bzsNCj4tICBDSEFSMTYgICAgICAgICAgICAgICAgICAgKlByb3ZOYW1lU3RyOw0KPi0gIFVJTlRO ICAgICAgICAgICAgICAgICAgICBJbmZvTGVuOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAg ICBJbmRleDsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgUHJvdlN0ckxlbjsNCj4tDQo+ LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChVc2VySW5mbyA9PSBOVUxMKSkgew0KPi0gICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIGlmIChtVXNiSW5mb0hh bmRsZSA9PSBOVUxMKSB7DQo+LSAgICAvLw0KPi0gICAgLy8gSW5pdGlsaXplZCB1c2VyIGluZm8g dGFibGUuIFRoZXJlIGFyZSA0IHVzZXIgaW5mbyByZWNvcmRzIGluIHRoZSB0YWJsZS4NCj4tICAg IC8vDQo+LSAgICBJbmZvTGVuICA9IHNpemVvZiAoVVNCX0NSRURFTlRJQUxfSU5GTykgKyAoNCAt IDEpICogc2l6ZW9mDQo+KEVGSV9VU0VSX0lORk8gKik7DQo+LSAgICBtVXNiSW5mb0hhbmRsZSA9 IEFsbG9jYXRlWmVyb1Bvb2wgKEluZm9MZW4pOw0KPi0gICAgaWYgKG1Vc2JJbmZvSGFuZGxlID09 IE5VTEwpIHsNCj4tICAgICAgKlVzZXJJbmZvID0gTlVMTDsNCj4tICAgICAgcmV0dXJuIEVGSV9O T1RfRk9VTkQ7DQo+LSAgICB9DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIFRoZSBmaXJzdCBpbmZv cm1hdGlvbiwgQ3JlZGVudGlhbCBQcm92aWRlciBpbmZvLg0KPi0gICAgLy8NCj4tICAgIEluZm9M ZW4gPSBzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgc2l6ZW9mIChFRklfR1VJRCk7DQo+LSAgICBJ bmZvICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoSW5mb0xlbik7DQo+LSAgICBBU1NFUlQgKEluZm8g IT0gTlVMTCk7DQo+LQ0KPi0gICAgSW5mby0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZPX0NS RURFTlRJQUxfUFJPVklERVJfUkVDT1JEOw0KPi0gICAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlO VDMyKSBJbmZvTGVuOw0KPi0gICAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1BS T1RFQ1RFRDsNCj4tICAgIENvcHlHdWlkICgmSW5mby0+Q3JlZGVudGlhbCwgJmdVc2JDcmVkZW50 aWFsUHJvdmlkZXJHdWlkKTsNCj4tICAgIENvcHlHdWlkICgoRUZJX0dVSUQgKikoSW5mbyArIDEp LCAmZ1VzYkNyZWRlbnRpYWxQcm92aWRlckd1aWQpOw0KPi0NCj4tICAgIG1Vc2JJbmZvSGFuZGxl LT5JbmZvWzBdID0gSW5mbzsNCj4tICAgIG1Vc2JJbmZvSGFuZGxlLT5Db3VudCsrOw0KPi0NCj4t ICAgIC8vDQo+LSAgICAvLyBUaGUgc2Vjb25kIGluZm9ybWF0aW9uLCBDcmVkZW50aWFsIFByb3Zp ZGVyIG5hbWUgaW5mby4NCj4tICAgIC8vDQo+LSAgICBQcm92TmFtZVN0ciA9IEdldFN0cmluZ0J5 SWQgKFNUUklOR19UT0tFTiAoU1RSX1BST1ZJREVSX05BTUUpKTsNCj4tICAgIFByb3ZTdHJMZW4g ID0gU3RyU2l6ZSAoUHJvdk5hbWVTdHIpOw0KPi0gICAgSW5mb0xlbiAgICAgPSBzaXplb2YgKEVG SV9VU0VSX0lORk8pICsgUHJvdlN0ckxlbjsNCj4tICAgIEluZm8gICAgICAgID0gQWxsb2NhdGVa ZXJvUG9vbCAoSW5mb0xlbik7DQo+LSAgICBBU1NFUlQgKEluZm8gIT0gTlVMTCk7DQo+LQ0KPi0g ICAgSW5mby0+SW5mb1R5cGUgICAgPQ0KPkVGSV9VU0VSX0lORk9fQ1JFREVOVElBTF9QUk9WSURF Ul9OQU1FX1JFQ09SRDsNCj4tICAgIEluZm8tPkluZm9TaXplICAgID0gKFVJTlQzMikgSW5mb0xl bjsNCj4tICAgIEluZm8tPkluZm9BdHRyaWJzID0gRUZJX1VTRVJfSU5GT19QUk9URUNURUQ7DQo+ LSAgICBDb3B5R3VpZCAoJkluZm8tPkNyZWRlbnRpYWwsICZnVXNiQ3JlZGVudGlhbFByb3ZpZGVy R3VpZCk7DQo+LSAgICBDb3B5TWVtICgoVUlOVDgqKShJbmZvICsgMSksIFByb3ZOYW1lU3RyLCBQ cm92U3RyTGVuKTsNCj4tICAgIEZyZWVQb29sIChQcm92TmFtZVN0cik7DQo+LQ0KPi0gICAgbVVz YkluZm9IYW5kbGUtPkluZm9bMV0gPSBJbmZvOw0KPi0gICAgbVVzYkluZm9IYW5kbGUtPkNvdW50 Kys7DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIFRoZSB0aGlyZCBpbmZvcm1hdGlvbiwgQ3JlZGVu dGlhbCBQcm92aWRlciB0eXBlIGluZm8uDQo+LSAgICAvLw0KPi0gICAgSW5mb0xlbiA9IHNpemVv ZiAoRUZJX1VTRVJfSU5GTykgKyBzaXplb2YgKEVGSV9HVUlEKTsNCj4tICAgIEluZm8gICAgPSBB bGxvY2F0ZVplcm9Qb29sIChJbmZvTGVuKTsNCj4tICAgIEFTU0VSVCAoSW5mbyAhPSBOVUxMKTsN Cj4tDQo+LSAgICBJbmZvLT5JbmZvVHlwZSAgICA9IEVGSV9VU0VSX0lORk9fQ1JFREVOVElBTF9U WVBFX1JFQ09SRDsNCj4tICAgIEluZm8tPkluZm9TaXplICAgID0gKFVJTlQzMikgSW5mb0xlbjsN Cj4tICAgIEluZm8tPkluZm9BdHRyaWJzID0gRUZJX1VTRVJfSU5GT19QUk9URUNURUQ7DQo+LSAg ICBDb3B5R3VpZCAoJkluZm8tPkNyZWRlbnRpYWwsICZnVXNiQ3JlZGVudGlhbFByb3ZpZGVyR3Vp ZCk7DQo+LSAgICBDb3B5R3VpZCAoKEVGSV9HVUlEICopKEluZm8gKyAxKSwNCj4mZ0VmaVVzZXJD cmVkZW50aWFsQ2xhc3NTZWN1cmVDYXJkR3VpZCk7DQo+LQ0KPi0gICAgbVVzYkluZm9IYW5kbGUt PkluZm9bMl0gPSBJbmZvOw0KPi0gICAgbVVzYkluZm9IYW5kbGUtPkNvdW50Kys7DQo+LQ0KPi0g ICAgLy8NCj4tICAgIC8vIFRoZSBmb3VydGggaW5mb3JtYXRpb24sIENyZWRlbnRpYWwgUHJvdmlk ZXIgdHlwZSBuYW1lIGluZm8uDQo+LSAgICAvLw0KPi0gICAgUHJvdk5hbWVTdHIgPSBHZXRTdHJp bmdCeUlkIChTVFJJTkdfVE9LRU4NCj4oU1RSX1BST1ZJREVSX1RZUEVfTkFNRSkpOw0KPi0gICAg UHJvdlN0ckxlbiAgPSBTdHJTaXplIChQcm92TmFtZVN0cik7DQo+LSAgICBJbmZvTGVuICAgICA9 IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBQcm92U3RyTGVuOw0KPi0gICAgSW5mbyAgICAgICAg PSBBbGxvY2F0ZVplcm9Qb29sIChJbmZvTGVuKTsNCj4tICAgIEFTU0VSVCAoSW5mbyAhPSBOVUxM KTsNCj4tDQo+LSAgICBJbmZvLT5JbmZvVHlwZSAgICA9DQo+RUZJX1VTRVJfSU5GT19DUkVERU5U SUFMX1BST1ZJREVSX05BTUVfUkVDT1JEOw0KPi0gICAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlO VDMyKSBJbmZvTGVuOw0KPi0gICAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1BS T1RFQ1RFRDsNCj4tICAgIENvcHlHdWlkICgmSW5mby0+Q3JlZGVudGlhbCwgJmdVc2JDcmVkZW50 aWFsUHJvdmlkZXJHdWlkKTsNCj4tICAgIENvcHlNZW0gKChVSU5UOCopKEluZm8gKyAxKSwgUHJv dk5hbWVTdHIsIFByb3ZTdHJMZW4pOw0KPi0gICAgRnJlZVBvb2wgKFByb3ZOYW1lU3RyKTsNCj4t DQo+LSAgICBtVXNiSW5mb0hhbmRsZS0+SW5mb1szXSA9IEluZm87DQo+LSAgICBtVXNiSW5mb0hh bmRsZS0+Q291bnQrKzsNCj4tICB9DQo+LQ0KPi0gIGlmICgqVXNlckluZm8gPT0gTlVMTCkgew0K Pi0gICAgLy8NCj4tICAgIC8vIFJldHVybiB0aGUgZmlyc3QgaW5mbyBoYW5kbGUuDQo+LSAgICAv Lw0KPi0gICAgKlVzZXJJbmZvID0gKEVGSV9VU0VSX0lORk9fSEFORExFKSBtVXNiSW5mb0hhbmRs ZS0+SW5mb1swXTsNCj4tICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICB9DQo+LQ0KPi0gIC8v DQo+LSAgLy8gRmluZCBpbmZvcm1hdGlvbiBoYW5kbGUgaW4gY3JlZGVudGlhbCBpbmZvIHRhYmxl Lg0KPi0gIC8vDQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVVzYkluZm9IYW5kbGUtPkNv dW50OyBJbmRleCsrKSB7DQo+LSAgICBJbmZvID0gbVVzYkluZm9IYW5kbGUtPkluZm9bSW5kZXhd Ow0KPi0gICAgaWYgKCpVc2VySW5mbyA9PSAoRUZJX1VTRVJfSU5GT19IQU5ETEUpSW5mbykgew0K Pi0gICAgICAvLw0KPi0gICAgICAvLyBUaGUgaGFuZGxlIGlzIGZvdW5kLCBnZXQgdGhlIG5leHQg b25lLg0KPi0gICAgICAvLw0KPi0gICAgICBpZiAoSW5kZXggPT0gbVVzYkluZm9IYW5kbGUtPkNv dW50IC0gMSkgew0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gQWxyZWFkeSBsYXN0IG9uZS4N Cj4tICAgICAgICAvLw0KPi0gICAgICAgICpVc2VySW5mbyA9IE5VTEw7DQo+LSAgICAgICAgcmV0 dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgICAgIH0NCj4tICAgICAgSW5kZXgrKzsNCj4tICAgICAg KlVzZXJJbmZvID0gKEVGSV9VU0VSX0lORk9fSEFORExFKW1Vc2JJbmZvSGFuZGxlLT5JbmZvW0lu ZGV4XTsNCj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+ LSAgKlVzZXJJbmZvID0gTlVMTDsNCj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tfQ0KPi0N Cj4tDQo+LS8qKg0KPi0gIERlbGV0ZSBhIHVzZXIgb24gdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVy Lg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYSB1c2VyIG9uIHRoaXMgY3JlZGVudGlh bCBwcm92aWRlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAgVGhpcyAgICAgICAgICAgIFBvaW50 cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09M Lg0KPi0gIEBwYXJhbVtpbl0gICAgIFVzZXIgICAgICAgICAgICBUaGUgdXNlciBwcm9maWxlIGhh bmRsZSB0byBkZWxldGUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBV c2VyIHByb2ZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLg0KPi0gIEByZXR2YWwgRUZJX0FD Q0VTU19ERU5JRUQgICAgICBDdXJyZW50IHVzZXIgcHJvZmlsZSBkb2VzIG5vdCBwZXJtaXQNCj5k ZWxldGlvbiBvbiB0aGUgdXNlciBwcm9maWxlIGhhbmRsZS4NCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRWl0aGVyIHRoZSB1c2VyIHByb2ZpbGUgY2Fubm90IGRlbGV0ZSBvbiBh bnkgdXNlciBwcm9maWxlIG9yDQo+Y2Fubm90IGRlbGV0ZQ0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvbiBhIHVzZXIgcHJvZmlsZSBvdGhlciB0aGFuIHRoZSBjdXJyZW50IHVz ZXIgcHJvZmlsZS4NCj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgVGhpcyBjcmVk ZW50aWFsIHByb3ZpZGVyIGRvZXMgbm90IHN1cHBvcnQNCj5kZWxldGlvbiBpbiB0aGUgcHJlLU9T Lg0KPi0gIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICBUaGUgbmV3IGNyZWRlbnRpYWwg Y291bGQgbm90IGJlIGRlbGV0ZWQNCj5iZWNhdXNlIG9mIGEgZGV2aWNlIGVycm9yLg0KPi0gIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2VyIGRvZXMgbm90IHJlZmVyIHRvIGEgdmFs aWQgdXNlcg0KPnByb2ZpbGUgaGFuZGxlLg0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkN Cj4tQ3JlZGVudGlhbERlbGV0ZSAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwy X1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hB TkRMRSAgICAgICAgICAgICBVc2VyDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAqVXNlckluZm87 DQo+LSAgVUlOVDggICAgICAgICAgICAgICAgICAgICAqVXNlcklkOw0KPi0gIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAgKk5ld1VzZXJJZDsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPi0NCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFVzZXIgPT0gTlVMTCkpIHsN Cj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICAvLw0K Pi0gIC8vIEdldCBVc2VyIElkZW50aWZpZXIuDQo+LSAgLy8NCj4tICBVc2VySW5mbyA9IE5VTEw7 DQo+LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlICgNCj4tICAgICAgICAgICAgIFVzZXIs DQo+LSAgICAgICAgICAgICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JELA0KPi0gICAg ICAgICAgICAgJlVzZXJJbmZvDQo+LSAgICAgICAgICAgICApOw0KPi0gIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0K Pi0NCj4tICAvLw0KPi0gIC8vIEZpbmQgdGhlIHVzZXIgYnkgdXNlciBpZGVudGlmaWVyIGluIG1Q d2RUYWJsZS4NCj4tICAvLw0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Vc2JUYWJsZS0+ Q291bnQ7IEluZGV4KyspIHsNCj4tICAgIFVzZXJJZCAgICA9IChVSU5UOCAqKSAmbVVzYlRhYmxl LT5Vc2VySW5mb1tJbmRleF0uVXNlcklkOw0KPi0gICAgTmV3VXNlcklkID0gKFVJTlQ4ICopIChV c2VySW5mbyArIDEpOw0KPi0gICAgaWYgKENvbXBhcmVNZW0gKFVzZXJJZCwgTmV3VXNlcklkLCBz aXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJRklFUikpDQo+PT0gMCkgew0KPi0gICAgICAvLw0K Pi0gICAgICAvLyBGb3VuZCB0aGUgdXNlciwgZGVsZXRlIGl0Lg0KPi0gICAgICAvLw0KPi0gICAg ICBNb2RpZnlUYWJsZSAoSW5kZXgsIE5VTEwpOw0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4t ICB9DQo+LQ0KPi0gIEZyZWVQb29sIChVc2VySW5mbyk7DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgTWFpbiBlbnRyeSBmb3IgdGhpcyBkcml2ZXIuDQo+ LQ0KPi0gIEBwYXJhbSBJbWFnZUhhbmRsZSAgICAgSW1hZ2UgaGFuZGxlIHRoaXMgZHJpdmVyLg0K Pi0gIEBwYXJhbSBTeXN0ZW1UYWJsZSAgICAgUG9pbnRlciB0byBTeXN0ZW1UYWJsZS4NCj4tDQo+ LSAgQHJldHZhbCBFRklfU1VDRVNTICAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBjb21wbGV0ZSBz dWNjZXNzZnVsbHkuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNiUHJv dmlkZXJJbml0ICgNCj4tICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4tICBJ TiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4tICApDQo+LXsNCj4tICBFRklfU1RB VFVTICBTdGF0dXM7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSXQgaXMgTk9UIHJvYnVzdCBlbm91Z2gg dG8gYmUgaW5jbHVkZWQgaW4gcHJvZHVjdGlvbi4NCj4tICAvLw0KPi0gICNlcnJvciAiVGhpcyBp bXBsZW1lbnRhdGlvbiBpcyBqdXN0IGEgc2FtcGxlLCBwbGVhc2UgY29tbWVudCB0aGlzIGxpbmUg aWYgeW91DQo+cmVhbGx5IHdhbnQgdG8gdXNlIHRoaXMgZHJpdmVyLiINCj4tDQo+LSAgLy8NCj4t ICAvLyBJbml0IGNyZWRlbnRpYWwgdGFibGUuDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBJbml0Q3Jl ZGVudGlhbFRhYmxlICgpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIHJl dHVybiBTdGF0dXM7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEluaXQgRm9ybSBCcm93c2Vy DQo+LSAgLy8NCj4tICBTdGF0dXMgPSBJbml0Rm9ybUJyb3dzZXIgKCk7DQo+LSAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8v DQo+LSAgLy8gSW5zdGFsbCBwcm90b2NvbCBpbnRlcmZhY2VzIGZvciB0aGUgVXNiIENyZWRlbnRp YWwgUHJvdmlkZXIuDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBnQlMtPkluc3RhbGxQcm90b2NvbElu dGVyZmFjZSAoDQo+LSAgICAgICAgICAgICAgICAgICZtQ2FsbGJhY2tJbmZvLT5Ecml2ZXJIYW5k bGUsDQo+LSAgICAgICAgICAgICAgICAgICZnRWZpVXNlckNyZWRlbnRpYWwyUHJvdG9jb2xHdWlk LA0KPi0gICAgICAgICAgICAgICAgICBFRklfTkFUSVZFX0lOVEVSRkFDRSwNCj4tICAgICAgICAg ICAgICAgICAgJmdVc2JDcmVkZW50aWFsUHJvdmlkZXJEcml2ZXINCj4tICAgICAgICAgICAgICAg ICAgKTsNCj4tICByZXR1cm4gU3RhdHVzOw0KPi19DQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQ a2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50 aWFsUHINCj5vdmlkZXIuaA0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNy ZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5vdmlkZXIuaA0KPmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IDYzZjY1NzYwNDUuLjAwMDAwMDAwMDANCj4tLS0NCj5h L1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUv VXNiQ3JlZGVudGlhbFByDQo+b3ZpZGVyLmgNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMzYxICsw LDAgQEANCj4tLyoqIEBmaWxlDQo+LSAgVXNiIENyZWRlbnRpYWwgUHJvdmlkZXIgZHJpdmVyIGhl YWRlciBmaWxlLg0KPi0NCj4tQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRoZSBh Y2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUg dW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LXdo aWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUg bGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5z ZXMvYnNkLWxpY2Vuc2UucGhwDQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRF UiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJSQU5U SUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJ TVBMSUVELg0KPi0NCj4tKiovDQo+LQ0KPi0jaWZuZGVmIF9VU0JfQ1JFREVOVElBTF9QUk9WSURF Ul9IXw0KPi0jZGVmaW5lIF9VU0JfQ1JFREVOVElBTF9QUk9WSURFUl9IXw0KPi0NCj4tI2luY2x1 ZGUgPFVlZmkuaD4NCj4tDQo+LSNpbmNsdWRlIDxHdWlkL0dsb2JhbFZhcmlhYmxlLmg+DQo+LSNp bmNsdWRlIDxHdWlkL0ZpbGVJbmZvLmg+DQo+LSNpbmNsdWRlIDxHdWlkL1NlY3VyaXR5UGtnVG9r ZW5TcGFjZS5oPg0KPi0jaW5jbHVkZSA8R3VpZC9Vc2JDcmVkZW50aWFsUHJvdmlkZXJIaWkuaD4N Cj4tDQo+LSNpbmNsdWRlIDxQcm90b2NvbC9TaW1wbGVGaWxlU3lzdGVtLmg+DQo+LSNpbmNsdWRl IDxQcm90b2NvbC9CbG9ja0lvLmg+DQo+LSNpbmNsdWRlIDxQcm90b2NvbC9Vc2VyQ3JlZGVudGlh bDIuaD4NCj4tI2luY2x1ZGUgPFByb3RvY29sL1VzZXJNYW5hZ2VyLmg+DQo+LQ0KPi0jaW5jbHVk ZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIuaD4NCj4tI2luY2x1ZGUgPExp YnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L01l bW9yeUFsbG9jYXRpb25MaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5o Pg0KPi0jaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQYXRoTGliLmg+DQo+LSNpbmNsdWRlIDxMaWJy YXJ5L0Jhc2VDcnlwdExpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPi0j aW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L1ByaW50TGli Lmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L0hpaUxpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9Q Y2RMaWIuaD4NCj4tDQo+LWV4dGVybiBVSU5UOCAgICAgIFVzYkNyZWRlbnRpYWxQcm92aWRlclN0 cmluZ3NbXTsNCj4tDQo+LSNkZWZpbmUgVVNCX1RBQkxFX0lOQyAgICAgICAgICAxNg0KPi0jZGVm aW5lIEhBU0hFRF9DUkVERU5USUFMX0xFTiAgMjANCj4tDQo+LS8vDQo+LS8vIFNhdmUgdGhlIGVu cm9sbCB1c2VyIGNyZWRlbnRpYWwgSW5mb3JtYXRpb24uDQo+LS8vDQo+LXR5cGVkZWYgc3RydWN0 IHsNCj4tICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVIgIFVzZXJJZDsNCj4tICBVSU5UOCAgICAg ICAgICAgICAgICAgICAgIFRva2VuW0hBU0hFRF9DUkVERU5USUFMX0xFTl07DQo+LX0gVVNCX0lO Rk87DQo+LQ0KPi0vLw0KPi0vLyBVU0IgQ3JlZGVudGlhbCBUYWJsZS4NCj4tLy8NCj4tdHlwZWRl ZiBzdHJ1Y3Qgew0KPi0gIFVJTlROICAgICBDb3VudDsNCj4tICBVSU5UTiAgICAgTWF4Q291bnQ7 DQo+LSAgVVNCX0lORk8gIFVzZXJJbmZvWzFdOw0KPi19IENSRURFTlRJQUxfVEFCTEU7DQo+LQ0K Pi0vLw0KPi0vLyBUaGUgdXNlciBpbmZvcm1hdGlvbiBvbiB0aGUgVVNCIHByb3ZpZGVyLg0KPi0v Lw0KPi10eXBlZGVmIHN0cnVjdCB7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg Q291bnQ7DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKkluZm9bMV07DQo+LX0g VVNCX0NSRURFTlRJQUxfSU5GTzsNCj4tDQo+LSNkZWZpbmUgVVNCX1BST1ZJREVSX1NJR05BVFVS RSAgU0lHTkFUVVJFXzMyICgnVScsICdTJywgJ0InLCAnUCcpDQo+LQ0KPi10eXBlZGVmIHN0cnVj dCB7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+LSAg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJIYW5kbGU7DQo+LSAgRUZJX0hJ SV9IQU5ETEUgICAgICAgICAgICAgICAgICBIaWlIYW5kbGU7DQo+LX0gVVNCX1BST1ZJREVSX0NB TExCQUNLX0lORk87DQo+LQ0KPi0vKioNCj4tICBFbnJvbGwgYSB1c2VyIG9uIGEgY3JlZGVudGlh bCBwcm92aWRlci4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBlbnJvbGxzIGFuZCBkZWxldGVzIGEg dXNlciBwcm9maWxlIHVzaW5nIHRoaXMgY3JlZGVudGlhbCBwcm92aWRlci4NCj4tICBJZiBhIHVz ZXIgcHJvZmlsZSBpcyBzdWNjZXNzZnVsbHkgZW5yb2xsZWQsIGl0IGNhbGxzIHRoZSBVc2VyIE1h bmFnZXIgUHJvdG9jb2wNCj4tICBmdW5jdGlvbiBOb3RpZnkoKSB0byBub3RpZnkgdGhlIHVzZXIg bWFuYWdlciBkcml2ZXIgdGhhdCBjcmVkZW50aWFsDQo+aW5mb3JtYXRpb24NCj4tICBoYXMgY2hh bmdlZC4gSWYgYW4gZW5yb2xsZWQgdXNlciBkb2VzIGV4aXN0LCBkZWxldGUgdGhlIHVzZXIgb24g dGhlDQo+Y3JlZGVudGlhbA0KPi0gIHByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1baW5dIFRoaXMg ICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YNCj5FRklfVVNFUl9DUkVE RU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1baW5dIFVzZXIgICAgICAgICAgICAgICAgVGhl IHVzZXIgcHJvZmlsZSB0byBlbnJvbGwuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBlbnJvbGxlZC4NCj4tICBAcmV0 dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgQ3VycmVudCB1c2VyIHByb2ZpbGUgZG9lcyBub3Qg cGVybWl0DQo+ZW5yb2xsbWVudCBvbiB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdXNlciBwcm9maWxlIGhhbmRsZS4gRWl0aGVyIHRoZSB1c2VyIHByb2ZpbGUgY2Fubm90 IGVucm9sbA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBhbnkgdXNlciBw cm9maWxlIG9yIGNhbm5vdCBlbnJvbGwgb24gYSB1c2VyIHByb2ZpbGUNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiB0aGUgY3VycmVudCB1c2VyIHByb2ZpbGUu DQo+LSAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIFRoaXMgY3JlZGVudGlhbCBwcm92 aWRlciBkb2VzIG5vdCBzdXBwb3J0DQo+ZW5yb2xsbWVudCBpbg0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGUgcHJlLU9TLg0KPi0gIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgICAgICBUaGUgbmV3IGNyZWRlbnRpYWwgY291bGQgbm90IGJlIGNyZWF0ZWQNCj5iZWNhdXNl IG9mIGEgZGV2aWNlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLg0K Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2VyIGRvZXMgbm90IHJlZmVyIHRv IGEgdmFsaWQgdXNlcg0KPnByb2ZpbGUgaGFuZGxlLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMN Cj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxFbnJvbGwgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9D UkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4tICBJTiAgICAgICAgRUZJX1VTRVJf UFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgVXNlcg0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBS ZXR1cm5zIHRoZSB1c2VyIGludGVyZmFjZSBpbmZvcm1hdGlvbiB1c2VkIGR1cmluZyB1c2VyIGlk ZW50aWZpY2F0aW9uLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIGVucm9sbHMgYSB1c2VyIG9uIHRo aXMgY3JlZGVudGlhbCBwcm92aWRlci4gSWYgdGhlIHVzZXIgZXhpc3RzIG9uDQo+LSAgdGhpcyBj cmVkZW50aWFsIHByb3ZpZGVyLCB1cGRhdGUgdGhlIHVzZXIgaW5mb3JtYXRpb24gb24gdGhpcyBj cmVkZW50aWFsDQo+cHJvdmlkZXI7DQo+LSAgb3RoZXJ3aXNlIGRlbGV0ZSB0aGUgdXNlciBpbmZv cm1hdGlvbiBvbiBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1baW5dICBUaGlz ICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJ QUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtvdXRdIEhpaSAgICAgICAgT24gcmV0dXJuLCBob2xk cyB0aGUgSElJIGRhdGFiYXNlIGhhbmRsZS4NCj4tICBAcGFyYW1bb3V0XSBGb3JtU2V0SWQgIE9u IHJldHVybiwgaG9sZHMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGZvcm0gc2V0DQo+d2hpY2ggY29u dGFpbnMNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb3JtIHVzZWQgZHVyaW5nIHVz ZXIgaWRlbnRpZmljYXRpb24uDQo+LSAgQHBhcmFtW291dF0gRm9ybUlkICAgICBPbiByZXR1cm4s IGhvbGRzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBmb3JtIHVzZWQNCj5kdXJpbmcgdXNlcg0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmljYXRpb24uDQo+LQ0KPi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICBGb3JtIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4tICBA cmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgRm9ybSBub3QgcmV0dXJuZWQuDQo+LSAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEhpaSBpcyBOVUxMIG9yIEZvcm1TZXRJZCBpcyBO VUxMIG9yDQo+Rm9ybUlkIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklB UEkNCj4tQ3JlZGVudGlhbEZvcm0gKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFM Ml9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4tICBPVVQgICAgICAgRUZJX0hJSV9IQU5ETEUgICAg ICAgICAgICAgICAgICAgICAgKkhpaSwNCj4tICBPVVQgICAgICAgRUZJX0dVSUQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKkZvcm1TZXRJZCwNCj4tICBPVVQgICAgICAgRUZJX0ZPUk1fSUQg ICAgICAgICAgICAgICAgICAgICAgICAgKkZvcm1JZA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBS ZXR1cm5zIGJpdG1hcCB1c2VkIHRvIGRlc2NyaWJlIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIHR5 cGUuDQo+LQ0KPi0gIFRoaXMgb3B0aW9uYWwgZnVuY3Rpb24gcmV0dXJucyBhIGJpdG1hcCB3aGlj aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlDQo+bnVtYmVyDQo+LSAgb2YgcGl4ZWxzIHNw ZWNpZmllZCBieSBXaWR0aCBhbmQgSGVpZ2h0LiBJZiBubyBzdWNoIGJpdG1hcCBleGlzdHMsIHRo ZW4NCj5FRklfTk9UX0ZPVU5EDQo+LSAgaXMgcmV0dXJuZWQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0g ICAgIFRoaXMgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JF REVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luLCBvdXRdIFdpZHRoICBPbiBlbnRyeSwg cG9pbnRzIHRvIHRoZSBkZXNpcmVkIGJpdG1hcCB3aWR0aC4gSWYNCj5OVUxMIHRoZW4gbm8NCj4t ICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBpbmZvcm1hdGlvbiB3aWxsIGJlIHJldHVy bmVkLiBPbiBleGl0LCBwb2ludHMgdG8gdGhlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICB3 aWR0aCBvZiB0aGUgYml0bWFwIHJldHVybmVkLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBIZWlnaHQg T24gZW50cnksIHBvaW50cyB0byB0aGUgZGVzaXJlZCBiaXRtYXAgaGVpZ2h0LiBJZg0KPk5VTEwg dGhlbiBubw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIGluZm9ybWF0aW9uIHdp bGwgYmUgcmV0dXJuZWQuIE9uIGV4aXQsIHBvaW50cyB0byB0aGUNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgIGhlaWdodCBvZiB0aGUgYml0bWFwIHJldHVybmVkLg0KPi0gIEBwYXJhbVtvdXRd ICAgIEhpaSAgICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJIGRhdGFiYXNlIGhhbmRsZS4NCj4t ICBAcGFyYW1bb3V0XSAgICBJbWFnZSAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBpbWFnZSBp ZGVudGlmaWVyLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgSW1hZ2Ug aWRlbnRpZmllciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZP VU5EICAgICAgICAgIEltYWdlIGlkZW50aWZpZXIgbm90IHJldHVybmVkLg0KPi0gIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSICBIaWkgaXMgTlVMTCBvciBJbWFnZSBpcyBOVUxMLg0KPi0N Cj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxUaWxlICgNCj4tICBJ TiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAg SU4gT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpXaWR0aCwNCj4t ICBJTiBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkhlaWdodCwN Cj4tICBPVVQgICAgICAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgKkhpaSwN Cj4tICBPVVQgICAgICAgRUZJX0lNQUdFX0lEICAgICAgICAgICAgICAgICAgICAgICAgKkltYWdl DQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIFJldHVybnMgc3RyaW5nIHVzZWQgdG8gZGVzY3JpYmUg dGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgdHlwZS4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1 cm5zIGEgc3RyaW5nIHdoaWNoIGRlc2NyaWJlcyB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4gSWYg bm8NCj4tICBzdWNoIHN0cmluZyBleGlzdHMsIHRoZW4gRUZJX05PVF9GT1VORCBpcyByZXR1cm5l ZC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5j ZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1bb3V0 XSBIaWkgICAgICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFzZSBoYW5kbGUuDQo+ LSAgQHBhcmFtW291dF0gU3RyaW5nICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgc3RyaW5n IGlkZW50aWZpZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBTdHJp bmcgaWRlbnRpZmllciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfTk9U X0ZPVU5EICAgICAgICAgIFN0cmluZyBpZGVudGlmaWVyIG5vdCByZXR1cm5lZC4NCj4tICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgU3RyaW5nIGlzIE5VTEwu DQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbFRpdGxlICgN Cj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMs DQo+LSAgT1VUICAgICAgIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgICAgICpIaWks DQo+LSAgT1VUICAgICAgIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgICAgICAgICpTdHJp bmcNCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgUmV0dXJuIHRoZSB1c2VyIGlkZW50aWZpZXIgYXNz b2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50bHkgYXV0aGVudGljYXRlZCB1c2VyLg0KPi0NCj4tICBU aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVzZXIgaWRlbnRpZmllciBvZiB0aGUgdXNlciBhdXRo ZW50aWNhdGVkIGJ5IHRoaXMNCj5jcmVkZW50aWFsDQo+LSAgcHJvdmlkZXIuIFRoaXMgZnVuY3Rp b24gaXMgY2FsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFsLXJlbGF0ZWQgaW5mb3JtYXRpb24gaGFz DQo+YmVlbg0KPi0gIHN1Ym1pdHRlZCBvbiBhIGZvcm0gT1IgYWZ0ZXIgYSBjYWxsIHRvIERlZmF1 bHQoKSBoYXMgcmV0dXJuZWQgdGhhdCB0aGlzDQo+Y3JlZGVudGlhbCBpcw0KPi0gIHJlYWR5IHRv IGxvZyBvbi4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgUG9pbnRzIHRvIHRo aXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAg QHBhcmFtW2luXSAgVXNlciAgICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUgb2YgdGhl IHVzZXIgcHJvZmlsZSBjdXJyZW50bHkNCj5iZWluZw0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnNpZGVyZWQgYnkgdGhlIHVzZXIgaWRlbnRpdHkgbWFuYWdlci4gSWYgTlVMTCwg dGhlbiBubyB1c2VyDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZSBpcyBj dXJyZW50bHkgdW5kZXIgY29uc2lkZXJhdGlvbi4NCj4tICBAcGFyYW1bb3V0XSBJZGVudGlmaWVy ICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgdXNlciBpZGVudGlmaWVyLg0KPi0NCj4tICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICBVc2VyIGlkZW50aWZpZXIgcmV0dXJuZWQgc3VjY2Vz c2Z1bGx5Lg0KPi0gIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgIE5vIHVzZXIgaWRlbnRpZmll ciBjYW4gYmUgcmV0dXJuZWQuDQo+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgVGhlIHVz ZXIgaGFzIGJlZW4gbG9ja2VkIG91dCBvZiB0aGlzIHVzZXINCj5jcmVkZW50aWFsLg0KPi0gIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGlzIGlzIE5VTEwsIG9yIElkZW50aWZpZXIg aXMgTlVMTC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVXNlciBpcyBub3Qg TlVMTCwgYW5kIHRoZSBzcGVjaWZpZWQgdXNlcg0KPmhhbmRsZSBjYW4ndCBiZQ0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2Uu DQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbFVzZXIgKA0K Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywN Cj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgVXNlciwN Cj4tICBPVVQgICAgICAgRUZJX1VTRVJfSU5GT19JREVOVElGSUVSICAgICAgICAgICAgKklkZW50 aWZpZXINCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgSW5kaWNhdGUgdGhhdCB1c2VyIGludGVyZmFj ZSBpbnRlcmFjdGlvbiBoYXMgYmVndW4gZm9yIHRoZSBzcGVjaWZpZWQNCj5jcmVkZW50aWFsLg0K Pi0NCj4tICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgY3JlZGVudGlhbCBwcm92aWRl ciBpcyBzZWxlY3RlZCBieSB0aGUgdXNlci4gSWYNCj4tICBBdXRvTG9nb24gcmV0dXJucyBGQUxT RSwgdGhlbiB0aGUgdXNlciBpbnRlcmZhY2Ugd2lsbCBiZSBjb25zdHJ1Y3RlZCBieSB0aGUNCj5V c2VyDQo+LSAgSWRlbnRpdHkgTWFuYWdlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9Q Uk9UT0NPTC4NCj4tICBAcGFyYW1bb3V0XSBBdXRvTG9nb24gIE9uIHJldHVybiwgcG9pbnRzIHRv IHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyJ3MNCj5jYXBhYmlsaXRpZXMNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgIGFmdGVyIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIGhhcyBiZWVuIHNlbGVj dGVkIGJ5IHRoZSB1c2VyLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg Q3JlZGVudGlhbCBwcm92aWRlciBzdWNjZXNzZnVsbHkgc2VsZWN0ZWQuDQo+LSAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgIEF1dG9Mb2dvbiBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVG SV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxTZWxlY3QgKA0KPi0gIElOICBDT05TVCAg RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAqVGhpcywNCj4tICBPVVQgICAgICAgIEVG SV9DUkVERU5USUFMX0xPR09OX0ZMQUdTICAgICAgKkF1dG9Mb2dvbg0KPi0gICk7DQo+LQ0KPi0v KioNCj4tICBJbmRpY2F0ZSB0aGF0IHVzZXIgaW50ZXJmYWNlIGludGVyYWN0aW9uIGhhcyBlbmRl ZCBmb3IgdGhlIHNwZWNpZmllZA0KPmNyZWRlbnRpYWwuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIHdoZW4gYSBjcmVkZW50aWFsIHByb3ZpZGVyIGlzIGRlc2VsZWN0ZWQgYnkgdGhl IHVzZXIuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gVGhpcyAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5z dGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LQ0KPi0gIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgQ3JlZGVudGlhbCBwcm92aWRlciBzdWNjZXNzZnVsbHkgZGVz ZWxlY3RlZC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFs RGVzZWxlY3QgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAg ICAgICAqVGhpcw0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBSZXR1cm4gdGhlIGRlZmF1bHQgbG9n b24gYmVoYXZpb3IgZm9yIHRoaXMgdXNlciBjcmVkZW50aWFsLg0KPi0NCj4tICBUaGlzIGZ1bmN0 aW9uIHJlcG9ydHMgdGhlIGRlZmF1bHQgbG9naW4gYmVoYXZpb3IgcmVnYXJkaW5nIHRoaXMgY3Jl ZGVudGlhbA0KPnByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1baW5dICBUaGlzICAgICAgIFBvaW50 cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09M Lg0KPi0gIEBwYXJhbVtvdXRdIEF1dG9Mb2dvbiAgT24gcmV0dXJuLCBob2xkcyB3aGV0aGVyIHRo ZSBjcmVkZW50aWFsIHByb3ZpZGVyDQo+c2hvdWxkIGJlIHVzZWQNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgIGJ5IGRlZmF1bHQgdG8gYXV0b21hdGljYWxseSBsb2cgb24gdGhlIHVzZXIuDQo+ LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBEZWZhdWx0IGluZm9ybWF0aW9u IHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiAgQXV0b0xvZ29uIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkN Cj4tQ3JlZGVudGlhbERlZmF1bHQgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFM Ml9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4tICBPVVQgICAgICAgRUZJX0NSRURFTlRJQUxfTE9H T05fRkxBR1MgICAgICAgICAgKkF1dG9Mb2dvbg0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBSZXR1 cm4gaW5mb3JtYXRpb24gYXR0YWNoZWQgdG8gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LQ0K Pi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tICBAcGFy YW1baW5dICAgICAgVGhpcyAgICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUN Cj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1baW5dICAgICAgVXNl ckluZm8gICAgICBIYW5kbGUgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb24gZGF0YSByZWNvcmQuDQo+ LSAgQHBhcmFtW291dF0gICAgIEluZm8gICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byBhIGJ1 ZmZlciBvZiBhdCBsZWFzdCAqSW5mb1NpemUNCj5ieXRlcy4gT24NCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBleGl0LCBob2xkcyB0aGUgdXNlciBpbmZvcm1hdGlvbi4gSWYgdGhl IGJ1ZmZlciBpcyB0b28gc21hbGwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 byBob2xkIHRoZSBpbmZvcm1hdGlvbiwgdGhlbiBFRklfQlVGRkVSX1RPT19TTUFMTCBpcw0KPnJl dHVybmVkDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIEluZm9TaXplIGlz IHVwZGF0ZWQgdG8gY29udGFpbiB0aGUgbnVtYmVyIG9mIGJ5dGVzDQo+YWN0dWFsbHkNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZC4NCj4tICBAcGFyYW1baW4sIG91 dF0gSW5mb1NpemUgICAgICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBzaXplIG9mIEluZm8uIE9u IHJldHVybiwNCj5wb2ludHMgdG8gdGhlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgSW5mb3JtYXRpb24gcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEBy ZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgIFRoZSBzaXplIHNwZWNpZmllZCBieSBJbmZvU2l6 ZSBpcyB0b28gc21hbGwNCj50byBob2xkIGFsbCBvZiB0aGUNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1c2VyIGluZm9ybWF0aW9uLiBUaGUgc2l6ZSByZXF1aXJlZCBpcyByZXR1 cm5lZCBpbiAqSW5mb1NpemUuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSW5m byBpcyBOVUxMIG9yIEluZm9TaXplIGlzIE5VTEwuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5E ICAgICAgICAgVGhlIHNwZWNpZmllZCBVc2VySW5mbyBkb2VzIG5vdCByZWZlciB0byBhDQo+dmFs aWQgdXNlciBpbmZvIGhhbmRsZS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0K Pi1DcmVkZW50aWFsR2V0SW5mbyAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwy X1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9JTkZPX0hBTkRM RSAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4tICBPVVQgICAgICAgRUZJX1VTRVJfSU5GTyAg ICAgICAgICAgICAgICAgICAgICAgKkluZm8sDQo+LSAgSU4gT1VUICAgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpJbmZvU2l6ZQ0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBF bnVtZXJhdGUgYWxsIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9ucyBvbiB0aGUgY3JlZGVudGlhbCBw cm92aWRlci4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXh0IHVzZXIgaW5m b3JtYXRpb24gcmVjb3JkLiBUbyByZXRyaWV2ZSB0aGUgZmlyc3QNCj51c2VyDQo+LSAgaW5mb3Jt YXRpb24gcmVjb3JkIGhhbmRsZSwgcG9pbnQgVXNlckluZm8gYXQgYSBOVUxMLiBFYWNoIHN1YnNl cXVlbnQgY2FsbA0KPndpbGwgcmV0cmlldmUNCj4tICBhbm90aGVyIHVzZXIgaW5mb3JtYXRpb24g cmVjb3JkIGhhbmRsZSB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSwgYXQgd2hpY2gNCj5wb2ludCBV c2VySW5mbw0KPi0gIHdpbGwgcG9pbnQgdG8gTlVMTC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAg IFRoaXMgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURF TlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VySW5mbyBPbiBlbnRyeSwg cG9pbnRzIHRvIHRoZSBwcmV2aW91cyB1c2VyIGluZm9ybWF0aW9uDQo+aGFuZGxlIG9yIE5VTEwN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgZW51bWVyYXRpb24uIE9uIGV4 aXQsIHBvaW50cyB0byB0aGUgbmV4dCB1c2VyDQo+aW5mb3JtYXRpb24NCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgaGFuZGxlIG9yIE5VTEwgaWYgdGhlcmUgaXMgbm8gbW9yZSB1c2VyIGlu Zm9ybWF0aW9uLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciBp bmZvcm1hdGlvbiByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAg Tm8gbW9yZSB1c2VyIGluZm9ybWF0aW9uIGZvdW5kLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICBVc2VySW5mbyBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4t RUZJQVBJDQo+LUNyZWRlbnRpYWxHZXROZXh0SW5mbyAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VS X0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIElOIE9VVCAgICBFRklfVVNF Ul9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICAqVXNlckluZm8NCj4tICApOw0KPi0NCj4tLyoq DQo+LSAgRGVsZXRlIGEgdXNlciBvbiB0aGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LQ0KPi0g IFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBhIHVzZXIgb24gdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVy Lg0KPi0NCj4tICBAcGFyYW1baW5dICAgICBUaGlzICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMg aW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBh cmFtW2luXSAgICAgVXNlciAgICAgICAgICAgIFRoZSB1c2VyIHByb2ZpbGUgaGFuZGxlIHRvIGRl bGV0ZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFVzZXIgcHJvZmls ZSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuDQo+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklF RCAgICAgIEN1cnJlbnQgdXNlciBwcm9maWxlIGRvZXMgbm90IHBlcm1pdA0KPmRlbGV0aW9uIG9u IHRoZSB1c2VyIHByb2ZpbGUgaGFuZGxlLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFaXRoZXIgdGhlIHVzZXIgcHJvZmlsZSBjYW5ub3QgZGVsZXRlIG9uIGFueSB1c2VyIHBy b2ZpbGUgb3INCj5jYW5ub3QgZGVsZXRlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9uIGEgdXNlciBwcm9maWxlIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgdXNlciBwcm9maWxl Lg0KPi0gIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGlzIGNyZWRlbnRpYWwgcHJv dmlkZXIgZG9lcyBub3Qgc3VwcG9ydA0KPmRlbGV0aW9uIGluIHRoZSBwcmUtT1MuDQo+LSAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSBuZXcgY3JlZGVudGlhbCBjb3VsZCBub3Qg YmUgZGVsZXRlZA0KPmJlY2F1c2Ugb2YgYSBkZXZpY2UgZXJyb3IuDQo+LSAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgIFVzZXIgZG9lcyBub3QgcmVmZXIgdG8gYSB2YWxpZCB1c2VyDQo+ cHJvZmlsZSBoYW5kbGUuDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50 aWFsRGVsZXRlICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wg ICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAg ICAgICAgIFVzZXINCj4tICApOw0KPi0NCj4tI2VuZGlmDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJp dHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVk ZW50aWFsUHINCj5vdmlkZXIudW5pDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v VXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWxQcg0KPm92aWRlci51bmkNCj5k ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCA5NjFlMDlmMzYwLi4wMDAwMDAwMDAwDQo+ LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3Zp ZGVyRHhlL1VzYkNyZWRlbnRpYWxQcg0KPm92aWRlci51bmkNCj4rKysgL2Rldi9udWxsDQo+QEAg LTEsMjMgKzAsMCBAQA0KPi0vLyAvKiogQGZpbGUNCj4tLy8gUHJvdmlkZXMgYSBVU0IgY3JlZGVu dGlhbCBwcm92aWRlciBpbXBsZW1lbnRhdGlvbg0KPi0vLw0KPi0vLyBUaGlzIG1vZHVsZSByZWFk cyBhIHRva2VuIGZyb20gYSB0b2tlbiBmaWxlIHRoYXQgaXMgc2F2ZWQgaW4gdGhlIHJvb3QNCj4t Ly8gZm9sZGVyIG9mIGEgVVNCIHN0aWNrLiBUaGUgdG9rZW4gZmlsZSBuYW1lIGNhbiBiZSBzcGVj aWZpZWQgYnkgdGhlIFBDRA0KPi0vLyBQY2RGaXhlZFVzYkNyZWRlbnRpYWxQcm92aWRlclRva2Vu RmlsZU5hbWUuDQo+LS8vDQo+LS8vIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTQsIEludGVsIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4tLy8NCj4tLy8gVGhpcyBwcm9n cmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPi0vLyBhcmUgbGljZW5zZWQgYW5k IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNE DQo+TGljZW5zZQ0KPi0vLyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhl IGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi0vLyBodHRwOi8v b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LS8vIFRIRSBQUk9HUkFN IElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFT SVMsDQo+LS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJ TkQsIEVJVEhFUg0KPkVYUFJFU1MgT1IgSU1QTElFRC4NCj4tLy8NCj4tLy8gKiovDQo+LQ0KPi0N Cj4tI3N0cmluZyBTVFJfTU9EVUxFX0FCU1RSQUNUICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAiUHJvdmlkZXMgYSBVU0INCj5jcmVkZW50aWFsIHByb3ZpZGVyIGltcGxlbWVudGF0aW9uIg0K Pi0NCj4tI3N0cmluZyBTVFJfTU9EVUxFX0RFU0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBl bi1VUyAiVGhpcyBtb2R1bGUNCj5yZWFkcyBhIHRva2VuIGZyb20gYSB0b2tlbiBmaWxlIHRoYXQg aXMgc2F2ZWQgaW4gdGhlIHJvb3QgZm9sZGVyIG9mIGEgVVNCIHN0aWNrLg0KPlRoZSB0b2tlbiBm aWxlIG5hbWUgY2FuIGJlIHNwZWNpZmllZCBieSB0aGUgUENEDQo+UGNkRml4ZWRVc2JDcmVkZW50 aWFsUHJvdmlkZXJUb2tlbkZpbGVOYW1lLiINCj4tDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQ a2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50 aWFsUHINCj5vdmlkZXJEeGUuaW5mDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v VXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWxQcg0KPm92aWRlckR4ZS5pbmYN Cj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCAxZThlNDIzMzJmLi4wMDAwMDAwMDAw DQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFBy b3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWxQcg0KPm92aWRlckR4ZS5pbmYNCj4rKysgL2Rldi9udWxs DQo+QEAgLTEsNzAgKzAsMCBAQA0KPi0jIyBAZmlsZQ0KPi0jICBQcm92aWRlcyBhIFVTQiBjcmVk ZW50aWFsIHByb3ZpZGVyIGltcGxlbWVudGF0aW9uDQo+LSMNCj4tIyAgVGhpcyBtb2R1bGUgcmVh ZHMgYSB0b2tlbiBmcm9tIGEgdG9rZW4gZmlsZSB0aGF0IGlzIHNhdmVkIGluIHRoZSByb290DQo+ LSMgIGZvbGRlciBvZiBhIFVTQiBzdGljay4gVGhlIHRva2VuIGZpbGUgbmFtZSBjYW4gYmUgc3Bl Y2lmaWVkIGJ5IHRoZSBQQ0QNCj4tIyAgUGNkRml4ZWRVc2JDcmVkZW50aWFsUHJvdmlkZXJUb2tl bkZpbGVOYW1lLg0KPi0jDQo+LSMgQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi0jIFRoaXMgcHJvZ3JhbSBhbmQg dGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tIyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZh aWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5z ZQ0KPi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0 IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LSMgaHR0cDovL29wZW5zb3VyY2Uu b3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0jIFRIRSBQUk9HUkFNIElTIERJU1RSSUJV VEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+LSMgV0lU SE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+ RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0jDQo+LSMjDQo+LQ0KPi1bRGVmaW5lc10NCj4tICBJTkZf VkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1DQo+LSAgQkFTRV9OQU1FICAg ICAgICAgICAgICAgICAgICAgID0gVXNiQ3JlZGVudGlhbFByb3ZpZGVyDQo+LSAgTU9EVUxFX1VO SV9GSUxFICAgICAgICAgICAgICAgID0gVXNiQ3JlZGVudGlhbFByb3ZpZGVyLnVuaQ0KPi0gIEZJ TEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDY3MkEwQzY4LTJCRjAtNDZmOS05M0MzLUM0 RTdEQzBGQTU1NQ0KPi0gIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IFVFRklfRFJJ VkVSDQo+LSAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+LSAgRU5UUllf UE9JTlQgICAgICAgICAgICAgICAgICAgID0gVXNiUHJvdmlkZXJJbml0DQo+LQ0KPi1bU291cmNl c10NCj4tICBVc2JDcmVkZW50aWFsUHJvdmlkZXIuYw0KPi0gIFVzYkNyZWRlbnRpYWxQcm92aWRl ci5oDQo+LSAgVXNiQ3JlZGVudGlhbFByb3ZpZGVyU3RyaW5ncy51bmkNCj4tDQo+LVtQYWNrYWdl c10NCj4tICBNZGVQa2cvTWRlUGtnLmRlYw0KPi0gIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cu ZGVjDQo+LSAgQ3J5cHRvUGtnL0NyeXB0b1BrZy5kZWMNCj4tICBTZWN1cml0eVBrZy9TZWN1cml0 eVBrZy5kZWMNCj4tDQo+LVtMaWJyYXJ5Q2xhc3Nlc10NCj4tICBVZWZpUnVudGltZVNlcnZpY2Vz VGFibGVMaWINCj4tICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4tICBVZWZpRHJpdmVyRW50 cnlQb2ludA0KPi0gIE1lbW9yeUFsbG9jYXRpb25MaWINCj4tICBCYXNlTWVtb3J5TGliDQo+LSAg RGVidWdMaWINCj4tICBIaWlMaWINCj4tICBVZWZpTGliDQo+LSAgQmFzZUNyeXB0TGliDQo+LQ0K Pi1bR3VpZHNdDQo+LSAgIyMgUFJPRFVDRVMgICAgICAgICAgICAgIyMgVmFyaWFibGU6TCJVc2JD cmVkZW50aWFsIg0KPi0gICMjIENPTlNVTUVTICAgICAgICAgICAgICMjIFZhcmlhYmxlOkwiVXNi Q3JlZGVudGlhbCINCj4tICAjIyBDT05TVU1FUyAgICAgICAgICAgICAjIyBISUkNCj4tICAjIyBT T01FVElNRVNfQ09OU1VNRVMgICAjIyBHVUlEICAgICAgICAgICAgICAgIyBUaGUgY3JlZGVudGlh bCBwcm92aWRlcg0KPmlkZW50aWZpZXINCj4tICBnVXNiQ3JlZGVudGlhbFByb3ZpZGVyR3VpZA0K Pi0NCj4tICBnRWZpRmlsZUluZm9HdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMg U09NRVRJTUVTX0NPTlNVTUVTICAgICAgICAgIyMgR1VJRA0KPi0gIGdFZmlVc2VyQ3JlZGVudGlh bENsYXNzU2VjdXJlQ2FyZEd1aWQgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4jIyBH VUlEDQo+LQ0KPi1bUGNkXQ0KPi0NCj5nRWZpU2VjdXJpdHlQa2dUb2tlblNwYWNlR3VpZC5QY2RG aXhlZFVzYkNyZWRlbnRpYWxQcm92aWRlclRva2VuRmlsZU5hDQo+bWUgICAgIyMgU09NRVRJTUVT X0NPTlNVTUVTDQo+LQ0KPi1bUHJvdG9jb2xzXQ0KPi0gIGdFZmlVc2VyQ3JlZGVudGlhbDJQcm90 b2NvbEd1aWQgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KPi0gIGdFZmlVc2VyTWFuYWdlclBy b3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4tICBn RWZpQmxvY2tJb1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVT X0NPTlNVTUVTDQo+LSAgZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQgICAgICAgICAg ICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0KPi0NCj4tW1VzZXJFeHRlbnNpb25zLlRpYW5vQ29y ZS4iRXh0cmFGaWxlcyJdDQo+LSAgVXNiQ3JlZGVudGlhbFByb3ZpZGVyRXh0cmEudW5pDQo+LQ0K PmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50 aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFByDQo+b3ZpZGVyRXh0cmEudW5pDQo+Yi9TZWN1 cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNy ZWRlbnRpYWxQcg0KPm92aWRlckV4dHJhLnVuaQ0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0K PmluZGV4IGEyMDkxN2Q1ZjcuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFByDQo+ b3ZpZGVyRXh0cmEudW5pDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDE5ICswLDAgQEANCj4tLy8g LyoqIEBmaWxlDQo+LS8vIFVzYkNyZWRlbnRpYWxQcm92aWRlciBMb2NhbGl6ZWQgU3RyaW5ncyBh bmQgQ29udGVudA0KPi0vLw0KPi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgLSAyMDE4LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LS8vDQo+LS8vIFRoaXMgcHJv Z3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tLy8gYXJlIGxpY2Vuc2VkIGFu ZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJT RA0KPkxpY2Vuc2UNCj4tLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRo ZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4tLy8gaHR0cDov L29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0vLyBUSEUgUFJPR1JB TSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPkJB U0lTLA0KPi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBL SU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LS8vDQo+LS8vICoqLw0KPi0NCj4t I3N0cmluZyBTVFJfUFJPUEVSVElFU19NT0RVTEVfTkFNRQ0KPi0jbGFuZ3VhZ2UgZW4tVVMNCj4t IlVTQiBDcmVkZW50aWFsIFByb3ZpZGVyIg0KPi0NCj4tDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJp dHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVk ZW50aWFsUHINCj5vdmlkZXJTdHJpbmdzLnVuaQ0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZp Y2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5vdmlkZXJT dHJpbmdzLnVuaQ0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IGYzMDZkNTBhNGUu LjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JD cmVkZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFByDQo+b3ZpZGVyU3RyaW5ncy51bmkN Cj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMjkgKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBTdHJp bmcgZGVmaW5pdGlvbnMgZm9yIHRoZSBVU0IgQ3JlZGVudGlhbCBQcm92aWRlci4NCj4tDQo+LUNv cHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFs cw0KPi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi13aGljaCBhY2NvbXBhbmllcyB0aGlz IGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91 bmQgYXQNCj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4N Cj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBP TiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJ T05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8N Cj4tDQo+LSNsYW5nZGVmIGVuLVVTICJFbmdsaXNoIg0KPi0jbGFuZ2RlZiBmci1GUiAiRnJhbmNh aXMiDQo+LQ0KPi0jc3RyaW5nIFNUUl9DUkVERU5USUFMX1RJVExFICAgICAgICAgICAgICAgICAg ICAgICNsYW5ndWFnZSBlbi1VUyAgIlVTQiBDcmVkZW50aWFsDQo+UHJvdmlkZXIiDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZy LUZSICAiVVNCIENyZWRlbnRpYWwgUHJvdmlkZXIgKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX05V TExfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiIg0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5n dWFnZSBmci1GUiAgIiINCj4tI3N0cmluZyBTVFJfUFJPVklERVJfTkFNRSAgICAgICAgICAgICAg ICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJJTlRFTCBVU0INCj5DcmVkZW50aWFsIFByb3Zp ZGVyIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICNsYW5ndWFnZSBmci1GUiAgIklOVEVMIFVTQiBDcmVkZW50aWFsIFByb3ZpZGVyDQo+KEZyZW5j aCkiDQo+LSNzdHJpbmcgU1RSX1BST1ZJREVSX1RZUEVfTkFNRSAgICAgICAgICAgICAgICAgICAg I2xhbmd1YWdlIGVuLVVTICAiU2VjdXJlIENhcmQNCj5DcmVkZW50aWFsIFByb3ZpZGVyIg0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFn ZSBmci1GUiAgIlNlY3VyZSBDYXJkIENyZWRlbnRpYWwgUHJvdmlkZXINCj4oRnJlbmNoKSINCj4t I3N0cmluZyBTVFJfUkVBRF9VU0JfVE9LRU5fRVJST1IgICAgICAgICAgICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgICJSZWFkIFVTQg0KPlRva2VuIEZpbGUgRXJyb3IhIg0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlJl YWQgVVNCIFRva2VuIEZpbGUgRXJyb3IhDQo+KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0lOU0VS VF9VU0JfVE9LRU4gICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiUGxlYXNl IGluc2VydA0KPlVTQiBrZXkgd2l0aCBUb2tlbiINCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJQbGVhc2UgaW5zZXJ0 IFVTQiBrZXkgd2l0aCBUb2tlbg0KPihGcmVuY2gpIg0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5 UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL0xvYWREZWZlcnJl ZEltYQ0KPmdlLmMNCj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRp ZnlNYW5hZ2VyRHhlL0xvYWREZWZlcnJlZEltDQo+YWdlLmMNCj5kZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQNCj5pbmRleCAyY2ZlMTMwZGI4Li4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Mb2FkRGVmZXJyZWRJ bWENCj5nZS5jDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDE0OCArMCwwIEBADQo+LS8qKiBAZmls ZQ0KPi0gIExvYWQgdGhlIGRlZmVycmVkIGltYWdlcyBhZnRlciB1c2VyIGlzIGlkZW50aWZpZWQu DQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWlu ZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUg dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21w YW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1h eSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGlj ZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0Qg TElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQ UkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+ LQ0KPi0qKi8NCj4tDQo+LSNpbmNsdWRlICJVc2VySWRlbnRpZnlNYW5hZ2VyLmgiDQo+LQ0KPi1F RklfSEFORExFICAgICAgICBtRGVmZXJyZWRJbWFnZUhhbmRsZTsNCj4tDQo+LS8qKg0KPi0gIFRo ZSBmdW5jdGlvbiB3aWxsIGxvYWQgYWxsIHRoZSBkZWZlcnJlZCBpbWFnZXMgYWdhaW4uIElmIHRo ZSBkZWZlcnJlZCBpbWFnZSBpcw0KPmxvYWRlZA0KPi0gIHN1Y2Nlc3NmdWxseSwgdHJ5IHRvIHN0 YXJ0IGl0Lg0KPi0NCj4tICBAcGFyYW0gIEV2ZW50ICAgICAgICAgRXZlbnQgd2hvc2Ugbm90aWZp Y2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuDQo+LSAgQHBhcmFtICBDb250ZXh0ICAg ICAgIFBvaW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRleHQNCj4tDQo+ LSoqLw0KPi1WT0lEDQo+LUVGSUFQSQ0KPi1Mb2FkRGVmZXJyZWRJbWFnZSAoDQo+LSAgSU4gRUZJ X0VWRU5UICAgICAgICAgICAgICAgICAgICAgICBFdmVudCwNCj4tICBJTiBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpDb250ZXh0DQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX0RFRkVSUkVEX0lNQUdFX0xP QURfUFJPVE9DT0wgICAqRGVmZXJyZWRJbWFnZTsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhhbmRsZUNvdW50Ow0KPi0gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgICAgICAgKkhhbmRsZUJ1ZjsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4Ow0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVy SW5kZXg7DQo+LSAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAgICAqSW1hZ2VEZXZp Y2VQYXRoOw0KPi0gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRyaXZlcklt YWdlOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplOw0K Pi0gIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vdE9wdGlvbjsNCj4tICBF RklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlOw0KPi0gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhpdERhdGFTaXplOw0KPi0gIENIQVIxNiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkV4aXREYXRhOw0KPi0NCj4tICAvLw0KPi0gIC8v IEZpbmQgYWxsIHRoZSBkZWZlcnJlZCBpbWFnZSBsb2FkIHByb3RvY29scy4NCj4tICAvLw0KPi0g IEhhbmRsZUNvdW50ID0gMDsNCj4tICBIYW5kbGVCdWYgICA9IE5VTEw7DQo+LSAgU3RhdHVzID0g Z0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KPi0gICAgICAgICAgICAgICAgICBCeVByb3RvY29s LA0KPi0gICAgICAgICAgICAgICAgICAmZ0VmaURlZmVycmVkSW1hZ2VMb2FkUHJvdG9jb2xHdWlk LA0KPi0gICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAmSGFuZGxl Q291bnQsDQo+LSAgICAgICAgICAgICAgICAgICZIYW5kbGVCdWYNCj4tICAgICAgICAgICAgICAg ICAgKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gOw0KPi0g IH0NCj4tDQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4Kysp IHsNCj4tICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPi0gICAgICAgICAgICAg ICAgICAgIEhhbmRsZUJ1ZltJbmRleF0sDQo+LSAgICAgICAgICAgICAgICAgICAgJmdFZmlEZWZl cnJlZEltYWdlTG9hZFByb3RvY29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAoVk9JRCAq KikgJkRlZmVycmVkSW1hZ2UNCj4tICAgICAgICAgICAgICAgICAgICApOw0KPi0gICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBjb250aW51ZSA7DQo+LSAgICB9DQo+LQ0KPi0g ICAgRHJpdmVySW5kZXggPSAwOw0KPi0gICAgZG8gew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBM b2FkIGFsbCB0aGUgZGVmZXJyZWQgaW1hZ2VzIGluIHRoaXMgcHJvdG9jb2wgaW5zdGFuY2UuDQo+ LSAgICAgIC8vDQo+LSAgICAgIFN0YXR1cyA9IERlZmVycmVkSW1hZ2UtPkdldEltYWdlSW5mbygN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZlcnJlZEltYWdlLA0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlckluZGV4LA0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZJbWFnZURldmljZVBhdGgsDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKFZPSUQgKiopICZEcml2ZXJJbWFnZSwNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmSW1hZ2VTaXplLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZCb290T3B0aW9uDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4tICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICAgIGJyZWFrOw0KPi0g ICAgICB9DQo+LQ0KPi0gICAgICAvLw0KPi0gICAgICAvLyBMb2FkIGFuZCBzdGFydCB0aGUgaW1h Z2UuDQo+LSAgICAgIC8vDQo+LSAgICAgIFN0YXR1cyA9IGdCUy0+TG9hZEltYWdlICgNCj4tICAg ICAgICAgICAgICAgICAgICAgIEJvb3RPcHRpb24sDQo+LSAgICAgICAgICAgICAgICAgICAgICBt RGVmZXJyZWRJbWFnZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgIEltYWdlRGV2aWNl UGF0aCwNCj4tICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAg ICAgICAwLA0KPi0gICAgICAgICAgICAgICAgICAgICAgJkltYWdlSGFuZGxlDQo+LSAgICAgICAg ICAgICAgICAgICAgICApOw0KPi0gICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0g ICAgICAgIC8vDQo+LSAgICAgICAgLy8gQmVmb3JlIGNhbGxpbmcgdGhlIGltYWdlLCBlbmFibGUg dGhlIFdhdGNoZG9nIFRpbWVyIGZvcg0KPi0gICAgICAgIC8vIGEgNSBNaW51dGUgcGVyaW9kDQo+ LSAgICAgICAgLy8NCj4tICAgICAgICBnQlMtPlNldFdhdGNoZG9nVGltZXIgKDUgKiA2MCwgMHgw MDAwLCAweDAwLCBOVUxMKTsNCj4tICAgICAgICBTdGF0dXMgPSBnQlMtPlN0YXJ0SW1hZ2UgKElt YWdlSGFuZGxlLCAmRXhpdERhdGFTaXplLCAmRXhpdERhdGEpOw0KPi0NCj4tICAgICAgICAvLw0K Pi0gICAgICAgIC8vIENsZWFyIHRoZSBXYXRjaGRvZyBUaW1lciBhZnRlciB0aGUgaW1hZ2UgcmV0 dXJucy4NCj4tICAgICAgICAvLw0KPi0gICAgICAgIGdCUy0+U2V0V2F0Y2hkb2dUaW1lciAoMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgTlVMTCk7DQo+LSAgICAgIH0NCj4tICAgICAgRHJpdmVySW5k ZXgrKzsNCj4tICAgIH0gd2hpbGUgKFRSVUUpOw0KPi0gIH0NCj4tICBGcmVlUG9vbCAoSGFuZGxl QnVmKTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFJlZ2lzdGVyIGFuIGV2ZW50IG5vdGlmaWNh dGlvbiBmdW5jdGlvbiBmb3IgdXNlciBwcm9maWxlIGNoYW5nZWQuDQo+LQ0KPi0gIEBwYXJhbVtp bl0gIEltYWdlSGFuZGxlICAgICBJbWFnZSBoYW5kbGUgdGhpcyBkcml2ZXIuDQo+LQ0KPi0qKi8N Cj4tVk9JRA0KPi1Mb2FkRGVmZXJyZWRJbWFnZUluaXQgKA0KPi0gIElOIEVGSV9IQU5ETEUgICAg ICAgIEltYWdlSGFuZGxlDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICBTdGF0dXM7DQo+ LSAgRUZJX0VWRU5UICAgICBFdmVudDsNCj4tDQo+LSAgbURlZmVycmVkSW1hZ2VIYW5kbGUgPSBJ bWFnZUhhbmRsZTsNCj4tDQo+LSAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVudEV4ICgNCj4tICAg ICAgICAgICAgICAgICAgRVZUX05PVElGWV9TSUdOQUwsDQo+LSAgICAgICAgICAgICAgICAgIFRQ TF9DQUxMQkFDSywNCj4tICAgICAgICAgICAgICAgICAgTG9hZERlZmVycmVkSW1hZ2UsDQo+LSAg ICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICZnRWZpRXZlbnRVc2Vy UHJvZmlsZUNoYW5nZWRHdWlkLA0KPi0gICAgICAgICAgICAgICAgICAmRXZlbnQNCj4tICAgICAg ICAgICAgICAgICAgKTsNCj4tDQo+LSAgQVNTRVJUIChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MpOw0K Pi19DQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJ ZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuDQo+YWdlci5jDQo+Yi9TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlN YW4NCj5hZ2VyLmMNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCBmZDk0MTc5MmMx Li4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNl cklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW4NCj5hZ2VyLmMNCj4rKysgL2Rldi9u dWxsDQo+QEAgLTEsMzc2NiArMCwwIEBADQo+LS8qKiBAZmlsZQ0KPi0gIFRoaXMgZHJpdmVyIG1h bmFnZXMgdXNlciBpbmZvcm1hdGlvbiBhbmQgcHJvZHVjZXMgdXNlciBtYW5hZ2VyIHByb3RvY29s Lg0KPi0NCj4tQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi0oQykgQ29weXJpZ2h0IDIwMTggSGV3bGV0dCBQYWNr YXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJs ZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4t d2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRo ZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNl bnNlcy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVO REVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJB TlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9S IElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpbmNsdWRlICJVc2VySWRlbnRpZnlNYW5hZ2Vy LmgiDQo+LQ0KPi0vLw0KPi0vLyBEZWZhdWx0IHVzZXIgbmFtZS4NCj4tLy8NCj4tQ0hBUjE2ICAg ICAgICAgICAgICAgICAgICAgIG1Vc2VyTmFtZVtdICAgICAgID0gTCJBZG1pbmlzdHJhdG9yIjsN Cj4tDQo+LS8vDQo+LS8vIFBvaW50cyB0byB0aGUgdXNlciBwcm9maWxlIGRhdGFiYXNlLg0KPi0v Lw0KPi1VU0VSX1BST0ZJTEVfREIgICAgICAgICAgICAgKm1Vc2VyUHJvZmlsZURiICAgPSBOVUxM Ow0KPi0NCj4tLy8NCj4tLy8gUG9pbnRzIHRvIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVycyBmb3Vu ZCBpbiBzeXN0ZW0uDQo+LS8vDQo+LUNSRURFTlRJQUxfUFJPVklERVJfSU5GTyAgICAqbVByb3Zp ZGVyRGIgICAgICA9IE5VTEw7DQo+LQ0KPi0vLw0KPi0vLyBDdXJyZW50IHVzZXIgc2hhcmVkIGlu IG11bHRpIGZ1bmN0aW9uLg0KPi0vLw0KPi1FRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgbUN1 cnJlbnRVc2VyICAgICAgPSBOVUxMOw0KPi0NCj4tLy8NCj4tLy8gRmxhZyBpbmRpY2F0ZXMgYSB1 c2VyIGlzIGlkZW50aWZpZWQuDQo+LS8vDQo+LUJPT0xFQU4gICAgICAgICAgICAgICAgICAgICBt SWRlbnRpZmllZCAgICAgICA9IEZBTFNFOw0KPi1VU0VSX01BTkFHRVJfQ0FMTEJBQ0tfSU5GTyAg Km1DYWxsYmFja0luZm8gICAgPSBOVUxMOw0KPi1ISUlfVkVORE9SX0RFVklDRV9QQVRIICAgICAg bUhpaVZlbmRvckRldmljZVBhdGggPSB7DQo+LSAgew0KPi0gICAgew0KPi0gICAgICBIQVJEV0FS RV9ERVZJQ0VfUEFUSCwNCj4tICAgICAgSFdfVkVORE9SX0RQLA0KPi0gICAgICB7DQo+LSAgICAg ICAgKFVJTlQ4KSAoc2l6ZW9mIChWRU5ET1JfREVWSUNFX1BBVEgpKSwNCj4tICAgICAgICAoVUlO VDgpICgoc2l6ZW9mIChWRU5ET1JfREVWSUNFX1BBVEgpKSA+PiA4KQ0KPi0gICAgICB9DQo+LSAg ICB9LA0KPi0gICAgVVNFUl9JREVOVElGWV9NQU5BR0VSX0dVSUQNCj4tICB9LA0KPi0gIHsNCj4t ICAgIEVORF9ERVZJQ0VfUEFUSF9UWVBFLA0KPi0gICAgRU5EX0VOVElSRV9ERVZJQ0VfUEFUSF9T VUJUWVBFLA0KPi0gICAgew0KPi0gICAgICAoVUlOVDgpIChFTkRfREVWSUNFX1BBVEhfTEVOR1RI KSwNCj4tICAgICAgKFVJTlQ4KSAoKEVORF9ERVZJQ0VfUEFUSF9MRU5HVEgpID4+IDgpDQo+LSAg ICB9DQo+LSAgfQ0KPi19Ow0KPi0NCj4tDQo+LUVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgZ1Vz ZXJJZGVudGlmeU1hbmFnZXIgPSB7DQo+LSAgVXNlclByb2ZpbGVDcmVhdGUsDQo+LSAgVXNlclBy b2ZpbGVEZWxldGUsDQo+LSAgVXNlclByb2ZpbGVHZXROZXh0LA0KPi0gIFVzZXJQcm9maWxlQ3Vy cmVudCwNCj4tICBVc2VyUHJvZmlsZUlkZW50aWZ5LA0KPi0gIFVzZXJQcm9maWxlRmluZCwNCj4t ICBVc2VyUHJvZmlsZU5vdGlmeSwNCj4tICBVc2VyUHJvZmlsZUdldEluZm8sDQo+LSAgVXNlclBy b2ZpbGVTZXRJbmZvLA0KPi0gIFVzZXJQcm9maWxlRGVsZXRlSW5mbywNCj4tICBVc2VyUHJvZmls ZUdldE5leHRJbmZvLA0KPi19Ow0KPi0NCj4tDQo+LS8qKg0KPi0gIEZpbmQgdGhlIHNwZWNpZmll ZCB1c2VyIGluIHRoZSB1c2VyIGRhdGFiYXNlLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIHNlYXJj aGVzIHRoZSBzcGVjaWZpZWQgdXNlciBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVzZXINCj5k YXRhYmFzZS4NCj4tICBBbmQgaWYgTmV4dFVzZXIgaXMgVFJVRSwgcmV0dXJuIHRoZSBuZXh0IFVz ZXIgaW4gdGhlIHVzZXIgZGF0YWJhc2UuDQo+LQ0KPi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VyICAg ICAgICAgT24gZW50cnksIHBvaW50cyB0byB0aGUgdXNlciBwcm9maWxlIGVudHJ5IHRvDQo+c2Vh cmNoLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gcmV0dXJuLCBwb2ludHMg dG8gdGhlIHVzZXIgcHJvZmlsZSBlbnRyeSBvciBOVUxMIGlmIG5vdA0KPmZvdW5kLg0KPi0gIEBw YXJhbVtpbl0gICAgICBOZXh0VXNlciAgICAgSWYgRkFMU0UsIGZpbmQgdGhlIHVzZXIgaW4gdXNl ciBwcm9maWxlIGRhdGFiYXNlDQo+c3BlY2lmeWVkIGJ5IFVzZXINCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIElmIFRSVUUsIGZpbmQgdGhlIG5leHQgdXNlciBpbiB1c2VyIHByb2Zp bGUgZGF0YWJhc2Ugc3BlY2lmeWVkDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi eSBVc2VyLg0KPi0gIEBwYXJhbVtvdXRdICAgICBQcm9maWxlSW5kZXggQSBwb2ludGVyIHRvIHRo ZSBpbmRleCBvZiB1c2VyIHByb2ZpbGUgZGF0YWJhc2UNCj50aGF0IG1hdGNoZXMgdGhlDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHNwZWNpZnllZCBieSBVc2VyLg0KPi0N Cj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgIFVzZXIgd2FzIE5VTEwsIG9yIFVzZXIg d2FzIG5vdCBmb3VuZCwgb3IgdGhlDQo+bmV4dCB1c2VyIHdhcyBub3QgZm91bmQuDQo+LSAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBVc2VyIG9yIHRoZSBuZXh0IHVzZXIgYXJlIGZvdW5k IGluIHVzZXIgcHJvZmlsZQ0KPmRhdGFiYXNlDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1G aW5kVXNlclByb2ZpbGUgKA0KPi0gIElOIE9VVCAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAg ICAgICAgICAgICAqKlVzZXIsDQo+LSAgSU4gICAgICBCT09MRUFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5leHRVc2VyLA0KPi0gICAgIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqUHJvZmlsZUluZGV4IE9QVElPTkFMDQo+LSAgKQ0KPi17DQo+LSAg VUlOVE4gICAgICAgICAgICAgICBJbmRleDsNCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayBwYXJh bWV0ZXJzDQo+LSAgLy8NCj4tICBpZiAoKG1Vc2VyUHJvZmlsZURiID09IE5VTEwpIHx8IChVc2Vy ID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tICB9DQo+LQ0KPi0g IC8vDQo+LSAgLy8gQ2hlY2sgd2hldGhlciB0aGUgdXNlciBwcm9maWxlIGlzIGluIHRoZSB1c2Vy IHByb2ZpbGUgZGF0YWJhc2UuDQo+LSAgLy8NCj4tICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBt VXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW07IEluZGV4KyspIHsNCj4tICAgIGlmIChtVXNl clByb2ZpbGVEYi0+VXNlclByb2ZpbGVbSW5kZXhdID09ICpVc2VyKSB7DQo+LSAgICAgIGlmIChQ cm9maWxlSW5kZXggIT0gTlVMTCkgew0KPi0gICAgICAgICpQcm9maWxlSW5kZXggPSBJbmRleDsN Cj4tICAgICAgfQ0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIGlmIChO ZXh0VXNlcikgew0KPi0gICAgLy8NCj4tICAgIC8vIEZpbmQgdGhlIG5leHQgdXNlciBwcm9maWxl Lg0KPi0gICAgLy8NCj4tICAgIEluZGV4Kys7DQo+LSAgICBpZiAoSW5kZXggPCBtVXNlclByb2Zp bGVEYi0+VXNlclByb2ZpbGVOdW0pIHsNCj4tICAgICAgKlVzZXIgPSBtVXNlclByb2ZpbGVEYi0+ VXNlclByb2ZpbGVbSW5kZXhdOw0KPi0gICAgfSBlbHNlIGlmIChJbmRleCA9PSBtVXNlclByb2Zp bGVEYi0+VXNlclByb2ZpbGVOdW0pIHsNCj4tICAgICAgKlVzZXIgPSBOVUxMOw0KPi0gICAgICBy ZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tICAgIH0gZWxzZSB7DQo+LSAgICAgIGlmICgobVVzZXJQ cm9maWxlRGItPlVzZXJQcm9maWxlTnVtID4gMCkgJiYgKCpVc2VyID09IE5VTEwpKSB7DQo+LSAg ICAgICAgKlVzZXIgPSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVbMF07DQo+LSAgICAgIH0g ZWxzZSB7DQo+LSAgICAgICAgKlVzZXIgPSBOVUxMOw0KPi0gICAgICAgIHJldHVybiBFRklfTk9U X0ZPVU5EOw0KPi0gICAgICB9DQo+LSAgICB9DQo+LSAgfSBlbHNlIGlmIChJbmRleCA9PSBtVXNl clByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW0pIHsNCj4tICAgIHJldHVybiBFRklfTk9UX0ZPVU5E Ow0KPi0gIH0NCj4tDQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0vKioNCj4t ICBGaW5kIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgaW4gdGhlIHNwZWNp ZmllZCBVc2VyIHByb2ZpbGUuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIHNw ZWNpZmllZCB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBmcm9tIHRoZQ0KPmJlZ2lubmluZyBvZiB0 aGUgdXNlcg0KPi0gIHByb2ZpbGUuIEFuZCBpZiBOZXh0SW5mbyBpcyBUUlVFLCByZXR1cm4gdGhl IG5leHQgaW5mbyBpbiB0aGUgdXNlciBwcm9maWxlLg0KPi0NCj4tICBAcGFyYW1baW5dICAgICAg VXNlciAgICAgUG9pbnRzIHRvIHRoZSB1c2VyIHByb2ZpbGUgZW50cnkuDQo+LSAgQHBhcmFtW2lu LCBvdXRdIEluZm8gICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHVzZXIgaW5mb3JtYXRpb24g cmVjb3JkIG9yDQo+TlVMTCB0byBzdGFydA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICBz ZWFyY2hpbmcgd2l0aCB0aGUgZmlyc3QgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQuDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSB1c2VyIGluZm9y bWF0aW9uIHJlY29yZCBvciBOVUxMIGlmIG5vdA0KPmZvdW5kLg0KPi0gIEBwYXJhbVtpbl0gICAg ICBOZXh0SW5mbyBJZiBGQUxTRSwgZmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgaW4g cHJvZmlsZQ0KPnNwZWNpZnllZCBieSBVc2VyLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBJZiBUUlVFLCBmaW5kIHRoZSBuZXh0IHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIGluIHByb2Zp bGUNCj5zcGVjaWZ5ZWQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgVXNlci4NCj4t ICBAcGFyYW1bb3V0XSAgICAgT2Zmc2V0ICAgQSBwb2ludGVyIHRvIHRoZSBvZmZzZXQgb2YgdGhl IGluZm9ybWF0aW9uIHJlY29yZCBpbg0KPnRoZSB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0gIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEluZm8gaXMgTlVMTA0KPi0gIEByZXR2YWwgRUZJX05P VF9GT1VORCAgICAgICAgIEluZm8gd2FzIG5vdCBmb3VuZCwgb3IgdGhlIG5leHQgSW5mbyB3YXMg bm90DQo+Zm91bmQuDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgSW5mbyBvciB0 aGUgbmV4dCBpbmZvIGFyZSBmb3VuZCBpbiB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0qKi8NCj4tRUZJ X1NUQVRVUw0KPi1GaW5kVXNlckluZm8gKA0KPi0gIElOICAgICBVU0VSX1BST0ZJTEVfRU5UUlkg ICAgICAgICAgICAgICAgICAgICogVXNlciwNCj4tICBJTiBPVVQgRUZJX1VTRVJfSU5GTyAgICAg ICAgICAgICAgICAgICAgICAgICAqKkluZm8sDQo+LSAgSU4gICAgIEJPT0xFQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTmV4dEluZm8sDQo+LSAgICAgT1VUIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKk9mZnNldCBPUFRJT05BTA0KPi0gICkNCj4tew0KPi0g IEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPi0gIEVGSV9VU0VSX0lORk8gKlVzZXJJbmZvOw0KPi0g IFVJTlROICAgICAgICAgSW5mb0xlbjsNCj4tDQo+LSAgaWYgKEluZm8gPT0gTlVMTCkgew0KPi0g ICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAg Ly8gQ2hlY2sgdXNlciBwcm9maWxlIGVudHJ5DQo+LSAgLy8NCj4tICBTdGF0dXMgPSBGaW5kVXNl clByb2ZpbGUgKCZVc2VyLCBGQUxTRSwgTlVMTCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRmlu ZCB1c2VyIGluZm9ybWF0aW9uIGluIHRoZSBzcGVjaWZpZWQgdXNlciByZWNvcmQuDQo+LSAgLy8N Cj4tICBJbmZvTGVuID0gMDsNCj4tICB3aGlsZSAoSW5mb0xlbiA8IFVzZXItPlVzZXJQcm9maWxl U2l6ZSkgew0KPi0gICAgVXNlckluZm8gPSAoRUZJX1VTRVJfSU5GTyAqKSAoVXNlci0+UHJvZmls ZUluZm8gKyBJbmZvTGVuKTsNCj4tICAgIGlmIChVc2VySW5mbyA9PSAqSW5mbykgew0KPi0gICAg ICBpZiAoT2Zmc2V0ICE9IE5VTEwpIHsNCj4tICAgICAgICAqT2Zmc2V0ID0gSW5mb0xlbjsNCj4t ICAgICAgfQ0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tICAgIEluZm9MZW4gKz0gQUxJR05f VkFSSUFCTEUgKFVzZXJJbmZvLT5JbmZvU2l6ZSk7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8v IENoZWNrIHdoZXRoZXIgdG8gZmluZCB0aGUgbmV4dCB1c2VyIGluZm9ybWF0aW9uLg0KPi0gIC8v DQo+LSAgaWYgKE5leHRJbmZvKSB7DQo+LSAgICBpZiAoSW5mb0xlbiA8IFVzZXItPlVzZXJQcm9m aWxlU2l6ZSkgew0KPi0gICAgICBVc2VySW5mbyA9IChFRklfVVNFUl9JTkZPICopIChVc2VyLT5Q cm9maWxlSW5mbyArIEluZm9MZW4pOw0KPi0gICAgICBJbmZvTGVuICs9IEFMSUdOX1ZBUklBQkxF IChVc2VySW5mby0+SW5mb1NpemUpOw0KPi0gICAgICBpZiAoSW5mb0xlbiA8IFVzZXItPlVzZXJQ cm9maWxlU2l6ZSkgew0KPi0gICAgICAgICpJbmZvID0gKEVGSV9VU0VSX0lORk8gKikgKFVzZXIt PlByb2ZpbGVJbmZvICsgSW5mb0xlbik7DQo+LSAgICAgICAgaWYgKE9mZnNldCAhPSBOVUxMKSB7 DQo+LSAgICAgICAgICAqT2Zmc2V0ID0gSW5mb0xlbjsNCj4tICAgICAgICB9DQo+LSAgICAgIH0g ZWxzZSBpZiAoSW5mb0xlbiA9PSBVc2VyLT5Vc2VyUHJvZmlsZVNpemUpIHsNCj4tICAgICAgICAq SW5mbyA9IE5VTEw7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgICAgIH0N Cj4tICAgIH0gZWxzZSB7DQo+LSAgICAgIGlmICgqSW5mbyA9PSBOVUxMKSB7DQo+LSAgICAgICAg KkluZm8gPSAoRUZJX1VTRVJfSU5GTyAqKSBVc2VyLT5Qcm9maWxlSW5mbzsNCj4tICAgICAgICBp ZiAoT2Zmc2V0ICE9IE5VTEwpIHsNCj4tICAgICAgICAgICpPZmZzZXQgPSAwOw0KPi0gICAgICAg IH0NCj4tICAgICAgfSBlbHNlIHsNCj4tICAgICAgICAqSW5mbyA9IE5VTEw7DQo+LSAgICAgICAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgICAgIH0NCj4tICAgIH0NCj4tICB9IGVsc2UgaWYg KEluZm9MZW4gPT0gVXNlci0+VXNlclByb2ZpbGVTaXplKSB7DQo+LSAgICByZXR1cm4gRUZJX05P VF9GT1VORDsNCj4tICB9DQo+LQ0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4t LyoqDQo+LSAgRmluZCBhIHVzZXIgaW5mb21hdGlvbiByZWNvcmQgYnkgdGhlIGluZm9ybWF0aW9u IHJlY29yZCB0eXBlLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGFsbCB1c2VyIGlu Zm9ybWF0aW9uIHJlY29yZHMgb2YgVXNlci4gVGhlIHNlYXJjaCBzdGFydHMNCj53aXRoIHRoZQ0K Pi0gIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIGZvbGxvd2luZyBJbmZvIGFuZCBjb250aW51ZXMg dW50aWwgZWl0aGVyIHRoZQ0KPmluZm9ybWF0aW9uIGlzIGZvdW5kDQo+LSAgb3IgdGhlcmUgYXJl IG5vIG1vcmUgdXNlciBpbmZvbWF0aW9uIHJlY29yZC4NCj4tICBBIG1hdGNoIG9jY3VycyB3aGVu IGEgSW5mby5JbmZvVHlwZSBmaWVsZCBtYXRjaGVzIHRoZSB1c2VyIGluZm9ybWF0aW9uDQo+cmVj b3JkIHR5cGUuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICAgICBVc2VyICAgICBQb2ludHMgdG8gdGhl IHVzZXIgcHJvZmlsZSByZWNvcmQgdG8gc2VhcmNoLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBJbmZv ICAgICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBvcg0K Pk5VTEwgdG8gc3RhcnQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoaW5nIHdp dGggdGhlIGZpcnN0IHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkLg0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNv cmQgb3IgTlVMTCBpZiBub3QNCj5mb3VuZC4NCj4tICBAcGFyYW1baW5dICAgICAgSW5mb1R5cGUg VGhlIGluZm9tYXRpb24gdHlwZSB0byBiZSBzZWFyY2hlZC4NCj4tDQo+LSAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVXNlciBpbmZvcm1hdGlvbiB3YXMgZm91bmQuIEluZm8gcG9pbnRz IHRvIHRoZQ0KPnVzZXIgaW5mb3JtYXRpb24gcmVjb3JkLg0KPi0gIEByZXR2YWwgRUZJX05PVF9G T1VORCAgICAgICAgIFVzZXIgaW5mb3JtYXRpb24gd2FzIG5vdCBmb3VuZC4NCj4tICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2VyIGlzIE5VTEwgb3IgSW5mbyBpcyBOVUxMLg0KPi0N Cj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRmluZFVzZXJJbmZvQnlUeXBlICgNCj4tICBJTiAgICAg IFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgKlVzZXIsDQo+LSAgSU4gT1VU ICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICoqSW5mbywNCj4tICBJTiAg ICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mb1R5cGUNCj4tICAp DQo+LXsNCj4tICBFRklfU1RBVFVTICAgIFN0YXR1czsNCj4tICBFRklfVVNFUl9JTkZPICpVc2Vy SW5mbzsNCj4tICBVSU5UTiAgICAgICAgIEluZm9MZW47DQo+LQ0KPi0gIGlmIChJbmZvID09IE5V TEwpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4t ICAvLw0KPi0gIC8vIENoZWNrIHdoZXRoZXIgdGhlIHVzZXIgaGFzIHRoZSBzcGVjaWZpZWQgdXNl ciBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIEluZm9MZW4gPSAwOw0KPi0gIGlmICgqSW5mbyA9 PSBOVUxMKSB7DQo+LSAgICBTdGF0dXMgPSBGaW5kVXNlclByb2ZpbGUgKCZVc2VyLCBGQUxTRSwg TlVMTCk7DQo+LSAgfSBlbHNlIHsNCj4tICAgIFN0YXR1cyA9IEZpbmRVc2VySW5mbyAoVXNlciwg SW5mbywgVFJVRSwgJkluZm9MZW4pOw0KPi0gIH0NCj4tDQo+LSAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPi0gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgfQ0KPi0NCj4tICB3aGls ZSAoSW5mb0xlbiA8IFVzZXItPlVzZXJQcm9maWxlU2l6ZSkgew0KPi0gICAgVXNlckluZm8gPSAo RUZJX1VTRVJfSU5GTyAqKSAoVXNlci0+UHJvZmlsZUluZm8gKyBJbmZvTGVuKTsNCj4tICAgIGlm IChVc2VySW5mby0+SW5mb1R5cGUgPT0gSW5mb1R5cGUpIHsNCj4tICAgICAgaWYgKFVzZXJJbmZv ICE9ICpJbmZvKSB7DQo+LSAgICAgICAgKkluZm8gPSBVc2VySW5mbzsNCj4tICAgICAgICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+LSAgICAgIH0NCj4tICAgIH0NCj4tDQo+LSAgICBJbmZvTGVuICs9 IEFMSUdOX1ZBUklBQkxFIChVc2VySW5mby0+SW5mb1NpemUpOw0KPi0gIH0NCj4tDQo+LSAgKklu Zm8gPSBOVUxMOw0KPi0gIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi19DQo+LQ0KPi0vKioNCj4t ICBGaW5kIGEgdXNlciB1c2luZyBhIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkLg0KPi0NCj4tICBU aGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGFsbCB1c2VyIHByb2ZpbGVzIGZvciB0aGUgc3BlY2lmaWVk IHVzZXIgaW5mb3JtYXRpb24NCj5yZWNvcmQuIFRoZQ0KPi0gIHNlYXJjaCBzdGFydHMgd2l0aCB0 aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgaGFuZGxlIGZvbGxvd2luZyBVc2VySW5mbw0KPmFu ZCBjb250aW51ZXMNCj4tICB1bnRpbCBlaXRoZXIgdGhlIGluZm9ybWF0aW9uIGlzIGZvdW5kIG9y IHRoZXJlIGFyZSBubyBtb3JlIHVzZXIgcHJvZmlsZXMuDQo+LSAgQSBtYXRjaCBvY2N1cnMgd2hl biB0aGUgSW5mby5JbmZvVHlwZSBmaWVsZCBtYXRjaGVzIHRoZSB1c2VyIGluZm9ybWF0aW9uDQo+ cmVjb3JkIHR5cGUgYW5kIHRoZQ0KPi0gIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIGRhdGEgbWF0 Y2hlcyB0aGUgcG9ydGlvbiBvZiBJbmZvIHBhc3NlZCB0aGUNCj5FRklfVVNFUl9JTkZPIGhlYWRl ci4NCj4tDQo+LSAgQHBhcmFtW2luLCBvdXRdIFVzZXIgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8g dGhlIHByZXZpb3VzbHkgcmV0dXJuZWQgdXNlcg0KPnByb2ZpbGUgcmVjb3JkLA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBvciBOVUxMIHRvIHN0YXJ0IHNlYXJjaGluZyB3aXRoIHRoZSBm aXJzdCB1c2VyIHByb2ZpbGUuDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIHJldHVy biwgcG9pbnRzIHRvIHRoZSB1c2VyIHByb2ZpbGUgZW50cnksIG9yIE5VTEwgaWYgbm90IGZvdW5k Lg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VySW5mbyBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBw cmV2aW91c2x5IHJldHVybmVkIHVzZXINCj5pbmZvcm1hdGlvbiByZWNvcmQsDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9yIE5VTEwgdG8gc3RhcnQgc2VhcmNoaW5nIHdpdGggdGhlIGZp cnN0Lg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0 aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQsIG9yIE5VTEwgaWYgbm90DQo+Zm91bmQuDQo+LSAg QHBhcmFtW2luXSAgICAgIEluZm8gICAgIFBvaW50cyB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcg dGhlIHVzZXIgaW5mb3JtYXRpb24gdG8NCj5iZSBjb21wYXJlZA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQuDQo+LSAgQHBhcmFtW2lu XSAgICAgIEluZm9TaXplIFRoZSBzaXplIG9mIEluZm8sIGluIGJ5dGVzLiBTYW1lIGFzIEluZm8t PkluZm9TaXplLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBVc2VyIGlu Zm9ybWF0aW9uIHdhcyBmb3VuZC4gVXNlciBwb2ludHMgdG8gdGhlDQo+dXNlciBwcm9maWxlIHJl Y29yZCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgVXNlckluZm8gcG9p bnRzIHRvIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZC4NCj4tICBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQgICAgICAgICBVc2VyIGluZm9ybWF0aW9uIHdhcyBub3QgZm91bmQuDQo+LSAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNlciBpcyBOVUxMOyBJbmZvIGlzIE5VTEw7IG9yLCBJ bmZvU2l6ZSBpcw0KPnRvbyBzbWFsbC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUZpbmRV c2VyUHJvZmlsZUJ5SW5mbyAoDQo+LSAgSU4gT1VUICBVU0VSX1BST0ZJTEVfRU5UUlkgICAgICAg ICAgICAgICAgICAgICoqVXNlciwNCj4tICBJTiBPVVQgIEVGSV9VU0VSX0lORk8gICAgICAgICAg ICAgICAgICAgICAgICAgKipVc2VySW5mbywgT1BUSU9OQUwNCj4tICBJTiAgICAgIEVGSV9VU0VS X0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgKkluZm8sDQo+LSAgSU4gICAgICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9TaXplDQo+LSAgKQ0KPi17DQo+LSAg RUZJX1NUQVRVUyAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GTyAqSW5mb0VudHJ5Ow0KPi0N Cj4tDQo+LSAgaWYgKChVc2VyID09IE5VTEwpIHx8IChJbmZvID09IE5VTEwpKSB7DQo+LSAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgaWYgKEluZm9TaXpl IDwgc2l6ZW9mIChFRklfVVNFUl9JTkZPKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIGlmIChVc2VySW5mbyAhPSBOVUxMKSB7DQo+LSAgICBJ bmZvRW50cnkgPSAqVXNlckluZm87DQo+LSAgfSBlbHNlIHsNCj4tICAgIEluZm9FbnRyeSA9IE5V TEw7DQo+LSAgfQ0KPi0gIC8vDQo+LSAgLy8gRmluZCB1c2VyIHByb2ZpbGUgYWNjb3JkaW5nIHRv IGluZm9ybWF0aW9uLg0KPi0gIC8vDQo+LSAgaWYgKCpVc2VyID09IE5VTEwpIHsNCj4tICAgICpV c2VyID0gbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlWzBdOw0KPi0gIH0NCj4tDQo+LSAgLy8N Cj4tICAvLyBDaGVjayB1c2VyIHByb2ZpbGUgaGFuZGxlLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0g RmluZFVzZXJQcm9maWxlIChVc2VyLCBGQUxTRSwgTlVMTCk7DQo+LQ0KPi0gIHdoaWxlICghRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAvLw0KPi0gICAgLy8gRmluZCB0aGUgdXNlciBpbmZv cm1hdGlvbiBpbiBhIHVzZXIgcHJvZmlsZS4NCj4tICAgIC8vDQo+LSAgICB3aGlsZSAoVFJVRSkg ew0KPi0gICAgICBTdGF0dXMgPSBGaW5kVXNlckluZm9CeVR5cGUgKCpVc2VyLCAmSW5mb0VudHJ5 LCBJbmZvLT5JbmZvVHlwZSk7DQo+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4t ICAgICAgICBicmVhazsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAgaWYgKEluZm9TaXplID09IElu Zm8tPkluZm9TaXplKSB7DQo+LSAgICAgICAgaWYgKENvbXBhcmVNZW0gKChVSU5UOCAqKSAoSW5m b0VudHJ5ICsgMSksIChVSU5UOCAqKSAoSW5mbyArIDEpLCBJbmZvU2l6ZQ0KPi0gc2l6ZW9mIChF RklfVVNFUl9JTkZPKSkgPT0gMCkgew0KPi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIC8vIEZv dW5kIHRoZSBpbmZvbWF0aW9uIHJlY29yZC4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBp ZiAoVXNlckluZm8gIT0gTlVMTCkgew0KPi0gICAgICAgICAgICAqVXNlckluZm8gPSBJbmZvRW50 cnk7DQo+LSAgICAgICAgICB9DQo+LSAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAg ICAgICAgfQ0KPi0gICAgICB9DQo+LSAgICB9DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIEdldCBu ZXh0IHVzZXIgcHJvZmlsZS4NCj4tICAgIC8vDQo+LSAgICBJbmZvRW50cnkgPSBOVUxMOw0KPi0g ICAgU3RhdHVzICAgID0gRmluZFVzZXJQcm9maWxlIChVc2VyLCBUUlVFLCBOVUxMKTsNCj4tICB9 DQo+LQ0KPi0gIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAg Q2hlY2sgd2hldGhlciB0aGUgYWNjZXNzIHBvbGljeSBpcyB2YWxpZC4NCj4tDQo+LSAgQHBhcmFt W2luXSAgUG9saWN5SW5mbyAgICAgICAgICBQb2ludCB0byB0aGUgYWNjZXNzIHBvbGljeS4NCj4t ICBAcGFyYW1baW5dICBJbmZvTGVuICAgICAgICAgICAgIFRoZSBwb2xpY3kgbGVuZ3RoLg0KPi0N Cj4tICBAcmV0dmFsIFRSVUUgICAgIFRoZSBwb2xpY3kgaXMgYSB2YWxpZCBhY2Nlc3MgcG9saWN5 Lg0KPi0gIEByZXR2YWwgRkFMU0UgICAgVGhlIGFjY2VzcyBwb2xpY3kgaXMgbm90IGEgdmFsaWQg YWNjZXNzIHBvbGljeS4NCj4tDQo+LSoqLw0KPi1CT09MRUFODQo+LUNoZWNrQWNjZXNzUG9saWN5 ICgNCj4tICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlBv bGljeUluZm8sDQo+LSAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEluZm9MZW4NCj4tICApDQo+LXsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICBUb3RhbExlbjsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUxlbjsN Cj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBPZmZTZXQ7DQo+LSAgRUZJX1VTRVJf SU5GT19BQ0NFU1NfQ09OVFJPTCAgQWNjZXNzOw0KPi0gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NP TCAgICAgICpQYXRoOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGhTaXpl Ow0KPi0NCj4tICBUb3RhbExlbiA9IDA7DQo+LSAgd2hpbGUgKFRvdGFsTGVuIDwgSW5mb0xlbikg ew0KPi0gICAgLy8NCj4tICAgIC8vIENoZWNrIGFjY2VzcyBwb2xpY3kgYWNjb3JkaW5nIHRvIHR5 cGUuDQo+LSAgICAvLw0KPi0gICAgQ29weU1lbSAoJkFjY2VzcywgUG9saWN5SW5mbyArIFRvdGFs TGVuLCBzaXplb2YgKEFjY2VzcykpOw0KPi0gICAgVmFsdWVMZW4gPSBBY2Nlc3MuU2l6ZSAtIHNp emVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCk7DQo+LSAgICBzd2l0Y2ggKEFjY2Vz cy5UeXBlKSB7DQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX0ZPUkJJRF9MT0FEOg0K Pi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19QRVJNSVRfTE9BRDoNCj4tICAgIGNhc2Ug RUZJX1VTRVJfSU5GT19BQ0NFU1NfRk9SQklEX0NPTk5FQ1Q6DQo+LSAgICBjYXNlIEVGSV9VU0VS X0lORk9fQUNDRVNTX1BFUk1JVF9DT05ORUNUOg0KPi0gICAgICBPZmZTZXQgPSAwOw0KPi0gICAg ICB3aGlsZSAoT2ZmU2V0IDwgVmFsdWVMZW4pIHsNCj4tICAgICAgICBQYXRoICAgICAgPSAoRUZJ X0RFVklDRV9QQVRIX1BST1RPQ09MICopIChQb2xpY3lJbmZvICsgVG90YWxMZW4gKw0KPnNpemVv ZiAoQWNjZXNzKSArIE9mZlNldCk7DQo+LSAgICAgICAgUGF0aFNpemUgID0gR2V0RGV2aWNlUGF0 aFNpemUgKFBhdGgpOw0KPi0gICAgICAgIE9mZlNldCArPSBQYXRoU2l6ZTsNCj4tICAgICAgfQ0K Pi0gICAgICBpZiAoT2ZmU2V0ICE9IFZhbHVlTGVuKSB7DQo+LSAgICAgICAgcmV0dXJuIEZBTFNF Ow0KPi0gICAgICB9DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5G T19BQ0NFU1NfU0VUVVA6DQo+LSAgICAgIGlmIChWYWx1ZUxlbiAlIHNpemVvZiAoRUZJX0dVSUQp ICE9IDApIHsNCj4tICAgICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICAgIH0NCj4tICAgICAgYnJl YWs7DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19CT09UX09SREVSOg0KPi0g ICAgICBpZiAoVmFsdWVMZW4gJSBzaXplb2YgKEVGSV9VU0VSX0lORk9fQUNDRVNTX0JPT1RfT1JE RVJfSERSKSAhPSAwKQ0KPnsNCj4tICAgICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICAgIH0NCj4t ICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19FTlJPTExf U0VMRjoNCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX09USEVSUzoNCj4t ICAgIGNhc2UgRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFOg0KPi0gICAgICBpZiAoVmFsdWVM ZW4gIT0gMCkgew0KPi0gICAgICAgIHJldHVybiBGQUxTRTsNCj4tICAgICAgfQ0KPi0gICAgICBi cmVhazsNCj4tDQo+LSAgICBkZWZhdWx0Og0KPi0gICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICAg IGJyZWFrOw0KPi0gICAgfQ0KPi0NCj4tICAgIFRvdGFsTGVuICs9IEFjY2Vzcy5TaXplOw0KPi0g IH0NCj4tDQo+LSAgaWYgKFRvdGFsTGVuICE9IEluZm9MZW4pIHsNCj4tICAgIHJldHVybiBGQUxT RTsNCj4tICB9DQo+LQ0KPi0gIHJldHVybiBUUlVFOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAg Q2hlY2sgd2hldGhlciB0aGUgaWRlbnRpdHkgcG9saWN5IGlzIHZhbGlkLg0KPi0NCj4tICBAcGFy YW1baW5dICBQb2xpY3lJbmZvICAgICAgICAgIFBvaW50IHRvIHRoZSBpZGVudGl0eSBwb2xpY3ku DQo+LSAgQHBhcmFtW2luXSAgSW5mb0xlbiAgICAgICAgICAgICBUaGUgcG9saWN5IGxlbmd0aC4N Cj4tDQo+LSAgQHJldHZhbCBUUlVFICAgICBUaGUgcG9saWN5IGlzIGEgdmFsaWQgaWRlbnRpdHkg cG9saWN5Lg0KPi0gIEByZXR2YWwgRkFMU0UgICAgVGhlIGFjY2VzcyBwb2xpY3kgaXMgbm90IGEg dmFsaWQgaWRlbnRpdHkgcG9saWN5Lg0KPi0NCj4tKiovDQo+LUJPT0xFQU4NCj4tQ2hlY2tJZGVu dGl0eVBvbGljeSAoDQo+LSAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpQb2xpY3lJbmZvLA0KPi0gIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmZvTGVuDQo+LSAgKQ0KPi17DQo+LSAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgVG90YWxMZW47DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg VmFsdWVMZW47DQo+LSAgRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKklkZW50aXR5Ow0K Pi0NCj4tICBUb3RhbExlbiAgPSAwOw0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIGVhY2ggcGFy dCBvZiBwb2xpY3kgZXhwcmVzc2lvbi4NCj4tICAvLw0KPi0gIHdoaWxlIChUb3RhbExlbiA8IElu Zm9MZW4pIHsNCj4tICAgIC8vDQo+LSAgICAvLyBDaGVjayBhY2Nlc3MgcG9saXN5IGFjY29yZGlu ZyB0byB0eXBlLg0KPi0gICAgLy8NCj4tICAgIElkZW50aXR5ICA9IChFRklfVVNFUl9JTkZPX0lE RU5USVRZX1BPTElDWSAqKSAoUG9saWN5SW5mbyArIFRvdGFsTGVuKTsNCj4tICAgIFZhbHVlTGVu ICA9IElkZW50aXR5LT5MZW5ndGggLSBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9M SUNZKTsNCj4tICAgIHN3aXRjaCAoSWRlbnRpdHktPlR5cGUpIHsNCj4tICAgIC8vDQo+LSAgICAv LyBDaGVjayBGYWxzZSBvcHRpb24uDQo+LSAgICAvLw0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZP X0lERU5USVRZX0ZBTFNFOg0KPi0gICAgICBpZiAoVmFsdWVMZW4gIT0gMCkgew0KPi0gICAgICAg IHJldHVybiBGQUxTRTsNCj4tICAgICAgfQ0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICAvLw0K Pi0gICAgLy8gQ2hlY2sgVHJ1ZSBvcHRpb24uDQo+LSAgICAvLw0KPi0gICAgY2FzZSBFRklfVVNF Ul9JTkZPX0lERU5USVRZX1RSVUU6DQo+LSAgICAgIGlmIChWYWx1ZUxlbiAhPSAwKSB7DQo+LSAg ICAgICAgcmV0dXJuIEZBTFNFOw0KPi0gICAgICB9DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAg IC8vDQo+LSAgICAvLyBDaGVjayBuZWdhdGl2ZSBvcGVyYXRpb24uDQo+LSAgICAvLw0KPi0gICAg Y2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX05PVDoNCj4tICAgICAgaWYgKFZhbHVlTGVuICE9 IDApIHsNCj4tICAgICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7 DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIENoZWNrIGFuZCBvcGVyYXRpb24uDQo+LSAgICAvLw0K Pi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0FORDoNCj4tICAgICAgaWYgKFZhbHVl TGVuICE9IDApIHsNCj4tICAgICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICAgIH0NCj4tICAgICAg YnJlYWs7DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIENoZWNrIG9yIG9wZXJhdGlvbi4NCj4tICAg IC8vDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfT1I6DQo+LSAgICAgIGlmIChW YWx1ZUxlbiAhPSAwKSB7DQo+LSAgICAgICAgcmV0dXJuIEZBTFNFOw0KPi0gICAgICB9DQo+LSAg ICAgIGJyZWFrOw0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBDaGVjayBjcmVkZW50aWFsIHByb3Zp ZGVyIGJ5IHR5cGUuDQo+LSAgICAvLw0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZ X0NSRURFTlRJQUxfVFlQRToNCj4tICAgICAgaWYgKFZhbHVlTGVuICE9IHNpemVvZiAoRUZJX0dV SUQpKSB7DQo+LSAgICAgICAgcmV0dXJuIEZBTFNFOw0KPi0gICAgICB9DQo+LSAgICAgIGJyZWFr Ow0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBDaGVjayBjcmVkZW50aWFsIHByb3ZpZGVyIGJ5IElE Lg0KPi0gICAgLy8NCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9DUkVERU5USUFM X1BST1ZJREVSOg0KPi0gICAgICBpZiAoVmFsdWVMZW4gIT0gc2l6ZW9mIChFRklfR1VJRCkpIHsN Cj4tICAgICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0K Pi0gICAgZGVmYXVsdDoNCj4tICAgICAgcmV0dXJuIEZBTFNFOw0KPi0gICAgICBicmVhazsNCj4t ICAgIH0NCj4tDQo+LSAgICBUb3RhbExlbiArPSBJZGVudGl0eS0+TGVuZ3RoOw0KPi0gIH0NCj4t DQo+LSAgaWYgKFRvdGFsTGVuICE9IEluZm9MZW4pIHsNCj4tICAgIHJldHVybiBGQUxTRTsNCj4t ICB9DQo+LQ0KPi0gIHJldHVybiBUUlVFOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQ2hlY2sg d2hldGhlciB0aGUgdXNlciBpbmZvcm1hdGlvbiBpcyBhIHZhbGlkIHVzZXIgaW5mb3JtYXRpb24g cmVjb3JkLg0KPi0NCj4tICBAcGFyYW1baW5dICBJbmZvIHBvaW50cyB0byB0aGUgdXNlciBpbmZv cm1hdGlvbi4NCj4tDQo+LSAgQHJldHZhbCBUUlVFICAgICBUaGUgaW5mbyBpcyBhIHZhbGlkIHVz ZXIgaW5mb3JtYXRpb24gcmVjb3JkLg0KPi0gIEByZXR2YWwgRkFMU0UgICAgVGhlIGluZm8gaXMg bm90IGEgdmFsaWQgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQuDQo+LQ0KPi0qKi8NCj4tQk9PTEVB Tg0KPi1DaGVja1VzZXJJbmZvICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfSU5GTyAgICAgICAg ICAgICAgICAgICAgICAgKkluZm8NCj4tICApDQo+LXsNCj4tICBVSU5UTiAgICAgICBJbmZvTGVu Ow0KPi0NCj4tICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRkFMU0U7DQo+LSAg fQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgdXNlciBpbmZvcm1hdGlvbiBhY2NvcmRpbmcgdG8gaW5m b3JtYXRpb24gdHlwZS4NCj4tICAvLw0KPi0gIEluZm9MZW4gPSBJbmZvLT5JbmZvU2l6ZSAtIHNp emVvZiAoRUZJX1VTRVJfSU5GTyk7DQo+LSAgc3dpdGNoIChJbmZvLT5JbmZvVHlwZSkgew0KPi0g IGNhc2UgRUZJX1VTRVJfSU5GT19FTVBUWV9SRUNPUkQ6DQo+LSAgICBpZiAoSW5mb0xlbiAhPSAw KSB7DQo+LSAgICAgIHJldHVybiBGQUxTRTsNCj4tICAgIH0NCj4tICAgIGJyZWFrOw0KPi0NCj4t ICBjYXNlIEVGSV9VU0VSX0lORk9fTkFNRV9SRUNPUkQ6DQo+LSAgY2FzZSBFRklfVVNFUl9JTkZP X0NSRURFTlRJQUxfVFlQRV9OQU1FX1JFQ09SRDoNCj4tICBjYXNlIEVGSV9VU0VSX0lORk9fQ1JF REVOVElBTF9QUk9WSURFUl9OQU1FX1JFQ09SRDoNCj4tICAgIGJyZWFrOw0KPi0NCj4tICBjYXNl IEVGSV9VU0VSX0lORk9fQ1JFQVRFX0RBVEVfUkVDT1JEOg0KPi0gIGNhc2UgRUZJX1VTRVJfSU5G T19VU0FHRV9EQVRFX1JFQ09SRDoNCj4tICAgIGlmIChJbmZvTGVuICE9IHNpemVvZiAoRUZJX1RJ TUUpKSB7DQo+LSAgICAgIHJldHVybiBGQUxTRTsNCj4tICAgIH0NCj4tICAgIGJyZWFrOw0KPi0N Cj4tICBjYXNlIEVGSV9VU0VSX0lORk9fVVNBR0VfQ09VTlRfUkVDT1JEOg0KPi0gICAgaWYgKElu Zm9MZW4gIT0gc2l6ZW9mIChVSU5UNjQpKSB7DQo+LSAgICAgIHJldHVybiBGQUxTRTsNCj4tICAg IH0NCj4tICAgIGJyZWFrOw0KPi0NCj4tICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9S RUNPUkQ6DQo+LSAgICBpZiAoSW5mb0xlbiAhPSAxNikgew0KPi0gICAgICByZXR1cm4gRkFMU0U7 DQo+LSAgICB9DQo+LSAgICBicmVhazsNCj4tDQo+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0NSRURF TlRJQUxfVFlQRV9SRUNPUkQ6DQo+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0NSRURFTlRJQUxfUFJP VklERVJfUkVDT1JEOg0KPi0gIGNhc2UgRUZJX1VTRVJfSU5GT19HVUlEX1JFQ09SRDoNCj4tICAg IGlmIChJbmZvTGVuICE9IHNpemVvZiAoRUZJX0dVSUQpKSB7DQo+LSAgICAgIHJldHVybiBGQUxT RTsNCj4tICAgIH0NCj4tICAgIGJyZWFrOw0KPi0NCj4tICBjYXNlIEVGSV9VU0VSX0lORk9fUEtD UzExX1JFQ09SRDoNCj4tICBjYXNlIEVGSV9VU0VSX0lORk9fQ0JFRkZfUkVDT1JEOg0KPi0gICAg YnJlYWs7DQo+LQ0KPi0gIGNhc2UgRUZJX1VTRVJfSU5GT19GQVJfUkVDT1JEOg0KPi0gIGNhc2Ug RUZJX1VTRVJfSU5GT19SRVRSWV9SRUNPUkQ6DQo+LSAgICBpZiAoSW5mb0xlbiAhPSAxKSB7DQo+ LSAgICAgIHJldHVybiBGQUxTRTsNCj4tICAgIH0NCj4tICAgIGJyZWFrOw0KPi0NCj4tICBjYXNl IEVGSV9VU0VSX0lORk9fQUNDRVNTX1BPTElDWV9SRUNPUkQ6DQo+LSAgICBpZighQ2hlY2tBY2Nl c3NQb2xpY3kgKChVSU5UOCAqKSAoSW5mbyArIDEpLCBJbmZvTGVuKSkgew0KPi0gICAgICByZXR1 cm4gRkFMU0U7DQo+LSAgICB9DQo+LSAgICBicmVhazsNCj4tDQo+LSAgY2FzZSBFRklfVVNFUl9J TkZPX0lERU5USVRZX1BPTElDWV9SRUNPUkQ6DQo+LSAgICBpZiAoIUNoZWNrSWRlbnRpdHlQb2xp Y3kgKChVSU5UOCAqKSAoSW5mbyArIDEpLCBJbmZvTGVuKSkgew0KPi0gICAgICByZXR1cm4gRkFM U0U7DQo+LSAgICB9DQo+LSAgICBicmVhazsNCj4tDQo+LSAgZGVmYXVsdDoNCj4tICAgIHJldHVy biBGQUxTRTsNCj4tICAgIGJyZWFrOw0KPi0gIH0NCj4tDQo+LSAgcmV0dXJuIFRSVUU7DQo+LX0N Cj4tDQo+LQ0KPi0vKioNCj4tICBDaGVjayB0aGUgdXNlciBwcm9maWxlIGRhdGEgZm9ybWF0IHRv IGJlIGFkZGVkLg0KPi0NCj4tICBAcGFyYW1baW5dICBVc2VyUHJvZmlsZUluZm8gICAgIFBvaW50 cyB0byB0aGUgdXNlciBwcm9maWxlIGRhdGEuDQo+LSAgQHBhcmFtW2luXSAgVXNlclByb2ZpbGVT aXplICAgICBUaGUgbGVuZ3RoIG9mIHVzZXIgcHJvZmlsZSBkYXRhLg0KPi0NCj4tICBAcmV0dmFs IFRSVUUgICAgIEl0IGlzIGEgdmFsaWQgdXNlciBwcm9maWxlLg0KPi0gIEByZXR2YWwgRkFMU0Ug ICAgSXQgaXMgbm90IGEgdmFsaWQgdXNlciBwcm9maWxlLg0KPi0NCj4tKiovDQo+LUJPT0xFQU4N Cj4tQ2hlY2tQcm9maWxlSW5mbyAoDQo+LSAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpVc2VyUHJvZmlsZUluZm8sDQo+LSAgSU4gIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJQcm9maWxlU2l6ZQ0KPi0gICkNCj4tew0K Pi0gIFVJTlROICAgICAgICAgQ2hrTGVuOw0KPi0gIEVGSV9VU0VSX0lORk8gKkluZm87DQo+LQ0K Pi0gIGlmIChVc2VyUHJvZmlsZUluZm8gPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEZBTFNFOw0K Pi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayB1c2VyIHByb2ZpbGUgaW5mb3JtYXRpb24g bGVuZ3RoLg0KPi0gIC8vDQo+LSAgQ2hrTGVuID0gMDsNCj4tICB3aGlsZSAoQ2hrTGVuIDwgVXNl clByb2ZpbGVTaXplKSB7DQo+LSAgICBJbmZvID0gKEVGSV9VU0VSX0lORk8gKikgKFVzZXJQcm9m aWxlSW5mbyArIENoa0xlbik7DQo+LSAgICAvLw0KPi0gICAgLy8gQ2hlY2sgdXNlciBpbmZvcm1h dGlvbiBmb3JtYXQuDQo+LSAgICAvLw0KPi0gICAgaWYgKCFDaGVja1VzZXJJbmZvIChJbmZvKSkg ew0KPi0gICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICB9DQo+LQ0KPi0gICAgQ2hrTGVuICs9IEFM SUdOX1ZBUklBQkxFIChJbmZvLT5JbmZvU2l6ZSk7DQo+LSAgfQ0KPi0NCj4tICBpZiAoQ2hrTGVu ICE9IFVzZXJQcm9maWxlU2l6ZSkgew0KPi0gICAgcmV0dXJuIEZBTFNFOw0KPi0gIH0NCj4tDQo+ LSAgcmV0dXJuIFRSVUU7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBGaW5kIHRoZSBzcGVjaWZp ZWQgUmlnaHRUeXBlIGluIGN1cnJlbnQgdXNlciBwcm9maWxlLg0KPi0NCj4tICBAcGFyYW1baW5d ICBSaWdodFR5cGUgICAgICBDb3VsZCBiZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19NQU5BR0UsDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xM X09USEVSUyBvcg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9VU0VSX0lORk9f QUNDRVNTX0VOUk9MTF9TRUxGLg0KPi0NCj4tICBAcmV0dmFsIFRSVUUgICAgIEZpbmQgdGhlIHNw ZWNpZmllZCBSaWdodFR5cGUgaW4gY3VycmVudCB1c2VyIHByb2ZpbGUuDQo+LSAgQHJldHZhbCBG QUxTRSAgICBDYW4ndCBmaW5kIHRoZSByaWdodCBpbiB0aGUgcHJvZmlsZS4NCj4tDQo+LSoqLw0K Pi1CT09MRUFODQo+LUNoZWNrQ3VycmVudFVzZXJBY2Nlc3NSaWdodCAoDQo+LSAgSU4gICAgICAg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJpZ2h0VHlwZQ0KPi0gICkNCj4t ew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4tICBFRklfVVNF Ul9JTkZPICAgICAgICAgICAgICAgICAqSW5mbzsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICBUb3RhbExlbjsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBDaGVj a0xlbjsNCj4tICBFRklfVVNFUl9JTkZPX0FDQ0VTU19DT05UUk9MICBBY2Nlc3M7DQo+LQ0KPi0g IC8vDQo+LSAgLy8gR2V0IHVzZXIgYWNjZXNzIHJpZ2h0IGluZm9ybWF0aW9uLg0KPi0gIC8vDQo+ LSAgSW5mbyA9IE5VTEw7DQo+LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlICgNCj4tICAg ICAgICAgICAgKFVTRVJfUFJPRklMRV9FTlRSWSAqKSBtQ3VycmVudFVzZXIsDQo+LSAgICAgICAg ICAgICZJbmZvLA0KPi0gICAgICAgICAgICBFRklfVVNFUl9JTkZPX0FDQ0VTU19QT0xJQ1lfUkVD T1JEDQo+LSAgICAgICAgICAgICk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0g ICAgcmV0dXJuIEZBTFNFOw0KPi0gIH0NCj4tDQo+LSAgQVNTRVJUIChJbmZvICE9IE5VTEwpOw0K Pi0gIFRvdGFsTGVuICA9IEluZm8tPkluZm9TaXplIC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKTsN Cj4tICBDaGVja0xlbiAgPSAwOw0KPi0gIHdoaWxlIChDaGVja0xlbiA8IFRvdGFsTGVuKSB7DQo+ LSAgICAvLw0KPi0gICAgLy8gQ2hlY2sgcmlnaHQgYWNjb3JkaW5nIHRvIGFjY2VzcyB0eXBlLg0K Pi0gICAgLy8NCj4tICAgIENvcHlNZW0gKCZBY2Nlc3MsIChVSU5UOCAqKSAoSW5mbyArIDEpICsg Q2hlY2tMZW4sIHNpemVvZiAoQWNjZXNzKSk7DQo+LSAgICBpZiAoQWNjZXNzLlR5cGUgPT0gUmln aHRUeXBlKSB7DQo+LSAgICAgIHJldHVybiBUUlVFOzsNCj4tICAgIH0NCj4tDQo+LSAgICBDaGVj a0xlbiArPSBBY2Nlc3MuU2l6ZTsNCj4tICB9DQo+LQ0KPi0gIHJldHVybiBGQUxTRTsNCj4tfQ0K Pi0NCj4tDQo+LS8qKg0KPi0gIENyZWF0ZSBhIHVuaXF1ZSB1c2VyIGlkZW50aWZpZXIuDQo+LQ0K Pi0gIEBwYXJhbVtvdXRdICBJZGVudGlmaWVyICAgICBUaGlzIHBvaW50cyB0byB0aGUgaWRlbnRp Zmllci4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUdlbmVyYXRlSWRlbnRpZmllciAoDQo+LSAgIE9V VCAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSWRlbnRpZmllcg0KPi0g ICkNCj4tew0KPi0gIEVGSV9USU1FICBUaW1lOw0KPi0gIFVJTlQ2NCAgICBNb25vdG9uaWNDb3Vu dDsNCj4tICBVSU5UMzIgICAgKk1vbm90b25pY1BvaW50ZXI7DQo+LSAgVUlOVE4gICAgIEluZGV4 Ow0KPi0NCj4tICAvLw0KPi0gIC8vIENyZWF0ZSBhIHVuaXF1ZSB1c2VyIGlkZW50aWZpZXIuDQo+ LSAgLy8NCj4tICBnUlQtPkdldFRpbWUgKCZUaW1lLCBOVUxMKTsNCj4tICBDb3B5TWVtIChJZGVu dGlmaWVyLCAmVGltZSwgc2l6ZW9mIChFRklfVElNRSkpOw0KPi0gIC8vDQo+LSAgLy8gUmVtb3Zl IHplcm9zLg0KPi0gIC8vDQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgc2l6ZW9mIChFRklf VElNRSk7IEluZGV4KyspIHsNCj4tICAgIGlmIChJZGVudGlmaWVyW0luZGV4XSA9PSAwKSB7DQo+ LSAgICAgIElkZW50aWZpZXJbSW5kZXhdID0gMHg1YTsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0g IE1vbm90b25pY1BvaW50ZXIgPSAoVUlOVDMyICopIElkZW50aWZpZXI7DQo+LSAgZ0JTLT5HZXRO ZXh0TW9ub3RvbmljQ291bnQgKCZNb25vdG9uaWNDb3VudCk7DQo+LSAgTW9ub3RvbmljUG9pbnRl clswXSArPSAoVUlOVDMyKSBNb25vdG9uaWNDb3VudDsNCj4tICBNb25vdG9uaWNQb2ludGVyWzFd ICs9IChVSU5UMzIpIE1vbm90b25pY0NvdW50Ow0KPi0gIE1vbm90b25pY1BvaW50ZXJbMl0gKz0g KFVJTlQzMikgTW9ub3RvbmljQ291bnQ7DQo+LSAgTW9ub3RvbmljUG9pbnRlclszXSArPSAoVUlO VDMyKSBNb25vdG9uaWNDb3VudDsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEdlbmVyYXRlIHVu aXF1ZSB1c2VyIElELg0KPi0NCj4tICBAcGFyYW1bb3V0XSAgVXNlcklkICAgICAgICAgICAgICAg ICBQb2ludHMgdG8gdGhlIHVzZXIgaWRlbnRpZmVyLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tR2Vu ZXJhdGVVc2VySWQgKA0KPi0gIE9VVCAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqVXNlcklkDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3Rh dHVzOw0KPi0gIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICpVc2VyUHJvZmlsZTsNCj4tICBFRklf VVNFUl9JTkZPICAgICAgICAgICAqVXNlckluZm87DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAg ICAgSW5kZXg7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2VuZXJhdGUgdW5pcXVlIHVzZXIgSUQNCj4t ICAvLw0KPi0gIHdoaWxlIChUUlVFKSB7DQo+LSAgICBHZW5lcmF0ZUlkZW50aWZpZXIgKFVzZXJJ ZCk7DQo+LSAgICAvLw0KPi0gICAgLy8gQ2hlY2sgd2hldGhlciBpdCdzIHVuaXF1ZSBpbiB1c2Vy IHByb2ZpbGUgZGF0YWJhc2UuDQo+LSAgICAvLw0KPi0gICAgaWYgKG1Vc2VyUHJvZmlsZURiID09 IE5VTEwpIHsNCj4tICAgICAgcmV0dXJuIDsNCj4tICAgIH0NCj4tDQo+LSAgICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW07IEluZGV4KyspIHsN Cj4tICAgICAgVXNlclByb2ZpbGUgPSAoVVNFUl9QUk9GSUxFX0VOVFJZICopIChtVXNlclByb2Zp bGVEYi0NCj4+VXNlclByb2ZpbGVbSW5kZXhdKTsNCj4tICAgICAgVXNlckluZm8gICAgPSBOVUxM Ow0KPi0gICAgICBTdGF0dXMgICAgICA9IEZpbmRVc2VySW5mb0J5VHlwZSAoVXNlclByb2ZpbGUs ICZVc2VySW5mbywNCj5FRklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JEKTsNCj4tICAgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICAgIGNvbnRpbnVlOw0KPi0gICAgICB9 DQo+LQ0KPi0gICAgICBpZiAoQ29tcGFyZU1lbSAoKFVJTlQ4ICopIChVc2VySW5mbyArIDEpLCBV c2VySWQsIHNpemVvZg0KPihFRklfVVNFUl9JTkZPX0lERU5USUZJRVIpKSA9PSAwKSB7DQo+LSAg ICAgICAgYnJlYWs7DQo+LSAgICAgIH0NCj4tICAgIH0NCj4tDQo+LSAgICBpZiAoSW5kZXggPT0g bVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlTnVtKSB7DQo+LSAgICAgIHJldHVybiA7DQo+LSAg ICB9DQo+LSAgfQ0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRXhwYW5kIHVzZXIgcHJvZmlsZSBk YXRhYmFzZS4NCj4tDQo+LSAgQHJldHZhbCBUUlVFICAgICBTdWNjZXNzIHRvIGV4cGFuZCB1c2Vy IHByb2ZpbGUgZGF0YWJhc2UuDQo+LSAgQHJldHZhbCBGQUxTRSAgICBGYWlsIHRvIGV4cGFuZCB1 c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+LQ0KPi0qKi8NCj4tQk9PTEVBTg0KPi1FeHBhbmRVc2Vy bVVzZXJQcm9maWxlRGIgKA0KPi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBVSU5UTiAgICAgICAg ICAgICAgIE1heE51bTsNCj4tICBVU0VSX1BST0ZJTEVfREIgICAgICpOZXdEYXRhQmFzZTsNCj4t DQo+LSAgLy8NCj4tICAvLyBDcmVhdGUgbmV3IHVzZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4tICAv Lw0KPi0gIGlmIChtVXNlclByb2ZpbGVEYiA9PSBOVUxMKSB7DQo+LSAgICBNYXhOdW0gPSBVU0VS X05VTUJFUl9JTkM7DQo+LSAgfSBlbHNlIHsNCj4tICAgIE1heE51bSA9IG1Vc2VyUHJvZmlsZURi LT5NYXhQcm9maWxlTnVtICsgVVNFUl9OVU1CRVJfSU5DOw0KPi0gIH0NCj4tDQo+LSAgTmV3RGF0 YUJhc2UgPSBBbGxvY2F0ZVplcm9Qb29sICgNCj4tICAgICAgICAgICAgICAgICAgc2l6ZW9mIChV U0VSX1BST0ZJTEVfREIpIC0gc2l6ZW9mIChFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSkgKw0KPi0g ICAgICAgICAgICAgICAgICBNYXhOdW0gKiBzaXplb2YgKEVGSV9VU0VSX1BST0ZJTEVfSEFORExF KQ0KPi0gICAgICAgICAgICAgICAgICApOw0KPi0gIGlmIChOZXdEYXRhQmFzZSA9PSBOVUxMKSB7 DQo+LSAgICByZXR1cm4gRkFMU0U7DQo+LSAgfQ0KPi0NCj4tICBOZXdEYXRhQmFzZS0+TWF4UHJv ZmlsZU51bSA9IE1heE51bTsNCj4tDQo+LSAgLy8NCj4tICAvLyBDb3B5IG9sZCB1c2VyIHByb2Zp bGUgZGF0YWJhc2UgdmFsdWUNCj4tICAvLw0KPi0gIGlmIChtVXNlclByb2ZpbGVEYiA9PSBOVUxM KSB7DQo+LSAgICBOZXdEYXRhQmFzZS0+VXNlclByb2ZpbGVOdW0gPSAwOw0KPi0gIH0gZWxzZSB7 DQo+LSAgICBOZXdEYXRhQmFzZS0+VXNlclByb2ZpbGVOdW0gPSBtVXNlclByb2ZpbGVEYi0+VXNl clByb2ZpbGVOdW07DQo+LSAgICBDb3B5TWVtICgNCj4tICAgICAgTmV3RGF0YUJhc2UtPlVzZXJQ cm9maWxlLA0KPi0gICAgICBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGUsDQo+LSAgICAgIE5l d0RhdGFCYXNlLT5Vc2VyUHJvZmlsZU51bSAqIHNpemVvZiAoRUZJX1VTRVJfUFJPRklMRV9IQU5E TEUpDQo+LSAgICAgICk7DQo+LSAgICBGcmVlUG9vbCAobVVzZXJQcm9maWxlRGIpOw0KPi0gIH0N Cj4tDQo+LSAgbVVzZXJQcm9maWxlRGIgPSBOZXdEYXRhQmFzZTsNCj4tICByZXR1cm4gVFJVRTsN Cj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEV4cGFuZCB1c2VyIHByb2ZpbGUNCj4tDQo+LSAgQHBh cmFtW2luXSAgVXNlciAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHVzZXIgcHJvZmlsZS4N Cj4tICBAcGFyYW1baW5dICBFeHBhbmRTaXplICAgICAgICAgICAgICBUaGUgc2l6ZSBvZiB1c2Vy IHByb2ZpbGUuDQo+LQ0KPi0gIEByZXR2YWwgVFJVRSAgICAgU3VjY2VzcyB0byBleHBhbmQgdXNl ciBwcm9maWxlIHNpemUuDQo+LSAgQHJldHZhbCBGQUxTRSAgICBGYWlsIHRvIGV4cGFuZCB1c2Vy IHByb2ZpbGUgc2l6ZS4NCj4tDQo+LSoqLw0KPi1CT09MRUFODQo+LUV4cGFuZFVzZXJQcm9maWxl ICgNCj4tICBJTiBVU0VSX1BST0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAgKlVz ZXIsDQo+LSAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4 cGFuZFNpemUNCj4tICApDQo+LXsNCj4tICBVSU5UOCAqSW5mbzsNCj4tICBVSU5UTiBJbmZvU2l6 ZUluYzsNCj4tDQo+LSAgLy8NCj4tICAvLyBBbGxvY2F0ZSBuZXcgbWVtb3J5Lg0KPi0gIC8vDQo+ LSAgSW5mb1NpemVJbmMgPSAxMjg7DQo+LSAgVXNlci0+TWF4UHJvZmlsZVNpemUgKz0gKChFeHBh bmRTaXplICsgSW5mb1NpemVJbmMgLSAxKSAvIEluZm9TaXplSW5jKSAqDQo+SW5mb1NpemVJbmM7 DQo+LSAgSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKFVzZXItPk1heFByb2ZpbGVTaXplKTsNCj4t ICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRkFMU0U7DQo+LSAgfQ0KPi0NCj4t ICAvLw0KPi0gIC8vIENvcHkgZXhpc3QgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBpZiAoVXNl ci0+VXNlclByb2ZpbGVTaXplID4gMCkgew0KPi0gICAgQ29weU1lbSAoSW5mbywgVXNlci0+UHJv ZmlsZUluZm8sIFVzZXItPlVzZXJQcm9maWxlU2l6ZSk7DQo+LSAgICBGcmVlUG9vbCAoVXNlci0+ UHJvZmlsZUluZm8pOw0KPi0gIH0NCj4tDQo+LSAgVXNlci0+UHJvZmlsZUluZm8gPSBJbmZvOw0K Pi0gIHJldHVybiBUUlVFOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgU2F2ZSB0aGUgdXNlciBw cm9maWxlIHRvIG5vbi12b2xhdGlsZSBtZW1vcnksIG9yIGRlbGV0ZSBpdCBmcm9tIG5vbi12b2xh dGlsZQ0KPm1lbW9yeS4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgIFBvaW50IHRv IHRoZSB1c2VyIHByb2ZpbGUNCj4tICBAcGFyYW1baW5dICBEZWxldGUgICAgICAgSWYgVFJVRSwg ZGVsZXRlIHRoZSBmb3VuZCB1c2VyIHByb2ZpbGUuDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgIElmIEZBTFNFLCBzYXZlIHRoZSB1c2VyIHByb2ZpbGUuDQo+LSAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgIFNhdmUgb3IgZGVsZXRlIHVzZXIgcHJvZmlsZSBzdWNjZXNzZnVsbHkuDQo+LSAg QHJldHZhbCBPdGhlcnMgICAgICAgICAgIEZhaWwgdG8gY2hhbmdlIHRoZSBwcm9maWxlLg0KPi0N Cj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tU2F2ZU52VXNlclByb2ZpbGUgKA0KPi0gIElOICBVU0VS X1BST0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAqVXNlciwNCj4tICBJTiAgQk9P TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlDQo+LSAgKQ0KPi17 DQo+LSAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHVzZXIg cHJvZmlsZSBlbnRyeS4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IEZpbmRVc2VyUHJvZmlsZSAoJlVz ZXIsIEZBTFNFLCBOVUxMKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBy ZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBTYXZlIHRoZSB1c2VyIHBy b2ZpbGUgdG8gbm9uLXZvbGF0aWxlIG1lbW9yeS4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IGdSVC0+ U2V0VmFyaWFibGUgKA0KPi0gICAgICAgICAgICAgICAgICBVc2VyLT5Vc2VyVmFyTmFtZSwNCj4t ICAgICAgICAgICAgICAgICAgJmdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCwNCj4tICAgICAgICAg ICAgICAgICAgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSB8DQo+RUZJX1ZBUklBQkxFX0JPT1RT RVJWSUNFX0FDQ0VTUywNCj4tICAgICAgICAgICAgICAgICAgRGVsZXRlID8gMCA6IFVzZXItPlVz ZXJQcm9maWxlU2l6ZSwNCj4tICAgICAgICAgICAgICAgICAgVXNlci0+UHJvZmlsZUluZm8NCj4t ICAgICAgICAgICAgICAgICAgKTsNCj4tICByZXR1cm4gU3RhdHVzOw0KPi19DQo+LQ0KPi0vKioN Cj4tICBBZGQgb25lIG5ldyB1c2VyIGluZm8gaW50byB0aGUgdXNlcidzIHByb2ZpbGUuDQo+LQ0K Pi0gIEBwYXJhbVtpbl0gICBVc2VyICAgICAgICBwb2ludCB0byB0aGUgdXNlciBwcm9maWxlDQo+ LSAgQHBhcmFtW2luXSAgIEluZm8gICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlv biBwYXlsb2FkLg0KPi0gIEBwYXJhbVtpbl0gICBJbmZvU2l6ZSAgICBUaGUgc2l6ZSBvZiB0aGUg dXNlciBpbmZvcm1hdGlvbiBwYXlsb2FkLCBpbiBieXRlcy4NCj4tICBAcGFyYW1bb3V0XSAgVXNl ckluZm8gICAgUG9pbnQgdG8gdGhlIG5ldyBpbmZvIGluIHVzZXIgcHJvZmlsZQ0KPi0gIEBwYXJh bVtpbl0gICBTYXZlICAgICAgICBJZiBUUlVFLCBzYXZlIHRoZSBwcm9maWxlIHRvIE5WIGZsYXNo Lg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBGQUxTRSwgZG9uJ3QgbmVlZCB0byBz YXZlIHRoZSBwcm9maWxlIHRvIE5WIGZsYXNoLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgQWRkIHVzZXIgaW5mbyB0byB1c2VyIHByb2ZpbGUgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEBy ZXR2YWwgT3RoZXJzICAgICAgICAgICBGYWlsIHRvIGFkZCB1c2VyIGluZm8gdG8gdXNlciBwcm9m aWxlLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tQWRkVXNlckluZm8gKA0KPi0gIElOICBV U0VSX1BST0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAqVXNlciwNCj4tICBJTiAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkluZm8sDQo+LSAgSU4g IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9TaXplLA0KPi0g IE9VVCBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKlVzZXJJbmZv LCBPUFRJT05BTA0KPi0gIElOICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTYXZlDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPi0NCj4tICBp ZiAoKEluZm8gPT0gTlVMTCkgfHwgKFVzZXIgPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHVzZXIg cHJvZmlsZSBoYW5kbGUuDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBGaW5kVXNlclByb2ZpbGUgKCZV c2VyLCBGQUxTRSwgTlVMTCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAg cmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgdXNlciBpbmZv cm1hdGlvbiBtZW1vcnkgc2l6ZS4NCj4tICAvLw0KPi0gIGlmIChVc2VyLT5NYXhQcm9maWxlU2l6 ZSAtIFVzZXItPlVzZXJQcm9maWxlU2l6ZSA8IEFMSUdOX1ZBUklBQkxFDQo+KEluZm9TaXplKSkg ew0KPi0gICAgaWYgKCFFeHBhbmRVc2VyUHJvZmlsZSAoVXNlciwgQUxJR05fVkFSSUFCTEUgKElu Zm9TaXplKSkpIHsNCj4tICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gICAg fQ0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgbmV3IHVzZXIgaW5mb3JtYXRpb24uDQo+ LSAgLy8NCj4tICBDb3B5TWVtIChVc2VyLT5Qcm9maWxlSW5mbyArIFVzZXItPlVzZXJQcm9maWxl U2l6ZSwgSW5mbywgSW5mb1NpemUpOw0KPi0gIGlmIChVc2VySW5mbyAhPSBOVUxMKSB7DQo+LSAg ICAqVXNlckluZm8gPSAoRUZJX1VTRVJfSU5GTyAqKSAoVXNlci0+UHJvZmlsZUluZm8gKyBVc2Vy LQ0KPj5Vc2VyUHJvZmlsZVNpemUpOw0KPi0gIH0NCj4tICBVc2VyLT5Vc2VyUHJvZmlsZVNpemUg Kz0gQUxJR05fVkFSSUFCTEUgKEluZm9TaXplKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBTYXZlIHVz ZXIgcHJvZmlsZSBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIGlmIChTYXZlKSB7DQo+LSAgICBT dGF0dXMgPSBTYXZlTnZVc2VyUHJvZmlsZSAoVXNlciwgRkFMU0UpOw0KPi0gIH0NCj4tDQo+LSAg cmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEdldCB0aGUgdXNlciBpbmZv IGZyb20gdGhlIHNwZWNpZmllZCB1c2VyIGluZm8gaGFuZGxlLg0KPi0NCj4tICBAcGFyYW1baW5d ICAgICAgVXNlciAgICAgICAgICAgIFBvaW50IHRvIHRoZSB1c2VyIHByb2ZpbGUuDQo+LSAgQHBh cmFtW2luXSAgICAgIFVzZXJJbmZvICAgICAgICBQb2ludCB0byB0aGUgdXNlciBpbmZvcm1hdGlv biByZWNvcmQgdG8gZ2V0Lg0KPi0gIEBwYXJhbVtvdXRdICAgICBJbmZvICAgICAgICAgICAgT24g ZW50cnksIHBvaW50cyB0byBhIGJ1ZmZlciBvZiBhdCBsZWFzdCAqSW5mb1NpemUNCj5ieXRlcy4N Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIGV4aXQsIGhvbGRzIHRoZSB1 c2VyIGluZm9ybWF0aW9uLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBJbmZvU2l6ZSAgICAgICAgT24g ZW50cnksIHBvaW50cyB0byB0aGUgc2l6ZSBvZiBJbmZvLg0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIHNpemUgb2YgdGhlIHVzZXIg aW5mb3JtYXRpb24uDQo+LSAgQHBhcmFtW2luXSAgICAgIENoa1JpZ2h0ICAgICAgICBJZiBUUlVF LCBjaGVjayB0aGUgdXNlciBpbmZvIGF0dHJpYnV0ZS4NCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIElmIEZBTFNFLCBkb24ndCBjaGVjayB0aGUgdXNlciBpbmZvIGF0dHJpYnV0 ZS4NCj4tDQo+LQ0KPi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAgVGhlIGluZm9y bWF0aW9uIGNhbm5vdCBiZSBhY2Nlc3NlZCBieSB0aGUNCj5jdXJyZW50IHVzZXIuDQo+LSAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBJbmZvU2l6ZSBpcyBOVUxMIG9yIFVzZXJJbmZv IGlzIE5VTEwuDQo+LSAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgICBUaGUgbnVtYmVy IG9mIGJ5dGVzIHNwZWNpZmllZCBieQ0KPipJbmZvU2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZCB0 aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGRhdGEuIFRo ZSBhY3R1YWwgc2l6ZSByZXF1aXJlZCBpcyByZXR1cm5lZCBpbg0KPipJbmZvU2l6ZS4NCj4tICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIEluZm9ybWF0aW9uIHJldHVybmVkIHN1Y2Nl c3NmdWxseS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUdldFVzZXJJbmZvICgNCj4tICBJ TiAgICAgICAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAgICAgICAgICAgKlVzZXIsDQo+LSAg SU4gICAgICAgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAgICpVc2VySW5mbywN Cj4tICBPVVQgICAgICAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgKkluZm8s DQo+LSAgSU4gT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJbmZv U2l6ZSwNCj4tICBJTiAgICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q2hrUmlnaHQNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LQ0KPi0gIGlm ICgoSW5mb1NpemUgPT0gTlVMTCkgfHwgKFVzZXJJbmZvID09IE5VTEwpKSB7DQo+LSAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgaWYgKCgqSW5mb1NpemUg IT0gMCkgJiYgKEluZm8gPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEZpbmQgdGhlIHVzZXIgaW5mb3JtYXRp b24gdG8gZ2V0Lg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvIChVc2VyLCAmVXNl ckluZm8sIEZBTFNFLCBOVUxMKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAg ICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayBpbmZvcm1h dGlvbiBhdHRyaWJ1dGVzLg0KPi0gIC8vDQo+LSAgaWYgKENoa1JpZ2h0KSB7DQo+LSAgICBzd2l0 Y2ggKFVzZXJJbmZvLT5JbmZvQXR0cmlicyAmIEVGSV9VU0VSX0lORk9fQUNDRVNTKSB7DQo+LSAg ICBjYXNlIEVGSV9VU0VSX0lORk9fUFJJVkFURToNCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19Q Uk9URUNURUQ6DQo+LSAgICAgIGlmIChVc2VyICE9IG1DdXJyZW50VXNlcikgew0KPi0gICAgICAg IHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4tICAgICAgfQ0KPi0gICAgICBicmVhazsNCj4t DQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fUFVCTElDOg0KPi0gICAgICBicmVhazsNCj4tDQo+ LSAgICBkZWZhdWx0Og0KPi0gICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0g ICAgICBicmVhazsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IHVzZXIg aW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBpZiAoVXNlckluZm8tPkluZm9TaXplID4gKkluZm9T aXplKSB7DQo+LSAgICAqSW5mb1NpemUgPSBVc2VySW5mby0+SW5mb1NpemU7DQo+LSAgICByZXR1 cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+LSAgfQ0KPi0NCj4tICAqSW5mb1NpemUgPSBVc2Vy SW5mby0+SW5mb1NpemU7DQo+LSAgaWYgKEluZm8gIT0gTlVMTCkgew0KPi0gICAgQ29weU1lbSAo SW5mbywgVXNlckluZm8sICpJbmZvU2l6ZSk7DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBEZWxldGUgdGhlIHNwZWNpZmllZCB1c2Vy IGluZm9ybWF0aW9uIGZyb20gdXNlciBwcm9maWxlLg0KPi0NCj4tICBAcGFyYW1baW5dICBVc2Vy ICAgICAgICBQb2ludCB0byB0aGUgdXNlciBwcm9maWxlLg0KPi0gIEBwYXJhbVtpbl0gIEluZm8g ICAgICAgIFBvaW50IHRvIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCB0byBkZWxldGUuDQo+ LSAgQHBhcmFtW2luXSAgU2F2ZSAgICAgICAgSWYgVFJVRSwgc2F2ZSB0aGUgcHJvZmlsZSB0byBO ViBmbGFzaC4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBGQUxTRSwgZG9uJ3QgbmVl ZCB0byBzYXZlIHRoZSBwcm9maWxlIHRvIE5WIGZsYXNoLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICBEZWxldGUgdXNlciBpbmZvIGZyb20gdXNlciBwcm9maWxlIHN1Y2Nlc3NmdWxs eS4NCj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgICBGYWlsIHRvIGRlbGV0ZSB1c2VyIGluZm8g ZnJvbSB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1EZWxVc2VySW5m byAoDQo+LSAgSU4gIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICpV c2VyLA0KPi0gIElOICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq SW5mbywNCj4tICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U2F2ZQ0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tICBVSU5UTiAgICAg ICBPZmZzZXQ7DQo+LSAgVUlOVE4gICAgICAgTmV4dE9mZnNldDsNCj4tDQo+LSAgLy8NCj4tICAv LyBDaGVjayB1c2VyIGluZm9ybWF0aW9uIGhhbmRsZS4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IEZp bmRVc2VySW5mbyAoVXNlciwgJkluZm8sIEZBTFNFLCAmT2Zmc2V0KTsNCj4tICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgaWYg KEluZm8tPkluZm9UeXBlID09IEVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQpIHsNCj4t ICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8g RGVsZXRlIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIE5leHRP ZmZzZXQgPSBPZmZzZXQgKyBBTElHTl9WQVJJQUJMRSAoSW5mby0+SW5mb1NpemUpOw0KPi0gIFVz ZXItPlVzZXJQcm9maWxlU2l6ZSAtPSBBTElHTl9WQVJJQUJMRSAoSW5mby0+SW5mb1NpemUpOw0K Pi0gIGlmIChPZmZzZXQgPCBVc2VyLT5Vc2VyUHJvZmlsZVNpemUpIHsNCj4tICAgIENvcHlNZW0g KFVzZXItPlByb2ZpbGVJbmZvICsgT2Zmc2V0LCBVc2VyLT5Qcm9maWxlSW5mbyArIE5leHRPZmZz ZXQsDQo+VXNlci0+VXNlclByb2ZpbGVTaXplIC0gT2Zmc2V0KTsNCj4tICB9DQo+LQ0KPi0gIGlm IChTYXZlKSB7DQo+LSAgICBTdGF0dXMgPSBTYXZlTnZVc2VyUHJvZmlsZSAoVXNlciwgRkFMU0Up Ow0KPi0gIH0NCj4tDQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0g IEFkZCBvciB1cGRhdGUgdXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAg IFVzZXIgICAgICAgICAgIFBvaW50IHRvIHRoZSB1c2VyIHByb2ZpbGUuDQo+LSAgQHBhcmFtW2lu LCBvdXRdIFVzZXJJbmZvICAgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHVzZXIgaW5mb3Jt YXRpb24gdG8NCj5tb2RpZnksDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9y IE5VTEwgdG8gYWRkIGEgbmV3IFVzZXJJbmZvLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgbW9kaWZpZWQgdXNlciBpbmZvcm1hdGlv bi4NCj4tICBAcGFyYW1baW5dICAgICAgSW5mbyAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBuZXcg dXNlciBpbmZvcm1hdGlvbi4NCj4tICBAcGFyYW1baW5dICAgICAgSW5mb1NpemUgICAgICAgVGhl IHNpemUgb2YgSW5mbyxpbiBieXRlcy4NCj4tDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgIFVzZXJJbmZvIGlzIE5VTEwgb3IgSW5mbyBpcyBOVUxMLg0KPi0gIEByZXR2YWwgRUZJ X0FDQ0VTU19ERU5JRUQgICAgICBUaGUgcmVjb3JkIGlzIGV4Y2x1c2l2ZS4NCj4tICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciBpbmZvcm1hdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5 DQo+Y2hhbmdlZC9hZGRlZC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LU1vZGlmeVVzZXJJ bmZvICgNCj4tICBJTiAgICAgICAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAgICAgICAgICAg KlVzZXIsDQo+LSAgSU4gT1VUICAgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAg ICoqVXNlckluZm8sDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAg ICAgICAgICpJbmZvLA0KPi0gIElOICAgICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbmZvU2l6ZQ0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0K Pi0gIFVJTlROICAgICAgICAgUGF5bG9hZExlbjsNCj4tICBFRklfVVNFUl9JTkZPICpPbGRJbmZv Ow0KPi0NCj4tICBpZiAoKFVzZXJJbmZvID09IE5VTEwpIHx8IChJbmZvID09IE5VTEwpKSB7DQo+ LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgaWYgKElu Zm9TaXplIDwgc2l6ZW9mIChFRklfVVNFUl9JTkZPKSB8fCBJbmZvU2l6ZSAhPSBJbmZvLT5JbmZv U2l6ZSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gQ2hlY2sgdXNlciBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIGlmIChJ bmZvLT5JbmZvVHlwZSA9PSBFRklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JEKSB7DQo+LSAg ICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+LSAgfQ0KPi0NCj4tICBpZiAoIUNoZWNrVXNl ckluZm8gKEluZm8pKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0g IH0NCj4tDQo+LQ0KPi0gIGlmICgqVXNlckluZm8gPT0gTlVMTCkgew0KPi0gICAgLy8NCj4tICAg IC8vIEFkZCBuZXcgdXNlciBpbmZvcm1hdGlvbi4NCj4tICAgIC8vDQo+LSAgICBPbGRJbmZvID0g TlVMTDsNCj4tICAgIGRvIHsNCj4tICAgICAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlIChV c2VyLCAmT2xkSW5mbywgSW5mby0+SW5mb1R5cGUpOw0KPi0gICAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+LSAgICAgICAgYnJlYWs7DQo+LSAgICAgIH0NCj4tICAgICAgQVNTRVJUIChP bGRJbmZvICE9IE5VTEwpOw0KPi0NCj4tICAgICAgaWYgKCgoT2xkSW5mby0+SW5mb0F0dHJpYnMg JiBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRSkgIT0gMCkgfHwNCj4tICAgICAgICAgICAoKEluZm8t PkluZm9BdHRyaWJzICYgRUZJX1VTRVJfSU5GT19FWENMVVNJVkUpICE9IDApKSB7DQo+LSAgICAg ICAgLy8NCj4tICAgICAgICAvLyAgU2FtZSB0eXBlIGNhbiBub3QgY28tZXhpc3QgZm9yIGV4Y2x1 c2l2ZSBpbmZvcm1hdGlvbi4NCj4tICAgICAgICAvLw0KPi0gICAgICAgIHJldHVybiBFRklfQUND RVNTX0RFTklFRDsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAgLy8NCj4tICAgICAgLy8gQ2hlY2sg d2hldGhlciBpdCBleGlzdHMgaW4gREIuDQo+LSAgICAgIC8vDQo+LSAgICAgIGlmIChJbmZvLT5J bmZvU2l6ZSAhPSBPbGRJbmZvLT5JbmZvU2l6ZSkgew0KPi0gICAgICAgIGNvbnRpbnVlOw0KPi0g ICAgICB9DQo+LQ0KPi0gICAgICBpZiAoIUNvbXBhcmVHdWlkICgmT2xkSW5mby0+Q3JlZGVudGlh bCwgJkluZm8tPkNyZWRlbnRpYWwpKSB7DQo+LSAgICAgICAgY29udGludWU7DQo+LSAgICAgIH0N Cj4tDQo+LSAgICAgIFBheWxvYWRMZW4gPSBJbmZvLT5JbmZvU2l6ZSAtIHNpemVvZiAoRUZJX1VT RVJfSU5GTyk7DQo+LSAgICAgIGlmIChQYXlsb2FkTGVuID09IDApIHsNCj4tICAgICAgICBjb250 aW51ZTsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAgaWYgKENvbXBhcmVNZW0gKChVSU5UOCAqKShP bGRJbmZvICsgMSksIChVSU5UOCAqKShJbmZvICsgMSksDQo+UGF5bG9hZExlbikgIT0gMCkgew0K Pi0gICAgICAgIGNvbnRpbnVlOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICAvLw0KPi0gICAgICAv LyBZZXMuIFRoZSBuZXcgaW5mbyBpcyBhcyBzYW1lIGFzIHRoZSBvbmUgaW4gcHJvZmlsZS4NCj4t ICAgICAgLy8NCj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgfSB3aGlsZSAoIUVG SV9FUlJPUiAoU3RhdHVzKSk7DQo+LQ0KPi0gICAgU3RhdHVzID0gQWRkVXNlckluZm8gKFVzZXIs IChVSU5UOCAqKSBJbmZvLCBJbmZvU2l6ZSwgVXNlckluZm8sIFRSVUUpOw0KPi0gICAgcmV0dXJu IFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gTW9kaWZ5IGV4aXN0aW5nIHVzZXIg aW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBPbGRJbmZvID0gKlVzZXJJbmZvOw0KPi0gIGlmIChP bGRJbmZvLT5JbmZvVHlwZSAhPSBJbmZvLT5JbmZvVHlwZSkgew0KPi0gICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIGlmICgoKEluZm8tPkluZm9BdHRyaWJz ICYgRUZJX1VTRVJfSU5GT19FWENMVVNJVkUpICE9IDApICYmDQo+LSAgICAgICAoT2xkSW5mby0+ SW5mb0F0dHJpYnMgJiBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRSkgPT0gMCkgew0KPi0gICAgLy8N Cj4tICAgIC8vIFRyeSB0byBhZGQgZXhjbHVzaXZlIGF0dHJpYiBpbiBuZXcgaW5mby4NCj4tICAg IC8vIENoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYW5vdGhlciBpbmZvcm1hdGlvbiB3aXRoIHRoZSBz YW1lIHR5cGUgaW4NCj5wcm9maWxlLg0KPi0gICAgLy8NCj4tICAgIE9sZEluZm8gPSBOVUxMOw0K Pi0gICAgZG8gew0KPi0gICAgICBTdGF0dXMgPSBGaW5kVXNlckluZm9CeVR5cGUgKFVzZXIsICZP bGRJbmZvLCBJbmZvLT5JbmZvVHlwZSk7DQo+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4tICAgICAgICBicmVhazsNCj4tICAgICAgfQ0KPi0gICAgICBpZiAoT2xkSW5mbyAhPSAq VXNlckluZm8pIHsNCj4tICAgICAgICAvLw0KPi0gICAgICAgIC8vIFRoZXJlIGlzIGFub3RoZXIg aW5mb3JtYXRpb24gd2l0aCB0aGUgc2FtZSB0eXBlIGluIHByb2ZpbGUuDQo+LSAgICAgICAgLy8g VGhlcmVmb3JlLCBjYW4ndCBtb2RpZnkgZXhpc3RpbmcgdXNlciBpbmZvcm1hdGlvbiB0byBhZGQg ZXhjbHVzaXZlDQo+YXR0cmlidXRlLg0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgcmV0dXJuIEVG SV9BQ0NFU1NfREVOSUVEOw0KPi0gICAgICB9DQo+LSAgICB9IHdoaWxlIChUUlVFKTsNCj4tICB9 DQo+LQ0KPi0gIFN0YXR1cyA9IERlbFVzZXJJbmZvIChVc2VyLCAqVXNlckluZm8sIEZBTFNFKTsN Cj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0g IH0NCj4tDQo+LSAgcmV0dXJuIEFkZFVzZXJJbmZvIChVc2VyLCAoVUlOVDggKikgSW5mbywgSW5m b1NpemUsIFVzZXJJbmZvLCBUUlVFKTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERlbGV0ZSB0 aGUgdXNlciBwcm9maWxlIGZyb20gbm9uLXZvbGF0aWxlIG1lbW9yeSBhbmQgZGF0YWJhc2UuDQo+ LQ0KPi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBw cm9maWxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgRGVsZXRlIHVzZXIgZnJv bSB0aGUgdXNlciBwcm9maWxlIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIE90aGVycyAgICAg ICAgICAgRmFpbCB0byBkZWxldGUgdXNlciBmcm9tIHVzZXIgcHJvZmlsZQ0KPi0NCj4tKiovDQo+ LUVGSV9TVEFUVVMNCj4tRGVsVXNlclByb2ZpbGUgKA0KPi0gIElOICBVU0VSX1BST0ZJTEVfRU5U UlkgICAgICAgICAgICAgICAgICAgICAgICAqVXNlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFU VVMgICAgICAgICAgU3RhdHVzOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgSW5kZXg7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gQ2hlY2sgd2hldGhlciBpdCBpcyBpbiB0aGUgdXNlciBwcm9maWxlIGRh dGFiYXNlLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gRmluZFVzZXJQcm9maWxlICgmVXNlciwgRkFM U0UsICZJbmRleCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sg d2hldGhlciBpdCBpcyB0aGUgY3VycmVudCB1c2VyLg0KPi0gIC8vDQo+LSAgaWYgKFVzZXIgPT0g bUN1cnJlbnRVc2VyKSB7DQo+LSAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+LSAgfQ0K Pi0NCj4tICAvLw0KPi0gIC8vIERlbGV0ZSB1c2VyIHByb2ZpbGUgZnJvbSB0aGUgbm9uLXZvbGF0 aWxlIG1lbW9yeS4NCj4tICAvLw0KPi0gIFN0YXR1cyAgICA9IFNhdmVOdlVzZXJQcm9maWxlICht VXNlclByb2ZpbGVEYi0NCj4+VXNlclByb2ZpbGVbbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxl TnVtIC0gMV0sIFRSVUUpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIHJl dHVybiBTdGF0dXM7DQo+LSAgfQ0KPi0gIG1Vc2VyUHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bS0t Ow0KPi0NCj4tICAvLw0KPi0gIC8vIE1vZGlmeSB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+LSAg Ly8NCj4tICBpZiAoSW5kZXggIT0gbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlTnVtKSB7DQo+ LSAgICBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVbSW5kZXhdID0gbVVzZXJQcm9maWxlRGIt DQo+PlVzZXJQcm9maWxlW21Vc2VyUHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bV07DQo+LSAgICBD b3B5TWVtICgNCj4tICAgICAgKChVU0VSX1BST0ZJTEVfRU5UUlkgKikgbVVzZXJQcm9maWxlRGIt PlVzZXJQcm9maWxlW0luZGV4XSktDQo+PlVzZXJWYXJOYW1lLA0KPi0gICAgICBVc2VyLT5Vc2Vy VmFyTmFtZSwNCj4tICAgICAgc2l6ZW9mIChVc2VyLT5Vc2VyVmFyTmFtZSkNCj4tICAgICAgKTsN Cj4tICAgIFN0YXR1cyA9IFNhdmVOdlVzZXJQcm9maWxlIChtVXNlclByb2ZpbGVEYi0+VXNlclBy b2ZpbGVbSW5kZXhdLCBGQUxTRSk7DQo+LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ LSAgICAgIHJldHVybiBTdGF0dXM7DQo+LSAgICB9DQo+LSAgfQ0KPi0gIC8vDQo+LSAgLy8gRGVs ZXRlIHVzZXIgcHJvZmlsZSBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIGlmIChVc2VyLT5Qcm9m aWxlSW5mbyAhPSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAoVXNlci0+UHJvZmlsZUluZm8pOw0K Pi0gIH0NCj4tDQo+LSAgRnJlZVBvb2wgKFVzZXIpOw0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEFkZCB1c2VyIHByb2ZpbGUgdG8gdXNlciBwcm9maWxl IGRhdGFiYXNlLg0KPi0NCj4tICBAcGFyYW1bb3V0XSAgIFVzZXJQcm9maWxlICAgUG9pbnQgdG8g dGhlIG5ld2x5IGFkZGVkIHVzZXIgcHJvZmlsZS4NCj4tICBAcGFyYW1baW5dICAgIFByb2ZpbGVT aXplICAgVGhlIHNpemUgb2YgdGhlIHVzZXIgcHJvZmlsZS4NCj4tICBAcGFyYW1baW5dICAgIFBy b2ZpbGVJbmZvICAgUG9pbnQgdG8gdGhlIHVzZXIgcHJvZmllIGRhdGEuDQo+LSAgQHBhcmFtW2lu XSAgICBTYXZlICAgICAgICAgIElmIFRSVUUsIHNhdmUgdGhlIG5ldyBhZGRlZCBwcm9maWxlIHRv IE5WIGZsYXNoLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBGQUxTRSwgZG9u J3Qgc2F2ZSB0aGUgcHJvZmlsZSB0byBOViBmbGFzaC4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgIEFkZCB1c2VyIHByb2ZpbGUgdG8gdXNlciBwcm9maWxlIGRhdGFiYXNlDQo+ c3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICBGYWlsIHRvIGFk ZCB1c2VyIHByb2ZpbGUgdG8gdXNlciBwcm9maWxlIGRhdGFiYXNlLg0KPi0NCj4tKiovDQo+LUVG SV9TVEFUVVMNCj4tQWRkVXNlclByb2ZpbGUgKA0KPi0gICAgIE9VVCAgVVNFUl9QUk9GSUxFX0VO VFJZICAgICAgICAgICAgICAgICAgICAqKlVzZXJQcm9maWxlLCBPUFRJT05BTA0KPi0gIElOICAg ICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxlU2l6ZSwNCj4t ICBJTiAgICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlByb2ZpbGVJ bmZvLA0KPi0gIElOICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT YXZlDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPi0g IFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICpVc2VyOw0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNr IHRoZSBkYXRhIGZvcm1hdCB0byBiZSBhZGRlZC4NCj4tICAvLw0KPi0gIGlmICghQ2hlY2tQcm9m aWxlSW5mbyAoUHJvZmlsZUluZm8sIFByb2ZpbGVTaXplKSkgew0KPi0gICAgcmV0dXJuIEVGSV9T RUNVUklUWV9WSU9MQVRJT047DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENyZWF0ZSB1c2Vy IHByb2ZpbGUgZW50cnkuDQo+LSAgLy8NCj4tICBVc2VyID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6 ZW9mIChVU0VSX1BST0ZJTEVfRU5UUlkpKTsNCj4tICBpZiAoVXNlciA9PSBOVUxMKSB7DQo+LSAg ICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+LSAgfQ0KPi0gIC8vDQo+LSAgLy8gQWRk IHRoZSBlbnRyeSB0byB0aGUgdXNlciBwcm9maWxlIGRhdGFiYXNlLg0KPi0gIC8vDQo+LSAgaWYg KG1Vc2VyUHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bSA9PSBtVXNlclByb2ZpbGVEYi0+TWF4UHJv ZmlsZU51bSkNCj57DQo+LSAgICBpZiAoIUV4cGFuZFVzZXJtVXNlclByb2ZpbGVEYiAoKSkgew0K Pi0gICAgICBGcmVlUG9vbCAoVXNlcik7DQo+LSAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09V UkNFUzsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIFVuaWNvZGVTUHJpbnQgKA0KPi0gICAgVXNl ci0+VXNlclZhck5hbWUsDQo+LSAgICBzaXplb2YgKFVzZXItPlVzZXJWYXJOYW1lKSwNCj4tICAg IEwiVXNlciUwNHgiLA0KPi0gICAgbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlTnVtDQo+LSAg ICApOw0KPi0gIFVzZXItPlVzZXJQcm9maWxlU2l6ZSA9IDA7DQo+LSAgVXNlci0+TWF4UHJvZmls ZVNpemUgID0gMDsNCj4tICBVc2VyLT5Qcm9maWxlSW5mbyAgICAgPSBOVUxMOw0KPi0gIG1Vc2Vy UHJvZmlsZURiLT5Vc2VyUHJvZmlsZVttVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW1dID0N Cj4oRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUpIFVzZXI7DQo+LSAgbVVzZXJQcm9maWxlRGItPlVz ZXJQcm9maWxlTnVtKys7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWRkIHVzZXIgcHJvZmlsZSBpbmZv cm1hdGlvbi4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IEFkZFVzZXJJbmZvIChVc2VyLCBQcm9maWxl SW5mbywgUHJvZmlsZVNpemUsIE5VTEwsIFNhdmUpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4tICAgIERlbFVzZXJQcm9maWxlIChVc2VyKTsNCj4tICAgIHJldHVybiBTdGF0dXM7 DQo+LSAgfQ0KPi0gIC8vDQo+LSAgLy8gU2V0IG5ldyB1c2VyIHByb2ZpbGUgaGFuZGxlLg0KPi0g IC8vDQo+LSAgaWYgKFVzZXJQcm9maWxlICE9IE5VTEwpIHsNCj4tICAgICpVc2VyUHJvZmlsZSA9 IFVzZXI7DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0K Pi0vKioNCj4tICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgdXNlciBwcm9maWxlIHdpdGgg b25seSBhIG5ldyB1c2VyIGlkZW50aWZpZXINCj4tICBhdHRhY2hlZCBhbmQgcmV0dXJucyBpdHMg aGFuZGxlLiBUaGUgdXNlciBwcm9maWxlIGlzIG5vbi12b2xhdGlsZSwgYnV0IHRoZQ0KPi0gIGhh bmRsZSBVc2VyIGNhbiBjaGFuZ2UgYWNyb3NzIHJlYm9vdHMuDQo+LQ0KPi0gIEBwYXJhbVtvdXRd ICBVc2VyICAgICAgICAgICAgICAgSGFuZGxlIG9mIGEgbmV3IHVzZXIgcHJvZmlsZS4NCj4tDQo+ LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1Y2Nl c3NmdWxseSBjcmVhdGVkLg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICAgRmFp bCB0byBjcmVhdGUgdXNlciBwcm9maWxlDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1DcmVh dGVVc2VyUHJvZmlsZSAoDQo+LSAgT1VUIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAg ICAgICAgICAgICoqVXNlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0K Pi0gIEVGSV9VU0VSX0lORk8gKlVzZXJJbmZvOw0KPi0NCj4tICBpZiAoVXNlciA9PSBOVUxMKSB7 DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tICAvLw0KPi0g IC8vIEdlbmVyYXRlIHVzZXIgaWQgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBVc2VySW5mbyA9 IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBzaXplb2YNCj4oRUZJ X1VTRVJfSU5GT19JREVOVElGSUVSKSk7DQo+LSAgaWYgKFVzZXJJbmZvID09IE5VTEwpIHsNCj4t ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9DQo+LQ0KPi0gIFVzZXJJbmZv LT5JbmZvVHlwZSAgICA9IEVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQ7DQo+LSAgVXNl ckluZm8tPkluZm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZg0KPihF RklfVVNFUl9JTkZPX0lERU5USUZJRVIpOw0KPi0gIFVzZXJJbmZvLT5JbmZvQXR0cmlicyA9IEVG SV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8DQo+RUZJX1VTRVJfSU5GT19QVUJMSUMg fCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4tICBHZW5lcmF0ZVVzZXJJZCAoKFVJTlQ4ICop IChVc2VySW5mbyArIDEpKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgdXNlciBwcm9maWxlIHRv IHRoZSB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBBZGRVc2Vy UHJvZmlsZSAoVXNlciwgVXNlckluZm8tPkluZm9TaXplLCAoVUlOVDggKikgVXNlckluZm8sDQo+ VFJVRSk7DQo+LSAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4tICByZXR1cm4gU3RhdHVzOw0KPi19 DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQWRkIGEgZGVmYXVsdCB1c2VyIHByb2ZpbGUgdG8gdXNlciBw cm9maWxlIGRhdGFiYXNlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg IEEgZGVmYXVsdCB1c2VyIHByb2ZpbGUgaXMgYWRkZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2 YWwgT3RoZXJzICAgICAgICAgICAgICAgICAgRmFpbCB0byBhZGQgYSBkZWZhdWx0IHVzZXIgcHJv ZmlsZQ0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tQWRkRGVmYXVsdFVzZXJQcm9maWxlICgN Cj4tICBWT0lEDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPi0gIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICpVc2VyOw0KPi0gIEVG SV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICpJbmZvOw0KPi0gIEVGSV9VU0VSX0lORk8gICAg ICAgICAgICAgICAgICpOZXdJbmZvOw0KPi0gIEVGSV9VU0VSX0lORk9fQ1JFQVRFX0RBVEUgICAg IENyZWF0ZURhdGU7DQo+LSAgRUZJX1VTRVJfSU5GT19VU0FHRV9DT1VOVCAgICAgVXNhZ2VDb3Vu dDsNCj4tICBFRklfVVNFUl9JTkZPX0FDQ0VTU19DT05UUk9MICAqQWNjZXNzOw0KPi0gIEVGSV9V U0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICpQb2xpY3k7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ3Jl YXRlIGEgdXNlciBwcm9maWxlLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gQ3JlYXRlVXNlclByb2Zp bGUgKCZVc2VyKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4g U3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciB0byBh ZGQgYWxsIGRlZmF1bHQgdXNlciBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIEluZm8gPSBBbGxv Y2F0ZVplcm9Qb29sIChzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgSU5GT19QQVlMT0FEX1NJWkUp Ow0KPi0gIGlmIChJbmZvID09IE5VTEwpIHsNCj4tICAgIHJldHVybiBFRklfT1VUX09GX1JFU09V UkNFUzsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWRkIHVzZXIgbmFtZS4NCj4tICAvLw0K Pi0gIEluZm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19OQU1FX1JFQ09SRDsNCj4tICBJ bmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8DQo+ RUZJX1VTRVJfSU5GT19QVUJMSUMgfCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4tICBJbmZv LT5JbmZvU2l6ZSAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBzaXplb2YgKG1Vc2VyTmFt ZSk7DQo+LSAgQ29weU1lbSAoKFVJTlQ4ICopIChJbmZvICsgMSksIG1Vc2VyTmFtZSwgc2l6ZW9m IChtVXNlck5hbWUpKTsNCj4tICBOZXdJbmZvID0gTlVMTDsNCj4tICBTdGF0dXMgID0gTW9kaWZ5 VXNlckluZm8gKFVzZXIsICZOZXdJbmZvLCBJbmZvLCBJbmZvLT5JbmZvU2l6ZSk7DQo+LSAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4tDQo+LSAg Ly8NCj4tICAvLyBBZGQgdXNlciBwcm9maWxlIGNyZWF0ZSBkYXRlIHJlY29yZC4NCj4tICAvLw0K Pi0gIEluZm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19DUkVBVEVfREFURV9SRUNPUkQ7 DQo+LSAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1f TlYgfA0KPkVGSV9VU0VSX0lORk9fUFVCTElDIHwgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+ LSAgSW5mby0+SW5mb1NpemUgICAgPSBzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgc2l6ZW9mDQo+ KEVGSV9VU0VSX0lORk9fQ1JFQVRFX0RBVEUpOw0KPi0gIFN0YXR1cyAgICAgICAgICAgID0gZ1JU LT5HZXRUaW1lICgmQ3JlYXRlRGF0ZSwgTlVMTCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4tDQo+LSAgQ29weU1lbSAoKFVJTlQ4ICop IChJbmZvICsgMSksICZDcmVhdGVEYXRlLCBzaXplb2YNCj4oRUZJX1VTRVJfSU5GT19DUkVBVEVf REFURSkpOw0KPi0gIE5ld0luZm8gPSBOVUxMOw0KPi0gIFN0YXR1cyAgPSBNb2RpZnlVc2VySW5m byAoVXNlciwgJk5ld0luZm8sIEluZm8sIEluZm8tPkluZm9TaXplKTsNCj4tICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+LSAgICBnb3RvIERvbmU7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0g IC8vIEFkZCB1c2VyIHByb2ZpbGUgdXNhZ2UgY291bnQgcmVjb3JkLg0KPi0gIC8vDQo+LSAgSW5m by0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZPX1VTQUdFX0NPVU5UX1JFQ09SRDsNCj4tICBJ bmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8DQo+ RUZJX1VTRVJfSU5GT19QVUJMSUMgfCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4tICBJbmZv LT5JbmZvU2l6ZSAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBzaXplb2YNCj4oRUZJX1VT RVJfSU5GT19VU0FHRV9DT1VOVCk7DQo+LSAgVXNhZ2VDb3VudCAgICAgICAgPSAwOw0KPi0gIENv cHlNZW0gKChVSU5UOCAqKSAoSW5mbyArIDEpLCAmVXNhZ2VDb3VudCwgc2l6ZW9mDQo+KEVGSV9V U0VSX0lORk9fVVNBR0VfQ09VTlQpKTsNCj4tICBOZXdJbmZvID0gTlVMTDsNCj4tICBTdGF0dXMg ID0gTW9kaWZ5VXNlckluZm8gKFVzZXIsICZOZXdJbmZvLCBJbmZvLCBJbmZvLT5JbmZvU2l6ZSk7 DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgZ290byBEb25lOw0KPi0gIH0N Cj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgdXNlciBhY2Nlc3MgcmlnaHQuDQo+LSAgLy8NCj4tICBJ bmZvLT5JbmZvVHlwZSAgICA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX1BPTElDWV9SRUNPUkQ7DQo+ LSAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYg fA0KPkVGSV9VU0VSX0lORk9fUFVCTElDIHwgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+LSAg QWNjZXNzICAgICAgICAgICAgPSAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCAqKSAoSW5m byArIDEpOw0KPi0gIEFjY2Vzcy0+VHlwZSAgICAgID0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFO QUdFOw0KPi0gIEFjY2Vzcy0+U2l6ZSAgICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPX0FDQ0VT U19DT05UUk9MKTsNCj4tICBJbmZvLT5JbmZvU2l6ZSAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5G TykgKyBBY2Nlc3MtPlNpemU7DQo+LSAgTmV3SW5mbyA9IE5VTEw7DQo+LSAgU3RhdHVzICA9IE1v ZGlmeVVzZXJJbmZvIChVc2VyLCAmTmV3SW5mbywgSW5mbywgSW5mby0+SW5mb1NpemUpOw0KPi0g IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIGdvdG8gRG9uZTsNCj4tICB9DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gQWRkIHVzZXIgaWRlbnRpdHkgcG9saWN5Lg0KPi0gIC8vDQo+LSAgSW5m by0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWV9SRUNPUkQ7DQo+ LSAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYg fA0KPkVGSV9VU0VSX0lORk9fUFJJVkFURSB8IEVGSV9VU0VSX0lORk9fRVhDTFVTSVZFOw0KPi0g IFBvbGljeSAgICAgICAgICAgID0gKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICopIChJ bmZvICsgMSk7DQo+LSAgUG9saWN5LT5UeXBlICAgICAgPSBFRklfVVNFUl9JTkZPX0lERU5USVRZ X1RSVUU7DQo+LSAgUG9saWN5LT5MZW5ndGggICAgPSBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURF TlRJVFlfUE9MSUNZKTsNCj4tICBJbmZvLT5JbmZvU2l6ZSAgICA9IHNpemVvZiAoRUZJX1VTRVJf SU5GTykgKyBQb2xpY3ktPkxlbmd0aDsNCj4tICBOZXdJbmZvID0gTlVMTDsNCj4tICBTdGF0dXMg ID0gTW9kaWZ5VXNlckluZm8gKFVzZXIsICZOZXdJbmZvLCBJbmZvLCBJbmZvLT5JbmZvU2l6ZSk7 DQo+LQ0KPi1Eb25lOg0KPi0gIEZyZWVQb29sIChJbmZvKTsNCj4tICByZXR1cm4gU3RhdHVzOw0K Pi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgUHVibGlzaCBjdXJyZW50IHVzZXIgaW5mb3JtYXRpb24g aW50byBFRkkgU3lzdGVtIENvbmZpZ3VyYXRpb24gVGFibGUuDQo+LQ0KPi0gIEJ5IFVFRkkgc3Bl YywgdGhlIFVzZXIgSWRlbnRpdHkgTWFuYWdlciB3aWxsIHB1Ymxpc2ggdGhlIGN1cnJlbnQgdXNl ciBwcm9maWxlDQo+LSAgaW50byB0aGUgRUZJIFN5c3RlbSBDb25maWd1cmF0aW9uIFRhYmxlLiBD dXJyZW50bHksIG9ubHkgdGhlIHVzZXIgaWRlbnRpZmllcg0KPmFuZCB1c2VyDQo+LSAgbmFtZSBh cmUgcHVibGlzaGVkLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgQ3VycmVudCB1 c2VyIGluZm9ybWF0aW9uIGlzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgIEZhaWwgdG8gcHVibGlzaCBjdXJyZW50IHVzZXIgaW5mb3JtYXRpb24N Cj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LVB1Ymxpc2hVc2VyVGFibGUgKA0KPi0gIFZPSUQN Cj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJ X0NPTkZJR1VSQVRJT05fVEFCTEUgKkVmaUNvbmZpZ3VyYXRpb25UYWJsZTsNCj4tICBFRklfVVNF Ul9JTkZPX1RBQkxFICAgICAqVXNlckluZm9UYWJsZTsNCj4tICBFRklfVVNFUl9JTkZPICAgICAg ICAgICAqSWRJbmZvOw0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICpOYW1lSW5mbzsNCj4t DQo+LSAgU3RhdHVzID0gRWZpR2V0U3lzdGVtQ29uZmlndXJhdGlvblRhYmxlICgNCj4tICAgICAg ICAgICAgICZnRWZpVXNlck1hbmFnZXJQcm90b2NvbEd1aWQsDQo+LSAgICAgICAgICAgICAoVk9J RCAqKikgJkVmaUNvbmZpZ3VyYXRpb25UYWJsZQ0KPi0gICAgICAgICAgICAgKTsNCj4tICBpZiAo IUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgLy8NCj4tICAgIC8vIFRoZSB0YWJsZSBleGlz dGVkIQ0KPi0gICAgLy8NCj4tICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICB9DQo+LQ0KPi0g IC8vDQo+LSAgLy8gR2V0IHVzZXIgSUQgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBJZEluZm8g ID0gTlVMTDsNCj4tICBTdGF0dXMgID0gRmluZFVzZXJJbmZvQnlUeXBlIChtQ3VycmVudFVzZXIs ICZJZEluZm8sDQo+RUZJX1VTRVJfSU5GT19JREVOVElGSUVSX1JFQ09SRCk7DQo+LSAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tDQo+LSAgfQ0KPi0g IC8vDQo+LSAgLy8gR2V0IHVzZXIgbmFtZSBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIE5hbWVJ bmZvICA9IE5VTEw7DQo+LSAgU3RhdHVzICAgID0gRmluZFVzZXJJbmZvQnlUeXBlIChtQ3VycmVu dFVzZXIsICZOYW1lSW5mbywNCj5FRklfVVNFUl9JTkZPX05BTUVfUkVDT1JEKTsNCj4tICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+ LSAgLy8NCj4tICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgdXNlciBpbmZvcm1hdGlvbiB0YWJs ZS4NCj4tICAvLw0KPi0gIFVzZXJJbmZvVGFibGUgPSAoRUZJX1VTRVJfSU5GT19UQUJMRSAqKSBB bGxvY2F0ZVJ1bnRpbWVQb29sICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2YgKEVGSV9VU0VSX0lORk9fVEFCTEUpICsNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEluZm8tPkluZm9TaXplICsNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lSW5mby0+SW5mb1Np emUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0g IGlmIChVc2VySW5mb1RhYmxlID09IE5VTEwpIHsNCj4tICAgIFN0YXR1cyA9IEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIFVzZXJJbmZv VGFibGUtPlNpemUgPSBzaXplb2YgKEVGSV9VU0VSX0lORk9fVEFCTEUpOw0KPi0NCj4tICAvLw0K Pi0gIC8vIEFwcGVuZCB0aGUgdXNlciBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciBpbmZvIHRhYmxl DQo+LSAgLy8NCj4tICBDb3B5TWVtICgoVUlOVDggKikgVXNlckluZm9UYWJsZSArIFVzZXJJbmZv VGFibGUtPlNpemUsIChVSU5UOCAqKSBJZEluZm8sDQo+SWRJbmZvLT5JbmZvU2l6ZSk7DQo+LSAg VXNlckluZm9UYWJsZS0+U2l6ZSArPSBJZEluZm8tPkluZm9TaXplOw0KPi0NCj4tICBDb3B5TWVt ICgoVUlOVDggKikgVXNlckluZm9UYWJsZSArIFVzZXJJbmZvVGFibGUtPlNpemUsIChVSU5UOCAq KQ0KPk5hbWVJbmZvLCBOYW1lSW5mby0+SW5mb1NpemUpOw0KPi0gIFVzZXJJbmZvVGFibGUtPlNp emUgKz0gTmFtZUluZm8tPkluZm9TaXplOw0KPi0NCj4tICBTdGF0dXMgPSBnQlMtPkluc3RhbGxD b25maWd1cmF0aW9uVGFibGUgKCZnRWZpVXNlck1hbmFnZXJQcm90b2NvbEd1aWQsDQo+KFZPSUQg KikgVXNlckluZm9UYWJsZSk7DQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8q Kg0KPi0gIEdldCB0aGUgdXNlcidzIGlkZW50aXR5IHR5cGUuDQo+LQ0KPi0gIFRoZSBpZGVudGlm eSBtYW5hZ2VyIG9ubHkgc3VwcG9ydHMgdGhlIGlkZW50aXR5IHBvbGljeSBpbiB3aGljaCB0aGUN Cj5jcmVkZW50aWFsDQo+LSAgcHJvdmlkZXIgaGFuZGxlcyBhcmUgY29ubmVjdGVkIGJ5IHRoZSBv cGVyYXRvciAnQU5EJyBvciAnT1InLg0KPi0NCj4tDQo+LSAgQHBhcmFtW2luXSAgIFVzZXIgICAg ICAgICAgICAgIEhhbmRsZSBvZiBhIHVzZXIgcHJvZmlsZS4NCj4tICBAcGFyYW1bb3V0XSAgUG9s aWN5VHlwZSAgICAgICAgUG9pbnQgdG8gdGhlIGlkZW50aXR5IHR5cGUuDQo+LQ0KPi0gIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBHZXQgdXNlcidzIGlkZW50aXR5IHR5cGUgc3VjY2Vz c2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBGYWlsIHRvIGdldCB1 c2VyJ3MgaWRlbnRpdHkgdHlwZS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUdldElkZW50 aWZ5VHlwZSAoDQo+LSAgSU4gICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAg ICAgIFVzZXIsDQo+LSAgICAgT1VUICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpQb2xpY3lUeXBlDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICpJZGVudGlm eUluZm87DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgVG90YWxMZW47DQo+LSAg RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKklkZW50aXR5Ow0KPi0NCj4tICAvLw0KPi0g IC8vIEdldCB1c2VyIGlkZW50aWZ5IHBvbGljeSBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIElk ZW50aWZ5SW5mbyAgPSBOVUxMOw0KPi0gIFN0YXR1cyAgICAgICAgPSBGaW5kVXNlckluZm9CeVR5 cGUgKFVzZXIsICZJZGVudGlmeUluZm8sDQo+RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lf UkVDT1JEKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3Rh dHVzOw0KPi0gIH0NCj4tICBBU1NFUlQgKElkZW50aWZ5SW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAg Ly8NCj4tICAvLyBTZWFyY2ggdGhlIHVzZXIgaWRlbnRpZnkgcG9saWN5IGFjY29yZGluZyB0byB0 eXBlLg0KPi0gIC8vDQo+LSAgVG90YWxMZW4gICAgPSAwOw0KPi0gICpQb2xpY3lUeXBlID0gRUZJ X1VTRVJfSU5GT19JREVOVElUWV9GQUxTRTsNCj4tICB3aGlsZSAoVG90YWxMZW4gPCBJZGVudGlm eUluZm8tPkluZm9TaXplIC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSkgew0KPi0gICAgSWRlbnRp dHkgPSAoRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKikgKChVSU5UOCAqKSAoSWRlbnRp ZnlJbmZvICsNCj4xKSArIFRvdGFsTGVuKTsNCj4tICAgIGlmIChJZGVudGl0eS0+VHlwZSA9PSBF RklfVVNFUl9JTkZPX0lERU5USVRZX0FORCkgew0KPi0gICAgICAqUG9saWN5VHlwZSA9IEVGSV9V U0VSX0lORk9fSURFTlRJVFlfQU5EOw0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tDQo+LSAg ICBpZiAoSWRlbnRpdHktPlR5cGUgPT0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9PUikgew0KPi0g ICAgICAqUG9saWN5VHlwZSA9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfT1I7DQo+LSAgICAgIGJy ZWFrOw0KPi0gICAgfQ0KPi0gICAgVG90YWxMZW4gKz0gSWRlbnRpdHktPkxlbmd0aDsNCj4tICB9 DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgSWRlbnRp ZnkgdGhlIFVzZXIgYnkgdGhlIHNwZWNmaWVkIHByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1baW5d ICBVc2VyICAgICAgICAgICAgICAgIEhhbmRsZSBvZiBhIHVzZXIgcHJvZmlsZS4NCj4tICBAcGFy YW1baW5dICBQcm92aWRlciAgICAgICAgICAgIFBvaW50cyB0byB0aGUgaWRlbnRpZmllciBvZiBj cmVkZW50aWFsIHByb3ZpZGVyLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiAgIFByb3ZpZGVyIGlzIE5VTEwuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAg ICBGYWlsIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpZWQgdXNlci4NCj4tICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgIFVzZXIgaXMgaWRlbnRpZmllZCBzdWNjZXNzZnVsbHkuDQo+LQ0K Pi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1JZGVudGlmeUJ5UHJvdmlkZXJJZCAoDQo+LSAgSU4gIEVG SV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgSU4gIEVG SV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQcm92aWRlcg0KPi0gICkN Cj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4tICBFRklf VVNFUl9JTkZPX0lERU5USUZJRVIgICAgICBVc2VySWQ7DQo+LSAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgSW5kZXg7DQo+LSAgRUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR1MgICAgQXV0 b0xvZ29uOw0KPi0gIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgIEhpaUhhbmRsZTsNCj4t ICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICBGb3JtU2V0SWQ7DQo+LSAgRUZJX0ZPUk1f SUQgICAgICAgICAgICAgICAgICAgRm9ybUlkOw0KPi0gIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BS T1RPQ09MICpVc2VyQ3JlZGVudGlhbDsNCj4tDQo+LSAgaWYgKFByb3ZpZGVyID09IE5VTEwpIHsN Cj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICAvLw0K Pi0gIC8vIENoZWNrIHRoZSB1c2VyIElEIGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmllZCBjcmVk ZW50aWFsIHByb3ZpZGVyLg0KPi0gIC8vDQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVBy b3ZpZGVyRGItPkNvdW50OyBJbmRleCsrKSB7DQo+LSAgICAvLw0KPi0gICAgLy8gQ2hlY2sgY3Jl ZGVudGlhbCBwcm92aWRlciBjbGFzcy4NCj4tICAgIC8vDQo+LSAgICBVc2VyQ3JlZGVudGlhbCA9 IG1Qcm92aWRlckRiLT5Qcm92aWRlcltJbmRleF07DQo+LSAgICBpZiAoQ29tcGFyZUd1aWQgKCZV c2VyQ3JlZGVudGlhbC0+SWRlbnRpZmllciwgUHJvdmlkZXIpKSB7DQo+LSAgICAgIFN0YXR1cyA9 IFVzZXJDcmVkZW50aWFsLT5TZWxlY3QgKFVzZXJDcmVkZW50aWFsLCAmQXV0b0xvZ29uKTsNCj4t ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICAgIHJldHVybiBTdGF0dXM7 DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIGlmICgoQXV0b0xvZ29uICYgRUZJX0NSRURFTlRJQUxf TE9HT05fRkxBR19BVVRPKSA9PSAwKSB7DQo+LSAgICAgICAgLy8NCj4tICAgICAgICAvLyBHZXQg Y3JlZGVudGlhbCBwcm92aWRlciBmb3JtLg0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgU3RhdHVz ID0gVXNlckNyZWRlbnRpYWwtPkZvcm0gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFVzZXJDcmVkZW50aWFsLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZIaWlIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZv cm1TZXRJZCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRm9ybUlkDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4tICAgICAgICBpZiAoIUVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIC8vIFNlbmQg Zm9ybSB0byBnZXQgdXNlciBpbnB1dC4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBTdGF0 dXMgPSBtQ2FsbGJhY2tJbmZvLT5Gb3JtQnJvd3NlcjItPlNlbmRGb3JtICgNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tJbmZvLT5G b3JtQnJvd3NlcjIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJkhpaUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZGb3JtU2V0SWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRm9ybUlkLA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAgICAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+LSAgICAgICAgICAgIHJldHVybiBTdGF0dXM7DQo+LSAgICAgICAg ICB9DQo+LSAgICAgICAgfQ0KPi0gICAgICB9DQo+LQ0KPi0gICAgICBTdGF0dXMgPSBVc2VyQ3Jl ZGVudGlhbC0+VXNlciAoVXNlckNyZWRlbnRpYWwsIFVzZXIsICZVc2VySWQpOw0KPi0gICAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4tICAg ICAgfQ0KPi0NCj4tICAgICAgU3RhdHVzID0gVXNlckNyZWRlbnRpYWwtPkRlc2VsZWN0IChVc2Vy Q3JlZGVudGlhbCk7DQo+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAg ICByZXR1cm4gU3RhdHVzOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tfQ0K Pi0NCj4tDQo+LS8qKg0KPi0gIFVwZGF0ZSB1c2VyIGluZm9ybWF0aW9uIHdoZW4gdXNlciBpcyBs b2dvbiBvbiBzdWNjZXNzZnVsbHkuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICBQ b2ludHMgdG8gdXNlciBwcm9maWxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg VXBkYXRlIHVzZXIgaW5mb3JtYXRpb24gc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJz ICAgICAgICAgICBGYWlsIHRvIHVwZGF0ZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tKiovDQo+ LUVGSV9TVEFUVVMNCj4tVXBkYXRlVXNlckluZm8gKA0KPi0gIElOICBVU0VSX1BST0ZJTEVfRU5U UlkgICAgICAgICAgICAgICAgICAgICAgICAqVXNlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAg KkluZm87DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAqTmV3SW5mbzsNCj4tICBFRklf VVNFUl9JTkZPX0NSRUFURV9EQVRFIERhdGU7DQo+LSAgRUZJX1VTRVJfSU5GT19VU0FHRV9DT1VO VCBVc2FnZUNvdW50Ow0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5mb0xlbjsNCj4t DQo+LSAgLy8NCj4tICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciB0byB1cGRhdGUgdXNlcidzIGRhdGUg cmVjb3JkIGFuZCB1c2FnZSByZWNvcmQuDQo+LSAgLy8NCj4tICBJbmZvTGVuICA9IE1BWCAoc2l6 ZW9mIChFRklfVVNFUl9JTkZPX0NSRUFURV9EQVRFKSwgc2l6ZW9mDQo+KEVGSV9VU0VSX0lORk9f VVNBR0VfQ09VTlQpKTsNCj4tICBJbmZvICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAo RUZJX1VTRVJfSU5GTykgKyBJbmZvTGVuKTsNCj4tICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+LSAg ICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8v IENoZWNrIGNyZWF0ZSBkYXRlIHJlY29yZC4NCj4tICAvLw0KPi0gIE5ld0luZm8gPSBOVUxMOw0K Pi0gIFN0YXR1cyAgPSBGaW5kVXNlckluZm9CeVR5cGUgKFVzZXIsICZOZXdJbmZvLA0KPkVGSV9V U0VSX0lORk9fQ1JFQVRFX0RBVEVfUkVDT1JEKTsNCj4tICBpZiAoU3RhdHVzID09IEVGSV9OT1Rf Rk9VTkQpIHsNCj4tICAgIEluZm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19DUkVBVEVf REFURV9SRUNPUkQ7DQo+LSAgICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RP UkFHRV9QTEFURk9STV9OViB8DQo+RUZJX1VTRVJfSU5GT19QVUJMSUMgfCBFRklfVVNFUl9JTkZP X0VYQ0xVU0lWRTsNCj4tICAgIEluZm8tPkluZm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9J TkZPKSArIHNpemVvZg0KPihFRklfVVNFUl9JTkZPX0NSRUFURV9EQVRFKTsNCj4tICAgIFN0YXR1 cyAgICAgICAgICAgID0gZ1JULT5HZXRUaW1lICgmRGF0ZSwgTlVMTCk7DQo+LSAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgIEZyZWVQb29sIChJbmZvKTsNCj4tICAgICAgcmV0 dXJuIFN0YXR1czsNCj4tICAgIH0NCj4tDQo+LSAgICBDb3B5TWVtICgoVUlOVDggKikgKEluZm8g KyAxKSwgJkRhdGUsIHNpemVvZg0KPihFRklfVVNFUl9JTkZPX0NSRUFURV9EQVRFKSk7DQo+LSAg ICBOZXdJbmZvID0gTlVMTDsNCj4tICAgIFN0YXR1cyAgPSBNb2RpZnlVc2VySW5mbyAoVXNlciwg Jk5ld0luZm8sIEluZm8sIEluZm8tPkluZm9TaXplKTsNCj4tICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4tICAgICAgRnJlZVBvb2wgKEluZm8pOw0KPi0gICAgICByZXR1cm4gU3RhdHVz Ow0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBVcGRhdGUgdXNhZ2UgZGF0ZSBy ZWNvcmQuDQo+LSAgLy8NCj4tICBOZXdJbmZvID0gTlVMTDsNCj4tICBTdGF0dXMgID0gRmluZFVz ZXJJbmZvQnlUeXBlIChVc2VyLCAmTmV3SW5mbywNCj5FRklfVVNFUl9JTkZPX1VTQUdFX0RBVEVf UkVDT1JEKTsNCj4tICBpZiAoKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgfHwgKFN0YXR1cyA9PSBF RklfTk9UX0ZPVU5EKSkgew0KPi0gICAgSW5mby0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZP X1VTQUdFX0RBVEVfUkVDT1JEOw0KPi0gICAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9J TkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPkVGSV9VU0VSX0lORk9fUFVCTElDIHwgRUZJX1VT RVJfSU5GT19FWENMVVNJVkU7DQo+LSAgICBJbmZvLT5JbmZvU2l6ZSAgICA9IHNpemVvZiAoRUZJ X1VTRVJfSU5GTykgKyBzaXplb2YNCj4oRUZJX1VTRVJfSU5GT19VU0FHRV9EQVRFKTsNCj4tICAg IFN0YXR1cyAgICAgICAgICAgID0gZ1JULT5HZXRUaW1lICgmRGF0ZSwgTlVMTCk7DQo+LSAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgIEZyZWVQb29sIChJbmZvKTsNCj4tICAg ICAgcmV0dXJuIFN0YXR1czsNCj4tICAgIH0NCj4tDQo+LSAgICBDb3B5TWVtICgoVUlOVDggKikg KEluZm8gKyAxKSwgJkRhdGUsIHNpemVvZg0KPihFRklfVVNFUl9JTkZPX1VTQUdFX0RBVEUpKTsN Cj4tICAgIFN0YXR1cyA9IE1vZGlmeVVzZXJJbmZvIChVc2VyLCAmTmV3SW5mbywgSW5mbywgSW5m by0+SW5mb1NpemUpOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBG cmVlUG9vbCAoSW5mbyk7DQo+LSAgICAgIHJldHVybiBTdGF0dXM7DQo+LSAgICB9DQo+LSAgfQ0K Pi0NCj4tICAvLw0KPi0gIC8vIFVwZGF0ZSB1c2FnZSBjb3VudCByZWNvcmQuDQo+LSAgLy8NCj4t ICBVc2FnZUNvdW50ICA9IDA7DQo+LSAgTmV3SW5mbyAgICAgPSBOVUxMOw0KPi0gIFN0YXR1cyAg ICAgID0gRmluZFVzZXJJbmZvQnlUeXBlIChVc2VyLCAmTmV3SW5mbywNCj5FRklfVVNFUl9JTkZP X1VTQUdFX0NPVU5UX1JFQ09SRCk7DQo+LSAgLy8NCj4tICAvLyBHZXQgdXNhZ2UgY291bnQuDQo+ LSAgLy8NCj4tICBpZiAoU3RhdHVzID09IEVGSV9TVUNDRVNTKSB7DQo+LSAgICBDb3B5TWVtICgm VXNhZ2VDb3VudCwgKFVJTlQ4ICopIChOZXdJbmZvICsgMSksIHNpemVvZg0KPihFRklfVVNFUl9J TkZPX1VTQUdFX0NPVU5UKSk7DQo+LSAgfQ0KPi0NCj4tICBVc2FnZUNvdW50Kys7DQo+LSAgaWYg KChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHx8IChTdGF0dXMgPT0gRUZJX05PVF9GT1VORCkpIHsN Cj4tICAgIEluZm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19VU0FHRV9DT1VOVF9SRUNP UkQ7DQo+LSAgICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9QTEFU Rk9STV9OViB8DQo+RUZJX1VTRVJfSU5GT19QVUJMSUMgfCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lW RTsNCj4tICAgIEluZm8tPkluZm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNp emVvZg0KPihFRklfVVNFUl9JTkZPX1VTQUdFX0NPVU5UKTsNCj4tICAgIENvcHlNZW0gKChVSU5U OCAqKSAoSW5mbyArIDEpLCAmVXNhZ2VDb3VudCwgc2l6ZW9mDQo+KEVGSV9VU0VSX0lORk9fVVNB R0VfQ09VTlQpKTsNCj4tICAgIFN0YXR1cyA9IE1vZGlmeVVzZXJJbmZvIChVc2VyLCAmTmV3SW5m bywgSW5mbywgSW5mby0+SW5mb1NpemUpOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPi0gICAgICBGcmVlUG9vbCAoSW5mbyk7DQo+LSAgICAgIHJldHVybiBTdGF0dXM7DQo+LSAg ICB9DQo+LSAgfQ0KPi0NCj4tICBGcmVlUG9vbCAoSW5mbyk7DQo+LSAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQWRkIGEgY3JlZGVuZXRpYWwgcHJvdmlkZXIg aXRlbSBpbiBmb3JtLg0KPi0NCj4tICBAcGFyYW1baW5dICBQcm92aWRlckd1aWQgICAgICAgIFBv aW50cyB0byB0aGUgaWRlbnRpZmlyIG9mIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LSAgQHBhcmFt W2luXSAgT3BDb2RlSGFuZGxlICAgICAgICBQb2ludHMgdG8gY29udGFpbmVyIGZvciBkeW5hbWlj IGNyZWF0ZWQNCj5vcGNvZGVzLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tQWRkUHJvdmlkZXJTZWxl Y3Rpb24gKA0KPi0gIElOICAgICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqUHJvdmlkZXJHdWlkLA0KPi0gIElOICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqT3BDb2RlSGFuZGxlDQo+LSAgKQ0KPi17DQo+LSAgRUZJX0hJSV9IQU5ETEUg ICAgICAgICAgICAgICAgSGlpSGFuZGxlOw0KPi0gIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAg ICAgIFByb3ZJRDsNCj4tICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAqUHJvdlN0cjsN Cj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4tICBFRklfVVNFUl9D UkVERU5USUFMMl9QUk9UT0NPTCAqVXNlckNyZWRlbnRpYWw7DQo+LQ0KPi0gIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IG1Qcm92aWRlckRiLT5Db3VudDsgSW5kZXgrKykgew0KPi0gICAgVXNlckNy ZWRlbnRpYWwgPSBtUHJvdmlkZXJEYi0+UHJvdmlkZXJbSW5kZXhdOw0KPi0gICAgaWYgKENvbXBh cmVHdWlkICgmVXNlckNyZWRlbnRpYWwtPklkZW50aWZpZXIsIFByb3ZpZGVyR3VpZCkpIHsNCj4t ICAgICAgLy8NCj4tICAgICAgLy8gQWRkIGNyZWRlbnRpYWwgcHJvdmlkZXIgc2VsZWN0aW9uLg0K Pi0gICAgICAvLw0KPi0gICAgICBVc2VyQ3JlZGVudGlhbC0+VGl0bGUgKFVzZXJDcmVkZW50aWFs LCAmSGlpSGFuZGxlLCAmUHJvdklEKTsNCj4tICAgICAgUHJvdlN0ciA9IEhpaUdldFN0cmluZyAo SGlpSGFuZGxlLCBQcm92SUQsIE5VTEwpOw0KPi0gICAgICBpZiAoUHJvdlN0ciA9PSBOVUxMKSB7 DQo+LSAgICAgICAgY29udGludWUgOw0KPi0gICAgICB9DQo+LSAgICAgIFByb3ZJRCAgPSBIaWlT ZXRTdHJpbmcgKG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgMCwgUHJvdlN0ciwgTlVMTCk7DQo+ LSAgICAgIEZyZWVQb29sIChQcm92U3RyKTsNCj4tICAgICAgSGlpQ3JlYXRlQWN0aW9uT3BDb2Rl ICgNCj4tICAgICAgICBPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBD b250YWluZXIgZm9yIGR5bmFtaWMgY3JlYXRlZCBvcGNvZGVzDQo+LSAgICAgICAgKEVGSV9RVUVT VElPTl9JRCkoTEFCRUxfUFJPVklERVJfTkFNRSArIEluZGV4KSwgIC8vIFF1ZXN0aW9uIElEDQo+ LSAgICAgICAgUHJvdklELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvbXB0 IHRleHQNCj4tICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9OVUxMX1NUUklORyksICAgICAgICAv LyBIZWxwIHRleHQNCj4tICAgICAgICBFRklfSUZSX0ZMQUdfQ0FMTEJBQ0ssICAgICAgICAgICAg ICAgICAvLyBRdWVzdGlvbiBmbGFnDQo+LSAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8gQWN0aW9uIFN0cmluZyBJRA0KPi0gICAgICAgICk7DQo+LSAgICAg IGJyZWFrOw0KPi0gICAgfQ0KPi0gIH0NCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEFkZCBhIHVz ZXJuYW1lIGl0ZW0gaW4gZm9ybS4NCj4tDQo+LSAgQHBhcmFtW2luXSAgSW5kZXggICAgICAgICAg ICBUaGUgaW5kZXggb2YgdGhlIHVzZXIgaW4gdGhlIHVzZXIgbmFtZSBsaXN0Lg0KPi0gIEBwYXJh bVtpbl0gIFVzZXIgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSB1c2VyIHByb2ZpbGUgd2hvc2Ug dXNlcm5hbWUgaXMgYWRkZWQuDQo+LSAgQHBhcmFtW2luXSAgT3BDb2RlSGFuZGxlICAgICBQb2lu dHMgdG8gY29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQNCj5vcGNvZGVzLg0KPi0NCj4tICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIEFkZCBhIHVzZXJuYW1lIHN1Y2Nlc3NmdWxseS4N Cj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIEZhaWwgdG8gYWRkIGEgdXNlcm5hbWUu DQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1BZGRVc2VyU2VsZWN0aW9uICgNCj4tICBJTiAg ICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgsDQo+LSAgSU4g ICAgIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgICpVc2VyLA0KPi0gIElO ICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqT3BDb2RlSGFuZGxl DQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUUklOR19JRCBVc2VyTmFtZTsNCj4tICBFRklfU1RBVFVT ICAgIFN0YXR1czsNCj4tICBFRklfVVNFUl9JTkZPICpVc2VySW5mbzsNCj4tDQo+LSAgVXNlcklu Zm8gID0gTlVMTDsNCj4tICBTdGF0dXMgICAgPSBGaW5kVXNlckluZm9CeVR5cGUgKFVzZXIsICZV c2VySW5mbywNCj5FRklfVVNFUl9JTkZPX05BTUVfUkVDT1JEKTsNCj4tICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4t ICAvLyBBZGQgdXNlciBuYW1lIHNlbGVjdGlvbi4NCj4tICAvLw0KPi0gIFVzZXJOYW1lID0gSGlp U2V0U3RyaW5nIChtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUsIDAsIChFRklfU1RSSU5HKQ0KPihV c2VySW5mbyArIDEpLCBOVUxMKTsNCj4tICBpZiAoVXNlck5hbWUgPT0gMCkgew0KPi0gICAgcmV0 dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gIH0NCj4tDQo+LSAgSGlpQ3JlYXRlR290b09w Q29kZSAoDQo+LSAgICBPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5l ciBmb3IgZHluYW1pYyBjcmVhdGVkIG9wY29kZXMNCj4tICAgIEZPUk1JRF9QUk9WSURFUl9GT1JN LCAgICAgICAgICAgLy8gVGFyZ2V0IEZvcm0gSUQNCj4tICAgIFVzZXJOYW1lLCAgICAgICAgICAg ICAgICAgICAgICAgLy8gUHJvbXB0IHRleHQNCj4tICAgIFNUUklOR19UT0tFTiAoU1RSX05VTExf U1RSSU5HKSwgLy8gSGVscCB0ZXh0DQo+LSAgICBFRklfSUZSX0ZMQUdfQ0FMTEJBQ0ssICAgICAg ICAgIC8vIFF1ZXN0aW9uIGZsYWcNCj4tICAgIChVSU5UMTYpIEluZGV4ICAgICAgICAgICAgICAg ICAgLy8gUXVlc3Rpb24gSUQNCj4tICAgICk7DQo+LQ0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIElkZW50aWZ5IHRoZSB1c2VyIHdob3NlIGlkZW50aXR5 IHBvbGljeSBkb2VzIG5vdCBjb250YWluIHRoZSBvcGVyYXRvciAnT1InLg0KPi0NCj4tICBAcGFy YW1baW5dICBVc2VyICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBwcm9maWxlLg0KPi0N Cj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIFRoZSBzcGVjaWZpZWQgdXNlciBpcyBp ZGVudGlmaWVkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAg IEZhaWwgdG8gaWRlbnRpZnkgdGhlIHVzZXIuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1J ZGVudGlmeUFuZFR5cGVVc2VyICgNCj4tICBJTiAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAg ICAgICAgICAgICAgICAgKlVzZXINCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAg ICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKklk ZW50aWZ5SW5mbzsNCj4tICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICBTdWNjZXNzOw0K Pi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsTGVuOw0KPi0gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgIFZhbHVlTGVuOw0KPi0gIEVGSV9VU0VSX0lORk9fSURFTlRJ VFlfUE9MSUNZICpJZGVudGl0eTsNCj4tDQo+LSAgLy8NCj4tICAvLyBHZXQgdXNlciBpZGVudGlm eSBwb2xpY3kgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBJZGVudGlmeUluZm8gID0gTlVMTDsN Cj4tICBTdGF0dXMgICAgICAgID0gRmluZFVzZXJJbmZvQnlUeXBlIChVc2VyLCAmSWRlbnRpZnlJ bmZvLA0KPkVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZX1JFQ09SRCk7DQo+LSAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LSAgQVNT RVJUIChJZGVudGlmeUluZm8gIT0gTlVMTCk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgZWFj aCBwYXJ0IG9mIGlkZW50aWZpY2F0aW9uIHBvbGljeSBleHByZXNzaW9uLg0KPi0gIC8vDQo+LSAg U3VjY2VzcyAgID0gRkFMU0U7DQo+LSAgVG90YWxMZW4gID0gMDsNCj4tICB3aGlsZSAoVG90YWxM ZW4gPCBJZGVudGlmeUluZm8tPkluZm9TaXplIC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSkgew0K Pi0gICAgSWRlbnRpdHkgID0gKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICopICgoVUlO VDggKikgKElkZW50aWZ5SW5mbyArDQo+MSkgKyBUb3RhbExlbik7DQo+LSAgICBWYWx1ZUxlbiAg PSBJZGVudGl0eS0+TGVuZ3RoIC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElD WSk7DQo+LSAgICBzd2l0Y2ggKElkZW50aXR5LT5UeXBlKSB7DQo+LQ0KPi0gICAgY2FzZSBFRklf VVNFUl9JTkZPX0lERU5USVRZX0ZBTFNFOg0KPi0gICAgICAvLw0KPi0gICAgICAvLyBDaGVjayBG YWxzZSBvcHRpb24uDQo+LSAgICAgIC8vDQo+LSAgICAgIFN1Y2Nlc3MgPSBGQUxTRTsNCj4tICAg ICAgYnJlYWs7DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX1RSVUU6DQo+ LSAgICAgIC8vDQo+LSAgICAgIC8vIENoZWNrIFRydWUgb3B0aW9uLg0KPi0gICAgICAvLw0KPi0g ICAgICBTdWNjZXNzID0gVFJVRTsNCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgY2FzZSBFRklf VVNFUl9JTkZPX0lERU5USVRZX05PVDoNCj4tICAgICAgLy8NCj4tICAgICAgLy8gQ2hlY2sgbmVn YXRpdmUgb3BlcmF0aW9uLg0KPi0gICAgICAvLw0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBj YXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQU5EOg0KPi0gICAgICAvLw0KPi0gICAgICAvLyBD aGVjayBhbmQgb3BlcmF0aW9uLg0KPi0gICAgICAvLw0KPi0gICAgICBpZiAoIVN1Y2Nlc3MpIHsN Cj4tICAgICAgICByZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAg U3VjY2VzcyA9IEZBTFNFOw0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VS X0lORk9fSURFTlRJVFlfT1I6DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIENoZWNrIG9yIG9wZXJh dGlvbi4NCj4tICAgICAgLy8NCj4tICAgICAgaWYgKFN1Y2Nlc3MpIHsNCj4tICAgICAgICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgY2Fz ZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0NSRURFTlRJQUxfVFlQRToNCj4tICAgICAgLy8NCj4t ICAgICAgLy8gQ2hlY2sgY3JlZGVudGlhbCBwcm92aWRlciBieSB0eXBlLg0KPi0gICAgICAvLw0K Pi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQ1JF REVOVElBTF9QUk9WSURFUjoNCj4tICAgICAgLy8NCj4tICAgICAgLy8gQ2hlY2sgY3JlZGVudGlh bCBwcm92aWRlciBieSBJRC4NCj4tICAgICAgLy8NCj4tICAgICAgaWYgKFZhbHVlTGVuICE9IHNp emVvZiAoRUZJX0dVSUQpKSB7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAgU3RhdHVzID0gSWRlbnRpZnlCeVByb3ZpZGVySWQg KFVzZXIsIChFRklfR1VJRCAqKSAoSWRlbnRpdHkgKyAxKSk7DQo+LSAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4tICAgICAgICByZXR1cm4gU3RhdHVzOw0KPi0gICAgICB9DQo+LQ0K Pi0gICAgICBTdWNjZXNzID0gVFJVRTsNCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgZGVmYXVs dDoNCj4tICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICAgICAgYnJlYWs7 DQo+LSAgICB9DQo+LQ0KPi0gICAgVG90YWxMZW4gKz0gSWRlbnRpdHktPkxlbmd0aDsNCj4tICB9 DQo+LQ0KPi0gIGlmIChUb3RhbExlbiAhPSBJZGVudGlmeUluZm8tPkluZm9TaXplIC0gc2l6ZW9m IChFRklfVVNFUl9JTkZPKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4tICB9DQo+LQ0KPi0gIGlmICghU3VjY2Vzcykgew0KPi0gICAgcmV0dXJuIEVGSV9OT1RfUkVB RFk7DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0v KioNCj4tICBJZGVudGlmeSB0aGUgdXNlciB3aG9zZSBpZGVudGl0eSBwb2xpY3kgZG9lcyBub3Qg Y29udGFpbiB0aGUgb3BlcmF0b3IgJ0FORCcuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFVzZXIgICAg ICAgICAgICAgUG9pbnRzIHRvIHRoZSB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgVGhlIHNwZWNpZmllZCB1c2VyIGlzIGlkZW50aWZpZWQgc3VjY2Vz c2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgRmFpbCB0byBpZGVudGlm eSB0aGUgdXNlci4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUlkZW50aWZ5T3JUeXBlVXNl ciAoDQo+LSAgSU4gIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICpV c2VyDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICpJZGVudGlmeUluZm87DQo+LSAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgVG90YWxMZW47DQo+LSAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgVmFsdWVMZW47DQo+LSAgRUZJX1VTRVJfSU5GT19JREVOVElUWV9Q T0xJQ1kgKklkZW50aXR5Ow0KPi0gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICpTdGFy dE9wQ29kZUhhbmRsZTsNCj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAqRW5kT3BD b2RlSGFuZGxlOw0KPi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAgICAgICAgICAgICpTdGFydExhYmVs Ow0KPi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAgICAgICAgICAgICpFbmRMYWJlbDsNCj4tDQo+LSAg Ly8NCj4tICAvLyBHZXQgdXNlciBpZGVudGlmeSBwb2xpY3kgaW5mb3JtYXRpb24uDQo+LSAgLy8N Cj4tICBJZGVudGlmeUluZm8gID0gTlVMTDsNCj4tICBTdGF0dXMgICAgICAgID0gRmluZFVzZXJJ bmZvQnlUeXBlIChVc2VyLCAmSWRlbnRpZnlJbmZvLA0KPkVGSV9VU0VSX0lORk9fSURFTlRJVFlf UE9MSUNZX1JFQ09SRCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0 dXJuIFN0YXR1czsNCj4tICB9DQo+LSAgQVNTRVJUIChJZGVudGlmeUluZm8gIT0gTlVMTCk7DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gSW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyIGZvciBkeW5hbWljIG9w Y29kZXMuDQo+LSAgLy8NCj4tICBTdGFydE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2Rl SGFuZGxlICgpOw0KPi0gIEFTU0VSVCAoU3RhcnRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+LQ0K Pi0gIEVuZE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gIEFT U0VSVCAoRW5kT3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICAvLw0KPi0gIC8vIENyZWF0 ZSBIaWkgRXh0ZW5kIExhYmVsIE9wQ29kZS4NCj4tICAvLw0KPi0gIFN0YXJ0TGFiZWwgPSAoRUZJ X0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgU3RhcnRM YWJlbC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPi0gIFN0YXJ0 TGFiZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9QUk9WSURFUl9OQU1FOw0KPi0NCj4tICBFbmRM YWJlbCA9IChFRklfSUZSX0dVSURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAoDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kT3BDb2RlSGFuZGxlLA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwp DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4tICBFbmRMYWJl bC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPi0gIEVuZExhYmVs LT5OdW1iZXIgICAgICAgID0gTEFCRUxfRU5EOw0KPi0NCj4tICAvLw0KPi0gIC8vIEFkZCB0aGUg cHJvdmlkZXJzIHRoYXQgZXhpc3RzIGluIHRoZSB1c2VyJ3MgcG9saWN5Lg0KPi0gIC8vDQo+LSAg VG90YWxMZW4gPSAwOw0KPi0gIHdoaWxlIChUb3RhbExlbiA8IElkZW50aWZ5SW5mby0+SW5mb1Np emUgLSBzaXplb2YgKEVGSV9VU0VSX0lORk8pKSB7DQo+LSAgICBJZGVudGl0eSAgPSAoRUZJX1VT RVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKikgKChVSU5UOCAqKSAoSWRlbnRpZnlJbmZvICsNCj4x KSArIFRvdGFsTGVuKTsNCj4tICAgIFZhbHVlTGVuICA9IElkZW50aXR5LT5MZW5ndGggLSBzaXpl b2YgKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZKTsNCj4tICAgIGlmIChJZGVudGl0eS0+ VHlwZSA9PSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0NSRURFTlRJQUxfUFJPVklERVIpIHsNCj4t ICAgICAgQWRkUHJvdmlkZXJTZWxlY3Rpb24gKChFRklfR1VJRCAqKSAoSWRlbnRpdHkgKyAxKSwg U3RhcnRPcENvZGVIYW5kbGUpOw0KPi0gICAgfQ0KPi0NCj4tICAgIFRvdGFsTGVuICs9IElkZW50 aXR5LT5MZW5ndGg7DQo+LSAgfQ0KPi0NCj4tICBIaWlVcGRhdGVGb3JtICgNCj4tICAgIG1DYWxs YmFja0luZm8tPkhpaUhhbmRsZSwgLy8gSElJIGhhbmRsZQ0KPi0gICAgJmdVc2VySWRlbnRpZnlN YW5hZ2VyR3VpZCwvLyBGb3Jtc2V0IEdVSUQNCj4tICAgIEZPUk1JRF9QUk9WSURFUl9GT1JNLCAg ICAgLy8gRm9ybSBJRA0KPi0gICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAvLyBMYWJlbCBm b3Igd2hlcmUgdG8gaW5zZXJ0IG9wY29kZXMNCj4tICAgIEVuZE9wQ29kZUhhbmRsZSAgICAgICAg ICAgLy8gUmVwbGFjZSBkYXRhDQo+LSAgICApOw0KPi0NCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxl IChTdGFydE9wQ29kZUhhbmRsZSk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRW5kT3BDb2Rl SGFuZGxlKTsNCj4tDQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoq DQo+LSAgVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJlc3VsdHMgb2YgY2hhbmdlcyBpbiBj b25maWd1cmF0aW9uLg0KPi0NCj4tICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICAgUG9p bnRzIHRvIHRoZSBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wuDQo+LSAgQHBhcmFtICBB Y3Rpb24gICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBhY3Rpb24gdGFrZW4g YnkgdGhlIGJyb3dzZXIuDQo+LSAgQHBhcmFtICBRdWVzdGlvbklkICAgICAgICAgICAgIEEgdW5p cXVlIHZhbHVlIHdoaWNoIGlzIHNlbnQgdG8gdGhlIG9yaWdpbmFsDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGV4cG9ydGluZyBkcml2ZXIgc28gdGhhdCBpdCBjYW4gaWRlbnRp ZnkgdGhlIHR5cGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgZGF0YSB0 byBleHBlY3QuDQo+LSAgQHBhcmFtICBUeXBlICAgICAgICAgICAgICAgICAgIFRoZSB0eXBlIG9m IHZhbHVlIGZvciB0aGUgcXVlc3Rpb24uDQo+LSAgQHBhcmFtICBWYWx1ZSAgICAgICAgICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSBiZWluZyBzZW50IHRvIHRoZSBvcmlnaW5hbA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRpbmcgZHJpdmVyLg0KPi0gIEBw YXJhbSAgQWN0aW9uUmVxdWVzdCAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgYWN0 aW9uIHJlcXVlc3RlZCBieQ0KPnRoZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjYWxsYmFjayBmdW5jdGlvbi4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgIFRoZSBjYWxsYmFjayBzdWNjZXNzZnVsbHkgaGFuZGxlZCB0aGUgYWN0aW9uLg0KPi0gIEBy ZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBGYWlsIHRvIGhhbmRsZSB0aGUgYWN0aW9uLg0K Pi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJJZGVudGlmeU1hbmFnZXJD YWxsYmFjayAoDQo+LSAgSU4gIENPTlNUIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTCAg ICAgICpUaGlzLA0KPi0gIElOICBFRklfQlJPV1NFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAg ICAgICBBY3Rpb24sDQo+LSAgSU4gIEVGSV9RVUVTVElPTl9JRCAgICAgICAgICAgICAgICAgICAg ICAgICAgIFF1ZXN0aW9uSWQsDQo+LSAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFR5cGUsDQo+LSAgSU4gIEVGSV9JRlJfVFlQRV9WQUxVRSAgICAgICAgICAg ICAgICAgICAgICAgICpWYWx1ZSwNCj4tICBPVVQgRUZJX0JST1dTRVJfQUNUSU9OX1JFUVVFU1Qg ICAgICAgICAgICAgICAgKkFjdGlvblJlcXVlc3QNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVT ICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgKlVzZXI7 DQo+LSAgVUlOVDggICAgICAgICAgICAgICAgICAgUG9saWN5VHlwZTsNCj4tICBVSU5UMTYgICAg ICAgICAgICAgICAgICBJbmRleDsNCj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAqU3RhcnRP cENvZGVIYW5kbGU7DQo+LSAgVk9JRCAgICAgICAgICAgICAgICAgICAgKkVuZE9wQ29kZUhhbmRs ZTsNCj4tICBFRklfSUZSX0dVSURfTEFCRUwgICAgICAqU3RhcnRMYWJlbDsNCj4tICBFRklfSUZS X0dVSURfTEFCRUwgICAgICAqRW5kTGFiZWw7DQo+LQ0KPi0gIFN0YXR1cyA9IEVGSV9TVUNDRVNT Ow0KPi0NCj4tICBzd2l0Y2ggKEFjdGlvbikgew0KPi0gIGNhc2UgRUZJX0JST1dTRVJfQUNUSU9O X0ZPUk1fT1BFTjoNCj4tICAgIHsNCj4tICAgICAgLy8NCj4tICAgICAgLy8gVXBkYXRlIHVzZXIg Rm9ybSB3aGVuIHVzZXIgRm9ybSBpcyBvcGVuZWQuDQo+LSAgICAgIC8vIFRoaXMgd2lsbCBiZSBk b25lIG9ubHkgaW4gRk9STV9PUEVOIENhbGxCYWNrIG9mIHF1ZXN0aW9uIHdpdGgNCj5GT1JNX09Q RU5fUVVFU1RJT05fSUQgZnJvbSB1c2VyIEZvcm0uDQo+LSAgICAgIC8vDQo+LSAgICAgIGlmIChR dWVzdGlvbklkICE9IEZPUk1fT1BFTl9RVUVTVElPTl9JRCkgew0KPi0gICAgICAgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAgLy8NCj4tICAgICAgLy8gSW5pdGlh bGl6ZSB0aGUgY29udGFpbmVyIGZvciBkeW5hbWljIG9wY29kZXMuDQo+LSAgICAgIC8vDQo+LSAg ICAgIFN0YXJ0T3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAg ICAgIEFTU0VSVCAoU3RhcnRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+LQ0KPi0gICAgICBFbmRP cENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4tICAgICAgQVNTRVJU IChFbmRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+LQ0KPi0gICAgICAvLw0KPi0gICAgICAvLyBD cmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUuDQo+LSAgICAgIC8vDQo+LSAgICAgIFN0YXJ0 TGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0T3BDb2RlSGFu ZGxlLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZp SWZyVGlhbm9HdWlkLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4tICAgICAgU3RhcnRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9 IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPi0gICAgICBTdGFydExhYmVsLT5OdW1iZXIgICAg ICAgID0gTEFCRUxfVVNFUl9OQU1FOw0KPi0NCj4tICAgICAgRW5kTGFiZWwgPSAoRUZJX0lGUl9H VUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFbmRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4tICAgICAg RW5kTGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICAg ICAgRW5kTGFiZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9FTkQ7DQo+LQ0KPi0gICAgICAvLw0K Pi0gICAgICAvLyBBZGQgYWxsIHRoZSB1c2VyIHByb2ZpbGUgaW4gdGhlIHVzZXIgcHJvZmlsZSBk YXRhYmFzZS4NCj4tICAgICAgLy8NCj4tICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVVz ZXJQcm9maWxlRGItPlVzZXJQcm9maWxlTnVtOyBJbmRleCsrKSB7DQo+LSAgICAgICAgVXNlciA9 IChVU0VSX1BST0ZJTEVfRU5UUlkgKikgbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlW0luZGV4 XTsNCj4tICAgICAgICBBZGRVc2VyU2VsZWN0aW9uICgoVUlOVDE2KShMQUJFTF9VU0VSX05BTUUg KyBJbmRleCksIFVzZXIsDQo+U3RhcnRPcENvZGVIYW5kbGUpOw0KPi0gICAgICB9DQo+LQ0KPi0g ICAgICBIaWlVcGRhdGVGb3JtICgNCj4tICAgICAgICBtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUs IC8vIEhJSSBoYW5kbGUNCj4tICAgICAgICAmZ1VzZXJJZGVudGlmeU1hbmFnZXJHdWlkLC8vIEZv cm1zZXQgR1VJRA0KPi0gICAgICAgIEZPUk1JRF9VU0VSX0ZPUk0sICAgICAgICAgLy8gRm9ybSBJ RA0KPi0gICAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlLCAgICAgICAgLy8gTGFiZWwgZm9yIHdoZXJl IHRvIGluc2VydCBvcGNvZGVzDQo+LSAgICAgICAgRW5kT3BDb2RlSGFuZGxlICAgICAgICAgICAv LyBSZXBsYWNlIGRhdGENCj4tICAgICAgICApOw0KPi0NCj4tICAgICAgSGlpRnJlZU9wQ29kZUhh bmRsZSAoU3RhcnRPcENvZGVIYW5kbGUpOw0KPi0gICAgICBIaWlGcmVlT3BDb2RlSGFuZGxlIChF bmRPcENvZGVIYW5kbGUpOw0KPi0NCj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAg fQ0KPi0gICAgYnJlYWs7DQo+LQ0KPi0gIGNhc2UgRUZJX0JST1dTRVJfQUNUSU9OX0ZPUk1fQ0xP U0U6DQo+LSAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4tICAgIGJyZWFrOw0KPi0NCj4tICBj YXNlIEVGSV9CUk9XU0VSX0FDVElPTl9DSEFOR0VEOg0KPi0gICAgaWYgKFF1ZXN0aW9uSWQgPj0g TEFCRUxfUFJPVklERVJfTkFNRSkgew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBRdWVzdGlvbklk IGNvbWVzIGZyb20gdGhlIHNlY29uZCBGb3JtIChTZWxlY3QgYSBDcmVkZW50aWFsIFByb3ZpZGVy IGlmDQo+aWRlbnRpdHkNCj4tICAgICAgLy8gcG9saWN5IGlzIE9SIHR5cGUpLiBJZGVudGlmeSB0 aGUgdXNlciBieSB0aGUgc2VsZWN0ZWQgcHJvdmlkZXIuDQo+LSAgICAgIC8vDQo+LSAgICAgIFN0 YXR1cyA9IElkZW50aWZ5QnlQcm92aWRlcklkIChtQ3VycmVudFVzZXIsICZtUHJvdmlkZXJEYi0N Cj4+UHJvdmlkZXJbUXVlc3Rpb25JZCAmIDB4RkZGXS0+SWRlbnRpZmllcik7DQo+LSAgICAgIGlm IChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsNCj4tICAgICAgICBtSWRlbnRpZmllZCAgICAgPSBU UlVFOw0KPi0gICAgICAgICpBY3Rpb25SZXF1ZXN0ICA9IEVGSV9CUk9XU0VSX0FDVElPTl9SRVFV RVNUX0VYSVQ7DQo+LSAgICAgIH0NCj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAg fQ0KPi0gICAgYnJlYWs7DQo+LQ0KPi0gIGNhc2UgRUZJX0JST1dTRVJfQUNUSU9OX0NIQU5HSU5H Og0KPi0gICAgLy8NCj4tICAgIC8vIFF1ZXN0aW9uSWQgY29tZXMgZnJvbSB0aGUgZmlyc3QgRm9y bSAoU2VsZWN0IGEgdXNlciB0byBpZGVudGlmeSkuDQo+LSAgICAvLw0KPi0gICAgaWYgKFF1ZXN0 aW9uSWQgPj0gTEFCRUxfUFJPVklERVJfTkFNRSkgew0KPi0gICAgICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+LSAgICB9DQo+LQ0KPi0gICAgVXNlciAgID0gKFVTRVJfUFJPRklMRV9FTlRSWSAqKSBt VXNlclByb2ZpbGVEYi0NCj4+VXNlclByb2ZpbGVbUXVlc3Rpb25JZCAmIDB4RkZGXTsNCj4tICAg IFN0YXR1cyA9IEdldElkZW50aWZ5VHlwZSAoVXNlciwgJlBvbGljeVR5cGUpOw0KPi0gICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICByZXR1cm4gU3RhdHVzOw0KPi0gICAgfQ0K Pi0NCj4tICAgIGlmIChQb2xpY3lUeXBlID09IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfT1IpIHsN Cj4tICAgICAgLy8NCj4tICAgICAgLy8gSWRlbnRpZnkgdGhlIHVzZXIgYnkgIk9SIiBsb2dpY2Fs Lg0KPi0gICAgICAvLw0KPi0gICAgICBTdGF0dXMgPSBJZGVudGlmeU9yVHlwZVVzZXIgKFVzZXIp Ow0KPi0gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgICAgcmV0dXJuIFN0 YXR1czsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAgbUN1cnJlbnRVc2VyID0gKEVGSV9VU0VSX1BS T0ZJTEVfSEFORExFKSBVc2VyOw0KPi0gICAgfSBlbHNlIHsNCj4tICAgICAgLy8NCj4tICAgICAg Ly8gSWRlbnRpZnkgdGhlIHVzZXIgYnkgIkFORCIgbG9naWNhbC4NCj4tICAgICAgLy8NCj4tICAg ICAgU3RhdHVzID0gSWRlbnRpZnlBbmRUeXBlVXNlciAoVXNlcik7DQo+LSAgICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgICByZXR1cm4gU3RhdHVzOw0KPi0gICAgICB9DQo+ LQ0KPi0gICAgICBtQ3VycmVudFVzZXIgICAgPSAoRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUpIFVz ZXI7DQo+LSAgICAgIG1JZGVudGlmaWVkICAgICA9IFRSVUU7DQo+LSAgICAgIGlmIChUeXBlID09 IEVGSV9JRlJfVFlQRV9SRUYpIHsNCj4tICAgICAgICBWYWx1ZS0+cmVmLkZvcm1JZCA9IEZPUk1J RF9JTlZBTElEX0ZPUk07DQo+LSAgICAgIH0NCj4tICAgIH0NCj4tICBicmVhazsNCj4tDQo+LSAg ZGVmYXVsdDoNCj4tICAgIC8vDQo+LSAgICAvLyBBbGwgb3RoZXIgYWN0aW9uIHJldHVybiB1bnN1 cHBvcnRlZC4NCj4tICAgIC8vDQo+LSAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+LSAg ICBicmVhazsNCj4tICB9DQo+LQ0KPi0NCj4tICByZXR1cm4gU3RhdHVzOw0KPi19DQo+LQ0KPi0N Cj4tLyoqDQo+LSAgVGhpcyBmdW5jdGlvbiBjb25zdHJ1Y3QgdXNlciBwcm9maWxlIGRhdGFiYXNl IGZyb20gdXNlciBkYXRhIHNhdmVkIGluIHRoZQ0KPkZsYXNoLg0KPi0gIElmIG5vIHVzZXIgaXMg Zm91bmQgaW4gRmxhc2gsIGFkZCBvbmUgZGVmYXVsdCB1c2VyICJhZG1pbmlzdHJhdG9yIiBpbiB0 aGUgdXNlcg0KPi0gIHByb2ZpbGUgZGF0YWJhc2UuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICBJbml0IHVzZXIgcHJvZmlsZSBkYXRhYmFzZSBzdWNjZXNzZnVsbHkuDQo+ LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIEZhaWwgdG8gaW5pdCB1c2VyIHByb2Zp bGUgZGF0YWJhc2UuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1Jbml0VXNlclByb2ZpbGVE YiAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tICBV SU5UOCAgICAgICAqVmFyRGF0YTsNCj4tICBVSU5UTiAgICAgICBWYXJTaXplOw0KPi0gIFVJTlRO ICAgICAgIEN1clZhclNpemU7DQo+LSAgQ0hBUjE2ICAgICAgVmFyTmFtZVsxMF07DQo+LSAgVUlO VE4gICAgICAgSW5kZXg7DQo+LSAgVUlOVDMyICAgICAgVmFyQXR0cjsNCj4tDQo+LSAgaWYgKG1V c2VyUHJvZmlsZURiICE9IE5VTEwpIHsNCj4tICAgIC8vDQo+LSAgICAvLyBUaGUgdXNlciBwcm9m aWxlcyBoYWQgYmVlbiBhbHJlYWR5IGluaXRpYWxpemVkLg0KPi0gICAgLy8NCj4tICAgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5pdCB1c2VyIHByb2Zp bGUgZGF0YWJhc2Ugc3RydWN0dXJlLg0KPi0gIC8vDQo+LSAgaWYgKCFFeHBhbmRVc2VybVVzZXJQ cm9maWxlRGIgKCkpIHsNCj4tICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9 DQo+LQ0KPi0gIEN1clZhclNpemUgPSBERUZBVUxUX1BST0ZJTEVfU0laRTsNCj4tICBWYXJEYXRh ICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoQ3VyVmFyU2l6ZSk7DQo+LSAgaWYgKFZhckRhdGEgPT0g TlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gIH0NCj4tDQo+ LSAgLy8NCj4tICAvLyBHZXQgYWxsIHVzZXIgcHJvaWZsZSBlbnRyaWVzLg0KPi0gIC8vDQo+LSAg SW5kZXggPSAwOw0KPi0gIHdoaWxlIChUUlVFKSB7DQo+LSAgICAvLw0KPi0gICAgLy8gR2V0IHZh cmlhYmxlIG5hbWUuDQo+LSAgICAvLw0KPi0gICAgVW5pY29kZVNQcmludCAoDQo+LSAgICAgIFZh ck5hbWUsDQo+LSAgICAgIHNpemVvZiAoVmFyTmFtZSksDQo+LSAgICAgIEwiVXNlciUwNHgiLA0K Pi0gICAgICBJbmRleA0KPi0gICAgICApOw0KPi0gICAgSW5kZXgrKzsNCj4tDQo+LSAgICAvLw0K Pi0gICAgLy8gR2V0IHZhcmlhYmxlIHZhbHVlLg0KPi0gICAgLy8NCj4tICAgIFZhclNpemUgPSBD dXJWYXJTaXplOw0KPi0gICAgU3RhdHVzICA9IGdSVC0+R2V0VmFyaWFibGUgKFZhck5hbWUsICZn VXNlcklkZW50aWZ5TWFuYWdlckd1aWQsDQo+JlZhckF0dHIsICZWYXJTaXplLCBWYXJEYXRhKTsN Cj4tICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4tICAgICAgRnJl ZVBvb2wgKFZhckRhdGEpOw0KPi0gICAgICBWYXJEYXRhID0gQWxsb2NhdGVQb29sIChWYXJTaXpl KTsNCj4tICAgICAgaWYgKFZhckRhdGEgPT0gTlVMTCkgew0KPi0gICAgICAgIFN0YXR1cyA9IEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gICAgICAgIGJyZWFrOw0KPi0gICAgICB9DQo+LQ0KPi0g ICAgICBDdXJWYXJTaXplICA9IFZhclNpemU7DQo+LSAgICAgIFN0YXR1cyAgICAgID0gZ1JULT5H ZXRWYXJpYWJsZSAoVmFyTmFtZSwgJmdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCwNCj4mVmFyQXR0 ciwgJlZhclNpemUsIFZhckRhdGEpOw0KPi0gICAgfQ0KPi0NCj4tICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4tICAgICAgaWYgKFN0YXR1cyA9PSBFRklfTk9UX0ZPVU5EKSB7DQo+LSAg ICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+ LSAgICB9DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIENoZWNrIHZhcmlhYmxlIGF0dHJpYnV0ZXMu DQo+LSAgICAvLw0KPi0gICAgaWYgKFZhckF0dHIgIT0gKEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJ TEUgfA0KPkVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1MpKSB7DQo+LSAgICAgIFN0YXR1 cyA9IGdSVC0+U2V0VmFyaWFibGUgKFZhck5hbWUsICZnVXNlcklkZW50aWZ5TWFuYWdlckd1aWQs DQo+VmFyQXR0ciwgMCwgTlVMTCk7DQo+LSAgICAgIGNvbnRpbnVlOw0KPi0gICAgfQ0KPi0NCj4t ICAgIC8vDQo+LSAgICAvLyBBZGQgdXNlciBwcm9maWxlIHRvIHRoZSB1c2VyIHByb2ZpbGUgZGF0 YWJhc2UuDQo+LSAgICAvLw0KPi0gICAgU3RhdHVzID0gQWRkVXNlclByb2ZpbGUgKE5VTEwsIFZh clNpemUsIFZhckRhdGEsIEZBTFNFKTsNCj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4tICAgICAgaWYgKFN0YXR1cyA9PSBFRklfU0VDVVJJVFlfVklPTEFUSU9OKSB7DQo+LSAgICAg ICAgLy8NCj4tICAgICAgICAvLyBEZWxldGUgaW52YWxpZCB1c2VyIHByb2ZpbGUNCj4tICAgICAg ICAvLw0KPi0gICAgICAgIGdSVC0+U2V0VmFyaWFibGUgKFZhck5hbWUsICZnVXNlcklkZW50aWZ5 TWFuYWdlckd1aWQsIFZhckF0dHIsIDAsDQo+TlVMTCk7DQo+LSAgICAgIH0gZWxzZSBpZiAoU3Rh dHVzID09IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKSB7DQo+LSAgICAgICAgYnJlYWs7DQo+LSAgICAg IH0NCj4tICAgIH0gZWxzZSB7DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIERlbGV0ZSBhbmQgc2F2 ZSB0aGUgcHJvZmlsZSBhZ2FpbiBpZiBzb21lIGludmFsaWQgcHJvZmlsZXMgYXJlIGRlbGV0ZWQu DQo+LSAgICAgIC8vDQo+LSAgICAgIGlmIChtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW0g PCBJbmRleCkgew0KPi0gICAgICAgIGdSVC0+U2V0VmFyaWFibGUgKFZhck5hbWUsICZnVXNlcklk ZW50aWZ5TWFuYWdlckd1aWQsIFZhckF0dHIsIDAsDQo+TlVMTCk7DQo+LSAgICAgICAgU2F2ZU52 VXNlclByb2ZpbGUgKG1Vc2VyUHJvZmlsZURiLT5Vc2VyUHJvZmlsZVttVXNlclByb2ZpbGVEYi0N Cj4+VXNlclByb2ZpbGVOdW0gLSAxXSwgRkFMU0UpOw0KPi0gICAgICB9DQo+LSAgICB9DQo+LSAg fQ0KPi0NCj4tICBpZiAoVmFyRGF0YSAhPSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAoVmFyRGF0 YSk7DQo+LSAgfQ0KPi0NCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1 cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayB3aGV0aGVyIHRoZSB1 c2VyIHByb2ZpbGUgZGF0YWJhc2UgaXMgZW1wdHkuDQo+LSAgLy8NCj4tICBpZiAobVVzZXJQcm9m aWxlRGItPlVzZXJQcm9maWxlTnVtID09IDApIHsNCj4tICAgIFN0YXR1cyA9IEFkZERlZmF1bHRV c2VyUHJvZmlsZSAoKTsNCj4tICB9DQo+LQ0KPi0gIHJldHVybiBTdGF0dXM7DQo+LX0NCj4tDQo+ LQ0KPi0vKioNCj4tICBUaGlzIGZ1bmN0aW9uIGNvbGxlY3RzIGFsbCB0aGUgY3JlZGVudGlhbCBw cm92aWRlcnMgYW5kIHNhdmVzIHRvIG1Qcm92aWRlckRiLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgQ29sbGVjdCBjcmVkZW50aWFsIHByb3ZpZGVycyBzdWNjZXNzZnVs bHkuDQo+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIEZhaWwgdG8gY29sbGVjdCBj cmVkZW50aWFsIHByb3ZpZGVycy4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUluaXRQcm92 aWRlckluZm8gKA0KPi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7 DQo+LSAgVUlOVE4gICAgICAgSGFuZGxlQ291bnQ7DQo+LSAgRUZJX0hBTkRMRSAgKkhhbmRsZUJ1 ZjsNCj4tICBVSU5UTiAgICAgICBJbmRleDsNCj4tDQo+LSAgaWYgKG1Qcm92aWRlckRiICE9IE5V TEwpIHsNCj4tICAgIC8vDQo+LSAgICAvLyBUaGUgY3JlZGVudGlhbCBwcm92aWRlcnMgaGFkIGJl ZW4gY29sbGVjdGVkIGJlZm9yZS4NCj4tICAgIC8vDQo+LSAgICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIFRyeSB0byBmaW5kIGFsbCB0aGUgdXNlciBjcmVk ZW50aWFsIHByb3ZpZGVyIGRyaXZlci4NCj4tICAvLw0KPi0gIEhhbmRsZUNvdW50ID0gMDsNCj4t ICBIYW5kbGVCdWYgICA9IE5VTEw7DQo+LSAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZm ZXIgKA0KPi0gICAgICAgICAgICAgICAgICBCeVByb3RvY29sLA0KPi0gICAgICAgICAgICAgICAg ICAmZ0VmaVVzZXJDcmVkZW50aWFsMlByb3RvY29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAg TlVMTCwNCj4tICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPi0gICAgICAgICAgICAg ICAgICAmSGFuZGxlQnVmDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+ LSAgLy8gR2V0IHByb3ZpZGVyIGluZm9tYXRpb24uDQo+LSAgLy8NCj4tICBtUHJvdmlkZXJEYiA9 IEFsbG9jYXRlWmVyb1Bvb2wgKA0KPi0gICAgICAgICAgICAgICAgICBzaXplb2YgKENSRURFTlRJ QUxfUFJPVklERVJfSU5GTykgLQ0KPi0gICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9VU0VS X0NSRURFTlRJQUwyX1BST1RPQ09MICopICsNCj4tICAgICAgICAgICAgICAgICAgSGFuZGxlQ291 bnQgKiBzaXplb2YgKEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICopDQo+LSAgICAgICAg ICAgICAgICAgICk7DQo+LSAgaWYgKG1Qcm92aWRlckRiID09IE5VTEwpIHsNCj4tICAgIEZyZWVQ b29sIChIYW5kbGVCdWYpOw0KPi0gICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0g IH0NCj4tDQo+LSBtUHJvdmlkZXJEYi0+Q291bnQgPSBIYW5kbGVDb3VudDsNCj4tICBmb3IgKElu ZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgrKykgew0KPi0gICAgU3RhdHVzID0g Z0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+LSAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVmW0lu ZGV4XSwNCj4tICAgICAgICAgICAgICAgICAgICAmZ0VmaVVzZXJDcmVkZW50aWFsMlByb3RvY29s R3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJm1Qcm92aWRlckRiLT5Qcm92 aWRlcltJbmRleF0NCj4tICAgICAgICAgICAgICAgICAgICApOw0KPi0gICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPi0gICAgICBGcmVlUG9vbCAoSGFuZGxlQnVmKTsNCj4tICAgICAgRnJl ZVBvb2wgKG1Qcm92aWRlckRiKTsNCj4tICAgICAgbVByb3ZpZGVyRGIgPSBOVUxMOw0KPi0gICAg ICByZXR1cm4gU3RhdHVzOw0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAgRnJlZVBvb2wgKEhhbmRs ZUJ1Zik7DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAg VGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBjYWxsZXIgdG8gZXh0cmFjdCB0aGUgY3VycmVudCBjb25m aWd1cmF0aW9uIGZvciBvbmUNCj4tICBvciBtb3JlIG5hbWVkIGVsZW1lbnRzIGZyb20gdGhlIHRh cmdldCBkcml2ZXIuDQo+LQ0KPi0NCj4tICBAcGFyYW0gVGhpcyAgICAgICAgICAgIFBvaW50cyB0 byB0aGUgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MLg0KPi0gIEBwYXJhbSBSZXF1ZXN0 ICAgICAgICAgQSBudWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcgaW4gPENvbmZpZ1JlcXVl c3Q+DQo+Zm9ybWF0Lg0KPi0gIEBwYXJhbSBQcm9ncmVzcyAgICAgICAgT24gcmV0dXJuLCBwb2lu dHMgdG8gYSBjaGFyYWN0ZXIgaW4gdGhlIFJlcXVlc3Qgc3RyaW5nLg0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBzdHJpbmcncyBudWxsIHRlcm1pbmF0b3IgaWYgcmVx dWVzdCB3YXMgc3VjY2Vzc2Z1bC4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0 byB0aGUgbW9zdCByZWNlbnQgJyYnIGJlZm9yZSB0aGUgZmlyc3QgZmFpbGluZyBuYW1lL3ZhbHVl DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyIChvciB0aGUgYmVnaW5uaW5nIG9mIHRo ZSBzdHJpbmcgaWYgdGhlIGZhaWx1cmUgaXMgaW4gdGhlDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICBmaXJzdCBuYW1lL3ZhbHVlIHBhaXIpIGlmIHRoZSByZXF1ZXN0IHdhcyBub3Qgc3VjY2Vz c2Z1bC4NCj4tICBAcGFyYW0gUmVzdWx0cyAgICAgICAgIEEgbnVsbC10ZXJtaW5hdGVkIFVuaWNv ZGUgc3RyaW5nIGluIDxDb25maWdBbHRSZXNwPg0KPmZvcm1hdCB3aGljaA0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgaGFzIGFsbCB2YWx1ZXMgZmlsbGVkIGluIGZvciB0aGUgbmFtZXMgaW4g dGhlIFJlcXVlc3Qgc3RyaW5nLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRv IGJlIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVkIGZ1bmN0aW9uLg0KPi0NCj4tICBAcmV0dmFsICBF RklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBSZXN1bHRzIGlzIGZpbGxlZCB3aXRoIHRoZSByZXF1 ZXN0ZWQgdmFsdWVzLg0KPi0gIEByZXR2YWwgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgTm90IGVu b3VnaCBtZW1vcnkgdG8gc3RvcmUgdGhlDQo+cmVzdWx0cy4NCj4tICBAcmV0dmFsICBFRklfSU5W QUxJRF9QQVJBTUVURVIgIFJlcXVlc3QgaXMgaWxsZWdhbCBzeW50YXgsIG9yIHVua25vd24NCj5u YW1lLg0KPi0gIEByZXR2YWwgIEVGSV9OT1RfRk9VTkQgICAgICAgICAgUm91dGluZyBkYXRhIGRv ZXNuJ3QgbWF0Y2ggYW55IHN0b3JhZ2UgaW4NCj50aGlzIGRyaXZlci4NCj4tDQo+LSoqLw0KPi1F RklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1GYWtlRXh0cmFjdENvbmZpZyAoDQo+LSAgSU4gIENPTlNU IEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTCAgICpUaGlzLA0KPi0gIElOICBDT05TVCBF RklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0LA0KPi0gIE9VVCBFRklfU1RS SU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUHJvZ3Jlc3MsDQo+LSAgT1VUIEVGSV9T VFJJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpSZXN1bHRzDQo+LSAgKQ0KPi17DQo+ LSAgaWYgKFByb2dyZXNzID09IE5VTEwgfHwgUmVzdWx0cyA9PSBOVUxMKSB7DQo+LSAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tICAqUHJvZ3Jlc3MgPSBSZXF1ZXN0 Ow0KPi0gIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi19DQo+LQ0KPi0vKioNCj4tICBUaGlzIGZ1 bmN0aW9uIHByb2Nlc3NlcyB0aGUgcmVzdWx0cyBvZiBjaGFuZ2VzIGluIGNvbmZpZ3VyYXRpb24u DQo+LQ0KPi0NCj4tICBAcGFyYW0gVGhpcyAgICAgICAgICAgIFBvaW50cyB0byB0aGUgRUZJX0hJ SV9DT05GSUdfQUNDRVNTX1BST1RPQ09MLg0KPi0gIEBwYXJhbSBDb25maWd1cmF0aW9uICAgQSBu dWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcgaW4gPENvbmZpZ1Jlc3A+DQo+Zm9ybWF0Lg0K Pi0gIEBwYXJhbSBQcm9ncmVzcyAgICAgICAgQSBwb2ludGVyIHRvIGEgc3RyaW5nIGZpbGxlZCBp biB3aXRoIHRoZSBvZmZzZXQgb2YgdGhlDQo+bW9zdA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgcmVjZW50ICcmJyBiZWZvcmUgdGhlIGZpcnN0IGZhaWxpbmcgbmFtZS92YWx1ZSBwYWlyIChv ciB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5n IGlmIHRoZSBmYWlsdXJlIGlzIGluIHRoZSBmaXJzdA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgbmFtZS92YWx1ZSBwYWlyKSBvciB0aGUgdGVybWluYXRpbmcgTlVMTCBpZiBhbGwgd2FzIHN1 Y2Nlc3NmdWwuDQo+LQ0KPi0gIEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFJl c3VsdHMgaXMgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsICBFRklfSU5WQUxJ RF9QQVJBTUVURVIgIENvbmZpZ3VyYXRpb24gaXMgTlVMTC4NCj4tICBAcmV0dmFsICBFRklfTk9U X0ZPVU5EICAgICAgICAgIFJvdXRpbmcgZGF0YSBkb2Vzbid0IG1hdGNoIGFueSBzdG9yYWdlIGlu DQo+dGhpcyBkcml2ZXIuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tRmFr ZVJvdXRlQ29uZmlnICgNCj4tICBJTiAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RP Q09MICAgKlRoaXMsDQo+LSAgSU4gIENPTlNUIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAg ICAgIENvbmZpZ3VyYXRpb24sDQo+LSAgT1VUIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpQcm9ncmVzcw0KPi0gICkNCj4tew0KPi0gIGlmIChDb25maWd1cmF0aW9uID09 IE5VTEwgfHwgUHJvZ3Jlc3MgPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gICpQcm9ncmVzcyA9IENvbmZpZ3VyYXRpb247DQo+LQ0K Pi0gIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgVGhpcyBm dW5jdGlvbiBpbml0aWFsaXplIHRoZSBkYXRhIG1haW5seSB1c2VkIGluIGZvcm0gYnJvd3Nlci4N Cj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBJbml0aWFsaXplIGZvcm0gZGF0 YSBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICBGYWlsIHRv IEluaXRpYWxpemUgZm9ybSBkYXRhLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tSW5pdEZv cm1Ccm93c2VyICgNCj4tICBWT0lEDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgIFN0YXR1czsNCj4tICBVU0VSX01BTkFHRVJfQ0FMTEJBQ0tfSU5GTyAgKkNhbGxi YWNrSW5mbzsNCj4tICBFRklfSElJX0RBVEFCQVNFX1BST1RPQ09MICAgKkhpaURhdGFiYXNlOw0K Pi0gIEVGSV9ISUlfU1RSSU5HX1BST1RPQ09MICAgICAqSGlpU3RyaW5nOw0KPi0gIEVGSV9GT1JN X0JST1dTRVIyX1BST1RPQ09MICAqRm9ybUJyb3dzZXIyOw0KPi0NCj4tICAvLw0KPi0gIC8vIElu aXRpYWxpemUgZHJpdmVyIHByaXZhdGUgZGF0YS4NCj4tICAvLw0KPi0gIENhbGxiYWNrSW5mbyA9 IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPihVU0VSX01BTkFHRVJfQ0FMTEJBQ0tfSU5GTykp Ow0KPi0gIGlmIChDYWxsYmFja0luZm8gPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPi0gIH0NCj4tDQo+LSAgQ2FsbGJhY2tJbmZvLT5TaWduYXR1cmUgICAg ICAgICAgICAgICAgICAgPSBVU0VSX01BTkFHRVJfU0lHTkFUVVJFOw0KPi0gIENhbGxiYWNrSW5m by0+Q29uZmlnQWNjZXNzLkV4dHJhY3RDb25maWcgID0gRmFrZUV4dHJhY3RDb25maWc7DQo+LSAg Q2FsbGJhY2tJbmZvLT5Db25maWdBY2Nlc3MuUm91dGVDb25maWcgICAgPSBGYWtlUm91dGVDb25m aWc7DQo+LSAgQ2FsbGJhY2tJbmZvLT5Db25maWdBY2Nlc3MuQ2FsbGJhY2sgICAgICAgPSBVc2Vy SWRlbnRpZnlNYW5hZ2VyQ2FsbGJhY2s7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gTG9jYXRlIEhpaSBE YXRhYmFzZSBwcm90b2NvbC4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9j b2wgKCZnRWZpSGlpRGF0YWJhc2VQcm90b2NvbEd1aWQsIE5VTEwsIChWT0lEDQo+KiopICZIaWlE YXRhYmFzZSk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0 YXR1czsNCj4tICB9DQo+LSAgQ2FsbGJhY2tJbmZvLT5IaWlEYXRhYmFzZSA9IEhpaURhdGFiYXNl Ow0KPi0NCj4tICAvLw0KPi0gIC8vIExvY2F0ZSBIaWlTdHJpbmcgcHJvdG9jb2wuDQo+LSAgLy8N Cj4tICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sICgmZ0VmaUhpaVN0cmluZ1Byb3RvY29s R3VpZCwgTlVMTCwgKFZPSUQgKiopDQo+JkhpaVN0cmluZyk7DQo+LSAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LSAgQ2FsbGJhY2tJbmZv LT5IaWlTdHJpbmcgPSBIaWlTdHJpbmc7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gTG9jYXRlIEZvcm1i cm93c2VyMiBwcm90b2NvbC4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9j b2wgKCZnRWZpRm9ybUJyb3dzZXIyUHJvdG9jb2xHdWlkLCBOVUxMLA0KPihWT0lEICoqKSAmRm9y bUJyb3dzZXIyKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4g U3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgQ2FsbGJhY2tJbmZvLT5Gb3JtQnJvd3NlcjIgID0gRm9y bUJyb3dzZXIyOw0KPi0gIENhbGxiYWNrSW5mby0+RHJpdmVySGFuZGxlICA9IE5VTEw7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gSW5zdGFsbCBEZXZpY2UgUGF0aCBQcm90b2NvbCBhbmQgQ29uZmlnIEFj Y2VzcyBwcm90b2NvbCB0byBkcml2ZXIgaGFuZGxlLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gZ0JT LT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPi0gICAgICAgICAgICAgICAg ICAmQ2FsbGJhY2tJbmZvLT5Ecml2ZXJIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICZnRWZp RGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgJm1IaWlWZW5kb3JE ZXZpY2VQYXRoLA0KPi0gICAgICAgICAgICAgICAgICAmZ0VmaUhpaUNvbmZpZ0FjY2Vzc1Byb3Rv Y29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgJkNhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNz LA0KPi0gICAgICAgICAgICAgICAgICBOVUxMDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAg QVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBQdWJsaXNoIEhJ SSBkYXRhLg0KPi0gIC8vDQo+LSAgQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUgPSBIaWlBZGRQYWNr YWdlcyAoDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnVXNlcklkZW50aWZ5TWFu YWdlckd1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrSW5mby0+ RHJpdmVySGFuZGxlLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySWRlbnRp ZnlNYW5hZ2VyU3RyaW5ncywNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklk ZW50aWZ5TWFuYWdlclZmckJpbiwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gIGlmIChDYWxsYmFja0lu Zm8tPkhpaUhhbmRsZSA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQo+LSAgfQ0KPi0NCj4tICBtQ2FsbGJhY2tJbmZvID0gQ2FsbGJhY2tJbmZvOw0KPi0NCj4t ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBJZGVudGlmeSB0 aGUgdXNlciB3aG9zZSBpZGVudGlmaWNhdGlvbiBwb2xpY3kgc3VwcG9ydHMgYXV0byBsb2dvbi4N Cj4tDQo+LSAgQHBhcmFtW2luXSAgIFByb3ZpZGVySW5kZXggICBUaGUgcHJvdmlkZXIgaW5kZXgg aW4gdGhlIHByb3ZpZGVyIGxpc3QuDQo+LSAgQHBhcmFtW291dF0gIFVzZXIgICAgICAgICAgICBQ b2ludHMgdG8gdXNlciB1c2VyIHByb2ZpbGUgaWYgYSB1c2VyIGlzIGlkZW50aWZpZWQNCj5zdWNj ZXNzZnVsbHkuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgSWRlbnRpZnkg YSB1c2VyIHdpdGggdGhlIHNwZWNpZmllZCBwcm92aWRlcg0KPnN1Y2Nlc3NmdWxseS4NCj4tICBA cmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIEZhaWwgdG8gaWRlbnRpZnkgYSB1c2VyLg0KPi0N Cj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tSWRlbnRpZnlBdXRvTG9nb25Vc2VyICgNCj4tICBJTiAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXJJbmRleCwN Cj4tICBPVVQgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgKipVc2Vy DQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5G TyAqSW5mbzsNCj4tICBVSU5UOCAgICAgICAgIFBvbGljeVR5cGU7DQo+LQ0KPi0gIEluZm8gPSBB bGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgc2l6ZW9mDQo+KEVGSV9V U0VSX0lORk9fSURFTlRJRklFUikpOw0KPi0gIGlmIChJbmZvID09IE5VTEwpIHsNCj4tICAgIHJl dHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9DQo+LQ0KPi0gIEluZm8tPkluZm9UeXBl ICA9IEVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQ7DQo+LSAgSW5mby0+SW5mb1NpemUg ID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZg0KPihFRklfVVNFUl9JTkZPX0lERU5U SUZJRVIpOw0KPi0NCj4tICAvLw0KPi0gIC8vIElkZW50aWZ5IHRoZSBzcGVjaWZpZWQgY3JlZGVu dGlhbCBwcm92aWRlcidzIGF1dG8gbG9nb24gdXNlci4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IG1Q cm92aWRlckRiLT5Qcm92aWRlcltQcm92aWRlckluZGV4XS0+VXNlciAoDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Qcm92aWRlckRiLT5Qcm92 aWRlcltQcm92aWRlckluZGV4XSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKEVGSV9VU0VSX0lORk9fSURFTlRJRklFUiAqKSAoSW5mbyAr IDEpDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgRnJlZVBvb2wgKEluZm8p Ow0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRmluZCB1 c2VyIHdpdGggdGhlIHNwZWNpZmllZCB1c2VyIElELg0KPi0gIC8vDQo+LSAgKlVzZXIgICA9IE5V TEw7DQo+LSAgU3RhdHVzICA9IEZpbmRVc2VyUHJvZmlsZUJ5SW5mbyAoVXNlciwgTlVMTCwgSW5m bywgSW5mby0+SW5mb1NpemUpOw0KPi0gIEZyZWVQb29sIChJbmZvKTsNCj4tICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgU3Rh dHVzID0gR2V0SWRlbnRpZnlUeXBlICgoRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUpICogVXNlciwN Cj4mUG9saWN5VHlwZSk7DQo+LSAgaWYgKFBvbGljeVR5cGUgPT0gRUZJX1VTRVJfSU5GT19JREVO VElUWV9BTkQpIHsNCj4tICAgIC8vDQo+LSAgICAvLyBUaGUgaWRlbnRpZmllZCB1c2VyIG5lZWQg YWxzbyBpZGVudGlmaWVkIGJ5IG90aGVyIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LSAgICAvLyBU aGlzIGNhbiBoYW5kbGUgdGhyb3VnaCBzZWxlY3QgdXNlci4NCj4tICAgIC8vDQo+LSAgICByZXR1 cm4gRUZJX05PVF9SRUFEWTsNCj4tICB9DQo+LQ0KPi0gIHJldHVybiBTdGF0dXM7DQo+LX0NCj4t DQo+LQ0KPi0vKioNCj4tICBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb25zb2xlIGlzIHJlYWR5 Lg0KPi0NCj4tICBAcGFyYW1baW5dICAgUHJvdG9jb2xHdWlkICAgUG9pbnRzIHRvIHRoZSBwcm90 b2NvbCBndWlkIG9mIHNvbnNvbGUgLg0KPi0NCj4tICBAcmV0dmFsIFRSVUUgICAgIFRoZSBnaXZl biBjb25zb2xlIGlzIHJlYWR5Lg0KPi0gIEByZXR2YWwgRkFMU0UgICAgVGhlIGdpdmVuIGNvbnNv bGUgaXMgbm90IHJlYWR5Lg0KPi0NCj4tKiovDQo+LUJPT0xFQU4NCj4tQ2hlY2tDb25zb2xlICgN Cj4tICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICpQcm90b2NvbEd1aWQNCj4tICApDQo+ LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4tICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUNvdW50Ow0KPi0gIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgKkhhbmRsZUJ1ZjsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPi0gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKkRldmljZVBhdGg7DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gVHJ5IHRvIGZpbmQgYWxsIHRoZSBoYW5kbGUgZHJpdmVyLg0KPi0g IC8vDQo+LSAgSGFuZGxlQ291bnQgPSAwOw0KPi0gIEhhbmRsZUJ1ZiAgID0gTlVMTDsNCj4tICBT dGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQo+LSAgICAgICAgICAgICAgICAgIEJ5 UHJvdG9jb2wsDQo+LSAgICAgICAgICAgICAgICAgIFByb3RvY29sR3VpZCwNCj4tICAgICAgICAg ICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPi0gICAg ICAgICAgICAgICAgICAmSGFuZGxlQnVmDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIEZBTFNFOw0KPi0gIH0NCj4tDQo+ LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCj4tICAg IERldmljZVBhdGggPSBEZXZpY2VQYXRoRnJvbUhhbmRsZSAoSGFuZGxlQnVmW0luZGV4XSk7DQo+ LSAgICBpZiAoRGV2aWNlUGF0aCAhPSBOVUxMKSB7DQo+LSAgICAgIEZyZWVQb29sIChIYW5kbGVC dWYpOw0KPi0gICAgICByZXR1cm4gVFJVRTsNCj4tICAgIH0NCj4tICB9DQo+LSAgRnJlZVBvb2wg KEhhbmRsZUJ1Zik7DQo+LSAgcmV0dXJuIEZBTFNFOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAg Q2hlY2sgd2hldGhlciB0aGUgY29uc29sZSBpcyByZWFkeS4NCj4tDQo+LSAgQHJldHZhbCBUUlVF ICAgICBUaGUgY29uc29sZSBpcyByZWFkeS4NCj4tICBAcmV0dmFsIEZBTFNFICAgIFRoZSBjb25z b2xlIGlzIG5vdCByZWFkeS4NCj4tDQo+LSoqLw0KPi1CT09MRUFODQo+LUlzQ29uc29sZVJlYWR5 ICgNCj4tICBWT0lEDQo+LSAgKQ0KPi17DQo+LSAgaWYgKCFDaGVja0NvbnNvbGUgKCZnRWZpU2lt cGxlVGV4dE91dFByb3RvY29sR3VpZCkpIHsNCj4tICAgIHJldHVybiBGQUxTRTsNCj4tICB9DQo+ LQ0KPi0gIGlmICghQ2hlY2tDb25zb2xlICgmZ0VmaVNpbXBsZVRleHRJblByb3RvY29sR3VpZCkp IHsNCj4tICAgIGlmICghQ2hlY2tDb25zb2xlICgmZ0VmaVNpbXBsZVRleHRJbnB1dEV4UHJvdG9j b2xHdWlkKSkgew0KPi0gICAgcmV0dXJuIEZBTFNFOw0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAg cmV0dXJuIFRSVUU7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBJZGVudGlmeSBhIHVzZXIgdG8g bG9nb24uDQo+LQ0KPi0gIEBwYXJhbVtvdXRdICBVc2VyICAgICAgICAgIFBvaW50cyB0byB1c2Vy IHVzZXIgcHJvZmlsZSBpZiBhIHVzZXIgaXMgaWRlbnRpZmllZA0KPnN1Y2Nlc3NmdWxseS4NCj4t DQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgSWRlbnRpZnkgYSB1c2VyIHN1Y2Nlc3Nm dWxseS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUlkZW50aWZ5VXNlciAoDQo+LSAgT1VU IFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICoqVXNlcg0KPi0gICkN Cj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4tICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4tICBFRklfQ1JFREVOVElBTF9MT0dP Tl9GTEFHUyAgICBBdXRvTG9nb247DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAg KklkZW50aWZ5SW5mbzsNCj4tICBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAqSWRlbnRp dHk7DQo+LSAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgKlVzZXJDcmVkZW50aWFsOw0K Pi0gIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICpVc2VyRW50cnk7DQo+LQ0KPi0gIC8v DQo+LSAgLy8gSW5pdGlhbGl6ZSBjcmVkZW50aWFsIHByb3ZpZGVycy4NCj4tICAvLw0KPi0gIElu aXRQcm92aWRlckluZm8gKCk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5pdGlhbGl6ZSB1c2VyIHBy b2ZpbGUgZGF0YWJhc2UuDQo+LSAgLy8NCj4tICBJbml0VXNlclByb2ZpbGVEYiAoKTsNCj4tDQo+ LSAgLy8NCj4tICAvLyBJZiBvbmx5IG9uZSB1c2VyIGluIHN5c3RlbSwgYW5kIGl0cyBpZGVudGlm eSBwb2xpY3kgaXMgVFJVRSwgdGhlbiBhdXRvIGxvZ29uLg0KPi0gIC8vDQo+LSAgaWYgKG1Vc2Vy UHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bSA9PSAxKSB7DQo+LSAgICBVc2VyRW50cnkgICAgID0g KFVTRVJfUFJPRklMRV9FTlRSWSAqKSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVbMF07DQo+ LSAgICBJZGVudGlmeUluZm8gID0gTlVMTDsNCj4tICAgIFN0YXR1cyAgICAgICAgPSBGaW5kVXNl ckluZm9CeVR5cGUgKFVzZXJFbnRyeSwgJklkZW50aWZ5SW5mbywNCj5FRklfVVNFUl9JTkZPX0lE RU5USVRZX1BPTElDWV9SRUNPUkQpOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K Pi0gICAgICByZXR1cm4gU3RhdHVzOw0KPi0gICAgfQ0KPi0gICAgQVNTRVJUIChJZGVudGlmeUlu Zm8gIT0gTlVMTCk7DQo+LQ0KPi0gICAgSWRlbnRpdHkgPSAoRUZJX1VTRVJfSU5GT19JREVOVElU WV9QT0xJQ1kgKikgKChVSU5UOCAqKSAoSWRlbnRpZnlJbmZvICsNCj4xKSk7DQo+LSAgICBpZiAo SWRlbnRpdHktPlR5cGUgPT0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9UUlVFKSB7DQo+LSAgICAg IG1DdXJyZW50VXNlciA9IChFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSkgVXNlckVudHJ5Ow0KPi0g ICAgICBVcGRhdGVVc2VySW5mbyAoVXNlckVudHJ5KTsNCj4tICAgICAgKlVzZXIgPSBVc2VyRW50 cnk7DQo+LSAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0g IC8vDQo+LSAgLy8gRmluZCBhbmQgbG9naW4gdGhlIGRlZmF1bHQgJiBBdXRvTG9nb24gdXNlci4N Cj4tICAvLw0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qcm92aWRlckRiLT5Db3VudDsg SW5kZXgrKykgew0KPi0gICAgVXNlckNyZWRlbnRpYWwgPSBtUHJvdmlkZXJEYi0+UHJvdmlkZXJb SW5kZXhdOw0KPi0gICAgU3RhdHVzID0gVXNlckNyZWRlbnRpYWwtPkRlZmF1bHQgKFVzZXJDcmVk ZW50aWFsLCAmQXV0b0xvZ29uKTsNCj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4t ICAgICAgY29udGludWU7DQo+LSAgICB9DQo+LQ0KPi0gICAgaWYgKChBdXRvTG9nb24gJiAoRUZJ X0NSRURFTlRJQUxfTE9HT05fRkxBR19ERUZBVUxUIHwNCj5FRklfQ1JFREVOVElBTF9MT0dPTl9G TEFHX0FVVE8pKSAhPSAwKSB7DQo+LSAgICAgIFN0YXR1cyA9IElkZW50aWZ5QXV0b0xvZ29uVXNl ciAoSW5kZXgsICZVc2VyRW50cnkpOw0KPi0gICAgICBpZiAoU3RhdHVzID09IEVGSV9TVUNDRVNT KSB7DQo+LSAgICAgICAgbUN1cnJlbnRVc2VyID0gKEVGSV9VU0VSX1BST0ZJTEVfSEFORExFKSBV c2VyRW50cnk7DQo+LSAgICAgICAgVXBkYXRlVXNlckluZm8gKFVzZXJFbnRyeSk7DQo+LSAgICAg ICAgKlVzZXIgPSBVc2VyRW50cnk7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0g ICAgICB9DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICBpZiAoIUlzQ29uc29sZVJlYWR5ICgpKSB7 DQo+LSAgICAvLw0KPi0gICAgLy8gVGhlIGNvbnNvbGUgaXMgc3RpbGwgbm90IHJlYWR5IGZvciB1 c2VyIHNlbGVjdGlvbi4NCj4tICAgIC8vDQo+LSAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7 DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIFNlbGVjdCBhIHVzZXIgYW5kIGlkZW50aWZ5IGl0 Lg0KPi0gIC8vDQo+LSAgbUNhbGxiYWNrSW5mby0+Rm9ybUJyb3dzZXIyLT5TZW5kRm9ybSAoDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFja0luZm8tPkZvcm1Ccm93 c2VyMiwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1DYWxsYmFja0luZm8t PkhpaUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCwN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0NCj4tICBp ZiAobUlkZW50aWZpZWQpIHsNCj4tICAgICpVc2VyID0gKFVTRVJfUFJPRklMRV9FTlRSWSAqKSBt Q3VycmVudFVzZXI7DQo+LSAgICBVcGRhdGVVc2VySW5mbyAoKlVzZXIpOw0KPi0gICAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPi0gIH0NCj4tDQo+LSAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEOw0K Pi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQW4gZW1wdHkgZnVuY3Rpb24gdG8gcGFzcyBlcnJvciBj aGVja2luZyBvZiBDcmVhdGVFdmVudEV4ICgpLg0KPi0NCj4tICBAcGFyYW0gIEV2ZW50ICAgICAg ICAgRXZlbnQgd2hvc2Ugbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuDQo+ LSAgQHBhcmFtICBDb250ZXh0ICAgICAgIFBvaW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5j dGlvbidzIGNvbnRleHQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGltcGxl bWVudGF0aW9uLWRlcGVuZGVudC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUVGSUFQSQ0KPi1JbnRl cm5hbEVtcHR5RnVudGlvbiAoDQo+LSAgSU4gRUZJX0VWRU5UICAgICAgICAgICAgICAgIEV2ZW50 LA0KPi0gIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAqQ29udGV4dA0KPi0gICkNCj4tew0K Pi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQ3JlYXRlLCBTaWduYWwsIGFuZCBDbG9zZSB0aGUgVXNl ciBQcm9maWxlIENoYW5nZWQgZXZlbnQuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1TaWduYWxFdmVu dFVzZXJQcm9maWxlQ2hhbmdlZCAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFU VVMgICAgU3RhdHVzOw0KPi0gIEVGSV9FVkVOVCAgICAgRXZlbnQ7DQo+LQ0KPi0gIFN0YXR1cyA9 IGdCUy0+Q3JlYXRlRXZlbnRFeCAoDQo+LSAgICAgICAgICAgICAgICAgIEVWVF9OT1RJRllfU0lH TkFMLA0KPi0gICAgICAgICAgICAgICAgICBUUExfQ0FMTEJBQ0ssDQo+LSAgICAgICAgICAgICAg ICAgIEludGVybmFsRW1wdHlGdW50aW9uLA0KPi0gICAgICAgICAgICAgICAgICBOVUxMLA0KPi0g ICAgICAgICAgICAgICAgICAmZ0VmaUV2ZW50VXNlclByb2ZpbGVDaGFuZ2VkR3VpZCwNCj4tICAg ICAgICAgICAgICAgICAgJkV2ZW50DQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgQVNTRVJU X0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4tICBnQlMtPlNpZ25hbEV2ZW50IChFdmVudCk7DQo+LSAg Z0JTLT5DbG9zZUV2ZW50IChFdmVudCk7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBDcmVhdGUg YSBuZXcgdXNlciBwcm9maWxlLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcg dXNlciBwcm9maWxlIHdpdGggb25seSBhIG5ldyB1c2VyIGlkZW50aWZpZXINCj5hdHRhY2hlZCBh bmQgcmV0dXJucw0KPi0gIGl0cyBoYW5kbGUuIFRoZSB1c2VyIHByb2ZpbGUgaXMgbm9uLXZvbGF0 aWxlLCBidXQgdGhlIGhhbmRsZSBVc2VyIGNhbiBjaGFuZ2UNCj5hY3Jvc3MgcmVib290cy4NCj4t DQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3Rh bmNlIG9mIHRoZQ0KPkVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW291dF0g VXNlciAgICAgICAgICAgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSBuZXcgdXNlciBwcm9m aWxlIGhhbmRsZS4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHVzZXIg cHJvZmlsZSBoYW5kbGUgaXMgdW5pcXVlIG9ubHkgZHVyaW5nIHRoaXMgYm9vdC4NCj4tDQo+LSAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFVzZXIgcHJvZmlsZSB3YXMgc3VjY2Vzc2Z1 bGx5IGNyZWF0ZWQuDQo+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgIEN1cnJlbnQg dXNlciBkb2VzIG5vdCBoYXZlIHN1ZmZpY2llbnQNCj5wZXJtaXNzaW9ucyB0byBjcmVhdGUgYQ0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByb2ZpbGUuDQo+LSAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIENyZWF0aW9uIG9mIG5ldyB1c2VyIHByb2ZpbGVz IGlzIG5vdA0KPnN1cHBvcnRlZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAg VGhlIFVzZXIgcGFyYW1ldGVyIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1F RklBUEkNCj4tVXNlclByb2ZpbGVDcmVhdGUgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5B R0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywNCj4tICBPVVQgICAgICAgRUZJX1VTRVJfUFJP RklMRV9IQU5ETEUgICAgICAgICAgICAgKlVzZXINCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVT ICBTdGF0dXM7DQo+LQ0KPi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoVXNlciA9PSBOVUxMKSkg ew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8v DQo+LSAgLy8gQ2hlY2sgdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHVzZXIuDQo+LSAgLy8NCj4t ICBpZiAoIUNoZWNrQ3VycmVudFVzZXJBY2Nlc3NSaWdodCAoRUZJX1VTRVJfSU5GT19BQ0NFU1Nf TUFOQUdFKSkgew0KPi0gICAgaWYgKCFDaGVja0N1cnJlbnRVc2VyQWNjZXNzUmlnaHQNCj4oRUZJ X1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX09USEVSUykpIHsNCj4tICAgICAgcmV0dXJuIEVGSV9B Q0NFU1NfREVOSUVEOw0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBDcmVhdGUg bmV3IHVzZXIgcHJvZmlsZQ0KPi0gIC8vDQo+LSAgU3RhdHVzID0gQ3JlYXRlVXNlclByb2ZpbGUg KChVU0VSX1BST0ZJTEVfRU5UUlkgKiopIFVzZXIpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4tICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4tICB9DQo+LSAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRGVsZXRlIGFuIGV4aXN0aW5n IHVzZXIgcHJvZmlsZS4NCj4tDQo+LSAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgICAgICAgIFBv aW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wu DQo+LSAgQHBhcmFtW2luXSBVc2VyICAgICAgICAgICAgICAgIFVzZXIgcHJvZmlsZSBoYW5kbGUu DQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2Fz IHN1Y2Nlc3NmdWxseSBkZWxldGVkLg0KPi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAg ICBDdXJyZW50IHVzZXIgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50DQo+cGVybWlzc2lvbnMgdG8g ZGVsZXRlIGEgdXNlcg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxl IG9yIHRoZXJlIGlzIG9ubHkgb25lIHVzZXIgcHJvZmlsZS4NCj4tICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICAgRGVsZXRpb24gb2YgbmV3IHVzZXIgcHJvZmlsZXMgaXMgbm90DQo+c3Vw cG9ydGVkLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2VyIGRvZXMgbm90 IHJlZmVyIHRvIGEgdmFsaWQgdXNlcg0KPnByb2ZpbGUuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRV Uw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVEZWxldGUgKA0KPi0gIElOIENPTlNUICBFRklfVVNF Ul9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywNCj4tICBJTiAgICAgICAgRUZJX1VT RVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgVXNlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9T VEFUVVMgIFN0YXR1czsNCj4tDQo+LSAgaWYgKFRoaXMgPT0gTlVMTCkgew0KPi0gICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sg dGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHVzZXIuDQo+LSAgLy8NCj4tICBpZiAoIUNoZWNrQ3Vy cmVudFVzZXJBY2Nlc3NSaWdodCAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFKSkgew0KPi0g ICAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBE ZWxldGUgdXNlciBwcm9maWxlLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gRGVsVXNlclByb2ZpbGUg KFVzZXIpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIGlmIChTdGF0dXMg IT0gRUZJX0lOVkFMSURfUEFSQU1FVEVSKSB7DQo+LSAgICAgIHJldHVybiBFRklfQUNDRVNTX0RF TklFRDsNCj4tICAgIH0NCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAg fQ0KPi0NCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBF bnVtZXJhdGUgYWxsIG9mIHRoZSBlbnJvbGxlZCB1c2VycyBvbiB0aGUgcGxhdGZvcm0uDQo+LQ0K Pi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV4dCBlbnJvbGxlZCB1c2VyIHByb2ZpbGUu IFRvIHJldHJpZXZlIHRoZSBmaXJzdCB1c2VyDQo+cHJvZmlsZSBoYW5kbGUsDQo+LSAgcG9pbnQg VXNlciBhdCBhIE5VTEwuIEVhY2ggc3Vic2VxdWVudCBjYWxsIHdpbGwgcmV0cmlldmUgYW5vdGhl ciB1c2VyIHByb2ZpbGUNCj5oYW5kbGUgdW50aWwgdGhlcmUNCj4tICBhcmUgbm8gbW9yZSwgYXQg d2hpY2ggcG9pbnQgVXNlciB3aWxsIHBvaW50IHRvIE5VTEwuDQo+LQ0KPi0gIEBwYXJhbVtpbl0g ICAgICBUaGlzICAgICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklf VVNFUl9NQU5BR0VSX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VyICAgICAgICAg ICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBwcmV2aW91cyB1c2VyIHByb2ZpbGUNCj5oYW5kbGUg b3IgTlVMTCB0bw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCBlbnVt ZXJhdGlvbi4gT24gZXhpdCwgcG9pbnRzIHRvIHRoZSBuZXh0IHVzZXIgcHJvZmlsZQ0KPmhhbmRs ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBOVUxMIGlmIHRoZXJlIGFy ZSBubyBtb3JlIHVzZXIgcHJvZmlsZXMuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBOZXh0IGVucm9sbGVkIHVzZXIgcHJvZmlsZSBzdWNjZXNzZnVsbHkgcmV0dXJuZWQu DQo+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgIE5leHQgZW5yb2xsZWQgdXNlciBw cm9maWxlIHdhcyBub3QNCj5zdWNjZXNzZnVsbHkgcmV0dXJuZWQuDQo+LSAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgIFRoZSBVc2VyIHBhcmFtZXRlciBpcyBOVUxMLg0KPi0qKi8NCj4t RUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVHZXROZXh0ICgNCj4tICBJTiBDT05T VCAgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+LSAgSU4gT1VU ICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgICpVc2VyDQo+LSAgKQ0KPi17 DQo+LSAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPi0NCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwg KFVzZXIgPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ LSAgfQ0KPi0NCj4tICBTdGF0dXMgPSBGaW5kVXNlclByb2ZpbGUgKChVU0VSX1BST0ZJTEVfRU5U UlkgKiopIFVzZXIsIFRSVUUsIE5VTEwpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4tICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgUmV0dXJuIHRoZSBjdXJyZW50IHVzZXIg cHJvZmlsZSBoYW5kbGUuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICBQ b2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9NQU5BR0VSX1BST1RPQ09M Lg0KPi0gIEBwYXJhbVtvdXRdIEN1cnJlbnRVc2VyICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0 byB0aGUgY3VycmVudCB1c2VyIHByb2ZpbGUNCj5oYW5kbGUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICBDdXJyZW50IHVzZXIgcHJvZmlsZSBoYW5kbGUgcmV0dXJuZWQg c3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGUgQ3Vy cmVudFVzZXIgcGFyYW1ldGVyIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1F RklBUEkNCj4tVXNlclByb2ZpbGVDdXJyZW50ICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfTUFO QUdFUl9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+LSAgT1VUICAgICAgIEVGSV9VU0VSX1BS T0ZJTEVfSEFORExFICAgICAgICAgICAgICpDdXJyZW50VXNlcg0KPi0gICkNCj4tew0KPi0gIC8v DQo+LSAgLy8gR2V0IGN1cnJlbnQgdXNlciBwcm9maWxlLg0KPi0gIC8vDQo+LSAgaWYgKChUaGlz ID09IE5VTEwpIHx8IChDdXJyZW50VXNlciA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gICpDdXJyZW50VXNlciA9IG1DdXJyZW50 VXNlcjsNCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBJ ZGVudGlmeSBhIHVzZXIuDQo+LQ0KPi0gIElkZW50aWZ5IHRoZSB1c2VyIGFuZCwgaWYgYXV0aGVu dGljYXRlZCwgcmV0dXJucyB0aGUgdXNlciBoYW5kbGUgYW5kIGNoYW5nZXMNCj50aGUgY3VycmVu dA0KPi0gIHVzZXIgcHJvZmlsZS4gQWxsIHVzZXIgaW5mb3JtYXRpb24gbWFya2VkIGFzIHByaXZh dGUgaW4gYSBwcmV2aW91c2x5IHNlbGVjdGVkDQo+cHJvZmlsZQ0KPi0gIGlzIG5vIGxvbmdlciBh dmFpbGFibGUgZm9yIGluc3BlY3Rpb24uDQo+LSAgV2hlbmV2ZXIgdGhlIGN1cnJlbnQgdXNlciBw cm9maWxlIGlzIGNoYW5nZWQgdGhlbiB0aGUgYW4gZXZlbnQgd2l0aCB0aGUNCj5HVUlEDQo+LSAg RUZJX0VWRU5UX0dST1VQX1VTRVJfUFJPRklMRV9DSEFOR0VEIGlzIHNpZ25hbGVkLg0KPi0NCj4t ICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ug b2YgdGhlDQo+RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTC4NCj4tICBAcGFyYW1bb3V0XSBVc2Vy ICAgICAgICAgICAgICAgT24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIHVzZXIgcHJvZmlsZSBoYW5k bGUgZm9yDQo+dGhlIGN1cnJlbnQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dXNlciBwcm9maWxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNl ciB3YXMgc3VjY2Vzc2Z1bGx5IGlkZW50aWZpZWQuDQo+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RF TklFRCAgICAgIFVzZXIgd2FzIG5vdCBzdWNjZXNzZnVsbHkgaWRlbnRpZmllZC4NCj4tICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVGhlIFVzZXIgcGFyYW1ldGVyIGlzIE5VTEwuDQo+ LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVJZGVudGlmeSAo DQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICAgICpUaGlz LA0KPi0gIE9VVCAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAqVXNl cg0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tDQo+LSAgaWYgKChUaGlz ID09IE5VTEwpIHx8IChVc2VyID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgaWYgKG1DdXJyZW50VXNlciAhPSBOVUxMKSB7DQo+ LSAgICAqVXNlciA9IG1DdXJyZW50VXNlcjsNCj4tICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4t ICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSWRlbnRpZnkgdXNlcg0KPi0gIC8vDQo+LSAgU3RhdHVz ID0gSWRlbnRpZnlVc2VyICgoVVNFUl9QUk9GSUxFX0VOVFJZICoqKSBVc2VyKTsNCj4tICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+ LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIFB1Ymxpc2ggdGhlIHVzZXIgaW5mbyBpbnRvIHRoZSBF Rkkgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdGFibGUuDQo+LSAgLy8NCj4tICBQdWJsaXNoVXNlclRh YmxlICgpOw0KPi0NCj4tICAvLw0KPi0gIC8vIFNpZ25hbCBVc2VyIFByb2ZpbGUgQ2hhbmdlZCBl dmVudC4NCj4tICAvLw0KPi0gIFNpZ25hbEV2ZW50VXNlclByb2ZpbGVDaGFuZ2VkICgpOw0KPi0g IHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tLyoqDQo+LSAgRmluZCBhIHVzZXIgdXNp bmcgYSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZC4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBzZWFy Y2hlcyBhbGwgdXNlciBwcm9maWxlcyBmb3IgdGhlIHNwZWNpZmllZCB1c2VyIGluZm9ybWF0aW9u DQo+cmVjb3JkLg0KPi0gIFRoZSBzZWFyY2ggc3RhcnRzIHdpdGggdGhlIHVzZXIgaW5mb3JtYXRp b24gcmVjb3JkIGhhbmRsZSBmb2xsb3dpbmcNCj5Vc2VySW5mbyBhbmQNCj4tICBjb250aW51ZXMg dW50aWwgZWl0aGVyIHRoZSBpbmZvcm1hdGlvbiBpcyBmb3VuZCBvciB0aGVyZSBhcmUgbm8gbW9y ZSB1c2VyDQo+cHJvZmlsZXMuDQo+LSAgQSBtYXRjaCBvY2N1cnMgd2hlbiB0aGUgSW5mby5JbmZv VHlwZSBmaWVsZCBtYXRjaGVzIHRoZSB1c2VyIGluZm9ybWF0aW9uDQo+cmVjb3JkDQo+LSAgdHlw ZSBhbmQgdGhlIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIGRhdGEgbWF0Y2hlcyB0aGUgcG9ydGlv biBvZiBJbmZvLg0KPi0NCj4tICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAgICAgICAgUG9pbnRz IHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTC4NCj4t ICBAcGFyYW1baW4sIG91dF0gVXNlciAgICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byB0aGUg cHJldmlvdXNseSByZXR1cm5lZCB1c2VyDQo+cHJvZmlsZQ0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBoYW5kbGUsIG9yIE5VTEwgdG8gc3RhcnQgc2VhcmNoaW5nIHdpdGggdGhl IGZpcnN0IHVzZXIgcHJvZmlsZS4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUsIG9yIE5VTEwgaWYg bm90DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLg0KPi0gIEBwYXJh bVtpbiwgb3V0XSBVc2VySW5mbyAgICAgICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBwcmV2aW91 c2x5IHJldHVybmVkDQo+dXNlciBpbmZvcm1hdGlvbg0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBoYW5kbGUsIG9yIE5VTEwgdG8gc3RhcnQgc2VhcmNoaW5nIHdpdGggdGhlIGZp cnN0LiBPbiByZXR1cm4sDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50 cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiBoYW5kbGUgb2YgdGhlIHVzZXINCj5pbmZvcm1hdGlv bg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQsIG9yIE5VTEwgaWYg bm90IGZvdW5kLiBDYW4gYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBvbmx5DQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9uZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBwZXIgdXNl ciBjYW4gYmUgcmV0dXJuZWQuDQo+LSAgQHBhcmFtW2luXSAgICAgIEluZm8gICAgICAgICAgIFBv aW50cyB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHVzZXIgaW5mb3JtYXRpb24NCj50byBi ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB0byB0aGUgdXNl ciBpbmZvcm1hdGlvbiByZWNvcmQuIElmIHRoZSB1c2VyDQo+aW5mb3JtYXRpb24NCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkIGRhdGEgaXMgZW1wdHksIHRoZW4gb25s eSB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQNCj50eXBlDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlzIGNvbXBhcmVkLiBJZiBJbmZvU2l6ZSBpcyAwLCB0aGVuIHRoZSB1 c2VyIGluZm9ybWF0aW9uIHJlY29yZA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtdXN0IGJlIGVtcHR5Lg0KPi0NCj4tICBAcGFyYW1baW5dICAgICAgSW5mb1NpemUgICAgICAg VGhlIHNpemUgb2YgSW5mbywgaW4gYnl0ZXMuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICBVc2VyIGluZm9ybWF0aW9uIHdhcyBmb3VuZC4gVXNlciBwb2ludHMgdG8gdGhl DQo+dXNlciBwcm9maWxlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRs ZSwgYW5kIFVzZXJJbmZvIHBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiBoYW5kbGUuDQo+ LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIFVzZXIgaW5mb3JtYXRpb24gd2FzIG5v dCBmb3VuZC4gVXNlciBwb2ludHMNCj50byBOVUxMLCBhbmQNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVXNlckluZm8gcG9pbnRzIHRvIE5VTEwuDQo+LSAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgIFVzZXIgaXMgTlVMTC4gT3IgSW5mbyBpcyBOVUxMLg0KPi0NCj4t KiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlRmluZCAoDQo+LSAgSU4g ICAgIENPTlNUIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICpUaGlzLA0KPi0gIElO IE9VVCBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAqVXNlciwNCj4tICBJ TiBPVVQgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAgICAgICAgKlVzZXJJbmZvIE9Q VElPTkFMLA0KPi0gIElOICAgICBDT05TVCBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAg ICAqSW5mbywNCj4tICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW5mb1NpemUNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LSAgVUlO VE4gICAgICAgU2l6ZTsNCj4tDQo+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChVc2VyID09IE5V TEwpIHx8IChJbmZvID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KPi0gIH0NCj4tDQo+LSAgaWYgKEluZm9TaXplID09IDApIHsNCj4tICAgIC8vDQo+LSAg ICAvLyBJZiBJbmZvU2l6ZSBpcyAwLCB0aGVuIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBt dXN0IGJlIGVtcHR5Lg0KPi0gICAgLy8NCj4tICAgIGlmIChJbmZvLT5JbmZvU2l6ZSAhPSBzaXpl b2YgKEVGSV9VU0VSX0lORk8pKSB7DQo+LSAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQo+LSAgICB9DQo+LSAgfSBlbHNlIHsNCj4tICAgIGlmIChJbmZvU2l6ZSAhPSBJbmZvLT5J bmZvU2l6ZSkgew0KPi0gICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gICAg fQ0KPi0gIH0NCj4tICBTaXplID0gSW5mby0+SW5mb1NpemU7DQo+LQ0KPi0gIC8vDQo+LSAgLy8g RmluZCB1c2VyIHByb2ZpbGUgYWNjZG9yaW5nIHRvIHVzZXIgaW5mb3JtYXRpb24uDQo+LSAgLy8N Cj4tICBTdGF0dXMgPSBGaW5kVXNlclByb2ZpbGVCeUluZm8gKA0KPi0gICAgICAgICAgICAoVVNF Ul9QUk9GSUxFX0VOVFJZICoqKSBVc2VyLA0KPi0gICAgICAgICAgICAoRUZJX1VTRVJfSU5GTyAq KikgVXNlckluZm8sDQo+LSAgICAgICAgICAgIChFRklfVVNFUl9JTkZPICopIEluZm8sDQo+LSAg ICAgICAgICAgIFNpemUNCj4tICAgICAgICAgICAgKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+LSAgICAqVXNlciA9IE5VTEw7DQo+LSAgICBpZiAoVXNlckluZm8gIT0gTlVMTCkg ew0KPi0gICAgICAqVXNlckluZm8gPSBOVUxMOw0KPi0gICAgfQ0KPi0gICAgcmV0dXJuIEVGSV9O T1RfRk9VTkQ7DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+ LQ0KPi0vKioNCj4tICBSZXR1cm4gaW5mb3JtYXRpb24gYXR0YWNoZWQgdG8gdGhlIHVzZXIuDQo+ LQ0KPi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB1c2VyIGluZm9ybWF0aW9uLiBUaGUgZm9ybWF0 IG9mIHRoZSBpbmZvcm1hdGlvbiBpcw0KPmRlc2NyaWJlZCBpbiBVc2VyDQo+LSAgSW5mb3JtYXRp b24uIFRoZSBmdW5jdGlvbiBtYXkgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEIGlmIHRoZQ0KPmlu Zm9ybWF0aW9uIGlzIG1hcmtlZCBwcml2YXRlDQo+LSAgYW5kIHRoZSBoYW5kbGUgc3BlY2lmaWVk IGJ5IFVzZXIgaXMgbm90IHRoZSBjdXJyZW50IHVzZXIgcHJvZmlsZS4gVGhlIGZ1bmN0aW9uDQo+ bWF5IHJldHVybg0KPi0gIEVGSV9BQ0NFU1NfREVOSUVEIGlmIHRoZSBpbmZvcm1hdGlvbiBpcyBt YXJrZWQgcHJvdGVjdGVkIGFuZCB0aGUNCj5pbmZvcm1hdGlvbiBpcyBhc3NvY2lhdGVkDQo+LSAg d2l0aCBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIHdoaWNoIHRoZSB1c2VyIGhhcyBub3QgYmVl biBhdXRoZW50aWNhdGVkLg0KPi0NCj4tICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAgICAgICAg UG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NP TC4NCj4tICBAcGFyYW1baW5dICAgICAgVXNlciAgICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2Vy IHdob3NlIHByb2ZpbGUgd2lsbCBiZSByZXRyaWV2ZWQuDQo+LSAgQHBhcmFtW2luXSAgICAgIFVz ZXJJbmZvICAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbiBkYXRhIHJlY29yZC4N Cj4tICBAcGFyYW1bb3V0XSAgICAgSW5mbyAgICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byBh IGJ1ZmZlciBvZiBhdCBsZWFzdCAqSW5mb1NpemUNCj5ieXRlcy4gT24gZXhpdCwNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sZHMgdGhlIHVzZXIgaW5mb3JtYXRpb24uIElm IHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsIHRvIGhvbGQNCj50aGUNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24sIHRoZW4gRUZJX0JVRkZFUl9UT09fU01BTEwg aXMgcmV0dXJuZWQgYW5kDQo+SW5mb1NpemUgaXMNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdXBkYXRlZCB0byBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkg cmVxdWlyZWQuDQo+LSAgQHBhcmFtW2luLCBvdXRdIEluZm9TaXplICAgICAgIE9uIGVudHJ5LCBw b2ludHMgdG8gdGhlIHNpemUgb2YgSW5mby4gT24gcmV0dXJuLA0KPnBvaW50cyB0byB0aGUgc2l6 ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdXNlciBpbmZvcm1h dGlvbi4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIEluZm9ybWF0aW9u IHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAg ICAgVGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgdXNlcg0KPmNhbm5vdCBiZSBh Y2Nlc3NlZCBieSB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVu dCB1c2VyLg0KPi0gIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgICBUaGUgbnVtYmVyIG9m IGJ5dGVzIHNwZWNpZmllZCBieQ0KPipJbmZvU2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgZGF0YS4gVGhlIGFj dHVhbCBzaXplIHJlcXVpcmVkIGlzIHJldHVybmVkIGluDQo+KkluZm9TaXplLg0KPi0gIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBVc2VyIGRvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQg dXNlciBwcm9maWxlIG9yDQo+VXNlckluZm8gZG9lcyBub3QgcmVmZXINCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdG8gYSB2YWxpZCB1c2VyIGluZm8gaGFuZGxlLg0KPi0gIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBJbmZvIGlzIE5VTEwgb3IgSW5mb1NpemUgaXMg TlVMTC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1Vc2VyUHJvZmlsZUdl dEluZm8gKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAg ICAqVGhpcywNCj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAg ICAgVXNlciwNCj4tICBJTiAgICAgICAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAg ICAgVXNlckluZm8sDQo+LSAgT1VUICAgICAgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAg ICAgICAgICpJbmZvLA0KPi0gIElOIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqSW5mb1NpemUNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ LQ0KPi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoSW5mb1NpemUgPT0gTlVMTCkpIHsNCj4tICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICBpZiAoKCpJbmZv U2l6ZSAhPSAwKSAmJiAoSW5mbyA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIGlmICgoVXNlciA9PSBOVUxMKSB8fCAoVXNlcklu Zm8gPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi0gIH0NCj4tDQo+ LSAgU3RhdHVzID0gR2V0VXNlckluZm8gKFVzZXIsIFVzZXJJbmZvLCBJbmZvLCBJbmZvU2l6ZSwg VFJVRSk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgaWYgKFN0YXR1cyA9 PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPi0gICAgICByZXR1cm4gRUZJX0JVRkZFUl9UT09f U01BTEw7DQo+LSAgICB9DQo+LSAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+LSAgfQ0K Pi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEFkZCBvciB1 cGRhdGUgdXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHVz ZXIgaW5mb3JtYXRpb24uICBJZiBOVUxMIGlzIHBvaW50ZWQgdG8gYnkgVXNlckluZm8sDQo+dGhl biBhIG5ldyB1c2VyDQo+LSAgaW5mb3JtYXRpb24gcmVjb3JkIGlzIGNyZWF0ZWQgYW5kIGl0cyBo YW5kbGUgaXMgcmV0dXJuZWQgaW4gVXNlckluZm8uDQo+T3RoZXJ3aXNlLCB0aGUgZXhpc3RpbmcN Cj4tICBvbmUgaXMgcmVwbGFjZWQuDQo+LSAgSWYgRUZJX1VTRVJfSU5GT19JREVOSVRUWV9QT0xJ Q1lfUkVDT1JEIGlzIGNoYW5nZWQsIGl0IGlzIHRoZSBjYWxsZXIncw0KPnJlc3BvbnNpYmlsaXR5 IHRvIGtlZXANCj4tICBpdCB0byBiZSBzeW5jZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gb24gY3Jl ZGVudGlhbCBwcm92aWRlcnMuDQo+LSAgSWYgRUZJX1VTRVJfSU5GT19FWENMVVNJVkUgaXMgc3Bl Y2lmaWVkIGluIEluZm8gYW5kIGEgdXNlciBpbmZvcm1hdGlvbg0KPnJlY29yZCBvZiB0aGUgc2Ft ZQ0KPi0gIHR5cGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHVzZXIgcHJvZmlsZSwgdGhlbiBFRklf QUNDRVNTX0RFTklFRCB3aWxsIGJlDQo+cmV0dXJuZWQgYW5kIFVzZXJJbmZvDQo+LSAgd2lsbCBw b2ludCB0byB0aGUgaGFuZGxlIG9mIHRoZSBleGlzdGluZyByZWNvcmQuDQo+LQ0KPi0gIEBwYXJh bVtpbl0gICAgICBUaGlzICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhl DQo+RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTC4NCj4tICBAcGFyYW1baW5dICAgICAgVXNlciAg ICAgICAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciB3aG9zZSBwcm9maWxlIHdpbGwgYmUgcmV0cmll dmVkLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VySW5mbyAgICAgICAgSGFuZGxlIG9mIHRoZSB1 c2VyIGluZm9ybWF0aW9uIGRhdGEgcmVjb3JkLg0KPi0gIEBwYXJhbVtpbl0gICAgICBJbmZvICAg ICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byBhIGJ1ZmZlciBvZiBhdCBsZWFzdCAqSW5mb1Np emUNCj5ieXRlcy4gT24gZXhpdCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhvbGRzIHRoZSB1c2VyIGluZm9ybWF0aW9uLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCB0 byBob2xkDQo+dGhlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1h dGlvbiwgdGhlbiBFRklfQlVGRkVSX1RPT19TTUFMTCBpcyByZXR1cm5lZCBhbmQNCj5JbmZvU2l6 ZSBpcw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCB0byBjb250 YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVxdWlyZWQuDQo+LSAgQHBhcmFtW2lu XSAgICAgIEluZm9TaXplICAgICAgICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBzaXplIG9mIElu Zm8uIE9uIHJldHVybiwNCj5wb2ludHMgdG8gdGhlIHNpemUNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICAgIEluZm9ybWF0aW9uIHJldHVybmVkIHN1Y2Nlc3NmdWxs eS4NCj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgIFRoZSByZWNvcmQgaXMgZXhj bHVzaXZlLg0KPi0gIEByZXR2YWwgRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTiAgVGhlIGN1cnJlbnQg dXNlciBkb2VzIG5vdCBoYXZlDQo+cGVybWlzc2lvbiB0byBjaGFuZ2UgdGhlIHNwZWNpZmllZA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBwcm9maWxlIG9yIHVzZXIg aW5mb3JtYXRpb24gcmVjb3JkLg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAg VXNlciBkb2VzIG5vdCByZWZlciB0byBhIHZhbGlkIHVzZXIgcHJvZmlsZSBvcg0KPlVzZXJJbmZv IGRvZXMgbm90DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlciB0byBh IHZhbGlkIHVzZXIgaW5mbyBoYW5kbGUuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgICBVc2VySW5mbyBpcyBOVUxMIG9yIEluZm8gaXMgTlVMTC4NCj4tKiovDQo+LUVGSV9TVEFU VVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlU2V0SW5mbyAoDQo+LSAgSU4gQ09OU1QgIEVGSV9V U0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KPi0gIElOICAgICAgICBFRklf VVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyLA0KPi0gIElOIE9VVCAgICBFRklf VVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICAqVXNlckluZm8sDQo+LSAgSU4gQ09OU1Qg IEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAgICpJbmZvLA0KPi0gIElOICAgICAg ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvU2l6ZQ0KPi0gICkNCj4t ew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tDQo+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8 IChVc2VyID09IE5VTEwpIHx8IChVc2VySW5mbyA9PSBOVUxMKSB8fCAoSW5mbyA9PSBOVUxMKSkN Cj57DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAg Ly8NCj4tICAvLyBDaGVjayB0aGUgcmlnaHQgb2YgdGhlIGN1cnJlbnQgdXNlci4NCj4tICAvLw0K Pi0gIGlmIChVc2VyICE9IG1DdXJyZW50VXNlcikgew0KPi0gICAgaWYgKCFDaGVja0N1cnJlbnRV c2VyQWNjZXNzUmlnaHQgKEVGSV9VU0VSX0lORk9fQUNDRVNTX01BTkFHRSkpIHsNCj4tICAgICAg aWYgKCpVc2VySW5mbyAhPSBOVUxMKSB7DQo+LSAgICAgICAgLy8NCj4tICAgICAgICAvLyBDYW4n dCB1cGRhdGUgaW5mbyBpbiBvdGhlciBwcm9maWxlcyB3aXRob3V0IE1BTkFHRSByaWdodC4NCj4t ICAgICAgICAvLw0KPi0gICAgICAgIHJldHVybiBFRklfU0VDVVJJVFlfVklPTEFUSU9OOw0KPi0g ICAgICB9DQo+LQ0KPi0gICAgICBpZiAoIUNoZWNrQ3VycmVudFVzZXJBY2Nlc3NSaWdodA0KPihF RklfVVNFUl9JTkZPX0FDQ0VTU19FTlJPTExfT1RIRVJTKSkgew0KPi0gICAgICAgIC8vDQo+LSAg ICAgICAgLy8gQ2FuJ3QgYWRkIGluZm8gaW50byBvdGhlciBwcm9maWxlcy4NCj4tICAgICAgICAv Lw0KPi0gICAgICAgIHJldHVybiBFRklfU0VDVVJJVFlfVklPTEFUSU9OOw0KPi0gICAgICB9DQo+ LSAgICB9DQo+LSAgfQ0KPi0NCj4tICBpZiAoVXNlciA9PSBtQ3VycmVudFVzZXIpIHsNCj4tICAg IGlmIChDaGVja0N1cnJlbnRVc2VyQWNjZXNzUmlnaHQgKEVGSV9VU0VSX0lORk9fQUNDRVNTX0VO Uk9MTF9TRUxGKSkNCj57DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIE9ubHkgaWRlbnRpZnkgcG9s aWN5IGNhbiBiZSBhZGRlZC91cGRhdGVkLg0KPi0gICAgICAvLw0KPi0gICAgICBpZiAoSW5mby0+ SW5mb1R5cGUgIT0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lfUkVDT1JEKSB7DQo+LSAg ICAgICAgcmV0dXJuIEVGSV9TRUNVUklUWV9WSU9MQVRJT047DQo+LSAgICAgIH0NCj4tICAgIH0N Cj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gTW9kaWZ5IHVzZXIgaW5mb3JtYXRpb24uDQo+LSAg Ly8NCj4tICBTdGF0dXMgPSBNb2RpZnlVc2VySW5mbyAoVXNlciwgKEVGSV9VU0VSX0lORk8gKiop IFVzZXJJbmZvLCBJbmZvLA0KPkluZm9TaXplKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+LSAgICBpZiAoU3RhdHVzID09IEVGSV9BQ0NFU1NfREVOSUVEKSB7DQo+LSAgICAgIHJl dHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4tICAgIH0NCj4tICAgIHJldHVybiBFRklfU0VDVVJJ VFlfVklPTEFUSU9OOw0KPi0gIH0NCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+ LQ0KPi0vKioNCj4tICBDYWxsZWQgYnkgY3JlZGVudGlhbCBwcm92aWRlciB0byBub3RpZnkgb2Yg aW5mb3JtYXRpb24gY2hhbmdlLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgY3Jl ZGVudGlhbCBwcm92aWRlciB0byBub3RpZnkgdGhlIFVzZXIgSWRlbnRpdHkNCj5NYW5hZ2VyIHdo ZW4gdXNlciBzdGF0dXMNCj4tICBoYXMgY2hhbmdlZC4NCj4tICBJZiB0aGUgVXNlciBJZGVudGl0 eSBNYW5hZ2VyIGRvZXNuJ3Qgc3VwcG9ydCBhc3luY2hyb25vdXMgY2hhbmdlcyBpbg0KPmNyZWRl bnRpYWxzLCB0aGVuIHRoaXMgZnVuY3Rpb24NCj4tICBzaG91bGQgcmV0dXJuIEVGSV9VTlNVUFBP UlRFRC4NCj4tICBJZiBjdXJyZW50IHVzZXIgZG9lcyBub3QgZXhpc3QsIGFuZCB0aGUgY3JlZGVu dGlhbCBwcm92aWRlciBjYW4gaWRlbnRpZnkgYSB1c2VyLA0KPnRoZW4gbWFrZSB0aGUgdXNlcg0K Pi0gIHRvIGJlIGN1cnJlbnQgdXNlciBhbmQgc2lnbmFsIHRoZQ0KPkVGSV9FVkVOVF9HUk9VUF9V U0VSX1BST0ZJTEVfQ0hBTkdFRCBldmVudC4NCj4tICBJZiBjdXJyZW50IHVzZXIgYWxyZWFkeSBl eGlzdHMsIGFuZCB0aGUgY3JlZGVudGlhbCBwcm92aWRlciBjYW4gaWRlbnRpZnkNCj5hbm90aGVy IHVzZXIsIHRoZW4gc3dpdGNoDQo+LSAgY3VycmVudCB1c2VyIHRvIHRoZSBuZXdseSBpZGVudGlm aWVkIHVzZXIsIGFuZCBzaWduYWwgdGhlDQo+RUZJX0VWRU5UX0dST1VQX1VTRVJfUFJPRklMRV9D SEFOR0VEIGV2ZW50Lg0KPi0gIElmIGN1cnJlbnQgdXNlciB3YXMgaWRlbnRpZmllZCBieSB0aGlz IGNyZWRlbnRpYWwgcHJvdmlkZXIgYW5kIG5vdyB0aGUNCj5jcmVkZW50aWFsIHByb3ZpZGVyIGNh bm5vdCBpZGVudGlmeQ0KPi0gIGN1cnJlbnQgdXNlciwgdGhlbiBsb2dvdXQgY3VycmVudCB1c2Vy IGFuZCBzaWduYWwgdGhlDQo+RUZJX0VWRU5UX0dST1VQX1VTRVJfUFJPRklMRV9DSEFOR0VEIGV2 ZW50Lg0KPi0NCj4tICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5z dGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTC4NCj4tICBAcGFyYW1baW5d IENoYW5nZWQgICAgICAgSGFuZGxlIG9uIHdoaWNoIGlzIGluc3RhbGxlZCBhbiBpbnN0YW5jZSBv ZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICB3aGVyZSB0aGUgdXNlciBoYXMgY2hhbmdlZC4NCj4tDQo+LSAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgIFRoZSBVc2VyIElkZW50aXR5IE1hbmFnZXIgaGFzIGhhbmRsZWQgdGhl DQo+bm90aWZpY2F0aW9uLg0KPi0gIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICBUaGUgZnVuY3Rp b24gd2FzIGNhbGxlZCB3aGlsZSB0aGUgc3BlY2lmaWVkDQo+Y3JlZGVudGlhbCBwcm92aWRlciB3 YXMgbm90IHNlbGVjdGVkLg0KPi0gIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICBUaGUgVXNlciBJ ZGVudGl0eSBNYW5hZ2VyIGRvZXNuJ3Qgc3VwcG9ydA0KPmFzeW5jaHJvbm91cyBub3RpZmljYXRp b25zLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlTm90 aWZ5ICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAg KlRoaXMsDQo+LSAgSU4gICAgICAgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAg IENoYW5nZWQNCj4tICApDQo+LXsNCj4tICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPi19DQo+ LQ0KPi0NCj4tLyoqDQo+LSAgRGVsZXRlIHVzZXIgaW5mb3JtYXRpb24uDQo+LQ0KPi0gIERlbGV0 ZSB0aGUgdXNlciBpbmZvcm1hdGlvbiBhdHRhY2hlZCB0byB0aGUgdXNlciBwcm9maWxlIHNwZWNp ZmllZCBieSB0aGUNCj5Vc2VySW5mby4NCj4tDQo+LSAgQHBhcmFtW2luXSBUaGlzICAgICAgICAg ICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfTUFOQUdFUl9QUk9U T0NPTC4NCj4tICBAcGFyYW1baW5dIFVzZXIgICAgICAgICAgICBIYW5kbGUgb2YgdGhlIHVzZXIg d2hvc2UgaW5mb3JtYXRpb24gd2lsbCBiZQ0KPmRlbGV0ZWQuDQo+LSAgQHBhcmFtW2luXSBVc2Vy SW5mbyAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIHRvIHJlbW92ZS4NCj4t DQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgVXNlciBpbmZvcm1hdGlvbiBkZWxldGVk IHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICBVc2VyIGluZm9y bWF0aW9uIHJlY29yZCBVc2VySW5mbyBkb2VzIG5vdA0KPmV4aXN0IGluIHRoZSB1c2VyIHByb2Zp bGUuDQo+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgVGhlIGN1cnJlbnQgdXNlciBkb2Vz IG5vdCBoYXZlIHBlcm1pc3Npb24gdG8NCj5kZWxldGUgdGhpcyB1c2VyIGluZm9ybWF0aW9uLg0K Pi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlRGVsZXRlSW5m byAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICAgICpU aGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBV c2VyLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICBV c2VySW5mbw0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tDQo+LSAgaWYg KFRoaXMgPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4t ICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHVz ZXIuDQo+LSAgLy8NCj4tICBpZiAoVXNlciAhPSBtQ3VycmVudFVzZXIpIHsNCj4tICAgIGlmICgh Q2hlY2tDdXJyZW50VXNlckFjY2Vzc1JpZ2h0IChFRklfVVNFUl9JTkZPX0FDQ0VTU19NQU5BR0Up KSB7DQo+LSAgICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4tICAgIH0NCj4tICB9DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gRGVsZXRlIHVzZXIgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBT dGF0dXMgPSBEZWxVc2VySW5mbyAoVXNlciwgVXNlckluZm8sIFRSVUUpOw0KPi0gIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4tICAgIGlmIChTdGF0dXMgPT0gRUZJX05PVF9GT1VORCkgew0K Pi0gICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tICAgIH0NCj4tICAgIHJldHVybiBFRklf QUNDRVNTX0RFTklFRDsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0K Pi0NCj4tLyoqDQo+LSAgRW51bWVyYXRlIHVzZXIgaW5mb3JtYXRpb24gb2YgYWxsIHRoZSBlbnJv bGxlZCB1c2VycyBvbiB0aGUgcGxhdGZvcm0uDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJu cyB0aGUgbmV4dCB1c2VyIGluZm9ybWF0aW9uIHJlY29yZC4gVG8gcmV0cmlldmUgdGhlIGZpcnN0 DQo+dXNlcg0KPi0gIGluZm9ybWF0aW9uIHJlY29yZCBoYW5kbGUsIHBvaW50IFVzZXJJbmZvIGF0 IGEgTlVMTC4gRWFjaCBzdWJzZXF1ZW50IGNhbGwNCj53aWxsIHJldHJpZXZlDQo+LSAgYW5vdGhl ciB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBoYW5kbGUgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUs IGF0IHdoaWNoDQo+cG9pbnQgVXNlckluZm8NCj4tICB3aWxsIHBvaW50IHRvIE5VTEwuDQo+LQ0K Pi0gIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5j ZSBvZiB0aGUNCj5FRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbl0gICAg ICBVc2VyICAgICAgICAgICBIYW5kbGUgb2YgdGhlIHVzZXIgd2hvc2UgaW5mb3JtYXRpb24gd2ls bCBiZQ0KPmRlbGV0ZWQuDQo+LSAgQHBhcmFtW2luLCBvdXRdIFVzZXJJbmZvICAgICAgIEhhbmRs ZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbiB0byByZW1vdmUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICBVc2VyIGluZm9ybWF0aW9uIHJldHVybmVkLg0KPi0gIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBObyBtb3JlIHVzZXIgaW5mb3JtYXRpb24gZm91bmQu DQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFVzZXJJbmZvIGlzIE5VTEwuDQo+ LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVHZXROZXh0SW5m byAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICAgICpU aGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBV c2VyLA0KPi0gIElOIE9VVCAgICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICAq VXNlckluZm8NCj4tICApDQo+LXsNCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFVzZXJJbmZv ID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0N Cj4tICAvLw0KPi0gIC8vIEdldCBuZXh0IHVzZXIgaW5mb3JtYXRpb24gZW50cnkuDQo+LSAgLy8N Cj4tICByZXR1cm4gRmluZFVzZXJJbmZvIChVc2VyLCAoRUZJX1VTRVJfSU5GTyAqKikgVXNlcklu Zm8sIFRSVUUsIE5VTEwpOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgTWFpbiBlbnRyeSBmb3Ig dGhpcyBkcml2ZXIuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gSW1hZ2VIYW5kbGUgICAgIEltYWdlIGhh bmRsZSB0aGlzIGRyaXZlci4NCj4tICBAcGFyYW1baW5dIFN5c3RlbVRhYmxlICAgICBQb2ludGVy IHRvIFN5c3RlbVRhYmxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNFU1MgICAgICAgICBUaGlz IGZ1bmN0aW9uIGFsd2F5cyBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuDQo+LQ0KPi0qKi8NCj4tRUZJ X1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlcklkZW50aWZ5TWFuYWdlckluaXQgKA0KPi0gIElOIEVG SV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KPi0gIElOIEVGSV9TWVNURU1fVEFCTEUgICpT eXN0ZW1UYWJsZQ0KPi0gICkNCj4tew0KPi0NCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gSXQgaXMgTk9UIHJvYnVzdCBlbm91Z2ggdG8gYmUgaW5jbHVkZWQgaW4g cHJvZHVjdGlvbi4NCj4tICAvLw0KPi0gICNlcnJvciAiVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBq dXN0IGEgc2FtcGxlLCBwbGVhc2UgY29tbWVudCB0aGlzIGxpbmUgaWYgeW91DQo+cmVhbGx5IHdh bnQgdG8gdXNlIHRoaXMgZHJpdmVyLiINCj4tDQo+LSAgLy8NCj4tICAvLyBJbml0aWF0ZSBmb3Jt IGJyb3dzZXIuDQo+LSAgLy8NCj4tICBJbml0Rm9ybUJyb3dzZXIgKCk7DQo+LQ0KPi0gIC8vDQo+ LSAgLy8gSW5zdGFsbCBwcm90b2NvbCBpbnRlcmZhY2VzIGZvciB0aGUgVXNlciBJZGVudGl0eSBN YW5hZ2VyLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsUHJvdG9jb2xJbnRlcmZh Y2UgKA0KPi0gICAgICAgICAgICAgICAgICAmbUNhbGxiYWNrSW5mby0+RHJpdmVySGFuZGxlLA0K Pi0gICAgICAgICAgICAgICAgICAmZ0VmaVVzZXJNYW5hZ2VyUHJvdG9jb2xHdWlkLA0KPi0gICAg ICAgICAgICAgICAgICBFRklfTkFUSVZFX0lOVEVSRkFDRSwNCj4tICAgICAgICAgICAgICAgICAg JmdVc2VySWRlbnRpZnlNYW5hZ2VyDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgQVNTRVJU X0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4tDQo+LSAgTG9hZERlZmVycmVkSW1hZ2VJbml0IChJbWFn ZUhhbmRsZSk7DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj5kaWZmIC0t Z2l0DQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdl ckR4ZS9Vc2VySWRlbnRpZnlNYW4NCj5hZ2VyLmgNCj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlm aWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFnZXIuaA0K PmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IDFjNDQ5YjAxMjguLjAwMDAwMDAwMDAN Cj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5h Z2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFnZXIuaA0KPisrKyAvZGV2L251bGwNCj5AQCAtMSw0 MTMgKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBUaGUgaGVhZGVyIGZpbGUgZm9yIFVzZXIgaWRl bnRpZnkgTWFuYWdlciBkcml2ZXIuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3Jh bSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxp Y2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0 ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNl Lm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RS SUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRI T1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5F WFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpZm5kZWYgX1VTRVJfSURFTlRJ RllfTUFOQUdFUl9IXw0KPi0jZGVmaW5lIF9VU0VSX0lERU5USUZZX01BTkFHRVJfSF8NCj4tDQo+ LSNpbmNsdWRlIDxVZWZpLmg+DQo+LQ0KPi0jaW5jbHVkZSA8R3VpZC9HbG9iYWxWYXJpYWJsZS5o Pg0KPi0jaW5jbHVkZSA8R3VpZC9NZGVNb2R1bGVIaWkuaD4NCj4tDQo+LSNpbmNsdWRlIDxQcm90 b2NvbC9Gb3JtQnJvd3NlcjIuaD4NCj4tI2luY2x1ZGUgPFByb3RvY29sL0hpaURhdGFiYXNlLmg+ DQo+LSNpbmNsdWRlIDxQcm90b2NvbC9IaWlDb25maWdBY2Nlc3MuaD4NCj4tI2luY2x1ZGUgPFBy b3RvY29sL0hpaVN0cmluZy5oPg0KPi0jaW5jbHVkZSA8UHJvdG9jb2wvSGlpQ29uZmlnUm91dGlu Zy5oPg0KPi0jaW5jbHVkZSA8UHJvdG9jb2wvVXNlckNyZWRlbnRpYWwyLmg+DQo+LSNpbmNsdWRl IDxQcm90b2NvbC9Vc2VyTWFuYWdlci5oPg0KPi0jaW5jbHVkZSA8UHJvdG9jb2wvRGVmZXJyZWRJ bWFnZUxvYWQuaD4NCj4tI2luY2x1ZGUgPFByb3RvY29sL1NpbXBsZVRleHRPdXQuaD4NCj4tI2lu Y2x1ZGUgPFByb3RvY29sL1NpbXBsZVRleHRJbi5oPg0KPi0jaW5jbHVkZSA8UHJvdG9jb2wvU2lt cGxlVGV4dEluRXguaD4NCj4tDQo+LSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2Vydmlj ZXNUYWJsZUxpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVM aWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPi0jaW5j bHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L0Rldmlj ZVBhdGhMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4tI2luY2x1ZGUg PExpYnJhcnkvVWVmaUxpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KPi0j aW5jbHVkZSA8TGlicmFyeS9IaWlMaWIuaD4NCj4tDQo+LSNpbmNsdWRlICJVc2VySWRlbnRpZnlN YW5hZ2VyRGF0YS5oIg0KPi0NCj4tLy8NCj4tLy8gVGhpcyBpcyB0aGUgZ2VuZXJhdGVkIElGUiBi aW5hcnkgZGF0YSBmb3IgZWFjaCBmb3Jtc2V0IGRlZmluZWQgaW4gVkZSLg0KPi0vLyBUaGlzIGRh dGEgYXJyYXkgaXMgcmVhZHkgdG8gYmUgdXNlZCBhcyBpbnB1dCBvZiBIaWlBZGRQYWNrYWdlcygp IHRvDQo+LS8vIGNyZWF0ZSBhIHBhY2thZ2VsaXN0Lg0KPi0vLw0KPi1leHRlcm4gVUlOVDggICAg ICAgICAgICAgICAgVXNlcklkZW50aWZ5TWFuYWdlclZmckJpbltdOw0KPi0NCj4tLy8NCj4tLy8g VGhpcyBpcyB0aGUgZ2VuZXJhdGVkIFN0cmluZyBwYWNrYWdlIGRhdGEgZm9yIGFsbCAuVU5JIGZp bGVzLg0KPi0vLyBUaGlzIGRhdGEgYXJyYXkgaXMgcmVhZHkgdG8gYmUgdXNlZCBhcyBpbnB1dCBv ZiBIaWlBZGRQYWNrYWdlcygpIHRvDQo+LS8vIGNyZWF0ZSBhIHBhY2thZ2VsaXN0Lg0KPi0vLw0K Pi1leHRlcm4gVUlOVDggICAgICAgICAgICAgICAgVXNlcklkZW50aWZ5TWFuYWdlclN0cmluZ3Nb XTsNCj4tDQo+LSNkZWZpbmUgICBVU0VSX05VTUJFUl9JTkMgICAgICAgICAgIDMyDQo+LSNkZWZp bmUgICBERUZBVUxUX1BST0ZJTEVfU0laRSAgICAgIDUxMg0KPi0jZGVmaW5lICAgSU5GT19QQVlM T0FEX1NJWkUgICAgICAgICA2NA0KPi0NCj4tLy8NCj4tLy8gQ3JlZGVudGlhbCBQcm92aWRlciBJ bmZvcm1hdGlvbi4NCj4tLy8NCj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPi0gIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgIENvdW50Ow0KPi0gIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09M ICpQcm92aWRlclsxXTsNCj4tfSBDUkVERU5USUFMX1BST1ZJREVSX0lORk87DQo+LQ0KPi0vLw0K Pi0vLyBJbnRlcm5hbCB1c2VyIHByb2ZpbGUgZW50cnkuDQo+LS8vDQo+LXR5cGVkZWYgc3RydWN0 IHsNCj4tICBVSU5UTiAgIE1heFByb2ZpbGVTaXplOw0KPi0gIFVJTlROICAgVXNlclByb2ZpbGVT aXplOw0KPi0gIENIQVIxNiAgVXNlclZhck5hbWVbOV07DQo+LSAgVUlOVDggICAqUHJvZmlsZUlu Zm87DQo+LX0gVVNFUl9QUk9GSUxFX0VOVFJZOw0KPi0NCj4tLy8NCj4tLy8gSW50ZXJuYWwgdXNl ciBwcm9maWxlIGRhdGFiYXNlLg0KPi0vLw0KPi10eXBlZGVmIHN0cnVjdCB7DQo+LSAgVUlOVE4g ICAgICAgICAgICAgICAgICAgVXNlclByb2ZpbGVOdW07DQo+LSAgVUlOVE4gICAgICAgICAgICAg ICAgICAgTWF4UHJvZmlsZU51bTsNCj4tICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSBVc2VyUHJv ZmlsZVsxXTsNCj4tfSBVU0VSX1BST0ZJTEVfREI7DQo+LQ0KPi0jZGVmaW5lIFVTRVJfTUFOQUdF Ul9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMiAoJ1UnLCAnSScsICdNJywgJ1MnKQ0KPi0NCj4tdHlw ZWRlZiBzdHJ1Y3Qgew0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0 dXJlOw0KPi0gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgRHJpdmVySGFuZGxlOw0K Pi0gIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgSGlpSGFuZGxlOw0KPi0NCj4tICAv Lw0KPi0gIC8vIENvbnN1bWVkIHByb3RvY29sLg0KPi0gIC8vDQo+LSAgRUZJX0hJSV9EQVRBQkFT RV9QUk9UT0NPTCAgICAgICAqSGlpRGF0YWJhc2U7DQo+LSAgRUZJX0hJSV9TVFJJTkdfUFJPVE9D T0wgICAgICAgICAqSGlpU3RyaW5nOw0KPi0gIEVGSV9ISUlfQ09ORklHX1JPVVRJTkdfUFJPVE9D T0wgKkhpaUNvbmZpZ1JvdXRpbmc7DQo+LSAgRUZJX0ZPUk1fQlJPV1NFUjJfUFJPVE9DT0wgICAg ICAqRm9ybUJyb3dzZXIyOw0KPi0NCj4tICAvLw0KPi0gIC8vIFByb2R1Y2VkIHByb3RvY29sLg0K Pi0gIC8vDQo+LSAgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICBDb25maWdBY2Nlc3M7 DQo+LX0gVVNFUl9NQU5BR0VSX0NBTExCQUNLX0lORk87DQo+LQ0KPi0vLy8NCj4tLy8vIEhJSSBz cGVjaWZpYyBWZW5kb3IgRGV2aWNlIFBhdGggZGVmaW5pdGlvbi4NCj4tLy8vDQo+LXR5cGVkZWYg c3RydWN0IHsNCj4tICBWRU5ET1JfREVWSUNFX1BBVEggICAgICAgIFZlbmRvckRldmljZVBhdGg7 DQo+LSAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICBFbmQ7DQo+LX0gSElJX1ZFTkRPUl9ERVZJ Q0VfUEFUSDsNCj4tDQo+LS8qKg0KPi0gIFJlZ2lzdGVyIGFuIGV2ZW50IG5vdGlmaWNhdGlvbiBm dW5jdGlvbiBmb3IgdGhlIHVzZXIgcHJvZmlsZSBjaGFuZ2VkLg0KPi0NCj4tICBAcGFyYW1baW5d ICBJbWFnZUhhbmRsZSAgICAgSW1hZ2UgaGFuZGxlIHRoaXMgZHJpdmVyLg0KPi0NCj4tKiovDQo+ LVZPSUQNCj4tTG9hZERlZmVycmVkSW1hZ2VJbml0ICgNCj4tICBJTiBFRklfSEFORExFICAgICAg ICBJbWFnZUhhbmRsZQ0KPi0gICk7DQo+LQ0KPi0NCj4tLyoqDQo+LSAgVGhpcyBmdW5jdGlvbiBj cmVhdGVzIGEgbmV3IHVzZXIgcHJvZmlsZSB3aXRoIG9ubHkNCj4tICBhIG5ldyB1c2VyIGlkZW50 aWZpZXIgYXR0YWNoZWQgYW5kIHJldHVybnMgaXRzIGhhbmRsZS4NCj4tICBUaGUgdXNlciBwcm9m aWxlIGlzIG5vbi12b2xhdGlsZSwgYnV0IHRoZSBoYW5kbGUgVXNlcg0KPi0gIGNhbiBjaGFuZ2Ug YWNyb3NzIHJlYm9vdHMuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICBUaGlzICAgICAgICAgICAgICAg UHJvdG9jb2wgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTA0KPmluc3RhbmNlDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLg0KPi0gIEBwYXJhbVtvdXRdICBVc2Vy ICAgICAgICAgICAgICAgSGFuZGxlIG9mIGEgbmV3IHVzZXIgcHJvZmlsZS4NCj4tDQo+LSAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1Y2Nlc3NmdWxs eSBjcmVhdGVkLg0KPi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAgQ3VycmVudCB1 c2VyIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudA0KPnBlcm1pc3Npb25zDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgYSB1c2VyIHByb2ZpbGUuDQo+LSAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICBDcmVhdGlvbiBvZiBuZXcgdXNlciBwcm9maWxl cyBpcyBub3QNCj5zdXBwb3J0ZWQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg ICBVc2VyIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNl clByb2ZpbGVDcmVhdGUgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09M ICAgICAgICAgICAqVGhpcywNCj4tICBPVVQgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUg ICAgICAgICAgICAgKlVzZXINCj4tICApOw0KPi0NCj4tDQo+LS8qKg0KPi0gIERlbGV0ZSBhbiBl eGlzdGluZyB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAg ICAgICAgUHJvdG9jb2wgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCBpbnN0YW5jZQ0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlci4NCj4tICBAcGFyYW0gIFVzZXIg ICAgICAgICAgICAgICAgICAgIFVzZXIgcHJvZmlsZSBoYW5kbGUuDQo+LQ0KPi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgVXNlciBwcm9maWxlIHdhcyBzdWNjZXNzZnVsbHkgZGVs ZXRlZC4NCj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgIEN1cnJlbnQgdXNlciBk b2VzIG5vdCBoYXZlIHN1ZmZpY2llbnQNCj5wZXJtaXNzaW9ucw0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG8gZGVsZXRlIGEgdXNlciBwcm9maWxlIG9yIHRoZXJlIGlzIG9u bHkgb25lDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByb2ZpbGUu DQo+LSAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICBEZWxldGlvbiBvZiBuZXcgdXNl ciBwcm9maWxlcyBpcyBub3QNCj5zdXBwb3J0ZWQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgICBVc2VyIGRvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgdXNlcg0KPnByb2ZpbGUu DQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVEZWxldGUg KA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhp cywNCj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgVXNl cg0KPi0gICk7DQo+LQ0KPi0NCj4tLyoqDQo+LSAgR2V0IG5leHQgdXNlciBwcm9maWxlIGZyb20g dGhlIHVzZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAgICBUaGlz ICAgICAgICAgICBQcm90b2NvbCBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MDQo+aW5zdGFuY2UN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIuDQo+LSAgQHBhcmFt W2luLCBvdXRdICBVc2VyICAgICAgICAgICBVc2VyIHByb2ZpbGUgaGFuZGxlLg0KPi0NCj4tICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIE5leHQgZW5yb2xsZWQgdXNlciBwcm9maWxl IHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiAgIFVzZXIgaXMgTlVMTC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1V c2VyUHJvZmlsZUdldE5leHQgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RP Q09MICAgICAgICAgICAqVGhpcywNCj4tICBJTiBPVVQgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5E TEUgICAgICAgICAgICAgKlVzZXINCj4tICApOw0KPi0NCj4tDQo+LS8qKg0KPi0gIFRoaXMgZnVu Y3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCB1c2VyIHByb2ZpbGUgaGFuZGxlLg0KPi0NCj4tICBA cGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgIFByb3RvY29sIEVGSV9VU0VSX01BTkFHRVJf UFJPVE9DT0wNCj5pbnN0YW5jZSBwb2ludGVyLg0KPi0gIEBwYXJhbVtvdXRdICBDdXJyZW50VXNl ciAgICAgICAgVXNlciBwcm9maWxlIGhhbmRsZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgICBDdXJyZW50IHVzZXIgcHJvZmlsZSBoYW5kbGUgcmV0dXJuZWQNCj5zdWNj ZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBDdXJyZW50VXNl ciBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9m aWxlQ3VycmVudCAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAg ICAgICAgICpUaGlzLA0KPi0gIE9VVCAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAg ICAgICAgICAqQ3VycmVudFVzZXINCj4tICApOw0KPi0NCj4tDQo+LS8qKg0KPi0gIElkZW50aWZ5 IHRoZSB1c2VyIGFuZCwgaWYgYXV0aGVudGljYXRlZCwgcmV0dXJucyB0aGUgdXNlciBoYW5kbGUg YW5kIGNoYW5nZXMNCj4tICB0aGUgY3VycmVudCB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0gIEBwYXJh bSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgRUZJX1VTRVJfTUFOQUdFUl9QUk9U T0NPTCBpbnN0YW5jZQ0KPnBvaW50ZXIuDQo+LSAgQHBhcmFtICBDdXJyZW50VXNlciAgICAgICAg ICAgICBVc2VyIHByb2ZpbGUgaGFuZGxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgIFVzZXIgd2FzIHN1Y2Nlc3NmdWxseSBpZGVudGlmaWVkLg0KPi0gIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSICAgVXNlciBpcyBOVUxMLg0KPi0gIEByZXR2YWwgRUZJX0FD Q0VTU19ERU5JRUQgICAgICAgVXNlciB3YXMgbm90IHN1Y2Nlc3NmdWxseSBpZGVudGlmaWVkLg0K Pi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlSWRlbnRpZnkg KA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhp cywNCj4tICBPVVQgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgKlVz ZXINCj4tICApOw0KPi0NCj4tDQo+LS8qKg0KPi0gIEZpbmQgYSB1c2VyIHVzaW5nIGEgdXNlciBp bmZvcm1hdGlvbiByZWNvcmQuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgYWxsIHVz ZXIgcHJvZmlsZXMgZm9yIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbg0KPnJlY29yZC4N Cj4tICBUaGUgc2VhcmNoIHN0YXJ0cyB3aXRoIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBo YW5kbGUgZm9sbG93aW5nDQo+VXNlckluZm8gYW5kDQo+LSAgY29udGludWVzIHVudGlsIGVpdGhl ciB0aGUgaW5mb3JtYXRpb24gaXMgZm91bmQgb3IgdGhlcmUgYXJlIG5vIG1vcmUgdXNlcg0KPnBy b2ZpbGVzLg0KPi0gIEEgbWF0Y2ggb2NjdXJzIHdoZW4gdGhlIEluZm8uSW5mb1R5cGUgZmllbGQg bWF0Y2hlcyB0aGUgdXNlciBpbmZvcm1hdGlvbg0KPnJlY29yZA0KPi0gIHR5cGUgYW5kIHRoZSB1 c2VyIGluZm9ybWF0aW9uIHJlY29yZCBkYXRhIG1hdGNoZXMgdGhlIHBvcnRpb24gb2YgSW5mbw0K PnBhc3NlZCB0aGUNCj4tICBFRklfVVNFUl9JTkZPIGhlYWRlci4NCj4tDQo+LSAgQHBhcmFtW2lu XSAgICAgIFRoaXMgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VS X01BTkFHRVJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luLCBvdXRdIFVzZXIgICAgIE9uIGVudHJ5 LCBwb2ludHMgdG8gdGhlIHByZXZpb3VzbHkgcmV0dXJuZWQgdXNlcg0KPnByb2ZpbGUNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBvciBOVUxMIHRvIHN0YXJ0IHNlYXJjaGlu ZyB3aXRoIHRoZSBmaXJzdCB1c2VyIHByb2ZpbGUuDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSB1c2VyIHByb2ZpbGUgaGFuZGxlLCBvciBOVUxM IGlmIG5vdA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZC4NCj4tICBAcGFyYW1b aW4sIG91dF0gVXNlckluZm8gT24gZW50cnksIHBvaW50cyB0byB0aGUgcHJldmlvdXNseSByZXR1 cm5lZCB1c2VyDQo+aW5mb3JtYXRpb24NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFu ZGxlLCBvciBOVUxMIHRvIHN0YXJ0IHNlYXJjaGluZyB3aXRoIHRoZSBmaXJzdC4gT24gcmV0dXJu LA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHVzZXIgaW5mb3Jt YXRpb24gaGFuZGxlIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlY29yZCwgb3IgTlVMTCBpZiBub3QgZm91bmQuIENhbiBiZSBOVUxMLCBpbiB3 aGljaCBjYXNlIG9ubHkNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIHVzZXIgaW5m b3JtYXRpb24gcmVjb3JkIHBlciB1c2VyIGNhbiBiZSByZXR1cm5lZC4NCj4tICBAcGFyYW1baW5d ICAgICAgSW5mbyAgICAgUG9pbnRzIHRvIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgdXNlciBp bmZvcm1hdGlvbiB0bw0KPmJlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVk IHRvIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZC4gSWYgTlVMTCwgdGhlbiBvbmx5DQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCB0eXBl IGlzIGNvbXBhcmVkLiBJZiBJbmZvU2l6ZSBpcyAwLA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGVuIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBtdXN0IGJlIGVtcHR5Lg0KPi0N Cj4tICBAcGFyYW1baW5dICAgICAgSW5mb1NpemUgVGhlIHNpemUgb2YgSW5mbywgaW4gYnl0ZXMu DQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICBVc2VyIGluZm9ybWF0aW9uIHdhcyBm b3VuZC4gVXNlciBwb2ludHMgdG8gdGhlDQo+dXNlciBwcm9maWxlIGhhbmRsZSwNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgYW5kIFVzZXJJbmZvIHBvaW50cyB0byB0aGUgdXNlciBpbmZv cm1hdGlvbiBoYW5kbGUuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgIFVzZXIgaW5mb3Jt YXRpb24gd2FzIG5vdCBmb3VuZC4gVXNlciBwb2ludHMgdG8NCj5OVUxMIGFuZCBVc2VySW5mbw0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gTlVMTC4NCj4tDQo+LSoqLw0K Pi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1Vc2VyUHJvZmlsZUZpbmQgKA0KPi0gIElOICAgICBD T05TVCBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAqVGhpcywNCj4tICBJTiBPVVQg RUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgKlVzZXIsDQo+LSAgSU4gT1VU IEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgICAgICpVc2VySW5mbyBPUFRJT05B TCwNCj4tICBJTiAgICAgQ09OU1QgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgKklu Zm8sDQo+LSAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu Zm9TaXplDQo+LSAgKTsNCj4tDQo+LQ0KPi0vKioNCj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMg dXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+LSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAg ICBQcm90b2NvbCBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MIGluc3RhbmNlDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLg0KPi0gIEBwYXJhbSAgVXNlciAgICAg ICAgICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIHdob3NlIHByb2ZpbGUgd2lsbCBiZQ0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cmlldmVkLg0KPi0gIEBwYXJh bSAgVXNlckluZm8gICAgICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9u IGRhdGEgcmVjb3JkLg0KPi0gIEBwYXJhbSAgSW5mbyAgICAgICAgICAgICAgICAgICAgT24gZW50 cnksIHBvaW50cyB0byBhIGJ1ZmZlciBvZiBhdCBsZWFzdA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKkluZm9TaXplIGJ5dGVzLiAgT24gZXhpdCwgaG9sZHMgdGhlIHVzZXIN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLg0KPi0gIEBw YXJhbSAgSW5mb1NpemUgICAgICAgICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byB0aGUgc2l6 ZSBvZiBJbmZvLiBPbiByZXR1cm4sDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwb2ludHMgdG8gdGhlIHNpemUgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb24uDQo+LQ0KPi0gIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgSW5mb3JtYXRpb24gcmV0dXJuZWQgc3VjY2Vz c2Z1bGx5Lg0KPi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAgVGhlIGluZm9ybWF0 aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgdXNlcg0KPmNhbm5vdA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYmUgYWNjZXNzZWQgIGJ5IHRoZSBjdXJyZW50IHVzZXIuDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfQlVGRkVSX1RPT19TTUFMTC0gVGhl IG51bWJlciBvZiBieXRlcw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bl Y2lmaWVkIGJ5ICpJbmZvU2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGRhdGEuDQo+LQ0KPi0qKi8NCj4tRUZJ X1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVHZXRJbmZvICgNCj4tICBJTiBDT05TVCAg RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAg IEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXIsDQo+LSAgSU4gICAgICAg IEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgIFVzZXJJbmZvLA0KPi0gIE9VVCAg ICAgICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAqSW5mbywNCj4tICBJTiBP VVQgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkluZm9TaXplDQo+LSAg KTsNCj4tDQo+LQ0KPi0vKioNCj4tICBUaGlzIGZ1bmN0aW9uIGNoYW5nZXMgdXNlciBpbmZvcm1h dGlvbi4NCj4tDQo+LSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCBF RklfVVNFUl9NQU5BR0VSX1BST1RPQ09MIGluc3RhbmNlDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwb2ludGVyLg0KPi0gIEBwYXJhbSAgVXNlciAgICAgICAgICAgICAgICAg ICAgSGFuZGxlIG9mIHRoZSB1c2VyIHdob3NlIHByb2ZpbGUgd2lsbCBiZQ0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0cmlldmVkLg0KPi0gIEBwYXJhbSAgVXNlckluZm8g ICAgICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGRhdGEgcmVjb3Jk Lg0KPi0gIEBwYXJhbSAgSW5mbyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSB1c2Vy IGluZm9ybWF0aW9uLg0KPi0gIEBwYXJhbSAgSW5mb1NpemUgICAgICAgICAgICAgICAgVGhlIHNp emUgb2YgSW5mbywgaW4gYnl0ZXMuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICAgVXNlciBwcm9maWxlIGluZm9ybWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQvYWRkZWQuDQo+LSAgQHJldHZhbCBF RklfQUNDRVNTX0RFTklFRCAgICAgICBUaGUgcmVjb3JkIGlzIGV4Y2x1c2l2ZS4NCj4tICBAcmV0 dmFsIEVGSV9TRUNVUklUWV9WSU9MQVRJT04gIFRoZSBjdXJyZW50IHVzZXIgZG9lcyBub3QgaGF2 ZQ0KPnBlcm1pc3Npb24gdG8NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YW5nZSAgdGhlIHNwZWNpZmllZCB1c2VyIHByb2ZpbGUgb3IgdXNlcg0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gcmVjb3JkLg0KPi0NCj4tKiovDQo+LUVG SV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlU2V0SW5mbyAoDQo+LSAgSU4gQ09OU1Qg IEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KPi0gIElOICAgICAg ICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyLA0KPi0gIElOIE9VVCAg ICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICAqVXNlckluZm8sDQo+LSAgSU4g Q09OU1QgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAgICpJbmZvLA0KPi0gIElO ICAgICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvU2l6ZQ0KPi0g ICk7DQo+LQ0KPi0NCj4tLyoqDQo+LSAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGNyZWRlbnRp YWwgcHJvdmlkZXIgdG8gbm90aWZ5IHRoZSBVc2VyIElkZW50aXR5DQo+TWFuYWdlcg0KPi0gIHdo ZW4gdXNlciBzdGF0dXMgaGFzIGNoYW5nZWQgd2hpbGUgZGVzZWxlY3RlZC4NCj4tDQo+LSAgQHBh cmFtICBUaGlzICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCBFRklfVVNFUl9NQU5BR0VSX1BS T1RPQ09MIGluc3RhbmNlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2lu dGVyLg0KPi0gIEBwYXJhbSAgQ2hhbmdlZCAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBp bnN0YW5jZSBvZiB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9V U0VSX0NSRURFTlRJQUxfUFJPVE9DT0wgIHdoZXJlIHRoZSB1c2VyIGhhcw0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgICBUaGUgVXNlciBJZGVudGl0eSBNYW5hZ2VyIGhhcyBoYW5kbGVkIHRo ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLg0KPi0g IEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQg d2hpbGUgdGhlIHNwZWNpZmllZA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3JlZGVudGlhbCAgcHJvdmlkZXIgd2FzIG5vdCBzZWxlY3RlZC4NCj4tICBAcmV0dmFsIEVGSV9V TlNVUFBPUlRFRCAgICAgICAgIFRoZSBVc2VyIElkZW50aXR5IE1hbmFnZXIgZG9lc24ndCBzdXBw b3J0DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY2hyb25vdXMgIG5v dGlmaWNhdGlvbnMuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlclBy b2ZpbGVOb3RpZnkgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAg ICAgICAgICAqVGhpcywNCj4tICBJTiAgICAgICAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICAgICAgICAgQ2hhbmdlZA0KPi0gICk7DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRGVsZXRlIHRoZSB1 c2VyIGluZm9ybWF0aW9uIGF0dGFjaGVkIHRvIHRoZSB1c2VyIHByb2ZpbGUgc3BlY2lmaWVkIGJ5 IHRoZQ0KPlVzZXJJbmZvLg0KPi0NCj4tICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICAg IFByb3RvY29sIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgaW5zdGFuY2UNCj5wb2ludGVyLg0K Pi0gIEBwYXJhbSAgVXNlciAgICAgICAgICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIHdo b3NlIHByb2ZpbGUgd2lsbCBiZSByZXRyaWV2ZWQuDQo+LSAgQHBhcmFtICBVc2VySW5mbyAgICAg ICAgICAgICAgICBIYW5kbGUgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb24gZGF0YSByZWNvcmQuDQo+ LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVXNlciBpbmZvcm1hdGlvbiBk ZWxldGVkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAg IFRoZSBjdXJyZW50IHVzZXIgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uDQo+dG8NCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzIHVzZXIgaW4tZm9ybWF0aW9u Lg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgVXNlciBpbmZvcm1hdGlvbiBy ZWNvcmQgVXNlckluZm8gZG9lcyBub3QNCj5leGlzdA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW4gdGhlIHVzZXIgcHJvLWZpbGUuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRV Uw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVEZWxldGVJbmZvICgNCj4tICBJTiBDT05TVCAgRUZJ X1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVG SV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXIsDQo+LSAgSU4gICAgICAgIEVG SV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgIFVzZXJJbmZvDQo+LSAgKTsNCj4tDQo+ LQ0KPi0vKioNCj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5leHQgdXNlciBpbmZvcm1h dGlvbiByZWNvcmQuDQo+LQ0KPi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJv dG9jb2wgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCBpbnN0YW5jZQ0KPnBvaW50ZXIuDQo+LSAg QHBhcmFtICBVc2VyICAgICAgICAgICAgICAgICAgICBIYW5kbGUgb2YgdGhlIHVzZXIgd2hvc2Ug cHJvZmlsZSB3aWxsIGJlIHJldHJpZXZlZC4NCj4tICBAcGFyYW0gIFVzZXJJbmZvICAgICAgICAg ICAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbiBkYXRhIHJlY29yZC4NCj4tDQo+ LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBVc2VyIGluZm9ybWF0aW9uIHJldHVy bmVkLg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgTm8gbW9yZSB1c2VyIGlu Zm9ybWF0aW9uIGZvdW5kLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVz ZXJQcm9maWxlR2V0TmV4dEluZm8gKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BS T1RPQ09MICAgICAgICAgICAqVGhpcywNCj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9I QU5ETEUgICAgICAgICAgICAgVXNlciwNCj4tICBJTiBPVVQgICAgRUZJX1VTRVJfSU5GT19IQU5E TEUgICAgICAgICAgICAgICAgKlVzZXJJbmZvDQo+LSAgKTsNCj4tDQo+LSNlbmRpZg0KPmRpZmYg LS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5h Z2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFnZXIudW5pDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRl bnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW4NCj5hZ2Vy LnVuaQ0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IDgyYzcyYmFlZWIuLjAwMDAw MDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRp ZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFnZXIudW5pDQo+KysrIC9kZXYvbnVsbA0K PkBAIC0xLDIxICswLDAgQEANCj4tLy8gLyoqIEBmaWxlDQo+LS8vIFByb2R1Y2VzIHVzZXIgbWFu YWdlciBwcm90b2NvbA0KPi0vLw0KPi0vLyBUaGlzIG1vZHVsZSBtYW5hZ2VzIHVzZXIgaW5mb3Jt YXRpb24gYW5kIHByb2R1Y2VzIHVzZXIgbWFuYWdlcg0KPnByb3RvY29sLg0KPi0vLw0KPi0vLyBD b3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC48QlI+DQo+LS8vDQo+LS8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWlu ZyBtYXRlcmlhbHMNCj4tLy8gYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4tLy8gd2hpY2gg YWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vu c2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4tLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2Vz L2JzZC1saWNlbnNlLnBocA0KPi0vLyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBU SEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPkJBU0lTLA0KPi0vLyBXSVRIT1VUIFdBUlJB TlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9S IElNUExJRUQuDQo+LS8vDQo+LS8vICoqLw0KPi0NCj4tDQo+LSNzdHJpbmcgU1RSX01PRFVMRV9B QlNUUkFDVCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlByb2R1Y2VzIHVzZXINCj5tYW5h Z2VyIHByb3RvY29sIg0KPi0NCj4tI3N0cmluZyBTVFJfTU9EVUxFX0RFU0NSSVBUSU9OICAgICAg ICAgICNsYW5ndWFnZSBlbi1VUyAiVGhpcyBtb2R1bGUNCj5tYW5hZ2VzIHVzZXIgaW5mb3JtYXRp b24gYW5kIHByb2R1Y2VzIHVzZXIgbWFuYWdlciBwcm90b2NvbC4iDQo+LQ0KPmRpZmYgLS1naXQN Cj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhl L1VzZXJJZGVudGlmeU1hbg0KPmFnZXJEYXRhLmgNCj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlm aWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFnZXJEYXRh LmgNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCA0ZTA3ZGRkMzA5Li4wMDAwMDAw MDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5 TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW4NCj5hZ2VyRGF0YS5oDQo+KysrIC9kZXYvbnVsbA0K PkBAIC0xLDM1ICswLDAgQEANCj4tLyoqIEBmaWxlDQo+LSAgRGF0YSBzdHJ1Y3R1cmUgdXNlZCBi eSB0aGUgdXNlciBpZGVudGlmeSBtYW5hZ2VyIGRyaXZlci4NCj4tDQo+LUNvcHlyaWdodCAoYykg MjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N Cj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPi1hcmUgbGlj ZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlv bi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4taHR0 cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0NCj4tVEhFIFBS T0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIg QkFTSVMsDQo+LVdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJ TkQsIEVJVEhFUg0KPkVYUFJFU1MgT1IgSU1QTElFRC4NCj4tDQo+LSoqLw0KPi0NCj4tI2lmbmRl ZiBfVVNFUl9JREVOVElGWV9NQU5BR0VSX0RBVEFfSF8NCj4tI2RlZmluZSBfVVNFUl9JREVOVElG WV9NQU5BR0VSX0RBVEFfSF8NCj4tDQo+LSNpbmNsdWRlIDxHdWlkL1VzZXJJZGVudGlmeU1hbmFn ZXJIaWkuaD4NCj4tDQo+LS8vDQo+LS8vIEZvcm1zIGRlZmluaXRpb24uDQo+LS8vDQo+LSNkZWZp bmUgRk9STUlEX1VTRVJfRk9STSAgICAgIDENCj4tI2RlZmluZSBGT1JNSURfUFJPVklERVJfRk9S TSAgMg0KPi0jZGVmaW5lIEZPUk1JRF9JTlZBTElEX0ZPUk0gICAweDBGRkYNCj4tDQo+LS8vDQo+ LS8vIExhYmVscyBkZWZpbml0aW9uLg0KPi0vLw0KPi0jZGVmaW5lIExBQkVMX1VTRVJfTkFNRSAg ICAgICAweDEwMDANCj4tI2RlZmluZSBMQUJFTF9QUk9WSURFUl9OQU1FICAgMHgzMDAwDQo+LSNk ZWZpbmUgTEFCRUxfRU5EICAgICAgICAgICAgIDB4ZmZmZg0KPi0jZGVmaW5lIEZPUk1fT1BFTl9R VUVTVElPTl9JRCAweGZmZmUNCj4tDQo+LSNlbmRpZg0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5 UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlm eU1hbg0KPmFnZXJEeGUuaW5mDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNl cklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW4NCj5hZ2VyRHhlLmluZg0KPmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IDI3ZThiYTE5YWQuLjAwMDAwMDAwMDANCj4tLS0N Cj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhl L1VzZXJJZGVudGlmeU1hbg0KPmFnZXJEeGUuaW5mDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDc5 ICswLDAgQEANCj4tIyMgQGZpbGUNCj4tIyAgUHJvZHVjZXMgdXNlciBtYW5hZ2VyIHByb3RvY29s DQo+LSMNCj4tIyAgVGhpcyBtb2R1bGUgbWFuYWdlcyB1c2VyIGluZm9ybWF0aW9uIGFuZCBwcm9k dWNlcyB1c2VyIG1hbmFnZXINCj5wcm90b2NvbC4NCj4tIw0KPi0jIENvcHlyaWdodCAoYykgMjAw OSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4t IyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LSMgYXJlIGxp Y2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4tIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1 dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi0j IGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tIyBUSEUg UFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElT Ig0KPkJBU0lTLA0KPi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0Yg QU5ZIEtJTkQsIEVJVEhFUg0KPkVYUFJFU1MgT1IgSU1QTElFRC4NCj4tIw0KPi0jIw0KPi0NCj4t W2RlZmluZXNdDQo+LSAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAw NQ0KPi0gIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFVzZXJJZGVudGlmeU1hbmFn ZXINCj4tICBNT0RVTEVfVU5JX0ZJTEUgICAgICAgICAgICAgICAgPSBVc2VySWRlbnRpZnlNYW5h Z2VyLnVuaQ0KPi0gIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IEM1RDMxOTFCLTI3 RDUtNDg3My04REYyLTYyODEzNjk5MUEyMQ0KPi0gIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAg ICAgICA9IERYRV9EUklWRVINCj4tICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAx LjANCj4tICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBVc2VySWRlbnRpZnlNYW5h Z2VySW5pdA0KPi0NCj4tW3NvdXJjZXNdDQo+LSAgVXNlcklkZW50aWZ5TWFuYWdlci5jDQo+LSAg TG9hZERlZmVycmVkSW1hZ2UuYw0KPi0gIFVzZXJJZGVudGlmeU1hbmFnZXIuaA0KPi0gIFVzZXJJ ZGVudGlmeU1hbmFnZXJEYXRhLmgNCj4tICBVc2VySWRlbnRpZnlNYW5hZ2VyU3RyaW5ncy51bmkN Cj4tICBVc2VySWRlbnRpZnlNYW5hZ2VyVmZyLlZmcg0KPi0NCj4tW1BhY2thZ2VzXQ0KPi0gIE1k ZVBrZy9NZGVQa2cuZGVjDQo+LSAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4tICBT ZWN1cml0eVBrZy9TZWN1cml0eVBrZy5kZWMNCj4tDQo+LVtMaWJyYXJ5Q2xhc3Nlc10NCj4tICBV ZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWINCj4tICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIN Cj4tICBVZWZpRHJpdmVyRW50cnlQb2ludA0KPi0gIE1lbW9yeUFsbG9jYXRpb25MaWINCj4tICBC YXNlTWVtb3J5TGliDQo+LSAgRGVidWdMaWINCj4tICBIaWlMaWINCj4tICBVZWZpTGliDQo+LQ0K Pi1bR3VpZHNdDQo+LSAgZ0VmaUlmclRpYW5vR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgIyMgR1VJRA0KPi0gIGdFZmlFdmVudFVzZXJQcm9m aWxlQ2hhbmdlZEd1aWQgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfUFJPRFVDRVMgICMjDQo+ RXZlbnQNCj4tDQo+LSAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAgICAgICAgICAgICAgICAgICAg ICAgICMjIFZhcmlhYmxlOkwiVXNlcnh4eHgiDQo+LSAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAg ICAgICAgICAgICAgICAgICAgICAgICMjIFZhcmlhYmxlOkwiVXNlcnh4eHgiDQo+LSAgIyMgQ09O U1VNRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIEhJSQ0KPi0gIGdVc2Vy SWRlbnRpZnlNYW5hZ2VyR3VpZA0KPi0NCj4tW1Byb3RvY29sc10NCj4tICBnRWZpRm9ybUJyb3dz ZXIyUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCj4tICBnRWZpSGlp RGF0YWJhc2VQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCj4tICBn RWZpVXNlckNyZWRlbnRpYWwyUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgIyMgU09NRVRJTUVT X0NPTlNVTUVTDQo+LSAgZ0VmaURlZmVycmVkSW1hZ2VMb2FkUHJvdG9jb2xHdWlkICAgICAgICAg ICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0KPi0gIGdFZmlTaW1wbGVUZXh0T3V0UHJvdG9jb2xH dWlkICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4tICBnRWZpU2ltcGxl VGV4dEluUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVT DQo+LSAgZ0VmaVNpbXBsZVRleHRJbnB1dEV4UHJvdG9jb2xHdWlkICAgICAgICAgICAgICMjIFNP TUVUSU1FU19DT05TVU1FUw0KPi0gIGdFZmlIaWlDb25maWdBY2Nlc3NQcm90b2NvbEd1aWQgICAg ICAgICAgICAgICAjIyBQUk9EVUNFUw0KPi0gIGdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkICAg ICAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KPi0NCj4tICAjIyBQUk9EVUNFUw0KPi0gICMj IFNPTUVUSU1FU19QUk9EVUNFUyAgICAgICAgICAgICAgICAgICAgICAgICAjIyBTeXN0ZW1UYWJs ZQ0KPi0gIGdFZmlVc2VyTWFuYWdlclByb3RvY29sR3VpZA0KPi0NCj4tW0RlcGV4XQ0KPi0gIGdF ZmlIaWlEYXRhYmFzZVByb3RvY29sR3VpZCAgIEFORA0KPi0gIGdFZmlIaWlTdHJpbmdQcm90b2Nv bEd1aWQgICAgIEFORA0KPi0gIGdFZmlGb3JtQnJvd3NlcjJQcm90b2NvbEd1aWQNCj4tDQo+LVtV c2VyRXh0ZW5zaW9ucy5UaWFub0NvcmUuIkV4dHJhRmlsZXMiXQ0KPi0gIFVzZXJJZGVudGlmeU1h bmFnZXJFeHRyYS51bmkNCj4tDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50 aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuDQo+YWdlckV4 dHJhLnVuaQ0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1h bmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuDQo+YWdlckV4dHJhLnVuaQ0KPmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NA0KPmluZGV4IDhiN2NiYTdiMzIuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3Vy aXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVu dGlmeU1hbg0KPmFnZXJFeHRyYS51bmkNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMTkgKzAsMCBA QA0KPi0vLyAvKiogQGZpbGUNCj4tLy8gVXNlcklkZW50aWZ5TWFuYWdlciBMb2NhbGl6ZWQgU3Ry aW5ncyBhbmQgQ29udGVudA0KPi0vLw0KPi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgLSAyMDE4LCBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LS8vDQo+LS8vIFRo aXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tLy8gYXJlIGxpY2Vu c2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIEJTRA0KPkxpY2Vuc2UNCj4tLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRp b24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4tLy8g aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0vLyBUSEUg UFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElT Ig0KPkJBU0lTLA0KPi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9G IEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LS8vDQo+LS8vICoqLw0K Pi0NCj4tI3N0cmluZyBTVFJfUFJPUEVSVElFU19NT0RVTEVfTkFNRQ0KPi0jbGFuZ3VhZ2UgZW4t VVMNCj4tIlVzZXIgSWRlbnRpZnkgTWFuYWdlciINCj4tDQo+LQ0KPmRpZmYgLS1naXQNCj5hL1Nl Y3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJ ZGVudGlmeU1hbg0KPmFnZXJTdHJpbmdzLnVuaQ0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZp Y2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuDQo+YWdlclN0cmlu Z3MudW5pDQo+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+aW5kZXggZmNiZjUwMDVjZC4uMDAw MDAwMDAwMA0KPi0tLQ0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVu dGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuDQo+YWdlclN0cmluZ3MudW5pDQo+KysrIC9k ZXYvbnVsbA0KPkBAIC0xLDI3ICswLDAgQEANCj4tLyoqIEBmaWxlDQo+LSAgU3RyaW5nIGRlZmlu aXRpb25zIGZvciB0aGUgVXNlciBJZGVudGlmeSBNYW5hZ2VyIGRyaXZlci4NCj4tDQo+LUNvcHly aWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0K Pi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29u ZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRp c3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQg YXQNCj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4NCj4t DQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBB TiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05T IE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4t DQo+LSNsYW5nZGVmIGVuLVVTICJFbmdsaXNoIg0KPi0jbGFuZ2RlZiBmci1GUiAiRnJhbmNhaXMi DQo+LQ0KPi0jc3RyaW5nIFNUUl9USVRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICNsYW5ndWFnZSBlbi1VUyAgIlVzZXIgSWRlbnRpdHkgTWFuYWdlciINCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJV c2VyIElkZW50aXR5IE1hbmFnZXIoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfVVNFUl9TRUxFQ1Qg ICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJVc2VyIFNlbGVjdGlv biINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj bGFuZ3VhZ2UgZnItRlIgICJVc2VyIFNlbGVjdGlvbihGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9Q Uk9WSURFUl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlBy b3ZpZGVyDQo+U2VsZWN0aW9uIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlVzZXIgU2VsZWN0aW9uKEZyZW5jaCki DQo+LSNzdHJpbmcgU1RSX05VTExfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xh bmd1YWdlIGVuLVVTICAiIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIiINCj4tDQo+LQ0KPmRpZmYgLS1naXQNCj5h L1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1Vz ZXJJZGVudGlmeU1hbg0KPmFnZXJWZnIuVmZyDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmlj YXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW4NCj5hZ2VyVmZyLlZm cg0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IDMwNjY3OTc3NmQuLjAwMDAwMDAw MDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlN YW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFnZXJWZnIuVmZyDQo+KysrIC9kZXYvbnVsbA0K PkBAIC0xLDQzICswLDAgQEANCj4tLyoqIEBmaWxlDQo+LSAgVXNlciBpZGVudGlmeSBtYW5hZ2Vy IGZvcm1zZXQuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDEwLCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFj Y29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBs aWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl cy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVS IFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJ RVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElN UExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpbmNsdWRlICJVc2VySWRlbnRpZnlNYW5hZ2VyRGF0 YS5oIg0KPi0NCj4tZm9ybXNldA0KPi0gIGd1aWQgICAgICA9IFVTRVJfSURFTlRJRllfTUFOQUdF Ul9HVUlELA0KPi0gIHRpdGxlICAgICA9IFNUUklOR19UT0tFTihTVFJfVElUTEUpLA0KPi0gIGhl bHAgICAgICA9IFNUUklOR19UT0tFTihTVFJfTlVMTF9TVFJJTkcpLA0KPi0gIGNsYXNzZ3VpZCA9 IFVTRVJfSURFTlRJRllfTUFOQUdFUl9HVUlELA0KPi0NCj4tICBmb3JtIGZvcm1pZCA9IEZPUk1J RF9VU0VSX0ZPUk0sDQo+LSAgICB0aXRsZSA9IFNUUklOR19UT0tFTihTVFJfVVNFUl9TRUxFQ1Qp Ow0KPi0NCj4tICAgIHN1cHByZXNzaWYgVFJVRTsNCj4tICAgICAgdGV4dA0KPi0gICAgICAgIGhl bHAgICA9IFNUUklOR19UT0tFTihTVFJfTlVMTF9TVFJJTkcpLA0KPi0gICAgICAgIHRleHQgICA9 IFNUUklOR19UT0tFTihTVFJfTlVMTF9TVFJJTkcpLA0KPi0gICAgICAgIGZsYWdzICA9IElOVEVS QUNUSVZFLA0KPi0gICAgICAgIGtleSAgICA9IEZPUk1fT1BFTl9RVUVTVElPTl9JRDsNCj4tICAg IGVuZGlmOw0KPi0NCj4tICAgIGxhYmVsIExBQkVMX1VTRVJfTkFNRTsNCj4tICAgIGxhYmVsIExB QkVMX0VORDsNCj4tICBlbmRmb3JtOw0KPi0NCj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9QUk9W SURFUl9GT1JNLA0KPi0gICAgdGl0bGUgPSBTVFJJTkdfVE9LRU4oU1RSX1BST1ZJREVSX1NFTEVD VCk7DQo+LSAgICBsYWJlbCBMQUJFTF9QUk9WSURFUl9OQU1FOw0KPi0gICAgbGFiZWwgTEFCRUxf RU5EOw0KPi0gIGVuZGZvcm07DQo+LWVuZGZvcm1zZXQ7DQo+XCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1Vz ZXJQcm9maWxlTWFuYWdlckR4ZS9Nb2RpZnlBY2Nlc3NQb2xpYw0KPnkuYw0KPmIvU2VjdXJpdHlQ a2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Nb2RpZnlBY2Nlc3NQ b2xpYw0KPnkuYw0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IDU2ZDNiMWRmOTgu LjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2Vy UHJvZmlsZU1hbmFnZXJEeGUvTW9kaWZ5QWNjZXNzUG9saWMNCj55LmMNCj4rKysgL2Rldi9udWxs DQo+QEAgLTEsNjg4ICswLDAgQEANCj4tLyoqIEBmaWxlDQo+LSAgVGhlIGZ1bmN0aW9ucyBmb3Ig YWNjZXNzIHBvbGljeSBtb2RpZmljYXRpb24uDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAy MDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMg cHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFu ZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJT RA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg ZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVu c291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElT IERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0K Pi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI RVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpbmNsdWRlICJVc2Vy UHJvZmlsZU1hbmFnZXIuaCINCj4tDQo+LS8qKg0KPi0gIENvbGxlY3QgYWxsIHRoZSBhY2Nlc3Mg cG9saWN5IGRhdGEgdG8gbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSwNCj4tICBhbmQgc2F2ZSBpdCB0 byB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1TYXZlQWNjZXNzUG9saWN5ICgN Cj4tICBWT0lEDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIE9mZlNldDsNCj4tICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBTaXplOw0KPi0gIEVGSV9VU0VSX0lORk9fQUND RVNTX0NPTlRST0wgIENvbnRyb2w7DQo+LSAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAg VXNlckluZm87DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKkluZm87DQo+LQ0K Pi0gIGlmIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICE9IE5VTEwpIHsNCj4tICAgIEZyZWVQb29s IChtVXNlckluZm8uQWNjZXNzUG9saWN5KTsNCj4tICB9DQo+LSAgbVVzZXJJbmZvLkFjY2Vzc1Bv bGljeSAgICAgICAgICA9IE5VTEw7DQo+LSAgbVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAgICAg ICA9IDA7DQo+LSAgbVVzZXJJbmZvLkFjY2Vzc1BvbGljeU1vZGlmaWVkICA9IFRSVUU7DQo+LSAg T2ZmU2V0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7DQo+LQ0KPi0gIC8vDQo+LSAgLy8g U2F2ZSBhY2Nlc3MgcmlnaHQuDQo+LSAgLy8NCj4tICBTaXplID0gc2l6ZW9mIChFRklfVVNFUl9J TkZPX0FDQ0VTU19DT05UUk9MKTsNCj4tICBpZiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAt IE9mZlNldCA8IFNpemUpIHsNCj4tICAgIEV4cGFuZE1lbW9yeSAoT2ZmU2V0LCBTaXplKTsNCj4t ICB9DQo+LQ0KPi0gIENvbnRyb2wuVHlwZSA9IG1BY2Nlc3NJbmZvLkFjY2Vzc1JpZ2h0Ow0KPi0g IENvbnRyb2wuU2l6ZSA9IChVSU5UMzIpIFNpemU7DQo+LSAgQ29weU1lbSAobVVzZXJJbmZvLkFj Y2Vzc1BvbGljeSArIE9mZlNldCwgJkNvbnRyb2wsIHNpemVvZiAoQ29udHJvbCkpOw0KPi0gIE9m ZlNldCArPSBzaXplb2YgKENvbnRyb2wpOw0KPi0NCj4tICAvLw0KPi0gIC8vIFNhdmUgYWNjZXNz IHNldHVwLg0KPi0gIC8vDQo+LSAgU2l6ZSA9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1Nf Q09OVFJPTCkgKyBzaXplb2YgKEVGSV9HVUlEKTsNCj4tICBpZiAobVVzZXJJbmZvLkFjY2Vzc1Bv bGljeUxlbiAtIE9mZlNldCA8IFNpemUpIHsNCj4tICAgIEV4cGFuZE1lbW9yeSAoT2ZmU2V0LCBT aXplKTsNCj4tICB9DQo+LQ0KPi0gIENvbnRyb2wuVHlwZSA9IEVGSV9VU0VSX0lORk9fQUNDRVNT X1NFVFVQOw0KPi0gIENvbnRyb2wuU2l6ZSA9IChVSU5UMzIpIFNpemU7DQo+LSAgQ29weU1lbSAo bVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCwgJkNvbnRyb2wsIHNpemVvZiAoQ29udHJv bCkpOw0KPi0gIE9mZlNldCArPSBzaXplb2YgKENvbnRyb2wpOw0KPi0NCj4tICBpZiAobUFjY2Vz c0luZm8uQWNjZXNzU2V0dXAgPT0gQUNDRVNTX1NFVFVQX05PUk1BTCkgew0KPi0gICAgQ29weUd1 aWQgKChFRklfR1VJRCAqKSAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCksDQo+JmdF ZmlVc2VySW5mb0FjY2Vzc1NldHVwTm9ybWFsR3VpZCk7DQo+LSAgfSBlbHNlIGlmIChtQWNjZXNz SW5mby5BY2Nlc3NTZXR1cCA9PSBBQ0NFU1NfU0VUVVBfUkVTVFJJQ1RFRCkgew0KPi0gICAgQ29w eUd1aWQgKChFRklfR1VJRCAqKSAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCksDQo+ JmdFZmlVc2VySW5mb0FjY2Vzc1NldHVwUmVzdHJpY3RlZEd1aWQpOw0KPi0gIH0gZWxzZSBpZiAo bUFjY2Vzc0luZm8uQWNjZXNzU2V0dXAgPT0gQUNDRVNTX1NFVFVQX0FETUlOKSB7DQo+LSAgICBD b3B5R3VpZCAoKEVGSV9HVUlEICopIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0KSwN Cj4mZ0VmaVVzZXJJbmZvQWNjZXNzU2V0dXBBZG1pbkd1aWQpOw0KPi0gIH0NCj4tICBPZmZTZXQg Kz0gc2l6ZW9mIChFRklfR1VJRCk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSBhY2Nlc3Mgb2Yg Ym9vdCBvcmRlci4NCj4tICAvLw0KPi0gIFNpemUgPSBzaXplb2YgKEVGSV9VU0VSX0lORk9fQUND RVNTX0NPTlRST0wpICsgc2l6ZW9mIChVSU5UMzIpOw0KPi0gIGlmIChtVXNlckluZm8uQWNjZXNz UG9saWN5TGVuIC0gT2ZmU2V0IDwgU2l6ZSkgew0KPi0gICAgRXhwYW5kTWVtb3J5IChPZmZTZXQs IFNpemUpOw0KPi0gIH0NCj4tDQo+LSAgQ29udHJvbC5UeXBlID0gRUZJX1VTRVJfSU5GT19BQ0NF U1NfQk9PVF9PUkRFUjsNCj4tICBDb250cm9sLlNpemUgPSAoVUlOVDMyKSBTaXplOw0KPi0gIENv cHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsICZDb250cm9sLCBzaXplb2Yg KENvbnRyb2wpKTsNCj4tICBPZmZTZXQgKz0gc2l6ZW9mIChDb250cm9sKTsNCj4tDQo+LSAgQ29w eU1lbSAoKFVJTlQ4ICopIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0KSwNCj4mbUFj Y2Vzc0luZm8uQWNjZXNzQm9vdE9yZGVyLCBzaXplb2YgKFVJTlQzMikpOw0KPi0gIE9mZlNldCAr PSBzaXplb2YgKFVJTlQzMik7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSBwZXJtaXQgbG9hZC4N Cj4tICAvLw0KPi0gIGlmIChtQWNjZXNzSW5mby5Mb2FkUGVybWl0TGVuID4gMCkgew0KPi0gICAg U2l6ZSA9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCkgKw0KPm1BY2Nlc3NJ bmZvLkxvYWRQZXJtaXRMZW47DQo+LSAgICBpZiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAt IE9mZlNldCA8IFNpemUpIHsNCj4tICAgICAgRXhwYW5kTWVtb3J5IChPZmZTZXQsIFNpemUpOw0K Pi0gICAgfQ0KPi0NCj4tICAgIENvbnRyb2wuVHlwZSA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX1BF Uk1JVF9MT0FEOw0KPi0gICAgQ29udHJvbC5TaXplID0gKFVJTlQzMikgU2l6ZTsNCj4tICAgIENv cHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsICZDb250cm9sLCBzaXplb2Yg KENvbnRyb2wpKTsNCj4tICAgIE9mZlNldCArPSBzaXplb2YgKENvbnRyb2wpOw0KPi0NCj4tICAg IENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsIG1BY2Nlc3NJbmZvLkxv YWRQZXJtaXQsDQo+bUFjY2Vzc0luZm8uTG9hZFBlcm1pdExlbik7DQo+LSAgICBPZmZTZXQgKz0g bUFjY2Vzc0luZm8uTG9hZFBlcm1pdExlbjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2 ZSBmb3JiaWQgbG9hZC4NCj4tICAvLw0KPi0gIGlmIChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVu ID4gMCkgew0KPi0gICAgU2l6ZSA9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJP TCkgKw0KPm1BY2Nlc3NJbmZvLkxvYWRGb3JiaWRMZW47DQo+LSAgICBpZiAobVVzZXJJbmZvLkFj Y2Vzc1BvbGljeUxlbiAtIE9mZlNldCA8IFNpemUpIHsNCj4tICAgICAgRXhwYW5kTWVtb3J5IChP ZmZTZXQsIFNpemUpOw0KPi0gICAgfQ0KPi0NCj4tICAgIENvbnRyb2wuVHlwZSA9IEVGSV9VU0VS X0lORk9fQUNDRVNTX0ZPUkJJRF9MT0FEOw0KPi0gICAgQ29udHJvbC5TaXplID0gKFVJTlQzMikg U2l6ZTsNCj4tICAgIENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsICZD b250cm9sLCBzaXplb2YgKENvbnRyb2wpKTsNCj4tICAgIE9mZlNldCArPSBzaXplb2YgKENvbnRy b2wpOw0KPi0NCj4tICAgIENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQs IG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQsDQo+bUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbik7DQo+ LSAgICBPZmZTZXQgKz0gbUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbjsNCj4tICB9DQo+LQ0KPi0g IC8vDQo+LSAgLy8gU2F2ZSBwZXJtaXQgY29ubmVjdC4NCj4tICAvLw0KPi0gIGlmIChtQWNjZXNz SW5mby5Db25uZWN0UGVybWl0TGVuID4gMCkgew0KPi0gICAgU2l6ZSA9IHNpemVvZiAoRUZJX1VT RVJfSU5GT19BQ0NFU1NfQ09OVFJPTCkgKw0KPm1BY2Nlc3NJbmZvLkNvbm5lY3RQZXJtaXRMZW47 DQo+LSAgICBpZiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAtIE9mZlNldCA8IFNpemUpIHsN Cj4tICAgICAgRXhwYW5kTWVtb3J5IChPZmZTZXQsIFNpemUpOw0KPi0gICAgfQ0KPi0NCj4tICAg IENvbnRyb2wuVHlwZSA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX1BFUk1JVF9DT05ORUNUOw0KPi0g ICAgQ29udHJvbC5TaXplID0gKFVJTlQzMikgU2l6ZTsNCj4tICAgIENvcHlNZW0gKG1Vc2VySW5m by5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsICZDb250cm9sLCBzaXplb2YgKENvbnRyb2wpKTsNCj4t ICAgIE9mZlNldCArPSBzaXplb2YgKENvbnRyb2wpOw0KPi0NCj4tICAgIENvcHlNZW0gKG1Vc2Vy SW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsIG1BY2Nlc3NJbmZvLkNvbm5lY3RQZXJtaXQsDQo+ bUFjY2Vzc0luZm8uQ29ubmVjdFBlcm1pdExlbik7DQo+LSAgICBPZmZTZXQgKz0gbUFjY2Vzc0lu Zm8uQ29ubmVjdFBlcm1pdExlbjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSBmb3Ji aWQgY29ubmVjdC4NCj4tICAvLw0KPi0gIGlmIChtQWNjZXNzSW5mby5Db25uZWN0Rm9yYmlkTGVu ID4gMCkgew0KPi0gICAgU2l6ZSA9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJP TCkgKw0KPm1BY2Nlc3NJbmZvLkNvbm5lY3RGb3JiaWRMZW47DQo+LSAgICBpZiAobVVzZXJJbmZv LkFjY2Vzc1BvbGljeUxlbiAtIE9mZlNldCA8IFNpemUpIHsNCj4tICAgICAgRXhwYW5kTWVtb3J5 IChPZmZTZXQsIFNpemUpOw0KPi0gICAgfQ0KPi0NCj4tICAgIENvbnRyb2wuVHlwZSA9IEVGSV9V U0VSX0lORk9fQUNDRVNTX0ZPUkJJRF9DT05ORUNUOw0KPi0gICAgQ29udHJvbC5TaXplID0gKFVJ TlQzMikgU2l6ZTsNCj4tICAgIENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZT ZXQsICZDb250cm9sLCBzaXplb2YgKENvbnRyb2wpKTsNCj4tICAgIE9mZlNldCArPSBzaXplb2Yg KENvbnRyb2wpOw0KPi0NCj4tICAgIENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBP ZmZTZXQsIG1BY2Nlc3NJbmZvLkNvbm5lY3RGb3JiaWQsDQo+bUFjY2Vzc0luZm8uQ29ubmVjdEZv cmJpZExlbik7DQo+LSAgICBPZmZTZXQgKz0gbUFjY2Vzc0luZm8uQ29ubmVjdEZvcmJpZExlbjsN Cj4tICB9DQo+LQ0KPi0gIG1Vc2VySW5mby5BY2Nlc3NQb2xpY3lMZW4gPSBPZmZTZXQ7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gU2F2ZSBhY2Nlc3MgcG9saWN5Lg0KPi0gIC8vDQo+LSAgaWYgKG1Vc2Vy SW5mby5BY2Nlc3NQb2xpY3lNb2RpZmllZCAmJiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiA+ IDApDQo+JiYgKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgIT0gTlVMTCkpIHsNCj4tICAgIEluZm8g PSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKEVGSV9VU0VSX0lORk8pICsNCj5tVXNlckluZm8u QWNjZXNzUG9saWN5TGVuKTsNCj4tICAgIGlmIChJbmZvID09IE5VTEwpIHsNCj4tICAgICAgcmV0 dXJuIDsNCj4tICAgIH0NCj4tDQo+LSAgICBTdGF0dXMgPSBGaW5kSW5mb0J5VHlwZSAobU1vZGlm eVVzZXIsDQo+RUZJX1VTRVJfSU5GT19BQ0NFU1NfUE9MSUNZX1JFQ09SRCwgJlVzZXJJbmZvKTsN Cj4tICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgIEluZm8tPkluZm9UeXBl ICAgID0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfUE9MSUNZX1JFQ09SRDsNCj4tICAgICAgSW5mby0+ SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgIEVGSV9VU0VSX0lORk9fUFVCTElDIHwNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4tICAgICAgSW5mby0+ SW5mb1NpemUgICAgPSAoVUlOVDMyKSAoc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArDQo+bVVzZXJJ bmZvLkFjY2Vzc1BvbGljeUxlbik7DQo+LSAgICAgIENvcHlNZW0gKChVSU5UOCAqKSAoSW5mbyAr IDEpLCBtVXNlckluZm8uQWNjZXNzUG9saWN5LA0KPm1Vc2VySW5mby5BY2Nlc3NQb2xpY3lMZW4p Ow0KPi0gICAgICBTdGF0dXMgPSBtVXNlck1hbmFnZXItPlNldEluZm8gKA0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbU1vZGlmeVVzZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmVXNlckluZm8sDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvLA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mby0+SW5mb1NpemUNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAgIG1Vc2VySW5mby5BY2Nlc3NQb2xpY3lN b2RpZmllZCA9IEZBTFNFOw0KPi0gICAgfQ0KPi0gICAgRnJlZVBvb2wgKEluZm8pOw0KPi0gIH0N Cj4tDQo+LSAgaWYgKG1BY2Nlc3NJbmZvLkNvbm5lY3RGb3JiaWQgIT0gTlVMTCkgew0KPi0gICAg RnJlZVBvb2wgKG1BY2Nlc3NJbmZvLkNvbm5lY3RGb3JiaWQpOw0KPi0gICAgbUFjY2Vzc0luZm8u Q29ubmVjdEZvcmJpZCA9IE5VTEw7DQo+LSAgfQ0KPi0NCj4tICBpZiAobUFjY2Vzc0luZm8uQ29u bmVjdFBlcm1pdCAhPSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAobUFjY2Vzc0luZm8uQ29ubmVj dFBlcm1pdCk7DQo+LSAgICBtQWNjZXNzSW5mby5Db25uZWN0UGVybWl0ID0gTlVMTDsNCj4tICB9 DQo+LQ0KPi0gIGlmIChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkICE9IE5VTEwpIHsNCj4tICAgIEZy ZWVQb29sIChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkKTsNCj4tICAgIG1BY2Nlc3NJbmZvLkxvYWRG b3JiaWQgPSBOVUxMOw0KPi0gIH0NCj4tDQo+LSAgaWYgKG1BY2Nlc3NJbmZvLkxvYWRQZXJtaXQg IT0gTlVMTCkgew0KPi0gICAgRnJlZVBvb2wgKG1BY2Nlc3NJbmZvLkxvYWRQZXJtaXQpOw0KPi0g ICAgbUFjY2Vzc0luZm8uTG9hZFBlcm1pdCA9IE5VTEw7DQo+LSAgfQ0KPi19DQo+LQ0KPi0vKioN Cj4tICBDcmVhdGUgYW4gYWN0aW9uIE9wQ29kZSB3aXRoIFF1ZXN0aW9uSUQgYW5kIERldmljZVBh dGggb24gYSBnaXZlbg0KPk9wQ29kZUhhbmRsZS4NCj4tDQo+LSAgQHBhcmFtW2luXSAgUXVlc3Rp b25JRCAgICAgICAgICAgIFRoZSBxdWVzdGlvbiBJRC4NCj4tICBAcGFyYW1baW5dICBEZXZpY2VQ YXRoICAgICAgICAgICAgUG9pbnRzIHRvIGRldmljZSBwYXRoLg0KPi0gIEBwYXJhbVtpbl0gIE9w Q29kZUhhbmRsZSAgICAgICAgICBQb2ludHMgdG8gY29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0 ZWQNCj5vcGNvZGVzLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tQWRkRGV2aWNlUGF0aCAoDQo+LSAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQs DQo+LSAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgICAgICAgICAgICpEZXZp Y2VQYXRoLA0KPi0gIElOICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqT3BDb2RlSGFuZGxlDQo+LSAgKQ0KPi17DQo+LSAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09M ICAgICAgICAgICpOZXh0Ow0KPi0gIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgICAgICBO YW1lSUQ7DQo+LSAgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlck5hbWU7 DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IGRyaXZlciBmaWxlIG5hbWUgbm9kZS4NCj4tICAvLw0K Pi0gIE5leHQgPSBEZXZpY2VQYXRoOw0KPi0gIHdoaWxlICghSXNEZXZpY2VQYXRoRW5kIChOZXh0 KSkgew0KPi0gICAgRGV2aWNlUGF0aCAgPSBOZXh0Ow0KPi0gICAgTmV4dCAgICAgICAgPSBOZXh0 RGV2aWNlUGF0aE5vZGUgKE5leHQpOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBEaXNwbGF5 IHRoZSBkZXZpY2UgcGF0aCBpbiBmb3JtLg0KPi0gIC8vDQo+LSAgRHJpdmVyTmFtZSA9IENvbnZl cnREZXZpY2VQYXRoVG9UZXh0IChEZXZpY2VQYXRoLCBGQUxTRSwgRkFMU0UpOw0KPi0gIE5hbWVJ RCA9IEhpaVNldFN0cmluZyAobUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCAwLCBEcml2ZXJOYW1l LCBOVUxMKTsNCj4tICBGcmVlUG9vbCAoRHJpdmVyTmFtZSk7DQo+LSAgaWYgKE5hbWVJRCA9PSAw KSB7DQo+LSAgICByZXR1cm4gOw0KPi0gIH0NCj4tDQo+LSAgSGlpQ3JlYXRlQWN0aW9uT3BDb2Rl ICgNCj4tICAgIE9wQ29kZUhhbmRsZSwgICAgICAgICAgICAgICAgICAgLy8gQ29udGFpbmVyIGZv ciBkeW5hbWljIGNyZWF0ZWQgb3Bjb2Rlcw0KPi0gICAgKFVJTlQxNikgUXVlc3Rpb25JRCwgICAg ICAgICAgICAvLyBRdWVzdGlvbiBJRA0KPi0gICAgTmFtZUlELCAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBQcm9tcHQgdGV4dA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJfTlVMTF9TVFJJTkcp LCAvLyBIZWxwIHRleHQNCj4tICAgIEVGSV9JRlJfRkxBR19DQUxMQkFDSywgICAgICAgICAgLy8g UXVlc3Rpb24gZmxhZw0KPi0gICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBB Y3Rpb24gU3RyaW5nIElEDQo+LSAgICApOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQ2hlY2sg d2hldGhlciB0aGUgRGV2aWNlUGF0aCBpcyBpbiB0aGUgZGV2aWNlIHBhdGggZm9yYmlkIGxpc3QN Cj4tICAobUFjY2Vzc0luZm8uTG9hZEZvcmJpZCkuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIERldmlj ZVBhdGggICAgICAgICAgIFBvaW50cyB0byBkZXZpY2UgcGF0aC4NCj4tDQo+LSAgQHJldHZhbCBU UlVFICAgICBUaGUgRGV2aWNlUGF0aCBpcyBpbiB0aGUgZGV2aWNlIHBhdGggZm9yYmlkIGxpc3Qu DQo+LSAgQHJldHZhbCBGQUxTRSAgICBUaGUgRGV2aWNlUGF0aCBpcyBub3QgaW4gdGhlIGRldmlj ZSBwYXRoIGZvcmJpZCBsaXN0Lg0KPi0NCj4tKiovDQo+LUJPT0xFQU4NCj4tSXNMb2FkRm9yYmlk ZGVuICgNCj4tICBJTiAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAgICAgICAgICAg KkRldmljZVBhdGgNCj4tICApDQo+LXsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIE9m ZlNldDsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIERQU2l6ZTsNCj4tICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgIFNpemU7DQo+LSAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAq RHA7DQo+LQ0KPi0gIE9mZlNldCA9IDA7DQo+LSAgU2l6ZSAgID0gR2V0RGV2aWNlUGF0aFNpemUg KERldmljZVBhdGgpOw0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgZWFjaCBkZXZpY2UgcGF0aC4NCj4t ICAvLw0KPi0gIHdoaWxlIChPZmZTZXQgPCBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVuKSB7DQo+ LSAgICBEcCAgICAgID0gKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSAobUFjY2Vzc0luZm8u TG9hZEZvcmJpZCArDQo+T2ZmU2V0KTsNCj4tICAgIERQU2l6ZSAgPSBHZXREZXZpY2VQYXRoU2l6 ZSAoRHApOw0KPi0gICAgLy8NCj4tICAgIC8vIENvbXBhcmUgZGV2aWNlIHBhdGguDQo+LSAgICAv Lw0KPi0gICAgaWYgKChEUFNpemUgPT0gU2l6ZSkgJiYgKENvbXBhcmVNZW0gKERldmljZVBhdGgs IERwLCBTaXplKSA9PSAwKSkgew0KPi0gICAgICByZXR1cm4gVFJVRTsNCj4tICAgIH0NCj4tICAg IE9mZlNldCArPSBEUFNpemU7DQo+LSAgfQ0KPi0gIHJldHVybiBGQUxTRTsNCj4tfQ0KPi0NCj4t DQo+LS8qKg0KPi0gIERpc3BsYXkgdGhlIHBlcm1pdCBsb2FkIGRldmljZSBwYXRoIGluIHRoZSBs b2FkYWJsZSBkZXZpY2UgcGF0aCBsaXN0Lg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tRGlzcGxheUxv YWRQZXJtaXQoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAg U3RhdHVzOw0KPi0gIENIQVIxNiAgICAgICAgICAgICAgKk9yZGVyOw0KPi0gIFVJTlROICAgICAg ICAgICAgICAgT3JkZXJTaXplOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgTGlzdENvdW50Ow0K Pi0gIFVJTlROICAgICAgICAgICAgICAgSW5kZXg7DQo+LSAgVUlOVDggICAgICAgICAgICAgICAq VmFyOw0KPi0gIFVJTlQ4ICAgICAgICAgICAgICAgKlZhclB0cjsNCj4tICBDSEFSMTYgICAgICAg ICAgICAgIFZhck5hbWVbMTJdOw0KPi0gIFZPSUQgICAgICAgICAgICAgICAgKlN0YXJ0T3BDb2Rl SGFuZGxlOw0KPi0gIFZPSUQgICAgICAgICAgICAgICAgKkVuZE9wQ29kZUhhbmRsZTsNCj4tICBF RklfSUZSX0dVSURfTEFCRUwgICpTdGFydExhYmVsOw0KPi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAg KkVuZExhYmVsOw0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCBEcml2ZXJPcmRlci4NCj4tICAvLw0K Pi0gIE9yZGVyU2l6ZSA9IDA7DQo+LSAgU3RhdHVzICAgID0gZ1JULT5HZXRWYXJpYWJsZSAoDQo+ LSAgICAgICAgICAgICAgICAgICAgIEwiRHJpdmVyT3JkZXIiLA0KPi0gICAgICAgICAgICAgICAg ICAgICAmZ0VmaUdsb2JhbFZhcmlhYmxlR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAgTlVM TCwNCj4tICAgICAgICAgICAgICAgICAgICAgJk9yZGVyU2l6ZSwNCj4tICAgICAgICAgICAgICAg ICAgICAgTlVMTA0KPi0gICAgICAgICAgICAgICAgICAgICApOw0KPi0gIGlmIChTdGF0dXMgIT0g RUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICBP cmRlciA9IEFsbG9jYXRlWmVyb1Bvb2wgKE9yZGVyU2l6ZSk7DQo+LSAgaWYgKE9yZGVyID09IE5V TEwpIHsNCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICBTdGF0dXMgPSBnUlQtPkdldFZh cmlhYmxlICgNCj4tICAgICAgICAgICAgICAgICAgTCJEcml2ZXJPcmRlciIsDQo+LSAgICAgICAg ICAgICAgICAgICZnRWZpR2xvYmFsVmFyaWFibGVHdWlkLA0KPi0gICAgICAgICAgICAgICAgICBO VUxMLA0KPi0gICAgICAgICAgICAgICAgICAmT3JkZXJTaXplLA0KPi0gICAgICAgICAgICAgICAg ICBPcmRlcg0KPi0gICAgICAgICAgICAgICAgICApOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEluaXRpYWxp emUgdGhlIGNvbnRhaW5lciBmb3IgZHluYW1pYyBvcGNvZGVzLg0KPi0gIC8vDQo+LSAgU3RhcnRP cENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4tICBBU1NFUlQgKFN0 YXJ0T3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICBFbmRPcENvZGVIYW5kbGUgPSBIaWlB bGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4tICBBU1NFUlQgKEVuZE9wQ29kZUhhbmRsZSAhPSBO VUxMKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUu DQo+LSAgLy8NCj4tICBTdGFydExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVh dGVHdWlkT3BDb2RlICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN0YXJ0T3BDb2RlSGFuZGxlLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOw0KPi0gIFN0YXJ0TGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklf SUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICBTdGFydExhYmVsLT5OdW1iZXIgICAgICAgID0gTEFC RUxfUEVSTUlUX0xPQURfRlVOQzsNCj4tDQo+LSAgRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xB QkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEVuZE9wQ29kZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7DQo+LSAgRW5kTGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklf SUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICBFbmRMYWJlbC0+TnVtYmVyICAgICAgICA9IExBQkVM X0VORDsNCj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgZWFjaCBkcml2ZXIgb3B0aW9uLg0KPi0gIC8v DQo+LSAgVmFyICAgICAgID0gTlVMTDsNCj4tICBMaXN0Q291bnQgPSBPcmRlclNpemUgLyBzaXpl b2YgKFVJTlQxNik7DQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTGlzdENvdW50OyBJbmRl eCsrKSB7DQo+LSAgICAvLw0KPi0gICAgLy8gR2V0IGRyaXZlciBkZXZpY2UgcGF0aC4NCj4tICAg IC8vDQo+LSAgICBVbmljb2RlU1ByaW50IChWYXJOYW1lLCBzaXplb2YgKFZhck5hbWUpLCBMIkRy aXZlciUwNHgiLCBPcmRlcltJbmRleF0pOw0KPi0gICAgR2V0RWZpR2xvYmFsVmFyaWFibGUyIChW YXJOYW1lLCAoVk9JRCoqKSZWYXIsIE5VTEwpOw0KPi0gICAgaWYgKFZhciA9PSBOVUxMKSB7DQo+ LSAgICAgIGNvbnRpbnVlOw0KPi0gICAgfQ0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBDaGVjayB3 aGV0aGVyIHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBmb3JiaWRkZW4uDQo+LSAgICAvLw0KPi0NCj4t ICAgIFZhclB0ciA9IFZhcjsNCj4tICAgIC8vDQo+LSAgICAvLyBTa2lwIGF0dHJpYnV0ZS4NCj4t ICAgIC8vDQo+LSAgICBWYXJQdHIgKz0gc2l6ZW9mIChVSU5UMzIpOw0KPi0NCj4tICAgIC8vDQo+ LSAgICAvLyBTa2lwIGRldmljZSBwYXRoIGxlbnRoLg0KPi0gICAgLy8NCj4tICAgIFZhclB0ciAr PSBzaXplb2YgKFVJTlQxNik7DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIFNraXAgZGVzY3JpcHQg c3RyaW5nLg0KPi0gICAgLy8NCj4tICAgIFZhclB0ciArPSBTdHJTaXplICgoVUlOVDE2ICopIFZh clB0cik7DQo+LQ0KPi0gICAgaWYgKElzTG9hZEZvcmJpZGRlbiAoKEVGSV9ERVZJQ0VfUEFUSF9Q Uk9UT0NPTCAqKSBWYXJQdHIpKSB7DQo+LSAgICAgIEZyZWVQb29sIChWYXIpOw0KPi0gICAgICBW YXIgPSBOVUxMOw0KPi0gICAgICBjb250aW51ZTsNCj4tICAgIH0NCj4tDQo+LSAgICBBZGREZXZp Y2VQYXRoICgNCj4tICAgICAgS0VZX01PRElGWV9VU0VSIHwgS0VZX01PRElGWV9BUF9EUCB8IEtF WV9MT0FEX1BFUk1JVF9NT0RJRlkNCj58IE9yZGVyW0luZGV4XSwNCj4tICAgICAgKEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCAqKSBWYXJQdHIsDQo+LSAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlDQo+ LSAgICAgICk7DQo+LSAgICBGcmVlUG9vbCAoVmFyKTsNCj4tICAgIFZhciA9IE5VTEw7DQo+LSAg fQ0KPi0NCj4tICBIaWlVcGRhdGVGb3JtICgNCj4tICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRs ZSwgLy8gSElJIGhhbmRsZQ0KPi0gICAgJmdVc2VyUHJvZmlsZU1hbmFnZXJHdWlkLCAvLyBGb3Jt c2V0IEdVSUQNCj4tICAgIEZPUk1JRF9QRVJNSVRfTE9BRF9EUCwgICAgLy8gRm9ybSBJRA0KPi0g ICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAvLyBMYWJlbCBmb3Igd2hlcmUgdG8gaW5zZXJ0 IG9wY29kZXMNCj4tICAgIEVuZE9wQ29kZUhhbmRsZSAgICAgICAgICAgLy8gUmVwbGFjZSBkYXRh DQo+LSAgICApOw0KPi0NCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFydE9wQ29kZUhhbmRs ZSk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRW5kT3BDb2RlSGFuZGxlKTsNCj4tDQo+LSAg Ly8NCj4tICAvLyBDbGVhciBFbnZpcm9ubWVudC4NCj4tICAvLw0KPi0gIGlmIChWYXIgIT0gTlVM TCkgew0KPi0gICAgRnJlZVBvb2wgKFZhcik7DQo+LSAgfQ0KPi0gIEZyZWVQb29sIChPcmRlcik7 DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5IHRoZSBmb3JiaWQgbG9hZCBkZXZpY2Ug cGF0aCBsaXN0IChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkKS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+ LURpc3BsYXlMb2FkRm9yYmlkICgNCj4tICBWT0lEDQo+LSAgKQ0KPi17DQo+LSAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICBPZmZzZXQ7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBE UFNpemU7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4tICBFRklfREVW SUNFX1BBVEhfUFJPVE9DT0wgICpEcDsNCj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAgICpT dGFydE9wQ29kZUhhbmRsZTsNCj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAgICpFbmRPcENv ZGVIYW5kbGU7DQo+LSAgRUZJX0lGUl9HVUlEX0xBQkVMICAgICAgICAqU3RhcnRMYWJlbDsNCj4t ICBFRklfSUZSX0dVSURfTEFCRUwgICAgICAgICpFbmRMYWJlbDsNCj4tDQo+LSAgLy8NCj4tICAv LyBJbml0aWFsaXplIHRoZSBjb250YWluZXIgZm9yIGR5bmFtaWMgb3Bjb2Rlcy4NCj4tICAvLw0K Pi0gIFN0YXJ0T3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAg QVNTRVJUIChTdGFydE9wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4tDQo+LSAgRW5kT3BDb2RlSGFu ZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgQVNTRVJUIChFbmRPcENvZGVI YW5kbGUgIT0gTlVMTCk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ3JlYXRlIEhpaSBFeHRlbmQgTGFi ZWwgT3BDb2RlLg0KPi0gIC8vDQo+LSAgU3RhcnRMYWJlbCA9IChFRklfSUZSX0dVSURfTEFCRUwg KikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAoDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTdGFydE9wQ29kZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4tICBTdGFydExhYmVsLT5FeHRlbmRPcENv ZGUgID0gRUZJX0lGUl9FWFRFTkRfT1BfTEFCRUw7DQo+LSAgU3RhcnRMYWJlbC0+TnVtYmVyICAg ICAgICA9IExBQkxFX0ZPUkJJRF9MT0FEX0ZVTkM7DQo+LQ0KPi0gIEVuZExhYmVsID0gKEVGSV9J RlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVhdGVHdWlkT3BDb2RlICgNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFbmRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gIEVuZExhYmVsLT5FeHRlbmRPcENv ZGUgID0gRUZJX0lGUl9FWFRFTkRfT1BfTEFCRUw7DQo+LSAgRW5kTGFiZWwtPk51bWJlciAgICAg ICAgPSBMQUJFTF9FTkQ7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWRkIGVhY2ggZm9yYmlkIGxvYWQg ZHJpdmVycy4NCj4tICAvLw0KPi0gIE9mZnNldCAgPSAwOw0KPi0gIEluZGV4ICAgPSAwOw0KPi0g IHdoaWxlIChPZmZzZXQgPCBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVuKSB7DQo+LSAgICBEcCAg ICAgID0gKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSAobUFjY2Vzc0luZm8uTG9hZEZvcmJp ZCArDQo+T2Zmc2V0KTsNCj4tICAgIERQU2l6ZSAgPSBHZXREZXZpY2VQYXRoU2l6ZSAoRHApOw0K Pi0gICAgQWRkRGV2aWNlUGF0aCAoDQo+LSAgICAgIEtFWV9NT0RJRllfVVNFUiB8IEtFWV9NT0RJ RllfQVBfRFAgfCBLRVlfTE9BRF9GT1JCSURfTU9ESUZZDQo+fCBJbmRleCwNCj4tICAgICAgRHAs DQo+LSAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlDQo+LSAgICAgICk7DQo+LSAgICBJbmRleCsrOw0K Pi0gICAgT2Zmc2V0ICs9IERQU2l6ZTsNCj4tICB9DQo+LQ0KPi0gIEhpaVVwZGF0ZUZvcm0gKA0K Pi0gICAgbUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCAvLyBISUkgaGFuZGxlDQo+LSAgICAmZ1Vz ZXJQcm9maWxlTWFuYWdlckd1aWQsIC8vIEZvcm1zZXQgR1VJRA0KPi0gICAgRk9STUlEX0ZPUkJJ RF9MT0FEX0RQLCAgICAvLyBGb3JtIElEDQo+LSAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAgICAg IC8vIExhYmVsIGZvciB3aGVyZSB0byBpbnNlcnQgb3Bjb2Rlcw0KPi0gICAgRW5kT3BDb2RlSGFu ZGxlICAgICAgICAgICAvLyBSZXBsYWNlIGRhdGENCj4tICAgICk7DQo+LQ0KPi0gIEhpaUZyZWVP cENvZGVIYW5kbGUgKFN0YXJ0T3BDb2RlSGFuZGxlKTsNCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxl IChFbmRPcENvZGVIYW5kbGUpOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRGlzcGxheSB0aGUg cGVybWl0IGNvbm5lY3QgZGV2aWNlIHBhdGguDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1EaXNwbGF5 Q29ubmVjdFBlcm1pdCAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIC8vDQo+LSAgLy8gTm90 ZToNCj4tICAvLyBBcyBubyBhcmNoaXRlY3QgcHJvdG9jb2wvaW50ZXJmYWNlIHRvIGJlIGNhbGxl ZCBpbiBDb25uZWN0Q29udHJvbGxlcigpDQo+LSAgLy8gdG8gdmVyaWZ5IHRoZSBkZXZpY2UgcGF0 aCwganVzdCBhZGQgYSBwbGFjZSBob2xkZXIgZm9yIHBlcm1pdHRlZCBjb25uZWN0DQo+LSAgLy8g ZGV2aWNlIHBhdGguDQo+LSAgLy8NCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERpc3BsYXkgdGhl IGZvcmJpZCBjb25uZWN0IGRldmljZSBwYXRoIGxpc3QuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1E aXNwbGF5Q29ubmVjdEZvcmJpZCAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIC8vDQo+LSAg Ly8gTm90ZToNCj4tICAvLyBBcyBubyBhcmNoaXRlY3QgcHJvdG9jb2wvaW50ZXJmYWNlIHRvIGJl IGNhbGxlZCBpbiBDb25uZWN0Q29udHJvbGxlcigpDQo+LSAgLy8gdG8gdmVyaWZ5IHRoZSBkZXZp Y2UgcGF0aCwganVzdCBhZGQgYSBwbGFjZSBob2xkZXIgZm9yIGZvcmJpZGRlbiBjb25uZWN0DQo+ LSAgLy8gZGV2aWNlIHBhdGguDQo+LSAgLy8NCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERlbGV0 ZSB0aGUgc3BlY2lmaWVkIGRldmljZSBwYXRoIGJ5IERyaXZlckluZGV4IGZyb20gdGhlIGZvcmJp ZCBkZXZpY2UgcGF0aA0KPi0gIGxpc3QgKG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQpLg0KPi0NCj4t ICBAcGFyYW1baW5dICBEcml2ZXJJbmRleCAgIFRoZSBpbmRleCBvZiBkcml2ZXIgaW4gZm9yYmlk ZGVuIGRldmljZSBwYXRoIGxpc3QuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1EZWxldGVGcm9tRm9y YmlkTG9hZCAoDQo+LSAgSU4gIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERyaXZlckluZGV4DQo+LSAgKQ0KPi17DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICBPZmZTZXQ7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBEUFNpemU7DQo+LSAgVUlO VE4gICAgICAgICAgICAgICAgICAgICBPZmZMZW47DQo+LSAgRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MICAqRHA7DQo+LQ0KPi0gIE9mZlNldCA9IDA7DQo+LSAgLy8NCj4tICAvLyBGaW5kIHRoZSBz cGVjaWZpZWQgZGV2aWNlIHBhdGguDQo+LSAgLy8NCj4tICB3aGlsZSAoKE9mZlNldCA8IG1BY2Nl c3NJbmZvLkxvYWRGb3JiaWRMZW4pICYmIChEcml2ZXJJbmRleCA+IDApKSB7DQo+LSAgICBEcCAg ICAgID0gKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSAobUFjY2Vzc0luZm8uTG9hZEZvcmJp ZCArDQo+T2ZmU2V0KTsNCj4tICAgIERQU2l6ZSAgPSBHZXREZXZpY2VQYXRoU2l6ZSAoRHApOw0K Pi0gICAgT2ZmU2V0ICs9IERQU2l6ZTsNCj4tICAgIERyaXZlckluZGV4LS07DQo+LSAgfQ0KPi0N Cj4tICAvLw0KPi0gIC8vIFNwZWNpZmllZCBkZXZpY2UgcGF0aCBmb3VuZC4NCj4tICAvLw0KPi0g IGlmIChEcml2ZXJJbmRleCA9PSAwKSB7DQo+LSAgICBEcCAgICAgID0gKEVGSV9ERVZJQ0VfUEFU SF9QUk9UT0NPTCAqKSAobUFjY2Vzc0luZm8uTG9hZEZvcmJpZCArDQo+T2ZmU2V0KTsNCj4tICAg IERQU2l6ZSAgPSBHZXREZXZpY2VQYXRoU2l6ZSAoRHApOw0KPi0gICAgT2ZmTGVuICA9IG1BY2Nl c3NJbmZvLkxvYWRGb3JiaWRMZW4gLSBPZmZTZXQgLSBEUFNpemU7DQo+LSAgICBpZiAoT2ZmTGVu ID4gMCkgew0KPi0gICAgICBDb3B5TWVtICgNCj4tICAgICAgICBtQWNjZXNzSW5mby5Mb2FkRm9y YmlkICsgT2ZmU2V0LA0KPi0gICAgICAgIG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgKyBPZmZTZXQg KyBEUFNpemUsDQo+LSAgICAgICAgT2ZmTGVuDQo+LSAgICAgICAgKTsNCj4tICAgIH0NCj4tICAg IG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWRMZW4gLT0gRFBTaXplOw0KPi0gIH0NCj4tfQ0KPi0NCj4t DQo+LS8qKg0KPi0gIEFkZCB0aGUgc3BlY2lmaWVkIGRldmljZSBwYXRoIGJ5IERyaXZlckluZGV4 IHRvIHRoZSBmb3JiaWQgZGV2aWNlIHBhdGgNCj4tICBsaXN0IChtQWNjZXNzSW5mby5Mb2FkRm9y YmlkKS4NCj4tDQo+LSAgQHBhcmFtW2luXSAgRHJpdmVySW5kZXggICBUaGUgaW5kZXggb2YgZHJp dmVyIHNhdmVkIGluIGRyaXZlciBvcHRpb25zLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tQWRkVG9G b3JiaWRMb2FkICgNCj4tICBJTiAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRHJpdmVySW5kZXgNCj4tICApDQo+LXsNCj4tICBVSU5UTiAgICAgICBEZXZpY2VQYXRo TGVuOw0KPi0gIFVJTlQ4ICAgICAgICpWYXI7DQo+LSAgVUlOVDggICAgICAgKlZhclB0cjsNCj4t ICBVSU5UTiAgICAgICBOZXdMZW47DQo+LSAgVUlOVDggICAgICAgKk5ld0ZMOw0KPi0gIENIQVIx NiAgICAgIFZhck5hbWVbMTNdOw0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCBsb2FkYWJsZSBkcml2 ZXIgZGV2aWNlIHBhdGguDQo+LSAgLy8NCj4tICBVbmljb2RlU1ByaW50ICAoVmFyTmFtZSwgc2l6 ZW9mIChWYXJOYW1lKSwgTCJEcml2ZXIlMDR4IiwgRHJpdmVySW5kZXgpOw0KPi0gIEdldEVmaUds b2JhbFZhcmlhYmxlMiAoVmFyTmFtZSwgKFZPSUQqKikmVmFyLCBOVUxMKTsNCj4tICBpZiAoVmFy ID09IE5VTEwpIHsNCj4tICAgIHJldHVybjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2 ZSBmb3JiaWQgbG9hZCBkcml2ZXIuDQo+LSAgLy8NCj4tDQo+LSAgVmFyUHRyID0gVmFyOw0KPi0g IC8vDQo+LSAgLy8gU2tpcCBhdHRyaWJ1dGUuDQo+LSAgLy8NCj4tICBWYXJQdHIgKz0gc2l6ZW9m IChVSU5UMzIpOw0KPi0NCj4tICBEZXZpY2VQYXRoTGVuID0gKihVSU5UMTYgKikgVmFyUHRyOw0K Pi0gIC8vDQo+LSAgLy8gU2tpcCBkZXZpY2UgcGF0aCBsZW5ndGguDQo+LSAgLy8NCj4tICBWYXJQ dHIgKz0gc2l6ZW9mIChVSU5UMTYpOw0KPi0NCj4tICAvLw0KPi0gIC8vIFNraXAgZGVzY3JpcHRp b24gc3RyaW5nLg0KPi0gIC8vDQo+LSAgVmFyUHRyICs9IFN0clNpemUgKChVSU5UMTYgKikgVmFy UHRyKTsNCj4tDQo+LSAgTmV3TGVuICA9IG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWRMZW4gKyBEZXZp Y2VQYXRoTGVuOw0KPi0gIE5ld0ZMICAgPSBBbGxvY2F0ZVplcm9Qb29sIChOZXdMZW4pOw0KPi0g IGlmIChOZXdGTCA9PSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAoVmFyKTsNCj4tICAgIHJldHVy biA7DQo+LSAgfQ0KPi0NCj4tICBpZiAobUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbiA+IDApIHsN Cj4tICAgIENvcHlNZW0gKE5ld0ZMLCBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkLCBtQWNjZXNzSW5m by5Mb2FkRm9yYmlkTGVuKTsNCj4tICAgIEZyZWVQb29sIChtQWNjZXNzSW5mby5Mb2FkRm9yYmlk KTsNCj4tICB9DQo+LQ0KPi0gIENvcHlNZW0gKE5ld0ZMICsgbUFjY2Vzc0luZm8uTG9hZEZvcmJp ZExlbiwgVmFyUHRyLCBEZXZpY2VQYXRoTGVuKTsNCj4tICBtQWNjZXNzSW5mby5Mb2FkRm9yYmlk TGVuID0gTmV3TGVuOw0KPi0gIG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgICAgPSBOZXdGTDsNCj4t ICBGcmVlUG9vbCAoVmFyKTsNCj4tfQ0KPi0NCj4tDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQ a2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Nb2RpZnlJZGVudGl0 eVBvbGkNCj5jeS5jDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2Zp bGVNYW5hZ2VyRHhlL01vZGlmeUlkZW50aXR5UG9saQ0KPmN5LmMNCj5kZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQNCj5pbmRleCA2MDJjNGE4Mzk3Li4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0 eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL01vZGlmeUlkZW50 aXR5UG9saQ0KPmN5LmMNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsNTE2ICswLDAgQEANCj4tLyoq IEBmaWxlDQo+LSAgVGhlIGZ1bmN0aW9ucyBmb3IgaWRlbnRpZmljYXRpb24gcG9saWN5IG1vZGlm aWNhdGlvbi4NCj4tDQo+LUNvcHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNj b21wYW55aW5nIG1hdGVyaWFscw0KPi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVu ZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi13aGlj aCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxp Y2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2Vz L2JzZC1saWNlbnNlLnBocA0KPi0NCj4tVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIg VEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+LVdJVEhPVVQgV0FSUkFOVElF UyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPkVYUFJFU1MgT1IgSU1Q TElFRC4NCj4tDQo+LSoqLw0KPi0NCj4tI2luY2x1ZGUgIlVzZXJQcm9maWxlTWFuYWdlci5oIg0K Pi0NCj4tDQo+LS8qKg0KPi0gIFZlcmlmeSB0aGUgbmV3IGlkZW50aXR5IHBvbGljeSBpbiB0aGUg Y3VycmVudCBpbXBsZW1lbnRhdGlvbi4gVGhlIHNhbWUNCj5jcmVkZW50aWFsDQo+LSAgcHJvdmlk ZXIgY2FuJ3QgYXBwZWFyIHR3aWNlIGluIG9uZSBpZGVudGl0eSBwb2xpY3kuDQo+LQ0KPi0gIEBw YXJhbVtpbl0gTmV3R3VpZCAgICAgICBQb2ludHMgdG8gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIg Z3VpZC4NCj4tDQo+LSAgQHJldHZhbCBUUlVFICAgICBUaGUgTmV3R3VpZCB3YXMgZm91bmQgaW4g dGhlIGlkZW50aXR5IHBvbGljeS4NCj4tICBAcmV0dmFsIEZBTFNFICAgIFRoZSBOZXdHdWlkIHdh cyBub3QgZm91bmQuDQo+LQ0KPi0qKi8NCj4tQk9PTEVBTg0KPi1Qcm92aWRlckFscmVhZHlJblBv bGljeSAoDQo+LSAgSU4gRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpOZXdHdWlkDQo+LSAgKQ0KPi17DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgT2Zmc2V0Ow0KPi0gIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICpJZGVudGl0eTsN Cj4tICBFRklfSU5QVVRfS0VZICAgICAgICAgICAgICAgICBLZXk7DQo+LQ0KPi0gIE9mZnNldCA9 IDA7DQo+LSAgd2hpbGUgKE9mZnNldCA8IG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbikg ew0KPi0gICAgSWRlbnRpdHkgPSAoRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKikNCj4o bVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5ICsgT2Zmc2V0KTsNCj4tICAgIGlmIChJZGVudGl0 eS0+VHlwZSA9PSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0NSRURFTlRJQUxfUFJPVklERVIpIHsN Cj4tICAgICAgaWYgKENvbXBhcmVHdWlkIChOZXdHdWlkLCAoRUZJX0dVSUQgKikgKElkZW50aXR5 ICsgMSkpKSB7DQo+LSAgICAgICAgQ3JlYXRlUG9wVXAgKA0KPi0gICAgICAgICAgRUZJX0xJR0hU R1JBWSB8IEVGSV9CQUNLR1JPVU5EX0JMVUUsDQo+LSAgICAgICAgICAmS2V5LA0KPi0gICAgICAg ICAgTCJUaGlzIENyZWRlbnRpYWwgUHJvdmlkZXIgQXJlIEFscmVhZHkgVXNlZCEiLA0KPi0gICAg ICAgICAgTCIiLA0KPi0gICAgICAgICAgTCJQcmVzcyBBbnkgS2V5IHRvIENvbnRpbnVlIC4uLiIs DQo+LSAgICAgICAgICBOVUxMDQo+LSAgICAgICAgICApOw0KPi0gICAgICAgIHJldHVybiBUUlVF Ow0KPi0gICAgICB9DQo+LSAgICB9DQo+LSAgICBPZmZzZXQgKz0gSWRlbnRpdHktPkxlbmd0aDsN Cj4tICB9DQo+LQ0KPi0gIHJldHVybiBGQUxTRTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEFk ZCB0aGUgdXNlcidzIGNyZWRlbnRpYWwgcmVjb3JkIGluIHRoZSBwcm92aWRlci4NCj4tDQo+LSAg QHBhcmFtW2luXSAgSWRlbnRpdHkgICAgIElkZW50aXR5IHBvbGljeSBpdGVtIGluY2x1ZGluZyBj cmVkZW50aWFsIHByb3ZpZGVyLg0KPi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICBQb2ludHMg dG8gdXNlciBwcm9maWxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgQWRkIG9y IGRlbGV0ZSByZWNvcmQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAg ICBGYWlsIHRvIGFkZCBvciBkZWxldGUgcmVjb3JkLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMN Cj4tRW5yb2xsVXNlck9uUHJvdmlkZXIgKA0KPi0gIElOICBFRklfVVNFUl9JTkZPX0lERU5USVRZ X1BPTElDWSAgICAgICAgICAgICAgKklkZW50aXR5LA0KPi0gIElOICBFRklfVVNFUl9QUk9GSUxF X0hBTkRMRSAgICAgICAgICAgICAgICAgICAgVXNlcg0KPi0gICkNCj4tew0KPi0gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4tICBFRklfVVNFUl9DUkVERU5USUFMMl9Q Uk9UT0NPTCAgKlVzZXJDcmVkZW50aWFsOw0KPi0NCj4tICAvLw0KPi0gIC8vIEZpbmQgdGhlIHNw ZWNpZmllZCBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0gIC8vDQo+LSAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgbVByb3ZpZGVySW5mby0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgIFVzZXJDcmVk ZW50aWFsID0gbVByb3ZpZGVySW5mby0+UHJvdmlkZXJbSW5kZXhdOw0KPi0gICAgaWYgKENvbXBh cmVHdWlkICgoRUZJX0dVSUQgKikoSWRlbnRpdHkgKyAxKSwgJlVzZXJDcmVkZW50aWFsLT5JZGVu dGlmaWVyKSkNCj57DQo+LSAgICAgIHJldHVybiBVc2VyQ3JlZGVudGlhbC0+RW5yb2xsIChVc2Vy Q3JlZGVudGlhbCwgVXNlcik7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX05P VF9GT1VORDsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERlbGV0ZSB0aGUgVXNlcidzIGNyZWRl bnRpYWwgcmVjb3JkIG9uIHRoZSBwcm92aWRlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgSWRlbnRp dHkgICAgIFBvaW50IHRvDQo+RUZJX1VTRVJfSU5GT19JREVOVElUWV9DUkVERU5USUFMX1BST1ZJ REVSIHVzZXIgaW5mby4NCj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICAgUG9pbnRzIHRvIHVz ZXIgcHJvZmlsZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIERlbGV0ZSBVc2Vy J3MgY3JlZGVudGlhbCByZWNvcmQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAg ICAgICAgICBGYWlsIHRvIGFkZCBvciBkZWxldGUgcmVjb3JkLg0KPi0NCj4tKiovDQo+LUVGSV9T VEFUVVMNCj4tRGVsZXRlVXNlck9uUHJvdmlkZXIgKA0KPi0gIElOICBFRklfVVNFUl9JTkZPX0lE RU5USVRZX1BPTElDWSAgICAgICAgICAgICAgKklkZW50aXR5LA0KPi0gIElOICBFRklfVVNFUl9Q Uk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgVXNlcg0KPi0gICkNCj4tew0KPi0gIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4tICBFRklfVVNFUl9DUkVERU5U SUFMMl9QUk9UT0NPTCAgKlVzZXJDcmVkZW50aWFsOw0KPi0NCj4tICAvLw0KPi0gIC8vIEZpbmQg dGhlIHNwZWNpZmllZCBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0gIC8vDQo+LSAgZm9yIChJbmRl eCA9IDA7IEluZGV4IDwgbVByb3ZpZGVySW5mby0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgIFVz ZXJDcmVkZW50aWFsID0gbVByb3ZpZGVySW5mby0+UHJvdmlkZXJbSW5kZXhdOw0KPi0gICAgaWYg KENvbXBhcmVHdWlkICgoRUZJX0dVSUQgKikoSWRlbnRpdHkgKyAxKSwgJlVzZXJDcmVkZW50aWFs LT5JZGVudGlmaWVyKSkNCj57DQo+LSAgICAgIHJldHVybiBVc2VyQ3JlZGVudGlhbC0+RGVsZXRl IChVc2VyQ3JlZGVudGlhbCwgVXNlcik7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4g RUZJX05PVF9GT1VORDsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERlbGV0ZSBVc2VyJ3MgY3Jl ZGVudGFsIGZyb20gYWxsIHRoZSBwcm92aWRlcnMgdGhhdCBleGlzdCBpbiBVc2VyJ3MgaWRlbnRp dHkNCj5wb2xpY3kuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIElkZW50aXR5UG9saWN5ICAgICBQb2lu dCB0byBVc2VyJ3MgaWRlbnRpdHkgcG9saWN5Lg0KPi0gIEBwYXJhbVtpbl0gIElkZW50aXR5UG9s aWN5TGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBpZGVudGl0eSBwb2xpY3kuDQo+LSAgQHBhcmFtW2lu XSAgVXNlciAgICAgICAgICAgICAgIFBvaW50cyB0byB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0qKi8N Cj4tVk9JRA0KPi1EZWxldGVDcmVkZW50aWFsRnJvbVByb3ZpZGVycyAoDQo+LSAgSU4gICAgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSWRlbnRpdHlQb2xpY3ksDQo+LSAg SU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRlbnRpdHlQb2xp Y3lMZW4sDQo+LSAgSU4gICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgICAg VXNlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICAgICpJ ZGVudGl0eTsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQ7DQo+ LQ0KPi0gIE9mZnNldCA9IDA7DQo+LSAgd2hpbGUgKE9mZnNldCA8IElkZW50aXR5UG9saWN5TGVu KSB7DQo+LSAgICBJZGVudGl0eSA9IChFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAqKSAo SWRlbnRpdHlQb2xpY3kgKyBPZmZzZXQpOw0KPi0gICAgaWYgKElkZW50aXR5LT5UeXBlID09IEVG SV9VU0VSX0lORk9fSURFTlRJVFlfQ1JFREVOVElBTF9QUk9WSURFUikgew0KPi0gICAgICAvLw0K Pi0gICAgICAvLyBEZWxldGUgdGhlIHVzZXIgb24gdGhpcyBwcm92aWRlci4NCj4tICAgICAgLy8N Cj4tICAgICAgRGVsZXRlVXNlck9uUHJvdmlkZXIgKElkZW50aXR5LCBVc2VyKTsNCj4tICAgIH0N Cj4tICAgIE9mZnNldCArPSBJZGVudGl0eS0+TGVuZ3RoOw0KPi0gIH0NCj4tDQo+LX0NCj4tDQo+ LQ0KPi0vKioNCj4tICBSZW1vdmUgdGhlIHByb3ZpZGVyIHNwZWNpZmllZCBieSBPZmZzZXQgZnJv bSB0aGUgbmV3IHVzZXIgaWRlbnRpZmljYXRpb24NCj5yZWNvcmQuDQo+LQ0KPi0gIEBwYXJhbVtp bl0gIElkZW50aXR5UG9saWN5ICAgIFBvaW50IHRvIHVzZXIgaWRlbnRpdHkgaXRlbSBpbiBuZXcg aWRlbnRpZmljYXRpb24NCj5wb2xpY3kuDQo+LSAgQHBhcmFtW2luXSAgT2Zmc2V0ICAgICAgICAg ICAgVGhlIGl0ZW0gb2Zmc2V0IGluIHRoZSBuZXcgaWRlbnRpZmljYXRpb24gcG9saWN5Lg0KPi0N Cj4tKiovDQo+LVZPSUQNCj4tRGVsZXRlUHJvdmlkZXJGcm9tUG9saWN5ICgNCj4tICBJTiAgICAg RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgICAgICAgICAqSWRlbnRpdHlQb2xpY3ksDQo+ LSAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0DQo+ LSAgKQ0KPi17DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgUmVtYWluaW5nTGVu Ow0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZUxlbjsNCj4tDQo+LSAg aWYgKElkZW50aXR5UG9saWN5LT5MZW5ndGggPT0gbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5 TGVuKSB7DQo+LSAgICAvLw0KPi0gICAgLy8gT25seSBvbmUgY3JlZGVudGlhbCBwcm92aWRlciBp biB0aGUgaWRlbnRpZmljYXRpb24gcG9saWN5Lg0KPi0gICAgLy8gU2V0IHRoZSBuZXcgcG9saWN5 IHRvIGJlIFRSVUUgYWZ0ZXIgcmVtb3ZlZCB0aGUgcHJvdmlkZXIuDQo+LSAgICAvLw0KPi0gICAg SWRlbnRpdHlQb2xpY3ktPlR5cGUgICAgICAgICAgID0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9U UlVFOw0KPi0gICAgSWRlbnRpdHlQb2xpY3ktPkxlbmd0aCAgICAgICAgID0gc2l6ZW9mIChFRklf VVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSk7DQo+LSAgICBtVXNlckluZm8uTmV3SWRlbnRpdHlQ b2xpY3lMZW4gPSBJZGVudGl0eVBvbGljeS0+TGVuZ3RoOw0KPi0gICAgcmV0dXJuIDsNCj4tICB9 DQo+LQ0KPi0gIERlbGV0ZUxlbiA9IElkZW50aXR5UG9saWN5LT5MZW5ndGggKw0KPnNpemVvZihF RklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSk7DQo+LSAgaWYgKChPZmZzZXQgKyBJZGVudGl0 eVBvbGljeS0+TGVuZ3RoKSAhPSBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4pIHsNCj4t ICAgIC8vDQo+LSAgICAvLyBUaGlzIHByb3ZpZGVyIGlzIG5vdCB0aGUgbGFzdCBpdGVtIGluIHRo ZSBpZGVudGlmaWNhdGlvbiBwb2xpY3ksIGRlbGV0ZSBpdCBhbmQNCj50aGUgY29ubmVjdG9yLg0K Pi0gICAgLy8NCj4tICAgIFJlbWFpbmluZ0xlbiA9IG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGlj eUxlbiAtIE9mZnNldCAtIERlbGV0ZUxlbjsNCj4tICAgIENvcHlNZW0gKChVSU5UOCAqKSBJZGVu dGl0eVBvbGljeSwgKFVJTlQ4ICopIElkZW50aXR5UG9saWN5ICsgRGVsZXRlTGVuLA0KPlJlbWFp bmluZ0xlbik7DQo+LSAgfQ0KPi0gIG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbiAtPSBE ZWxldGVMZW47DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBBZGQgYSBuZXcgcHJvdmlkZXIgdG8g dGhlIG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeS4NCj4tDQo+LSAgSXQgaXMgaW52b2tlZCB3 aGVuICdhZGQgb3B0aW9uJyBpbiBVSSBpcyBwcmVzc2VkLg0KPi0NCj4tICBAcGFyYW1baW5dIE5l d0d1aWQgICAgICAgUG9pbnRzIHRvIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIGd1aWQuDQo+LQ0K Pi0qKi8NCj4tVk9JRA0KPi1BZGRQcm92aWRlclRvUG9saWN5ICgNCj4tICBJTiAgRUZJX0dVSUQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk5ld0d1aWQNCj4tICApDQo+LXsNCj4t ICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAqTmV3UG9saWN5SW5mbzsNCj4tICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICBOZXdQb2xpY3lJbmZvTGVuOw0KPi0gIEVGSV9VU0VS X0lORk9fSURFTlRJVFlfUE9MSUNZICpQb2xpY3k7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWxsb2Nh dGUgbWVtb3J5IGZvciB0aGUgbmV3IGlkZW50aXR5IHBvbGljeS4NCj4tICAvLw0KPi0gIE5ld1Bv bGljeUluZm9MZW4gPSBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4gKyBzaXplb2YNCj4o RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kpICsgc2l6ZW9mIChFRklfR1VJRCk7DQo+LSAg aWYgKG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbiA+IDApIHsNCj4tICAgIC8vDQo+LSAg ICAvLyBJdCBpcyBub3QgdGhlIGZpcnN0IHByb3ZpZGVyIGluIHRoZSBwb2xpY3kuIEFkZCBhIGNv bm5lY3RvciBiZWZvcmUgcHJvdmlkZXIuDQo+LSAgICAvLw0KPi0gICAgTmV3UG9saWN5SW5mb0xl biArPSBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZKTsNCj4tICB9DQo+LSAg TmV3UG9saWN5SW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKE5ld1BvbGljeUluZm9MZW4pOw0KPi0g IGlmIChOZXdQb2xpY3lJbmZvID09IE5VTEwpIHsNCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0N Cj4tICBOZXdQb2xpY3lJbmZvTGVuID0gMDsNCj4tICBpZiAobVVzZXJJbmZvLk5ld0lkZW50aXR5 UG9saWN5TGVuID4gMCkgew0KPi0gICAgLy8NCj4tICAgIC8vIFNhdmUgb3JnaW5hbCBwb2xpY3ku DQo+LSAgICAvLw0KPi0gICAgQ29weU1lbSAoTmV3UG9saWN5SW5mbywgbVVzZXJJbmZvLk5ld0lk ZW50aXR5UG9saWN5LA0KPm1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbik7DQo+LQ0KPi0g ICAgLy8NCj4tICAgIC8vIFNhdmUgbG9naWNhbCBjb25uZWN0b3IuDQo+LSAgICAvLw0KPi0gICAg UG9saWN5ID0gKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICopIChOZXdQb2xpY3lJbmZv ICsNCj5tVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4pOw0KPi0gICAgaWYgKG1Db25uY2V0 TG9naWNhbCA9PSAwKSB7DQo+LSAgICAgIFBvbGljeS0+VHlwZSA9IEVGSV9VU0VSX0lORk9fSURF TlRJVFlfQU5EOw0KPi0gICAgfSBlbHNlIHsNCj4tICAgICAgUG9saWN5LT5UeXBlID0gRUZJX1VT RVJfSU5GT19JREVOVElUWV9PUjsNCj4tICAgIH0NCj4tDQo+LSAgICBQb2xpY3ktPkxlbmd0aCAg ID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSk7DQo+LSAgICBOZXdQb2xp Y3lJbmZvTGVuID0gbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuICsgUG9saWN5LT5MZW5n dGg7DQo+LSAgICBGcmVlUG9vbCAobVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5KTsNCj4tICB9 DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0gIC8vDQo+ LSAgUG9saWN5ID0gKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICopIChOZXdQb2xpY3lJ bmZvICsNCj5OZXdQb2xpY3lJbmZvTGVuKTsNCj4tICBQb2xpY3ktPkxlbmd0aCA9IHNpemVvZiAo RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kpICsgc2l6ZW9mDQo+KEVGSV9HVUlEKTsNCj4t ICBQb2xpY3ktPlR5cGUgICA9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQ1JFREVOVElBTF9QUk9W SURFUjsNCj4tICBDb3B5R3VpZCAoKEVGSV9HVUlEICopIChQb2xpY3kgKyAxKSwgTmV3R3VpZCk7 DQo+LSAgTmV3UG9saWN5SW5mb0xlbiArPSBQb2xpY3ktPkxlbmd0aDsNCj4tDQo+LSAgLy8NCj4t ICAvLyBVcGRhdGUgaWRlbnRpdHkgcG9saWN5IGNob2ljZS4NCj4tICAvLw0KPi0gIG1Vc2VySW5m by5OZXdJZGVudGl0eVBvbGljeSAgICAgICAgID0gTmV3UG9saWN5SW5mbzsNCj4tICBtVXNlcklu Zm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4gICAgICA9IE5ld1BvbGljeUluZm9MZW47DQo+LSAgbVVz ZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TW9kaWZpZWQgPSBUUlVFOw0KPi19DQo+LQ0KPi0NCj4t LyoqDQo+LSAgVGhpcyBmdW5jdGlvbiByZXBsYWNlcyB0aGUgb2xkIGlkZW50aXR5IHBvbGljeSB3 aXRoIGEgbmV3IGlkZW50aXR5IHBvbGljeS4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBkZWxldGUg dGhlIHVzZXIgaWRlbnRpdHkgcG9saWN5IGluZm9ybWF0aW9uLg0KPi0gIElmIGVucm9sbCBuZXcg Y3JlZGVudGlhbCBmYWlsZWQsIHJlY292ZXIgdGhlIG9sZCBpZGVudGl0eSBwb2xpY3kuDQo+LQ0K Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICBNb2RpZnkgdXNlciBpZGVudGl0eSBwb2xpY3kg c3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICBGYWlsIHRvIG1vZGlm eSB1c2VyIGlkZW50aXR5IHBvbGljeS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LVVwZGF0 ZUNyZWRlbnRpYWxQcm92aWRlciAoDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPi0gIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICpJ ZGVudGl0eTsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQ7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gRGVsZXRlIHRoZSBvbGQgaWRlbnRpZmljYXRpb24gcG9saWN5Lg0KPi0g IC8vDQo+LSAgRGVsZXRlQ3JlZGVudGlhbEZyb21Qcm92aWRlcnMgKG1Vc2VySW5mby5JZGVudGl0 eVBvbGljeSwNCj5tVXNlckluZm8uSWRlbnRpdHlQb2xpY3lMZW4sIG1Nb2RpZnlVc2VyKTsNCj4t DQo+LSAgLy8NCj4tICAvLyBBZGQgdGhlIG5ldyBpZGVudGlmaWNhdGlvbiBwb2xpY3kuDQo+LSAg Ly8NCj4tICBPZmZzZXQgID0gMDsNCj4tICB3aGlsZSAoT2Zmc2V0IDwgbVVzZXJJbmZvLk5ld0lk ZW50aXR5UG9saWN5TGVuKSB7DQo+LSAgICBJZGVudGl0eSA9IChFRklfVVNFUl9JTkZPX0lERU5U SVRZX1BPTElDWSAqKQ0KPihtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3kgKyBPZmZzZXQpOw0K Pi0gICAgaWYgKElkZW50aXR5LT5UeXBlID09IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQ1JFREVO VElBTF9QUk9WSURFUikgew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBFbnJvbGwgdGhlIHVzZXIg b24gdGhpcyBwcm92aWRlcg0KPi0gICAgICAvLw0KPi0gICAgICBTdGF0dXMgPSBFbnJvbGxVc2Vy T25Qcm92aWRlciAoSWRlbnRpdHksIG1Nb2RpZnlVc2VyKTsNCj4tICAgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gRmFpbGVkIHRvIGVucm9s bCB0aGUgdXNlciBieSBuZXcgaWRlbnRpZmljYXRpb24gcG9saWN5Lg0KPi0gICAgICAgIC8vIFNv IHJlbW92ZWQgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgZnJvbSB0aGUgaWRlbnRpZmljYXRpb24g cG9saWN5DQo+LSAgICAgICAgLy8NCj4tICAgICAgICBEZWxldGVQcm92aWRlckZyb21Qb2xpY3kg KElkZW50aXR5LCBPZmZzZXQpOw0KPi0gICAgICAgIGNvbnRpbnVlOw0KPi0gICAgICB9DQo+LSAg ICB9DQo+LSAgICBPZmZzZXQgKz0gSWRlbnRpdHktPkxlbmd0aDsNCj4tICB9DQo+LQ0KPi0gIHJl dHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIENoZWNrIHdoZXRoZXIg dGhlIGlkZW50aXR5IHBvbGljeSBpcyB2YWxpZC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgUG9saWN5 SW5mbyAgICAgICAgICBQb2ludCB0byB0aGUgaWRlbnRpdHkgcG9saWN5Lg0KPi0gIEBwYXJhbVtp bl0gIFBvbGljeUluZm9MZW4gICAgICAgVGhlIHBvbGljeSBsZW5ndGguDQo+LQ0KPi0gIEByZXR2 YWwgVFJVRSAgICAgVGhlIHBvbGljeSBpcyBhIHZhbGlkIGlkZW50aXR5IHBvbGljeS4NCj4tICBA cmV0dmFsIEZBTFNFICAgIFRoZSBwb2xpY3kgaXMgbm90IGEgdmFsaWQgaWRlbnRpdHkgcG9saWN5 Lg0KPi0NCj4tKiovDQo+LUJPT0xFQU4NCj4tQ2hlY2tOZXdJZGVudGl0eVBvbGljeSAoDQo+LSAg SU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQb2xpY3lJbmZv LA0KPi0gIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2xp Y3lJbmZvTGVuDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kg KklkZW50aXR5Ow0KPi0gIEVGSV9JTlBVVF9LRVkgICAgICAgICAgICAgICAgIEtleTsNCj4tICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQ7DQo+LSAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgICAgT3BDb2RlOw0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHBvbGljeSBl eHByZXNzaW9uLg0KPi0gIC8vDQo+LSAgT3BDb2RlICA9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlf RkFMU0U7DQo+LSAgT2Zmc2V0ICA9IDA7DQo+LSAgd2hpbGUgKE9mZnNldCA8IFBvbGljeUluZm9M ZW4pIHsNCj4tICAgIC8vDQo+LSAgICAvLyBDaGVjayBpZGVudGlmaWNhdGlvbiBwb2xpY3kgYWNj b3JkaW5nIHRvIHR5cGUNCj4tICAgIC8vDQo+LSAgICBJZGVudGl0eSA9IChFRklfVVNFUl9JTkZP X0lERU5USVRZX1BPTElDWSAqKSAoUG9saWN5SW5mbyArIE9mZnNldCk7DQo+LSAgICBzd2l0Y2gg KElkZW50aXR5LT5UeXBlKSB7DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZ X1RSVUU6DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVO VElUWV9PUjoNCj4tICAgICAgaWYgKE9wQ29kZSA9PSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0FO RCkgew0KPi0gICAgICAgIENyZWF0ZVBvcFVwICgNCj4tICAgICAgICAgIEVGSV9MSUdIVEdSQVkg fCBFRklfQkFDS0dST1VORF9CTFVFLA0KPi0gICAgICAgICAgJktleSwNCj4tICAgICAgICAgIEwi SW52YWxpZCBJZGVudGl0eSBQb2xpY3ksIE1peGVkIENvbm5lY3RvciBVbnN1cHBvcnQhIiwNCj4t ICAgICAgICAgIEwiIiwNCj4tICAgICAgICAgIEwiUHJlc3MgQW55IEtleSB0byBDb250aW51ZSAu Li4iLA0KPi0gICAgICAgICAgTlVMTA0KPi0gICAgICAgICAgKTsNCj4tICAgICAgICByZXR1cm4g RkFMU0U7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIE9wQ29kZSA9IEVGSV9VU0VSX0lORk9fSURF TlRJVFlfT1I7DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19J REVOVElUWV9BTkQ6DQo+LSAgICAgIGlmIChPcENvZGUgPT0gRUZJX1VTRVJfSU5GT19JREVOVElU WV9PUikgew0KPi0gICAgICAgIENyZWF0ZVBvcFVwICgNCj4tICAgICAgICAgIEVGSV9MSUdIVEdS QVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPi0gICAgICAgICAgJktleSwNCj4tICAgICAgICAg IEwiSW52YWxpZCBJZGVudGl0eSBQb2xpY3ksIE1peGVkIENvbm5lY3RvciBVbnN1cHBvcnQhIiwN Cj4tICAgICAgICAgIEwiIiwNCj4tICAgICAgICAgIEwiUHJlc3MgQW55IEtleSB0byBDb250aW51 ZSAuLi4iLA0KPi0gICAgICAgICAgTlVMTA0KPi0gICAgICAgICAgKTsNCj4tICAgICAgICByZXR1 cm4gRkFMU0U7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIE9wQ29kZSA9IEVGSV9VU0VSX0lORk9f SURFTlRJVFlfQU5EOw0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lO Rk9fSURFTlRJVFlfQ1JFREVOVElBTF9QUk9WSURFUjoNCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0g ICAgZGVmYXVsdDoNCj4tICAgICAgQ3JlYXRlUG9wVXAgKA0KPi0gICAgICAgIEVGSV9MSUdIVEdS QVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPi0gICAgICAgICZLZXksDQo+LSAgICAgICAgTCJV bnN1cHBvcnQgcGFyYW1ldGVyIiwNCj4tICAgICAgICBMIiIsDQo+LSAgICAgICAgTCJQcmVzcyBB bnkgS2V5IHRvIENvbnRpbnVlIC4uLiIsDQo+LSAgICAgICAgTlVMTA0KPi0gICAgICAgICk7DQo+ LSAgICAgIHJldHVybiBGQUxTRTsNCj4tICAgIH0NCj4tICAgIE9mZnNldCArPSBJZGVudGl0eS0+ TGVuZ3RoOw0KPi0gIH0NCj4tDQo+LSAgcmV0dXJuIFRSVUU7DQo+LX0NCj4tDQo+LQ0KPi0vKioN Cj4tICBTYXZlIHRoZSBpZGVudGl0eSBwb2xpY3kgYW5kIHVwZGF0ZSBVSSB3aXRoIGl0Lg0KPi0N Cj4tICBUaGlzIGZ1bmN0aW9uIHdpbGwgdmVyaWZ5IHRoZSBuZXcgaWRlbnRpdHkgcG9saWN5LCBp biBjdXJyZW50IGltcGxlbWVudGF0aW9uLA0KPi0gIHRoZSBpZGVudGl0eSBwb2xpY3kgY2FuIGJl OiAgVCwgUCAmIFAgJiBQICYgLi4uLCBQIHwgUCB8IFAgfCAuLi4NCj4tICBIZXJlLCAiVCIgbWVh bnMgIlRydWUiLCAiUCIgbWVhbnMgIkNyZWRlbnRpYWwgUHJvdmlkZXIiLCAiJiIgbWVhbnMgImFu ZCIsDQo+InwiIG1lYW5zICJvciIuDQo+LSAgT3RoZXIgaWRlbnRpdHkgcG9saWNpZXMgYXJlIG5v dCBzdXBwb3J0ZWQuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1TYXZlSWRlbnRpdHlQb2xpY3kgKA0K Pi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBT dGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgVXNlckluZm87DQo+LSAg RUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKkluZm87DQo+LQ0KPi0gIGlmICghbVVzZXJJ bmZvLk5ld0lkZW50aXR5UG9saWN5TW9kaWZpZWQgfHwNCj4obVVzZXJJbmZvLk5ld0lkZW50aXR5 UG9saWN5TGVuID09IDApKSB7DQo+LSAgICByZXR1cm47DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0g IC8vIENoZWNrIHBvbGljeSBleHByZXNzaW9uLg0KPi0gIC8vDQo+LSAgaWYgKCFDaGVja05ld0lk ZW50aXR5UG9saWN5IChtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3ksDQo+bVVzZXJJbmZvLk5l d0lkZW50aXR5UG9saWN5TGVuKSkgew0KPi0gICAgcmV0dXJuOw0KPi0gIH0NCj4tDQo+LSAgU3Rh dHVzID0gRmluZEluZm9CeVR5cGUgKG1Nb2RpZnlVc2VyLA0KPkVGSV9VU0VSX0lORk9fSURFTlRJ VFlfUE9MSUNZX1JFQ09SRCwgJlVzZXJJbmZvKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+LSAgICByZXR1cm4gOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBVcGRhdGUgdGhl IGluZm9ybWFudGlvbiBvbiBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0gIC8vDQo+LSAgU3RhdHVz ID0gVXBkYXRlQ3JlZGVudGlhbFByb3ZpZGVyICgpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIFNhdmUgbmV3 IGlkZW50aWZpY2F0aW9uIHBvbGljeS4NCj4tICAvLw0KPi0gIEluZm8gPSBBbGxvY2F0ZVplcm9Q b29sIChzaXplb2YgKEVGSV9VU0VSX0lORk8pICsNCj5tVXNlckluZm8uTmV3SWRlbnRpdHlQb2xp Y3lMZW4pOw0KPi0gIEFTU0VSVCAoSW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAgSW5mby0+SW5mb1R5 cGUgICAgPSBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWV9SRUNPUkQ7DQo+LSAgSW5mby0+ SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPkVGSV9V U0VSX0lORk9fUFVCTElDIHwgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+LSAgSW5mby0+SW5m b1NpemUgICAgPSAoVUlOVDMyKSAoc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArDQo+bVVzZXJJbmZv Lk5ld0lkZW50aXR5UG9saWN5TGVuKTsNCj4tICBDb3B5TWVtICgoVUlOVDggKikgKEluZm8gKyAx KSwgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5LA0KPm1Vc2VySW5mby5OZXdJZGVudGl0eVBv bGljeUxlbik7DQo+LQ0KPi0gIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+U2V0SW5mbyAobVVzZXJN YW5hZ2VyLCBtTW9kaWZ5VXNlciwNCj4mVXNlckluZm8sIEluZm8sIEluZm8tPkluZm9TaXplKTsN Cj4tICBGcmVlUG9vbCAoSW5mbyk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gVXBkYXRlIHRoZSBtVXNl ckluZm8uSWRlbnRpdHlQb2xpY3kgYnkgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5DQo+LSAg Ly8NCj4tICBpZiAobVVzZXJJbmZvLklkZW50aXR5UG9saWN5ICE9IE5VTEwpIHsNCj4tICAgIEZy ZWVQb29sIChtVXNlckluZm8uSWRlbnRpdHlQb2xpY3kpOw0KPi0gIH0NCj4tICBtVXNlckluZm8u SWRlbnRpdHlQb2xpY3kgICAgPSBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3k7DQo+LSAgbVVz ZXJJbmZvLklkZW50aXR5UG9saWN5TGVuID0gbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVu Ow0KPi0NCj4tICBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3kgICAgICAgICA9IE5VTEw7DQo+ LSAgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuICAgICAgPSAwOw0KPi0gIG1Vc2VySW5m by5OZXdJZGVudGl0eVBvbGljeU1vZGlmaWVkID0gRkFMU0U7DQo+LQ0KPi0gIC8vDQo+LSAgLy8g VXBkYXRlIGlkZW50aXR5IHBvbGljeSBjaG9pY2UuDQo+LSAgLy8NCj4tICBSZXNvbHZlSWRlbnRp dHlQb2xpY3kgKG1Vc2VySW5mby5JZGVudGl0eVBvbGljeSwNCj5tVXNlckluZm8uSWRlbnRpdHlQ b2xpY3lMZW4sIFNUUklOR19UT0tFTiAoU1RSX0lERU5USUZZX1BPTElDWV9WQUwpKTsNCj4tfQ0K Pi0NCj4tDQo+LS8qKg0KPi0gIFVwZGF0ZSB0aGUgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5 LCBhbmQgVUkgd2hlbiAnYWRkIG9wdGlvbicgaXMNCj5wcmVzc2VkLg0KPi0NCj4tKiovDQo+LVZP SUQNCj4tQWRkSWRlbnRpdHlQb2xpY3lJdGVtICgNCj4tICBWT0lEDQo+LSAgKQ0KPi17DQo+LSAg aWYgKG1Qcm92aWRlckluZm8tPkNvdW50ID09IDApIHsNCj4tICAgIHJldHVybiA7DQo+LSAgfQ0K Pi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHRoZSBpZGVudGl0eSBwb2xpY3kuDQo+LSAgLy8NCj4t ICBpZiAoUHJvdmlkZXJBbHJlYWR5SW5Qb2xpY3kgKCZtUHJvdmlkZXJJbmZvLT5Qcm92aWRlcltt UHJvdmlkZXJDaG9pY2VdLQ0KPj5JZGVudGlmaWVyKSkgew0KPi0gICAgcmV0dXJuOw0KPi0gIH0N Cj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgaXQgdG8gaWRlbnRpZmljYXRpb24gcG9saWN5DQo+LSAg Ly8NCj4tICBBZGRQcm92aWRlclRvUG9saWN5ICgmbVByb3ZpZGVySW5mby0+UHJvdmlkZXJbbVBy b3ZpZGVyQ2hvaWNlXS0NCj4+SWRlbnRpZmllcik7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gVXBkYXRl IGlkZW50aXR5IHBvbGljeSBjaG9pY2UuDQo+LSAgLy8NCj4tICBSZXNvbHZlSWRlbnRpdHlQb2xp Y3kgKG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeSwNCj5tVXNlckluZm8uTmV3SWRlbnRpdHlQ b2xpY3lMZW4sIFNUUklOR19UT0tFTg0KPihTVFJfSURFTlRJRllfUE9MSUNZX1ZBTFVFKSk7DQo+ LX0NCj4tDQo+LQ0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlv bi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVBZGQuYw0KPmIvU2VjdXJpdHlQa2cv VXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZUFkZC5j DQo+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+aW5kZXggNmRlN2U3NWU3OS4uMDAwMDAwMDAw MA0KPi0tLQ0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFu YWdlckR4ZS9Vc2VyUHJvZmlsZUFkZC5jDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDM3MiArMCww IEBADQo+LS8qKiBAZmlsZQ0KPi0gIFRoZSBmdW5jdGlvbnMgdG8gYWRkIGEgdXNlciBwcm9maWxl Lg0KPi0NCj4tQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlp bmcgbWF0ZXJpYWxzDQo+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhl IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LXdoaWNoIGFjY29t cGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBt YXkgYmUNCj5mb3VuZCBhdA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxp Y2Vuc2UucGhwDQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNE IExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJF UFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0K Pi0NCj4tKiovDQo+LQ0KPi0jaW5jbHVkZSAiVXNlclByb2ZpbGVNYW5hZ2VyLmgiDQo+LQ0KPi0N Cj4tLyoqDQo+LSAgR2V0IHVzZXIgbmFtZSBmcm9tIHRoZSBwb3B1cCB3aW5kb3dzLg0KPi0NCj4t ICBAcGFyYW1baW4sIG91dF0gIFVzZXJOYW1lTGVuICBPbiBlbnRyeSwgcG9pbnQgdG8gVXNlck5h bWUgYnVmZmVyIGxlbmdoLA0KPmluIGJ5dGVzLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE9uIGV4aXQsIHBvaW50IHRvIGlucHV0IHVzZXIgbmFtZSBsZW5ndGgsIGluIGJ5dGVz Lg0KPi0gIEBwYXJhbVtvdXRdICAgICAgVXNlck5hbWUgICAgIFRoZSBidWZmZXIgdG8gaG9sZCB0 aGUgaW5wdXQgdXNlciBuYW1lLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9BQk9SVEVEICAgICAgICAg ICBJdCBpcyBnaXZlbiB1cCBieSBwcmVzc2luZyAnRVNDJyBrZXkuDQo+LSAgQHJldHZhbCBFRklf Tk9UX1JFQURZICAgICAgICAgTm90IGEgdmFsaWQgaW5wdXQgYXQgYWxsLg0KPi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgIEdldCBhIHVzZXIgbmFtZSBzdWNjZXNzZnVsbHkuDQo+LQ0K Pi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1HZXRVc2VyTmFtZUlucHV0ICgNCj4tICBJTiBPVVQgIFVJ TlROICAgICAgICAgKlVzZXJOYW1lTGVuLA0KPi0gICAgIE9VVCAgQ0hBUjE2ICAgICAgICAqVXNl ck5hbWUNCj4tICApDQo+LXsNCj4tICBFRklfSU5QVVRfS0VZIEtleTsNCj4tICBVSU5UTiAgICAg ICAgIE5hbWVMZW47DQo+LSAgQ0hBUjE2ICAgICAgICBOYW1lW1VTRVJfTkFNRV9MRU5HVEhdOw0K Pi0NCj4tICBOYW1lTGVuID0gMDsNCj4tICB3aGlsZSAoVFJVRSkgew0KPi0gICAgTmFtZVtOYW1l TGVuXSAgICAgPSBMJ18nOw0KPi0gICAgTmFtZVtOYW1lTGVuICsgMV0gPSBMJ1wwJzsNCj4tICAg IENyZWF0ZVBvcFVwICgNCj4tICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNLR1JPVU5EX0JM VUUsDQo+LSAgICAgICZLZXksDQo+LSAgICAgIEwiSW5wdXQgVXNlciBOYW1lIiwNCj4tICAgICAg TCItLS0tLS0tLS0tLS0tLS0tLS0tLS0iLA0KPi0gICAgICBOYW1lLA0KPi0gICAgICBOVUxMDQo+ LSAgICAgICk7DQo+LSAgICAvLw0KPi0gICAgLy8gQ2hlY2sga2V5Lg0KPi0gICAgLy8NCj4tICAg IGlmIChLZXkuU2NhbkNvZGUgPT0gU0NBTl9OVUxMKSB7DQo+LSAgICAgIGlmIChLZXkuVW5pY29k ZUNoYXIgPT0gQ0hBUl9DQVJSSUFHRV9SRVRVUk4pIHsNCj4tICAgICAgICAvLw0KPi0gICAgICAg IC8vIEFkZCB0aGUgbnVsbCB0ZXJtaW5hdG9yLg0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgTmFt ZVtOYW1lTGVuXSA9IDA7DQo+LSAgICAgICAgTmFtZUxlbisrOw0KPi0gICAgICAgIGJyZWFrOw0K Pi0gICAgICB9IGVsc2UgaWYgKChLZXkuVW5pY29kZUNoYXIgPT0gQ0hBUl9OVUxMKSB8fA0KPi0g ICAgICAgICAgICAgICAgIChLZXkuVW5pY29kZUNoYXIgPT0gQ0hBUl9UQUIpIHx8DQo+LSAgICAg ICAgICAgICAgICAgKEtleS5Vbmljb2RlQ2hhciA9PSBDSEFSX0xJTkVGRUVEKQ0KPi0gICAgICAg ICAgICAgICAgICkgew0KPi0gICAgICAgIGNvbnRpbnVlOw0KPi0gICAgICB9IGVsc2Ugew0KPi0g ICAgICAgIGlmIChLZXkuVW5pY29kZUNoYXIgPT0gQ0hBUl9CQUNLU1BBQ0UpIHsNCj4tICAgICAg ICAgIGlmIChOYW1lTGVuID4gMCkgew0KPi0gICAgICAgICAgICBOYW1lTGVuLS07DQo+LSAgICAg ICAgICB9DQo+LSAgICAgICAgfSBlbHNlIHsNCj4tICAgICAgICAgIE5hbWVbTmFtZUxlbl0gPSBL ZXkuVW5pY29kZUNoYXI7DQo+LSAgICAgICAgICBOYW1lTGVuKys7DQo+LSAgICAgICAgICBpZiAo TmFtZUxlbiArIDEgPT0gVVNFUl9OQU1FX0xFTkdUSCkgew0KPi0gICAgICAgICAgICAvLw0KPi0g ICAgICAgICAgICAvLyBBZGQgdGhlIG51bGwgdGVybWluYXRvci4NCj4tICAgICAgICAgICAgLy8N Cj4tICAgICAgICAgICAgTmFtZVtOYW1lTGVuXSA9IDA7DQo+LSAgICAgICAgICAgIE5hbWVMZW4r KzsNCj4tICAgICAgICAgICAgYnJlYWs7DQo+LSAgICAgICAgICB9DQo+LSAgICAgICAgfQ0KPi0g ICAgICB9DQo+LSAgICB9DQo+LQ0KPi0gICAgaWYgKEtleS5TY2FuQ29kZSA9PSBTQ0FOX0VTQykg ew0KPi0gICAgICByZXR1cm4gRUZJX0FCT1JURUQ7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICBp ZiAoTmFtZUxlbiA8PSAxKSB7DQo+LSAgICByZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4tICB9DQo+ LQ0KPi0gIGlmICgqVXNlck5hbWVMZW4gPCBOYW1lTGVuICogc2l6ZW9mIChDSEFSMTYpKSB7DQo+ LSAgICByZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4tICB9DQo+LQ0KPi0gICpVc2VyTmFtZUxlbiA9 IE5hbWVMZW4gKiBzaXplb2YgKENIQVIxNik7DQo+LSAgQ29weU1lbSAoVXNlck5hbWUsIE5hbWUs ICpVc2VyTmFtZUxlbik7DQo+LQ0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4t LyoqDQo+LSAgU2V0IGEgdXNlcidzIHVzZXJuYW1lLg0KPi0NCj4tICBAcGFyYW1baW5dICAgVXNl ciAgICAgICAgICBIYW5kbGUgb2YgYSB1c2VyIHByb2ZpbGUgLg0KPi0gIEBwYXJhbVtpbl0gICBV c2VyTmFtZUxlbiAgIFRoZSBsZW5naCBvZiBVc2VyTmFtZS4NCj4tICBAcGFyYW1baW5dICAgVXNl ck5hbWUgICAgICBQb2ludCB0byB0aGUgYnVmZmVyIG9mIHVzZXIgbmFtZS4NCj4tDQo+LSAgQHJl dHZhbCBFRklfTk9UX1JFQURZICAgICAgVGhlIHVzZXJubWUgaW4gbUFkZFVzZXJOYW1lIGhhZCBi ZWVuIHVzZWQuDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgQ2hhbmdlIHRoZSB1c2Vy J3MgdXNlcm5hbWUgc3VjY2Vzc2Z1bGx5IHdpdGgNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1c2VybmFtZSBpbiBtQWRkVXNlck5hbWUuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0K Pi1TZXRVc2VyTmFtZSAoDQo+LSAgSU4gIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgIFVzZXIs DQo+LSAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgIFVzZXJOYW1lTGVuLA0KPi0gIElO ICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAqVXNlck5hbWUNCj4tICApDQo+LXsNCj4tICBF RklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GT19IQU5ETEUg ICAgVXNlckluZm87DQo+LSAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgVGVtcFVzZXI7DQo+LSAg RUZJX1VTRVJfSU5GTyAgICAgICAgICAgKk5ld1VzZXJJbmZvOw0KPi0NCj4tICBOZXdVc2VySW5m byA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBVc2VyTmFtZUxl bik7DQo+LSAgQVNTRVJUIChOZXdVc2VySW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAgTmV3VXNlcklu Zm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19OQU1FX1JFQ09SRDsNCj4tICBOZXdVc2Vy SW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9VU0VSX0lORk9fUFVCTElDIHwNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4t ICBOZXdVc2VySW5mby0+SW5mb1NpemUgICAgPSAoVUlOVDMyKSAoc2l6ZW9mIChFRklfVVNFUl9J TkZPKSArDQo+VXNlck5hbWVMZW4pOw0KPi0gIENvcHlNZW0gKChVSU5UOCAqKSAoTmV3VXNlcklu Zm8gKyAxKSwgVXNlck5hbWUsIFVzZXJOYW1lTGVuKTsNCj4tICBUZW1wVXNlciAgPSBOVUxMOw0K Pi0gIFN0YXR1cyAgICA9IG1Vc2VyTWFuYWdlci0+RmluZCAoDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJlRlbXBVc2VyLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXdVc2VySW5mbywNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTmV3VXNlckluZm8tPkluZm9TaXplDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAg IC8vDQo+LSAgICAvLyBUaGUgdXNlciBuYW1lIGhhZCBiZWVuIHVzZWQsIHJldHVybiBlcnJvci4N Cj4tICAgIC8vDQo+LSAgICBGcmVlUG9vbCAoTmV3VXNlckluZm8pOw0KPi0gICAgcmV0dXJuIEVG SV9OT1RfUkVBRFk7DQo+LSAgfQ0KPi0NCj4tICBVc2VySW5mbyA9IE5VTEw7DQo+LSAgbVVzZXJN YW5hZ2VyLT5TZXRJbmZvICgNCj4tICAgICAgICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLA0KPi0g ICAgICAgICAgICAgICAgICBVc2VyLA0KPi0gICAgICAgICAgICAgICAgICAmVXNlckluZm8sDQo+ LSAgICAgICAgICAgICAgICAgIE5ld1VzZXJJbmZvLA0KPi0gICAgICAgICAgICAgICAgICBOZXdV c2VySW5mby0+SW5mb1NpemUNCj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICBGcmVlUG9vbCAo TmV3VXNlckluZm8pOw0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8q Kg0KPi0gIFNldCBjcmVhdGUgZGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHVzZXIuDQo+LQ0KPi0gIEBw YXJhbVtpbl0gIFVzZXIgICAgICAgICAgICAgICBIYW5kbGUgb2YgYSB1c2VyIHByb2ZpbGUuDQo+ LQ0KPi0qKi8NCj4tVk9JRA0KPi1TZXRDcmVhdGVEYXRlICgNCj4tICBJTiAgICAgICAgRUZJX1VT RVJfUFJPRklMRV9IQU5ETEUgICBVc2VyDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICBVc2VySW5m bzsNCj4tICBFRklfVVNFUl9JTkZPX0NSRUFURV9EQVRFIERhdGU7DQo+LSAgRUZJX1VTRVJfSU5G TyAgICAgICAgICAgICAqTmV3VXNlckluZm87DQo+LQ0KPi0gIE5ld1VzZXJJbmZvID0gQWxsb2Nh dGVaZXJvUG9vbCAoDQo+LSAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX1VTRVJfSU5GTykg Kw0KPi0gICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9VU0VSX0lORk9fQ1JFQVRFX0RBVEUp DQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgQVNTRVJUIChOZXdVc2VySW5mbyAhPSBOVUxM KTsNCj4tDQo+LSAgTmV3VXNlckluZm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19DUkVB VEVfREFURV9SRUNPUkQ7DQo+LSAgTmV3VXNlckluZm8tPkluZm9BdHRyaWJzID0gRUZJX1VTRVJf SU5GT19TVE9SQUdFX1BMQVRGT1JNX05WIHwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFRklfVVNFUl9JTkZPX1BVQkxJQyB8DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+LSAgTmV3VXNlckluZm8tPkluZm9TaXplICAgID0g c2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZg0KPihFRklfVVNFUl9JTkZPX0NSRUFURV9E QVRFKTsNCj4tICBTdGF0dXMgICAgICAgICAgICAgICAgICAgPSBnUlQtPkdldFRpbWUgKCZEYXRl LCBOVUxMKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBGcmVlUG9vbCAo TmV3VXNlckluZm8pOw0KPi0gICAgcmV0dXJuIDsNCj4tICB9DQo+LQ0KPi0gIENvcHlNZW0gKChV SU5UOCAqKSAoTmV3VXNlckluZm8gKyAxKSwgJkRhdGUsIHNpemVvZg0KPihFRklfVVNFUl9JTkZP X0NSRUFURV9EQVRFKSk7DQo+LSAgVXNlckluZm8gPSBOVUxMOw0KPi0gIG1Vc2VyTWFuYWdlci0+ U2V0SW5mbyAoDQo+LSAgICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4tICAgICAgICAg ICAgICAgICAgVXNlciwNCj4tICAgICAgICAgICAgICAgICAgJlVzZXJJbmZvLA0KPi0gICAgICAg ICAgICAgICAgICBOZXdVc2VySW5mbywNCj4tICAgICAgICAgICAgICAgICAgTmV3VXNlckluZm8t PkluZm9TaXplDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgRnJlZVBvb2wgKE5ld1VzZXJJ bmZvKTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFNldCB0aGUgZGVmYXVsdCBpZGVudGl0eSBw b2xpY3kgb2YgdGhlIHNwZWNpZmllZCB1c2VyLg0KPi0NCj4tICBAcGFyYW1baW5dICBVc2VyICAg ICAgICAgICAgICAgSGFuZGxlIG9mIGEgdXNlciBwcm9maWxlLg0KPi0NCj4tKiovDQo+LVZPSUQN Cj4tU2V0SWRlbnRpdHlQb2xpY3kgKA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hB TkRMRSAgIFVzZXINCj4tICApDQo+LXsNCj4tICBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElD WSAqUG9saWN5Ow0KPi0gIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgIFVzZXJJbmZvOw0K Pi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICpOZXdVc2VySW5mbzsNCj4tDQo+LSAg TmV3VXNlckluZm8gPSBBbGxvY2F0ZVplcm9Qb29sICgNCj4tICAgICAgICAgICAgICAgICAgc2l6 ZW9mIChFRklfVVNFUl9JTkZPKSArDQo+LSAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX1VT RVJfSU5GT19JREVOVElUWV9QT0xJQ1kpDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgQVNT RVJUIChOZXdVc2VySW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAgUG9saWN5ICAgICAgICAgICAgICAg ICAgID0gKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICopIChOZXdVc2VySW5mbyArIDEp Ow0KPi0gIFBvbGljeS0+VHlwZSAgICAgICAgICAgICA9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlf VFJVRTsNCj4tICBQb2xpY3ktPkxlbmd0aCAgICAgICAgICAgPSBzaXplb2YgKEVGSV9VU0VSX0lO Rk9fSURFTlRJVFlfUE9MSUNZKTsNCj4tDQo+LSAgTmV3VXNlckluZm8tPkluZm9UeXBlICAgID0g RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lfUkVDT1JEOw0KPi0gIE5ld1VzZXJJbmZvLT5J bmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8DQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19QVUJMSUMgfA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVGSV9VU0VSX0lORk9fRVhDTFVTSVZFOw0KPi0gIE5ld1Vz ZXJJbmZvLT5JbmZvU2l6ZSAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBQb2xpY3ktPkxl bmd0aDsNCj4tICBVc2VySW5mbyAgICAgICAgICAgICAgICAgPSBOVUxMOw0KPi0gIG1Vc2VyTWFu YWdlci0+U2V0SW5mbyAoDQo+LSAgICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4tICAg ICAgICAgICAgICAgICAgVXNlciwNCj4tICAgICAgICAgICAgICAgICAgJlVzZXJJbmZvLA0KPi0g ICAgICAgICAgICAgICAgICBOZXdVc2VySW5mbywNCj4tICAgICAgICAgICAgICAgICAgTmV3VXNl ckluZm8tPkluZm9TaXplDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgRnJlZVBvb2wgKE5l d1VzZXJJbmZvKTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFNldCB0aGUgZGVmYXVsdCBhY2Nl c3MgcG9saWN5IG9mIHRoZSBzcGVjaWZpZWQgdXNlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVXNl ciAgICAgICAgICAgICAgIEhhbmRsZSBvZiBhIHVzZXIgcHJvZmlsZS4NCj4tDQo+LSoqLw0KPi1W T0lEDQo+LVNldEFjY2Vzc1BvbGljeSAoDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVf SEFORExFICAgVXNlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9VU0VSX0lORk9fQUNDRVNTX0NPTlRS T0wgICpDb250cm9sOw0KPi0gIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgIFVzZXJJbmZv Ow0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICpOZXdVc2VySW5mbzsNCj4tDQo+ LSAgTmV3VXNlckluZm8gPSBBbGxvY2F0ZVplcm9Qb29sICgNCj4tICAgICAgICAgICAgICAgICAg c2l6ZW9mIChFRklfVVNFUl9JTkZPKSArDQo+LSAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJ X1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCkNCj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICBB U1NFUlQgKE5ld1VzZXJJbmZvICE9IE5VTEwpOw0KPi0NCj4tICBDb250cm9sICAgICAgICAgICAg ICAgICAgPSAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCAqKSAoTmV3VXNlckluZm8gKw0K PjEpOw0KPi0gIENvbnRyb2wtPlR5cGUgICAgICAgICAgICA9IEVGSV9VU0VSX0lORk9fQUNDRVNT X0VOUk9MTF9TRUxGOw0KPi0gIENvbnRyb2wtPlNpemUgICAgICAgICAgICA9IHNpemVvZiAoRUZJ X1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCk7DQo+LQ0KPi0gIE5ld1VzZXJJbmZvLT5JbmZvVHlw ZSAgICA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX1BPTElDWV9SRUNPUkQ7DQo+LSAgTmV3VXNlcklu Zm8tPkluZm9BdHRyaWJzID0gRUZJX1VTRVJfSU5GT19TVE9SQUdFX1BMQVRGT1JNX05WIHwNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfVVNFUl9JTkZPX1BVQkxJQyB8DQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+LSAg TmV3VXNlckluZm8tPkluZm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIENvbnRy b2wtPlNpemU7DQo+LSAgVXNlckluZm8gICAgICAgICAgICAgICAgID0gTlVMTDsNCj4tICBtVXNl ck1hbmFnZXItPlNldEluZm8gKA0KPi0gICAgICAgICAgICAgICAgICBtVXNlck1hbmFnZXIsDQo+ LSAgICAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAgICAgICAgICAgICAgICZVc2VySW5mbywN Cj4tICAgICAgICAgICAgICAgICAgTmV3VXNlckluZm8sDQo+LSAgICAgICAgICAgICAgICAgIE5l d1VzZXJJbmZvLT5JbmZvU2l6ZQ0KPi0gICAgICAgICAgICAgICAgICApOw0KPi0gIEZyZWVQb29s IChOZXdVc2VySW5mbyk7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBBZGQgYSBuZXcgdXNlciBw cm9maWxlIGludG8gdGhlIHVzZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4tDQo+LSoqLw0KPi1WT0lE DQo+LUNhbGxBZGRVc2VyICgNCj4tICBWT0lEDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgU3RhdHVzOw0KPi0gIEVGSV9JTlBVVF9LRVkgICAgICAgICAgIEtleTsNCj4t ICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSBVc2VyOw0KPi0gIFVJTlROICAgICAgICAgICAgICAg ICAgIFVzZXJOYW1lTGVuOw0KPi0gIENIQVIxNiAgICAgICAgICAgICAgICAgIFVzZXJOYW1lW1VT RVJfTkFNRV9MRU5HVEhdOw0KPi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICpRdWVzdGlvblN0 cjsNCj4tICBDSEFSMTYgICAgICAgICAgICAgICAgICAqUHJvbXB0U3RyOw0KPi0NCj4tICBRdWVz dGlvblN0ciA9IE5VTEw7DQo+LSAgUHJvbXB0U3RyICAgPSBOVUxMOw0KPi0NCj4tICAvLw0KPi0g IC8vIEdldCB1c2VyIG5hbWUgdG8gYWRkLg0KPi0gIC8vDQo+LSAgVXNlck5hbWVMZW4gPSBzaXpl b2YgKFVzZXJOYW1lKTsNCj4tICBTdGF0dXMgPSBHZXRVc2VyTmFtZUlucHV0ICgmVXNlck5hbWVM ZW4sIFVzZXJOYW1lKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBpZiAo U3RhdHVzICE9IEVGSV9BQk9SVEVEKSB7DQo+LSAgICAgIFF1ZXN0aW9uU3RyID0gR2V0U3RyaW5n QnlJZCAoU1RSSU5HX1RPS0VODQo+KFNUUl9HRVRfVVNFUk5BTUVfRkFJTEVEKSk7DQo+LSAgICAg IFByb21wdFN0ciAgID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+KFNUUl9TVFJPS0Vf S0VZX0NPTlRJTlVFKSk7DQo+LSAgICAgIGdvdG8gRG9uZTsNCj4tICAgIH0NCj4tICAgIHJldHVy biA7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENyZWF0ZSBhIG5ldyB1c2VyIHByb2ZpbGUu DQo+LSAgLy8NCj4tICBVc2VyICAgID0gTlVMTDsNCj4tICBTdGF0dXMgID0gbVVzZXJNYW5hZ2Vy LT5DcmVhdGUgKG1Vc2VyTWFuYWdlciwgJlVzZXIpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4tICAgIFF1ZXN0aW9uU3RyID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+ KFNUUl9DUkVBVEVfUFJPRklMRV9GQUlMRUQpKTsNCj4tICAgIFByb21wdFN0ciAgID0gR2V0U3Ry aW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+KFNUUl9TVFJPS0VfS0VZX0NPTlRJTlVFKSk7DQo+LSAg fSBlbHNlIHsNCj4tICAgIC8vDQo+LSAgICAvLyBBZGQgZGVmYXVsdCB1c2VyIGluZm9ybWF0aW9u Lg0KPi0gICAgLy8NCj4tICAgIFN0YXR1cyA9IFNldFVzZXJOYW1lIChVc2VyLCBVc2VyTmFtZUxl biwgVXNlck5hbWUpOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBR dWVzdGlvblN0ciA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPihTVFJfVVNFUl9BTFJF QURZX0VYSVNURUQpKTsNCj4tICAgICAgUHJvbXB0U3RyICAgPSBHZXRTdHJpbmdCeUlkIChTVFJJ TkdfVE9LRU4NCj4oU1RSX1NUUk9LRV9LRVlfQ09OVElOVUUpKTsNCj4tICAgICAgZ290byBEb25l Ow0KPi0gICAgfQ0KPi0NCj4tICAgIFNldENyZWF0ZURhdGUgKFVzZXIpOw0KPi0gICAgU2V0SWRl bnRpdHlQb2xpY3kgKFVzZXIpOw0KPi0gICAgU2V0QWNjZXNzUG9saWN5IChVc2VyKTsNCj4tDQo+ LSAgICBRdWVzdGlvblN0ciA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPihTVFJfQ1JF QVRFX1BST0ZJTEVfU1VDQ0VTUykpOw0KPi0gICAgUHJvbXB0U3RyICAgPSBHZXRTdHJpbmdCeUlk IChTVFJJTkdfVE9LRU4NCj4oU1RSX1NUUk9LRV9LRVlfQ09OVElOVUUpKTsNCj4tICB9DQo+LQ0K Pi1Eb25lOg0KPi0gIENyZWF0ZVBvcFVwICgNCj4tICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFD S0dST1VORF9CTFVFLA0KPi0gICAgJktleSwNCj4tICAgIFF1ZXN0aW9uU3RyLA0KPi0gICAgTCIi LA0KPi0gICAgUHJvbXB0U3RyLA0KPi0gICAgTlVMTA0KPi0gICAgKTsNCj4tICBGcmVlUG9vbCAo UXVlc3Rpb25TdHIpOw0KPi0gIEZyZWVQb29sIChQcm9tcHRTdHIpOw0KPi19DQo+LQ0KPmRpZmYg LS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFn ZXJEeGUvVXNlclByb2ZpbGVEZWxldGUuDQo+Yw0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZp Y2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZURlbGV0ZS4NCj5jDQo+ZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+aW5kZXggYWY1ZDMxMDlkZC4uMDAwMDAwMDAwMA0KPi0t LQ0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4 ZS9Vc2VyUHJvZmlsZURlbGV0ZS4NCj5jDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDM0MyArMCww IEBADQo+LS8qKiBAZmlsZQ0KPi0gIFRoZSBmdW5jdGlvbnMgdG8gZGVsZXRlIGEgdXNlciBwcm9m aWxlLg0KPi0NCj4tQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBh bnlpbmcgbWF0ZXJpYWxzDQo+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LXdoaWNoIGFj Y29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5z ZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNk LWxpY2Vuc2UucGhwDQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUg QlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9S IFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVE Lg0KPi0NCj4tKiovDQo+LQ0KPi0jaW5jbHVkZSAiVXNlclByb2ZpbGVNYW5hZ2VyLmgiDQo+LQ0K Pi0vKioNCj4tICBHZXQgdGhlIHVzZXJuYW1lIGZyb20gdGhlIHNwZWNpZmllZCB1c2VyLg0KPi0N Cj4tICBAcGFyYW1baW5dICAgVXNlciAgICAgICAgICAgICAgSGFuZGxlIG9mIGEgdXNlciBwcm9m aWxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVFJJTkdfSUQgICAgICAgICAgVGhlIFN0cmluZyBJ ZCBvZiB0aGUgdXNlcidzIHVzZXJuYW1lLg0KPi0NCj4tKiovDQo+LUVGSV9TVFJJTkdfSUQNCj4t R2V0VXNlck5hbWUgKA0KPi0gIElOICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAg ICAgICAgICBVc2VyDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgIFN0YXR1 czsNCj4tICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgVXNlckluZm87DQo+LSAgRUZJX1VTRVJfSU5G TyAgICAgICAgICpJbmZvOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICBJbmZvU2l6ZTsNCj4t ICBVSU5UTiAgICAgICAgICAgICAgICAgTWVtU2l6ZTsNCj4tICBVSU5UTiAgICAgICAgICAgICAg ICAgTmFtZUxlbjsNCj4tICBDSEFSMTYgICAgICAgICAgICAgICAgVXNlck5hbWVbVVNFUl9OQU1F X0xFTkdUSF07DQo+LSAgRUZJX1NUUklOR19JRCAgICAgICAgIFVzZXJJZDsNCj4tDQo+LSAgLy8N Cj4tICAvLyBBbGxvY2F0ZSB1c2VyIGluZm9ybWF0aW9uIG1lbW9yeS4NCj4tICAvLw0KPi0gIE1l bVNpemUgPSBzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgNjM7DQo+LSAgSW5mbyAgICA9IEFsbG9j YXRlWmVyb1Bvb2wgKE1lbVNpemUpOw0KPi0gIEFTU0VSVCAoSW5mbyAhPSBOVUxMKTsNCj4tDQo+ LSAgLy8NCj4tICAvLyBHZXQgdXNlciBuYW1lIGluZm9ybWF0aW9uLg0KPi0gIC8vDQo+LSAgVXNl ckluZm8gPSBOVUxMOw0KPi0gIHdoaWxlIChUUlVFKSB7DQo+LSAgICBJbmZvU2l6ZSA9IE1lbVNp emU7DQo+LSAgICAvLw0KPi0gICAgLy8gR2V0IG5leHQgdXNlciBpbmZvcm1hdGlvbi4NCj4tICAg IC8vDQo+LSAgICBTdGF0dXMgPSBtVXNlck1hbmFnZXItPkdldE5leHRJbmZvICgNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtVXNlck1hbmFnZXIsDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVXNlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNlcklu Zm8NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tDQo+LSAgICBTdGF0dXMg PSBtVXNlck1hbmFnZXItPkdldEluZm8gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1Vc2VyTWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyLA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJbmZvLA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEluZm8sDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkluZm9T aXplDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4tICAgIGlmIChTdGF0dXMg PT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4tICAgICAgTWVtU2l6ZSA9IEluZm9TaXplOw0K Pi0gICAgICBGcmVlUG9vbCAoSW5mbyk7DQo+LSAgICAgIEluZm8gPSBBbGxvY2F0ZVplcm9Qb29s IChNZW1TaXplKTsNCj4tICAgICAgQVNTRVJUIChJbmZvICE9IE5VTEwpOw0KPi0NCj4tICAgICAg U3RhdHVzID0gbVVzZXJNYW5hZ2VyLT5HZXRJbmZvICgNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVzZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm8sDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmSW5mb1NpemUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 DQo+LSAgICB9DQo+LSAgICAvLw0KPi0gICAgLy8gQ2hlY2sgdXNlciBpbmZvcm1hdGlvbi4NCj4t ICAgIC8vDQo+LSAgICBpZiAoU3RhdHVzID09IEVGSV9TVUNDRVNTKSB7DQo+LSAgICAgIGlmIChJ bmZvLT5JbmZvVHlwZSA9PSBFRklfVVNFUl9JTkZPX05BTUVfUkVDT1JEKSB7DQo+LSAgICAgICAg TmFtZUxlbiA9IEluZm8tPkluZm9TaXplIC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKTsNCj4tICAg ICAgICBpZiAoTmFtZUxlbiA+IFVTRVJfTkFNRV9MRU5HVEggKiBzaXplb2YgKENIQVIxNikpIHsN Cj4tICAgICAgICAgIE5hbWVMZW4gPSBVU0VSX05BTUVfTEVOR1RIICogc2l6ZW9mIChDSEFSMTYp Ow0KPi0gICAgICAgIH0NCj4tICAgICAgICBBU1NFUlQgKE5hbWVMZW4gPj0gc2l6ZW9mIChDSEFS MTYpKTsNCj4tICAgICAgICBDb3B5TWVtIChVc2VyTmFtZSwgKFVJTlQ4ICopIChJbmZvICsgMSks IE5hbWVMZW4pOw0KPi0gICAgICAgIFVzZXJOYW1lW05hbWVMZW4gLyBzaXplb2YgKENIQVIxNikg LSAxXSA9IDA7DQo+LSAgICAgICAgVXNlcklkID0gSGlpU2V0U3RyaW5nICgNCj4tICAgICAgICAg ICAgICAgICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAg IDAsDQo+LSAgICAgICAgICAgICAgICAgICBVc2VyTmFtZSwNCj4tICAgICAgICAgICAgICAgICAg IE5VTEwNCj4tICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAgICAgaWYgKFVzZXJJZCAhPSAw KSB7DQo+LSAgICAgICAgICBGcmVlUG9vbCAoSW5mbyk7DQo+LSAgICAgICAgICByZXR1cm4gVXNl cklkOw0KPi0gICAgICAgIH0NCj4tICAgICAgfQ0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAgRnJl ZVBvb2wgKEluZm8pOw0KPi0gIHJldHVybiAwOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQWRk IGEgdXNlcm5hbWUgaXRlbSBpbiBmb3JtLg0KPi0NCj4tICBAcGFyYW1baW5dICBVc2VyICAgICAg ICAgIFBvaW50cyB0byB0aGUgdXNlciBwcm9maWxlIHdob3NlIHVzZXJuYW1lIGlzIGFkZGVkLg0K Pi0gIEBwYXJhbVtpbl0gIEluZGV4ICAgICAgICAgVGhlIGluZGV4IG9mIHRoZSB1c2VyIGluIHRo ZSB1c2VyIG5hbWUgbGlzdA0KPi0gIEBwYXJhbVtpbl0gIE9wQ29kZUhhbmRsZSAgUG9pbnRzIHRv IGNvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVhdGVkDQo+b3Bjb2Rlcy4NCj4tDQo+LSoqLw0KPi1W T0lEDQo+LUFkZFVzZXJUb0Zvcm0gKA0KPi0gIElOICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAg ICAgICAgICAgICAgICAgICBVc2VyLA0KPi0gIElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbmRleCwNCj4tICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKk9wQ29kZUhhbmRsZQ0KPi0gICkNCj4tew0KPi0gIEVGSV9TVFJJ TkdfSUQgTmFtZUlkOw0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCB1c2VyIG5hbWUNCj4tICAvLw0K Pi0gIE5hbWVJZCA9IEdldFVzZXJOYW1lIChVc2VyKTsNCj4tICBpZiAoTmFtZUlkID09IDApIHsN Cj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENyZWF0ZSB1c2VyIG5h bWUgb3B0aW9uLg0KPi0gIC8vDQo+LSAgc3dpdGNoIChJbmRleCAmIEtFWV9GSVJTVF9GT1JNX01B U0spIHsNCj4tICBjYXNlIEtFWV9NT0RJRllfVVNFUjoNCj4tICAgIEhpaUNyZWF0ZUdvdG9PcENv ZGUgKA0KPi0gICAgICBPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5l ciBmb3IgZHluYW1pYyBjcmVhdGVkIG9wY29kZXMNCj4tICAgICAgRk9STUlEX1VTRVJfSU5GTywg ICAgICAgICAgICAgICAvLyBUYXJnZXQgRm9ybSBJRA0KPi0gICAgICBOYW1lSWQsICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIFByb21wdCB0ZXh0DQo+LSAgICAgIFNUUklOR19UT0tFTiAoU1RS X05VTExfU1RSSU5HKSwgLy8gSGVscCB0ZXh0DQo+LSAgICAgIEVGSV9JRlJfRkxBR19DQUxMQkFD SywgICAgICAgICAgLy8gUXVlc3Rpb24gZmxhZw0KPi0gICAgICBJbmRleCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIFF1ZXN0aW9uIElEDQo+LSAgICAgICk7DQo+LSAgICBicmVhazsNCj4t DQo+LSAgY2FzZSBLRVlfREVMX1VTRVI6DQo+LSAgICBIaWlDcmVhdGVBY3Rpb25PcENvZGUgKA0K Pi0gICAgICBPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5lciBmb3Ig ZHluYW1pYyBjcmVhdGVkIG9wY29kZXMNCj4tICAgICAgSW5kZXgsICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBRdWVzdGlvbiBJRA0KPi0gICAgICBOYW1lSWQsICAgICAgICAgICAgICAgICAg ICAgICAgIC8vIFByb21wdCB0ZXh0DQo+LSAgICAgIFNUUklOR19UT0tFTiAoU1RSX05VTExfU1RS SU5HKSwgLy8gSGVscCB0ZXh0DQo+LSAgICAgIEVGSV9JRlJfRkxBR19DQUxMQkFDSywgICAgICAg ICAgLy8gUXVlc3Rpb24gZmxhZw0KPi0gICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIEFjdGlvbiBTdHJpbmcgSUQNCj4tICAgICAgKTsNCj4tICAgIGJyZWFrOw0KPi0NCj4t ICBkZWZhdWx0Og0KPi0gICAgYnJlYWs7DQo+LSAgfQ0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAg RGVsZXRlIHRoZSB1c2VyIHNwZWNpZmllZCBieSBVc2VySW5kZXggaW4gdXNlciBwcm9maWxlIGRh dGFiYXNlLg0KPi0NCj4tICBAcGFyYW1baW5dICBVc2VySW5kZXggICAgICAgVGhlIGluZGV4IG9m IHVzZXIgaW4gdGhlIHVzZXIgbmFtZSBsaXN0DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRvIGJlIGRlbGV0ZWQuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1EZWxldGVVc2VyICgNCj4t ICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckluZGV4 DQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPi0gIEVG SV9VU0VSX1BST0ZJTEVfSEFORExFIFVzZXI7DQo+LSAgRUZJX0lOUFVUX0tFWSAgICAgICAgICAg S2V5Ow0KPi0gIEVGSV9VU0VSX0lORk9fSEFORExFICAgIFVzZXJJbmZvOw0KPi0gIEVGSV9VU0VS X0lORk8gICAgICAgICAgICpJbmZvOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgIEluZm9T aXplOw0KPi0NCj4tICAvLw0KPi0gIC8vIEZpbmQgc3BlY2lmaWVkIHVzZXIgcHJvZmlsZSBhbmQg ZGVsZXRlIGl0Lg0KPi0gIC8vDQo+LSAgVXNlciAgICA9IE5VTEw7DQo+LSAgU3RhdHVzICA9IG1V c2VyTWFuYWdlci0+R2V0TmV4dCAobVVzZXJNYW5hZ2VyLCAmVXNlcik7DQo+LSAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4tDQo+LSAgd2hpbGUg KFVzZXJJbmRleCA+IDEpIHsNCj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dCAo bVVzZXJNYW5hZ2VyLCAmVXNlcik7DQo+LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ LSAgICAgIGdvdG8gRG9uZTsNCj4tICAgIH0NCj4tICAgIFVzZXJJbmRleC0tOw0KPi0gIH0NCj4t DQo+LSAgaWYgKFVzZXJJbmRleCA9PSAxKSB7DQo+LSAgICAvLw0KPi0gICAgLy8gR2V0IHRoZSBp ZGVudGlmaWNhdGlvbiBwb2xpY3kuDQo+LSAgICAvLw0KPi0gICAgU3RhdHVzID0gRmluZEluZm9C eVR5cGUgKFVzZXIsDQo+RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lfUkVDT1JELCAmVXNl ckluZm8pOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBnb3RvIERv bmU7DQo+LSAgICB9DQo+LQ0KPi0gICAgSW5mb1NpemUgPSAwOw0KPi0gICAgSW5mbyA9IE5VTEw7 DQo+LSAgICBTdGF0dXMgICA9IG1Vc2VyTWFuYWdlci0+R2V0SW5mbyAobVVzZXJNYW5hZ2VyLCBV c2VyLCBVc2VySW5mbywgSW5mbywNCj4mSW5mb1NpemUpOw0KPi0gICAgaWYgKFN0YXR1cyA9PSBF RklfQlVGRkVSX1RPT19TTUFMTCkgew0KPi0gICAgICBJbmZvID0gQWxsb2NhdGVaZXJvUG9vbCAo SW5mb1NpemUpOw0KPi0gICAgICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+LSAgICAgICAgZ290byBE b25lOw0KPi0gICAgICB9DQo+LSAgICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0SW5mbyAo bVVzZXJNYW5hZ2VyLCBVc2VyLCBVc2VySW5mbywgSW5mbywNCj4mSW5mb1NpemUpOw0KPi0gICAg fQ0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBEZWxldGUgdGhlIHVzZXIgb24gdGhlIGNyZWRlbnRp YWwgcHJvdmlkZXJzIGJ5IGl0cyBpZGVudGlmaWNhdGlvbiBwb2xpY3kuDQo+LSAgICAvLw0KPi0g ICAgQVNTRVJUIChJbmZvICE9IE5VTEwpOw0KPi0gICAgRGVsZXRlQ3JlZGVudGlhbEZyb21Qcm92 aWRlcnMgKChVSU5UOCAqKShJbmZvICsgMSksIEluZm8tPkluZm9TaXplIC0gc2l6ZW9mDQo+KEVG SV9VU0VSX0lORk8pLCBVc2VyKTsNCj4tICAgIEZyZWVQb29sIChJbmZvKTsNCj4tDQo+LSAgICBT dGF0dXMgPSBtVXNlck1hbmFnZXItPkRlbGV0ZSAobVVzZXJNYW5hZ2VyLCBVc2VyKTsNCj4tICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgZ290byBEb25lOw0KPi0gICAgfQ0K Pi0gICAgQ3JlYXRlUG9wVXAgKA0KPi0gICAgICBFRklfTElHSFRHUkFZIHwgRUZJX0JBQ0tHUk9V TkRfQkxVRSwNCj4tICAgICAgJktleSwNCj4tICAgICAgTCJEZWxldGUgVXNlciBTdWNjZWVkISIs DQo+LSAgICAgIEwiIiwNCj4tICAgICAgTCJQbGVhc2UgUHJlc3MgQW55IEtleSB0byBDb250aW51 ZSAuLi4iLA0KPi0gICAgICBOVUxMDQo+LSAgICAgICk7DQo+LSAgICByZXR1cm4gOw0KPi0gIH0N Cj4tDQo+LURvbmU6DQo+LSAgQ3JlYXRlUG9wVXAgKA0KPi0gICAgRUZJX0xJR0hUR1JBWSB8IEVG SV9CQUNLR1JPVU5EX0JMVUUsDQo+LSAgICAmS2V5LA0KPi0gICAgTCJEZWxldGUgVXNlciBGYWls ZWQhIiwNCj4tICAgIEwiIiwNCj4tICAgIEwiUGxlYXNlIFByZXNzIEFueSBLZXkgdG8gQ29udGlu dWUgLi4uIiwNCj4tICAgIE5VTEwNCj4tICAgICk7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBE aXNwbGF5IHVzZXIgc2VsZWN0IGZvcm0sIGNhYiBzZWxlY3QgYSB1c2VyIHRvIGRlbGV0ZS4NCj4t DQo+LSoqLw0KPi1WT0lEDQo+LVNlbGVjdFVzZXJUb0RlbGV0ZSAoDQo+LSAgVk9JRA0KPi0gICkN Cj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4tICBVSU5UOCAgICAg ICAgICAgICAgICAgICBJbmRleDsNCj4tICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSBVc2VyOw0K Pi0gIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFIEN1cnJlbnRVc2VyOw0KPi0gIFZPSUQgICAgICAg ICAgICAgICAgICAgICpTdGFydE9wQ29kZUhhbmRsZTsNCj4tICBWT0lEICAgICAgICAgICAgICAg ICAgICAqRW5kT3BDb2RlSGFuZGxlOw0KPi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAgICAgICpTdGFy dExhYmVsOw0KPi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAgICAgICpFbmRMYWJlbDsNCj4tDQo+LSAg Ly8NCj4tICAvLyBJbml0aWFsaXplIHRoZSBjb250YWluZXIgZm9yIGR5bmFtaWMgb3Bjb2Rlcy4N Cj4tICAvLw0KPi0gIFN0YXJ0T3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUg KCk7DQo+LSAgQVNTRVJUIChTdGFydE9wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4tDQo+LSAgRW5k T3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgQVNTRVJUIChF bmRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ3JlYXRlIEhpaSBF eHRlbmQgTGFiZWwgT3BDb2RlLg0KPi0gIC8vDQo+LSAgU3RhcnRMYWJlbCA9IChFRklfSUZSX0dV SURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAoDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTdGFydE9wQ29kZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4tICBTdGFydExhYmVsLT5F eHRlbmRPcENvZGUgID0gRUZJX0lGUl9FWFRFTkRfT1BfTEFCRUw7DQo+LSAgU3RhcnRMYWJlbC0+ TnVtYmVyICAgICAgICA9IExBQkVMX1VTRVJfREVMX0ZVTkM7DQo+LQ0KPi0gIEVuZExhYmVsID0g KEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVhdGVHdWlkT3BDb2RlICgNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gIEVuZExhYmVsLT5FeHRl bmRPcENvZGUgID0gRUZJX0lGUl9FWFRFTkRfT1BfTEFCRUw7DQo+LSAgRW5kTGFiZWwtPk51bWJl ciAgICAgICAgPSBMQUJFTF9FTkQ7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWRkIGVhY2ggdXNlciBj YW4gYmUgZGVsZXRlZC4NCj4tICAvLw0KPi0gIFVzZXIgID0gTlVMTDsNCj4tICBJbmRleCA9IDE7 DQo+LSAgbVVzZXJNYW5hZ2VyLT5DdXJyZW50IChtVXNlck1hbmFnZXIsICZDdXJyZW50VXNlcik7 DQo+LSAgd2hpbGUgKFRSVUUpIHsNCj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4 dCAobVVzZXJNYW5hZ2VyLCAmVXNlcik7DQo+LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+LSAgICAgIGJyZWFrOw0KPi0gICAgfQ0KPi0NCj4tICAgIGlmIChVc2VyICE9IEN1cnJlbnRV c2VyKSB7DQo+LSAgICAgIEFkZFVzZXJUb0Zvcm0gKA0KPi0gICAgICAgIFVzZXIsDQo+LSAgICAg ICAgKFVJTlQxNikoS0VZX0RFTF9VU0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwgSW5kZXgpLA0KPi0g ICAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlDQo+LSAgICAgICAgKTsNCj4tICAgIH0NCj4tICAgIElu ZGV4Kys7DQo+LSAgfQ0KPi0NCj4tICBIaWlVcGRhdGVGb3JtICgNCj4tICAgIG1DYWxsYmFja0lu Zm8tPkhpaUhhbmRsZSwgLy8gSElJIGhhbmRsZQ0KPi0gICAgJmdVc2VyUHJvZmlsZU1hbmFnZXJH dWlkLCAvLyBGb3Jtc2V0IEdVSUQNCj4tICAgIEZPUk1JRF9ERUxfVVNFUiwgICAgICAgICAgLy8g Rm9ybSBJRA0KPi0gICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAvLyBMYWJlbCBmb3Igd2hl cmUgdG8gaW5zZXJ0IG9wY29kZXMNCj4tICAgIEVuZE9wQ29kZUhhbmRsZSAgICAgICAgICAgLy8g UmVwbGFjZSBkYXRhDQo+LSAgICApOw0KPi0NCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFy dE9wQ29kZUhhbmRsZSk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRW5kT3BDb2RlSGFuZGxl KTsNCj4tfQ0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9V c2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZw0KPmVyLmMNCj5iL1NlY3VyaXR5 UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVN YW5hZw0KPmVyLmMNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCBlNzNiYTNhOGZj Li4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNl clByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lci5jDQo+KysrIC9kZXYvbnVs bA0KPkBAIC0xLDg4NyArMCwwIEBADQo+LS8qKiBAZmlsZQ0KPi0gIFRoaXMgZHJpdmVyIGlzIGEg Y29uZmlndXJhdGlvbiB0b29sIGZvciBhZGRpbmcsIGRlbGV0aW5nIG9yIG1vZGlmeWluZyB1c2Vy DQo+LSAgcHJvZmlsZXMsIGluY2x1ZGluZyBnYXRoZXJpbmcgdGhlIG5lY2Vzc2FyeSBpbmZvcm1h dGlvbiB0byBhc2NlcnRhaW4gdGhlaXINCj4tICBpZGVudGl0eSBpbiB0aGUgZnV0dXJlLCB1cGRh dGluZyB1c2VyIGFjY2VzcyBwb2xpY3kgYW5kIGlkZW50aWZpY2F0aW9uDQo+LSAgcG9saWN5LCBl dGMuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LShDKSBDb3B5cmlnaHQgMjAxOCBIZXdsZXR0IFBh Y2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4tVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxh YmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0K Pi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2Yg dGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xp Y2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0NCj4tVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQg VU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+LVdJVEhPVVQgV0FS UkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPkVYUFJFU1Mg T1IgSU1QTElFRC4NCj4tDQo+LSoqLw0KPi0NCj4tI2luY2x1ZGUgIlVzZXJQcm9maWxlTWFuYWdl ci5oIg0KPi0NCj4tRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAqbVVzZXJNYW5hZ2VyICAgICAg ICAgICA9IE5VTEw7DQo+LUNSRURFTlRJQUxfUFJPVklERVJfSU5GTyAgKm1Qcm92aWRlckluZm8g ICAgICAgICAgPSBOVUxMOw0KPi1VSU5UOCAgICAgICAgICAgICAgICAgICAgIG1Qcm92aWRlckNo b2ljZTsNCj4tVUlOVDggICAgICAgICAgICAgICAgICAgICBtQ29ubmNldExvZ2ljYWw7DQo+LVVT RVJfSU5GT19BQ0NFU1MgICAgICAgICAgbUFjY2Vzc0luZm87DQo+LVVTRVJfSU5GTyAgICAgICAg ICAgICAgICAgbVVzZXJJbmZvOw0KPi1VU0VSX1BST0ZJTEVfTUFOQUdFUl9DQUxMQkFDS19JTkZP ICAqbUNhbGxiYWNrSW5mbzsNCj4tSElJX1ZFTkRPUl9ERVZJQ0VfUEFUSCAgbUhpaVZlbmRvckRl dmljZVBhdGggPSB7DQo+LSAgew0KPi0gICAgew0KPi0gICAgICBIQVJEV0FSRV9ERVZJQ0VfUEFU SCwNCj4tICAgICAgSFdfVkVORE9SX0RQLA0KPi0gICAgICB7DQo+LSAgICAgICAgKFVJTlQ4KSAo c2l6ZW9mIChWRU5ET1JfREVWSUNFX1BBVEgpKSwNCj4tICAgICAgICAoVUlOVDgpICgoc2l6ZW9m IChWRU5ET1JfREVWSUNFX1BBVEgpKSA+PiA4KQ0KPi0gICAgICB9DQo+LSAgICB9LA0KPi0gICAg VVNFUl9QUk9GSUxFX01BTkFHRVJfR1VJRA0KPi0gIH0sDQo+LSAgew0KPi0gICAgRU5EX0RFVklD RV9QQVRIX1RZUEUsDQo+LSAgICBFTkRfRU5USVJFX0RFVklDRV9QQVRIX1NVQlRZUEUsDQo+LSAg ICB7DQo+LSAgICAgIChVSU5UOCkgKEVORF9ERVZJQ0VfUEFUSF9MRU5HVEgpLA0KPi0gICAgICAo VUlOVDgpICgoRU5EX0RFVklDRV9QQVRIX0xFTkdUSCkgPj4gOCkNCj4tICAgIH0NCj4tICB9DQo+ LX07DQo+LQ0KPi0NCj4tLyoqDQo+LSAgR2V0IHN0cmluZyBieSBzdHJpbmcgaWQgZnJvbSBISUkg SW50ZXJmYWNlLg0KPi0NCj4tDQo+LSAgQHBhcmFtW2luXSBJZCAgICAgIFN0cmluZyBJRCB0byBn ZXQgdGhlIHN0cmluZyBmcm9tLg0KPi0NCj4tICBAcmV0dmFsICBDSEFSMTYgKiAgU3RyaW5nIGZy b20gSUQuDQo+LSAgQHJldHZhbCAgTlVMTCAgICAgIElmIGVycm9yIG9jY3Vycy4NCj4tDQo+LSoq Lw0KPi1DSEFSMTYgKg0KPi1HZXRTdHJpbmdCeUlkICgNCj4tICBJTiBFRklfU1RSSU5HX0lEICAg ICAgICAgICAgIElkDQo+LSAgKQ0KPi17DQo+LSAgLy8NCj4tICAvLyBHZXQgdGhlIGN1cnJlbnQg c3RyaW5nIGZvciB0aGUgY3VycmVudCBMYW5ndWFnZS4NCj4tICAvLw0KPi0gIHJldHVybiBIaWlH ZXRTdHJpbmcgKG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgSWQsIE5VTEwpOw0KPi19DQo+LQ0K Pi0NCj4tLyoqDQo+LSAgVGhpcyBmdW5jdGlvbiBnZXRzIGFsbCB0aGUgY3JlZGVudGlhbCBwcm92 aWRlcnMgaW4gdGhlIHN5c3RlbSBhbmQgc2F2ZWQgdGhlbQ0KPi0gIHRvIG1Qcm92aWRlckluZm8u DQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0VTUyAgICAgSW5pdCBjcmVkZW50aWFsIHByb3ZpZGVy IGRhdGFiYXNlIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgIEZhaWwg dG8gaW5pdCBjcmVkZW50aWFsIHByb3ZpZGVyIGRhdGFiYXNlLg0KPi0NCj4tKiovDQo+LUVGSV9T VEFUVVMNCj4tSW5pdFByb3ZpZGVySW5mbyAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIEVG SV9TVEFUVVMgIFN0YXR1czsNCj4tICBVSU5UTiAgICAgICBIYW5kbGVDb3VudDsNCj4tICBFRklf SEFORExFICAqSGFuZGxlQnVmOw0KPi0gIFVJTlROICAgICAgIEluZGV4Ow0KPi0NCj4tICAvLw0K Pi0gIC8vIFRyeSB0byBmaW5kIGFsbCB0aGUgdXNlciBjcmVkZW50aWFsIHByb3ZpZGVyIGRyaXZl ci4NCj4tICAvLw0KPi0gIEhhbmRsZUNvdW50ID0gMDsNCj4tICBIYW5kbGVCdWYgICA9IE5VTEw7 DQo+LSAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KPi0gICAgICAgICAgICAg ICAgICBCeVByb3RvY29sLA0KPi0gICAgICAgICAgICAgICAgICAmZ0VmaVVzZXJDcmVkZW50aWFs MlByb3RvY29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAg ICAgICAgJkhhbmRsZUNvdW50LA0KPi0gICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmDQo+LSAg ICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAg cmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IHByb3ZpZGVyIGlu Zm9tYXRpb24uDQo+LSAgLy8NCj4tICBpZiAobVByb3ZpZGVySW5mbyAhPSBOVUxMKSB7DQo+LSAg ICBGcmVlUG9vbCAobVByb3ZpZGVySW5mbyk7DQo+LSAgfQ0KPi0gIG1Qcm92aWRlckluZm8gPSBB bGxvY2F0ZVplcm9Qb29sICgNCj4tICAgICAgICAgICAgICAgICAgICBzaXplb2YgKENSRURFTlRJ QUxfUFJPVklERVJfSU5GTykgLQ0KPi0gICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX1VT RVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgKikgKw0KPi0gICAgICAgICAgICAgICAgICAgIEhhbmRs ZUNvdW50ICogc2l6ZW9mIChFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAqKQ0KPi0gICAg ICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKG1Qcm92aWRlckluZm8gPT0gTlVMTCkgew0KPi0g ICAgRnJlZVBvb2wgKEhhbmRsZUJ1Zik7DQo+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQo+LSAgfQ0KPi0NCj4tICBtUHJvdmlkZXJJbmZvLT5Db3VudCA9IEhhbmRsZUNvdW50Ow0K Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNvdW50OyBJbmRleCsrKSB7DQo+LSAg ICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4tICAgICAgICAgICAgICAgICAgICBI YW5kbGVCdWZbSW5kZXhdLA0KPi0gICAgICAgICAgICAgICAgICAgICZnRWZpVXNlckNyZWRlbnRp YWwyUHJvdG9jb2xHdWlkLA0KPi0gICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAmbVByb3Zp ZGVySW5mby0+UHJvdmlkZXJbSW5kZXhdDQo+LSAgICAgICAgICAgICAgICAgICAgKTsNCj4tICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1Zik7 DQo+LSAgICAgIEZyZWVQb29sIChtUHJvdmlkZXJJbmZvKTsNCj4tICAgICAgbVByb3ZpZGVySW5m byA9IE5VTEw7DQo+LSAgICAgIHJldHVybiBTdGF0dXM7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4t ICBGcmVlUG9vbCAoSGFuZGxlQnVmKTsNCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4t DQo+LQ0KPi0vKioNCj4tICBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBjaGFuZ2VzIGluIHVzZXIg cHJvZmlsZSBjb25maWd1cmF0aW9uLg0KPi0NCj4tICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAg ICAgICAgUG9pbnRzIHRvIHRoZSBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wuDQo+LSAg QHBhcmFtICBBY3Rpb24gICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBhY3Rp b24gdGFrZW4gYnkgdGhlIGJyb3dzZXIuDQo+LSAgQHBhcmFtICBRdWVzdGlvbklkICAgICAgICAg ICAgIEEgdW5pcXVlIHZhbHVlIHdoaWNoIGlzIHNlbnQgdG8gdGhlIG9yaWdpbmFsDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGluZyBkcml2ZXIgc28gdGhhdCBpdCBj YW4gaWRlbnRpZnkgdGhlIHR5cGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b2YgZGF0YSB0byBleHBlY3QuDQo+LSAgQHBhcmFtICBUeXBlICAgICAgICAgICAgICAgICAgIFRo ZSB0eXBlIG9mIHZhbHVlIGZvciB0aGUgcXVlc3Rpb24uDQo+LSAgQHBhcmFtICBWYWx1ZSAgICAg ICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSBiZWluZyBzZW50IHRvIHRoZSBvcmln aW5hbA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRpbmcgZHJpdmVy Lg0KPi0gIEBwYXJhbSAgQWN0aW9uUmVxdWVzdCAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0 byB0aGUgYWN0aW9uIHJlcXVlc3RlZCBieQ0KPnRoZQ0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYWxsYmFjayBmdW5jdGlvbi4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgIFRoZSBjYWxsYmFjayBzdWNjZXNzZnVsbHkgaGFuZGxlZCB0aGUgYWN0aW9u Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBGYWlsIHRvIGhhbmRsZSB0aGUg YWN0aW9uLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxl TWFuYWdlckNhbGxiYWNrICgNCj4tICBJTiAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BS T1RPQ09MICAgICAgKlRoaXMsDQo+LSAgSU4gIEVGSV9CUk9XU0VSX0FDVElPTiAgICAgICAgICAg ICAgICAgICAgICAgIEFjdGlvbiwNCj4tICBJTiAgRUZJX1FVRVNUSU9OX0lEICAgICAgICAgICAg ICAgICAgICAgICAgICAgUXVlc3Rpb25JZCwNCj4tICBJTiAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVHlwZSwNCj4tICBJTiAgRUZJX0lGUl9UWVBFX1ZBTFVFICAg ICAgICAgICAgICAgICAgICAgICAgKlZhbHVlLA0KPi0gIE9VVCBFRklfQlJPV1NFUl9BQ1RJT05f UkVRVUVTVCAgICAgICAgICAgICAgICAqQWN0aW9uUmVxdWVzdA0KPi0gICkNCj4tew0KPi0gIEVG SV9TVEFUVVMgICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX0lOUFVUX0tFWSAgICAgICAg ICAgIEtleTsNCj4tICBVSU5UMzIgICAgICAgICAgICAgICAgICAgQ3VycmVudEFjY2Vzc1JpZ2h0 Ow0KPi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAqUXVlc3Rpb25TdHI7DQo+LSAgQ0hBUjE2 ICAgICAgICAgICAgICAgICAgICpQcm9tcHRTdHI7DQo+LSAgVk9JRCAgICAgICAgICAgICAgICAg ICAgICpTdGFydE9wQ29kZUhhbmRsZTsNCj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAgKkVu ZE9wQ29kZUhhbmRsZTsNCj4tICBFRklfSUZSX0dVSURfTEFCRUwgICAgICAgKlN0YXJ0TGFiZWw7 DQo+LSAgRUZJX0lGUl9HVUlEX0xBQkVMICAgICAgICpFbmRMYWJlbDsNCj4tICBFRklfVVNFUl9Q Uk9GSUxFX0hBTkRMRSAgQ3VycmVudFVzZXI7DQo+LQ0KPi0gIFN0YXR1cyA9IEVGSV9TVUNDRVNT Ow0KPi0NCj4tICBzd2l0Y2ggKEFjdGlvbikgew0KPi0gIGNhc2UgRUZJX0JST1dTRVJfQUNUSU9O X0ZPUk1fT1BFTjoNCj4tICAgIHsNCj4tICAgICAgLy8NCj4tICAgICAgLy8gVXBkYXRlIHVzZXIg bWFuYWdlIEZvcm0gd2hlbiB1c2VyIG1hbmFnZSBGb3JtIGlzIG9wZW5lZC4NCj4tICAgICAgLy8g VGhpcyB3aWxsIGJlIGRvbmUgb25seSBpbiBGT1JNX09QRU4gQ2FsbEJhY2sgb2YgcXVlc3Rpb24g d2l0aA0KPlFVRVNUSU9OSURfVVNFUl9NQU5BR0UgZnJvbSB1c2VyIG1hbmFnZSBGb3JtLg0KPi0g ICAgICAvLw0KPi0gICAgICBpZiAoUXVlc3Rpb25JZCAhPSBRVUVTVElPTklEX1VTRVJfTUFOQUdF KSB7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgICB9DQo+LQ0KPi0gICAg ICAvLw0KPi0gICAgICAvLyBHZXQgY3VycmVudCB1c2VyDQo+LSAgICAgIC8vDQo+LSAgICAgIEN1 cnJlbnRVc2VyID0gTlVMTDsNCj4tICAgICAgbVVzZXJNYW5hZ2VyLT5DdXJyZW50IChtVXNlck1h bmFnZXIsICZDdXJyZW50VXNlcik7DQo+LSAgICAgIGlmIChDdXJyZW50VXNlciA9PSBOVUxMKSB7 DQo+LSAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkVycm9yOiBjdXJyZW50IHVzZXIgZG9l cyBub3QgZXhpc3QhXG4iKSk7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9OT1RfUkVBRFk7DQo+LSAg ICAgIH0NCj4tDQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIEdldCBjdXJyZW50IHVzZXIncyByaWdo dCBpbmZvcm1hdGlvbi4NCj4tICAgICAgLy8NCj4tICAgICAgU3RhdHVzID0gR2V0QWNjZXNzUmln aHQgKCZDdXJyZW50QWNjZXNzUmlnaHQpOw0KPi0gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+LSAgICAgICAgQ3VycmVudEFjY2Vzc1JpZ2h0ID0gRUZJX1VTRVJfSU5GT19BQ0NFU1Nf RU5ST0xMX1NFTEY7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIEluaXQg Y3JlZGVudGlhbCBwcm92aWRlciBpbmZvcm1hdGlvbi4NCj4tICAgICAgLy8NCj4tICAgICAgU3Rh dHVzID0gSW5pdFByb3ZpZGVySW5mbyAoKTsNCj4tICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPi0gICAgICAgIHJldHVybiBTdGF0dXM7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIC8v DQo+LSAgICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbnRhaW5lciBmb3IgZHluYW1pYyBvcGNvZGVz Lg0KPi0gICAgICAvLw0KPi0gICAgICBTdGFydE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BD b2RlSGFuZGxlICgpOw0KPi0gICAgICBBU1NFUlQgKFN0YXJ0T3BDb2RlSGFuZGxlICE9IE5VTEwp Ow0KPi0NCj4tICAgICAgRW5kT3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUg KCk7DQo+LSAgICAgIEFTU0VSVCAoRW5kT3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICAg ICAgLy8NCj4tICAgICAgLy8gQ3JlYXRlIEhpaSBFeHRlbmQgTGFiZWwgT3BDb2RlLg0KPi0gICAg ICAvLw0KPi0gICAgICBTdGFydExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVh dGVHdWlkT3BDb2RlICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTdGFydE9wQ29kZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAgIFN0YXJ0TGFi ZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICAgICAgU3Rh cnRMYWJlbC0+TnVtYmVyICAgICAgICA9IExBQkVMX1VTRVJfTUFOQUdFX0ZVTkM7DQo+LQ0KPi0g ICAgICBFbmRMYWJlbCA9IChFRklfSUZSX0dVSURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9wQ29k ZSAoDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZE9wQ29k ZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdF ZmlJZnJUaWFub0d1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOw0KPi0gICAgICBFbmRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9J RlJfRVhURU5EX09QX0xBQkVMOw0KPi0gICAgICBFbmRMYWJlbC0+TnVtYmVyICAgICAgICA9IExB QkVMX0VORDsNCj4tDQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIEFkZCB1c2VyIHByb2ZpbGUgb3B0 aW9uLg0KPi0gICAgICAvLw0KPi0gICAgICBpZiAoKEN1cnJlbnRBY2Nlc3NSaWdodCA9PSBFRklf VVNFUl9JTkZPX0FDQ0VTU19NQU5BR0UpIHx8DQo+LSAgICAgICAgICAoQ3VycmVudEFjY2Vzc1Jp Z2h0ID09IEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9PVEhFUlMpDQo+LSAgICAgICAgICAp IHsNCj4tICAgICAgICBIaWlDcmVhdGVBY3Rpb25PcENvZGUgKA0KPi0gICAgICAgICAgU3RhcnRP cENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgLy8gQ29udGFpbmVyIGZvciBkeW5hbWljIGNy ZWF0ZWQgb3Bjb2Rlcw0KPi0gICAgICAgICAgS0VZX0FERF9VU0VSLCAgICAgICAgICAgICAgICAg ICAgICAgLy8gUXVlc3Rpb24gSUQNCj4tICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0FERF9V U0VSX1RJVExFKSwgIC8vIFByb21wdCB0ZXh0DQo+LSAgICAgICAgICBTVFJJTkdfVE9LRU4gKFNU Ul9BRERfVVNFUl9IRUxQKSwgICAvLyBIZWxwIHRleHQNCj4tICAgICAgICAgIEVGSV9JRlJfRkxB R19DQUxMQkFDSywgICAgICAgICAgICAgIC8vIFF1ZXN0aW9uIGZsYWcNCj4tICAgICAgICAgIDAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdGlvbiBTdHJpbmcgSUQNCj4t ICAgICAgICAgICk7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIEFkZCBt b2RpZnkgdXNlciBwcm9maWxlIG9wdGlvbi4NCj4tICAgICAgLy8NCj4tICAgICAgSGlpQ3JlYXRl R290b09wQ29kZSAoDQo+LSAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAg ICAgICAvLyBDb250YWluZXIgZm9yIGR5bmFtaWMgY3JlYXRlZCBvcGNvZGVzDQo+LSAgICAgICAg Rk9STUlEX01PRElGWV9VU0VSLCAgICAgICAgICAgICAgICAgICAvLyBUYXJnZXQgRm9ybSBJRA0K Pi0gICAgICAgIFNUUklOR19UT0tFTiAoU1RSX01PRElGWV9VU0VSX1RJVExFKSwgLy8gUHJvbXB0 IHRleHQNCj4tICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9NT0RJRllfVVNFUl9IRUxQKSwgIC8v IEhlbHAgdGV4dA0KPi0gICAgICAgIEVGSV9JRlJfRkxBR19DQUxMQkFDSywgICAgICAgICAgICAg ICAgLy8gUXVlc3Rpb24gZmxhZw0KPi0gICAgICAgIEtFWV9NT0RJRllfVVNFUiAgICAgICAgICAg ICAgICAgICAgICAgLy8gUXVlc3Rpb24gSUQNCj4tICAgICAgICApOw0KPi0NCj4tICAgICAgLy8N Cj4tICAgICAgLy8gQWRkIGRlbGV0ZSB1c2VyIHByb2ZpbGUgb3B0aW9uDQo+LSAgICAgIC8vDQo+ LSAgICAgIGlmIChDdXJyZW50QWNjZXNzUmlnaHQgPT0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFO QUdFKSB7DQo+LSAgICAgICAgSGlpQ3JlYXRlR290b09wQ29kZSAoDQo+LSAgICAgICAgICBTdGFy dE9wQ29kZUhhbmRsZSwgICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5lciBmb3IgZHluYW1p YyBjcmVhdGVkIG9wY29kZXMNCj4tICAgICAgICAgIEZPUk1JRF9ERUxfVVNFUiwgICAgICAgICAg ICAgICAgICAgICAgLy8gVGFyZ2V0IEZvcm0gSUQNCj4tICAgICAgICAgIFNUUklOR19UT0tFTiAo U1RSX0RFTEVURV9VU0VSX1RJVExFKSwgLy8gUHJvbXB0IHRleHQNCj4tICAgICAgICAgIFNUUklO R19UT0tFTiAoU1RSX0RFTEVURV9VU0VSX0hFTFApLCAgLy8gSGVscCB0ZXh0DQo+LSAgICAgICAg ICBFRklfSUZSX0ZMQUdfQ0FMTEJBQ0ssICAgICAgICAgICAgICAgIC8vIFF1ZXN0aW9uIGZsYWcN Cj4tICAgICAgICAgIEtFWV9ERUxfVVNFUiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVl c3Rpb24gSUQNCj4tICAgICAgICAgICk7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIEhpaVVwZGF0 ZUZvcm0gKA0KPi0gICAgICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgICAgICAgICAgICAg ICAvLyBISUkgaGFuZGxlDQo+LSAgICAgICAgJmdVc2VyUHJvZmlsZU1hbmFnZXJHdWlkLCAgICAg ICAgICAgICAgIC8vIEZvcm1zZXQgR1VJRA0KPi0gICAgICAgIEZPUk1JRF9VU0VSX01BTkFHRSwg ICAgICAgICAgICAgICAgICAgICAvLyBGb3JtIElEDQo+LSAgICAgICAgU3RhcnRPcENvZGVIYW5k bGUsICAgICAgICAgICAgICAgICAgICAgIC8vIExhYmVsIGZvciB3aGVyZSB0byBpbnNlcnQgb3Bj b2Rlcw0KPi0gICAgICAgIEVuZE9wQ29kZUhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAv LyBSZXBsYWNlIGRhdGENCj4tICAgICAgICApOw0KPi0NCj4tICAgICAgSGlpRnJlZU9wQ29kZUhh bmRsZSAoU3RhcnRPcENvZGVIYW5kbGUpOw0KPi0gICAgICBIaWlGcmVlT3BDb2RlSGFuZGxlIChF bmRPcENvZGVIYW5kbGUpOw0KPi0NCj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAg fQ0KPi0gICAgYnJlYWs7DQo+LQ0KPi0gIGNhc2UgRUZJX0JST1dTRVJfQUNUSU9OX0ZPUk1fQ0xP U0U6DQo+LSAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4tICAgIGJyZWFrOw0KPi0NCj4tICBj YXNlIEVGSV9CUk9XU0VSX0FDVElPTl9DSEFOR0VEOg0KPi0gIHsNCj4tICAgIC8vDQo+LSAgICAv LyBIYW5kbGUgdGhlIHJlcXVlc3QgZnJvbSBmb3JtLg0KPi0gICAgLy8NCj4tICAgIGlmICgoVmFs dWUgPT0gTlVMTCkgfHwgKEFjdGlvblJlcXVlc3QgPT0gTlVMTCkpIHsNCj4tICAgICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICAgIH0NCj4tDQo+LSAgICAvLw0KPi0gICAgLy8g SnVkZ2UgZmlyc3QgMiBiaXRzLg0KPi0gICAgLy8NCj4tICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAm IEtFWV9GSVJTVF9GT1JNX01BU0spIHsNCj4tICAgIC8vDQo+LSAgICAvLyBBZGQgdXNlciBwcm9m aWxlIG9wZXJhdGlvbi4NCj4tICAgIC8vDQo+LSAgICBjYXNlIEtFWV9BRERfVVNFUjoNCj4tICAg ICAgQ2FsbEFkZFVzZXIgKCk7DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIC8vDQo+LSAgICAv LyBEZWxldGUgdXNlciBwcm9maWxlIG9wZXJhdGlvbi4NCj4tICAgIC8vDQo+LSAgICBjYXNlIEtF WV9ERUxfVVNFUjoNCj4tICAgICAgLy8NCj4tICAgICAgLy8gSnVkZ2UgbmV4dCAyIGJpdHMuDQo+ LSAgICAgIC8vDQo+LSAgICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAmIEtFWV9TRUNPTkRfRk9STV9N QVNLKSB7DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIERlbGV0ZSBzcGVjaWZpZWQgdXNlciBwcm9m aWxlLg0KPi0gICAgICAvLw0KPi0gICAgICBjYXNlIEtFWV9TRUxFQ1RfVVNFUjoNCj4tICAgICAg ICBEZWxldGVVc2VyICgoVUlOVDgpIFF1ZXN0aW9uSWQpOw0KPi0gICAgICAgIC8vDQo+LSAgICAg ICAgLy8gVXBkYXRlIHNlbGVjdCB1c2VyIGZvcm0gYWZ0ZXIgZGVsZXRlIGEgdXNlci4NCj4tICAg ICAgICAvLw0KPi0gICAgICAgIFNlbGVjdFVzZXJUb0RlbGV0ZSAoKTsNCj4tICAgICAgICBicmVh azsNCj4tDQo+LSAgICAgIGRlZmF1bHQ6DQo+LSAgICAgICAgYnJlYWs7DQo+LSAgICAgIH0NCj4t ICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIE1vZGlmeSB1c2VyIHByb2ZpbGUg b3BlcmF0aW9uLg0KPi0gICAgLy8NCj4tICAgIGNhc2UgS0VZX01PRElGWV9VU0VSOg0KPi0gICAg ICAvLw0KPi0gICAgICAvLyBKdWRnZSBuZXh0IDIgYml0cy4NCj4tICAgICAgLy8NCj4tICAgICAg c3dpdGNoIChRdWVzdGlvbklkICYgS0VZX1NFQ09ORF9GT1JNX01BU0spIHsNCj4tICAgICAgLy8N Cj4tICAgICAgLy8gRW50ZXIgdXNlciBwcm9maWxlIGluZm9ybWF0aW9uIGZvcm0uDQo+LSAgICAg IC8vDQo+LSAgICAgIGNhc2UgS0VZX1NFTEVDVF9VU0VSOg0KPi0gICAgICAgIC8vDQo+LSAgICAg ICAgLy8gSnVkZ2UgbmV4dCAzIGJpdHMuDQo+LSAgICAgICAgLy8NCj4tICAgICAgICBzd2l0Y2gg KFF1ZXN0aW9uSWQgJiBLRVlfTU9ESUZZX0lORk9fTUFTSykgew0KPi0gICAgICAgIC8vDQo+LSAg ICAgICAgLy8gTW9kaWZ5IHVzZXIgbmFtZS4NCj4tICAgICAgICAvLw0KPi0gICAgICAgIGNhc2Ug S0VZX01PRElGWV9OQU1FOg0KPi0gICAgICAgICAgTW9kaWZ5VXNlck5hbWUgKCk7DQo+LSAgICAg ICAgICAvLw0KPi0gICAgICAgICAgLy8gVXBkYXRlIHVzZXJuYW1lIGluIHBhcmVudCBmb3JtLg0K Pi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIFNlbGVjdFVzZXJUb01vZGlmeSAoKTsNCj4tICAg ICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAvLw0KPi0gICAgICAgIC8vIE1vZGlmeSBpZGVu dGl0eSBwb2xpY3kuDQo+LSAgICAgICAgLy8NCj4tICAgICAgICBjYXNlIEtFWV9NT0RJRllfSVA6 DQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgLy8gSnVkZ2UgbmV4dCAzIGJpdHMNCj4tICAg ICAgICAgIC8vDQo+LSAgICAgICAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQgJiBLRVlfTU9ESUZZX0lQ X01BU0spIHsNCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICAvLyBDaGFuZ2UgY3JlZGVudGlh bCBwcm92aWRlciBvcHRpb24uDQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgY2FzZSBLRVlf TU9ESUZZX1BST1Y6DQo+LSAgICAgICAgICAgIG1Qcm92aWRlckNob2ljZSA9IFZhbHVlLT51ODsN Cj4tICAgICAgICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIC8v IENoYW5nZSBsb2dpY2FsIGNvbm5lY3Rvci4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBj YXNlIEtFWV9NT0RJRllfQ09OTjoNCj4tICAgICAgICAgICAgbUNvbm5jZXRMb2dpY2FsID0gVmFs dWUtPnU4Ow0KPi0gICAgICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgICAvLw0KPi0gICAg ICAgICAgLy8gU2F2ZSBvcHRpb24uDQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgY2FzZSBL RVlfQUREX0lQX09QOg0KPi0gICAgICAgICAgICBBZGRJZGVudGl0eVBvbGljeUl0ZW0gKCk7DQo+ LSAgICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICAvLyBS ZXR1cm4gdG8gdXNlciBwcm9maWxlIGluZm9ybWF0aW9uIGZvcm0uDQo+LSAgICAgICAgICAvLw0K Pi0gICAgICAgICAgY2FzZSBLRVlfSVBfUkVUVVJOX1VJRjoNCj4tICAgICAgICAgICAgU2F2ZUlk ZW50aXR5UG9saWN5ICgpOw0KPi0gICAgICAgICAgICAqQWN0aW9uUmVxdWVzdCA9DQo+RUZJX0JS T1dTRVJfQUNUSU9OX1JFUVVFU1RfRk9STV9TVUJNSVRfRVhJVDsNCj4tICAgICAgICAgICAgYnJl YWs7DQo+LQ0KPi0gICAgICAgICAgZGVmYXVsdDoNCj4tICAgICAgICAgICAgYnJlYWs7DQo+LSAg ICAgICAgICB9DQo+LSAgICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgLy8NCj4tICAgICAg ICAvLyBNb2RpZnkgYWNjZXNzIHBvbGljeS4NCj4tICAgICAgICAvLw0KPi0gICAgICAgIGNhc2Ug S0VZX01PRElGWV9BUDoNCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICAvLyBKdWRnZSBuZXh0 IDMgYml0cy4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQg JiBLRVlfTU9ESUZZX0FQX01BU0spIHsNCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICAvLyBD aGFuZ2UgYWNjZXNzIHJpZ2h0IGNob2ljZS4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBj YXNlIEtFWV9NT0RJRllfUklHSFQ6DQo+LSAgICAgICAgICAgIG1BY2Nlc3NJbmZvLkFjY2Vzc1Jp Z2h0ID0gVmFsdWUtPnU4Ow0KPi0gICAgICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgICAv Lw0KPi0gICAgICAgICAgLy8gQ2hhbmdlIHNldHVwIGNob2ljZS4NCj4tICAgICAgICAgIC8vDQo+ LSAgICAgICAgICBjYXNlIEtFWV9NT0RJRllfU0VUVVA6DQo+LSAgICAgICAgICAgIG1BY2Nlc3NJ bmZvLkFjY2Vzc1NldHVwPSBWYWx1ZS0+dTg7DQo+LSAgICAgICAgICAgIGJyZWFrOw0KPi0NCj4t ICAgICAgICAgIC8vDQo+LSAgICAgICAgICAvLyBDaGFuZ2UgYm9vdCBvcmRlciBjaG9pY2UuDQo+ LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgY2FzZSBLRVlfTU9ESUZZX0JPT1Q6DQo+LSAgICAg ICAgICAgIG1BY2Nlc3NJbmZvLkFjY2Vzc0Jvb3RPcmRlciA9IFZhbHVlLT51MzI7DQo+LSAgICAg ICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICAvLyBSZXR1cm4g dG8gdXNlciBwcm9maWxlIGluZm9ybWF0aW9uIGZvcm0uDQo+LSAgICAgICAgICAvLw0KPi0gICAg ICAgICAgY2FzZSBLRVlfQVBfUkVUVVJOX1VJRjoNCj4tICAgICAgICAgICAgU2F2ZUFjY2Vzc1Bv bGljeSAoKTsNCj4tICAgICAgICAgICAgKkFjdGlvblJlcXVlc3QgPQ0KPkVGSV9CUk9XU0VSX0FD VElPTl9SRVFVRVNUX0ZPUk1fU1VCTUlUX0VYSVQ7DQo+LSAgICAgICAgICAgIGJyZWFrOw0KPi0N Cj4tICAgICAgICAgIGRlZmF1bHQ6DQo+LSAgICAgICAgICAgIGJyZWFrOw0KPi0gICAgICAgICAg fQ0KPi0gICAgICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgICAgIGRlZmF1bHQ6DQo+LSAgICAgICAg ICBicmVhazsNCj4tICAgICAgICB9DQo+LSAgICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgICAvLw0K Pi0gICAgICAvLyBBY2Nlc3MgcG9saWN5IGRldmljZSBwYXRoIG1vZGlmaWVkLg0KPi0gICAgICAv Lw0KPi0gICAgICBjYXNlIEtFWV9NT0RJRllfQVBfRFA6DQo+LSAgICAgICAgLy8NCj4tICAgICAg ICAvLyBKdWRnZSBuZXh0IDIgYml0cy4NCj4tICAgICAgICAvLw0KPi0gICAgICAgIHN3aXRjaCAo UXVlc3Rpb25JZCAmIEtFWV9NT0RJRllfRFBfTUFTSykgew0KPi0gICAgICAgIC8vDQo+LSAgICAg ICAgLy8gTG9hZCBwZXJtaXQgZGV2aWNlIHBhdGggbW9kaWZpZWQuDQo+LSAgICAgICAgLy8NCj4t ICAgICAgICBjYXNlIEtFWV9MT0FEX1BFUk1JVF9NT0RJRlk6DQo+LSAgICAgICAgICBRdWVzdGlv blN0ciA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPihTVFJfTU9WRV9UT19GT1JCSURf TElTVCkpOw0KPi0gICAgICAgICAgUHJvbXB0U3RyICAgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdf VE9LRU4NCj4oU1RSX1BSRVNTX0tFWV9DT05USU5VRSkpOw0KPi0gICAgICAgICAgQ3JlYXRlUG9w VXAgKA0KPi0gICAgICAgICAgICBFRklfTElHSFRHUkFZIHwgRUZJX0JBQ0tHUk9VTkRfQkxVRSwN Cj4tICAgICAgICAgICAgJktleSwNCj4tICAgICAgICAgICAgUXVlc3Rpb25TdHIsDQo+LSAgICAg ICAgICAgIEwiIiwNCj4tICAgICAgICAgICAgUHJvbXB0U3RyLA0KPi0gICAgICAgICAgICBOVUxM DQo+LSAgICAgICAgICAgICk7DQo+LSAgICAgICAgICBGcmVlUG9vbCAoUXVlc3Rpb25TdHIpOw0K Pi0gICAgICAgICAgRnJlZVBvb2wgKFByb21wdFN0cik7DQo+LSAgICAgICAgICBpZiAoS2V5LlVu aWNvZGVDaGFyICE9IENIQVJfQ0FSUklBR0VfUkVUVVJOKSB7DQo+LSAgICAgICAgICAgIGJyZWFr Ow0KPi0gICAgICAgICAgfQ0KPi0NCj4tICAgICAgICAgIEFkZFRvRm9yYmlkTG9hZCAoKFVJTlQx NikoUXVlc3Rpb25JZCAmIChLRVlfTU9ESUZZX0RQX01BU0sgLQ0KPjEpKSk7DQo+LSAgICAgICAg ICBEaXNwbGF5TG9hZFBlcm1pdCAoKTsNCj4tICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAg ICAvLw0KPi0gICAgICAgIC8vIExvYWQgZm9yYmlkIGRldmljZSBwYXRoIG1vZGlmaWVkLg0KPi0g ICAgICAgIC8vDQo+LSAgICAgICAgY2FzZSBLRVlfTE9BRF9GT1JCSURfTU9ESUZZOg0KPi0gICAg ICAgICAgUXVlc3Rpb25TdHIgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4oU1RSX01P VkVfVE9fUEVSTUlUX0xJU1QpKTsNCj4tICAgICAgICAgIFByb21wdFN0ciAgID0gR2V0U3RyaW5n QnlJZCAoU1RSSU5HX1RPS0VODQo+KFNUUl9QUkVTU19LRVlfQ09OVElOVUUpKTsNCj4tICAgICAg ICAgIENyZWF0ZVBvcFVwICgNCj4tICAgICAgICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNL R1JPVU5EX0JMVUUsDQo+LSAgICAgICAgICAgICZLZXksDQo+LSAgICAgICAgICAgIFF1ZXN0aW9u U3RyLA0KPi0gICAgICAgICAgICBMIiIsDQo+LSAgICAgICAgICAgIFByb21wdFN0ciwNCj4tICAg ICAgICAgICAgTlVMTA0KPi0gICAgICAgICAgICApOw0KPi0gICAgICAgICAgRnJlZVBvb2wgKFF1 ZXN0aW9uU3RyKTsNCj4tICAgICAgICAgIEZyZWVQb29sIChQcm9tcHRTdHIpOw0KPi0gICAgICAg ICAgaWYgKEtleS5Vbmljb2RlQ2hhciAhPSBDSEFSX0NBUlJJQUdFX1JFVFVSTikgew0KPi0gICAg ICAgICAgICBicmVhazsNCj4tICAgICAgICAgIH0NCj4tDQo+LSAgICAgICAgICBEZWxldGVGcm9t Rm9yYmlkTG9hZCAoKFVJTlQxNikoUXVlc3Rpb25JZCAmDQo+KEtFWV9NT0RJRllfRFBfTUFTSyAt IDEpKSk7DQo+LSAgICAgICAgICBEaXNwbGF5TG9hZEZvcmJpZCAoKTsNCj4tICAgICAgICAgIGJy ZWFrOw0KPi0NCj4tICAgICAgICAvLw0KPi0gICAgICAgIC8vIENvbm5lY3QgcGVybWl0IGRldmlj ZSBwYXRoIG1vZGlmaWVkLg0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgY2FzZSBLRVlfQ09OTkVD VF9QRVJNSVRfTU9ESUZZOg0KPi0gICAgICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgICAgIC8vDQo+ LSAgICAgICAgLy8gQ29ubmVjdCBmb3JiaWQgZGV2aWNlIHBhdGggbW9kaWZpZWQuDQo+LSAgICAg ICAgLy8NCj4tICAgICAgICBjYXNlIEtFWV9DT05ORUNUX0ZPUkJJRF9NT0RJRlk6DQo+LSAgICAg ICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgZGVmYXVsdDoNCj4tICAgICAgICAgIGJyZWFrOw0K Pi0gICAgICAgIH0NCj4tICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgIGRlZmF1bHQ6DQo+LSAg ICAgICAgYnJlYWs7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgZGVmYXVs dDoNCj4tICAgICAgYnJlYWs7DQo+LSAgICB9DQo+LSAgfQ0KPi0gIGJyZWFrOw0KPi0NCj4tDQo+ LSAgY2FzZSBFRklfQlJPV1NFUl9BQ1RJT05fQ0hBTkdJTkc6DQo+LSAgew0KPi0gICAgLy8NCj4t ICAgIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCBmcm9tIGZvcm0uDQo+LSAgICAvLw0KPi0gICAgaWYg KFZhbHVlID09IE5VTEwpIHsNCj4tICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4tICAgIH0NCj4tDQo+LSAgICAvLw0KPi0gICAgLy8gSnVkZ2UgZmlyc3QgMiBiaXRzLg0KPi0g ICAgLy8NCj4tICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAmIEtFWV9GSVJTVF9GT1JNX01BU0spIHsN Cj4tICAgIC8vDQo+LSAgICAvLyBEZWxldGUgdXNlciBwcm9maWxlIG9wZXJhdGlvbi4NCj4tICAg IC8vDQo+LSAgICBjYXNlIEtFWV9ERUxfVVNFUjoNCj4tICAgICAgLy8NCj4tICAgICAgLy8gSnVk Z2UgbmV4dCAyIGJpdHMuDQo+LSAgICAgIC8vDQo+LSAgICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAm IEtFWV9TRUNPTkRfRk9STV9NQVNLKSB7DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIEVudGVyIGRl bGV0ZSB1c2VyIHByb2ZpbGUgZm9ybS4NCj4tICAgICAgLy8NCj4tICAgICAgY2FzZSBLRVlfRU5U RVJfTkVYVF9GT1JNOg0KPi0gICAgICAgIFNlbGVjdFVzZXJUb0RlbGV0ZSAoKTsNCj4tICAgICAg ICBicmVhazsNCj4tDQo+LSAgICAgIGRlZmF1bHQ6DQo+LSAgICAgICAgYnJlYWs7DQo+LSAgICAg IH0NCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIE1vZGlmeSB1c2VyIHBy b2ZpbGUgb3BlcmF0aW9uLg0KPi0gICAgLy8NCj4tICAgIGNhc2UgS0VZX01PRElGWV9VU0VSOg0K Pi0gICAgICAvLw0KPi0gICAgICAvLyBKdWRnZSBuZXh0IDIgYml0cy4NCj4tICAgICAgLy8NCj4t ICAgICAgc3dpdGNoIChRdWVzdGlvbklkICYgS0VZX1NFQ09ORF9GT1JNX01BU0spIHsNCj4tICAg ICAgLy8NCj4tICAgICAgLy8gRW50ZXIgbW9kaWZ5IHVzZXIgcHJvZmlsZSBmb3JtLg0KPi0gICAg ICAvLw0KPi0gICAgICBjYXNlIEtFWV9FTlRFUl9ORVhUX0ZPUk06DQo+LSAgICAgICAgU2VsZWN0 VXNlclRvTW9kaWZ5ICgpOw0KPi0gICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgLy8NCj4tICAg ICAgLy8gRW50ZXIgdXNlciBwcm9maWxlIGluZm9ybWF0aW9uIGZvcm0uDQo+LSAgICAgIC8vDQo+ LSAgICAgIGNhc2UgS0VZX1NFTEVDVF9VU0VSOg0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8g SnVkZ2UgbmV4dCAzIGJpdHMuDQo+LSAgICAgICAgLy8NCj4tICAgICAgICBzd2l0Y2ggKFF1ZXN0 aW9uSWQgJiBLRVlfTU9ESUZZX0lORk9fTUFTSykgew0KPi0gICAgICAgIC8vDQo+LSAgICAgICAg Ly8gRGlzcGxheSB1c2VyIGluZm9ybWF0aW9uIGZvcm0uDQo+LSAgICAgICAgLy8NCj4tICAgICAg ICBjYXNlIEtFWV9FTlRFUl9ORVhUX0ZPUk06DQo+LSAgICAgICAgICBNb2RpZnlVc2VySW5mbyAo KFVJTlQ4KSBRdWVzdGlvbklkKTsNCj4tICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAv Lw0KPi0gICAgICAgIC8vIE1vZGlmeSBpZGVudGl0eSBwb2xpY3kuDQo+LSAgICAgICAgLy8NCj4t ICAgICAgICBjYXNlIEtFWV9NT0RJRllfSVA6DQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAg Ly8gSnVkZ2UgbmV4dCAzIGJpdHMNCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBzd2l0Y2gg KFF1ZXN0aW9uSWQgJiBLRVlfTU9ESUZZX0lQX01BU0spIHsNCj4tICAgICAgICAgIC8vDQo+LSAg ICAgICAgICAvLyBEaXNwbGF5IGlkZW50aXR5IHBvbGljeSBtb2RpZnkgZm9ybS4NCj4tICAgICAg ICAgIC8vDQo+LSAgICAgICAgICBjYXNlIEtFWV9FTlRFUl9ORVhUX0ZPUk06DQo+LSAgICAgICAg ICAgIE1vZGlmeUlkZW50aXR5UG9saWN5ICgpOw0KPi0gICAgICAgICAgICBicmVhazsNCj4tDQo+ LSAgICAgICAgICBkZWZhdWx0Og0KPi0gICAgICAgICAgICBicmVhazsNCj4tICAgICAgICAgIH0N Cj4tICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAvLw0KPi0gICAgICAgIC8vIE1vZGlm eSBhY2Nlc3MgcG9saWN5Lg0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgY2FzZSBLRVlfTU9ESUZZ X0FQOg0KPi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIC8vIEp1ZGdlIG5leHQgMyBiaXRzLg0K Pi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAmIEtFWV9NT0RJ RllfQVBfTUFTSykgew0KPi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIC8vIERpc3BsYXkgYWNj ZXNzIHBvbGljeSBtb2RpZnkgZm9ybS4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBjYXNl IEtFWV9FTlRFUl9ORVhUX0ZPUk06DQo+LSAgICAgICAgICAgIE1vZGlkeUFjY2Vzc1BvbGljeSAo KTsNCj4tICAgICAgICAgICAgYnJlYWs7DQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgLy8g TG9hZCBkZXZpY2UgcGF0aCBmb3JtLg0KPi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIGNhc2Ug S0VZX01PRElGWV9MT0FEOg0KPi0gICAgICAgICAgICAvLw0KPi0gICAgICAgICAgICAvLyBKdWRn ZSBuZXh0IDIgYml0cy4NCj4tICAgICAgICAgICAgLy8NCj4tICAgICAgICAgICAgc3dpdGNoIChR dWVzdGlvbklkICYgS0VZX0RJU1BMQVlfRFBfTUFTSykgew0KPi0gICAgICAgICAgICAvLw0KPi0g ICAgICAgICAgICAvLyBQZXJtaXQgbG9hZCBkZXZpY2UgcGF0aC4NCj4tICAgICAgICAgICAgLy8N Cj4tICAgICAgICAgICAgY2FzZSBLRVlfUEVSTUlUX01PRElGWToNCj4tICAgICAgICAgICAgICBE aXNwbGF5TG9hZFBlcm1pdCAoKTsNCj4tICAgICAgICAgICAgICBicmVhazsNCj4tDQo+LSAgICAg ICAgICAgIC8vDQo+LSAgICAgICAgICAgIC8vIEZvcmJpZCBsb2FkIGRldmljZSBwYXRoLg0KPi0g ICAgICAgICAgICAvLw0KPi0gICAgICAgICAgICBjYXNlIEtFWV9GT1JCSURfTU9ESUZZOg0KPi0g ICAgICAgICAgICAgIERpc3BsYXlMb2FkRm9yYmlkICgpOw0KPi0gICAgICAgICAgICAgIGJyZWFr Ow0KPi0NCj4tICAgICAgICAgICAgZGVmYXVsdDoNCj4tICAgICAgICAgICAgICBicmVhazsNCj4t ICAgICAgICAgICAgfQ0KPi0gICAgICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgICAvLw0K Pi0gICAgICAgICAgLy8gQ29ubmVjdCBkZXZpY2UgcGF0aCBmb3JtLg0KPi0gICAgICAgICAgLy8N Cj4tICAgICAgICAgIGNhc2UgS0VZX01PRElGWV9DT05ORUNUOg0KPi0gICAgICAgICAgICAvLw0K Pi0gICAgICAgICAgICAvLyBKdWRnZSBuZXh0IDIgYml0cy4NCj4tICAgICAgICAgICAgLy8NCj4t ICAgICAgICAgICAgc3dpdGNoIChRdWVzdGlvbklkICYgS0VZX0RJU1BMQVlfRFBfTUFTSykgew0K Pi0gICAgICAgICAgICAvLw0KPi0gICAgICAgICAgICAvLyBQZXJtaXQgY29ubmVjdCBkZXZpY2Ug cGF0aC4NCj4tICAgICAgICAgICAgLy8NCj4tICAgICAgICAgICAgY2FzZSBLRVlfUEVSTUlUX01P RElGWToNCj4tICAgICAgICAgICAgICBEaXNwbGF5Q29ubmVjdFBlcm1pdCAoKTsNCj4tICAgICAg ICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgICAgIC8vDQo+LSAgICAgICAgICAgIC8vIEZv cmJpZCBjb25uZWN0IGRldmljZSBwYXRoLg0KPi0gICAgICAgICAgICAvLw0KPi0gICAgICAgICAg ICBjYXNlIEtFWV9GT1JCSURfTU9ESUZZOg0KPi0gICAgICAgICAgICAgIERpc3BsYXlDb25uZWN0 Rm9yYmlkICgpOw0KPi0gICAgICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAgICAgZGVm YXVsdDoNCj4tICAgICAgICAgICAgICBicmVhazsNCj4tICAgICAgICAgICAgfQ0KPi0gICAgICAg ICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgICBkZWZhdWx0Og0KPi0gICAgICAgICAgICBicmVh azsNCj4tICAgICAgICAgIH0NCj4tICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICBkZWZh dWx0Og0KPi0gICAgICAgICAgYnJlYWs7DQo+LSAgICAgICAgfQ0KPi0gICAgICAgIGJyZWFrOw0K Pi0NCj4tICAgICAgZGVmYXVsdDoNCj4tICAgICAgICBicmVhazsNCj4tICAgICAgfQ0KPi0gICAg ICBicmVhazsNCj4tDQo+LSAgICBkZWZhdWx0Og0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4t ICB9DQo+LSAgYnJlYWs7DQo+LQ0KPi0gIGRlZmF1bHQ6DQo+LSAgICAvLw0KPi0gICAgLy8gQWxs IG90aGVyIGFjdGlvbiByZXR1cm4gdW5zdXBwb3J0ZWQuDQo+LSAgICAvLw0KPi0gICAgU3RhdHVz ID0gRUZJX1VOU1VQUE9SVEVEOw0KPi0gICAgYnJlYWs7DQo+LSAgfQ0KPi0NCj4tDQo+LSAgcmV0 dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFRoaXMgZnVuY3Rpb24gYWxsb3dz IGEgY2FsbGVyIHRvIGV4dHJhY3QgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBmb3Igb25lDQo+ LSAgb3IgbW9yZSBuYW1lZCBlbGVtZW50cyBmcm9tIHRoZSB0YXJnZXQgZHJpdmVyLg0KPi0NCj4t DQo+LSAgQHBhcmFtIFRoaXMgICAgICAgICAgICBQb2ludHMgdG8gdGhlIEVGSV9ISUlfQ09ORklH X0FDQ0VTU19QUk9UT0NPTC4NCj4tICBAcGFyYW0gUmVxdWVzdCAgICAgICAgIEEgbnVsbC10ZXJt aW5hdGVkIFVuaWNvZGUgc3RyaW5nIGluIDxDb25maWdSZXF1ZXN0Pg0KPmZvcm1hdC4NCj4tICBA cGFyYW0gUHJvZ3Jlc3MgICAgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGlu IHRoZSBSZXF1ZXN0IHN0cmluZy4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0 byB0aGUgc3RyaW5nJ3MgbnVsbCB0ZXJtaW5hdG9yIGlmIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwu DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIG1vc3QgcmVjZW50ICcm JyBiZWZvcmUgdGhlIGZpcnN0IGZhaWxpbmcgbmFtZS92YWx1ZQ0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgcGFpciAob3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIGlmIHRoZSBmYWls dXJlIGlzIGluIHRoZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgbmFtZS92YWx1 ZSBwYWlyKSBpZiB0aGUgcmVxdWVzdCB3YXMgbm90IHN1Y2Nlc3NmdWwuDQo+LSAgQHBhcmFtIFJl c3VsdHMgICAgICAgICBBIG51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZyBpbiA8Q29uZmln QWx0UmVzcD4NCj5mb3JtYXQgd2hpY2gNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBh bGwgdmFsdWVzIGZpbGxlZCBpbiBmb3IgdGhlIG5hbWVzIGluIHRoZSBSZXF1ZXN0IHN0cmluZy4N Cj4tICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0byBiZSBhbGxvY2F0ZWQgYnkgdGhl IGNhbGxlZCBmdW5jdGlvbi4NCj4tDQo+LSAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAg ICBUaGUgUmVzdWx0cyBpcyBmaWxsZWQgd2l0aCB0aGUgcmVxdWVzdGVkIHZhbHVlcy4NCj4tICBA cmV0dmFsICBFRklfT1VUX09GX1JFU09VUkNFUyAgIE5vdCBlbm91Z2ggbWVtb3J5IHRvIHN0b3Jl IHRoZQ0KPnJlc3VsdHMuDQo+LSAgQHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBSZXF1 ZXN0IGlzIGlsbGVnYWwgc3ludGF4LCBvciB1bmtub3duDQo+bmFtZS4NCj4tICBAcmV0dmFsICBF RklfTk9UX0ZPVU5EICAgICAgICAgIFJvdXRpbmcgZGF0YSBkb2Vzbid0IG1hdGNoIGFueSBzdG9y YWdlIGluDQo+dGhpcyBkcml2ZXIuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkN Cj4tRmFrZUV4dHJhY3RDb25maWcgKA0KPi0gIElOICBDT05TVCBFRklfSElJX0NPTkZJR19BQ0NF U1NfUFJPVE9DT0wgICAqVGhpcywNCj4tICBJTiAgQ09OU1QgRUZJX1NUUklORyAgICAgICAgICAg ICAgICAgICAgICAgUmVxdWVzdCwNCj4tICBPVVQgRUZJX1NUUklORyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKlByb2dyZXNzLA0KPi0gIE9VVCBFRklfU1RSSU5HICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqUmVzdWx0cw0KPi0gICkNCj4tew0KPi0gIGlmIChQcm9ncmVzcyA9PSBO VUxMIHx8IFJlc3VsdHMgPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCj4tICB9DQo+LSAgKlByb2dyZXNzID0gUmVxdWVzdDsNCj4tICByZXR1cm4gRUZJX05P VF9GT1VORDsNCj4tfQ0KPi0NCj4tLyoqDQo+LSAgVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhl IHJlc3VsdHMgb2YgY2hhbmdlcyBpbiBjb25maWd1cmF0aW9uLg0KPi0NCj4tDQo+LSAgQHBhcmFt IFRoaXMgICAgICAgICAgICBQb2ludHMgdG8gdGhlIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9U T0NPTC4NCj4tICBAcGFyYW0gQ29uZmlndXJhdGlvbiAgIEEgbnVsbC10ZXJtaW5hdGVkIFVuaWNv ZGUgc3RyaW5nIGluIDxDb25maWdSZXNwPg0KPmZvcm1hdC4NCj4tICBAcGFyYW0gUHJvZ3Jlc3Mg ICAgICAgIEEgcG9pbnRlciB0byBhIHN0cmluZyBmaWxsZWQgaW4gd2l0aCB0aGUgb2Zmc2V0IG9m IHRoZQ0KPm1vc3QNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VudCAnJicgYmVmb3Jl IHRoZSBmaXJzdCBmYWlsaW5nIG5hbWUvdmFsdWUgcGFpciAob3IgdGhlDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBpZiB0aGUgZmFpbHVyZSBpcyBp biB0aGUgZmlyc3QNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUvdmFsdWUgcGFpcikg b3IgdGhlIHRlcm1pbmF0aW5nIE5VTEwgaWYgYWxsIHdhcyBzdWNjZXNzZnVsLg0KPi0NCj4tICBA cmV0dmFsICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBSZXN1bHRzIGlzIHByb2Nlc3NlZCBz dWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBDb25maWd1 cmF0aW9uIGlzIE5VTEwuDQo+LSAgQHJldHZhbCAgRUZJX05PVF9GT1VORCAgICAgICAgICBSb3V0 aW5nIGRhdGEgZG9lc24ndCBtYXRjaCBhbnkgc3RvcmFnZSBpbg0KPnRoaXMgZHJpdmVyLg0KPi0N Cj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUZha2VSb3V0ZUNvbmZpZyAoDQo+LSAg SU4gIENPTlNUIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTCAgICpUaGlzLA0KPi0gIElO ICBDT05TVCBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLA0K Pi0gIE9VVCBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUHJvZ3Jlc3MN Cj4tICApDQo+LXsNCj4tICBpZiAoQ29uZmlndXJhdGlvbiA9PSBOVUxMIHx8IFByb2dyZXNzID09 IE5VTEwpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0N Cj4tICAqUHJvZ3Jlc3MgPSBDb25maWd1cmF0aW9uOw0KPi0NCj4tICByZXR1cm4gRUZJX05PVF9G T1VORDsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIE1haW4gZW50cnkgZm9yIHRoaXMgZHJpdmVy Lg0KPi0NCj4tICBAcGFyYW0gSW1hZ2VIYW5kbGUgICAgIEltYWdlIGhhbmRsZSB0aGlzIGRyaXZl ci4NCj4tICBAcGFyYW0gU3lzdGVtVGFibGUgICAgIFBvaW50ZXIgdG8gU3lzdGVtVGFibGUuDQo+ LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0VTUyAgICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgY29tcGxl dGUgc3VjY2Vzc2Z1bGx5Lg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVz ZXJQcm9maWxlTWFuYWdlckluaXQgKA0KPi0gIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgICAgIEltYWdlSGFuZGxlLA0KPi0gIElOIEVGSV9TWVNURU1fVEFCTEUgICAgICAgICAgICAg ICAgICpTeXN0ZW1UYWJsZQ0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4tICBVU0VSX1BST0ZJTEVfTUFOQUdFUl9DQUxMQkFDS19J TkZPICAqQ2FsbGJhY2tJbmZvOw0KPi0NCj4tICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29s ICgNCj4tICAgICAgICAgICAgICAgICAgJmdFZmlVc2VyTWFuYWdlclByb3RvY29sR3VpZCwNCj4t ICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZt VXNlck1hbmFnZXINCj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+LSAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgfQ0KPi0NCj4tICAvLw0K Pi0gIC8vIEluaXRpYWxpemUgZHJpdmVyIHByaXZhdGUgZGF0YS4NCj4tICAvLw0KPi0gIFplcm9N ZW0gKCZtVXNlckluZm8sIHNpemVvZiAobVVzZXJJbmZvKSk7DQo+LSAgWmVyb01lbSAoJm1BY2Nl c3NJbmZvLCBzaXplb2YgKG1BY2Nlc3NJbmZvKSk7DQo+LQ0KPi0gIENhbGxiYWNrSW5mbyA9IEFs bG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPihVU0VSX1BST0ZJTEVfTUFOQUdFUl9DQUxMQkFDS19J TkZPKSk7DQo+LSAgQVNTRVJUIChDYWxsYmFja0luZm8gIT0gTlVMTCk7DQo+LQ0KPi0gIENhbGxi YWNrSW5mby0+U2lnbmF0dXJlICAgICAgICAgICAgICAgICAgID0gVVNFUl9QUk9GSUxFX01BTkFH RVJfU0lHTkFUVVJFOw0KPi0gIENhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNzLkV4dHJhY3RDb25m aWcgID0gRmFrZUV4dHJhY3RDb25maWc7DQo+LSAgQ2FsbGJhY2tJbmZvLT5Db25maWdBY2Nlc3Mu Um91dGVDb25maWcgICAgPSBGYWtlUm91dGVDb25maWc7DQo+LSAgQ2FsbGJhY2tJbmZvLT5Db25m aWdBY2Nlc3MuQ2FsbGJhY2sgICAgICAgPSBVc2VyUHJvZmlsZU1hbmFnZXJDYWxsYmFjazsNCj4t ICBDYWxsYmFja0luZm8tPkRyaXZlckhhbmRsZSAgICAgICAgICAgICAgICA9IE5VTEw7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gSW5zdGFsbCBEZXZpY2UgUGF0aCBQcm90b2NvbCBhbmQgQ29uZmlnIEFj Y2VzcyBwcm90b2NvbCB0byBkcml2ZXIgaGFuZGxlLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gZ0JT LT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPi0gICAgICAgICAgICAgICAg ICAmQ2FsbGJhY2tJbmZvLT5Ecml2ZXJIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICZnRWZp RGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgJm1IaWlWZW5kb3JE ZXZpY2VQYXRoLA0KPi0gICAgICAgICAgICAgICAgICAmZ0VmaUhpaUNvbmZpZ0FjY2Vzc1Byb3Rv Y29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgJkNhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNz LA0KPi0gICAgICAgICAgICAgICAgICBOVUxMDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAg QVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBQdWJsaXNoIEhJ SSBkYXRhLg0KPi0gIC8vDQo+LSAgQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUgPSBIaWlBZGRQYWNr YWdlcyAoDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnVXNlclByb2ZpbGVNYW5h Z2VyR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGJhY2tJbmZvLT5E cml2ZXJIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJQcm9maWxl TWFuYWdlclN0cmluZ3MsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJQcm9m aWxlTWFuYWdlclZmckJpbiwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gIEFTU0VSVCAoQ2FsbGJhY2tJ bmZvLT5IaWlIYW5kbGUgIT0gTlVMTCk7DQo+LSAgbUNhbGxiYWNrSW5mbyA9IENhbGxiYWNrSW5m bzsNCj4tDQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+ZGlmZiAtLWdpdA0KPmEv U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2Vy UHJvZmlsZU1hbmFnDQo+ZXIuaA0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1Vz ZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnDQo+ZXIuaA0KPmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NA0KPmluZGV4IGFmZjFlMjhkOWQuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1Nl Y3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclBy b2ZpbGVNYW5hZw0KPmVyLmgNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsNDQ0ICswLDAgQEANCj4t LyoqIEBmaWxlDQo+LSAgVGhlIGhlYWRlciBmaWxlIGZvciB1c2VyIHByb2ZpbGUgbWFuYWdlciBk cml2ZXIuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2gg YWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNl bnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9i c2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRI RSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMg T1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJ RUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpZm5kZWYgX19FRklfVVNFUl9QUk9GSUxFX01BTkFHRVJf SF9fDQo+LSNkZWZpbmUgX19FRklfVVNFUl9QUk9GSUxFX01BTkFHRVJfSF9fDQo+LQ0KPi0jaW5j bHVkZSA8VWVmaS5oPg0KPi0NCj4tI2luY2x1ZGUgPEd1aWQvR2xvYmFsVmFyaWFibGUuaD4NCj4t I2luY2x1ZGUgPEd1aWQvTWRlTW9kdWxlSGlpLmg+DQo+LQ0KPi0jaW5jbHVkZSA8UHJvdG9jb2wv SGlpQ29uZmlnQWNjZXNzLmg+DQo+LSNpbmNsdWRlIDxQcm90b2NvbC9Vc2VyQ3JlZGVudGlhbDIu aD4NCj4tI2luY2x1ZGUgPFByb3RvY29sL1VzZXJNYW5hZ2VyLmg+DQo+LQ0KPi0jaW5jbHVkZSA8 TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJh cnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L01lbW9y eUFsbG9jYXRpb25MaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0K Pi0jaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQYXRoTGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5 L0RlYnVnTGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4tI2luY2x1ZGUg PExpYnJhcnkvUHJpbnRMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvSGlpTGliLmg+DQo+LQ0K Pi0jaW5jbHVkZSAiVXNlclByb2ZpbGVNYW5hZ2VyRGF0YS5oIg0KPi0NCj4tI2RlZmluZSAgVVNF Ul9OQU1FX0xFTkdUSCAgICAgICAgICAxNw0KPi0NCj4tLy8NCj4tLy8gQ3JlZGVudGlhbCBQcm92 aWRlciBJbmZvcm1hdGlvbi4NCj4tLy8NCj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPi0gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgIENvdW50Ow0KPi0gIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BS T1RPQ09MICpQcm92aWRlclsxXTsNCj4tfSBDUkVERU5USUFMX1BST1ZJREVSX0lORk87DQo+LQ0K Pi0vLw0KPi0vLyBVc2VyIHByb2ZpbGUgaW5mb3JtYXRpb24gc3RydWN0dXJlLg0KPi0vLw0KPi10 eXBlZGVmIHN0cnVjdCB7DQo+LSAgVUlOVDY0ICAgIFVzYWdlQ291bnQ7DQo+LSAgRUZJX1RJTUUg IENyZWF0ZURhdGU7DQo+LSAgRUZJX1RJTUUgIFVzYWdlRGF0ZTsNCj4tICBVSU5UTiAgICAgQWNj ZXNzUG9saWN5TGVuOw0KPi0gIFVJTlROICAgICBJZGVudGl0eVBvbGljeUxlbjsNCj4tICBVSU5U TiAgICAgTmV3SWRlbnRpdHlQb2xpY3lMZW47DQo+LSAgVUlOVDggICAgICpBY2Nlc3NQb2xpY3k7 DQo+LSAgVUlOVDggICAgICpJZGVudGl0eVBvbGljeTsNCj4tICBVSU5UOCAgICAgKk5ld0lkZW50 aXR5UG9saWN5Ow0KPi0gIENIQVIxNiAgICBVc2VyTmFtZVtVU0VSX05BTUVfTEVOR1RIXTsNCj4t ICBCT09MRUFOICAgQ3JlYXRlRGF0ZUV4aXN0Ow0KPi0gIEJPT0xFQU4gICBVc2FnZURhdGVFeGlz dDsNCj4tICBCT09MRUFOICAgQWNjZXNzUG9saWN5TW9kaWZpZWQ7DQo+LSAgQk9PTEVBTiAgIElk ZW50aXR5UG9saWN5TW9kaWZpZWQ7DQo+LSAgQk9PTEVBTiAgIE5ld0lkZW50aXR5UG9saWN5TW9k aWZpZWQ7DQo+LX0gVVNFUl9JTkZPOw0KPi0NCj4tLy8NCj4tLy8gVXNlciBhY2Nlc3MgaW5mb3Jt YXRpb24gc3RydWN0dXJlLg0KPi0vLw0KPi10eXBlZGVmIHN0cnVjdCB7DQo+LSAgVUlOVE4gIExv YWRQZXJtaXRMZW47DQo+LSAgVUlOVE4gIExvYWRGb3JiaWRMZW47DQo+LSAgVUlOVE4gIENvbm5l Y3RQZXJtaXRMZW47DQo+LSAgVUlOVE4gIENvbm5lY3RGb3JiaWRMZW47DQo+LSAgVUlOVDggICpM b2FkUGVybWl0Ow0KPi0gIFVJTlQ4ICAqTG9hZEZvcmJpZDsNCj4tICBVSU5UOCAgKkNvbm5lY3RQ ZXJtaXQ7DQo+LSAgVUlOVDggICpDb25uZWN0Rm9yYmlkOw0KPi0gIFVJTlQzMiBBY2Nlc3NCb290 T3JkZXI7DQo+LSAgVUlOVDggIEFjY2Vzc1JpZ2h0Ow0KPi0gIFVJTlQ4ICBBY2Nlc3NTZXR1cDsN Cj4tfSBVU0VSX0lORk9fQUNDRVNTOw0KPi0NCj4tI2RlZmluZSBVU0VSX1BST0ZJTEVfTUFOQUdF Ul9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMiAoJ1UnLCAnUCcsICdNJywNCj4nUycpDQo+LQ0KPi10 eXBlZGVmIHN0cnVjdCB7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBTaWdu YXR1cmU7DQo+LSAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJIYW5kbGU7 DQo+LSAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAgICAgICBIaWlIYW5kbGU7DQo+LSAgRUZJ X0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICBDb25maWdBY2Nlc3M7DQo+LX0gVVNFUl9QUk9G SUxFX01BTkFHRVJfQ0FMTEJBQ0tfSU5GTzsNCj4tDQo+LS8vDQo+LS8vIEhJSSBzcGVjaWZpYyBW ZW5kb3IgRGV2aWNlIFBhdGggZGVmaW5pdGlvbi4NCj4tLy8NCj4tdHlwZWRlZiBzdHJ1Y3Qgew0K Pi0gIFZFTkRPUl9ERVZJQ0VfUEFUSCAgICAgICAgVmVuZG9yRGV2aWNlUGF0aDsNCj4tICBFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgIEVuZDsNCj4tfSBISUlfVkVORE9SX0RFVklDRV9QQVRIOw0K Pi0NCj4tLy8NCj4tLy8gVGhpcyBpcyB0aGUgZ2VuZXJhdGVkIElGUiBiaW5hcnkgZGF0YSBmb3Ig ZWFjaCBmb3Jtc2V0IGRlZmluZWQgaW4gVkZSLg0KPi0vLw0KPi1leHRlcm4gVUlOVDggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVXNlclByb2ZpbGVNYW5hZ2VyVmZyQmluW107DQo+LQ0K Pi0vLw0KPi0vLyBUaGlzIGlzIHRoZSBnZW5lcmF0ZWQgU3RyaW5nIHBhY2thZ2UgZGF0YSBmb3Ig LlVOSSBmaWxlLg0KPi0vLw0KPi1leHRlcm4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVXNlclByb2ZpbGVNYW5hZ2VyU3RyaW5nc1tdOw0KPi0NCj4tLy8NCj4tLy8gVGhlIHVz ZXIgbWFuYWdlciBwcm90b2NvbCwgdXNlZCBpbiBzZXZlcmFsIGZ1bmN0aW9uLg0KPi0vLw0KPi1l eHRlcm4gRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAgKm1Vc2VyTWFuYWdlcjsN Cj4tDQo+LS8vDQo+LS8vIFRoZSBjcmVkZW50aWFsIHByb3ZpZGVycyBkYXRhYmFzZSBpbiBzeXN0 ZW0uDQo+LS8vDQo+LWV4dGVybiBDUkVERU5USUFMX1BST1ZJREVSX0lORk8gICAgICAgICAgICAq bVByb3ZpZGVySW5mbzsNCj4tDQo+LS8vDQo+LS8vIFRoZSB2YXJpYWJsZXMgdXNlZCB0byB1cGRh dGUgaWRlbnRpdHkgcG9saWN5Lg0KPi0vLw0KPi1leHRlcm4gVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbVByb3ZpZGVyQ2hvaWNlOw0KPi1leHRlcm4gVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbUNvbm5jZXRMb2dpY2FsOw0KPi0NCj4tLy8NCj4tLy8gVGhl IHZhcmlhYmxlcyB1c2VkIHRvIHVwZGF0ZSBhY2Nlc3MgcG9saWN5Lg0KPi0vLw0KPi1leHRlcm4g VVNFUl9JTkZPX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAgbUFjY2Vzc0luZm87DQo+LQ0KPi0v Lw0KPi0vLyBUaGUgdXNlciBpbmZvcm1hdGlvbiB1c2VkIHRvIHJlY29yZCBhbGwgZGF0YSBpbiBV SS4NCj4tLy8NCj4tZXh0ZXJuIFVTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V c2VySW5mbzsNCj4tDQo+LWV4dGVybiBVU0VSX1BST0ZJTEVfTUFOQUdFUl9DQUxMQkFDS19JTkZP ICAqbUNhbGxiYWNrSW5mbzsNCj4tDQo+LWV4dGVybiBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAg ICAgICAgICAgICBtTW9kaWZ5VXNlcjsNCj4tDQo+LS8qKg0KPi0gIEdldCBzdHJpbmcgYnkgc3Ry aW5nIGlkIGZyb20gSElJIEludGVyZmFjZS4NCj4tDQo+LQ0KPi0gIEBwYXJhbVtpbl0gSWQgICAg ICBTdHJpbmcgSUQgdG8gZ2V0IHRoZSBzdHJpbmcgZnJvbS4NCj4tDQo+LSAgQHJldHZhbCAgQ0hB UjE2ICogIFN0cmluZyBmcm9tIElELg0KPi0gIEByZXR2YWwgIE5VTEwgICAgICBJZiBlcnJvciBv Y2N1cnMuDQo+LQ0KPi0qKi8NCj4tQ0hBUjE2ICoNCj4tR2V0U3RyaW5nQnlJZCAoDQo+LSAgSU4g RUZJX1NUUklOR19JRCAgICAgICAgICAgICBJZA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBBZGQg YSBuZXcgdXNlciBwcm9maWxlIGludG8gdGhlIHVzZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4tDQo+ LSoqLw0KPi1WT0lEDQo+LUNhbGxBZGRVc2VyICgNCj4tICBWT0lEDQo+LSAgKTsNCj4tDQo+LS8q Kg0KPi0gIERpc3BsYXkgdXNlciBzZWxlY3QgZm9ybTsgY2FuIHNlbGVjdCBhIHVzZXIgdG8gbW9k aWZ5Lg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tU2VsZWN0VXNlclRvTW9kaWZ5ICAoDQo+LSAgVk9J RA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5IHVzZXIgc2VsZWN0IGZvcm0sIGNhYiBz ZWxlY3QgYSB1c2VyIHRvIGRlbGV0ZS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LVNlbGVjdFVzZXJU b0RlbGV0ZSAoDQo+LSAgVk9JRA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBEZWxldGUgdGhlIHVz ZXIgc3BlY2lmaWVkIGJ5IFVzZXJJbmRleCBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+LQ0K Pi0gIEBwYXJhbVtpbl0gIFVzZXJJbmRleCAgICBUaGUgaW5kZXggb2YgdXNlciBpbiB0aGUgdXNl ciBuYW1lIGxpc3QgdG8gYmUNCj5kZWxldGVkLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tRGVsZXRl VXNlciAoDQo+LSAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVzZXJJbmRleA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBBZGQgYSB1c2VybmFtZSBpdGVtIGlu IGZvcm0uDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICAgICAgUG9pbnRzIHRvIHRo ZSB1c2VyIHByb2ZpbGUgd2hvc2UgdXNlcm5hbWUgaXMgYWRkZWQuDQo+LSAgQHBhcmFtW2luXSAg SW5kZXggICAgICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHVzZXIgaW4gdGhlIHVzZXIgbmFtZSBs aXN0Lg0KPi0gIEBwYXJhbVtpbl0gIE9wQ29kZUhhbmRsZSAgICAgUG9pbnRzIHRvIGNvbnRhaW5l ciBmb3IgZHluYW1pYyBjcmVhdGVkDQo+b3Bjb2Rlcy4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUFk ZFVzZXJUb0Zvcm0gKA0KPi0gIElOICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAg ICAgICAgICBVc2VyLA0KPi0gIElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleCwNCj4tICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKk9wQ29kZUhhbmRsZQ0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5IG1v ZGlmeSB1c2VyIGluZm9ybWF0aW9uIGZvcm0NCj4tDQo+LSAgSW4gdGhpcyBmb3JtLCB1c2VybmFt ZSwgY3JlYXRlIERhdGUsIHVzYWdlIGRhdGUsIHVzYWdlIGNvdW50LCBpZGVudGl0eSBwb2xpY3ks DQo+LSAgYW5kIGFjY2VzcyBwb2xpY3kgYXJlIGRpc3BsYXllZC4NCj4tDQo+LSAgQHBhcmFtW2lu XSBVc2VySW5kZXggICAgICAgVGhlIGluZGV4IG9mIHRoZSB1c2VyIGluIGRpc3BsYXkgbGlzdCB0 byBtb2RpZnkuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1Nb2RpZnlVc2VySW5mbyAoDQo+LSAgSU4g VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJbmRleA0KPi0g ICk7DQo+LQ0KPi0vKioNCj4tICBHZXQgdGhlIHVzZXJuYW1lIGZyb20gdXNlciBpbnB1dCBhbmQg dXBkYXRlIHVzZXJuYW1lIHN0cmluZyBpbiBIaWkNCj4tICBkYXRhYmFzZSB3aXRoIGl0Lg0KPi0N Cj4tKiovDQo+LVZPSUQNCj4tTW9kaWZ5VXNlck5hbWUgKA0KPi0gIFZPSUQNCj4tICApOw0KPi0N Cj4tLyoqDQo+LSAgRGlzcGxheSB0aGUgZm9ybSBvZiBtb2RpZnlpbmcgdXNlciBpZGVudGl0eSBw b2xpY3kuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1Nb2RpZnlJZGVudGl0eVBvbGljeSAoDQo+LSAg Vk9JRA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBVcGRhdGUgdGhlIG1Vc2VySW5mby5OZXdJZGVu dGl0eVBvbGljeSBhbmQgVUkgd2hlbiAnYWRkIG9wdGlvbicgaXMNCj5wcmVzc2VkLg0KPi0NCj4t KiovDQo+LVZPSUQNCj4tQWRkSWRlbnRpdHlQb2xpY3lJdGVtICgNCj4tICBWT0lEDQo+LSAgKTsN Cj4tDQo+LS8qKg0KPi0gIFNhdmUgdGhlIGlkZW50aXR5IHBvbGljeSBhbmQgdXBkYXRlIFVJIHdp dGggaXQuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gd2lsbCB2ZXJpZnkgdGhlIG5ldyBpZGVudGl0 eSBwb2xpY3ksIGluIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sDQo+LSAgdGhlIGlkZW50aXR5IHBv bGljeSBjYW4gYmU6ICBULCBQICYgUCAmIFAgJiAuLi4sIFAgfCBQIHwgUCB8IC4uLg0KPi0gIEhl cmUsICJUIiBtZWFucyAiVHJ1ZSIsICJQIiBtZWFucyAiQ3JlZGVudGlhbCBQcm92aWRlciIsICIm IiBtZWFucyAiYW5kIiwNCj4ifCIgbWVhbnMgIm9yIi4NCj4tICBPdGhlciBpZGVudGl0eSBwb2xp Y2llcyBhcmUgbm90IHN1cHBvcnRlZC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LVNhdmVJZGVudGl0 eVBvbGljeSAoDQo+LSAgVk9JRA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5IG1vZGlm eSB1c2VyIGFjY2VzcyBwb2xpY3kgZm9ybQ0KPi0NCj4tICBJbiB0aGlzIGZvcm0sIGFjY2VzcyBy aWdodCwgYWNjZXNzIHNldHUscCBhbmQgYWNjZXNzIGJvb3Qgb3JkZXIgYXJlDQo+ZHluYW1pY2Fs bHkNCj4tICBhZGRlZC4gTG9hZCBkZXZpY2VwYXRoIGFuZCBjb25uZWN0IGRldmljZXBhdGggYXJl IGRpc3BsYXllZCB0b28uDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1Nb2RpZHlBY2Nlc3NQb2xpY3kg KA0KPi0gIFZPSUQNCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgQ29sbGVjdCBhbGwgdGhlIGFjY2Vz cyBwb2xpY3kgZGF0YSB0byBtVXNlckluZm8uQWNjZXNzUG9saWN5LA0KPi0gIGFuZCBzYXZlIGl0 IHRvIHVzZXIgcHJvZmlsZS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LVNhdmVBY2Nlc3NQb2xpY3kg KA0KPi0gIFZPSUQNCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgR2V0IGN1cnJlbnQgdXNlcidzIGFj Y2VzcyByaWdodHMuDQo+LQ0KPi0gIEBwYXJhbVtvdXRdICBBY2Nlc3NSaWdodCAgIFBvaW50cyB0 byB0aGUgYnVmZmVyIHVzZWQgZm9yIHVzZXIncyBhY2Nlc3MgcmlnaHRzLg0KPi0NCj4tICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICBHZXQgY3VycmVudCB1c2VyIGFjY2VzcyByaWdodHMgc3Vj Y2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgb3RoZXJzICAgICAgICAgICAgIEZhaWwgdG8gZ2V0IGN1 cnJlbnQgdXNlciBhY2Nlc3MgcmlnaHRzLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tR2V0 QWNjZXNzUmlnaHQgKA0KPi0gIE9VVCAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKkFjY2Vzc1JpZ2h0DQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIERpc3BsYXkgdGhl IHBlcm1pdCBsb2FkIGRldmljZSBwYXRoIGluIHRoZSBsb2FkYWJsZSBkZXZpY2UgcGF0aCBsaXN0 Lg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tRGlzcGxheUxvYWRQZXJtaXQoDQo+LSAgVk9JRA0KPi0g ICk7DQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5IHRoZSBmb3JiaWQgbG9hZCBkZXZpY2UgcGF0aCBs aXN0IChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkKS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LURpc3Bs YXlMb2FkRm9yYmlkICgNCj4tICBWT0lEDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIERpc3BsYXkg dGhlIHBlcm1pdCBjb25uZWN0IGRldmljZSBwYXRoLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tRGlz cGxheUNvbm5lY3RQZXJtaXQgKA0KPi0gIFZPSUQNCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgRGlz cGxheSB0aGUgZm9yYmlkIGNvbm5lY3QgZGV2aWNlIHBhdGggbGlzdC4NCj4tDQo+LSoqLw0KPi1W T0lEDQo+LURpc3BsYXlDb25uZWN0Rm9yYmlkICgNCj4tICBWT0lEDQo+LSAgKTsNCj4tDQo+LS8q Kg0KPi0gIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGRldmljZSBwYXRoIGJ5IERyaXZlckluZGV4IGZy b20gdGhlIGZvcmJpZCBkZXZpY2UgcGF0aA0KPi0gIGxpc3QgKG1BY2Nlc3NJbmZvLkxvYWRGb3Ji aWQpLg0KPi0NCj4tICBAcGFyYW1baW5dICBEcml2ZXJJbmRleCAgIFRoZSBpbmRleCBvZiBkcml2 ZXIgaW4gYSBmb3JiaWRkZW4gZGV2aWNlIHBhdGggbGlzdC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+ LURlbGV0ZUZyb21Gb3JiaWRMb2FkICgNCj4tICBJTiAgVUlOVDE2ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRHJpdmVySW5kZXgNCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgQWRk IHRoZSBzcGVjaWZpZWQgZGV2aWNlIHBhdGggYnkgRHJpdmVySW5kZXggdG8gdGhlIGZvcmJpZCBk ZXZpY2UgcGF0aA0KPi0gIGxpc3QgKG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQpLg0KPi0NCj4tICBA cGFyYW1baW5dICBEcml2ZXJJbmRleCAgIFRoZSBpbmRleCBvZiBkcml2ZXIgc2F2ZWQgaW4gZHJp dmVyIG9wdGlvbnMuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1BZGRUb0ZvcmJpZExvYWQgKA0KPi0g IElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJJbmRl eA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBHZXQgdXNlciBuYW1lIGZyb20gdGhlIHBvcHVwIHdp bmRvd3MuDQo+LQ0KPi0gIEBwYXJhbVtpbiwgb3V0XSAgVXNlck5hbWVMZW4gICBPbiBlbnRyeSwg cG9pbnQgdG8gdGhlIGJ1ZmZlciBsZW5naCBvZg0KPlVzZXJOYW1lLg0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPbiBleGl0LCBwb2ludCB0byB0aGUgaW5wdXQgdXNlciBuYW1l IGxlbmd0aC4NCj4tICBAcGFyYW1bb3V0XSAgICAgIFVzZXJOYW1lICAgICAgVGhlIGJ1ZmZlciB0 byBob2xkIHRoZSBpbnB1dCB1c2VyIG5hbWUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX0FCT1JURUQg ICAgICAgICAgICBJdCBpcyBnaXZlbiB1cCBieSBwcmVzc2luZyAnRVNDJyBrZXkuDQo+LSAgQHJl dHZhbCBFRklfTk9UX1JFQURZICAgICAgICAgIE5vdCBhIHZhbGlkIGlucHV0IGF0IGFsbC4NCj4t ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgR2V0IGEgdXNlciBuYW1lIHN1Y2Nlc3Nm dWxseS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUdldFVzZXJOYW1lSW5wdXQgKA0KPi0g IElOIE9VVCAgVUlOVE4gICAgICAgICAqVXNlck5hbWVMZW4sDQo+LSAgICAgT1VUICBDSEFSMTYg ICAgICAgICpVc2VyTmFtZQ0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBGaW5kIHRoZSBzcGVjaWZp ZWQgaW5mbyBpbiBVc2VyIHByb2ZpbGUgYnkgdGhlIEluZm9UeXBlLg0KPi0NCj4tICBAcGFyYW1b aW5dICBVc2VyICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIHdob3NlIGluZm9ybWF0aW9uIHdp bGwgYmUNCj5zZWFyY2hlZC4NCj4tICBAcGFyYW1baW5dICBJbmZvVHlwZSAgICAgVGhlIHVzZXIg aW5mb3JtYXRpb24gdHlwZSB0byBmaW5kLg0KPi0gIEBwYXJhbVtvdXRdIFVzZXJJbmZvICAgICBQ b2ludHMgdG8gdXNlciBpbmZvcm1hdGlvbiBoYW5kbGUgZm91bmQuDQo+LQ0KPi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICBGaW5kIHRoZSB1c2VyIGluZm9ybWF0aW9uIHN1Y2Nlc3NmdWxseS4N Cj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgRmFpbCB0byBmaW5kIHRoZSB1c2VyIGluZm9y bWF0aW9uLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRmluZEluZm9CeVR5cGUgKA0KPi0g IElOICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgICBVc2VyLA0KPi0g IElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvVHlwZSwN Cj4tICBPVVQgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgKlVzZXJJ bmZvDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIENvbnZlcnQgdGhlIGlkZW50aXR5IHBvbGljeSB0 byBhIHVuaWNvZGUgc3RyaW5nIGFuZCB1cGRhdGUgdGhlIEhpaSBkYXRhYmFzZQ0KPi0gIElwU3Ry aW5nSWQgc3RyaW5nIHdpdGggaXQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIElwICAgICAgICAgUG9p bnRzIHRvIGlkZW50aXR5IHBvbGljeS4NCj4tICBAcGFyYW1baW5dICBJcExlbiAgICAgIFRoZSBp ZGVudGl0eSBwb2xpY3kgbGVuZ3RoLg0KPi0gIEBwYXJhbVtpbl0gIElwU3RyaW5nSWQgU3RyaW5n IElEIGluIHRoZSBISUkgZGF0YWJhc2UgdG8gYmUgcmVwbGFjZWQuDQo+LQ0KPi0qKi8NCj4tVk9J RA0KPi1SZXNvbHZlSWRlbnRpdHlQb2xpY3kgKA0KPi0gIElOICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqSXAsDQo+LSAgSU4gIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIElwTGVuLA0KPi0gIElOICBFRklfU1RSSU5HX0lEICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJcFN0cmluZ0lkDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0g IEV4cGFuZCBhY2Nlc3MgcG9saWN5IG1lbW9yeSBzaXplLg0KPi0NCj4tICBAcGFyYW1baW5dIFZh bGlkTGVuICAgICAgIFRoZSB2YWxpZCBhY2Nlc3MgcG9saWN5IGxlbmd0aC4NCj4tICBAcGFyYW1b aW5dIEV4cGFuZExlbiAgICAgIFRoZSBsZW5ndGggdGhhdCBpcyBuZWVkZWQgdG8gZXhwYW5kLg0K Pi0NCj4tKiovDQo+LVZPSUQNCj4tRXhwYW5kTWVtb3J5ICgNCj4tICBJTiAgICAgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRMZW4sDQo+LSAgSU4gICAgICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZExlbg0KPi0gICk7DQo+LQ0K Pi0vKioNCj4tICBEZWxldGUgVXNlcidzIGNyZWRlbnRhbCBmcm9tIGFsbCB0aGUgcHJvdmlkZXJz IHRoYXQgZXhpc3QgaW4gVXNlcidzIGlkZW50aXR5DQo+cG9saWN5Lg0KPi0NCj4tICBAcGFyYW1b aW5dICBJZGVudGl0eVBvbGljeSAgICAgUG9pbnQgdG8gVXNlcidzIGlkZW50aXR5IHBvbGljeS4N Cj4tICBAcGFyYW1baW5dICBJZGVudGl0eVBvbGljeUxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgaWRl bnRpdHkgcG9saWN5Lg0KPi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICAgICAgICBQb2ludHMg dG8gdXNlciBwcm9maWxlLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tRGVsZXRlQ3JlZGVudGlhbEZy b21Qcm92aWRlcnMgKA0KPi0gIElOICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKklkZW50aXR5UG9saWN5LA0KPi0gIElOICAgICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIElkZW50aXR5UG9saWN5TGVuLA0KPi0gIElOICAgICBFRklfVVNFUl9Q Uk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgIFVzZXINCj4tICApOw0KPi0NCj4tI2VuZGlmDQo+ ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxl TWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnDQo+ZXIudW5pDQo+Yi9TZWN1cml0eVBrZy9Vc2Vy SWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5l ci51bmkNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCBlNGE3NjhlMDBhLi4wMDAw MDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2Zp bGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lci51bmkNCj4rKysgL2Rldi9udWxsDQo+ QEAgLTEsMjIgKzAsMCBAQA0KPi0vLyAvKiogQGZpbGUNCj4tLy8gQSBVSSB0b29sIHRvIG1hbmFn ZSB1c2VyIHByb2ZpbGVzDQo+LS8vDQo+LS8vIEJ5IHRoaXMgbW9kdWxlLCB1c2VyIGNhbiBhZGQv dXBkYXRlL2RlbGV0ZSB1c2VyIHByb2ZpbGVzLCBhbmQgY2FuIGFsc28NCj4tLy8gbW9kaWZ5IHRo ZSB1c2VyIGFjY2VzcyBwb2xpY3kgYW5kIHRoZSB1c2VyIGlkZW50aWZpY2F0aW9uIHBvbGljeS4N Cj4tLy8NCj4tLy8gQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi0vLw0KPi0vLyBUaGlzIHByb2dyYW0gYW5kIHRo ZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LS8vIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFp bGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNl DQo+LS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0 IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LS8vIGh0dHA6Ly9vcGVuc291cmNl Lm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJ QlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJUywNCj4tLy8g V0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVS DQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0vLw0KPi0vLyAqKi8NCj4tDQo+LQ0KPi0jc3RyaW5n IFNUUl9NT0RVTEVfQUJTVFJBQ1QgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJBIFVJIHRv b2wgdG8NCj5tYW5hZ2UgdXNlciBwcm9maWxlcyINCj4tDQo+LSNzdHJpbmcgU1RSX01PRFVMRV9E RVNDUklQVElPTiAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIkJ5IHRoaXMgbW9kdWxlLA0KPnVz ZXIgY2FuIGFkZC91cGRhdGUvZGVsZXRlIHVzZXIgcHJvZmlsZXMsIGFuZCBjYW4gYWxzbyBtb2Rp ZnkgdGhlIHVzZXIgYWNjZXNzDQo+cG9saWN5IGFuZCB0aGUgdXNlciBpZGVudGlmaWNhdGlvbiBw b2xpY3kuIg0KPi0NCj5kaWZmIC0tZ2l0DQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRp b24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lckRhdGEuaA0KPmIv U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2Vy UHJvZmlsZU1hbmFnDQo+ZXJEYXRhLmgNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRl eCBhODNjYWFjOWJhLi4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRp ZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lckRhdGEu aA0KPisrKyAvZGV2L251bGwNCj5AQCAtMSwxNTggKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBU aGUgZm9ybSBkYXRhIGZvciB1c2VyIHByb2ZpbGUgbWFuYWdlciBkcml2ZXIuDQo+LQ0KPi1Db3B5 cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN Cj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5k IGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4t DQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBB TiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05T IE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4t DQo+LSNpZm5kZWYgX19VU0VSX1BST0ZJTEVfTUFOQUdFUl9EQVRBX0hfXw0KPi0jZGVmaW5lIF9f VVNFUl9QUk9GSUxFX01BTkFHRVJfREFUQV9IX18NCj4tDQo+LSNpbmNsdWRlIDxHdWlkL1VzZXJQ cm9maWxlTWFuYWdlckhpaS5oPg0KPi0NCj4tLy8NCj4tLy8gRm9ybSBJRA0KPi0vLw0KPi0jZGVm aW5lIEZPUk1JRF9VU0VSX01BTkFHRSAgICAgICAgICAweDAwMDENCj4tI2RlZmluZSBGT1JNSURf TU9ESUZZX1VTRVIgICAgICAgICAgMHgwMDAyDQo+LSNkZWZpbmUgRk9STUlEX0RFTF9VU0VSICAg ICAgICAgICAgIDB4MDAwMw0KPi0jZGVmaW5lIEZPUk1JRF9VU0VSX0lORk8gICAgICAgICAgICAw eDAwMDQNCj4tI2RlZmluZSBGT1JNSURfTU9ESUZZX0lQICAgICAgICAgICAgMHgwMDA1DQo+LSNk ZWZpbmUgRk9STUlEX01PRElGWV9BUCAgICAgICAgICAgIDB4MDAwNg0KPi0jZGVmaW5lIEZPUk1J RF9MT0FEX0RQICAgICAgICAgICAgICAweDAwMDcNCj4tI2RlZmluZSBGT1JNSURfQ09OTkVDVF9E UCAgICAgICAgICAgMHgwMDA4DQo+LSNkZWZpbmUgRk9STUlEX1BFUk1JVF9MT0FEX0RQICAgICAg IDB4MDAwOQ0KPi0jZGVmaW5lIEZPUk1JRF9GT1JCSURfTE9BRF9EUCAgICAgICAweDAwMEENCj4t I2RlZmluZSBGT1JNSURfUEVSTUlUX0NPTk5FQ1RfRFAgICAgMHgwMDBCDQo+LSNkZWZpbmUgRk9S TUlEX0ZPUkJJRF9DT05ORUNUX0RQICAgIDB4MDAwQw0KPi0NCj4tLy8NCj4tLy8gTGFiZWwgSUQN Cj4tLy8NCj4tI2RlZmluZSAgTEFCRUxfVVNFUl9NQU5BR0VfRlVOQyAgICAgMHgwMDEwDQo+LSNk ZWZpbmUgIExBQkVMX1VTRVJfREVMX0ZVTkMgICAgICAgIDB4MDAyMA0KPi0jZGVmaW5lICBMQUJF TF9VU0VSX01PRF9GVU5DICAgICAgICAweDAwMzANCj4tI2RlZmluZSAgTEFCRUxfVVNFUl9JTkZP X0ZVTkMgICAgICAgMHgwMDQwDQo+LSNkZWZpbmUgIExBQkVMX0lQX01PRF9GVU5DICAgICAgICAg IDB4MDA1MA0KPi0jZGVmaW5lICBMQUJFTF9BUF9NT0RfRlVOQyAgICAgICAgICAweDAwNjANCj4t I2RlZmluZSAgTEFCRUxfUEVSTUlUX0xPQURfRlVOQyAgICAgMHgwMDcwDQo+LSNkZWZpbmUgIExB QkxFX0ZPUkJJRF9MT0FEX0ZVTkMgICAgIDB4MDA4MA0KPi0jZGVmaW5lICBMQUJFTF9FTkQgICAg ICAgICAgICAgICAgICAweDAwRjANCj4tDQo+LS8vDQo+LS8vIEZpcnN0IGZvcm0ga2V5IChBZGQv bW9kaWZ5L2RlbCB1c2VyIHByb2ZpbGUpLg0KPi0vLyBGaXJzdCAyIGJpdHMgKGJpdCAxNn4xNSku DQo+LS8vDQo+LSNkZWZpbmUgIEtFWV9NT0RJRllfVVNFUiAgICAgICAgICAgIDB4NDAwMA0KPi0j ZGVmaW5lICBLRVlfREVMX1VTRVIgICAgICAgICAgICAgICAweDgwMDANCj4tI2RlZmluZSAgS0VZ X0FERF9VU0VSICAgICAgICAgICAgICAgMHhDMDAwDQo+LSNkZWZpbmUgIEtFWV9GSVJTVF9GT1JN X01BU0sgICAgICAgIDB4QzAwMA0KPi0NCj4tLy8NCj4tLy8gU2Vjb25kIGZvcm0ga2V5IChEaXNw bGF5IG5ldyBmb3JtIC9TZWxlY3QgdXNlciAvIG1vZGlmeSBkZXZpY2UgcGF0aCBpbg0KPmFjY2Vz cyBwb2xpY3kpLg0KPi0vLyBOZXh0IDIgYml0cyAoYml0IDE0fjEzKS4NCj4tLy8NCj4tI2RlZmlu ZSAgS0VZX0VOVEVSX05FWFRfRk9STSAgICAgICAgMHgwMDAwDQo+LSNkZWZpbmUgIEtFWV9TRUxF Q1RfVVNFUiAgICAgICAgICAgIDB4MTAwMA0KPi0jZGVmaW5lICBLRVlfTU9ESUZZX0FQX0RQICAg ICAgICAgICAweDIwMDANCj4tI2RlZmluZSAgS0VZX09QRU5fQ0xPU0VfRk9STV9BQ1RJT04gMHgz MDAwDQo+LSNkZWZpbmUgIEtFWV9TRUNPTkRfRk9STV9NQVNLICAgICAgIDB4MzAwMA0KPi0NCj4t Ly8NCj4tLy8gVXNlciBwcm9maWxlIGluZm9ybWF0aW9uIGZvcm0ga2V5Lg0KPi0vLyBOZXh0IDMg Yml0cyAoYml0IDEyfjEwKS4NCj4tLy8NCj4tI2RlZmluZSAgS0VZX01PRElGWV9OQU1FICAgICAg ICAgICAgMHgwMjAwDQo+LSNkZWZpbmUgIEtFWV9NT0RJRllfSVAgICAgICAgICAgICAgIDB4MDQw MA0KPi0jZGVmaW5lICBLRVlfTU9ESUZZX0FQICAgICAgICAgICAgICAweDA2MDANCj4tI2RlZmlu ZSAgS0VZX01PRElGWV9JTkZPX01BU0sgICAgICAgMHgwRTAwDQo+LQ0KPi0vLw0KPi0vLyBTcGVj aWZpZWQga2V5LCB1c2VkIGluIFZGUiAoS0VZX01PRElGWV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VS IHwNCj5LRVlfTU9ESUZZX05BTUUpLg0KPi0vLw0KPi0jZGVmaW5lICBLRVlfTU9ESUZZX1VTRVJf TkFNRSAgICAgICAweDUyMDANCj4tDQo+LS8vDQo+LS8vIE1vZGlmeSBpZGVudGl0eSBwb2xpY3kg Zm9ybSBrZXkuDQo+LS8vIE5leHQgMyBiaXRzIChiaXQgOX43KS4NCj4tLy8NCj4tI2RlZmluZSAg S0VZX01PRElGWV9QUk9WICAgICAgICAgICAgMHgwMDQwDQo+LSNkZWZpbmUgIEtFWV9NT0RJRllf TVRZUEUgICAgICAgICAgIDB4MDA4MA0KPi0jZGVmaW5lICBLRVlfTU9ESUZZX0NPTk4gICAgICAg ICAgICAweDAwQzANCj4tI2RlZmluZSAgS0VZX0FERF9JUF9PUCAgICAgICAgICAgICAgMHgwMTAw DQo+LSNkZWZpbmUgIEtFWV9JUF9SRVRVUk5fVUlGICAgICAgICAgIDB4MDE0MA0KPi0jZGVmaW5l ICBLRVlfTU9ESUZZX0lQX01BU0sgICAgICAgICAweDAxQzANCj4tDQo+LS8vDQo+LS8vIFNwZWNp ZmllZCBrZXkuDQo+LS8vDQo+LSNkZWZpbmUgIEtFWV9BRERfTE9HSUNBTF9PUCAgICAgICAgIDB4 NTUwMA0KPi0jZGVmaW5lICBLRVlfSVBfUkVUVVJOICAgICAgICAgICAgICAweDU1NDANCj4tDQo+ LS8vDQo+LS8vIE1vZGlmeSBhY2Nlc3MgcG9saWN5IGZvcm0ga2V5Lg0KPi0vLyBOZXh0IDMgYml0 cyAoYml0IDl+NykuDQo+LS8vDQo+LSNkZWZpbmUgIEtFWV9NT0RJRllfUklHSFQgICAgICAgICAg IDB4MDA0MA0KPi0jZGVmaW5lICBLRVlfTU9ESUZZX1NFVFVQICAgICAgICAgICAweDAwODANCj4t I2RlZmluZSAgS0VZX01PRElGWV9CT09UICAgICAgICAgICAgMHgwMEMwDQo+LSNkZWZpbmUgIEtF WV9NT0RJRllfTE9BRCAgICAgICAgICAgIDB4MDEwMA0KPi0jZGVmaW5lICBLRVlfTU9ESUZZX0NP Tk5FQ1QgICAgICAgICAweDAxNDANCj4tI2RlZmluZSAgS0VZX0FQX1JFVFVSTl9VSUYgICAgICAg ICAgMHgwMTgwDQo+LSNkZWZpbmUgIEtFWV9NT0RJRllfQVBfTUFTSyAgICAgICAgIDB4MDFDMA0K Pi0NCj4tLy8NCj4tLy8gU3BlY2lmaWVkIGtleS4NCj4tLy8NCj4tI2RlZmluZSAgS0VZX0xPQURf RFAgICAgICAgICAgICAgICAgMHg1NzAwDQo+LSNkZWZpbmUgIEtFWV9DT05OX0RQICAgICAgICAg ICAgICAgIDB4NTc0MA0KPi0jZGVmaW5lICBLRVlfQVBfUkVUVVJOICAgICAgICAgICAgICAweDU3 ODANCj4tDQo+LS8vDQo+LS8vIERldmljZSBwYXRoIGZvcm0ga2V5Lg0KPi0vLyBOZXh0IDIgYml0 cyAoYml0IDZ+NSkuDQo+LS8vDQo+LSNkZWZpbmUgIEtFWV9QRVJNSVRfTU9ESUZZICAgICAgICAg IDB4MDAxMA0KPi0jZGVmaW5lICBLRVlfRk9SQklEX01PRElGWSAgICAgICAgICAweDAwMjANCj4t I2RlZmluZSAgS0VZX0RJU1BMQVlfRFBfTUFTSyAgICAgICAgMHgwMDMwDQo+LQ0KPi0vLw0KPi0v LyBTcGVjaWZpZWQga2V5Lg0KPi0vLw0KPi0jZGVmaW5lICBLRVlfTE9BRF9QRVJNSVQgICAgICAg ICAgICAweDU3MTANCj4tI2RlZmluZSAgS0VZX0xPQURfRk9SQklEICAgICAgICAgICAgMHg1NzIw DQo+LSNkZWZpbmUgIEtFWV9DT05ORUNUX1BFUk1JVCAgICAgICAgIDB4NTc1MA0KPi0jZGVmaW5l ICBLRVlfQ09OTkVDVF9GT1JCSUQgICAgICAgICAweDU3NjANCj4tDQo+LS8vDQo+LS8vIERldmlj ZSBwYXRoIG1vZGlmeSBrZXkuDQo+LS8vIDIgYml0cyAoYml0IDEyfjExKS4NCj4tLy8NCj4tI2Rl ZmluZSBLRVlfTE9BRF9QRVJNSVRfTU9ESUZZICAgICAgMHgwMDAwDQo+LSNkZWZpbmUgS0VZX0xP QURfRk9SQklEX01PRElGWSAgICAgIDB4MDQwMA0KPi0jZGVmaW5lIEtFWV9DT05ORUNUX1BFUk1J VF9NT0RJRlkgICAweDA4MDANCj4tI2RlZmluZSBLRVlfQ09OTkVDVF9GT1JCSURfTU9ESUZZICAg MHgwQzAwDQo+LSNkZWZpbmUgS0VZX01PRElGWV9EUF9NQVNLICAgICAgICAgIDB4MEMwMA0KPi0N Cj4tDQo+LS8vDQo+LS8vIFRoZSBwZXJtaXNzaW9ucyB1c2FibGUgd2hlbiBjb25maWd1cmluZyB0 aGUgcGxhdGZvcm0uDQo+LS8vDQo+LSNkZWZpbmUgIEFDQ0VTU19TRVRVUF9SRVNUUklDVEVEICAg MQ0KPi0jZGVmaW5lICBBQ0NFU1NfU0VUVVBfTk9STUFMICAgICAgIDINCj4tI2RlZmluZSAgQUND RVNTX1NFVFVQX0FETUlOICAgICAgICAzDQo+LQ0KPi0vLw0KPi0vLyBRdWVzdGlvbiBJRCBmb3Ig dGhlIHF1ZXN0aW9uIHVzZWQgaW4gZWFjaCBmb3JtDQo+KEtFWV9PUEVOX0NMT1NFX0ZPUk1fQUNU SU9OIHwgRk9STUlEX0ZPUk1fVVNFUl9NQU5BR0UpDQo+LS8vIFRoaXMgSUQgaXMgdXNlZCBpbiBG T1JNIE9QRU4vQ0xPU0UgQ2FsbEJhY2sgYWN0aW9uLg0KPi0vLw0KPi0jZGVmaW5lIFFVRVNUSU9O SURfVVNFUl9NQU5BR0UgICAgICAweDMwMDENCj4tDQo+LSNlbmRpZg0KPmRpZmYgLS1naXQNCj5h L1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNl clByb2ZpbGVNYW5hZw0KPmVyRHhlLmluZg0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0 aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnDQo+ZXJEeGUuaW5mDQo+ ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+aW5kZXggY2RkOTc3MzFiMi4uMDAwMDAwMDAwMA0K Pi0tLQ0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdl ckR4ZS9Vc2VyUHJvZmlsZU1hbmFnDQo+ZXJEeGUuaW5mDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0x LDcyICswLDAgQEANCj4tIyMgQGZpbGUNCj4tIyAgQSBVSSB0b29sIHRvIG1hbmFnZSB1c2VyIHBy b2ZpbGVzDQo+LSMNCj4tIyAgQnkgdGhpcyBtb2R1bGUsIHVzZXIgY2FuIGFkZC91cGRhdGUvZGVs ZXRlIHVzZXIgcHJvZmlsZXMsIGFuZCBjYW4gYWxzbw0KPi0jICBtb2RpZnkgdGhlIHVzZXIgYWNj ZXNzIHBvbGljeSBhbmQgdGhlIHVzZXIgaWRlbnRpZmljYXRpb24gcG9saWN5Lg0KPi0jDQo+LSMg Q29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPi0jIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRl cmlhbHMNCj4tIyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi0jIHdoaWNoIGFjY29tcGFu aWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBi ZQ0KPmZvdW5kIGF0DQo+LSMgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNl bnNlLnBocA0KPi0jIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElD RU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+LSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJF UFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0K Pi0jDQo+LSMjDQo+LQ0KPi1bRGVmaW5lc10NCj4tICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAg ICAgICAgPSAweDAwMDEwMDA1DQo+LSAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0g VXNlclByb2ZpbGVNYW5hZ2VyDQo+LSAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAgICAgICAgID0g VXNlclByb2ZpbGVNYW5hZ2VyLnVuaQ0KPi0gIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAg ICA9IEUzOENCNTJELUE3NEQtNDVkYi1BOEQwLTI5MEM5QjIxQkJGMg0KPi0gIE1PRFVMRV9UWVBF ICAgICAgICAgICAgICAgICAgICA9IERYRV9EUklWRVINCj4tICBWRVJTSU9OX1NUUklORyAgICAg ICAgICAgICAgICAgPSAxLjANCj4tICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBV c2VyUHJvZmlsZU1hbmFnZXJJbml0DQo+LQ0KPi1bU291cmNlc10NCj4tICBVc2VyUHJvZmlsZU1h bmFnZXIuYw0KPi0gIFVzZXJQcm9maWxlTWFuYWdlci5oDQo+LSAgVXNlclByb2ZpbGVBZGQuYw0K Pi0gIFVzZXJQcm9maWxlRGVsZXRlLmMNCj4tICBVc2VyUHJvZmlsZU1vZGlmeS5jDQo+LSAgTW9k aWZ5SWRlbnRpdHlQb2xpY3kuYw0KPi0gIE1vZGlmeUFjY2Vzc1BvbGljeS5jDQo+LSAgVXNlclBy b2ZpbGVNYW5hZ2VyRGF0YS5oDQo+LSAgVXNlclByb2ZpbGVNYW5hZ2VyU3RyaW5ncy51bmkNCj4t ICBVc2VyUHJvZmlsZU1hbmFnZXJWZnIuVmZyDQo+LQ0KPi1bUGFja2FnZXNdDQo+LSAgTWRlUGtn L01kZVBrZy5kZWMNCj4tICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPi0gIFNlY3Vy aXR5UGtnL1NlY3VyaXR5UGtnLmRlYw0KPi0NCj4tW0xpYnJhcnlDbGFzc2VzXQ0KPi0gIFVlZmlS dW50aW1lU2VydmljZXNUYWJsZUxpYg0KPi0gIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KPi0g IFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+LSAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPi0gIEJhc2VN ZW1vcnlMaWINCj4tICBEZWJ1Z0xpYg0KPi0gIEhpaUxpYg0KPi0gIFVlZmlMaWINCj4tICBEZXZp Y2VQYXRoTGliDQo+LQ0KPi1bR3VpZHNdDQo+LSAgZ0VmaUlmclRpYW5vR3VpZCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgIyMgR1VJRA0KPi0gIGdF ZmlVc2VySW5mb0FjY2Vzc1NldHVwQWRtaW5HdWlkICAgICAgICAgICAgICAjIyBTT01FVElNRVNf Q09OU1VNRVMgICMjDQo+R1VJRA0KPi0gIGdFZmlVc2VySW5mb0FjY2Vzc1NldHVwTm9ybWFsR3Vp ZCAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICMjDQo+R1VJRA0KPi0gIGdFZmlV c2VySW5mb0FjY2Vzc1NldHVwUmVzdHJpY3RlZEd1aWQgICAgICAgICAjIyBTT01FVElNRVNfQ09O U1VNRVMNCj4jIyBHVUlEDQo+LSAgZ1VzZXJQcm9maWxlTWFuYWdlckd1aWQgICAgICAgICAgICAg ICAgICAgICAgICMjIENPTlNVTUVTICAgICAgICAgICAgIyMgSElJDQo+LQ0KPi1bUHJvdG9jb2xz XQ0KPi0gIGdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAjIyBQ Uk9EVUNFUw0KPi0gIGdFZmlIaWlDb25maWdBY2Nlc3NQcm90b2NvbEd1aWQgICAgICAgICAgICAg ICAjIyBQUk9EVUNFUw0KPi0gIGdFZmlVc2VyQ3JlZGVudGlhbDJQcm90b2NvbEd1aWQgICAgICAg ICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4tICBnRWZpVXNlck1hbmFnZXJQcm90b2Nv bEd1aWQgICAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCj4tDQo+LVtEZXBleF0NCj4tICBn RWZpVXNlck1hbmFnZXJQcm90b2NvbEd1aWQNCj4tDQo+LVtVc2VyRXh0ZW5zaW9ucy5UaWFub0Nv cmUuIkV4dHJhRmlsZXMiXQ0KPi0gIFVzZXJQcm9maWxlTWFuYWdlckV4dHJhLnVuaQ0KPi0NCj5k aWZmIC0tZ2l0DQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVN YW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lckV4dHJhLnVuaQ0KPmIvU2VjdXJpdHlQa2cv VXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFn DQo+ZXJFeHRyYS51bmkNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCBiZjdhYzdk YzA0Li4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v VXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lckV4dHJhLnVuaQ0KPisr KyAvZGV2L251bGwNCj5AQCAtMSwxOSArMCwwIEBADQo+LS8vIC8qKiBAZmlsZQ0KPi0vLyBVc2Vy UHJvZmlsZU1hbmFnZXIgTG9jYWxpemVkIFN0cmluZ3MgYW5kIENvbnRlbnQNCj4tLy8NCj4tLy8g Q29weXJpZ2h0IChjKSAyMDEzIC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPi0vLw0KPi0vLyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlp bmcgbWF0ZXJpYWxzDQo+LS8vIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LS8vIHdoaWNo IGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNl bnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl cy9ic2QtbGljZW5zZS5waHANCj4tLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIg VEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJUywNCj4tLy8gV0lUSE9VVCBXQVJS QU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBP UiBJTVBMSUVELg0KPi0vLw0KPi0vLyAqKi8NCj4tDQo+LSNzdHJpbmcgU1RSX1BST1BFUlRJRVNf TU9EVUxFX05BTUUNCj4tI2xhbmd1YWdlIGVuLVVTDQo+LSJVc2VyIFByb2ZpbGUgTWFuYWdlciIN Cj4tDQo+LQ0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9V c2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZw0KPmVyU3RyaW5ncy51bmkNCj5i L1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNl clByb2ZpbGVNYW5hZw0KPmVyU3RyaW5ncy51bmkNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQN Cj5pbmRleCAzYTAwM2E5ODgzLi4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2Vy SWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5l clN0cmluZ3MudW5pDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDE1OCArMCwwIEBADQo+LS8qKiBA ZmlsZQ0KPi0gIFN0cmluZyBkZWZpbml0aW9ucyBmb3IgVXNlciBQcm9maWxlIE1hbmFnZXIgZHJp dmVyLg0KPi0NCj4tQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBh bnlpbmcgbWF0ZXJpYWxzDQo+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LXdoaWNoIGFj Y29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5z ZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNk LWxpY2Vuc2UucGhwDQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUg QlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9S IFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVE Lg0KPi0NCj4tKiovDQo+LQ0KPi0jbGFuZ2RlZiAgIGVuLVVTICJFbmdsaXNoIg0KPi0jbGFuZ2Rl ZiAgIGZyLUZSICJGcmFuw6dhaXMiDQo+LQ0KPi0jc3RyaW5nIFNUUl9OVUxMX1NUUklORyAgICAg ICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICIiDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIiINCj4tI3N0cmluZyBTVFJfRk9STVNF VF9USVRMRSAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiVXNlciBNYW5hZ2VyIg0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJV c2VyIE1hbmFnZXIoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfVElUTEVfSEVMUCAgICAgICAgICAg ICAgICAgI2xhbmd1YWdlIGVuLVVTICAiVGhpcyBzZWxlY3Rpb24gd2lsbCB0YWtlDQo+eW91IHRv IHRoZSBVc2VyIE1hbmFnZXIiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICNsYW5ndWFnZSBmci1GUiAgIlRoaXMgc2VsZWN0aW9uIHdpbGwgdGFrZSB5b3UgdG8gdGhl IFVzZXINCj5NYW5hZ2VyKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1VTRVJNQU5fVElUTEUgICAg ICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlVzZXIgTWFuYWdlciINCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiVXNlciBNYW5hZ2Vy KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0FERF9VU0VSX1RJVExFICAgICAgICAgICAgICNsYW5n dWFnZSBlbi1VUyAgIkFkZCBVc2VyIFByb2ZpbGUiDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkFkZCBVc2VyIFByb2ZpbGUoRnJlbmNo KSINCj4tI3N0cmluZyBTVFJfQUREX1VTRVJfSEVMUCAgICAgICAgICAgICAgICNsYW5ndWFnZSBl bi1VUyAgIkFkZCBVc2VyIFByb2ZpbGUgdG8NCj5Vc2VyIERhdGFiYXNlIg0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJBZGQgVXNlciBQ cm9maWxlIHRvIFVzZXINCj5EYXRhYmFzZShGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9NT0RJRllf VVNFUl9USVRMRSAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiTW9kaWZ5IFVzZXINCj5Qcm9m aWxlIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2Ug ZnItRlIgICJNb2RpZnkgVXNlciBQcm9maWxlKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX01PRElG WV9VU0VSX0hFTFAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIk1vZGlmeSBVc2VyIFByb2Zp bGUNCj5JbmZvcm1hdGlvbiINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgI2xhbmd1YWdlIGZyLUZSICAiTW9kaWZ5IFVzZXIgUHJvZmlsZQ0KPkluZm9ybWF0aW9uKEZy ZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0RFTEVURV9VU0VSX1RJVExFICAgICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgICJEZWxldGUgVXNlciBQcm9maWxlIg0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJEZWxldGUgVXNlciBQcm9maWxlKEZy ZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0RFTEVURV9VU0VSX0hFTFAgICAgICAgICAgICNsYW5ndWFn ZSBlbi1VUyAgIkRlbGV0ZSBVc2VyIFByb2ZpbGUNCj5mcm9tIFVzZXIgRGF0YWJhc2UiDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkRl bGV0ZSBVc2VyIFByb2ZpbGUgZnJvbSBVc2VyDQo+RGF0YWJhc2UoRnJlbmNoKSINCj4tI3N0cmlu ZyBTVFJfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlVzZXIg UHJvZmlsZQ0KPkluZm9ybWF0aW9uIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJVc2VyIFByb2ZpbGUgSW5mb3JtYXRpb24oRnJlbmNo KSINCj4tI3N0cmluZyBTVFJfVVNFUl9OQU1FICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBl bi1VUyAgIlVzZXIgTmFtZSINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgI2xhbmd1YWdlIGZyLUZSICAiVXNlciBOYW1lKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1VT RVJfTkFNRV9WQUwgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICIiDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIiINCj4tI3N0 cmluZyBTVFJfQ1JFQVRFX0RBVEUgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkNy ZWF0ZSBEYXRlIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFu Z3VhZ2UgZnItRlIgICJDcmVhdGUgRGF0ZShGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9DUkVBVEVf REFURV9WQUwgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiIg0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICIiDQo+LSNzdHJpbmcg U1RSX1VTQUdFX0RBVEUgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJVc2FnZSBE YXRlIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2Ug ZnItRlIgICJVc2FnZSBEYXRlKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1VTQUdFX0RBVEVfVkFM ICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIiINCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiIg0KPi0jc3RyaW5nIFNUUl9VU0FH RV9DT1VOVCAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiVXNhZ2UgQ291bnQiDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAg IlVzYWdlIENvdW50KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1VTQUdFX0NPVU5UX1ZBTCAgICAg ICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICIiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIiINCj4tI3N0cmluZyBTVFJfSURFTlRJRllf UE9MSUNZICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIklkZW50aWZ5IFBvbGljeSINCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAi SWRlbnRpZnkgUG9saWN5KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0lERU5USUZZX1BPTElDWV9W QUwgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICIiDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIiINCj4tI3N0cmluZyBTVFJfQUNDRVNT X1BPTElDWSAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFjY2VzcyBQb2xpY3kiDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAg IkFjY2VzcyBQb2xpY3koRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfU0FWRSAgICAgICAgICAgICAg ICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiU2F2ZSAmIEV4aXQiDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlNhdmUgJiBFeGl0KEZy ZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0lERU5USUZZX1NBVkVfSEVMUCAgICAgICAgICNsYW5ndWFn ZSBlbi1VUyAgIlNhdmUgSWRlbnRpZnkgUG9saWN5DQo+YW5kIEV4aXQiDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlNhdmUgSWRlbnRp ZnkgUG9saWN5IGFuZCBFeGl0KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1BST1ZJREVSICAgICAg ICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkNyZWRlbnRpYWwgUHJvdmlkZXIiDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkNy ZWRlbnRpYWwgUHJvdmlkZXIoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfUFJPVklERVJfSEVMUCAg ICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlNlbGVjdCBDcmVkZW50aWFsDQo+UHJvdmlk ZXIgT3B0aW9uIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFu Z3VhZ2UgZnItRlIgICJTZWxlY3QgQ3JlZGVudGlhbCBQcm92aWRlcg0KPk9wdGlvbihGcmVuY2gp Ig0KPi0jc3RyaW5nIFNUUl9PUl9DT04gICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4t VVMgICJPciINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1 YWdlIGZyLUZSICAiT3IoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfQU5EX0NPTiAgICAgICAgICAg ICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFuZCINCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQW5kKEZyZW5jaCkiDQo+LSNzdHJp bmcgU1RSX0NPTk5FQ1RPUiAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJMb2dp Y2FsIENvbm5lY3RvciINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg I2xhbmd1YWdlIGZyLUZSICAiTG9naWNhbCBDb25uZWN0b3IoRnJlbmNoKSINCj4tI3N0cmluZyBT VFJfQ09OTkVDVE9SX0hFTFAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiU2VsZWN0IExv Z2ljYWwNCj5Db25uZWN0b3IgT3B0aW9uIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJTZWxlY3QgTG9naWNhbCBDb25uZWN0b3INCj5P cHRpb24oRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfSURFTlRJRllfUE9MSUNZX1ZBTFVFICAgICAg ICNsYW5ndWFnZSBlbi1VUyAgIiINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgI2xhbmd1YWdlIGZyLUZSICAiIg0KPi0jc3RyaW5nIFNUUl9JREVOVElGWV9QT0xJQ1lf SEVMUCAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJDdXJyZW50IElkZW50aWZ5DQo+UG9saWN5Ig0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIg ICJDdXJyZW50IElkZW50aWZ5IFBvbGljeShGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9BRERfT1BU SU9OICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJBZGQgT3B0aW9uIg0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJBZGQg T3B0aW9uKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0FERF9PUFRJT05fSEVMUCAgICAgICAgICAg ICAjbGFuZ3VhZ2UgZW4tVVMgICJBZGQgVGhpcyBPcHRpb24gdG8NCj5JZGVudGlmeSBQb2xpY3ki DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1G UiAgIkFkZCBUaGlzIE9wdGlvbiB0byBJZGVudGlmeQ0KPlBvbGljeShGcmVuY2gpIg0KPi0jc3Ry aW5nIFNUUl9BQ0NFU1NfU0FWRV9IRUxQICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJTYXZl IEFjY2VzcyBQb2xpY3kNCj5hbmQgRXhpdCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiU2F2ZSBBY2Nlc3MgUG9saWN5IGFuZCBFeGl0 KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0FDQ0VTU19SSUdIVCAgICAgICAgICAgICAgICNsYW5n dWFnZSBlbi1VUyAgIkFjY2VzcyBSaWdodCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQWNjZXNzIFJpZ2h0KEZyZW5jaCkiDQo+LSNz dHJpbmcgU1RSX0FDQ0VTU19SSUdIVF9IRUxQICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJT ZWxlY3QgQWNjZXNzIFJpZ2h0DQo+T3B0aW9uIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJTZWxlY3QgQWNjZXNzIFJpZ2h0IE9wdGlv bihGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAjbGFu Z3VhZ2UgZW4tVVMgICJOb3JtYWwiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICNsYW5ndWFnZSBmci1GUiAgIk5vcm1hbChGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9F TlJPTEwgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJFbnJvbGwiDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkVu cm9sbChGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9NQU5BR0UgICAgICAgICAgICAgICAgICAgICAj bGFuZ3VhZ2UgZW4tVVMgICJNYW5hZ2UiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIk1hbmFnZShGcmVuY2gpIg0KPi0jc3RyaW5nIFNU Ul9BQ0NFU1NfU0VUVVAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJBY2Nlc3MgU2V0 dXAiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBm ci1GUiAgIkFjY2VzcyBTZXR1cChGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9BQ0NFU1NfU0VUVVBf SEVMUCAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiU2VsZWN0IEFjY2Vzcw0KPlNldHVwIE9w dGlvbiINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdl IGZyLUZSICAiU2VsZWxjdCBBY2Nlc3MgU2V0dXAgT3B0aW9uKEZyZW5jaCkiDQo+LSNzdHJpbmcg U1RSX1JFU1RSSUNURUQgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlJlc3RyaWN0 ZWQiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBm ci1GUiAgIlJlc3RyaWN0ZWQoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfQURNSU4gICAgICAgICAg ICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFkbWluIg0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJBZG1pbihGcmVuY2gpIg0K Pi0jc3RyaW5nIFNUUl9CT09SX09SREVSICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMg ICJBY2Nlc3MgQm9vdCBPcmRlciINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQWNjZXNzIEJvb3QgT3JkZXIoRnJlbmNoKSINCj4tI3N0 cmluZyBTVFJfQk9PVF9PUkRFUl9IRUxQICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlNl bGVjdCBBY2Nlc3MgQm9vdA0KPk9yZGVyIE9wdGlvbiINCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiU2VsZWN0IEFjY2VzcyBCb290IE9y ZGVyDQo+T3B0aW9uKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0lOU0VSVCAgICAgICAgICAgICAg ICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkluc2VydCINCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiSW5zZXJ0KEZyZW5jaCkiDQo+LSNz dHJpbmcgU1RSX0FQUEVORCAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFw cGVuZCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdl IGZyLUZSICAiQXBwZW5kKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1JFUExBQ0UgICAgICAgICAg ICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJSZXBsYWNlIg0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJSZXBsYWNlKEZyZW5jaCki DQo+LSNzdHJpbmcgU1RSX05PREVGQVVMVCAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4t VVMgICJOb2RlZmF1bHQiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICNsYW5ndWFnZSBmci1GUiAgIk5vZGVmYXVsdChGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9MT0FE ICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiTG9hZCBEZXZpY2UgUGF0 aCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBm ci1GUiAgIkxvYWQgRGV2aWNlIFBhdGgoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfTE9BRF9IRUxQ ICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlNlbGVjdCBQZXJtaXQvRm9yYmlk DQo+TG9hZCBEZXZpY2UgUGF0aCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgI2xhbmd1YWdlIGZyLUZSICAiU2VsZWN0IFBlcm1pdC9Gb3JiaWQgTG9hZCBEZXZpY2UN Cj5QYXRoKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0NPTk5FQ1QgICAgICAgICAgICAgICAgICAg ICAjbGFuZ3VhZ2UgZW4tVVMgICJDb25uZWN0IERldmljZSBQYXRoIg0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJDb25uZWN0IERldmlj ZSBQYXRoKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0NPTk5FQ1RfSEVMUCAgICAgICAgICAgICAg ICNsYW5ndWFnZSBlbi1VUyAgIlNlbGVjdCBQZXJtaXQvRm9yYmlkDQo+Q29ubmVjdCBEZXZpY2Ug UGF0aCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdl IGZyLUZSICAiU2VsZWN0IFBlcm1pdC9Gb3JiaWQgQ29ubmVjdCBEZXZpY2UNCj5QYXRoKEZyZW5j aCkiDQo+LSNzdHJpbmcgU1RSX0xPQURfUEVSTUlUICAgICAgICAgICAgICAgICAgI2xhbmd1YWdl IGVuLVVTICAiUGVybWl0IExvYWQgRGV2aWNlDQo+UGF0aCINCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiUGVybWl0IExvYWQgRGV2aWNl IFBhdGgoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfTE9BRF9QRVJNSVRfSEVMUCAgICAgICAgICAg I2xhbmd1YWdlIGVuLVVTICAiQ2hhbmdlIFBlcm1pdA0KPkxvYWQgRGV2aWNlIFBhdGggdG8gRm9y YmlkIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2Ug ZnItRlIgICJDaGFuZ2UgUGVybWl0IExvYWQgRGV2aWNlIFBhdGggdG8NCj5Gb3JiaWQoRnJlbmNo KSINCj4tI3N0cmluZyBTVFJfTE9BRF9GT1JCSUQgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2Ug ZW4tVVMgICJGb3JiaWQgTG9hZCBEZXZpY2UNCj5QYXRoIg0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJGb3JiaWQgTG9hZCBEZXZpY2Ug UGF0aChGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9MT0FEX0ZPUkJJRF9IRUxQICAgICAgICAgICAj bGFuZ3VhZ2UgZW4tVVMgICJDaGFuZ2UgRm9yYmlkIExvYWQNCj5EZXZpY2UgUGF0aCB0byBQZXJt aXQiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBm ci1GUiAgIkNoYW5nZSBGb3JiaWQgTG9hZCBEZXZpY2UgUGF0aCB0bw0KPlBlcm1pdChGcmVuY2gp Ig0KPi0jc3RyaW5nIFNUUl9DT05ORUNUX1BFUk1JVCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4t VVMgICJQZXJtaXQgQ29ubmVjdA0KPkRldmljZSBQYXRoIg0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJQZXJtaXQgQ29ubmVjdCBEZXZp Y2UgUGF0aChGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9DT05ORUNUX1BFUk1JVF9IRUxQICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTICAiQ2hhbmdlIFBlcm1pdA0KPkNvbm5lY3QgRGV2aWNlIFBhdGgg dG8gRm9yYmlkIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFu Z3VhZ2UgZnItRlIgICJDaGFuZ2UgUGVybWl0IENvbm5lY3QgRGV2aWNlIFBhdGggdG8NCj5Gb3Ji aWQoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfQ09OTkVDVF9GT1JCSUQgICAgICAgICAgICAgI2xh bmd1YWdlIGVuLVVTICAiRm9yYmlkIENvbm5lY3QNCj5EZXZpY2UgUGF0aCINCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiRm9yYmlkIENv bm5lY3QgRGV2aWNlIFBhdGgoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfQ09OTkVDVF9GT1JCSURf SEVMUCAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkNoYW5nZSBGb3JiaWQNCj5Db25uZWN0IERl dmljZSBQYXRoIHRvIFBlcm1pdCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQ2hhbmdlIEZvcmJpZCBDb25uZWN0IERldmljZSBQYXRo IHRvDQo+UGVybWl0KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1BSRVNTX0tFWV9DT05USU5VRSAg ICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlByZXNzIEVOVEVSIHRvDQo+Q29udGludWUsIE90aGVy IEtleSB0byBDYW5jZWwgLi4uIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjbGFuZ3VhZ2UgZnItRlIgICJQcmVzcyBFTlRFUiB0byBDb250aW51ZSwgT3RoZXIgS2V5 IHRvDQo+Q2FuY2VsIC4uLihGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9NT1ZFX1RPX0ZPUkJJRF9M SVNUICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiQXJlIFlvdSBTdXJlIHRvDQo+TW92ZSBJdCB0 byBGb3JiaWQgTGlzdD8iDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICNsYW5ndWFnZSBmci1GUiAgIkFyZSBZb3UgU3VyZSB0byBNb3ZlIEl0IHRvIEZvcmJpZA0KPkxp c3Q/KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX01PVkVfVE9fUEVSTUlUX0xJU1QgICAgICAgICAj bGFuZ3VhZ2UgZW4tVVMgICJBcmUgWW91IFN1cmUgdG8NCj5Nb3ZlIEl0IHRvIFBlcm1pdCBMaXN0 PyINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZy LUZSICAiQXJlIFlvdSBTdXJlIHRvIE1vdmUgSXQgdG8gUGVybWl0DQo+TGlzdD8oRnJlbmNoKSIN Cj4tI3N0cmluZyBTVFJfU1RST0tFX0tFWV9DT05USU5VRSAgICAgICAgI2xhbmd1YWdlIGVuLVVT ICAiUGxlYXNlIFByZXNzIEFueQ0KPktleSB0byBDb250aW51ZSAuLi4iDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlBsZWFzZSBQcmVz cyBBbnkgS2V5IHRvIENvbnRpbnVlIC4uLg0KPihGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9DUkVB VEVfUFJPRklMRV9GQUlMRUQgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJDcmVhdGUgTmV3IFVzZXIN Cj5Qcm9maWxlIEZhaWxlZCEiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICNsYW5ndWFnZSBmci1GUiAgIkNyZWF0ZSBOZXcgVXNlciBQcm9maWxlIEZhaWxlZCENCj4o RnJlbmNoKSINCj4tI3N0cmluZyBTVFJfQ1JFQVRFX1BST0ZJTEVfU1VDQ0VTUyAgICAgI2xhbmd1 YWdlIGVuLVVTICAiQ3JlYXRlIE5ldw0KPlVzZXIgUHJvZmlsZSBTdWNjZWVkISINCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQ3JlYXRl IE5ldyBVc2VyIFByb2ZpbGUgU3VjY2VlZCENCj4oRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfVVNF Ul9BTFJFQURZX0VYSVNURUQgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiVXNlciBOYW1lIEhhZA0K PkFscmVhZHkgRXhpc3RlZC4iDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICNsYW5ndWFnZSBmci1GUiAgIlVzZXIgTmFtZSBIYWQgQWxyZWFkeSBFeGlzdGVkLg0KPihG cmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9HRVRfVVNFUk5BTUVfRkFJTEVEICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgICJGYWlsZWQgVG8gR2V0DQo+VXNlciBOYW1lLiINCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiRmFpbGVkIFRvIEdldCBV c2VyIE5hbWUuIChGcmVuY2gpIg0KPi0NCj5kaWZmIC0tZ2l0DQo+YS9TZWN1cml0eVBrZy9Vc2Vy SWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5l clZmci5WZnINCj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1h bmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZw0KPmVyVmZyLlZmcg0KPmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NA0KPmluZGV4IDJjZjMzNTlmMmEuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5 UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVN YW5hZw0KPmVyVmZyLlZmcg0KPisrKyAvZGV2L251bGwNCj5AQCAtMSwyNDQgKzAsMCBAQA0KPi0v KiogQGZpbGUNCj4tICBVc2VyIFByb2ZpbGUgTWFuYWdlciBmb3Jtc2V0Lg0KPi0NCj4tQ29weXJp Z2h0IChjKSAyMDA5IC0gMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlz dHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBh dA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LQ0K Pi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4g IkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBP RiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0NCj4tKiovDQo+LQ0K Pi0jaW5jbHVkZSAiVXNlclByb2ZpbGVNYW5hZ2VyRGF0YS5oIg0KPi0NCj4tI2RlZmluZSBVU0VS X01BTkFHRVJfQ0xBU1MgICAgICAgMHgwMA0KPi0jZGVmaW5lIFVTRVJfTUFOQUdFUl9TVUJDTEFT UyAgICAweDA0DQo+LQ0KPi1mb3Jtc2V0DQo+LSAgZ3VpZCAgICAgPSBVU0VSX1BST0ZJTEVfTUFO QUdFUl9HVUlELA0KPi0gIHRpdGxlICAgID0gU1RSSU5HX1RPS0VOKFNUUl9GT1JNU0VUX1RJVExF KSwNCj4tICBoZWxwICAgICA9IFNUUklOR19UT0tFTihTVFJfVElUTEVfSEVMUCksDQo+LQ0KPi0g IC8vIFVzZXIgbWFuYWdlciBmb3JtDQo+LSAgZm9ybSBmb3JtaWQgPSBGT1JNSURfVVNFUl9NQU5B R0UsDQo+LSAgICB0aXRsZSAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX1VTRVJNQU5fVElUTEUpOw0K Pi0NCj4tICAgIGxhYmVsIExBQkVMX1VTRVJfTUFOQUdFX0ZVTkM7DQo+LSAgICBsYWJlbCBMQUJF TF9FTkQ7DQo+LQ0KPi0gICAgc3VwcHJlc3NpZiBUUlVFOw0KPi0gICAgICB0ZXh0DQo+LSAgICAg ICAgaGVscCAgID0gU1RSSU5HX1RPS0VOKFNUUl9OVUxMX1NUUklORyksDQo+LSAgICAgICAgdGV4 dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9OVUxMX1NUUklORyksDQo+LSAgICAgICAgZmxhZ3MgID0g SU5URVJBQ1RJVkUsDQo+LSAgICAgICAga2V5ICAgID0gUVVFU1RJT05JRF9VU0VSX01BTkFHRTsN Cj4tICAgIGVuZGlmOw0KPi0NCj4tICBlbmRmb3JtOw0KPi0NCj4tICAvLyBNb2RpZnkgdXNlciBw cm9maWxlIGZvcm0NCj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9NT0RJRllfVVNFUiwNCj4tICAg IHRpdGxlICAgICA9IFNUUklOR19UT0tFTihTVFJfTU9ESUZZX1VTRVJfVElUTEUpOw0KPi0NCj4t ICAgIGxhYmVsIExBQkVMX1VTRVJfTU9EX0ZVTkM7DQo+LSAgICBsYWJlbCBMQUJFTF9FTkQ7DQo+ LQ0KPi0gIGVuZGZvcm07DQo+LQ0KPi0gIC8vIERlbGV0ZSB1c2VyIHByb2ZpbGUgZm9ybQ0KPi0g IGZvcm0gZm9ybWlkID0gRk9STUlEX0RFTF9VU0VSLA0KPi0gICAgdGl0bGUgICAgID0gU1RSSU5H X1RPS0VOKFNUUl9ERUxFVEVfVVNFUl9USVRMRSk7DQo+LQ0KPi0gICAgbGFiZWwgTEFCRUxfVVNF Ul9ERUxfRlVOQzsNCj4tICAgIGxhYmVsIExBQkVMX0VORDsNCj4tDQo+LSAgICBzdWJ0aXRsZQ0K Pi0gICAgICB0ZXh0ICAgPSBTVFJJTkdfVE9LRU4oU1RSX05VTExfU1RSSU5HKTsNCj4tICBlbmRm b3JtOw0KPi0NCj4tICAvLw0KPi0gIC8vIFVzZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3JtDQo+ LSAgLy8NCj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9VU0VSX0lORk8sDQo+LSAgICB0aXRsZSAg ICAgPSBTVFJJTkdfVE9LRU4oU1RSX1VTRVJfSU5GTyk7DQo+LQ0KPi0gICAgdGV4dA0KPi0gICAg ICBoZWxwICAgPSBTVFJJTkdfVE9LRU4oU1RSX1VTRVJfTkFNRV9WQUwpLA0KPi0gICAgICB0ZXh0 ICAgPSBTVFJJTkdfVE9LRU4oU1RSX1VTRVJfTkFNRSksDQo+LSAgICAgIGZsYWdzICA9IElOVEVS QUNUSVZFLA0KPi0gICAgICBrZXkgICAgPSBLRVlfTU9ESUZZX1VTRVJfTkFNRTsNCj4tDQo+LSAg ICB0ZXh0DQo+LSAgICAgIGhlbHAgICA9IFNUUklOR19UT0tFTihTVFJfQ1JFQVRFX0RBVEVfVkFM KSwNCj4tICAgICAgdGV4dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9DUkVBVEVfREFURSk7DQo+LQ0K Pi0gICAgdGV4dA0KPi0gICAgICBoZWxwICAgPSBTVFJJTkdfVE9LRU4oU1RSX1VTQUdFX0RBVEVf VkFMKSwNCj4tICAgICAgdGV4dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9VU0FHRV9EQVRFKTsNCj4t DQo+LSAgICB0ZXh0DQo+LSAgICAgIGhlbHAgICA9IFNUUklOR19UT0tFTihTVFJfVVNBR0VfQ09V TlRfVkFMKSwNCj4tICAgICAgdGV4dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9VU0FHRV9DT1VOVCk7 DQo+LQ0KPi0gICAgbGFiZWwgTEFCRUxfVVNFUl9JTkZPX0ZVTkM7DQo+LSAgICBsYWJlbCBMQUJF TF9FTkQ7DQo+LQ0KPi0gIGVuZGZvcm07DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSWRlbnRpZnkgcG9s aWN5IG1vZGlmeSBmb3JtDQo+LSAgLy8NCj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9NT0RJRllf SVAsDQo+LSAgICB0aXRsZSAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0lERU5USUZZX1BPTElDWSk7 DQo+LQ0KPi0gICAgdGV4dA0KPi0gICAgICBoZWxwICAgPSBTVFJJTkdfVE9LRU4oU1RSX0lERU5U SUZZX1BPTElDWV9IRUxQKSwNCj4tICAgICAgdGV4dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9JREVO VElGWV9QT0xJQ1kpLA0KPi0gICAgICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfSURFTlRJ RllfUE9MSUNZX1ZBTFVFKTsNCj4tDQo+LSAgICBsYWJlbCBMQUJFTF9JUF9NT0RfRlVOQzsNCj4t ICAgIGxhYmVsIExBQkVMX0VORDsNCj4tDQo+LSAgICB0ZXh0DQo+LSAgICAgIGhlbHAgICA9IFNU UklOR19UT0tFTihTVFJfQUREX09QVElPTl9IRUxQKSwNCj4tICAgICAgdGV4dCAgID0gU1RSSU5H X1RPS0VOKFNUUl9BRERfT1BUSU9OKSwNCj4tICAgICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQo+ LSAgICAgIGtleSAgICA9IEtFWV9BRERfTE9HSUNBTF9PUDsNCj4tDQo+LSAgICBzdWJ0aXRsZQ0K Pi0gICAgICB0ZXh0ICAgPSBTVFJJTkdfVE9LRU4oU1RSX05VTExfU1RSSU5HKTsNCj4tDQo+LSAg ICB0ZXh0DQo+LSAgICAgIGhlbHAgICA9IFNUUklOR19UT0tFTihTVFJfSURFTlRJRllfU0FWRV9I RUxQKSwNCj4tICAgICAgdGV4dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9TQVZFKSwNCj4tICAgICAg ZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQo+LSAgICAgIGtleSAgICA9IEtFWV9JUF9SRVRVUk47DQo+ LQ0KPi0gIGVuZGZvcm07DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWNjZXNzIHBvbGljeSBtb2RpZnkg Zm9ybQ0KPi0gIC8vDQo+LSAgZm9ybSBmb3JtaWQgPSBGT1JNSURfTU9ESUZZX0FQLA0KPi0gICAg dGl0bGUgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9BQ0NFU1NfUE9MSUNZKTsNCj4tDQo+LSAgICBs YWJlbCBMQUJFTF9BUF9NT0RfRlVOQzsNCj4tICAgIGxhYmVsIExBQkVMX0VORDsNCj4tDQo+LSAg ICBnb3RvIEZPUk1JRF9MT0FEX0RQLA0KPi0gICAgICBwcm9tcHQgID0gU1RSSU5HX1RPS0VOKFNU Ul9MT0FEKSwNCj4tICAgICAgaGVscCAgICA9IFNUUklOR19UT0tFTihTVFJfTE9BRF9IRUxQKSwN Cj4tICAgICAgZmxhZ3MgICA9IElOVEVSQUNUSVZFLA0KPi0gICAgICBrZXkgICAgID0gS0VZX0xP QURfRFA7DQo+LQ0KPi0gICAgZ290byBGT1JNSURfQ09OTkVDVF9EUCwNCj4tICAgICAgcHJvbXB0 ICA9IFNUUklOR19UT0tFTihTVFJfQ09OTkVDVCksDQo+LSAgICAgIGhlbHAgICAgPSBTVFJJTkdf VE9LRU4oU1RSX0NPTk5FQ1RfSEVMUCksDQo+LSAgICAgIGZsYWdzICAgPSBJTlRFUkFDVElWRSwN Cj4tICAgICAga2V5ICAgICA9IEtFWV9DT05OX0RQOw0KPi0NCj4tICAgIHN1YnRpdGxlDQo+LSAg ICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfTlVMTF9TVFJJTkcpOw0KPi0NCj4tICAgIHRl eHQNCj4tICAgICAgaGVscCAgID0gU1RSSU5HX1RPS0VOKFNUUl9BQ0NFU1NfU0FWRV9IRUxQKSwN Cj4tICAgICAgdGV4dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9TQVZFKSwNCj4tICAgICAgZmxhZ3Mg ID0gSU5URVJBQ1RJVkUsDQo+LSAgICAgIGtleSAgICA9IEtFWV9BUF9SRVRVUk47DQo+LQ0KPi0g IGVuZGZvcm07DQo+LQ0KPi0gIC8vDQo+LSAgLy8gTG9hZCBkZXZpY2UgcGF0aCBmb3JtDQo+LSAg Ly8NCj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9MT0FEX0RQLA0KPi0gICAgdGl0bGUgICAgID0g U1RSSU5HX1RPS0VOKFNUUl9MT0FEKTsNCj4tDQo+LSAgICBnb3RvIEZPUk1JRF9QRVJNSVRfTE9B RF9EUCwNCj4tICAgICAgcHJvbXB0ICA9IFNUUklOR19UT0tFTihTVFJfTE9BRF9QRVJNSVQpLA0K Pi0gICAgICBoZWxwICAgID0gU1RSSU5HX1RPS0VOKFNUUl9MT0FEX1BFUk1JVF9IRUxQKSwNCj4t ICAgICAgZmxhZ3MgICA9IElOVEVSQUNUSVZFLA0KPi0gICAgICBrZXkgICAgID0gS0VZX0xPQURf UEVSTUlUOw0KPi0NCj4tICAgIGdvdG8gRk9STUlEX0ZPUkJJRF9MT0FEX0RQLA0KPi0gICAgICBw cm9tcHQgID0gU1RSSU5HX1RPS0VOKFNUUl9MT0FEX0ZPUkJJRCksDQo+LSAgICAgIGhlbHAgICAg PSBTVFJJTkdfVE9LRU4oU1RSX0xPQURfRk9SQklEX0hFTFApLA0KPi0gICAgICBmbGFncyAgID0g SU5URVJBQ1RJVkUsDQo+LSAgICAgIGtleSAgICAgPSBLRVlfTE9BRF9GT1JCSUQ7DQo+LQ0KPi0g IGVuZGZvcm07DQo+LQ0KPi0gIC8vDQo+LSAgLy8gUGVybWl0IGxvYWQgZGV2aWNlIHBhdGggZm9y bQ0KPi0gIC8vDQo+LSAgZm9ybSBmb3JtaWQgPSBGT1JNSURfUEVSTUlUX0xPQURfRFAsDQo+LSAg ICB0aXRsZSAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0xPQURfUEVSTUlUKTsNCj4tDQo+LSAgICBs YWJlbCBMQUJFTF9QRVJNSVRfTE9BRF9GVU5DOw0KPi0gICAgbGFiZWwgTEFCRUxfRU5EOw0KPi0N Cj4tICAgIHN1YnRpdGxlDQo+LSAgICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfTlVMTF9T VFJJTkcpOw0KPi0NCj4tICBlbmRmb3JtOw0KPi0NCj4tICAvLw0KPi0gIC8vIEZvcmJpZCBsb2Fk IGRldmljZSBwYXRoIGZvcm0NCj4tICAvLw0KPi0gIGZvcm0gZm9ybWlkID0gRk9STUlEX0ZPUkJJ RF9MT0FEX0RQLA0KPi0gICAgdGl0bGUgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9MT0FEX0ZPUkJJ RCk7DQo+LQ0KPi0gICAgbGFiZWwgTEFCTEVfRk9SQklEX0xPQURfRlVOQzsNCj4tICAgIGxhYmVs IExBQkVMX0VORDsNCj4tDQo+LSAgICBzdWJ0aXRsZQ0KPi0gICAgICB0ZXh0ICAgPSBTVFJJTkdf VE9LRU4oU1RSX05VTExfU1RSSU5HKTsNCj4tDQo+LSAgZW5kZm9ybTsNCj4tDQo+LSAgLy8NCj4t ICAvLyBDb25uZWN0IGRldmljZSBwYXRoIGZvcm0NCj4tICAvLw0KPi0gIGZvcm0gZm9ybWlkID0g Rk9STUlEX0NPTk5FQ1RfRFAsDQo+LSAgICB0aXRsZSAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0NP Tk5FQ1QpOw0KPi0NCj4tICAgIGdvdG8gRk9STUlEX1BFUk1JVF9DT05ORUNUX0RQLA0KPi0gICAg ICBwcm9tcHQgID0gU1RSSU5HX1RPS0VOKFNUUl9DT05ORUNUX1BFUk1JVCksDQo+LSAgICAgIGhl bHAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0NPTk5FQ1RfUEVSTUlUX0hFTFApLA0KPi0gICAgICBm bGFncyAgID0gSU5URVJBQ1RJVkUsDQo+LSAgICAgIGtleSAgICAgPSBLRVlfQ09OTkVDVF9QRVJN SVQ7DQo+LQ0KPi0gICAgZ290byBGT1JNSURfRk9SQklEX0NPTk5FQ1RfRFAsDQo+LSAgICAgIHBy b21wdCAgPSBTVFJJTkdfVE9LRU4oU1RSX0NPTk5FQ1RfRk9SQklEKSwNCj4tICAgICAgaGVscCAg ICA9IFNUUklOR19UT0tFTihTVFJfQ09OTkVDVF9GT1JCSURfSEVMUCksDQo+LSAgICAgIGZsYWdz ICAgPSBJTlRFUkFDVElWRSwNCj4tICAgICAga2V5ICAgICA9IEtFWV9DT05ORUNUX0ZPUkJJRDsN Cj4tDQo+LSAgZW5kZm9ybTsNCj4tDQo+LSAgLy8NCj4tICAvLyBQZXJtaXQgY29ubmVjdCBkZXZp Y2UgcGF0aCBmb3JtDQo+LSAgLy8NCj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9QRVJNSVRfQ09O TkVDVF9EUCwNCj4tICAgIHRpdGxlICAgICA9IFNUUklOR19UT0tFTihTVFJfQ09OTkVDVF9QRVJN SVQpOw0KPi0NCj4tICAgIHN1YnRpdGxlDQo+LSAgICAgIHRleHQgICA9IFNUUklOR19UT0tFTihT VFJfTlVMTF9TVFJJTkcpOw0KPi0NCj4tICBlbmRmb3JtOw0KPi0NCj4tICAvLw0KPi0gIC8vIEZv cmJpZCBjb25uZWN0IGRldmljZSBwYXRoIGZvcm0NCj4tICAvLw0KPi0gIGZvcm0gZm9ybWlkID0g Rk9STUlEX0ZPUkJJRF9DT05ORUNUX0RQLA0KPi0gICAgdGl0bGUgICAgID0gU1RSSU5HX1RPS0VO KFNUUl9DT05ORUNUX0ZPUkJJRCk7DQo+LQ0KPi0gICBzdWJ0aXRsZQ0KPi0gICAgIHRleHQgICA9 IFNUUklOR19UT0tFTihTVFJfTlVMTF9TVFJJTkcpOw0KPi0NCj4tICBlbmRmb3JtOw0KPi0NCj4t ZW5kZm9ybXNldDsNCj5kaWZmIC0tZ2l0DQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRp b24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTW9kaWZ5DQo+LmMNCj5iL1NlY3Vy aXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2Zp bGVNb2RpZnkNCj4uYw0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IGQxNjVlNWFl OWIuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9V c2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNb2RpZnkNCj4uYw0KPisrKyAvZGV2L251 bGwNCj5AQCAtMSwxNDc1ICswLDAgQEANCj4tLyoqIEBmaWxlDQo+LSAgVGhlIGZ1bmN0aW9ucyB0 byBtb2RpZnkgYSB1c2VyIHByb2ZpbGUuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4 LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJv Z3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBt YWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0K PkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVs bCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291 cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJ U1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1X SVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIN Cj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpbmNsdWRlICJVc2VyUHJv ZmlsZU1hbmFnZXIuaCINCj4tDQo+LUVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICBt TW9kaWZ5VXNlciA9IE5VTEw7DQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5IHVzZXIgc2VsZWN0IGZv cm0sIGNhYiBzZWxlY3QgYSB1c2VyIHRvIG1vZGlmeS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LVNl bGVjdFVzZXJUb01vZGlmeSAgKA0KPi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVT ICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgVUlOVDggICAgICAgICAgICAgICAgICAgSW5kZXg7 DQo+LSAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgVXNlcjsNCj4tICBFRklfVVNFUl9QUk9GSUxF X0hBTkRMRSBDdXJyZW50VXNlcjsNCj4tICBVSU5UMzIgICAgICAgICAgICAgICAgICBDdXJyZW50 QWNjZXNzUmlnaHQ7DQo+LSAgVk9JRCAgICAgICAgICAgICAgICAgICAgKlN0YXJ0T3BDb2RlSGFu ZGxlOw0KPi0gIFZPSUQgICAgICAgICAgICAgICAgICAgICpFbmRPcENvZGVIYW5kbGU7DQo+LSAg RUZJX0lGUl9HVUlEX0xBQkVMICAgICAgKlN0YXJ0TGFiZWw7DQo+LSAgRUZJX0lGUl9HVUlEX0xB QkVMICAgICAgKkVuZExhYmVsOw0KPi0NCj4tICAvLw0KPi0gIC8vIEluaXRpYWxpemUgdGhlIGNv bnRhaW5lciBmb3IgZHluYW1pYyBvcGNvZGVzLg0KPi0gIC8vDQo+LSAgU3RhcnRPcENvZGVIYW5k bGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4tICBBU1NFUlQgKFN0YXJ0T3BDb2Rl SGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICBFbmRPcENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0ZU9w Q29kZUhhbmRsZSAoKTsNCj4tICBBU1NFUlQgKEVuZE9wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4t DQo+LSAgLy8NCj4tICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUuDQo+LSAgLy8N Cj4tICBTdGFydExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVhdGVHdWlkT3BD b2RlICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0T3BD b2RlSGFuZGxlLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdF ZmlJZnJUaWFub0d1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m IChFRklfSUZSX0dVSURfTEFCRUwpDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOw0KPi0gIFN0YXJ0TGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVO RF9PUF9MQUJFTDsNCj4tICBTdGFydExhYmVsLT5OdW1iZXIgICAgICAgID0gTEFCRUxfVVNFUl9N T0RfRlVOQzsNCj4tDQo+LSAgRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNy ZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEVuZE9wQ29kZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv ZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7DQo+LSAgRW5kTGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9P UF9MQUJFTDsNCj4tICBFbmRMYWJlbC0+TnVtYmVyICAgICAgICA9IExBQkVMX0VORDsNCj4tDQo+ LSAgLy8NCj4tICAvLyBBZGQgZWFjaCB1c2VyIGNhbiBiZSBtb2RpZmllZC4NCj4tICAvLw0KPi0g IFVzZXIgID0gTlVMTDsNCj4tICBJbmRleCA9IDE7DQo+LSAgbVVzZXJNYW5hZ2VyLT5DdXJyZW50 IChtVXNlck1hbmFnZXIsICZDdXJyZW50VXNlcik7DQo+LSAgd2hpbGUgKFRSVUUpIHsNCj4tICAg IFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dCAobVVzZXJNYW5hZ2VyLCAmVXNlcik7DQo+ LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgIGJyZWFrOw0KPi0gICAgfQ0K Pi0NCj4tICAgIFN0YXR1cyA9IEdldEFjY2Vzc1JpZ2h0ICgmQ3VycmVudEFjY2Vzc1JpZ2h0KTsN Cj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgQ3VycmVudEFjY2Vzc1Jp Z2h0ID0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX1NFTEY7DQo+LSAgICB9DQo+LQ0KPi0g ICAgaWYgKChDdXJyZW50QWNjZXNzUmlnaHQgPT0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdF KSB8fCAoVXNlciA9PQ0KPkN1cnJlbnRVc2VyKSkgew0KPi0gICAgICBBZGRVc2VyVG9Gb3JtIChV c2VyLCAoVUlOVDE2KShLRVlfTU9ESUZZX1VTRVIgfCBLRVlfU0VMRUNUX1VTRVINCj58IEluZGV4 KSwgU3RhcnRPcENvZGVIYW5kbGUpOw0KPi0gICAgfQ0KPi0gICAgSW5kZXgrKzsNCj4tICB9DQo+ LQ0KPi0gIEhpaVVwZGF0ZUZvcm0gKA0KPi0gICAgbUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCAv LyBISUkgaGFuZGxlDQo+LSAgICAmZ1VzZXJQcm9maWxlTWFuYWdlckd1aWQsIC8vIEZvcm1zZXQg R1VJRA0KPi0gICAgRk9STUlEX01PRElGWV9VU0VSLCAgICAgICAvLyBGb3JtIElEDQo+LSAgICBT dGFydE9wQ29kZUhhbmRsZSwgICAgICAgIC8vIExhYmVsIGZvciB3aGVyZSB0byBpbnNlcnQgb3Bj b2Rlcw0KPi0gICAgRW5kT3BDb2RlSGFuZGxlICAgICAgICAgICAvLyBSZXBsYWNlIGRhdGENCj4t ICAgICk7DQo+LQ0KPi0gIEhpaUZyZWVPcENvZGVIYW5kbGUgKFN0YXJ0T3BDb2RlSGFuZGxlKTsN Cj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVIYW5kbGUpOw0KPi19DQo+LQ0KPi0N Cj4tLyoqDQo+LSAgR2V0IGFsbCB0aGUgdXNlciBpbmZvIGZyb20gbU1vZGlmeVVzZXIgaW4gdGhl IHVzZXIgbWFuYWdlciwgYW5kIHNhdmUgb24NCj50aGUNCj4tICBnbG9iYWwgdmFyaWFibGUuDQo+ LQ0KPi0qKi8NCj4tVk9JRA0KPi1HZXRBbGxVc2VySW5mbyAoDQo+LSAgVk9JRA0KPi0gICkNCj4t ew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GT19I QU5ETEUgIFVzZXJJbmZvOw0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAqSW5mbzsNCj4tICBV SU5UTiAgICAgICAgICAgICAgICAgSW5mb1NpemU7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAg IE1lbVNpemU7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgIERhdGFMZW47DQo+LQ0KPi0gIC8v DQo+LSAgLy8gSW5pdCB2YXJpYWJsZSB0byBkZWZhdWx0IHZhbHVlLg0KPi0gIC8vDQo+LSAgbVBy b3ZpZGVyQ2hvaWNlICAgICAgICAgICAgICAgICAgID0gMDsNCj4tICBtQ29ubmNldExvZ2ljYWwg ICAgICAgICAgICAgICAgICAgPSAwOw0KPi0NCj4tICBtVXNlckluZm8uQ3JlYXRlRGF0ZUV4aXN0 ICAgICAgICAgPSBGQUxTRTsNCj4tICBtVXNlckluZm8uVXNhZ2VEYXRlRXhpc3QgICAgICAgICAg PSBGQUxTRTsNCj4tICBtVXNlckluZm8uVXNhZ2VDb3VudCAgICAgICAgICAgICAgPSAwOw0KPi0N Cj4tICBtVXNlckluZm8uQWNjZXNzUG9saWN5TGVuICAgICAgICAgPSAwOw0KPi0gIG1Vc2VySW5m by5BY2Nlc3NQb2xpY3lNb2RpZmllZCAgICA9IEZBTFNFOw0KPi0gIGlmIChtVXNlckluZm8uQWNj ZXNzUG9saWN5ICE9IE5VTEwpIHsNCj4tICAgIEZyZWVQb29sIChtVXNlckluZm8uQWNjZXNzUG9s aWN5KTsNCj4tICAgIG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgPSBOVUxMOw0KPi0gIH0NCj4tICBt VXNlckluZm8uSWRlbnRpdHlQb2xpY3lMZW4gICAgICAgPSAwOw0KPi0gIG1Vc2VySW5mby5JZGVu dGl0eVBvbGljeU1vZGlmaWVkICA9IEZBTFNFOw0KPi0gIGlmIChtVXNlckluZm8uSWRlbnRpdHlQ b2xpY3kgIT0gTlVMTCkgew0KPi0gICAgRnJlZVBvb2wgKG1Vc2VySW5mby5JZGVudGl0eVBvbGlj eSk7DQo+LSAgICBtVXNlckluZm8uSWRlbnRpdHlQb2xpY3kgPSBOVUxMOw0KPi0gIH0NCj4tDQo+ LSAgLy8NCj4tICAvLyBBbGxvY2F0ZSB1c2VyIGluZm9ybWF0aW9uIG1lbW9yeS4NCj4tICAvLw0K Pi0gIE1lbVNpemUgPSBzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgNjM7DQo+LSAgSW5mbyAgICA9 IEFsbG9jYXRlWmVyb1Bvb2wgKE1lbVNpemUpOw0KPi0gIGlmIChJbmZvID09IE5VTEwpIHsNCj4t ICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCBlYWNoIHVzZXIgaW5m b3JtYXRpb24uDQo+LSAgLy8NCj4tICBVc2VySW5mbyA9IE5VTEw7DQo+LSAgd2hpbGUgKFRSVUUp IHsNCj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dEluZm8gKG1Vc2VyTWFuYWdl ciwgbU1vZGlmeVVzZXIsDQo+JlVzZXJJbmZvKTsNCj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4tICAgICAgYnJlYWs7DQo+LSAgICB9DQo+LSAgICAvLw0KPi0gICAgLy8gR2V0IGlu Zm9ybWF0aW9uLg0KPi0gICAgLy8NCj4tICAgIEluZm9TaXplICA9IE1lbVNpemU7DQo+LSAgICBT dGF0dXMgICAgPSBtVXNlck1hbmFnZXItPkdldEluZm8gKA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtTW9kaWZ5VXNlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2Vy SW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvLA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZJbmZvU2l6ZQ0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQo+LSAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxM KSB7DQo+LSAgICAgIE1lbVNpemUgPSBJbmZvU2l6ZTsNCj4tICAgICAgRnJlZVBvb2wgKEluZm8p Ow0KPi0gICAgICBJbmZvID0gQWxsb2NhdGVaZXJvUG9vbCAoTWVtU2l6ZSk7DQo+LSAgICAgIGlm IChJbmZvID09IE5VTEwpIHsNCj4tICAgICAgICByZXR1cm4gOw0KPi0gICAgICB9DQo+LQ0KPi0g ICAgICBTdGF0dXMgPSBtVXNlck1hbmFnZXItPkdldEluZm8gKA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbU1vZGlmeVVzZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2Vy SW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm8sDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmSW5mb1NpemUNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+LSAgICB9DQo+LQ0KPi0gICAgaWYgKFN0YXR1cyA9PSBFRklfU1VDQ0VT Uykgew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBEZWFsIHdpdGggZWFjaCBpbmZvcm1hdGlvbiBh Y2NvcmRpbmcgdG8gaW5mb3JtYWl0b24gdHlwZS4NCj4tICAgICAgLy8NCj4tICAgICAgRGF0YUxl biA9IEluZm8tPkluZm9TaXplIC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKTsNCj4tICAgICAgc3dp dGNoIChJbmZvLT5JbmZvVHlwZSkgew0KPi0gICAgICBjYXNlIEVGSV9VU0VSX0lORk9fTkFNRV9S RUNPUkQ6DQo+LSAgICAgICAgQ29weU1lbSAoJm1Vc2VySW5mby5Vc2VyTmFtZSwgKFVJTlQ4ICop IChJbmZvICsgMSksIERhdGFMZW4pOw0KPi0gICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgY2Fz ZSBFRklfVVNFUl9JTkZPX0NSRUFURV9EQVRFX1JFQ09SRDoNCj4tICAgICAgICBDb3B5TWVtICgm bVVzZXJJbmZvLkNyZWF0ZURhdGUsIChVSU5UOCAqKSAoSW5mbyArIDEpLCBEYXRhTGVuKTsNCj4t ICAgICAgICBtVXNlckluZm8uQ3JlYXRlRGF0ZUV4aXN0ID0gVFJVRTsNCj4tICAgICAgICBicmVh azsNCj4tDQo+LSAgICAgIGNhc2UgRUZJX1VTRVJfSU5GT19VU0FHRV9EQVRFX1JFQ09SRDoNCj4t ICAgICAgICBDb3B5TWVtICgmbVVzZXJJbmZvLlVzYWdlRGF0ZSwgKFVJTlQ4ICopIChJbmZvICsg MSksIERhdGFMZW4pOw0KPi0gICAgICAgIG1Vc2VySW5mby5Vc2FnZURhdGVFeGlzdCA9IFRSVUU7 DQo+LSAgICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgICBjYXNlIEVGSV9VU0VSX0lORk9fVVNBR0Vf Q09VTlRfUkVDT1JEOg0KPi0gICAgICAgIENvcHlNZW0gKCZtVXNlckluZm8uVXNhZ2VDb3VudCwg KFVJTlQ4ICopIChJbmZvICsgMSksIERhdGFMZW4pOw0KPi0gICAgICAgIGJyZWFrOw0KPi0NCj4t ICAgICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19QT0xJQ1lfUkVDT1JEOg0KPi0gICAgICAg IG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgPSBBbGxvY2F0ZVplcm9Qb29sIChEYXRhTGVuKTsNCj4t ICAgICAgICBpZiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeSA9PSBOVUxMKSB7DQo+LSAgICAgICAg ICBicmVhazsNCj4tICAgICAgICB9DQo+LQ0KPi0gICAgICAgIENvcHlNZW0gKG1Vc2VySW5mby5B Y2Nlc3NQb2xpY3ksIChVSU5UOCAqKSAoSW5mbyArIDEpLCBEYXRhTGVuKTsNCj4tICAgICAgICBt VXNlckluZm8uQWNjZXNzUG9saWN5TGVuID0gRGF0YUxlbjsNCj4tICAgICAgICBicmVhazsNCj4t DQo+LSAgICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lfUkVDT1JEOg0KPi0g ICAgICAgIG1Vc2VySW5mby5JZGVudGl0eVBvbGljeSA9IEFsbG9jYXRlWmVyb1Bvb2wgKERhdGFM ZW4pOw0KPi0gICAgICAgIGlmIChtVXNlckluZm8uSWRlbnRpdHlQb2xpY3kgPT0gTlVMTCkgew0K Pi0gICAgICAgICAgYnJlYWs7DQo+LSAgICAgICAgfQ0KPi0NCj4tICAgICAgICBDb3B5TWVtICht VXNlckluZm8uSWRlbnRpdHlQb2xpY3ksIChVSU5UOCAqKSAoSW5mbyArIDEpLCBEYXRhTGVuKTsN Cj4tICAgICAgICBtVXNlckluZm8uSWRlbnRpdHlQb2xpY3lMZW4gPSBEYXRhTGVuOw0KPi0gICAg ICAgIGJyZWFrOw0KPi0NCj4tICAgICAgZGVmYXVsdDoNCj4tICAgICAgICBicmVhazsNCj4tICAg ICAgfQ0KPi0gICAgfQ0KPi0gIH0NCj4tICBGcmVlUG9vbCAoSW5mbyk7DQo+LX0NCj4tDQo+LQ0K Pi0vKioNCj4tICBDb252ZXJ0IHRoZSBEYXRlIHRvIGEgc3RyaW5nLCBhbmQgdXBkYXRlIHRoZSBI aWkgZGF0YWJhc2UgRGF0ZUlEIHN0cmluZyB3aXRoDQo+aXQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0g RGF0ZSAgICAgICBQb2ludHMgdG8gdGhlIGRhdGUgdG8gYmUgY29udmVydGVkLg0KPi0gIEBwYXJh bVtpbl0gRGF0ZUlkICAgICBTdHJpbmcgSUQgaW4gdGhlIEhJSSBkYXRhYmFzZSB0byBiZSByZXBs YWNlZC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LVJlc29sdmVEYXRlICgNCj4tICBJTiBFRklfVElN RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGUsDQo+LSAgSU4gRUZJX1NU UklOR19JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVJZA0KPi0gICkNCj4tew0K Pi0gIENIQVIxNiAgKlN0cjsNCj4tICBVSU5UTiAgIERhdGVCdWZMZW47DQo+LQ0KPi0gIC8vDQo+ LSAgLy8gQ29udmVydCBkYXRlIHRvIHN0cmluZy4NCj4tICAvLw0KPi0gIERhdGVCdWZMZW4gPSA2 NDsNCj4tICBTdHIgICAgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoRGF0ZUJ1Zkxlbik7DQo+LSAg aWYgKFN0ciA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gOw0KPi0gIH0NCj4tDQo+LSAgVW5pY29k ZVNQcmludCAoDQo+LSAgICBTdHIsDQo+LSAgICBEYXRlQnVmTGVuLA0KPi0gICAgTCIlNGQtJTJk LSUyZCAiLA0KPi0gICAgRGF0ZS0+WWVhciwNCj4tICAgIERhdGUtPk1vbnRoLA0KPi0gICAgRGF0 ZS0+RGF5DQo+LSAgICApOw0KPi0NCj4tICAvLw0KPi0gIC8vIENvbnZlcnQgdGltZSB0byBzdHJp bmcuDQo+LSAgLy8NCj4tICBEYXRlQnVmTGVuIC09IFN0ckxlbiAoU3RyKTsNCj4tICBVbmljb2Rl U1ByaW50ICgNCj4tICAgIFN0ciArIFN0ckxlbiAoU3RyKSwNCj4tICAgIERhdGVCdWZMZW4sDQo+ LSAgICBMIiUyZDolMmQ6JTJkIiwNCj4tICAgIERhdGUtPkhvdXIsDQo+LSAgICBEYXRlLT5NaW51 dGUsDQo+LSAgICBEYXRlLT5TZWNvbmQNCj4tICAgICk7DQo+LQ0KPi0gIEhpaVNldFN0cmluZyAo bUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCBEYXRlSWQsIFN0ciwgTlVMTCk7DQo+LSAgRnJlZVBv b2wgKFN0cik7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBDb252ZXJ0IHRoZSBDb3VudFZhbCB0 byBhIHN0cmluZywgYW5kIHVwZGF0ZSB0aGUgSGlpIGRhdGFiYXNlIENvdW50SWQgc3RyaW5nDQo+ LSAgd2l0aCBpdC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgQ291bnRWYWwgICBUaGUgaGV4IHZhbHVl IHRvIGNvbnZlcnQuDQo+LSAgQHBhcmFtW2luXSAgQ291bnRJZCAgICBTdHJpbmcgSUQgaW4gdGhl IEhJSSBkYXRhYmFzZSB0byBiZSByZXBsYWNlZC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LVJlc29s dmVDb3VudCAoDQo+LSAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENvdW50VmFsLA0KPi0gIElOIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDb3VudElkDQo+LSAgKQ0KPi17DQo+LSAgQ0hBUjE2ICBDb3VudFsxMF07DQo+LQ0K Pi0gIFVuaWNvZGVTUHJpbnQgKENvdW50LCAyMCwgTCIlZCIsIENvdW50VmFsKTsNCj4tICBIaWlT ZXRTdHJpbmcgKG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgQ291bnRJZCwgQ291bnQsIE5VTEwp Ow0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQ29uY2F0ZW5hdGVzIG9uZSBOdWxsLXRlcm1pbmF0 ZWQgVW5pY29kZSBzdHJpbmcgdG8gYW5vdGhlciBOdWxsLQ0KPnRlcm1pbmF0ZWQNCj4tICBVbmlj b2RlIHN0cmluZy4NCj4tDQo+LSAgQHBhcmFtW2luLCBvdXRdICBTb3VyY2UxICAgICAgT24gZW50 cnksIHBvaW50IHRvIGEgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUNCj5zdHJpbmcuDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gZXhpdCwgcG9pbnQgdG8gYSBuZXcgY29uY2F0 ZW5hdGVkIFVuaWNvZGUgc3RyaW5nDQo+LSAgQHBhcmFtW2luXSAgICAgICBTb3VyY2UyICAgICAg UG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZy4NCj4tDQo+LSoqLw0K Pi1WT0lEDQo+LUFkZFN0ciAoDQo+LSAgSU4gT1VUICBDSEFSMTYgICAgICAgICAgICAgICAgICAq KlNvdXJjZTEsDQo+LSAgSU4gICAgICBDT05TVCBDSEFSMTYgICAgICAgICAgICAqU291cmNlMg0K Pi0gICkNCj4tew0KPi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICpUbXBTdHI7DQo+ LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgU3RyTGVuZ3RoOw0KPi0NCj4tICBBU1NF UlQgKFNvdXJjZTEgIT0gTlVMTCk7DQo+LSAgQVNTRVJUIChTb3VyY2UyICE9IE5VTEwpOw0KPi0N Cj4tICBpZiAoKlNvdXJjZTEgPT0gTlVMTCkgew0KPi0gICAgU3RyTGVuZ3RoID0gU3RyU2l6ZSAo U291cmNlMik7DQo+LSAgfSBlbHNlIHsNCj4tICAgIFN0ckxlbmd0aCAgPSBTdHJTaXplICgqU291 cmNlMSk7DQo+LSAgICBTdHJMZW5ndGggKz0gU3RyU2l6ZSAoU291cmNlMikgLSAyOw0KPi0gIH0N Cj4tDQo+LSAgVG1wU3RyICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFN0ckxlbmd0aCk7DQo+LSAg QVNTRVJUIChUbXBTdHIgIT0gTlVMTCk7DQo+LQ0KPi0gIGlmICgqU291cmNlMSA9PSBOVUxMKSB7 DQo+LSAgICBTdHJDcHlTIChUbXBTdHIsIFN0ckxlbmd0aCAvIHNpemVvZiAoQ0hBUjE2KSwgU291 cmNlMik7DQo+LSAgfSBlbHNlIHsNCj4tICAgIFN0ckNweVMgKFRtcFN0ciwgU3RyTGVuZ3RoIC8g c2l6ZW9mIChDSEFSMTYpLCAqU291cmNlMSk7DQo+LSAgICBGcmVlUG9vbCAoKlNvdXJjZTEpOw0K Pi0gICAgU3RyQ2F0UyAoVG1wU3RyLCBTdHJMZW5ndGggLyBzaXplb2YgKENIQVIxNiksU291cmNl Mik7DQo+LSAgfQ0KPi0NCj4tICAqU291cmNlMSA9IFRtcFN0cjsNCj4tfQ0KPi0NCj4tDQo+LS8q Kg0KPi0gIENvbnZlcnQgdGhlIGlkZW50aXR5IHBvbGljeSB0byBhIHVuaWNvZGUgc3RyaW5nIGFu ZCB1cGRhdGUgdGhlIEhpaSBkYXRhYmFzZQ0KPi0gIElwU3RyaW5nSWQgc3RyaW5nIHdpdGggaXQu DQo+LQ0KPi0gIEBwYXJhbVtpbl0gIElwICAgICAgICAgUG9pbnRzIHRvIGlkZW50aXR5IHBvbGlj eS4NCj4tICBAcGFyYW1baW5dICBJcExlbiAgICAgIFRoZSBpZGVudGl0eSBwb2xpY3kgbGVuZ3Ro Lg0KPi0gIEBwYXJhbVtpbl0gIElwU3RyaW5nSWQgU3RyaW5nIElEIGluIHRoZSBISUkgZGF0YWJh c2UgdG8gYmUgcmVwbGFjZWQuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1SZXNvbHZlSWRlbnRpdHlQ b2xpY3kgKA0KPi0gIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqSXAsDQo+LSAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElwTGVuLA0KPi0gIElOICBFRklfU1RSSU5HX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJcFN0cmluZ0lkDQo+LSAgKQ0KPi17DQo+LSAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICAgKlRtcFN0cjsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBDaGtMZW47DQo+ LSAgRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKklkZW50aXR5Ow0KPi0gIFVJTlQxNiAg ICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPi0gIENIQVIxNiAgICAgICAgICAgICAgICAg ICAgICAgICpQcm92U3RyOw0KPi0gIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgIFByb3ZJ ZDsNCj4tICBFRklfSElJX0hBTkRMRSAgICAgICAgICAgICAgICBIaWlIYW5kbGU7DQo+LSAgRUZJ X1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgKlVzZXJDcmVkZW50aWFsOw0KPi0NCj4tICBUbXBT dHIgPSBOVUxMOw0KPi0NCj4tICAvLw0KPi0gIC8vIFJlc29sdmUgZWFjaCBwb2xpY3kuDQo+LSAg Ly8NCj4tICBDaGtMZW4gID0gMDsNCj4tICB3aGlsZSAoQ2hrTGVuIDwgSXBMZW4pIHsNCj4tICAg IElkZW50aXR5ID0gKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICopIChJcCArIENoa0xl bik7DQo+LSAgICBzd2l0Y2ggKElkZW50aXR5LT5UeXBlKSB7DQo+LSAgICBjYXNlIEVGSV9VU0VS X0lORk9fSURFTlRJVFlfRkFMU0U6DQo+LSAgICAgIEFkZFN0ciAoJlRtcFN0ciwgTCJGYWxzZSIp Ow0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlf VFJVRToNCj4tICAgICAgQWRkU3RyICgmVG1wU3RyLCBMIk5vbmUiKTsNCj4tICAgICAgYnJlYWs7 DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX05PVDoNCj4tICAgICAgQWRk U3RyICgmVG1wU3RyLCBMIiEgIik7DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIGNhc2UgRUZJ X1VTRVJfSU5GT19JREVOVElUWV9BTkQ6DQo+LSAgICAgIEFkZFN0ciAoJlRtcFN0ciwgTCIgJiYg Iik7DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElU WV9PUjoNCj4tICAgICAgQWRkU3RyICgmVG1wU3RyLCBMIiB8fCAiKTsNCj4tICAgICAgYnJlYWs7 DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0NSRURFTlRJQUxfVFlQRToN Cj4tICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVByb3ZpZGVySW5mby0+Q291bnQ7IElu ZGV4KyspIHsNCj4tICAgICAgICBVc2VyQ3JlZGVudGlhbCA9IG1Qcm92aWRlckluZm8tPlByb3Zp ZGVyW0luZGV4XTsNCj4tICAgICAgICBpZiAoQ29tcGFyZUd1aWQgKChFRklfR1VJRCAqKSAoSWRl bnRpdHkgKyAxKSwgJlVzZXJDcmVkZW50aWFsLT5UeXBlKSkgew0KPi0gICAgICAgICAgVXNlckNy ZWRlbnRpYWwtPlRpdGxlICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJDcmVk ZW50aWFsLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJkhpaUhhbmRsZSwNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZQcm92SWQNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7DQo+LSAgICAgICAgICBQcm92U3RyID0gSGlpR2V0U3RyaW5nIChIaWlIYW5kbGUs IFByb3ZJZCwgTlVMTCk7DQo+LSAgICAgICAgICBpZiAoUHJvdlN0ciAhPSBOVUxMKSB7DQo+LSAg ICAgICAgICAgIEFkZFN0ciAoJlRtcFN0ciwgUHJvdlN0cik7DQo+LSAgICAgICAgICAgIEZyZWVQ b29sIChQcm92U3RyKTsNCj4tICAgICAgICAgIH0NCj4tICAgICAgICAgIGJyZWFrOw0KPi0gICAg ICAgIH0NCj4tICAgICAgfQ0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VS X0lORk9fSURFTlRJVFlfQ1JFREVOVElBTF9QUk9WSURFUjoNCj4tICAgICAgZm9yIChJbmRleCA9 IDA7IEluZGV4IDwgbVByb3ZpZGVySW5mby0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgICAgICBV c2VyQ3JlZGVudGlhbCA9IG1Qcm92aWRlckluZm8tPlByb3ZpZGVyW0luZGV4XTsNCj4tICAgICAg ICBpZiAoQ29tcGFyZUd1aWQgKChFRklfR1VJRCAqKSAoSWRlbnRpdHkgKyAxKSwgJlVzZXJDcmVk ZW50aWFsLQ0KPj5JZGVudGlmaWVyKSkgew0KPi0gICAgICAgICAgVXNlckNyZWRlbnRpYWwtPlRp dGxlICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJDcmVkZW50aWFsLA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkhpaUhhbmRsZSwNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZQcm92SWQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ LSAgICAgICAgICBQcm92U3RyID0gSGlpR2V0U3RyaW5nIChIaWlIYW5kbGUsIFByb3ZJZCwgTlVM TCk7DQo+LSAgICAgICAgICBpZiAoUHJvdlN0ciAhPSBOVUxMKSB7DQo+LSAgICAgICAgICAgIEFk ZFN0ciAoJlRtcFN0ciwgUHJvdlN0cik7DQo+LSAgICAgICAgICAgIEZyZWVQb29sIChQcm92U3Ry KTsNCj4tICAgICAgICAgIH0NCj4tICAgICAgICAgIGJyZWFrOw0KPi0gICAgICAgIH0NCj4tICAg ICAgfQ0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tDQo+LSAgICBDaGtMZW4gKz0gSWRlbnRp dHktPkxlbmd0aDsNCj4tICB9DQo+LQ0KPi0gIGlmIChUbXBTdHIgIT0gTlVMTCkgew0KPi0gICAg SGlpU2V0U3RyaW5nIChtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUsIElwU3RyaW5nSWQsIFRtcFN0 ciwgTlVMTCk7DQo+LSAgICBGcmVlUG9vbCAoVG1wU3RyKTsNCj4tICB9DQo+LX0NCj4tDQo+LQ0K Pi0vKioNCj4tICBEaXNwbGF5IG1vZGlmeSB1c2VyIGluZm9ybWF0aW9uIGZvcm0uDQo+LQ0KPi0g IFRoaXMgZm9ybSBkaXNwbGF5cywgdXNlcm5hbWUsIGNyZWF0ZSBEYXRlLCB1c2FnZSBkYXRlLCB1 c2FnZSBjb3VudCwgaWRlbnRpdHkNCj5wb2xpY3ksDQo+LSAgYW5kIGFjY2VzcyBwb2xpY3kuDQo+ LQ0KPi0gIEBwYXJhbVtpbl0gVXNlckluZGV4ICAgICAgIFRoZSBpbmRleCBvZiB0aGUgdXNlciBp biBkaXNwbGF5IGxpc3QgdG8gbW9kaWZ5Lg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tTW9kaWZ5VXNl ckluZm8gKA0KPi0gIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVc2VySW5kZXgNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgU3Rh dHVzOw0KPi0gIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICBDdXJyZW50VXNlcjsNCj4tICBVSU5U MzIgICAgICAgICAgICAgICAgICAgQ3VycmVudEFjY2Vzc1JpZ2h0Ow0KPi0gIFZPSUQgICAgICAg ICAgICAgICAgICAgICAqU3RhcnRPcENvZGVIYW5kbGU7DQo+LSAgVk9JRCAgICAgICAgICAgICAg ICAgICAgICpFbmRPcENvZGVIYW5kbGU7DQo+LSAgRUZJX0lGUl9HVUlEX0xBQkVMICAgICAgICpT dGFydExhYmVsOw0KPi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAgICAgICAqRW5kTGFiZWw7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gSW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyIGZvciBkeW5hbWljIG9wY29k ZXMuDQo+LSAgLy8NCj4tICBTdGFydE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFu ZGxlICgpOw0KPi0gIEFTU0VSVCAoU3RhcnRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+LQ0KPi0g IEVuZE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gIEFTU0VS VCAoRW5kT3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICAvLw0KPi0gIC8vIENyZWF0ZSBI aWkgRXh0ZW5kIExhYmVsIE9wQ29kZS4NCj4tICAvLw0KPi0gIFN0YXJ0TGFiZWwgPSAoRUZJX0lG Ul9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgU3RhcnRMYWJl bC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPi0gIFN0YXJ0TGFi ZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9VU0VSX0lORk9fRlVOQzsNCj4tDQo+LSAgRW5kTGFi ZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZE9wQ29kZUhhbmRsZSwNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgRW5kTGFiZWwt PkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICBFbmRMYWJlbC0+ TnVtYmVyICAgICAgICA9IExBQkVMX0VORDsNCj4tDQo+LSAgLy8NCj4tICAvLyBGaW5kIHRoZSB1 c2VyIHByb2ZpbGUgdG8gYmUgbW9kaWZpZWQuDQo+LSAgLy8NCj4tICBtTW9kaWZ5VXNlciA9IE5V TEw7DQo+LSAgU3RhdHVzICAgICAgPSBtVXNlck1hbmFnZXItPkdldE5leHQgKG1Vc2VyTWFuYWdl ciwgJm1Nb2RpZnlVc2VyKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBy ZXR1cm4gOw0KPi0gIH0NCj4tDQo+LSAgd2hpbGUgKFVzZXJJbmRleCA+IDEpIHsNCj4tICAgIFN0 YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dCAobVVzZXJNYW5hZ2VyLCAmbU1vZGlmeVVzZXIp Ow0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICByZXR1cm4gOw0KPi0g ICAgfQ0KPi0gICAgVXNlckluZGV4LS07DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCB1 c2VyIHByb2ZpbGUgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBHZXRBbGxVc2VySW5mbyAoKTsN Cj4tDQo+LSAgLy8NCj4tICAvLyBVcGRhdGUgdXNlciBuYW1lLg0KPi0gIEhpaVNldFN0cmluZyAo DQo+LSAgICBtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUsDQo+LSAgICBTVFJJTkdfVE9LRU4gKFNU Ul9VU0VSX05BTUVfVkFMKSwNCj4tICAgIG1Vc2VySW5mby5Vc2VyTmFtZSwNCj4tICAgIE5VTEwN Cj4tICAgICk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gVXBkYXRlIGNyZWF0ZSBkYXRlLg0KPi0gIC8v DQo+LSAgaWYgKG1Vc2VySW5mby5DcmVhdGVEYXRlRXhpc3QpIHsNCj4tICAgIFJlc29sdmVEYXRl ICgmbVVzZXJJbmZvLkNyZWF0ZURhdGUsIFNUUklOR19UT0tFTg0KPihTVFJfQ1JFQVRFX0RBVEVf VkFMKSk7DQo+LSAgfSBlbHNlIHsNCj4tICAgIEhpaVNldFN0cmluZyAoDQo+LSAgICAgIG1DYWxs YmFja0luZm8tPkhpaUhhbmRsZSwNCj4tICAgICAgU1RSSU5HX1RPS0VOIChTVFJfQ1JFQVRFX0RB VEVfVkFMKSwNCj4tICAgICAgTCIiLA0KPi0gICAgICBOVUxMDQo+LSAgICAgICk7DQo+LSAgfQ0K Pi0NCj4tICAvLw0KPi0gIC8vIEFkZCB1c2FnZSBkYXRlLg0KPi0gIC8vDQo+LSAgaWYgKG1Vc2Vy SW5mby5Vc2FnZURhdGVFeGlzdCkgew0KPi0gICAgUmVzb2x2ZURhdGUgKCZtVXNlckluZm8uVXNh Z2VEYXRlLCBTVFJJTkdfVE9LRU4NCj4oU1RSX1VTQUdFX0RBVEVfVkFMKSk7DQo+LSAgfSBlbHNl IHsNCj4tICAgIEhpaVNldFN0cmluZyAoDQo+LSAgICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRs ZSwNCj4tICAgICAgU1RSSU5HX1RPS0VOIChTVFJfVVNBR0VfREFURV9WQUwpLA0KPi0gICAgICBM IiIsDQo+LSAgICAgIE5VTEwNCj4tICAgICAgKTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8g QWRkIHVzYWdlIGNvdW50Lg0KPi0gIC8vDQo+LSAgUmVzb2x2ZUNvdW50ICgoVUlOVDMyKSBtVXNl ckluZm8uVXNhZ2VDb3VudCwgU1RSSU5HX1RPS0VODQo+KFNUUl9VU0FHRV9DT1VOVF9WQUwpKTsN Cj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgaWRlbnRpdHkgcG9saWN5Lg0KPi0gIC8vDQo+LSAgbVVz ZXJNYW5hZ2VyLT5DdXJyZW50IChtVXNlck1hbmFnZXIsICZDdXJyZW50VXNlcik7DQo+LSAgaWYg KG1Nb2RpZnlVc2VyID09IEN1cnJlbnRVc2VyKSB7DQo+LSAgICBSZXNvbHZlSWRlbnRpdHlQb2xp Y3kgKA0KPi0gICAgICBtVXNlckluZm8uSWRlbnRpdHlQb2xpY3ksDQo+LSAgICAgIG1Vc2VySW5m by5JZGVudGl0eVBvbGljeUxlbiwNCj4tICAgICAgU1RSSU5HX1RPS0VOIChTVFJfSURFTlRJRllf UE9MSUNZX1ZBTCkNCj4tICAgICAgKTsNCj4tICAgIEhpaUNyZWF0ZUdvdG9PcENvZGUgKA0KPi0g ICAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gQ29udGFpbmVyIGZvciBvcGNvZGVzDQo+LSAgICAgIEZPUk1JRF9NT0RJRllfSVAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUYXJnZXQgRm9ybSBJRA0KPi0gICAgICBT VFJJTkdfVE9LRU4gKFNUUl9JREVOVElGWV9QT0xJQ1kpLCAgICAgICAgICAgICAgICAgLy8gUHJv bXB0IHRleHQNCj4tICAgICAgU1RSSU5HX1RPS0VOIChTVFJfSURFTlRJRllfUE9MSUNZX1ZBTCks ICAgICAgICAgICAgIC8vIEhlbHAgdGV4dA0KPi0gICAgICBFRklfSUZSX0ZMQUdfQ0FMTEJBQ0ss ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVlc3Rpb24gZmxhZw0KPi0gICAgICBL RVlfTU9ESUZZX1VTRVIgfCBLRVlfU0VMRUNUX1VTRVIgfCBLRVlfTU9ESUZZX0lQICAgLy8gUXVl c3Rpb24NCj5JRA0KPi0gICAgICApOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgYWNj ZXNzIHBvbGljeS4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IEdldEFjY2Vzc1JpZ2h0ICgmQ3VycmVu dEFjY2Vzc1JpZ2h0KTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBDdXJy ZW50QWNjZXNzUmlnaHQgPSBFRklfVVNFUl9JTkZPX0FDQ0VTU19FTlJPTExfU0VMRjsNCj4tICB9 DQo+LQ0KPi0gIGlmIChDdXJyZW50QWNjZXNzUmlnaHQgPT0gRUZJX1VTRVJfSU5GT19BQ0NFU1Nf TUFOQUdFKSB7DQo+LSAgICBIaWlDcmVhdGVHb3RvT3BDb2RlICgNCj4tICAgICAgU3RhcnRPcENv ZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5lciBm b3Igb3Bjb2Rlcw0KPi0gICAgICBGT1JNSURfTU9ESUZZX0FQLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8gVGFyZ2V0IEZvcm0gSUQNCj4tICAgICAgU1RSSU5HX1RPS0VOIChT VFJfQUNDRVNTX1BPTElDWSksICAgICAgICAgICAgICAgICAgIC8vIFByb21wdCB0ZXh0DQo+LSAg ICAgIFNUUklOR19UT0tFTiAoU1RSX05VTExfU1RSSU5HKSwgICAgICAgICAgICAgICAgICAgICAv LyBIZWxwIHRleHQNCj4tICAgICAgRUZJX0lGUl9GTEFHX0NBTExCQUNLLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIFF1ZXN0aW9uIGZsYWcNCj4tICAgICAgS0VZX01PRElGWV9VU0VS IHwgS0VZX1NFTEVDVF9VU0VSIHwgS0VZX01PRElGWV9BUCAgIC8vIFF1ZXN0aW9uDQo+SUQNCj4t ICAgICAgKTsNCj4tICB9DQo+LQ0KPi0gIEhpaVVwZGF0ZUZvcm0gKA0KPi0gICAgbUNhbGxiYWNr SW5mby0+SGlpSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSElJIGhhbmRs ZQ0KPi0gICAgJmdVc2VyUHJvZmlsZU1hbmFnZXJHdWlkLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gRm9ybXNldCBHVUlEDQo+LSAgICBGT1JNSURfVVNFUl9JTkZPLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JtIElEDQo+LSAgICBTdGFydE9wQ29kZUhh bmRsZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMYWJlbA0KPi0gICAg RW5kT3BDb2RlSGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g UmVwbGFjZSBkYXRhDQo+LSAgICApOw0KPi0NCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFy dE9wQ29kZUhhbmRsZSk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRW5kT3BDb2RlSGFuZGxl KTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEdldCBhbGwgdGhlIGFjY2VzcyBwb2xpY3kgaW5m byBmcm9tIGN1cnJlbnQgdXNlciBpbmZvLCBhbmQgc2F2ZSBpbiB0aGUgZ2xvYmFsDQo+LSAgdmFy aWFibGUuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1SZXNvbHZlQWNjZXNzUG9saWN5ICgNCj4tICBW T0lEDQo+LSAgKQ0KPi17DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgT2ZmU2V0 Ow0KPi0gIEVGSV9VU0VSX0lORk9fQUNDRVNTX0NPTlRST0wgIENvbnRyb2w7DQo+LSAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgVmFsTGVuOw0KPi0gIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICpBY2Nlc3NEYXRhOw0KPi0NCj4tICAvLw0KPi0gIC8vIFNldCBkZWZhdWx0IHZh bHVlDQo+LSAgLy8NCj4tICBtQWNjZXNzSW5mby5BY2Nlc3NSaWdodCAgICAgICA9IEVGSV9VU0VS X0lORk9fQUNDRVNTX0VOUk9MTF9TRUxGOw0KPi0gIG1BY2Nlc3NJbmZvLkFjY2Vzc1NldHVwICAg ICAgID0gQUNDRVNTX1NFVFVQX1JFU1RSSUNURUQ7DQo+LSAgbUFjY2Vzc0luZm8uQWNjZXNzQm9v dE9yZGVyICAgPQ0KPkVGSV9VU0VSX0lORk9fQUNDRVNTX0JPT1RfT1JERVJfSU5TRVJUOw0KPi0N Cj4tICBtQWNjZXNzSW5mby5Mb2FkUGVybWl0TGVuICAgICA9IDA7DQo+LSAgbUFjY2Vzc0luZm8u TG9hZEZvcmJpZExlbiAgICAgPSAwOw0KPi0gIG1BY2Nlc3NJbmZvLkNvbm5lY3RQZXJtaXRMZW4g ID0gMDsNCj4tICBtQWNjZXNzSW5mby5Db25uZWN0Rm9yYmlkTGVuICA9IDA7DQo+LQ0KPi0gIC8v DQo+LSAgLy8gR2V0IGVhY2ggdXNlciBhY2Nlc3MgcG9saWN5Lg0KPi0gIC8vDQo+LSAgT2ZmU2V0 ID0gMDsNCj4tICB3aGlsZSAoT2ZmU2V0IDwgbVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbikgew0K Pi0gICAgQ29weU1lbSAoJkNvbnRyb2wsIG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQs IHNpemVvZiAoQ29udHJvbCkpOw0KPi0gICAgVmFsTGVuID0gQ29udHJvbC5TaXplIC0gc2l6ZW9m IChDb250cm9sKTsNCj4tICAgIHN3aXRjaCAoQ29udHJvbC5UeXBlKSB7DQo+LSAgICBjYXNlIEVG SV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9TRUxGOg0KPi0gICAgICBtQWNjZXNzSW5mby5BY2Nl c3NSaWdodCA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9TRUxGOw0KPi0gICAgICBicmVh azsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9PVEhFUlM6DQo+ LSAgICAgIG1BY2Nlc3NJbmZvLkFjY2Vzc1JpZ2h0ID0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5S T0xMX09USEVSUzsNCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZP X0FDQ0VTU19NQU5BR0U6DQo+LSAgICAgIG1BY2Nlc3NJbmZvLkFjY2Vzc1JpZ2h0ID0gRUZJX1VT RVJfSU5GT19BQ0NFU1NfTUFOQUdFOw0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVG SV9VU0VSX0lORk9fQUNDRVNTX1NFVFVQOg0KPi0gICAgICBBY2Nlc3NEYXRhID0gbVVzZXJJbmZv LkFjY2Vzc1BvbGljeSArIE9mZlNldCArIHNpemVvZiAoQ29udHJvbCk7DQo+LSAgICAgIGlmIChD b21wYXJlR3VpZCAoKEVGSV9HVUlEICopIEFjY2Vzc0RhdGEsDQo+JmdFZmlVc2VySW5mb0FjY2Vz c1NldHVwTm9ybWFsR3VpZCkpIHsNCj4tICAgICAgICBtQWNjZXNzSW5mby5BY2Nlc3NTZXR1cCA9 IEFDQ0VTU19TRVRVUF9OT1JNQUw7DQo+LSAgICAgIH0gZWxzZSBpZiAoQ29tcGFyZUd1aWQgKChF RklfR1VJRCAqKSBBY2Nlc3NEYXRhLA0KPiZnRWZpVXNlckluZm9BY2Nlc3NTZXR1cFJlc3RyaWN0 ZWRHdWlkKSkgew0KPi0gICAgICAgIG1BY2Nlc3NJbmZvLkFjY2Vzc1NldHVwID0gQUNDRVNTX1NF VFVQX1JFU1RSSUNURUQ7DQo+LSAgICAgIH0gZWxzZSBpZiAoQ29tcGFyZUd1aWQgKChFRklfR1VJ RCAqKSBBY2Nlc3NEYXRhLA0KPiZnRWZpVXNlckluZm9BY2Nlc3NTZXR1cEFkbWluR3VpZCkpIHsN Cj4tICAgICAgICBtQWNjZXNzSW5mby5BY2Nlc3NTZXR1cCA9IEFDQ0VTU19TRVRVUF9BRE1JTjsN Cj4tICAgICAgfQ0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9f QUNDRVNTX0JPT1RfT1JERVI6DQo+LSAgICAgIEFjY2Vzc0RhdGEgPSBtVXNlckluZm8uQWNjZXNz UG9saWN5ICsgT2ZmU2V0ICsgc2l6ZW9mIChDb250cm9sKTsNCj4tICAgICAgQ29weU1lbSAoJm1B Y2Nlc3NJbmZvLkFjY2Vzc0Jvb3RPcmRlciwgQWNjZXNzRGF0YSwgc2l6ZW9mIChVSU5UMzIpKTsN Cj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19GT1JC SURfTE9BRDoNCj4tICAgICAgaWYgKG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgIT0gTlVMTCkgew0K Pi0gICAgICAgIEZyZWVQb29sIChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkKTsNCj4tICAgICAgfQ0K Pi0NCj4tICAgICAgbUFjY2Vzc0luZm8uTG9hZEZvcmJpZCA9IEFsbG9jYXRlWmVyb1Bvb2wgKFZh bExlbik7DQo+LSAgICAgIGlmIChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkICE9IE5VTEwpIHsNCj4t ICAgICAgICBBY2Nlc3NEYXRhID0gbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCArIHNp emVvZiAoQ29udHJvbCk7DQo+LSAgICAgICAgQ29weU1lbSAobUFjY2Vzc0luZm8uTG9hZEZvcmJp ZCwgQWNjZXNzRGF0YSwgVmFsTGVuKTsNCj4tICAgICAgICBtQWNjZXNzSW5mby5Mb2FkRm9yYmlk TGVuID0gVmFsTGVuOw0KPi0gICAgICB9DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIGNhc2Ug RUZJX1VTRVJfSU5GT19BQ0NFU1NfUEVSTUlUX0xPQUQ6DQo+LSAgICAgIGlmIChtQWNjZXNzSW5m by5Mb2FkUGVybWl0ICE9IE5VTEwpIHsNCj4tICAgICAgICBGcmVlUG9vbCAobUFjY2Vzc0luZm8u TG9hZFBlcm1pdCk7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIG1BY2Nlc3NJbmZvLkxvYWRQZXJt aXQgPSBBbGxvY2F0ZVplcm9Qb29sIChWYWxMZW4pOw0KPi0gICAgICBpZiAobUFjY2Vzc0luZm8u TG9hZFBlcm1pdCAhPSBOVUxMKSB7DQo+LSAgICAgICAgQWNjZXNzRGF0YSA9IG1Vc2VySW5mby5B Y2Nlc3NQb2xpY3kgKyBPZmZTZXQgKyBzaXplb2YgKENvbnRyb2wpOw0KPi0gICAgICAgIENvcHlN ZW0gKG1BY2Nlc3NJbmZvLkxvYWRQZXJtaXQsIEFjY2Vzc0RhdGEsIFZhbExlbik7DQo+LSAgICAg ICAgbUFjY2Vzc0luZm8uTG9hZFBlcm1pdExlbiA9IFZhbExlbjsNCj4tICAgICAgfQ0KPi0gICAg ICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX0ZPUkJJRF9DT05O RUNUOg0KPi0gICAgICBpZiAobUFjY2Vzc0luZm8uQ29ubmVjdEZvcmJpZCAhPSBOVUxMKSB7DQo+ LSAgICAgICAgRnJlZVBvb2wgKG1BY2Nlc3NJbmZvLkNvbm5lY3RGb3JiaWQpOw0KPi0gICAgICB9 DQo+LQ0KPi0gICAgICBtQWNjZXNzSW5mby5Db25uZWN0Rm9yYmlkID0gQWxsb2NhdGVaZXJvUG9v bCAoVmFsTGVuKTsNCj4tICAgICAgaWYgKG1BY2Nlc3NJbmZvLkNvbm5lY3RGb3JiaWQgIT0gTlVM TCkgew0KPi0gICAgICAgIEFjY2Vzc0RhdGEgPSBtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2Zm U2V0ICsgc2l6ZW9mIChDb250cm9sKTsNCj4tICAgICAgICBDb3B5TWVtIChtQWNjZXNzSW5mby5D b25uZWN0Rm9yYmlkLCBBY2Nlc3NEYXRhLCBWYWxMZW4pOw0KPi0gICAgICAgIG1BY2Nlc3NJbmZv LkNvbm5lY3RGb3JiaWRMZW4gPSBWYWxMZW47DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+ LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19QRVJNSVRfQ09OTkVDVDoNCj4tICAg ICAgaWYgKG1BY2Nlc3NJbmZvLkNvbm5lY3RQZXJtaXQgIT0gTlVMTCkgew0KPi0gICAgICAgIEZy ZWVQb29sIChtQWNjZXNzSW5mby5Db25uZWN0UGVybWl0KTsNCj4tICAgICAgfQ0KPi0NCj4tICAg ICAgbUFjY2Vzc0luZm8uQ29ubmVjdFBlcm1pdCA9IEFsbG9jYXRlWmVyb1Bvb2wgKFZhbExlbik7 DQo+LSAgICAgIGlmIChtQWNjZXNzSW5mby5Db25uZWN0UGVybWl0ICE9IE5VTEwpIHsNCj4tICAg ICAgICBBY2Nlc3NEYXRhID0gbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCArIHNpemVv ZiAoQ29udHJvbCk7DQo+LSAgICAgICAgQ29weU1lbSAobUFjY2Vzc0luZm8uQ29ubmVjdFBlcm1p dCwgQWNjZXNzRGF0YSwgVmFsTGVuKTsNCj4tICAgICAgICBtQWNjZXNzSW5mby5Db25uZWN0UGVy bWl0TGVuID0gVmFsTGVuOw0KPi0gICAgICB9DQo+LSAgICAgIGJyZWFrOw0KPi0gICAgfQ0KPi0N Cj4tICAgIE9mZlNldCArPSBDb250cm9sLlNpemU7DQo+LSAgfQ0KPi19DQo+LQ0KPi0NCj4tLyoq DQo+LSAgRmluZCB0aGUgc3BlY2lmaWVkIGluZm8gaW4gVXNlciBwcm9maWxlIGJ5IHRoZSBJbmZv VHlwZS4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgIEhhbmRsZSBvZiB0aGUgdXNl ciB3aG9zZSBpbmZvcm1hdGlvbiB3aWxsIGJlDQo+c2VhcmNoZWQuDQo+LSAgQHBhcmFtW2luXSAg SW5mb1R5cGUgICAgIFRoZSB1c2VyIGluZm9ybWF0aW9uIHR5cGUgdG8gZmluZC4NCj4tICBAcGFy YW1bb3V0XSBVc2VySW5mbyAgICAgUG9pbnRzIHRvIHVzZXIgaW5mb3JtYXRpb24gaGFuZGxlIGZv dW5kLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgRmluZCB0aGUgdXNlciBpbmZv cm1hdGlvbiBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgIEZhaWwg dG8gZmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+ LUZpbmRJbmZvQnlUeXBlICgNCj4tICBJTiAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgVXNlciwNCj4tICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSW5mb1R5cGUsDQo+LSAgT1VUIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAg ICAgICAgICAgICAgICAgICpVc2VySW5mbw0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAg U3RhdHVzOw0KPi0gIEVGSV9VU0VSX0lORk8gKkluZm87DQo+LSAgVUlOVE4gICAgICAgICBJbmZv U2l6ZTsNCj4tICBVSU5UTiAgICAgICAgIE1lbVNpemU7DQo+LQ0KPi0gIGlmIChVc2VySW5mbyA9 PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4t DQo+LSAgKlVzZXJJbmZvID0gTlVMTDsNCj4tICAvLw0KPi0gIC8vIEFsbG9jYXRlIHVzZXIgaW5m b3JtYXRpb24gbWVtb3J5Lg0KPi0gIC8vDQo+LSAgTWVtU2l6ZSA9IHNpemVvZiAoRUZJX1VTRVJf SU5GTykgKyA2MzsNCj4tICBJbmZvICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoTWVtU2l6ZSk7DQo+ LSAgaWYgKEluZm8gPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBHZXQgZWFjaCB1c2VyIGluZm9ybWF0aW9uLg0K Pi0gIC8vDQo+LSAgd2hpbGUgKFRSVUUpIHsNCj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+ R2V0TmV4dEluZm8gKG1Vc2VyTWFuYWdlciwgVXNlciwgVXNlckluZm8pOw0KPi0gICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tICAgIC8vDQo+ LSAgICAvLyBHZXQgaW5mb3JtYXRpb24uDQo+LSAgICAvLw0KPi0gICAgSW5mb1NpemUgID0gTWVt U2l6ZTsNCj4tICAgIFN0YXR1cyAgICA9IG1Vc2VyTWFuYWdlci0+R2V0SW5mbyAoDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLA0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKlVzZXJJbmZvLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm8sDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkluZm9TaXplDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsNCj4tICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9U T09fU01BTEwpIHsNCj4tICAgICAgTWVtU2l6ZSA9IEluZm9TaXplOw0KPi0gICAgICBGcmVlUG9v bCAoSW5mbyk7DQo+LSAgICAgIEluZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChNZW1TaXplKTsNCj4t ICAgICAgaWYgKEluZm8gPT0gTlVMTCkgew0KPi0gICAgICAgIHJldHVybiBFRklfT1VUX09GX1JF U09VUkNFUzsNCj4tICAgICAgfQ0KPi0gICAgICBTdGF0dXMgPSBtVXNlck1hbmFnZXItPkdldElu Zm8gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlciwNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpVc2VySW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEluZm8sDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5mb1NpemUNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICB9DQo+LSAgICBpZiAoU3RhdHVz ID09IEVGSV9TVUNDRVNTKSB7DQo+LSAgICAgIGlmIChJbmZvLT5JbmZvVHlwZSA9PSBJbmZvVHlw ZSkgew0KPi0gICAgICAgIGJyZWFrOw0KPi0gICAgICB9DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4t ICBGcmVlUG9vbCAoSW5mbyk7DQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8q Kg0KPi0gIERpc3BsYXkgbW9kaWZ5IHVzZXIgYWNjZXNzIHBvbGljeSBmb3JtLg0KPi0NCj4tICBJ biB0aGlzIGZvcm0sIGFjY2VzcyByaWdodCwgYWNjZXNzIHNldHVwIGFuZCBhY2Nlc3MgYm9vdCBv cmRlciBhcmUgZHluYW1pY2FsbHkNCj4tICBhZGRlZC4gTG9hZCBkZXZpY2VwYXRoIGFuZCBjb25u ZWN0IGRldmljZXBhdGggYXJlIGRpc3BsYXllZCB0b28uDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1N b2RpZHlBY2Nlc3NQb2xpY3kgKA0KPi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBWT0lEICAgICAg ICAgICAgICAgICpTdGFydE9wQ29kZUhhbmRsZTsNCj4tICBWT0lEICAgICAgICAgICAgICAgICpF bmRPcENvZGVIYW5kbGU7DQo+LSAgVk9JRCAgICAgICAgICAgICAgICAqT3B0aW9uc09wQ29kZUhh bmRsZTsNCj4tICBFRklfSUZSX0dVSURfTEFCRUwgICpTdGFydExhYmVsOw0KPi0gIEVGSV9JRlJf R1VJRF9MQUJFTCAgKkVuZExhYmVsOw0KPi0gIFZPSUQgICAgICAgICAgICAgICAgKkRlZmF1bHRP cENvZGVIYW5kbGU7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5pdGlhbGl6ZSB0aGUgY29udGFpbmVy IGZvciBkeW5hbWljIG9wY29kZXMuDQo+LSAgLy8NCj4tICBTdGFydE9wQ29kZUhhbmRsZSA9IEhp aUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gIEFTU0VSVCAoU3RhcnRPcENvZGVIYW5kbGUg IT0gTlVMTCk7DQo+LQ0KPi0gIEVuZE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFu ZGxlICgpOw0KPi0gIEFTU0VSVCAoRW5kT3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICAv Lw0KPi0gIC8vIENyZWF0ZSBIaWkgRXh0ZW5kIExhYmVsIE9wQ29kZS4NCj4tICAvLw0KPi0gIFN0 YXJ0TGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRPcENvZGVIYW5k bGUsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUlmclRp YW5vR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9J RlJfR1VJRF9MQUJFTCkNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7DQo+LSAgU3RhcnRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xB QkVMOw0KPi0gIFN0YXJ0TGFiZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9BUF9NT0RfRlVOQzsN Cj4tDQo+LSAgRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRP cENvZGUgKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZE9wQ29k ZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUlm clRpYW5vR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lG Ul9HVUlEX0xBQkVMKQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 DQo+LSAgRW5kTGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsN Cj4tICBFbmRMYWJlbC0+TnVtYmVyICAgICAgICA9IExBQkVMX0VORDsNCj4tDQo+LQ0KPi0gIC8v DQo+LSAgLy8gUmVzb2x2ZSBhY2Nlc3MgcG9saWN5IGluZm9ybWF0aW9uLg0KPi0gIC8vDQo+LSAg UmVzb2x2ZUFjY2Vzc1BvbGljeSAoKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgYWNjZXNzIHJp Z2h0IG9uZS1vZi1jb2RlLg0KPi0gIC8vDQo+LSAgT3B0aW9uc09wQ29kZUhhbmRsZSA9IEhpaUFs bG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gIEFTU0VSVCAoT3B0aW9uc09wQ29kZUhhbmRsZSAh PSBOVUxMKTsNCj4tICBEZWZhdWx0T3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5k bGUgKCk7DQo+LSAgQVNTRVJUIChEZWZhdWx0T3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4t ICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoDQo+LSAgICBPcHRpb25zT3BDb2RlSGFuZGxl LA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJfTk9STUFMKSwNCj4tICAgIDAsDQo+LSAgICBFRklf SUZSX05VTUVSSUNfU0laRV8xLA0KPi0gICAgRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX1NF TEYNCj4tICAgICk7DQo+LQ0KPi0gIEhpaUNyZWF0ZU9uZU9mT3B0aW9uT3BDb2RlICgNCj4tICAg IE9wdGlvbnNPcENvZGVIYW5kbGUsDQo+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9FTlJPTEwpLA0K Pi0gICAgMCwNCj4tICAgIEVGSV9JRlJfTlVNRVJJQ19TSVpFXzEsDQo+LSAgICBFRklfVVNFUl9J TkZPX0FDQ0VTU19FTlJPTExfT1RIRVJTDQo+LSAgICApOw0KPi0NCj4tICBIaWlDcmVhdGVPbmVP Zk9wdGlvbk9wQ29kZSAoDQo+LSAgICBPcHRpb25zT3BDb2RlSGFuZGxlLA0KPi0gICAgU1RSSU5H X1RPS0VOIChTVFJfTUFOQUdFKSwNCj4tICAgIDAsDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0la RV8xLA0KPi0gICAgRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFDQo+LSAgICApOw0KPi0NCj4t ICBIaWlDcmVhdGVEZWZhdWx0T3BDb2RlICgNCj4tICAgIERlZmF1bHRPcENvZGVIYW5kbGUsDQo+ LSAgICBFRklfSElJX0RFRkFVTFRfQ0xBU1NfU1RBTkRBUkQsDQo+LSAgICBFRklfSUZSX05VTUVS SUNfU0laRV8xLA0KPi0gICAgbUFjY2Vzc0luZm8uQWNjZXNzUmlnaHQNCj4tICAgICk7DQo+LQ0K Pi0gIEhpaUNyZWF0ZU9uZU9mT3BDb2RlICgNCj4tICAgIFN0YXJ0T3BDb2RlSGFuZGxlLCAgICAg ICAgICAgICAgICAgICAgLy8gQ29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQgb3Bjb2Rlcw0K Pi0gICAgS0VZX01PRElGWV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwgS0VZX01PRElGWV9BUCB8 DQo+S0VZX01PRElGWV9SSUdIVCwgLy8gUXVlc3Rpb24gSUQNCj4tICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFyU3RvcmUgSUQNCj4tICAgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0IGluIEJ1ZmZlciBTdG9yYWdlDQo+ LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9BQ0NFU1NfUklHSFQpLCAgICAgIC8vIFF1ZXN0aW9uIHBy b21wdCB0ZXh0DQo+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9BQ0NFU1NfUklHSFRfSEVMUCksIC8v IFF1ZXN0aW9uIGhlbHAgdGV4dA0KPi0gICAgRUZJX0lGUl9GTEFHX0NBTExCQUNLLCAgICAgICAg ICAgICAgICAvLyBRdWVzdGlvbiBmbGFnDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLCAg ICAgICAgICAgICAgIC8vIERhdGEgdHlwZSBvZiBRdWVzdGlvbiBWYWx1ZQ0KPi0gICAgT3B0aW9u c09wQ29kZUhhbmRsZSwgICAgICAgICAgICAgICAgICAvLyBPcHRpb24gT3Bjb2RlIGxpc3QNCj4t ICAgIERlZmF1bHRPcENvZGVIYW5kbGUgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBPcGNv ZGUNCj4tICAgICk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRGVmYXVsdE9wQ29kZUhhbmRs ZSk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoT3B0aW9uc09wQ29kZUhhbmRsZSk7DQo+LQ0K Pi0NCj4tICAvLw0KPi0gIC8vIEFkZCBzZXR1cCB0eXBlIG9uZS1vZi1jb2RlLg0KPi0gIC8vDQo+ LSAgT3B0aW9uc09wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0g IEFTU0VSVCAoT3B0aW9uc09wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4tICBEZWZhdWx0T3BDb2Rl SGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgQVNTRVJUIChEZWZhdWx0 T3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29k ZSAoDQo+LSAgICBPcHRpb25zT3BDb2RlSGFuZGxlLA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJf UkVTVFJJQ1RFRCksDQo+LSAgICAwLA0KPi0gICAgRUZJX0lGUl9OVU1FUklDX1NJWkVfMSwNCj4t ICAgIEFDQ0VTU19TRVRVUF9SRVNUUklDVEVEDQo+LSAgICApOw0KPi0NCj4tICBIaWlDcmVhdGVP bmVPZk9wdGlvbk9wQ29kZSAoDQo+LSAgICBPcHRpb25zT3BDb2RlSGFuZGxlLA0KPi0gICAgU1RS SU5HX1RPS0VOIChTVFJfTk9STUFMKSwNCj4tICAgIDAsDQo+LSAgICBFRklfSUZSX05VTUVSSUNf U0laRV8xLA0KPi0gICAgQUNDRVNTX1NFVFVQX05PUk1BTA0KPi0gICAgKTsNCj4tDQo+LSAgSGlp Q3JlYXRlT25lT2ZPcHRpb25PcENvZGUgKA0KPi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4t ICAgIFNUUklOR19UT0tFTiAoU1RSX0FETUlOKSwNCj4tICAgIDAsDQo+LSAgICBFRklfSUZSX05V TUVSSUNfU0laRV8xLA0KPi0gICAgQUNDRVNTX1NFVFVQX0FETUlODQo+LSAgICApOw0KPi0NCj4t ICBIaWlDcmVhdGVEZWZhdWx0T3BDb2RlICgNCj4tICAgIERlZmF1bHRPcENvZGVIYW5kbGUsDQo+ LSAgICBFRklfSElJX0RFRkFVTFRfQ0xBU1NfU1RBTkRBUkQsDQo+LSAgICBFRklfSUZSX05VTUVS SUNfU0laRV8xLA0KPi0gICAgbUFjY2Vzc0luZm8uQWNjZXNzU2V0dXANCj4tICAgICk7DQo+LQ0K Pi0gIEhpaUNyZWF0ZU9uZU9mT3BDb2RlICgNCj4tICAgIFN0YXJ0T3BDb2RlSGFuZGxlLCAgICAg ICAgICAgICAgICAgICAgLy8gQ29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQgb3Bjb2Rlcw0K Pi0gICAgS0VZX01PRElGWV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwgS0VZX01PRElGWV9BUCB8 DQo+S0VZX01PRElGWV9TRVRVUCwgLy8gUXVlc3Rpb24gSUQNCj4tICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFyU3RvcmUgSUQNCj4tICAgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0IGluIEJ1ZmZlciBTdG9yYWdlDQo+ LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9BQ0NFU1NfU0VUVVApLCAgICAgIC8vIFF1ZXN0aW9uIHBy b21wdCB0ZXh0DQo+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9BQ0NFU1NfU0VUVVBfSEVMUCksIC8v IFF1ZXN0aW9uIGhlbHAgdGV4dA0KPi0gICAgRUZJX0lGUl9GTEFHX0NBTExCQUNLLCAgICAgICAg ICAgICAgICAvLyBRdWVzdGlvbiBmbGFnDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLCAg ICAgICAgICAgICAgIC8vIERhdGEgdHlwZSBvZiBRdWVzdGlvbiBWYWx1ZQ0KPi0gICAgT3B0aW9u c09wQ29kZUhhbmRsZSwgICAgICAgICAgICAgICAgICAvLyBPcHRpb24gT3Bjb2RlIGxpc3QNCj4t ICAgIERlZmF1bHRPcENvZGVIYW5kbGUgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBPcGNv ZGUNCj4tICAgICk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRGVmYXVsdE9wQ29kZUhhbmRs ZSk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoT3B0aW9uc09wQ29kZUhhbmRsZSk7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gQWRkIGJvb3Qgb3JkZXIgb25lLW9mLWNvZGUuDQo+LSAgLy8NCj4tICBP cHRpb25zT3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgQVNT RVJUIChPcHRpb25zT3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0gIERlZmF1bHRPcENvZGVIYW5k bGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4tICBBU1NFUlQgKERlZmF1bHRPcENv ZGVIYW5kbGUgIT0gTlVMTCk7DQo+LQ0KPi0gIEhpaUNyZWF0ZU9uZU9mT3B0aW9uT3BDb2RlICgN Cj4tICAgIE9wdGlvbnNPcENvZGVIYW5kbGUsDQo+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9JTlNF UlQpLA0KPi0gICAgMCwNCj4tICAgIEVGSV9JRlJfTlVNRVJJQ19TSVpFXzQsDQo+LSAgICBFRklf VVNFUl9JTkZPX0FDQ0VTU19CT09UX09SREVSX0lOU0VSVA0KPi0gICAgKTsNCj4tDQo+LSAgSGlp Q3JlYXRlT25lT2ZPcHRpb25PcENvZGUgKA0KPi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4t ICAgIFNUUklOR19UT0tFTiAoU1RSX0FQUEVORCksDQo+LSAgICAwLA0KPi0gICAgRUZJX0lGUl9O VU1FUklDX1NJWkVfNCwNCj4tICAgIEVGSV9VU0VSX0lORk9fQUNDRVNTX0JPT1RfT1JERVJfQVBQ RU5EDQo+LSAgICApOw0KPi0NCj4tICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoDQo+LSAg ICBPcHRpb25zT3BDb2RlSGFuZGxlLA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJfUkVQTEFDRSks DQo+LSAgICAwLA0KPi0gICAgRUZJX0lGUl9OVU1FUklDX1NJWkVfNCwNCj4tICAgIEVGSV9VU0VS X0lORk9fQUNDRVNTX0JPT1RfT1JERVJfUkVQTEFDRQ0KPi0gICAgKTsNCj4tDQo+LSAgSGlpQ3Jl YXRlT25lT2ZPcHRpb25PcENvZGUgKA0KPi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4tICAg IFNUUklOR19UT0tFTiAoU1RSX05PREVGQVVMVCksDQo+LSAgICAwLA0KPi0gICAgRUZJX0lGUl9O VU1FUklDX1NJWkVfNCwNCj4tICAgIEVGSV9VU0VSX0lORk9fQUNDRVNTX0JPT1RfT1JERVJfTk9E RUZBVUxUDQo+LSAgICApOw0KPi0NCj4tICBIaWlDcmVhdGVEZWZhdWx0T3BDb2RlICgNCj4tICAg IERlZmF1bHRPcENvZGVIYW5kbGUsDQo+LSAgICBFRklfSElJX0RFRkFVTFRfQ0xBU1NfU1RBTkRB UkQsDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV80LA0KPi0gICAgbUFjY2Vzc0luZm8uQWNj ZXNzQm9vdE9yZGVyDQo+LSAgICApOw0KPi0NCj4tICBIaWlDcmVhdGVPbmVPZk9wQ29kZSAoDQo+ LSAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAgICAgICAgICAgICAgICAvLyBDb250YWluZXIgZm9y IGR5bmFtaWMgY3JlYXRlZCBvcGNvZGVzDQo+LSAgICBLRVlfTU9ESUZZX1VTRVIgfCBLRVlfU0VM RUNUX1VTRVIgfCBLRVlfTU9ESUZZX0FQIHwNCj5LRVlfTU9ESUZZX0JPT1QsIC8vIFF1ZXN0aW9u IElEDQo+LSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYXJTdG9y ZSBJRA0KPi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0 IGluIEJ1ZmZlciBTdG9yYWdlDQo+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9CT09SX09SREVSKSwg ICAgICAvLyBRdWVzdGlvbiBwcm9tcHQgdGV4dA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJfQk9P VF9PUkRFUl9IRUxQKSwgLy8gUXVlc3Rpb24gaGVscCB0ZXh0DQo+LSAgICBFRklfSUZSX0ZMQUdf Q0FMTEJBQ0ssICAgICAgICAgICAgICAvLyBRdWVzdGlvbiBmbGFnDQo+LSAgICBFRklfSUZSX05V TUVSSUNfU0laRV8xLCAgICAgICAgICAgICAvLyBEYXRhIHR5cGUgb2YgUXVlc3Rpb24gVmFsdWUN Cj4tICAgIE9wdGlvbnNPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgIC8vIE9wdGlvbiBPcGNv ZGUgbGlzdA0KPi0gICAgRGVmYXVsdE9wQ29kZUhhbmRsZSAgICAgICAgICAgICAgICAgLy8gRGVm YXVsdCBPcGNvZGUNCj4tICAgICk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRGVmYXVsdE9w Q29kZUhhbmRsZSk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoT3B0aW9uc09wQ29kZUhhbmRs ZSk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gVXBkYXRlIEZvcm0uDQo+LSAgLy8NCj4tICBIaWlVcGRh dGVGb3JtICgNCj4tICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgICAgICAgICAgIC8vIEhJ SSBoYW5kbGUNCj4tICAgICZnVXNlclByb2ZpbGVNYW5hZ2VyR3VpZCwgICAgICAgICAgIC8vIEZv cm1zZXQgR1VJRA0KPi0gICAgRk9STUlEX01PRElGWV9BUCwgICAgICAgICAgICAgICAgICAgLy8g Rm9ybSBJRA0KPi0gICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgLy8gTGFi ZWwgZm9yIHdoZXJlIHRvIGluc2VydCBvcGNvZGVzDQo+LSAgICBFbmRPcENvZGVIYW5kbGUgICAg ICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGRhdGENCj4tICAgICk7DQo+LQ0KPi0gIEhpaUZy ZWVPcENvZGVIYW5kbGUgKFN0YXJ0T3BDb2RlSGFuZGxlKTsNCj4tICBIaWlGcmVlT3BDb2RlSGFu ZGxlIChFbmRPcENvZGVIYW5kbGUpOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRXhwYW5kIGFj Y2VzcyBwb2xpY3kgbWVtb3J5IHNpemUuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gVmFsaWRMZW4gICAg ICAgVGhlIHZhbGlkIGFjY2VzcyBwb2xpY3kgbGVuZ3RoLg0KPi0gIEBwYXJhbVtpbl0gRXhwYW5k TGVuICAgICAgVGhlIGxlbmd0aCB0aGF0IGlzIG5lZWRlZCB0byBleHBhbmQuDQo+LQ0KPi0qKi8N Cj4tVk9JRA0KPi1FeHBhbmRNZW1vcnkgKA0KPi0gIElOICAgICAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWYWxpZExlbiwNCj4tICBJTiAgICAgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5kTGVuDQo+LSAgKQ0KPi17DQo+LSAgVUlOVDgg Kk1lbTsNCj4tICBVSU5UTiBMZW47DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRXhwYW5kIG1lbW9yeS4N Cj4tICAvLw0KPi0gIExlbiA9IG1Vc2VySW5mby5BY2Nlc3NQb2xpY3lMZW4gKyAoRXhwYW5kTGVu IC8gNjQgKyAxKSAqIDY0Ow0KPi0gIE1lbSA9IEFsbG9jYXRlWmVyb1Bvb2wgKExlbik7DQo+LSAg QVNTRVJUIChNZW0gIT0gTlVMTCk7DQo+LQ0KPi0gIGlmIChtVXNlckluZm8uQWNjZXNzUG9saWN5 ICE9IE5VTEwpIHsNCj4tICAgIENvcHlNZW0gKE1lbSwgbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSwg VmFsaWRMZW4pOw0KPi0gICAgRnJlZVBvb2wgKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kpOw0KPi0g IH0NCj4tDQo+LSAgbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSAgICA9IE1lbTsNCj4tICBtVXNlcklu Zm8uQWNjZXNzUG9saWN5TGVuID0gTGVuOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgR2V0IHRo ZSB1c2VybmFtZSBmcm9tIHVzZXIgaW5wdXQsIGFuZCB1cGRhdGUgdXNlcm5hbWUgc3RyaW5nIGlu IHRoZSBIaWkNCj4tICBkYXRhYmFzZSB3aXRoIGl0Lg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tTW9k aWZ5VXNlck5hbWUgKA0KPi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAg ICAgICAgICBTdGF0dXM7DQo+LSAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgVXNlck5hbWVbVVNF Ul9OQU1FX0xFTkdUSF07DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgTGVuOw0KPi0gIEVG SV9JTlBVVF9LRVkgICAgICAgICAgIEtleTsNCj4tICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICBV c2VySW5mbzsNCj4tICBFRklfVVNFUl9JTkZPICAgICAgICAgICAqSW5mbzsNCj4tICBFRklfVVNF Ul9QUk9GSUxFX0hBTkRMRSBUZW1wVXNlcjsNCj4tDQo+LSAgLy8NCj4tICAvLyBHZXQgdGhlIG5l dyB1c2VyIG5hbWUuDQo+LSAgLy8NCj4tICBMZW4gPSBzaXplb2YgKFVzZXJOYW1lKTsNCj4tICBT dGF0dXMgPSBHZXRVc2VyTmFtZUlucHV0ICgmTGVuLCBVc2VyTmFtZSk7DQo+LSAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPi0gICAgaWYgKFN0YXR1cyAhPSBFRklfQUJPUlRFRCkgew0KPi0g ICAgICBDcmVhdGVQb3BVcCAoDQo+LSAgICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNLR1JP VU5EX0JMVUUsDQo+LSAgICAgICAgJktleSwNCj4tICAgICAgICBMIkZhaWxlZCBUbyBHZXQgVXNl ciBOYW1lLiIsDQo+LSAgICAgICAgTCIiLA0KPi0gICAgICAgIEwiUGxlYXNlIFByZXNzIEFueSBL ZXkgdG8gQ29udGludWUgLi4uIiwNCj4tICAgICAgICBOVUxMDQo+LSAgICAgICAgKTsNCj4tICAg IH0NCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHdoZXRo ZXIgdGhlIHVzZXJuYW1lIGhhZCBiZWVuIHVzZWQgb3Igbm90Lg0KPi0gIC8vDQo+LSAgSW5mbyA9 IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBMZW4pOw0KPi0gIGlm IChJbmZvID09IE5VTEwpIHsNCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICBJbmZvLT5J bmZvVHlwZSAgICA9IEVGSV9VU0VSX0lORk9fTkFNRV9SRUNPUkQ7DQo+LSAgSW5mby0+SW5mb0F0 dHJpYnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPi0gICAgICAgICAg ICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19QVUJMSUMgfA0KPi0gICAgICAgICAgICAgICAgICAg ICAgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+LSAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlO VDMyKSAoc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIExlbik7DQo+LSAgQ29weU1lbSAoKFVJTlQ4 ICopIChJbmZvICsgMSksIFVzZXJOYW1lLCBMZW4pOw0KPi0NCj4tICBUZW1wVXNlciAgPSBOVUxM Ow0KPi0gIFN0YXR1cyAgICA9IG1Vc2VyTWFuYWdlci0+RmluZCAoDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJlRlbXBVc2VyLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvLA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmZvLT5JbmZvU2l6ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOw0KPi0gIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBDcmVhdGVQb3BV cCAoDQo+LSAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPi0gICAg ICAmS2V5LA0KPi0gICAgICBMIlRoZSBVc2VyIE5hbWUgSGFkIEJlZW4gVXNlZC4iLA0KPi0gICAg ICBMIiIsDQo+LSAgICAgIEwiUGxlYXNlIFVzZSBPdGhlciBVc2VyIE5hbWUiLA0KPi0gICAgICBO VUxMDQo+LSAgICAgICk7DQo+LSAgICBGcmVlUG9vbCAoSW5mbyk7DQo+LSAgICByZXR1cm4gOw0K Pi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBVcGRhdGUgdXNlcm5hbWUgZGlzcGxheSBpbiB0aGUg Zm9ybS4NCj4tICAvLw0KPi0gIENvcHlNZW0gKG1Vc2VySW5mby5Vc2VyTmFtZSwgVXNlck5hbWUs IExlbik7DQo+LSAgSGlpU2V0U3RyaW5nICgNCj4tICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRs ZSwNCj4tICAgIFNUUklOR19UT0tFTiAoU1RSX1VTRVJfTkFNRV9WQUwpLA0KPi0gICAgbVVzZXJJ bmZvLlVzZXJOYW1lLA0KPi0gICAgTlVMTA0KPi0gICAgKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBT YXZlIHRoZSB1c2VyIG5hbWUuDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBGaW5kSW5mb0J5VHlwZSAo bU1vZGlmeVVzZXIsIEVGSV9VU0VSX0lORk9fTkFNRV9SRUNPUkQsDQo+JlVzZXJJbmZvKTsNCj4t ICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgbVVzZXJNYW5hZ2VyLT5TZXRJbmZv ICgNCj4tICAgICAgICAgICAgICAgICAgICBtVXNlck1hbmFnZXIsDQo+LSAgICAgICAgICAgICAg ICAgICAgbU1vZGlmeVVzZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgJlVzZXJJbmZvLA0KPi0g ICAgICAgICAgICAgICAgICAgIEluZm8sDQo+LSAgICAgICAgICAgICAgICAgICAgSW5mby0+SW5m b1NpemUNCj4tICAgICAgICAgICAgICAgICAgICApOw0KPi0gIH0NCj4tICBGcmVlUG9vbCAoSW5m byk7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5IHRoZSBmb3JtIG9mIHRoZSBtb2Rp ZnlpbmcgdXNlciBpZGVudGl0eSBwb2xpY3kuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1Nb2RpZnlJ ZGVudGl0eVBvbGljeSAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIFVJTlROICAgICAgICAg ICAgICAgSW5kZXg7DQo+LSAgQ0hBUjE2ICAgICAgICAgICAgICAqUHJvdlN0cjsNCj4tICBFRklf U1RSSU5HX0lEICAgICAgIFByb3ZJRDsNCj4tICBFRklfSElJX0hBTkRMRSAgICAgIEhpaUhhbmRs ZTsNCj4tICBWT0lEICAgICAgICAgICAgICAgICpPcHRpb25zT3BDb2RlSGFuZGxlOw0KPi0gIFZP SUQgICAgICAgICAgICAgICAgKlN0YXJ0T3BDb2RlSGFuZGxlOw0KPi0gIFZPSUQgICAgICAgICAg ICAgICAgKkVuZE9wQ29kZUhhbmRsZTsNCj4tICBFRklfSUZSX0dVSURfTEFCRUwgICpTdGFydExh YmVsOw0KPi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAgKkVuZExhYmVsOw0KPi0NCj4tICAvLw0KPi0g IC8vIEluaXRpYWxpemUgdGhlIGNvbnRhaW5lciBmb3IgZHluYW1pYyBvcGNvZGVzLg0KPi0gIC8v DQo+LSAgU3RhcnRPcENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4t ICBBU1NFUlQgKFN0YXJ0T3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICBFbmRPcENvZGVI YW5kbGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4tICBBU1NFUlQgKEVuZE9wQ29k ZUhhbmRsZSAhPSBOVUxMKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBM YWJlbCBPcENvZGUuDQo+LSAgLy8NCj4tICBTdGFydExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJF TCAqKSBIaWlDcmVhdGVHdWlkT3BDb2RlICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlLA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gIFN0YXJ0TGFiZWwtPkV4dGVuZE9w Q29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICBTdGFydExhYmVsLT5OdW1iZXIg ICAgICAgID0gTEFCRUxfSVBfTU9EX0ZVTkM7DQo+LQ0KPi0gIEVuZExhYmVsID0gKEVGSV9JRlJf R1VJRF9MQUJFTCAqKSBIaWlDcmVhdGVHdWlkT3BDb2RlICgNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFbmRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gIEVuZExhYmVsLT5FeHRlbmRPcENvZGUg ID0gRUZJX0lGUl9FWFRFTkRfT1BfTEFCRUw7DQo+LSAgRW5kTGFiZWwtPk51bWJlciAgICAgICAg PSBMQUJFTF9FTkQ7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWRkIGNyZWRlbnRpYWwgcHJvdmlkZXJz DQo+LSAgLy8uDQo+LSAgaWYgKG1Qcm92aWRlckluZm8tPkNvdW50ID4gMCkgew0KPi0gICAgT3B0 aW9uc09wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gICAgQVNT RVJUIChPcHRpb25zT3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICAgIC8vDQo+LSAgICAv LyBBZGQgY3JlZGVudGlhbCBwcm92aWRlciBPcHRpb24gT3BDb2RlLg0KPi0gICAgLy8NCj4tICAg IGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qcm92aWRlckluZm8tPkNvdW50OyBJbmRleCsrKSB7 DQo+LSAgICAgIG1Qcm92aWRlckluZm8tPlByb3ZpZGVyW0luZGV4XS0+VGl0bGUgKA0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVByb3ZpZGVySW5mby0+UHJvdmlk ZXJbSW5kZXhdLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkhp aUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm92 SUQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAg IFByb3ZTdHIgPSBIaWlHZXRTdHJpbmcgKEhpaUhhbmRsZSwgUHJvdklELCBOVUxMKTsNCj4tICAg ICAgUHJvdklEICA9IEhpaVNldFN0cmluZyAobUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCAwLCBQ cm92U3RyLCBOVUxMKTsNCj4tICAgICAgRnJlZVBvb2wgKFByb3ZTdHIpOw0KPi0gICAgICBpZiAo UHJvdklEID09IDApIHsNCj4tICAgICAgICByZXR1cm4gOw0KPi0gICAgICB9DQo+LQ0KPi0gICAg ICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoDQo+LSAgICAgICAgT3B0aW9uc09wQ29kZUhh bmRsZSwNCj4tICAgICAgICBQcm92SUQsDQo+LSAgICAgICAgMCwNCj4tICAgICAgICBFRklfSUZS X05VTUVSSUNfU0laRV8xLA0KPi0gICAgICAgIChVSU5UOCkgSW5kZXgNCj4tICAgICAgICApOw0K Pi0gICAgfQ0KPi0NCj4tICAgIEhpaUNyZWF0ZU9uZU9mT3BDb2RlICgNCj4tICAgICAgU3RhcnRP cENvZGVIYW5kbGUsICAgICAgICAgICAgICAgIC8vIENvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVh dGVkIG9wY29kZXMNCj4tICAgICAgS0VZX01PRElGWV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwg S0VZX01PRElGWV9JUCB8DQo+S0VZX01PRElGWV9QUk9WLCAgLy8gUXVlc3Rpb24gSUQNCj4tICAg ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZhclN0b3JlIElEDQo+LSAg ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQgaW4gQnVmZmVy IFN0b3JhZ2UNCj4tICAgICAgU1RSSU5HX1RPS0VOIChTVFJfUFJPVklERVIpLCAgICAgIC8vIFF1 ZXN0aW9uIHByb21wdCB0ZXh0DQo+LSAgICAgIFNUUklOR19UT0tFTiAoU1RSX1BST1ZJREVSX0hF TFApLCAvLyBRdWVzdGlvbiBoZWxwIHRleHQNCj4tICAgICAgRUZJX0lGUl9GTEFHX0NBTExCQUNL LCAgICAgICAgICAgIC8vIFF1ZXN0aW9uIGZsYWcNCj4tICAgICAgRUZJX0lGUl9OVU1FUklDX1NJ WkVfMSwgICAgICAgICAgIC8vIERhdGEgdHlwZSBvZiBRdWVzdGlvbiBWYWx1ZQ0KPi0gICAgICBP cHRpb25zT3BDb2RlSGFuZGxlLCAgICAgICAgICAgICAgLy8gT3B0aW9uIE9wY29kZSBsaXN0DQo+ LSAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IE9wY29k ZSBpcyBOVUxsDQo+LSAgICAgICk7DQo+LQ0KPi0gICAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoT3B0 aW9uc09wQ29kZUhhbmRsZSk7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEFkZCBsb2dpY2Fs IGNvbm5lY3RvciBPcHRpb24gT3BDb2RlLg0KPi0gIC8vDQo+LSAgT3B0aW9uc09wQ29kZUhhbmRs ZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gIEFTU0VSVCAoT3B0aW9uc09wQ29k ZUhhbmRsZSAhPSBOVUxMKTsNCj4tDQo+LSAgSGlpQ3JlYXRlT25lT2ZPcHRpb25PcENvZGUgKA0K Pi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4tICAgIFNUUklOR19UT0tFTiAoU1RSX0FORF9D T04pLA0KPi0gICAgMCwNCj4tICAgIEVGSV9JRlJfTlVNRVJJQ19TSVpFXzEsDQo+LSAgICAwDQo+ LSAgICApOw0KPi0NCj4tICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoDQo+LSAgICBPcHRp b25zT3BDb2RlSGFuZGxlLA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJfT1JfQ09OKSwNCj4tICAg IDAsDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLA0KPi0gICAgMQ0KPi0gICAgKTsNCj4t DQo+LSAgSGlpQ3JlYXRlT25lT2ZPcENvZGUgKA0KPi0gICAgU3RhcnRPcENvZGVIYW5kbGUsICAg ICAgICAgICAgICAgICAgLy8gQ29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQgb3Bjb2Rlcw0K Pi0gICAgS0VZX01PRElGWV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwgS0VZX01PRElGWV9JUCB8 DQo+S0VZX01PRElGWV9DT05OLCAgLy8gUXVlc3Rpb24gSUQNCj4tICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIFZhclN0b3JlIElEDQo+LSAgICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQgaW4gQnVmZmVyIFN0b3JhZ2UNCj4tICAg IFNUUklOR19UT0tFTiAoU1RSX0NPTk5FQ1RPUiksICAgICAgIC8vIFF1ZXN0aW9uIHByb21wdCB0 ZXh0DQo+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9DT05ORUNUT1JfSEVMUCksICAvLyBRdWVzdGlv biBoZWxwIHRleHQNCj4tICAgIEVGSV9JRlJfRkxBR19DQUxMQkFDSywgICAgICAgICAgICAgIC8v IFF1ZXN0aW9uIGZsYWcNCj4tICAgIEVGSV9JRlJfTlVNRVJJQ19TSVpFXzEsICAgICAgICAgICAg IC8vIERhdGEgdHlwZSBvZiBRdWVzdGlvbiBWYWx1ZQ0KPi0gICAgT3B0aW9uc09wQ29kZUhhbmRs ZSwgICAgICAgICAgICAgICAgLy8gT3B0aW9uIE9wY29kZSBsaXN0DQo+LSAgICBOVUxMICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IE9wY29kZSBpcyBOVUxsDQo+LSAg ICApOw0KPi0NCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChPcHRpb25zT3BDb2RlSGFuZGxlKTsN Cj4tDQo+LSAgLy8NCj4tICAvLyBVcGRhdGUgaWRlbnRpdHkgcG9saWN5IGluIHRoZSBmb3JtLg0K Pi0gIC8vDQo+LSAgUmVzb2x2ZUlkZW50aXR5UG9saWN5ICgNCj4tICAgIG1Vc2VySW5mby5JZGVu dGl0eVBvbGljeSwNCj4tICAgIG1Vc2VySW5mby5JZGVudGl0eVBvbGljeUxlbiwNCj4tICAgIFNU UklOR19UT0tFTiAoU1RSX0lERU5USUZZX1BPTElDWV9WQUxVRSkNCj4tICAgICk7DQo+LQ0KPi0g IGlmIChtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3kgIT0gTlVMTCkgew0KPi0gICAgRnJlZVBv b2wgKG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeSk7DQo+LSAgICBtVXNlckluZm8uTmV3SWRl bnRpdHlQb2xpY3kgICAgICAgICA9IE5VTEw7DQo+LSAgICBtVXNlckluZm8uTmV3SWRlbnRpdHlQ b2xpY3lMZW4gICAgICA9IDA7DQo+LSAgICBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lNb2Rp ZmllZCA9IEZBTFNFOw0KPi0gIH0NCj4tICBtUHJvdmlkZXJDaG9pY2UgPSAwOw0KPi0gIG1Db25u Y2V0TG9naWNhbCA9IDA7DQo+LQ0KPi0gIEhpaVVwZGF0ZUZvcm0gKA0KPi0gICAgbUNhbGxiYWNr SW5mby0+SGlpSGFuZGxlLCAvLyBISUkgaGFuZGxlDQo+LSAgICAmZ1VzZXJQcm9maWxlTWFuYWdl ckd1aWQsIC8vIEZvcm1zZXQgR1VJRA0KPi0gICAgRk9STUlEX01PRElGWV9JUCwgICAgICAgICAv LyBGb3JtIElEDQo+LSAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAgICAgIC8vIExhYmVsIGZvciB3 aGVyZSB0byBpbnNlcnQgb3Bjb2Rlcw0KPi0gICAgRW5kT3BDb2RlSGFuZGxlICAgICAgICAgICAv LyBSZXBsYWNlIGRhdGENCj4tICAgICk7DQo+LQ0KPi0gIEhpaUZyZWVPcENvZGVIYW5kbGUgKFN0 YXJ0T3BDb2RlSGFuZGxlKTsNCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVIYW5k bGUpOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgR2V0IGN1cnJlbnQgdXNlcidzIGFjY2VzcyBy aWdodC4NCj4tDQo+LSAgQHBhcmFtW291dF0gIEFjY2Vzc1JpZ2h0ICBQb2ludHMgdG8gdGhlIGJ1 ZmZlciB1c2VkIGZvciB1c2VyJ3MgYWNjZXNzIHJpZ2h0Lg0KPi0NCj4tICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgIEdldCBjdXJyZW50IHVzZXIgYWNjZXNzIHJpZ2h0IHN1Y2Nlc3NmdWxseS4N Cj4tICBAcmV0dmFsIG90aGVycyAgICAgICAgICAgIEZhaWwgdG8gZ2V0IGN1cnJlbnQgdXNlciBh Y2Nlc3MgcmlnaHQuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1HZXRBY2Nlc3NSaWdodCAo DQo+LSAgT1VUICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQWNj ZXNzUmlnaHQNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBT dGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgVXNlckluZm87DQo+LSAg RUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKkluZm87DQo+LSAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgSW5mb1NpemU7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgTWVtU2l6ZTsNCj4tICBFRklfVVNFUl9JTkZPX0FDQ0VTU19DT05UUk9MICBBY2Nlc3M7DQo+ LSAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgQ3VycmVudFVzZXI7DQo+LSAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgVG90YWxMZW47DQo+LSAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgQ2hlY2tMZW47DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWxsb2NhdGUgdXNlciBp bmZvcm1hdGlvbiBtZW1vcnkuDQo+LSAgLy8NCj4tICBNZW1TaXplID0gc2l6ZW9mIChFRklfVVNF Ul9JTkZPKSArIDYzOw0KPi0gIEluZm8gICAgPSBBbGxvY2F0ZVplcm9Qb29sIChNZW1TaXplKTsN Cj4tICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCB1c2VyIGFjY2VzcyBpbmZvcm1hdGlv bi4NCj4tICAvLw0KPi0gIFVzZXJJbmZvID0gTlVMTDsNCj4tICBtVXNlck1hbmFnZXItPkN1cnJl bnQgKG1Vc2VyTWFuYWdlciwgJkN1cnJlbnRVc2VyKTsNCj4tICB3aGlsZSAoVFJVRSkgew0KPi0g ICAgSW5mb1NpemUgPSBNZW1TaXplOw0KPi0gICAgLy8NCj4tICAgIC8vIEdldCBuZXh0IHVzZXIg aW5mb3JtYXRpb24uDQo+LSAgICAvLw0KPi0gICAgU3RhdHVzID0gbVVzZXJNYW5hZ2VyLT5HZXRO ZXh0SW5mbyAobVVzZXJNYW5hZ2VyLCBDdXJyZW50VXNlciwNCj4mVXNlckluZm8pOw0KPi0gICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tDQo+ LSAgICBTdGF0dXMgPSBtVXNlck1hbmFnZXItPkdldEluZm8gKA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDdXJyZW50VXNlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvLA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZJbmZvU2l6ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 DQo+LSAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+LSAgICAgIE1l bVNpemUgPSBJbmZvU2l6ZTsNCj4tICAgICAgRnJlZVBvb2wgKEluZm8pOw0KPi0gICAgICBJbmZv ID0gQWxsb2NhdGVaZXJvUG9vbCAoTWVtU2l6ZSk7DQo+LSAgICAgIGlmIChJbmZvID09IE5VTEwp IHsNCj4tICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+LSAgICAgIH0NCj4t ICAgICAgU3RhdHVzID0gbVVzZXJNYW5hZ2VyLT5HZXRJbmZvICgNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEN1cnJlbnRVc2VyLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNl ckluZm8sDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvLA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkluZm9TaXplDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPi0gICAgfQ0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K Pi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tDQo+LSAgICAvLw0KPi0gICAgLy8gQ2hlY2sgdXNl ciBpbmZvcm1hdGlvbi4NCj4tICAgIC8vDQo+LSAgICBpZiAoSW5mby0+SW5mb1R5cGUgPT0gRUZJ X1VTRVJfSU5GT19BQ0NFU1NfUE9MSUNZX1JFQ09SRCkgew0KPi0gICAgICBUb3RhbExlbiAgPSBJ bmZvLT5JbmZvU2l6ZSAtIHNpemVvZiAoRUZJX1VTRVJfSU5GTyk7DQo+LSAgICAgIENoZWNrTGVu ICA9IDA7DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIEdldCBzcGVjaWZpZWQgYWNjZXNzIGluZm9y bWF0aW9uLg0KPi0gICAgICAvLw0KPi0gICAgICB3aGlsZSAoQ2hlY2tMZW4gPCBUb3RhbExlbikg ew0KPi0gICAgICAgIENvcHlNZW0gKCZBY2Nlc3MsIChVSU5UOCAqKSAoSW5mbyArIDEpICsgQ2hl Y2tMZW4sIHNpemVvZiAoQWNjZXNzKSk7DQo+LSAgICAgICAgaWYgKChBY2Nlc3MuVHlwZSA9PSBF RklfVVNFUl9JTkZPX0FDQ0VTU19FTlJPTExfU0VMRikgfHwNCj4tICAgICAgICAgICAgKEFjY2Vz cy5UeXBlID09IEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9PVEhFUlMpIHx8DQo+LSAgICAg ICAgICAgIChBY2Nlc3MuVHlwZSA9PSBFRklfVVNFUl9JTkZPX0FDQ0VTU19NQU5BR0UpDQo+LSAg ICAgICAgICAgICkgew0KPi0gICAgICAgICAgKkFjY2Vzc1JpZ2h0ID0gQWNjZXNzLlR5cGU7DQo+ LSAgICAgICAgICBGcmVlUG9vbCAoSW5mbyk7DQo+LSAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+LSAgICAgICAgfQ0KPi0gICAgICAgIENoZWNrTGVuICs9IEFjY2Vzcy5TaXplOw0KPi0g ICAgICB9DQo+LSAgICB9DQo+LSAgfQ0KPi0gIEZyZWVQb29sIChJbmZvKTsNCj4tICByZXR1cm4g RUZJX05PVF9GT1VORDsNCj4tfQ0KPi0NCj4tLQ0KPjIuMTYuMi53aW5kb3dzLjENCj4NCj5fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPmVkazItZGV2ZWwg bWFpbGluZyBsaXN0DQo+ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj5odHRwczovL2xpc3RzLjAx Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2VkazItZGV2ZWwNCg==