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.151; helo=mga17.intel.com; envelope-from=chen.a.chen@intel.com; receiver=edk2-devel@lists.01.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (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 AD582211B1FBB for ; Tue, 8 Jan 2019 17:54:51 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Jan 2019 17:54:50 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,455,1539673200"; d="scan'208";a="290016983" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga005.jf.intel.com with ESMTP; 08 Jan 2019 17:54:49 -0800 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 8 Jan 2019 17:54:46 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.63]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.150]) with mapi id 14.03.0415.000; Wed, 9 Jan 2019 09:54:43 +0800 From: "Chen, Chen A" To: "Gao, Liming" , "edk2-devel@lists.01.org" CC: "Zhang, Chao B" Thread-Topic: [edk2] [PATCH] SecurityPkg: Remove code under UserIdentification folder. Thread-Index: AQHUp7f3UEV4lS/290e71QdE3Z/peaWlopAAgACKLDA= Date: Wed, 9 Jan 2019 01:54:42 +0000 Message-ID: <8CCE94730AD68946B3D28B43192D9D2D06E597BD@shsmsx102.ccr.corp.intel.com> References: <20190109010913.29524-1-chen.a.chen@intel.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E3ADF77@SHSMSX152.ccr.corp.intel.com> In-Reply-To: <4A89E2EF3DFEDB4C8BFDE51014F606A14E3ADF77@SHSMSX152.ccr.corp.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:54:52 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 WWVzLCBDaGFvIGhhcyBmaWxlZCBvbiBCWjE0MjcuDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQpGcm9tOiBHYW8sIExpbWluZyANClNlbnQ6IFdlZG5lc2RheSwgSmFudWFyeSA5LCAyMDE5 IDk6MzkgQU0NClRvOiBDaGVuLCBDaGVuIEEgPGNoZW4uYS5jaGVuQGludGVsLmNvbT47IGVkazIt ZGV2ZWxAbGlzdHMuMDEub3JnDQpDYzogWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVs LmNvbT4NClN1YmplY3Q6IFJFOiBbZWRrMl0gW1BBVENIXSBTZWN1cml0eVBrZzogUmVtb3ZlIGNv ZGUgdW5kZXIgVXNlcklkZW50aWZpY2F0aW9uIGZvbGRlci4NCg0KQ291bGQgeW91IGNyZWF0ZSBC WiBmb3IgdGhpcyBjaGFuZ2U/IA0KDQo+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj5Gcm9t OiBlZGsyLWRldmVsIFttYWlsdG86ZWRrMi1kZXZlbC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24g QmVoYWxmIE9mDQo+Y2hlbmNoZTQNCj5TZW50OiBXZWRuZXNkYXksIEphbnVhcnkgMDksIDIwMTkg OTowOSBBTQ0KPlRvOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPkNjOiBaaGFuZywgQ2hhbyBC IDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPg0KPlN1YmplY3Q6IFtlZGsyXSBbUEFUQ0hdIFNlY3Vy aXR5UGtnOiBSZW1vdmUgY29kZSB1bmRlciBVc2VySWRlbnRpZmljYXRpb24NCj5mb2xkZXIuDQo+ DQo+MS4gVXNlcklkZW50aWZ5TWFuYWdlckR4ZSBpcyB1c2VkIHRvIHByb3ZpZGUgVXNlck1hbmFn ZXJQcm90b2NvbC4NCj4yLiBVc2VyUHJvZmlsZU1hbmFnZXJEeGUgcHJvdmlkZSBVSSBzZXR0aW5n DQo+My4gUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlICYgVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhl IGFyZQ0KPmltcGxlbWVudGF0aW9uDQo+ICAgZXhhbXBsZXMuDQo+DQo+UmVtb3ZlIGFib3ZlIGZl YXR1cmVzIGJlY2F1c2Ugb2Ygbm8gcGxhdGZvcm0gdXNlIGl0Lg0KPg0KPkNjOiBaaGFuZyBDaGFv IEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb20+DQo+Q29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29y ZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPlNpZ25lZC1vZmYtYnk6IENoZW4gQSBDaGVu IDxjaGVuLmEuY2hlbkBpbnRlbC5jb20+DQo+LS0tDQo+IC4uLi9JbmNsdWRlL0d1aWQvVXNiQ3Jl ZGVudGlhbFByb3ZpZGVySGlpLmggICAgICAgIHwgICAyOSAtDQo+IFNlY3VyaXR5UGtnL0luY2x1 ZGUvR3VpZC9Vc2VySWRlbnRpZnlNYW5hZ2VySGlpLmggIHwgICAyNSAtDQo+IFNlY3VyaXR5UGtn L0luY2x1ZGUvR3VpZC9Vc2VyUHJvZmlsZU1hbmFnZXJIaWkuaCAgIHwgICAyNSAtDQo+IFNlY3Vy aXR5UGtnL1NlY3VyaXR5UGtnLmRlYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiAtDQo+ IFNlY3VyaXR5UGtnL1NlY3VyaXR5UGtnLmRzYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg NCAtDQo+IC4uLi9Qd2RDcmVkZW50aWFsUHJvdmlkZXIuYyAgICAgICAgICAgICAgICAgICAgICAg IHwgMTQ2NCAtLS0tLS0tLQ0KPiAuLi4vUHdkQ3JlZGVudGlhbFByb3ZpZGVyLmggICAgICAgICAg ICAgICAgICAgICAgICB8ICAzNzQgLS0NCj4gLi4uL1B3ZENyZWRlbnRpYWxQcm92aWRlci51bmkg ICAgICAgICAgICAgICAgICAgICAgfCAgIDIxIC0NCj4gLi4uL1B3ZENyZWRlbnRpYWxQcm92aWRl ckRhdGEuaCAgICAgICAgICAgICAgICAgICAgfCAgIDMwIC0NCj4gLi4uL1B3ZENyZWRlbnRpYWxQ cm92aWRlckR4ZS5pbmYgICAgICAgICAgICAgICAgICAgfCAgIDY1IC0NCj4gLi4uL1B3ZENyZWRl bnRpYWxQcm92aWRlckV4dHJhLnVuaSAgICAgICAgICAgICAgICAgfCAgIDE5IC0NCj4gLi4uL1B3 ZENyZWRlbnRpYWxQcm92aWRlclN0cmluZ3MudW5pICAgICAgICAgICAgICAgfCAgIDM4IC0NCj4g Li4uL1B3ZENyZWRlbnRpYWxQcm92aWRlclZmci5WZnIgICAgICAgICAgICAgICAgICAgfCAgIDM0 IC0NCj4gLi4uL1VzYkNyZWRlbnRpYWxQcm92aWRlci5jICAgICAgICAgICAgICAgICAgICAgICAg fCAxNDEwIC0tLS0tLS0tDQo+IC4uLi9Vc2JDcmVkZW50aWFsUHJvdmlkZXIuaCAgICAgICAgICAg ICAgICAgICAgICAgIHwgIDM2MSAtLQ0KPiAuLi4vVXNiQ3JlZGVudGlhbFByb3ZpZGVyLnVuaSAg ICAgICAgICAgICAgICAgICAgICB8ICAgMjMgLQ0KPiAuLi4vVXNiQ3JlZGVudGlhbFByb3ZpZGVy RHhlLmluZiAgICAgICAgICAgICAgICAgICB8ICAgNzAgLQ0KPiAuLi4vVXNiQ3JlZGVudGlhbFBy b3ZpZGVyRXh0cmEudW5pICAgICAgICAgICAgICAgICB8ICAgMTkgLQ0KPiAuLi4vVXNiQ3JlZGVu dGlhbFByb3ZpZGVyU3RyaW5ncy51bmkgICAgICAgICAgICAgICB8ICAgMjkgLQ0KPiAuLi4vVXNl cklkZW50aWZ5TWFuYWdlckR4ZS9Mb2FkRGVmZXJyZWRJbWFnZS5jICAgICB8ICAxNDggLQ0KPiAu Li4vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW5hZ2VyLmMgICB8IDM3NjYg LS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gLi4uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklk ZW50aWZ5TWFuYWdlci5oICAgfCAgNDEzIC0tLQ0KPiAuLi4vVXNlcklkZW50aWZ5TWFuYWdlckR4 ZS9Vc2VySWRlbnRpZnlNYW5hZ2VyLnVuaSB8ICAgMjEgLQ0KPiAuLi4vVXNlcklkZW50aWZ5TWFu YWdlckRhdGEuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMzUgLQ0KPiAuLi4vVXNlcklkZW50 aWZ5TWFuYWdlckR4ZS5pbmYgICAgICAgICAgICAgICAgICAgICB8ICAgNzkgLQ0KPiAuLi4vVXNl cklkZW50aWZ5TWFuYWdlckV4dHJhLnVuaSAgICAgICAgICAgICAgICAgICB8ICAgMTkgLQ0KPiAu Li4vVXNlcklkZW50aWZ5TWFuYWdlclN0cmluZ3MudW5pICAgICAgICAgICAgICAgICB8ICAgMjcg LQ0KPiAuLi4vVXNlcklkZW50aWZ5TWFuYWdlclZmci5WZnIgICAgICAgICAgICAgICAgICAgICB8 ICAgNDMgLQ0KPiAuLi4vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL01vZGlmeUFjY2Vzc1BvbGljeS5j ICAgICB8ICA2ODggLS0tLQ0KPiAuLi4vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL01vZGlmeUlkZW50 aXR5UG9saWN5LmMgICB8ICA1MTYgLS0tDQo+IC4uLi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNl clByb2ZpbGVBZGQuYyAgICAgICAgIHwgIDM3MiAtLQ0KPiAuLi4vVXNlclByb2ZpbGVNYW5hZ2Vy RHhlL1VzZXJQcm9maWxlRGVsZXRlLmMgICAgICB8ICAzNDMgLS0NCj4gLi4uL1VzZXJQcm9maWxl TWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnZXIuYyAgICAgfCAgODg3IC0tLS0tDQo+IC4uLi9V c2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZ2VyLmggICAgIHwgIDQ0NCAtLS0N Cj4gLi4uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnZXIudW5pICAgfCAg IDIyIC0NCj4gLi4uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnZXJEYXRh LmggfCAgMTU4IC0NCj4gLi4uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS5pbmYgICAgICAgICAgICAg ICAgICAgICAgfCAgIDcyIC0NCj4gLi4uL1VzZXJQcm9maWxlTWFuYWdlckV4dHJhLnVuaSAgICAg ICAgICAgICAgICAgICAgfCAgIDE5IC0NCj4gLi4uL1VzZXJQcm9maWxlTWFuYWdlclN0cmluZ3Mu dW5pICAgICAgICAgICAgICAgICAgfCAgMTU4IC0NCj4gLi4uL1VzZXJQcm9maWxlTWFuYWdlclZm ci5WZnIgICAgICAgICAgICAgICAgICAgICAgfCAgMjQ0IC0tDQo+IC4uLi9Vc2VyUHJvZmlsZU1h bmFnZXJEeGUvVXNlclByb2ZpbGVNb2RpZnkuYyAgICAgIHwgMTQ3NSAtLS0tLS0tLQ0KPiA0MSBm aWxlcyBjaGFuZ2VkLCAxNDAwMSBkZWxldGlvbnMoLSkNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0IFNl Y3VyaXR5UGtnL0luY2x1ZGUvR3VpZC9Vc2JDcmVkZW50aWFsUHJvdmlkZXJIaWkuaA0KPiBkZWxl dGUgbW9kZSAxMDA2NDQgU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzZXJJZGVudGlmeU1hbmFn ZXJIaWkuaA0KPiBkZWxldGUgbW9kZSAxMDA2NDQgU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1Vz ZXJQcm9maWxlTWFuYWdlckhpaS5oDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtn L1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlh bFBybw0KPnZpZGVyLmMNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklk ZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUHJvDQo+ dmlkZXIuaA0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmlj YXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQcm8NCj52aWRlci51 bmkNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9u L1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUHJvDQo+dmlkZXJEYXRhLmgN Cj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3 ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUHJvDQo+dmlkZXJEeGUuaW5mDQo+ IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RD cmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbFBybw0KPnZpZGVyRXh0cmEudW5pDQo+ IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RD cmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbFBybw0KPnZpZGVyU3RyaW5ncy51bmkN Cj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3 ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUHJvDQo+dmlkZXJWZnIuVmZyDQo+ IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JD cmVkZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFBybw0KPnZpZGVyLmMNCj4gZGVsZXRl IG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRp YWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHJvDQo+dmlkZXIuaA0KPiBkZWxldGUgbW9kZSAx MDA2NDQNCj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3Zp ZGVyRHhlL1VzYkNyZWRlbnRpYWxQcm8NCj52aWRlci51bmkNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0 DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4 ZS9Vc2JDcmVkZW50aWFsUHJvDQo+dmlkZXJEeGUuaW5mDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0K PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUv VXNiQ3JlZGVudGlhbFBybw0KPnZpZGVyRXh0cmEudW5pDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0K PlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUv VXNiQ3JlZGVudGlhbFBybw0KPnZpZGVyU3RyaW5ncy51bmkNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0 DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUv TG9hZERlZmVycmVkSW1hZw0KPmUuYw0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlN YW5hZw0KPmVyLmMNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50 aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuYWcNCj5lci5o DQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9V c2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbmFnDQo+ZXIudW5pDQo+IGRlbGV0 ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRp ZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbmFnDQo+ZXJEYXRhLmgNCj4gZGVsZXRlIG1vZGUg MTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFn ZXJEeGUvVXNlcklkZW50aWZ5TWFuYWcNCj5lckR4ZS5pbmYNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0 DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUv VXNlcklkZW50aWZ5TWFuYWcNCj5lckV4dHJhLnVuaQ0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5T ZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2Vy SWRlbnRpZnlNYW5hZw0KPmVyU3RyaW5ncy51bmkNCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2Vj dXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklk ZW50aWZ5TWFuYWcNCj5lclZmci5WZnINCj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQ a2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Nb2RpZnlBY2Nlc3NQ b2xpY3kuDQo+Yw0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5TZWN1cml0eVBrZy9Vc2VySWRlbnRp ZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL01vZGlmeUlkZW50aXR5UG9saWN5DQo+LmMN Cj4gZGVsZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1Vz ZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZUFkZC5jDQo+IGRlbGV0ZSBtb2RlIDEwMDY0 NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUv VXNlclByb2ZpbGVEZWxldGUuYw0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5TZWN1cml0eVBrZy9V c2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWdl ci4NCj5jDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNh dGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZ2VyLg0KPmgNCj4gZGVs ZXRlIG1vZGUgMTAwNjQ0DQo+U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9m aWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnZXIuDQo+dW5pDQo+IGRlbGV0ZSBtb2RlIDEw MDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJE eGUvVXNlclByb2ZpbGVNYW5hZ2VyDQo+RGF0YS5oDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNl Y3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclBy b2ZpbGVNYW5hZ2VyDQo+RHhlLmluZg0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFu YWdlcg0KPkV4dHJhLnVuaQ0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5TZWN1cml0eVBrZy9Vc2Vy SWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWdlcg0K PlN0cmluZ3MudW5pDQo+IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPlNlY3VyaXR5UGtnL1VzZXJJZGVu dGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZ2VyDQo+VmZy LlZmcg0KPiBkZWxldGUgbW9kZSAxMDA2NDQNCj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRp b24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTW9kaWZ5LmMNCj4NCj5kaWZmIC0t Z2l0IGEvU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzYkNyZWRlbnRpYWxQcm92aWRlckhpaS5o DQo+Yi9TZWN1cml0eVBrZy9JbmNsdWRlL0d1aWQvVXNiQ3JlZGVudGlhbFByb3ZpZGVySGlpLmgN Cj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCAwNTlkNjhmMzJlLi4wMDAwMDAwMDAw DQo+LS0tIGEvU2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzYkNyZWRlbnRpYWxQcm92aWRlckhp aS5oDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDI5ICswLDAgQEANCj4tLyoqIEBmaWxlDQo+LSAg R1VJRCB1c2VkIGFzIEhJSSBQYWNrYWdlIGxpc3QgR1VJRCBpbiBVc2JDcmVkZW50aWFsUHJvdmlk ZXJEeGUgZHJpdmVyLg0KPi0NCj4tQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxOCwgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRo ZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFi bGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+ LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0 aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBV TkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJS QU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBP UiBJTVBMSUVELg0KPi0NCj4tKiovDQo+LQ0KPi0jaWZuZGVmIF9fVVNCX0NSRURFTlRJQUxfUFJP VklERVJfSElJX0hfXw0KPi0jZGVmaW5lIF9fVVNCX0NSRURFTlRJQUxfUFJPVklERVJfSElJX0hf Xw0KPi0NCj4tLy8NCj4tLy8gVXNlZCBmb3Igc2F2ZSBwYXNzd29yZCBjcmVkZW50aWFsIGFuZCBm b3JtIGJyb3dzZXINCj4tLy8gQW5kIHVzZWQgYXMgcHJvdmlkZXIgaWRlbnRpZmllcg0KPi0vLw0K Pi0jZGVmaW5lIFVTQl9DUkVERU5USUFMX1BST1ZJREVSX0dVSUQgXA0KPi0gIHsgXA0KPi0gICAg MHhkMDg0OWVkMSwgMHhhODhjLCAweDRiYTYsIHsgMHhiMSwgMHhkNiwgMHhhYiwgMHg1MCwgMHhl MiwgMHg4MCwgMHhiNywNCj4weGE5IH1cDQo+LSAgfQ0KPi0NCj4tZXh0ZXJuIEVGSV9HVUlEIGdV c2JDcmVkZW50aWFsUHJvdmlkZXJHdWlkOw0KPi0NCj4tI2VuZGlmDQo+ZGlmZiAtLWdpdCBhL1Nl Y3VyaXR5UGtnL0luY2x1ZGUvR3VpZC9Vc2VySWRlbnRpZnlNYW5hZ2VySGlpLmgNCj5iL1NlY3Vy aXR5UGtnL0luY2x1ZGUvR3VpZC9Vc2VySWRlbnRpZnlNYW5hZ2VySGlpLmgNCj5kZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQNCj5pbmRleCAzMjNjNTFmMGY2Li4wMDAwMDAwMDAwDQo+LS0tIGEvU2Vj dXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzZXJJZGVudGlmeU1hbmFnZXJIaWkuaA0KPisrKyAvZGV2 L251bGwNCj5AQCAtMSwyNSArMCwwIEBADQo+LS8qKiBAZmlsZQ0KPi0gIEdVSUQgdXNlZCBhcyBI SUkgRm9ybVNldCBhbmQgSElJIFBhY2thZ2UgbGlzdCBHVUlEIGluDQo+VXNlcklkZW50aWZ5TWFu YWdlckR4ZSBkcml2ZXIuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMTEgLSAyMDE4LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQg dGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWls YWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UN Cj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9m IHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9s aWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVE IFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdB UlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNT IE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpZm5kZWYgX19VU0VSX0lERU5USUZZX01B TkFHRVJfSElJX0hfXw0KPi0jZGVmaW5lIF9fVVNFUl9JREVOVElGWV9NQU5BR0VSX0hJSV9IX18N Cj4tDQo+LSNkZWZpbmUgVVNFUl9JREVOVElGWV9NQU5BR0VSX0dVSUQgXA0KPi0gIHsgXA0KPi0g ICAgMHgzY2NkM2RkOCwgMHg4ZDQ1LCAweDRmZWQsIHsgMHg5NiwgMHgyZCwgMHgyYiwgMHgzOCwg MHhjZCwgMHg4MiwgMHhiMywNCj4weGM0IH0gXA0KPi0gIH0NCj4tDQo+LWV4dGVybiBFRklfR1VJ RCBnVXNlcklkZW50aWZ5TWFuYWdlckd1aWQ7DQo+LQ0KPi0jZW5kaWYNCj5kaWZmIC0tZ2l0IGEv U2VjdXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzZXJQcm9maWxlTWFuYWdlckhpaS5oDQo+Yi9TZWN1 cml0eVBrZy9JbmNsdWRlL0d1aWQvVXNlclByb2ZpbGVNYW5hZ2VySGlpLmgNCj5kZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQNCj5pbmRleCAxMDUwNTkzNTBjLi4wMDAwMDAwMDAwDQo+LS0tIGEvU2Vj dXJpdHlQa2cvSW5jbHVkZS9HdWlkL1VzZXJQcm9maWxlTWFuYWdlckhpaS5oDQo+KysrIC9kZXYv bnVsbA0KPkBAIC0xLDI1ICswLDAgQEANCj4tLyoqIEBmaWxlDQo+LSAgR1VJRCB1c2VkIGFzIEhJ SSBGb3JtU2V0IGFuZCBISUkgUGFja2FnZSBsaXN0IEdVSUQgaW4NCj5Vc2VyUHJvZmlsZU1hbmFn ZXJEeGUgZHJpdmVyLg0KPi0NCj4tQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxOCwgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRo ZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFi bGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+ LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0 aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBV TkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJS QU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBP UiBJTVBMSUVELg0KPi0NCj4tKiovDQo+LQ0KPi0jaWZuZGVmIF9fVVNFUl9QUk9GSUxFX01BTkFH RVJfSElJX0hfXw0KPi0jZGVmaW5lIF9fVVNFUl9QUk9GSUxFX01BTkFHRVJfSElJX0hfXw0KPi0N Cj4tI2RlZmluZSBVU0VSX1BST0ZJTEVfTUFOQUdFUl9HVUlEIFwNCj4tICB7IFwNCj4tICAgIDB4 YzM1ZjI3MmMsIDB4OTdjMiwgMHg0NjVhLCB7IDB4YTIsIDB4MTYsIDB4NjksIDB4NmIsIDB4NjYs IDB4OGEsIDB4OGMsIDB4ZmUgfQ0KPlwNCj4tICB9DQo+LQ0KPi1leHRlcm4gRUZJX0dVSUQgZ1Vz ZXJQcm9maWxlTWFuYWdlckd1aWQ7DQo+LQ0KPi0jZW5kaWYNCj5kaWZmIC0tZ2l0IGEvU2VjdXJp dHlQa2cvU2VjdXJpdHlQa2cuZGVjIGIvU2VjdXJpdHlQa2cvU2VjdXJpdHlQa2cuZGVjDQo+aW5k ZXggOGQ2NGI0ZmVmZS4uMGMyYWZlMjkzOCAxMDA2NDQNCj4tLS0gYS9TZWN1cml0eVBrZy9TZWN1 cml0eVBrZy5kZWMNCj4rKysgYi9TZWN1cml0eVBrZy9TZWN1cml0eVBrZy5kZWMNCj5AQCAtMTM5 LDIyICsxMzksMTAgQEANCj4gICAjICBJbmNsdWRlL0d1aWQvVGNnMlBoeXNpY2FsUHJlc2VuY2VE YXRhLmgNCj4gICBnRWZpVGNnMlBoeXNpY2FsUHJlc2VuY2VHdWlkID0geyAweGFlYjljNWMxLCAw eDk0ZjEsIDB4NGQwMiwgeyAweGJmLCAweGQ5LA0KPjB4NDYsIDB4MiwgMHhkYiwgMHgyZCwgMHgz YywgMHg1NCB9fQ0KPg0KPi0gICMjIEdVSUQgdXNlZCBmb3IgZm9ybSBicm93c2VyLCBwYXNzd29y ZCBjcmVkZW50aWFsIGFuZCBwcm92aWRlciBpZGVudGlmaWVyLg0KPi0gICMgSW5jbHVkZS9HdWlk L1B3ZENyZWRlbnRpYWxQcm92aWRlckhpaS5oDQo+LSAgZ1B3ZENyZWRlbnRpYWxQcm92aWRlckd1 aWQgICAgICAgICA9IHsgMHg3OGI5ZWM4YiwgMHhjMDAwLCAweDQ2YzUsIHsgMHhhYywNCj4weDkz LCAweDI0LCAweGEwLCAweGMxLCAweGJiLCAweDAsIDB4Y2UgfX0NCj4tDQo+LSAgIyMgR1VJRCB1 c2VkIGZvciBmb3JtIGJyb3dzZXIsIFVTQiBjcmVkZW50aWFsIGFuZCBwcm92aWRlciBpZGVudGlm aWVyLg0KPi0gICMgIEluY2x1ZGUvR3VpZC9Vc2JDcmVkZW50aWFsUHJvdmlkZXJIaWkuaA0KPi0g IGdVc2JDcmVkZW50aWFsUHJvdmlkZXJHdWlkICAgICAgICAgPSB7IDB4ZDA4NDllZDEsIDB4YTg4 YywgMHg0YmE2LCB7IDB4YjEsDQo+MHhkNiwgMHhhYiwgMHg1MCwgMHhlMiwgMHg4MCwgMHhiNywg MHhhOSB9fQ0KPi0NCj4gICAjIyBHVUlEIHVzZWQgZm9yIEZvcm1TZXQgZ3VpZCBhbmQgdXNlciBw cm9maWxlIHZhcmlhYmxlLg0KPiAgICMgSW5jbHVkZS9HdWlkL1VzZXJJZGVudGlmeU1hbmFnZXJI aWkuaA0KPiAgIGdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCAgICAgICAgICAgPSB7IDB4M2NjZDNk ZDgsIDB4OGQ0NSwgMHg0ZmVkLCB7IDB4OTYsDQo+MHgyZCwgMHgyYiwgMHgzOCwgMHhjZCwgMHg4 MiwgMHhiMywgMHhjNCB9fQ0KPg0KPi0gICMjIEdVSUQgdXNlZCBmb3IgRm9ybVNldC4NCj4tICAj ICBJbmNsdWRlL0d1aWQvVXNlclByb2ZpbGVNYW5hZ2VySGlpLmgNCj4tICBnVXNlclByb2ZpbGVN YW5hZ2VyR3VpZCAgICAgICAgICAgID0geyAweGMzNWYyNzJjLCAweDk3YzIsIDB4NDY1YSwgeyAw eGEyLCAweDE2LA0KPjB4NjksIDB4NmIsIDB4NjYsIDB4OGEsIDB4OGMsIDB4ZmUgfX0NCj4tDQo+ ICAgIyMgR1VJRCB1c2VkIGZvciBGb3JtU2V0Lg0KPiAgICMgIEluY2x1ZGUvR3VpZC9UY2dDb25m aWdIaWkuaA0KPiAgIGdUY2dDb25maWdGb3JtU2V0R3VpZCAgICAgICAgICAgICAgPSB7IDB4YjBm OTAxZTQsIDB4YzQyNCwgMHg0NWRlLCB7IDB4OTAsIDB4ODEsDQo+MHg5NSwgMHhlMiwgMHhiLCAw eGRlLCAweDZmLCAweGI1IH19DQo+ZGlmZiAtLWdpdCBhL1NlY3VyaXR5UGtnL1NlY3VyaXR5UGtn LmRzYyBiL1NlY3VyaXR5UGtnL1NlY3VyaXR5UGtnLmRzYw0KPmluZGV4IDY4YTI5NTMxNjIuLjE5 YWFlYmZmMWYgMTAwNjQ0DQo+LS0tIGEvU2VjdXJpdHlQa2cvU2VjdXJpdHlQa2cuZHNjDQo+Kysr IGIvU2VjdXJpdHlQa2cvU2VjdXJpdHlQa2cuZHNjDQo+QEAgLTE0Niw4ICsxNDYsNiBAQA0KPiAg IFNlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJp ZmljYXRpb25MaWIuaW5mDQo+ICAgI1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlRGVmZXJJbWFnZUxv YWRMaWIvRHhlRGVmZXJJbWFnZUxvYWRMaWIuaW5mDQo+DQo+U2VjdXJpdHlQa2cvTGlicmFyeS9E eGVJbWFnZUF1dGhlbnRpY2F0aW9uU3RhdHVzTGliL0R4ZUltYWdlQXV0aGVudGljYXRpDQo+b25T dGF0dXNMaWIuaW5mDQo+LQ0KPiNTZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklk ZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW5hDQo+Z2VyRHhlLmluZg0KPi0NCj4jU2Vj dXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJv ZmlsZU1hbmFnZQ0KPnJEeGUuaW5mDQo+DQo+ICAgIw0KPiAgICMgVFBNDQo+QEAgLTIwMCw4ICsx OTgsNiBAQA0KPiAgIFNlY3VyaXR5UGtnL0xpYnJhcnkvQXV0aFZhcmlhYmxlTGliL0F1dGhWYXJp YWJsZUxpYi5pbmYNCj4NCj4gW0NvbXBvbmVudHMuSUEzMiwgQ29tcG9uZW50cy5YNjRdDQo+LSMN Cj5TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhl L1B3ZENyZWRlbnRpYWxQcm8NCj52aWRlckR4ZS5pbmYNCj4tIw0KPlNlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFBybw0K PnZpZGVyRHhlLmluZg0KPg0KPlNlY3VyaXR5UGtnL1ZhcmlhYmxlQXV0aGVudGljYXRlZC9TZWN1 cmVCb290Q29uZmlnRHhlL1NlY3VyZUJvb3RDb25maWcNCj5EeGUuaW5mDQo+DQo+ICAgIw0KPmRp ZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFs UHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbFANCj5yb3ZpZGVyLmMNCj5iL1NlY3VyaXR5UGtnL1Vz ZXJJZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbA0K PlByb3ZpZGVyLmMNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCA1MmZjNjhiNWVl Li4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdk Q3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQDQo+cm92aWRlci5jDQo+KysrIC9k ZXYvbnVsbA0KPkBAIC0xLDE0NjQgKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBQYXNzd29yZCBD cmVkZW50aWFsIFByb3ZpZGVyIGRyaXZlciBpbXBsZW1lbnRhdGlvbi4NCj4tDQo+LUNvcHlyaWdo dCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LjxCUj4NCj4tKEMpIENvcHlyaWdodCAyMDE4IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERl dmVsb3BtZW50IExQPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0 ZXJpYWxzDQo+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1z IGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LXdoaWNoIGFjY29tcGFuaWVz IHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUN Cj5mb3VuZCBhdA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2Uu cGhwDQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VO U0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VO VEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0NCj4t KiovDQo+LQ0KPi0jaW5jbHVkZSAiUHdkQ3JlZGVudGlhbFByb3ZpZGVyLmgiDQo+LQ0KPi1DUkVE RU5USUFMX1RBQkxFICAgICAgICAgICAgKm1Qd2RUYWJsZSAgICAgID0gTlVMTDsNCj4tUFdEX1BS T1ZJREVSX0NBTExCQUNLX0lORk8gICptQ2FsbGJhY2tJbmZvICA9IE5VTEw7DQo+LVBBU1NXT1JE X0NSRURFTlRJQUxfSU5GTyAgICAqbVB3ZEluZm9IYW5kbGUgPSBOVUxMOw0KPi0NCj4tSElJX1ZF TkRPUl9ERVZJQ0VfUEFUSCAgICAgIG1IaWlWZW5kb3JEZXZpY2VQYXRoID0gew0KPi0gIHsNCj4t ICAgIHsNCj4tICAgICAgSEFSRFdBUkVfREVWSUNFX1BBVEgsDQo+LSAgICAgIEhXX1ZFTkRPUl9E UCwNCj4tICAgICAgew0KPi0gICAgICAgIChVSU5UOCkgKHNpemVvZiAoVkVORE9SX0RFVklDRV9Q QVRIKSksDQo+LSAgICAgICAgKFVJTlQ4KSAoKHNpemVvZiAoVkVORE9SX0RFVklDRV9QQVRIKSkg Pj4gOCkNCj4tICAgICAgfQ0KPi0gICAgfSwNCj4tICAgIFBXRF9DUkVERU5USUFMX1BST1ZJREVS X0dVSUQNCj4tICB9LA0KPi0gIHsNCj4tICAgIEVORF9ERVZJQ0VfUEFUSF9UWVBFLA0KPi0gICAg RU5EX0VOVElSRV9ERVZJQ0VfUEFUSF9TVUJUWVBFLA0KPi0gICAgew0KPi0gICAgICAoVUlOVDgp IChFTkRfREVWSUNFX1BBVEhfTEVOR1RIKSwNCj4tICAgICAgKFVJTlQ4KSAoKEVORF9ERVZJQ0Vf UEFUSF9MRU5HVEgpID4+IDgpDQo+LSAgICB9DQo+LSAgfQ0KPi19Ow0KPi0NCj4tRUZJX1VTRVJf Q1JFREVOVElBTDJfUFJPVE9DT0wgIGdQd2RDcmVkZW50aWFsUHJvdmlkZXJEcml2ZXIgPSB7DQo+ LSAgUFdEX0NSRURFTlRJQUxfUFJPVklERVJfR1VJRCwNCj4tICBFRklfVVNFUl9DUkVERU5USUFM X0NMQVNTX1BBU1NXT1JELA0KPi0gIENyZWRlbnRpYWxFbnJvbGwsDQo+LSAgQ3JlZGVudGlhbEZv cm0sDQo+LSAgQ3JlZGVudGlhbFRpbGUsDQo+LSAgQ3JlZGVudGlhbFRpdGxlLA0KPi0gIENyZWRl bnRpYWxVc2VyLA0KPi0gIENyZWRlbnRpYWxTZWxlY3QsDQo+LSAgQ3JlZGVudGlhbERlc2VsZWN0 LA0KPi0gIENyZWRlbnRpYWxEZWZhdWx0LA0KPi0gIENyZWRlbnRpYWxHZXRJbmZvLA0KPi0gIENy ZWRlbnRpYWxHZXROZXh0SW5mbywNCj4tICBFRklfQ1JFREVOVElBTF9DQVBBQklMSVRJRVNfRU5S T0xMLA0KPi0gIENyZWRlbnRpYWxEZWxldGUNCj4tfTsNCj4tDQo+LQ0KPi0vKioNCj4tICBHZXQg c3RyaW5nIGJ5IHN0cmluZyBpZCBmcm9tIEhJSSBJbnRlcmZhY2UuDQo+LQ0KPi0NCj4tICBAcGFy YW1baW5dIElkICAgICAgU3RyaW5nIElEIHRvIGdldCB0aGUgc3RyaW5nIGZyb20uDQo+LQ0KPi0g IEByZXR2YWwgIENIQVIxNiAqICBTdHJpbmcgZnJvbSBJRC4NCj4tICBAcmV0dmFsICBOVUxMICAg ICAgSWYgZXJyb3Igb2NjdXJzLg0KPi0NCj4tKiovDQo+LUNIQVIxNiAqDQo+LUdldFN0cmluZ0J5 SWQgKA0KPi0gIElOIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgSWQNCj4tICApDQo+LXsNCj4t ICAvLw0KPi0gIC8vIEdldCB0aGUgY3VycmVudCBzdHJpbmcgZm9yIHRoZSBjdXJyZW50IExhbmd1 YWdlLg0KPi0gIC8vDQo+LSAgcmV0dXJuIEhpaUdldFN0cmluZyAobUNhbGxiYWNrSW5mby0+SGlp SGFuZGxlLCBJZCwgTlVMTCk7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBFeHBhbmQgcGFzc3dv cmQgdGFibGUgc2l6ZS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUV4cGFuZFRhYmxlU2l6ZSAoDQo+ LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIENSRURFTlRJQUxfVEFCTEUgICpOZXdUYWJsZTsNCj4t ICBVSU5UTiAgICAgICAgICAgICBDb3VudDsNCj4tDQo+LSAgQ291bnQgPSBtUHdkVGFibGUtPk1h eENvdW50ICsgUEFTU1dPUkRfVEFCTEVfSU5DOw0KPi0gIC8vDQo+LSAgLy8gQ3JlYXRlIG5ldyBj cmVkZW50aWFsIHRhYmxlLg0KPi0gIC8vDQo+LSAgTmV3VGFibGUgPSAoQ1JFREVOVElBTF9UQUJM RSAqKSBBbGxvY2F0ZVplcm9Qb29sICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mIChDUkVERU5USUFMX1RBQkxFKSArDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChDb3VudCAtIDEpICogc2l6ZW9mIChQQVNTV09SRF9JTkZPKQ0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gIEFTU0VSVCAoTmV3VGFi bGUgIT0gTlVMTCk7DQo+LQ0KPi0gIE5ld1RhYmxlLT5NYXhDb3VudCAgICA9IENvdW50Ow0KPi0g IE5ld1RhYmxlLT5Db3VudCAgICAgICA9IG1Qd2RUYWJsZS0+Q291bnQ7DQo+LSAgTmV3VGFibGUt PlZhbGlkSW5kZXggID0gbVB3ZFRhYmxlLT5WYWxpZEluZGV4Ow0KPi0gIC8vDQo+LSAgLy8gQ29w eSBvbGQgZW50cmllcw0KPi0gIC8vDQo+LSAgQ29weU1lbSAoDQo+LSAgICAmTmV3VGFibGUtPlVz ZXJJbmZvLA0KPi0gICAgJm1Qd2RUYWJsZS0+VXNlckluZm8sDQo+LSAgICBtUHdkVGFibGUtPkNv dW50ICogc2l6ZW9mIChQQVNTV09SRF9JTkZPKQ0KPi0gICAgKTsNCj4tICBGcmVlUG9vbCAobVB3 ZFRhYmxlKTsNCj4tICBtUHdkVGFibGUgPSBOZXdUYWJsZTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0K Pi0gIEFkZCwgdXBkYXRlIG9yIGRlbGV0ZSBpbmZvIGluIHRhYmxlLCBhbmQgc3luYyB3aXRoIE5W IHZhcmlhYmxlLg0KPi0NCj4tICBAcGFyYW1baW5dICBJbmRleCAgICAgVGhlIGluZGV4IG9mIHRo ZSBwYXNzd29yZCBpbiB0YWJsZS4gSWYgaW5kZXggaXMgZm91bmQgaW4NCj4tICAgICAgICAgICAg ICAgICAgICAgICAgdGFibGUsIHVwZGF0ZSB0aGUgaW5mbywgZWxzZSBhZGQgdGhlIGludG8gdG8g dGFibGUuDQo+LSAgQHBhcmFtW2luXSAgSW5mbyAgICAgIFRoZSBuZXcgcGFzc3dvcmQgaW5mbyB0 byBhZGQgaW50byB0YWJsZS5JZiBJbmZvIGlzIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgIGRlbGV0ZSB0aGUgaW5mbyBieSBJbmRleC4NCj4tDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgIEluZm8gaXMgTlVMTCB3aGVuIHNhdmUgdGhlIGluZm8uDQo+LSAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgIE1vZGlmeSB0aGUgdGFibGUgc3VjY2Vzc2Z1bGx5Lg0K Pi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBGYWlsZWQgdG8gbW9kaWZ5IHRoZSB0 YWJsZS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LU1vZGlmeVRhYmxlICgNCj4tICBJTiAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgsDQo+LSAgSU4g IFBBU1NXT1JEX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSW5mbyBPUFRJT05B TA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgU3RhdHVzOw0KPi0gIFBBU1NXT1JE X0lORk8gICAgKk5ld1Bhc3N3b3JkSW5mbzsNCj4tDQo+LSAgTmV3UGFzc3dvcmRJbmZvID0gTlVM TDsNCj4tDQo+LSAgaWYgKEluZGV4IDwgbVB3ZFRhYmxlLT5Db3VudCkgew0KPi0gICAgaWYgKElu Zm8gPT0gTlVMTCkgew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBEZWxldGUgdGhlIHNwZWNpZmll ZCBlbnRyeS4NCj4tICAgICAgLy8NCj4tICAgICAgbVB3ZFRhYmxlLT5Db3VudC0tOw0KPi0gICAg ICBpZiAoSW5kZXggIT0gbVB3ZFRhYmxlLT5Db3VudCkgew0KPi0gICAgICAgIE5ld1Bhc3N3b3Jk SW5mbyA9ICZtUHdkVGFibGUtPlVzZXJJbmZvW21Qd2RUYWJsZS0+Q291bnRdOw0KPi0gICAgICB9 DQo+LSAgICB9IGVsc2Ugew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBVcGRhdGUgdGhlIHNwZWNp ZmllZCBlbnRyeS4NCj4tICAgICAgLy8NCj4tICAgICAgTmV3UGFzc3dvcmRJbmZvID0gSW5mbzsN Cj4tICAgIH0NCj4tICB9IGVsc2Ugew0KPi0gICAgLy8NCj4tICAgIC8vIEFkZCBhIG5ldyBwYXNz d29yZCBpbmZvLg0KPi0gICAgLy8NCj4tICAgIGlmIChJbmZvID09IE5VTEwpIHsNCj4tICAgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICAgIH0NCj4tDQo+LSAgICBpZiAobVB3 ZFRhYmxlLT5Db3VudCA+PSBtUHdkVGFibGUtPk1heENvdW50KSB7DQo+LSAgICAgIEV4cGFuZFRh YmxlU2l6ZSAoKTsNCj4tICAgIH0NCj4tDQo+LSAgICBOZXdQYXNzd29yZEluZm8gPSBJbmZvOw0K Pi0gICAgbVB3ZFRhYmxlLT5Db3VudCsrOw0KPi0gIH0NCj4tDQo+LSAgaWYgKE5ld1Bhc3N3b3Jk SW5mbyAhPSBOVUxMKSB7DQo+LSAgICBDb3B5TWVtICgmbVB3ZFRhYmxlLT5Vc2VySW5mb1tJbmRl eF0sIE5ld1Bhc3N3b3JkSW5mbywgc2l6ZW9mDQo+KFBBU1NXT1JEX0lORk8pKTsNCj4tICB9DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSB0aGUgY3JlZGVudGlhbCB0YWJsZS4NCj4tICAvLw0KPi0g IFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUgKA0KPi0gICAgICAgICAgICAgICAgICBMIlB3ZENy ZWRlbnRpYWwiLA0KPi0gICAgICAgICAgICAgICAgICAmZ1B3ZENyZWRlbnRpYWxQcm92aWRlckd1 aWQsDQo+LSAgICAgICAgICAgICAgICAgIEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfA0KPkVG SV9WQVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1MsDQo+LSAgICAgICAgICAgICAgICAgIG1Qd2RU YWJsZS0+Q291bnQgKiBzaXplb2YgKFBBU1NXT1JEX0lORk8pLA0KPi0gICAgICAgICAgICAgICAg ICAmbVB3ZFRhYmxlLT5Vc2VySW5mbw0KPi0gICAgICAgICAgICAgICAgICApOw0KPi0gIHJldHVy biBTdGF0dXM7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBDcmVhdGUgYSBwYXNzd29yZCB0YWJs ZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIENyZWF0ZSBhIHBhc3N3b3JkIHRh YmxlIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgRmFpbGVkIHRv IGNyZWF0ZSBhIHBhc3N3b3JkLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tSW5pdENyZWRl bnRpYWxUYWJsZSAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1 czsNCj4tICBVSU5UOCAgICAgICAqVmFyOw0KPi0gIFVJTlROICAgICAgIFZhclNpemU7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gR2V0IFBhc3N3b3JkIGNyZWRlbnRpYWwgZGF0YSBmcm9tIE5WIHZhcmlh YmxlLg0KPi0gIC8vDQo+LSAgVmFyU2l6ZSA9IDA7DQo+LSAgVmFyICAgICA9IE5VTEw7DQo+LSAg U3RhdHVzICA9IGdSVC0+R2V0VmFyaWFibGUgKA0KPi0gICAgICAgICAgICAgICAgICAgTCJQd2RD cmVkZW50aWFsIiwNCj4tICAgICAgICAgICAgICAgICAgICZnUHdkQ3JlZGVudGlhbFByb3ZpZGVy R3VpZCwNCj4tICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICAm VmFyU2l6ZSwNCj4tICAgICAgICAgICAgICAgICAgIFZhcg0KPi0gICAgICAgICAgICAgICAgICAg KTsNCj4tICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+LSAgICBWYXIg PSBBbGxvY2F0ZVplcm9Qb29sIChWYXJTaXplKTsNCj4tICAgIGlmIChWYXIgPT0gTlVMTCkgew0K Pi0gICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+LSAgICB9DQo+LSAgICBTdGF0 dXMgPSBnUlQtPkdldFZhcmlhYmxlICgNCj4tICAgICAgICAgICAgICAgICAgICBMIlB3ZENyZWRl bnRpYWwiLA0KPi0gICAgICAgICAgICAgICAgICAgICZnUHdkQ3JlZGVudGlhbFByb3ZpZGVyR3Vp ZCwNCj4tICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICZW YXJTaXplLA0KPi0gICAgICAgICAgICAgICAgICAgIFZhcg0KPi0gICAgICAgICAgICAgICAgICAg ICk7DQo+LSAgfQ0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykgJiYgKFN0YXR1cyAhPSBFRklf Tk9UX0ZPVU5EKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+ LSAgLy8gQ3JlYXRlIHRoZSBwYXNzd29yZCBjcmVkZW50aWFsIHRhYmxlLg0KPi0gIC8vDQo+LSAg bVB3ZFRhYmxlID0gQWxsb2NhdGVaZXJvUG9vbCAoDQo+LSAgICAgICAgICAgICAgICBzaXplb2Yg KENSRURFTlRJQUxfVEFCTEUpIC0gc2l6ZW9mIChQQVNTV09SRF9JTkZPKSArDQo+LSAgICAgICAg ICAgICAgICBQQVNTV09SRF9UQUJMRV9JTkMgKiBzaXplb2YgKFBBU1NXT1JEX0lORk8pICsNCj4t ICAgICAgICAgICAgICAgIFZhclNpemUNCj4tICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKG1Q d2RUYWJsZSA9PSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAoVmFyKTsNCj4tICAgIHJldHVybiBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9DQo+LQ0KPi0gIG1Qd2RUYWJsZS0+Q291bnQgICAg ICA9IFZhclNpemUgLyBzaXplb2YgKFBBU1NXT1JEX0lORk8pOw0KPi0gIG1Qd2RUYWJsZS0+TWF4 Q291bnQgICA9IG1Qd2RUYWJsZS0+Q291bnQgKyBQQVNTV09SRF9UQUJMRV9JTkM7DQo+LSAgbVB3 ZFRhYmxlLT5WYWxpZEluZGV4ID0gMDsNCj4tICBpZiAoVmFyICE9IE5VTEwpIHsNCj4tICAgIENv cHlNZW0gKG1Qd2RUYWJsZS0+VXNlckluZm8sIFZhciwgVmFyU2l6ZSk7DQo+LSAgICBGcmVlUG9v bCAoVmFyKTsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4t LyoqDQo+LSAgSGFzaCB0aGUgcGFzc3dvcmQgdG8gZ2V0IGNyZWRlbnRpYWwuDQo+LQ0KPi0gIEBw YXJhbVtpbl0gICBQYXNzd29yZCAgICAgICBQb2ludHMgdG8gdGhlIGlucHV0IHBhc3N3b3JkLg0K Pi0gIEBwYXJhbVtpbl0gICBQYXNzd29yZFNpemUgICBUaGUgc2l6ZSBvZiBwYXNzd29yZCwgaW4g Ynl0ZXMuDQo+LSAgQHBhcmFtW291dF0gIENyZWRlbnRpYWwgICAgIFBvaW50cyB0byB0aGUgaGFz aGVkIHJlc3VsdC4NCj4tDQo+LSAgQHJldHZhbCAgICAgIFRSVUUgICAgICAgICAgIEhhc2ggdGhl IHBhc3N3b3JkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsICAgICAgRkFMU0UgICAgICAgICAg RmFpbGVkIHRvIGhhc2ggdGhlIHBhc3N3b3JkLg0KPi0NCj4tKiovDQo+LUJPT0xFQU4NCj4tR2Vu ZXJhdGVDcmVkZW50aWFsICgNCj4tICBJTiAgICAgIENIQVIxNiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpQYXNzd29yZCwNCj4tICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBhc3N3b3JkU2l6ZSwNCj4tICAgICBPVVQgIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpDcmVkZW50aWFsDQo+LSAgKQ0KPi17DQo+LSAgQk9PTEVBTiAg ICAgICAgICAgU3RhdHVzOw0KPi0gIFVJTlROICAgICAgICAgICAgIEhhc2hTaXplOw0KPi0gIFZP SUQgICAgICAgICAgICAgICpIYXNoOw0KPi0NCj4tICBIYXNoU2l6ZSA9IFNoYTFHZXRDb250ZXh0 U2l6ZSAoKTsNCj4tICBIYXNoICAgICA9IEFsbG9jYXRlUG9vbCAoSGFzaFNpemUpOw0KPi0gIEFT U0VSVCAoSGFzaCAhPSBOVUxMKTsNCj4tDQo+LSAgU3RhdHVzID0gU2hhMUluaXQgKEhhc2gpOw0K Pi0gIGlmICghU3RhdHVzKSB7DQo+LSAgICBnb3RvIERvbmU7DQo+LSAgfQ0KPi0NCj4tICBTdGF0 dXMgPSBTaGExVXBkYXRlIChIYXNoLCBQYXNzd29yZCwgUGFzc3dvcmRTaXplKTsNCj4tICBpZiAo IVN0YXR1cykgew0KPi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4tDQo+LSAgU3RhdHVzID0gU2hh MUZpbmFsIChIYXNoLCBDcmVkZW50aWFsKTsNCj4tDQo+LURvbmU6DQo+LSAgRnJlZVBvb2wgKEhh c2gpOw0KPi0gIHJldHVybiBTdGF0dXM7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBHZXQgcGFz c3dvcmQgZnJvbSB1c2VyIGlucHV0Lg0KPi0NCj4tICBAcGFyYW1baW5dICAgRmlyc3RQd2QgICAg ICAgSWYgVHJ1ZSwgcHJvbXB0IHRvIGlucHV0IHRoZSBmaXJzdCBwYXNzd29yZC4NCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSWYgRmFsc2UsIHByb21wdCB0byBpbnB1dCBwYXNzd29y ZCBhZ2Fpbi4NCj4tICBAcGFyYW1bb3V0XSAgQ3JlZGVudGlhbCAgICAgUG9pbnRzIHRvIHRoZSBp bnB1dCBwYXNzd29yZC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUdldFBhc3N3b3JkICgNCj4tICBJ TiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJzdFB3ZCwNCj4tICBP VVQgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ3JlZGVudGlhbA0KPi0g ICkNCj4tew0KPi0gIEVGSV9JTlBVVF9LRVkgS2V5Ow0KPi0gIENIQVIxNiAgICAgICAgUGFzc3dv cmRNYXNrW0NSRURFTlRJQUxfTEVOICsgMV07DQo+LSAgQ0hBUjE2ICAgICAgICBQYXNzd29yZFtD UkVERU5USUFMX0xFTl07DQo+LSAgVUlOVE4gICAgICAgICBQYXNzd29yZExlbjsNCj4tICBDSEFS MTYgICAgICAgICpRdWVzdGlvblN0cjsNCj4tICBDSEFSMTYgICAgICAgICpMaW5lU3RyOw0KPi0N Cj4tICBQYXNzd29yZExlbiA9IDA7DQo+LSAgd2hpbGUgKFRSVUUpIHsNCj4tICAgIFBhc3N3b3Jk TWFza1tQYXNzd29yZExlbl0gICAgID0gTCdfJzsNCj4tICAgIFBhc3N3b3JkTWFza1tQYXNzd29y ZExlbiArIDFdID0gTCdcMCc7DQo+LSAgICBMaW5lU3RyID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5H X1RPS0VOIChTVFJfRFJBV19BX0xJTkUpKTsNCj4tICAgIGlmIChGaXJzdFB3ZCkgew0KPi0gICAg ICBRdWVzdGlvblN0ciA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTiAoU1RSX0lOUFVUX1BB U1NXT1JEKSk7DQo+LSAgICB9IGVsc2Ugew0KPi0gICAgICBRdWVzdGlvblN0ciA9IEdldFN0cmlu Z0J5SWQgKFNUUklOR19UT0tFTg0KPihTVFJfSU5QVVRfUEFTU1dPUkRfQUdBSU4pKTsNCj4tICAg IH0NCj4tICAgIENyZWF0ZVBvcFVwICgNCj4tICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNL R1JPVU5EX0JMVUUsDQo+LSAgICAgICZLZXksDQo+LSAgICAgIFF1ZXN0aW9uU3RyLA0KPi0gICAg ICBMaW5lU3RyLA0KPi0gICAgICBQYXNzd29yZE1hc2ssDQo+LSAgICAgIE5VTEwNCj4tICAgICAg KTsNCj4tICAgIEZyZWVQb29sIChRdWVzdGlvblN0cik7DQo+LSAgICBGcmVlUG9vbCAoTGluZVN0 cik7DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIENoZWNrIGtleSBzdHJva2UNCj4tICAgIC8vDQo+ LSAgICBpZiAoS2V5LlNjYW5Db2RlID09IFNDQU5fTlVMTCkgew0KPi0gICAgICBpZiAoS2V5LlVu aWNvZGVDaGFyID09IENIQVJfQ0FSUklBR0VfUkVUVVJOKSB7DQo+LSAgICAgICAgYnJlYWs7DQo+ LSAgICAgIH0gZWxzZSBpZiAoS2V5LlVuaWNvZGVDaGFyID09IENIQVJfQkFDS1NQQUNFKSB7DQo+ LSAgICAgICAgaWYgKFBhc3N3b3JkTGVuID4gMCkgew0KPi0gICAgICAgICAgUGFzc3dvcmRMZW4t LTsNCj4tICAgICAgICB9DQo+LSAgICAgIH0gZWxzZSBpZiAoKEtleS5Vbmljb2RlQ2hhciA9PSBD SEFSX05VTEwpIHx8DQo+LSAgICAgICAgICAgICAgICAgKEtleS5Vbmljb2RlQ2hhciA9PSBDSEFS X1RBQikgfHwNCj4tICAgICAgICAgICAgICAgICAoS2V5LlVuaWNvZGVDaGFyID09IENIQVJfTElO RUZFRUQpKSB7DQo+LSAgICAgICAgY29udGludWU7DQo+LSAgICAgIH0gZWxzZSB7DQo+LSAgICAg ICAgUGFzc3dvcmRbUGFzc3dvcmRMZW5dID0gS2V5LlVuaWNvZGVDaGFyOw0KPi0gICAgICAgIFBh c3N3b3JkTWFza1tQYXNzd29yZExlbl0gPSBMJyonOw0KPi0gICAgICAgIFBhc3N3b3JkTGVuKys7 DQo+LSAgICAgICAgaWYgKFBhc3N3b3JkTGVuID09IENSRURFTlRJQUxfTEVOKSB7DQo+LSAgICAg ICAgICBicmVhazsNCj4tICAgICAgICB9DQo+LSAgICAgIH0NCj4tICAgIH0NCj4tICB9DQo+LQ0K Pi0gIFBhc3N3b3JkTGVuID0gUGFzc3dvcmRMZW4gKiBzaXplb2YgKENIQVIxNik7DQo+LSAgR2Vu ZXJhdGVDcmVkZW50aWFsIChQYXNzd29yZCwgUGFzc3dvcmRMZW4sIChVSU5UOCAqKUNyZWRlbnRp YWwpOw0KPi19DQo+LQ0KPi0vKioNCj4tICBDaGVjayB3aGV0aGVyIHRoZSBwYXNzd29yZCBjYW4g YmUgZm91bmQgb24gdGhpcyBwcm92aWRlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgUGFzc3dvcmQg ICAgICAgICAgIFRoZSBwYXNzd29yZCB0byBiZSBmb3VuZC4NCj4tDQo+LSAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgIEZvdW5kIHBhc3N3b3JkIHN1Y2Vzc2Z1bGx5Lg0KPi0gIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBGYWlsIHRvIGZpbmQgdGhlIHBhc3N3b3JkLg0KPi0N Cj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tQ2hlY2tQYXNzd29yZCAoDQo+LSAgSU4gQ0hBUjggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQYXNzd29yZA0KPi0gICkNCj4tew0K Pi0gIFVJTlROICAgICAgSW5kZXg7DQo+LSAgQ0hBUjggICAgICAqUHdkOw0KPi0NCj4tICAvLw0K Pi0gIC8vIENoZWNrIHBhc3N3b3JkIGNyZWRlbnRpYWwuDQo+LSAgLy8NCj4tICBtUHdkVGFibGUt PlZhbGlkSW5kZXggPSAwOw0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qd2RUYWJsZS0+ Q291bnQ7IEluZGV4KyspIHsNCj4tICAgIFB3ZCA9IG1Qd2RUYWJsZS0+VXNlckluZm9bSW5kZXhd LlBhc3N3b3JkOw0KPi0gICAgaWYgKENvbXBhcmVNZW0gKFB3ZCwgUGFzc3dvcmQsIENSRURFTlRJ QUxfTEVOKSA9PSAwKSB7DQo+LSAgICAgIG1Qd2RUYWJsZS0+VmFsaWRJbmRleCA9IEluZGV4ICsg MTsNCj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBGaW5kIGEgdXNl ciBpbmZvbWF0aW9uIHJlY29yZCBieSB0aGUgaW5mb3JtYXRpb24gcmVjb3JkIHR5cGUuDQo+LQ0K Pi0gIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgYWxsIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkcyBv ZiBVc2VyIGZyb20gYmVnaW5uaW5nDQo+LSAgdW50aWwgZWl0aGVyIHRoZSBpbmZvcm1hdGlvbiBp cyBmb3VuZCwgb3IgdGhlcmUgYXJlIG5vIG1vcmUgdXNlciBpbmZvbWF0aW9uDQo+LSAgcmVjb3Jk cy4gQSBtYXRjaCBvY2N1cnMgd2hlbiBhIEluZm8uSW5mb1R5cGUgZmllbGQgbWF0Y2hlcyB0aGUg dXNlcg0KPmluZm9ybWF0aW9uDQo+LSAgcmVjb3JkIHR5cGUuDQo+LQ0KPi0gIEBwYXJhbVtpbl0g ICAgIFVzZXIgICAgICBQb2ludHMgdG8gdGhlIHVzZXIgcHJvZmlsZSByZWNvcmQgdG8gc2VhcmNo Lg0KPi0gIEBwYXJhbVtpbl0gICAgIEluZm9UeXBlICBUaGUgaW5mb21hdGlvbiB0eXBlIHRvIGJl IHNlYXJjaGVkLg0KPi0gIEBwYXJhbVtvdXRdICAgIEluZm8gICAgICBQb2ludHMgdG8gdGhlIHVz ZXIgaW5mbyBmb3VuZCwgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQ0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICB0byBmcmVlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg RmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbiBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBPdGhl cnMgICAgICAgICAgIEZhaWwgdG8gZmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+LSoq Lw0KPi1FRklfU1RBVFVTDQo+LUZpbmRVc2VySW5mb0J5VHlwZSAoDQo+LSAgSU4gICAgICBFRklf VVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgSU4gICAgICBVSU5U OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9UeXBlLA0KPi0gIE9VVCAgICAg RUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAqKkluZm8NCj4tICApDQo+LXsN Cj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5G TyAgICAgICAgICAgICAgKlVzZXJJbmZvOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAg IFVzZXJJbmZvU2l6ZTsNCj4tICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICBVc2VySW5mb0hh bmRsZTsNCj4tICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAqVXNlck1hbmFnZXI7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gRmluZCB1c2VyIGluZm9ybWF0aW9uIGJ5IGluZm9ybWF0aW9uIHR5cGUu DQo+LSAgLy8NCj4tICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2Nv bCAoDQo+LSAgICAgICAgICAgICAgICAgICZnRWZpVXNlck1hbmFnZXJQcm90b2NvbEd1aWQsDQo+ LSAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAm VXNlck1hbmFnZXINCj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+LSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tICB9DQo+LQ0KPi0gIC8v DQo+LSAgLy8gR2V0IGVhY2ggdXNlciBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0NCj4tICBVc2Vy SW5mb0hhbmRsZSA9IE5VTEw7DQo+LSAgVXNlckluZm8gICAgICAgPSBOVUxMOw0KPi0gIFVzZXJJ bmZvU2l6ZSAgID0gMDsNCj4tICB3aGlsZSAoVFJVRSkgew0KPi0gICAgU3RhdHVzID0gVXNlck1h bmFnZXItPkdldE5leHRJbmZvIChVc2VyTWFuYWdlciwgVXNlciwNCj4mVXNlckluZm9IYW5kbGUp Ow0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBicmVhazsNCj4tICAg IH0NCj4tICAgIC8vDQo+LSAgICAvLyBHZXQgaW5mb3JtYXRpb24uDQo+LSAgICAvLw0KPi0gICAg U3RhdHVzID0gVXNlck1hbmFnZXItPkdldEluZm8gKA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgVXNlck1hbmFnZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyLA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckluZm9IYW5kbGUsDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZVc2VySW5mb1NpemUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAg ICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+LSAgICAgIGlmIChVc2Vy SW5mbyAhPSBOVUxMKSB7DQo+LSAgICAgICAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4tICAgICAg fQ0KPi0gICAgICBVc2VySW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKFVzZXJJbmZvU2l6ZSk7DQo+ LSAgICAgIGlmIChVc2VySW5mbyA9PSBOVUxMKSB7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPi0gICAgICB9DQo+LSAgICAgIFN0YXR1cyA9IFVzZXJNYW5hZ2VyLT5H ZXRJbmZvICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlck1hbmFnZXIsDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFVzZXJJbmZvSGFuZGxlLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVc2VySW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlVzZXJJbmZv U2l6ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gICAgfQ0KPi0gICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tDQo+ LSAgICBBU1NFUlQgKFVzZXJJbmZvICE9IE5VTEwpOw0KPi0gICAgaWYgKFVzZXJJbmZvLT5JbmZv VHlwZSA9PSBJbmZvVHlwZSkgew0KPi0gICAgICAqSW5mbyA9IFVzZXJJbmZvOw0KPi0gICAgICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICBpZiAoVXNlckluZm8g IT0gTlVMTCkgew0KPi0gICAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4tICB9DQo+LSAgcmV0dXJu IFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2Vz IHRoZSByZXN1bHRzIG9mIGNoYW5nZXMgaW4gY29uZmlndXJhdGlvbi4NCj4tDQo+LSAgQHBhcmFt ICBUaGlzICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgRUZJX0hJSV9DT05GSUdfQUND RVNTX1BST1RPQ09MLg0KPi0gIEBwYXJhbSAgQWN0aW9uICAgICAgICAgICAgICAgICBTcGVjaWZp ZXMgdGhlIHR5cGUgb2YgYWN0aW9uIHRha2VuIGJ5IHRoZSBicm93c2VyLg0KPi0gIEBwYXJhbSAg UXVlc3Rpb25JZCAgICAgICAgICAgICBBIHVuaXF1ZSB2YWx1ZSB3aGljaCBpcyBzZW50IHRvIHRo ZSBvcmlnaW5hbA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRpbmcg ZHJpdmVyIHNvIHRoYXQgaXQgY2FuIGlkZW50aWZ5IHRoZSB0eXBlDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9mIGRhdGEgdG8gZXhwZWN0Lg0KPi0gIEBwYXJhbSAgVHlwZSAg ICAgICAgICAgICAgICAgICBUaGUgdHlwZSBvZiB2YWx1ZSBmb3IgdGhlIHF1ZXN0aW9uLg0KPi0g IEBwYXJhbSAgVmFsdWUgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGRhdGEgYmVp bmcgc2VudCB0byB0aGUgb3JpZ2luYWwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXhwb3J0aW5nIGRyaXZlci4NCj4tICBAcGFyYW0gIEFjdGlvblJlcXVlc3QgICAgICAgICAg T24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIGFjdGlvbiByZXF1ZXN0ZWQgYnkNCj50aGUNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgZnVuY3Rpb24uDQo+LQ0KPi0g IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY2FsbGJhY2sgc3VjY2Vzc2Z1bGx5 IGhhbmRsZWQgdGhlIGFjdGlvbi4NCj4tICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAg Tm90IGVub3VnaCBzdG9yYWdlIGlzIGF2YWlsYWJsZSB0byBob2xkDQo+dGhlDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCBpdHMgZGF0YS4NCj4tICBAcmV0 dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhlIHZhcmlhYmxlIGNvdWxkIG5vdCBiZSBzYXZl ZC4NCj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgVGhlIHNwZWNpZmllZCBBY3Rp b24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FsbGJhY2suDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3Jl ZGVudGlhbERyaXZlckNhbGxiYWNrICgNCj4tICBJTiAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUND RVNTX1BST1RPQ09MICAgKlRoaXMsDQo+LSAgSU4gIEVGSV9CUk9XU0VSX0FDVElPTiAgICAgICAg ICAgICAgICAgICAgIEFjdGlvbiwNCj4tICBJTiAgRUZJX1FVRVNUSU9OX0lEICAgICAgICAgICAg ICAgICAgICAgICAgUXVlc3Rpb25JZCwNCj4tICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVHlwZSwNCj4tICBJTiAgRUZJX0lGUl9UWVBFX1ZBTFVFICAgICAgICAg ICAgICAgICAgICAgKlZhbHVlLA0KPi0gIE9VVCBFRklfQlJPV1NFUl9BQ1RJT05fUkVRVUVTVCAg ICAgICAgICAgICAqQWN0aW9uUmVxdWVzdA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAg U3RhdHVzOw0KPi0gIEVGSV9JTlBVVF9LRVkgS2V5Ow0KPi0gIENIQVI4ICAgICAgICAgUGFzc3dv cmRbQ1JFREVOVElBTF9MRU5dOw0KPi0gIENIQVIxNiAgICAgICAgKlByb21wdFN0cjsNCj4tDQo+ LSAgaWYgKEFjdGlvbiA9PSBFRklfQlJPV1NFUl9BQ1RJT05fQ0hBTkdFRCkgew0KPi0gICAgaWYg KFF1ZXN0aW9uSWQgPT0gS0VZX0dFVF9QQVNTV09SRCkgew0KPi0gICAgICAvLw0KPi0gICAgICAv LyBHZXQgYW5kIGNoZWNrIHBhc3N3b3JkLg0KPi0gICAgICAvLw0KPi0gICAgICBHZXRQYXNzd29y ZCAoVFJVRSwgUGFzc3dvcmQpOw0KPi0gICAgICBTdGF0dXMgPSBDaGVja1Bhc3N3b3JkIChQYXNz d29yZCk7DQo+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgICBQcm9t cHRTdHIgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4oU1RSX1BBU1NXT1JEX0lOQ09S UkVDVCkpOw0KPi0gICAgICAgIENyZWF0ZVBvcFVwICgNCj4tICAgICAgICAgIEVGSV9MSUdIVEdS QVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPi0gICAgICAgICAgJktleSwNCj4tICAgICAgICAg IEwiIiwNCj4tICAgICAgICAgIFByb21wdFN0ciwNCj4tICAgICAgICAgIEwiIiwNCj4tICAgICAg ICAgIE5VTEwNCj4tICAgICAgICAgICk7DQo+LSAgICAgICAgRnJlZVBvb2wgKFByb21wdFN0cik7 DQo+LSAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4tICAgICAgfQ0KPi0gICAgICAqQWN0aW9uUmVx dWVzdCAgPSBFRklfQlJPV1NFUl9BQ1RJT05fUkVRVUVTVF9FWElUOw0KPi0gICAgfQ0KPi0gICAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBBbGwgb3RoZXIg YWN0aW9uIHJldHVybiB1bnN1cHBvcnRlZC4NCj4tICAvLw0KPi0gIHJldHVybiBFRklfVU5TVVBQ T1JURUQ7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBUaGlzIGZ1bmN0aW9uIGFsbG93cyBhIGNh bGxlciB0byBleHRyYWN0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIG9uZQ0KPi0gIG9y IG1vcmUgbmFtZWQgZWxlbWVudHMgZnJvbSB0aGUgdGFyZ2V0IGRyaXZlci4NCj4tDQo+LQ0KPi0g IEBwYXJhbSBUaGlzICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBFRklfSElJX0NPTkZJR19BQ0NF U1NfUFJPVE9DT0wuDQo+LSAgQHBhcmFtIFJlcXVlc3QgICAgICAgICBBIG51bGwtdGVybWluYXRl ZCBVbmljb2RlIHN0cmluZyBpbiA8Q29uZmlnUmVxdWVzdD4NCj5mb3JtYXQuDQo+LSAgQHBhcmFt IFByb2dyZXNzICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byBhIGNoYXJhY3RlciBpbiB0aGUg UmVxdWVzdCBzdHJpbmcuDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhl IHN0cmluZydzIG51bGwgdGVybWluYXRvciBpZiByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsLg0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBtb3N0IHJlY2VudCAnJicgYmVm b3JlIHRoZSBmaXJzdCBmYWlsaW5nIG5hbWUvdmFsdWUNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgIHBhaXIgKG9yIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBpZiB0aGUgZmFpbHVyZSBp cyBpbiB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0IG5hbWUvdmFsdWUgcGFp cikgaWYgdGhlIHJlcXVlc3Qgd2FzIG5vdCBzdWNjZXNzZnVsLg0KPi0gIEBwYXJhbSBSZXN1bHRz ICAgICAgICAgQSBudWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcgaW4gPENvbmZpZ0FsdFJl c3A+DQo+Zm9ybWF0IHdoaWNoDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxsIHZh bHVlcyBmaWxsZWQgaW4gZm9yIHRoZSBuYW1lcyBpbiB0aGUgUmVxdWVzdCBzdHJpbmcuDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG8gYmUgYWxsb2NhdGVkIGJ5IHRoZSBjYWxs ZWQgZnVuY3Rpb24uDQo+LQ0KPi0gIEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhl IFJlc3VsdHMgaXMgZmlsbGVkIHdpdGggdGhlIHJlcXVlc3RlZCB2YWx1ZXMuDQo+LSAgQHJldHZh bCAgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBOb3QgZW5vdWdoIG1lbW9yeSB0byBzdG9yZSB0aGUN Cj5yZXN1bHRzLg0KPi0gIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgUmVxdWVzdCBp cyBpbGxlZ2FsIHN5bnRheCwgb3IgdW5rbm93bg0KPm5hbWUuDQo+LSAgQHJldHZhbCAgRUZJX05P VF9GT1VORCAgICAgICAgICBSb3V0aW5nIGRhdGEgZG9lc24ndCBtYXRjaCBhbnkgc3RvcmFnZSBp bg0KPnRoaXMgZHJpdmVyLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUZh a2VFeHRyYWN0Q29uZmlnICgNCj4tICBJTiAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BS T1RPQ09MICAgKlRoaXMsDQo+LSAgSU4gIENPTlNUIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAg ICAgICAgIFJlcXVlc3QsDQo+LSAgT1VUIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpQcm9ncmVzcywNCj4tICBPVVQgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKlJlc3VsdHMNCj4tICApDQo+LXsNCj4tICBpZiAoUHJvZ3Jlc3MgPT0gTlVMTCB8 fCBSZXN1bHRzID09IE5VTEwpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQo+LSAgfQ0KPi0gICpQcm9ncmVzcyA9IFJlcXVlc3Q7DQo+LSAgcmV0dXJuIEVGSV9OT1RfRk9V TkQ7DQo+LX0NCj4tDQo+LS8qKg0KPi0gIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSByZXN1 bHRzIG9mIGNoYW5nZXMgaW4gY29uZmlndXJhdGlvbi4NCj4tDQo+LQ0KPi0gIEBwYXJhbSBUaGlz ICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wu DQo+LSAgQHBhcmFtIENvbmZpZ3VyYXRpb24gICBBIG51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0 cmluZyBpbiA8Q29uZmlnUmVzcD4NCj5mb3JtYXQuDQo+LSAgQHBhcmFtIFByb2dyZXNzICAgICAg ICBBIHBvaW50ZXIgdG8gYSBzdHJpbmcgZmlsbGVkIGluIHdpdGggdGhlIG9mZnNldCBvZiB0aGUN Cj5tb3N0DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICByZWNlbnQgJyYnIGJlZm9yZSB0aGUg Zmlyc3QgZmFpbGluZyBuYW1lL3ZhbHVlIHBhaXIgKG9yIHRoZQ0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgaWYgdGhlIGZhaWx1cmUgaXMgaW4gdGhl IGZpcnN0DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lL3ZhbHVlIHBhaXIpIG9yIHRo ZSB0ZXJtaW5hdGluZyBOVUxMIGlmIGFsbCB3YXMgc3VjY2Vzc2Z1bC4NCj4tDQo+LSAgQHJldHZh bCAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgUmVzdWx0cyBpcyBwcm9jZXNzZWQgc3VjY2Vz c2Z1bGx5Lg0KPi0gIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgQ29uZmlndXJhdGlv biBpcyBOVUxMLg0KPi0gIEByZXR2YWwgIEVGSV9OT1RfRk9VTkQgICAgICAgICAgUm91dGluZyBk YXRhIGRvZXNuJ3QgbWF0Y2ggYW55IHN0b3JhZ2UgaW4NCj50aGlzIGRyaXZlci4NCj4tDQo+LSoq Lw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1GYWtlUm91dGVDb25maWcgKA0KPi0gIElOICBD T05TVCBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgICAqVGhpcywNCj4tICBJTiAgQ09O U1QgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiwNCj4tICBP VVQgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlByb2dyZXNzDQo+LSAg KQ0KPi17DQo+LSAgaWYgKENvbmZpZ3VyYXRpb24gPT0gTlVMTCB8fCBQcm9ncmVzcyA9PSBOVUxM KSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAg KlByb2dyZXNzID0gQ29uZmlndXJhdGlvbjsNCj4tDQo+LSAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7 DQo+LX0NCj4tDQo+LS8qKg0KPi0gIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZSB0aGUgZGF0YSBt YWlubHkgdXNlZCBpbiBmb3JtIGJyb3dzZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgSW5pdGlhbGl6ZSBmb3JtIGRhdGEgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwg T3RoZXJzICAgICAgICAgICAgICAgRmFpbCB0byBJbml0aWFsaXplIGZvcm0gZGF0YS4NCj4tDQo+ LSoqLw0KPi1FRklfU1RBVFVTDQo+LUluaXRGb3JtQnJvd3NlciAoDQo+LSAgVk9JRA0KPi0gICkN Cj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgUFdEX1BS T1ZJREVSX0NBTExCQUNLX0lORk8gICpDYWxsYmFja0luZm87DQo+LQ0KPi0gIC8vDQo+LSAgLy8g SW5pdGlhbGl6ZSBkcml2ZXIgcHJpdmF0ZSBkYXRhLg0KPi0gIC8vDQo+LSAgQ2FsbGJhY2tJbmZv ID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChQV0RfUFJPVklERVJfQ0FMTEJBQ0tfSU5GTykp Ow0KPi0gIGlmIChDYWxsYmFja0luZm8gPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPi0gIH0NCj4tDQo+LSAgQ2FsbGJhY2tJbmZvLT5TaWduYXR1cmUgICAg ICAgICAgICAgICAgICAgPSBQV0RfUFJPVklERVJfU0lHTkFUVVJFOw0KPi0gIENhbGxiYWNrSW5m by0+Q29uZmlnQWNjZXNzLkV4dHJhY3RDb25maWcgID0gRmFrZUV4dHJhY3RDb25maWc7DQo+LSAg Q2FsbGJhY2tJbmZvLT5Db25maWdBY2Nlc3MuUm91dGVDb25maWcgICAgPSBGYWtlUm91dGVDb25m aWc7DQo+LSAgQ2FsbGJhY2tJbmZvLT5Db25maWdBY2Nlc3MuQ2FsbGJhY2sgICAgICAgPSBDcmVk ZW50aWFsRHJpdmVyQ2FsbGJhY2s7DQo+LSAgQ2FsbGJhY2tJbmZvLT5Ecml2ZXJIYW5kbGUgID0g TlVMTDsNCj4tDQo+LSAgLy8NCj4tICAvLyBJbnN0YWxsIERldmljZSBQYXRoIFByb3RvY29sIGFu ZCBDb25maWcgQWNjZXNzIHByb3RvY29sIHRvIGRyaXZlciBoYW5kbGUuDQo+LSAgLy8NCj4tICBT dGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+LSAgICAg ICAgICAgICAgICAgICZDYWxsYmFja0luZm8tPkRyaXZlckhhbmRsZSwNCj4tICAgICAgICAgICAg ICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPi0gICAgICAgICAgICAgICAgICAm bUhpaVZlbmRvckRldmljZVBhdGgsDQo+LSAgICAgICAgICAgICAgICAgICZnRWZpSGlpQ29uZmln QWNjZXNzUHJvdG9jb2xHdWlkLA0KPi0gICAgICAgICAgICAgICAgICAmQ2FsbGJhY2tJbmZvLT5D b25maWdBY2Nlc3MsDQo+LSAgICAgICAgICAgICAgICAgIE5VTEwNCj4tICAgICAgICAgICAgICAg ICAgKTsNCj4tICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPi0NCj4tICAvLw0KPi0gIC8v IFB1Ymxpc2ggSElJIGRhdGEuDQo+LSAgLy8NCj4tICBDYWxsYmFja0luZm8tPkhpaUhhbmRsZSA9 IEhpaUFkZFBhY2thZ2VzICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdQd2RD cmVkZW50aWFsUHJvdmlkZXJHdWlkLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD YWxsYmFja0luZm8tPkRyaXZlckhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHdkQ3JlZGVudGlhbFByb3ZpZGVyU3RyaW5ncywNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHdkQ3JlZGVudGlhbFByb3ZpZGVyVmZyQmluLA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ LSAgaWYgKENhbGxiYWNrSW5mby0+SGlpSGFuZGxlID09IE5VTEwpIHsNCj4tICAgIHJldHVybiBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9DQo+LSAgbUNhbGxiYWNrSW5mbyA9IENhbGxiYWNr SW5mbzsNCj4tDQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEVu cm9sbCBhIHVzZXIgb24gYSBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0NCj4tICBUaGlzIGZ1bmN0 aW9uIGVucm9sbHMgYSB1c2VyIG9uIHRoaXMgY3JlZGVudGlhbCBwcm92aWRlci4gSWYgdGhlIHVz ZXIgZXhpc3RzIG9uDQo+LSAgdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLCB1cGRhdGUgdGhlIHVz ZXIgaW5mb3JtYXRpb24gb24gdGhpcyBjcmVkZW50aWFsDQo+cHJvdmlkZXI7DQo+LSAgb3RoZXJ3 aXNlIGFkZCB0aGUgdXNlciBpbmZvcm1hdGlvbiBvbiBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0N Cj4tICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFu Y2Ugb2YNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1baW5dIFVz ZXIgICAgICAgICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSB0byBlbnJvbGwuDQo+LQ0KPi0gIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1Y2Nlc3NmdWxs eSBlbnJvbGxlZC4NCj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgQ3VycmVudCB1 c2VyIHByb2ZpbGUgZG9lcyBub3QgcGVybWl0DQo+ZW5yb2xsbWVudCBvbiB0aGUNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBwcm9maWxlIGhhbmRsZS4gRWl0aGVyIHRo ZSB1c2VyIHByb2ZpbGUgY2Fubm90IGVucm9sbA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvbiBhbnkgdXNlciBwcm9maWxlIG9yIGNhbm5vdCBlbnJvbGwgb24gYSB1c2VyIHBy b2ZpbGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiB0aGUg Y3VycmVudCB1c2VyIHByb2ZpbGUuDQo+LSAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAg IFRoaXMgY3JlZGVudGlhbCBwcm92aWRlciBkb2VzIG5vdCBzdXBwb3J0DQo+ZW5yb2xsbWVudCBp bg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJlLU9TLg0KPi0gIEBy ZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICBUaGUgbmV3IGNyZWRlbnRpYWwgY291bGQgbm90 IGJlIGNyZWF0ZWQNCj5iZWNhdXNlIG9mIGEgZGV2aWNlDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVycm9yLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBV c2VyIGRvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgdXNlcg0KPnByb2ZpbGUgaGFuZGxlLg0KPi0N Cj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxFbnJvbGwgKA0KPi0g IElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4t ICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgVXNlcg0KPi0g ICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPi0gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+LSAgUEFTU1dPUkRfSU5GTyAgICAgICAgICAg ICBQd2RJbmZvOw0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgKlVzZXJJbmZvOw0KPi0g IENIQVI4ICAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRbQ1JFREVOVElBTF9MRU5dOw0KPi0g IEVGSV9JTlBVVF9LRVkgICAgICAgICAgICAgS2V5Ow0KPi0gIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgKlVzZXJJZDsNCj4tICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICpRdWVzdGlvblN0 cjsNCj4tICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICpQcm9tcHRTdHI7DQo+LQ0KPi0gIGlm ICgoVGhpcyA9PSBOVUxMKSB8fCAoVXNlciA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IFVzZXIgSWRl bnRpZmllci4NCj4tICAvLw0KPi0gIFVzZXJJbmZvID0gTlVMTDsNCj4tICBTdGF0dXMgPSBGaW5k VXNlckluZm9CeVR5cGUgKA0KPi0gICAgICAgICAgICAgVXNlciwNCj4tICAgICAgICAgICAgIEVG SV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQsDQo+LSAgICAgICAgICAgICAmVXNlckluZm8N Cj4tICAgICAgICAgICAgICk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIENvcHlNZW0gKFB3 ZEluZm8uVXNlcklkLCAoVUlOVDggKikgKFVzZXJJbmZvICsgMSksIHNpemVvZg0KPihFRklfVVNF Ul9JTkZPX0lERU5USUZJRVIpKTsNCj4tICBGcmVlUG9vbCAoVXNlckluZm8pOw0KPi0NCj4tICAv Lw0KPi0gIC8vIEdldCBwYXNzd29yZCBmcm9tIHVzZXIuDQo+LSAgLy8NCj4tICB3aGlsZSAoVFJV RSkgew0KPi0gICAgLy8NCj4tICAgIC8vIElucHV0IHBhc3N3b3JkLg0KPi0gICAgLy8NCj4tICAg IEdldFBhc3N3b3JkIChUUlVFLCBQd2RJbmZvLlBhc3N3b3JkKTsNCj4tDQo+LSAgICAvLw0KPi0g ICAgLy8gSW5wdXQgcGFzc3dvcmQgYWdhaW4uDQo+LSAgICAvLw0KPi0gICAgR2V0UGFzc3dvcmQg KEZBTFNFLCBQYXNzd29yZCk7DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIENvbXBhcmUgdGhlIHR3 byBwYXNzd29yZCBjb25zaXN0ZW5jeS4NCj4tICAgIC8vDQo+LSAgICBpZiAoQ29tcGFyZU1lbSAo UHdkSW5mby5QYXNzd29yZCwgUGFzc3dvcmQsIENSRURFTlRJQUxfTEVOKSA9PSAwKSB7DQo+LSAg ICAgIGJyZWFrOw0KPi0gICAgfQ0KPi0NCj4tICAgIFF1ZXN0aW9uU3RyID0gR2V0U3RyaW5nQnlJ ZCAoU1RSSU5HX1RPS0VODQo+KFNUUl9QQVNTV09SRF9NSVNNQVRDSCkpOw0KPi0gICAgUHJvbXB0 U3RyICAgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4oU1RSX0lOUFVUX1BBU1NXT1JE X0FHQUlOKSk7DQo+LSAgICBDcmVhdGVQb3BVcCAoDQo+LSAgICAgIEVGSV9MSUdIVEdSQVkgfCBF RklfQkFDS0dST1VORF9CTFVFLA0KPi0gICAgICAmS2V5LA0KPi0gICAgICBRdWVzdGlvblN0ciwN Cj4tICAgICAgTCIiLA0KPi0gICAgICBQcm9tcHRTdHIsDQo+LSAgICAgIE5VTEwNCj4tICAgICAg KTsNCj4tICAgIEZyZWVQb29sIChRdWVzdGlvblN0cik7DQo+LSAgICBGcmVlUG9vbCAoUHJvbXB0 U3RyKTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgd2hldGhlciBVc2VyIGlzIGV2 ZXIgZW5yb2xsZWQgaW4gdGhlIHByb3ZpZGVyLg0KPi0gIC8vDQo+LSAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgbVB3ZFRhYmxlLT5Db3VudDsgSW5kZXgrKykgew0KPi0gICAgVXNlcklkID0gKFVJ TlQ4ICopICZtUHdkVGFibGUtPlVzZXJJbmZvW0luZGV4XS5Vc2VySWQ7DQo+LSAgICBpZiAoQ29t cGFyZU1lbSAoVXNlcklkLCAoVUlOVDggKikgJlB3ZEluZm8uVXNlcklkLCBzaXplb2YNCj4oRUZJ X1VTRVJfSU5GT19JREVOVElGSUVSKSkgPT0gMCkgew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBV c2VyIGFscmVhZHkgZXhpc3RzLCB1cGRhdGUgdGhlIHBhc3N3b3JkLg0KPi0gICAgICAvLw0KPi0g ICAgICBicmVhazsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRW5yb2xsIHRo ZSBVc2VyIHRvIHRoZSBwcm92aWRlci4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IE1vZGlmeVRhYmxl IChJbmRleCwgJlB3ZEluZm8pOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAg IHJldHVybiBTdGF0dXM7DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0N Cj4tDQo+LQ0KPi0vKioNCj4tICBSZXR1cm5zIHRoZSB1c2VyIGludGVyZmFjZSBpbmZvcm1hdGlv biB1c2VkIGR1cmluZyB1c2VyIGlkZW50aWZpY2F0aW9uLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9u IHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZvcm0gdXNlZCB3aGVuIGludGVyYWN0aW5n DQo+d2l0aCB0aGUNCj4tICB1c2VyIGR1cmluZyB1c2VyIGlkZW50aWZpY2F0aW9uLiBUaGUgZm9y bSBpcyB0aGUgZmlyc3QgZW5hYmxlZCBmb3JtIGluIHRoZQ0KPmZvcm0tc2V0DQo+LSAgY2xhc3Mg RUZJX0hJSV9VU0VSX0NSRURFTlRJQUxfRk9STVNFVF9HVUlEIGluc3RhbGxlZCBvbiB0aGUgSElJ DQo+aGFuZGxlIEhpaUhhbmRsZS4gSWYNCj4tICB0aGUgdXNlciBjcmVkZW50aWFsIHByb3ZpZGVy IGRvZXMgbm90IHJlcXVpcmUgYSBmb3JtIHRvIGlkZW50aWZ5IHRoZSB1c2VyLA0KPnRoZW4gdGhp cw0KPi0gIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gRUZJX05PVF9GT1VORC4NCj4tDQo+LSAgQHBh cmFtW2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklf VVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1bb3V0XSBIaWkgICAgICAgIE9u IHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFzZSBoYW5kbGUuDQo+LSAgQHBhcmFtW291dF0g Rm9ybVNldElkICBPbiByZXR1cm4sIGhvbGRzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBmb3JtIHNl dA0KPndoaWNoIGNvbnRhaW5zDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9ybSB1 c2VkIGR1cmluZyB1c2VyIGlkZW50aWZpY2F0aW9uLg0KPi0gIEBwYXJhbVtvdXRdIEZvcm1JZCAg ICAgT24gcmV0dXJuLCBob2xkcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgZm9ybSB1c2VkDQo+ZHVy aW5nIHVzZXINCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpY2F0aW9uLg0KPi0N Cj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgRm9ybSByZXR1cm5lZCBzdWNjZXNz ZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIEZvcm0gbm90IHJldHVy bmVkLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBIaWkgaXMgTlVMTCBvciBG b3JtU2V0SWQgaXMgTlVMTCBvcg0KPkZvcm1JZCBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9T VEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxGb3JtICgNCj4tICBJTiBDT05TVCAgRUZJX1VT RVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgT1VUICAgICAgIEVGSV9I SUlfSEFORExFICAgICAgICAgICAgICAgICAgICAgICpIaWksDQo+LSAgT1VUICAgICAgIEVGSV9H VUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICpGb3JtU2V0SWQsDQo+LSAgT1VUICAgICAg IEVGSV9GT1JNX0lEICAgICAgICAgICAgICAgICAgICAgICAgICpGb3JtSWQNCj4tICApDQo+LXsN Cj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKEhpaSA9PSBOVUxMKSB8fA0KPi0gICAgICAoRm9y bVNldElkID09IE5VTEwpIHx8IChGb3JtSWQgPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICAqSGlpICAgICAgID0gbUNhbGxiYWNr SW5mby0+SGlpSGFuZGxlOw0KPi0gICpGb3JtSWQgICAgPSBGT1JNSURfR0VUX1BBU1NXT1JEX0ZP Uk07DQo+LSAgQ29weUd1aWQgKEZvcm1TZXRJZCwgJmdQd2RDcmVkZW50aWFsUHJvdmlkZXJHdWlk KTsNCj4tDQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAg UmV0dXJucyBiaXRtYXAgdXNlZCB0byBkZXNjcmliZSB0aGUgY3JlZGVudGlhbCBwcm92aWRlciB0 eXBlLg0KPi0NCj4tICBUaGlzIG9wdGlvbmFsIGZ1bmN0aW9uIHJldHVybnMgYSBiaXRtYXAgdGhh dCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlDQo+bnVtYmVyDQo+LSAgb2YgcGl4ZWxzIHNw ZWNpZmllZCBieSBXaWR0aCBhbmQgSGVpZ2h0LiBJZiBubyBzdWNoIGJpdG1hcCBleGlzdHMsIHRo ZW4NCj5FRklfTk9UX0ZPVU5EDQo+LSAgaXMgcmV0dXJuZWQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0g ICAgICBUaGlzICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NS RURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBXaWR0aCAgIE9uIGVudHJ5 LCBwb2ludHMgdG8gdGhlIGRlc2lyZWQgYml0bWFwIHdpZHRoLiBJZg0KPk5VTEwgdGhlbiBubw0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBpbmZvcm1hdGlvbiB3aWxsIGJlIHJl dHVybmVkLiBPbiBleGl0LCBwb2ludHMgdG8gdGhlDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgd2lkdGggb2YgdGhlIGJpdG1hcCByZXR1cm5lZC4NCj4tICBAcGFyYW1baW4sIG91dF0gSGVp Z2h0ICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBkZXNpcmVkIGJpdG1hcCBoZWlnaHQuIElmDQo+ TlVMTCB0aGVuIG5vDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIGluZm9ybWF0 aW9uIHdpbGwgYmUgcmV0dXJuZWQuIE9uIGV4aXQsIHBvaW50cyB0byB0aGUNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICBoZWlnaHQgb2YgdGhlIGJpdG1hcCByZXR1cm5lZA0KPi0gIEBwYXJh bVtvdXRdICAgICBIaWkgICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFzZSBoYW5k bGUuDQo+LSAgQHBhcmFtW291dF0gICAgIEltYWdlICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJ IGltYWdlIGlkZW50aWZpZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg ICBJbWFnZSBpZGVudGlmaWVyIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgICAgICAgICAgSW1hZ2UgaWRlbnRpZmllciBub3QgcmV0dXJuZWQuDQo+LSAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEhpaSBpcyBOVUxMIG9yIEltYWdlIGlzIE5V TEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbFRpbGUg KA0KPi0gIElOICBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRo aXMsDQo+LSAgSU4gIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq V2lkdGgsDQo+LSAgSU4gIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqSGVpZ2h0LA0KPi0gICAgICBPVVQgICAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgICAgKkhpaSwNCj4tICAgICAgT1VUICAgIEVGSV9JTUFHRV9JRCAgICAgICAgICAgICAgICAg ICAgICAgICpJbWFnZQ0KPi0gICkNCj4tew0KPi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoSGlp ID09IE5VTEwpIHx8IChJbWFnZSA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LX0NCj4tDQo+ LQ0KPi0vKioNCj4tICBSZXR1cm5zIHN0cmluZyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBjcmVkZW50 aWFsIHByb3ZpZGVyIHR5cGUuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmlu ZyB3aGljaCBkZXNjcmliZXMgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIuIElmIG5vDQo+LSAgc3Vj aCBzdHJpbmcgZXhpc3RzLCB0aGVuIEVGSV9OT1RfRk9VTkQgaXMgcmV0dXJuZWQuDQo+LQ0KPi0g IEBwYXJhbVtpbl0gIFRoaXMgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+ RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW291dF0gSGlpICAgICAg ICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgZGF0YWJhc2UgaGFuZGxlLg0KPi0gIEBwYXJhbVtv dXRdIFN0cmluZyAgICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJIHN0cmluZyBpZGVudGlmaWVy Lg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgU3RyaW5nIGlkZW50aWZp ZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAg ICAgICBTdHJpbmcgaWRlbnRpZmllciBub3QgcmV0dXJuZWQuDQo+LSAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgIEhpaSBpcyBOVUxMIG9yIFN0cmluZyBpcyBOVUxMLg0KPi0NCj4tKiov DQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxUaXRsZSAoDQo+LSAgSU4gQ09O U1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIE9VVCAg ICAgICBFRklfSElJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAqSGlpLA0KPi0gIE9VVCAg ICAgICBFRklfU1RSSU5HX0lEICAgICAgICAgICAgICAgICAgICAgICAqU3RyaW5nDQo+LSAgKQ0K Pi17DQo+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChIaWkgPT0gTlVMTCkgfHwgKFN0cmluZyA9 PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gU2V0IEhpaSBoYW5kbGUgYW5kIFN0cmluZyBJRC4NCj4tICAvLw0K Pi0gICpIaWkgICAgPSBtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGU7DQo+LSAgKlN0cmluZyA9IFNU UklOR19UT0tFTiAoU1RSX0NSRURFTlRJQUxfVElUTEUpOw0KPi0NCj4tICByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBSZXR1cm4gdGhlIHVzZXIgaWRlbnRpZmll ciBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnRseSBhdXRoZW50aWNhdGVkIHVzZXIuDQo+LQ0K Pi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdXNlciBpZGVudGlmaWVyIG9mIHRoZSB1c2Vy IGF1dGhlbnRpY2F0ZWQgYnkgdGhpcw0KPmNyZWRlbnRpYWwNCj4tICBwcm92aWRlci4gVGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwtcmVsYXRlZCBpbmZvcm1hdGlv biBoYXMNCj5iZWVuDQo+LSAgc3VibWl0dGVkIG9uIGEgZm9ybSwgT1IgYWZ0ZXIgYSBjYWxsIHRv IERlZmF1bHQoKSBoYXMgcmV0dXJuZWQgdGhhdCB0aGlzDQo+Y3JlZGVudGlhbCBpcw0KPi0gIHJl YWR5IHRvIGxvZyBvbi4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgUG9pbnRz IHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wu DQo+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUg b2YgdGhlIHVzZXIgcHJvZmlsZSBjdXJyZW50bHkNCj5iZWluZw0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnNpZGVyZWQgYnkgdGhlIHVzZXIgaWRlbnRpdHkgbWFuYWdlci4gSWYg TlVMTCwgdGhlbiBubyB1c2VyDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmls ZSBpcyBjdXJyZW50bHkgdW5kZXIgY29uc2lkZXJhdGlvbi4NCj4tICBAcGFyYW1bb3V0XSBJZGVu dGlmaWVyICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgdXNlciBpZGVudGlmaWVyLg0KPi0N Cj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciBpZGVudGlmaWVyIHJldHVy bmVkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAgICAgICAgTm8g dXNlciBpZGVudGlmaWVyIGNhbiBiZSByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9BQ0NFU1Nf REVOSUVEICAgICAgVGhlIHVzZXIgaGFzIGJlZW4gbG9ja2VkIG91dCBvZiB0aGlzIHVzZXINCj5j cmVkZW50aWFsLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGlzIGlzIE5V TEwsIG9yIElkZW50aWZpZXIgaXMgTlVMTC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAg ICAgICAgVXNlciBpcyBub3QgTlVMTCwgYW5kIHRoZSBzcGVjaWZpZWQgdXNlcg0KPmhhbmRsZSBj YW4ndCBiZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBpbiB1c2Vy IHByb2ZpbGUgZGF0YWJhc2UNCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1D cmVkZW50aWFsVXNlciAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RP Q09MICAgICAgICpUaGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAg ICAgICAgICAgICBVc2VyLA0KPi0gIE9VVCAgICAgICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVIg ICAgICAgICAgICAqSWRlbnRpZmllcg0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgU3Rh dHVzOw0KPi0gIFVJTlROICAgICAgICAgSW5kZXg7DQo+LSAgRUZJX1VTRVJfSU5GTyAqVXNlcklu Zm87DQo+LSAgVUlOVDggICAgICAgICAqVXNlcklkOw0KPi0gIFVJTlQ4ICAgICAgICAgKk5ld1Vz ZXJJZDsNCj4tICBDSEFSOCAgICAgICAgICpQd2Q7DQo+LSAgQ0hBUjggICAgICAgICAqTmV3UHdk Ow0KPi0NCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKElkZW50aWZpZXIgPT0gTlVMTCkpIHsN Cj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICBpZiAo bVB3ZFRhYmxlLT5WYWxpZEluZGV4ID09IDApIHsNCj4tICAgIC8vDQo+LSAgICAvLyBObyBwYXNz d29yZCBpbnB1dCwgb3IgdGhlIGlucHV0IHBhc3N3b3JkIGRvZXNuJ3QgbWF0Y2gNCj4tICAgIC8v IGFueW9uZSBpbiBQd2RUYWJsZS4NCj4tICAgIC8vDQo+LSAgICByZXR1cm4gRUZJX05PVF9SRUFE WTsNCj4tICB9DQo+LQ0KPi0gIGlmIChVc2VyID09IE5VTEwpIHsNCj4tICAgIC8vDQo+LSAgICAv LyBSZXR1cm4gdGhlIHVzZXIgSUQgd2hvc2UgcGFzc3dvcmQgbWF0Y2hlcyB0aGUgaW5wdXQgcGFz c3dvcmQuDQo+LSAgICAvLw0KPi0gICAgQ29weU1lbSAoDQo+LSAgICAgIElkZW50aWZpZXIsDQo+ LSAgICAgICZtUHdkVGFibGUtPlVzZXJJbmZvW21Qd2RUYWJsZS0+VmFsaWRJbmRleCAtIDFdLlVz ZXJJZCwNCj4tICAgICAgc2l6ZW9mIChFRklfVVNFUl9JTkZPX0lERU5USUZJRVIpDQo+LSAgICAg ICk7DQo+LSAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8v IEdldCB0aGUgVXNlcidzIElELg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlU eXBlICgNCj4tICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAgICAgICAgICBFRklfVVNFUl9JTkZP X0lERU5USUZJRVJfUkVDT1JELA0KPi0gICAgICAgICAgICAgJlVzZXJJbmZvDQo+LSAgICAgICAg ICAgICApOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIHJldHVybiBFRklf Tk9UX0ZPVU5EOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayB3aGV0aGVyIHRoZSBp bnB1dCBwYXNzd29yZCBtYXRjaGVzIG9uZSBpbiBQd2RUYWJsZS4NCj4tICAvLw0KPi0gIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IG1Qd2RUYWJsZS0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgIFVz ZXJJZCAgICA9IChVSU5UOCAqKSAmbVB3ZFRhYmxlLT5Vc2VySW5mb1tJbmRleF0uVXNlcklkOw0K Pi0gICAgTmV3VXNlcklkID0gKFVJTlQ4ICopIChVc2VySW5mbyArIDEpOw0KPi0gICAgaWYgKENv bXBhcmVNZW0gKFVzZXJJZCwgTmV3VXNlcklkLCBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJ RklFUikpDQo+PT0gMCkgew0KPi0gICAgICBQd2QgICAgPSBtUHdkVGFibGUtPlVzZXJJbmZvW0lu ZGV4XS5QYXNzd29yZDsNCj4tICAgICAgTmV3UHdkID0gbVB3ZFRhYmxlLT5Vc2VySW5mb1ttUHdk VGFibGUtPlZhbGlkSW5kZXggLSAxXS5QYXNzd29yZDsNCj4tICAgICAgaWYgKENvbXBhcmVNZW0g KFB3ZCwgTmV3UHdkLCBDUkVERU5USUFMX0xFTikgPT0gMCkgew0KPi0gICAgICAgIENvcHlNZW0g KElkZW50aWZpZXIsIFVzZXJJZCwgc2l6ZW9mIChFRklfVVNFUl9JTkZPX0lERU5USUZJRVIpKTsN Cj4tICAgICAgICBGcmVlUG9vbCAoVXNlckluZm8pOw0KPi0gICAgICAgIHJldHVybiBFRklfU1VD Q0VTUzsNCj4tICAgICAgfQ0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAgRnJlZVBvb2wgKFVzZXJJ bmZvKTsNCj4tICByZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0g IEluZGljYXRlIHRoYXQgdXNlciBpbnRlcmZhY2UgaW50ZXJhY3Rpb24gaGFzIGJlZ3VuIGZvciB0 aGUgc3BlY2lmaWVkDQo+Y3JlZGVudGlhbC4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBpcyBjYWxs ZWQgd2hlbiBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgaXMgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuIElm DQo+LSAgQXV0b0xvZ29uIHJldHVybnMgRkFMU0UsIHRoZW4gdGhlIHVzZXIgaW50ZXJmYWNlIHdp bGwgYmUgY29uc3RydWN0ZWQgYnkgdGhlDQo+VXNlcg0KPi0gIElkZW50aXR5IE1hbmFnZXIuDQo+ LQ0KPi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2Yg dGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW291dF0gQXV0 b0xvZ29uICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgY3JlZGVudGlhbCBwcm92aWRlcidzDQo+ Y2FwYWJpbGl0aWVzDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgY3JlZGVu dGlhbCBwcm92aWRlciBoYXMgYmVlbiBzZWxlY3RlZCBieSB0aGUgdXNlci4NCj4tDQo+LSAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIENyZWRlbnRpYWwgcHJvdmlkZXIgc3VjY2Vzc2Z1 bGx5IHNlbGVjdGVkLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBBdXRvTG9n b24gaXMgTlVMTC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50 aWFsU2VsZWN0ICgNCj4tICBJTiAgQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09M ICAgKlRoaXMsDQo+LSAgT1VUICAgICAgICBFRklfQ1JFREVOVElBTF9MT0dPTl9GTEFHUyAgICAg ICpBdXRvTG9nb24NCj4tICApDQo+LXsNCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKEF1dG9M b2dvbiA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4t ICB9DQo+LSAgKkF1dG9Mb2dvbiA9IDA7DQo+LQ0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4t fQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEluZGljYXRlIHRoYXQgdXNlciBpbnRlcmZhY2UgaW50ZXJh Y3Rpb24gaGFzIGVuZGVkIGZvciB0aGUgc3BlY2lmaWVkDQo+Y3JlZGVudGlhbC4NCj4tDQo+LSAg VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgaXMgZGVz ZWxlY3RlZCBieSB0aGUgdXNlci4NCj4tDQo+LSAgQHBhcmFtW2luXSBUaGlzICAgICAgICBQb2lu dHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NP TC4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBDcmVkZW50aWFsIHByb3ZpZGVyIHN1 Y2Nlc3NmdWxseSBkZXNlbGVjdGVkLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJ DQo+LUNyZWRlbnRpYWxEZXNlbGVjdCAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJ QUwyX1BST1RPQ09MICAgICAgICpUaGlzDQo+LSAgKQ0KPi17DQo+LSAgaWYgKFRoaXMgPT0gTlVM TCkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LSAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgUmV0dXJuIHRoZSBkZWZh dWx0IGxvZ29uIGJlaGF2aW9yIGZvciB0aGlzIHVzZXIgY3JlZGVudGlhbC4NCj4tDQo+LSAgVGhp cyBmdW5jdGlvbiByZXBvcnRzIHRoZSBkZWZhdWx0IGxvZ2luIGJlaGF2aW9yIHJlZ2FyZGluZyB0 aGlzIGNyZWRlbnRpYWwNCj5wcm92aWRlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9Q Uk9UT0NPTC4NCj4tICBAcGFyYW1bb3V0XSBBdXRvTG9nb24gIE9uIHJldHVybiwgaG9sZHMgd2hl dGhlciB0aGUgY3JlZGVudGlhbCBwcm92aWRlcg0KPnNob3VsZCBiZSB1c2VkDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICBieSBkZWZhdWx0IHRvIGF1dG9tYXRpY2FsbHkgbG9nIG9uIHRoZSB1 c2VyLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgRGVmYXVsdCBpbmZv cm1hdGlvbiBzdWNjZXNzZnVsbHkgcmV0dXJuZWQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgIEF1dG9Mb2dvbiBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4t RUZJQVBJDQo+LUNyZWRlbnRpYWxEZWZhdWx0ICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JF REVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgT1VUICAgICAgIEVGSV9DUkVERU5U SUFMX0xPR09OX0ZMQUdTICAgICAgICAgICpBdXRvTG9nb24NCj4tICApDQo+LXsNCj4tICBpZiAo KFRoaXMgPT0gTlVMTCkgfHwgKEF1dG9Mb2dvbiA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LSAgKkF1dG9Mb2dvbiA9IDA7DQo+LQ0KPi0g IHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFJldHVybiBpbmZv cm1hdGlvbiBhdHRhY2hlZCB0byB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4NCj4tDQo+LSAgVGhp cyBmdW5jdGlvbiByZXR1cm5zIHVzZXIgaW5mb3JtYXRpb24uDQo+LQ0KPi0gIEBwYXJhbVtpbl0g ICAgICBUaGlzICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9V U0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbl0gICAgICBVc2VySW5mbyAg ICAgIEhhbmRsZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbiBkYXRhIHJlY29yZC4NCj4tICBAcGFy YW1bb3V0XSAgICAgSW5mbyAgICAgICAgICBPbiBlbnRyeSwgcG9pbnRzIHRvIGEgYnVmZmVyIG9m IGF0IGxlYXN0ICpJbmZvU2l6ZQ0KPmJ5dGVzLiBPbg0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4aXQsIGhvbGRzIHRoZSB1c2VyIGluZm9ybWF0aW9uLiBJZiB0aGUgYnVmZmVy IGlzIHRvbyBzbWFsbA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGhvbGQg dGhlIGluZm9ybWF0aW9uLCB0aGVuIEVGSV9CVUZGRVJfVE9PX1NNQUxMIGlzDQo+cmV0dXJuZWQN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgSW5mb1NpemUgaXMgdXBkYXRl ZCB0byBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMNCj5hY3R1YWxseQ0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBJbmZv U2l6ZSAgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHNpemUgb2YgSW5mby4gT24gcmV0dXJu LA0KPnBvaW50cyB0byB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl IG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBJbmZvcm1hdGlvbiByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBF RklfQlVGRkVSX1RPT19TTUFMTCAgVGhlIHNpemUgc3BlY2lmaWVkIGJ5IEluZm9TaXplIGlzIHRv byBzbWFsbA0KPnRvIGhvbGQgYWxsIG9mIHRoZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVzZXIgaW5mb3JtYXRpb24uIFRoZSBzaXplIHJlcXVpcmVkIGlzIHJldHVybmVkIGlu ICpJbmZvU2l6ZS4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbmZvIGlzIE5V TEwgb3IgSW5mb1NpemUgaXMgTlVMTC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAg ICBUaGUgc3BlY2lmaWVkIFVzZXJJbmZvIGRvZXMgbm90IHJlZmVyIHRvIGENCj52YWxpZCB1c2Vy IGluZm8gaGFuZGxlLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRl bnRpYWxHZXRJbmZvICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9D T0wgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAg ICAgICAgICAgIFVzZXJJbmZvLA0KPi0gIE9VVCAgICAgICBFRklfVVNFUl9JTkZPICAgICAgICAg ICAgICAgICAgICAgICAqSW5mbywNCj4tICBJTiBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKkluZm9TaXplDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1VTRVJfSU5GTyAg ICAgICAgICAgICpDcmVkZW50aWFsSW5mbzsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAg SW5kZXg7DQo+LQ0KPi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoSW5mb1NpemUgPT0gTlVMTCkg fHwgKEluZm8gPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQo+LSAgfQ0KPi0NCj4tICBpZiAoKFVzZXJJbmZvID09IE5VTEwpIHx8IChtUHdkSW5mb0hhbmRs ZSA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgfQ0KPi0NCj4t ICAvLw0KPi0gIC8vIEZpbmQgaW5mb3JtYXRpb24gaGFuZGxlIGluIGNyZWRlbnRpYWwgaW5mbyB0 YWJsZS4NCj4tICAvLw0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qd2RJbmZvSGFuZGxl LT5Db3VudDsgSW5kZXgrKykgew0KPi0gICAgQ3JlZGVudGlhbEluZm8gPSBtUHdkSW5mb0hhbmRs ZS0+SW5mb1tJbmRleF07DQo+LSAgICBpZiAoVXNlckluZm8gPT0gKEVGSV9VU0VSX0lORk9fSEFO RExFKUNyZWRlbnRpYWxJbmZvKSB7DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIFRoZSBoYW5kbGUg aXMgZm91bmQsIGNvcHkgdGhlIHVzZXIgaW5mby4NCj4tICAgICAgLy8NCj4tICAgICAgaWYgKENy ZWRlbnRpYWxJbmZvLT5JbmZvU2l6ZSA+ICpJbmZvU2l6ZSkgew0KPi0gICAgICAgICpJbmZvU2l6 ZSA9IENyZWRlbnRpYWxJbmZvLT5JbmZvU2l6ZTsNCj4tICAgICAgICByZXR1cm4gRUZJX0JVRkZF Ul9UT09fU01BTEw7DQo+LSAgICAgIH0NCj4tICAgICAgQ29weU1lbSAoSW5mbywgQ3JlZGVudGlh bEluZm8sIENyZWRlbnRpYWxJbmZvLT5JbmZvU2l6ZSk7DQo+LSAgICAgIHJldHVybiBFRklfU1VD Q0VTUzsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi19 DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRW51bWVyYXRlIGFsbCBvZiB0aGUgdXNlciBpbmZvcm1hdGlv bnMgb24gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gcmV0 dXJucyB0aGUgbmV4dCB1c2VyIGluZm9ybWF0aW9uIHJlY29yZC4gVG8gcmV0cmlldmUgdGhlIGZp cnN0DQo+dXNlcg0KPi0gIGluZm9ybWF0aW9uIHJlY29yZCBoYW5kbGUsIHBvaW50IFVzZXJJbmZv IGF0IGEgTlVMTC4gRWFjaCBzdWJzZXF1ZW50IGNhbGwNCj53aWxsIHJldHJpZXZlDQo+LSAgYW5v dGhlciB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBoYW5kbGUgdW50aWwgdGhlcmUgYXJlIG5vIG1v cmUsIGF0IHdoaWNoDQo+cG9pbnQgVXNlckluZm8NCj4tICB3aWxsIHBvaW50IHRvIE5VTEwuDQo+ LQ0KPi0gIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBv ZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1baW4sIG91 dF0gVXNlckluZm8gT24gZW50cnksIHBvaW50cyB0byB0aGUgcHJldmlvdXMgdXNlciBpbmZvcm1h dGlvbg0KPmhhbmRsZSBvciBOVUxMDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0 YXJ0IGVudW1lcmF0aW9uLiBPbiBleGl0LCBwb2ludHMgdG8gdGhlIG5leHQgdXNlcg0KPmluZm9y bWF0aW9uDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSBvciBOVUxMIGlmIHRo ZXJlIGlzIG5vIG1vcmUgdXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgIFVzZXIgaW5mb3JtYXRpb24gcmV0dXJuZWQuDQo+LSAgQHJldHZhbCBF RklfTk9UX0ZPVU5EICAgICAgICAgIE5vIG1vcmUgdXNlciBpbmZvcm1hdGlvbiBmb3VuZC4NCj4t ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNlckluZm8gaXMgTlVMTC4NCj4tDQo+ LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsR2V0TmV4dEluZm8gKA0K Pi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywN Cj4tICBJTiBPVVQgICAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAgICAgKlVzZXJJ bmZvDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICpJbmZvOw0KPi0g IENIQVIxNiAgICAgICAgICAgICAgICAgICAqUHJvdk5hbWVTdHI7DQo+LSAgVUlOVE4gICAgICAg ICAgICAgICAgICAgIEluZm9MZW47DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgIEluZGV4 Ow0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICBQcm92U3RyTGVuOw0KPi0NCj4tICBpZiAo KFRoaXMgPT0gTlVMTCkgfHwgKFVzZXJJbmZvID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJ X0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgaWYgKG1Qd2RJbmZvSGFuZGxlID09 IE5VTEwpIHsNCj4tICAgIC8vDQo+LSAgICAvLyBJbml0aWxpemVkIHVzZXIgaW5mbyB0YWJsZS4g VGhlcmUgYXJlIDQgdXNlciBpbmZvIHJlY29yZHMgaW4gdGhlIHRhYmxlLg0KPi0gICAgLy8NCj4t ICAgIEluZm9MZW4gID0gc2l6ZW9mIChQQVNTV09SRF9DUkVERU5USUFMX0lORk8pICsgKDQgLSAx KSAqIHNpemVvZg0KPihFRklfVVNFUl9JTkZPICopOw0KPi0gICAgbVB3ZEluZm9IYW5kbGUgPSBB bGxvY2F0ZVplcm9Qb29sIChJbmZvTGVuKTsNCj4tICAgIGlmIChtUHdkSW5mb0hhbmRsZSA9PSBO VUxMKSB7DQo+LSAgICAgICpVc2VySW5mbyA9IE5VTEw7DQo+LSAgICAgIHJldHVybiBFRklfTk9U X0ZPVU5EOw0KPi0gICAgfQ0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBUaGUgZmlyc3QgaW5mb3Jt YXRpb24sIENyZWRlbnRpYWwgUHJvdmlkZXIgaW5mby4NCj4tICAgIC8vDQo+LSAgICBJbmZvTGVu ID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZiAoRUZJX0dVSUQpOw0KPi0gICAgSW5m byAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKEluZm9MZW4pOw0KPi0gICAgQVNTRVJUIChJbmZvICE9 IE5VTEwpOw0KPi0NCj4tICAgIEluZm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19DUkVE RU5USUFMX1BST1ZJREVSX1JFQ09SRDsNCj4tICAgIEluZm8tPkluZm9TaXplICAgID0gKFVJTlQz MikgSW5mb0xlbjsNCj4tICAgIEluZm8tPkluZm9BdHRyaWJzID0gRUZJX1VTRVJfSU5GT19QUk9U RUNURUQ7DQo+LSAgICBDb3B5R3VpZCAoJkluZm8tPkNyZWRlbnRpYWwsICZnUHdkQ3JlZGVudGlh bFByb3ZpZGVyR3VpZCk7DQo+LSAgICBDb3B5R3VpZCAoKEVGSV9HVUlEICopKEluZm8gKyAxKSwg JmdQd2RDcmVkZW50aWFsUHJvdmlkZXJHdWlkKTsNCj4tDQo+LSAgICBtUHdkSW5mb0hhbmRsZS0+ SW5mb1swXSA9IEluZm87DQo+LSAgICBtUHdkSW5mb0hhbmRsZS0+Q291bnQrKzsNCj4tDQo+LSAg ICAvLw0KPi0gICAgLy8gVGhlIHNlY29uZCBpbmZvcm1hdGlvbiwgQ3JlZGVudGlhbCBQcm92aWRl ciBuYW1lIGluZm8uDQo+LSAgICAvLw0KPi0gICAgUHJvdk5hbWVTdHIgPSBHZXRTdHJpbmdCeUlk IChTVFJJTkdfVE9LRU4gKFNUUl9QUk9WSURFUl9OQU1FKSk7DQo+LSAgICBQcm92U3RyTGVuICA9 IFN0clNpemUgKFByb3ZOYW1lU3RyKTsNCj4tICAgIEluZm9MZW4gICAgID0gc2l6ZW9mIChFRklf VVNFUl9JTkZPKSArIFByb3ZTdHJMZW47DQo+LSAgICBJbmZvICAgICAgICA9IEFsbG9jYXRlWmVy b1Bvb2wgKEluZm9MZW4pOw0KPi0gICAgQVNTRVJUIChJbmZvICE9IE5VTEwpOw0KPi0NCj4tICAg IEluZm8tPkluZm9UeXBlICAgID0NCj5FRklfVVNFUl9JTkZPX0NSRURFTlRJQUxfUFJPVklERVJf TkFNRV9SRUNPUkQ7DQo+LSAgICBJbmZvLT5JbmZvU2l6ZSAgICA9IChVSU5UMzIpIEluZm9MZW47 DQo+LSAgICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fUFJPVEVDVEVEOw0KPi0g ICAgQ29weUd1aWQgKCZJbmZvLT5DcmVkZW50aWFsLCAmZ1B3ZENyZWRlbnRpYWxQcm92aWRlckd1 aWQpOw0KPi0gICAgQ29weU1lbSAoKFVJTlQ4KikoSW5mbyArIDEpLCBQcm92TmFtZVN0ciwgUHJv dlN0ckxlbik7DQo+LSAgICBGcmVlUG9vbCAoUHJvdk5hbWVTdHIpOw0KPi0NCj4tICAgIG1Qd2RJ bmZvSGFuZGxlLT5JbmZvWzFdID0gSW5mbzsNCj4tICAgIG1Qd2RJbmZvSGFuZGxlLT5Db3VudCsr Ow0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBUaGUgdGhpcmQgaW5mb3JtYXRpb24sIENyZWRlbnRp YWwgUHJvdmlkZXIgdHlwZSBpbmZvLg0KPi0gICAgLy8NCj4tICAgIEluZm9MZW4gPSBzaXplb2Yg KEVGSV9VU0VSX0lORk8pICsgc2l6ZW9mIChFRklfR1VJRCk7DQo+LSAgICBJbmZvICAgID0gQWxs b2NhdGVaZXJvUG9vbCAoSW5mb0xlbik7DQo+LSAgICBBU1NFUlQgKEluZm8gIT0gTlVMTCk7DQo+ LQ0KPi0gICAgSW5mby0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZPX0NSRURFTlRJQUxfVFlQ RV9SRUNPUkQ7DQo+LSAgICBJbmZvLT5JbmZvU2l6ZSAgICA9IChVSU5UMzIpIEluZm9MZW47DQo+ LSAgICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fUFJPVEVDVEVEOw0KPi0gICAg Q29weUd1aWQgKCZJbmZvLT5DcmVkZW50aWFsLCAmZ1B3ZENyZWRlbnRpYWxQcm92aWRlckd1aWQp Ow0KPi0gICAgQ29weUd1aWQgKChFRklfR1VJRCAqKShJbmZvICsgMSksICZnRWZpVXNlckNyZWRl bnRpYWxDbGFzc1Bhc3N3b3JkR3VpZCk7DQo+LQ0KPi0gICAgbVB3ZEluZm9IYW5kbGUtPkluZm9b Ml0gPSBJbmZvOw0KPi0gICAgbVB3ZEluZm9IYW5kbGUtPkNvdW50Kys7DQo+LQ0KPi0gICAgLy8N Cj4tICAgIC8vIFRoZSBmb3VydGggaW5mb3JtYXRpb24sIENyZWRlbnRpYWwgUHJvdmlkZXIgdHlw ZSBuYW1lIGluZm8uDQo+LSAgICAvLw0KPi0gICAgUHJvdk5hbWVTdHIgPSBHZXRTdHJpbmdCeUlk IChTVFJJTkdfVE9LRU4NCj4oU1RSX1BST1ZJREVSX1RZUEVfTkFNRSkpOw0KPi0gICAgUHJvdlN0 ckxlbiAgPSBTdHJTaXplIChQcm92TmFtZVN0cik7DQo+LSAgICBJbmZvTGVuICAgICA9IHNpemVv ZiAoRUZJX1VTRVJfSU5GTykgKyBQcm92U3RyTGVuOw0KPi0gICAgSW5mbyAgICAgICAgPSBBbGxv Y2F0ZVplcm9Qb29sIChJbmZvTGVuKTsNCj4tICAgIEFTU0VSVCAoSW5mbyAhPSBOVUxMKTsNCj4t DQo+LSAgICBJbmZvLT5JbmZvVHlwZSAgICA9DQo+RUZJX1VTRVJfSU5GT19DUkVERU5USUFMX1BS T1ZJREVSX05BTUVfUkVDT1JEOw0KPi0gICAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlOVDMyKSBJ bmZvTGVuOw0KPi0gICAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1BST1RFQ1RF RDsNCj4tICAgIENvcHlHdWlkICgmSW5mby0+Q3JlZGVudGlhbCwgJmdQd2RDcmVkZW50aWFsUHJv dmlkZXJHdWlkKTsNCj4tICAgIENvcHlNZW0gKChVSU5UOCopKEluZm8gKyAxKSwgUHJvdk5hbWVT dHIsIFByb3ZTdHJMZW4pOw0KPi0gICAgRnJlZVBvb2wgKFByb3ZOYW1lU3RyKTsNCj4tDQo+LSAg ICBtUHdkSW5mb0hhbmRsZS0+SW5mb1szXSA9IEluZm87DQo+LSAgICBtUHdkSW5mb0hhbmRsZS0+ Q291bnQrKzsNCj4tICB9DQo+LQ0KPi0gIGlmICgqVXNlckluZm8gPT0gTlVMTCkgew0KPi0gICAg Ly8NCj4tICAgIC8vIFJldHVybiB0aGUgZmlyc3QgaW5mbyBoYW5kbGUuDQo+LSAgICAvLw0KPi0g ICAgKlVzZXJJbmZvID0gKEVGSV9VU0VSX0lORk9fSEFORExFKSBtUHdkSW5mb0hhbmRsZS0+SW5m b1swXTsNCj4tICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAg Ly8gRmluZCBpbmZvcm1hdGlvbiBoYW5kbGUgaW4gY3JlZGVudGlhbCBpbmZvIHRhYmxlLg0KPi0g IC8vDQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVB3ZEluZm9IYW5kbGUtPkNvdW50OyBJ bmRleCsrKSB7DQo+LSAgICBJbmZvID0gbVB3ZEluZm9IYW5kbGUtPkluZm9bSW5kZXhdOw0KPi0g ICAgaWYgKCpVc2VySW5mbyA9PSAoRUZJX1VTRVJfSU5GT19IQU5ETEUpSW5mbykgew0KPi0gICAg ICAvLw0KPi0gICAgICAvLyBUaGUgaGFuZGxlIGlzIGZvdW5kLCBnZXQgdGhlIG5leHQgb25lLg0K Pi0gICAgICAvLw0KPi0gICAgICBpZiAoSW5kZXggPT0gbVB3ZEluZm9IYW5kbGUtPkNvdW50IC0g MSkgew0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gQWxyZWFkeSBsYXN0IG9uZS4NCj4tICAg ICAgICAvLw0KPi0gICAgICAgICpVc2VySW5mbyA9IE5VTEw7DQo+LSAgICAgICAgcmV0dXJuIEVG SV9OT1RfRk9VTkQ7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIEluZGV4Kys7DQo+LSAgICAgICpV c2VySW5mbyA9IChFRklfVVNFUl9JTkZPX0hBTkRMRSltUHdkSW5mb0hhbmRsZS0+SW5mb1tJbmRl eF07DQo+LSAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0g ICpVc2VySW5mbyA9IE5VTEw7DQo+LSAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LX0NCj4tDQo+ LS8qKg0KPi0gIERlbGV0ZSBhIHVzZXIgb24gdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0N Cj4tICBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYSB1c2VyIG9uIHRoaXMgY3JlZGVudGlhbCBwcm92 aWRlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAgVGhpcyAgICAgICAgICAgIFBvaW50cyB0byB0 aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0g IEBwYXJhbVtpbl0gICAgIFVzZXIgICAgICAgICAgICBUaGUgdXNlciBwcm9maWxlIGhhbmRsZSB0 byBkZWxldGUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHBy b2ZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLg0KPi0gIEByZXR2YWwgRUZJX0FDQ0VTU19E RU5JRUQgICAgICBDdXJyZW50IHVzZXIgcHJvZmlsZSBkb2VzIG5vdCBwZXJtaXQNCj5kZWxldGlv biBvbiB0aGUgdXNlciBwcm9maWxlIGhhbmRsZS4NCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRWl0aGVyIHRoZSB1c2VyIHByb2ZpbGUgY2Fubm90IGRlbGV0ZSBvbiBhbnkgdXNl ciBwcm9maWxlIG9yDQo+Y2Fubm90IGRlbGV0ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvbiBhIHVzZXIgcHJvZmlsZSBvdGhlciB0aGFuIHRoZSBjdXJyZW50IHVzZXIgcHJv ZmlsZS4NCj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgVGhpcyBjcmVkZW50aWFs IHByb3ZpZGVyIGRvZXMgbm90IHN1cHBvcnQNCj5kZWxldGlvbiBpbiB0aGUgcHJlLU9TLg0KPi0g IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICBUaGUgbmV3IGNyZWRlbnRpYWwgY291bGQg bm90IGJlIGRlbGV0ZWQNCj5iZWNhdXNlIG9mIGEgZGV2aWNlIGVycm9yLg0KPi0gIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2VyIGRvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgdXNl cg0KPnByb2ZpbGUgaGFuZGxlLg0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3Jl ZGVudGlhbERlbGV0ZSAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RP Q09MICAgICAgICpUaGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAg ICAgICAgICAgICBVc2VyDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAqVXNlckluZm87DQo+LSAg VUlOVDggICAgICAgICAgICAgICAgICAgICAqVXNlcklkOw0KPi0gIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgKk5ld1VzZXJJZDsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEluZGV4 Ow0KPi0NCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFVzZXIgPT0gTlVMTCkpIHsNCj4tICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8v IEdldCBVc2VyIElkZW50aWZpZXIuDQo+LSAgLy8NCj4tICBVc2VySW5mbyA9IE5VTEw7DQo+LSAg U3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlICgNCj4tICAgICAgICAgICAgIFVzZXIsDQo+LSAg ICAgICAgICAgICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JELA0KPi0gICAgICAgICAg ICAgJlVzZXJJbmZvDQo+LSAgICAgICAgICAgICApOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4t ICAvLw0KPi0gIC8vIEZpbmQgdGhlIHVzZXIgYnkgdXNlciBpZGVudGlmaWVyIGluIG1Qd2RUYWJs ZS4NCj4tICAvLw0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qd2RUYWJsZS0+Q291bnQ7 IEluZGV4KyspIHsNCj4tICAgIFVzZXJJZCAgICA9IChVSU5UOCAqKSAmbVB3ZFRhYmxlLT5Vc2Vy SW5mb1tJbmRleF0uVXNlcklkOw0KPi0gICAgTmV3VXNlcklkID0gKFVJTlQ4ICopIChVc2VySW5m byArIDEpOw0KPi0gICAgaWYgKENvbXBhcmVNZW0gKFVzZXJJZCwgTmV3VXNlcklkLCBzaXplb2Yg KEVGSV9VU0VSX0lORk9fSURFTlRJRklFUikpDQo+PT0gMCkgew0KPi0gICAgICAvLw0KPi0gICAg ICAvLyBGb3VuZCB0aGUgdXNlciwgZGVsZXRlIGl0Lg0KPi0gICAgICAvLw0KPi0gICAgICBNb2Rp ZnlUYWJsZSAoSW5kZXgsIE5VTEwpOw0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tICB9DQo+ LQ0KPi0gIEZyZWVQb29sIChVc2VySW5mbyk7DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19 DQo+LQ0KPi0NCj4tLyoqDQo+LSAgTWFpbiBlbnRyeSBmb3IgdGhpcyBkcml2ZXIuDQo+LQ0KPi0g IEBwYXJhbSBJbWFnZUhhbmRsZSAgICAgSW1hZ2UgaGFuZGxlIHRoaXMgZHJpdmVyLg0KPi0gIEBw YXJhbSBTeXN0ZW1UYWJsZSAgICAgUG9pbnRlciB0byBTeXN0ZW1UYWJsZS4NCj4tDQo+LSAgQHJl dHZhbCBFRklfU1VDRVNTICAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBjb21wbGV0ZSBzdWNjZXNz ZnVsbHkuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tUGFzc3dvcmRQcm92 aWRlckluaXQgKA0KPi0gIElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KPi0gIElO IEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFU VVMgIFN0YXR1czsNCj4tDQo+LSAgLy8NCj4tICAvLyBJdCBpcyBOT1Qgcm9idXN0IGVub3VnaCB0 byBiZSBpbmNsdWRlZCBpbiBwcm9kdWN0aW9uLg0KPi0gIC8vDQo+LSAgI2Vycm9yICJUaGlzIGlt cGxlbWVudGF0aW9uIGlzIGp1c3QgYSBzYW1wbGUsIHBsZWFzZSBjb21tZW50IHRoaXMgbGluZSBp ZiB5b3UNCj5yZWFsbHkgd2FudCB0byB1c2UgdGhpcyBkcml2ZXIuIg0KPi0NCj4tICAvLw0KPi0g IC8vIEluaXQgY3JlZGVudGlhbCB0YWJsZS4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IEluaXRDcmVk ZW50aWFsVGFibGUgKCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0 dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5pdCBGb3JtIEJyb3dzZXIu DQo+LSAgLy8NCj4tICBTdGF0dXMgPSBJbml0Rm9ybUJyb3dzZXIgKCk7DQo+LSAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8v DQo+LSAgLy8gSW5zdGFsbCBwcm90b2NvbCBpbnRlcmZhY2VzIGZvciB0aGUgcGFzc3dvcmQgY3Jl ZGVudGlhbCBwcm92aWRlci4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IGdCUy0+SW5zdGFsbFByb3Rv Y29sSW50ZXJmYWNlICgNCj4tICAgICAgICAgICAgICAgICAgJm1DYWxsYmFja0luZm8tPkRyaXZl ckhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgJmdFZmlVc2VyQ3JlZGVudGlhbDJQcm90b2Nv bEd1aWQsDQo+LSAgICAgICAgICAgICAgICAgIEVGSV9OQVRJVkVfSU5URVJGQUNFLA0KPi0gICAg ICAgICAgICAgICAgICAmZ1B3ZENyZWRlbnRpYWxQcm92aWRlckRyaXZlcg0KPi0gICAgICAgICAg ICAgICAgICApOw0KPi0gIHJldHVybiBTdGF0dXM7DQo+LX0NCj5kaWZmIC0tZ2l0DQo+YS9TZWN1 cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENy ZWRlbnRpYWxQDQo+cm92aWRlci5oDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24v UHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwNCj5Qcm92aWRlci5oDQo+ZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+aW5kZXggZmQ3ODI1NDlmZC4uMDAwMDAwMDAwMA0KPi0t LQ0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRl ckR4ZS9Qd2RDcmVkZW50aWFsUA0KPnJvdmlkZXIuaA0KPisrKyAvZGV2L251bGwNCj5AQCAtMSwz NzQgKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBQYXNzd29yZCBDcmVkZW50aWFsIFByb3ZpZGVy IGRyaXZlciBoZWFkZXIgZmlsZS4NCj4tDQo+LUNvcHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIElu dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4tVGhpcyBwcm9ncmFt IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPi1hcmUgbGljZW5zZWQgYW5kIG1hZGUg YXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGlj ZW5zZQ0KPi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRl eHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4taHR0cDovL29wZW5zb3VyY2Uu b3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0NCj4tVEhFIFBST0dSQU0gSVMgRElTVFJJ QlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+LVdJVEhP VVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPkVY UFJFU1MgT1IgSU1QTElFRC4NCj4tDQo+LSoqLw0KPi0NCj4tI2lmbmRlZiBfUEFTU1dPUkRfQ1JF REVOVElBTF9QUk9WSURFUl9IXw0KPi0jZGVmaW5lIF9QQVNTV09SRF9DUkVERU5USUFMX1BST1ZJ REVSX0hfDQo+LQ0KPi0jaW5jbHVkZSA8VWVmaS5oPg0KPi0NCj4tI2luY2x1ZGUgPEd1aWQvR2xv YmFsVmFyaWFibGUuaD4NCj4tDQo+LSNpbmNsdWRlIDxQcm90b2NvbC9IaWlDb25maWdBY2Nlc3Mu aD4NCj4tI2luY2x1ZGUgPFByb3RvY29sL1VzZXJDcmVkZW50aWFsMi5oPg0KPi0jaW5jbHVkZSA8 UHJvdG9jb2wvVXNlck1hbmFnZXIuaD4NCj4tDQo+LSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50 aW1lU2VydmljZXNUYWJsZUxpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZp Y2VzVGFibGVMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5o Pg0KPi0jaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+LSNpbmNsdWRlIDxMaWJy YXJ5L0RldmljZVBhdGhMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4t I2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9QcmludExp Yi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9IaWlMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkv QmFzZUNyeXB0TGliLmg+DQo+LQ0KPi0jaW5jbHVkZSAiUHdkQ3JlZGVudGlhbFByb3ZpZGVyRGF0 YS5oIg0KPi0NCj4tZXh0ZXJuIFVJTlQ4ICAgICAgUHdkQ3JlZGVudGlhbFByb3ZpZGVyU3RyaW5n c1tdOw0KPi1leHRlcm4gVUlOVDggICAgICBQd2RDcmVkZW50aWFsUHJvdmlkZXJWZnJCaW5bXTsN Cj4tDQo+LSNkZWZpbmUgUEFTU1dPUkRfVEFCTEVfSU5DICAxNg0KPi0jZGVmaW5lIENSRURFTlRJ QUxfTEVOICAgICAgMjANCj4tDQo+LS8vDQo+LS8vIFBhc3N3b3JkIGNyZWRlbnRpYWwgaW5mb3Jt YXRpb24uDQo+LS8vDQo+LXR5cGVkZWYgc3RydWN0IHsNCj4tICBFRklfVVNFUl9JTkZPX0lERU5U SUZJRVIgIFVzZXJJZDsNCj4tICBDSEFSOCAgICAgICAgICAgICAgICAgICAgIFBhc3N3b3JkW0NS RURFTlRJQUxfTEVOXTsNCj4tfSBQQVNTV09SRF9JTkZPOw0KPi0NCj4tLy8NCj4tLy8gUGFzc3dv cmQgY3JlZGVudGlhbCB0YWJsZS4NCj4tLy8NCj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPi0gIFVJTlRO ICAgICAgICAgQ291bnQ7DQo+LSAgVUlOVE4gICAgICAgICBNYXhDb3VudDsNCj4tICBVSU5UTiAg ICAgICAgIFZhbGlkSW5kZXg7DQo+LSAgUEFTU1dPUkRfSU5GTyBVc2VySW5mb1sxXTsNCj4tfSBD UkVERU5USUFMX1RBQkxFOw0KPi0NCj4tLy8NCj4tLy8gVGhlIHVzZXIgaW5mb3JtYXRpb24gb24g dGhlIHBhc3N3b3JkIHByb3ZpZGVyLg0KPi0vLw0KPi10eXBlZGVmIHN0cnVjdCB7DQo+LSAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQ7DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAg ICAgICAgICAgICAgKkluZm9bMV07DQo+LX0gUEFTU1dPUkRfQ1JFREVOVElBTF9JTkZPOw0KPi0N Cj4tLy8vDQo+LS8vLyBISUkgc3BlY2lmaWMgVmVuZG9yIERldmljZSBQYXRoIGRlZmluaXRpb24u DQo+LS8vLw0KPi10eXBlZGVmIHN0cnVjdCB7DQo+LSAgVkVORE9SX0RFVklDRV9QQVRIICAgICAg ICBWZW5kb3JEZXZpY2VQYXRoOw0KPi0gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgRW5kOw0K Pi19IEhJSV9WRU5ET1JfREVWSUNFX1BBVEg7DQo+LQ0KPi0jZGVmaW5lIFBXRF9QUk9WSURFUl9T SUdOQVRVUkUgIFNJR05BVFVSRV8zMiAoJ1AnLCAnVycsICdEJywgJ1AnKQ0KPi0NCj4tdHlwZWRl ZiBzdHJ1Y3Qgew0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJl Ow0KPi0gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgRHJpdmVySGFuZGxlOw0KPi0g IEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgSGlpSGFuZGxlOw0KPi0gIC8vDQo+LSAg Ly8gUHJvZHVjZWQgcHJvdG9jb2wuDQo+LSAgLy8NCj4tICBFRklfSElJX0NPTkZJR19BQ0NFU1Nf UFJPVE9DT0wgIENvbmZpZ0FjY2VzczsNCj4tfSBQV0RfUFJPVklERVJfQ0FMTEJBQ0tfSU5GTzsN Cj4tDQo+LQ0KPi0vKioNCj4tICBFbnJvbGwgYSB1c2VyIG9uIGEgY3JlZGVudGlhbCBwcm92aWRl ci4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBlbnJvbGxzIGEgdXNlciBvbiB0aGlzIGNyZWRlbnRp YWwgcHJvdmlkZXIuIElmIHRoZSB1c2VyIGV4aXN0cyBvbg0KPi0gIHRoaXMgY3JlZGVudGlhbCBw cm92aWRlciwgdXBkYXRlIHRoZSB1c2VyIGluZm9ybWF0aW9uIG9uIHRoaXMgY3JlZGVudGlhbA0K PnByb3ZpZGVyOw0KPi0gIG90aGVyd2lzZSBkZWxldGUgdGhlIHVzZXIgaW5mb3JtYXRpb24gb24g Y3JlZGVudGlhbCBwcm92aWRlci4NCj4tDQo+LSAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgICAg ICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJP VE9DT0wuDQo+LSAgQHBhcmFtW2luXSBVc2VyICAgICAgICAgICAgICAgIFRoZSB1c2VyIHByb2Zp bGUgdG8gZW5yb2xsLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNl ciBwcm9maWxlIHdhcyBzdWNjZXNzZnVsbHkgZW5yb2xsZWQuDQo+LSAgQHJldHZhbCBFRklfQUND RVNTX0RFTklFRCAgICAgIEN1cnJlbnQgdXNlciBwcm9maWxlIGRvZXMgbm90IHBlcm1pdA0KPmVu cm9sbG1lbnQgb24gdGhlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIg cHJvZmlsZSBoYW5kbGUuIEVpdGhlciB0aGUgdXNlciBwcm9maWxlIGNhbm5vdCBlbnJvbGwNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gYW55IHVzZXIgcHJvZmlsZSBvciBj YW5ub3QgZW5yb2xsIG9uIGEgdXNlciBwcm9maWxlDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgdXNlciBwcm9maWxlLg0KPi0gIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIgZG9lcyBu b3Qgc3VwcG9ydA0KPmVucm9sbG1lbnQgaW4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhlIHByZS1PUy4NCj4tICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhl IG5ldyBjcmVkZW50aWFsIGNvdWxkIG5vdCBiZSBjcmVhdGVkDQo+YmVjYXVzZSBvZiBhIGRldmlj ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci4NCj4tICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNlciBkb2VzIG5vdCByZWZlciB0byBhIHZhbGlkIHVz ZXINCj5wcm9maWxlIGhhbmRsZS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0K Pi1DcmVkZW50aWFsRW5yb2xsICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJf UFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFO RExFICAgICAgICAgICAgIFVzZXINCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgUmV0dXJucyB0aGUg dXNlciBpbnRlcmZhY2UgaW5mb3JtYXRpb24gdXNlZCBkdXJpbmcgdXNlciBpZGVudGlmaWNhdGlv bi4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBm b3JtIHVzZWQgd2hlbiBpbnRlcmFjdGluZw0KPndpdGggdGhlDQo+LSAgdXNlciBkdXJpbmcgdXNl ciBpZGVudGlmaWNhdGlvbi4gVGhlIGZvcm0gaXMgdGhlIGZpcnN0IGVuYWJsZWQgZm9ybSBpbiB0 aGUNCj5mb3JtLXNldA0KPi0gIGNsYXNzIEVGSV9ISUlfVVNFUl9DUkVERU5USUFMX0ZPUk1TRVRf R1VJRCBpbnN0YWxsZWQgb24gdGhlIEhJSQ0KPmhhbmRsZSBIaWlIYW5kbGUuIElmDQo+LSAgdGhl IHVzZXIgY3JlZGVudGlhbCBwcm92aWRlciBkb2VzIG5vdCByZXF1aXJlIGEgZm9ybSB0byBpZGVu dGlmeSB0aGUgdXNlciwNCj50aGVuIHRoaXMNCj4tICBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIEVG SV9OT1RfRk9VTkQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgUG9pbnRzIHRvIHRo aXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAg QHBhcmFtW291dF0gSGlpICAgICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgZGF0YWJhc2Ug aGFuZGxlLg0KPi0gIEBwYXJhbVtvdXRdIEZvcm1TZXRJZCAgT24gcmV0dXJuLCBob2xkcyB0aGUg aWRlbnRpZmllciBvZiB0aGUgZm9ybSBzZXQNCj53aGljaCBjb250YWlucw0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgdGhlIGZvcm0gdXNlZCBkdXJpbmcgdXNlciBpZGVudGlmaWNhdGlvbi4N Cj4tICBAcGFyYW1bb3V0XSBGb3JtSWQgICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIGlkZW50aWZp ZXIgb2YgdGhlIGZvcm0gdXNlZA0KPmR1cmluZyB1c2VyDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICBpZGVudGlmaWNhdGlvbi4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgIEZvcm0gcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VO RCAgICAgICAgICBGb3JtIG5vdCByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgRm9ybVNldElkIGlzIE5VTEwgb3INCj5Gb3JtSWQgaXMg TlVMTC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsRm9y bSAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpU aGlzLA0KPi0gIE9VVCAgICAgICBFRklfSElJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAq SGlpLA0KPi0gIE9VVCAgICAgICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAq Rm9ybVNldElkLA0KPi0gIE9VVCAgICAgICBFRklfRk9STV9JRCAgICAgICAgICAgICAgICAgICAg ICAgICAqRm9ybUlkDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIFJldHVybnMgYml0bWFwIHVzZWQg dG8gZGVzY3JpYmUgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgdHlwZS4NCj4tDQo+LSAgVGhpcyBv cHRpb25hbCBmdW5jdGlvbiByZXR1cm5zIGEgYml0bWFwIHdoaWNoIGlzIGxlc3MgdGhhbiBvciBl cXVhbCB0byB0aGUNCj5udW1iZXINCj4tICBvZiBwaXhlbHMgc3BlY2lmaWVkIGJ5IFdpZHRoIGFu ZCBIZWlnaHQuIElmIG5vIHN1Y2ggYml0bWFwIGV4aXN0cywgdGhlbg0KPkVGSV9OT1RfRk9VTkQN Cj4tICBpcyByZXR1cm5lZC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAgUG9pbnRz IHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wu DQo+LSAgQHBhcmFtW2luLCBvdXRdIFdpZHRoICAgT24gZW50cnksIHBvaW50cyB0byB0aGUgZGVz aXJlZCBiaXRtYXAgd2lkdGguIElmDQo+TlVMTCB0aGVuIG5vDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgYml0bWFwIGluZm9ybWF0aW9uIHdpbGwgYmUgcmV0dXJuZWQuIE9uIGV4aXQsIHBv aW50cyB0byB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCBvZiB0aGUgYml0 bWFwIHJldHVybmVkLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBIZWlnaHQgIE9uIGVudHJ5LCBwb2lu dHMgdG8gdGhlIGRlc2lyZWQgYml0bWFwIGhlaWdodC4gSWYNCj5OVUxMIHRoZW4gbm8NCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgaW5mb3JtYXRpb24gd2lsbCBiZSByZXR1cm5l ZC4gT24gZXhpdCwgcG9pbnRzIHRvIHRoZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhl aWdodCBvZiB0aGUgYml0bWFwIHJldHVybmVkDQo+LSAgQHBhcmFtW291dF0gICAgIEhpaSAgICAg T24gcmV0dXJuLCBob2xkcyB0aGUgSElJIGRhdGFiYXNlIGhhbmRsZS4NCj4tICBAcGFyYW1bb3V0 XSAgICAgSW1hZ2UgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgaW1hZ2UgaWRlbnRpZmllci4N Cj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIEltYWdlIGlkZW50aWZpZXIg cmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAg ICBJbWFnZSBpZGVudGlmaWVyIG5vdCByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgSW1hZ2UgaXMgTlVMTC4NCj4tDQo+LSoqLw0KPi1F RklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsVGlsZSAoDQo+LSAgSU4gIENPTlNUICBF RklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4tICBJTiAgT1VUICAg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpXaWR0aCwNCj4tICBJTiAgT1VU ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpIZWlnaHQsDQo+LSAgICAg IE9VVCAgICBFRklfSElJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAqSGlpLA0KPi0gICAg ICBPVVQgICAgRUZJX0lNQUdFX0lEICAgICAgICAgICAgICAgICAgICAgICAgKkltYWdlDQo+LSAg KTsNCj4tDQo+LS8qKg0KPi0gIFJldHVybnMgc3RyaW5nIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGNy ZWRlbnRpYWwgcHJvdmlkZXIgdHlwZS4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEg c3RyaW5nIHdoaWNoIGRlc2NyaWJlcyB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4gSWYgbm8NCj4t ICBzdWNoIHN0cmluZyBleGlzdHMsIHRoZW4gRUZJX05PVF9GT1VORCBpcyByZXR1cm5lZC4NCj4t DQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0 aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1bb3V0XSBIaWkg ICAgICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFzZSBoYW5kbGUuDQo+LSAgQHBh cmFtW291dF0gU3RyaW5nICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgc3RyaW5nIGlkZW50 aWZpZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBTdHJpbmcgaWRl bnRpZmllciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5E ICAgICAgICAgIFN0cmluZyBpZGVudGlmaWVyIG5vdCByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgU3RyaW5nIGlzIE5VTEwuDQo+LQ0K Pi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbFRpdGxlICgNCj4tICBJ TiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAg T1VUICAgICAgIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgICAgICpIaWksDQo+LSAg T1VUICAgICAgIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgICAgICAgICpTdHJpbmcNCj4t ICApOw0KPi0NCj4tLyoqDQo+LSAgUmV0dXJuIHRoZSB1c2VyIGlkZW50aWZpZXIgYXNzb2NpYXRl ZCB3aXRoIHRoZSBjdXJyZW50bHkgYXV0aGVudGljYXRlZCB1c2VyLg0KPi0NCj4tICBUaGlzIGZ1 bmN0aW9uIHJldHVybnMgdGhlIHVzZXIgaWRlbnRpZmllciBvZiB0aGUgdXNlciBhdXRoZW50aWNh dGVkIGJ5IHRoaXMNCj5jcmVkZW50aWFsDQo+LSAgcHJvdmlkZXIuIFRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFsLXJlbGF0ZWQgaW5mb3JtYXRpb24gaGFzDQo+YmVl bg0KPi0gIHN1Ym1pdHRlZCBvbiBhIGZvcm0gT1IgYWZ0ZXIgYSBjYWxsIHRvIERlZmF1bHQoKSBo YXMgcmV0dXJuZWQgdGhhdCB0aGlzDQo+Y3JlZGVudGlhbCBpcw0KPi0gIHJlYWR5IHRvIGxvZyBv bi4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5z dGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFt W2luXSAgVXNlciAgICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUgb2YgdGhlIHVzZXIg cHJvZmlsZSBjdXJyZW50bHkNCj5iZWluZw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnNpZGVyZWQgYnkgdGhlIHVzZXIgaWRlbnRpdHkgbWFuYWdlci4gSWYgTlVMTCwgdGhlbiBu byB1c2VyDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZSBpcyBjdXJyZW50 bHkgdW5kZXIgY29uc2lkZXJhdGlvbi4NCj4tICBAcGFyYW1bb3V0XSBJZGVudGlmaWVyICAgICBP biByZXR1cm4sIHBvaW50cyB0byB0aGUgdXNlciBpZGVudGlmaWVyLg0KPi0NCj4tICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciBpZGVudGlmaWVyIHJldHVybmVkIHN1Y2Nlc3Nm dWxseS4NCj4tICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAgICAgICAgTm8gdXNlciBpZGVudGlm aWVyIGNhbiBiZSByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAg VGhlIHVzZXIgaGFzIGJlZW4gbG9ja2VkIG91dCBvZiB0aGlzIHVzZXINCj5jcmVkZW50aWFsLg0K Pi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGlzIGlzIE5VTEwsIG9yIElkZW50 aWZpZXIgaXMgTlVMTC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVXNlciBp cyBub3QgTlVMTCwgYW5kIHRoZSBzcGVjaWZpZWQgdXNlcg0KPmhhbmRsZSBjYW4ndCBiZQ0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBpbiB1c2VyIHByb2ZpbGUgZGF0 YWJhc2UNCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsVXNl ciAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpU aGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBV c2VyLA0KPi0gIE9VVCAgICAgICBFRklfVVNFUl9JTkZPX0lERU5USUZJRVIgICAgICAgICAgICAq SWRlbnRpZmllcg0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBJbmRpY2F0ZSB0aGF0IHVzZXIgaW50 ZXJmYWNlIGludGVyYWN0aW9uIGhhcyBiZWd1biBmb3IgdGhlIHNwZWNpZmllZA0KPmNyZWRlbnRp YWwuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBjcmVkZW50aWFsIHBy b3ZpZGVyIGlzIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLiBJZg0KPi0gIEF1dG9Mb2dvbiByZXR1cm5z IEZBTFNFLCB0aGVuIHRoZSB1c2VyIGludGVyZmFjZSB3aWxsIGJlIGNvbnN0cnVjdGVkIGJ5IHRo ZQ0KPlVzZXINCj4tICBJZGVudGl0eSBNYW5hZ2VyLg0KPi0NCj4tICBAcGFyYW1baW5dICBUaGlz ICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJ QUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtvdXRdIEF1dG9Mb2dvbiAgT24gcmV0dXJuLCBwb2lu dHMgdG8gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIncw0KPmNhcGFiaWxpdGllcw0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgaGFzIGJlZW4g c2VsZWN0ZWQgYnkgdGhlIHVzZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICBDcmVkZW50aWFsIHByb3ZpZGVyIHN1Y2Nlc3NmdWxseSBzZWxlY3RlZC4NCj4tICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgQXV0b0xvZ29uIGlzIE5VTEwuDQo+LQ0KPi0qKi8N Cj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbFNlbGVjdCAoDQo+LSAgSU4gIENP TlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICpUaGlzLA0KPi0gIE9VVCAgICAg ICAgRUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR1MgICAgICAqQXV0b0xvZ29uDQo+LSAgKTsNCj4t DQo+LS8qKg0KPi0gIEluZGljYXRlIHRoYXQgdXNlciBpbnRlcmZhY2UgaW50ZXJhY3Rpb24gaGFz IGVuZGVkIGZvciB0aGUgc3BlY2lmaWVkDQo+Y3JlZGVudGlhbC4NCj4tDQo+LSAgVGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgd2hlbiBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgaXMgZGVzZWxlY3RlZCBi eSB0aGUgdXNlci4NCj4tDQo+LSAgQHBhcmFtW2luXSBUaGlzICAgICAgICBQb2ludHMgdG8gdGhp cyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tDQo+ LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBDcmVkZW50aWFsIHByb3ZpZGVyIHN1Y2Nlc3NmdWxs eSBkZXNlbGVjdGVkLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRl bnRpYWxEZXNlbGVjdCAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RP Q09MICAgICAgICpUaGlzDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIFJldHVybiB0aGUgZGVmYXVs dCBsb2dvbiBiZWhhdmlvciBmb3IgdGhpcyB1c2VyIGNyZWRlbnRpYWwuDQo+LQ0KPi0gIFRoaXMg ZnVuY3Rpb24gcmVwb3J0cyB0aGUgZGVmYXVsdCBsb2dpbiBiZWhhdmlvciByZWdhcmRpbmcgdGhp cyBjcmVkZW50aWFsDQo+cHJvdmlkZXIuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAg UG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJP VE9DT0wuDQo+LSAgQHBhcmFtW291dF0gQXV0b0xvZ29uICBPbiByZXR1cm4sIGhvbGRzIHdoZXRo ZXIgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXINCj5zaG91bGQgYmUgdXNlZA0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgYnkgZGVmYXVsdCB0byBhdXRvbWF0aWNhbGx5IGxvZyBvbiB0aGUgdXNl ci4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIERlZmF1bHQgaW5mb3Jt YXRpb24gc3VjY2Vzc2Z1bGx5IHJldHVybmVkLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSICBBdXRvTG9nb24gaXMgTlVMTC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVG SUFQSQ0KPi1DcmVkZW50aWFsRGVmYXVsdCAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURF TlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIE9VVCAgICAgICBFRklfQ1JFREVOVElB TF9MT0dPTl9GTEFHUyAgICAgICAgICAqQXV0b0xvZ29uDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0g IFJldHVybiBpbmZvcm1hdGlvbiBhdHRhY2hlZCB0byB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4N Cj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHVzZXIgaW5mb3JtYXRpb24uDQo+LQ0KPi0g IEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9m IHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbl0gICAg ICBVc2VySW5mbyAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbiBkYXRhIHJlY29y ZC4NCj4tICBAcGFyYW1bb3V0XSAgICAgSW5mbyAgICAgICAgICBPbiBlbnRyeSwgcG9pbnRzIHRv IGEgYnVmZmVyIG9mIGF0IGxlYXN0ICpJbmZvU2l6ZQ0KPmJ5dGVzLiBPbg0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV4aXQsIGhvbGRzIHRoZSB1c2VyIGluZm9ybWF0aW9uLiBJ ZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRvIGhvbGQgdGhlIGluZm9ybWF0aW9uLCB0aGVuIEVGSV9CVUZGRVJfVE9PX1NNQUxMIGlz DQo+cmV0dXJuZWQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgSW5mb1Np emUgaXMgdXBkYXRlZCB0byBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMNCj5hY3R1YWxseQ0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkLg0KPi0gIEBwYXJhbVtp biwgb3V0XSBJbmZvU2l6ZSAgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHNpemUgb2YgSW5m by4gT24gcmV0dXJuLA0KPnBvaW50cyB0byB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICBJbmZvcm1hdGlvbiByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+ LSAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgVGhlIHNpemUgc3BlY2lmaWVkIGJ5IElu Zm9TaXplIGlzIHRvbyBzbWFsbA0KPnRvIGhvbGQgYWxsIG9mIHRoZQ0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVzZXIgaW5mb3JtYXRpb24uIFRoZSBzaXplIHJlcXVpcmVkIGlz IHJldHVybmVkIGluICpJbmZvU2l6ZS4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBJbmZvIGlzIE5VTEwgb3IgSW5mb1NpemUgaXMgTlVMTC4NCj4tICBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQgICAgICAgICBUaGUgc3BlY2lmaWVkIFVzZXJJbmZvIGRvZXMgbm90IHJlZmVyIHRvIGEN Cj52YWxpZCB1c2VyIGluZm8gaGFuZGxlLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJ QVBJDQo+LUNyZWRlbnRpYWxHZXRJbmZvICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVO VElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX0lORk9f SEFORExFICAgICAgICAgICAgICAgIFVzZXJJbmZvLA0KPi0gIE9VVCAgICAgICBFRklfVVNFUl9J TkZPICAgICAgICAgICAgICAgICAgICAgICAqSW5mbywNCj4tICBJTiBPVVQgICAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkluZm9TaXplDQo+LSAgKTsNCj4tDQo+LQ0KPi0v KioNCj4tICBFbnVtZXJhdGUgYWxsIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9ucyBvbiB0aGUgY3Jl ZGVudGlhbCBwcm92aWRlci4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXh0 IHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkLiBUbyByZXRyaWV2ZSB0aGUgZmlyc3QNCj51c2VyDQo+ LSAgaW5mb3JtYXRpb24gcmVjb3JkIGhhbmRsZSwgcG9pbnQgVXNlckluZm8gYXQgYSBOVUxMLiBF YWNoIHN1YnNlcXVlbnQgY2FsbA0KPndpbGwgcmV0cmlldmUNCj4tICBhbm90aGVyIHVzZXIgaW5m b3JtYXRpb24gcmVjb3JkIGhhbmRsZSB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSwgYXQgd2hpY2gN Cj5wb2ludCBVc2VySW5mbw0KPi0gIHdpbGwgcG9pbnQgdG8gTlVMTC4NCj4tDQo+LSAgQHBhcmFt W2luXSAgICAgIFRoaXMgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9V U0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VySW5mbyBP biBlbnRyeSwgcG9pbnRzIHRvIHRoZSBwcmV2aW91cyB1c2VyIGluZm9ybWF0aW9uDQo+aGFuZGxl IG9yIE5VTEwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgZW51bWVyYXRp b24uIE9uIGV4aXQsIHBvaW50cyB0byB0aGUgbmV4dCB1c2VyDQo+aW5mb3JtYXRpb24NCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIG9yIE5VTEwgaWYgdGhlcmUgaXMgbm8gbW9y ZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICAgVXNlciBpbmZvcm1hdGlvbiByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQg ICAgICAgICAgTm8gbW9yZSB1c2VyIGluZm9ybWF0aW9uIGZvdW5kLg0KPi0gIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSICBVc2VySW5mbyBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9T VEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxHZXROZXh0SW5mbyAoDQo+LSAgSU4gQ09OU1Qg IEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIElOIE9VVCAg ICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICAqVXNlckluZm8NCj4tICApOw0K Pi0NCj4tLyoqDQo+LSAgRGVsZXRlIGEgdXNlciBvbiB0aGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIu DQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBhIHVzZXIgb24gdGhpcyBjcmVkZW50aWFs IHByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1baW5dICAgICBUaGlzICAgICAgICAgICAgUG9pbnRz IHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wu DQo+LSAgQHBhcmFtW2luXSAgICAgVXNlciAgICAgICAgICAgIFRoZSB1c2VyIHByb2ZpbGUgaGFu ZGxlIHRvIGRlbGV0ZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFVz ZXIgcHJvZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuDQo+LSAgQHJldHZhbCBFRklfQUND RVNTX0RFTklFRCAgICAgIEN1cnJlbnQgdXNlciBwcm9maWxlIGRvZXMgbm90IHBlcm1pdA0KPmRl bGV0aW9uIG9uIHRoZSB1c2VyIHByb2ZpbGUgaGFuZGxlLg0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFaXRoZXIgdGhlIHVzZXIgcHJvZmlsZSBjYW5ub3QgZGVsZXRlIG9uIGFu eSB1c2VyIHByb2ZpbGUgb3INCj5jYW5ub3QgZGVsZXRlDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9uIGEgdXNlciBwcm9maWxlIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgdXNl ciBwcm9maWxlLg0KPi0gIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGlzIGNyZWRl bnRpYWwgcHJvdmlkZXIgZG9lcyBub3Qgc3VwcG9ydA0KPmRlbGV0aW9uIGluIHRoZSBwcmUtT1Mu DQo+LSAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSBuZXcgY3JlZGVudGlhbCBj b3VsZCBub3QgYmUgZGVsZXRlZA0KPmJlY2F1c2Ugb2YgYSBkZXZpY2UgZXJyb3IuDQo+LSAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFVzZXIgZG9lcyBub3QgcmVmZXIgdG8gYSB2YWxp ZCB1c2VyDQo+cHJvZmlsZSBoYW5kbGUuDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0K Pi1DcmVkZW50aWFsRGVsZXRlICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJf UFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFO RExFICAgICAgICAgICAgIFVzZXINCj4tICApOw0KPi0NCj4tI2VuZGlmDQo+ZGlmZiAtLWdpdA0K PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4 ZS9Qd2RDcmVkZW50aWFsUA0KPnJvdmlkZXIudW5pDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRp ZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwNCj5Qcm92aWRl ci51bmkNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCA3NDllOWE4ZjE3Li4wMDAw MDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVu dGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQDQo+cm92aWRlci51bmkNCj4rKysgL2Rldi9u dWxsDQo+QEAgLTEsMjEgKzAsMCBAQA0KPi0vLyAvKiogQGZpbGUNCj4tLy8gUHJvdmlkZXMgYSBw YXNzd29yZCBjcmVkZW50aWFsIHByb3ZpZGVyIGltcGxlbWVudGF0aW9uDQo+LS8vDQo+LS8vIFRo aXMgbW9kdWxlIHByb3ZpZGVzIGEgcGFzc3dvcmQgY3JlZGVudGlhbCBwcm92aWRlciBpbXBsZW1l bnRhdGlvbi4NCj4tLy8NCj4tLy8gQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNCwgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi0vLw0KPi0vLyBUaGlzIHByb2dy YW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LS8vIGFyZSBsaWNlbnNlZCBhbmQg bWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QN Cj5MaWNlbnNlDQo+LS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUg ZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LS8vIGh0dHA6Ly9v cGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tLy8gVEhFIFBST0dSQU0g SVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJ UywNCj4tLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lO RCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0vLw0KPi0vLyAqKi8NCj4tDQo+LQ0K Pi0jc3RyaW5nIFNUUl9NT0RVTEVfQUJTVFJBQ1QgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVT ICJQcm92aWRlcyBhDQo+cGFzc3dvcmQgY3JlZGVudGlhbCBwcm92aWRlciBpbXBsZW1lbnRhdGlv biINCj4tDQo+LSNzdHJpbmcgU1RSX01PRFVMRV9ERVNDUklQVElPTiAgICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgIlRoaXMgbW9kdWxlDQo+cHJvdmlkZXMgYSBwYXNzd29yZCBjcmVkZW50aWFsIHBy b3ZpZGVyIGltcGxlbWVudGF0aW9uLiINCj4tDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cv VXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFs UA0KPnJvdmlkZXJEYXRhLmgNCj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RD cmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbA0KPlByb3ZpZGVyRGF0YS5oDQo+ZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+aW5kZXggMzFiZGZlNGM1MC4uMDAwMDAwMDAwMA0KPi0t LQ0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRl ckR4ZS9Qd2RDcmVkZW50aWFsUA0KPnJvdmlkZXJEYXRhLmgNCj4rKysgL2Rldi9udWxsDQo+QEAg LTEsMzAgKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBEYXRhIHN0cnVjdHVyZSB1c2VkIGJ5IHRo ZSBQYXNzd29yZCBDcmVkZW50aWFsIFByb3ZpZGVyIGRyaXZlci4NCj4tDQo+LUNvcHlyaWdodCAo YykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPi1hcmUg bGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1 dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4t aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0NCj4tVEhF IFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJ UyIgQkFTSVMsDQo+LVdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5Z IEtJTkQsIEVJVEhFUg0KPkVYUFJFU1MgT1IgSU1QTElFRC4NCj4tDQo+LSoqLw0KPi0NCj4tI2lm bmRlZiBfUFdEX0NSRURFTlRJQUxfUFJPVklERVJfREFUQV9IXw0KPi0jZGVmaW5lIF9QV0RfQ1JF REVOVElBTF9QUk9WSURFUl9EQVRBX0hfDQo+LQ0KPi0jaW5jbHVkZSA8R3VpZC9Qd2RDcmVkZW50 aWFsUHJvdmlkZXJIaWkuaD4NCj4tDQo+LS8vDQo+LS8vIEZvcm1zIGRlZmluaXRpb24NCj4tLy8N Cj4tI2RlZmluZSBGT1JNSURfR0VUX1BBU1NXT1JEX0ZPUk0gICAgICAxDQo+LQ0KPi0vLw0KPi0v LyBLZXkgZGVmaW5hdGlvbg0KPi0vLw0KPi0jZGVmaW5lIEtFWV9HRVRfUEFTU1dPUkQgICAgICAg ICAgICAgIDB4MTAwMA0KPi0NCj4tI2VuZGlmDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cv VXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFs UA0KPnJvdmlkZXJEeGUuaW5mDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdk Q3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwNCj5Qcm92aWRlckR4ZS5pbmYNCj5k ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCBhYjdiYTJjOTEzLi4wMDAwMDAwMDAwDQo+ LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3Zp ZGVyRHhlL1B3ZENyZWRlbnRpYWxQDQo+cm92aWRlckR4ZS5pbmYNCj4rKysgL2Rldi9udWxsDQo+ QEAgLTEsNjUgKzAsMCBAQA0KPi0jIyBAZmlsZQ0KPi0jICBQcm92aWRlcyBhIHBhc3N3b3JkIGNy ZWRlbnRpYWwgcHJvdmlkZXIgaW1wbGVtZW50YXRpb24NCj4tIyAgVGhpcyBtb2R1bGUgcHJvdmlk ZXMgYSBwYXNzd29yZCBjcmVkZW50aWFsIHByb3ZpZGVyIGltcGxlbWVudGF0aW9uLg0KPi0jDQo+ LSMgQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KPi0jIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBt YXRlcmlhbHMNCj4tIyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0 ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi0jIHdoaWNoIGFjY29t cGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1h eSBiZQ0KPmZvdW5kIGF0DQo+LSMgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1s aWNlbnNlLnBocA0KPi0jIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0Qg TElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+LSMgV0lUSE9VVCBXQVJSQU5USUVTIE9S IFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVE Lg0KPi0jDQo+LSMjDQo+LQ0KPi1bRGVmaW5lc10NCj4tICBJTkZfVkVSU0lPTiAgICAgICAgICAg ICAgICAgICAgPSAweDAwMDEwMDA1DQo+LSAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAg ID0gUHdkQ3JlZGVudGlhbFByb3ZpZGVyDQo+LSAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAgICAg ICAgID0gUHdkQ3JlZGVudGlhbFByb3ZpZGVyLnVuaQ0KPi0gIEZJTEVfR1VJRCAgICAgICAgICAg ICAgICAgICAgICA9IEQ2QzU4OUVBLUREMjktNDllZi05N0Y2LTFBOUZFMTlBMDRFMA0KPi0gIE1P RFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IFVFRklfRFJJVkVSDQo+LSAgVkVSU0lPTl9T VFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+LSAgRU5UUllfUE9JTlQgICAgICAgICAgICAg ICAgICAgID0gUGFzc3dvcmRQcm92aWRlckluaXQNCj4tDQo+LVtTb3VyY2VzXQ0KPi0gIFB3ZENy ZWRlbnRpYWxQcm92aWRlci5jDQo+LSAgUHdkQ3JlZGVudGlhbFByb3ZpZGVyLmgNCj4tICBQd2RD cmVkZW50aWFsUHJvdmlkZXJEYXRhLmgNCj4tICBQd2RDcmVkZW50aWFsUHJvdmlkZXJWZnIuVmZy DQo+LSAgUHdkQ3JlZGVudGlhbFByb3ZpZGVyU3RyaW5ncy51bmkNCj4tDQo+LVtQYWNrYWdlc10N Cj4tICBNZGVQa2cvTWRlUGtnLmRlYw0KPi0gIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVj DQo+LSAgQ3J5cHRvUGtnL0NyeXB0b1BrZy5kZWMNCj4tICBTZWN1cml0eVBrZy9TZWN1cml0eVBr Zy5kZWMNCj4tDQo+LVtMaWJyYXJ5Q2xhc3Nlc10NCj4tICBVZWZpUnVudGltZVNlcnZpY2VzVGFi bGVMaWINCj4tICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4tICBVZWZpRHJpdmVyRW50cnlQ b2ludA0KPi0gIE1lbW9yeUFsbG9jYXRpb25MaWINCj4tICBCYXNlTWVtb3J5TGliDQo+LSAgRGVi dWdMaWINCj4tICBIaWlMaWINCj4tICBVZWZpTGliDQo+LSAgQmFzZUNyeXB0TGliDQo+LQ0KPi1b R3VpZHNdDQo+LSAgZ0VmaVVzZXJDcmVkZW50aWFsQ2xhc3NQYXNzd29yZEd1aWQgICAgICAgICAg ICMjIFNPTUVUSU1FU19DT05TVU1FUw0KPiMjIEdVSUQNCj4tDQo+LSAgIyMgUFJPRFVDRVMgICAg ICAgICAgICAgIyMgVmFyaWFibGU6TCJQd2RDcmVkZW50aWFsIg0KPi0gICMjIENPTlNVTUVTICAg ICAgICAgICAgICMjIFZhcmlhYmxlOkwiUHdkQ3JlZGVudGlhbCINCj4tICAjIyBDT05TVU1FUyAg ICAgICAgICAgICAjIyBISUkNCj4tICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBHVUlEICAg ICAgICAgICAgICAgIyAgVGhlIGNyZWRlbnRpYWwgcHJvdmlkZXINCj5pZGVudGlmaWVyDQo+LSAg Z1B3ZENyZWRlbnRpYWxQcm92aWRlckd1aWQNCj4tDQo+LVtQcm90b2NvbHNdDQo+LSAgZ0VmaURl dmljZVBhdGhQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+LSAg Z0VmaUhpaUNvbmZpZ0FjY2Vzc1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICMjIFBST0RVQ0VT DQo+LSAgZ0VmaVVzZXJDcmVkZW50aWFsMlByb3RvY29sR3VpZCAgICAgICAgICAgICAgICMjIFBS T0RVQ0VTDQo+LSAgZ0VmaVVzZXJNYW5hZ2VyUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAg ICMjIFNPTUVUSU1FU19DT05TVU1FUw0KPi0NCj4tW1VzZXJFeHRlbnNpb25zLlRpYW5vQ29yZS4i RXh0cmFGaWxlcyJdDQo+LSAgUHdkQ3JlZGVudGlhbFByb3ZpZGVyRXh0cmEudW5pDQo+LQ0KPmRp ZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFs UHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbFANCj5yb3ZpZGVyRXh0cmEudW5pDQo+Yi9TZWN1cml0 eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRl bnRpYWwNCj5Qcm92aWRlckV4dHJhLnVuaQ0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmlu ZGV4IGJjYzIyMGE1MWQuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVu dGlmaWNhdGlvbi9Qd2RDcmVkZW50aWFsUHJvdmlkZXJEeGUvUHdkQ3JlZGVudGlhbFANCj5yb3Zp ZGVyRXh0cmEudW5pDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDE5ICswLDAgQEANCj4tLy8gLyoq IEBmaWxlDQo+LS8vIFB3ZENyZWRlbnRpYWxQcm92aWRlciBMb2NhbGl6ZWQgU3RyaW5ncyBhbmQg Q29udGVudA0KPi0vLw0KPi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgLSAyMDE4LCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LS8vDQo+LS8vIFRoaXMgcHJvZ3Jh bSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tLy8gYXJlIGxpY2Vuc2VkIGFuZCBt YWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0K PkxpY2Vuc2UNCj4tLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBm dWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4tLy8gaHR0cDovL29w ZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0vLyBUSEUgUFJPR1JBTSBJ UyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPkJBU0lT LA0KPi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5E LCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LS8vDQo+LS8vICoqLw0KPi0NCj4tI3N0 cmluZyBTVFJfUFJPUEVSVElFU19NT0RVTEVfTkFNRQ0KPi0jbGFuZ3VhZ2UgZW4tVVMNCj4tIlBh c3N3b3JkIENyZWRlbnRpYWwgUHJvdmlkZXIiDQo+LQ0KPi0NCj5kaWZmIC0tZ2l0DQo+YS9TZWN1 cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENy ZWRlbnRpYWxQDQo+cm92aWRlclN0cmluZ3MudW5pDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRp ZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwNCj5Qcm92aWRl clN0cmluZ3MudW5pDQo+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+aW5kZXggZTdiMzEyNmY4 My4uMDAwMDAwMDAwMA0KPi0tLQ0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3 ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Qd2RDcmVkZW50aWFsUA0KPnJvdmlkZXJTdHJpbmdzLnVu aQ0KPisrKyAvZGV2L251bGwNCj5AQCAtMSwzOCArMCwwIEBADQo+LS8qKiBAZmlsZQ0KPi0gIFN0 cmluZyBkZWZpbml0aW9ucyBmb3IgdGhlIFBhc3N3b3JkIENyZWRlbnRpYWwgUHJvdmlkZXIuDQo+ LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBt YXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVy bXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5p ZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBi ZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5z ZS5waHAuDQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJ Q0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJF U0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0N Cj4tKiovDQo+LQ0KPi0jbGFuZ2RlZiBlbi1VUyAiRW5nbGlzaCINCj4tI2xhbmdkZWYgZnItRlIg ICJGcmFuY2FpcyINCj4tDQo+LSNzdHJpbmcgU1RSX0NSRURFTlRJQUxfVElUTEUgICAgICAgICAg ICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlBhc3N3b3JkDQo+Q3JlZGVudGlhbCBQcm92aWRl ciINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj bGFuZ3VhZ2UgZnItRlIgICJQYXNzd29yZCBDcmVkZW50aWFsIFByb3ZpZGVyDQo+KEZyZW5jaCki DQo+LSNzdHJpbmcgU1RSX0ZPUk1fVElUTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xh bmd1YWdlIGVuLVVTICAiR2V0IFBhc3N3b3JkIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkdldCBQYXNzd29yZChG cmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9OVUxMX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAg ICAgICNsYW5ndWFnZSBlbi1VUyAgIiINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICIiDQo+LSNzdHJpbmcgU1RSX0lO UFVUX1BBU1NXT1JEICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiUGxl YXNlIElucHV0DQo+UGFzc3dvcmQiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiUGxlYXNlIElucHV0IFBhc3N3b3Jk KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1BST1ZJREVSX05BTUUgICAgICAgICAgICAgICAgICAg ICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIklOVEVMDQo+UGFzc3dvcmQgQ3JlZGVudGlhbCBQcm92 aWRlciINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjbGFuZ3VhZ2UgZnItRlIgICJJTlRFTCBQYXNzd29yZCBDcmVkZW50aWFsDQo+UHJvdmlkZXIo RnJlbmNoKSINCj4tI3N0cmluZyBTVFJfUFJPVklERVJfVFlQRV9OQU1FICAgICAgICAgICAgICAg ICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJQYXNzd29yZA0KPkNyZWRlbnRpYWwgUHJvdmlkZXIiDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1 YWdlIGZyLUZSICAiUGFzc3dvcmQgQ3JlZGVudGlhbA0KPlByb3ZpZGVyKEZyZW5jaCkiDQo+LSNz dHJpbmcgU1RSX0lOUFVUX1BBU1NXT1JEX0FHQUlOICAgICAgICAgICAgICAgICAgI2xhbmd1YWdl IGVuLVVTICAiSW5wdXQNCj5QYXNzd29yZCBBZ2FpbiINCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJJbnB1dCBQYXNz d29yZCBBZ2FpbiAoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfRFJBV19BX0xJTkUgICAgICAgICAg ICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0N Cj4tLS0tLS0tLSINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0iDQo+LSNzdHJpbmcgU1RSX1BBU1NXT1JEX0lOQ09SUkVDVCAgICAgICAgICAgICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTICAiICAgICBJbmNvcnJlY3QNCj5QYXNzd29yZCEgICAgICINCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3Vh Z2UgZnItRlIgICIgICAgSW5jb3JyZWN0IFBhc3N3b3JkISAoRnJlbmNoKSAgICAiDQo+LSNzdHJp bmcgU1RSX1BBU1NXT1JEX01JU01BVENIICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVu LVVTICAiICAgIFRoZQ0KPlBhc3N3b3JkIE1pc21hdGNoISAgICAiDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiICAg VGhlIFBhc3N3b3JkIE1pc21hdGNoISAoRnJlbmNoKQ0KPiINCj4tDQo+ZGlmZiAtLWdpdA0KPmEv U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1B3ZENyZWRlbnRpYWxQcm92aWRlckR4ZS9Q d2RDcmVkZW50aWFsUA0KPnJvdmlkZXJWZnIuVmZyDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRp ZmljYXRpb24vUHdkQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWwNCj5Qcm92aWRl clZmci5WZnINCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCA2MDk3MjIwM2IwLi4w MDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vUHdkQ3Jl ZGVudGlhbFByb3ZpZGVyRHhlL1B3ZENyZWRlbnRpYWxQDQo+cm92aWRlclZmci5WZnINCj4rKysg L2Rldi9udWxsDQo+QEAgLTEsMzQgKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBQYXNzd29yZCBD cmVkZW50aWFsIFByb3ZpZGVyIGZvcm1zZXQuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAy MDEwLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMg cHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFu ZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJT RA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg ZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVu c291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElT IERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0K Pi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI RVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpbmNsdWRlICJQd2RD cmVkZW50aWFsUHJvdmlkZXJEYXRhLmgiDQo+LQ0KPi1mb3Jtc2V0DQo+LSAgZ3VpZCAgICAgID0g UFdEX0NSRURFTlRJQUxfUFJPVklERVJfR1VJRCwNCj4tICB0aXRsZSAgICAgPSBTVFJJTkdfVE9L RU4oU1RSX0NSRURFTlRJQUxfVElUTEUpLA0KPi0gIGhlbHAgICAgICA9IFNUUklOR19UT0tFTihT VFJfTlVMTF9TVFJJTkcpLA0KPi0gIGNsYXNzZ3VpZCA9IFBXRF9DUkVERU5USUFMX1BST1ZJREVS X0dVSUQsDQo+LQ0KPi0gIGZvcm0gZm9ybWlkID0gRk9STUlEX0dFVF9QQVNTV09SRF9GT1JNLA0K Pi0gICAgdGl0bGUgPSBTVFJJTkdfVE9LRU4oU1RSX0ZPUk1fVElUTEUpOw0KPi0NCj4tICAgIHRl eHQNCj4tICAgICAgaGVscCAgID0gU1RSSU5HX1RPS0VOKFNUUl9OVUxMX1NUUklORyksDQo+LSAg ICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfSU5QVVRfUEFTU1dPUkQpLA0KPi0gICAgICBm bGFncyAgPSBJTlRFUkFDVElWRSwNCj4tICAgICAga2V5ICAgID0gS0VZX0dFVF9QQVNTV09SRDsN Cj4tDQo+LSAgZW5kZm9ybTsNCj4tDQo+LWVuZGZvcm1zZXQ7DQo+XCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9u L1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5vdmlkZXIuYw0KPmIv U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9V c2JDcmVkZW50aWFsUHINCj5vdmlkZXIuYw0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmlu ZGV4IDg0MWU5NzUxMDMuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVu dGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFByDQo+b3Zp ZGVyLmMNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMTQxMCArMCwwIEBADQo+LS8qKiBAZmlsZQ0K Pi0gIFVzYiBDcmVkZW50aWFsIFByb3ZpZGVyIGRyaXZlciBpbXBsZW1lbmV0YXRpb24uDQo+LQ0K Pi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRl cmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMg YW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMg dGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0K PmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5w aHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5T RSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5U QVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0q Ki8NCj4tDQo+LSNpbmNsdWRlICJVc2JDcmVkZW50aWFsUHJvdmlkZXIuaCINCj4tDQo+LUNSRURF TlRJQUxfVEFCTEUgICAgICAgICAgICAqbVVzYlRhYmxlICAgICAgID0gTlVMTDsNCj4tVVNCX1BS T1ZJREVSX0NBTExCQUNLX0lORk8gICptQ2FsbGJhY2tJbmZvICAgPSBOVUxMOw0KPi1VU0JfQ1JF REVOVElBTF9JTkZPICAgICAgICAgKm1Vc2JJbmZvSGFuZGxlICA9IE5VTEw7DQo+LQ0KPi1FRklf VVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgZ1VzYkNyZWRlbnRpYWxQcm92aWRlckRyaXZlciA9 IHsNCj4tICBVU0JfQ1JFREVOVElBTF9QUk9WSURFUl9HVUlELA0KPi0gIEVGSV9VU0VSX0NSRURF TlRJQUxfQ0xBU1NfU0VDVVJFX0NBUkQsDQo+LSAgQ3JlZGVudGlhbEVucm9sbCwNCj4tICBDcmVk ZW50aWFsRm9ybSwNCj4tICBDcmVkZW50aWFsVGlsZSwNCj4tICBDcmVkZW50aWFsVGl0bGUsDQo+ LSAgQ3JlZGVudGlhbFVzZXIsDQo+LSAgQ3JlZGVudGlhbFNlbGVjdCwNCj4tICBDcmVkZW50aWFs RGVzZWxlY3QsDQo+LSAgQ3JlZGVudGlhbERlZmF1bHQsDQo+LSAgQ3JlZGVudGlhbEdldEluZm8s DQo+LSAgQ3JlZGVudGlhbEdldE5leHRJbmZvLA0KPi0gIEVGSV9DUkVERU5USUFMX0NBUEFCSUxJ VElFU19FTlJPTEwsDQo+LSAgQ3JlZGVudGlhbERlbGV0ZQ0KPi19Ow0KPi0NCj4tDQo+LS8qKg0K Pi0gIEdldCBzdHJpbmcgYnkgc3RyaW5nIGlkIGZyb20gSElJIEludGVyZmFjZS4NCj4tDQo+LQ0K Pi0gIEBwYXJhbVtpbl0gSWQgICAgICBTdHJpbmcgSUQgdG8gZ2V0IHRoZSBzdHJpbmcgZnJvbS4N Cj4tDQo+LSAgQHJldHZhbCAgQ0hBUjE2ICogIFN0cmluZyBmcm9tIElELg0KPi0gIEByZXR2YWwg IE5VTEwgICAgICBJZiBlcnJvciBvY2N1cnMuDQo+LQ0KPi0qKi8NCj4tQ0hBUjE2ICoNCj4tR2V0 U3RyaW5nQnlJZCAoDQo+LSAgSU4gRUZJX1NUUklOR19JRCAgICAgICAgICAgICBJZA0KPi0gICkN Cj4tew0KPi0gIC8vDQo+LSAgLy8gR2V0IHRoZSBjdXJyZW50IHN0cmluZyBmb3IgdGhlIGN1cnJl bnQgTGFuZ3VhZ2UNCj4tICAvLw0KPi0gIHJldHVybiBIaWlHZXRTdHJpbmcgKG1DYWxsYmFja0lu Zm8tPkhpaUhhbmRsZSwgSWQsIE5VTEwpOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRXhwYW5k IHBhc3N3b3JkIHRhYmxlIHNpemUuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1FeHBhbmRUYWJsZVNp emUgKA0KPi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBDUkVERU5USUFMX1RBQkxFICAqTmV3VGFi bGU7DQo+LSAgVUlOVE4gICAgICAgICAgICAgQ291bnQ7DQo+LQ0KPi0gIENvdW50ID0gbVVzYlRh YmxlLT5NYXhDb3VudCArIFVTQl9UQUJMRV9JTkM7DQo+LSAgLy8NCj4tICAvLyBDcmVhdGUgbmV3 IGNyZWRlbnRpYWwgdGFibGUuDQo+LSAgLy8NCj4tICBOZXdUYWJsZSA9IEFsbG9jYXRlWmVyb1Bv b2wgKA0KPi0gICAgICAgICAgICAgICBzaXplb2YgKENSRURFTlRJQUxfVEFCTEUpIC0gc2l6ZW9m IChVU0JfSU5GTykgKw0KPi0gICAgICAgICAgICAgICBDb3VudCAqIHNpemVvZiAoVVNCX0lORk8p DQo+LSAgICAgICAgICAgICAgICk7DQo+LSAgQVNTRVJUIChOZXdUYWJsZSAhPSBOVUxMKTsNCj4t DQo+LSAgTmV3VGFibGUtPk1heENvdW50ID0gQ291bnQ7DQo+LSAgTmV3VGFibGUtPkNvdW50ICAg ID0gbVVzYlRhYmxlLT5Db3VudDsNCj4tDQo+LSAgLy8NCj4tICAvLyBDb3B5IG9sZCBlbnRyaWVz Lg0KPi0gIC8vDQo+LSAgQ29weU1lbSAoDQo+LSAgICAmTmV3VGFibGUtPlVzZXJJbmZvLA0KPi0g ICAgJm1Vc2JUYWJsZS0+VXNlckluZm8sDQo+LSAgICBtVXNiVGFibGUtPkNvdW50ICogc2l6ZW9m IChVU0JfSU5GTykNCj4tICAgICk7DQo+LSAgRnJlZVBvb2wgKG1Vc2JUYWJsZSk7DQo+LSAgbVVz YlRhYmxlID0gTmV3VGFibGU7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBBZGQsIHVwZGF0ZSBv ciBkZWxldGUgaW5mbyBpbiB0YWJsZSwgYW5kIHN5bmMgd2l0aCBOViB2YXJpYWJsZS4NCj4tDQo+ LSAgQHBhcmFtW2luXSAgSW5kZXggICAgIFRoZSBpbmRleCBvZiB0aGUgcGFzc3dvcmQgaW4gdGFi bGUuIElmIGluZGV4IGlzIGZvdW5kIGluDQo+LSAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxl LCB1cGRhdGUgdGhlIGluZm8sIGVsc2UgYWRkIHRoZSBpbnRvIHRvIHRhYmxlLg0KPi0gIEBwYXJh bVtpbl0gIEluZm8gICAgICBUaGUgbmV3IGNyZWRlbnRpYWwgaW5mbyB0byBhZGQgaW50byB0YWJs ZS4gSWYgSW5mbyBpcyBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhl IGluZm8gYnkgSW5kZXguDQo+LQ0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBJ bmZvIGlzIE5VTEwgd2hlbiBzYXZlIHRoZSBpbmZvLg0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICBNb2RpZnkgdGhlIHRhYmxlIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIE90 aGVycyAgICAgICAgICAgICAgICAgRmFpbGVkIHRvIG1vZGlmeSB0aGUgdGFibGUuDQo+LQ0KPi0q Ki8NCj4tRUZJX1NUQVRVUw0KPi1Nb2RpZnlUYWJsZSAoDQo+LSAgSU4gIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbmRleCwNCj4tICBJTiAgVVNCX0lORk8gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogSW5mbyBPUFRJT05BTA0KPi0gICkNCj4tew0KPi0gIEVGSV9T VEFUVVMgIFN0YXR1czsNCj4tICBVU0JfSU5GTyAgICAqTmV3VXNiSW5mbzsNCj4tDQo+LSAgTmV3 VXNiSW5mbyA9IE5VTEw7DQo+LSAgaWYgKEluZGV4IDwgbVVzYlRhYmxlLT5Db3VudCkgew0KPi0g ICAgaWYgKEluZm8gPT0gTlVMTCkgew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBEZWxldGUgdGhl IHNwZWNpZmllZCBlbnRyeS4NCj4tICAgICAgLy8NCj4tICAgICAgbVVzYlRhYmxlLT5Db3VudC0t Ow0KPi0gICAgICBpZiAoSW5kZXggIT0gbVVzYlRhYmxlLT5Db3VudCkgew0KPi0gICAgICAgIE5l d1VzYkluZm8gPSAmbVVzYlRhYmxlLT5Vc2VySW5mb1ttVXNiVGFibGUtPkNvdW50XTsNCj4tICAg ICAgfQ0KPi0gICAgfSBlbHNlIHsNCj4tICAgICAgLy8NCj4tICAgICAgLy8gVXBkYXRlIHRoZSBz cGVjaWZpZWQgZW50cnkuDQo+LSAgICAgIC8vDQo+LSAgICAgIE5ld1VzYkluZm8gPSBJbmZvOw0K Pi0gICAgfQ0KPi0gIH0gZWxzZSB7DQo+LSAgICAvLw0KPi0gICAgLy8gQWRkIGEgbmV3IGVudHJ5 DQo+LSAgICAvLw0KPi0gICAgaWYgKEluZm8gPT0gTlVMTCkgew0KPi0gICAgICByZXR1cm4gRUZJ X0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gICAgfQ0KPi0NCj4tICAgIGlmIChtVXNiVGFibGUtPkNv dW50ID49IG1Vc2JUYWJsZS0+TWF4Q291bnQpIHsNCj4tICAgICAgRXhwYW5kVGFibGVTaXplICgp Ow0KPi0gICAgfQ0KPi0NCj4tICAgIE5ld1VzYkluZm8gPSBJbmZvOw0KPi0gICAgbVVzYlRhYmxl LT5Db3VudCsrOw0KPi0gIH0NCj4tDQo+LSAgaWYgKE5ld1VzYkluZm8gIT0gTlVMTCkgew0KPi0g ICAgQ29weU1lbSAoJm1Vc2JUYWJsZS0+VXNlckluZm9bSW5kZXhdLCBOZXdVc2JJbmZvLCBzaXpl b2YNCj4oVVNCX0lORk8pKTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSB0aGUgY3Jl ZGVudGlhbCB0YWJsZS4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUgKA0K Pi0gICAgICAgICAgICAgICAgICBMIlVzYkNyZWRlbnRpYWwiLA0KPi0gICAgICAgICAgICAgICAg ICAmZ1VzYkNyZWRlbnRpYWxQcm92aWRlckd1aWQsDQo+LSAgICAgICAgICAgICAgICAgIEVGSV9W QVJJQUJMRV9OT05fVk9MQVRJTEUgfA0KPkVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1Ms DQo+LSAgICAgICAgICAgICAgICAgIG1Vc2JUYWJsZS0+Q291bnQgKiBzaXplb2YgKFVTQl9JTkZP KSwNCj4tICAgICAgICAgICAgICAgICAgJm1Vc2JUYWJsZS0+VXNlckluZm8NCj4tICAgICAgICAg ICAgICAgICAgKTsNCj4tICByZXR1cm4gU3RhdHVzOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAg Q3JlYXRlIGEgY3JlZGVudGlhbCB0YWJsZQ0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgQ3JlYXRlIGEgY3JlZGVudGlhbCB0YWJsZSBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgIEZhaWxlZCB0byBjcmVhdGUgYSBwYXNzd29yZC4NCj4tDQo+LSoqLw0K Pi1FRklfU1RBVFVTDQo+LUluaXRDcmVkZW50aWFsVGFibGUgKA0KPi0gIFZPSUQNCj4tICApDQo+ LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LSAgVUlOVDggICAgICAgKlZhcjsNCj4tICBV SU5UTiAgICAgICBWYXJTaXplOw0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCBVc2IgY3JlZGVudGlh bCBkYXRhIGZyb20gTlYgdmFyaWFibGUuDQo+LSAgLy8NCj4tICBWYXJTaXplID0gMDsNCj4tICBW YXIgICAgID0gTlVMTDsNCj4tICBTdGF0dXMgID0gZ1JULT5HZXRWYXJpYWJsZSAoDQo+LSAgICAg ICAgICAgICAgICAgICBMIlVzYkNyZWRlbnRpYWwiLA0KPi0gICAgICAgICAgICAgICAgICAgJmdV c2JDcmVkZW50aWFsUHJvdmlkZXJHdWlkLA0KPi0gICAgICAgICAgICAgICAgICAgTlVMTCwNCj4t ICAgICAgICAgICAgICAgICAgICZWYXJTaXplLA0KPi0gICAgICAgICAgICAgICAgICAgVmFyDQo+ LSAgICAgICAgICAgICAgICAgICApOw0KPi0gIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09f U01BTEwpIHsNCj4tICAgIFZhciA9IEFsbG9jYXRlWmVyb1Bvb2wgKFZhclNpemUpOw0KPi0gICAg aWYgKFZhciA9PSBOVUxMKSB7DQo+LSAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsN Cj4tICAgIH0NCj4tICAgIFN0YXR1cyA9IGdSVC0+R2V0VmFyaWFibGUgKA0KPi0gICAgICAgICAg ICAgICAgICAgIEwiVXNiQ3JlZGVudGlhbCIsDQo+LSAgICAgICAgICAgICAgICAgICAgJmdVc2JD cmVkZW50aWFsUHJvdmlkZXJHdWlkLA0KPi0gICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAg ICAgICAgICAgICAgICAgICAgJlZhclNpemUsDQo+LSAgICAgICAgICAgICAgICAgICAgVmFyDQo+ LSAgICAgICAgICAgICAgICAgICAgKTsNCj4tICB9DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSAmJiAoU3RhdHVzICE9IEVGSV9OT1RfRk9VTkQpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0K Pi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBJbml0IFVzYiBjcmVkZW50aWFsIHRhYmxlLg0KPi0g IC8vDQo+LSAgbVVzYlRhYmxlID0gQWxsb2NhdGVaZXJvUG9vbCAoDQo+LSAgICAgICAgICAgICAg ICBzaXplb2YgKENSRURFTlRJQUxfVEFCTEUpIC0gc2l6ZW9mIChVU0JfSU5GTykgKw0KPi0gICAg ICAgICAgICAgICAgVVNCX1RBQkxFX0lOQyAqIHNpemVvZiAoVVNCX0lORk8pICsNCj4tICAgICAg ICAgICAgICAgIFZhclNpemUNCj4tICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKG1Vc2JUYWJs ZSA9PSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAoVmFyKTsNCj4tICAgIHJldHVybiBFRklfT1VU X09GX1JFU09VUkNFUzsNCj4tICB9DQo+LQ0KPi0gIG1Vc2JUYWJsZS0+Q291bnQgICAgICA9IFZh clNpemUgLyBzaXplb2YgKFVTQl9JTkZPKTsNCj4tICBtVXNiVGFibGUtPk1heENvdW50ICAgPSBt VXNiVGFibGUtPkNvdW50ICsgVVNCX1RBQkxFX0lOQzsNCj4tICBpZiAoVmFyICE9IE5VTEwpIHsN Cj4tICAgIENvcHlNZW0gKG1Vc2JUYWJsZS0+VXNlckluZm8sIFZhciwgVmFyU2l6ZSk7DQo+LSAg ICBGcmVlUG9vbCAoVmFyKTsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+ LQ0KPi0NCj4tLyoqDQo+LSAgUmVhZCB0aGUgc3BlY2lmaWVkIGZpbGUgYnkgRmlsZU5hbWUgaW4g dGhlIFVzYiBrZXkgYW5kIHJldHVybiB0aGUgZmlsZSBzaXplIGluDQo+QnVmZmVyU2l6ZQ0KPi0g IGFuZCBmaWxlIGNvbnRlbnQgaW4gQnVmZmVyLg0KPi0gIE5vdGU6IHRoZSBjYWxsZXIgaXMgcmVz cG9uc2libGUgdG8gZnJlZSB0aGUgYnVmZmVyIG1lbW9yeS4NCj4tDQo+LSAgQHBhcmFtICBGaWxl TmFtZSAgICAgICAgICAgICAgIEZpbGUgdG8gcmVhZC4NCj4tICBAcGFyYW0gIEJ1ZmZlciAgICAg ICAgICAgICAgICAgUmV0dXJuZWQgd2l0aCBkYXRhIHJlYWQgZnJvbSB0aGUgZmlsZS4NCj4tICBA cGFyYW0gIEJ1ZmZlclNpemUgICAgICAgICAgICAgU2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIuDQo+ LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY29tbWFuZCBjb21wbGV0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBSZXNv dXJjZSBhbGxvY2F0aW9uIGZhaWxlZC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAg ICAgRmlsZSBub3QgZm91bmQuDQo+LSAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIERl dmljZSBJL08gZXJyb3IuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1HZXRGaWxlRGF0YSAo DQo+LSAgSU4gICAgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpGaWxl TmFtZSwNCj4tICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KipCdWZmZXIsDQo+LSAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpCdWZmZXJTaXplDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRl eDsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUNvdW50Ow0KPi0g IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRjaEJ1ZmZlclNpemU7DQo+LSAg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KPi0gIEVGSV9G SUxFICAgICAgICAgICAgICAgICAgICAgICAgKlJvb3RGczsNCj4tICBFRklfRklMRSAgICAgICAg ICAgICAgICAgICAgICAgICpGaWxlSGFuZGxlOw0KPi0gIEVGSV9GSUxFX0lORk8gICAgICAgICAg ICAgICAgICAgKkZpbGVJbmZvOw0KPi0gIEVGSV9TSU1QTEVfRklMRV9TWVNURU1fUFJPVE9DT0wg KlNpbXBsZUZpbGVTeXN0ZW07DQo+LSAgRUZJX0JMT0NLX0lPX1BST1RPQ09MICAgICAgICAgICAq QmxrSW87DQo+LQ0KPi0gIEZpbGVJbmZvICAgICAgPSBOVUxMOw0KPi0gIEZpbGVIYW5kbGUgICAg PSBOVUxMOw0KPi0NCj4tICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQo+LSAg ICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+LSAgICAgICAgICAgICAgICAgICZnRWZpU2lt cGxlRmlsZVN5c3RlbVByb3RvY29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgTlVMTCwNCj4t ICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPi0gICAgICAgICAgICAgICAgICAmSGFu ZGxlQnVmZmVyDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPi0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIkNhbiBub3QgTG9jYXRlIFNpbXBs ZUZpbGVTeXN0ZW1Qcm90b2NvbFxuIikpOw0KPi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4tDQo+ LSAgLy8NCj4tICAvLyBGaW5kIGFuZCBvcGVuIHRoZSBmaWxlIGluIHJlbW92YWJsZSBtZWRpYSBk aXNrLg0KPi0gIC8vDQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IElu ZGV4KyspIHsNCj4tICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPi0gICAgICAg ICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+LSAgICAgICAgICAgICAgICAgICAg JmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkLA0KPi0gICAgICAgICAgICAgICAgICAgIChWT0lEICoq KSAmQmxrSW8NCj4tICAgICAgICAgICAgICAgICAgICApOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPi0gICAgICBjb250aW51ZTsNCj4tICAgIH0NCj4tDQo+LSAgICBpZiAoQmxr SW8tPk1lZGlhLT5SZW1vdmFibGVNZWRpYSkgew0KPi0gICAgICBTdGF0dXMgPSBnQlMtPkhhbmRs ZVByb3RvY29sICgNCj4tICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0s DQo+LSAgICAgICAgICAgICAgICAgICAgICAmZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1 aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJlNpbXBsZUZpbGVTeXN0ZW0N Cj4tICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4tICAgICAgICBjb250aW51ZTsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAgU3RhdHVz ID0gU2ltcGxlRmlsZVN5c3RlbS0+T3BlblZvbHVtZSAoDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU2ltcGxlRmlsZVN5c3RlbSwNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmUm9vdEZzDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsNCj4tICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICAgIGNvbnRp bnVlOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICBTdGF0dXMgPSBSb290RnMtPk9wZW4gKA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgUm9vdEZzLA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgJkZpbGVIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlTmFtZSwNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVBRCwNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgIDANCj4tICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAg IGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgICAgYnJlYWs7DQo+LSAgICAgIH0N Cj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPi0NCj4t ICBpZiAoSW5kZXggPj0gSGFuZGxlQ291bnQpIHsNCj4tICAgIERFQlVHICgoREVCVUdfRVJST1Is ICJDYW4gbm90IGZvdW5kIHRoZSB0b2tlbiBmaWxlIVxuIikpOw0KPi0gICAgU3RhdHVzID0gRUZJ X05PVF9GT1VORDsNCj4tICAgIGdvdG8gRG9uZTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8g RmlndXJlIG91dCBob3cgYmlnIHRoZSBmaWxlIGlzLg0KPi0gIC8vDQo+LSAgU2NyYXRjaEJ1ZmZl clNpemUgPSAwOw0KPi0gIFN0YXR1cyA9IEZpbGVIYW5kbGUtPkdldEluZm8gKA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICBGaWxlSGFuZGxlLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAm Z0VmaUZpbGVJbmZvR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgJlNjcmF0Y2hCdWZm ZXJTaXplLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoU3RhdHVzICE9IEVG SV9CVUZGRVJfVE9PX1NNQUxMKSkgew0KPi0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIkNhbiBu b3Qgb2J0YWluIGZpbGUgc2l6ZSBpbmZvIVxuIikpOw0KPi0gICAgU3RhdHVzID0gRUZJX0RFVklD RV9FUlJPUjsNCj4tICAgIGdvdG8gRG9uZTsNCj4tICB9DQo+LQ0KPi0gIEZpbGVJbmZvID0gQWxs b2NhdGVaZXJvUG9vbCAoU2NyYXRjaEJ1ZmZlclNpemUpOw0KPi0gIGlmIChGaWxlSW5mbyA9PSBO VUxMKSB7DQo+LSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQ2FuIG5vdCBhbGxvY2F0ZSBlbm91 Z2ggbWVtb3J5IGZvciB0aGUgdG9rZW4NCj5maWxlIVxuIikpOw0KPi0gICAgU3RhdHVzID0gRUZJ X09VVF9PRl9SRVNPVVJDRVM7DQo+LSAgICBnb3RvIERvbmU7DQo+LSAgfQ0KPi0NCj4tICBTdGF0 dXMgPSBGaWxlSGFuZGxlLT5HZXRJbmZvICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgRmls ZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlGaWxlSW5mb0d1aWQsDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICZTY3JhdGNoQnVmZmVyU2l6ZSwNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgRmlsZUluZm8NCj4tICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4t ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi Q2FuIG5vdCBvYnRhaW4gZmlsZSBpbmZvIGZyb20gdGhlIHRva2VuIGZpbGUhXG4iKSk7DQo+LSAg ICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOw0KPi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4t DQo+LSAgLy8NCj4tICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgdGhlIGZpbGUuDQo+LSAgLy8N Cj4tICAqQnVmZmVyU2l6ZSA9IChVSU5UMzIpIEZpbGVJbmZvLT5GaWxlU2l6ZTsNCj4tICAqQnVm ZmVyICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKCpCdWZmZXJTaXplKTsNCj4tICBpZiAoKkJ1ZmZl ciA9PSBOVUxMKSB7DQo+LSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQ2FuIG5vdCBhbGxvY2F0 ZSBhIGJ1ZmZlciBmb3IgdGhlIGZpbGUhXG4iKSk7DQo+LSAgICBTdGF0dXMgPSBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4tICAgIGdvdG8gRG9uZTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8g TG9hZCBmaWxlIGludG8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuDQo+LSAgLy8NCj4tICBTdGF0dXMg PSBGaWxlSGFuZGxlLT5SZWFkIChGaWxlSGFuZGxlLCBCdWZmZXJTaXplLCAqQnVmZmVyKTsNCj4t ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBGcmVlUG9vbCAoKkJ1ZmZlcik7DQo+ LSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQ2FuIG5vdCByZWFkIHRoZSB0b2tlbiBmaWxlIVxu IikpOw0KPi0gICAgU3RhdHVzID0gRUZJX0RFVklDRV9FUlJPUjsNCj4tICAgIGdvdG8gRG9uZTsN Cj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2xvc2UgZmlsZS4NCj4tICAvLw0KPi0gIFN0YXR1 cyA9IEZpbGVIYW5kbGUtPkNsb3NlIChGaWxlSGFuZGxlKTsNCj4tICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+LSAgICBGcmVlUG9vbCAoKkJ1ZmZlcik7DQo+LSAgICBERUJVRyAoKERFQlVH X0VSUk9SLCAiQ2FuIG5vdCBjbG9zZSB0aGUgdG9rZW4gZmlsZSAhXG4iKSk7DQo+LSAgICBTdGF0 dXMgPSBFRklfREVWSUNFX0VSUk9SOw0KPi0gIH0NCj4tDQo+LURvbmU6DQo+LQ0KPi0gIGlmIChG aWxlSW5mbyAhPSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAoRmlsZUluZm8pOw0KPi0gIH0NCj4t DQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEhhc2ggdGhlIGRh dGEgdG8gZ2V0IGNyZWRlbnRpYWwuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICBCdWZmZXIgICAgICAg ICBQb2ludHMgdG8gdGhlIGRhdGEgYnVmZmVyDQo+LSAgQHBhcmFtW2luXSAgIEJ1ZmZlclNpemUg ICAgIFRoZSBzaXplIG9mIGRhdGEgaW4gYnVmZmVyLCBpbiBieXRlcy4NCj4tICBAcGFyYW1bb3V0 XSAgQ3JlZGVudGlhbCAgICAgUG9pbnRzIHRvIHRoZSBoYXNoZWQgcmVzdWx0DQo+LQ0KPi0gIEBy ZXR2YWwgICAgICBUUlVFICAgICAgICAgICBIYXNoIHRoZSBkYXRhIHN1Y2Nlc3NmdWxseS4NCj4t ICBAcmV0dmFsICAgICAgRkFMU0UgICAgICAgICAgRmFpbGVkIHRvIGhhc2ggdGhlIGRhdGEuDQo+ LQ0KPi0qKi8NCj4tQk9PTEVBTg0KPi1HZW5lcmF0ZUNyZWRlbnRpYWwgKA0KPi0gIElOICAgICAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlciwNCj4tICBJTiAgICAg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemUsDQo+LSAgICAg T1VUICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ3JlZGVudGlhbA0KPi0g ICkNCj4tew0KPi0gIEJPT0xFQU4gICAgICAgICAgIFN0YXR1czsNCj4tICBVSU5UTiAgICAgICAg ICAgICBIYXNoU2l6ZTsNCj4tICBWT0lEICAgICAgICAgICAgICAqSGFzaDsNCj4tDQo+LSAgSGFz aFNpemUgPSBTaGExR2V0Q29udGV4dFNpemUgKCk7DQo+LSAgSGFzaCAgICAgPSBBbGxvY2F0ZVBv b2wgKEhhc2hTaXplKTsNCj4tICBBU1NFUlQgKEhhc2ggIT0gTlVMTCk7DQo+LQ0KPi0gIFN0YXR1 cyA9IFNoYTFJbml0IChIYXNoKTsNCj4tICBpZiAoIVN0YXR1cykgew0KPi0gICAgZ290byBEb25l Ow0KPi0gIH0NCj4tDQo+LSAgU3RhdHVzID0gU2hhMVVwZGF0ZSAoSGFzaCwgQnVmZmVyLCBCdWZm ZXJTaXplKTsNCj4tICBpZiAoIVN0YXR1cykgew0KPi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4t DQo+LSAgU3RhdHVzID0gU2hhMUZpbmFsIChIYXNoLCBDcmVkZW50aWFsKTsNCj4tDQo+LURvbmU6 DQo+LSAgRnJlZVBvb2wgKEhhc2gpOw0KPi0gIHJldHVybiBTdGF0dXM7DQo+LX0NCj4tDQo+LQ0K Pi0vKioNCj4tICBSZWFkIHRoZSB0b2tlbiBmaWxlLCBhbmQgZGVmYXVsdCB0aGUgVG9rZW4gaXMg c2F2ZWQgYXQgdGhlIGJlZ2luaW5nIG9mIHRoZSBmaWxlLg0KPi0NCj4tICBAcGFyYW1bb3V0XSAg VG9rZW4gICAgICAgICAgICBUb2tlbiByZWFkIGZyb20gYSBUb2tlbiBmaWxlLg0KPi0NCj4tICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBSZWFkIGEgVG9rZW4gc3VjY2Vzc2Z1bGx5Lg0K Pi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgIEZhaWxzIHRvIHJlYWQgYSBUb2tlbi4N Cj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUdldFRva2VuICgNCj4tICBPVVQgVUlOVDggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqVG9rZW4NCj4tICApDQo+LXsNCj4tICBFRklf U1RBVFVTICBTdGF0dXM7DQo+LSAgVUlOVDggICAgICAgKkJ1ZmZlcjsNCj4tICBVSU5UTiAgICAg ICBCdWZTaXplOw0KPi0gIENIQVIxNiAgICAgICpUb2tlbkZpbGU7DQo+LQ0KPi0gIEJ1ZlNpemUg PSAwOw0KPi0gIEJ1ZmZlciAgPSBOVUxMOw0KPi0gIFRva2VuRmlsZSA9IFBjZEdldFB0ciAoUGNk Rml4ZWRVc2JDcmVkZW50aWFsUHJvdmlkZXJUb2tlbkZpbGVOYW1lKTsNCj4tICBTdGF0dXMgPSBH ZXRGaWxlRGF0YSAoVG9rZW5GaWxlLCAoVk9JRCAqKSZCdWZmZXIsICZCdWZTaXplKTsNCj4tICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiUmVh ZCBmaWxlICVzIGZyb20gVVNCIGVycm9yISBTdGF0dXM9KCVyKVxuIiwNCj5Ub2tlbkZpbGUsIFN0 YXR1cykpOw0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIGlmICghR2VuZXJh dGVDcmVkZW50aWFsIChCdWZmZXIsIEJ1ZlNpemUsIFRva2VuKSkgew0KPi0gICAgREVCVUcgKChE RUJVR19FUlJPUiwgIkdlbmVyYXRlIGNyZWRlbnRpYWwgZnJvbSByZWFkIGRhdGEgZmFpbGVkIVxu IikpOw0KPi0gICAgRnJlZVBvb2wgKEJ1ZmZlcik7DQo+LSAgICByZXR1cm4gRUZJX1NFQ1VSSVRZ X1ZJT0xBVElPTjsNCj4tICB9DQo+LQ0KPi0gIEZyZWVQb29sIChCdWZmZXIpOw0KPi0gIHJldHVy biBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEZpbmQgYSB1c2VyIGluZm9t YXRpb24gcmVjb3JkIGJ5IHRoZSBpbmZvcm1hdGlvbiByZWNvcmQgdHlwZS4NCj4tDQo+LSAgVGhp cyBmdW5jdGlvbiBzZWFyY2hlcyBhbGwgdXNlciBpbmZvcm1hdGlvbiByZWNvcmRzIG9mIFVzZXIg ZnJvbSBiZWdpbm5pbmcNCj4tICB1bnRpbCBlaXRoZXIgdGhlIGluZm9ybWF0aW9uIGlzIGZvdW5k IG9yIHRoZXJlIGFyZSBubyBtb3JlIHVzZXIgaW5mb21hdGlvbg0KPi0gIHJlY29yZC4gQSBtYXRj aCBvY2N1cnMgd2hlbiBhIEluZm8uSW5mb1R5cGUgZmllbGQgbWF0Y2hlcyB0aGUgdXNlcg0KPmlu Zm9ybWF0aW9uDQo+LSAgcmVjb3JkIHR5cGUuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICAgIFVzZXIg ICAgICBQb2ludHMgdG8gdGhlIHVzZXIgcHJvZmlsZSByZWNvcmQgdG8gc2VhcmNoLg0KPi0gIEBw YXJhbVtpbl0gICAgIEluZm9UeXBlICBUaGUgaW5mb21hdGlvbiB0eXBlIHRvIGJlIHNlYXJjaGVk Lg0KPi0gIEBwYXJhbVtvdXRdICAgIEluZm8gICAgICBQb2ludHMgdG8gdGhlIHVzZXIgaW5mbyBm b3VuZCwgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQ0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICB0byBmcmVlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgRmluZCB0aGUg dXNlciBpbmZvcm1hdGlvbiBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBPdGhlcnMgICAgICAg ICAgIEZhaWwgdG8gZmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+LSoqLw0KPi1FRklf U1RBVFVTDQo+LUZpbmRVc2VySW5mb0J5VHlwZSAoDQo+LSAgSU4gICAgICBFRklfVVNFUl9QUk9G SUxFX0hBTkRMRSAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgSU4gICAgICBVSU5UOCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9UeXBlLA0KPi0gIE9VVCAgICAgRUZJX1VTRVJf SU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAqKkluZm8NCj4tICApDQo+LXsNCj4tICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAg ICAgICAgKlVzZXJJbmZvOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgIFVzZXJJbmZv U2l6ZTsNCj4tICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICBVc2VySW5mb0hhbmRsZTsNCj4t ICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAqVXNlck1hbmFnZXI7DQo+LQ0KPi0gIC8vDQo+ LSAgLy8gRmluZCB1c2VyIGluZm9ybWF0aW9uIGJ5IGluZm9ybWF0aW9uIHR5cGUuDQo+LSAgLy8N Cj4tICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KPi0gIH0NCj4tDQo+LSAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoDQo+LSAg ICAgICAgICAgICAgICAgICZnRWZpVXNlck1hbmFnZXJQcm90b2NvbEd1aWQsDQo+LSAgICAgICAg ICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAmVXNlck1hbmFn ZXINCj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+LSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8g R2V0IGVhY2ggdXNlciBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0NCj4tICBVc2VySW5mb0hhbmRs ZSA9IE5VTEw7DQo+LSAgVXNlckluZm8gICAgICAgPSBOVUxMOw0KPi0gIFVzZXJJbmZvU2l6ZSAg ID0gMDsNCj4tICB3aGlsZSAoVFJVRSkgew0KPi0gICAgU3RhdHVzID0gVXNlck1hbmFnZXItPkdl dE5leHRJbmZvIChVc2VyTWFuYWdlciwgVXNlciwNCj4mVXNlckluZm9IYW5kbGUpOw0KPi0gICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tICAg IC8vDQo+LSAgICAvLyBHZXQgaW5mb3JtYXRpb24uDQo+LSAgICAvLw0KPi0gICAgU3RhdHVzID0g VXNlck1hbmFnZXItPkdldEluZm8gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNl ck1hbmFnZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyLA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgVXNlckluZm9IYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVc2VySW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICZVc2Vy SW5mb1NpemUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICBpZiAoU3Rh dHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+LSAgICAgIGlmIChVc2VySW5mbyAhPSBO VUxMKSB7DQo+LSAgICAgICAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4tICAgICAgfQ0KPi0gICAg ICBVc2VySW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKFVzZXJJbmZvU2l6ZSk7DQo+LSAgICAgIGlm IChVc2VySW5mbyA9PSBOVUxMKSB7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KPi0gICAgICB9DQo+LSAgICAgIFN0YXR1cyA9IFVzZXJNYW5hZ2VyLT5HZXRJbmZvICgN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlck1hbmFnZXIsDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFVzZXJJbmZvSGFuZGxlLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2Vy SW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlVzZXJJbmZvU2l6ZQ0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gICAgfQ0KPi0gICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tDQo+LSAgICBBU1NF UlQgKFVzZXJJbmZvICE9IE5VTEwpOw0KPi0gICAgaWYgKFVzZXJJbmZvLT5JbmZvVHlwZSA9PSBJ bmZvVHlwZSkgew0KPi0gICAgICAqSW5mbyA9IFVzZXJJbmZvOw0KPi0gICAgICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICBpZiAoVXNlckluZm8gIT0gTlVMTCkg ew0KPi0gICAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4tICB9DQo+LSAgcmV0dXJuIFN0YXR1czsN Cj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZSB0aGUgZGF0 YSBtYWlubHkgdXNlZCBpbiBmb3JtIGJyb3dzZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgSW5pdGlhbGl6ZSBmb3JtIGRhdGEgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2 YWwgT3RoZXJzICAgICAgICAgICAgICAgRmFpbCB0byBJbml0aWFsaXplIGZvcm0gZGF0YS4NCj4t DQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUluaXRGb3JtQnJvd3NlciAoDQo+LSAgVk9JRA0KPi0g ICkNCj4tew0KPi0gIFVTQl9QUk9WSURFUl9DQUxMQkFDS19JTkZPICAqQ2FsbGJhY2tJbmZvOw0K Pi0NCj4tICAvLw0KPi0gIC8vIEluaXRpYWxpemUgZHJpdmVyIHByaXZhdGUgZGF0YS4NCj4tICAv Lw0KPi0gIENhbGxiYWNrSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoVVNCX1BST1ZJ REVSX0NBTExCQUNLX0lORk8pKTsNCj4tICBpZiAoQ2FsbGJhY2tJbmZvID09IE5VTEwpIHsNCj4t ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9DQo+LQ0KPi0gIENhbGxiYWNr SW5mby0+RHJpdmVySGFuZGxlICA9IE5VTEw7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gUHVibGlzaCBI SUkgZGF0YS4NCj4tICAvLw0KPi0gIENhbGxiYWNrSW5mby0+SGlpSGFuZGxlID0gSGlpQWRkUGFj a2FnZXMgKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ1VzYkNyZWRlbnRpYWxQ cm92aWRlckd1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrSW5m by0+RHJpdmVySGFuZGxlLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JDcmVk ZW50aWFsUHJvdmlkZXJTdHJpbmdzLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKENhbGxiYWNr SW5mby0+SGlpSGFuZGxlID09IE5VTEwpIHsNCj4tICAgIHJldHVybiBFRklfT1VUX09GX1JFU09V UkNFUzsNCj4tICB9DQo+LSAgbUNhbGxiYWNrSW5mbyA9IENhbGxiYWNrSW5mbzsNCj4tDQo+LSAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRW5yb2xsIGEgdXNl ciBvbiBhIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gZW5yb2xs cyBhIHVzZXIgb24gdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLiBJZiB0aGUgdXNlciBleGlzdHMg b24NCj4tICB0aGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIsIHVwZGF0ZSB0aGUgdXNlciBpbmZvcm1h dGlvbiBvbiB0aGlzIGNyZWRlbnRpYWwNCj5wcm92aWRlcjsNCj4tICBvdGhlcndpc2UgYWRkIHRo ZSB1c2VyIGluZm9ybWF0aW9uIG9uIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LQ0KPi0gIEBwYXJh bVtpbl0gVGhpcyAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZg0KPkVG SV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbl0gVXNlciAgICAgICAg ICAgICAgICBUaGUgdXNlciBwcm9maWxlIHRvIGVucm9sbC4NCj4tDQo+LSAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgIFVzZXIgcHJvZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGVucm9sbGVk Lg0KPi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBDdXJyZW50IHVzZXIgcHJvZmls ZSBkb2VzIG5vdCBwZXJtaXQNCj5lbnJvbGxtZW50IG9uIHRoZQ0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1c2VyIHByb2ZpbGUgaGFuZGxlLiBFaXRoZXIgdGhlIHVzZXIgcHJv ZmlsZSBjYW5ub3QgZW5yb2xsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9u IGFueSB1c2VyIHByb2ZpbGUgb3IgY2Fubm90IGVucm9sbCBvbiBhIHVzZXIgcHJvZmlsZQ0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuIHRoZSBjdXJyZW50IHVz ZXIgcHJvZmlsZS4NCj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgVGhpcyBjcmVk ZW50aWFsIHByb3ZpZGVyIGRvZXMgbm90IHN1cHBvcnQNCj5lbnJvbGxtZW50IGluDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcmUtT1MuDQo+LSAgQHJldHZhbCBFRklf REVWSUNFX0VSUk9SICAgICAgIFRoZSBuZXcgY3JlZGVudGlhbCBjb3VsZCBub3QgYmUgY3JlYXRl ZA0KPmJlY2F1c2Ugb2YgYSBkZXZpY2UNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXJyb3IuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFVzZXIgZG9lcyBu b3QgcmVmZXIgdG8gYSB2YWxpZCB1c2VyDQo+cHJvZmlsZSBoYW5kbGUuDQo+LQ0KPi0qKi8NCj4t RUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbEVucm9sbCAoDQo+LSAgSU4gQ09OU1Qg IEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpUaGlzLA0KPi0gIElOICAgICAg ICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyDQo+LSAgKQ0KPi17DQo+ LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICBJbmRleDsNCj4tICBVU0JfSU5GTyAgICAgICAgICAgICAgICAgIFVzYkluZm87 DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAqVXNlckluZm87DQo+LSAgRUZJX0lOUFVU X0tFWSAgICAgICAgICAgICBLZXk7DQo+LSAgVUlOVDggICAgICAgICAgICAgICAgICAgICAqVXNl cklkOw0KPi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgKlF1ZXN0aW9uU3RyOw0KPi0gIENI QVIxNiAgICAgICAgICAgICAgICAgICAgKlByb21wdFN0cjsNCj4tDQo+LSAgaWYgKChUaGlzID09 IE5VTEwpIHx8IChVc2VyID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBHZXQgVXNlciBJZGVudGlmaWVyDQo+ LSAgLy8NCj4tICBVc2VySW5mbyA9IE5VTEw7DQo+LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlU eXBlICgNCj4tICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAgICAgICAgICBFRklfVVNFUl9JTkZP X0lERU5USUZJRVJfUkVDT1JELA0KPi0gICAgICAgICAgICAgJlVzZXJJbmZvDQo+LSAgICAgICAg ICAgICApOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICBDb3B5TWVtIChVc2JJbmZvLlVzZXJJ ZCwgKFVJTlQ4ICopIChVc2VySW5mbyArIDEpLCBzaXplb2YNCj4oRUZJX1VTRVJfSU5GT19JREVO VElGSUVSKSk7DQo+LSAgRnJlZVBvb2wgKFVzZXJJbmZvKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBH ZXQgVG9rZW4gYW5kIFVzZXIgSUQgdG8gVXNiSW5mby4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IEdl dFRva2VuIChVc2JJbmZvLlRva2VuKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ LSAgICBRdWVzdGlvblN0ciA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPihTVFJfUkVB RF9VU0JfVE9LRU5fRVJST1IpKTsNCj4tICAgIFByb21wdFN0ciAgID0gR2V0U3RyaW5nQnlJZCAo U1RSSU5HX1RPS0VOIChTVFJfSU5TRVJUX1VTQl9UT0tFTikpOw0KPi0gICAgQ3JlYXRlUG9wVXAg KA0KPi0gICAgICBFRklfTElHSFRHUkFZIHwgRUZJX0JBQ0tHUk9VTkRfQkxVRSwNCj4tICAgICAg JktleSwNCj4tICAgICAgUXVlc3Rpb25TdHIsDQo+LSAgICAgIEwiIiwNCj4tICAgICAgUHJvbXB0 U3RyLA0KPi0gICAgICBOVUxMDQo+LSAgICAgICk7DQo+LSAgICBGcmVlUG9vbCAoUXVlc3Rpb25T dHIpOw0KPi0gICAgRnJlZVBvb2wgKFByb21wdFN0cik7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0K Pi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayB3aGV0aGVyIFVzZXIgaXMgZXZlciBlbnJv bGxlZCBpbiB0aGUgcHJvdmlkZXIuDQo+LSAgLy8NCj4tICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBtVXNiVGFibGUtPkNvdW50OyBJbmRleCsrKSB7DQo+LSAgICBVc2VySWQgPSAoVUlOVDggKikg Jm1Vc2JUYWJsZS0+VXNlckluZm9bSW5kZXhdLlVzZXJJZDsNCj4tICAgIGlmIChDb21wYXJlTWVt IChVc2VySWQsIChVSU5UOCAqKSAmVXNiSW5mby5Vc2VySWQsIHNpemVvZg0KPihFRklfVVNFUl9J TkZPX0lERU5USUZJRVIpKSA9PSAwKSB7DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIFVzZXIgYWxy ZWFkeSBleGlzdHMsIHVwZGF0ZSB0aGUgcGFzc3dvcmQuDQo+LSAgICAgIC8vDQo+LSAgICAgIGJy ZWFrOw0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBFbnJvbGwgdGhlIFVzZXIg dG8gdGhlIHByb3ZpZGVyLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gTW9kaWZ5VGFibGUgKEluZGV4 LCAmVXNiSW5mbyk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJu IFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4t DQo+LS8qKg0KPi0gIFJldHVybnMgdGhlIHVzZXIgaW50ZXJmYWNlIGluZm9ybWF0aW9uIHVzZWQg ZHVyaW5nIHVzZXIgaWRlbnRpZmljYXRpb24uDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJu cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9ybSB1c2VkIHdoZW4gaW50ZXJhY3RpbmcNCj53aXRo IHRoZQ0KPi0gIHVzZXIgZHVyaW5nIHVzZXIgaWRlbnRpZmljYXRpb24uIFRoZSBmb3JtIGlzIHRo ZSBmaXJzdCBlbmFibGVkIGZvcm0gaW4gdGhlDQo+Zm9ybS1zZXQNCj4tICBjbGFzcyBFRklfSElJ X1VTRVJfQ1JFREVOVElBTF9GT1JNU0VUX0dVSUQgaW5zdGFsbGVkIG9uIHRoZSBISUkNCj5oYW5k bGUgSGlpSGFuZGxlLiBJZg0KPi0gIHRoZSB1c2VyIGNyZWRlbnRpYWwgcHJvdmlkZXIgZG9lcyBu b3QgcmVxdWlyZSBhIGZvcm0gdG8gaWRlbnRpZnkgdGhlIHVzZXIsDQo+dGhlbiB0aGlzDQo+LSAg ZnVuY3Rpb24gc2hvdWxkIHJldHVybiBFRklfTk9UX0ZPVU5ELg0KPi0NCj4tICBAcGFyYW1baW5d ICBUaGlzICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NS RURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtvdXRdIEhpaSAgICAgICAgT24gcmV0dXJu LCBob2xkcyB0aGUgSElJIGRhdGFiYXNlIGhhbmRsZS4NCj4tICBAcGFyYW1bb3V0XSBGb3JtU2V0 SWQgIE9uIHJldHVybiwgaG9sZHMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGZvcm0gc2V0DQo+d2hp Y2ggY29udGFpbnMNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb3JtIHVzZWQgZHVy aW5nIHVzZXIgaWRlbnRpZmljYXRpb24uDQo+LSAgQHBhcmFtW291dF0gRm9ybUlkICAgICBPbiBy ZXR1cm4sIGhvbGRzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBmb3JtIHVzZWQNCj5kdXJpbmcgdXNl cg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmljYXRpb24uDQo+LQ0KPi0gIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBGb3JtIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4N Cj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgRm9ybSBub3QgcmV0dXJuZWQuDQo+ LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEhpaSBpcyBOVUxMIG9yIEZvcm1TZXRJ ZCBpcyBOVUxMIG9yDQo+Rm9ybUlkIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0K Pi1FRklBUEkNCj4tQ3JlZGVudGlhbEZvcm0gKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVE RU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4tICBPVVQgICAgICAgRUZJX0hJSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgICAgKkhpaSwNCj4tICBPVVQgICAgICAgRUZJX0dVSUQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKkZvcm1TZXRJZCwNCj4tICBPVVQgICAgICAgRUZJX0ZP Uk1fSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkZvcm1JZA0KPi0gICkNCj4tew0KPi0gIGlm ICgoVGhpcyA9PSBOVUxMKSB8fCAoSGlpID09IE5VTEwpIHx8DQo+LSAgICAgIChGb3JtU2V0SWQg PT0gTlVMTCkgfHwgKEZvcm1JZCA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LX0NCj4tDQo+ LQ0KPi0vKioNCj4tICBSZXR1cm5zIGJpdG1hcCB1c2VkIHRvIGRlc2NyaWJlIHRoZSBjcmVkZW50 aWFsIHByb3ZpZGVyIHR5cGUuDQo+LQ0KPi0gIFRoaXMgb3B0aW9uYWwgZnVuY3Rpb24gcmV0dXJu cyBhIGJpdG1hcCB3aGljaCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlDQo+bnVtYmVyDQo+ LSAgb2YgcGl4ZWxzIHNwZWNpZmllZCBieSBXaWR0aCBhbmQgSGVpZ2h0LiBJZiBubyBzdWNoIGJp dG1hcCBleGlzdHMsIHRoZW4NCj5FRklfTk9UX0ZPVU5EDQo+LSAgaXMgcmV0dXJuZWQuDQo+LQ0K Pi0gIEBwYXJhbVtpbl0gICAgIFRoaXMgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhl DQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luLCBvdXRdIFdp ZHRoICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBkZXNpcmVkIGJpdG1hcCB3aWR0aC4gSWYNCj5O VUxMIHRoZW4gbm8NCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBpbmZvcm1hdGlv biB3aWxsIGJlIHJldHVybmVkLiBPbiBleGl0LCBwb2ludHMgdG8gdGhlDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICB3aWR0aCBvZiB0aGUgYml0bWFwIHJldHVybmVkLg0KPi0gIEBwYXJhbVtp biwgb3V0XSBIZWlnaHQgT24gZW50cnksIHBvaW50cyB0byB0aGUgZGVzaXJlZCBiaXRtYXAgaGVp Z2h0LiBJZg0KPk5VTEwgdGhlbiBubw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFw IGluZm9ybWF0aW9uIHdpbGwgYmUgcmV0dXJuZWQuIE9uIGV4aXQsIHBvaW50cyB0byB0aGUNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCBvZiB0aGUgYml0bWFwIHJldHVybmVkLg0K Pi0gIEBwYXJhbVtvdXRdICAgIEhpaSAgICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJIGRhdGFi YXNlIGhhbmRsZS4NCj4tICBAcGFyYW1bb3V0XSAgICBJbWFnZSAgIE9uIHJldHVybiwgaG9sZHMg dGhlIEhJSSBpbWFnZSBpZGVudGlmaWVyLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgSW1hZ2UgaWRlbnRpZmllciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJl dHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIEltYWdlIGlkZW50aWZpZXIgbm90IHJldHVybmVk Lg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBIaWkgaXMgTlVMTCBvciBJbWFn ZSBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRp YWxUaWxlICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAg ICAgKlRoaXMsDQo+LSAgSU4gT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpXaWR0aCwNCj4tICBJTiBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKkhlaWdodCwNCj4tICBPVVQgICAgICAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAg ICAgICAgICAgKkhpaSwNCj4tICBPVVQgICAgICAgRUZJX0lNQUdFX0lEICAgICAgICAgICAgICAg ICAgICAgICAgKkltYWdlDQo+LSAgKQ0KPi17DQo+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChI aWkgPT0gTlVMTCkgfHwgKEltYWdlID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tfQ0KPi0N Cj4tDQo+LS8qKg0KPi0gIFJldHVybnMgc3RyaW5nIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGNyZWRl bnRpYWwgcHJvdmlkZXIgdHlwZS4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3Ry aW5nIHdoaWNoIGRlc2NyaWJlcyB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4gSWYgbm8NCj4tICBz dWNoIHN0cmluZyBleGlzdHMsIHRoZW4gRUZJX05PVF9GT1VORCBpcyByZXR1cm5lZC4NCj4tDQo+ LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUN Cj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1bb3V0XSBIaWkgICAg ICAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFzZSBoYW5kbGUuDQo+LSAgQHBhcmFt W291dF0gU3RyaW5nICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgc3RyaW5nIGlkZW50aWZp ZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBTdHJpbmcgaWRlbnRp ZmllciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAg ICAgICAgIFN0cmluZyBpZGVudGlmaWVyIG5vdCByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgU3RyaW5nIGlzIE5VTEwuDQo+LQ0KPi0q Ki8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbFRpdGxlICgNCj4tICBJTiBD T05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgT1VU ICAgICAgIEVGSV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgICAgICpIaWksDQo+LSAgT1VU ICAgICAgIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgICAgICAgICpTdHJpbmcNCj4tICAp DQo+LXsNCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKEhpaSA9PSBOVUxMKSB8fCAoU3RyaW5n ID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0N Cj4tICAvLw0KPi0gIC8vIFNldCBIaWkgaGFuZGxlIGFuZCBTdHJpbmcgSUQuDQo+LSAgLy8NCj4t ICAqSGlpICAgID0gbUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlOw0KPi0gICpTdHJpbmcgPSBTVFJJ TkdfVE9LRU4gKFNUUl9DUkVERU5USUFMX1RJVExFKTsNCj4tDQo+LSAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgUmV0dXJuIHRoZSB1c2VyIGlkZW50aWZpZXIg YXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50bHkgYXV0aGVudGljYXRlZCB1c2VyLg0KPi0NCj4t ICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVzZXIgaWRlbnRpZmllciBvZiB0aGUgdXNlciBh dXRoZW50aWNhdGVkIGJ5IHRoaXMNCj5jcmVkZW50aWFsDQo+LSAgcHJvdmlkZXIuIFRoaXMgZnVu Y3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFsLXJlbGF0ZWQgaW5mb3JtYXRpb24g aGFzDQo+YmVlbg0KPi0gIHN1Ym1pdHRlZCBvbiBhIGZvcm0gT1IgYWZ0ZXIgYSBjYWxsIHRvIERl ZmF1bHQoKSBoYXMgcmV0dXJuZWQgdGhhdCB0aGlzDQo+Y3JlZGVudGlhbCBpcw0KPi0gIHJlYWR5 IHRvIGxvZyBvbi4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgUG9pbnRzIHRv IHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+ LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUgb2Yg dGhlIHVzZXIgcHJvZmlsZSBjdXJyZW50bHkNCj5iZWluZw0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnNpZGVyZWQgYnkgdGhlIHVzZXIgaWRlbnRpdHkgbWFuYWdlci4gSWYgTlVM TCwgdGhlbiBubyB1c2VyDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZSBp cyBjdXJyZW50bHkgdW5kZXIgY29uc2lkZXJhdGlvbi4NCj4tICBAcGFyYW1bb3V0XSBJZGVudGlm aWVyICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgdXNlciBpZGVudGlmaWVyLg0KPi0NCj4t ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciBpZGVudGlmaWVyIHJldHVybmVk IHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAgICAgICAgTm8gdXNl ciBpZGVudGlmaWVyIGNhbiBiZSByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVO SUVEICAgICAgVGhlIHVzZXIgaGFzIGJlZW4gbG9ja2VkIG91dCBvZiB0aGlzIHVzZXINCj5jcmVk ZW50aWFsLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGlzIGlzIE5VTEws IG9yIElkZW50aWZpZXIgaXMgTlVMTC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAg ICAgVXNlciBpcyBub3QgTlVMTCwgYW5kIHRoZSBzcGVjaWZpZWQgdXNlcg0KPmhhbmRsZSBjYW4n dCBiZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBpbiB1c2VyIHBy b2ZpbGUgZGF0YWJhc2UuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3Jl ZGVudGlhbFVzZXIgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NP TCAgICAgICAqVGhpcywNCj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAg ICAgICAgICAgVXNlciwNCj4tICBPVVQgICAgICAgRUZJX1VTRVJfSU5GT19JREVOVElGSUVSICAg ICAgICAgICAgKklkZW50aWZpZXINCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgIFN0YXR1 czsNCj4tICBVSU5UTiAgICAgICAgIEluZGV4Ow0KPi0gIEVGSV9VU0VSX0lORk8gKlVzZXJJbmZv Ow0KPi0gIFVJTlQ4ICAgICAgICAgKlVzZXJJZDsNCj4tICBVSU5UOCAgICAgICAgICpOZXdVc2Vy SWQ7DQo+LSAgVUlOVDggICAgICAgICAqVXNlclRva2VuOw0KPi0gIFVJTlQ4ICAgICAgICAgUmVh ZFRva2VuW0hBU0hFRF9DUkVERU5USUFMX0xFTl07DQo+LSAgRUZJX0lOUFVUX0tFWSBLZXk7DQo+ LSAgQ0hBUjE2ICAgICAgICAqUXVlc3Rpb25TdHI7DQo+LSAgQ0hBUjE2ICAgICAgICAqUHJvbXB0 U3RyOw0KPi0NCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKElkZW50aWZpZXIgPT0gTlVMTCkp IHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICBp ZiAoVXNlciA9PSBOVUxMKSB7DQo+LSAgICAvLw0KPi0gICAgLy8gVmVyaWZ5IHRoZSBhdXRvIGxv Z29uIHVzZXIsIGdldCB1c2VyIGlkIGJ5IG1hdGNoZWQgdG9rZW4uDQo+LSAgICAvLw0KPi0gICAg aWYgKG1Vc2JUYWJsZS0+Q291bnQgPT0gMCkgew0KPi0gICAgICByZXR1cm4gRUZJX05PVF9SRUFE WTsNCj4tICAgIH0NCj4tDQo+LSAgICAvLw0KPi0gICAgLy8gTm8gdXNlciBzZWxlY3RlZCwgZ2V0 IHRva2VuIGZpcnN0IGFuZCB2ZXJpZnkgdGhlIHVzZXIgZXhpc3RlZCBpbiB1c2VyDQo+ZGF0YWJh c2UuDQo+LSAgICAvLw0KPi0gICAgU3RhdHVzID0gR2V0VG9rZW4gKFJlYWRUb2tlbik7DQo+LSAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgIHJldHVybiBFRklfTk9UX1JFQURZ Ow0KPi0gICAgfQ0KPi0NCj4tICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Vc2JUYWJsZS0+ Q291bnQ7IEluZGV4KyspIHsNCj4tICAgICAgLy8NCj4tICAgICAgLy8gZmluZCB0aGUgc3BlY2lm aWVkIGNyZWRlbnRpYWwgaW4gdGhlIFVzYiBjcmVkZW50aWFsIGRhdGFiYXNlLg0KPi0gICAgICAv Lw0KPi0gICAgICBVc2VyVG9rZW4gPSBtVXNiVGFibGUtPlVzZXJJbmZvW0luZGV4XS5Ub2tlbjsN Cj4tICAgICAgaWYgKENvbXBhcmVNZW0gKFVzZXJUb2tlbiwgUmVhZFRva2VuLCBIQVNIRURfQ1JF REVOVElBTF9MRU4pID09DQo+MCkgew0KPi0gICAgICAgIFVzZXJJZCAgPSAoVUlOVDggKikgJm1V c2JUYWJsZS0+VXNlckluZm9bSW5kZXhdLlVzZXJJZDsNCj4tICAgICAgICBDb3B5TWVtIChJZGVu dGlmaWVyLCBVc2VySWQsIHNpemVvZiAoRUZJX1VTRVJfSU5GT19JREVOVElGSUVSKSk7DQo+LSAg ICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgICB9DQo+LSAgICB9DQo+LQ0KPi0gICAg cmV0dXJuIEVGSV9OT1RfUkVBRFk7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIFVzZXIgaXMg bm90IE5VTEwgaGVyZS4gUmVhZCBhIHRva2VuLCBhbmQgY2hlY2sgd2hldGhlciB0aGUgdG9rZW4N Cj5tYXRjaGVzIHdpdGgNCj4tICAvLyB0aGUgc2VsZWN0ZWQgdXNlcidzIFRva2VuLiBJZiBub3Qs IHRyeSB0byBmaW5kIGEgdG9rZW4gaW4gdG9rZW4gREIgdG8NCj5tYXRjaGVzDQo+LSAgLy8gd2l0 aCByZWFkIHRva2VuLg0KPi0gIC8vDQo+LQ0KPi0gIFN0YXR1cyA9IEdldFRva2VuIChSZWFkVG9r ZW4pOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIFF1ZXN0aW9uU3RyID0g R2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+KFNUUl9SRUFEX1VTQl9UT0tFTl9FUlJPUikp Ow0KPi0gICAgUHJvbXB0U3RyICAgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4gKFNUUl9J TlNFUlRfVVNCX1RPS0VOKSk7DQo+LSAgICBDcmVhdGVQb3BVcCAoDQo+LSAgICAgIEVGSV9MSUdI VEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPi0gICAgICAmS2V5LA0KPi0gICAgICBRdWVz dGlvblN0ciwNCj4tICAgICAgTCIiLA0KPi0gICAgICBQcm9tcHRTdHIsDQo+LSAgICAgIE5VTEwN Cj4tICAgICAgKTsNCj4tICAgIEZyZWVQb29sIChRdWVzdGlvblN0cik7DQo+LSAgICBGcmVlUG9v bCAoUHJvbXB0U3RyKTsNCj4tICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi0gIH0NCj4tDQo+ LSAgLy8NCj4tICAvLyBHZXQgdGhlIHNlbGVjdGVkIHVzZXIncyBpZGVudGlmaWVyLg0KPi0gIC8v DQo+LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlIChVc2VyLCBFRklfVVNFUl9JTkZPX0lE RU5USUZJRVJfUkVDT1JELA0KPiZVc2VySW5mbyk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPi0gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0g IC8vIENoZWNrIHRoZSBzZWxlY3RlZCB1c2VyJ3MgVG9rZW4gd2l0aCB0aGUgcmVhZCB0b2tlbi4N Cj4tICAvLw0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Vc2JUYWJsZS0+Q291bnQ7IElu ZGV4KyspIHsNCj4tICAgIFVzZXJJZCAgICA9IChVSU5UOCAqKSAmbVVzYlRhYmxlLT5Vc2VySW5m b1tJbmRleF0uVXNlcklkOw0KPi0gICAgTmV3VXNlcklkID0gKFVJTlQ4ICopIChVc2VySW5mbyAr IDEpOw0KPi0gICAgaWYgKENvbXBhcmVNZW0gKFVzZXJJZCwgTmV3VXNlcklkLCBzaXplb2YgKEVG SV9VU0VSX0lORk9fSURFTlRJRklFUikpDQo+PT0gMCkgew0KPi0gICAgICAvLw0KPi0gICAgICAv LyBUaGUgdXNlcidzIElEIGlzIGZvdW5kIGluIHRoZSBVc2JUYWJsZS4NCj4tICAgICAgLy8NCj4t ICAgICAgVXNlclRva2VuID0gbVVzYlRhYmxlLT5Vc2VySW5mb1tJbmRleF0uVG9rZW47DQo+LSAg ICAgIGlmIChDb21wYXJlTWVtIChVc2VyVG9rZW4sIFJlYWRUb2tlbiwgSEFTSEVEX0NSRURFTlRJ QUxfTEVOKSA9PQ0KPjApIHsNCj4tICAgICAgICAvLw0KPi0gICAgICAgIC8vIFRoZSByZWFkIHRv a2VuIG1hdGNoZXMgd2l0aCB0aGUgb25lIGluIFVzYlRhYmxlLg0KPi0gICAgICAgIC8vDQo+LSAg ICAgICAgQ29weU1lbSAoSWRlbnRpZmllciwgVXNlcklkLCBzaXplb2YgKEVGSV9VU0VSX0lORk9f SURFTlRJRklFUikpOw0KPi0gICAgICAgIEZyZWVQb29sIChVc2VySW5mbyk7DQo+LSAgICAgICAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgICB9DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICBG cmVlUG9vbCAoVXNlckluZm8pOw0KPi0NCj4tICByZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4tfQ0K 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+LQ0KPi0gICpBdXRvTG9nb24gPSBFRklfQ1JFREVOVElB TF9MT0dPTl9GTEFHX0RFRkFVTFQgfA0KPkVGSV9DUkVERU5USUFMX0xPR09OX0ZMQUdfQVVUTzsN Cj4tDQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgSW5k aWNhdGUgdGhhdCB1c2VyIGludGVyZmFjZSBpbnRlcmFjdGlvbiBoYXMgZW5kZWQgZm9yIHRoZSBz cGVjaWZpZWQNCj5jcmVkZW50aWFsLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3 aGVuIGEgY3JlZGVudGlhbCBwcm92aWRlciBpcyBkZXNlbGVjdGVkIGJ5IHRoZSB1c2VyLg0KPi0N Cj4tICBAcGFyYW1baW5dIFRoaXMgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRo ZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgIENyZWRlbnRpYWwgcHJvdmlkZXIgc3VjY2Vzc2Z1bGx5IGRlc2VsZWN0ZWQuDQo+ LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbERlc2VsZWN0ICgN Cj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMN Cj4tICApDQo+LXsNCj4tICBpZiAoVGhpcyA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4t DQo+LQ0KPi0vKioNCj4tICBSZXR1cm4gdGhlIGRlZmF1bHQgbG9nb24gYmVoYXZpb3IgZm9yIHRo aXMgdXNlciBjcmVkZW50aWFsLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIHJlcG9ydHMgdGhlIGRl ZmF1bHQgbG9naW4gYmVoYXZpb3IgcmVnYXJkaW5nIHRoaXMgY3JlZGVudGlhbA0KPnByb3ZpZGVy Lg0KPi0NCj4tICBAcGFyYW1baW5dICBUaGlzICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNl IG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtvdXRd IEF1dG9Mb2dvbiAgT24gcmV0dXJuLCBob2xkcyB3aGV0aGVyIHRoZSBjcmVkZW50aWFsIHByb3Zp ZGVyDQo+c2hvdWxkIGJlIHVzZWQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1 bHQgdG8gYXV0b21hdGljYWxseSBsb2cgb24gdGhlIHVzZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICBEZWZhdWx0IGluZm9ybWF0aW9uIHN1Y2Nlc3NmdWxseSByZXR1 cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgQXV0b0xvZ29uIGlzIE5V TEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbERlZmF1 bHQgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAq VGhpcywNCj4tICBPVVQgICAgICAgRUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR1MgICAgICAgICAg KkF1dG9Mb2dvbg0KPi0gICkNCj4tew0KPi0gIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoQXV0b0xv Z29uID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0g IH0NCj4tDQo+LSAgKkF1dG9Mb2dvbiA9IEVGSV9DUkVERU5USUFMX0xPR09OX0ZMQUdfREVGQVVM VCB8DQo+RUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR19BVVRPOw0KPi0gIHJldHVybiBFRklfU1VD Q0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFJldHVybiBpbmZvcm1hdGlvbiBhdHRhY2hl ZCB0byB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1 cm5zIHVzZXIgaW5mb3JtYXRpb24uDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAg ICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwy X1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbl0gICAgICBVc2VySW5mbyAgICAgIEhhbmRsZSBvZiB0 aGUgdXNlciBpbmZvcm1hdGlvbiBkYXRhIHJlY29yZC4NCj4tICBAcGFyYW1bb3V0XSAgICAgSW5m byAgICAgICAgICBPbiBlbnRyeSwgcG9pbnRzIHRvIGEgYnVmZmVyIG9mIGF0IGxlYXN0ICpJbmZv U2l6ZQ0KPmJ5dGVzLiBPbg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQs IGhvbGRzIHRoZSB1c2VyIGluZm9ybWF0aW9uLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGhvbGQgdGhlIGluZm9ybWF0aW9u LCB0aGVuIEVGSV9CVUZGRVJfVE9PX1NNQUxMIGlzDQo+cmV0dXJuZWQNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhbmQgSW5mb1NpemUgaXMgdXBkYXRlZCB0byBjb250YWluIHRo ZSBudW1iZXIgb2YgYnl0ZXMNCj5hY3R1YWxseQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlcXVpcmVkLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBJbmZvU2l6ZSAgICAgIE9uIGVu dHJ5LCBwb2ludHMgdG8gdGhlIHNpemUgb2YgSW5mby4gT24gcmV0dXJuLA0KPnBvaW50cyB0byB0 aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHRoZSB1c2VyIGlu Zm9ybWF0aW9uLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBJbmZvcm1h dGlvbiByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19T TUFMTCAgVGhlIHNpemUgc3BlY2lmaWVkIGJ5IEluZm9TaXplIGlzIHRvbyBzbWFsbA0KPnRvIGhv bGQgYWxsIG9mIHRoZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgaW5m b3JtYXRpb24uIFRoZSBzaXplIHJlcXVpcmVkIGlzIHJldHVybmVkIGluICpJbmZvU2l6ZS4NCj4t ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbmZvIGlzIE5VTEwgb3IgSW5mb1NpemUg aXMgTlVMTC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgc3BlY2lmaWVk IFVzZXJJbmZvIGRvZXMgbm90IHJlZmVyIHRvIGENCj52YWxpZCB1c2VyIGluZm8gaGFuZGxlLg0K Pi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxHZXRJbmZvICgN Cj4tICBJTiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMs DQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgIFVzZXJJ bmZvLA0KPi0gIE9VVCAgICAgICBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAq SW5mbywNCj4tICBJTiBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KkluZm9TaXplDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICpDcmVk ZW50aWFsSW5mbzsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+LQ0KPi0g IGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoSW5mb1NpemUgPT0gTlVMTCkgfHwgKEluZm8gPT0gTlVM TCkpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4t ICBpZiAoKFVzZXJJbmZvID09IE5VTEwpIHx8IChtVXNiSW5mb0hhbmRsZSA9PSBOVUxMKSkgew0K Pi0gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEZp bmQgaW5mb3JtYXRpb24gaGFuZGxlIGluIGNyZWRlbnRpYWwgaW5mbyB0YWJsZS4NCj4tICAvLw0K Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Vc2JJbmZvSGFuZGxlLT5Db3VudDsgSW5kZXgr Kykgew0KPi0gICAgQ3JlZGVudGlhbEluZm8gPSBtVXNiSW5mb0hhbmRsZS0+SW5mb1tJbmRleF07 DQo+LSAgICBpZiAoVXNlckluZm8gPT0gKEVGSV9VU0VSX0lORk9fSEFORExFKUNyZWRlbnRpYWxJ bmZvKSB7DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIFRoZSBoYW5kbGUgaXMgZm91bmQsIGNvcHkg dGhlIHVzZXIgaW5mby4NCj4tICAgICAgLy8NCj4tICAgICAgaWYgKENyZWRlbnRpYWxJbmZvLT5J bmZvU2l6ZSA+ICpJbmZvU2l6ZSkgew0KPi0gICAgICAgICpJbmZvU2l6ZSA9IENyZWRlbnRpYWxJ bmZvLT5JbmZvU2l6ZTsNCj4tICAgICAgICByZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+ LSAgICAgIH0NCj4tDQo+LSAgICAgIENvcHlNZW0gKEluZm8sIENyZWRlbnRpYWxJbmZvLCBDcmVk ZW50aWFsSW5mby0+SW5mb1NpemUpOw0KPi0gICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAg ICB9DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tfQ0KPi0NCj4tDQo+ LS8qKg0KPi0gIEVudW1lcmF0ZSBhbGwgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb25zIG9uIHRoZSBj cmVkZW50aWFsIHByb3ZpZGVyLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5l eHQgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQuIFRvIHJldHJpZXZlIHRoZSBmaXJzdA0KPnVzZXIN Cj4tICBpbmZvcm1hdGlvbiByZWNvcmQgaGFuZGxlLCBwb2ludCBVc2VySW5mbyBhdCBhIE5VTEwu IEVhY2ggc3Vic2VxdWVudCBjYWxsDQo+d2lsbCByZXRyaWV2ZQ0KPi0gIGFub3RoZXIgdXNlciBp bmZvcm1hdGlvbiByZWNvcmQgaGFuZGxlIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlLCBhdCB3aGlj aA0KPnBvaW50IFVzZXJJbmZvDQo+LSAgd2lsbCBwb2ludCB0byBOVUxMLg0KPi0NCj4tICBAcGFy YW1baW5dICAgICAgVGhpcyAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJ X1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luLCBvdXRdIFVzZXJJbmZv IE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHByZXZpb3VzIHVzZXIgaW5mb3JtYXRpb24NCj5oYW5k bGUgb3IgTlVMTA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBlbnVtZXJh dGlvbi4gT24gZXhpdCwgcG9pbnRzIHRvIHRoZSBuZXh0IHVzZXINCj5pbmZvcm1hdGlvbg0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgb3IgTlVMTCBpZiB0aGVyZSBpcyBubyBt b3JlIHVzZXIgaW5mb3JtYXRpb24uDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICBVc2VyIGluZm9ybWF0aW9uIHJldHVybmVkLg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VO RCAgICAgICAgICBObyBtb3JlIHVzZXIgaW5mb3JtYXRpb24gZm91bmQuDQo+LSAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgIFVzZXJJbmZvIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJ X1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbEdldE5leHRJbmZvICgNCj4tICBJTiBDT05T VCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gT1VU ICAgIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgICpVc2VySW5mbw0KPi0gICkN Cj4tew0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAqSW5mbzsNCj4tICBDSEFSMTYgICAg ICAgICAgICAgICAgICAgKlByb3ZOYW1lU3RyOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAg ICBJbmZvTGVuOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4tICBVSU5U TiAgICAgICAgICAgICAgICAgICAgUHJvdlN0ckxlbjsNCj4tDQo+LSAgaWYgKChUaGlzID09IE5V TEwpIHx8IChVc2VySW5mbyA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIGlmIChtVXNiSW5mb0hhbmRsZSA9PSBOVUxMKSB7DQo+ LSAgICAvLw0KPi0gICAgLy8gSW5pdGlsaXplZCB1c2VyIGluZm8gdGFibGUuIFRoZXJlIGFyZSA0 IHVzZXIgaW5mbyByZWNvcmRzIGluIHRoZSB0YWJsZS4NCj4tICAgIC8vDQo+LSAgICBJbmZvTGVu ICA9IHNpemVvZiAoVVNCX0NSRURFTlRJQUxfSU5GTykgKyAoNCAtIDEpICogc2l6ZW9mDQo+KEVG SV9VU0VSX0lORk8gKik7DQo+LSAgICBtVXNiSW5mb0hhbmRsZSA9IEFsbG9jYXRlWmVyb1Bvb2wg KEluZm9MZW4pOw0KPi0gICAgaWYgKG1Vc2JJbmZvSGFuZGxlID09IE5VTEwpIHsNCj4tICAgICAg KlVzZXJJbmZvID0gTlVMTDsNCj4tICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgICB9 DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIFRoZSBmaXJzdCBpbmZvcm1hdGlvbiwgQ3JlZGVudGlh bCBQcm92aWRlciBpbmZvLg0KPi0gICAgLy8NCj4tICAgIEluZm9MZW4gPSBzaXplb2YgKEVGSV9V U0VSX0lORk8pICsgc2l6ZW9mIChFRklfR1VJRCk7DQo+LSAgICBJbmZvICAgID0gQWxsb2NhdGVa ZXJvUG9vbCAoSW5mb0xlbik7DQo+LSAgICBBU1NFUlQgKEluZm8gIT0gTlVMTCk7DQo+LQ0KPi0g ICAgSW5mby0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZPX0NSRURFTlRJQUxfUFJPVklERVJf UkVDT1JEOw0KPi0gICAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlOVDMyKSBJbmZvTGVuOw0KPi0g ICAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1BST1RFQ1RFRDsNCj4tICAgIENv cHlHdWlkICgmSW5mby0+Q3JlZGVudGlhbCwgJmdVc2JDcmVkZW50aWFsUHJvdmlkZXJHdWlkKTsN Cj4tICAgIENvcHlHdWlkICgoRUZJX0dVSUQgKikoSW5mbyArIDEpLCAmZ1VzYkNyZWRlbnRpYWxQ cm92aWRlckd1aWQpOw0KPi0NCj4tICAgIG1Vc2JJbmZvSGFuZGxlLT5JbmZvWzBdID0gSW5mbzsN Cj4tICAgIG1Vc2JJbmZvSGFuZGxlLT5Db3VudCsrOw0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBU aGUgc2Vjb25kIGluZm9ybWF0aW9uLCBDcmVkZW50aWFsIFByb3ZpZGVyIG5hbWUgaW5mby4NCj4t ICAgIC8vDQo+LSAgICBQcm92TmFtZVN0ciA9IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTiAo U1RSX1BST1ZJREVSX05BTUUpKTsNCj4tICAgIFByb3ZTdHJMZW4gID0gU3RyU2l6ZSAoUHJvdk5h bWVTdHIpOw0KPi0gICAgSW5mb0xlbiAgICAgPSBzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgUHJv dlN0ckxlbjsNCj4tICAgIEluZm8gICAgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoSW5mb0xlbik7 DQo+LSAgICBBU1NFUlQgKEluZm8gIT0gTlVMTCk7DQo+LQ0KPi0gICAgSW5mby0+SW5mb1R5cGUg ICAgPQ0KPkVGSV9VU0VSX0lORk9fQ1JFREVOVElBTF9QUk9WSURFUl9OQU1FX1JFQ09SRDsNCj4t ICAgIEluZm8tPkluZm9TaXplICAgID0gKFVJTlQzMikgSW5mb0xlbjsNCj4tICAgIEluZm8tPklu Zm9BdHRyaWJzID0gRUZJX1VTRVJfSU5GT19QUk9URUNURUQ7DQo+LSAgICBDb3B5R3VpZCAoJklu Zm8tPkNyZWRlbnRpYWwsICZnVXNiQ3JlZGVudGlhbFByb3ZpZGVyR3VpZCk7DQo+LSAgICBDb3B5 TWVtICgoVUlOVDgqKShJbmZvICsgMSksIFByb3ZOYW1lU3RyLCBQcm92U3RyTGVuKTsNCj4tICAg IEZyZWVQb29sIChQcm92TmFtZVN0cik7DQo+LQ0KPi0gICAgbVVzYkluZm9IYW5kbGUtPkluZm9b MV0gPSBJbmZvOw0KPi0gICAgbVVzYkluZm9IYW5kbGUtPkNvdW50Kys7DQo+LQ0KPi0gICAgLy8N Cj4tICAgIC8vIFRoZSB0aGlyZCBpbmZvcm1hdGlvbiwgQ3JlZGVudGlhbCBQcm92aWRlciB0eXBl IGluZm8uDQo+LSAgICAvLw0KPi0gICAgSW5mb0xlbiA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykg KyBzaXplb2YgKEVGSV9HVUlEKTsNCj4tICAgIEluZm8gICAgPSBBbGxvY2F0ZVplcm9Qb29sIChJ bmZvTGVuKTsNCj4tICAgIEFTU0VSVCAoSW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAgICBJbmZvLT5J bmZvVHlwZSAgICA9IEVGSV9VU0VSX0lORk9fQ1JFREVOVElBTF9UWVBFX1JFQ09SRDsNCj4tICAg IEluZm8tPkluZm9TaXplICAgID0gKFVJTlQzMikgSW5mb0xlbjsNCj4tICAgIEluZm8tPkluZm9B dHRyaWJzID0gRUZJX1VTRVJfSU5GT19QUk9URUNURUQ7DQo+LSAgICBDb3B5R3VpZCAoJkluZm8t PkNyZWRlbnRpYWwsICZnVXNiQ3JlZGVudGlhbFByb3ZpZGVyR3VpZCk7DQo+LSAgICBDb3B5R3Vp ZCAoKEVGSV9HVUlEICopKEluZm8gKyAxKSwNCj4mZ0VmaVVzZXJDcmVkZW50aWFsQ2xhc3NTZWN1 cmVDYXJkR3VpZCk7DQo+LQ0KPi0gICAgbVVzYkluZm9IYW5kbGUtPkluZm9bMl0gPSBJbmZvOw0K Pi0gICAgbVVzYkluZm9IYW5kbGUtPkNvdW50Kys7DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIFRo ZSBmb3VydGggaW5mb3JtYXRpb24sIENyZWRlbnRpYWwgUHJvdmlkZXIgdHlwZSBuYW1lIGluZm8u DQo+LSAgICAvLw0KPi0gICAgUHJvdk5hbWVTdHIgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9L RU4NCj4oU1RSX1BST1ZJREVSX1RZUEVfTkFNRSkpOw0KPi0gICAgUHJvdlN0ckxlbiAgPSBTdHJT aXplIChQcm92TmFtZVN0cik7DQo+LSAgICBJbmZvTGVuICAgICA9IHNpemVvZiAoRUZJX1VTRVJf SU5GTykgKyBQcm92U3RyTGVuOw0KPi0gICAgSW5mbyAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29s IChJbmZvTGVuKTsNCj4tICAgIEFTU0VSVCAoSW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAgICBJbmZv LT5JbmZvVHlwZSAgICA9DQo+RUZJX1VTRVJfSU5GT19DUkVERU5USUFMX1BST1ZJREVSX05BTUVf UkVDT1JEOw0KPi0gICAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlOVDMyKSBJbmZvTGVuOw0KPi0g ICAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1BST1RFQ1RFRDsNCj4tICAgIENv cHlHdWlkICgmSW5mby0+Q3JlZGVudGlhbCwgJmdVc2JDcmVkZW50aWFsUHJvdmlkZXJHdWlkKTsN Cj4tICAgIENvcHlNZW0gKChVSU5UOCopKEluZm8gKyAxKSwgUHJvdk5hbWVTdHIsIFByb3ZTdHJM ZW4pOw0KPi0gICAgRnJlZVBvb2wgKFByb3ZOYW1lU3RyKTsNCj4tDQo+LSAgICBtVXNiSW5mb0hh bmRsZS0+SW5mb1szXSA9IEluZm87DQo+LSAgICBtVXNiSW5mb0hhbmRsZS0+Q291bnQrKzsNCj4t ICB9DQo+LQ0KPi0gIGlmICgqVXNlckluZm8gPT0gTlVMTCkgew0KPi0gICAgLy8NCj4tICAgIC8v IFJldHVybiB0aGUgZmlyc3QgaW5mbyBoYW5kbGUuDQo+LSAgICAvLw0KPi0gICAgKlVzZXJJbmZv ID0gKEVGSV9VU0VSX0lORk9fSEFORExFKSBtVXNiSW5mb0hhbmRsZS0+SW5mb1swXTsNCj4tICAg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRmluZCBpbmZv cm1hdGlvbiBoYW5kbGUgaW4gY3JlZGVudGlhbCBpbmZvIHRhYmxlLg0KPi0gIC8vDQo+LSAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgbVVzYkluZm9IYW5kbGUtPkNvdW50OyBJbmRleCsrKSB7DQo+ LSAgICBJbmZvID0gbVVzYkluZm9IYW5kbGUtPkluZm9bSW5kZXhdOw0KPi0gICAgaWYgKCpVc2Vy SW5mbyA9PSAoRUZJX1VTRVJfSU5GT19IQU5ETEUpSW5mbykgew0KPi0gICAgICAvLw0KPi0gICAg ICAvLyBUaGUgaGFuZGxlIGlzIGZvdW5kLCBnZXQgdGhlIG5leHQgb25lLg0KPi0gICAgICAvLw0K Pi0gICAgICBpZiAoSW5kZXggPT0gbVVzYkluZm9IYW5kbGUtPkNvdW50IC0gMSkgew0KPi0gICAg ICAgIC8vDQo+LSAgICAgICAgLy8gQWxyZWFkeSBsYXN0IG9uZS4NCj4tICAgICAgICAvLw0KPi0g ICAgICAgICpVc2VySW5mbyA9IE5VTEw7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7 DQo+LSAgICAgIH0NCj4tICAgICAgSW5kZXgrKzsNCj4tICAgICAgKlVzZXJJbmZvID0gKEVGSV9V U0VSX0lORk9fSEFORExFKW1Vc2JJbmZvSGFuZGxlLT5JbmZvW0luZGV4XTsNCj4tICAgICAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAgKlVzZXJJbmZvID0gTlVM TDsNCj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERl bGV0ZSBhIHVzZXIgb24gdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0NCj4tICBUaGlzIGZ1 bmN0aW9uIGRlbGV0ZXMgYSB1c2VyIG9uIHRoaXMgY3JlZGVudGlhbCBwcm92aWRlci4NCj4tDQo+ LSAgQHBhcmFtW2luXSAgICAgVGhpcyAgICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNl IG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbl0g ICAgIFVzZXIgICAgICAgICAgICBUaGUgdXNlciBwcm9maWxlIGhhbmRsZSB0byBkZWxldGUuDQo+ LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1 Y2Nlc3NmdWxseSBkZWxldGVkLg0KPi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBD dXJyZW50IHVzZXIgcHJvZmlsZSBkb2VzIG5vdCBwZXJtaXQNCj5kZWxldGlvbiBvbiB0aGUgdXNl ciBwcm9maWxlIGhhbmRsZS4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWl0 aGVyIHRoZSB1c2VyIHByb2ZpbGUgY2Fubm90IGRlbGV0ZSBvbiBhbnkgdXNlciBwcm9maWxlIG9y DQo+Y2Fubm90IGRlbGV0ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBh IHVzZXIgcHJvZmlsZSBvdGhlciB0aGFuIHRoZSBjdXJyZW50IHVzZXIgcHJvZmlsZS4NCj4tICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgVGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyIGRv ZXMgbm90IHN1cHBvcnQNCj5kZWxldGlvbiBpbiB0aGUgcHJlLU9TLg0KPi0gIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiAgICAgICBUaGUgbmV3IGNyZWRlbnRpYWwgY291bGQgbm90IGJlIGRlbGV0 ZWQNCj5iZWNhdXNlIG9mIGEgZGV2aWNlIGVycm9yLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICBVc2VyIGRvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgdXNlcg0KPnByb2ZpbGUg aGFuZGxlLg0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbERlbGV0 ZSAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpU aGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBV c2VyDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAqVXNlckluZm87DQo+LSAgVUlOVDggICAgICAg ICAgICAgICAgICAgICAqVXNlcklkOw0KPi0gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgKk5l d1VzZXJJZDsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPi0NCj4tICBp ZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFVzZXIgPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCBVc2VyIElk ZW50aWZpZXIuDQo+LSAgLy8NCj4tICBVc2VySW5mbyA9IE5VTEw7DQo+LSAgU3RhdHVzID0gRmlu ZFVzZXJJbmZvQnlUeXBlICgNCj4tICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAgICAgICAgICBF RklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JELA0KPi0gICAgICAgICAgICAgJlVzZXJJbmZv DQo+LSAgICAgICAgICAgICApOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8v IEZpbmQgdGhlIHVzZXIgYnkgdXNlciBpZGVudGlmaWVyIGluIG1Qd2RUYWJsZS4NCj4tICAvLw0K Pi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Vc2JUYWJsZS0+Q291bnQ7IEluZGV4KyspIHsN Cj4tICAgIFVzZXJJZCAgICA9IChVSU5UOCAqKSAmbVVzYlRhYmxlLT5Vc2VySW5mb1tJbmRleF0u VXNlcklkOw0KPi0gICAgTmV3VXNlcklkID0gKFVJTlQ4ICopIChVc2VySW5mbyArIDEpOw0KPi0g ICAgaWYgKENvbXBhcmVNZW0gKFVzZXJJZCwgTmV3VXNlcklkLCBzaXplb2YgKEVGSV9VU0VSX0lO Rk9fSURFTlRJRklFUikpDQo+PT0gMCkgew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBGb3VuZCB0 aGUgdXNlciwgZGVsZXRlIGl0Lg0KPi0gICAgICAvLw0KPi0gICAgICBNb2RpZnlUYWJsZSAoSW5k ZXgsIE5VTEwpOw0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIEZyZWVQ b29sIChVc2VySW5mbyk7DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4t LyoqDQo+LSAgTWFpbiBlbnRyeSBmb3IgdGhpcyBkcml2ZXIuDQo+LQ0KPi0gIEBwYXJhbSBJbWFn ZUhhbmRsZSAgICAgSW1hZ2UgaGFuZGxlIHRoaXMgZHJpdmVyLg0KPi0gIEBwYXJhbSBTeXN0ZW1U YWJsZSAgICAgUG9pbnRlciB0byBTeXN0ZW1UYWJsZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VD RVNTICAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuDQo+LQ0K Pi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNiUHJvdmlkZXJJbml0ICgNCj4tICBJ TiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4tICBJTiBFRklfU1lTVEVNX1RBQkxF ICAqU3lzdGVtVGFibGUNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gSXQgaXMgTk9UIHJvYnVzdCBlbm91Z2ggdG8gYmUgaW5jbHVkZWQgaW4g cHJvZHVjdGlvbi4NCj4tICAvLw0KPi0gICNlcnJvciAiVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBq dXN0IGEgc2FtcGxlLCBwbGVhc2UgY29tbWVudCB0aGlzIGxpbmUgaWYgeW91DQo+cmVhbGx5IHdh bnQgdG8gdXNlIHRoaXMgZHJpdmVyLiINCj4tDQo+LSAgLy8NCj4tICAvLyBJbml0IGNyZWRlbnRp YWwgdGFibGUuDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBJbml0Q3JlZGVudGlhbFRhYmxlICgpOw0K Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIHJldHVybiBTdGF0dXM7DQo+LSAg fQ0KPi0NCj4tICAvLw0KPi0gIC8vIEluaXQgRm9ybSBCcm93c2VyDQo+LSAgLy8NCj4tICBTdGF0 dXMgPSBJbml0Rm9ybUJyb3dzZXIgKCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K Pi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5zdGFsbCBw cm90b2NvbCBpbnRlcmZhY2VzIGZvciB0aGUgVXNiIENyZWRlbnRpYWwgUHJvdmlkZXIuDQo+LSAg Ly8NCj4tICBTdGF0dXMgPSBnQlMtPkluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+LSAgICAg ICAgICAgICAgICAgICZtQ2FsbGJhY2tJbmZvLT5Ecml2ZXJIYW5kbGUsDQo+LSAgICAgICAgICAg ICAgICAgICZnRWZpVXNlckNyZWRlbnRpYWwyUHJvdG9jb2xHdWlkLA0KPi0gICAgICAgICAgICAg ICAgICBFRklfTkFUSVZFX0lOVEVSRkFDRSwNCj4tICAgICAgICAgICAgICAgICAgJmdVc2JDcmVk ZW50aWFsUHJvdmlkZXJEcml2ZXINCj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICByZXR1cm4g U3RhdHVzOw0KPi19DQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0 aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5vdmlkZXIuaA0K PmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4 ZS9Vc2JDcmVkZW50aWFsUHINCj5vdmlkZXIuaA0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0K PmluZGV4IDYzZjY1NzYwNDUuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFByDQo+ b3ZpZGVyLmgNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMzYxICswLDAgQEANCj4tLyoqIEBmaWxl DQo+LSAgVXNiIENyZWRlbnRpYWwgUHJvdmlkZXIgZHJpdmVyIGhlYWRlciBmaWxlLg0KPi0NCj4t Q29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJp YWxzDQo+LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LXdoaWNoIGFjY29tcGFuaWVzIHRo aXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj5m b3VuZCBhdA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhw DQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0Ug T04gQU4gIkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFU SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0NCj4tKiov DQo+LQ0KPi0jaWZuZGVmIF9VU0JfQ1JFREVOVElBTF9QUk9WSURFUl9IXw0KPi0jZGVmaW5lIF9V U0JfQ1JFREVOVElBTF9QUk9WSURFUl9IXw0KPi0NCj4tI2luY2x1ZGUgPFVlZmkuaD4NCj4tDQo+ LSNpbmNsdWRlIDxHdWlkL0dsb2JhbFZhcmlhYmxlLmg+DQo+LSNpbmNsdWRlIDxHdWlkL0ZpbGVJ bmZvLmg+DQo+LSNpbmNsdWRlIDxHdWlkL1NlY3VyaXR5UGtnVG9rZW5TcGFjZS5oPg0KPi0jaW5j bHVkZSA8R3VpZC9Vc2JDcmVkZW50aWFsUHJvdmlkZXJIaWkuaD4NCj4tDQo+LSNpbmNsdWRlIDxQ cm90b2NvbC9TaW1wbGVGaWxlU3lzdGVtLmg+DQo+LSNpbmNsdWRlIDxQcm90b2NvbC9CbG9ja0lv Lmg+DQo+LSNpbmNsdWRlIDxQcm90b2NvbC9Vc2VyQ3JlZGVudGlhbDIuaD4NCj4tI2luY2x1ZGUg PFByb3RvY29sL1VzZXJNYW5hZ2VyLmg+DQo+LQ0KPi0jaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVu dGltZVNlcnZpY2VzVGFibGVMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2 aWNlc1RhYmxlTGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIu aD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPi0jaW5jbHVkZSA8TGli cmFyeS9EZXZpY2VQYXRoTGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VDcnlwdExpYi5o Pg0KPi0jaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9V ZWZpTGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L1ByaW50TGliLmg+DQo+LSNpbmNsdWRlIDxM aWJyYXJ5L0hpaUxpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCj4tDQo+LWV4 dGVybiBVSU5UOCAgICAgIFVzYkNyZWRlbnRpYWxQcm92aWRlclN0cmluZ3NbXTsNCj4tDQo+LSNk ZWZpbmUgVVNCX1RBQkxFX0lOQyAgICAgICAgICAxNg0KPi0jZGVmaW5lIEhBU0hFRF9DUkVERU5U SUFMX0xFTiAgMjANCj4tDQo+LS8vDQo+LS8vIFNhdmUgdGhlIGVucm9sbCB1c2VyIGNyZWRlbnRp YWwgSW5mb3JtYXRpb24uDQo+LS8vDQo+LXR5cGVkZWYgc3RydWN0IHsNCj4tICBFRklfVVNFUl9J TkZPX0lERU5USUZJRVIgIFVzZXJJZDsNCj4tICBVSU5UOCAgICAgICAgICAgICAgICAgICAgIFRv a2VuW0hBU0hFRF9DUkVERU5USUFMX0xFTl07DQo+LX0gVVNCX0lORk87DQo+LQ0KPi0vLw0KPi0v LyBVU0IgQ3JlZGVudGlhbCBUYWJsZS4NCj4tLy8NCj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPi0gIFVJ TlROICAgICBDb3VudDsNCj4tICBVSU5UTiAgICAgTWF4Q291bnQ7DQo+LSAgVVNCX0lORk8gIFVz ZXJJbmZvWzFdOw0KPi19IENSRURFTlRJQUxfVEFCTEU7DQo+LQ0KPi0vLw0KPi0vLyBUaGUgdXNl ciBpbmZvcm1hdGlvbiBvbiB0aGUgVVNCIHByb3ZpZGVyLg0KPi0vLw0KPi10eXBlZGVmIHN0cnVj dCB7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQ7DQo+LSAgRUZJX1VT RVJfSU5GTyAgICAgICAgICAgICAgICAgKkluZm9bMV07DQo+LX0gVVNCX0NSRURFTlRJQUxfSU5G TzsNCj4tDQo+LSNkZWZpbmUgVVNCX1BST1ZJREVSX1NJR05BVFVSRSAgU0lHTkFUVVJFXzMyICgn VScsICdTJywgJ0InLCAnUCcpDQo+LQ0KPi10eXBlZGVmIHN0cnVjdCB7DQo+LSAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+LSAgRUZJX0hBTkRMRSAgICAgICAg ICAgICAgICAgICAgICBEcml2ZXJIYW5kbGU7DQo+LSAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAg ICAgICAgICBIaWlIYW5kbGU7DQo+LX0gVVNCX1BST1ZJREVSX0NBTExCQUNLX0lORk87DQo+LQ0K Pi0vKioNCj4tICBFbnJvbGwgYSB1c2VyIG9uIGEgY3JlZGVudGlhbCBwcm92aWRlci4NCj4tDQo+ LSAgVGhpcyBmdW5jdGlvbiBlbnJvbGxzIGFuZCBkZWxldGVzIGEgdXNlciBwcm9maWxlIHVzaW5n IHRoaXMgY3JlZGVudGlhbCBwcm92aWRlci4NCj4tICBJZiBhIHVzZXIgcHJvZmlsZSBpcyBzdWNj ZXNzZnVsbHkgZW5yb2xsZWQsIGl0IGNhbGxzIHRoZSBVc2VyIE1hbmFnZXIgUHJvdG9jb2wNCj4t ICBmdW5jdGlvbiBOb3RpZnkoKSB0byBub3RpZnkgdGhlIHVzZXIgbWFuYWdlciBkcml2ZXIgdGhh dCBjcmVkZW50aWFsDQo+aW5mb3JtYXRpb24NCj4tICBoYXMgY2hhbmdlZC4gSWYgYW4gZW5yb2xs ZWQgdXNlciBkb2VzIGV4aXN0LCBkZWxldGUgdGhlIHVzZXIgb24gdGhlDQo+Y3JlZGVudGlhbA0K Pi0gIHByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgICAgICAgUG9p 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 ICAgICAgICAgVXNlcg0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBSZXR1cm5zIHRoZSB1c2VyIGlu dGVyZmFjZSBpbmZvcm1hdGlvbiB1c2VkIGR1cmluZyB1c2VyIGlkZW50aWZpY2F0aW9uLg0KPi0N Cj4tICBUaGlzIGZ1bmN0aW9uIGVucm9sbHMgYSB1c2VyIG9uIHRoaXMgY3JlZGVudGlhbCBwcm92 aWRlci4gSWYgdGhlIHVzZXIgZXhpc3RzIG9uDQo+LSAgdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVy LCB1cGRhdGUgdGhlIHVzZXIgaW5mb3JtYXRpb24gb24gdGhpcyBjcmVkZW50aWFsDQo+cHJvdmlk ZXI7DQo+LSAgb3RoZXJ3aXNlIGRlbGV0ZSB0aGUgdXNlciBpbmZvcm1hdGlvbiBvbiBjcmVkZW50 aWFsIHByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1baW5dICBUaGlzICAgICAgIFBvaW50cyB0byB0 aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0g IEBwYXJhbVtvdXRdIEhpaSAgICAgICAgT24gcmV0dXJuLCBob2xkcyB0aGUgSElJIGRhdGFiYXNl IGhhbmRsZS4NCj4tICBAcGFyYW1bb3V0XSBGb3JtU2V0SWQgIE9uIHJldHVybiwgaG9sZHMgdGhl IGlkZW50aWZpZXIgb2YgdGhlIGZvcm0gc2V0DQo+d2hpY2ggY29udGFpbnMNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgIHRoZSBmb3JtIHVzZWQgZHVyaW5nIHVzZXIgaWRlbnRpZmljYXRpb24u DQo+LSAgQHBhcmFtW291dF0gRm9ybUlkICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBpZGVudGlm aWVyIG9mIHRoZSBmb3JtIHVzZWQNCj5kdXJpbmcgdXNlcg0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgaWRlbnRpZmljYXRpb24uDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICBGb3JtIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9V TkQgICAgICAgICAgRm9ybSBub3QgcmV0dXJuZWQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgIEhpaSBpcyBOVUxMIG9yIEZvcm1TZXRJZCBpcyBOVUxMIG9yDQo+Rm9ybUlkIGlz IE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbEZv cm0gKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAq VGhpcywNCj4tICBPVVQgICAgICAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAg KkhpaSwNCj4tICBPVVQgICAgICAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAg KkZvcm1TZXRJZCwNCj4tICBPVVQgICAgICAgRUZJX0ZPUk1fSUQgICAgICAgICAgICAgICAgICAg ICAgICAgKkZvcm1JZA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBSZXR1cm5zIGJpdG1hcCB1c2Vk IHRvIGRlc2NyaWJlIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIHR5cGUuDQo+LQ0KPi0gIFRoaXMg b3B0aW9uYWwgZnVuY3Rpb24gcmV0dXJucyBhIGJpdG1hcCB3aGljaCBpcyBsZXNzIHRoYW4gb3Ig ZXF1YWwgdG8gdGhlDQo+bnVtYmVyDQo+LSAgb2YgcGl4ZWxzIHNwZWNpZmllZCBieSBXaWR0aCBh bmQgSGVpZ2h0LiBJZiBubyBzdWNoIGJpdG1hcCBleGlzdHMsIHRoZW4NCj5FRklfTk9UX0ZPVU5E DQo+LSAgaXMgcmV0dXJuZWQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICAgIFRoaXMgICAgUG9pbnRz IHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wu DQo+LSAgQHBhcmFtW2luLCBvdXRdIFdpZHRoICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBkZXNp cmVkIGJpdG1hcCB3aWR0aC4gSWYNCj5OVUxMIHRoZW4gbm8NCj4tICAgICAgICAgICAgICAgICAg ICAgICAgIGJpdG1hcCBpbmZvcm1hdGlvbiB3aWxsIGJlIHJldHVybmVkLiBPbiBleGl0LCBwb2lu dHMgdG8gdGhlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCBvZiB0aGUgYml0bWFw IHJldHVybmVkLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBIZWlnaHQgT24gZW50cnksIHBvaW50cyB0 byB0aGUgZGVzaXJlZCBiaXRtYXAgaGVpZ2h0LiBJZg0KPk5VTEwgdGhlbiBubw0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgYml0bWFwIGluZm9ybWF0aW9uIHdpbGwgYmUgcmV0dXJuZWQuIE9u IGV4aXQsIHBvaW50cyB0byB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCBv ZiB0aGUgYml0bWFwIHJldHVybmVkLg0KPi0gIEBwYXJhbVtvdXRdICAgIEhpaSAgICAgT24gcmV0 dXJuLCBob2xkcyB0aGUgSElJIGRhdGFiYXNlIGhhbmRsZS4NCj4tICBAcGFyYW1bb3V0XSAgICBJ bWFnZSAgIE9uIHJldHVybiwgaG9sZHMgdGhlIEhJSSBpbWFnZSBpZGVudGlmaWVyLg0KPi0NCj4t ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgSW1hZ2UgaWRlbnRpZmllciByZXR1cm5l ZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIEltYWdl IGlkZW50aWZpZXIgbm90IHJldHVybmVkLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSICBIaWkgaXMgTlVMTCBvciBJbWFnZSBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFU VVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRpYWxUaWxlICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJf Q1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgSU4gT1VUICAgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpXaWR0aCwNCj4tICBJTiBPVVQgICAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkhlaWdodCwNCj4tICBPVVQgICAgICAgRUZJ X0hJSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgKkhpaSwNCj4tICBPVVQgICAgICAgRUZJ X0lNQUdFX0lEICAgICAgICAgICAgICAgICAgICAgICAgKkltYWdlDQo+LSAgKTsNCj4tDQo+LS8q Kg0KPi0gIFJldHVybnMgc3RyaW5nIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGNyZWRlbnRpYWwgcHJv dmlkZXIgdHlwZS4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIHdoaWNo IGRlc2NyaWJlcyB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4gSWYgbm8NCj4tICBzdWNoIHN0cmlu ZyBleGlzdHMsIHRoZW4gRUZJX05PVF9GT1VORCBpcyByZXR1cm5lZC4NCj4tDQo+LSAgQHBhcmFt W2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNF Ul9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1bb3V0XSBIaWkgICAgICAgIE9uIHJl dHVybiwgaG9sZHMgdGhlIEhJSSBkYXRhYmFzZSBoYW5kbGUuDQo+LSAgQHBhcmFtW291dF0gU3Ry aW5nICAgICBPbiByZXR1cm4sIGhvbGRzIHRoZSBISUkgc3RyaW5nIGlkZW50aWZpZXIuDQo+LQ0K Pi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBTdHJpbmcgaWRlbnRpZmllciByZXR1 cm5lZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIFN0 cmluZyBpZGVudGlmaWVyIG5vdCByZXR1cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgSGlpIGlzIE5VTEwgb3IgU3RyaW5nIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJ X1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbFRpdGxlICgNCj4tICBJTiBDT05TVCAgRUZJ X1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAgT1VUICAgICAgIEVG SV9ISUlfSEFORExFICAgICAgICAgICAgICAgICAgICAgICpIaWksDQo+LSAgT1VUICAgICAgIEVG SV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgICAgICAgICpTdHJpbmcNCj4tICApOw0KPi0NCj4t LyoqDQo+LSAgUmV0dXJuIHRoZSB1c2VyIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBj dXJyZW50bHkgYXV0aGVudGljYXRlZCB1c2VyLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIHJldHVy bnMgdGhlIHVzZXIgaWRlbnRpZmllciBvZiB0aGUgdXNlciBhdXRoZW50aWNhdGVkIGJ5IHRoaXMN Cj5jcmVkZW50aWFsDQo+LSAgcHJvdmlkZXIuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVy IHRoZSBjcmVkZW50aWFsLXJlbGF0ZWQgaW5mb3JtYXRpb24gaGFzDQo+YmVlbg0KPi0gIHN1Ym1p dHRlZCBvbiBhIGZvcm0gT1IgYWZ0ZXIgYSBjYWxsIHRvIERlZmF1bHQoKSBoYXMgcmV0dXJuZWQg dGhhdCB0aGlzDQo+Y3JlZGVudGlhbCBpcw0KPi0gIHJlYWR5IHRvIGxvZyBvbi4NCj4tDQo+LSAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhl DQo+RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luXSAgVXNlciAg ICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUgb2YgdGhlIHVzZXIgcHJvZmlsZSBjdXJy ZW50bHkNCj5iZWluZw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyZWQg YnkgdGhlIHVzZXIgaWRlbnRpdHkgbWFuYWdlci4gSWYgTlVMTCwgdGhlbiBubyB1c2VyDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZSBpcyBjdXJyZW50bHkgdW5kZXIgY29u c2lkZXJhdGlvbi4NCj4tICBAcGFyYW1bb3V0XSBJZGVudGlmaWVyICAgICBPbiByZXR1cm4sIHBv aW50cyB0byB0aGUgdXNlciBpZGVudGlmaWVyLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICBVc2VyIGlkZW50aWZpZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2 YWwgRUZJX05PVF9SRUFEWSAgICAgIE5vIHVzZXIgaWRlbnRpZmllciBjYW4gYmUgcmV0dXJuZWQu DQo+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgVGhlIHVzZXIgaGFzIGJlZW4gbG9ja2Vk IG91dCBvZiB0aGlzIHVzZXINCj5jcmVkZW50aWFsLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICBUaGlzIGlzIE5VTEwsIG9yIElkZW50aWZpZXIgaXMgTlVMTC4NCj4tICBAcmV0 dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVXNlciBpcyBub3QgTlVMTCwgYW5kIHRoZSBzcGVj aWZpZWQgdXNlcg0KPmhhbmRsZSBjYW4ndCBiZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3VuZCBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+LQ0KPi0qKi8NCj4tRUZJ X1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbFVzZXIgKA0KPi0gIElOIENPTlNUICBFRklf VVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4tICBJTiAgICAgICAgRUZJ X1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgVXNlciwNCj4tICBPVVQgICAgICAgRUZJ X1VTRVJfSU5GT19JREVOVElGSUVSICAgICAgICAgICAgKklkZW50aWZpZXINCj4tICApOw0KPi0N Cj4tLyoqDQo+LSAgSW5kaWNhdGUgdGhhdCB1c2VyIGludGVyZmFjZSBpbnRlcmFjdGlvbiBoYXMg YmVndW4gZm9yIHRoZSBzcGVjaWZpZWQNCj5jcmVkZW50aWFsLg0KPi0NCj4tICBUaGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCB3aGVuIGEgY3JlZGVudGlhbCBwcm92aWRlciBpcyBzZWxlY3RlZCBieSB0 aGUgdXNlci4gSWYNCj4tICBBdXRvTG9nb24gcmV0dXJucyBGQUxTRSwgdGhlbiB0aGUgdXNlciBp bnRlcmZhY2Ugd2lsbCBiZSBjb25zdHJ1Y3RlZCBieSB0aGUNCj5Vc2VyDQo+LSAgSWRlbnRpdHkg TWFuYWdlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICBQb2ludHMgdG8gdGhpcyBp bnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTC4NCj4tICBAcGFy YW1bb3V0XSBBdXRvTG9nb24gIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSBjcmVkZW50aWFsIHBy b3ZpZGVyJ3MNCj5jYXBhYmlsaXRpZXMNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVy IHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIGhhcyBiZWVuIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLg0K Pi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgQ3JlZGVudGlhbCBwcm92aWRl ciBzdWNjZXNzZnVsbHkgc2VsZWN0ZWQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgIEF1dG9Mb2dvbiBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJ DQo+LUNyZWRlbnRpYWxTZWxlY3QgKA0KPi0gIElOICBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElB TDJfUFJPVE9DT0wgICAqVGhpcywNCj4tICBPVVQgICAgICAgIEVGSV9DUkVERU5USUFMX0xPR09O X0ZMQUdTICAgICAgKkF1dG9Mb2dvbg0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBJbmRpY2F0ZSB0 aGF0IHVzZXIgaW50ZXJmYWNlIGludGVyYWN0aW9uIGhhcyBlbmRlZCBmb3IgdGhlIHNwZWNpZmll ZA0KPmNyZWRlbnRpYWwuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBj cmVkZW50aWFsIHByb3ZpZGVyIGlzIGRlc2VsZWN0ZWQgYnkgdGhlIHVzZXIuDQo+LQ0KPi0gIEBw YXJhbVtpbl0gVGhpcyAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJ X1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgQ3JlZGVudGlhbCBwcm92aWRlciBzdWNjZXNzZnVsbHkgZGVzZWxlY3RlZC4NCj4tDQo+LSoq Lw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsRGVzZWxlY3QgKA0KPi0gIElO IENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAqVGhpcw0KPi0gICk7 DQo+LQ0KPi0vKioNCj4tICBSZXR1cm4gdGhlIGRlZmF1bHQgbG9nb24gYmVoYXZpb3IgZm9yIHRo aXMgdXNlciBjcmVkZW50aWFsLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIHJlcG9ydHMgdGhlIGRl ZmF1bHQgbG9naW4gYmVoYXZpb3IgcmVnYXJkaW5nIHRoaXMgY3JlZGVudGlhbA0KPnByb3ZpZGVy Lg0KPi0NCj4tICBAcGFyYW1baW5dICBUaGlzICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNl IG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtvdXRd IEF1dG9Mb2dvbiAgT24gcmV0dXJuLCBob2xkcyB3aGV0aGVyIHRoZSBjcmVkZW50aWFsIHByb3Zp ZGVyDQo+c2hvdWxkIGJlIHVzZWQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1 bHQgdG8gYXV0b21hdGljYWxseSBsb2cgb24gdGhlIHVzZXIuDQo+LQ0KPi0gIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICBEZWZhdWx0IGluZm9ybWF0aW9uIHN1Y2Nlc3NmdWxseSByZXR1 cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgQXV0b0xvZ29uIGlzIE5V TEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tQ3JlZGVudGlhbERlZmF1 bHQgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgICAgICAq VGhpcywNCj4tICBPVVQgICAgICAgRUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR1MgICAgICAgICAg KkF1dG9Mb2dvbg0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBSZXR1cm4gaW5mb3JtYXRpb24gYXR0 YWNoZWQgdG8gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24g cmV0dXJucyB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tICBAcGFyYW1baW5dICAgICAgVGhpcyAg ICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9DUkVERU5U SUFMMl9QUk9UT0NPTC4NCj4tICBAcGFyYW1baW5dICAgICAgVXNlckluZm8gICAgICBIYW5kbGUg b2YgdGhlIHVzZXIgaW5mb3JtYXRpb24gZGF0YSByZWNvcmQuDQo+LSAgQHBhcmFtW291dF0gICAg IEluZm8gICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byBhIGJ1ZmZlciBvZiBhdCBsZWFzdCAq SW5mb1NpemUNCj5ieXRlcy4gT24NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl eGl0LCBob2xkcyB0aGUgdXNlciBpbmZvcm1hdGlvbi4gSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21h bGwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBob2xkIHRoZSBpbmZvcm1h dGlvbiwgdGhlbiBFRklfQlVGRkVSX1RPT19TTUFMTCBpcw0KPnJldHVybmVkDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYW5kIEluZm9TaXplIGlzIHVwZGF0ZWQgdG8gY29udGFp biB0aGUgbnVtYmVyIG9mIGJ5dGVzDQo+YWN0dWFsbHkNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXF1aXJlZC4NCj4tICBAcGFyYW1baW4sIG91dF0gSW5mb1NpemUgICAgICBP biBlbnRyeSwgcG9pbnRzIHRvIHRoZSBzaXplIG9mIEluZm8uIE9uIHJldHVybiwNCj5wb2ludHMg dG8gdGhlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBvZiB0aGUgdXNl ciBpbmZvcm1hdGlvbi4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgSW5m b3JtYXRpb24gcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgRUZJX0JVRkZFUl9U T09fU01BTEwgIFRoZSBzaXplIHNwZWNpZmllZCBieSBJbmZvU2l6ZSBpcyB0b28gc21hbGwNCj50 byBob2xkIGFsbCBvZiB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vy IGluZm9ybWF0aW9uLiBUaGUgc2l6ZSByZXF1aXJlZCBpcyByZXR1cm5lZCBpbiAqSW5mb1NpemUu DQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSW5mbyBpcyBOVUxMIG9yIEluZm9T aXplIGlzIE5VTEwuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIHNwZWNp ZmllZCBVc2VySW5mbyBkb2VzIG5vdCByZWZlciB0byBhDQo+dmFsaWQgdXNlciBpbmZvIGhhbmRs ZS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsR2V0SW5m byAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICAgICAgICpU aGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICBV c2VySW5mbywNCj4tICBPVVQgICAgICAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAg ICAgKkluZm8sDQo+LSAgSU4gT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpJbmZvU2l6ZQ0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBFbnVtZXJhdGUgYWxsIG9mIHRo ZSB1c2VyIGluZm9ybWF0aW9ucyBvbiB0aGUgY3JlZGVudGlhbCBwcm92aWRlci4NCj4tDQo+LSAg VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXh0IHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkLiBU byByZXRyaWV2ZSB0aGUgZmlyc3QNCj51c2VyDQo+LSAgaW5mb3JtYXRpb24gcmVjb3JkIGhhbmRs ZSwgcG9pbnQgVXNlckluZm8gYXQgYSBOVUxMLiBFYWNoIHN1YnNlcXVlbnQgY2FsbA0KPndpbGwg cmV0cmlldmUNCj4tICBhbm90aGVyIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIGhhbmRsZSB1bnRp bCB0aGVyZSBhcmUgbm8gbW9yZSwgYXQgd2hpY2gNCj5wb2ludCBVc2VySW5mbw0KPi0gIHdpbGwg cG9pbnQgdG8gTlVMTC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAgIFBvaW50cyB0 byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MLg0K Pi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VySW5mbyBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBwcmV2 aW91cyB1c2VyIGluZm9ybWF0aW9uDQo+aGFuZGxlIG9yIE5VTEwNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG8gc3RhcnQgZW51bWVyYXRpb24uIE9uIGV4aXQsIHBvaW50cyB0byB0aGUg bmV4dCB1c2VyDQo+aW5mb3JtYXRpb24NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFu ZGxlIG9yIE5VTEwgaWYgdGhlcmUgaXMgbm8gbW9yZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4t ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciBpbmZvcm1hdGlvbiByZXR1cm5l ZC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgTm8gbW9yZSB1c2VyIGluZm9y bWF0aW9uIGZvdW5kLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2VySW5m byBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LUNyZWRlbnRp YWxHZXROZXh0SW5mbyAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RP Q09MICAgICAgICpUaGlzLA0KPi0gIElOIE9VVCAgICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAg ICAgICAgICAgICAqVXNlckluZm8NCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgRGVsZXRlIGEgdXNl ciBvbiB0aGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gZGVs ZXRlcyBhIHVzZXIgb24gdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1b aW5dICAgICBUaGlzICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+ RUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luXSAgICAgVXNlciAg ICAgICAgICAgIFRoZSB1c2VyIHByb2ZpbGUgaGFuZGxlIHRvIGRlbGV0ZS4NCj4tDQo+LSAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFVzZXIgcHJvZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5 IGRlbGV0ZWQuDQo+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgIEN1cnJlbnQgdXNl ciBwcm9maWxlIGRvZXMgbm90IHBlcm1pdA0KPmRlbGV0aW9uIG9uIHRoZSB1c2VyIHByb2ZpbGUg aGFuZGxlLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFaXRoZXIgdGhlIHVz ZXIgcHJvZmlsZSBjYW5ub3QgZGVsZXRlIG9uIGFueSB1c2VyIHByb2ZpbGUgb3INCj5jYW5ub3Qg ZGVsZXRlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIGEgdXNlciBwcm9m aWxlIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgdXNlciBwcm9maWxlLg0KPi0gIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgICBUaGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIgZG9lcyBub3Qgc3Vw cG9ydA0KPmRlbGV0aW9uIGluIHRoZSBwcmUtT1MuDQo+LSAgQHJldHZhbCBFRklfREVWSUNFX0VS Uk9SICAgICAgIFRoZSBuZXcgY3JlZGVudGlhbCBjb3VsZCBub3QgYmUgZGVsZXRlZA0KPmJlY2F1 c2Ugb2YgYSBkZXZpY2UgZXJyb3IuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg IFVzZXIgZG9lcyBub3QgcmVmZXIgdG8gYSB2YWxpZCB1c2VyDQo+cHJvZmlsZSBoYW5kbGUuDQo+ LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1DcmVkZW50aWFsRGVsZXRlICgNCj4tICBJ TiBDT05TVCAgRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+LSAg SU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgIFVzZXINCj4tICAp Ow0KPi0NCj4tI2VuZGlmDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZp Y2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5vdmlkZXIu dW5pDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3Zp ZGVyRHhlL1VzYkNyZWRlbnRpYWxQcg0KPm92aWRlci51bmkNCj5kZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQNCj5pbmRleCA5NjFlMDlmMzYwLi4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRp YWxQcg0KPm92aWRlci51bmkNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMjMgKzAsMCBAQA0KPi0v LyAvKiogQGZpbGUNCj4tLy8gUHJvdmlkZXMgYSBVU0IgY3JlZGVudGlhbCBwcm92aWRlciBpbXBs ZW1lbnRhdGlvbg0KPi0vLw0KPi0vLyBUaGlzIG1vZHVsZSByZWFkcyBhIHRva2VuIGZyb20gYSB0 b2tlbiBmaWxlIHRoYXQgaXMgc2F2ZWQgaW4gdGhlIHJvb3QNCj4tLy8gZm9sZGVyIG9mIGEgVVNC IHN0aWNrLiBUaGUgdG9rZW4gZmlsZSBuYW1lIGNhbiBiZSBzcGVjaWZpZWQgYnkgdGhlIFBDRA0K Pi0vLyBQY2RGaXhlZFVzYkNyZWRlbnRpYWxQcm92aWRlclRva2VuRmlsZU5hbWUuDQo+LS8vDQo+ LS8vIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTQsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLjxCUj4NCj4tLy8NCj4tLy8gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21w YW55aW5nIG1hdGVyaWFscw0KPi0vLyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVu ZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi0vLyB3 aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZiB0aGUg bGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi0vLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LS8vIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVO REVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+LS8vIFdJVEhPVVQg V0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPkVYUFJF U1MgT1IgSU1QTElFRC4NCj4tLy8NCj4tLy8gKiovDQo+LQ0KPi0NCj4tI3N0cmluZyBTVFJfTU9E VUxFX0FCU1RSQUNUICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiUHJvdmlkZXMgYSBVU0IN Cj5jcmVkZW50aWFsIHByb3ZpZGVyIGltcGxlbWVudGF0aW9uIg0KPi0NCj4tI3N0cmluZyBTVFJf TU9EVUxFX0RFU0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiVGhpcyBtb2R1bGUN Cj5yZWFkcyBhIHRva2VuIGZyb20gYSB0b2tlbiBmaWxlIHRoYXQgaXMgc2F2ZWQgaW4gdGhlIHJv b3QgZm9sZGVyIG9mIGEgVVNCIHN0aWNrLg0KPlRoZSB0b2tlbiBmaWxlIG5hbWUgY2FuIGJlIHNw ZWNpZmllZCBieSB0aGUgUENEDQo+UGNkRml4ZWRVc2JDcmVkZW50aWFsUHJvdmlkZXJUb2tlbkZp bGVOYW1lLiINCj4tDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0 aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5vdmlkZXJEeGUu aW5mDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3Zp ZGVyRHhlL1VzYkNyZWRlbnRpYWxQcg0KPm92aWRlckR4ZS5pbmYNCj5kZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQNCj5pbmRleCAxZThlNDIzMzJmLi4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0 eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRl bnRpYWxQcg0KPm92aWRlckR4ZS5pbmYNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsNzAgKzAsMCBA QA0KPi0jIyBAZmlsZQ0KPi0jICBQcm92aWRlcyBhIFVTQiBjcmVkZW50aWFsIHByb3ZpZGVyIGlt cGxlbWVudGF0aW9uDQo+LSMNCj4tIyAgVGhpcyBtb2R1bGUgcmVhZHMgYSB0b2tlbiBmcm9tIGEg dG9rZW4gZmlsZSB0aGF0IGlzIHNhdmVkIGluIHRoZSByb290DQo+LSMgIGZvbGRlciBvZiBhIFVT QiBzdGljay4gVGhlIHRva2VuIGZpbGUgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIGJ5IHRoZSBQQ0QN Cj4tIyAgUGNkRml4ZWRVc2JDcmVkZW50aWFsUHJvdmlkZXJUb2tlbkZpbGVOYW1lLg0KPi0jDQo+ LSMgQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KPi0jIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBt YXRlcmlhbHMNCj4tIyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0 ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi0jIHdoaWNoIGFjY29t cGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1h eSBiZQ0KPmZvdW5kIGF0DQo+LSMgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1s aWNlbnNlLnBocA0KPi0jIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0Qg TElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+QkFTSVMsDQo+LSMgV0lUSE9VVCBXQVJSQU5USUVTIE9S IFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVE Lg0KPi0jDQo+LSMjDQo+LQ0KPi1bRGVmaW5lc10NCj4tICBJTkZfVkVSU0lPTiAgICAgICAgICAg ICAgICAgICAgPSAweDAwMDEwMDA1DQo+LSAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAg ID0gVXNiQ3JlZGVudGlhbFByb3ZpZGVyDQo+LSAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAgICAg ICAgID0gVXNiQ3JlZGVudGlhbFByb3ZpZGVyLnVuaQ0KPi0gIEZJTEVfR1VJRCAgICAgICAgICAg ICAgICAgICAgICA9IDY3MkEwQzY4LTJCRjAtNDZmOS05M0MzLUM0RTdEQzBGQTU1NQ0KPi0gIE1P RFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IFVFRklfRFJJVkVSDQo+LSAgVkVSU0lPTl9T VFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+LSAgRU5UUllfUE9JTlQgICAgICAgICAgICAg ICAgICAgID0gVXNiUHJvdmlkZXJJbml0DQo+LQ0KPi1bU291cmNlc10NCj4tICBVc2JDcmVkZW50 aWFsUHJvdmlkZXIuYw0KPi0gIFVzYkNyZWRlbnRpYWxQcm92aWRlci5oDQo+LSAgVXNiQ3JlZGVu dGlhbFByb3ZpZGVyU3RyaW5ncy51bmkNCj4tDQo+LVtQYWNrYWdlc10NCj4tICBNZGVQa2cvTWRl UGtnLmRlYw0KPi0gIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+LSAgQ3J5cHRvUGtn L0NyeXB0b1BrZy5kZWMNCj4tICBTZWN1cml0eVBrZy9TZWN1cml0eVBrZy5kZWMNCj4tDQo+LVtM aWJyYXJ5Q2xhc3Nlc10NCj4tICBVZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWINCj4tICBVZWZp Qm9vdFNlcnZpY2VzVGFibGVMaWINCj4tICBVZWZpRHJpdmVyRW50cnlQb2ludA0KPi0gIE1lbW9y eUFsbG9jYXRpb25MaWINCj4tICBCYXNlTWVtb3J5TGliDQo+LSAgRGVidWdMaWINCj4tICBIaWlM aWINCj4tICBVZWZpTGliDQo+LSAgQmFzZUNyeXB0TGliDQo+LQ0KPi1bR3VpZHNdDQo+LSAgIyMg UFJPRFVDRVMgICAgICAgICAgICAgIyMgVmFyaWFibGU6TCJVc2JDcmVkZW50aWFsIg0KPi0gICMj IENPTlNVTUVTICAgICAgICAgICAgICMjIFZhcmlhYmxlOkwiVXNiQ3JlZGVudGlhbCINCj4tICAj IyBDT05TVU1FUyAgICAgICAgICAgICAjIyBISUkNCj4tICAjIyBTT01FVElNRVNfQ09OU1VNRVMg ICAjIyBHVUlEICAgICAgICAgICAgICAgIyBUaGUgY3JlZGVudGlhbCBwcm92aWRlcg0KPmlkZW50 aWZpZXINCj4tICBnVXNiQ3JlZGVudGlhbFByb3ZpZGVyR3VpZA0KPi0NCj4tICBnRWZpRmlsZUlu Zm9HdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVT ICAgICAgICAgIyMgR1VJRA0KPi0gIGdFZmlVc2VyQ3JlZGVudGlhbENsYXNzU2VjdXJlQ2FyZEd1 aWQgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4jIyBHVUlEDQo+LQ0KPi1bUGNkXQ0K Pi0NCj5nRWZpU2VjdXJpdHlQa2dUb2tlblNwYWNlR3VpZC5QY2RGaXhlZFVzYkNyZWRlbnRpYWxQ cm92aWRlclRva2VuRmlsZU5hDQo+bWUgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+LQ0KPi1b UHJvdG9jb2xzXQ0KPi0gIGdFZmlVc2VyQ3JlZGVudGlhbDJQcm90b2NvbEd1aWQgICAgICAgICAg ICAgICAjIyBQUk9EVUNFUw0KPi0gIGdFZmlVc2VyTWFuYWdlclByb3RvY29sR3VpZCAgICAgICAg ICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4tICBnRWZpQmxvY2tJb1Byb3RvY29s R3VpZCAgICAgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+LSAgZ0Vm aVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19D T05TVU1FUw0KPi0NCj4tW1VzZXJFeHRlbnNpb25zLlRpYW5vQ29yZS4iRXh0cmFGaWxlcyJdDQo+ LSAgVXNiQ3JlZGVudGlhbFByb3ZpZGVyRXh0cmEudW5pDQo+LQ0KPmRpZmYgLS1naXQNCj5hL1Nl Y3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJEeGUvVXNi Q3JlZGVudGlhbFByDQo+b3ZpZGVyRXh0cmEudW5pDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRp ZmljYXRpb24vVXNiQ3JlZGVudGlhbFByb3ZpZGVyRHhlL1VzYkNyZWRlbnRpYWxQcg0KPm92aWRl ckV4dHJhLnVuaQ0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IGEyMDkxN2Q1Zjcu LjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JD cmVkZW50aWFsUHJvdmlkZXJEeGUvVXNiQ3JlZGVudGlhbFByDQo+b3ZpZGVyRXh0cmEudW5pDQo+ KysrIC9kZXYvbnVsbA0KPkBAIC0xLDE5ICswLDAgQEANCj4tLy8gLyoqIEBmaWxlDQo+LS8vIFVz YkNyZWRlbnRpYWxQcm92aWRlciBMb2NhbGl6ZWQgU3RyaW5ncyBhbmQgQ29udGVudA0KPi0vLw0K Pi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQo+LS8vDQo+LS8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCj4tLy8gYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4tLy8g d2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhl IGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4tLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xp Y2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0vLyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBV TkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPkJBU0lTLA0KPi0vLyBXSVRIT1VU IFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBS RVNTIE9SIElNUExJRUQuDQo+LS8vDQo+LS8vICoqLw0KPi0NCj4tI3N0cmluZyBTVFJfUFJPUEVS VElFU19NT0RVTEVfTkFNRQ0KPi0jbGFuZ3VhZ2UgZW4tVVMNCj4tIlVTQiBDcmVkZW50aWFsIFBy b3ZpZGVyIg0KPi0NCj4tDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZp Y2F0aW9uL1VzYkNyZWRlbnRpYWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5vdmlkZXJT dHJpbmdzLnVuaQ0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzYkNyZWRlbnRp YWxQcm92aWRlckR4ZS9Vc2JDcmVkZW50aWFsUHINCj5vdmlkZXJTdHJpbmdzLnVuaQ0KPmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IGYzMDZkNTBhNGUuLjAwMDAwMDAwMDANCj4tLS0N Cj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2JDcmVkZW50aWFsUHJvdmlkZXJE eGUvVXNiQ3JlZGVudGlhbFByDQo+b3ZpZGVyU3RyaW5ncy51bmkNCj4rKysgL2Rldi9udWxsDQo+ QEAgLTEsMjkgKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBTdHJpbmcgZGVmaW5pdGlvbnMgZm9y IHRoZSBVU0IgQ3JlZGVudGlhbCBQcm92aWRlci4NCj4tDQo+LUNvcHlyaWdodCAoYykgMjAwOSAt IDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4tVGhp cyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPi1hcmUgbGljZW5zZWQg YW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg QlNEDQo+TGljZW5zZQ0KPi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRo ZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4taHR0cDovL29w ZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4NCj4tDQo+LVRIRSBQUk9HUkFN IElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lT LA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBF SVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNsYW5nZGVmIGVu LVVTICJFbmdsaXNoIg0KPi0jbGFuZ2RlZiBmci1GUiAiRnJhbmNhaXMiDQo+LQ0KPi0jc3RyaW5n IFNUUl9DUkVERU5USUFMX1RJVExFICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAgIlVTQiBDcmVkZW50aWFsDQo+UHJvdmlkZXIiDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiVVNCIENyZWRlbnRp YWwgUHJvdmlkZXIgKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX05VTExfU1RSSU5HICAgICAgICAg ICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiIg0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIiINCj4t I3N0cmluZyBTVFJfUFJPVklERVJfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgICJJTlRFTCBVU0INCj5DcmVkZW50aWFsIFByb3ZpZGVyIg0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAg IklOVEVMIFVTQiBDcmVkZW50aWFsIFByb3ZpZGVyDQo+KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RS X1BST1ZJREVSX1RZUEVfTkFNRSAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAi U2VjdXJlIENhcmQNCj5DcmVkZW50aWFsIFByb3ZpZGVyIg0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlNlY3VyZSBD YXJkIENyZWRlbnRpYWwgUHJvdmlkZXINCj4oRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfUkVBRF9V U0JfVE9LRU5fRVJST1IgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJSZWFkIFVT Qg0KPlRva2VuIEZpbGUgRXJyb3IhIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlJlYWQgVVNCIFRva2VuIEZpbGUg RXJyb3IhDQo+KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0lOU0VSVF9VU0JfVE9LRU4gICAgICAg ICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiUGxlYXNlIGluc2VydA0KPlVTQiBrZXkg d2l0aCBUb2tlbiINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJQbGVhc2UgaW5zZXJ0IFVTQiBrZXkgd2l0aCBUb2tl bg0KPihGcmVuY2gpIg0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNh dGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL0xvYWREZWZlcnJlZEltYQ0KPmdlLmMNCj5iL1Nl Y3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL0xvYWRE ZWZlcnJlZEltDQo+YWdlLmMNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCAyY2Zl MTMwZGI4Li4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRp b24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Mb2FkRGVmZXJyZWRJbWENCj5nZS5jDQo+KysrIC9k ZXYvbnVsbA0KPkBAIC0xLDE0OCArMCwwIEBADQo+LS8qKiBAZmlsZQ0KPi0gIExvYWQgdGhlIGRl ZmVycmVkIGltYWdlcyBhZnRlciB1c2VyIGlzIGlkZW50aWZpZWQuDQo+LQ0KPi1Db3B5cmlnaHQg KGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJl IGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmli dXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+ LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRI RSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMg SVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFO WSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNp bmNsdWRlICJVc2VySWRlbnRpZnlNYW5hZ2VyLmgiDQo+LQ0KPi1FRklfSEFORExFICAgICAgICBt RGVmZXJyZWRJbWFnZUhhbmRsZTsNCj4tDQo+LS8qKg0KPi0gIFRoZSBmdW5jdGlvbiB3aWxsIGxv YWQgYWxsIHRoZSBkZWZlcnJlZCBpbWFnZXMgYWdhaW4uIElmIHRoZSBkZWZlcnJlZCBpbWFnZSBp cw0KPmxvYWRlZA0KPi0gIHN1Y2Nlc3NmdWxseSwgdHJ5IHRvIHN0YXJ0IGl0Lg0KPi0NCj4tICBA cGFyYW0gIEV2ZW50ICAgICAgICAgRXZlbnQgd2hvc2Ugbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlz IGJlaW5nIGludm9rZWQuDQo+LSAgQHBhcmFtICBDb250ZXh0ICAgICAgIFBvaW50ZXIgdG8gdGhl IG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRleHQNCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUVG SUFQSQ0KPi1Mb2FkRGVmZXJyZWRJbWFnZSAoDQo+LSAgSU4gRUZJX0VWRU5UICAgICAgICAgICAg ICAgICAgICAgICBFdmVudCwNCj4tICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpDb250ZXh0DQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+LSAgRUZJX0RFRkVSUkVEX0lNQUdFX0xPQURfUFJPVE9DT0wgICAqRGVm ZXJyZWRJbWFnZTsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRs ZUNvdW50Ow0KPi0gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgKkhhbmRsZUJ1 ZjsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPi0gIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVySW5kZXg7DQo+LSAgRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MICAgICAgICAgICAqSW1hZ2VEZXZpY2VQYXRoOw0KPi0gIFZPSUQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRyaXZlckltYWdlOw0KPi0gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplOw0KPi0gIEJPT0xFQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgQm9vdE9wdGlvbjsNCj4tICBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRXhpdERhdGFTaXplOw0KPi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKkV4aXREYXRhOw0KPi0NCj4tICAvLw0KPi0gIC8vIEZpbmQgYWxsIHRoZSBkZWZl cnJlZCBpbWFnZSBsb2FkIHByb3RvY29scy4NCj4tICAvLw0KPi0gIEhhbmRsZUNvdW50ID0gMDsN Cj4tICBIYW5kbGVCdWYgICA9IE5VTEw7DQo+LSAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVC dWZmZXIgKA0KPi0gICAgICAgICAgICAgICAgICBCeVByb3RvY29sLA0KPi0gICAgICAgICAgICAg ICAgICAmZ0VmaURlZmVycmVkSW1hZ2VMb2FkUHJvdG9jb2xHdWlkLA0KPi0gICAgICAgICAgICAg ICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQsDQo+LSAgICAgICAg ICAgICAgICAgICZIYW5kbGVCdWYNCj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gOw0KPi0gIH0NCj4tDQo+LSAgZm9yIChJ bmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCj4tICAgIFN0YXR1cyA9 IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPi0gICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZltJ bmRleF0sDQo+LSAgICAgICAgICAgICAgICAgICAgJmdFZmlEZWZlcnJlZEltYWdlTG9hZFByb3Rv Y29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJkRlZmVycmVkSW1hZ2UN Cj4tICAgICAgICAgICAgICAgICAgICApOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPi0gICAgICBjb250aW51ZSA7DQo+LSAgICB9DQo+LQ0KPi0gICAgRHJpdmVySW5kZXggPSAw Ow0KPi0gICAgZG8gew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBMb2FkIGFsbCB0aGUgZGVmZXJy ZWQgaW1hZ2VzIGluIHRoaXMgcHJvdG9jb2wgaW5zdGFuY2UuDQo+LSAgICAgIC8vDQo+LSAgICAg IFN0YXR1cyA9IERlZmVycmVkSW1hZ2UtPkdldEltYWdlSW5mbygNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEZWZlcnJlZEltYWdlLA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERyaXZlckluZGV4LA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZJbWFnZURldmljZVBhdGgsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZP SUQgKiopICZEcml2ZXJJbWFnZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm SW1hZ2VTaXplLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCb290T3B0aW9u DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4tICAgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICAgIGJyZWFrOw0KPi0gICAgICB9DQo+LQ0KPi0gICAg ICAvLw0KPi0gICAgICAvLyBMb2FkIGFuZCBzdGFydCB0aGUgaW1hZ2UuDQo+LSAgICAgIC8vDQo+ LSAgICAgIFN0YXR1cyA9IGdCUy0+TG9hZEltYWdlICgNCj4tICAgICAgICAgICAgICAgICAgICAg IEJvb3RPcHRpb24sDQo+LSAgICAgICAgICAgICAgICAgICAgICBtRGVmZXJyZWRJbWFnZUhhbmRs ZSwNCj4tICAgICAgICAgICAgICAgICAgICAgIEltYWdlRGV2aWNlUGF0aCwNCj4tICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICAgICAwLA0KPi0gICAgICAg ICAgICAgICAgICAgICAgJkltYWdlSGFuZGxlDQo+LSAgICAgICAgICAgICAgICAgICAgICApOw0K Pi0gICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICAgIC8vDQo+LSAgICAg ICAgLy8gQmVmb3JlIGNhbGxpbmcgdGhlIGltYWdlLCBlbmFibGUgdGhlIFdhdGNoZG9nIFRpbWVy IGZvcg0KPi0gICAgICAgIC8vIGEgNSBNaW51dGUgcGVyaW9kDQo+LSAgICAgICAgLy8NCj4tICAg ICAgICBnQlMtPlNldFdhdGNoZG9nVGltZXIgKDUgKiA2MCwgMHgwMDAwLCAweDAwLCBOVUxMKTsN Cj4tICAgICAgICBTdGF0dXMgPSBnQlMtPlN0YXJ0SW1hZ2UgKEltYWdlSGFuZGxlLCAmRXhpdERh dGFTaXplLCAmRXhpdERhdGEpOw0KPi0NCj4tICAgICAgICAvLw0KPi0gICAgICAgIC8vIENsZWFy IHRoZSBXYXRjaGRvZyBUaW1lciBhZnRlciB0aGUgaW1hZ2UgcmV0dXJucy4NCj4tICAgICAgICAv Lw0KPi0gICAgICAgIGdCUy0+U2V0V2F0Y2hkb2dUaW1lciAoMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgTlVMTCk7DQo+LSAgICAgIH0NCj4tICAgICAgRHJpdmVySW5kZXgrKzsNCj4tICAgIH0gd2hp bGUgKFRSVUUpOw0KPi0gIH0NCj4tICBGcmVlUG9vbCAoSGFuZGxlQnVmKTsNCj4tfQ0KPi0NCj4t DQo+LS8qKg0KPi0gIFJlZ2lzdGVyIGFuIGV2ZW50IG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBmb3Ig dXNlciBwcm9maWxlIGNoYW5nZWQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICAg ICBJbWFnZSBoYW5kbGUgdGhpcyBkcml2ZXIuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1Mb2FkRGVm ZXJyZWRJbWFnZUluaXQgKA0KPi0gIElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlDQo+ LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICBTdGF0dXM7DQo+LSAgRUZJX0VWRU5UICAgICBF dmVudDsNCj4tDQo+LSAgbURlZmVycmVkSW1hZ2VIYW5kbGUgPSBJbWFnZUhhbmRsZTsNCj4tDQo+ LSAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVudEV4ICgNCj4tICAgICAgICAgICAgICAgICAgRVZU X05PVElGWV9TSUdOQUwsDQo+LSAgICAgICAgICAgICAgICAgIFRQTF9DQUxMQkFDSywNCj4tICAg ICAgICAgICAgICAgICAgTG9hZERlZmVycmVkSW1hZ2UsDQo+LSAgICAgICAgICAgICAgICAgIE5V TEwsDQo+LSAgICAgICAgICAgICAgICAgICZnRWZpRXZlbnRVc2VyUHJvZmlsZUNoYW5nZWRHdWlk LA0KPi0gICAgICAgICAgICAgICAgICAmRXZlbnQNCj4tICAgICAgICAgICAgICAgICAgKTsNCj4t DQo+LSAgQVNTRVJUIChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MpOw0KPi19DQo+ZGlmZiAtLWdpdA0K PmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUv VXNlcklkZW50aWZ5TWFuDQo+YWdlci5jDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRp b24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW4NCj5hZ2VyLmMNCj5kZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCBmZDk0MTc5MmMxLi4wMDAwMDAwMDAwDQo+LS0t DQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4 ZS9Vc2VySWRlbnRpZnlNYW4NCj5hZ2VyLmMNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMzc2NiAr MCwwIEBADQo+LS8qKiBAZmlsZQ0KPi0gIFRoaXMgZHJpdmVyIG1hbmFnZXMgdXNlciBpbmZvcm1h dGlvbiBhbmQgcHJvZHVjZXMgdXNlciBtYW5hZ2VyIHByb3RvY29sLg0KPi0NCj4tQ29weXJpZ2h0 IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu PEJSPg0KPi0oQykgQ29weXJpZ2h0IDIwMTggSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2 ZWxvcG1lbnQgTFA8QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRl cmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMg YW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMg dGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0K PmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5w aHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5T RSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5U QVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0q Ki8NCj4tDQo+LSNpbmNsdWRlICJVc2VySWRlbnRpZnlNYW5hZ2VyLmgiDQo+LQ0KPi0vLw0KPi0v LyBEZWZhdWx0IHVzZXIgbmFtZS4NCj4tLy8NCj4tQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg IG1Vc2VyTmFtZVtdICAgICAgID0gTCJBZG1pbmlzdHJhdG9yIjsNCj4tDQo+LS8vDQo+LS8vIFBv aW50cyB0byB0aGUgdXNlciBwcm9maWxlIGRhdGFiYXNlLg0KPi0vLw0KPi1VU0VSX1BST0ZJTEVf REIgICAgICAgICAgICAgKm1Vc2VyUHJvZmlsZURiICAgPSBOVUxMOw0KPi0NCj4tLy8NCj4tLy8g UG9pbnRzIHRvIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVycyBmb3VuZCBpbiBzeXN0ZW0uDQo+LS8v DQo+LUNSRURFTlRJQUxfUFJPVklERVJfSU5GTyAgICAqbVByb3ZpZGVyRGIgICAgICA9IE5VTEw7 DQo+LQ0KPi0vLw0KPi0vLyBDdXJyZW50IHVzZXIgc2hhcmVkIGluIG11bHRpIGZ1bmN0aW9uLg0K Pi0vLw0KPi1FRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgbUN1cnJlbnRVc2VyICAgICAgPSBO VUxMOw0KPi0NCj4tLy8NCj4tLy8gRmxhZyBpbmRpY2F0ZXMgYSB1c2VyIGlzIGlkZW50aWZpZWQu DQo+LS8vDQo+LUJPT0xFQU4gICAgICAgICAgICAgICAgICAgICBtSWRlbnRpZmllZCAgICAgICA9 IEZBTFNFOw0KPi1VU0VSX01BTkFHRVJfQ0FMTEJBQ0tfSU5GTyAgKm1DYWxsYmFja0luZm8gICAg PSBOVUxMOw0KPi1ISUlfVkVORE9SX0RFVklDRV9QQVRIICAgICAgbUhpaVZlbmRvckRldmljZVBh dGggPSB7DQo+LSAgew0KPi0gICAgew0KPi0gICAgICBIQVJEV0FSRV9ERVZJQ0VfUEFUSCwNCj4t ICAgICAgSFdfVkVORE9SX0RQLA0KPi0gICAgICB7DQo+LSAgICAgICAgKFVJTlQ4KSAoc2l6ZW9m IChWRU5ET1JfREVWSUNFX1BBVEgpKSwNCj4tICAgICAgICAoVUlOVDgpICgoc2l6ZW9mIChWRU5E T1JfREVWSUNFX1BBVEgpKSA+PiA4KQ0KPi0gICAgICB9DQo+LSAgICB9LA0KPi0gICAgVVNFUl9J REVOVElGWV9NQU5BR0VSX0dVSUQNCj4tICB9LA0KPi0gIHsNCj4tICAgIEVORF9ERVZJQ0VfUEFU SF9UWVBFLA0KPi0gICAgRU5EX0VOVElSRV9ERVZJQ0VfUEFUSF9TVUJUWVBFLA0KPi0gICAgew0K Pi0gICAgICAoVUlOVDgpIChFTkRfREVWSUNFX1BBVEhfTEVOR1RIKSwNCj4tICAgICAgKFVJTlQ4 KSAoKEVORF9ERVZJQ0VfUEFUSF9MRU5HVEgpID4+IDgpDQo+LSAgICB9DQo+LSAgfQ0KPi19Ow0K Pi0NCj4tDQo+LUVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgZ1VzZXJJZGVudGlmeU1hbmFnZXIg PSB7DQo+LSAgVXNlclByb2ZpbGVDcmVhdGUsDQo+LSAgVXNlclByb2ZpbGVEZWxldGUsDQo+LSAg VXNlclByb2ZpbGVHZXROZXh0LA0KPi0gIFVzZXJQcm9maWxlQ3VycmVudCwNCj4tICBVc2VyUHJv ZmlsZUlkZW50aWZ5LA0KPi0gIFVzZXJQcm9maWxlRmluZCwNCj4tICBVc2VyUHJvZmlsZU5vdGlm eSwNCj4tICBVc2VyUHJvZmlsZUdldEluZm8sDQo+LSAgVXNlclByb2ZpbGVTZXRJbmZvLA0KPi0g IFVzZXJQcm9maWxlRGVsZXRlSW5mbywNCj4tICBVc2VyUHJvZmlsZUdldE5leHRJbmZvLA0KPi19 Ow0KPi0NCj4tDQo+LS8qKg0KPi0gIEZpbmQgdGhlIHNwZWNpZmllZCB1c2VyIGluIHRoZSB1c2Vy IGRhdGFiYXNlLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBzcGVjaWZpZWQg dXNlciBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVzZXINCj5kYXRhYmFzZS4NCj4tICBBbmQg aWYgTmV4dFVzZXIgaXMgVFJVRSwgcmV0dXJuIHRoZSBuZXh0IFVzZXIgaW4gdGhlIHVzZXIgZGF0 YWJhc2UuDQo+LQ0KPi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VyICAgICAgICAgT24gZW50cnksIHBv aW50cyB0byB0aGUgdXNlciBwcm9maWxlIGVudHJ5IHRvDQo+c2VhcmNoLg0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIHVzZXIgcHJvZmls ZSBlbnRyeSBvciBOVUxMIGlmIG5vdA0KPmZvdW5kLg0KPi0gIEBwYXJhbVtpbl0gICAgICBOZXh0 VXNlciAgICAgSWYgRkFMU0UsIGZpbmQgdGhlIHVzZXIgaW4gdXNlciBwcm9maWxlIGRhdGFiYXNl DQo+c3BlY2lmeWVkIGJ5IFVzZXINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElm IFRSVUUsIGZpbmQgdGhlIG5leHQgdXNlciBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2Ugc3BlY2lm eWVkDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBVc2VyLg0KPi0gIEBwYXJh bVtvdXRdICAgICBQcm9maWxlSW5kZXggQSBwb2ludGVyIHRvIHRoZSBpbmRleCBvZiB1c2VyIHBy b2ZpbGUgZGF0YWJhc2UNCj50aGF0IG1hdGNoZXMgdGhlDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1c2VyIHNwZWNpZnllZCBieSBVc2VyLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9O T1RfRk9VTkQgICAgICAgIFVzZXIgd2FzIE5VTEwsIG9yIFVzZXIgd2FzIG5vdCBmb3VuZCwgb3Ig dGhlDQo+bmV4dCB1c2VyIHdhcyBub3QgZm91bmQuDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICBVc2VyIG9yIHRoZSBuZXh0IHVzZXIgYXJlIGZvdW5kIGluIHVzZXIgcHJvZmlsZQ0K PmRhdGFiYXNlDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1GaW5kVXNlclByb2ZpbGUgKA0K Pi0gIElOIE9VVCAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAgICAgICAgICAgICAqKlVzZXIs DQo+LSAgSU4gICAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5leHRV c2VyLA0KPi0gICAgIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq UHJvZmlsZUluZGV4IE9QVElPTkFMDQo+LSAgKQ0KPi17DQo+LSAgVUlOVE4gICAgICAgICAgICAg ICBJbmRleDsNCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayBwYXJhbWV0ZXJzDQo+LSAgLy8NCj4t ICBpZiAoKG1Vc2VyUHJvZmlsZURiID09IE5VTEwpIHx8IChVc2VyID09IE5VTEwpKSB7DQo+LSAg ICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sg d2hldGhlciB0aGUgdXNlciBwcm9maWxlIGlzIGluIHRoZSB1c2VyIHByb2ZpbGUgZGF0YWJhc2Uu DQo+LSAgLy8NCj4tICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBtVXNlclByb2ZpbGVEYi0+VXNl clByb2ZpbGVOdW07IEluZGV4KyspIHsNCj4tICAgIGlmIChtVXNlclByb2ZpbGVEYi0+VXNlclBy b2ZpbGVbSW5kZXhdID09ICpVc2VyKSB7DQo+LSAgICAgIGlmIChQcm9maWxlSW5kZXggIT0gTlVM TCkgew0KPi0gICAgICAgICpQcm9maWxlSW5kZXggPSBJbmRleDsNCj4tICAgICAgfQ0KPi0gICAg ICBicmVhazsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIGlmIChOZXh0VXNlcikgew0KPi0gICAg Ly8NCj4tICAgIC8vIEZpbmQgdGhlIG5leHQgdXNlciBwcm9maWxlLg0KPi0gICAgLy8NCj4tICAg IEluZGV4Kys7DQo+LSAgICBpZiAoSW5kZXggPCBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVO dW0pIHsNCj4tICAgICAgKlVzZXIgPSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVbSW5kZXhd Ow0KPi0gICAgfSBlbHNlIGlmIChJbmRleCA9PSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVO dW0pIHsNCj4tICAgICAgKlVzZXIgPSBOVUxMOw0KPi0gICAgICByZXR1cm4gRUZJX05PVF9GT1VO RDsNCj4tICAgIH0gZWxzZSB7DQo+LSAgICAgIGlmICgobVVzZXJQcm9maWxlRGItPlVzZXJQcm9m aWxlTnVtID4gMCkgJiYgKCpVc2VyID09IE5VTEwpKSB7DQo+LSAgICAgICAgKlVzZXIgPSBtVXNl clByb2ZpbGVEYi0+VXNlclByb2ZpbGVbMF07DQo+LSAgICAgIH0gZWxzZSB7DQo+LSAgICAgICAg KlVzZXIgPSBOVUxMOw0KPi0gICAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi0gICAgICB9 DQo+LSAgICB9DQo+LSAgfSBlbHNlIGlmIChJbmRleCA9PSBtVXNlclByb2ZpbGVEYi0+VXNlclBy b2ZpbGVOdW0pIHsNCj4tICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi0gIH0NCj4tDQo+LSAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0vKioNCj4tICBGaW5kIHRoZSBzcGVjaWZp ZWQgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgaW4gdGhlIHNwZWNpZmllZCBVc2VyIHByb2ZpbGUu DQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIHNwZWNpZmllZCB1c2VyIGluZm9y bWF0aW9uIHJlY29yZCBmcm9tIHRoZQ0KPmJlZ2lubmluZyBvZiB0aGUgdXNlcg0KPi0gIHByb2Zp bGUuIEFuZCBpZiBOZXh0SW5mbyBpcyBUUlVFLCByZXR1cm4gdGhlIG5leHQgaW5mbyBpbiB0aGUg dXNlciBwcm9maWxlLg0KPi0NCj4tICBAcGFyYW1baW5dICAgICAgVXNlciAgICAgUG9pbnRzIHRv IHRoZSB1c2VyIHByb2ZpbGUgZW50cnkuDQo+LSAgQHBhcmFtW2luLCBvdXRdIEluZm8gICAgIE9u IGVudHJ5LCBwb2ludHMgdG8gdGhlIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIG9yDQo+TlVMTCB0 byBzdGFydA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hpbmcgd2l0aCB0aGUg Zmlyc3QgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQuDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBvciBO VUxMIGlmIG5vdA0KPmZvdW5kLg0KPi0gIEBwYXJhbVtpbl0gICAgICBOZXh0SW5mbyBJZiBGQUxT RSwgZmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgaW4gcHJvZmlsZQ0KPnNwZWNpZnll ZCBieSBVc2VyLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBUUlVFLCBmaW5kIHRo ZSBuZXh0IHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIGluIHByb2ZpbGUNCj5zcGVjaWZ5ZWQNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgVXNlci4NCj4tICBAcGFyYW1bb3V0XSAgICAg T2Zmc2V0ICAgQSBwb2ludGVyIHRvIHRoZSBvZmZzZXQgb2YgdGhlIGluZm9ybWF0aW9uIHJlY29y ZCBpbg0KPnRoZSB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIEluZm8gaXMgTlVMTA0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIElu Zm8gd2FzIG5vdCBmb3VuZCwgb3IgdGhlIG5leHQgSW5mbyB3YXMgbm90DQo+Zm91bmQuDQo+LSAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgSW5mbyBvciB0aGUgbmV4dCBpbmZvIGFyZSBm b3VuZCBpbiB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1GaW5kVXNl ckluZm8gKA0KPi0gIElOICAgICBVU0VSX1BST0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAgICAg ICogVXNlciwNCj4tICBJTiBPVVQgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAg ICAqKkluZm8sDQo+LSAgSU4gICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTmV4dEluZm8sDQo+LSAgICAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKk9mZnNldCBPUFRJT05BTA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgU3Rh dHVzOw0KPi0gIEVGSV9VU0VSX0lORk8gKlVzZXJJbmZvOw0KPi0gIFVJTlROICAgICAgICAgSW5m b0xlbjsNCj4tDQo+LSAgaWYgKEluZm8gPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgdXNlciBwcm9m aWxlIGVudHJ5DQo+LSAgLy8NCj4tICBTdGF0dXMgPSBGaW5kVXNlclByb2ZpbGUgKCZVc2VyLCBG QUxTRSwgTlVMTCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJu IFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRmluZCB1c2VyIGluZm9ybWF0aW9u IGluIHRoZSBzcGVjaWZpZWQgdXNlciByZWNvcmQuDQo+LSAgLy8NCj4tICBJbmZvTGVuID0gMDsN Cj4tICB3aGlsZSAoSW5mb0xlbiA8IFVzZXItPlVzZXJQcm9maWxlU2l6ZSkgew0KPi0gICAgVXNl ckluZm8gPSAoRUZJX1VTRVJfSU5GTyAqKSAoVXNlci0+UHJvZmlsZUluZm8gKyBJbmZvTGVuKTsN Cj4tICAgIGlmIChVc2VySW5mbyA9PSAqSW5mbykgew0KPi0gICAgICBpZiAoT2Zmc2V0ICE9IE5V TEwpIHsNCj4tICAgICAgICAqT2Zmc2V0ID0gSW5mb0xlbjsNCj4tICAgICAgfQ0KPi0gICAgICBi cmVhazsNCj4tICAgIH0NCj4tICAgIEluZm9MZW4gKz0gQUxJR05fVkFSSUFCTEUgKFVzZXJJbmZv LT5JbmZvU2l6ZSk7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHdoZXRoZXIgdG8g ZmluZCB0aGUgbmV4dCB1c2VyIGluZm9ybWF0aW9uLg0KPi0gIC8vDQo+LSAgaWYgKE5leHRJbmZv KSB7DQo+LSAgICBpZiAoSW5mb0xlbiA8IFVzZXItPlVzZXJQcm9maWxlU2l6ZSkgew0KPi0gICAg ICBVc2VySW5mbyA9IChFRklfVVNFUl9JTkZPICopIChVc2VyLT5Qcm9maWxlSW5mbyArIEluZm9M ZW4pOw0KPi0gICAgICBJbmZvTGVuICs9IEFMSUdOX1ZBUklBQkxFIChVc2VySW5mby0+SW5mb1Np emUpOw0KPi0gICAgICBpZiAoSW5mb0xlbiA8IFVzZXItPlVzZXJQcm9maWxlU2l6ZSkgew0KPi0g ICAgICAgICpJbmZvID0gKEVGSV9VU0VSX0lORk8gKikgKFVzZXItPlByb2ZpbGVJbmZvICsgSW5m b0xlbik7DQo+LSAgICAgICAgaWYgKE9mZnNldCAhPSBOVUxMKSB7DQo+LSAgICAgICAgICAqT2Zm c2V0ID0gSW5mb0xlbjsNCj4tICAgICAgICB9DQo+LSAgICAgIH0gZWxzZSBpZiAoSW5mb0xlbiA9 PSBVc2VyLT5Vc2VyUHJvZmlsZVNpemUpIHsNCj4tICAgICAgICAqSW5mbyA9IE5VTEw7DQo+LSAg ICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgICAgIH0NCj4tICAgIH0gZWxzZSB7DQo+ LSAgICAgIGlmICgqSW5mbyA9PSBOVUxMKSB7DQo+LSAgICAgICAgKkluZm8gPSAoRUZJX1VTRVJf SU5GTyAqKSBVc2VyLT5Qcm9maWxlSW5mbzsNCj4tICAgICAgICBpZiAoT2Zmc2V0ICE9IE5VTEwp IHsNCj4tICAgICAgICAgICpPZmZzZXQgPSAwOw0KPi0gICAgICAgIH0NCj4tICAgICAgfSBlbHNl IHsNCj4tICAgICAgICAqSW5mbyA9IE5VTEw7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9OT1RfRk9V TkQ7DQo+LSAgICAgIH0NCj4tICAgIH0NCj4tICB9IGVsc2UgaWYgKEluZm9MZW4gPT0gVXNlci0+ VXNlclByb2ZpbGVTaXplKSB7DQo+LSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tICB9DQo+ LQ0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tLyoqDQo+LSAgRmluZCBhIHVz ZXIgaW5mb21hdGlvbiByZWNvcmQgYnkgdGhlIGluZm9ybWF0aW9uIHJlY29yZCB0eXBlLg0KPi0N Cj4tICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGFsbCB1c2VyIGluZm9ybWF0aW9uIHJlY29yZHMg b2YgVXNlci4gVGhlIHNlYXJjaCBzdGFydHMNCj53aXRoIHRoZQ0KPi0gIHVzZXIgaW5mb3JtYXRp b24gcmVjb3JkIGZvbGxvd2luZyBJbmZvIGFuZCBjb250aW51ZXMgdW50aWwgZWl0aGVyIHRoZQ0K PmluZm9ybWF0aW9uIGlzIGZvdW5kDQo+LSAgb3IgdGhlcmUgYXJlIG5vIG1vcmUgdXNlciBpbmZv bWF0aW9uIHJlY29yZC4NCj4tICBBIG1hdGNoIG9jY3VycyB3aGVuIGEgSW5mby5JbmZvVHlwZSBm aWVsZCBtYXRjaGVzIHRoZSB1c2VyIGluZm9ybWF0aW9uDQo+cmVjb3JkIHR5cGUuDQo+LQ0KPi0g IEBwYXJhbVtpbl0gICAgICBVc2VyICAgICBQb2ludHMgdG8gdGhlIHVzZXIgcHJvZmlsZSByZWNv cmQgdG8gc2VhcmNoLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBJbmZvICAgICBPbiBlbnRyeSwgcG9p bnRzIHRvIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBvcg0KPk5VTEwgdG8gc3RhcnQNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoaW5nIHdpdGggdGhlIGZpcnN0IHVzZXIg aW5mb3JtYXRpb24gcmVjb3JkLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICBPbiByZXR1 cm4sIHBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgb3IgTlVMTCBpZiBub3QN Cj5mb3VuZC4NCj4tICBAcGFyYW1baW5dICAgICAgSW5mb1R5cGUgVGhlIGluZm9tYXRpb24gdHlw ZSB0byBiZSBzZWFyY2hlZC4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VXNlciBpbmZvcm1hdGlvbiB3YXMgZm91bmQuIEluZm8gcG9pbnRzIHRvIHRoZQ0KPnVzZXIgaW5m b3JtYXRpb24gcmVjb3JkLg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFVzZXIg aW5mb3JtYXRpb24gd2FzIG5vdCBmb3VuZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBVc2VyIGlzIE5VTEwgb3IgSW5mbyBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFU VVMNCj4tRmluZFVzZXJJbmZvQnlUeXBlICgNCj4tICBJTiAgICAgIFVTRVJfUFJPRklMRV9FTlRS WSAgICAgICAgICAgICAgICAgICAgKlVzZXIsDQo+LSAgSU4gT1VUICBFRklfVVNFUl9JTkZPICAg ICAgICAgICAgICAgICAgICAgICAgICoqSW5mbywNCj4tICBJTiAgICAgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSW5mb1R5cGUNCj4tICApDQo+LXsNCj4tICBFRklfU1RB VFVTICAgIFN0YXR1czsNCj4tICBFRklfVVNFUl9JTkZPICpVc2VySW5mbzsNCj4tICBVSU5UTiAg ICAgICAgIEluZm9MZW47DQo+LQ0KPi0gIGlmIChJbmZvID09IE5VTEwpIHsNCj4tICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNr IHdoZXRoZXIgdGhlIHVzZXIgaGFzIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4NCj4t ICAvLw0KPi0gIEluZm9MZW4gPSAwOw0KPi0gIGlmICgqSW5mbyA9PSBOVUxMKSB7DQo+LSAgICBT dGF0dXMgPSBGaW5kVXNlclByb2ZpbGUgKCZVc2VyLCBGQUxTRSwgTlVMTCk7DQo+LSAgfSBlbHNl IHsNCj4tICAgIFN0YXR1cyA9IEZpbmRVc2VySW5mbyAoVXNlciwgSW5mbywgVFJVRSwgJkluZm9M ZW4pOw0KPi0gIH0NCj4tDQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0 dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgfQ0KPi0NCj4tICB3aGlsZSAoSW5mb0xlbiA8IFVzZXIt PlVzZXJQcm9maWxlU2l6ZSkgew0KPi0gICAgVXNlckluZm8gPSAoRUZJX1VTRVJfSU5GTyAqKSAo VXNlci0+UHJvZmlsZUluZm8gKyBJbmZvTGVuKTsNCj4tICAgIGlmIChVc2VySW5mby0+SW5mb1R5 cGUgPT0gSW5mb1R5cGUpIHsNCj4tICAgICAgaWYgKFVzZXJJbmZvICE9ICpJbmZvKSB7DQo+LSAg ICAgICAgKkluZm8gPSBVc2VySW5mbzsNCj4tICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ LSAgICAgIH0NCj4tICAgIH0NCj4tDQo+LSAgICBJbmZvTGVuICs9IEFMSUdOX1ZBUklBQkxFIChV c2VySW5mby0+SW5mb1NpemUpOw0KPi0gIH0NCj4tDQo+LSAgKkluZm8gPSBOVUxMOw0KPi0gIHJl dHVybiBFRklfTk9UX0ZPVU5EOw0KPi19DQo+LQ0KPi0vKioNCj4tICBGaW5kIGEgdXNlciB1c2lu ZyBhIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkLg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIHNlYXJj aGVzIGFsbCB1c2VyIHByb2ZpbGVzIGZvciB0aGUgc3BlY2lmaWVkIHVzZXIgaW5mb3JtYXRpb24N Cj5yZWNvcmQuIFRoZQ0KPi0gIHNlYXJjaCBzdGFydHMgd2l0aCB0aGUgdXNlciBpbmZvcm1hdGlv biByZWNvcmQgaGFuZGxlIGZvbGxvd2luZyBVc2VySW5mbw0KPmFuZCBjb250aW51ZXMNCj4tICB1 bnRpbCBlaXRoZXIgdGhlIGluZm9ybWF0aW9uIGlzIGZvdW5kIG9yIHRoZXJlIGFyZSBubyBtb3Jl IHVzZXIgcHJvZmlsZXMuDQo+LSAgQSBtYXRjaCBvY2N1cnMgd2hlbiB0aGUgSW5mby5JbmZvVHlw ZSBmaWVsZCBtYXRjaGVzIHRoZSB1c2VyIGluZm9ybWF0aW9uDQo+cmVjb3JkIHR5cGUgYW5kIHRo ZQ0KPi0gIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIGRhdGEgbWF0Y2hlcyB0aGUgcG9ydGlvbiBv ZiBJbmZvIHBhc3NlZCB0aGUNCj5FRklfVVNFUl9JTkZPIGhlYWRlci4NCj4tDQo+LSAgQHBhcmFt W2luLCBvdXRdIFVzZXIgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHByZXZpb3VzbHkgcmV0 dXJuZWQgdXNlcg0KPnByb2ZpbGUgcmVjb3JkLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBvciBOVUxMIHRvIHN0YXJ0IHNlYXJjaGluZyB3aXRoIHRoZSBmaXJzdCB1c2VyIHByb2ZpbGUu DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSB1 c2VyIHByb2ZpbGUgZW50cnksIG9yIE5VTEwgaWYgbm90IGZvdW5kLg0KPi0gIEBwYXJhbVtpbiwg b3V0XSBVc2VySW5mbyBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBwcmV2aW91c2x5IHJldHVybmVk IHVzZXINCj5pbmZvcm1hdGlvbiByZWNvcmQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg IG9yIE5VTEwgdG8gc3RhcnQgc2VhcmNoaW5nIHdpdGggdGhlIGZpcnN0Lg0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlv biByZWNvcmQsIG9yIE5VTEwgaWYgbm90DQo+Zm91bmQuDQo+LSAgQHBhcmFtW2luXSAgICAgIElu Zm8gICAgIFBvaW50cyB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHVzZXIgaW5mb3JtYXRp b24gdG8NCj5iZSBjb21wYXJlZA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUg dXNlciBpbmZvcm1hdGlvbiByZWNvcmQuDQo+LSAgQHBhcmFtW2luXSAgICAgIEluZm9TaXplIFRo ZSBzaXplIG9mIEluZm8sIGluIGJ5dGVzLiBTYW1lIGFzIEluZm8tPkluZm9TaXplLg0KPi0NCj4t ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBVc2VyIGluZm9ybWF0aW9uIHdhcyBmb3Vu ZC4gVXNlciBwb2ludHMgdG8gdGhlDQo+dXNlciBwcm9maWxlIHJlY29yZCwNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhbmQgVXNlckluZm8gcG9pbnRzIHRvIHRoZSB1c2VyIGlu Zm9ybWF0aW9uIHJlY29yZC4NCj4tICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBVc2Vy IGluZm9ybWF0aW9uIHdhcyBub3QgZm91bmQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgVXNlciBpcyBOVUxMOyBJbmZvIGlzIE5VTEw7IG9yLCBJbmZvU2l6ZSBpcw0KPnRvbyBz bWFsbC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUZpbmRVc2VyUHJvZmlsZUJ5SW5mbyAo DQo+LSAgSU4gT1VUICBVU0VSX1BST0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAgICAgICoqVXNl ciwNCj4tICBJTiBPVVQgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgKipV c2VySW5mbywgT1BUSU9OQUwNCj4tICBJTiAgICAgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAg ICAgICAgICAgICAgKkluZm8sDQo+LSAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEluZm9TaXplDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICBTdGF0 dXM7DQo+LSAgRUZJX1VTRVJfSU5GTyAqSW5mb0VudHJ5Ow0KPi0NCj4tDQo+LSAgaWYgKChVc2Vy ID09IE5VTEwpIHx8IChJbmZvID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgaWYgKEluZm9TaXplIDwgc2l6ZW9mIChFRklfVVNF Ul9JTkZPKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+ LQ0KPi0gIGlmIChVc2VySW5mbyAhPSBOVUxMKSB7DQo+LSAgICBJbmZvRW50cnkgPSAqVXNlcklu Zm87DQo+LSAgfSBlbHNlIHsNCj4tICAgIEluZm9FbnRyeSA9IE5VTEw7DQo+LSAgfQ0KPi0gIC8v DQo+LSAgLy8gRmluZCB1c2VyIHByb2ZpbGUgYWNjb3JkaW5nIHRvIGluZm9ybWF0aW9uLg0KPi0g IC8vDQo+LSAgaWYgKCpVc2VyID09IE5VTEwpIHsNCj4tICAgICpVc2VyID0gbVVzZXJQcm9maWxl RGItPlVzZXJQcm9maWxlWzBdOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayB1c2Vy IHByb2ZpbGUgaGFuZGxlLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gRmluZFVzZXJQcm9maWxlIChV c2VyLCBGQUxTRSwgTlVMTCk7DQo+LQ0KPi0gIHdoaWxlICghRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+LSAgICAvLw0KPi0gICAgLy8gRmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbiBpbiBhIHVzZXIg cHJvZmlsZS4NCj4tICAgIC8vDQo+LSAgICB3aGlsZSAoVFJVRSkgew0KPi0gICAgICBTdGF0dXMg PSBGaW5kVXNlckluZm9CeVR5cGUgKCpVc2VyLCAmSW5mb0VudHJ5LCBJbmZvLT5JbmZvVHlwZSk7 DQo+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgICBicmVhazsNCj4t ICAgICAgfQ0KPi0NCj4tICAgICAgaWYgKEluZm9TaXplID09IEluZm8tPkluZm9TaXplKSB7DQo+ LSAgICAgICAgaWYgKENvbXBhcmVNZW0gKChVSU5UOCAqKSAoSW5mb0VudHJ5ICsgMSksIChVSU5U OCAqKSAoSW5mbyArIDEpLCBJbmZvU2l6ZQ0KPi0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSkgPT0g MCkgew0KPi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIC8vIEZvdW5kIHRoZSBpbmZvbWF0aW9u IHJlY29yZC4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBpZiAoVXNlckluZm8gIT0gTlVM TCkgew0KPi0gICAgICAgICAgICAqVXNlckluZm8gPSBJbmZvRW50cnk7DQo+LSAgICAgICAgICB9 DQo+LSAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgICAgICAgfQ0KPi0gICAgICB9 DQo+LSAgICB9DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIEdldCBuZXh0IHVzZXIgcHJvZmlsZS4N Cj4tICAgIC8vDQo+LSAgICBJbmZvRW50cnkgPSBOVUxMOw0KPi0gICAgU3RhdHVzICAgID0gRmlu ZFVzZXJQcm9maWxlIChVc2VyLCBUUlVFLCBOVUxMKTsNCj4tICB9DQo+LQ0KPi0gIHJldHVybiBF RklfTk9UX0ZPVU5EOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQ2hlY2sgd2hldGhlciB0aGUg YWNjZXNzIHBvbGljeSBpcyB2YWxpZC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgUG9saWN5SW5mbyAg ICAgICAgICBQb2ludCB0byB0aGUgYWNjZXNzIHBvbGljeS4NCj4tICBAcGFyYW1baW5dICBJbmZv TGVuICAgICAgICAgICAgIFRoZSBwb2xpY3kgbGVuZ3RoLg0KPi0NCj4tICBAcmV0dmFsIFRSVUUg ICAgIFRoZSBwb2xpY3kgaXMgYSB2YWxpZCBhY2Nlc3MgcG9saWN5Lg0KPi0gIEByZXR2YWwgRkFM U0UgICAgVGhlIGFjY2VzcyBwb2xpY3kgaXMgbm90IGEgdmFsaWQgYWNjZXNzIHBvbGljeS4NCj4t DQo+LSoqLw0KPi1CT09MRUFODQo+LUNoZWNrQWNjZXNzUG9saWN5ICgNCj4tICBJTiAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlBvbGljeUluZm8sDQo+LSAgSU4g IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9MZW4NCj4tICAp DQo+LXsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbExlbjsNCj4tICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUxlbjsNCj4tICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICBPZmZTZXQ7DQo+LSAgRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJP TCAgQWNjZXNzOw0KPi0gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICpQYXRoOw0KPi0g IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGhTaXplOw0KPi0NCj4tICBUb3RhbExl biA9IDA7DQo+LSAgd2hpbGUgKFRvdGFsTGVuIDwgSW5mb0xlbikgew0KPi0gICAgLy8NCj4tICAg IC8vIENoZWNrIGFjY2VzcyBwb2xpY3kgYWNjb3JkaW5nIHRvIHR5cGUuDQo+LSAgICAvLw0KPi0g ICAgQ29weU1lbSAoJkFjY2VzcywgUG9saWN5SW5mbyArIFRvdGFsTGVuLCBzaXplb2YgKEFjY2Vz cykpOw0KPi0gICAgVmFsdWVMZW4gPSBBY2Nlc3MuU2l6ZSAtIHNpemVvZiAoRUZJX1VTRVJfSU5G T19BQ0NFU1NfQ09OVFJPTCk7DQo+LSAgICBzd2l0Y2ggKEFjY2Vzcy5UeXBlKSB7DQo+LSAgICBj YXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX0ZPUkJJRF9MT0FEOg0KPi0gICAgY2FzZSBFRklfVVNF Ul9JTkZPX0FDQ0VTU19QRVJNSVRfTE9BRDoNCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19BQ0NF U1NfRk9SQklEX0NPTk5FQ1Q6DQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX1BFUk1J VF9DT05ORUNUOg0KPi0gICAgICBPZmZTZXQgPSAwOw0KPi0gICAgICB3aGlsZSAoT2ZmU2V0IDwg VmFsdWVMZW4pIHsNCj4tICAgICAgICBQYXRoICAgICAgPSAoRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MICopIChQb2xpY3lJbmZvICsgVG90YWxMZW4gKw0KPnNpemVvZiAoQWNjZXNzKSArIE9mZlNl dCk7DQo+LSAgICAgICAgUGF0aFNpemUgID0gR2V0RGV2aWNlUGF0aFNpemUgKFBhdGgpOw0KPi0g ICAgICAgIE9mZlNldCArPSBQYXRoU2l6ZTsNCj4tICAgICAgfQ0KPi0gICAgICBpZiAoT2ZmU2V0 ICE9IFZhbHVlTGVuKSB7DQo+LSAgICAgICAgcmV0dXJuIEZBTFNFOw0KPi0gICAgICB9DQo+LSAg ICAgIGJyZWFrOw0KPi0NCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19BQ0NFU1NfU0VUVVA6DQo+ LSAgICAgIGlmIChWYWx1ZUxlbiAlIHNpemVvZiAoRUZJX0dVSUQpICE9IDApIHsNCj4tICAgICAg ICByZXR1cm4gRkFMU0U7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgY2Fz ZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19CT09UX09SREVSOg0KPi0gICAgICBpZiAoVmFsdWVMZW4g JSBzaXplb2YgKEVGSV9VU0VSX0lORk9fQUNDRVNTX0JPT1RfT1JERVJfSERSKSAhPSAwKQ0KPnsN Cj4tICAgICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0K Pi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19FTlJPTExfU0VMRjoNCj4tICAgIGNhc2Ug RUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX09USEVSUzoNCj4tICAgIGNhc2UgRUZJX1VTRVJf SU5GT19BQ0NFU1NfTUFOQUdFOg0KPi0gICAgICBpZiAoVmFsdWVMZW4gIT0gMCkgew0KPi0gICAg ICAgIHJldHVybiBGQUxTRTsNCj4tICAgICAgfQ0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBk ZWZhdWx0Og0KPi0gICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICAgIGJyZWFrOw0KPi0gICAgfQ0K Pi0NCj4tICAgIFRvdGFsTGVuICs9IEFjY2Vzcy5TaXplOw0KPi0gIH0NCj4tDQo+LSAgaWYgKFRv dGFsTGVuICE9IEluZm9MZW4pIHsNCj4tICAgIHJldHVybiBGQUxTRTsNCj4tICB9DQo+LQ0KPi0g IHJldHVybiBUUlVFOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQ2hlY2sgd2hldGhlciB0aGUg aWRlbnRpdHkgcG9saWN5IGlzIHZhbGlkLg0KPi0NCj4tICBAcGFyYW1baW5dICBQb2xpY3lJbmZv ICAgICAgICAgIFBvaW50IHRvIHRoZSBpZGVudGl0eSBwb2xpY3kuDQo+LSAgQHBhcmFtW2luXSAg SW5mb0xlbiAgICAgICAgICAgICBUaGUgcG9saWN5IGxlbmd0aC4NCj4tDQo+LSAgQHJldHZhbCBU UlVFICAgICBUaGUgcG9saWN5IGlzIGEgdmFsaWQgaWRlbnRpdHkgcG9saWN5Lg0KPi0gIEByZXR2 YWwgRkFMU0UgICAgVGhlIGFjY2VzcyBwb2xpY3kgaXMgbm90IGEgdmFsaWQgaWRlbnRpdHkgcG9s aWN5Lg0KPi0NCj4tKiovDQo+LUJPT0xFQU4NCj4tQ2hlY2tJZGVudGl0eVBvbGljeSAoDQo+LSAg SU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQb2xpY3lJbmZv LA0KPi0gIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZv TGVuDQo+LSAgKQ0KPi17DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgVG90YWxM ZW47DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVMZW47DQo+LSAgRUZJ X1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKklkZW50aXR5Ow0KPi0NCj4tICBUb3RhbExlbiAg PSAwOw0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIGVhY2ggcGFydCBvZiBwb2xpY3kgZXhwcmVz c2lvbi4NCj4tICAvLw0KPi0gIHdoaWxlIChUb3RhbExlbiA8IEluZm9MZW4pIHsNCj4tICAgIC8v DQo+LSAgICAvLyBDaGVjayBhY2Nlc3MgcG9saXN5IGFjY29yZGluZyB0byB0eXBlLg0KPi0gICAg Ly8NCj4tICAgIElkZW50aXR5ICA9IChFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAqKSAo UG9saWN5SW5mbyArIFRvdGFsTGVuKTsNCj4tICAgIFZhbHVlTGVuICA9IElkZW50aXR5LT5MZW5n dGggLSBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZKTsNCj4tICAgIHN3aXRj aCAoSWRlbnRpdHktPlR5cGUpIHsNCj4tICAgIC8vDQo+LSAgICAvLyBDaGVjayBGYWxzZSBvcHRp b24uDQo+LSAgICAvLw0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0ZBTFNFOg0K Pi0gICAgICBpZiAoVmFsdWVMZW4gIT0gMCkgew0KPi0gICAgICAgIHJldHVybiBGQUxTRTsNCj4t ICAgICAgfQ0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICAvLw0KPi0gICAgLy8gQ2hlY2sgVHJ1 ZSBvcHRpb24uDQo+LSAgICAvLw0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX1RS VUU6DQo+LSAgICAgIGlmIChWYWx1ZUxlbiAhPSAwKSB7DQo+LSAgICAgICAgcmV0dXJuIEZBTFNF Ow0KPi0gICAgICB9DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBDaGVj ayBuZWdhdGl2ZSBvcGVyYXRpb24uDQo+LSAgICAvLw0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZP X0lERU5USVRZX05PVDoNCj4tICAgICAgaWYgKFZhbHVlTGVuICE9IDApIHsNCj4tICAgICAgICBy ZXR1cm4gRkFMU0U7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgLy8NCj4t ICAgIC8vIENoZWNrIGFuZCBvcGVyYXRpb24uDQo+LSAgICAvLw0KPi0gICAgY2FzZSBFRklfVVNF Ul9JTkZPX0lERU5USVRZX0FORDoNCj4tICAgICAgaWYgKFZhbHVlTGVuICE9IDApIHsNCj4tICAg ICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAg Ly8NCj4tICAgIC8vIENoZWNrIG9yIG9wZXJhdGlvbi4NCj4tICAgIC8vDQo+LSAgICBjYXNlIEVG SV9VU0VSX0lORk9fSURFTlRJVFlfT1I6DQo+LSAgICAgIGlmIChWYWx1ZUxlbiAhPSAwKSB7DQo+ LSAgICAgICAgcmV0dXJuIEZBTFNFOw0KPi0gICAgICB9DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4t ICAgIC8vDQo+LSAgICAvLyBDaGVjayBjcmVkZW50aWFsIHByb3ZpZGVyIGJ5IHR5cGUuDQo+LSAg ICAvLw0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0NSRURFTlRJQUxfVFlQRToN Cj4tICAgICAgaWYgKFZhbHVlTGVuICE9IHNpemVvZiAoRUZJX0dVSUQpKSB7DQo+LSAgICAgICAg cmV0dXJuIEZBTFNFOw0KPi0gICAgICB9DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIC8vDQo+ LSAgICAvLyBDaGVjayBjcmVkZW50aWFsIHByb3ZpZGVyIGJ5IElELg0KPi0gICAgLy8NCj4tICAg IGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9DUkVERU5USUFMX1BST1ZJREVSOg0KPi0gICAg ICBpZiAoVmFsdWVMZW4gIT0gc2l6ZW9mIChFRklfR1VJRCkpIHsNCj4tICAgICAgICByZXR1cm4g RkFMU0U7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgZGVmYXVsdDoNCj4t ICAgICAgcmV0dXJuIEZBTFNFOw0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tDQo+LSAgICBU b3RhbExlbiArPSBJZGVudGl0eS0+TGVuZ3RoOw0KPi0gIH0NCj4tDQo+LSAgaWYgKFRvdGFsTGVu ICE9IEluZm9MZW4pIHsNCj4tICAgIHJldHVybiBGQUxTRTsNCj4tICB9DQo+LQ0KPi0gIHJldHVy biBUUlVFOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQ2hlY2sgd2hldGhlciB0aGUgdXNlciBp bmZvcm1hdGlvbiBpcyBhIHZhbGlkIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkLg0KPi0NCj4tICBA cGFyYW1baW5dICBJbmZvIHBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+LSAg QHJldHZhbCBUUlVFICAgICBUaGUgaW5mbyBpcyBhIHZhbGlkIHVzZXIgaW5mb3JtYXRpb24gcmVj b3JkLg0KPi0gIEByZXR2YWwgRkFMU0UgICAgVGhlIGluZm8gaXMgbm90IGEgdmFsaWQgdXNlciBp bmZvcm1hdGlvbiByZWNvcmQuDQo+LQ0KPi0qKi8NCj4tQk9PTEVBTg0KPi1DaGVja1VzZXJJbmZv ICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgKklu Zm8NCj4tICApDQo+LXsNCj4tICBVSU5UTiAgICAgICBJbmZvTGVuOw0KPi0NCj4tICBpZiAoSW5m byA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRkFMU0U7DQo+LSAgfQ0KPi0gIC8vDQo+LSAgLy8g Q2hlY2sgdXNlciBpbmZvcm1hdGlvbiBhY2NvcmRpbmcgdG8gaW5mb3JtYXRpb24gdHlwZS4NCj4t ICAvLw0KPi0gIEluZm9MZW4gPSBJbmZvLT5JbmZvU2l6ZSAtIHNpemVvZiAoRUZJX1VTRVJfSU5G Tyk7DQo+LSAgc3dpdGNoIChJbmZvLT5JbmZvVHlwZSkgew0KPi0gIGNhc2UgRUZJX1VTRVJfSU5G T19FTVBUWV9SRUNPUkQ6DQo+LSAgICBpZiAoSW5mb0xlbiAhPSAwKSB7DQo+LSAgICAgIHJldHVy biBGQUxTRTsNCj4tICAgIH0NCj4tICAgIGJyZWFrOw0KPi0NCj4tICBjYXNlIEVGSV9VU0VSX0lO Rk9fTkFNRV9SRUNPUkQ6DQo+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0NSRURFTlRJQUxfVFlQRV9O QU1FX1JFQ09SRDoNCj4tICBjYXNlIEVGSV9VU0VSX0lORk9fQ1JFREVOVElBTF9QUk9WSURFUl9O QU1FX1JFQ09SRDoNCj4tICAgIGJyZWFrOw0KPi0NCj4tICBjYXNlIEVGSV9VU0VSX0lORk9fQ1JF QVRFX0RBVEVfUkVDT1JEOg0KPi0gIGNhc2UgRUZJX1VTRVJfSU5GT19VU0FHRV9EQVRFX1JFQ09S RDoNCj4tICAgIGlmIChJbmZvTGVuICE9IHNpemVvZiAoRUZJX1RJTUUpKSB7DQo+LSAgICAgIHJl dHVybiBGQUxTRTsNCj4tICAgIH0NCj4tICAgIGJyZWFrOw0KPi0NCj4tICBjYXNlIEVGSV9VU0VS X0lORk9fVVNBR0VfQ09VTlRfUkVDT1JEOg0KPi0gICAgaWYgKEluZm9MZW4gIT0gc2l6ZW9mIChV SU5UNjQpKSB7DQo+LSAgICAgIHJldHVybiBGQUxTRTsNCj4tICAgIH0NCj4tICAgIGJyZWFrOw0K Pi0NCj4tICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQ6DQo+LSAgICBpZiAo SW5mb0xlbiAhPSAxNikgew0KPi0gICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICB9DQo+LSAgICBi cmVhazsNCj4tDQo+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0NSRURFTlRJQUxfVFlQRV9SRUNPUkQ6 DQo+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0NSRURFTlRJQUxfUFJPVklERVJfUkVDT1JEOg0KPi0g IGNhc2UgRUZJX1VTRVJfSU5GT19HVUlEX1JFQ09SRDoNCj4tICAgIGlmIChJbmZvTGVuICE9IHNp emVvZiAoRUZJX0dVSUQpKSB7DQo+LSAgICAgIHJldHVybiBGQUxTRTsNCj4tICAgIH0NCj4tICAg IGJyZWFrOw0KPi0NCj4tICBjYXNlIEVGSV9VU0VSX0lORk9fUEtDUzExX1JFQ09SRDoNCj4tICBj YXNlIEVGSV9VU0VSX0lORk9fQ0JFRkZfUkVDT1JEOg0KPi0gICAgYnJlYWs7DQo+LQ0KPi0gIGNh c2UgRUZJX1VTRVJfSU5GT19GQVJfUkVDT1JEOg0KPi0gIGNhc2UgRUZJX1VTRVJfSU5GT19SRVRS WV9SRUNPUkQ6DQo+LSAgICBpZiAoSW5mb0xlbiAhPSAxKSB7DQo+LSAgICAgIHJldHVybiBGQUxT RTsNCj4tICAgIH0NCj4tICAgIGJyZWFrOw0KPi0NCj4tICBjYXNlIEVGSV9VU0VSX0lORk9fQUND RVNTX1BPTElDWV9SRUNPUkQ6DQo+LSAgICBpZighQ2hlY2tBY2Nlc3NQb2xpY3kgKChVSU5UOCAq KSAoSW5mbyArIDEpLCBJbmZvTGVuKSkgew0KPi0gICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICB9 DQo+LSAgICBicmVhazsNCj4tDQo+LSAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElD WV9SRUNPUkQ6DQo+LSAgICBpZiAoIUNoZWNrSWRlbnRpdHlQb2xpY3kgKChVSU5UOCAqKSAoSW5m byArIDEpLCBJbmZvTGVuKSkgew0KPi0gICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICB9DQo+LSAg ICBicmVhazsNCj4tDQo+LSAgZGVmYXVsdDoNCj4tICAgIHJldHVybiBGQUxTRTsNCj4tICAgIGJy ZWFrOw0KPi0gIH0NCj4tDQo+LSAgcmV0dXJuIFRSVUU7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4t ICBDaGVjayB0aGUgdXNlciBwcm9maWxlIGRhdGEgZm9ybWF0IHRvIGJlIGFkZGVkLg0KPi0NCj4t ICBAcGFyYW1baW5dICBVc2VyUHJvZmlsZUluZm8gICAgIFBvaW50cyB0byB0aGUgdXNlciBwcm9m aWxlIGRhdGEuDQo+LSAgQHBhcmFtW2luXSAgVXNlclByb2ZpbGVTaXplICAgICBUaGUgbGVuZ3Ro IG9mIHVzZXIgcHJvZmlsZSBkYXRhLg0KPi0NCj4tICBAcmV0dmFsIFRSVUUgICAgIEl0IGlzIGEg dmFsaWQgdXNlciBwcm9maWxlLg0KPi0gIEByZXR2YWwgRkFMU0UgICAgSXQgaXMgbm90IGEgdmFs aWQgdXNlciBwcm9maWxlLg0KPi0NCj4tKiovDQo+LUJPT0xFQU4NCj4tQ2hlY2tQcm9maWxlSW5m byAoDQo+LSAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpV c2VyUHJvZmlsZUluZm8sDQo+LSAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVzZXJQcm9maWxlU2l6ZQ0KPi0gICkNCj4tew0KPi0gIFVJTlROICAgICAgICAg Q2hrTGVuOw0KPi0gIEVGSV9VU0VSX0lORk8gKkluZm87DQo+LQ0KPi0gIGlmIChVc2VyUHJvZmls ZUluZm8gPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEZBTFNFOw0KPi0gIH0NCj4tDQo+LSAgLy8N Cj4tICAvLyBDaGVjayB1c2VyIHByb2ZpbGUgaW5mb3JtYXRpb24gbGVuZ3RoLg0KPi0gIC8vDQo+ LSAgQ2hrTGVuID0gMDsNCj4tICB3aGlsZSAoQ2hrTGVuIDwgVXNlclByb2ZpbGVTaXplKSB7DQo+ LSAgICBJbmZvID0gKEVGSV9VU0VSX0lORk8gKikgKFVzZXJQcm9maWxlSW5mbyArIENoa0xlbik7 DQo+LSAgICAvLw0KPi0gICAgLy8gQ2hlY2sgdXNlciBpbmZvcm1hdGlvbiBmb3JtYXQuDQo+LSAg ICAvLw0KPi0gICAgaWYgKCFDaGVja1VzZXJJbmZvIChJbmZvKSkgew0KPi0gICAgICByZXR1cm4g RkFMU0U7DQo+LSAgICB9DQo+LQ0KPi0gICAgQ2hrTGVuICs9IEFMSUdOX1ZBUklBQkxFIChJbmZv LT5JbmZvU2l6ZSk7DQo+LSAgfQ0KPi0NCj4tICBpZiAoQ2hrTGVuICE9IFVzZXJQcm9maWxlU2l6 ZSkgew0KPi0gICAgcmV0dXJuIEZBTFNFOw0KPi0gIH0NCj4tDQo+LSAgcmV0dXJuIFRSVUU7DQo+ LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBGaW5kIHRoZSBzcGVjaWZpZWQgUmlnaHRUeXBlIGluIGN1 cnJlbnQgdXNlciBwcm9maWxlLg0KPi0NCj4tICBAcGFyYW1baW5dICBSaWdodFR5cGUgICAgICBD b3VsZCBiZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19NQU5BR0UsDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX09USEVSUyBvcg0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9TRUxG Lg0KPi0NCj4tICBAcmV0dmFsIFRSVUUgICAgIEZpbmQgdGhlIHNwZWNpZmllZCBSaWdodFR5cGUg aW4gY3VycmVudCB1c2VyIHByb2ZpbGUuDQo+LSAgQHJldHZhbCBGQUxTRSAgICBDYW4ndCBmaW5k IHRoZSByaWdodCBpbiB0aGUgcHJvZmlsZS4NCj4tDQo+LSoqLw0KPi1CT09MRUFODQo+LUNoZWNr Q3VycmVudFVzZXJBY2Nlc3NSaWdodCAoDQo+LSAgSU4gICAgICAgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJpZ2h0VHlwZQ0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4tICBFRklfVVNFUl9JTkZPICAgICAgICAgICAg ICAgICAqSW5mbzsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbExlbjsN Cj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja0xlbjsNCj4tICBFRklfVVNF Ul9JTkZPX0FDQ0VTU19DT05UUk9MICBBY2Nlc3M7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IHVz ZXIgYWNjZXNzIHJpZ2h0IGluZm9ybWF0aW9uLg0KPi0gIC8vDQo+LSAgSW5mbyA9IE5VTEw7DQo+ LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlICgNCj4tICAgICAgICAgICAgKFVTRVJfUFJP RklMRV9FTlRSWSAqKSBtQ3VycmVudFVzZXIsDQo+LSAgICAgICAgICAgICZJbmZvLA0KPi0gICAg ICAgICAgICBFRklfVVNFUl9JTkZPX0FDQ0VTU19QT0xJQ1lfUkVDT1JEDQo+LSAgICAgICAgICAg ICk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIEZBTFNFOw0K Pi0gIH0NCj4tDQo+LSAgQVNTRVJUIChJbmZvICE9IE5VTEwpOw0KPi0gIFRvdGFsTGVuICA9IElu Zm8tPkluZm9TaXplIC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKTsNCj4tICBDaGVja0xlbiAgPSAw Ow0KPi0gIHdoaWxlIChDaGVja0xlbiA8IFRvdGFsTGVuKSB7DQo+LSAgICAvLw0KPi0gICAgLy8g Q2hlY2sgcmlnaHQgYWNjb3JkaW5nIHRvIGFjY2VzcyB0eXBlLg0KPi0gICAgLy8NCj4tICAgIENv cHlNZW0gKCZBY2Nlc3MsIChVSU5UOCAqKSAoSW5mbyArIDEpICsgQ2hlY2tMZW4sIHNpemVvZiAo QWNjZXNzKSk7DQo+LSAgICBpZiAoQWNjZXNzLlR5cGUgPT0gUmlnaHRUeXBlKSB7DQo+LSAgICAg IHJldHVybiBUUlVFOzsNCj4tICAgIH0NCj4tDQo+LSAgICBDaGVja0xlbiArPSBBY2Nlc3MuU2l6 ZTsNCj4tICB9DQo+LQ0KPi0gIHJldHVybiBGQUxTRTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0g IENyZWF0ZSBhIHVuaXF1ZSB1c2VyIGlkZW50aWZpZXIuDQo+LQ0KPi0gIEBwYXJhbVtvdXRdICBJ ZGVudGlmaWVyICAgICBUaGlzIHBvaW50cyB0byB0aGUgaWRlbnRpZmllci4NCj4tDQo+LSoqLw0K Pi1WT0lEDQo+LUdlbmVyYXRlSWRlbnRpZmllciAoDQo+LSAgIE9VVCAgICBVSU5UOCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqSWRlbnRpZmllcg0KPi0gICkNCj4tew0KPi0gIEVGSV9U SU1FICBUaW1lOw0KPi0gIFVJTlQ2NCAgICBNb25vdG9uaWNDb3VudDsNCj4tICBVSU5UMzIgICAg Kk1vbm90b25pY1BvaW50ZXI7DQo+LSAgVUlOVE4gICAgIEluZGV4Ow0KPi0NCj4tICAvLw0KPi0g IC8vIENyZWF0ZSBhIHVuaXF1ZSB1c2VyIGlkZW50aWZpZXIuDQo+LSAgLy8NCj4tICBnUlQtPkdl dFRpbWUgKCZUaW1lLCBOVUxMKTsNCj4tICBDb3B5TWVtIChJZGVudGlmaWVyLCAmVGltZSwgc2l6 ZW9mIChFRklfVElNRSkpOw0KPi0gIC8vDQo+LSAgLy8gUmVtb3ZlIHplcm9zLg0KPi0gIC8vDQo+ LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgc2l6ZW9mIChFRklfVElNRSk7IEluZGV4KyspIHsN Cj4tICAgIGlmIChJZGVudGlmaWVyW0luZGV4XSA9PSAwKSB7DQo+LSAgICAgIElkZW50aWZpZXJb SW5kZXhdID0gMHg1YTsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIE1vbm90b25pY1BvaW50ZXIg PSAoVUlOVDMyICopIElkZW50aWZpZXI7DQo+LSAgZ0JTLT5HZXROZXh0TW9ub3RvbmljQ291bnQg KCZNb25vdG9uaWNDb3VudCk7DQo+LSAgTW9ub3RvbmljUG9pbnRlclswXSArPSAoVUlOVDMyKSBN b25vdG9uaWNDb3VudDsNCj4tICBNb25vdG9uaWNQb2ludGVyWzFdICs9IChVSU5UMzIpIE1vbm90 b25pY0NvdW50Ow0KPi0gIE1vbm90b25pY1BvaW50ZXJbMl0gKz0gKFVJTlQzMikgTW9ub3Rvbmlj Q291bnQ7DQo+LSAgTW9ub3RvbmljUG9pbnRlclszXSArPSAoVUlOVDMyKSBNb25vdG9uaWNDb3Vu dDsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEdlbmVyYXRlIHVuaXF1ZSB1c2VyIElELg0KPi0N Cj4tICBAcGFyYW1bb3V0XSAgVXNlcklkICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIHVz ZXIgaWRlbnRpZmVyLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tR2VuZXJhdGVVc2VySWQgKA0KPi0g IE9VVCAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqVXNlcklkDQo+LSAg KQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPi0gIFVTRVJfUFJP RklMRV9FTlRSWSAgICAgICpVc2VyUHJvZmlsZTsNCj4tICBFRklfVVNFUl9JTkZPICAgICAgICAg ICAqVXNlckluZm87DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+LQ0KPi0g IC8vDQo+LSAgLy8gR2VuZXJhdGUgdW5pcXVlIHVzZXIgSUQNCj4tICAvLw0KPi0gIHdoaWxlIChU UlVFKSB7DQo+LSAgICBHZW5lcmF0ZUlkZW50aWZpZXIgKFVzZXJJZCk7DQo+LSAgICAvLw0KPi0g ICAgLy8gQ2hlY2sgd2hldGhlciBpdCdzIHVuaXF1ZSBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2Uu DQo+LSAgICAvLw0KPi0gICAgaWYgKG1Vc2VyUHJvZmlsZURiID09IE5VTEwpIHsNCj4tICAgICAg cmV0dXJuIDsNCj4tICAgIH0NCj4tDQo+LSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBtVXNl clByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW07IEluZGV4KyspIHsNCj4tICAgICAgVXNlclByb2Zp bGUgPSAoVVNFUl9QUk9GSUxFX0VOVFJZICopIChtVXNlclByb2ZpbGVEYi0NCj4+VXNlclByb2Zp bGVbSW5kZXhdKTsNCj4tICAgICAgVXNlckluZm8gICAgPSBOVUxMOw0KPi0gICAgICBTdGF0dXMg ICAgICA9IEZpbmRVc2VySW5mb0J5VHlwZSAoVXNlclByb2ZpbGUsICZVc2VySW5mbywNCj5FRklf VVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JEKTsNCj4tICAgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPi0gICAgICAgIGNvbnRpbnVlOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICBpZiAo Q29tcGFyZU1lbSAoKFVJTlQ4ICopIChVc2VySW5mbyArIDEpLCBVc2VySWQsIHNpemVvZg0KPihF RklfVVNFUl9JTkZPX0lERU5USUZJRVIpKSA9PSAwKSB7DQo+LSAgICAgICAgYnJlYWs7DQo+LSAg ICAgIH0NCj4tICAgIH0NCj4tDQo+LSAgICBpZiAoSW5kZXggPT0gbVVzZXJQcm9maWxlRGItPlVz ZXJQcm9maWxlTnVtKSB7DQo+LSAgICAgIHJldHVybiA7DQo+LSAgICB9DQo+LSAgfQ0KPi19DQo+ LQ0KPi0NCj4tLyoqDQo+LSAgRXhwYW5kIHVzZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4tDQo+LSAg QHJldHZhbCBUUlVFICAgICBTdWNjZXNzIHRvIGV4cGFuZCB1c2VyIHByb2ZpbGUgZGF0YWJhc2Uu DQo+LSAgQHJldHZhbCBGQUxTRSAgICBGYWlsIHRvIGV4cGFuZCB1c2VyIHByb2ZpbGUgZGF0YWJh c2UuDQo+LQ0KPi0qKi8NCj4tQk9PTEVBTg0KPi1FeHBhbmRVc2VybVVzZXJQcm9maWxlRGIgKA0K Pi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBVSU5UTiAgICAgICAgICAgICAgIE1heE51bTsNCj4t ICBVU0VSX1BST0ZJTEVfREIgICAgICpOZXdEYXRhQmFzZTsNCj4tDQo+LSAgLy8NCj4tICAvLyBD cmVhdGUgbmV3IHVzZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4tICAvLw0KPi0gIGlmIChtVXNlclBy b2ZpbGVEYiA9PSBOVUxMKSB7DQo+LSAgICBNYXhOdW0gPSBVU0VSX05VTUJFUl9JTkM7DQo+LSAg fSBlbHNlIHsNCj4tICAgIE1heE51bSA9IG1Vc2VyUHJvZmlsZURiLT5NYXhQcm9maWxlTnVtICsg VVNFUl9OVU1CRVJfSU5DOw0KPi0gIH0NCj4tDQo+LSAgTmV3RGF0YUJhc2UgPSBBbGxvY2F0ZVpl cm9Qb29sICgNCj4tICAgICAgICAgICAgICAgICAgc2l6ZW9mIChVU0VSX1BST0ZJTEVfREIpIC0g c2l6ZW9mIChFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSkgKw0KPi0gICAgICAgICAgICAgICAgICBN YXhOdW0gKiBzaXplb2YgKEVGSV9VU0VSX1BST0ZJTEVfSEFORExFKQ0KPi0gICAgICAgICAgICAg ICAgICApOw0KPi0gIGlmIChOZXdEYXRhQmFzZSA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRkFM U0U7DQo+LSAgfQ0KPi0NCj4tICBOZXdEYXRhQmFzZS0+TWF4UHJvZmlsZU51bSA9IE1heE51bTsN Cj4tDQo+LSAgLy8NCj4tICAvLyBDb3B5IG9sZCB1c2VyIHByb2ZpbGUgZGF0YWJhc2UgdmFsdWUN Cj4tICAvLw0KPi0gIGlmIChtVXNlclByb2ZpbGVEYiA9PSBOVUxMKSB7DQo+LSAgICBOZXdEYXRh QmFzZS0+VXNlclByb2ZpbGVOdW0gPSAwOw0KPi0gIH0gZWxzZSB7DQo+LSAgICBOZXdEYXRhQmFz ZS0+VXNlclByb2ZpbGVOdW0gPSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW07DQo+LSAg ICBDb3B5TWVtICgNCj4tICAgICAgTmV3RGF0YUJhc2UtPlVzZXJQcm9maWxlLA0KPi0gICAgICBt VXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGUsDQo+LSAgICAgIE5ld0RhdGFCYXNlLT5Vc2VyUHJv ZmlsZU51bSAqIHNpemVvZiAoRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUpDQo+LSAgICAgICk7DQo+ LSAgICBGcmVlUG9vbCAobVVzZXJQcm9maWxlRGIpOw0KPi0gIH0NCj4tDQo+LSAgbVVzZXJQcm9m aWxlRGIgPSBOZXdEYXRhQmFzZTsNCj4tICByZXR1cm4gVFJVRTsNCj4tfQ0KPi0NCj4tDQo+LS8q Kg0KPi0gIEV4cGFuZCB1c2VyIHByb2ZpbGUNCj4tDQo+LSAgQHBhcmFtW2luXSAgVXNlciAgICAg ICAgICAgICAgICAgICAgUG9pbnRzIHRvIHVzZXIgcHJvZmlsZS4NCj4tICBAcGFyYW1baW5dICBF eHBhbmRTaXplICAgICAgICAgICAgICBUaGUgc2l6ZSBvZiB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0g IEByZXR2YWwgVFJVRSAgICAgU3VjY2VzcyB0byBleHBhbmQgdXNlciBwcm9maWxlIHNpemUuDQo+ LSAgQHJldHZhbCBGQUxTRSAgICBGYWlsIHRvIGV4cGFuZCB1c2VyIHByb2ZpbGUgc2l6ZS4NCj4t DQo+LSoqLw0KPi1CT09MRUFODQo+LUV4cGFuZFVzZXJQcm9maWxlICgNCj4tICBJTiBVU0VSX1BS T0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAgKlVzZXIsDQo+LSAgSU4gVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZFNpemUNCj4tICApDQo+ LXsNCj4tICBVSU5UOCAqSW5mbzsNCj4tICBVSU5UTiBJbmZvU2l6ZUluYzsNCj4tDQo+LSAgLy8N Cj4tICAvLyBBbGxvY2F0ZSBuZXcgbWVtb3J5Lg0KPi0gIC8vDQo+LSAgSW5mb1NpemVJbmMgPSAx Mjg7DQo+LSAgVXNlci0+TWF4UHJvZmlsZVNpemUgKz0gKChFeHBhbmRTaXplICsgSW5mb1NpemVJ bmMgLSAxKSAvIEluZm9TaXplSW5jKSAqDQo+SW5mb1NpemVJbmM7DQo+LSAgSW5mbyA9IEFsbG9j YXRlWmVyb1Bvb2wgKFVzZXItPk1heFByb2ZpbGVTaXplKTsNCj4tICBpZiAoSW5mbyA9PSBOVUxM KSB7DQo+LSAgICByZXR1cm4gRkFMU0U7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENvcHkg ZXhpc3QgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBpZiAoVXNlci0+VXNlclByb2ZpbGVTaXpl ID4gMCkgew0KPi0gICAgQ29weU1lbSAoSW5mbywgVXNlci0+UHJvZmlsZUluZm8sIFVzZXItPlVz ZXJQcm9maWxlU2l6ZSk7DQo+LSAgICBGcmVlUG9vbCAoVXNlci0+UHJvZmlsZUluZm8pOw0KPi0g IH0NCj4tDQo+LSAgVXNlci0+UHJvZmlsZUluZm8gPSBJbmZvOw0KPi0gIHJldHVybiBUUlVFOw0K Pi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgU2F2ZSB0aGUgdXNlciBwcm9maWxlIHRvIG5vbi12b2xh dGlsZSBtZW1vcnksIG9yIGRlbGV0ZSBpdCBmcm9tIG5vbi12b2xhdGlsZQ0KPm1lbW9yeS4NCj4t DQo+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgIFBvaW50IHRvIHRoZSB1c2VyIHByb2ZpbGUN Cj4tICBAcGFyYW1baW5dICBEZWxldGUgICAgICAgSWYgVFJVRSwgZGVsZXRlIHRoZSBmb3VuZCB1 c2VyIHByb2ZpbGUuDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIEZBTFNFLCBzYXZl IHRoZSB1c2VyIHByb2ZpbGUuDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIFNhdmUgb3Ig ZGVsZXRlIHVzZXIgcHJvZmlsZSBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBPdGhlcnMgICAg ICAgICAgIEZhaWwgdG8gY2hhbmdlIHRoZSBwcm9maWxlLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFU VVMNCj4tU2F2ZU52VXNlclByb2ZpbGUgKA0KPi0gIElOICBVU0VSX1BST0ZJTEVfRU5UUlkgICAg ICAgICAgICAgICAgICAgICAgICAqVXNlciwNCj4tICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRGVsZXRlDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAg U3RhdHVzOw0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHVzZXIgcHJvZmlsZSBlbnRyeS4NCj4t ICAvLw0KPi0gIFN0YXR1cyA9IEZpbmRVc2VyUHJvZmlsZSAoJlVzZXIsIEZBTFNFLCBOVUxMKTsN Cj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0g IH0NCj4tDQo+LSAgLy8NCj4tICAvLyBTYXZlIHRoZSB1c2VyIHByb2ZpbGUgdG8gbm9uLXZvbGF0 aWxlIG1lbW9yeS4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUgKA0KPi0g ICAgICAgICAgICAgICAgICBVc2VyLT5Vc2VyVmFyTmFtZSwNCj4tICAgICAgICAgICAgICAgICAg JmdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgRUZJX1ZBUklB QkxFX05PTl9WT0xBVElMRSB8DQo+RUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUywNCj4t ICAgICAgICAgICAgICAgICAgRGVsZXRlID8gMCA6IFVzZXItPlVzZXJQcm9maWxlU2l6ZSwNCj4t ICAgICAgICAgICAgICAgICAgVXNlci0+UHJvZmlsZUluZm8NCj4tICAgICAgICAgICAgICAgICAg KTsNCj4tICByZXR1cm4gU3RhdHVzOw0KPi19DQo+LQ0KPi0vKioNCj4tICBBZGQgb25lIG5ldyB1 c2VyIGluZm8gaW50byB0aGUgdXNlcidzIHByb2ZpbGUuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICBV c2VyICAgICAgICBwb2ludCB0byB0aGUgdXNlciBwcm9maWxlDQo+LSAgQHBhcmFtW2luXSAgIElu Zm8gICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiBwYXlsb2FkLg0KPi0gIEBw YXJhbVtpbl0gICBJbmZvU2l6ZSAgICBUaGUgc2l6ZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbiBw YXlsb2FkLCBpbiBieXRlcy4NCj4tICBAcGFyYW1bb3V0XSAgVXNlckluZm8gICAgUG9pbnQgdG8g dGhlIG5ldyBpbmZvIGluIHVzZXIgcHJvZmlsZQ0KPi0gIEBwYXJhbVtpbl0gICBTYXZlICAgICAg ICBJZiBUUlVFLCBzYXZlIHRoZSBwcm9maWxlIHRvIE5WIGZsYXNoLg0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICBJZiBGQUxTRSwgZG9uJ3QgbmVlZCB0byBzYXZlIHRoZSBwcm9maWxlIHRv IE5WIGZsYXNoLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgQWRkIHVzZXIgaW5m byB0byB1c2VyIHByb2ZpbGUgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAg ICAgICBGYWlsIHRvIGFkZCB1c2VyIGluZm8gdG8gdXNlciBwcm9maWxlLg0KPi0NCj4tKiovDQo+ LUVGSV9TVEFUVVMNCj4tQWRkVXNlckluZm8gKA0KPi0gIElOICBVU0VSX1BST0ZJTEVfRU5UUlkg ICAgICAgICAgICAgICAgICAgICAgICAqVXNlciwNCj4tICBJTiAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKkluZm8sDQo+LSAgSU4gIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9TaXplLA0KPi0gIE9VVCBFRklfVVNFUl9JTkZP ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKlVzZXJJbmZvLCBPUFRJT05BTA0KPi0gIElO ICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlDQo+LSAgKQ0K Pi17DQo+LSAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPi0NCj4tICBpZiAoKEluZm8gPT0gTlVMTCkg fHwgKFVzZXIgPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHVzZXIgcHJvZmlsZSBoYW5kbGUuDQo+ LSAgLy8NCj4tICBTdGF0dXMgPSBGaW5kVXNlclByb2ZpbGUgKCZVc2VyLCBGQUxTRSwgTlVMTCk7 DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4t ICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgdXNlciBpbmZvcm1hdGlvbiBtZW1vcnkgc2l6 ZS4NCj4tICAvLw0KPi0gIGlmIChVc2VyLT5NYXhQcm9maWxlU2l6ZSAtIFVzZXItPlVzZXJQcm9m aWxlU2l6ZSA8IEFMSUdOX1ZBUklBQkxFDQo+KEluZm9TaXplKSkgew0KPi0gICAgaWYgKCFFeHBh bmRVc2VyUHJvZmlsZSAoVXNlciwgQUxJR05fVkFSSUFCTEUgKEluZm9TaXplKSkpIHsNCj4tICAg ICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAg Ly8NCj4tICAvLyBBZGQgbmV3IHVzZXIgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBDb3B5TWVt IChVc2VyLT5Qcm9maWxlSW5mbyArIFVzZXItPlVzZXJQcm9maWxlU2l6ZSwgSW5mbywgSW5mb1Np emUpOw0KPi0gIGlmIChVc2VySW5mbyAhPSBOVUxMKSB7DQo+LSAgICAqVXNlckluZm8gPSAoRUZJ X1VTRVJfSU5GTyAqKSAoVXNlci0+UHJvZmlsZUluZm8gKyBVc2VyLQ0KPj5Vc2VyUHJvZmlsZVNp emUpOw0KPi0gIH0NCj4tICBVc2VyLT5Vc2VyUHJvZmlsZVNpemUgKz0gQUxJR05fVkFSSUFCTEUg KEluZm9TaXplKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBTYXZlIHVzZXIgcHJvZmlsZSBpbmZvcm1h dGlvbi4NCj4tICAvLw0KPi0gIGlmIChTYXZlKSB7DQo+LSAgICBTdGF0dXMgPSBTYXZlTnZVc2Vy UHJvZmlsZSAoVXNlciwgRkFMU0UpOw0KPi0gIH0NCj4tDQo+LSAgcmV0dXJuIFN0YXR1czsNCj4t fQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEdldCB0aGUgdXNlciBpbmZvIGZyb20gdGhlIHNwZWNpZmll ZCB1c2VyIGluZm8gaGFuZGxlLg0KPi0NCj4tICBAcGFyYW1baW5dICAgICAgVXNlciAgICAgICAg ICAgIFBvaW50IHRvIHRoZSB1c2VyIHByb2ZpbGUuDQo+LSAgQHBhcmFtW2luXSAgICAgIFVzZXJJ bmZvICAgICAgICBQb2ludCB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQgdG8gZ2V0Lg0K Pi0gIEBwYXJhbVtvdXRdICAgICBJbmZvICAgICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byBh IGJ1ZmZlciBvZiBhdCBsZWFzdCAqSW5mb1NpemUNCj5ieXRlcy4NCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE9uIGV4aXQsIGhvbGRzIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0K Pi0gIEBwYXJhbVtpbiwgb3V0XSBJbmZvU2l6ZSAgICAgICAgT24gZW50cnksIHBvaW50cyB0byB0 aGUgc2l6ZSBvZiBJbmZvLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24g cmV0dXJuLCBwb2ludHMgdG8gdGhlIHNpemUgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb24uDQo+LSAg QHBhcmFtW2luXSAgICAgIENoa1JpZ2h0ICAgICAgICBJZiBUUlVFLCBjaGVjayB0aGUgdXNlciBp bmZvIGF0dHJpYnV0ZS4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIEZB TFNFLCBkb24ndCBjaGVjayB0aGUgdXNlciBpbmZvIGF0dHJpYnV0ZS4NCj4tDQo+LQ0KPi0gIEBy ZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAgVGhlIGluZm9ybWF0aW9uIGNhbm5vdCBiZSBh Y2Nlc3NlZCBieSB0aGUNCj5jdXJyZW50IHVzZXIuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgICBJbmZvU2l6ZSBpcyBOVUxMIG9yIFVzZXJJbmZvIGlzIE5VTEwuDQo+LSAgQHJl dHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHNwZWNpZmll ZCBieQ0KPipJbmZvU2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGRhdGEuIFRoZSBhY3R1YWwgc2l6ZSByZXF1 aXJlZCBpcyByZXR1cm5lZCBpbg0KPipJbmZvU2l6ZS4NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICAgIEluZm9ybWF0aW9uIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4tDQo+LSoq Lw0KPi1FRklfU1RBVFVTDQo+LUdldFVzZXJJbmZvICgNCj4tICBJTiAgICAgICAgVVNFUl9QUk9G SUxFX0VOVFJZICAgICAgICAgICAgICAgICAgKlVzZXIsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VS X0lORk8gICAgICAgICAgICAgICAgICAgICAgICpVc2VySW5mbywNCj4tICBPVVQgICAgICAgRUZJ X1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgKkluZm8sDQo+LSAgSU4gT1VUICAgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJbmZvU2l6ZSwNCj4tICBJTiAgICAg ICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hrUmlnaHQNCj4tICApDQo+ LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LQ0KPi0gIGlmICgoSW5mb1NpemUgPT0gTlVM TCkgfHwgKFVzZXJJbmZvID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgaWYgKCgqSW5mb1NpemUgIT0gMCkgJiYgKEluZm8gPT0g TlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0N Cj4tICAvLw0KPi0gIC8vIEZpbmQgdGhlIHVzZXIgaW5mb3JtYXRpb24gdG8gZ2V0Lg0KPi0gIC8v DQo+LSAgU3RhdHVzID0gRmluZFVzZXJJbmZvIChVc2VyLCAmVXNlckluZm8sIEZBTFNFLCBOVUxM KTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0K Pi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayBpbmZvcm1hdGlvbiBhdHRyaWJ1dGVzLg0K Pi0gIC8vDQo+LSAgaWYgKENoa1JpZ2h0KSB7DQo+LSAgICBzd2l0Y2ggKFVzZXJJbmZvLT5JbmZv QXR0cmlicyAmIEVGSV9VU0VSX0lORk9fQUNDRVNTKSB7DQo+LSAgICBjYXNlIEVGSV9VU0VSX0lO Rk9fUFJJVkFURToNCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19QUk9URUNURUQ6DQo+LSAgICAg IGlmIChVc2VyICE9IG1DdXJyZW50VXNlcikgew0KPi0gICAgICAgIHJldHVybiBFRklfQUNDRVNT X0RFTklFRDsNCj4tICAgICAgfQ0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9V U0VSX0lORk9fUFVCTElDOg0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBkZWZhdWx0Og0KPi0g ICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gICAgICBicmVhazsNCj4tICAg IH0NCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IHVzZXIgaW5mb3JtYXRpb24uDQo+LSAg Ly8NCj4tICBpZiAoVXNlckluZm8tPkluZm9TaXplID4gKkluZm9TaXplKSB7DQo+LSAgICAqSW5m b1NpemUgPSBVc2VySW5mby0+SW5mb1NpemU7DQo+LSAgICByZXR1cm4gRUZJX0JVRkZFUl9UT09f U01BTEw7DQo+LSAgfQ0KPi0NCj4tICAqSW5mb1NpemUgPSBVc2VySW5mby0+SW5mb1NpemU7DQo+ LSAgaWYgKEluZm8gIT0gTlVMTCkgew0KPi0gICAgQ29weU1lbSAoSW5mbywgVXNlckluZm8sICpJ bmZvU2l6ZSk7DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+ LQ0KPi0vKioNCj4tICBEZWxldGUgdGhlIHNwZWNpZmllZCB1c2VyIGluZm9ybWF0aW9uIGZyb20g dXNlciBwcm9maWxlLg0KPi0NCj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICBQb2ludCB0byB0 aGUgdXNlciBwcm9maWxlLg0KPi0gIEBwYXJhbVtpbl0gIEluZm8gICAgICAgIFBvaW50IHRvIHRo ZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCB0byBkZWxldGUuDQo+LSAgQHBhcmFtW2luXSAgU2F2 ZSAgICAgICAgSWYgVFJVRSwgc2F2ZSB0aGUgcHJvZmlsZSB0byBOViBmbGFzaC4NCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICBJZiBGQUxTRSwgZG9uJ3QgbmVlZCB0byBzYXZlIHRoZSBwcm9m aWxlIHRvIE5WIGZsYXNoLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBEZWxldGUg dXNlciBpbmZvIGZyb20gdXNlciBwcm9maWxlIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIE90 aGVycyAgICAgICAgICBGYWlsIHRvIGRlbGV0ZSB1c2VyIGluZm8gZnJvbSB1c2VyIHByb2ZpbGUu DQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1EZWxVc2VySW5mbyAoDQo+LSAgSU4gIFVTRVJf UFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICpVc2VyLA0KPi0gIElOICBFRklf VVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSW5mbywNCj4tICBJTiAgQk9P TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZQ0KPi0gICkNCj4tew0K Pi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tICBVSU5UTiAgICAgICBPZmZzZXQ7DQo+LSAgVUlO VE4gICAgICAgTmV4dE9mZnNldDsNCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayB1c2VyIGluZm9y bWF0aW9uIGhhbmRsZS4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IEZpbmRVc2VySW5mbyAoVXNlciwg JkluZm8sIEZBTFNFLCAmT2Zmc2V0KTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgaWYgKEluZm8tPkluZm9UeXBlID09 IEVGSV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQpIHsNCj4tICAgIHJldHVybiBFRklfQUND RVNTX0RFTklFRDsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRGVsZXRlIHRoZSBzcGVjaWZp ZWQgdXNlciBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIE5leHRPZmZzZXQgPSBPZmZzZXQgKyBB TElHTl9WQVJJQUJMRSAoSW5mby0+SW5mb1NpemUpOw0KPi0gIFVzZXItPlVzZXJQcm9maWxlU2l6 ZSAtPSBBTElHTl9WQVJJQUJMRSAoSW5mby0+SW5mb1NpemUpOw0KPi0gIGlmIChPZmZzZXQgPCBV c2VyLT5Vc2VyUHJvZmlsZVNpemUpIHsNCj4tICAgIENvcHlNZW0gKFVzZXItPlByb2ZpbGVJbmZv ICsgT2Zmc2V0LCBVc2VyLT5Qcm9maWxlSW5mbyArIE5leHRPZmZzZXQsDQo+VXNlci0+VXNlclBy b2ZpbGVTaXplIC0gT2Zmc2V0KTsNCj4tICB9DQo+LQ0KPi0gIGlmIChTYXZlKSB7DQo+LSAgICBT dGF0dXMgPSBTYXZlTnZVc2VyUHJvZmlsZSAoVXNlciwgRkFMU0UpOw0KPi0gIH0NCj4tDQo+LSAg cmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEFkZCBvciB1cGRhdGUgdXNl ciBpbmZvcm1hdGlvbi4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAgIFVzZXIgICAgICAgICAgIFBv aW50IHRvIHRoZSB1c2VyIHByb2ZpbGUuDQo+LSAgQHBhcmFtW2luLCBvdXRdIFVzZXJJbmZvICAg ICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHVzZXIgaW5mb3JtYXRpb24gdG8NCj5tb2RpZnks DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIE5VTEwgdG8gYWRkIGEgbmV3 IFVzZXJJbmZvLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiByZXR1cm4s IHBvaW50cyB0byB0aGUgbW9kaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4NCj4tICBAcGFyYW1baW5d ICAgICAgSW5mbyAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBuZXcgdXNlciBpbmZvcm1hdGlvbi4N Cj4tICBAcGFyYW1baW5dICAgICAgSW5mb1NpemUgICAgICAgVGhlIHNpemUgb2YgSW5mbyxpbiBi eXRlcy4NCj4tDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFVzZXJJbmZvIGlz IE5VTEwgb3IgSW5mbyBpcyBOVUxMLg0KPi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAg ICBUaGUgcmVjb3JkIGlzIGV4Y2x1c2l2ZS4NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgVXNlciBpbmZvcm1hdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5DQo+Y2hhbmdlZC9hZGRlZC4N Cj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LU1vZGlmeVVzZXJJbmZvICgNCj4tICBJTiAgICAg ICAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAgICAgICAgICAgKlVzZXIsDQo+LSAgSU4gT1VU ICAgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAgICoqVXNlckluZm8sDQo+LSAg SU4gQ09OU1QgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAgICpJbmZvLA0KPi0g IElOICAgICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvU2l6ZQ0K Pi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPi0gIFVJTlROICAgICAgICAg UGF5bG9hZExlbjsNCj4tICBFRklfVVNFUl9JTkZPICpPbGRJbmZvOw0KPi0NCj4tICBpZiAoKFVz ZXJJbmZvID09IE5VTEwpIHx8IChJbmZvID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgaWYgKEluZm9TaXplIDwgc2l6ZW9mIChF RklfVVNFUl9JTkZPKSB8fCBJbmZvU2l6ZSAhPSBJbmZvLT5JbmZvU2l6ZSkgew0KPi0gICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hl Y2sgdXNlciBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIGlmIChJbmZvLT5JbmZvVHlwZSA9PSBF RklfVVNFUl9JTkZPX0lERU5USUZJRVJfUkVDT1JEKSB7DQo+LSAgICByZXR1cm4gRUZJX0FDQ0VT U19ERU5JRUQ7DQo+LSAgfQ0KPi0NCj4tICBpZiAoIUNoZWNrVXNlckluZm8gKEluZm8pKSB7DQo+ LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LQ0KPi0gIGlm ICgqVXNlckluZm8gPT0gTlVMTCkgew0KPi0gICAgLy8NCj4tICAgIC8vIEFkZCBuZXcgdXNlciBp bmZvcm1hdGlvbi4NCj4tICAgIC8vDQo+LSAgICBPbGRJbmZvID0gTlVMTDsNCj4tICAgIGRvIHsN Cj4tICAgICAgU3RhdHVzID0gRmluZFVzZXJJbmZvQnlUeXBlIChVc2VyLCAmT2xkSW5mbywgSW5m by0+SW5mb1R5cGUpOw0KPi0gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAg ICAgYnJlYWs7DQo+LSAgICAgIH0NCj4tICAgICAgQVNTRVJUIChPbGRJbmZvICE9IE5VTEwpOw0K Pi0NCj4tICAgICAgaWYgKCgoT2xkSW5mby0+SW5mb0F0dHJpYnMgJiBFRklfVVNFUl9JTkZPX0VY Q0xVU0lWRSkgIT0gMCkgfHwNCj4tICAgICAgICAgICAoKEluZm8tPkluZm9BdHRyaWJzICYgRUZJ X1VTRVJfSU5GT19FWENMVVNJVkUpICE9IDApKSB7DQo+LSAgICAgICAgLy8NCj4tICAgICAgICAv LyAgU2FtZSB0eXBlIGNhbiBub3QgY28tZXhpc3QgZm9yIGV4Y2x1c2l2ZSBpbmZvcm1hdGlvbi4N Cj4tICAgICAgICAvLw0KPi0gICAgICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4tICAg ICAgfQ0KPi0NCj4tICAgICAgLy8NCj4tICAgICAgLy8gQ2hlY2sgd2hldGhlciBpdCBleGlzdHMg aW4gREIuDQo+LSAgICAgIC8vDQo+LSAgICAgIGlmIChJbmZvLT5JbmZvU2l6ZSAhPSBPbGRJbmZv LT5JbmZvU2l6ZSkgew0KPi0gICAgICAgIGNvbnRpbnVlOw0KPi0gICAgICB9DQo+LQ0KPi0gICAg ICBpZiAoIUNvbXBhcmVHdWlkICgmT2xkSW5mby0+Q3JlZGVudGlhbCwgJkluZm8tPkNyZWRlbnRp YWwpKSB7DQo+LSAgICAgICAgY29udGludWU7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIFBheWxv YWRMZW4gPSBJbmZvLT5JbmZvU2l6ZSAtIHNpemVvZiAoRUZJX1VTRVJfSU5GTyk7DQo+LSAgICAg IGlmIChQYXlsb2FkTGVuID09IDApIHsNCj4tICAgICAgICBjb250aW51ZTsNCj4tICAgICAgfQ0K Pi0NCj4tICAgICAgaWYgKENvbXBhcmVNZW0gKChVSU5UOCAqKShPbGRJbmZvICsgMSksIChVSU5U OCAqKShJbmZvICsgMSksDQo+UGF5bG9hZExlbikgIT0gMCkgew0KPi0gICAgICAgIGNvbnRpbnVl Ow0KPi0gICAgICB9DQo+LQ0KPi0gICAgICAvLw0KPi0gICAgICAvLyBZZXMuIFRoZSBuZXcgaW5m byBpcyBhcyBzYW1lIGFzIHRoZSBvbmUgaW4gcHJvZmlsZS4NCj4tICAgICAgLy8NCj4tICAgICAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgfSB3aGlsZSAoIUVGSV9FUlJPUiAoU3RhdHVzKSk7 DQo+LQ0KPi0gICAgU3RhdHVzID0gQWRkVXNlckluZm8gKFVzZXIsIChVSU5UOCAqKSBJbmZvLCBJ bmZvU2l6ZSwgVXNlckluZm8sIFRSVUUpOw0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gTW9kaWZ5IGV4aXN0aW5nIHVzZXIgaW5mb3JtYXRpb24uDQo+LSAg Ly8NCj4tICBPbGRJbmZvID0gKlVzZXJJbmZvOw0KPi0gIGlmIChPbGRJbmZvLT5JbmZvVHlwZSAh PSBJbmZvLT5JbmZvVHlwZSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4tICB9DQo+LQ0KPi0gIGlmICgoKEluZm8tPkluZm9BdHRyaWJzICYgRUZJX1VTRVJfSU5GT19F WENMVVNJVkUpICE9IDApICYmDQo+LSAgICAgICAoT2xkSW5mby0+SW5mb0F0dHJpYnMgJiBFRklf VVNFUl9JTkZPX0VYQ0xVU0lWRSkgPT0gMCkgew0KPi0gICAgLy8NCj4tICAgIC8vIFRyeSB0byBh ZGQgZXhjbHVzaXZlIGF0dHJpYiBpbiBuZXcgaW5mby4NCj4tICAgIC8vIENoZWNrIHdoZXRoZXIg dGhlcmUgaXMgYW5vdGhlciBpbmZvcm1hdGlvbiB3aXRoIHRoZSBzYW1lIHR5cGUgaW4NCj5wcm9m aWxlLg0KPi0gICAgLy8NCj4tICAgIE9sZEluZm8gPSBOVUxMOw0KPi0gICAgZG8gew0KPi0gICAg ICBTdGF0dXMgPSBGaW5kVXNlckluZm9CeVR5cGUgKFVzZXIsICZPbGRJbmZvLCBJbmZvLT5JbmZv VHlwZSk7DQo+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgICBicmVh azsNCj4tICAgICAgfQ0KPi0gICAgICBpZiAoT2xkSW5mbyAhPSAqVXNlckluZm8pIHsNCj4tICAg ICAgICAvLw0KPi0gICAgICAgIC8vIFRoZXJlIGlzIGFub3RoZXIgaW5mb3JtYXRpb24gd2l0aCB0 aGUgc2FtZSB0eXBlIGluIHByb2ZpbGUuDQo+LSAgICAgICAgLy8gVGhlcmVmb3JlLCBjYW4ndCBt b2RpZnkgZXhpc3RpbmcgdXNlciBpbmZvcm1hdGlvbiB0byBhZGQgZXhjbHVzaXZlDQo+YXR0cmli dXRlLg0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEOw0K Pi0gICAgICB9DQo+LSAgICB9IHdoaWxlIChUUlVFKTsNCj4tICB9DQo+LQ0KPi0gIFN0YXR1cyA9 IERlbFVzZXJJbmZvIChVc2VyLCAqVXNlckluZm8sIEZBTFNFKTsNCj4tICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgcmV0dXJu IEFkZFVzZXJJbmZvIChVc2VyLCAoVUlOVDggKikgSW5mbywgSW5mb1NpemUsIFVzZXJJbmZvLCBU UlVFKTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERlbGV0ZSB0aGUgdXNlciBwcm9maWxlIGZy b20gbm9uLXZvbGF0aWxlIG1lbW9yeSBhbmQgZGF0YWJhc2UuDQo+LQ0KPi0gIEBwYXJhbVtpbl0g IFVzZXIgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBwcm9maWxlLg0KPi0NCj4tICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgRGVsZXRlIHVzZXIgZnJvbSB0aGUgdXNlciBwcm9maWxl IHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgRmFpbCB0byBkZWxl dGUgdXNlciBmcm9tIHVzZXIgcHJvZmlsZQ0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRGVs VXNlclByb2ZpbGUgKA0KPi0gIElOICBVU0VSX1BST0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAg ICAgICAgICAqVXNlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgU3RhdHVz Ow0KPi0gIFVJTlROICAgICAgICAgICAgICAgSW5kZXg7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hl Y2sgd2hldGhlciBpdCBpcyBpbiB0aGUgdXNlciBwcm9maWxlIGRhdGFiYXNlLg0KPi0gIC8vDQo+ LSAgU3RhdHVzID0gRmluZFVzZXJQcm9maWxlICgmVXNlciwgRkFMU0UsICZJbmRleCk7DQo+LSAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgd2hldGhlciBpdCBpcyB0aGUg Y3VycmVudCB1c2VyLg0KPi0gIC8vDQo+LSAgaWYgKFVzZXIgPT0gbUN1cnJlbnRVc2VyKSB7DQo+ LSAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8v IERlbGV0ZSB1c2VyIHByb2ZpbGUgZnJvbSB0aGUgbm9uLXZvbGF0aWxlIG1lbW9yeS4NCj4tICAv Lw0KPi0gIFN0YXR1cyAgICA9IFNhdmVOdlVzZXJQcm9maWxlIChtVXNlclByb2ZpbGVEYi0NCj4+ VXNlclByb2ZpbGVbbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlTnVtIC0gMV0sIFRSVUUpOw0K Pi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIHJldHVybiBTdGF0dXM7DQo+LSAg fQ0KPi0gIG1Vc2VyUHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bS0tOw0KPi0NCj4tICAvLw0KPi0g IC8vIE1vZGlmeSB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+LSAgLy8NCj4tICBpZiAoSW5kZXgg IT0gbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlTnVtKSB7DQo+LSAgICBtVXNlclByb2ZpbGVE Yi0+VXNlclByb2ZpbGVbSW5kZXhdID0gbVVzZXJQcm9maWxlRGItDQo+PlVzZXJQcm9maWxlW21V c2VyUHJvZmlsZURiLT5Vc2VyUHJvZmlsZU51bV07DQo+LSAgICBDb3B5TWVtICgNCj4tICAgICAg KChVU0VSX1BST0ZJTEVfRU5UUlkgKikgbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlW0luZGV4 XSktDQo+PlVzZXJWYXJOYW1lLA0KPi0gICAgICBVc2VyLT5Vc2VyVmFyTmFtZSwNCj4tICAgICAg c2l6ZW9mIChVc2VyLT5Vc2VyVmFyTmFtZSkNCj4tICAgICAgKTsNCj4tICAgIFN0YXR1cyA9IFNh dmVOdlVzZXJQcm9maWxlIChtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVbSW5kZXhdLCBGQUxT RSk7DQo+LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgIHJldHVybiBTdGF0 dXM7DQo+LSAgICB9DQo+LSAgfQ0KPi0gIC8vDQo+LSAgLy8gRGVsZXRlIHVzZXIgcHJvZmlsZSBp bmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIGlmIChVc2VyLT5Qcm9maWxlSW5mbyAhPSBOVUxMKSB7 DQo+LSAgICBGcmVlUG9vbCAoVXNlci0+UHJvZmlsZUluZm8pOw0KPi0gIH0NCj4tDQo+LSAgRnJl ZVBvb2wgKFVzZXIpOw0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8q Kg0KPi0gIEFkZCB1c2VyIHByb2ZpbGUgdG8gdXNlciBwcm9maWxlIGRhdGFiYXNlLg0KPi0NCj4t ICBAcGFyYW1bb3V0XSAgIFVzZXJQcm9maWxlICAgUG9pbnQgdG8gdGhlIG5ld2x5IGFkZGVkIHVz ZXIgcHJvZmlsZS4NCj4tICBAcGFyYW1baW5dICAgIFByb2ZpbGVTaXplICAgVGhlIHNpemUgb2Yg dGhlIHVzZXIgcHJvZmlsZS4NCj4tICBAcGFyYW1baW5dICAgIFByb2ZpbGVJbmZvICAgUG9pbnQg dG8gdGhlIHVzZXIgcHJvZmllIGRhdGEuDQo+LSAgQHBhcmFtW2luXSAgICBTYXZlICAgICAgICAg IElmIFRSVUUsIHNhdmUgdGhlIG5ldyBhZGRlZCBwcm9maWxlIHRvIE5WIGZsYXNoLg0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBGQUxTRSwgZG9uJ3Qgc2F2ZSB0aGUgcHJvZmls ZSB0byBOViBmbGFzaC4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgIEFkZCB1 c2VyIHByb2ZpbGUgdG8gdXNlciBwcm9maWxlIGRhdGFiYXNlDQo+c3VjY2Vzc2Z1bGx5Lg0KPi0g IEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICBGYWlsIHRvIGFkZCB1c2VyIHByb2ZpbGUgdG8g dXNlciBwcm9maWxlIGRhdGFiYXNlLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tQWRkVXNl clByb2ZpbGUgKA0KPi0gICAgIE9VVCAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAgICAgICAg ICAgICAqKlVzZXJQcm9maWxlLCBPUFRJT05BTA0KPi0gIElOICAgICAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxlU2l6ZSwNCj4tICBJTiAgICAgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlByb2ZpbGVJbmZvLA0KPi0gIElOICAgICAg Qk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlDQo+LSAgKQ0KPi17DQo+ LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPi0gIFVTRVJfUFJPRklMRV9FTlRS WSAgICAgICpVc2VyOw0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHRoZSBkYXRhIGZvcm1hdCB0 byBiZSBhZGRlZC4NCj4tICAvLw0KPi0gIGlmICghQ2hlY2tQcm9maWxlSW5mbyAoUHJvZmlsZUlu Zm8sIFByb2ZpbGVTaXplKSkgew0KPi0gICAgcmV0dXJuIEVGSV9TRUNVUklUWV9WSU9MQVRJT047 DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENyZWF0ZSB1c2VyIHByb2ZpbGUgZW50cnkuDQo+ LSAgLy8NCj4tICBVc2VyID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVU0VSX1BST0ZJTEVf RU5UUlkpKTsNCj4tICBpZiAoVXNlciA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQo+LSAgfQ0KPi0gIC8vDQo+LSAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUg dXNlciBwcm9maWxlIGRhdGFiYXNlLg0KPi0gIC8vDQo+LSAgaWYgKG1Vc2VyUHJvZmlsZURiLT5V c2VyUHJvZmlsZU51bSA9PSBtVXNlclByb2ZpbGVEYi0+TWF4UHJvZmlsZU51bSkNCj57DQo+LSAg ICBpZiAoIUV4cGFuZFVzZXJtVXNlclByb2ZpbGVEYiAoKSkgew0KPi0gICAgICBGcmVlUG9vbCAo VXNlcik7DQo+LSAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICAgIH0NCj4t ICB9DQo+LQ0KPi0gIFVuaWNvZGVTUHJpbnQgKA0KPi0gICAgVXNlci0+VXNlclZhck5hbWUsDQo+ LSAgICBzaXplb2YgKFVzZXItPlVzZXJWYXJOYW1lKSwNCj4tICAgIEwiVXNlciUwNHgiLA0KPi0g ICAgbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlTnVtDQo+LSAgICApOw0KPi0gIFVzZXItPlVz ZXJQcm9maWxlU2l6ZSA9IDA7DQo+LSAgVXNlci0+TWF4UHJvZmlsZVNpemUgID0gMDsNCj4tICBV c2VyLT5Qcm9maWxlSW5mbyAgICAgPSBOVUxMOw0KPi0gIG1Vc2VyUHJvZmlsZURiLT5Vc2VyUHJv ZmlsZVttVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW1dID0NCj4oRUZJX1VTRVJfUFJPRklM RV9IQU5ETEUpIFVzZXI7DQo+LSAgbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlTnVtKys7DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gQWRkIHVzZXIgcHJvZmlsZSBpbmZvcm1hdGlvbi4NCj4tICAvLw0K Pi0gIFN0YXR1cyA9IEFkZFVzZXJJbmZvIChVc2VyLCBQcm9maWxlSW5mbywgUHJvZmlsZVNpemUs IE5VTEwsIFNhdmUpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIERlbFVz ZXJQcm9maWxlIChVc2VyKTsNCj4tICAgIHJldHVybiBTdGF0dXM7DQo+LSAgfQ0KPi0gIC8vDQo+ LSAgLy8gU2V0IG5ldyB1c2VyIHByb2ZpbGUgaGFuZGxlLg0KPi0gIC8vDQo+LSAgaWYgKFVzZXJQ cm9maWxlICE9IE5VTEwpIHsNCj4tICAgICpVc2VyUHJvZmlsZSA9IFVzZXI7DQo+LSAgfQ0KPi0N Cj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBUaGlzIGZ1 bmN0aW9uIGNyZWF0ZXMgYSBuZXcgdXNlciBwcm9maWxlIHdpdGggb25seSBhIG5ldyB1c2VyIGlk ZW50aWZpZXINCj4tICBhdHRhY2hlZCBhbmQgcmV0dXJucyBpdHMgaGFuZGxlLiBUaGUgdXNlciBw cm9maWxlIGlzIG5vbi12b2xhdGlsZSwgYnV0IHRoZQ0KPi0gIGhhbmRsZSBVc2VyIGNhbiBjaGFu Z2UgYWNyb3NzIHJlYm9vdHMuDQo+LQ0KPi0gIEBwYXJhbVtvdXRdICBVc2VyICAgICAgICAgICAg ICAgSGFuZGxlIG9mIGEgbmV3IHVzZXIgcHJvZmlsZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLg0K Pi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICAgRmFpbCB0byBjcmVhdGUgdXNlciBw cm9maWxlDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1DcmVhdGVVc2VyUHJvZmlsZSAoDQo+ LSAgT1VUIFVTRVJfUFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICoqVXNlcg0K Pi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPi0gIEVGSV9VU0VSX0lORk8g KlVzZXJJbmZvOw0KPi0NCj4tICBpZiAoVXNlciA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRUZJ X0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tICAvLw0KPi0gIC8vIEdlbmVyYXRlIHVzZXIg aWQgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBVc2VySW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wg KHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBzaXplb2YNCj4oRUZJX1VTRVJfSU5GT19JREVOVElG SUVSKSk7DQo+LSAgaWYgKFVzZXJJbmZvID09IE5VTEwpIHsNCj4tICAgIHJldHVybiBFRklfT1VU X09GX1JFU09VUkNFUzsNCj4tICB9DQo+LQ0KPi0gIFVzZXJJbmZvLT5JbmZvVHlwZSAgICA9IEVG SV9VU0VSX0lORk9fSURFTlRJRklFUl9SRUNPUkQ7DQo+LSAgVXNlckluZm8tPkluZm9TaXplICAg ID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZg0KPihFRklfVVNFUl9JTkZPX0lERU5U SUZJRVIpOw0KPi0gIFVzZXJJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFH RV9QTEFURk9STV9OViB8DQo+RUZJX1VTRVJfSU5GT19QVUJMSUMgfCBFRklfVVNFUl9JTkZPX0VY Q0xVU0lWRTsNCj4tICBHZW5lcmF0ZVVzZXJJZCAoKFVJTlQ4ICopIChVc2VySW5mbyArIDEpKTsN Cj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgdXNlciBwcm9maWxlIHRvIHRoZSB1c2VyIHByb2ZpbGUg ZGF0YWJhc2UuDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBBZGRVc2VyUHJvZmlsZSAoVXNlciwgVXNl ckluZm8tPkluZm9TaXplLCAoVUlOVDggKikgVXNlckluZm8sDQo+VFJVRSk7DQo+LSAgRnJlZVBv b2wgKFVzZXJJbmZvKTsNCj4tICByZXR1cm4gU3RhdHVzOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+ LSAgQWRkIGEgZGVmYXVsdCB1c2VyIHByb2ZpbGUgdG8gdXNlciBwcm9maWxlIGRhdGFiYXNlLg0K Pi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIEEgZGVmYXVsdCB1c2VyIHBy b2ZpbGUgaXMgYWRkZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAg ICAgICAgICAgRmFpbCB0byBhZGQgYSBkZWZhdWx0IHVzZXIgcHJvZmlsZQ0KPi0NCj4tKiovDQo+ LUVGSV9TVEFUVVMNCj4tQWRkRGVmYXVsdFVzZXJQcm9maWxlICgNCj4tICBWT0lEDQo+LSAgKQ0K Pi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPi0gIFVTRVJf UFJPRklMRV9FTlRSWSAgICAgICAgICAgICpVc2VyOw0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAg ICAgICAgICAgICpJbmZvOw0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICpOZXdJ bmZvOw0KPi0gIEVGSV9VU0VSX0lORk9fQ1JFQVRFX0RBVEUgICAgIENyZWF0ZURhdGU7DQo+LSAg RUZJX1VTRVJfSU5GT19VU0FHRV9DT1VOVCAgICAgVXNhZ2VDb3VudDsNCj4tICBFRklfVVNFUl9J TkZPX0FDQ0VTU19DT05UUk9MICAqQWNjZXNzOw0KPi0gIEVGSV9VU0VSX0lORk9fSURFTlRJVFlf UE9MSUNZICpQb2xpY3k7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ3JlYXRlIGEgdXNlciBwcm9maWxl Lg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gQ3JlYXRlVXNlclByb2ZpbGUgKCZVc2VyKTsNCj4tICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4t DQo+LSAgLy8NCj4tICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciB0byBhZGQgYWxsIGRlZmF1bHQgdXNl ciBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIEluZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChzaXpl b2YgKEVGSV9VU0VSX0lORk8pICsgSU5GT19QQVlMT0FEX1NJWkUpOw0KPi0gIGlmIChJbmZvID09 IE5VTEwpIHsNCj4tICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gQWRkIHVzZXIgbmFtZS4NCj4tICAvLw0KPi0gIEluZm8tPkluZm9UeXBl ICAgID0gRUZJX1VTRVJfSU5GT19OQU1FX1JFQ09SRDsNCj4tICBJbmZvLT5JbmZvQXR0cmlicyA9 IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8DQo+RUZJX1VTRVJfSU5GT19QVUJM SUMgfCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4tICBJbmZvLT5JbmZvU2l6ZSAgICA9IHNp emVvZiAoRUZJX1VTRVJfSU5GTykgKyBzaXplb2YgKG1Vc2VyTmFtZSk7DQo+LSAgQ29weU1lbSAo KFVJTlQ4ICopIChJbmZvICsgMSksIG1Vc2VyTmFtZSwgc2l6ZW9mIChtVXNlck5hbWUpKTsNCj4t ICBOZXdJbmZvID0gTlVMTDsNCj4tICBTdGF0dXMgID0gTW9kaWZ5VXNlckluZm8gKFVzZXIsICZO ZXdJbmZvLCBJbmZvLCBJbmZvLT5JbmZvU2l6ZSk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgdXNl ciBwcm9maWxlIGNyZWF0ZSBkYXRlIHJlY29yZC4NCj4tICAvLw0KPi0gIEluZm8tPkluZm9UeXBl ICAgID0gRUZJX1VTRVJfSU5GT19DUkVBVEVfREFURV9SRUNPUkQ7DQo+LSAgSW5mby0+SW5mb0F0 dHJpYnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPkVGSV9VU0VSX0lO Rk9fUFVCTElDIHwgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+LSAgSW5mby0+SW5mb1NpemUg ICAgPSBzaXplb2YgKEVGSV9VU0VSX0lORk8pICsgc2l6ZW9mDQo+KEVGSV9VU0VSX0lORk9fQ1JF QVRFX0RBVEUpOw0KPi0gIFN0YXR1cyAgICAgICAgICAgID0gZ1JULT5HZXRUaW1lICgmQ3JlYXRl RGF0ZSwgTlVMTCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgZ290byBE b25lOw0KPi0gIH0NCj4tDQo+LSAgQ29weU1lbSAoKFVJTlQ4ICopIChJbmZvICsgMSksICZDcmVh dGVEYXRlLCBzaXplb2YNCj4oRUZJX1VTRVJfSU5GT19DUkVBVEVfREFURSkpOw0KPi0gIE5ld0lu Zm8gPSBOVUxMOw0KPi0gIFN0YXR1cyAgPSBNb2RpZnlVc2VySW5mbyAoVXNlciwgJk5ld0luZm8s IEluZm8sIEluZm8tPkluZm9TaXplKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ LSAgICBnb3RvIERvbmU7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEFkZCB1c2VyIHByb2Zp bGUgdXNhZ2UgY291bnQgcmVjb3JkLg0KPi0gIC8vDQo+LSAgSW5mby0+SW5mb1R5cGUgICAgPSBF RklfVVNFUl9JTkZPX1VTQUdFX0NPVU5UX1JFQ09SRDsNCj4tICBJbmZvLT5JbmZvQXR0cmlicyA9 IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8DQo+RUZJX1VTRVJfSU5GT19QVUJM SUMgfCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4tICBJbmZvLT5JbmZvU2l6ZSAgICA9IHNp emVvZiAoRUZJX1VTRVJfSU5GTykgKyBzaXplb2YNCj4oRUZJX1VTRVJfSU5GT19VU0FHRV9DT1VO VCk7DQo+LSAgVXNhZ2VDb3VudCAgICAgICAgPSAwOw0KPi0gIENvcHlNZW0gKChVSU5UOCAqKSAo SW5mbyArIDEpLCAmVXNhZ2VDb3VudCwgc2l6ZW9mDQo+KEVGSV9VU0VSX0lORk9fVVNBR0VfQ09V TlQpKTsNCj4tICBOZXdJbmZvID0gTlVMTDsNCj4tICBTdGF0dXMgID0gTW9kaWZ5VXNlckluZm8g KFVzZXIsICZOZXdJbmZvLCBJbmZvLCBJbmZvLT5JbmZvU2l6ZSk7DQo+LSAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAv LyBBZGQgdXNlciBhY2Nlc3MgcmlnaHQuDQo+LSAgLy8NCj4tICBJbmZvLT5JbmZvVHlwZSAgICA9 IEVGSV9VU0VSX0lORk9fQUNDRVNTX1BPTElDWV9SRUNPUkQ7DQo+LSAgSW5mby0+SW5mb0F0dHJp YnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPkVGSV9VU0VSX0lORk9f UFVCTElDIHwgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+LSAgQWNjZXNzICAgICAgICAgICAg PSAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCAqKSAoSW5mbyArIDEpOw0KPi0gIEFjY2Vz cy0+VHlwZSAgICAgID0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFOw0KPi0gIEFjY2Vzcy0+ U2l6ZSAgICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPX0FDQ0VTU19DT05UUk9MKTsNCj4tICBJ bmZvLT5JbmZvU2l6ZSAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBBY2Nlc3MtPlNpemU7 DQo+LSAgTmV3SW5mbyA9IE5VTEw7DQo+LSAgU3RhdHVzICA9IE1vZGlmeVVzZXJJbmZvIChVc2Vy LCAmTmV3SW5mbywgSW5mbywgSW5mby0+SW5mb1NpemUpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4tICAgIGdvdG8gRG9uZTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWRk IHVzZXIgaWRlbnRpdHkgcG9saWN5Lg0KPi0gIC8vDQo+LSAgSW5mby0+SW5mb1R5cGUgICAgPSBF RklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWV9SRUNPUkQ7DQo+LSAgSW5mby0+SW5mb0F0dHJp YnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPkVGSV9VU0VSX0lORk9f UFJJVkFURSB8IEVGSV9VU0VSX0lORk9fRVhDTFVTSVZFOw0KPi0gIFBvbGljeSAgICAgICAgICAg ID0gKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICopIChJbmZvICsgMSk7DQo+LSAgUG9s aWN5LT5UeXBlICAgICAgPSBFRklfVVNFUl9JTkZPX0lERU5USVRZX1RSVUU7DQo+LSAgUG9saWN5 LT5MZW5ndGggICAgPSBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZKTsNCj4t ICBJbmZvLT5JbmZvU2l6ZSAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBQb2xpY3ktPkxl bmd0aDsNCj4tICBOZXdJbmZvID0gTlVMTDsNCj4tICBTdGF0dXMgID0gTW9kaWZ5VXNlckluZm8g KFVzZXIsICZOZXdJbmZvLCBJbmZvLCBJbmZvLT5JbmZvU2l6ZSk7DQo+LQ0KPi1Eb25lOg0KPi0g IEZyZWVQb29sIChJbmZvKTsNCj4tICByZXR1cm4gU3RhdHVzOw0KPi19DQo+LQ0KPi0NCj4tLyoq DQo+LSAgUHVibGlzaCBjdXJyZW50IHVzZXIgaW5mb3JtYXRpb24gaW50byBFRkkgU3lzdGVtIENv bmZpZ3VyYXRpb24gVGFibGUuDQo+LQ0KPi0gIEJ5IFVFRkkgc3BlYywgdGhlIFVzZXIgSWRlbnRp dHkgTWFuYWdlciB3aWxsIHB1Ymxpc2ggdGhlIGN1cnJlbnQgdXNlciBwcm9maWxlDQo+LSAgaW50 byB0aGUgRUZJIFN5c3RlbSBDb25maWd1cmF0aW9uIFRhYmxlLiBDdXJyZW50bHksIG9ubHkgdGhl IHVzZXIgaWRlbnRpZmllcg0KPmFuZCB1c2VyDQo+LSAgbmFtZSBhcmUgcHVibGlzaGVkLg0KPi0N Cj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgQ3VycmVudCB1c2VyIGluZm9ybWF0aW9uIGlz IHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgIEZh aWwgdG8gcHVibGlzaCBjdXJyZW50IHVzZXIgaW5mb3JtYXRpb24NCj4tDQo+LSoqLw0KPi1FRklf U1RBVFVTDQo+LVB1Ymxpc2hVc2VyVGFibGUgKA0KPi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBF RklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX0NPTkZJR1VSQVRJT05fVEFC TEUgKkVmaUNvbmZpZ3VyYXRpb25UYWJsZTsNCj4tICBFRklfVVNFUl9JTkZPX1RBQkxFICAgICAq VXNlckluZm9UYWJsZTsNCj4tICBFRklfVVNFUl9JTkZPICAgICAgICAgICAqSWRJbmZvOw0KPi0g IEVGSV9VU0VSX0lORk8gICAgICAgICAgICpOYW1lSW5mbzsNCj4tDQo+LSAgU3RhdHVzID0gRWZp R2V0U3lzdGVtQ29uZmlndXJhdGlvblRhYmxlICgNCj4tICAgICAgICAgICAgICZnRWZpVXNlck1h bmFnZXJQcm90b2NvbEd1aWQsDQo+LSAgICAgICAgICAgICAoVk9JRCAqKikgJkVmaUNvbmZpZ3Vy YXRpb25UYWJsZQ0KPi0gICAgICAgICAgICAgKTsNCj4tICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPi0gICAgLy8NCj4tICAgIC8vIFRoZSB0YWJsZSBleGlzdGVkIQ0KPi0gICAgLy8NCj4t ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IHVz ZXIgSUQgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBJZEluZm8gID0gTlVMTDsNCj4tICBTdGF0 dXMgID0gRmluZFVzZXJJbmZvQnlUeXBlIChtQ3VycmVudFVzZXIsICZJZEluZm8sDQo+RUZJX1VT RVJfSU5GT19JREVOVElGSUVSX1JFQ09SRCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tDQo+LSAgfQ0KPi0gIC8vDQo+LSAgLy8gR2V0IHVz ZXIgbmFtZSBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIE5hbWVJbmZvICA9IE5VTEw7DQo+LSAg U3RhdHVzICAgID0gRmluZFVzZXJJbmZvQnlUeXBlIChtQ3VycmVudFVzZXIsICZOYW1lSW5mbywN Cj5FRklfVVNFUl9JTkZPX05BTUVfUkVDT1JEKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBBbGxv Y2F0ZSBhIGJ1ZmZlciBmb3IgdXNlciBpbmZvcm1hdGlvbiB0YWJsZS4NCj4tICAvLw0KPi0gIFVz ZXJJbmZvVGFibGUgPSAoRUZJX1VTRVJfSU5GT19UQUJMRSAqKSBBbGxvY2F0ZVJ1bnRpbWVQb29s ICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yg KEVGSV9VU0VSX0lORk9fVEFCTEUpICsNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJZEluZm8tPkluZm9TaXplICsNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOYW1lSW5mby0+SW5mb1NpemUNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gIGlmIChVc2VySW5mb1RhYmxl ID09IE5VTEwpIHsNCj4tICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gICAg cmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIFVzZXJJbmZvVGFibGUtPlNpemUgPSBzaXpl b2YgKEVGSV9VU0VSX0lORk9fVEFCTEUpOw0KPi0NCj4tICAvLw0KPi0gIC8vIEFwcGVuZCB0aGUg dXNlciBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciBpbmZvIHRhYmxlDQo+LSAgLy8NCj4tICBDb3B5 TWVtICgoVUlOVDggKikgVXNlckluZm9UYWJsZSArIFVzZXJJbmZvVGFibGUtPlNpemUsIChVSU5U OCAqKSBJZEluZm8sDQo+SWRJbmZvLT5JbmZvU2l6ZSk7DQo+LSAgVXNlckluZm9UYWJsZS0+U2l6 ZSArPSBJZEluZm8tPkluZm9TaXplOw0KPi0NCj4tICBDb3B5TWVtICgoVUlOVDggKikgVXNlcklu Zm9UYWJsZSArIFVzZXJJbmZvVGFibGUtPlNpemUsIChVSU5UOCAqKQ0KPk5hbWVJbmZvLCBOYW1l SW5mby0+SW5mb1NpemUpOw0KPi0gIFVzZXJJbmZvVGFibGUtPlNpemUgKz0gTmFtZUluZm8tPklu Zm9TaXplOw0KPi0NCj4tICBTdGF0dXMgPSBnQlMtPkluc3RhbGxDb25maWd1cmF0aW9uVGFibGUg KCZnRWZpVXNlck1hbmFnZXJQcm90b2NvbEd1aWQsDQo+KFZPSUQgKikgVXNlckluZm9UYWJsZSk7 DQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEdldCB0aGUgdXNl cidzIGlkZW50aXR5IHR5cGUuDQo+LQ0KPi0gIFRoZSBpZGVudGlmeSBtYW5hZ2VyIG9ubHkgc3Vw cG9ydHMgdGhlIGlkZW50aXR5IHBvbGljeSBpbiB3aGljaCB0aGUNCj5jcmVkZW50aWFsDQo+LSAg cHJvdmlkZXIgaGFuZGxlcyBhcmUgY29ubmVjdGVkIGJ5IHRoZSBvcGVyYXRvciAnQU5EJyBvciAn T1InLg0KPi0NCj4tDQo+LSAgQHBhcmFtW2luXSAgIFVzZXIgICAgICAgICAgICAgIEhhbmRsZSBv ZiBhIHVzZXIgcHJvZmlsZS4NCj4tICBAcGFyYW1bb3V0XSAgUG9saWN5VHlwZSAgICAgICAgUG9p bnQgdG8gdGhlIGlkZW50aXR5IHR5cGUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBHZXQgdXNlcidzIGlkZW50aXR5IHR5cGUgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2 YWwgT3RoZXJzICAgICAgICAgICAgICAgICBGYWlsIHRvIGdldCB1c2VyJ3MgaWRlbnRpdHkgdHlw ZS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUdldElkZW50aWZ5VHlwZSAoDQo+LSAgSU4g ICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAg T1VUICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQb2xpY3lUeXBlDQo+ LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPi0g IEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICpJZGVudGlmeUluZm87DQo+LSAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgVG90YWxMZW47DQo+LSAgRUZJX1VTRVJfSU5GT19JREVO VElUWV9QT0xJQ1kgKklkZW50aXR5Ow0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCB1c2VyIGlkZW50 aWZ5IHBvbGljeSBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIElkZW50aWZ5SW5mbyAgPSBOVUxM Ow0KPi0gIFN0YXR1cyAgICAgICAgPSBGaW5kVXNlckluZm9CeVR5cGUgKFVzZXIsICZJZGVudGlm eUluZm8sDQo+RUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lfUkVDT1JEKTsNCj4tICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tICBB U1NFUlQgKElkZW50aWZ5SW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBTZWFyY2gg dGhlIHVzZXIgaWRlbnRpZnkgcG9saWN5IGFjY29yZGluZyB0byB0eXBlLg0KPi0gIC8vDQo+LSAg VG90YWxMZW4gICAgPSAwOw0KPi0gICpQb2xpY3lUeXBlID0gRUZJX1VTRVJfSU5GT19JREVOVElU WV9GQUxTRTsNCj4tICB3aGlsZSAoVG90YWxMZW4gPCBJZGVudGlmeUluZm8tPkluZm9TaXplIC0g c2l6ZW9mIChFRklfVVNFUl9JTkZPKSkgew0KPi0gICAgSWRlbnRpdHkgPSAoRUZJX1VTRVJfSU5G T19JREVOVElUWV9QT0xJQ1kgKikgKChVSU5UOCAqKSAoSWRlbnRpZnlJbmZvICsNCj4xKSArIFRv dGFsTGVuKTsNCj4tICAgIGlmIChJZGVudGl0eS0+VHlwZSA9PSBFRklfVVNFUl9JTkZPX0lERU5U SVRZX0FORCkgew0KPi0gICAgICAqUG9saWN5VHlwZSA9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlf QU5EOw0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tDQo+LSAgICBpZiAoSWRlbnRpdHktPlR5 cGUgPT0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9PUikgew0KPi0gICAgICAqUG9saWN5VHlwZSA9 IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfT1I7DQo+LSAgICAgIGJyZWFrOw0KPi0gICAgfQ0KPi0g ICAgVG90YWxMZW4gKz0gSWRlbnRpdHktPkxlbmd0aDsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgSWRlbnRpZnkgdGhlIFVzZXIgYnkgdGhl IHNwZWNmaWVkIHByb3ZpZGVyLg0KPi0NCj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICAgICAg ICAgIEhhbmRsZSBvZiBhIHVzZXIgcHJvZmlsZS4NCj4tICBAcGFyYW1baW5dICBQcm92aWRlciAg ICAgICAgICAgIFBvaW50cyB0byB0aGUgaWRlbnRpZmllciBvZiBjcmVkZW50aWFsIHByb3ZpZGVy Lg0KPi0NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIFByb3ZpZGVyIGlzIE5V TEwuDQo+LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgICBGYWlsIHRvIGlkZW50aWZ5 IHRoZSBzcGVjaWZpZWQgdXNlci4NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg IFVzZXIgaXMgaWRlbnRpZmllZCBzdWNjZXNzZnVsbHkuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRV Uw0KPi1JZGVudGlmeUJ5UHJvdmlkZXJJZCAoDQo+LSAgSU4gIEVGSV9VU0VSX1BST0ZJTEVfSEFO RExFICAgICAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgSU4gIEVGSV9HVUlEICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpQcm92aWRlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4tICBFRklfVVNFUl9JTkZPX0lERU5USUZJ RVIgICAgICBVc2VySWQ7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7 DQo+LSAgRUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR1MgICAgQXV0b0xvZ29uOw0KPi0gIEVGSV9I SUlfSEFORExFICAgICAgICAgICAgICAgIEhpaUhhbmRsZTsNCj4tICBFRklfR1VJRCAgICAgICAg ICAgICAgICAgICAgICBGb3JtU2V0SWQ7DQo+LSAgRUZJX0ZPUk1fSUQgICAgICAgICAgICAgICAg ICAgRm9ybUlkOw0KPi0gIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICpVc2VyQ3JlZGVu dGlhbDsNCj4tDQo+LSAgaWYgKFByb3ZpZGVyID09IE5VTEwpIHsNCj4tICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHRoZSB1 c2VyIElEIGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmllZCBjcmVkZW50aWFsIHByb3ZpZGVyLg0K Pi0gIC8vDQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVByb3ZpZGVyRGItPkNvdW50OyBJ bmRleCsrKSB7DQo+LSAgICAvLw0KPi0gICAgLy8gQ2hlY2sgY3JlZGVudGlhbCBwcm92aWRlciBj bGFzcy4NCj4tICAgIC8vDQo+LSAgICBVc2VyQ3JlZGVudGlhbCA9IG1Qcm92aWRlckRiLT5Qcm92 aWRlcltJbmRleF07DQo+LSAgICBpZiAoQ29tcGFyZUd1aWQgKCZVc2VyQ3JlZGVudGlhbC0+SWRl bnRpZmllciwgUHJvdmlkZXIpKSB7DQo+LSAgICAgIFN0YXR1cyA9IFVzZXJDcmVkZW50aWFsLT5T ZWxlY3QgKFVzZXJDcmVkZW50aWFsLCAmQXV0b0xvZ29uKTsNCj4tICAgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPi0gICAgICAgIHJldHVybiBTdGF0dXM7DQo+LSAgICAgIH0NCj4tDQo+ LSAgICAgIGlmICgoQXV0b0xvZ29uICYgRUZJX0NSRURFTlRJQUxfTE9HT05fRkxBR19BVVRPKSA9 PSAwKSB7DQo+LSAgICAgICAgLy8NCj4tICAgICAgICAvLyBHZXQgY3JlZGVudGlhbCBwcm92aWRl ciBmb3JtLg0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgU3RhdHVzID0gVXNlckNyZWRlbnRpYWwt PkZvcm0gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJDcmVkZW50 aWFsLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIaWlIYW5kbGUsDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZvcm1TZXRJZCwNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRm9ybUlkDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4tICAgICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIC8vIFNlbmQgZm9ybSB0byBnZXQgdXNlciBp bnB1dC4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBTdGF0dXMgPSBtQ2FsbGJhY2tJbmZv LT5Gb3JtQnJvd3NlcjItPlNlbmRGb3JtICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tJbmZvLT5Gb3JtQnJvd3NlcjIsDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkhpaUhhbmRs ZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx LA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZG b3JtU2V0SWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRm9ybUlkLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQo+LSAgICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ LSAgICAgICAgICAgIHJldHVybiBTdGF0dXM7DQo+LSAgICAgICAgICB9DQo+LSAgICAgICAgfQ0K Pi0gICAgICB9DQo+LQ0KPi0gICAgICBTdGF0dXMgPSBVc2VyQ3JlZGVudGlhbC0+VXNlciAoVXNl ckNyZWRlbnRpYWwsIFVzZXIsICZVc2VySWQpOw0KPi0gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+LSAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAg U3RhdHVzID0gVXNlckNyZWRlbnRpYWwtPkRlc2VsZWN0IChVc2VyQ3JlZGVudGlhbCk7DQo+LSAg ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgICByZXR1cm4gU3RhdHVzOw0K Pi0gICAgICB9DQo+LQ0KPi0gICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgICB9DQo+LSAg fQ0KPi0NCj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0g IFVwZGF0ZSB1c2VyIGluZm9ybWF0aW9uIHdoZW4gdXNlciBpcyBsb2dvbiBvbiBzdWNjZXNzZnVs bHkuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICBQb2ludHMgdG8gdXNlciBwcm9m aWxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgVXBkYXRlIHVzZXIgaW5mb3Jt YXRpb24gc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICBGYWlsIHRv IHVwZGF0ZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tVXBk YXRlVXNlckluZm8gKA0KPi0gIElOICBVU0VSX1BST0ZJTEVfRU5UUlkgICAgICAgICAgICAgICAg ICAgICAgICAqVXNlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg U3RhdHVzOw0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgKkluZm87DQo+LSAgRUZJX1VT RVJfSU5GTyAgICAgICAgICAgICAqTmV3SW5mbzsNCj4tICBFRklfVVNFUl9JTkZPX0NSRUFURV9E QVRFIERhdGU7DQo+LSAgRUZJX1VTRVJfSU5GT19VU0FHRV9DT1VOVCBVc2FnZUNvdW50Ow0KPi0g IFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5mb0xlbjsNCj4tDQo+LSAgLy8NCj4tICAvLyBB bGxvY2F0ZSBhIGJ1ZmZlciB0byB1cGRhdGUgdXNlcidzIGRhdGUgcmVjb3JkIGFuZCB1c2FnZSBy ZWNvcmQuDQo+LSAgLy8NCj4tICBJbmZvTGVuICA9IE1BWCAoc2l6ZW9mIChFRklfVVNFUl9JTkZP X0NSRUFURV9EQVRFKSwgc2l6ZW9mDQo+KEVGSV9VU0VSX0lORk9fVVNBR0VfQ09VTlQpKTsNCj4t ICBJbmZvICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBJ bmZvTGVuKTsNCj4tICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIGNyZWF0ZSBkYXRl IHJlY29yZC4NCj4tICAvLw0KPi0gIE5ld0luZm8gPSBOVUxMOw0KPi0gIFN0YXR1cyAgPSBGaW5k VXNlckluZm9CeVR5cGUgKFVzZXIsICZOZXdJbmZvLA0KPkVGSV9VU0VSX0lORk9fQ1JFQVRFX0RB VEVfUkVDT1JEKTsNCj4tICBpZiAoU3RhdHVzID09IEVGSV9OT1RfRk9VTkQpIHsNCj4tICAgIElu Zm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19DUkVBVEVfREFURV9SRUNPUkQ7DQo+LSAg ICBJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8 DQo+RUZJX1VTRVJfSU5GT19QVUJMSUMgfCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4tICAg IEluZm8tPkluZm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZg0KPihF RklfVVNFUl9JTkZPX0NSRUFURV9EQVRFKTsNCj4tICAgIFN0YXR1cyAgICAgICAgICAgID0gZ1JU LT5HZXRUaW1lICgmRGF0ZSwgTlVMTCk7DQo+LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+LSAgICAgIEZyZWVQb29sIChJbmZvKTsNCj4tICAgICAgcmV0dXJuIFN0YXR1czsNCj4tICAg IH0NCj4tDQo+LSAgICBDb3B5TWVtICgoVUlOVDggKikgKEluZm8gKyAxKSwgJkRhdGUsIHNpemVv Zg0KPihFRklfVVNFUl9JTkZPX0NSRUFURV9EQVRFKSk7DQo+LSAgICBOZXdJbmZvID0gTlVMTDsN Cj4tICAgIFN0YXR1cyAgPSBNb2RpZnlVc2VySW5mbyAoVXNlciwgJk5ld0luZm8sIEluZm8sIElu Zm8tPkluZm9TaXplKTsNCj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAg RnJlZVBvb2wgKEluZm8pOw0KPi0gICAgICByZXR1cm4gU3RhdHVzOw0KPi0gICAgfQ0KPi0gIH0N Cj4tDQo+LSAgLy8NCj4tICAvLyBVcGRhdGUgdXNhZ2UgZGF0ZSByZWNvcmQuDQo+LSAgLy8NCj4t ICBOZXdJbmZvID0gTlVMTDsNCj4tICBTdGF0dXMgID0gRmluZFVzZXJJbmZvQnlUeXBlIChVc2Vy LCAmTmV3SW5mbywNCj5FRklfVVNFUl9JTkZPX1VTQUdFX0RBVEVfUkVDT1JEKTsNCj4tICBpZiAo KFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgfHwgKFN0YXR1cyA9PSBFRklfTk9UX0ZPVU5EKSkgew0K Pi0gICAgSW5mby0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9JTkZPX1VTQUdFX0RBVEVfUkVDT1JE Ow0KPi0gICAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZP Uk1fTlYgfA0KPkVGSV9VU0VSX0lORk9fUFVCTElDIHwgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7 DQo+LSAgICBJbmZvLT5JbmZvU2l6ZSAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBzaXpl b2YNCj4oRUZJX1VTRVJfSU5GT19VU0FHRV9EQVRFKTsNCj4tICAgIFN0YXR1cyAgICAgICAgICAg ID0gZ1JULT5HZXRUaW1lICgmRGF0ZSwgTlVMTCk7DQo+LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+LSAgICAgIEZyZWVQb29sIChJbmZvKTsNCj4tICAgICAgcmV0dXJuIFN0YXR1czsN Cj4tICAgIH0NCj4tDQo+LSAgICBDb3B5TWVtICgoVUlOVDggKikgKEluZm8gKyAxKSwgJkRhdGUs IHNpemVvZg0KPihFRklfVVNFUl9JTkZPX1VTQUdFX0RBVEUpKTsNCj4tICAgIFN0YXR1cyA9IE1v ZGlmeVVzZXJJbmZvIChVc2VyLCAmTmV3SW5mbywgSW5mbywgSW5mby0+SW5mb1NpemUpOw0KPi0g ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBGcmVlUG9vbCAoSW5mbyk7DQo+ LSAgICAgIHJldHVybiBTdGF0dXM7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8v IFVwZGF0ZSB1c2FnZSBjb3VudCByZWNvcmQuDQo+LSAgLy8NCj4tICBVc2FnZUNvdW50ICA9IDA7 DQo+LSAgTmV3SW5mbyAgICAgPSBOVUxMOw0KPi0gIFN0YXR1cyAgICAgID0gRmluZFVzZXJJbmZv QnlUeXBlIChVc2VyLCAmTmV3SW5mbywNCj5FRklfVVNFUl9JTkZPX1VTQUdFX0NPVU5UX1JFQ09S RCk7DQo+LSAgLy8NCj4tICAvLyBHZXQgdXNhZ2UgY291bnQuDQo+LSAgLy8NCj4tICBpZiAoU3Rh dHVzID09IEVGSV9TVUNDRVNTKSB7DQo+LSAgICBDb3B5TWVtICgmVXNhZ2VDb3VudCwgKFVJTlQ4 ICopIChOZXdJbmZvICsgMSksIHNpemVvZg0KPihFRklfVVNFUl9JTkZPX1VTQUdFX0NPVU5UKSk7 DQo+LSAgfQ0KPi0NCj4tICBVc2FnZUNvdW50Kys7DQo+LSAgaWYgKChTdGF0dXMgPT0gRUZJX1NV Q0NFU1MpIHx8IChTdGF0dXMgPT0gRUZJX05PVF9GT1VORCkpIHsNCj4tICAgIEluZm8tPkluZm9U eXBlICAgID0gRUZJX1VTRVJfSU5GT19VU0FHRV9DT1VOVF9SRUNPUkQ7DQo+LSAgICBJbmZvLT5J bmZvQXR0cmlicyA9IEVGSV9VU0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8DQo+RUZJX1VT RVJfSU5GT19QVUJMSUMgfCBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4tICAgIEluZm8tPklu Zm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIHNpemVvZg0KPihFRklfVVNFUl9J TkZPX1VTQUdFX0NPVU5UKTsNCj4tICAgIENvcHlNZW0gKChVSU5UOCAqKSAoSW5mbyArIDEpLCAm VXNhZ2VDb3VudCwgc2l6ZW9mDQo+KEVGSV9VU0VSX0lORk9fVVNBR0VfQ09VTlQpKTsNCj4tICAg IFN0YXR1cyA9IE1vZGlmeVVzZXJJbmZvIChVc2VyLCAmTmV3SW5mbywgSW5mbywgSW5mby0+SW5m b1NpemUpOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBGcmVlUG9v bCAoSW5mbyk7DQo+LSAgICAgIHJldHVybiBTdGF0dXM7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4t ICBGcmVlUG9vbCAoSW5mbyk7DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0N Cj4tLyoqDQo+LSAgQWRkIGEgY3JlZGVuZXRpYWwgcHJvdmlkZXIgaXRlbSBpbiBmb3JtLg0KPi0N Cj4tICBAcGFyYW1baW5dICBQcm92aWRlckd1aWQgICAgICAgIFBvaW50cyB0byB0aGUgaWRlbnRp ZmlyIG9mIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LSAgQHBhcmFtW2luXSAgT3BDb2RlSGFuZGxl ICAgICAgICBQb2ludHMgdG8gY29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQNCj5vcGNvZGVz Lg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tQWRkUHJvdmlkZXJTZWxlY3Rpb24gKA0KPi0gIElOICAg ICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUHJvdmlkZXJHdWlkLA0K Pi0gIElOICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqT3BDb2Rl SGFuZGxlDQo+LSAgKQ0KPi17DQo+LSAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAgICAgSGlp SGFuZGxlOw0KPi0gIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgIFByb3ZJRDsNCj4tICBD SEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAqUHJvdlN0cjsNCj4tICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICBJbmRleDsNCj4tICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NP TCAqVXNlckNyZWRlbnRpYWw7DQo+LQ0KPi0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IG1Qcm92 aWRlckRiLT5Db3VudDsgSW5kZXgrKykgew0KPi0gICAgVXNlckNyZWRlbnRpYWwgPSBtUHJvdmlk ZXJEYi0+UHJvdmlkZXJbSW5kZXhdOw0KPi0gICAgaWYgKENvbXBhcmVHdWlkICgmVXNlckNyZWRl bnRpYWwtPklkZW50aWZpZXIsIFByb3ZpZGVyR3VpZCkpIHsNCj4tICAgICAgLy8NCj4tICAgICAg Ly8gQWRkIGNyZWRlbnRpYWwgcHJvdmlkZXIgc2VsZWN0aW9uLg0KPi0gICAgICAvLw0KPi0gICAg ICBVc2VyQ3JlZGVudGlhbC0+VGl0bGUgKFVzZXJDcmVkZW50aWFsLCAmSGlpSGFuZGxlLCAmUHJv dklEKTsNCj4tICAgICAgUHJvdlN0ciA9IEhpaUdldFN0cmluZyAoSGlpSGFuZGxlLCBQcm92SUQs IE5VTEwpOw0KPi0gICAgICBpZiAoUHJvdlN0ciA9PSBOVUxMKSB7DQo+LSAgICAgICAgY29udGlu dWUgOw0KPi0gICAgICB9DQo+LSAgICAgIFByb3ZJRCAgPSBIaWlTZXRTdHJpbmcgKG1DYWxsYmFj a0luZm8tPkhpaUhhbmRsZSwgMCwgUHJvdlN0ciwgTlVMTCk7DQo+LSAgICAgIEZyZWVQb29sIChQ cm92U3RyKTsNCj4tICAgICAgSGlpQ3JlYXRlQWN0aW9uT3BDb2RlICgNCj4tICAgICAgICBPcENv ZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250YWluZXIgZm9yIGR5bmFt aWMgY3JlYXRlZCBvcGNvZGVzDQo+LSAgICAgICAgKEVGSV9RVUVTVElPTl9JRCkoTEFCRUxfUFJP VklERVJfTkFNRSArIEluZGV4KSwgIC8vIFF1ZXN0aW9uIElEDQo+LSAgICAgICAgUHJvdklELCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvbXB0IHRleHQNCj4tICAgICAgICBT VFJJTkdfVE9LRU4gKFNUUl9OVUxMX1NUUklORyksICAgICAgICAvLyBIZWxwIHRleHQNCj4tICAg ICAgICBFRklfSUZSX0ZMQUdfQ0FMTEJBQ0ssICAgICAgICAgICAgICAgICAvLyBRdWVzdGlvbiBm bGFnDQo+LSAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g QWN0aW9uIFN0cmluZyBJRA0KPi0gICAgICAgICk7DQo+LSAgICAgIGJyZWFrOw0KPi0gICAgfQ0K Pi0gIH0NCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEFkZCBhIHVzZXJuYW1lIGl0ZW0gaW4gZm9y bS4NCj4tDQo+LSAgQHBhcmFtW2luXSAgSW5kZXggICAgICAgICAgICBUaGUgaW5kZXggb2YgdGhl IHVzZXIgaW4gdGhlIHVzZXIgbmFtZSBsaXN0Lg0KPi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAg ICAgICAgUG9pbnRzIHRvIHRoZSB1c2VyIHByb2ZpbGUgd2hvc2UgdXNlcm5hbWUgaXMgYWRkZWQu DQo+LSAgQHBhcmFtW2luXSAgT3BDb2RlSGFuZGxlICAgICBQb2ludHMgdG8gY29udGFpbmVyIGZv ciBkeW5hbWljIGNyZWF0ZWQNCj5vcGNvZGVzLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgIEFkZCBhIHVzZXJuYW1lIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIE90aGVy cyAgICAgICAgICAgICAgIEZhaWwgdG8gYWRkIGEgdXNlcm5hbWUuDQo+LQ0KPi0qKi8NCj4tRUZJ X1NUQVRVUw0KPi1BZGRVc2VyU2VsZWN0aW9uICgNCj4tICBJTiAgICAgVUlOVDE2ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgsDQo+LSAgSU4gICAgIFVTRVJfUFJPRklMRV9F TlRSWSAgICAgICAgICAgICAgICAgICAgICpVc2VyLA0KPi0gIElOICAgICBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqT3BDb2RlSGFuZGxlDQo+LSAgKQ0KPi17DQo+LSAg RUZJX1NUUklOR19JRCBVc2VyTmFtZTsNCj4tICBFRklfU1RBVFVTICAgIFN0YXR1czsNCj4tICBF RklfVVNFUl9JTkZPICpVc2VySW5mbzsNCj4tDQo+LSAgVXNlckluZm8gID0gTlVMTDsNCj4tICBT dGF0dXMgICAgPSBGaW5kVXNlckluZm9CeVR5cGUgKFVzZXIsICZVc2VySW5mbywNCj5FRklfVVNF Ul9JTkZPX05BTUVfUkVDT1JEKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAg ICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgdXNlciBuYW1l IHNlbGVjdGlvbi4NCj4tICAvLw0KPi0gIFVzZXJOYW1lID0gSGlpU2V0U3RyaW5nIChtQ2FsbGJh Y2tJbmZvLT5IaWlIYW5kbGUsIDAsIChFRklfU1RSSU5HKQ0KPihVc2VySW5mbyArIDEpLCBOVUxM KTsNCj4tICBpZiAoVXNlck5hbWUgPT0gMCkgew0KPi0gICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPi0gIH0NCj4tDQo+LSAgSGlpQ3JlYXRlR290b09wQ29kZSAoDQo+LSAgICBPcENv ZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVh dGVkIG9wY29kZXMNCj4tICAgIEZPUk1JRF9QUk9WSURFUl9GT1JNLCAgICAgICAgICAgLy8gVGFy Z2V0IEZvcm0gSUQNCj4tICAgIFVzZXJOYW1lLCAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJv bXB0IHRleHQNCj4tICAgIFNUUklOR19UT0tFTiAoU1RSX05VTExfU1RSSU5HKSwgLy8gSGVscCB0 ZXh0DQo+LSAgICBFRklfSUZSX0ZMQUdfQ0FMTEJBQ0ssICAgICAgICAgIC8vIFF1ZXN0aW9uIGZs YWcNCj4tICAgIChVSU5UMTYpIEluZGV4ICAgICAgICAgICAgICAgICAgLy8gUXVlc3Rpb24gSUQN Cj4tICAgICk7DQo+LQ0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8q Kg0KPi0gIElkZW50aWZ5IHRoZSB1c2VyIHdob3NlIGlkZW50aXR5IHBvbGljeSBkb2VzIG5vdCBj b250YWluIHRoZSBvcGVyYXRvciAnT1InLg0KPi0NCj4tICBAcGFyYW1baW5dICBVc2VyICAgICAg ICAgICAgIFBvaW50cyB0byB0aGUgdXNlciBwcm9maWxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgIFRoZSBzcGVjaWZpZWQgdXNlciBpcyBpZGVudGlmaWVkIHN1Y2Nlc3Nm dWxseS4NCj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIEZhaWwgdG8gaWRlbnRpZnkg dGhlIHVzZXIuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1JZGVudGlmeUFuZFR5cGVVc2Vy ICgNCj4tICBJTiAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgKlVz ZXINCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7 DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKklkZW50aWZ5SW5mbzsNCj4tICBC T09MRUFOICAgICAgICAgICAgICAgICAgICAgICBTdWNjZXNzOw0KPi0gIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgIFRvdGFsTGVuOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgIFZhbHVlTGVuOw0KPi0gIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICpJZGVudGl0 eTsNCj4tDQo+LSAgLy8NCj4tICAvLyBHZXQgdXNlciBpZGVudGlmeSBwb2xpY3kgaW5mb3JtYXRp b24uDQo+LSAgLy8NCj4tICBJZGVudGlmeUluZm8gID0gTlVMTDsNCj4tICBTdGF0dXMgICAgICAg ID0gRmluZFVzZXJJbmZvQnlUeXBlIChVc2VyLCAmSWRlbnRpZnlJbmZvLA0KPkVGSV9VU0VSX0lO Rk9fSURFTlRJVFlfUE9MSUNZX1JFQ09SRCk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LSAgQVNTRVJUIChJZGVudGlmeUluZm8g IT0gTlVMTCk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgZWFjaCBwYXJ0IG9mIGlkZW50aWZp Y2F0aW9uIHBvbGljeSBleHByZXNzaW9uLg0KPi0gIC8vDQo+LSAgU3VjY2VzcyAgID0gRkFMU0U7 DQo+LSAgVG90YWxMZW4gID0gMDsNCj4tICB3aGlsZSAoVG90YWxMZW4gPCBJZGVudGlmeUluZm8t PkluZm9TaXplIC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSkgew0KPi0gICAgSWRlbnRpdHkgID0g KEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICopICgoVUlOVDggKikgKElkZW50aWZ5SW5m byArDQo+MSkgKyBUb3RhbExlbik7DQo+LSAgICBWYWx1ZUxlbiAgPSBJZGVudGl0eS0+TGVuZ3Ro IC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSk7DQo+LSAgICBzd2l0Y2gg KElkZW50aXR5LT5UeXBlKSB7DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZ X0ZBTFNFOg0KPi0gICAgICAvLw0KPi0gICAgICAvLyBDaGVjayBGYWxzZSBvcHRpb24uDQo+LSAg ICAgIC8vDQo+LSAgICAgIFN1Y2Nlc3MgPSBGQUxTRTsNCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0g ICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX1RSVUU6DQo+LSAgICAgIC8vDQo+LSAgICAg IC8vIENoZWNrIFRydWUgb3B0aW9uLg0KPi0gICAgICAvLw0KPi0gICAgICBTdWNjZXNzID0gVFJV RTsNCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZ X05PVDoNCj4tICAgICAgLy8NCj4tICAgICAgLy8gQ2hlY2sgbmVnYXRpdmUgb3BlcmF0aW9uLg0K Pi0gICAgICAvLw0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9f SURFTlRJVFlfQU5EOg0KPi0gICAgICAvLw0KPi0gICAgICAvLyBDaGVjayBhbmQgb3BlcmF0aW9u Lg0KPi0gICAgICAvLw0KPi0gICAgICBpZiAoIVN1Y2Nlc3MpIHsNCj4tICAgICAgICByZXR1cm4g RUZJX05PVF9SRUFEWTsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAgU3VjY2VzcyA9IEZBTFNFOw0K Pi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfT1I6 DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIENoZWNrIG9yIG9wZXJhdGlvbi4NCj4tICAgICAgLy8N Cj4tICAgICAgaWYgKFN1Y2Nlc3MpIHsNCj4tICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lE RU5USVRZX0NSRURFTlRJQUxfVFlQRToNCj4tICAgICAgLy8NCj4tICAgICAgLy8gQ2hlY2sgY3Jl ZGVudGlhbCBwcm92aWRlciBieSB0eXBlLg0KPi0gICAgICAvLw0KPi0gICAgICBicmVhazsNCj4t DQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQ1JFREVOVElBTF9QUk9WSURFUjoN Cj4tICAgICAgLy8NCj4tICAgICAgLy8gQ2hlY2sgY3JlZGVudGlhbCBwcm92aWRlciBieSBJRC4N Cj4tICAgICAgLy8NCj4tICAgICAgaWYgKFZhbHVlTGVuICE9IHNpemVvZiAoRUZJX0dVSUQpKSB7 DQo+LSAgICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICAgICAgfQ0KPi0N Cj4tICAgICAgU3RhdHVzID0gSWRlbnRpZnlCeVByb3ZpZGVySWQgKFVzZXIsIChFRklfR1VJRCAq KSAoSWRlbnRpdHkgKyAxKSk7DQo+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4t ICAgICAgICByZXR1cm4gU3RhdHVzOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICBTdWNjZXNzID0g VFJVRTsNCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgZGVmYXVsdDoNCj4tICAgICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICAgICAgYnJlYWs7DQo+LSAgICB9DQo+LQ0KPi0g ICAgVG90YWxMZW4gKz0gSWRlbnRpdHktPkxlbmd0aDsNCj4tICB9DQo+LQ0KPi0gIGlmIChUb3Rh bExlbiAhPSBJZGVudGlmeUluZm8tPkluZm9TaXplIC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSkg ew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIGlm ICghU3VjY2Vzcykgew0KPi0gICAgcmV0dXJuIEVGSV9OT1RfUkVBRFk7DQo+LSAgfQ0KPi0NCj4t ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBJZGVudGlmeSB0 aGUgdXNlciB3aG9zZSBpZGVudGl0eSBwb2xpY3kgZG9lcyBub3QgY29udGFpbiB0aGUgb3BlcmF0 b3IgJ0FORCcuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICAgICAgUG9pbnRzIHRv IHRoZSB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg VGhlIHNwZWNpZmllZCB1c2VyIGlzIGlkZW50aWZpZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2 YWwgT3RoZXJzICAgICAgICAgICAgICAgRmFpbCB0byBpZGVudGlmeSB0aGUgdXNlci4NCj4tDQo+ LSoqLw0KPi1FRklfU1RBVFVTDQo+LUlkZW50aWZ5T3JUeXBlVXNlciAoDQo+LSAgSU4gIFVTRVJf UFJPRklMRV9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICpVc2VyDQo+LSAgKQ0KPi17DQo+ LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPi0gIEVGSV9VU0VSX0lO Rk8gICAgICAgICAgICAgICAgICpJZGVudGlmeUluZm87DQo+LSAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgVG90YWxMZW47DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg VmFsdWVMZW47DQo+LSAgRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKklkZW50aXR5Ow0K Pi0gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICpTdGFydE9wQ29kZUhhbmRsZTsNCj4t ICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAqRW5kT3BDb2RlSGFuZGxlOw0KPi0gIEVG SV9JRlJfR1VJRF9MQUJFTCAgICAgICAgICAgICpTdGFydExhYmVsOw0KPi0gIEVGSV9JRlJfR1VJ RF9MQUJFTCAgICAgICAgICAgICpFbmRMYWJlbDsNCj4tDQo+LSAgLy8NCj4tICAvLyBHZXQgdXNl ciBpZGVudGlmeSBwb2xpY3kgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBJZGVudGlmeUluZm8g ID0gTlVMTDsNCj4tICBTdGF0dXMgICAgICAgID0gRmluZFVzZXJJbmZvQnlUeXBlIChVc2VyLCAm SWRlbnRpZnlJbmZvLA0KPkVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZX1JFQ09SRCk7DQo+ LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9 DQo+LSAgQVNTRVJUIChJZGVudGlmeUluZm8gIT0gTlVMTCk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8g SW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyIGZvciBkeW5hbWljIG9wY29kZXMuDQo+LSAgLy8NCj4t ICBTdGFydE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gIEFT U0VSVCAoU3RhcnRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+LQ0KPi0gIEVuZE9wQ29kZUhhbmRs ZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gIEFTU0VSVCAoRW5kT3BDb2RlSGFu ZGxlICE9IE5VTEwpOw0KPi0NCj4tICAvLw0KPi0gIC8vIENyZWF0ZSBIaWkgRXh0ZW5kIExhYmVs IE9wQ29kZS4NCj4tICAvLw0KPi0gIFN0YXJ0TGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICop IEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgU3RhcnRMYWJlbC0+RXh0ZW5kT3BDb2Rl ICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPi0gIFN0YXJ0TGFiZWwtPk51bWJlciAgICAg ICAgPSBMQUJFTF9QUk9WSURFUl9OQU1FOw0KPi0NCj4tICBFbmRMYWJlbCA9IChFRklfSUZSX0dV SURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAoDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRW5kT3BDb2RlSGFuZGxlLA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4tICBFbmRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9 IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPi0gIEVuZExhYmVsLT5OdW1iZXIgICAgICAgID0g TEFCRUxfRU5EOw0KPi0NCj4tICAvLw0KPi0gIC8vIEFkZCB0aGUgcHJvdmlkZXJzIHRoYXQgZXhp c3RzIGluIHRoZSB1c2VyJ3MgcG9saWN5Lg0KPi0gIC8vDQo+LSAgVG90YWxMZW4gPSAwOw0KPi0g IHdoaWxlIChUb3RhbExlbiA8IElkZW50aWZ5SW5mby0+SW5mb1NpemUgLSBzaXplb2YgKEVGSV9V U0VSX0lORk8pKSB7DQo+LSAgICBJZGVudGl0eSAgPSAoRUZJX1VTRVJfSU5GT19JREVOVElUWV9Q T0xJQ1kgKikgKChVSU5UOCAqKSAoSWRlbnRpZnlJbmZvICsNCj4xKSArIFRvdGFsTGVuKTsNCj4t ICAgIFZhbHVlTGVuICA9IElkZW50aXR5LT5MZW5ndGggLSBzaXplb2YgKEVGSV9VU0VSX0lORk9f SURFTlRJVFlfUE9MSUNZKTsNCj4tICAgIGlmIChJZGVudGl0eS0+VHlwZSA9PSBFRklfVVNFUl9J TkZPX0lERU5USVRZX0NSRURFTlRJQUxfUFJPVklERVIpIHsNCj4tICAgICAgQWRkUHJvdmlkZXJT ZWxlY3Rpb24gKChFRklfR1VJRCAqKSAoSWRlbnRpdHkgKyAxKSwgU3RhcnRPcENvZGVIYW5kbGUp Ow0KPi0gICAgfQ0KPi0NCj4tICAgIFRvdGFsTGVuICs9IElkZW50aXR5LT5MZW5ndGg7DQo+LSAg fQ0KPi0NCj4tICBIaWlVcGRhdGVGb3JtICgNCj4tICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRs ZSwgLy8gSElJIGhhbmRsZQ0KPi0gICAgJmdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCwvLyBGb3Jt c2V0IEdVSUQNCj4tICAgIEZPUk1JRF9QUk9WSURFUl9GT1JNLCAgICAgLy8gRm9ybSBJRA0KPi0g ICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAvLyBMYWJlbCBmb3Igd2hlcmUgdG8gaW5zZXJ0 IG9wY29kZXMNCj4tICAgIEVuZE9wQ29kZUhhbmRsZSAgICAgICAgICAgLy8gUmVwbGFjZSBkYXRh DQo+LSAgICApOw0KPi0NCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFydE9wQ29kZUhhbmRs ZSk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRW5kT3BDb2RlSGFuZGxlKTsNCj4tDQo+LSAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgVGhpcyBmdW5jdGlv biBwcm9jZXNzZXMgdGhlIHJlc3VsdHMgb2YgY2hhbmdlcyBpbiBjb25maWd1cmF0aW9uLg0KPi0N Cj4tICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBFRklfSElJ X0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wuDQo+LSAgQHBhcmFtICBBY3Rpb24gICAgICAgICAgICAg ICAgIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBhY3Rpb24gdGFrZW4gYnkgdGhlIGJyb3dzZXIuDQo+ LSAgQHBhcmFtICBRdWVzdGlvbklkICAgICAgICAgICAgIEEgdW5pcXVlIHZhbHVlIHdoaWNoIGlz IHNlbnQgdG8gdGhlIG9yaWdpbmFsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGV4cG9ydGluZyBkcml2ZXIgc28gdGhhdCBpdCBjYW4gaWRlbnRpZnkgdGhlIHR5cGUNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgZGF0YSB0byBleHBlY3QuDQo+LSAgQHBh cmFtICBUeXBlICAgICAgICAgICAgICAgICAgIFRoZSB0eXBlIG9mIHZhbHVlIGZvciB0aGUgcXVl c3Rpb24uDQo+LSAgQHBhcmFtICBWYWx1ZSAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgZGF0YSBiZWluZyBzZW50IHRvIHRoZSBvcmlnaW5hbA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBleHBvcnRpbmcgZHJpdmVyLg0KPi0gIEBwYXJhbSAgQWN0aW9uUmVxdWVz dCAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgYWN0aW9uIHJlcXVlc3RlZCBieQ0K PnRoZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayBmdW5jdGlv bi4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBjYWxsYmFjayBz dWNjZXNzZnVsbHkgaGFuZGxlZCB0aGUgYWN0aW9uLg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAg ICAgICAgICAgICBGYWlsIHRvIGhhbmRsZSB0aGUgYWN0aW9uLg0KPi0NCj4tKiovDQo+LUVGSV9T VEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJJZGVudGlmeU1hbmFnZXJDYWxsYmFjayAoDQo+LSAgSU4g IENPTlNUIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTCAgICAgICpUaGlzLA0KPi0gIElO ICBFRklfQlJPV1NFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb24sDQo+LSAg SU4gIEVGSV9RVUVTVElPTl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSWQs DQo+LSAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUs DQo+LSAgSU4gIEVGSV9JRlJfVFlQRV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICpWYWx1 ZSwNCj4tICBPVVQgRUZJX0JST1dTRVJfQUNUSU9OX1JFUVVFU1QgICAgICAgICAgICAgICAgKkFj dGlvblJlcXVlc3QNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0 dXM7DQo+LSAgVVNFUl9QUk9GSUxFX0VOVFJZICAgICAgKlVzZXI7DQo+LSAgVUlOVDggICAgICAg ICAgICAgICAgICAgUG9saWN5VHlwZTsNCj4tICBVSU5UMTYgICAgICAgICAgICAgICAgICBJbmRl eDsNCj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAqU3RhcnRPcENvZGVIYW5kbGU7DQo+LSAg Vk9JRCAgICAgICAgICAgICAgICAgICAgKkVuZE9wQ29kZUhhbmRsZTsNCj4tICBFRklfSUZSX0dV SURfTEFCRUwgICAgICAqU3RhcnRMYWJlbDsNCj4tICBFRklfSUZSX0dVSURfTEFCRUwgICAgICAq RW5kTGFiZWw7DQo+LQ0KPi0gIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPi0NCj4tICBzd2l0Y2gg KEFjdGlvbikgew0KPi0gIGNhc2UgRUZJX0JST1dTRVJfQUNUSU9OX0ZPUk1fT1BFTjoNCj4tICAg IHsNCj4tICAgICAgLy8NCj4tICAgICAgLy8gVXBkYXRlIHVzZXIgRm9ybSB3aGVuIHVzZXIgRm9y bSBpcyBvcGVuZWQuDQo+LSAgICAgIC8vIFRoaXMgd2lsbCBiZSBkb25lIG9ubHkgaW4gRk9STV9P UEVOIENhbGxCYWNrIG9mIHF1ZXN0aW9uIHdpdGgNCj5GT1JNX09QRU5fUVVFU1RJT05fSUQgZnJv bSB1c2VyIEZvcm0uDQo+LSAgICAgIC8vDQo+LSAgICAgIGlmIChRdWVzdGlvbklkICE9IEZPUk1f T1BFTl9RVUVTVElPTl9JRCkgew0KPi0gICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICAg ICAgfQ0KPi0NCj4tICAgICAgLy8NCj4tICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgY29udGFpbmVy IGZvciBkeW5hbWljIG9wY29kZXMuDQo+LSAgICAgIC8vDQo+LSAgICAgIFN0YXJ0T3BDb2RlSGFu ZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgICAgIEFTU0VSVCAoU3RhcnRP cENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+LQ0KPi0gICAgICBFbmRPcENvZGVIYW5kbGUgPSBIaWlB bGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4tICAgICAgQVNTRVJUIChFbmRPcENvZGVIYW5kbGUg IT0gTlVMTCk7DQo+LQ0KPi0gICAgICAvLw0KPi0gICAgICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBM YWJlbCBPcENvZGUuDQo+LSAgICAgIC8vDQo+LSAgICAgIFN0YXJ0TGFiZWwgPSAoRUZJX0lGUl9H VUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlLA0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfSUZSX0dV SURfTEFCRUwpDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsNCj4tICAgICAgU3RhcnRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09Q X0xBQkVMOw0KPi0gICAgICBTdGFydExhYmVsLT5OdW1iZXIgICAgICAgID0gTEFCRUxfVVNFUl9O QU1FOw0KPi0NCj4tICAgICAgRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNy ZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFbmRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4tICAgICAgRW5kTGFiZWwtPkV4dGVuZE9w Q29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICAgICAgRW5kTGFiZWwtPk51bWJl ciAgICAgICAgPSBMQUJFTF9FTkQ7DQo+LQ0KPi0gICAgICAvLw0KPi0gICAgICAvLyBBZGQgYWxs IHRoZSB1c2VyIHByb2ZpbGUgaW4gdGhlIHVzZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4tICAgICAg Ly8NCj4tICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVVzZXJQcm9maWxlRGItPlVzZXJQ cm9maWxlTnVtOyBJbmRleCsrKSB7DQo+LSAgICAgICAgVXNlciA9IChVU0VSX1BST0ZJTEVfRU5U UlkgKikgbVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxlW0luZGV4XTsNCj4tICAgICAgICBBZGRV c2VyU2VsZWN0aW9uICgoVUlOVDE2KShMQUJFTF9VU0VSX05BTUUgKyBJbmRleCksIFVzZXIsDQo+ U3RhcnRPcENvZGVIYW5kbGUpOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICBIaWlVcGRhdGVGb3Jt ICgNCj4tICAgICAgICBtQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUsIC8vIEhJSSBoYW5kbGUNCj4t ICAgICAgICAmZ1VzZXJJZGVudGlmeU1hbmFnZXJHdWlkLC8vIEZvcm1zZXQgR1VJRA0KPi0gICAg ICAgIEZPUk1JRF9VU0VSX0ZPUk0sICAgICAgICAgLy8gRm9ybSBJRA0KPi0gICAgICAgIFN0YXJ0 T3BDb2RlSGFuZGxlLCAgICAgICAgLy8gTGFiZWwgZm9yIHdoZXJlIHRvIGluc2VydCBvcGNvZGVz DQo+LSAgICAgICAgRW5kT3BDb2RlSGFuZGxlICAgICAgICAgICAvLyBSZXBsYWNlIGRhdGENCj4t ICAgICAgICApOw0KPi0NCj4tICAgICAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoU3RhcnRPcENvZGVI YW5kbGUpOw0KPi0gICAgICBIaWlGcmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVIYW5kbGUpOw0K Pi0NCj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgfQ0KPi0gICAgYnJlYWs7DQo+ LQ0KPi0gIGNhc2UgRUZJX0JST1dTRVJfQUNUSU9OX0ZPUk1fQ0xPU0U6DQo+LSAgICBTdGF0dXMg PSBFRklfU1VDQ0VTUzsNCj4tICAgIGJyZWFrOw0KPi0NCj4tICBjYXNlIEVGSV9CUk9XU0VSX0FD VElPTl9DSEFOR0VEOg0KPi0gICAgaWYgKFF1ZXN0aW9uSWQgPj0gTEFCRUxfUFJPVklERVJfTkFN RSkgew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBRdWVzdGlvbklkIGNvbWVzIGZyb20gdGhlIHNl Y29uZCBGb3JtIChTZWxlY3QgYSBDcmVkZW50aWFsIFByb3ZpZGVyIGlmDQo+aWRlbnRpdHkNCj4t ICAgICAgLy8gcG9saWN5IGlzIE9SIHR5cGUpLiBJZGVudGlmeSB0aGUgdXNlciBieSB0aGUgc2Vs ZWN0ZWQgcHJvdmlkZXIuDQo+LSAgICAgIC8vDQo+LSAgICAgIFN0YXR1cyA9IElkZW50aWZ5QnlQ cm92aWRlcklkIChtQ3VycmVudFVzZXIsICZtUHJvdmlkZXJEYi0NCj4+UHJvdmlkZXJbUXVlc3Rp b25JZCAmIDB4RkZGXS0+SWRlbnRpZmllcik7DQo+LSAgICAgIGlmIChTdGF0dXMgPT0gRUZJX1NV Q0NFU1MpIHsNCj4tICAgICAgICBtSWRlbnRpZmllZCAgICAgPSBUUlVFOw0KPi0gICAgICAgICpB Y3Rpb25SZXF1ZXN0ICA9IEVGSV9CUk9XU0VSX0FDVElPTl9SRVFVRVNUX0VYSVQ7DQo+LSAgICAg IH0NCj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgfQ0KPi0gICAgYnJlYWs7DQo+ LQ0KPi0gIGNhc2UgRUZJX0JST1dTRVJfQUNUSU9OX0NIQU5HSU5HOg0KPi0gICAgLy8NCj4tICAg IC8vIFF1ZXN0aW9uSWQgY29tZXMgZnJvbSB0aGUgZmlyc3QgRm9ybSAoU2VsZWN0IGEgdXNlciB0 byBpZGVudGlmeSkuDQo+LSAgICAvLw0KPi0gICAgaWYgKFF1ZXN0aW9uSWQgPj0gTEFCRUxfUFJP VklERVJfTkFNRSkgew0KPi0gICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgICB9DQo+LQ0K Pi0gICAgVXNlciAgID0gKFVTRVJfUFJPRklMRV9FTlRSWSAqKSBtVXNlclByb2ZpbGVEYi0NCj4+ VXNlclByb2ZpbGVbUXVlc3Rpb25JZCAmIDB4RkZGXTsNCj4tICAgIFN0YXR1cyA9IEdldElkZW50 aWZ5VHlwZSAoVXNlciwgJlBvbGljeVR5cGUpOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPi0gICAgICByZXR1cm4gU3RhdHVzOw0KPi0gICAgfQ0KPi0NCj4tICAgIGlmIChQb2xp Y3lUeXBlID09IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfT1IpIHsNCj4tICAgICAgLy8NCj4tICAg ICAgLy8gSWRlbnRpZnkgdGhlIHVzZXIgYnkgIk9SIiBsb2dpY2FsLg0KPi0gICAgICAvLw0KPi0g ICAgICBTdGF0dXMgPSBJZGVudGlmeU9yVHlwZVVzZXIgKFVzZXIpOw0KPi0gICAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4tICAgICAgfQ0K Pi0NCj4tICAgICAgbUN1cnJlbnRVc2VyID0gKEVGSV9VU0VSX1BST0ZJTEVfSEFORExFKSBVc2Vy Ow0KPi0gICAgfSBlbHNlIHsNCj4tICAgICAgLy8NCj4tICAgICAgLy8gSWRlbnRpZnkgdGhlIHVz ZXIgYnkgIkFORCIgbG9naWNhbC4NCj4tICAgICAgLy8NCj4tICAgICAgU3RhdHVzID0gSWRlbnRp ZnlBbmRUeXBlVXNlciAoVXNlcik7DQo+LSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4tICAgICAgICByZXR1cm4gU3RhdHVzOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICBtQ3VycmVu dFVzZXIgICAgPSAoRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUpIFVzZXI7DQo+LSAgICAgIG1JZGVu dGlmaWVkICAgICA9IFRSVUU7DQo+LSAgICAgIGlmIChUeXBlID09IEVGSV9JRlJfVFlQRV9SRUYp IHsNCj4tICAgICAgICBWYWx1ZS0+cmVmLkZvcm1JZCA9IEZPUk1JRF9JTlZBTElEX0ZPUk07DQo+ LSAgICAgIH0NCj4tICAgIH0NCj4tICBicmVhazsNCj4tDQo+LSAgZGVmYXVsdDoNCj4tICAgIC8v DQo+LSAgICAvLyBBbGwgb3RoZXIgYWN0aW9uIHJldHVybiB1bnN1cHBvcnRlZC4NCj4tICAgIC8v DQo+LSAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+LSAgICBicmVhazsNCj4tICB9DQo+ LQ0KPi0NCj4tICByZXR1cm4gU3RhdHVzOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgVGhpcyBm dW5jdGlvbiBjb25zdHJ1Y3QgdXNlciBwcm9maWxlIGRhdGFiYXNlIGZyb20gdXNlciBkYXRhIHNh dmVkIGluIHRoZQ0KPkZsYXNoLg0KPi0gIElmIG5vIHVzZXIgaXMgZm91bmQgaW4gRmxhc2gsIGFk ZCBvbmUgZGVmYXVsdCB1c2VyICJhZG1pbmlzdHJhdG9yIiBpbiB0aGUgdXNlcg0KPi0gIHByb2Zp bGUgZGF0YWJhc2UuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBJbml0 IHVzZXIgcHJvZmlsZSBkYXRhYmFzZSBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBPdGhlcnMg ICAgICAgICAgICAgICAgIEZhaWwgdG8gaW5pdCB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+LQ0K Pi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1Jbml0VXNlclByb2ZpbGVEYiAoDQo+LSAgVk9JRA0KPi0g ICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tICBVSU5UOCAgICAgICAqVmFyRGF0 YTsNCj4tICBVSU5UTiAgICAgICBWYXJTaXplOw0KPi0gIFVJTlROICAgICAgIEN1clZhclNpemU7 DQo+LSAgQ0hBUjE2ICAgICAgVmFyTmFtZVsxMF07DQo+LSAgVUlOVE4gICAgICAgSW5kZXg7DQo+ LSAgVUlOVDMyICAgICAgVmFyQXR0cjsNCj4tDQo+LSAgaWYgKG1Vc2VyUHJvZmlsZURiICE9IE5V TEwpIHsNCj4tICAgIC8vDQo+LSAgICAvLyBUaGUgdXNlciBwcm9maWxlcyBoYWQgYmVlbiBhbHJl YWR5IGluaXRpYWxpemVkLg0KPi0gICAgLy8NCj4tICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4t ICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5pdCB1c2VyIHByb2ZpbGUgZGF0YWJhc2Ugc3RydWN0 dXJlLg0KPi0gIC8vDQo+LSAgaWYgKCFFeHBhbmRVc2VybVVzZXJQcm9maWxlRGIgKCkpIHsNCj4t ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICB9DQo+LQ0KPi0gIEN1clZhclNp emUgPSBERUZBVUxUX1BST0ZJTEVfU0laRTsNCj4tICBWYXJEYXRhICAgID0gQWxsb2NhdGVaZXJv UG9vbCAoQ3VyVmFyU2l6ZSk7DQo+LSAgaWYgKFZhckRhdGEgPT0gTlVMTCkgew0KPi0gICAgcmV0 dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBHZXQg YWxsIHVzZXIgcHJvaWZsZSBlbnRyaWVzLg0KPi0gIC8vDQo+LSAgSW5kZXggPSAwOw0KPi0gIHdo aWxlIChUUlVFKSB7DQo+LSAgICAvLw0KPi0gICAgLy8gR2V0IHZhcmlhYmxlIG5hbWUuDQo+LSAg ICAvLw0KPi0gICAgVW5pY29kZVNQcmludCAoDQo+LSAgICAgIFZhck5hbWUsDQo+LSAgICAgIHNp emVvZiAoVmFyTmFtZSksDQo+LSAgICAgIEwiVXNlciUwNHgiLA0KPi0gICAgICBJbmRleA0KPi0g ICAgICApOw0KPi0gICAgSW5kZXgrKzsNCj4tDQo+LSAgICAvLw0KPi0gICAgLy8gR2V0IHZhcmlh YmxlIHZhbHVlLg0KPi0gICAgLy8NCj4tICAgIFZhclNpemUgPSBDdXJWYXJTaXplOw0KPi0gICAg U3RhdHVzICA9IGdSVC0+R2V0VmFyaWFibGUgKFZhck5hbWUsICZnVXNlcklkZW50aWZ5TWFuYWdl ckd1aWQsDQo+JlZhckF0dHIsICZWYXJTaXplLCBWYXJEYXRhKTsNCj4tICAgIGlmIChTdGF0dXMg PT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4tICAgICAgRnJlZVBvb2wgKFZhckRhdGEpOw0K Pi0gICAgICBWYXJEYXRhID0gQWxsb2NhdGVQb29sIChWYXJTaXplKTsNCj4tICAgICAgaWYgKFZh ckRhdGEgPT0gTlVMTCkgew0KPi0gICAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPi0gICAgICAgIGJyZWFrOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICBDdXJWYXJTaXplICA9 IFZhclNpemU7DQo+LSAgICAgIFN0YXR1cyAgICAgID0gZ1JULT5HZXRWYXJpYWJsZSAoVmFyTmFt ZSwgJmdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCwNCj4mVmFyQXR0ciwgJlZhclNpemUsIFZhckRh dGEpOw0KPi0gICAgfQ0KPi0NCj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAg ICAgaWYgKFN0YXR1cyA9PSBFRklfTk9UX0ZPVU5EKSB7DQo+LSAgICAgICAgU3RhdHVzID0gRUZJ X1NVQ0NFU1M7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LSAgICB9DQo+LQ0KPi0gICAg Ly8NCj4tICAgIC8vIENoZWNrIHZhcmlhYmxlIGF0dHJpYnV0ZXMuDQo+LSAgICAvLw0KPi0gICAg aWYgKFZhckF0dHIgIT0gKEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfA0KPkVGSV9WQVJJQUJM RV9CT09UU0VSVklDRV9BQ0NFU1MpKSB7DQo+LSAgICAgIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFi bGUgKFZhck5hbWUsICZnVXNlcklkZW50aWZ5TWFuYWdlckd1aWQsDQo+VmFyQXR0ciwgMCwgTlVM TCk7DQo+LSAgICAgIGNvbnRpbnVlOw0KPi0gICAgfQ0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBB ZGQgdXNlciBwcm9maWxlIHRvIHRoZSB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+LSAgICAvLw0K Pi0gICAgU3RhdHVzID0gQWRkVXNlclByb2ZpbGUgKE5VTEwsIFZhclNpemUsIFZhckRhdGEsIEZB TFNFKTsNCj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgaWYgKFN0YXR1 cyA9PSBFRklfU0VDVVJJVFlfVklPTEFUSU9OKSB7DQo+LSAgICAgICAgLy8NCj4tICAgICAgICAv LyBEZWxldGUgaW52YWxpZCB1c2VyIHByb2ZpbGUNCj4tICAgICAgICAvLw0KPi0gICAgICAgIGdS VC0+U2V0VmFyaWFibGUgKFZhck5hbWUsICZnVXNlcklkZW50aWZ5TWFuYWdlckd1aWQsIFZhckF0 dHIsIDAsDQo+TlVMTCk7DQo+LSAgICAgIH0gZWxzZSBpZiAoU3RhdHVzID09IEVGSV9PVVRfT0Zf UkVTT1VSQ0VTKSB7DQo+LSAgICAgICAgYnJlYWs7DQo+LSAgICAgIH0NCj4tICAgIH0gZWxzZSB7 DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIERlbGV0ZSBhbmQgc2F2ZSB0aGUgcHJvZmlsZSBhZ2Fp biBpZiBzb21lIGludmFsaWQgcHJvZmlsZXMgYXJlIGRlbGV0ZWQuDQo+LSAgICAgIC8vDQo+LSAg ICAgIGlmIChtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVOdW0gPCBJbmRleCkgew0KPi0gICAg ICAgIGdSVC0+U2V0VmFyaWFibGUgKFZhck5hbWUsICZnVXNlcklkZW50aWZ5TWFuYWdlckd1aWQs IFZhckF0dHIsIDAsDQo+TlVMTCk7DQo+LSAgICAgICAgU2F2ZU52VXNlclByb2ZpbGUgKG1Vc2Vy UHJvZmlsZURiLT5Vc2VyUHJvZmlsZVttVXNlclByb2ZpbGVEYi0NCj4+VXNlclByb2ZpbGVOdW0g LSAxXSwgRkFMU0UpOw0KPi0gICAgICB9DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICBpZiAoVmFy RGF0YSAhPSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAoVmFyRGF0YSk7DQo+LSAgfQ0KPi0NCj4t ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0N Cj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayB3aGV0aGVyIHRoZSB1c2VyIHByb2ZpbGUgZGF0YWJh c2UgaXMgZW1wdHkuDQo+LSAgLy8NCj4tICBpZiAobVVzZXJQcm9maWxlRGItPlVzZXJQcm9maWxl TnVtID09IDApIHsNCj4tICAgIFN0YXR1cyA9IEFkZERlZmF1bHRVc2VyUHJvZmlsZSAoKTsNCj4t ICB9DQo+LQ0KPi0gIHJldHVybiBTdGF0dXM7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBUaGlz IGZ1bmN0aW9uIGNvbGxlY3RzIGFsbCB0aGUgY3JlZGVudGlhbCBwcm92aWRlcnMgYW5kIHNhdmVz IHRvIG1Qcm92aWRlckRiLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg Q29sbGVjdCBjcmVkZW50aWFsIHByb3ZpZGVycyBzdWNjZXNzZnVsbHkuDQo+LSAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgICAgICAgIEZhaWwgdG8gY29sbGVjdCBjcmVkZW50aWFsIHByb3ZpZGVy cy4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUluaXRQcm92aWRlckluZm8gKA0KPi0gIFZP SUQNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LSAgVUlOVE4gICAgICAg SGFuZGxlQ291bnQ7DQo+LSAgRUZJX0hBTkRMRSAgKkhhbmRsZUJ1ZjsNCj4tICBVSU5UTiAgICAg ICBJbmRleDsNCj4tDQo+LSAgaWYgKG1Qcm92aWRlckRiICE9IE5VTEwpIHsNCj4tICAgIC8vDQo+ LSAgICAvLyBUaGUgY3JlZGVudGlhbCBwcm92aWRlcnMgaGFkIGJlZW4gY29sbGVjdGVkIGJlZm9y ZS4NCj4tICAgIC8vDQo+LSAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgfQ0KPi0NCj4tICAv Lw0KPi0gIC8vIFRyeSB0byBmaW5kIGFsbCB0aGUgdXNlciBjcmVkZW50aWFsIHByb3ZpZGVyIGRy aXZlci4NCj4tICAvLw0KPi0gIEhhbmRsZUNvdW50ID0gMDsNCj4tICBIYW5kbGVCdWYgICA9IE5V TEw7DQo+LSAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KPi0gICAgICAgICAg ICAgICAgICBCeVByb3RvY29sLA0KPi0gICAgICAgICAgICAgICAgICAmZ0VmaVVzZXJDcmVkZW50 aWFsMlByb3RvY29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAg ICAgICAgICAgJkhhbmRsZUNvdW50LA0KPi0gICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmDQo+ LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0g ICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IHByb3ZpZGVy IGluZm9tYXRpb24uDQo+LSAgLy8NCj4tICBtUHJvdmlkZXJEYiA9IEFsbG9jYXRlWmVyb1Bvb2wg KA0KPi0gICAgICAgICAgICAgICAgICBzaXplb2YgKENSRURFTlRJQUxfUFJPVklERVJfSU5GTykg LQ0KPi0gICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RP Q09MICopICsNCj4tICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQgKiBzaXplb2YgKEVGSV9V U0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICopDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAg aWYgKG1Qcm92aWRlckRiID09IE5VTEwpIHsNCj4tICAgIEZyZWVQb29sIChIYW5kbGVCdWYpOw0K Pi0gICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gIH0NCj4tDQo+LSBtUHJvdmlk ZXJEYi0+Q291bnQgPSBIYW5kbGVDb3VudDsNCj4tICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBI YW5kbGVDb3VudDsgSW5kZXgrKykgew0KPi0gICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2Nv bCAoDQo+LSAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVmW0luZGV4XSwNCj4tICAgICAgICAg ICAgICAgICAgICAmZ0VmaVVzZXJDcmVkZW50aWFsMlByb3RvY29sR3VpZCwNCj4tICAgICAgICAg ICAgICAgICAgICAoVk9JRCAqKikgJm1Qcm92aWRlckRiLT5Qcm92aWRlcltJbmRleF0NCj4tICAg ICAgICAgICAgICAgICAgICApOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0g ICAgICBGcmVlUG9vbCAoSGFuZGxlQnVmKTsNCj4tICAgICAgRnJlZVBvb2wgKG1Qcm92aWRlckRi KTsNCj4tICAgICAgbVByb3ZpZGVyRGIgPSBOVUxMOw0KPi0gICAgICByZXR1cm4gU3RhdHVzOw0K Pi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAgRnJlZVBvb2wgKEhhbmRsZUJ1Zik7DQo+LSAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgVGhpcyBmdW5jdGlvbiBhbGxv d3MgYSBjYWxsZXIgdG8gZXh0cmFjdCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciBvbmUN Cj4tICBvciBtb3JlIG5hbWVkIGVsZW1lbnRzIGZyb20gdGhlIHRhcmdldCBkcml2ZXIuDQo+LQ0K Pi0NCj4tICBAcGFyYW0gVGhpcyAgICAgICAgICAgIFBvaW50cyB0byB0aGUgRUZJX0hJSV9DT05G SUdfQUNDRVNTX1BST1RPQ09MLg0KPi0gIEBwYXJhbSBSZXF1ZXN0ICAgICAgICAgQSBudWxsLXRl cm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcgaW4gPENvbmZpZ1JlcXVlc3Q+DQo+Zm9ybWF0Lg0KPi0g IEBwYXJhbSBQcm9ncmVzcyAgICAgICAgT24gcmV0dXJuLCBwb2ludHMgdG8gYSBjaGFyYWN0ZXIg aW4gdGhlIFJlcXVlc3Qgc3RyaW5nLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRz IHRvIHRoZSBzdHJpbmcncyBudWxsIHRlcm1pbmF0b3IgaWYgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1 bC4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgbW9zdCByZWNlbnQg JyYnIGJlZm9yZSB0aGUgZmlyc3QgZmFpbGluZyBuYW1lL3ZhbHVlDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICBwYWlyIChvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgaWYgdGhlIGZh aWx1cmUgaXMgaW4gdGhlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBuYW1lL3Zh bHVlIHBhaXIpIGlmIHRoZSByZXF1ZXN0IHdhcyBub3Qgc3VjY2Vzc2Z1bC4NCj4tICBAcGFyYW0g UmVzdWx0cyAgICAgICAgIEEgbnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIGluIDxDb25m aWdBbHRSZXNwPg0KPmZvcm1hdCB3aGljaA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgaGFz IGFsbCB2YWx1ZXMgZmlsbGVkIGluIGZvciB0aGUgbmFtZXMgaW4gdGhlIFJlcXVlc3Qgc3RyaW5n Lg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRvIGJlIGFsbG9jYXRlZCBieSB0 aGUgY2FsbGVkIGZ1bmN0aW9uLg0KPi0NCj4tICBAcmV0dmFsICBFRklfU1VDQ0VTUyAgICAgICAg ICAgIFRoZSBSZXN1bHRzIGlzIGZpbGxlZCB3aXRoIHRoZSByZXF1ZXN0ZWQgdmFsdWVzLg0KPi0g IEByZXR2YWwgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgTm90IGVub3VnaCBtZW1vcnkgdG8gc3Rv cmUgdGhlDQo+cmVzdWx0cy4NCj4tICBAcmV0dmFsICBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFJl cXVlc3QgaXMgaWxsZWdhbCBzeW50YXgsIG9yIHVua25vd24NCj5uYW1lLg0KPi0gIEByZXR2YWwg IEVGSV9OT1RfRk9VTkQgICAgICAgICAgUm91dGluZyBkYXRhIGRvZXNuJ3QgbWF0Y2ggYW55IHN0 b3JhZ2UgaW4NCj50aGlzIGRyaXZlci4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQ SQ0KPi1GYWtlRXh0cmFjdENvbmZpZyAoDQo+LSAgSU4gIENPTlNUIEVGSV9ISUlfQ09ORklHX0FD Q0VTU19QUk9UT0NPTCAgICpUaGlzLA0KPi0gIElOICBDT05TVCBFRklfU1RSSU5HICAgICAgICAg ICAgICAgICAgICAgICBSZXF1ZXN0LA0KPi0gIE9VVCBFRklfU1RSSU5HICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqUHJvZ3Jlc3MsDQo+LSAgT1VUIEVGSV9TVFJJTkcgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpSZXN1bHRzDQo+LSAgKQ0KPi17DQo+LSAgaWYgKFByb2dyZXNzID09 IE5VTEwgfHwgUmVzdWx0cyA9PSBOVUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KPi0gIH0NCj4tICAqUHJvZ3Jlc3MgPSBSZXF1ZXN0Ow0KPi0gIHJldHVybiBFRklf Tk9UX0ZPVU5EOw0KPi19DQo+LQ0KPi0vKioNCj4tICBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0 aGUgcmVzdWx0cyBvZiBjaGFuZ2VzIGluIGNvbmZpZ3VyYXRpb24uDQo+LQ0KPi0NCj4tICBAcGFy YW0gVGhpcyAgICAgICAgICAgIFBvaW50cyB0byB0aGUgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BS T1RPQ09MLg0KPi0gIEBwYXJhbSBDb25maWd1cmF0aW9uICAgQSBudWxsLXRlcm1pbmF0ZWQgVW5p Y29kZSBzdHJpbmcgaW4gPENvbmZpZ1Jlc3A+DQo+Zm9ybWF0Lg0KPi0gIEBwYXJhbSBQcm9ncmVz cyAgICAgICAgQSBwb2ludGVyIHRvIGEgc3RyaW5nIGZpbGxlZCBpbiB3aXRoIHRoZSBvZmZzZXQg b2YgdGhlDQo+bW9zdA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVjZW50ICcmJyBiZWZv cmUgdGhlIGZpcnN0IGZhaWxpbmcgbmFtZS92YWx1ZSBwYWlyIChvciB0aGUNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIGlmIHRoZSBmYWlsdXJlIGlz IGluIHRoZSBmaXJzdA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS92YWx1ZSBwYWly KSBvciB0aGUgdGVybWluYXRpbmcgTlVMTCBpZiBhbGwgd2FzIHN1Y2Nlc3NmdWwuDQo+LQ0KPi0g IEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFJlc3VsdHMgaXMgcHJvY2Vzc2Vk IHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsICBFRklfSU5WQUxJRF9QQVJBTUVURVIgIENvbmZp Z3VyYXRpb24gaXMgTlVMTC4NCj4tICBAcmV0dmFsICBFRklfTk9UX0ZPVU5EICAgICAgICAgIFJv dXRpbmcgZGF0YSBkb2Vzbid0IG1hdGNoIGFueSBzdG9yYWdlIGluDQo+dGhpcyBkcml2ZXIuDQo+ LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tRmFrZVJvdXRlQ29uZmlnICgNCj4t ICBJTiAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICAgKlRoaXMsDQo+LSAg SU4gIENPTlNUIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24s DQo+LSAgT1VUIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQcm9ncmVz cw0KPi0gICkNCj4tew0KPi0gIGlmIChDb25maWd1cmF0aW9uID09IE5VTEwgfHwgUHJvZ3Jlc3Mg PT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+ LQ0KPi0gICpQcm9ncmVzcyA9IENvbmZpZ3VyYXRpb247DQo+LQ0KPi0gIHJldHVybiBFRklfTk9U X0ZPVU5EOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXpl IHRoZSBkYXRhIG1haW5seSB1c2VkIGluIGZvcm0gYnJvd3Nlci4NCj4tDQo+LSAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICBJbml0aWFsaXplIGZvcm0gZGF0YSBzdWNjZXNzZnVsbHkuDQo+ LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICBGYWlsIHRvIEluaXRpYWxpemUgZm9ybSBk YXRhLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tSW5pdEZvcm1Ccm93c2VyICgNCj4tICBW T0lEDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4tICBVU0VSX01BTkFHRVJfQ0FMTEJBQ0tfSU5GTyAgKkNhbGxiYWNrSW5mbzsNCj4tICBFRklf SElJX0RBVEFCQVNFX1BST1RPQ09MICAgKkhpaURhdGFiYXNlOw0KPi0gIEVGSV9ISUlfU1RSSU5H X1BST1RPQ09MICAgICAqSGlpU3RyaW5nOw0KPi0gIEVGSV9GT1JNX0JST1dTRVIyX1BST1RPQ09M ICAqRm9ybUJyb3dzZXIyOw0KPi0NCj4tICAvLw0KPi0gIC8vIEluaXRpYWxpemUgZHJpdmVyIHBy aXZhdGUgZGF0YS4NCj4tICAvLw0KPi0gIENhbGxiYWNrSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wg KHNpemVvZg0KPihVU0VSX01BTkFHRVJfQ0FMTEJBQ0tfSU5GTykpOw0KPi0gIGlmIChDYWxsYmFj a0luZm8gPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0g IH0NCj4tDQo+LSAgQ2FsbGJhY2tJbmZvLT5TaWduYXR1cmUgICAgICAgICAgICAgICAgICAgPSBV U0VSX01BTkFHRVJfU0lHTkFUVVJFOw0KPi0gIENhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNzLkV4 dHJhY3RDb25maWcgID0gRmFrZUV4dHJhY3RDb25maWc7DQo+LSAgQ2FsbGJhY2tJbmZvLT5Db25m aWdBY2Nlc3MuUm91dGVDb25maWcgICAgPSBGYWtlUm91dGVDb25maWc7DQo+LSAgQ2FsbGJhY2tJ bmZvLT5Db25maWdBY2Nlc3MuQ2FsbGJhY2sgICAgICAgPSBVc2VySWRlbnRpZnlNYW5hZ2VyQ2Fs bGJhY2s7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gTG9jYXRlIEhpaSBEYXRhYmFzZSBwcm90b2NvbC4N Cj4tICAvLw0KPi0gIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZpSGlpRGF0YWJh c2VQcm90b2NvbEd1aWQsIE5VTEwsIChWT0lEDQo+KiopICZIaWlEYXRhYmFzZSk7DQo+LSAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LSAg Q2FsbGJhY2tJbmZvLT5IaWlEYXRhYmFzZSA9IEhpaURhdGFiYXNlOw0KPi0NCj4tICAvLw0KPi0g IC8vIExvY2F0ZSBIaWlTdHJpbmcgcHJvdG9jb2wuDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBnQlMt PkxvY2F0ZVByb3RvY29sICgmZ0VmaUhpaVN0cmluZ1Byb3RvY29sR3VpZCwgTlVMTCwgKFZPSUQg KiopDQo+JkhpaVN0cmluZyk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAg cmV0dXJuIFN0YXR1czsNCj4tICB9DQo+LSAgQ2FsbGJhY2tJbmZvLT5IaWlTdHJpbmcgPSBIaWlT dHJpbmc7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gTG9jYXRlIEZvcm1icm93c2VyMiBwcm90b2NvbC4N Cj4tICAvLw0KPi0gIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZpRm9ybUJyb3dz ZXIyUHJvdG9jb2xHdWlkLCBOVUxMLA0KPihWT0lEICoqKSAmRm9ybUJyb3dzZXIyKTsNCj4tICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4t DQo+LSAgQ2FsbGJhY2tJbmZvLT5Gb3JtQnJvd3NlcjIgID0gRm9ybUJyb3dzZXIyOw0KPi0gIENh bGxiYWNrSW5mby0+RHJpdmVySGFuZGxlICA9IE5VTEw7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5z dGFsbCBEZXZpY2UgUGF0aCBQcm90b2NvbCBhbmQgQ29uZmlnIEFjY2VzcyBwcm90b2NvbCB0byBk cml2ZXIgaGFuZGxlLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQ cm90b2NvbEludGVyZmFjZXMgKA0KPi0gICAgICAgICAgICAgICAgICAmQ2FsbGJhY2tJbmZvLT5E cml2ZXJIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29s R3VpZCwNCj4tICAgICAgICAgICAgICAgICAgJm1IaWlWZW5kb3JEZXZpY2VQYXRoLA0KPi0gICAg ICAgICAgICAgICAgICAmZ0VmaUhpaUNvbmZpZ0FjY2Vzc1Byb3RvY29sR3VpZCwNCj4tICAgICAg ICAgICAgICAgICAgJkNhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNzLA0KPi0gICAgICAgICAgICAg ICAgICBOVUxMDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgQVNTRVJUX0VGSV9FUlJPUiAo U3RhdHVzKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBQdWJsaXNoIEhJSSBkYXRhLg0KPi0gIC8vDQo+ LSAgQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUgPSBIaWlBZGRQYWNrYWdlcyAoDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZnVXNlcklkZW50aWZ5TWFuYWdlckd1aWQsDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrSW5mby0+RHJpdmVySGFuZGxlLA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySWRlbnRpZnlNYW5hZ2VyU3RyaW5ncywN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklkZW50aWZ5TWFuYWdlclZmckJp biwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOw0KPi0gIGlmIChDYWxsYmFja0luZm8tPkhpaUhhbmRsZSA9PSBO VUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+LSAgfQ0KPi0NCj4t ICBtQ2FsbGJhY2tJbmZvID0gQ2FsbGJhY2tJbmZvOw0KPi0NCj4tICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBJZGVudGlmeSB0aGUgdXNlciB3aG9zZSBpZGVu dGlmaWNhdGlvbiBwb2xpY3kgc3VwcG9ydHMgYXV0byBsb2dvbi4NCj4tDQo+LSAgQHBhcmFtW2lu XSAgIFByb3ZpZGVySW5kZXggICBUaGUgcHJvdmlkZXIgaW5kZXggaW4gdGhlIHByb3ZpZGVyIGxp c3QuDQo+LSAgQHBhcmFtW291dF0gIFVzZXIgICAgICAgICAgICBQb2ludHMgdG8gdXNlciB1c2Vy IHByb2ZpbGUgaWYgYSB1c2VyIGlzIGlkZW50aWZpZWQNCj5zdWNjZXNzZnVsbHkuDQo+LQ0KPi0g IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgSWRlbnRpZnkgYSB1c2VyIHdpdGggdGhlIHNw ZWNpZmllZCBwcm92aWRlcg0KPnN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIE90aGVycyAgICAg ICAgICAgICAgIEZhaWwgdG8gaWRlbnRpZnkgYSB1c2VyLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFU VVMNCj4tSWRlbnRpZnlBdXRvTG9nb25Vc2VyICgNCj4tICBJTiAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXJJbmRleCwNCj4tICBPVVQgVVNFUl9QUk9G SUxFX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgKipVc2VyDQo+LSAgKQ0KPi17DQo+LSAg RUZJX1NUQVRVUyAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GTyAqSW5mbzsNCj4tICBVSU5U OCAgICAgICAgIFBvbGljeVR5cGU7DQo+LQ0KPi0gIEluZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChz aXplb2YgKEVGSV9VU0VSX0lORk8pICsgc2l6ZW9mDQo+KEVGSV9VU0VSX0lORk9fSURFTlRJRklF UikpOw0KPi0gIGlmIChJbmZvID09IE5VTEwpIHsNCj4tICAgIHJldHVybiBFRklfT1VUX09GX1JF U09VUkNFUzsNCj4tICB9DQo+LQ0KPi0gIEluZm8tPkluZm9UeXBlICA9IEVGSV9VU0VSX0lORk9f SURFTlRJRklFUl9SRUNPUkQ7DQo+LSAgSW5mby0+SW5mb1NpemUgID0gc2l6ZW9mIChFRklfVVNF Ul9JTkZPKSArIHNpemVvZg0KPihFRklfVVNFUl9JTkZPX0lERU5USUZJRVIpOw0KPi0NCj4tICAv Lw0KPi0gIC8vIElkZW50aWZ5IHRoZSBzcGVjaWZpZWQgY3JlZGVudGlhbCBwcm92aWRlcidzIGF1 dG8gbG9nb24gdXNlci4NCj4tICAvLw0KPi0gIFN0YXR1cyA9IG1Qcm92aWRlckRiLT5Qcm92aWRl cltQcm92aWRlckluZGV4XS0+VXNlciAoDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1Qcm92aWRlckRiLT5Qcm92aWRlcltQcm92aWRlckluZGV4 XSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKEVGSV9VU0VSX0lORk9fSURFTlRJRklFUiAqKSAoSW5mbyArIDEpDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPi0gICAgRnJlZVBvb2wgKEluZm8pOw0KPi0gICAgcmV0dXJuIFN0 YXR1czsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRmluZCB1c2VyIHdpdGggdGhlIHNwZWNp ZmllZCB1c2VyIElELg0KPi0gIC8vDQo+LSAgKlVzZXIgICA9IE5VTEw7DQo+LSAgU3RhdHVzICA9 IEZpbmRVc2VyUHJvZmlsZUJ5SW5mbyAoVXNlciwgTlVMTCwgSW5mbywgSW5mby0+SW5mb1NpemUp Ow0KPi0gIEZyZWVQb29sIChJbmZvKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ LSAgICByZXR1cm4gU3RhdHVzOw0KPi0gIH0NCj4tDQo+LSAgU3RhdHVzID0gR2V0SWRlbnRpZnlU eXBlICgoRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUpICogVXNlciwNCj4mUG9saWN5VHlwZSk7DQo+ LSAgaWYgKFBvbGljeVR5cGUgPT0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9BTkQpIHsNCj4tICAg IC8vDQo+LSAgICAvLyBUaGUgaWRlbnRpZmllZCB1c2VyIG5lZWQgYWxzbyBpZGVudGlmaWVkIGJ5 IG90aGVyIGNyZWRlbnRpYWwgcHJvdmlkZXIuDQo+LSAgICAvLyBUaGlzIGNhbiBoYW5kbGUgdGhy b3VnaCBzZWxlY3QgdXNlci4NCj4tICAgIC8vDQo+LSAgICByZXR1cm4gRUZJX05PVF9SRUFEWTsN Cj4tICB9DQo+LQ0KPi0gIHJldHVybiBTdGF0dXM7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBD aGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb25zb2xlIGlzIHJlYWR5Lg0KPi0NCj4tICBAcGFyYW1b aW5dICAgUHJvdG9jb2xHdWlkICAgUG9pbnRzIHRvIHRoZSBwcm90b2NvbCBndWlkIG9mIHNvbnNv bGUgLg0KPi0NCj4tICBAcmV0dmFsIFRSVUUgICAgIFRoZSBnaXZlbiBjb25zb2xlIGlzIHJlYWR5 Lg0KPi0gIEByZXR2YWwgRkFMU0UgICAgVGhlIGdpdmVuIGNvbnNvbGUgaXMgbm90IHJlYWR5Lg0K Pi0NCj4tKiovDQo+LUJPT0xFQU4NCj4tQ2hlY2tDb25zb2xlICgNCj4tICBFRklfR1VJRCAgICAg ICAgICAgICAgICAgICAgICpQcm90b2NvbEd1aWQNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgIEhhbmRsZUNvdW50Ow0KPi0gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgKkhhbmRs ZUJ1ZjsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPi0gIEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKkRldmljZVBhdGg7DQo+LQ0KPi0gIC8vDQo+LSAgLy8g VHJ5IHRvIGZpbmQgYWxsIHRoZSBoYW5kbGUgZHJpdmVyLg0KPi0gIC8vDQo+LSAgSGFuZGxlQ291 bnQgPSAwOw0KPi0gIEhhbmRsZUJ1ZiAgID0gTlVMTDsNCj4tICBTdGF0dXMgPSBnQlMtPkxvY2F0 ZUhhbmRsZUJ1ZmZlciAoDQo+LSAgICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+LSAgICAg ICAgICAgICAgICAgIFByb3RvY29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgTlVMTCwNCj4t ICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPi0gICAgICAgICAgICAgICAgICAmSGFu ZGxlQnVmDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPi0gICAgcmV0dXJuIEZBTFNFOw0KPi0gIH0NCj4tDQo+LSAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCj4tICAgIERldmljZVBhdGggPSBEZXZp Y2VQYXRoRnJvbUhhbmRsZSAoSGFuZGxlQnVmW0luZGV4XSk7DQo+LSAgICBpZiAoRGV2aWNlUGF0 aCAhPSBOVUxMKSB7DQo+LSAgICAgIEZyZWVQb29sIChIYW5kbGVCdWYpOw0KPi0gICAgICByZXR1 cm4gVFJVRTsNCj4tICAgIH0NCj4tICB9DQo+LSAgRnJlZVBvb2wgKEhhbmRsZUJ1Zik7DQo+LSAg cmV0dXJuIEZBTFNFOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQ2hlY2sgd2hldGhlciB0aGUg Y29uc29sZSBpcyByZWFkeS4NCj4tDQo+LSAgQHJldHZhbCBUUlVFICAgICBUaGUgY29uc29sZSBp cyByZWFkeS4NCj4tICBAcmV0dmFsIEZBTFNFICAgIFRoZSBjb25zb2xlIGlzIG5vdCByZWFkeS4N Cj4tDQo+LSoqLw0KPi1CT09MRUFODQo+LUlzQ29uc29sZVJlYWR5ICgNCj4tICBWT0lEDQo+LSAg KQ0KPi17DQo+LSAgaWYgKCFDaGVja0NvbnNvbGUgKCZnRWZpU2ltcGxlVGV4dE91dFByb3RvY29s R3VpZCkpIHsNCj4tICAgIHJldHVybiBGQUxTRTsNCj4tICB9DQo+LQ0KPi0gIGlmICghQ2hlY2tD b25zb2xlICgmZ0VmaVNpbXBsZVRleHRJblByb3RvY29sR3VpZCkpIHsNCj4tICAgIGlmICghQ2hl Y2tDb25zb2xlICgmZ0VmaVNpbXBsZVRleHRJbnB1dEV4UHJvdG9jb2xHdWlkKSkgew0KPi0gICAg cmV0dXJuIEZBTFNFOw0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAgcmV0dXJuIFRSVUU7DQo+LX0N Cj4tDQo+LQ0KPi0vKioNCj4tICBJZGVudGlmeSBhIHVzZXIgdG8gbG9nb24uDQo+LQ0KPi0gIEBw YXJhbVtvdXRdICBVc2VyICAgICAgICAgIFBvaW50cyB0byB1c2VyIHVzZXIgcHJvZmlsZSBpZiBh IHVzZXIgaXMgaWRlbnRpZmllZA0KPnN1Y2Nlc3NmdWxseS4NCj4tDQo+LSAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgSWRlbnRpZnkgYSB1c2VyIHN1Y2Nlc3NmdWxseS4NCj4tDQo+LSoqLw0K Pi1FRklfU1RBVFVTDQo+LUlkZW50aWZ5VXNlciAoDQo+LSAgT1VUIFVTRVJfUFJPRklMRV9FTlRS WSAgICAgICAgICAgICAgICAgICAgICAgICoqVXNlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleDsNCj4tICBFRklfQ1JFREVOVElBTF9MT0dPTl9GTEFHUyAgICBBdXRvTG9n b247DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKklkZW50aWZ5SW5mbzsNCj4t ICBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAqSWRlbnRpdHk7DQo+LSAgRUZJX1VTRVJf Q1JFREVOVElBTDJfUFJPVE9DT0wgKlVzZXJDcmVkZW50aWFsOw0KPi0gIFVTRVJfUFJPRklMRV9F TlRSWSAgICAgICAgICAgICpVc2VyRW50cnk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5pdGlhbGl6 ZSBjcmVkZW50aWFsIHByb3ZpZGVycy4NCj4tICAvLw0KPi0gIEluaXRQcm92aWRlckluZm8gKCk7 DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5pdGlhbGl6ZSB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+ LSAgLy8NCj4tICBJbml0VXNlclByb2ZpbGVEYiAoKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBJZiBv bmx5IG9uZSB1c2VyIGluIHN5c3RlbSwgYW5kIGl0cyBpZGVudGlmeSBwb2xpY3kgaXMgVFJVRSwg dGhlbiBhdXRvIGxvZ29uLg0KPi0gIC8vDQo+LSAgaWYgKG1Vc2VyUHJvZmlsZURiLT5Vc2VyUHJv ZmlsZU51bSA9PSAxKSB7DQo+LSAgICBVc2VyRW50cnkgICAgID0gKFVTRVJfUFJPRklMRV9FTlRS WSAqKSBtVXNlclByb2ZpbGVEYi0+VXNlclByb2ZpbGVbMF07DQo+LSAgICBJZGVudGlmeUluZm8g ID0gTlVMTDsNCj4tICAgIFN0YXR1cyAgICAgICAgPSBGaW5kVXNlckluZm9CeVR5cGUgKFVzZXJF bnRyeSwgJklkZW50aWZ5SW5mbywNCj5FRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWV9SRUNP UkQpOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICByZXR1cm4gU3Rh dHVzOw0KPi0gICAgfQ0KPi0gICAgQVNTRVJUIChJZGVudGlmeUluZm8gIT0gTlVMTCk7DQo+LQ0K Pi0gICAgSWRlbnRpdHkgPSAoRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKikgKChVSU5U OCAqKSAoSWRlbnRpZnlJbmZvICsNCj4xKSk7DQo+LSAgICBpZiAoSWRlbnRpdHktPlR5cGUgPT0g RUZJX1VTRVJfSU5GT19JREVOVElUWV9UUlVFKSB7DQo+LSAgICAgIG1DdXJyZW50VXNlciA9IChF RklfVVNFUl9QUk9GSUxFX0hBTkRMRSkgVXNlckVudHJ5Ow0KPi0gICAgICBVcGRhdGVVc2VySW5m byAoVXNlckVudHJ5KTsNCj4tICAgICAgKlVzZXIgPSBVc2VyRW50cnk7DQo+LSAgICAgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRmluZCBh bmQgbG9naW4gdGhlIGRlZmF1bHQgJiBBdXRvTG9nb24gdXNlci4NCj4tICAvLw0KPi0gIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IG1Qcm92aWRlckRiLT5Db3VudDsgSW5kZXgrKykgew0KPi0gICAg VXNlckNyZWRlbnRpYWwgPSBtUHJvdmlkZXJEYi0+UHJvdmlkZXJbSW5kZXhdOw0KPi0gICAgU3Rh dHVzID0gVXNlckNyZWRlbnRpYWwtPkRlZmF1bHQgKFVzZXJDcmVkZW50aWFsLCAmQXV0b0xvZ29u KTsNCj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgY29udGludWU7DQo+ LSAgICB9DQo+LQ0KPi0gICAgaWYgKChBdXRvTG9nb24gJiAoRUZJX0NSRURFTlRJQUxfTE9HT05f RkxBR19ERUZBVUxUIHwNCj5FRklfQ1JFREVOVElBTF9MT0dPTl9GTEFHX0FVVE8pKSAhPSAwKSB7 DQo+LSAgICAgIFN0YXR1cyA9IElkZW50aWZ5QXV0b0xvZ29uVXNlciAoSW5kZXgsICZVc2VyRW50 cnkpOw0KPi0gICAgICBpZiAoU3RhdHVzID09IEVGSV9TVUNDRVNTKSB7DQo+LSAgICAgICAgbUN1 cnJlbnRVc2VyID0gKEVGSV9VU0VSX1BST0ZJTEVfSEFORExFKSBVc2VyRW50cnk7DQo+LSAgICAg ICAgVXBkYXRlVXNlckluZm8gKFVzZXJFbnRyeSk7DQo+LSAgICAgICAgKlVzZXIgPSBVc2VyRW50 cnk7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgICB9DQo+LSAgICB9DQo+ LSAgfQ0KPi0NCj4tICBpZiAoIUlzQ29uc29sZVJlYWR5ICgpKSB7DQo+LSAgICAvLw0KPi0gICAg Ly8gVGhlIGNvbnNvbGUgaXMgc3RpbGwgbm90IHJlYWR5IGZvciB1c2VyIHNlbGVjdGlvbi4NCj4t ICAgIC8vDQo+LSAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+LSAgfQ0KPi0NCj4tICAv Lw0KPi0gIC8vIFNlbGVjdCBhIHVzZXIgYW5kIGlkZW50aWZ5IGl0Lg0KPi0gIC8vDQo+LSAgbUNh bGxiYWNrSW5mby0+Rm9ybUJyb3dzZXIyLT5TZW5kRm9ybSAoDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1DYWxsYmFja0luZm8tPkZvcm1Ccm93c2VyMiwNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJm1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmdVc2VySWRlbnRpZnlNYW5hZ2VyR3VpZCwNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0NCj4tICBpZiAobUlkZW50aWZpZWQpIHsN Cj4tICAgICpVc2VyID0gKFVTRVJfUFJPRklMRV9FTlRSWSAqKSBtQ3VycmVudFVzZXI7DQo+LSAg ICBVcGRhdGVVc2VySW5mbyAoKlVzZXIpOw0KPi0gICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0g IH0NCj4tDQo+LSAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEOw0KPi19DQo+LQ0KPi0NCj4tLyoq DQo+LSAgQW4gZW1wdHkgZnVuY3Rpb24gdG8gcGFzcyBlcnJvciBjaGVja2luZyBvZiBDcmVhdGVF dmVudEV4ICgpLg0KPi0NCj4tICBAcGFyYW0gIEV2ZW50ICAgICAgICAgRXZlbnQgd2hvc2Ugbm90 aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuDQo+LSAgQHBhcmFtICBDb250ZXh0 ICAgICAgIFBvaW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRleHQsDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVu dC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUVGSUFQSQ0KPi1JbnRlcm5hbEVtcHR5RnVudGlvbiAo DQo+LSAgSU4gRUZJX0VWRU5UICAgICAgICAgICAgICAgIEV2ZW50LA0KPi0gIElOIFZPSUQgICAg ICAgICAgICAgICAgICAgICAqQ29udGV4dA0KPi0gICkNCj4tew0KPi19DQo+LQ0KPi0NCj4tLyoq DQo+LSAgQ3JlYXRlLCBTaWduYWwsIGFuZCBDbG9zZSB0aGUgVXNlciBQcm9maWxlIENoYW5nZWQg ZXZlbnQuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1TaWduYWxFdmVudFVzZXJQcm9maWxlQ2hhbmdl ZCAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPi0g IEVGSV9FVkVOVCAgICAgRXZlbnQ7DQo+LQ0KPi0gIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnRF eCAoDQo+LSAgICAgICAgICAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFMLA0KPi0gICAgICAgICAg ICAgICAgICBUUExfQ0FMTEJBQ0ssDQo+LSAgICAgICAgICAgICAgICAgIEludGVybmFsRW1wdHlG dW50aW9uLA0KPi0gICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAm Z0VmaUV2ZW50VXNlclByb2ZpbGVDaGFuZ2VkR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgJkV2 ZW50DQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVz KTsNCj4tICBnQlMtPlNpZ25hbEV2ZW50IChFdmVudCk7DQo+LSAgZ0JTLT5DbG9zZUV2ZW50IChF dmVudCk7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBDcmVhdGUgYSBuZXcgdXNlciBwcm9maWxl Lg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgdXNlciBwcm9maWxlIHdpdGgg b25seSBhIG5ldyB1c2VyIGlkZW50aWZpZXINCj5hdHRhY2hlZCBhbmQgcmV0dXJucw0KPi0gIGl0 cyBoYW5kbGUuIFRoZSB1c2VyIHByb2ZpbGUgaXMgbm9uLXZvbGF0aWxlLCBidXQgdGhlIGhhbmRs ZSBVc2VyIGNhbiBjaGFuZ2UNCj5hY3Jvc3MgcmVib290cy4NCj4tDQo+LSAgQHBhcmFtW2luXSAg VGhpcyAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9V U0VSX01BTkFHRVJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW291dF0gVXNlciAgICAgICAgICAgICAg IE9uIHJldHVybiwgcG9pbnRzIHRvIHRoZSBuZXcgdXNlciBwcm9maWxlIGhhbmRsZS4NCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUgaXMg dW5pcXVlIG9ubHkgZHVyaW5nIHRoaXMgYm9vdC4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgIFVzZXIgcHJvZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuDQo+LSAg QHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgIEN1cnJlbnQgdXNlciBkb2VzIG5vdCBoYXZl IHN1ZmZpY2llbnQNCj5wZXJtaXNzaW9ucyB0byBjcmVhdGUgYQ0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1c2VyIHByb2ZpbGUuDQo+LSAgQHJldHZhbCBFRklfVU5TVVBQT1JU RUQgICAgICAgIENyZWF0aW9uIG9mIG5ldyB1c2VyIHByb2ZpbGVzIGlzIG5vdA0KPnN1cHBvcnRl ZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVGhlIFVzZXIgcGFyYW1ldGVy IGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2Zp bGVDcmVhdGUgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAg ICAgICAqVGhpcywNCj4tICBPVVQgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAg ICAgICAgKlVzZXINCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LQ0KPi0g IGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoVXNlciA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgdGhl IHJpZ2h0IG9mIHRoZSBjdXJyZW50IHVzZXIuDQo+LSAgLy8NCj4tICBpZiAoIUNoZWNrQ3VycmVu dFVzZXJBY2Nlc3NSaWdodCAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFKSkgew0KPi0gICAg aWYgKCFDaGVja0N1cnJlbnRVc2VyQWNjZXNzUmlnaHQNCj4oRUZJX1VTRVJfSU5GT19BQ0NFU1Nf RU5ST0xMX09USEVSUykpIHsNCj4tICAgICAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEOw0KPi0g ICAgfQ0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBDcmVhdGUgbmV3IHVzZXIgcHJvZmlsZQ0K Pi0gIC8vDQo+LSAgU3RhdHVzID0gQ3JlYXRlVXNlclByb2ZpbGUgKChVU0VSX1BST0ZJTEVfRU5U UlkgKiopIFVzZXIpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIHJldHVy biBFRklfQUNDRVNTX0RFTklFRDsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19 DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRGVsZXRlIGFuIGV4aXN0aW5nIHVzZXIgcHJvZmlsZS4NCj4t DQo+LSAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGlzIGluc3Rh bmNlIG9mIHRoZQ0KPkVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wuDQo+LSAgQHBhcmFtW2luXSBV c2VyICAgICAgICAgICAgICAgIFVzZXIgcHJvZmlsZSBoYW5kbGUuDQo+LQ0KPi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBkZWxl dGVkLg0KPi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBDdXJyZW50IHVzZXIgZG9l cyBub3QgaGF2ZSBzdWZmaWNpZW50DQo+cGVybWlzc2lvbnMgdG8gZGVsZXRlIGEgdXNlcg0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlIG9yIHRoZXJlIGlzIG9ubHkg b25lIHVzZXIgcHJvZmlsZS4NCj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgRGVs ZXRpb24gb2YgbmV3IHVzZXIgcHJvZmlsZXMgaXMgbm90DQo+c3VwcG9ydGVkLg0KPi0gIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2VyIGRvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQg dXNlcg0KPnByb2ZpbGUuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNl clByb2ZpbGVEZWxldGUgKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09M ICAgICAgICAgICAqVGhpcywNCj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUg ICAgICAgICAgICAgVXNlcg0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4t DQo+LSAgaWYgKFRoaXMgPT0gTlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ2hlY2sgdGhlIHJpZ2h0IG9mIHRoZSBj dXJyZW50IHVzZXIuDQo+LSAgLy8NCj4tICBpZiAoIUNoZWNrQ3VycmVudFVzZXJBY2Nlc3NSaWdo dCAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFKSkgew0KPi0gICAgcmV0dXJuIEVGSV9BQ0NF U1NfREVOSUVEOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBEZWxldGUgdXNlciBwcm9maWxl Lg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gRGVsVXNlclByb2ZpbGUgKFVzZXIpOw0KPi0gIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIGlmIChTdGF0dXMgIT0gRUZJX0lOVkFMSURfUEFS QU1FVEVSKSB7DQo+LSAgICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4tICAgIH0NCj4t ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBFbnVtZXJhdGUgYWxsIG9mIHRo ZSBlbnJvbGxlZCB1c2VycyBvbiB0aGUgcGxhdGZvcm0uDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24g cmV0dXJucyB0aGUgbmV4dCBlbnJvbGxlZCB1c2VyIHByb2ZpbGUuIFRvIHJldHJpZXZlIHRoZSBm aXJzdCB1c2VyDQo+cHJvZmlsZSBoYW5kbGUsDQo+LSAgcG9pbnQgVXNlciBhdCBhIE5VTEwuIEVh Y2ggc3Vic2VxdWVudCBjYWxsIHdpbGwgcmV0cmlldmUgYW5vdGhlciB1c2VyIHByb2ZpbGUNCj5o YW5kbGUgdW50aWwgdGhlcmUNCj4tICBhcmUgbm8gbW9yZSwgYXQgd2hpY2ggcG9pbnQgVXNlciB3 aWxsIHBvaW50IHRvIE5VTEwuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAg ICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9NQU5BR0VSX1BST1RP Q09MLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VyICAgICAgICAgICBPbiBlbnRyeSwgcG9pbnRz IHRvIHRoZSBwcmV2aW91cyB1c2VyIHByb2ZpbGUNCj5oYW5kbGUgb3IgTlVMTCB0bw0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCBlbnVtZXJhdGlvbi4gT24gZXhpdCwg cG9pbnRzIHRvIHRoZSBuZXh0IHVzZXIgcHJvZmlsZQ0KPmhhbmRsZQ0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvciBOVUxMIGlmIHRoZXJlIGFyZSBubyBtb3JlIHVzZXIgcHJv ZmlsZXMuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBOZXh0IGVucm9s bGVkIHVzZXIgcHJvZmlsZSBzdWNjZXNzZnVsbHkgcmV0dXJuZWQuDQo+LSAgQHJldHZhbCBFRklf QUNDRVNTX0RFTklFRCAgICAgIE5leHQgZW5yb2xsZWQgdXNlciBwcm9maWxlIHdhcyBub3QNCj5z dWNjZXNzZnVsbHkgcmV0dXJuZWQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg IFRoZSBVc2VyIHBhcmFtZXRlciBpcyBOVUxMLg0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklB UEkNCj4tVXNlclByb2ZpbGVHZXROZXh0ICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfTUFOQUdF Ul9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+LSAgSU4gT1VUICAgIEVGSV9VU0VSX1BST0ZJ TEVfSEFORExFICAgICAgICAgICAgICpVc2VyDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAg U3RhdHVzOw0KPi0NCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFVzZXIgPT0gTlVMTCkpIHsN Cj4tICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICBTdGF0 dXMgPSBGaW5kVXNlclByb2ZpbGUgKChVU0VSX1BST0ZJTEVfRU5UUlkgKiopIFVzZXIsIFRSVUUs IE5VTEwpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIHJldHVybiBFRklf QUNDRVNTX0RFTklFRDsNCj4tICB9DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0K Pi0NCj4tLyoqDQo+LSAgUmV0dXJuIHRoZSBjdXJyZW50IHVzZXIgcHJvZmlsZSBoYW5kbGUuDQo+ LQ0KPi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0 YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtvdXRd IEN1cnJlbnRVc2VyICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgY3VycmVudCB1c2Vy IHByb2ZpbGUNCj5oYW5kbGUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg ICBDdXJyZW50IHVzZXIgcHJvZmlsZSBoYW5kbGUgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0g IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGUgQ3VycmVudFVzZXIgcGFyYW1ldGVy IGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2Zp bGVDdXJyZW50ICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAg ICAgICAgKlRoaXMsDQo+LSAgT1VUICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAg ICAgICAgICpDdXJyZW50VXNlcg0KPi0gICkNCj4tew0KPi0gIC8vDQo+LSAgLy8gR2V0IGN1cnJl bnQgdXNlciBwcm9maWxlLg0KPi0gIC8vDQo+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChDdXJy ZW50VXNlciA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4tICB9DQo+LQ0KPi0gICpDdXJyZW50VXNlciA9IG1DdXJyZW50VXNlcjsNCj4tICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBJZGVudGlmeSBhIHVzZXIuDQo+ LQ0KPi0gIElkZW50aWZ5IHRoZSB1c2VyIGFuZCwgaWYgYXV0aGVudGljYXRlZCwgcmV0dXJucyB0 aGUgdXNlciBoYW5kbGUgYW5kIGNoYW5nZXMNCj50aGUgY3VycmVudA0KPi0gIHVzZXIgcHJvZmls ZS4gQWxsIHVzZXIgaW5mb3JtYXRpb24gbWFya2VkIGFzIHByaXZhdGUgaW4gYSBwcmV2aW91c2x5 IHNlbGVjdGVkDQo+cHJvZmlsZQ0KPi0gIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIGluc3Bl Y3Rpb24uDQo+LSAgV2hlbmV2ZXIgdGhlIGN1cnJlbnQgdXNlciBwcm9maWxlIGlzIGNoYW5nZWQg dGhlbiB0aGUgYW4gZXZlbnQgd2l0aCB0aGUNCj5HVUlEDQo+LSAgRUZJX0VWRU5UX0dST1VQX1VT RVJfUFJPRklMRV9DSEFOR0VEIGlzIHNpZ25hbGVkLg0KPi0NCj4tICBAcGFyYW1baW5dICBUaGlz ICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJf TUFOQUdFUl9QUk9UT0NPTC4NCj4tICBAcGFyYW1bb3V0XSBVc2VyICAgICAgICAgICAgICAgT24g cmV0dXJuLCBwb2ludHMgdG8gdGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUgZm9yDQo+dGhlIGN1cnJl bnQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBwcm9maWxlLg0KPi0N Cj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVXNlciB3YXMgc3VjY2Vzc2Z1bGx5 IGlkZW50aWZpZWQuDQo+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgIFVzZXIgd2Fz IG5vdCBzdWNjZXNzZnVsbHkgaWRlbnRpZmllZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgVGhlIFVzZXIgcGFyYW1ldGVyIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NU QVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVJZGVudGlmeSAoDQo+LSAgSU4gQ09OU1QgIEVG SV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KPi0gIE9VVCAgICAgICBF RklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAqVXNlcg0KPi0gICkNCj4tew0KPi0g IEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tDQo+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChVc2Vy ID09IE5VTEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0N Cj4tDQo+LSAgaWYgKG1DdXJyZW50VXNlciAhPSBOVUxMKSB7DQo+LSAgICAqVXNlciA9IG1DdXJy ZW50VXNlcjsNCj4tICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+ LSAgLy8gSWRlbnRpZnkgdXNlcg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gSWRlbnRpZnlVc2VyICgo VVNFUl9QUk9GSUxFX0VOVFJZICoqKSBVc2VyKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+LSAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+LSAgfQ0KPi0NCj4tICAvLw0K Pi0gIC8vIFB1Ymxpc2ggdGhlIHVzZXIgaW5mbyBpbnRvIHRoZSBFRkkgc3lzdGVtIGNvbmZpZ3Vy YXRpb24gdGFibGUuDQo+LSAgLy8NCj4tICBQdWJsaXNoVXNlclRhYmxlICgpOw0KPi0NCj4tICAv Lw0KPi0gIC8vIFNpZ25hbCBVc2VyIFByb2ZpbGUgQ2hhbmdlZCBldmVudC4NCj4tICAvLw0KPi0g IFNpZ25hbEV2ZW50VXNlclByb2ZpbGVDaGFuZ2VkICgpOw0KPi0gIHJldHVybiBFRklfU1VDQ0VT UzsNCj4tfQ0KPi0NCj4tLyoqDQo+LSAgRmluZCBhIHVzZXIgdXNpbmcgYSB1c2VyIGluZm9ybWF0 aW9uIHJlY29yZC4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBhbGwgdXNlciBwcm9m aWxlcyBmb3IgdGhlIHNwZWNpZmllZCB1c2VyIGluZm9ybWF0aW9uDQo+cmVjb3JkLg0KPi0gIFRo ZSBzZWFyY2ggc3RhcnRzIHdpdGggdGhlIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIGhhbmRsZSBm b2xsb3dpbmcNCj5Vc2VySW5mbyBhbmQNCj4tICBjb250aW51ZXMgdW50aWwgZWl0aGVyIHRoZSBp bmZvcm1hdGlvbiBpcyBmb3VuZCBvciB0aGVyZSBhcmUgbm8gbW9yZSB1c2VyDQo+cHJvZmlsZXMu DQo+LSAgQSBtYXRjaCBvY2N1cnMgd2hlbiB0aGUgSW5mby5JbmZvVHlwZSBmaWVsZCBtYXRjaGVz IHRoZSB1c2VyIGluZm9ybWF0aW9uDQo+cmVjb3JkDQo+LSAgdHlwZSBhbmQgdGhlIHVzZXIgaW5m b3JtYXRpb24gcmVjb3JkIGRhdGEgbWF0Y2hlcyB0aGUgcG9ydGlvbiBvZiBJbmZvLg0KPi0NCj4t ICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ug b2YgdGhlDQo+RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTC4NCj4tICBAcGFyYW1baW4sIG91dF0g VXNlciAgICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byB0aGUgcHJldmlvdXNseSByZXR1cm5l ZCB1c2VyDQo+cHJvZmlsZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k bGUsIG9yIE5VTEwgdG8gc3RhcnQgc2VhcmNoaW5nIHdpdGggdGhlIGZpcnN0IHVzZXIgcHJvZmls ZS4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gcmV0dXJuLCBwb2ludHMg dG8gdGhlIHVzZXIgcHJvZmlsZSBoYW5kbGUsIG9yIE5VTEwgaWYgbm90DQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLg0KPi0gIEBwYXJhbVtpbiwgb3V0XSBVc2VySW5m byAgICAgICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBwcmV2aW91c2x5IHJldHVybmVkDQo+dXNl ciBpbmZvcm1hdGlvbg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUs IG9yIE5VTEwgdG8gc3RhcnQgc2VhcmNoaW5nIHdpdGggdGhlIGZpcnN0LiBPbiByZXR1cm4sDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyB0byB0aGUgdXNlciBpbmZv cm1hdGlvbiBoYW5kbGUgb2YgdGhlIHVzZXINCj5pbmZvcm1hdGlvbg0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZWNvcmQsIG9yIE5VTEwgaWYgbm90IGZvdW5kLiBDYW4gYmUg TlVMTCwgaW4gd2hpY2ggY2FzZSBvbmx5DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9uZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBwZXIgdXNlciBjYW4gYmUgcmV0dXJuZWQu DQo+LSAgQHBhcmFtW2luXSAgICAgIEluZm8gICAgICAgICAgIFBvaW50cyB0byB0aGUgYnVmZmVy IGNvbnRhaW5pbmcgdGhlIHVzZXIgaW5mb3JtYXRpb24NCj50byBiZQ0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiByZWNv cmQuIElmIHRoZSB1c2VyDQo+aW5mb3JtYXRpb24NCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVjb3JkIGRhdGEgaXMgZW1wdHksIHRoZW4gb25seSB0aGUgdXNlciBpbmZvcm1h dGlvbiByZWNvcmQNCj50eXBlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz IGNvbXBhcmVkLiBJZiBJbmZvU2l6ZSBpcyAwLCB0aGVuIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJl Y29yZA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIGVtcHR5Lg0K Pi0NCj4tICBAcGFyYW1baW5dICAgICAgSW5mb1NpemUgICAgICAgVGhlIHNpemUgb2YgSW5mbywg aW4gYnl0ZXMuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBVc2VyIGlu Zm9ybWF0aW9uIHdhcyBmb3VuZC4gVXNlciBwb2ludHMgdG8gdGhlDQo+dXNlciBwcm9maWxlDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYW5kIFVzZXJJbmZvIHBv aW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiBoYW5kbGUuDQo+LSAgQHJldHZhbCBFRklfTk9U X0ZPVU5EICAgICAgICAgIFVzZXIgaW5mb3JtYXRpb24gd2FzIG5vdCBmb3VuZC4gVXNlciBwb2lu dHMNCj50byBOVUxMLCBhbmQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNl ckluZm8gcG9pbnRzIHRvIE5VTEwuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg IFVzZXIgaXMgTlVMTC4gT3IgSW5mbyBpcyBOVUxMLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMN Cj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlRmluZCAoDQo+LSAgSU4gICAgIENPTlNUIEVGSV9VU0VS X01BTkFHRVJfUFJPVE9DT0wgICAgICAgICpUaGlzLA0KPi0gIElOIE9VVCBFRklfVVNFUl9QUk9G SUxFX0hBTkRMRSAgICAgICAgICAgICAgICAqVXNlciwNCj4tICBJTiBPVVQgRUZJX1VTRVJfSU5G T19IQU5ETEUgICAgICAgICAgICAgICAgICAgKlVzZXJJbmZvIE9QVElPTkFMLA0KPi0gIElOICAg ICBDT05TVCBFRklfVVNFUl9JTkZPICAgICAgICAgICAgICAgICAgICAqSW5mbywNCj4tICBJTiAg ICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mb1NpemUNCj4tICAp DQo+LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LSAgVUlOVE4gICAgICAgU2l6ZTsNCj4t DQo+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChVc2VyID09IE5VTEwpIHx8IChJbmZvID09IE5V TEwpKSB7DQo+LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+ LSAgaWYgKEluZm9TaXplID09IDApIHsNCj4tICAgIC8vDQo+LSAgICAvLyBJZiBJbmZvU2l6ZSBp cyAwLCB0aGVuIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBtdXN0IGJlIGVtcHR5Lg0KPi0g ICAgLy8NCj4tICAgIGlmIChJbmZvLT5JbmZvU2l6ZSAhPSBzaXplb2YgKEVGSV9VU0VSX0lORk8p KSB7DQo+LSAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgICB9DQo+LSAg fSBlbHNlIHsNCj4tICAgIGlmIChJbmZvU2l6ZSAhPSBJbmZvLT5JbmZvU2l6ZSkgew0KPi0gICAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gICAgfQ0KPi0gIH0NCj4tICBTaXpl ID0gSW5mby0+SW5mb1NpemU7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRmluZCB1c2VyIHByb2ZpbGUg YWNjZG9yaW5nIHRvIHVzZXIgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBGaW5k VXNlclByb2ZpbGVCeUluZm8gKA0KPi0gICAgICAgICAgICAoVVNFUl9QUk9GSUxFX0VOVFJZICoq KSBVc2VyLA0KPi0gICAgICAgICAgICAoRUZJX1VTRVJfSU5GTyAqKikgVXNlckluZm8sDQo+LSAg ICAgICAgICAgIChFRklfVVNFUl9JTkZPICopIEluZm8sDQo+LSAgICAgICAgICAgIFNpemUNCj4t ICAgICAgICAgICAgKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAqVXNl ciA9IE5VTEw7DQo+LSAgICBpZiAoVXNlckluZm8gIT0gTlVMTCkgew0KPi0gICAgICAqVXNlcklu Zm8gPSBOVUxMOw0KPi0gICAgfQ0KPi0gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+LSAgfQ0K Pi0NCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBSZXR1 cm4gaW5mb3JtYXRpb24gYXR0YWNoZWQgdG8gdGhlIHVzZXIuDQo+LQ0KPi0gIFRoaXMgZnVuY3Rp b24gcmV0dXJucyB1c2VyIGluZm9ybWF0aW9uLiBUaGUgZm9ybWF0IG9mIHRoZSBpbmZvcm1hdGlv biBpcw0KPmRlc2NyaWJlZCBpbiBVc2VyDQo+LSAgSW5mb3JtYXRpb24uIFRoZSBmdW5jdGlvbiBt YXkgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEIGlmIHRoZQ0KPmluZm9ybWF0aW9uIGlzIG1hcmtl ZCBwcml2YXRlDQo+LSAgYW5kIHRoZSBoYW5kbGUgc3BlY2lmaWVkIGJ5IFVzZXIgaXMgbm90IHRo ZSBjdXJyZW50IHVzZXIgcHJvZmlsZS4gVGhlIGZ1bmN0aW9uDQo+bWF5IHJldHVybg0KPi0gIEVG SV9BQ0NFU1NfREVOSUVEIGlmIHRoZSBpbmZvcm1hdGlvbiBpcyBtYXJrZWQgcHJvdGVjdGVkIGFu ZCB0aGUNCj5pbmZvcm1hdGlvbiBpcyBhc3NvY2lhdGVkDQo+LSAgd2l0aCBhIGNyZWRlbnRpYWwg cHJvdmlkZXIgZm9yIHdoaWNoIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBhdXRoZW50aWNhdGVkLg0K Pi0NCj4tICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5z dGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTC4NCj4tICBAcGFyYW1baW5d ICAgICAgVXNlciAgICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIHdob3NlIHByb2ZpbGUgd2ls bCBiZSByZXRyaWV2ZWQuDQo+LSAgQHBhcmFtW2luXSAgICAgIFVzZXJJbmZvICAgICAgIEhhbmRs ZSBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbiBkYXRhIHJlY29yZC4NCj4tICBAcGFyYW1bb3V0XSAg ICAgSW5mbyAgICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byBhIGJ1ZmZlciBvZiBhdCBsZWFz dCAqSW5mb1NpemUNCj5ieXRlcy4gT24gZXhpdCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaG9sZHMgdGhlIHVzZXIgaW5mb3JtYXRpb24uIElmIHRoZSBidWZmZXIgaXMgdG9v IHNtYWxsIHRvIGhvbGQNCj50aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5mb3JtYXRpb24sIHRoZW4gRUZJX0JVRkZFUl9UT09fU01BTEwgaXMgcmV0dXJuZWQgYW5kDQo+ SW5mb1NpemUgaXMNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCB0 byBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVxdWlyZWQuDQo+LSAgQHBh cmFtW2luLCBvdXRdIEluZm9TaXplICAgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHNpemUg b2YgSW5mby4gT24gcmV0dXJuLA0KPnBvaW50cyB0byB0aGUgc2l6ZQ0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+LSAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIEluZm9ybWF0aW9uIHJldHVybmVkIHN1Y2Nlc3Nm dWxseS4NCj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgVGhlIGluZm9ybWF0aW9u IGFib3V0IHRoZSBzcGVjaWZpZWQgdXNlcg0KPmNhbm5vdCBiZSBhY2Nlc3NlZCBieSB0aGUNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCB1c2VyLg0KPi0gIEByZXR2 YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHNwZWNpZmllZCBi eQ0KPipJbmZvU2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgZGF0YS4gVGhlIGFjdHVhbCBzaXplIHJlcXVpcmVk IGlzIHJldHVybmVkIGluDQo+KkluZm9TaXplLg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAg ICAgICAgICBVc2VyIGRvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgdXNlciBwcm9maWxlIG9yDQo+ VXNlckluZm8gZG9lcyBub3QgcmVmZXINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdG8gYSB2YWxpZCB1c2VyIGluZm8gaGFuZGxlLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICBJbmZvIGlzIE5VTEwgb3IgSW5mb1NpemUgaXMgTlVMTC4NCj4tDQo+LSoqLw0K Pi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1Vc2VyUHJvZmlsZUdldEluZm8gKA0KPi0gIElOIENP TlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywNCj4tICBJTiAg ICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgVXNlciwNCj4tICBJTiAg ICAgICAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAgICAgVXNlckluZm8sDQo+LSAg T1VUICAgICAgIEVGSV9VU0VSX0lORk8gICAgICAgICAgICAgICAgICAgICAgICpJbmZvLA0KPi0g IElOIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSW5mb1NpemUN Cj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LQ0KPi0gIGlmICgoVGhpcyA9 PSBOVUxMKSB8fCAoSW5mb1NpemUgPT0gTlVMTCkpIHsNCj4tICAgIHJldHVybiBFRklfSU5WQUxJ RF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICBpZiAoKCpJbmZvU2l6ZSAhPSAwKSAmJiAoSW5m byA9PSBOVUxMKSkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9 DQo+LQ0KPi0gIGlmICgoVXNlciA9PSBOVUxMKSB8fCAoVXNlckluZm8gPT0gTlVMTCkpIHsNCj4t ICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPi0gIH0NCj4tDQo+LSAgU3RhdHVzID0gR2V0VXNl ckluZm8gKFVzZXIsIFVzZXJJbmZvLCBJbmZvLCBJbmZvU2l6ZSwgVFJVRSk7DQo+LSAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgaWYgKFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19T TUFMTCkgew0KPi0gICAgICByZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+LSAgICB9DQo+ LSAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+LSAgfQ0KPi0gIHJldHVybiBFRklfU1VD Q0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEFkZCBvciB1cGRhdGUgdXNlciBpbmZvcm1h dGlvbi4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHVzZXIgaW5mb3JtYXRpb24uICBJ ZiBOVUxMIGlzIHBvaW50ZWQgdG8gYnkgVXNlckluZm8sDQo+dGhlbiBhIG5ldyB1c2VyDQo+LSAg aW5mb3JtYXRpb24gcmVjb3JkIGlzIGNyZWF0ZWQgYW5kIGl0cyBoYW5kbGUgaXMgcmV0dXJuZWQg aW4gVXNlckluZm8uDQo+T3RoZXJ3aXNlLCB0aGUgZXhpc3RpbmcNCj4tICBvbmUgaXMgcmVwbGFj ZWQuDQo+LSAgSWYgRUZJX1VTRVJfSU5GT19JREVOSVRUWV9QT0xJQ1lfUkVDT1JEIGlzIGNoYW5n ZWQsIGl0IGlzIHRoZSBjYWxsZXIncw0KPnJlc3BvbnNpYmlsaXR5IHRvIGtlZXANCj4tICBpdCB0 byBiZSBzeW5jZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gb24gY3JlZGVudGlhbCBwcm92aWRlcnMu DQo+LSAgSWYgRUZJX1VTRVJfSU5GT19FWENMVVNJVkUgaXMgc3BlY2lmaWVkIGluIEluZm8gYW5k IGEgdXNlciBpbmZvcm1hdGlvbg0KPnJlY29yZCBvZiB0aGUgc2FtZQ0KPi0gIHR5cGUgYWxyZWFk eSBleGlzdHMgaW4gdGhlIHVzZXIgcHJvZmlsZSwgdGhlbiBFRklfQUNDRVNTX0RFTklFRCB3aWxs IGJlDQo+cmV0dXJuZWQgYW5kIFVzZXJJbmZvDQo+LSAgd2lsbCBwb2ludCB0byB0aGUgaGFuZGxl IG9mIHRoZSBleGlzdGluZyByZWNvcmQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICAgICBUaGlzICAg ICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfTUFOQUdF Ul9QUk9UT0NPTC4NCj4tICBAcGFyYW1baW5dICAgICAgVXNlciAgICAgICAgICAgIEhhbmRsZSBv ZiB0aGUgdXNlciB3aG9zZSBwcm9maWxlIHdpbGwgYmUgcmV0cmlldmVkLg0KPi0gIEBwYXJhbVtp biwgb3V0XSBVc2VySW5mbyAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGRh dGEgcmVjb3JkLg0KPi0gIEBwYXJhbVtpbl0gICAgICBJbmZvICAgICAgICAgICAgT24gZW50cnks IHBvaW50cyB0byBhIGJ1ZmZlciBvZiBhdCBsZWFzdCAqSW5mb1NpemUNCj5ieXRlcy4gT24gZXhp dCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRzIHRoZSB1c2VyIGlu Zm9ybWF0aW9uLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCB0byBob2xkDQo+dGhlDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiwgdGhlbiBFRklfQlVG RkVSX1RPT19TTUFMTCBpcyByZXR1cm5lZCBhbmQNCj5JbmZvU2l6ZSBpcw0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCB0byBjb250YWluIHRoZSBudW1iZXIgb2Yg Ynl0ZXMgYWN0dWFsbHkgcmVxdWlyZWQuDQo+LSAgQHBhcmFtW2luXSAgICAgIEluZm9TaXplICAg ICAgICBPbiBlbnRyeSwgcG9pbnRzIHRvIHRoZSBzaXplIG9mIEluZm8uIE9uIHJldHVybiwNCj5w b2ludHMgdG8gdGhlIHNpemUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9m IHRoZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgIEluZm9ybWF0aW9uIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIEVG SV9BQ0NFU1NfREVOSUVEICAgICAgIFRoZSByZWNvcmQgaXMgZXhjbHVzaXZlLg0KPi0gIEByZXR2 YWwgRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTiAgVGhlIGN1cnJlbnQgdXNlciBkb2VzIG5vdCBoYXZl DQo+cGVybWlzc2lvbiB0byBjaGFuZ2UgdGhlIHNwZWNpZmllZA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdXNlciBwcm9maWxlIG9yIHVzZXIgaW5mb3JtYXRpb24gcmVjb3Jk Lg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgVXNlciBkb2VzIG5vdCByZWZl ciB0byBhIHZhbGlkIHVzZXIgcHJvZmlsZSBvcg0KPlVzZXJJbmZvIGRvZXMgbm90DQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlciB0byBhIHZhbGlkIHVzZXIgaW5mbyBo YW5kbGUuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBVc2VySW5mbyBpcyBO VUxMIG9yIEluZm8gaXMgTlVMTC4NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVz ZXJQcm9maWxlU2V0SW5mbyAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9D T0wgICAgICAgICAgICpUaGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRM RSAgICAgICAgICAgICBVc2VyLA0KPi0gIElOIE9VVCAgICBFRklfVVNFUl9JTkZPX0hBTkRMRSAg ICAgICAgICAgICAgICAqVXNlckluZm8sDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0lORk8gICAg ICAgICAgICAgICAgICAgICAgICpJbmZvLA0KPi0gIElOICAgICAgICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmZvU2l6ZQ0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMg IFN0YXR1czsNCj4tDQo+LSAgaWYgKChUaGlzID09IE5VTEwpIHx8IChVc2VyID09IE5VTEwpIHx8 IChVc2VySW5mbyA9PSBOVUxMKSB8fCAoSW5mbyA9PSBOVUxMKSkNCj57DQo+LSAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBDaGVjayB0 aGUgcmlnaHQgb2YgdGhlIGN1cnJlbnQgdXNlci4NCj4tICAvLw0KPi0gIGlmIChVc2VyICE9IG1D dXJyZW50VXNlcikgew0KPi0gICAgaWYgKCFDaGVja0N1cnJlbnRVc2VyQWNjZXNzUmlnaHQgKEVG SV9VU0VSX0lORk9fQUNDRVNTX01BTkFHRSkpIHsNCj4tICAgICAgaWYgKCpVc2VySW5mbyAhPSBO VUxMKSB7DQo+LSAgICAgICAgLy8NCj4tICAgICAgICAvLyBDYW4ndCB1cGRhdGUgaW5mbyBpbiBv dGhlciBwcm9maWxlcyB3aXRob3V0IE1BTkFHRSByaWdodC4NCj4tICAgICAgICAvLw0KPi0gICAg ICAgIHJldHVybiBFRklfU0VDVVJJVFlfVklPTEFUSU9OOw0KPi0gICAgICB9DQo+LQ0KPi0gICAg ICBpZiAoIUNoZWNrQ3VycmVudFVzZXJBY2Nlc3NSaWdodA0KPihFRklfVVNFUl9JTkZPX0FDQ0VT U19FTlJPTExfT1RIRVJTKSkgew0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gQ2FuJ3QgYWRk IGluZm8gaW50byBvdGhlciBwcm9maWxlcy4NCj4tICAgICAgICAvLw0KPi0gICAgICAgIHJldHVy biBFRklfU0VDVVJJVFlfVklPTEFUSU9OOw0KPi0gICAgICB9DQo+LSAgICB9DQo+LSAgfQ0KPi0N Cj4tICBpZiAoVXNlciA9PSBtQ3VycmVudFVzZXIpIHsNCj4tICAgIGlmIChDaGVja0N1cnJlbnRV c2VyQWNjZXNzUmlnaHQgKEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9TRUxGKSkNCj57DQo+ LSAgICAgIC8vDQo+LSAgICAgIC8vIE9ubHkgaWRlbnRpZnkgcG9saWN5IGNhbiBiZSBhZGRlZC91 cGRhdGVkLg0KPi0gICAgICAvLw0KPi0gICAgICBpZiAoSW5mby0+SW5mb1R5cGUgIT0gRUZJX1VT RVJfSU5GT19JREVOVElUWV9QT0xJQ1lfUkVDT1JEKSB7DQo+LSAgICAgICAgcmV0dXJuIEVGSV9T RUNVUklUWV9WSU9MQVRJT047DQo+LSAgICAgIH0NCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIC8v DQo+LSAgLy8gTW9kaWZ5IHVzZXIgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBN b2RpZnlVc2VySW5mbyAoVXNlciwgKEVGSV9VU0VSX0lORk8gKiopIFVzZXJJbmZvLCBJbmZvLA0K PkluZm9TaXplKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBpZiAoU3Rh dHVzID09IEVGSV9BQ0NFU1NfREVOSUVEKSB7DQo+LSAgICAgIHJldHVybiBFRklfQUNDRVNTX0RF TklFRDsNCj4tICAgIH0NCj4tICAgIHJldHVybiBFRklfU0VDVVJJVFlfVklPTEFUSU9OOw0KPi0g IH0NCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBDYWxs ZWQgYnkgY3JlZGVudGlhbCBwcm92aWRlciB0byBub3RpZnkgb2YgaW5mb3JtYXRpb24gY2hhbmdl Lg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgY3JlZGVudGlhbCBwcm92aWRlciB0 byBub3RpZnkgdGhlIFVzZXIgSWRlbnRpdHkNCj5NYW5hZ2VyIHdoZW4gdXNlciBzdGF0dXMNCj4t ICBoYXMgY2hhbmdlZC4NCj4tICBJZiB0aGUgVXNlciBJZGVudGl0eSBNYW5hZ2VyIGRvZXNuJ3Qg c3VwcG9ydCBhc3luY2hyb25vdXMgY2hhbmdlcyBpbg0KPmNyZWRlbnRpYWxzLCB0aGVuIHRoaXMg ZnVuY3Rpb24NCj4tICBzaG91bGQgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRC4NCj4tICBJZiBjdXJy ZW50IHVzZXIgZG9lcyBub3QgZXhpc3QsIGFuZCB0aGUgY3JlZGVudGlhbCBwcm92aWRlciBjYW4g aWRlbnRpZnkgYSB1c2VyLA0KPnRoZW4gbWFrZSB0aGUgdXNlcg0KPi0gIHRvIGJlIGN1cnJlbnQg dXNlciBhbmQgc2lnbmFsIHRoZQ0KPkVGSV9FVkVOVF9HUk9VUF9VU0VSX1BST0ZJTEVfQ0hBTkdF RCBldmVudC4NCj4tICBJZiBjdXJyZW50IHVzZXIgYWxyZWFkeSBleGlzdHMsIGFuZCB0aGUgY3Jl ZGVudGlhbCBwcm92aWRlciBjYW4gaWRlbnRpZnkNCj5hbm90aGVyIHVzZXIsIHRoZW4gc3dpdGNo DQo+LSAgY3VycmVudCB1c2VyIHRvIHRoZSBuZXdseSBpZGVudGlmaWVkIHVzZXIsIGFuZCBzaWdu YWwgdGhlDQo+RUZJX0VWRU5UX0dST1VQX1VTRVJfUFJPRklMRV9DSEFOR0VEIGV2ZW50Lg0KPi0g IElmIGN1cnJlbnQgdXNlciB3YXMgaWRlbnRpZmllZCBieSB0aGlzIGNyZWRlbnRpYWwgcHJvdmlk ZXIgYW5kIG5vdyB0aGUNCj5jcmVkZW50aWFsIHByb3ZpZGVyIGNhbm5vdCBpZGVudGlmeQ0KPi0g IGN1cnJlbnQgdXNlciwgdGhlbiBsb2dvdXQgY3VycmVudCB1c2VyIGFuZCBzaWduYWwgdGhlDQo+ RUZJX0VWRU5UX0dST1VQX1VTRVJfUFJPRklMRV9DSEFOR0VEIGV2ZW50Lg0KPi0NCj4tICBAcGFy YW1baW5dIFRoaXMgICAgICAgICAgUG9pbnRzIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlDQo+RUZJ X1VTRVJfTUFOQUdFUl9QUk9UT0NPTC4NCj4tICBAcGFyYW1baW5dIENoYW5nZWQgICAgICAgSGFu ZGxlIG9uIHdoaWNoIGlzIGluc3RhbGxlZCBhbiBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNFUl9D UkVERU5USUFMMl9QUk9UT0NPTA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0 aGUgdXNlciBoYXMgY2hhbmdlZC4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIFRo ZSBVc2VyIElkZW50aXR5IE1hbmFnZXIgaGFzIGhhbmRsZWQgdGhlDQo+bm90aWZpY2F0aW9uLg0K Pi0gIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICBUaGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aGls ZSB0aGUgc3BlY2lmaWVkDQo+Y3JlZGVudGlhbCBwcm92aWRlciB3YXMgbm90IHNlbGVjdGVkLg0K Pi0gIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICBUaGUgVXNlciBJZGVudGl0eSBNYW5hZ2VyIGRv ZXNuJ3Qgc3VwcG9ydA0KPmFzeW5jaHJvbm91cyBub3RpZmljYXRpb25zLg0KPi0NCj4tKiovDQo+ LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlTm90aWZ5ICgNCj4tICBJTiBDT05T VCAgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+LSAgSU4gICAg ICAgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWQNCj4tICApDQo+ LXsNCj4tICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAg RGVsZXRlIHVzZXIgaW5mb3JtYXRpb24uDQo+LQ0KPi0gIERlbGV0ZSB0aGUgdXNlciBpbmZvcm1h dGlvbiBhdHRhY2hlZCB0byB0aGUgdXNlciBwcm9maWxlIHNwZWNpZmllZCBieSB0aGUNCj5Vc2Vy SW5mby4NCj4tDQo+LSAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgICAgUG9pbnRzIHRvIHRoaXMg aW5zdGFuY2Ugb2YgdGhlDQo+RUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTC4NCj4tICBAcGFyYW1b aW5dIFVzZXIgICAgICAgICAgICBIYW5kbGUgb2YgdGhlIHVzZXIgd2hvc2UgaW5mb3JtYXRpb24g d2lsbCBiZQ0KPmRlbGV0ZWQuDQo+LSAgQHBhcmFtW2luXSBVc2VySW5mbyAgICAgICAgSGFuZGxl IG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIHRvIHJlbW92ZS4NCj4tDQo+LSAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgVXNlciBpbmZvcm1hdGlvbiBkZWxldGVkIHN1Y2Nlc3NmdWxseS4NCj4t ICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICBVc2VyIGluZm9ybWF0aW9uIHJlY29yZCBVc2Vy SW5mbyBkb2VzIG5vdA0KPmV4aXN0IGluIHRoZSB1c2VyIHByb2ZpbGUuDQo+LSAgQHJldHZhbCBF RklfQUNDRVNTX0RFTklFRCAgVGhlIGN1cnJlbnQgdXNlciBkb2VzIG5vdCBoYXZlIHBlcm1pc3Np b24gdG8NCj5kZWxldGUgdGhpcyB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tKiovDQo+LUVGSV9T VEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlRGVsZXRlSW5mbyAoDQo+LSAgSU4gQ09OU1Qg IEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KPi0gIElOICAgICAg ICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyLA0KPi0gIElOICAgICAg ICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICBVc2VySW5mbw0KPi0gICkNCj4t ew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4tDQo+LSAgaWYgKFRoaXMgPT0gTlVMTCkgew0K Pi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+ LSAgLy8gQ2hlY2sgdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHVzZXIuDQo+LSAgLy8NCj4tICBp ZiAoVXNlciAhPSBtQ3VycmVudFVzZXIpIHsNCj4tICAgIGlmICghQ2hlY2tDdXJyZW50VXNlckFj Y2Vzc1JpZ2h0IChFRklfVVNFUl9JTkZPX0FDQ0VTU19NQU5BR0UpKSB7DQo+LSAgICAgIHJldHVy biBFRklfQUNDRVNTX0RFTklFRDsNCj4tICAgIH0NCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8g RGVsZXRlIHVzZXIgaW5mb3JtYXRpb24uDQo+LSAgLy8NCj4tICBTdGF0dXMgPSBEZWxVc2VySW5m byAoVXNlciwgVXNlckluZm8sIFRSVUUpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4tICAgIGlmIChTdGF0dXMgPT0gRUZJX05PVF9GT1VORCkgew0KPi0gICAgICByZXR1cm4gRUZJ X05PVF9GT1VORDsNCj4tICAgIH0NCj4tICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4t ICB9DQo+LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRW51 bWVyYXRlIHVzZXIgaW5mb3JtYXRpb24gb2YgYWxsIHRoZSBlbnJvbGxlZCB1c2VycyBvbiB0aGUg cGxhdGZvcm0uDQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV4dCB1c2VyIGlu Zm9ybWF0aW9uIHJlY29yZC4gVG8gcmV0cmlldmUgdGhlIGZpcnN0DQo+dXNlcg0KPi0gIGluZm9y bWF0aW9uIHJlY29yZCBoYW5kbGUsIHBvaW50IFVzZXJJbmZvIGF0IGEgTlVMTC4gRWFjaCBzdWJz ZXF1ZW50IGNhbGwNCj53aWxsIHJldHJpZXZlDQo+LSAgYW5vdGhlciB1c2VyIGluZm9ybWF0aW9u IHJlY29yZCBoYW5kbGUgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUsIGF0IHdoaWNoDQo+cG9pbnQg VXNlckluZm8NCj4tICB3aWxsIHBvaW50IHRvIE5VTEwuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gICAg ICBUaGlzICAgICAgICAgICBQb2ludHMgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUNCj5FRklfVVNF Ul9NQU5BR0VSX1BST1RPQ09MLg0KPi0gIEBwYXJhbVtpbl0gICAgICBVc2VyICAgICAgICAgICBI YW5kbGUgb2YgdGhlIHVzZXIgd2hvc2UgaW5mb3JtYXRpb24gd2lsbCBiZQ0KPmRlbGV0ZWQuDQo+ LSAgQHBhcmFtW2luLCBvdXRdIFVzZXJJbmZvICAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciBpbmZv cm1hdGlvbiB0byByZW1vdmUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg ICBVc2VyIGluZm9ybWF0aW9uIHJldHVybmVkLg0KPi0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAg ICAgICAgICBObyBtb3JlIHVzZXIgaW5mb3JtYXRpb24gZm91bmQuDQo+LSAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgIFVzZXJJbmZvIGlzIE5VTEwuDQo+LQ0KPi0qKi8NCj4tRUZJX1NU QVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVHZXROZXh0SW5mbyAoDQo+LSAgSU4gQ09OU1Qg IEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KPi0gIElOICAgICAg ICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBVc2VyLA0KPi0gIElOIE9VVCAg ICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICAgICAgICAgICAgICAqVXNlckluZm8NCj4tICApDQo+ LXsNCj4tICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFVzZXJJbmZvID09IE5VTEwpKSB7DQo+LSAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tICAvLw0KPi0gIC8vIEdl dCBuZXh0IHVzZXIgaW5mb3JtYXRpb24gZW50cnkuDQo+LSAgLy8NCj4tICByZXR1cm4gRmluZFVz ZXJJbmZvIChVc2VyLCAoRUZJX1VTRVJfSU5GTyAqKikgVXNlckluZm8sIFRSVUUsIE5VTEwpOw0K Pi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgTWFpbiBlbnRyeSBmb3IgdGhpcyBkcml2ZXIuDQo+LQ0K Pi0gIEBwYXJhbVtpbl0gSW1hZ2VIYW5kbGUgICAgIEltYWdlIGhhbmRsZSB0aGlzIGRyaXZlci4N Cj4tICBAcGFyYW1baW5dIFN5c3RlbVRhYmxlICAgICBQb2ludGVyIHRvIFN5c3RlbVRhYmxlLg0K Pi0NCj4tICBAcmV0dmFsIEVGSV9TVUNFU1MgICAgICAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBj b21wbGV0ZSBzdWNjZXNzZnVsbHkuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkN Cj4tVXNlcklkZW50aWZ5TWFuYWdlckluaXQgKA0KPi0gIElOIEVGSV9IQU5ETEUgICAgICAgIElt YWdlSGFuZGxlLA0KPi0gIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPi0gICkN Cj4tew0KPi0NCj4tICBFRklfU1RBVFVTICBTdGF0dXM7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSXQg aXMgTk9UIHJvYnVzdCBlbm91Z2ggdG8gYmUgaW5jbHVkZWQgaW4gcHJvZHVjdGlvbi4NCj4tICAv Lw0KPi0gICNlcnJvciAiVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBqdXN0IGEgc2FtcGxlLCBwbGVh c2UgY29tbWVudCB0aGlzIGxpbmUgaWYgeW91DQo+cmVhbGx5IHdhbnQgdG8gdXNlIHRoaXMgZHJp dmVyLiINCj4tDQo+LSAgLy8NCj4tICAvLyBJbml0aWF0ZSBmb3JtIGJyb3dzZXIuDQo+LSAgLy8N Cj4tICBJbml0Rm9ybUJyb3dzZXIgKCk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5zdGFsbCBwcm90 b2NvbCBpbnRlcmZhY2VzIGZvciB0aGUgVXNlciBJZGVudGl0eSBNYW5hZ2VyLg0KPi0gIC8vDQo+ LSAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KPi0gICAgICAgICAg ICAgICAgICAmbUNhbGxiYWNrSW5mby0+RHJpdmVySGFuZGxlLA0KPi0gICAgICAgICAgICAgICAg ICAmZ0VmaVVzZXJNYW5hZ2VyUHJvdG9jb2xHdWlkLA0KPi0gICAgICAgICAgICAgICAgICBFRklf TkFUSVZFX0lOVEVSRkFDRSwNCj4tICAgICAgICAgICAgICAgICAgJmdVc2VySWRlbnRpZnlNYW5h Z2VyDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVz KTsNCj4tDQo+LSAgTG9hZERlZmVycmVkSW1hZ2VJbml0IChJbWFnZUhhbmRsZSk7DQo+LSAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPi19DQo+LQ0KPi0NCj5kaWZmIC0tZ2l0DQo+YS9TZWN1cml0eVBr Zy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlN YW4NCj5hZ2VyLmgNCj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRp ZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFnZXIuaA0KPmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NA0KPmluZGV4IDFjNDQ5YjAxMjguLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5 UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlm eU1hbg0KPmFnZXIuaA0KPisrKyAvZGV2L251bGwNCj5AQCAtMSw0MTMgKzAsMCBAQA0KPi0vKiog QGZpbGUNCj4tICBUaGUgaGVhZGVyIGZpbGUgZm9yIFVzZXIgaWRlbnRpZnkgTWFuYWdlciBkcml2 ZXIuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFu eWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNj b21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNl IG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2Qt bGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBC U0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1Ig UkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQu DQo+LQ0KPi0qKi8NCj4tDQo+LSNpZm5kZWYgX1VTRVJfSURFTlRJRllfTUFOQUdFUl9IXw0KPi0j ZGVmaW5lIF9VU0VSX0lERU5USUZZX01BTkFHRVJfSF8NCj4tDQo+LSNpbmNsdWRlIDxVZWZpLmg+ DQo+LQ0KPi0jaW5jbHVkZSA8R3VpZC9HbG9iYWxWYXJpYWJsZS5oPg0KPi0jaW5jbHVkZSA8R3Vp ZC9NZGVNb2R1bGVIaWkuaD4NCj4tDQo+LSNpbmNsdWRlIDxQcm90b2NvbC9Gb3JtQnJvd3NlcjIu aD4NCj4tI2luY2x1ZGUgPFByb3RvY29sL0hpaURhdGFiYXNlLmg+DQo+LSNpbmNsdWRlIDxQcm90 b2NvbC9IaWlDb25maWdBY2Nlc3MuaD4NCj4tI2luY2x1ZGUgPFByb3RvY29sL0hpaVN0cmluZy5o Pg0KPi0jaW5jbHVkZSA8UHJvdG9jb2wvSGlpQ29uZmlnUm91dGluZy5oPg0KPi0jaW5jbHVkZSA8 UHJvdG9jb2wvVXNlckNyZWRlbnRpYWwyLmg+DQo+LSNpbmNsdWRlIDxQcm90b2NvbC9Vc2VyTWFu YWdlci5oPg0KPi0jaW5jbHVkZSA8UHJvdG9jb2wvRGVmZXJyZWRJbWFnZUxvYWQuaD4NCj4tI2lu Y2x1ZGUgPFByb3RvY29sL1NpbXBsZVRleHRPdXQuaD4NCj4tI2luY2x1ZGUgPFByb3RvY29sL1Np bXBsZVRleHRJbi5oPg0KPi0jaW5jbHVkZSA8UHJvdG9jb2wvU2ltcGxlVGV4dEluRXguaD4NCj4t DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYi5oPg0KPi0j aW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4tI2luY2x1ZGUg PExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9CYXNl TWVtb3J5TGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L0RldmljZVBhdGhMaWIuaD4NCj4tI2lu Y2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5o Pg0KPi0jaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFyeS9I aWlMaWIuaD4NCj4tDQo+LSNpbmNsdWRlICJVc2VySWRlbnRpZnlNYW5hZ2VyRGF0YS5oIg0KPi0N Cj4tLy8NCj4tLy8gVGhpcyBpcyB0aGUgZ2VuZXJhdGVkIElGUiBiaW5hcnkgZGF0YSBmb3IgZWFj aCBmb3Jtc2V0IGRlZmluZWQgaW4gVkZSLg0KPi0vLyBUaGlzIGRhdGEgYXJyYXkgaXMgcmVhZHkg dG8gYmUgdXNlZCBhcyBpbnB1dCBvZiBIaWlBZGRQYWNrYWdlcygpIHRvDQo+LS8vIGNyZWF0ZSBh IHBhY2thZ2VsaXN0Lg0KPi0vLw0KPi1leHRlcm4gVUlOVDggICAgICAgICAgICAgICAgVXNlcklk ZW50aWZ5TWFuYWdlclZmckJpbltdOw0KPi0NCj4tLy8NCj4tLy8gVGhpcyBpcyB0aGUgZ2VuZXJh dGVkIFN0cmluZyBwYWNrYWdlIGRhdGEgZm9yIGFsbCAuVU5JIGZpbGVzLg0KPi0vLyBUaGlzIGRh dGEgYXJyYXkgaXMgcmVhZHkgdG8gYmUgdXNlZCBhcyBpbnB1dCBvZiBIaWlBZGRQYWNrYWdlcygp IHRvDQo+LS8vIGNyZWF0ZSBhIHBhY2thZ2VsaXN0Lg0KPi0vLw0KPi1leHRlcm4gVUlOVDggICAg ICAgICAgICAgICAgVXNlcklkZW50aWZ5TWFuYWdlclN0cmluZ3NbXTsNCj4tDQo+LSNkZWZpbmUg ICBVU0VSX05VTUJFUl9JTkMgICAgICAgICAgIDMyDQo+LSNkZWZpbmUgICBERUZBVUxUX1BST0ZJ TEVfU0laRSAgICAgIDUxMg0KPi0jZGVmaW5lICAgSU5GT19QQVlMT0FEX1NJWkUgICAgICAgICA2 NA0KPi0NCj4tLy8NCj4tLy8gQ3JlZGVudGlhbCBQcm92aWRlciBJbmZvcm1hdGlvbi4NCj4tLy8N Cj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIENv dW50Ow0KPi0gIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICpQcm92aWRlclsxXTsNCj4t fSBDUkVERU5USUFMX1BST1ZJREVSX0lORk87DQo+LQ0KPi0vLw0KPi0vLyBJbnRlcm5hbCB1c2Vy IHByb2ZpbGUgZW50cnkuDQo+LS8vDQo+LXR5cGVkZWYgc3RydWN0IHsNCj4tICBVSU5UTiAgIE1h eFByb2ZpbGVTaXplOw0KPi0gIFVJTlROICAgVXNlclByb2ZpbGVTaXplOw0KPi0gIENIQVIxNiAg VXNlclZhck5hbWVbOV07DQo+LSAgVUlOVDggICAqUHJvZmlsZUluZm87DQo+LX0gVVNFUl9QUk9G SUxFX0VOVFJZOw0KPi0NCj4tLy8NCj4tLy8gSW50ZXJuYWwgdXNlciBwcm9maWxlIGRhdGFiYXNl Lg0KPi0vLw0KPi10eXBlZGVmIHN0cnVjdCB7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAg VXNlclByb2ZpbGVOdW07DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgTWF4UHJvZmlsZU51 bTsNCj4tICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSBVc2VyUHJvZmlsZVsxXTsNCj4tfSBVU0VS X1BST0ZJTEVfREI7DQo+LQ0KPi0jZGVmaW5lIFVTRVJfTUFOQUdFUl9TSUdOQVRVUkUgIFNJR05B VFVSRV8zMiAoJ1UnLCAnSScsICdNJywgJ1MnKQ0KPi0NCj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPi0g IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KPi0gIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgICAgRHJpdmVySGFuZGxlOw0KPi0gIEVGSV9ISUlfSEFORExF ICAgICAgICAgICAgICAgICAgSGlpSGFuZGxlOw0KPi0NCj4tICAvLw0KPi0gIC8vIENvbnN1bWVk IHByb3RvY29sLg0KPi0gIC8vDQo+LSAgRUZJX0hJSV9EQVRBQkFTRV9QUk9UT0NPTCAgICAgICAq SGlpRGF0YWJhc2U7DQo+LSAgRUZJX0hJSV9TVFJJTkdfUFJPVE9DT0wgICAgICAgICAqSGlpU3Ry aW5nOw0KPi0gIEVGSV9ISUlfQ09ORklHX1JPVVRJTkdfUFJPVE9DT0wgKkhpaUNvbmZpZ1JvdXRp bmc7DQo+LSAgRUZJX0ZPUk1fQlJPV1NFUjJfUFJPVE9DT0wgICAgICAqRm9ybUJyb3dzZXIyOw0K Pi0NCj4tICAvLw0KPi0gIC8vIFByb2R1Y2VkIHByb3RvY29sLg0KPi0gIC8vDQo+LSAgRUZJX0hJ SV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICBDb25maWdBY2Nlc3M7DQo+LX0gVVNFUl9NQU5BR0VS X0NBTExCQUNLX0lORk87DQo+LQ0KPi0vLy8NCj4tLy8vIEhJSSBzcGVjaWZpYyBWZW5kb3IgRGV2 aWNlIFBhdGggZGVmaW5pdGlvbi4NCj4tLy8vDQo+LXR5cGVkZWYgc3RydWN0IHsNCj4tICBWRU5E T1JfREVWSUNFX1BBVEggICAgICAgIFZlbmRvckRldmljZVBhdGg7DQo+LSAgRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MICBFbmQ7DQo+LX0gSElJX1ZFTkRPUl9ERVZJQ0VfUEFUSDsNCj4tDQo+LS8q Kg0KPi0gIFJlZ2lzdGVyIGFuIGV2ZW50IG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIHVz ZXIgcHJvZmlsZSBjaGFuZ2VkLg0KPi0NCj4tICBAcGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAg SW1hZ2UgaGFuZGxlIHRoaXMgZHJpdmVyLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tTG9hZERlZmVy cmVkSW1hZ2VJbml0ICgNCj4tICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZQ0KPi0g ICk7DQo+LQ0KPi0NCj4tLyoqDQo+LSAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IHVzZXIg cHJvZmlsZSB3aXRoIG9ubHkNCj4tICBhIG5ldyB1c2VyIGlkZW50aWZpZXIgYXR0YWNoZWQgYW5k IHJldHVybnMgaXRzIGhhbmRsZS4NCj4tICBUaGUgdXNlciBwcm9maWxlIGlzIG5vbi12b2xhdGls ZSwgYnV0IHRoZSBoYW5kbGUgVXNlcg0KPi0gIGNhbiBjaGFuZ2UgYWNyb3NzIHJlYm9vdHMuDQo+ LQ0KPi0gIEBwYXJhbVtpbl0gICBUaGlzICAgICAgICAgICAgICAgUHJvdG9jb2wgRUZJX1VTRVJf TUFOQUdFUl9QUk9UT0NPTA0KPmluc3RhbmNlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwb2ludGVyLg0KPi0gIEBwYXJhbVtvdXRdICBVc2VyICAgICAgICAgICAgICAgSGFu ZGxlIG9mIGEgbmV3IHVzZXIgcHJvZmlsZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgICBVc2VyIHByb2ZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLg0KPi0gIEBy ZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAgQ3VycmVudCB1c2VyIGRvZXMgbm90IGhhdmUg c3VmZmljaWVudA0KPnBlcm1pc3Npb25zDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0byBjcmVhdGUgYSB1c2VyIHByb2ZpbGUuDQo+LSAgQHJldHZhbCBFRklfVU5TVVBQT1JU RUQgICAgICAgICBDcmVhdGlvbiBvZiBuZXcgdXNlciBwcm9maWxlcyBpcyBub3QNCj5zdXBwb3J0 ZWQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBVc2VyIGlzIE5VTEwuDQo+ LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVDcmVhdGUgKA0K Pi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywN Cj4tICBPVVQgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgKlVzZXIN Cj4tICApOw0KPi0NCj4tDQo+LS8qKg0KPi0gIERlbGV0ZSBhbiBleGlzdGluZyB1c2VyIHByb2Zp bGUuDQo+LQ0KPi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgRUZJ X1VTRVJfTUFOQUdFUl9QUk9UT0NPTCBpbnN0YW5jZQ0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcG9pbnRlci4NCj4tICBAcGFyYW0gIFVzZXIgICAgICAgICAgICAgICAgICAg IFVzZXIgcHJvZmlsZSBoYW5kbGUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICAgVXNlciBwcm9maWxlIHdhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZC4NCj4tICBAcmV0dmFs IEVGSV9BQ0NFU1NfREVOSUVEICAgICAgIEN1cnJlbnQgdXNlciBkb2VzIG5vdCBoYXZlIHN1ZmZp Y2llbnQNCj5wZXJtaXNzaW9ucw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dG8gZGVsZXRlIGEgdXNlciBwcm9maWxlIG9yIHRoZXJlIGlzIG9ubHkgb25lDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByb2ZpbGUuDQo+LSAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgICBEZWxldGlvbiBvZiBuZXcgdXNlciBwcm9maWxlcyBpcyBub3QN Cj5zdXBwb3J0ZWQuDQo+LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBVc2VyIGRv ZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgdXNlcg0KPnByb2ZpbGUuDQo+LQ0KPi0qKi8NCj4tRUZJ X1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVEZWxldGUgKA0KPi0gIElOIENPTlNUICBF RklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywNCj4tICBJTiAgICAgICAg RUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgVXNlcg0KPi0gICk7DQo+LQ0KPi0N Cj4tLyoqDQo+LSAgR2V0IG5leHQgdXNlciBwcm9maWxlIGZyb20gdGhlIHVzZXIgcHJvZmlsZSBk YXRhYmFzZS4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAgICBUaGlzICAgICAgICAgICBQcm90b2Nv bCBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MDQo+aW5zdGFuY2UNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBvaW50ZXIuDQo+LSAgQHBhcmFtW2luLCBvdXRdICBVc2VyICAg ICAgICAgICBVc2VyIHByb2ZpbGUgaGFuZGxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICAgIE5leHQgZW5yb2xsZWQgdXNlciBwcm9maWxlIHN1Y2Nlc3NmdWxseSByZXR1 cm5lZC4NCj4tICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIFVzZXIgaXMgTlVMTC4N Cj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVGSUFQSQ0KPi1Vc2VyUHJvZmlsZUdldE5leHQg KA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhp cywNCj4tICBJTiBPVVQgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgKlVz ZXINCj4tICApOw0KPi0NCj4tDQo+LS8qKg0KPi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUg Y3VycmVudCB1c2VyIHByb2ZpbGUgaGFuZGxlLg0KPi0NCj4tICBAcGFyYW1baW5dICBUaGlzICAg ICAgICAgICAgICAgIFByb3RvY29sIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wNCj5pbnN0YW5j ZSBwb2ludGVyLg0KPi0gIEBwYXJhbVtvdXRdICBDdXJyZW50VXNlciAgICAgICAgVXNlciBwcm9m aWxlIGhhbmRsZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBDdXJy ZW50IHVzZXIgcHJvZmlsZSBoYW5kbGUgcmV0dXJuZWQNCj5zdWNjZXNzZnVsbHkuDQo+LSAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBDdXJyZW50VXNlciBpcyBOVUxMLg0KPi0NCj4t KiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlQ3VycmVudCAoDQo+LSAg SU4gQ09OU1QgIEVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KPi0g IE9VVCAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAqQ3VycmVudFVz ZXINCj4tICApOw0KPi0NCj4tDQo+LS8qKg0KPi0gIElkZW50aWZ5IHRoZSB1c2VyIGFuZCwgaWYg YXV0aGVudGljYXRlZCwgcmV0dXJucyB0aGUgdXNlciBoYW5kbGUgYW5kIGNoYW5nZXMNCj4tICB0 aGUgY3VycmVudCB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAg ICAgICAgICAgUHJvdG9jb2wgRUZJX1VTRVJfTUFOQUdFUl9QUk9UT0NPTCBpbnN0YW5jZQ0KPnBv aW50ZXIuDQo+LSAgQHBhcmFtICBDdXJyZW50VXNlciAgICAgICAgICAgICBVc2VyIHByb2ZpbGUg aGFuZGxlLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFVzZXIgd2Fz IHN1Y2Nlc3NmdWxseSBpZGVudGlmaWVkLg0KPi0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSICAgVXNlciBpcyBOVUxMLg0KPi0gIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAg VXNlciB3YXMgbm90IHN1Y2Nlc3NmdWxseSBpZGVudGlmaWVkLg0KPi0NCj4tKiovDQo+LUVGSV9T VEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlSWRlbnRpZnkgKA0KPi0gIElOIENPTlNUICBF RklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywNCj4tICBPVVQgICAgICAg RUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgKlVzZXINCj4tICApOw0KPi0NCj4t DQo+LS8qKg0KPi0gIEZpbmQgYSB1c2VyIHVzaW5nIGEgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQu DQo+LQ0KPi0gIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgYWxsIHVzZXIgcHJvZmlsZXMgZm9yIHRo ZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbg0KPnJlY29yZC4NCj4tICBUaGUgc2VhcmNoIHN0 YXJ0cyB3aXRoIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCBoYW5kbGUgZm9sbG93aW5nDQo+ VXNlckluZm8gYW5kDQo+LSAgY29udGludWVzIHVudGlsIGVpdGhlciB0aGUgaW5mb3JtYXRpb24g aXMgZm91bmQgb3IgdGhlcmUgYXJlIG5vIG1vcmUgdXNlcg0KPnByb2ZpbGVzLg0KPi0gIEEgbWF0 Y2ggb2NjdXJzIHdoZW4gdGhlIEluZm8uSW5mb1R5cGUgZmllbGQgbWF0Y2hlcyB0aGUgdXNlciBp bmZvcm1hdGlvbg0KPnJlY29yZA0KPi0gIHR5cGUgYW5kIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJl Y29yZCBkYXRhIG1hdGNoZXMgdGhlIHBvcnRpb24gb2YgSW5mbw0KPnBhc3NlZCB0aGUNCj4tICBF RklfVVNFUl9JTkZPIGhlYWRlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAgIFBv aW50cyB0byB0aGlzIGluc3RhbmNlIG9mIHRoZQ0KPkVGSV9VU0VSX01BTkFHRVJfUFJPVE9DT0wu DQo+LSAgQHBhcmFtW2luLCBvdXRdIFVzZXIgICAgIE9uIGVudHJ5LCBwb2ludHMgdG8gdGhlIHBy ZXZpb3VzbHkgcmV0dXJuZWQgdXNlcg0KPnByb2ZpbGUNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgaGFuZGxlLCBvciBOVUxMIHRvIHN0YXJ0IHNlYXJjaGluZyB3aXRoIHRoZSBmaXJzdCB1 c2VyIHByb2ZpbGUuDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIHJldHVybiwgcG9p bnRzIHRvIHRoZSB1c2VyIHByb2ZpbGUgaGFuZGxlLCBvciBOVUxMIGlmIG5vdA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3VuZC4NCj4tICBAcGFyYW1baW4sIG91dF0gVXNlckluZm8g T24gZW50cnksIHBvaW50cyB0byB0aGUgcHJldmlvdXNseSByZXR1cm5lZCB1c2VyDQo+aW5mb3Jt YXRpb24NCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBvciBOVUxMIHRvIHN0 YXJ0IHNlYXJjaGluZyB3aXRoIHRoZSBmaXJzdC4gT24gcmV0dXJuLA0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHVzZXIgaW5mb3JtYXRpb24gaGFuZGxlIG9mIHRo ZSB1c2VyIGluZm9ybWF0aW9uDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZCwg b3IgTlVMTCBpZiBub3QgZm91bmQuIENhbiBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG9ubHkNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIHVzZXIgaW5mb3JtYXRpb24gcmVjb3JkIHBl ciB1c2VyIGNhbiBiZSByZXR1cm5lZC4NCj4tICBAcGFyYW1baW5dICAgICAgSW5mbyAgICAgUG9p bnRzIHRvIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgdXNlciBpbmZvcm1hdGlvbiB0bw0KPmJl DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVkIHRvIHRoZSB1c2VyIGluZm9y bWF0aW9uIHJlY29yZC4gSWYgTlVMTCwgdGhlbiBvbmx5DQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRoZSB1c2VyIGluZm9ybWF0aW9uIHJlY29yZCB0eXBlIGlzIGNvbXBhcmVkLiBJZiBJ bmZvU2l6ZSBpcyAwLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHRoZSB1c2Vy IGluZm9ybWF0aW9uIHJlY29yZCBtdXN0IGJlIGVtcHR5Lg0KPi0NCj4tICBAcGFyYW1baW5dICAg ICAgSW5mb1NpemUgVGhlIHNpemUgb2YgSW5mbywgaW4gYnl0ZXMuDQo+LQ0KPi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICBVc2VyIGluZm9ybWF0aW9uIHdhcyBmb3VuZC4gVXNlciBwb2ludHMg dG8gdGhlDQo+dXNlciBwcm9maWxlIGhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgYW5kIFVzZXJJbmZvIHBvaW50cyB0byB0aGUgdXNlciBpbmZvcm1hdGlvbiBoYW5kbGUuDQo+ LSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgIFVzZXIgaW5mb3JtYXRpb24gd2FzIG5vdCBmb3Vu ZC4gVXNlciBwb2ludHMgdG8NCj5OVUxMIGFuZCBVc2VySW5mbw0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBwb2ludHMgdG8gTlVMTC4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUVG SUFQSQ0KPi1Vc2VyUHJvZmlsZUZpbmQgKA0KPi0gIElOICAgICBDT05TVCBFRklfVVNFUl9NQU5B R0VSX1BST1RPQ09MICAgICAgICAqVGhpcywNCj4tICBJTiBPVVQgRUZJX1VTRVJfUFJPRklMRV9I QU5ETEUgICAgICAgICAgICAgICAgKlVzZXIsDQo+LSAgSU4gT1VUIEVGSV9VU0VSX0lORk9fSEFO RExFICAgICAgICAgICAgICAgICAgICpVc2VySW5mbyBPUFRJT05BTCwNCj4tICBJTiAgICAgQ09O U1QgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgKkluZm8sDQo+LSAgSU4gICAgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9TaXplDQo+LSAgKTsNCj4t DQo+LQ0KPi0vKioNCj4tICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdXNlciBpbmZvcm1hdGlvbi4N Cj4tDQo+LSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCBFRklfVVNF Ul9NQU5BR0VSX1BST1RPQ09MIGluc3RhbmNlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwb2ludGVyLg0KPi0gIEBwYXJhbSAgVXNlciAgICAgICAgICAgICAgICAgICAgSGFu ZGxlIG9mIHRoZSB1c2VyIHdob3NlIHByb2ZpbGUgd2lsbCBiZQ0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0cmlldmVkLg0KPi0gIEBwYXJhbSAgVXNlckluZm8gICAgICAg ICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGRhdGEgcmVjb3JkLg0KPi0g IEBwYXJhbSAgSW5mbyAgICAgICAgICAgICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byBhIGJ1 ZmZlciBvZiBhdCBsZWFzdA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKklu Zm9TaXplIGJ5dGVzLiAgT24gZXhpdCwgaG9sZHMgdGhlIHVzZXINCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLg0KPi0gIEBwYXJhbSAgSW5mb1NpemUgICAg ICAgICAgICAgICAgT24gZW50cnksIHBvaW50cyB0byB0aGUgc2l6ZSBvZiBJbmZvLiBPbiByZXR1 cm4sDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHNp emUgb2YgdGhlIHVzZXIgaW5mb3JtYXRpb24uDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICAgSW5mb3JtYXRpb24gcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2 YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAgVGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVj aWZpZWQgdXNlcg0KPmNhbm5vdA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YmUgYWNjZXNzZWQgIGJ5IHRoZSBjdXJyZW50IHVzZXIuDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFRklfQlVGRkVSX1RPT19TTUFMTC0gVGhlIG51bWJlciBvZiBieXRlcw0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5ICpJbmZvU2l6 ZSBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybmVkIGRhdGEuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkN Cj4tVXNlclByb2ZpbGVHZXRJbmZvICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfTUFOQUdFUl9Q Uk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVf SEFORExFICAgICAgICAgICAgIFVzZXIsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX0lORk9fSEFO RExFICAgICAgICAgICAgICAgIFVzZXJJbmZvLA0KPi0gIE9VVCAgICAgICBFRklfVVNFUl9JTkZP ICAgICAgICAgICAgICAgICAgICAgICAqSW5mbywNCj4tICBJTiBPVVQgICAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKkluZm9TaXplDQo+LSAgKTsNCj4tDQo+LQ0KPi0vKioN Cj4tICBUaGlzIGZ1bmN0aW9uIGNoYW5nZXMgdXNlciBpbmZvcm1hdGlvbi4NCj4tDQo+LSAgQHBh cmFtICBUaGlzICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCBFRklfVVNFUl9NQU5BR0VSX1BS T1RPQ09MIGluc3RhbmNlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2lu dGVyLg0KPi0gIEBwYXJhbSAgVXNlciAgICAgICAgICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSB1 c2VyIHdob3NlIHByb2ZpbGUgd2lsbCBiZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0cmlldmVkLg0KPi0gIEBwYXJhbSAgVXNlckluZm8gICAgICAgICAgICAgICAgSGFu ZGxlIG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGRhdGEgcmVjb3JkLg0KPi0gIEBwYXJhbSAgSW5m byAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0g IEBwYXJhbSAgSW5mb1NpemUgICAgICAgICAgICAgICAgVGhlIHNpemUgb2YgSW5mbywgaW4gYnl0 ZXMuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVXNlciBwcm9maWxl IGluZm9ybWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYW5nZWQvYWRkZWQuDQo+LSAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAg ICAgICBUaGUgcmVjb3JkIGlzIGV4Y2x1c2l2ZS4NCj4tICBAcmV0dmFsIEVGSV9TRUNVUklUWV9W SU9MQVRJT04gIFRoZSBjdXJyZW50IHVzZXIgZG9lcyBub3QgaGF2ZQ0KPnBlcm1pc3Npb24gdG8N Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZSAgdGhlIHNwZWNpZmll ZCB1c2VyIHByb2ZpbGUgb3IgdXNlcg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5mb3JtYXRpb24gcmVjb3JkLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJ DQo+LVVzZXJQcm9maWxlU2V0SW5mbyAoDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX01BTkFHRVJf UFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxF X0hBTkRMRSAgICAgICAgICAgICBVc2VyLA0KPi0gIElOIE9VVCAgICBFRklfVVNFUl9JTkZPX0hB TkRMRSAgICAgICAgICAgICAgICAqVXNlckluZm8sDQo+LSAgSU4gQ09OU1QgIEVGSV9VU0VSX0lO Rk8gICAgICAgICAgICAgICAgICAgICAgICpJbmZvLA0KPi0gIElOICAgICAgICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvU2l6ZQ0KPi0gICk7DQo+LQ0KPi0NCj4tLyoq DQo+LSAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgdG8gbm90 aWZ5IHRoZSBVc2VyIElkZW50aXR5DQo+TWFuYWdlcg0KPi0gIHdoZW4gdXNlciBzdGF0dXMgaGFz IGNoYW5nZWQgd2hpbGUgZGVzZWxlY3RlZC4NCj4tDQo+LSAgQHBhcmFtICBUaGlzICAgICAgICAg ICAgICAgICAgICBQcm90b2NvbCBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MIGluc3RhbmNlDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLg0KPi0gIEBwYXJhbSAg Q2hhbmdlZCAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9VU0VSX0NSRURFTlRJQUxfUFJP VE9DT0wgIHdoZXJlIHRoZSB1c2VyIGhhcw0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhbmdlZC4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBU aGUgVXNlciBJZGVudGl0eSBNYW5hZ2VyIGhhcyBoYW5kbGVkIHRoZQ0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLg0KPi0gIEByZXR2YWwgRUZJX05PVF9S RUFEWSAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2hpbGUgdGhlIHNwZWNpZmll ZA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbCAgcHJvdmlk ZXIgd2FzIG5vdCBzZWxlY3RlZC4NCj4tICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAg IFRoZSBVc2VyIElkZW50aXR5IE1hbmFnZXIgZG9lc24ndCBzdXBwb3J0DQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhc3luY2hyb25vdXMgIG5vdGlmaWNhdGlvbnMuDQo+LQ0K Pi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNlclByb2ZpbGVOb3RpZnkgKA0KPi0g IElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAqVGhpcywNCj4t ICBJTiAgICAgICAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZA0K Pi0gICk7DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRGVsZXRlIHRoZSB1c2VyIGluZm9ybWF0aW9uIGF0 dGFjaGVkIHRvIHRoZSB1c2VyIHByb2ZpbGUgc3BlY2lmaWVkIGJ5IHRoZQ0KPlVzZXJJbmZvLg0K Pi0NCj4tICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICAgIFByb3RvY29sIEVGSV9VU0VS X01BTkFHRVJfUFJPVE9DT0wgaW5zdGFuY2UNCj5wb2ludGVyLg0KPi0gIEBwYXJhbSAgVXNlciAg ICAgICAgICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSB1c2VyIHdob3NlIHByb2ZpbGUgd2lsbCBi ZSByZXRyaWV2ZWQuDQo+LSAgQHBhcmFtICBVc2VySW5mbyAgICAgICAgICAgICAgICBIYW5kbGUg b2YgdGhlIHVzZXIgaW5mb3JtYXRpb24gZGF0YSByZWNvcmQuDQo+LQ0KPi0gIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICAgVXNlciBpbmZvcm1hdGlvbiBkZWxldGVkIHN1Y2Nlc3NmdWxs eS4NCj4tICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgIFRoZSBjdXJyZW50IHVzZXIg ZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uDQo+dG8NCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlbGV0ZSB0aGlzIHVzZXIgaW4tZm9ybWF0aW9uLg0KPi0gIEByZXR2YWwgRUZJ X05PVF9GT1VORCAgICAgICAgICAgVXNlciBpbmZvcm1hdGlvbiByZWNvcmQgVXNlckluZm8gZG9l cyBub3QNCj5leGlzdA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhl IHVzZXIgcHJvLWZpbGUuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tVXNl clByb2ZpbGVEZWxldGVJbmZvICgNCj4tICBJTiBDT05TVCAgRUZJX1VTRVJfTUFOQUdFUl9QUk9U T0NPTCAgICAgICAgICAgKlRoaXMsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFO RExFICAgICAgICAgICAgIFVzZXIsDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX0lORk9fSEFORExF ICAgICAgICAgICAgICAgIFVzZXJJbmZvDQo+LSAgKTsNCj4tDQo+LQ0KPi0vKioNCj4tICBUaGlz IGZ1bmN0aW9uIHJldHVybnMgdGhlIG5leHQgdXNlciBpbmZvcm1hdGlvbiByZWNvcmQuDQo+LQ0K Pi0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgRUZJX1VTRVJfTUFO QUdFUl9QUk9UT0NPTCBpbnN0YW5jZQ0KPnBvaW50ZXIuDQo+LSAgQHBhcmFtICBVc2VyICAgICAg ICAgICAgICAgICAgICBIYW5kbGUgb2YgdGhlIHVzZXIgd2hvc2UgcHJvZmlsZSB3aWxsIGJlIHJl dHJpZXZlZC4NCj4tICBAcGFyYW0gIFVzZXJJbmZvICAgICAgICAgICAgICAgIEhhbmRsZSBvZiB0 aGUgdXNlciBpbmZvcm1hdGlvbiBkYXRhIHJlY29yZC4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgICBVc2VyIGluZm9ybWF0aW9uIHJldHVybmVkLg0KPi0gIEByZXR2YWwg RUZJX05PVF9GT1VORCAgICAgICAgICAgTm8gbW9yZSB1c2VyIGluZm9ybWF0aW9uIGZvdW5kLg0K Pi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlR2V0TmV4dElu Zm8gKA0KPi0gIElOIENPTlNUICBFRklfVVNFUl9NQU5BR0VSX1BST1RPQ09MICAgICAgICAgICAq VGhpcywNCj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAg VXNlciwNCj4tICBJTiBPVVQgICAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgICAgICAg KlVzZXJJbmZvDQo+LSAgKTsNCj4tDQo+LSNlbmRpZg0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5 UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlm eU1hbg0KPmFnZXIudW5pDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklk ZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW4NCj5hZ2VyLnVuaQ0KPmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NA0KPmluZGV4IDgyYzcyYmFlZWIuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1Nl Y3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJ ZGVudGlmeU1hbg0KPmFnZXIudW5pDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDIxICswLDAgQEAN Cj4tLy8gLyoqIEBmaWxlDQo+LS8vIFByb2R1Y2VzIHVzZXIgbWFuYWdlciBwcm90b2NvbA0KPi0v Lw0KPi0vLyBUaGlzIG1vZHVsZSBtYW5hZ2VzIHVzZXIgaW5mb3JtYXRpb24gYW5kIHByb2R1Y2Vz IHVzZXIgbWFuYWdlcg0KPnByb3RvY29sLg0KPi0vLw0KPi0vLyBDb3B5cmlnaHQgKGMpIDIwMDkg LSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LS8v DQo+LS8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tLy8g YXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRp dGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4tLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQg YXQNCj4tLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0K Pi0vLyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04g QU4gIkFTIElTIg0KPkJBU0lTLA0KPi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5U QVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LS8vDQo+ LS8vICoqLw0KPi0NCj4tDQo+LSNzdHJpbmcgU1RSX01PRFVMRV9BQlNUUkFDVCAgICAgICAgICAg ICAjbGFuZ3VhZ2UgZW4tVVMgIlByb2R1Y2VzIHVzZXINCj5tYW5hZ2VyIHByb3RvY29sIg0KPi0N Cj4tI3N0cmluZyBTVFJfTU9EVUxFX0RFU0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAiVGhpcyBtb2R1bGUNCj5tYW5hZ2VzIHVzZXIgaW5mb3JtYXRpb24gYW5kIHByb2R1Y2VzIHVz ZXIgbWFuYWdlciBwcm90b2NvbC4iDQo+LQ0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1Vz ZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0K PmFnZXJEYXRhLmgNCj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRp ZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFnZXJEYXRhLmgNCj5kZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQNCj5pbmRleCA0ZTA3ZGRkMzA5Li4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1 cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4ZS9Vc2VySWRl bnRpZnlNYW4NCj5hZ2VyRGF0YS5oDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDM1ICswLDAgQEAN Cj4tLyoqIEBmaWxlDQo+LSAgRGF0YSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgdXNlciBpZGVudGlm eSBtYW5hZ2VyIGRyaXZlci4NCj4tDQo+LUNvcHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVs IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4tVGhpcyBwcm9ncmFtIGFu ZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZh aWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5z ZQ0KPi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQg b2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4taHR0cDovL29wZW5zb3VyY2Uub3Jn L2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0NCj4tVEhFIFBST0dSQU0gSVMgRElTVFJJQlVU RUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+LVdJVEhPVVQg V0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPkVYUFJF U1MgT1IgSU1QTElFRC4NCj4tDQo+LSoqLw0KPi0NCj4tI2lmbmRlZiBfVVNFUl9JREVOVElGWV9N QU5BR0VSX0RBVEFfSF8NCj4tI2RlZmluZSBfVVNFUl9JREVOVElGWV9NQU5BR0VSX0RBVEFfSF8N Cj4tDQo+LSNpbmNsdWRlIDxHdWlkL1VzZXJJZGVudGlmeU1hbmFnZXJIaWkuaD4NCj4tDQo+LS8v DQo+LS8vIEZvcm1zIGRlZmluaXRpb24uDQo+LS8vDQo+LSNkZWZpbmUgRk9STUlEX1VTRVJfRk9S TSAgICAgIDENCj4tI2RlZmluZSBGT1JNSURfUFJPVklERVJfRk9STSAgMg0KPi0jZGVmaW5lIEZP Uk1JRF9JTlZBTElEX0ZPUk0gICAweDBGRkYNCj4tDQo+LS8vDQo+LS8vIExhYmVscyBkZWZpbml0 aW9uLg0KPi0vLw0KPi0jZGVmaW5lIExBQkVMX1VTRVJfTkFNRSAgICAgICAweDEwMDANCj4tI2Rl ZmluZSBMQUJFTF9QUk9WSURFUl9OQU1FICAgMHgzMDAwDQo+LSNkZWZpbmUgTEFCRUxfRU5EICAg ICAgICAgICAgIDB4ZmZmZg0KPi0jZGVmaW5lIEZPUk1fT1BFTl9RVUVTVElPTl9JRCAweGZmZmUN Cj4tDQo+LSNlbmRpZg0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNh dGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFnZXJEeGUuaW5m DQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5TWFuYWdlckR4 ZS9Vc2VySWRlbnRpZnlNYW4NCj5hZ2VyRHhlLmluZg0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NA0KPmluZGV4IDI3ZThiYTE5YWQuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1Vz ZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0K PmFnZXJEeGUuaW5mDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDc5ICswLDAgQEANCj4tIyMgQGZp bGUNCj4tIyAgUHJvZHVjZXMgdXNlciBtYW5hZ2VyIHByb3RvY29sDQo+LSMNCj4tIyAgVGhpcyBt b2R1bGUgbWFuYWdlcyB1c2VyIGluZm9ybWF0aW9uIGFuZCBwcm9kdWNlcyB1c2VyIG1hbmFnZXIN Cj5wcm90b2NvbC4NCj4tIw0KPi0jIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4tIyBUaGlzIHByb2dyYW0gYW5k IHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LSMgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2 YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vu c2UNCj4tIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwgdGV4 dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi0jIGh0dHA6Ly9vcGVuc291cmNl Lm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tIyBUSEUgUFJPR1JBTSBJUyBESVNUUklC VVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPkJBU0lTLA0KPi0jIFdJ VEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0K PkVYUFJFU1MgT1IgSU1QTElFRC4NCj4tIw0KPi0jIw0KPi0NCj4tW2RlZmluZXNdDQo+LSAgSU5G X1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KPi0gIEJBU0VfTkFNRSAg ICAgICAgICAgICAgICAgICAgICA9IFVzZXJJZGVudGlmeU1hbmFnZXINCj4tICBNT0RVTEVfVU5J X0ZJTEUgICAgICAgICAgICAgICAgPSBVc2VySWRlbnRpZnlNYW5hZ2VyLnVuaQ0KPi0gIEZJTEVf R1VJRCAgICAgICAgICAgICAgICAgICAgICA9IEM1RDMxOTFCLTI3RDUtNDg3My04REYyLTYyODEz Njk5MUEyMQ0KPi0gIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IERYRV9EUklWRVIN Cj4tICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4tICBFTlRSWV9QT0lO VCAgICAgICAgICAgICAgICAgICAgPSBVc2VySWRlbnRpZnlNYW5hZ2VySW5pdA0KPi0NCj4tW3Nv dXJjZXNdDQo+LSAgVXNlcklkZW50aWZ5TWFuYWdlci5jDQo+LSAgTG9hZERlZmVycmVkSW1hZ2Uu Yw0KPi0gIFVzZXJJZGVudGlmeU1hbmFnZXIuaA0KPi0gIFVzZXJJZGVudGlmeU1hbmFnZXJEYXRh LmgNCj4tICBVc2VySWRlbnRpZnlNYW5hZ2VyU3RyaW5ncy51bmkNCj4tICBVc2VySWRlbnRpZnlN YW5hZ2VyVmZyLlZmcg0KPi0NCj4tW1BhY2thZ2VzXQ0KPi0gIE1kZVBrZy9NZGVQa2cuZGVjDQo+ LSAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4tICBTZWN1cml0eVBrZy9TZWN1cml0 eVBrZy5kZWMNCj4tDQo+LVtMaWJyYXJ5Q2xhc3Nlc10NCj4tICBVZWZpUnVudGltZVNlcnZpY2Vz VGFibGVMaWINCj4tICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4tICBVZWZpRHJpdmVyRW50 cnlQb2ludA0KPi0gIE1lbW9yeUFsbG9jYXRpb25MaWINCj4tICBCYXNlTWVtb3J5TGliDQo+LSAg RGVidWdMaWINCj4tICBIaWlMaWINCj4tICBVZWZpTGliDQo+LQ0KPi1bR3VpZHNdDQo+LSAgZ0Vm aUlmclRpYW5vR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19D T05TVU1FUyAgIyMgR1VJRA0KPi0gIGdFZmlFdmVudFVzZXJQcm9maWxlQ2hhbmdlZEd1aWQgICAg ICAgICAgICAgICAjIyBTT01FVElNRVNfUFJPRFVDRVMgICMjDQo+RXZlbnQNCj4tDQo+LSAgIyMg U09NRVRJTUVTX1BST0RVQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICMjIFZhcmlhYmxlOkwi VXNlcnh4eHgiDQo+LSAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAgICAgICAgICAgICAgICAgICAg ICAgICMjIFZhcmlhYmxlOkwiVXNlcnh4eHgiDQo+LSAgIyMgQ09OU1VNRVMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMjIEhJSQ0KPi0gIGdVc2VySWRlbnRpZnlNYW5hZ2VyR3Vp ZA0KPi0NCj4tW1Byb3RvY29sc10NCj4tICBnRWZpRm9ybUJyb3dzZXIyUHJvdG9jb2xHdWlkICAg ICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCj4tICBnRWZpSGlpRGF0YWJhc2VQcm90b2NvbEd1 aWQgICAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCj4tICBnRWZpVXNlckNyZWRlbnRpYWwy UHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+LSAgZ0Vm aURlZmVycmVkSW1hZ2VMb2FkUHJvdG9jb2xHdWlkICAgICAgICAgICAgICMjIFNPTUVUSU1FU19D T05TVU1FUw0KPi0gIGdFZmlTaW1wbGVUZXh0T3V0UHJvdG9jb2xHdWlkICAgICAgICAgICAgICAg ICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4tICBnRWZpU2ltcGxlVGV4dEluUHJvdG9jb2xHdWlk ICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+LSAgZ0VmaVNpbXBsZVRl eHRJbnB1dEV4UHJvdG9jb2xHdWlkICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0K Pi0gIGdFZmlIaWlDb25maWdBY2Nlc3NQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAjIyBQUk9E VUNFUw0KPi0gIGdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAj IyBQUk9EVUNFUw0KPi0NCj4tICAjIyBQUk9EVUNFUw0KPi0gICMjIFNPTUVUSU1FU19QUk9EVUNF UyAgICAgICAgICAgICAgICAgICAgICAgICAjIyBTeXN0ZW1UYWJsZQ0KPi0gIGdFZmlVc2VyTWFu YWdlclByb3RvY29sR3VpZA0KPi0NCj4tW0RlcGV4XQ0KPi0gIGdFZmlIaWlEYXRhYmFzZVByb3Rv Y29sR3VpZCAgIEFORA0KPi0gIGdFZmlIaWlTdHJpbmdQcm90b2NvbEd1aWQgICAgIEFORA0KPi0g IGdFZmlGb3JtQnJvd3NlcjJQcm90b2NvbEd1aWQNCj4tDQo+LVtVc2VyRXh0ZW5zaW9ucy5UaWFu b0NvcmUuIkV4dHJhRmlsZXMiXQ0KPi0gIFVzZXJJZGVudGlmeU1hbmFnZXJFeHRyYS51bmkNCj4t DQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVu dGlmeU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuDQo+YWdlckV4dHJhLnVuaQ0KPmIvU2VjdXJp dHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNlcklkZW50 aWZ5TWFuDQo+YWdlckV4dHJhLnVuaQ0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4 IDhiN2NiYTdiMzIuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlm aWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFnZXJFeHRy YS51bmkNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMTkgKzAsMCBAQA0KPi0vLyAvKiogQGZpbGUN Cj4tLy8gVXNlcklkZW50aWZ5TWFuYWdlciBMb2NhbGl6ZWQgU3RyaW5ncyBhbmQgQ29udGVudA0K Pi0vLw0KPi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LS8vDQo+LS8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tLy8gYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWls YWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UN Cj4tLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQg b2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4tLy8gaHR0cDovL29wZW5zb3VyY2Uu b3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0vLyBUSEUgUFJPR1JBTSBJUyBESVNUUklC VVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPkJBU0lTLA0KPi0vLyBX SVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIN Cj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LS8vDQo+LS8vICoqLw0KPi0NCj4tI3N0cmluZyBTVFJf UFJPUEVSVElFU19NT0RVTEVfTkFNRQ0KPi0jbGFuZ3VhZ2UgZW4tVVMNCj4tIlVzZXIgSWRlbnRp ZnkgTWFuYWdlciINCj4tDQo+LQ0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVu dGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFnZXJT dHJpbmdzLnVuaQ0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlm eU1hbmFnZXJEeGUvVXNlcklkZW50aWZ5TWFuDQo+YWdlclN0cmluZ3MudW5pDQo+ZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0DQo+aW5kZXggZmNiZjUwMDVjZC4uMDAwMDAwMDAwMA0KPi0tLQ0KPmEv U2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJJZGVudGlmeU1hbmFnZXJEeGUvVXNl cklkZW50aWZ5TWFuDQo+YWdlclN0cmluZ3MudW5pDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDI3 ICswLDAgQEANCj4tLyoqIEBmaWxlDQo+LSAgU3RyaW5nIGRlZmluaXRpb25zIGZvciB0aGUgVXNl ciBJZGVudGlmeSBNYW5hZ2VyIGRyaXZlci4NCj4tDQo+LUNvcHlyaWdodCAoYykgMjAwOSAtIDIw MTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4tVGhpcyBw cm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPi1hcmUgbGljZW5zZWQgYW5k IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNE DQo+TGljZW5zZQ0KPi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBm dWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91bmQgYXQNCj4taHR0cDovL29wZW5z b3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4NCj4tDQo+LVRIRSBQUk9HUkFNIElT IERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0K Pi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI RVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNsYW5nZGVmIGVuLVVT ICJFbmdsaXNoIg0KPi0jbGFuZ2RlZiBmci1GUiAiRnJhbmNhaXMiDQo+LQ0KPi0jc3RyaW5nIFNU Ul9USVRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAg IlVzZXIgSWRlbnRpdHkgTWFuYWdlciINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJVc2VyIElkZW50aXR5IE1hbmFn ZXIoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfVVNFUl9TRUxFQ1QgICAgICAgICAgICAgICAgICAg ICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJVc2VyIFNlbGVjdGlvbiINCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJV c2VyIFNlbGVjdGlvbihGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9QUk9WSURFUl9TRUxFQ1QgICAg ICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlByb3ZpZGVyDQo+U2VsZWN0aW9u Ig0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNs YW5ndWFnZSBmci1GUiAgIlVzZXIgU2VsZWN0aW9uKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX05V TExfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiIg0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5n dWFnZSBmci1GUiAgIiINCj4tDQo+LQ0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVudGlmeU1hbg0KPmFn ZXJWZnIuVmZyDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlcklkZW50aWZ5 TWFuYWdlckR4ZS9Vc2VySWRlbnRpZnlNYW4NCj5hZ2VyVmZyLlZmcg0KPmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NA0KPmluZGV4IDMwNjY3OTc3NmQuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3Vy aXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VySWRlbnRpZnlNYW5hZ2VyRHhlL1VzZXJJZGVu dGlmeU1hbg0KPmFnZXJWZnIuVmZyDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDQzICswLDAgQEAN Cj4tLyoqIEBmaWxlDQo+LSAgVXNlciBpZGVudGlmeSBtYW5hZ2VyIGZvcm1zZXQuDQo+LQ0KPi1D b3B5cmlnaHQgKGMpIDIwMDkgLSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlh bHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMgdGhp cyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZv dW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAN Cj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBP TiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJ T05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8N Cj4tDQo+LSNpbmNsdWRlICJVc2VySWRlbnRpZnlNYW5hZ2VyRGF0YS5oIg0KPi0NCj4tZm9ybXNl dA0KPi0gIGd1aWQgICAgICA9IFVTRVJfSURFTlRJRllfTUFOQUdFUl9HVUlELA0KPi0gIHRpdGxl ICAgICA9IFNUUklOR19UT0tFTihTVFJfVElUTEUpLA0KPi0gIGhlbHAgICAgICA9IFNUUklOR19U T0tFTihTVFJfTlVMTF9TVFJJTkcpLA0KPi0gIGNsYXNzZ3VpZCA9IFVTRVJfSURFTlRJRllfTUFO QUdFUl9HVUlELA0KPi0NCj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9VU0VSX0ZPUk0sDQo+LSAg ICB0aXRsZSA9IFNUUklOR19UT0tFTihTVFJfVVNFUl9TRUxFQ1QpOw0KPi0NCj4tICAgIHN1cHBy ZXNzaWYgVFJVRTsNCj4tICAgICAgdGV4dA0KPi0gICAgICAgIGhlbHAgICA9IFNUUklOR19UT0tF TihTVFJfTlVMTF9TVFJJTkcpLA0KPi0gICAgICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJf TlVMTF9TVFJJTkcpLA0KPi0gICAgICAgIGZsYWdzICA9IElOVEVSQUNUSVZFLA0KPi0gICAgICAg IGtleSAgICA9IEZPUk1fT1BFTl9RVUVTVElPTl9JRDsNCj4tICAgIGVuZGlmOw0KPi0NCj4tICAg IGxhYmVsIExBQkVMX1VTRVJfTkFNRTsNCj4tICAgIGxhYmVsIExBQkVMX0VORDsNCj4tICBlbmRm b3JtOw0KPi0NCj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9QUk9WSURFUl9GT1JNLA0KPi0gICAg dGl0bGUgPSBTVFJJTkdfVE9LRU4oU1RSX1BST1ZJREVSX1NFTEVDVCk7DQo+LSAgICBsYWJlbCBM QUJFTF9QUk9WSURFUl9OQU1FOw0KPi0gICAgbGFiZWwgTEFCRUxfRU5EOw0KPi0gIGVuZGZvcm07 DQo+LWVuZGZvcm1zZXQ7DQo+XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQo+ZGlmZiAtLWdp dA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4 ZS9Nb2RpZnlBY2Nlc3NQb2xpYw0KPnkuYw0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0 aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Nb2RpZnlBY2Nlc3NQb2xpYw0KPnkuYw0KPmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IDU2ZDNiMWRmOTguLjAwMDAwMDAwMDANCj4tLS0N Cj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUv TW9kaWZ5QWNjZXNzUG9saWMNCj55LmMNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsNjg4ICswLDAg QEANCj4tLyoqIEBmaWxlDQo+LSAgVGhlIGZ1bmN0aW9ucyBmb3IgYWNjZXNzIHBvbGljeSBtb2Rp ZmljYXRpb24uDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFj Y29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBs aWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl cy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVS IFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJ RVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElN UExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpbmNsdWRlICJVc2VyUHJvZmlsZU1hbmFnZXIuaCIN Cj4tDQo+LS8qKg0KPi0gIENvbGxlY3QgYWxsIHRoZSBhY2Nlc3MgcG9saWN5IGRhdGEgdG8gbVVz ZXJJbmZvLkFjY2Vzc1BvbGljeSwNCj4tICBhbmQgc2F2ZSBpdCB0byB1c2VyIHByb2ZpbGUuDQo+ LQ0KPi0qKi8NCj4tVk9JRA0KPi1TYXZlQWNjZXNzUG9saWN5ICgNCj4tICBWT0lEDQo+LSAgKQ0K Pi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPi0gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgIE9mZlNldDsNCj4tICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICBTaXplOw0KPi0gIEVGSV9VU0VSX0lORk9fQUNDRVNTX0NPTlRST0wgIENvbnRy b2w7DQo+LSAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICAgICAgVXNlckluZm87DQo+LSAgRUZJ X1VTRVJfSU5GTyAgICAgICAgICAgICAgICAgKkluZm87DQo+LQ0KPi0gIGlmIChtVXNlckluZm8u QWNjZXNzUG9saWN5ICE9IE5VTEwpIHsNCj4tICAgIEZyZWVQb29sIChtVXNlckluZm8uQWNjZXNz UG9saWN5KTsNCj4tICB9DQo+LSAgbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSAgICAgICAgICA9IE5V TEw7DQo+LSAgbVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAgICAgICA9IDA7DQo+LSAgbVVzZXJJ bmZvLkFjY2Vzc1BvbGljeU1vZGlmaWVkICA9IFRSVUU7DQo+LSAgT2ZmU2V0ICAgICAgICAgICAg ICAgICAgICAgICAgICA9IDA7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSBhY2Nlc3MgcmlnaHQu DQo+LSAgLy8NCj4tICBTaXplID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPX0FDQ0VTU19DT05UUk9M KTsNCj4tICBpZiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAtIE9mZlNldCA8IFNpemUpIHsN Cj4tICAgIEV4cGFuZE1lbW9yeSAoT2ZmU2V0LCBTaXplKTsNCj4tICB9DQo+LQ0KPi0gIENvbnRy b2wuVHlwZSA9IG1BY2Nlc3NJbmZvLkFjY2Vzc1JpZ2h0Ow0KPi0gIENvbnRyb2wuU2l6ZSA9IChV SU5UMzIpIFNpemU7DQo+LSAgQ29weU1lbSAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNl dCwgJkNvbnRyb2wsIHNpemVvZiAoQ29udHJvbCkpOw0KPi0gIE9mZlNldCArPSBzaXplb2YgKENv bnRyb2wpOw0KPi0NCj4tICAvLw0KPi0gIC8vIFNhdmUgYWNjZXNzIHNldHVwLg0KPi0gIC8vDQo+ LSAgU2l6ZSA9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCkgKyBzaXplb2Yg KEVGSV9HVUlEKTsNCj4tICBpZiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAtIE9mZlNldCA8 IFNpemUpIHsNCj4tICAgIEV4cGFuZE1lbW9yeSAoT2ZmU2V0LCBTaXplKTsNCj4tICB9DQo+LQ0K Pi0gIENvbnRyb2wuVHlwZSA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX1NFVFVQOw0KPi0gIENvbnRy b2wuU2l6ZSA9IChVSU5UMzIpIFNpemU7DQo+LSAgQ29weU1lbSAobVVzZXJJbmZvLkFjY2Vzc1Bv bGljeSArIE9mZlNldCwgJkNvbnRyb2wsIHNpemVvZiAoQ29udHJvbCkpOw0KPi0gIE9mZlNldCAr PSBzaXplb2YgKENvbnRyb2wpOw0KPi0NCj4tICBpZiAobUFjY2Vzc0luZm8uQWNjZXNzU2V0dXAg PT0gQUNDRVNTX1NFVFVQX05PUk1BTCkgew0KPi0gICAgQ29weUd1aWQgKChFRklfR1VJRCAqKSAo bVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCksDQo+JmdFZmlVc2VySW5mb0FjY2Vzc1Nl dHVwTm9ybWFsR3VpZCk7DQo+LSAgfSBlbHNlIGlmIChtQWNjZXNzSW5mby5BY2Nlc3NTZXR1cCA9 PSBBQ0NFU1NfU0VUVVBfUkVTVFJJQ1RFRCkgew0KPi0gICAgQ29weUd1aWQgKChFRklfR1VJRCAq KSAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCksDQo+JmdFZmlVc2VySW5mb0FjY2Vz c1NldHVwUmVzdHJpY3RlZEd1aWQpOw0KPi0gIH0gZWxzZSBpZiAobUFjY2Vzc0luZm8uQWNjZXNz U2V0dXAgPT0gQUNDRVNTX1NFVFVQX0FETUlOKSB7DQo+LSAgICBDb3B5R3VpZCAoKEVGSV9HVUlE ICopIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0KSwNCj4mZ0VmaVVzZXJJbmZvQWNj ZXNzU2V0dXBBZG1pbkd1aWQpOw0KPi0gIH0NCj4tICBPZmZTZXQgKz0gc2l6ZW9mIChFRklfR1VJ RCk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSBhY2Nlc3Mgb2YgYm9vdCBvcmRlci4NCj4tICAv Lw0KPi0gIFNpemUgPSBzaXplb2YgKEVGSV9VU0VSX0lORk9fQUNDRVNTX0NPTlRST0wpICsgc2l6 ZW9mIChVSU5UMzIpOw0KPi0gIGlmIChtVXNlckluZm8uQWNjZXNzUG9saWN5TGVuIC0gT2ZmU2V0 IDwgU2l6ZSkgew0KPi0gICAgRXhwYW5kTWVtb3J5IChPZmZTZXQsIFNpemUpOw0KPi0gIH0NCj4t DQo+LSAgQ29udHJvbC5UeXBlID0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfQk9PVF9PUkRFUjsNCj4t ICBDb250cm9sLlNpemUgPSAoVUlOVDMyKSBTaXplOw0KPi0gIENvcHlNZW0gKG1Vc2VySW5mby5B Y2Nlc3NQb2xpY3kgKyBPZmZTZXQsICZDb250cm9sLCBzaXplb2YgKENvbnRyb2wpKTsNCj4tICBP ZmZTZXQgKz0gc2l6ZW9mIChDb250cm9sKTsNCj4tDQo+LSAgQ29weU1lbSAoKFVJTlQ4ICopICht VXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0KSwNCj4mbUFjY2Vzc0luZm8uQWNjZXNzQm9v dE9yZGVyLCBzaXplb2YgKFVJTlQzMikpOw0KPi0gIE9mZlNldCArPSBzaXplb2YgKFVJTlQzMik7 DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSBwZXJtaXQgbG9hZC4NCj4tICAvLw0KPi0gIGlmICht QWNjZXNzSW5mby5Mb2FkUGVybWl0TGVuID4gMCkgew0KPi0gICAgU2l6ZSA9IHNpemVvZiAoRUZJ X1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCkgKw0KPm1BY2Nlc3NJbmZvLkxvYWRQZXJtaXRMZW47 DQo+LSAgICBpZiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAtIE9mZlNldCA8IFNpemUpIHsN Cj4tICAgICAgRXhwYW5kTWVtb3J5IChPZmZTZXQsIFNpemUpOw0KPi0gICAgfQ0KPi0NCj4tICAg IENvbnRyb2wuVHlwZSA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX1BFUk1JVF9MT0FEOw0KPi0gICAg Q29udHJvbC5TaXplID0gKFVJTlQzMikgU2l6ZTsNCj4tICAgIENvcHlNZW0gKG1Vc2VySW5mby5B Y2Nlc3NQb2xpY3kgKyBPZmZTZXQsICZDb250cm9sLCBzaXplb2YgKENvbnRyb2wpKTsNCj4tICAg IE9mZlNldCArPSBzaXplb2YgKENvbnRyb2wpOw0KPi0NCj4tICAgIENvcHlNZW0gKG1Vc2VySW5m by5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsIG1BY2Nlc3NJbmZvLkxvYWRQZXJtaXQsDQo+bUFjY2Vz c0luZm8uTG9hZFBlcm1pdExlbik7DQo+LSAgICBPZmZTZXQgKz0gbUFjY2Vzc0luZm8uTG9hZFBl cm1pdExlbjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSBmb3JiaWQgbG9hZC4NCj4t ICAvLw0KPi0gIGlmIChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVuID4gMCkgew0KPi0gICAgU2l6 ZSA9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCkgKw0KPm1BY2Nlc3NJbmZv LkxvYWRGb3JiaWRMZW47DQo+LSAgICBpZiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAtIE9m ZlNldCA8IFNpemUpIHsNCj4tICAgICAgRXhwYW5kTWVtb3J5IChPZmZTZXQsIFNpemUpOw0KPi0g ICAgfQ0KPi0NCj4tICAgIENvbnRyb2wuVHlwZSA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX0ZPUkJJ RF9MT0FEOw0KPi0gICAgQ29udHJvbC5TaXplID0gKFVJTlQzMikgU2l6ZTsNCj4tICAgIENvcHlN ZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsICZDb250cm9sLCBzaXplb2YgKENv bnRyb2wpKTsNCj4tICAgIE9mZlNldCArPSBzaXplb2YgKENvbnRyb2wpOw0KPi0NCj4tICAgIENv cHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsIG1BY2Nlc3NJbmZvLkxvYWRG b3JiaWQsDQo+bUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbik7DQo+LSAgICBPZmZTZXQgKz0gbUFj Y2Vzc0luZm8uTG9hZEZvcmJpZExlbjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSBw ZXJtaXQgY29ubmVjdC4NCj4tICAvLw0KPi0gIGlmIChtQWNjZXNzSW5mby5Db25uZWN0UGVybWl0 TGVuID4gMCkgew0KPi0gICAgU2l6ZSA9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09O VFJPTCkgKw0KPm1BY2Nlc3NJbmZvLkNvbm5lY3RQZXJtaXRMZW47DQo+LSAgICBpZiAobVVzZXJJ bmZvLkFjY2Vzc1BvbGljeUxlbiAtIE9mZlNldCA8IFNpemUpIHsNCj4tICAgICAgRXhwYW5kTWVt b3J5IChPZmZTZXQsIFNpemUpOw0KPi0gICAgfQ0KPi0NCj4tICAgIENvbnRyb2wuVHlwZSA9IEVG SV9VU0VSX0lORk9fQUNDRVNTX1BFUk1JVF9DT05ORUNUOw0KPi0gICAgQ29udHJvbC5TaXplID0g KFVJTlQzMikgU2l6ZTsNCj4tICAgIENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBP ZmZTZXQsICZDb250cm9sLCBzaXplb2YgKENvbnRyb2wpKTsNCj4tICAgIE9mZlNldCArPSBzaXpl b2YgKENvbnRyb2wpOw0KPi0NCj4tICAgIENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kg KyBPZmZTZXQsIG1BY2Nlc3NJbmZvLkNvbm5lY3RQZXJtaXQsDQo+bUFjY2Vzc0luZm8uQ29ubmVj dFBlcm1pdExlbik7DQo+LSAgICBPZmZTZXQgKz0gbUFjY2Vzc0luZm8uQ29ubmVjdFBlcm1pdExl bjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSBmb3JiaWQgY29ubmVjdC4NCj4tICAv Lw0KPi0gIGlmIChtQWNjZXNzSW5mby5Db25uZWN0Rm9yYmlkTGVuID4gMCkgew0KPi0gICAgU2l6 ZSA9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1NfQ09OVFJPTCkgKw0KPm1BY2Nlc3NJbmZv LkNvbm5lY3RGb3JiaWRMZW47DQo+LSAgICBpZiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiAt IE9mZlNldCA8IFNpemUpIHsNCj4tICAgICAgRXhwYW5kTWVtb3J5IChPZmZTZXQsIFNpemUpOw0K Pi0gICAgfQ0KPi0NCj4tICAgIENvbnRyb2wuVHlwZSA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX0ZP UkJJRF9DT05ORUNUOw0KPi0gICAgQ29udHJvbC5TaXplID0gKFVJTlQzMikgU2l6ZTsNCj4tICAg IENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsICZDb250cm9sLCBzaXpl b2YgKENvbnRyb2wpKTsNCj4tICAgIE9mZlNldCArPSBzaXplb2YgKENvbnRyb2wpOw0KPi0NCj4t ICAgIENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsIG1BY2Nlc3NJbmZv LkNvbm5lY3RGb3JiaWQsDQo+bUFjY2Vzc0luZm8uQ29ubmVjdEZvcmJpZExlbik7DQo+LSAgICBP ZmZTZXQgKz0gbUFjY2Vzc0luZm8uQ29ubmVjdEZvcmJpZExlbjsNCj4tICB9DQo+LQ0KPi0gIG1V c2VySW5mby5BY2Nlc3NQb2xpY3lMZW4gPSBPZmZTZXQ7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2 ZSBhY2Nlc3MgcG9saWN5Lg0KPi0gIC8vDQo+LSAgaWYgKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3lN b2RpZmllZCAmJiAobVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbiA+IDApDQo+JiYgKG1Vc2VySW5m by5BY2Nlc3NQb2xpY3kgIT0gTlVMTCkpIHsNCj4tICAgIEluZm8gPSBBbGxvY2F0ZVplcm9Qb29s IChzaXplb2YgKEVGSV9VU0VSX0lORk8pICsNCj5tVXNlckluZm8uQWNjZXNzUG9saWN5TGVuKTsN Cj4tICAgIGlmIChJbmZvID09IE5VTEwpIHsNCj4tICAgICAgcmV0dXJuIDsNCj4tICAgIH0NCj4t DQo+LSAgICBTdGF0dXMgPSBGaW5kSW5mb0J5VHlwZSAobU1vZGlmeVVzZXIsDQo+RUZJX1VTRVJf SU5GT19BQ0NFU1NfUE9MSUNZX1JFQ09SRCwgJlVzZXJJbmZvKTsNCj4tICAgIGlmICghRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+LSAgICAgIEluZm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5G T19BQ0NFU1NfUE9MSUNZX1JFQ09SRDsNCj4tICAgICAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklf VVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgIEVGSV9VU0VSX0lORk9fUFVCTElDIHwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICBF RklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4tICAgICAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlO VDMyKSAoc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArDQo+bVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxl bik7DQo+LSAgICAgIENvcHlNZW0gKChVSU5UOCAqKSAoSW5mbyArIDEpLCBtVXNlckluZm8uQWNj ZXNzUG9saWN5LA0KPm1Vc2VySW5mby5BY2Nlc3NQb2xpY3lMZW4pOw0KPi0gICAgICBTdGF0dXMg PSBtVXNlck1hbmFnZXItPlNldEluZm8gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbVVzZXJNYW5hZ2VyLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1vZGlm eVVzZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNlckluZm8sDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvLA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSW5mby0+SW5mb1NpemUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7DQo+LSAgICAgIG1Vc2VySW5mby5BY2Nlc3NQb2xpY3lNb2RpZmllZCA9IEZBTFNFOw0K Pi0gICAgfQ0KPi0gICAgRnJlZVBvb2wgKEluZm8pOw0KPi0gIH0NCj4tDQo+LSAgaWYgKG1BY2Nl c3NJbmZvLkNvbm5lY3RGb3JiaWQgIT0gTlVMTCkgew0KPi0gICAgRnJlZVBvb2wgKG1BY2Nlc3NJ bmZvLkNvbm5lY3RGb3JiaWQpOw0KPi0gICAgbUFjY2Vzc0luZm8uQ29ubmVjdEZvcmJpZCA9IE5V TEw7DQo+LSAgfQ0KPi0NCj4tICBpZiAobUFjY2Vzc0luZm8uQ29ubmVjdFBlcm1pdCAhPSBOVUxM KSB7DQo+LSAgICBGcmVlUG9vbCAobUFjY2Vzc0luZm8uQ29ubmVjdFBlcm1pdCk7DQo+LSAgICBt QWNjZXNzSW5mby5Db25uZWN0UGVybWl0ID0gTlVMTDsNCj4tICB9DQo+LQ0KPi0gIGlmIChtQWNj ZXNzSW5mby5Mb2FkRm9yYmlkICE9IE5VTEwpIHsNCj4tICAgIEZyZWVQb29sIChtQWNjZXNzSW5m by5Mb2FkRm9yYmlkKTsNCj4tICAgIG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgPSBOVUxMOw0KPi0g IH0NCj4tDQo+LSAgaWYgKG1BY2Nlc3NJbmZvLkxvYWRQZXJtaXQgIT0gTlVMTCkgew0KPi0gICAg RnJlZVBvb2wgKG1BY2Nlc3NJbmZvLkxvYWRQZXJtaXQpOw0KPi0gICAgbUFjY2Vzc0luZm8uTG9h ZFBlcm1pdCA9IE5VTEw7DQo+LSAgfQ0KPi19DQo+LQ0KPi0vKioNCj4tICBDcmVhdGUgYW4gYWN0 aW9uIE9wQ29kZSB3aXRoIFF1ZXN0aW9uSUQgYW5kIERldmljZVBhdGggb24gYSBnaXZlbg0KPk9w Q29kZUhhbmRsZS4NCj4tDQo+LSAgQHBhcmFtW2luXSAgUXVlc3Rpb25JRCAgICAgICAgICAgIFRo ZSBxdWVzdGlvbiBJRC4NCj4tICBAcGFyYW1baW5dICBEZXZpY2VQYXRoICAgICAgICAgICAgUG9p bnRzIHRvIGRldmljZSBwYXRoLg0KPi0gIEBwYXJhbVtpbl0gIE9wQ29kZUhhbmRsZSAgICAgICAg ICBQb2ludHMgdG8gY29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQNCj5vcGNvZGVzLg0KPi0N Cj4tKiovDQo+LVZPSUQNCj4tQWRkRGV2aWNlUGF0aCAoDQo+LSAgSU4gIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQsDQo+LSAgSU4gIEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCAgICAgICAgICAgICAgICAgICpEZXZpY2VQYXRoLA0KPi0gIElOICAg ICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqT3BDb2RlSGFuZGxlDQo+ LSAgKQ0KPi17DQo+LSAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAgICpOZXh0Ow0K Pi0gIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgICAgICBOYW1lSUQ7DQo+LSAgRUZJX1NU UklORyAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlck5hbWU7DQo+LQ0KPi0gIC8vDQo+LSAg Ly8gR2V0IGRyaXZlciBmaWxlIG5hbWUgbm9kZS4NCj4tICAvLw0KPi0gIE5leHQgPSBEZXZpY2VQ YXRoOw0KPi0gIHdoaWxlICghSXNEZXZpY2VQYXRoRW5kIChOZXh0KSkgew0KPi0gICAgRGV2aWNl UGF0aCAgPSBOZXh0Ow0KPi0gICAgTmV4dCAgICAgICAgPSBOZXh0RGV2aWNlUGF0aE5vZGUgKE5l eHQpOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBEaXNwbGF5IHRoZSBkZXZpY2UgcGF0aCBp biBmb3JtLg0KPi0gIC8vDQo+LSAgRHJpdmVyTmFtZSA9IENvbnZlcnREZXZpY2VQYXRoVG9UZXh0 IChEZXZpY2VQYXRoLCBGQUxTRSwgRkFMU0UpOw0KPi0gIE5hbWVJRCA9IEhpaVNldFN0cmluZyAo bUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCAwLCBEcml2ZXJOYW1lLCBOVUxMKTsNCj4tICBGcmVl UG9vbCAoRHJpdmVyTmFtZSk7DQo+LSAgaWYgKE5hbWVJRCA9PSAwKSB7DQo+LSAgICByZXR1cm4g Ow0KPi0gIH0NCj4tDQo+LSAgSGlpQ3JlYXRlQWN0aW9uT3BDb2RlICgNCj4tICAgIE9wQ29kZUhh bmRsZSwgICAgICAgICAgICAgICAgICAgLy8gQ29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQg b3Bjb2Rlcw0KPi0gICAgKFVJTlQxNikgUXVlc3Rpb25JRCwgICAgICAgICAgICAvLyBRdWVzdGlv biBJRA0KPi0gICAgTmFtZUlELCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9tcHQgdGV4 dA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJfTlVMTF9TVFJJTkcpLCAvLyBIZWxwIHRleHQNCj4t ICAgIEVGSV9JRlJfRkxBR19DQUxMQkFDSywgICAgICAgICAgLy8gUXVlc3Rpb24gZmxhZw0KPi0g ICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBY3Rpb24gU3RyaW5nIElEDQo+ LSAgICApOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQ2hlY2sgd2hldGhlciB0aGUgRGV2aWNl UGF0aCBpcyBpbiB0aGUgZGV2aWNlIHBhdGggZm9yYmlkIGxpc3QNCj4tICAobUFjY2Vzc0luZm8u TG9hZEZvcmJpZCkuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIERldmljZVBhdGggICAgICAgICAgIFBv aW50cyB0byBkZXZpY2UgcGF0aC4NCj4tDQo+LSAgQHJldHZhbCBUUlVFICAgICBUaGUgRGV2aWNl UGF0aCBpcyBpbiB0aGUgZGV2aWNlIHBhdGggZm9yYmlkIGxpc3QuDQo+LSAgQHJldHZhbCBGQUxT RSAgICBUaGUgRGV2aWNlUGF0aCBpcyBub3QgaW4gdGhlIGRldmljZSBwYXRoIGZvcmJpZCBsaXN0 Lg0KPi0NCj4tKiovDQo+LUJPT0xFQU4NCj4tSXNMb2FkRm9yYmlkZGVuICgNCj4tICBJTiAgRUZJ X0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAgICAgICAgICAgKkRldmljZVBhdGgNCj4tICAp DQo+LXsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIE9mZlNldDsNCj4tICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgIERQU2l6ZTsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgICAg IFNpemU7DQo+LSAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqRHA7DQo+LQ0KPi0gIE9mZlNl dCA9IDA7DQo+LSAgU2l6ZSAgID0gR2V0RGV2aWNlUGF0aFNpemUgKERldmljZVBhdGgpOw0KPi0g IC8vDQo+LSAgLy8gQ2hlY2sgZWFjaCBkZXZpY2UgcGF0aC4NCj4tICAvLw0KPi0gIHdoaWxlIChP ZmZTZXQgPCBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVuKSB7DQo+LSAgICBEcCAgICAgID0gKEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSAobUFjY2Vzc0luZm8uTG9hZEZvcmJpZCArDQo+T2Zm U2V0KTsNCj4tICAgIERQU2l6ZSAgPSBHZXREZXZpY2VQYXRoU2l6ZSAoRHApOw0KPi0gICAgLy8N Cj4tICAgIC8vIENvbXBhcmUgZGV2aWNlIHBhdGguDQo+LSAgICAvLw0KPi0gICAgaWYgKChEUFNp emUgPT0gU2l6ZSkgJiYgKENvbXBhcmVNZW0gKERldmljZVBhdGgsIERwLCBTaXplKSA9PSAwKSkg ew0KPi0gICAgICByZXR1cm4gVFJVRTsNCj4tICAgIH0NCj4tICAgIE9mZlNldCArPSBEUFNpemU7 DQo+LSAgfQ0KPi0gIHJldHVybiBGQUxTRTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERpc3Bs YXkgdGhlIHBlcm1pdCBsb2FkIGRldmljZSBwYXRoIGluIHRoZSBsb2FkYWJsZSBkZXZpY2UgcGF0 aCBsaXN0Lg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tRGlzcGxheUxvYWRQZXJtaXQoDQo+LSAgVk9J RA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KPi0gIENIQVIx NiAgICAgICAgICAgICAgKk9yZGVyOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgT3JkZXJTaXpl Ow0KPi0gIFVJTlROICAgICAgICAgICAgICAgTGlzdENvdW50Ow0KPi0gIFVJTlROICAgICAgICAg ICAgICAgSW5kZXg7DQo+LSAgVUlOVDggICAgICAgICAgICAgICAqVmFyOw0KPi0gIFVJTlQ4ICAg ICAgICAgICAgICAgKlZhclB0cjsNCj4tICBDSEFSMTYgICAgICAgICAgICAgIFZhck5hbWVbMTJd Ow0KPi0gIFZPSUQgICAgICAgICAgICAgICAgKlN0YXJ0T3BDb2RlSGFuZGxlOw0KPi0gIFZPSUQg ICAgICAgICAgICAgICAgKkVuZE9wQ29kZUhhbmRsZTsNCj4tICBFRklfSUZSX0dVSURfTEFCRUwg ICpTdGFydExhYmVsOw0KPi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAgKkVuZExhYmVsOw0KPi0NCj4t ICAvLw0KPi0gIC8vIEdldCBEcml2ZXJPcmRlci4NCj4tICAvLw0KPi0gIE9yZGVyU2l6ZSA9IDA7 DQo+LSAgU3RhdHVzICAgID0gZ1JULT5HZXRWYXJpYWJsZSAoDQo+LSAgICAgICAgICAgICAgICAg ICAgIEwiRHJpdmVyT3JkZXIiLA0KPi0gICAgICAgICAgICAgICAgICAgICAmZ0VmaUdsb2JhbFZh cmlhYmxlR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAg ICAgICAgICAgJk9yZGVyU2l6ZSwNCj4tICAgICAgICAgICAgICAgICAgICAgTlVMTA0KPi0gICAg ICAgICAgICAgICAgICAgICApOw0KPi0gIGlmIChTdGF0dXMgIT0gRUZJX0JVRkZFUl9UT09fU01B TEwpIHsNCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICBPcmRlciA9IEFsbG9jYXRlWmVy b1Bvb2wgKE9yZGVyU2l6ZSk7DQo+LSAgaWYgKE9yZGVyID09IE5VTEwpIHsNCj4tICAgIHJldHVy biA7DQo+LSAgfQ0KPi0NCj4tICBTdGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlICgNCj4tICAgICAg ICAgICAgICAgICAgTCJEcml2ZXJPcmRlciIsDQo+LSAgICAgICAgICAgICAgICAgICZnRWZpR2xv YmFsVmFyaWFibGVHdWlkLA0KPi0gICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAg ICAgICAgICAmT3JkZXJTaXplLA0KPi0gICAgICAgICAgICAgICAgICBPcmRlcg0KPi0gICAgICAg ICAgICAgICAgICApOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIHJldHVy biA7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEluaXRpYWxpemUgdGhlIGNvbnRhaW5lciBm b3IgZHluYW1pYyBvcGNvZGVzLg0KPi0gIC8vDQo+LSAgU3RhcnRPcENvZGVIYW5kbGUgPSBIaWlB bGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4tICBBU1NFUlQgKFN0YXJ0T3BDb2RlSGFuZGxlICE9 IE5VTEwpOw0KPi0NCj4tICBFbmRPcENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRs ZSAoKTsNCj4tICBBU1NFUlQgKEVuZE9wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4tDQo+LSAgLy8N Cj4tICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUuDQo+LSAgLy8NCj4tICBTdGFy dExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVhdGVHdWlkT3BDb2RlICgNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0T3BDb2RlSGFuZGxl LA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFu b0d1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfSUZS X0dVSURfTEFCRUwpDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Ow0KPi0gIFN0YXJ0TGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJF TDsNCj4tICBTdGFydExhYmVsLT5OdW1iZXIgICAgICAgID0gTEFCRUxfUEVSTUlUX0xPQURfRlVO QzsNCj4tDQo+LSAgRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1 aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZE9w Q29kZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0Vm aUlmclRpYW5vR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJ X0lGUl9HVUlEX0xBQkVMKQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7DQo+LSAgRW5kTGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJF TDsNCj4tICBFbmRMYWJlbC0+TnVtYmVyICAgICAgICA9IExBQkVMX0VORDsNCj4tDQo+LSAgLy8N Cj4tICAvLyBBZGQgZWFjaCBkcml2ZXIgb3B0aW9uLg0KPi0gIC8vDQo+LSAgVmFyICAgICAgID0g TlVMTDsNCj4tICBMaXN0Q291bnQgPSBPcmRlclNpemUgLyBzaXplb2YgKFVJTlQxNik7DQo+LSAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgTGlzdENvdW50OyBJbmRleCsrKSB7DQo+LSAgICAvLw0K Pi0gICAgLy8gR2V0IGRyaXZlciBkZXZpY2UgcGF0aC4NCj4tICAgIC8vDQo+LSAgICBVbmljb2Rl U1ByaW50IChWYXJOYW1lLCBzaXplb2YgKFZhck5hbWUpLCBMIkRyaXZlciUwNHgiLCBPcmRlcltJ bmRleF0pOw0KPi0gICAgR2V0RWZpR2xvYmFsVmFyaWFibGUyIChWYXJOYW1lLCAoVk9JRCoqKSZW YXIsIE5VTEwpOw0KPi0gICAgaWYgKFZhciA9PSBOVUxMKSB7DQo+LSAgICAgIGNvbnRpbnVlOw0K Pi0gICAgfQ0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBkcml2ZXIg aXMgYWxyZWFkeSBmb3JiaWRkZW4uDQo+LSAgICAvLw0KPi0NCj4tICAgIFZhclB0ciA9IFZhcjsN Cj4tICAgIC8vDQo+LSAgICAvLyBTa2lwIGF0dHJpYnV0ZS4NCj4tICAgIC8vDQo+LSAgICBWYXJQ dHIgKz0gc2l6ZW9mIChVSU5UMzIpOw0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBTa2lwIGRldmlj ZSBwYXRoIGxlbnRoLg0KPi0gICAgLy8NCj4tICAgIFZhclB0ciArPSBzaXplb2YgKFVJTlQxNik7 DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIFNraXAgZGVzY3JpcHQgc3RyaW5nLg0KPi0gICAgLy8N Cj4tICAgIFZhclB0ciArPSBTdHJTaXplICgoVUlOVDE2ICopIFZhclB0cik7DQo+LQ0KPi0gICAg aWYgKElzTG9hZEZvcmJpZGRlbiAoKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSBWYXJQdHIp KSB7DQo+LSAgICAgIEZyZWVQb29sIChWYXIpOw0KPi0gICAgICBWYXIgPSBOVUxMOw0KPi0gICAg ICBjb250aW51ZTsNCj4tICAgIH0NCj4tDQo+LSAgICBBZGREZXZpY2VQYXRoICgNCj4tICAgICAg S0VZX01PRElGWV9VU0VSIHwgS0VZX01PRElGWV9BUF9EUCB8IEtFWV9MT0FEX1BFUk1JVF9NT0RJ RlkNCj58IE9yZGVyW0luZGV4XSwNCj4tICAgICAgKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAq KSBWYXJQdHIsDQo+LSAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlDQo+LSAgICAgICk7DQo+LSAgICBG cmVlUG9vbCAoVmFyKTsNCj4tICAgIFZhciA9IE5VTEw7DQo+LSAgfQ0KPi0NCj4tICBIaWlVcGRh dGVGb3JtICgNCj4tICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgLy8gSElJIGhhbmRsZQ0K Pi0gICAgJmdVc2VyUHJvZmlsZU1hbmFnZXJHdWlkLCAvLyBGb3Jtc2V0IEdVSUQNCj4tICAgIEZP Uk1JRF9QRVJNSVRfTE9BRF9EUCwgICAgLy8gRm9ybSBJRA0KPi0gICAgU3RhcnRPcENvZGVIYW5k bGUsICAgICAgICAvLyBMYWJlbCBmb3Igd2hlcmUgdG8gaW5zZXJ0IG9wY29kZXMNCj4tICAgIEVu ZE9wQ29kZUhhbmRsZSAgICAgICAgICAgLy8gUmVwbGFjZSBkYXRhDQo+LSAgICApOw0KPi0NCj4t ICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFydE9wQ29kZUhhbmRsZSk7DQo+LSAgSGlpRnJlZU9w Q29kZUhhbmRsZSAoRW5kT3BDb2RlSGFuZGxlKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBDbGVhciBF bnZpcm9ubWVudC4NCj4tICAvLw0KPi0gIGlmIChWYXIgIT0gTlVMTCkgew0KPi0gICAgRnJlZVBv b2wgKFZhcik7DQo+LSAgfQ0KPi0gIEZyZWVQb29sIChPcmRlcik7DQo+LX0NCj4tDQo+LQ0KPi0v KioNCj4tICBEaXNwbGF5IHRoZSBmb3JiaWQgbG9hZCBkZXZpY2UgcGF0aCBsaXN0IChtQWNjZXNz SW5mby5Mb2FkRm9yYmlkKS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LURpc3BsYXlMb2FkRm9yYmlk ICgNCj4tICBWT0lEDQo+LSAgKQ0KPi17DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBP ZmZzZXQ7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBEUFNpemU7DQo+LSAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4tICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wg ICpEcDsNCj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAgICpTdGFydE9wQ29kZUhhbmRsZTsN Cj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAgICpFbmRPcENvZGVIYW5kbGU7DQo+LSAgRUZJ X0lGUl9HVUlEX0xBQkVMICAgICAgICAqU3RhcnRMYWJlbDsNCj4tICBFRklfSUZSX0dVSURfTEFC RUwgICAgICAgICpFbmRMYWJlbDsNCj4tDQo+LSAgLy8NCj4tICAvLyBJbml0aWFsaXplIHRoZSBj b250YWluZXIgZm9yIGR5bmFtaWMgb3Bjb2Rlcy4NCj4tICAvLw0KPi0gIFN0YXJ0T3BDb2RlSGFu ZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgQVNTRVJUIChTdGFydE9wQ29k ZUhhbmRsZSAhPSBOVUxMKTsNCj4tDQo+LSAgRW5kT3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVP cENvZGVIYW5kbGUgKCk7DQo+LSAgQVNTRVJUIChFbmRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gQ3JlYXRlIEhpaSBFeHRlbmQgTGFiZWwgT3BDb2RlLg0KPi0gIC8v DQo+LSAgU3RhcnRMYWJlbCA9IChFRklfSUZSX0dVSURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9w Q29kZSAoDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydE9w Q29kZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZn RWZpSWZyVGlhbm9HdWlkLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv ZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsNCj4tICBTdGFydExhYmVsLT5FeHRlbmRPcENvZGUgID0gRUZJX0lGUl9FWFRF TkRfT1BfTEFCRUw7DQo+LSAgU3RhcnRMYWJlbC0+TnVtYmVyICAgICAgICA9IExBQkxFX0ZPUkJJ RF9MT0FEX0ZVTkM7DQo+LQ0KPi0gIEVuZExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBI aWlDcmVhdGVHdWlkT3BDb2RlICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFbmRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPi0gIEVuZExhYmVsLT5FeHRlbmRPcENvZGUgID0gRUZJX0lGUl9FWFRF TkRfT1BfTEFCRUw7DQo+LSAgRW5kTGFiZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9FTkQ7DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gQWRkIGVhY2ggZm9yYmlkIGxvYWQgZHJpdmVycy4NCj4tICAvLw0K Pi0gIE9mZnNldCAgPSAwOw0KPi0gIEluZGV4ICAgPSAwOw0KPi0gIHdoaWxlIChPZmZzZXQgPCBt QWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVuKSB7DQo+LSAgICBEcCAgICAgID0gKEVGSV9ERVZJQ0Vf UEFUSF9QUk9UT0NPTCAqKSAobUFjY2Vzc0luZm8uTG9hZEZvcmJpZCArDQo+T2Zmc2V0KTsNCj4t ICAgIERQU2l6ZSAgPSBHZXREZXZpY2VQYXRoU2l6ZSAoRHApOw0KPi0gICAgQWRkRGV2aWNlUGF0 aCAoDQo+LSAgICAgIEtFWV9NT0RJRllfVVNFUiB8IEtFWV9NT0RJRllfQVBfRFAgfCBLRVlfTE9B RF9GT1JCSURfTU9ESUZZDQo+fCBJbmRleCwNCj4tICAgICAgRHAsDQo+LSAgICAgIFN0YXJ0T3BD b2RlSGFuZGxlDQo+LSAgICAgICk7DQo+LSAgICBJbmRleCsrOw0KPi0gICAgT2Zmc2V0ICs9IERQ U2l6ZTsNCj4tICB9DQo+LQ0KPi0gIEhpaVVwZGF0ZUZvcm0gKA0KPi0gICAgbUNhbGxiYWNrSW5m by0+SGlpSGFuZGxlLCAvLyBISUkgaGFuZGxlDQo+LSAgICAmZ1VzZXJQcm9maWxlTWFuYWdlckd1 aWQsIC8vIEZvcm1zZXQgR1VJRA0KPi0gICAgRk9STUlEX0ZPUkJJRF9MT0FEX0RQLCAgICAvLyBG b3JtIElEDQo+LSAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAgICAgIC8vIExhYmVsIGZvciB3aGVy ZSB0byBpbnNlcnQgb3Bjb2Rlcw0KPi0gICAgRW5kT3BDb2RlSGFuZGxlICAgICAgICAgICAvLyBS ZXBsYWNlIGRhdGENCj4tICAgICk7DQo+LQ0KPi0gIEhpaUZyZWVPcENvZGVIYW5kbGUgKFN0YXJ0 T3BDb2RlSGFuZGxlKTsNCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVIYW5kbGUp Ow0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRGlzcGxheSB0aGUgcGVybWl0IGNvbm5lY3QgZGV2 aWNlIHBhdGguDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1EaXNwbGF5Q29ubmVjdFBlcm1pdCAoDQo+ LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIC8vDQo+LSAgLy8gTm90ZToNCj4tICAvLyBBcyBubyBh cmNoaXRlY3QgcHJvdG9jb2wvaW50ZXJmYWNlIHRvIGJlIGNhbGxlZCBpbiBDb25uZWN0Q29udHJv bGxlcigpDQo+LSAgLy8gdG8gdmVyaWZ5IHRoZSBkZXZpY2UgcGF0aCwganVzdCBhZGQgYSBwbGFj ZSBob2xkZXIgZm9yIHBlcm1pdHRlZCBjb25uZWN0DQo+LSAgLy8gZGV2aWNlIHBhdGguDQo+LSAg Ly8NCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERpc3BsYXkgdGhlIGZvcmJpZCBjb25uZWN0IGRl dmljZSBwYXRoIGxpc3QuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1EaXNwbGF5Q29ubmVjdEZvcmJp ZCAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIC8vDQo+LSAgLy8gTm90ZToNCj4tICAvLyBB cyBubyBhcmNoaXRlY3QgcHJvdG9jb2wvaW50ZXJmYWNlIHRvIGJlIGNhbGxlZCBpbiBDb25uZWN0 Q29udHJvbGxlcigpDQo+LSAgLy8gdG8gdmVyaWZ5IHRoZSBkZXZpY2UgcGF0aCwganVzdCBhZGQg YSBwbGFjZSBob2xkZXIgZm9yIGZvcmJpZGRlbiBjb25uZWN0DQo+LSAgLy8gZGV2aWNlIHBhdGgu DQo+LSAgLy8NCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGRl dmljZSBwYXRoIGJ5IERyaXZlckluZGV4IGZyb20gdGhlIGZvcmJpZCBkZXZpY2UgcGF0aA0KPi0g IGxpc3QgKG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQpLg0KPi0NCj4tICBAcGFyYW1baW5dICBEcml2 ZXJJbmRleCAgIFRoZSBpbmRleCBvZiBkcml2ZXIgaW4gZm9yYmlkZGVuIGRldmljZSBwYXRoIGxp c3QuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1EZWxldGVGcm9tRm9yYmlkTG9hZCAoDQo+LSAgSU4g IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlckluZGV4DQo+ LSAgKQ0KPi17DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBPZmZTZXQ7DQo+LSAgVUlO VE4gICAgICAgICAgICAgICAgICAgICBEUFNpemU7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICBPZmZMZW47DQo+LSAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqRHA7DQo+LQ0KPi0g IE9mZlNldCA9IDA7DQo+LSAgLy8NCj4tICAvLyBGaW5kIHRoZSBzcGVjaWZpZWQgZGV2aWNlIHBh dGguDQo+LSAgLy8NCj4tICB3aGlsZSAoKE9mZlNldCA8IG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWRM ZW4pICYmIChEcml2ZXJJbmRleCA+IDApKSB7DQo+LSAgICBEcCAgICAgID0gKEVGSV9ERVZJQ0Vf UEFUSF9QUk9UT0NPTCAqKSAobUFjY2Vzc0luZm8uTG9hZEZvcmJpZCArDQo+T2ZmU2V0KTsNCj4t ICAgIERQU2l6ZSAgPSBHZXREZXZpY2VQYXRoU2l6ZSAoRHApOw0KPi0gICAgT2ZmU2V0ICs9IERQ U2l6ZTsNCj4tICAgIERyaXZlckluZGV4LS07DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIFNw ZWNpZmllZCBkZXZpY2UgcGF0aCBmb3VuZC4NCj4tICAvLw0KPi0gIGlmIChEcml2ZXJJbmRleCA9 PSAwKSB7DQo+LSAgICBEcCAgICAgID0gKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSAobUFj Y2Vzc0luZm8uTG9hZEZvcmJpZCArDQo+T2ZmU2V0KTsNCj4tICAgIERQU2l6ZSAgPSBHZXREZXZp Y2VQYXRoU2l6ZSAoRHApOw0KPi0gICAgT2ZmTGVuICA9IG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWRM ZW4gLSBPZmZTZXQgLSBEUFNpemU7DQo+LSAgICBpZiAoT2ZmTGVuID4gMCkgew0KPi0gICAgICBD b3B5TWVtICgNCj4tICAgICAgICBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkICsgT2ZmU2V0LA0KPi0g ICAgICAgIG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgKyBPZmZTZXQgKyBEUFNpemUsDQo+LSAgICAg ICAgT2ZmTGVuDQo+LSAgICAgICAgKTsNCj4tICAgIH0NCj4tICAgIG1BY2Nlc3NJbmZvLkxvYWRG b3JiaWRMZW4gLT0gRFBTaXplOw0KPi0gIH0NCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEFkZCB0 aGUgc3BlY2lmaWVkIGRldmljZSBwYXRoIGJ5IERyaXZlckluZGV4IHRvIHRoZSBmb3JiaWQgZGV2 aWNlIHBhdGgNCj4tICBsaXN0IChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkKS4NCj4tDQo+LSAgQHBh cmFtW2luXSAgRHJpdmVySW5kZXggICBUaGUgaW5kZXggb2YgZHJpdmVyIHNhdmVkIGluIGRyaXZl ciBvcHRpb25zLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tQWRkVG9Gb3JiaWRMb2FkICgNCj4tICBJ TiAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVySW5kZXgN Cj4tICApDQo+LXsNCj4tICBVSU5UTiAgICAgICBEZXZpY2VQYXRoTGVuOw0KPi0gIFVJTlQ4ICAg ICAgICpWYXI7DQo+LSAgVUlOVDggICAgICAgKlZhclB0cjsNCj4tICBVSU5UTiAgICAgICBOZXdM ZW47DQo+LSAgVUlOVDggICAgICAgKk5ld0ZMOw0KPi0gIENIQVIxNiAgICAgIFZhck5hbWVbMTNd Ow0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCBsb2FkYWJsZSBkcml2ZXIgZGV2aWNlIHBhdGguDQo+ LSAgLy8NCj4tICBVbmljb2RlU1ByaW50ICAoVmFyTmFtZSwgc2l6ZW9mIChWYXJOYW1lKSwgTCJE cml2ZXIlMDR4IiwgRHJpdmVySW5kZXgpOw0KPi0gIEdldEVmaUdsb2JhbFZhcmlhYmxlMiAoVmFy TmFtZSwgKFZPSUQqKikmVmFyLCBOVUxMKTsNCj4tICBpZiAoVmFyID09IE5VTEwpIHsNCj4tICAg IHJldHVybjsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gU2F2ZSBmb3JiaWQgbG9hZCBkcml2 ZXIuDQo+LSAgLy8NCj4tDQo+LSAgVmFyUHRyID0gVmFyOw0KPi0gIC8vDQo+LSAgLy8gU2tpcCBh dHRyaWJ1dGUuDQo+LSAgLy8NCj4tICBWYXJQdHIgKz0gc2l6ZW9mIChVSU5UMzIpOw0KPi0NCj4t ICBEZXZpY2VQYXRoTGVuID0gKihVSU5UMTYgKikgVmFyUHRyOw0KPi0gIC8vDQo+LSAgLy8gU2tp cCBkZXZpY2UgcGF0aCBsZW5ndGguDQo+LSAgLy8NCj4tICBWYXJQdHIgKz0gc2l6ZW9mIChVSU5U MTYpOw0KPi0NCj4tICAvLw0KPi0gIC8vIFNraXAgZGVzY3JpcHRpb24gc3RyaW5nLg0KPi0gIC8v DQo+LSAgVmFyUHRyICs9IFN0clNpemUgKChVSU5UMTYgKikgVmFyUHRyKTsNCj4tDQo+LSAgTmV3 TGVuICA9IG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWRMZW4gKyBEZXZpY2VQYXRoTGVuOw0KPi0gIE5l d0ZMICAgPSBBbGxvY2F0ZVplcm9Qb29sIChOZXdMZW4pOw0KPi0gIGlmIChOZXdGTCA9PSBOVUxM KSB7DQo+LSAgICBGcmVlUG9vbCAoVmFyKTsNCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4t ICBpZiAobUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbiA+IDApIHsNCj4tICAgIENvcHlNZW0gKE5l d0ZMLCBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkLCBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVuKTsN Cj4tICAgIEZyZWVQb29sIChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkKTsNCj4tICB9DQo+LQ0KPi0g IENvcHlNZW0gKE5ld0ZMICsgbUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbiwgVmFyUHRyLCBEZXZp Y2VQYXRoTGVuKTsNCj4tICBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVuID0gTmV3TGVuOw0KPi0g IG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgICAgPSBOZXdGTDsNCj4tICBGcmVlUG9vbCAoVmFyKTsN Cj4tfQ0KPi0NCj4tDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0 aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Nb2RpZnlJZGVudGl0eVBvbGkNCj5jeS5jDQo+Yi9T ZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL01vZGlm eUlkZW50aXR5UG9saQ0KPmN5LmMNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCA2 MDJjNGE4Mzk3Li4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmlj YXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL01vZGlmeUlkZW50aXR5UG9saQ0KPmN5LmMNCj4r KysgL2Rldi9udWxsDQo+QEAgLTEsNTE2ICswLDAgQEANCj4tLyoqIEBmaWxlDQo+LSAgVGhlIGZ1 bmN0aW9ucyBmb3IgaWRlbnRpZmljYXRpb24gcG9saWN5IG1vZGlmaWNhdGlvbi4NCj4tDQo+LUNv cHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFs cw0KPi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi13aGljaCBhY2NvbXBhbmllcyB0aGlz IGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+Zm91 bmQgYXQNCj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0K Pi0NCj4tVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9O IEFOICJBUyBJUyIgQkFTSVMsDQo+LVdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElP TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPkVYUFJFU1MgT1IgSU1QTElFRC4NCj4tDQo+LSoqLw0K Pi0NCj4tI2luY2x1ZGUgIlVzZXJQcm9maWxlTWFuYWdlci5oIg0KPi0NCj4tDQo+LS8qKg0KPi0g IFZlcmlmeSB0aGUgbmV3IGlkZW50aXR5IHBvbGljeSBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRh dGlvbi4gVGhlIHNhbWUNCj5jcmVkZW50aWFsDQo+LSAgcHJvdmlkZXIgY2FuJ3QgYXBwZWFyIHR3 aWNlIGluIG9uZSBpZGVudGl0eSBwb2xpY3kuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gTmV3R3VpZCAg ICAgICBQb2ludHMgdG8gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgZ3VpZC4NCj4tDQo+LSAgQHJl dHZhbCBUUlVFICAgICBUaGUgTmV3R3VpZCB3YXMgZm91bmQgaW4gdGhlIGlkZW50aXR5IHBvbGlj eS4NCj4tICBAcmV0dmFsIEZBTFNFICAgIFRoZSBOZXdHdWlkIHdhcyBub3QgZm91bmQuDQo+LQ0K Pi0qKi8NCj4tQk9PTEVBTg0KPi1Qcm92aWRlckFscmVhZHlJblBvbGljeSAoDQo+LSAgSU4gRUZJ X0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpOZXdHdWlkDQo+LSAg KQ0KPi17DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0Ow0KPi0gIEVG SV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICpJZGVudGl0eTsNCj4tICBFRklfSU5QVVRfS0VZ ICAgICAgICAgICAgICAgICBLZXk7DQo+LQ0KPi0gIE9mZnNldCA9IDA7DQo+LSAgd2hpbGUgKE9m ZnNldCA8IG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbikgew0KPi0gICAgSWRlbnRpdHkg PSAoRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKikNCj4obVVzZXJJbmZvLk5ld0lkZW50 aXR5UG9saWN5ICsgT2Zmc2V0KTsNCj4tICAgIGlmIChJZGVudGl0eS0+VHlwZSA9PSBFRklfVVNF Ul9JTkZPX0lERU5USVRZX0NSRURFTlRJQUxfUFJPVklERVIpIHsNCj4tICAgICAgaWYgKENvbXBh cmVHdWlkIChOZXdHdWlkLCAoRUZJX0dVSUQgKikgKElkZW50aXR5ICsgMSkpKSB7DQo+LSAgICAg ICAgQ3JlYXRlUG9wVXAgKA0KPi0gICAgICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNLR1JP VU5EX0JMVUUsDQo+LSAgICAgICAgICAmS2V5LA0KPi0gICAgICAgICAgTCJUaGlzIENyZWRlbnRp YWwgUHJvdmlkZXIgQXJlIEFscmVhZHkgVXNlZCEiLA0KPi0gICAgICAgICAgTCIiLA0KPi0gICAg ICAgICAgTCJQcmVzcyBBbnkgS2V5IHRvIENvbnRpbnVlIC4uLiIsDQo+LSAgICAgICAgICBOVUxM DQo+LSAgICAgICAgICApOw0KPi0gICAgICAgIHJldHVybiBUUlVFOw0KPi0gICAgICB9DQo+LSAg ICB9DQo+LSAgICBPZmZzZXQgKz0gSWRlbnRpdHktPkxlbmd0aDsNCj4tICB9DQo+LQ0KPi0gIHJl dHVybiBGQUxTRTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIEFkZCB0aGUgdXNlcidzIGNyZWRl bnRpYWwgcmVjb3JkIGluIHRoZSBwcm92aWRlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgSWRlbnRp dHkgICAgIElkZW50aXR5IHBvbGljeSBpdGVtIGluY2x1ZGluZyBjcmVkZW50aWFsIHByb3ZpZGVy Lg0KPi0gIEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICBQb2ludHMgdG8gdXNlciBwcm9maWxlLg0K Pi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgQWRkIG9yIGRlbGV0ZSByZWNvcmQgc3Vj Y2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICBGYWlsIHRvIGFkZCBvciBk ZWxldGUgcmVjb3JkLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRW5yb2xsVXNlck9uUHJv dmlkZXIgKA0KPi0gIElOICBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAgICAgICAgICAg ICAgKklkZW50aXR5LA0KPi0gIElOICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAg ICAgICAgICAgVXNlcg0KPi0gICkNCj4tew0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleDsNCj4tICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgKlVzZXJDcmVk ZW50aWFsOw0KPi0NCj4tICAvLw0KPi0gIC8vIEZpbmQgdGhlIHNwZWNpZmllZCBjcmVkZW50aWFs IHByb3ZpZGVyLg0KPi0gIC8vDQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVByb3ZpZGVy SW5mby0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgIFVzZXJDcmVkZW50aWFsID0gbVByb3ZpZGVy SW5mby0+UHJvdmlkZXJbSW5kZXhdOw0KPi0gICAgaWYgKENvbXBhcmVHdWlkICgoRUZJX0dVSUQg KikoSWRlbnRpdHkgKyAxKSwgJlVzZXJDcmVkZW50aWFsLT5JZGVudGlmaWVyKSkNCj57DQo+LSAg ICAgIHJldHVybiBVc2VyQ3JlZGVudGlhbC0+RW5yb2xsIChVc2VyQ3JlZGVudGlhbCwgVXNlcik7 DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tfQ0KPi0N Cj4tDQo+LS8qKg0KPi0gIERlbGV0ZSB0aGUgVXNlcidzIGNyZWRlbnRpYWwgcmVjb3JkIG9uIHRo ZSBwcm92aWRlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgSWRlbnRpdHkgICAgIFBvaW50IHRvDQo+ RUZJX1VTRVJfSU5GT19JREVOVElUWV9DUkVERU5USUFMX1BST1ZJREVSIHVzZXIgaW5mby4NCj4t ICBAcGFyYW1baW5dICBVc2VyICAgICAgICAgUG9pbnRzIHRvIHVzZXIgcHJvZmlsZS4NCj4tDQo+ LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIERlbGV0ZSBVc2VyJ3MgY3JlZGVudGlhbCByZWNv cmQgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgICBGYWlsIHRvIGFk ZCBvciBkZWxldGUgcmVjb3JkLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRGVsZXRlVXNl ck9uUHJvdmlkZXIgKA0KPi0gIElOICBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAgICAg ICAgICAgICAgKklkZW50aXR5LA0KPi0gIElOICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAg ICAgICAgICAgICAgICAgVXNlcg0KPi0gICkNCj4tew0KPi0gIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICBJbmRleDsNCj4tICBFRklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAgKlVz ZXJDcmVkZW50aWFsOw0KPi0NCj4tICAvLw0KPi0gIC8vIEZpbmQgdGhlIHNwZWNpZmllZCBjcmVk ZW50aWFsIHByb3ZpZGVyLg0KPi0gIC8vDQo+LSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVBy b3ZpZGVySW5mby0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgIFVzZXJDcmVkZW50aWFsID0gbVBy b3ZpZGVySW5mby0+UHJvdmlkZXJbSW5kZXhdOw0KPi0gICAgaWYgKENvbXBhcmVHdWlkICgoRUZJ X0dVSUQgKikoSWRlbnRpdHkgKyAxKSwgJlVzZXJDcmVkZW50aWFsLT5JZGVudGlmaWVyKSkNCj57 DQo+LSAgICAgIHJldHVybiBVc2VyQ3JlZGVudGlhbC0+RGVsZXRlIChVc2VyQ3JlZGVudGlhbCwg VXNlcik7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4t fQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERlbGV0ZSBVc2VyJ3MgY3JlZGVudGFsIGZyb20gYWxsIHRo ZSBwcm92aWRlcnMgdGhhdCBleGlzdCBpbiBVc2VyJ3MgaWRlbnRpdHkNCj5wb2xpY3kuDQo+LQ0K Pi0gIEBwYXJhbVtpbl0gIElkZW50aXR5UG9saWN5ICAgICBQb2ludCB0byBVc2VyJ3MgaWRlbnRp dHkgcG9saWN5Lg0KPi0gIEBwYXJhbVtpbl0gIElkZW50aXR5UG9saWN5TGVuICBUaGUgbGVuZ3Ro IG9mIHRoZSBpZGVudGl0eSBwb2xpY3kuDQo+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgICAg ICAgIFBvaW50cyB0byB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1EZWxldGVD cmVkZW50aWFsRnJvbVByb3ZpZGVycyAoDQo+LSAgSU4gICAgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqSWRlbnRpdHlQb2xpY3ksDQo+LSAgSU4gICAgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRlbnRpdHlQb2xpY3lMZW4sDQo+LSAgSU4gICAg IEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICAgICAgVXNlcg0KPi0gICkNCj4tew0K Pi0gIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICAgICpJZGVudGl0eTsNCj4tICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQ7DQo+LQ0KPi0gIE9mZnNldCA9IDA7 DQo+LSAgd2hpbGUgKE9mZnNldCA8IElkZW50aXR5UG9saWN5TGVuKSB7DQo+LSAgICBJZGVudGl0 eSA9IChFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAqKSAoSWRlbnRpdHlQb2xpY3kgKyBP ZmZzZXQpOw0KPi0gICAgaWYgKElkZW50aXR5LT5UeXBlID09IEVGSV9VU0VSX0lORk9fSURFTlRJ VFlfQ1JFREVOVElBTF9QUk9WSURFUikgew0KPi0gICAgICAvLw0KPi0gICAgICAvLyBEZWxldGUg dGhlIHVzZXIgb24gdGhpcyBwcm92aWRlci4NCj4tICAgICAgLy8NCj4tICAgICAgRGVsZXRlVXNl ck9uUHJvdmlkZXIgKElkZW50aXR5LCBVc2VyKTsNCj4tICAgIH0NCj4tICAgIE9mZnNldCArPSBJ ZGVudGl0eS0+TGVuZ3RoOw0KPi0gIH0NCj4tDQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBSZW1v dmUgdGhlIHByb3ZpZGVyIHNwZWNpZmllZCBieSBPZmZzZXQgZnJvbSB0aGUgbmV3IHVzZXIgaWRl bnRpZmljYXRpb24NCj5yZWNvcmQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIElkZW50aXR5UG9saWN5 ICAgIFBvaW50IHRvIHVzZXIgaWRlbnRpdHkgaXRlbSBpbiBuZXcgaWRlbnRpZmljYXRpb24NCj5w b2xpY3kuDQo+LSAgQHBhcmFtW2luXSAgT2Zmc2V0ICAgICAgICAgICAgVGhlIGl0ZW0gb2Zmc2V0 IGluIHRoZSBuZXcgaWRlbnRpZmljYXRpb24gcG9saWN5Lg0KPi0NCj4tKiovDQo+LVZPSUQNCj4t RGVsZXRlUHJvdmlkZXJGcm9tUG9saWN5ICgNCj4tICBJTiAgICAgRUZJX1VTRVJfSU5GT19JREVO VElUWV9QT0xJQ1kgICAgICAgICAqSWRlbnRpdHlQb2xpY3ksDQo+LSAgSU4gICAgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0DQo+LSAgKQ0KPi17DQo+LSAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgUmVtYWluaW5nTGVuOw0KPi0gIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgIERlbGV0ZUxlbjsNCj4tDQo+LSAgaWYgKElkZW50aXR5UG9saWN5 LT5MZW5ndGggPT0gbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuKSB7DQo+LSAgICAvLw0K Pi0gICAgLy8gT25seSBvbmUgY3JlZGVudGlhbCBwcm92aWRlciBpbiB0aGUgaWRlbnRpZmljYXRp b24gcG9saWN5Lg0KPi0gICAgLy8gU2V0IHRoZSBuZXcgcG9saWN5IHRvIGJlIFRSVUUgYWZ0ZXIg cmVtb3ZlZCB0aGUgcHJvdmlkZXIuDQo+LSAgICAvLw0KPi0gICAgSWRlbnRpdHlQb2xpY3ktPlR5 cGUgICAgICAgICAgID0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9UUlVFOw0KPi0gICAgSWRlbnRp dHlQb2xpY3ktPkxlbmd0aCAgICAgICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPX0lERU5USVRZ X1BPTElDWSk7DQo+LSAgICBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4gPSBJZGVudGl0 eVBvbGljeS0+TGVuZ3RoOw0KPi0gICAgcmV0dXJuIDsNCj4tICB9DQo+LQ0KPi0gIERlbGV0ZUxl biA9IElkZW50aXR5UG9saWN5LT5MZW5ndGggKw0KPnNpemVvZihFRklfVVNFUl9JTkZPX0lERU5U SVRZX1BPTElDWSk7DQo+LSAgaWYgKChPZmZzZXQgKyBJZGVudGl0eVBvbGljeS0+TGVuZ3RoKSAh PSBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4pIHsNCj4tICAgIC8vDQo+LSAgICAvLyBU aGlzIHByb3ZpZGVyIGlzIG5vdCB0aGUgbGFzdCBpdGVtIGluIHRoZSBpZGVudGlmaWNhdGlvbiBw b2xpY3ksIGRlbGV0ZSBpdCBhbmQNCj50aGUgY29ubmVjdG9yLg0KPi0gICAgLy8NCj4tICAgIFJl bWFpbmluZ0xlbiA9IG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbiAtIE9mZnNldCAtIERl bGV0ZUxlbjsNCj4tICAgIENvcHlNZW0gKChVSU5UOCAqKSBJZGVudGl0eVBvbGljeSwgKFVJTlQ4 ICopIElkZW50aXR5UG9saWN5ICsgRGVsZXRlTGVuLA0KPlJlbWFpbmluZ0xlbik7DQo+LSAgfQ0K Pi0gIG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbiAtPSBEZWxldGVMZW47DQo+LX0NCj4t DQo+LQ0KPi0vKioNCj4tICBBZGQgYSBuZXcgcHJvdmlkZXIgdG8gdGhlIG1Vc2VySW5mby5OZXdJ ZGVudGl0eVBvbGljeS4NCj4tDQo+LSAgSXQgaXMgaW52b2tlZCB3aGVuICdhZGQgb3B0aW9uJyBp biBVSSBpcyBwcmVzc2VkLg0KPi0NCj4tICBAcGFyYW1baW5dIE5ld0d1aWQgICAgICAgUG9pbnRz IHRvIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIGd1aWQuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1B ZGRQcm92aWRlclRvUG9saWN5ICgNCj4tICBJTiAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKk5ld0d1aWQNCj4tICApDQo+LXsNCj4tICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgICAgICAqTmV3UG9saWN5SW5mbzsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICBOZXdQb2xpY3lJbmZvTGVuOw0KPi0gIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9M SUNZICpQb2xpY3k7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUg bmV3IGlkZW50aXR5IHBvbGljeS4NCj4tICAvLw0KPi0gIE5ld1BvbGljeUluZm9MZW4gPSBtVXNl ckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4gKyBzaXplb2YNCj4oRUZJX1VTRVJfSU5GT19JREVO VElUWV9QT0xJQ1kpICsgc2l6ZW9mIChFRklfR1VJRCk7DQo+LSAgaWYgKG1Vc2VySW5mby5OZXdJ ZGVudGl0eVBvbGljeUxlbiA+IDApIHsNCj4tICAgIC8vDQo+LSAgICAvLyBJdCBpcyBub3QgdGhl IGZpcnN0IHByb3ZpZGVyIGluIHRoZSBwb2xpY3kuIEFkZCBhIGNvbm5lY3RvciBiZWZvcmUgcHJv dmlkZXIuDQo+LSAgICAvLw0KPi0gICAgTmV3UG9saWN5SW5mb0xlbiArPSBzaXplb2YgKEVGSV9V U0VSX0lORk9fSURFTlRJVFlfUE9MSUNZKTsNCj4tICB9DQo+LSAgTmV3UG9saWN5SW5mbyA9IEFs bG9jYXRlWmVyb1Bvb2wgKE5ld1BvbGljeUluZm9MZW4pOw0KPi0gIGlmIChOZXdQb2xpY3lJbmZv ID09IE5VTEwpIHsNCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICBOZXdQb2xpY3lJbmZv TGVuID0gMDsNCj4tICBpZiAobVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuID4gMCkgew0K Pi0gICAgLy8NCj4tICAgIC8vIFNhdmUgb3JnaW5hbCBwb2xpY3kuDQo+LSAgICAvLw0KPi0gICAg Q29weU1lbSAoTmV3UG9saWN5SW5mbywgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5LA0KPm1V c2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbik7DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIFNh dmUgbG9naWNhbCBjb25uZWN0b3IuDQo+LSAgICAvLw0KPi0gICAgUG9saWN5ID0gKEVGSV9VU0VS X0lORk9fSURFTlRJVFlfUE9MSUNZICopIChOZXdQb2xpY3lJbmZvICsNCj5tVXNlckluZm8uTmV3 SWRlbnRpdHlQb2xpY3lMZW4pOw0KPi0gICAgaWYgKG1Db25uY2V0TG9naWNhbCA9PSAwKSB7DQo+ LSAgICAgIFBvbGljeS0+VHlwZSA9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQU5EOw0KPi0gICAg fSBlbHNlIHsNCj4tICAgICAgUG9saWN5LT5UeXBlID0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9P UjsNCj4tICAgIH0NCj4tDQo+LSAgICBQb2xpY3ktPkxlbmd0aCAgID0gc2l6ZW9mIChFRklfVVNF Ul9JTkZPX0lERU5USVRZX1BPTElDWSk7DQo+LSAgICBOZXdQb2xpY3lJbmZvTGVuID0gbVVzZXJJ bmZvLk5ld0lkZW50aXR5UG9saWN5TGVuICsgUG9saWN5LT5MZW5ndGg7DQo+LSAgICBGcmVlUG9v bCAobVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5KTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAg Ly8gU2F2ZSBjcmVkZW50aWFsIHByb3ZpZGVyLg0KPi0gIC8vDQo+LSAgUG9saWN5ID0gKEVGSV9V U0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICopIChOZXdQb2xpY3lJbmZvICsNCj5OZXdQb2xpY3lJ bmZvTGVuKTsNCj4tICBQb2xpY3ktPkxlbmd0aCA9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19JREVO VElUWV9QT0xJQ1kpICsgc2l6ZW9mDQo+KEVGSV9HVUlEKTsNCj4tICBQb2xpY3ktPlR5cGUgICA9 IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQ1JFREVOVElBTF9QUk9WSURFUjsNCj4tICBDb3B5R3Vp ZCAoKEVGSV9HVUlEICopIChQb2xpY3kgKyAxKSwgTmV3R3VpZCk7DQo+LSAgTmV3UG9saWN5SW5m b0xlbiArPSBQb2xpY3ktPkxlbmd0aDsNCj4tDQo+LSAgLy8NCj4tICAvLyBVcGRhdGUgaWRlbnRp dHkgcG9saWN5IGNob2ljZS4NCj4tICAvLw0KPi0gIG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGlj eSAgICAgICAgID0gTmV3UG9saWN5SW5mbzsNCj4tICBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xp Y3lMZW4gICAgICA9IE5ld1BvbGljeUluZm9MZW47DQo+LSAgbVVzZXJJbmZvLk5ld0lkZW50aXR5 UG9saWN5TW9kaWZpZWQgPSBUUlVFOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgVGhpcyBmdW5j dGlvbiByZXBsYWNlcyB0aGUgb2xkIGlkZW50aXR5IHBvbGljeSB3aXRoIGEgbmV3IGlkZW50aXR5 IHBvbGljeS4NCj4tDQo+LSAgVGhpcyBmdW5jdGlvbiBkZWxldGUgdGhlIHVzZXIgaWRlbnRpdHkg cG9saWN5IGluZm9ybWF0aW9uLg0KPi0gIElmIGVucm9sbCBuZXcgY3JlZGVudGlhbCBmYWlsZWQs IHJlY292ZXIgdGhlIG9sZCBpZGVudGl0eSBwb2xpY3kuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICBNb2RpZnkgdXNlciBpZGVudGl0eSBwb2xpY3kgc3VjY2Vzc2Z1bGx5Lg0KPi0g IEByZXR2YWwgT3RoZXJzICAgICAgICAgICBGYWlsIHRvIG1vZGlmeSB1c2VyIGlkZW50aXR5IHBv bGljeS4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LVVwZGF0ZUNyZWRlbnRpYWxQcm92aWRl ciAoDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPi0gIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICpJZGVudGl0eTsNCj4tICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQ7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRGVs ZXRlIHRoZSBvbGQgaWRlbnRpZmljYXRpb24gcG9saWN5Lg0KPi0gIC8vDQo+LSAgRGVsZXRlQ3Jl ZGVudGlhbEZyb21Qcm92aWRlcnMgKG1Vc2VySW5mby5JZGVudGl0eVBvbGljeSwNCj5tVXNlcklu Zm8uSWRlbnRpdHlQb2xpY3lMZW4sIG1Nb2RpZnlVc2VyKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBB ZGQgdGhlIG5ldyBpZGVudGlmaWNhdGlvbiBwb2xpY3kuDQo+LSAgLy8NCj4tICBPZmZzZXQgID0g MDsNCj4tICB3aGlsZSAoT2Zmc2V0IDwgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuKSB7 DQo+LSAgICBJZGVudGl0eSA9IChFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAqKQ0KPiht VXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3kgKyBPZmZzZXQpOw0KPi0gICAgaWYgKElkZW50aXR5 LT5UeXBlID09IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQ1JFREVOVElBTF9QUk9WSURFUikgew0K Pi0gICAgICAvLw0KPi0gICAgICAvLyBFbnJvbGwgdGhlIHVzZXIgb24gdGhpcyBwcm92aWRlcg0K Pi0gICAgICAvLw0KPi0gICAgICBTdGF0dXMgPSBFbnJvbGxVc2VyT25Qcm92aWRlciAoSWRlbnRp dHksIG1Nb2RpZnlVc2VyKTsNCj4tICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0g ICAgICAgIC8vDQo+LSAgICAgICAgLy8gRmFpbGVkIHRvIGVucm9sbCB0aGUgdXNlciBieSBuZXcg aWRlbnRpZmljYXRpb24gcG9saWN5Lg0KPi0gICAgICAgIC8vIFNvIHJlbW92ZWQgdGhlIGNyZWRl bnRpYWwgcHJvdmlkZXIgZnJvbSB0aGUgaWRlbnRpZmljYXRpb24gcG9saWN5DQo+LSAgICAgICAg Ly8NCj4tICAgICAgICBEZWxldGVQcm92aWRlckZyb21Qb2xpY3kgKElkZW50aXR5LCBPZmZzZXQp Ow0KPi0gICAgICAgIGNvbnRpbnVlOw0KPi0gICAgICB9DQo+LSAgICB9DQo+LSAgICBPZmZzZXQg Kz0gSWRlbnRpdHktPkxlbmd0aDsNCj4tICB9DQo+LQ0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIENoZWNrIHdoZXRoZXIgdGhlIGlkZW50aXR5IHBvbGlj eSBpcyB2YWxpZC4NCj4tDQo+LSAgQHBhcmFtW2luXSAgUG9saWN5SW5mbyAgICAgICAgICBQb2lu dCB0byB0aGUgaWRlbnRpdHkgcG9saWN5Lg0KPi0gIEBwYXJhbVtpbl0gIFBvbGljeUluZm9MZW4g ICAgICAgVGhlIHBvbGljeSBsZW5ndGguDQo+LQ0KPi0gIEByZXR2YWwgVFJVRSAgICAgVGhlIHBv bGljeSBpcyBhIHZhbGlkIGlkZW50aXR5IHBvbGljeS4NCj4tICBAcmV0dmFsIEZBTFNFICAgIFRo ZSBwb2xpY3kgaXMgbm90IGEgdmFsaWQgaWRlbnRpdHkgcG9saWN5Lg0KPi0NCj4tKiovDQo+LUJP T0xFQU4NCj4tQ2hlY2tOZXdJZGVudGl0eVBvbGljeSAoDQo+LSAgSU4gIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQb2xpY3lJbmZvLA0KPi0gIElOICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2xpY3lJbmZvTGVuDQo+LSAgKQ0K Pi17DQo+LSAgRUZJX1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1kgKklkZW50aXR5Ow0KPi0gIEVG SV9JTlBVVF9LRVkgICAgICAgICAgICAgICAgIEtleTsNCj4tICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICBPZmZzZXQ7DQo+LSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgT3BD b2RlOw0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHBvbGljeSBleHByZXNzaW9uLg0KPi0gIC8v DQo+LSAgT3BDb2RlICA9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfRkFMU0U7DQo+LSAgT2Zmc2V0 ICA9IDA7DQo+LSAgd2hpbGUgKE9mZnNldCA8IFBvbGljeUluZm9MZW4pIHsNCj4tICAgIC8vDQo+ LSAgICAvLyBDaGVjayBpZGVudGlmaWNhdGlvbiBwb2xpY3kgYWNjb3JkaW5nIHRvIHR5cGUNCj4t ICAgIC8vDQo+LSAgICBJZGVudGl0eSA9IChFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAq KSAoUG9saWN5SW5mbyArIE9mZnNldCk7DQo+LSAgICBzd2l0Y2ggKElkZW50aXR5LT5UeXBlKSB7 DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0lERU5USVRZX1RSVUU6DQo+LSAgICAgIGJy ZWFrOw0KPi0NCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9PUjoNCj4tICAgICAg aWYgKE9wQ29kZSA9PSBFRklfVVNFUl9JTkZPX0lERU5USVRZX0FORCkgew0KPi0gICAgICAgIENy ZWF0ZVBvcFVwICgNCj4tICAgICAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9C TFVFLA0KPi0gICAgICAgICAgJktleSwNCj4tICAgICAgICAgIEwiSW52YWxpZCBJZGVudGl0eSBQ b2xpY3ksIE1peGVkIENvbm5lY3RvciBVbnN1cHBvcnQhIiwNCj4tICAgICAgICAgIEwiIiwNCj4t ICAgICAgICAgIEwiUHJlc3MgQW55IEtleSB0byBDb250aW51ZSAuLi4iLA0KPi0gICAgICAgICAg TlVMTA0KPi0gICAgICAgICAgKTsNCj4tICAgICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICAgIH0N Cj4tDQo+LSAgICAgIE9wQ29kZSA9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfT1I7DQo+LSAgICAg IGJyZWFrOw0KPi0NCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9BTkQ6DQo+LSAg ICAgIGlmIChPcENvZGUgPT0gRUZJX1VTRVJfSU5GT19JREVOVElUWV9PUikgew0KPi0gICAgICAg IENyZWF0ZVBvcFVwICgNCj4tICAgICAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VO RF9CTFVFLA0KPi0gICAgICAgICAgJktleSwNCj4tICAgICAgICAgIEwiSW52YWxpZCBJZGVudGl0 eSBQb2xpY3ksIE1peGVkIENvbm5lY3RvciBVbnN1cHBvcnQhIiwNCj4tICAgICAgICAgIEwiIiwN Cj4tICAgICAgICAgIEwiUHJlc3MgQW55IEtleSB0byBDb250aW51ZSAuLi4iLA0KPi0gICAgICAg ICAgTlVMTA0KPi0gICAgICAgICAgKTsNCj4tICAgICAgICByZXR1cm4gRkFMU0U7DQo+LSAgICAg IH0NCj4tDQo+LSAgICAgIE9wQ29kZSA9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQU5EOw0KPi0g ICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQ1JFREVO VElBTF9QUk9WSURFUjoNCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgZGVmYXVsdDoNCj4tICAg ICAgQ3JlYXRlUG9wVXAgKA0KPi0gICAgICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VO RF9CTFVFLA0KPi0gICAgICAgICZLZXksDQo+LSAgICAgICAgTCJVbnN1cHBvcnQgcGFyYW1ldGVy IiwNCj4tICAgICAgICBMIiIsDQo+LSAgICAgICAgTCJQcmVzcyBBbnkgS2V5IHRvIENvbnRpbnVl IC4uLiIsDQo+LSAgICAgICAgTlVMTA0KPi0gICAgICAgICk7DQo+LSAgICAgIHJldHVybiBGQUxT RTsNCj4tICAgIH0NCj4tICAgIE9mZnNldCArPSBJZGVudGl0eS0+TGVuZ3RoOw0KPi0gIH0NCj4t DQo+LSAgcmV0dXJuIFRSVUU7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBTYXZlIHRoZSBpZGVu dGl0eSBwb2xpY3kgYW5kIHVwZGF0ZSBVSSB3aXRoIGl0Lg0KPi0NCj4tICBUaGlzIGZ1bmN0aW9u IHdpbGwgdmVyaWZ5IHRoZSBuZXcgaWRlbnRpdHkgcG9saWN5LCBpbiBjdXJyZW50IGltcGxlbWVu dGF0aW9uLA0KPi0gIHRoZSBpZGVudGl0eSBwb2xpY3kgY2FuIGJlOiAgVCwgUCAmIFAgJiBQICYg Li4uLCBQIHwgUCB8IFAgfCAuLi4NCj4tICBIZXJlLCAiVCIgbWVhbnMgIlRydWUiLCAiUCIgbWVh bnMgIkNyZWRlbnRpYWwgUHJvdmlkZXIiLCAiJiIgbWVhbnMgImFuZCIsDQo+InwiIG1lYW5zICJv ciIuDQo+LSAgT3RoZXIgaWRlbnRpdHkgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuDQo+LQ0K Pi0qKi8NCj4tVk9JRA0KPi1TYXZlSWRlbnRpdHlQb2xpY3kgKA0KPi0gIFZPSUQNCj4tICApDQo+ LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX1VT RVJfSU5GT19IQU5ETEUgICAgICAgICAgVXNlckluZm87DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAg ICAgICAgICAgICAgKkluZm87DQo+LQ0KPi0gIGlmICghbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9s aWN5TW9kaWZpZWQgfHwNCj4obVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuID09IDApKSB7 DQo+LSAgICByZXR1cm47DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHBvbGljeSBl eHByZXNzaW9uLg0KPi0gIC8vDQo+LSAgaWYgKCFDaGVja05ld0lkZW50aXR5UG9saWN5IChtVXNl ckluZm8uTmV3SWRlbnRpdHlQb2xpY3ksDQo+bVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVu KSkgew0KPi0gICAgcmV0dXJuOw0KPi0gIH0NCj4tDQo+LSAgU3RhdHVzID0gRmluZEluZm9CeVR5 cGUgKG1Nb2RpZnlVc2VyLA0KPkVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZX1JFQ09SRCwg JlVzZXJJbmZvKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4g Ow0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBVcGRhdGUgdGhlIGluZm9ybWFudGlvbiBvbiBj cmVkZW50aWFsIHByb3ZpZGVyLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gVXBkYXRlQ3JlZGVudGlh bFByb3ZpZGVyICgpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIHJldHVy biA7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIFNhdmUgbmV3IGlkZW50aWZpY2F0aW9uIHBv bGljeS4NCj4tICAvLw0KPi0gIEluZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKEVGSV9V U0VSX0lORk8pICsNCj5tVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4pOw0KPi0gIEFTU0VS VCAoSW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAgSW5mby0+SW5mb1R5cGUgICAgPSBFRklfVVNFUl9J TkZPX0lERU5USVRZX1BPTElDWV9SRUNPUkQ7DQo+LSAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklf VVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPkVGSV9VU0VSX0lORk9fUFVCTElDIHwg RUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+LSAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlOVDMy KSAoc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArDQo+bVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5 TGVuKTsNCj4tICBDb3B5TWVtICgoVUlOVDggKikgKEluZm8gKyAxKSwgbVVzZXJJbmZvLk5ld0lk ZW50aXR5UG9saWN5LA0KPm1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeUxlbik7DQo+LQ0KPi0g IFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+U2V0SW5mbyAobVVzZXJNYW5hZ2VyLCBtTW9kaWZ5VXNl ciwNCj4mVXNlckluZm8sIEluZm8sIEluZm8tPkluZm9TaXplKTsNCj4tICBGcmVlUG9vbCAoSW5m byk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gVXBkYXRlIHRoZSBtVXNlckluZm8uSWRlbnRpdHlQb2xp Y3kgYnkgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5DQo+LSAgLy8NCj4tICBpZiAobVVzZXJJ bmZvLklkZW50aXR5UG9saWN5ICE9IE5VTEwpIHsNCj4tICAgIEZyZWVQb29sIChtVXNlckluZm8u SWRlbnRpdHlQb2xpY3kpOw0KPi0gIH0NCj4tICBtVXNlckluZm8uSWRlbnRpdHlQb2xpY3kgICAg PSBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3k7DQo+LSAgbVVzZXJJbmZvLklkZW50aXR5UG9s aWN5TGVuID0gbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5TGVuOw0KPi0NCj4tICBtVXNlcklu Zm8uTmV3SWRlbnRpdHlQb2xpY3kgICAgICAgICA9IE5VTEw7DQo+LSAgbVVzZXJJbmZvLk5ld0lk ZW50aXR5UG9saWN5TGVuICAgICAgPSAwOw0KPi0gIG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGlj eU1vZGlmaWVkID0gRkFMU0U7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gVXBkYXRlIGlkZW50aXR5IHBv bGljeSBjaG9pY2UuDQo+LSAgLy8NCj4tICBSZXNvbHZlSWRlbnRpdHlQb2xpY3kgKG1Vc2VySW5m by5JZGVudGl0eVBvbGljeSwNCj5tVXNlckluZm8uSWRlbnRpdHlQb2xpY3lMZW4sIFNUUklOR19U T0tFTiAoU1RSX0lERU5USUZZX1BPTElDWV9WQUwpKTsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0g IFVwZGF0ZSB0aGUgbVVzZXJJbmZvLk5ld0lkZW50aXR5UG9saWN5LCBhbmQgVUkgd2hlbiAnYWRk IG9wdGlvbicgaXMNCj5wcmVzc2VkLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tQWRkSWRlbnRpdHlQ b2xpY3lJdGVtICgNCj4tICBWT0lEDQo+LSAgKQ0KPi17DQo+LSAgaWYgKG1Qcm92aWRlckluZm8t PkNvdW50ID09IDApIHsNCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8v IENoZWNrIHRoZSBpZGVudGl0eSBwb2xpY3kuDQo+LSAgLy8NCj4tICBpZiAoUHJvdmlkZXJBbHJl YWR5SW5Qb2xpY3kgKCZtUHJvdmlkZXJJbmZvLT5Qcm92aWRlclttUHJvdmlkZXJDaG9pY2VdLQ0K Pj5JZGVudGlmaWVyKSkgew0KPi0gICAgcmV0dXJuOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAv LyBBZGQgaXQgdG8gaWRlbnRpZmljYXRpb24gcG9saWN5DQo+LSAgLy8NCj4tICBBZGRQcm92aWRl clRvUG9saWN5ICgmbVByb3ZpZGVySW5mby0+UHJvdmlkZXJbbVByb3ZpZGVyQ2hvaWNlXS0NCj4+ SWRlbnRpZmllcik7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gVXBkYXRlIGlkZW50aXR5IHBvbGljeSBj aG9pY2UuDQo+LSAgLy8NCj4tICBSZXNvbHZlSWRlbnRpdHlQb2xpY3kgKG1Vc2VySW5mby5OZXdJ ZGVudGl0eVBvbGljeSwNCj5tVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4sIFNUUklOR19U T0tFTg0KPihTVFJfSURFTlRJRllfUE9MSUNZX1ZBTFVFKSk7DQo+LX0NCj4tDQo+LQ0KPmRpZmYg LS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFn ZXJEeGUvVXNlclByb2ZpbGVBZGQuYw0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9u L1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZUFkZC5jDQo+ZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0DQo+aW5kZXggNmRlN2U3NWU3OS4uMDAwMDAwMDAwMA0KPi0tLQ0KPmEvU2VjdXJp dHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmls ZUFkZC5jDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDM3MiArMCwwIEBADQo+LS8qKiBAZmlsZQ0K Pi0gIFRoZSBmdW5jdGlvbnMgdG8gYWRkIGEgdXNlciBwcm9maWxlLg0KPi0NCj4tQ29weXJpZ2h0 IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu PEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LWFy ZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJp YnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0K Pi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LQ0KPi1U SEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFT IElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBB TlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0NCj4tKiovDQo+LQ0KPi0j aW5jbHVkZSAiVXNlclByb2ZpbGVNYW5hZ2VyLmgiDQo+LQ0KPi0NCj4tLyoqDQo+LSAgR2V0IHVz ZXIgbmFtZSBmcm9tIHRoZSBwb3B1cCB3aW5kb3dzLg0KPi0NCj4tICBAcGFyYW1baW4sIG91dF0g IFVzZXJOYW1lTGVuICBPbiBlbnRyeSwgcG9pbnQgdG8gVXNlck5hbWUgYnVmZmVyIGxlbmdoLA0K PmluIGJ5dGVzLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIGV4aXQsIHBv aW50IHRvIGlucHV0IHVzZXIgbmFtZSBsZW5ndGgsIGluIGJ5dGVzLg0KPi0gIEBwYXJhbVtvdXRd ICAgICAgVXNlck5hbWUgICAgIFRoZSBidWZmZXIgdG8gaG9sZCB0aGUgaW5wdXQgdXNlciBuYW1l Lg0KPi0NCj4tICBAcmV0dmFsIEVGSV9BQk9SVEVEICAgICAgICAgICBJdCBpcyBnaXZlbiB1cCBi eSBwcmVzc2luZyAnRVNDJyBrZXkuDQo+LSAgQHJldHZhbCBFRklfTk9UX1JFQURZICAgICAgICAg Tm90IGEgdmFsaWQgaW5wdXQgYXQgYWxsLg0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgIEdldCBhIHVzZXIgbmFtZSBzdWNjZXNzZnVsbHkuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRV Uw0KPi1HZXRVc2VyTmFtZUlucHV0ICgNCj4tICBJTiBPVVQgIFVJTlROICAgICAgICAgKlVzZXJO YW1lTGVuLA0KPi0gICAgIE9VVCAgQ0hBUjE2ICAgICAgICAqVXNlck5hbWUNCj4tICApDQo+LXsN Cj4tICBFRklfSU5QVVRfS0VZIEtleTsNCj4tICBVSU5UTiAgICAgICAgIE5hbWVMZW47DQo+LSAg Q0hBUjE2ICAgICAgICBOYW1lW1VTRVJfTkFNRV9MRU5HVEhdOw0KPi0NCj4tICBOYW1lTGVuID0g MDsNCj4tICB3aGlsZSAoVFJVRSkgew0KPi0gICAgTmFtZVtOYW1lTGVuXSAgICAgPSBMJ18nOw0K Pi0gICAgTmFtZVtOYW1lTGVuICsgMV0gPSBMJ1wwJzsNCj4tICAgIENyZWF0ZVBvcFVwICgNCj4t ICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNLR1JPVU5EX0JMVUUsDQo+LSAgICAgICZLZXks DQo+LSAgICAgIEwiSW5wdXQgVXNlciBOYW1lIiwNCj4tICAgICAgTCItLS0tLS0tLS0tLS0tLS0t LS0tLS0iLA0KPi0gICAgICBOYW1lLA0KPi0gICAgICBOVUxMDQo+LSAgICAgICk7DQo+LSAgICAv Lw0KPi0gICAgLy8gQ2hlY2sga2V5Lg0KPi0gICAgLy8NCj4tICAgIGlmIChLZXkuU2NhbkNvZGUg PT0gU0NBTl9OVUxMKSB7DQo+LSAgICAgIGlmIChLZXkuVW5pY29kZUNoYXIgPT0gQ0hBUl9DQVJS SUFHRV9SRVRVUk4pIHsNCj4tICAgICAgICAvLw0KPi0gICAgICAgIC8vIEFkZCB0aGUgbnVsbCB0 ZXJtaW5hdG9yLg0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgTmFtZVtOYW1lTGVuXSA9IDA7DQo+ LSAgICAgICAgTmFtZUxlbisrOw0KPi0gICAgICAgIGJyZWFrOw0KPi0gICAgICB9IGVsc2UgaWYg KChLZXkuVW5pY29kZUNoYXIgPT0gQ0hBUl9OVUxMKSB8fA0KPi0gICAgICAgICAgICAgICAgIChL ZXkuVW5pY29kZUNoYXIgPT0gQ0hBUl9UQUIpIHx8DQo+LSAgICAgICAgICAgICAgICAgKEtleS5V bmljb2RlQ2hhciA9PSBDSEFSX0xJTkVGRUVEKQ0KPi0gICAgICAgICAgICAgICAgICkgew0KPi0g ICAgICAgIGNvbnRpbnVlOw0KPi0gICAgICB9IGVsc2Ugew0KPi0gICAgICAgIGlmIChLZXkuVW5p Y29kZUNoYXIgPT0gQ0hBUl9CQUNLU1BBQ0UpIHsNCj4tICAgICAgICAgIGlmIChOYW1lTGVuID4g MCkgew0KPi0gICAgICAgICAgICBOYW1lTGVuLS07DQo+LSAgICAgICAgICB9DQo+LSAgICAgICAg fSBlbHNlIHsNCj4tICAgICAgICAgIE5hbWVbTmFtZUxlbl0gPSBLZXkuVW5pY29kZUNoYXI7DQo+ LSAgICAgICAgICBOYW1lTGVuKys7DQo+LSAgICAgICAgICBpZiAoTmFtZUxlbiArIDEgPT0gVVNF Ul9OQU1FX0xFTkdUSCkgew0KPi0gICAgICAgICAgICAvLw0KPi0gICAgICAgICAgICAvLyBBZGQg dGhlIG51bGwgdGVybWluYXRvci4NCj4tICAgICAgICAgICAgLy8NCj4tICAgICAgICAgICAgTmFt ZVtOYW1lTGVuXSA9IDA7DQo+LSAgICAgICAgICAgIE5hbWVMZW4rKzsNCj4tICAgICAgICAgICAg YnJlYWs7DQo+LSAgICAgICAgICB9DQo+LSAgICAgICAgfQ0KPi0gICAgICB9DQo+LSAgICB9DQo+ LQ0KPi0gICAgaWYgKEtleS5TY2FuQ29kZSA9PSBTQ0FOX0VTQykgew0KPi0gICAgICByZXR1cm4g RUZJX0FCT1JURUQ7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICBpZiAoTmFtZUxlbiA8PSAxKSB7 DQo+LSAgICByZXR1cm4gRUZJX05PVF9SRUFEWTsNCj4tICB9DQo+LQ0KPi0gIGlmICgqVXNlck5h bWVMZW4gPCBOYW1lTGVuICogc2l6ZW9mIChDSEFSMTYpKSB7DQo+LSAgICByZXR1cm4gRUZJX05P VF9SRUFEWTsNCj4tICB9DQo+LQ0KPi0gICpVc2VyTmFtZUxlbiA9IE5hbWVMZW4gKiBzaXplb2Yg KENIQVIxNik7DQo+LSAgQ29weU1lbSAoVXNlck5hbWUsIE5hbWUsICpVc2VyTmFtZUxlbik7DQo+ LQ0KPi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tLyoqDQo+LSAgU2V0IGEgdXNl cidzIHVzZXJuYW1lLg0KPi0NCj4tICBAcGFyYW1baW5dICAgVXNlciAgICAgICAgICBIYW5kbGUg b2YgYSB1c2VyIHByb2ZpbGUgLg0KPi0gIEBwYXJhbVtpbl0gICBVc2VyTmFtZUxlbiAgIFRoZSBs ZW5naCBvZiBVc2VyTmFtZS4NCj4tICBAcGFyYW1baW5dICAgVXNlck5hbWUgICAgICBQb2ludCB0 byB0aGUgYnVmZmVyIG9mIHVzZXIgbmFtZS4NCj4tDQo+LSAgQHJldHZhbCBFRklfTk9UX1JFQURZ ICAgICAgVGhlIHVzZXJubWUgaW4gbUFkZFVzZXJOYW1lIGhhZCBiZWVuIHVzZWQuDQo+LSAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgQ2hhbmdlIHRoZSB1c2VyJ3MgdXNlcm5hbWUgc3VjY2Vz c2Z1bGx5IHdpdGgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZSBpbiBt QWRkVXNlck5hbWUuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1TZXRVc2VyTmFtZSAoDQo+ LSAgSU4gIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgIFVzZXIsDQo+LSAgSU4gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgIFVzZXJOYW1lTGVuLA0KPi0gIElOICBDSEFSMTYgICAgICAgICAg ICAgICAgICAgICAqVXNlck5hbWUNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAg ICAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgVXNlckluZm87DQo+LSAg RUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgVGVtcFVzZXI7DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAg ICAgICAgKk5ld1VzZXJJbmZvOw0KPi0NCj4tICBOZXdVc2VySW5mbyA9IEFsbG9jYXRlWmVyb1Bv b2wgKHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBVc2VyTmFtZUxlbik7DQo+LSAgQVNTRVJUIChO ZXdVc2VySW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAgTmV3VXNlckluZm8tPkluZm9UeXBlICAgID0g RUZJX1VTRVJfSU5GT19OQU1FX1JFQ09SRDsNCj4tICBOZXdVc2VySW5mby0+SW5mb0F0dHJpYnMg PSBFRklfVVNFUl9JTkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEVGSV9VU0VSX0lORk9fUFVCTElDIHwNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFRklfVVNFUl9JTkZPX0VYQ0xVU0lWRTsNCj4tICBOZXdVc2VySW5mby0+SW5m b1NpemUgICAgPSAoVUlOVDMyKSAoc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArDQo+VXNlck5hbWVM ZW4pOw0KPi0gIENvcHlNZW0gKChVSU5UOCAqKSAoTmV3VXNlckluZm8gKyAxKSwgVXNlck5hbWUs IFVzZXJOYW1lTGVuKTsNCj4tICBUZW1wVXNlciAgPSBOVUxMOw0KPi0gIFN0YXR1cyAgICA9IG1V c2VyTWFuYWdlci0+RmluZCAoDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vy TWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRlbXBVc2VyLA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOZXdVc2VySW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TmV3VXNlckluZm8tPkluZm9TaXplDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 DQo+LSAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIC8vDQo+LSAgICAvLyBUaGUg dXNlciBuYW1lIGhhZCBiZWVuIHVzZWQsIHJldHVybiBlcnJvci4NCj4tICAgIC8vDQo+LSAgICBG cmVlUG9vbCAoTmV3VXNlckluZm8pOw0KPi0gICAgcmV0dXJuIEVGSV9OT1RfUkVBRFk7DQo+LSAg fQ0KPi0NCj4tICBVc2VySW5mbyA9IE5VTEw7DQo+LSAgbVVzZXJNYW5hZ2VyLT5TZXRJbmZvICgN Cj4tICAgICAgICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLA0KPi0gICAgICAgICAgICAgICAgICBV c2VyLA0KPi0gICAgICAgICAgICAgICAgICAmVXNlckluZm8sDQo+LSAgICAgICAgICAgICAgICAg IE5ld1VzZXJJbmZvLA0KPi0gICAgICAgICAgICAgICAgICBOZXdVc2VySW5mby0+SW5mb1NpemUN Cj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICBGcmVlUG9vbCAoTmV3VXNlckluZm8pOw0KPi0g IHJldHVybiBFRklfU1VDQ0VTUzsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIFNldCBjcmVhdGUg ZGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHVzZXIuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFVzZXIgICAg ICAgICAgICAgICBIYW5kbGUgb2YgYSB1c2VyIHByb2ZpbGUuDQo+LQ0KPi0qKi8NCj4tVk9JRA0K Pi1TZXRDcmVhdGVEYXRlICgNCj4tICBJTiAgICAgICAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUg ICBVc2VyDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7 DQo+LSAgRUZJX1VTRVJfSU5GT19IQU5ETEUgICAgICBVc2VySW5mbzsNCj4tICBFRklfVVNFUl9J TkZPX0NSRUFURV9EQVRFIERhdGU7DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICAgICAqTmV3 VXNlckluZm87DQo+LQ0KPi0gIE5ld1VzZXJJbmZvID0gQWxsb2NhdGVaZXJvUG9vbCAoDQo+LSAg ICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKw0KPi0gICAgICAgICAgICAg ICAgICBzaXplb2YgKEVGSV9VU0VSX0lORk9fQ1JFQVRFX0RBVEUpDQo+LSAgICAgICAgICAgICAg ICAgICk7DQo+LSAgQVNTRVJUIChOZXdVc2VySW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAgTmV3VXNl ckluZm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19DUkVBVEVfREFURV9SRUNPUkQ7DQo+ LSAgTmV3VXNlckluZm8tPkluZm9BdHRyaWJzID0gRUZJX1VTRVJfSU5GT19TVE9SQUdFX1BMQVRG T1JNX05WIHwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfVVNFUl9JTkZPX1BV QkxJQyB8DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19FWENM VVNJVkU7DQo+LSAgTmV3VXNlckluZm8tPkluZm9TaXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9J TkZPKSArIHNpemVvZg0KPihFRklfVVNFUl9JTkZPX0NSRUFURV9EQVRFKTsNCj4tICBTdGF0dXMg ICAgICAgICAgICAgICAgICAgPSBnUlQtPkdldFRpbWUgKCZEYXRlLCBOVUxMKTsNCj4tICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBGcmVlUG9vbCAoTmV3VXNlckluZm8pOw0KPi0g ICAgcmV0dXJuIDsNCj4tICB9DQo+LQ0KPi0gIENvcHlNZW0gKChVSU5UOCAqKSAoTmV3VXNlcklu Zm8gKyAxKSwgJkRhdGUsIHNpemVvZg0KPihFRklfVVNFUl9JTkZPX0NSRUFURV9EQVRFKSk7DQo+ LSAgVXNlckluZm8gPSBOVUxMOw0KPi0gIG1Vc2VyTWFuYWdlci0+U2V0SW5mbyAoDQo+LSAgICAg ICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgVXNlciwNCj4t ICAgICAgICAgICAgICAgICAgJlVzZXJJbmZvLA0KPi0gICAgICAgICAgICAgICAgICBOZXdVc2Vy SW5mbywNCj4tICAgICAgICAgICAgICAgICAgTmV3VXNlckluZm8tPkluZm9TaXplDQo+LSAgICAg ICAgICAgICAgICAgICk7DQo+LSAgRnJlZVBvb2wgKE5ld1VzZXJJbmZvKTsNCj4tfQ0KPi0NCj4t DQo+LS8qKg0KPi0gIFNldCB0aGUgZGVmYXVsdCBpZGVudGl0eSBwb2xpY3kgb2YgdGhlIHNwZWNp ZmllZCB1c2VyLg0KPi0NCj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICAgICAgICAgSGFuZGxl IG9mIGEgdXNlciBwcm9maWxlLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tU2V0SWRlbnRpdHlQb2xp Y3kgKA0KPi0gIElOICAgICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgIFVzZXINCj4tICAp DQo+LXsNCj4tICBFRklfVVNFUl9JTkZPX0lERU5USVRZX1BPTElDWSAqUG9saWN5Ow0KPi0gIEVG SV9VU0VSX0lORk9fSEFORExFICAgICAgICAgIFVzZXJJbmZvOw0KPi0gIEVGSV9VU0VSX0lORk8g ICAgICAgICAgICAgICAgICpOZXdVc2VySW5mbzsNCj4tDQo+LSAgTmV3VXNlckluZm8gPSBBbGxv Y2F0ZVplcm9Qb29sICgNCj4tICAgICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfVVNFUl9JTkZP KSArDQo+LSAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX1VTRVJfSU5GT19JREVOVElUWV9Q T0xJQ1kpDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgQVNTRVJUIChOZXdVc2VySW5mbyAh PSBOVUxMKTsNCj4tDQo+LSAgUG9saWN5ICAgICAgICAgICAgICAgICAgID0gKEVGSV9VU0VSX0lO Rk9fSURFTlRJVFlfUE9MSUNZICopIChOZXdVc2VySW5mbyArIDEpOw0KPi0gIFBvbGljeS0+VHlw ZSAgICAgICAgICAgICA9IEVGSV9VU0VSX0lORk9fSURFTlRJVFlfVFJVRTsNCj4tICBQb2xpY3kt Pkxlbmd0aCAgICAgICAgICAgPSBzaXplb2YgKEVGSV9VU0VSX0lORk9fSURFTlRJVFlfUE9MSUNZ KTsNCj4tDQo+LSAgTmV3VXNlckluZm8tPkluZm9UeXBlICAgID0gRUZJX1VTRVJfSU5GT19JREVO VElUWV9QT0xJQ1lfUkVDT1JEOw0KPi0gIE5ld1VzZXJJbmZvLT5JbmZvQXR0cmlicyA9IEVGSV9V U0VSX0lORk9fU1RPUkFHRV9QTEFURk9STV9OViB8DQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRUZJX1VTRVJfSU5GT19QVUJMSUMgfA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVGSV9VU0VSX0lORk9fRVhDTFVTSVZFOw0KPi0gIE5ld1VzZXJJbmZvLT5JbmZvU2l6ZSAg ICA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBQb2xpY3ktPkxlbmd0aDsNCj4tICBVc2VySW5m byAgICAgICAgICAgICAgICAgPSBOVUxMOw0KPi0gIG1Vc2VyTWFuYWdlci0+U2V0SW5mbyAoDQo+ LSAgICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgVXNl ciwNCj4tICAgICAgICAgICAgICAgICAgJlVzZXJJbmZvLA0KPi0gICAgICAgICAgICAgICAgICBO ZXdVc2VySW5mbywNCj4tICAgICAgICAgICAgICAgICAgTmV3VXNlckluZm8tPkluZm9TaXplDQo+ LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgRnJlZVBvb2wgKE5ld1VzZXJJbmZvKTsNCj4tfQ0K Pi0NCj4tDQo+LS8qKg0KPi0gIFNldCB0aGUgZGVmYXVsdCBhY2Nlc3MgcG9saWN5IG9mIHRoZSBz cGVjaWZpZWQgdXNlci4NCj4tDQo+LSAgQHBhcmFtW2luXSAgVXNlciAgICAgICAgICAgICAgIEhh bmRsZSBvZiBhIHVzZXIgcHJvZmlsZS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LVNldEFjY2Vzc1Bv bGljeSAoDQo+LSAgSU4gICAgICAgIEVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgVXNlcg0KPi0g ICkNCj4tew0KPi0gIEVGSV9VU0VSX0lORk9fQUNDRVNTX0NPTlRST0wgICpDb250cm9sOw0KPi0g IEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgIFVzZXJJbmZvOw0KPi0gIEVGSV9VU0VSX0lO Rk8gICAgICAgICAgICAgICAgICpOZXdVc2VySW5mbzsNCj4tDQo+LSAgTmV3VXNlckluZm8gPSBB bGxvY2F0ZVplcm9Qb29sICgNCj4tICAgICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfVVNFUl9J TkZPKSArDQo+LSAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1Nf Q09OVFJPTCkNCj4tICAgICAgICAgICAgICAgICAgKTsNCj4tICBBU1NFUlQgKE5ld1VzZXJJbmZv ICE9IE5VTEwpOw0KPi0NCj4tICBDb250cm9sICAgICAgICAgICAgICAgICAgPSAoRUZJX1VTRVJf SU5GT19BQ0NFU1NfQ09OVFJPTCAqKSAoTmV3VXNlckluZm8gKw0KPjEpOw0KPi0gIENvbnRyb2wt PlR5cGUgICAgICAgICAgICA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9TRUxGOw0KPi0g IENvbnRyb2wtPlNpemUgICAgICAgICAgICA9IHNpemVvZiAoRUZJX1VTRVJfSU5GT19BQ0NFU1Nf Q09OVFJPTCk7DQo+LQ0KPi0gIE5ld1VzZXJJbmZvLT5JbmZvVHlwZSAgICA9IEVGSV9VU0VSX0lO Rk9fQUNDRVNTX1BPTElDWV9SRUNPUkQ7DQo+LSAgTmV3VXNlckluZm8tPkluZm9BdHRyaWJzID0g RUZJX1VTRVJfSU5GT19TVE9SQUdFX1BMQVRGT1JNX05WIHwNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFRklfVVNFUl9JTkZPX1BVQkxJQyB8DQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRUZJX1VTRVJfSU5GT19FWENMVVNJVkU7DQo+LSAgTmV3VXNlckluZm8tPkluZm9T aXplICAgID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIENvbnRyb2wtPlNpemU7DQo+LSAgVXNl ckluZm8gICAgICAgICAgICAgICAgID0gTlVMTDsNCj4tICBtVXNlck1hbmFnZXItPlNldEluZm8g KA0KPi0gICAgICAgICAgICAgICAgICBtVXNlck1hbmFnZXIsDQo+LSAgICAgICAgICAgICAgICAg IFVzZXIsDQo+LSAgICAgICAgICAgICAgICAgICZVc2VySW5mbywNCj4tICAgICAgICAgICAgICAg ICAgTmV3VXNlckluZm8sDQo+LSAgICAgICAgICAgICAgICAgIE5ld1VzZXJJbmZvLT5JbmZvU2l6 ZQ0KPi0gICAgICAgICAgICAgICAgICApOw0KPi0gIEZyZWVQb29sIChOZXdVc2VySW5mbyk7DQo+ LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBBZGQgYSBuZXcgdXNlciBwcm9maWxlIGludG8gdGhlIHVz ZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUNhbGxBZGRVc2VyICgN Cj4tICBWT0lEDQo+LSAgKQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVz Ow0KPi0gIEVGSV9JTlBVVF9LRVkgICAgICAgICAgIEtleTsNCj4tICBFRklfVVNFUl9QUk9GSUxF X0hBTkRMRSBVc2VyOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgIFVzZXJOYW1lTGVuOw0K Pi0gIENIQVIxNiAgICAgICAgICAgICAgICAgIFVzZXJOYW1lW1VTRVJfTkFNRV9MRU5HVEhdOw0K Pi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICpRdWVzdGlvblN0cjsNCj4tICBDSEFSMTYgICAg ICAgICAgICAgICAgICAqUHJvbXB0U3RyOw0KPi0NCj4tICBRdWVzdGlvblN0ciA9IE5VTEw7DQo+ LSAgUHJvbXB0U3RyICAgPSBOVUxMOw0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCB1c2VyIG5hbWUg dG8gYWRkLg0KPi0gIC8vDQo+LSAgVXNlck5hbWVMZW4gPSBzaXplb2YgKFVzZXJOYW1lKTsNCj4t ICBTdGF0dXMgPSBHZXRVc2VyTmFtZUlucHV0ICgmVXNlck5hbWVMZW4sIFVzZXJOYW1lKTsNCj4t ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBpZiAoU3RhdHVzICE9IEVGSV9BQk9S VEVEKSB7DQo+LSAgICAgIFF1ZXN0aW9uU3RyID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VO DQo+KFNUUl9HRVRfVVNFUk5BTUVfRkFJTEVEKSk7DQo+LSAgICAgIFByb21wdFN0ciAgID0gR2V0 U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+KFNUUl9TVFJPS0VfS0VZX0NPTlRJTlVFKSk7DQo+ LSAgICAgIGdvdG8gRG9uZTsNCj4tICAgIH0NCj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4t ICAvLw0KPi0gIC8vIENyZWF0ZSBhIG5ldyB1c2VyIHByb2ZpbGUuDQo+LSAgLy8NCj4tICBVc2Vy ICAgID0gTlVMTDsNCj4tICBTdGF0dXMgID0gbVVzZXJNYW5hZ2VyLT5DcmVhdGUgKG1Vc2VyTWFu YWdlciwgJlVzZXIpOw0KPi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgIFF1ZXN0 aW9uU3RyID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VODQo+KFNUUl9DUkVBVEVfUFJPRklM RV9GQUlMRUQpKTsNCj4tICAgIFByb21wdFN0ciAgID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RP S0VODQo+KFNUUl9TVFJPS0VfS0VZX0NPTlRJTlVFKSk7DQo+LSAgfSBlbHNlIHsNCj4tICAgIC8v DQo+LSAgICAvLyBBZGQgZGVmYXVsdCB1c2VyIGluZm9ybWF0aW9uLg0KPi0gICAgLy8NCj4tICAg IFN0YXR1cyA9IFNldFVzZXJOYW1lIChVc2VyLCBVc2VyTmFtZUxlbiwgVXNlck5hbWUpOw0KPi0g ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBRdWVzdGlvblN0ciA9IEdldFN0 cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPihTVFJfVVNFUl9BTFJFQURZX0VYSVNURUQpKTsNCj4t ICAgICAgUHJvbXB0U3RyICAgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4oU1RSX1NU Uk9LRV9LRVlfQ09OVElOVUUpKTsNCj4tICAgICAgZ290byBEb25lOw0KPi0gICAgfQ0KPi0NCj4t ICAgIFNldENyZWF0ZURhdGUgKFVzZXIpOw0KPi0gICAgU2V0SWRlbnRpdHlQb2xpY3kgKFVzZXIp Ow0KPi0gICAgU2V0QWNjZXNzUG9saWN5IChVc2VyKTsNCj4tDQo+LSAgICBRdWVzdGlvblN0ciA9 IEdldFN0cmluZ0J5SWQgKFNUUklOR19UT0tFTg0KPihTVFJfQ1JFQVRFX1BST0ZJTEVfU1VDQ0VT UykpOw0KPi0gICAgUHJvbXB0U3RyICAgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4o U1RSX1NUUk9LRV9LRVlfQ09OVElOVUUpKTsNCj4tICB9DQo+LQ0KPi1Eb25lOg0KPi0gIENyZWF0 ZVBvcFVwICgNCj4tICAgIEVGSV9MSUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPi0g ICAgJktleSwNCj4tICAgIFF1ZXN0aW9uU3RyLA0KPi0gICAgTCIiLA0KPi0gICAgUHJvbXB0U3Ry LA0KPi0gICAgTlVMTA0KPi0gICAgKTsNCj4tICBGcmVlUG9vbCAoUXVlc3Rpb25TdHIpOw0KPi0g IEZyZWVQb29sIChQcm9tcHRTdHIpOw0KPi19DQo+LQ0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5 UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVE ZWxldGUuDQo+Yw0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxl TWFuYWdlckR4ZS9Vc2VyUHJvZmlsZURlbGV0ZS4NCj5jDQo+ZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0DQo+aW5kZXggYWY1ZDMxMDlkZC4uMDAwMDAwMDAwMA0KPi0tLQ0KPmEvU2VjdXJpdHlQa2cv VXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZURlbGV0 ZS4NCj5jDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDM0MyArMCwwIEBADQo+LS8qKiBAZmlsZQ0K Pi0gIFRoZSBmdW5jdGlvbnMgdG8gZGVsZXRlIGEgdXNlciBwcm9maWxlLg0KPi0NCj4tQ29weXJp Z2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlz dHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBh dA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LQ0K Pi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4g IkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBP RiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0NCj4tKiovDQo+LQ0K Pi0jaW5jbHVkZSAiVXNlclByb2ZpbGVNYW5hZ2VyLmgiDQo+LQ0KPi0vKioNCj4tICBHZXQgdGhl IHVzZXJuYW1lIGZyb20gdGhlIHNwZWNpZmllZCB1c2VyLg0KPi0NCj4tICBAcGFyYW1baW5dICAg VXNlciAgICAgICAgICAgICAgSGFuZGxlIG9mIGEgdXNlciBwcm9maWxlLg0KPi0NCj4tICBAcmV0 dmFsIEVGSV9TVFJJTkdfSUQgICAgICAgICAgVGhlIFN0cmluZyBJZCBvZiB0aGUgdXNlcidzIHVz ZXJuYW1lLg0KPi0NCj4tKiovDQo+LUVGSV9TVFJJTkdfSUQNCj4tR2V0VXNlck5hbWUgKA0KPi0g IElOICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgICBVc2VyDQo+LSAg KQ0KPi17DQo+LSAgRUZJX1NUQVRVUyAgICAgICAgICAgIFN0YXR1czsNCj4tICBFRklfVVNFUl9J TkZPX0hBTkRMRSAgVXNlckluZm87DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAgICAgICpJbmZvOw0K Pi0gIFVJTlROICAgICAgICAgICAgICAgICBJbmZvU2l6ZTsNCj4tICBVSU5UTiAgICAgICAgICAg ICAgICAgTWVtU2l6ZTsNCj4tICBVSU5UTiAgICAgICAgICAgICAgICAgTmFtZUxlbjsNCj4tICBD SEFSMTYgICAgICAgICAgICAgICAgVXNlck5hbWVbVVNFUl9OQU1FX0xFTkdUSF07DQo+LSAgRUZJ X1NUUklOR19JRCAgICAgICAgIFVzZXJJZDsNCj4tDQo+LSAgLy8NCj4tICAvLyBBbGxvY2F0ZSB1 c2VyIGluZm9ybWF0aW9uIG1lbW9yeS4NCj4tICAvLw0KPi0gIE1lbVNpemUgPSBzaXplb2YgKEVG SV9VU0VSX0lORk8pICsgNjM7DQo+LSAgSW5mbyAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKE1lbVNp emUpOw0KPi0gIEFTU0VSVCAoSW5mbyAhPSBOVUxMKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBHZXQg dXNlciBuYW1lIGluZm9ybWF0aW9uLg0KPi0gIC8vDQo+LSAgVXNlckluZm8gPSBOVUxMOw0KPi0g IHdoaWxlIChUUlVFKSB7DQo+LSAgICBJbmZvU2l6ZSA9IE1lbVNpemU7DQo+LSAgICAvLw0KPi0g ICAgLy8gR2V0IG5leHQgdXNlciBpbmZvcm1hdGlvbi4NCj4tICAgIC8vDQo+LSAgICBTdGF0dXMg PSBtVXNlck1hbmFnZXItPkdldE5leHRJbmZvICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtVXNlck1hbmFnZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlciwN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNlckluZm8NCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0g ICAgICBicmVhazsNCj4tICAgIH0NCj4tDQo+LSAgICBTdGF0dXMgPSBtVXNlck1hbmFnZXItPkdl dEluZm8gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlciwNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyLA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVzZXJJbmZvLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm8s DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkluZm9TaXplDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4tICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09f U01BTEwpIHsNCj4tICAgICAgTWVtU2l6ZSA9IEluZm9TaXplOw0KPi0gICAgICBGcmVlUG9vbCAo SW5mbyk7DQo+LSAgICAgIEluZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChNZW1TaXplKTsNCj4tICAg ICAgQVNTRVJUIChJbmZvICE9IE5VTEwpOw0KPi0NCj4tICAgICAgU3RhdHVzID0gbVVzZXJNYW5h Z2VyLT5HZXRJbmZvICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VyTWFu YWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIsDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEluZm8sDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5mb1Np emUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICB9DQo+LSAgICAv Lw0KPi0gICAgLy8gQ2hlY2sgdXNlciBpbmZvcm1hdGlvbi4NCj4tICAgIC8vDQo+LSAgICBpZiAo U3RhdHVzID09IEVGSV9TVUNDRVNTKSB7DQo+LSAgICAgIGlmIChJbmZvLT5JbmZvVHlwZSA9PSBF RklfVVNFUl9JTkZPX05BTUVfUkVDT1JEKSB7DQo+LSAgICAgICAgTmFtZUxlbiA9IEluZm8tPklu Zm9TaXplIC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKTsNCj4tICAgICAgICBpZiAoTmFtZUxlbiA+ IFVTRVJfTkFNRV9MRU5HVEggKiBzaXplb2YgKENIQVIxNikpIHsNCj4tICAgICAgICAgIE5hbWVM ZW4gPSBVU0VSX05BTUVfTEVOR1RIICogc2l6ZW9mIChDSEFSMTYpOw0KPi0gICAgICAgIH0NCj4t ICAgICAgICBBU1NFUlQgKE5hbWVMZW4gPj0gc2l6ZW9mIChDSEFSMTYpKTsNCj4tICAgICAgICBD b3B5TWVtIChVc2VyTmFtZSwgKFVJTlQ4ICopIChJbmZvICsgMSksIE5hbWVMZW4pOw0KPi0gICAg ICAgIFVzZXJOYW1lW05hbWVMZW4gLyBzaXplb2YgKENIQVIxNikgLSAxXSA9IDA7DQo+LSAgICAg ICAgVXNlcklkID0gSGlpU2V0U3RyaW5nICgNCj4tICAgICAgICAgICAgICAgICAgIG1DYWxsYmFj a0luZm8tPkhpaUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgIDAsDQo+LSAgICAgICAgICAg ICAgICAgICBVc2VyTmFtZSwNCj4tICAgICAgICAgICAgICAgICAgIE5VTEwNCj4tICAgICAgICAg ICAgICAgICAgICk7DQo+LSAgICAgICAgaWYgKFVzZXJJZCAhPSAwKSB7DQo+LSAgICAgICAgICBG cmVlUG9vbCAoSW5mbyk7DQo+LSAgICAgICAgICByZXR1cm4gVXNlcklkOw0KPi0gICAgICAgIH0N Cj4tICAgICAgfQ0KPi0gICAgfQ0KPi0gIH0NCj4tDQo+LSAgRnJlZVBvb2wgKEluZm8pOw0KPi0g IHJldHVybiAwOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgQWRkIGEgdXNlcm5hbWUgaXRlbSBp biBmb3JtLg0KPi0NCj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICAgIFBvaW50cyB0byB0aGUg dXNlciBwcm9maWxlIHdob3NlIHVzZXJuYW1lIGlzIGFkZGVkLg0KPi0gIEBwYXJhbVtpbl0gIElu ZGV4ICAgICAgICAgVGhlIGluZGV4IG9mIHRoZSB1c2VyIGluIHRoZSB1c2VyIG5hbWUgbGlzdA0K Pi0gIEBwYXJhbVtpbl0gIE9wQ29kZUhhbmRsZSAgUG9pbnRzIHRvIGNvbnRhaW5lciBmb3IgZHlu YW1pYyBjcmVhdGVkDQo+b3Bjb2Rlcy4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUFkZFVzZXJUb0Zv cm0gKA0KPi0gIElOICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgICBV c2VyLA0KPi0gIElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ bmRleCwNCj4tICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Kk9wQ29kZUhhbmRsZQ0KPi0gICkNCj4tew0KPi0gIEVGSV9TVFJJTkdfSUQgTmFtZUlkOw0KPi0N Cj4tICAvLw0KPi0gIC8vIEdldCB1c2VyIG5hbWUNCj4tICAvLw0KPi0gIE5hbWVJZCA9IEdldFVz ZXJOYW1lIChVc2VyKTsNCj4tICBpZiAoTmFtZUlkID09IDApIHsNCj4tICAgIHJldHVybiA7DQo+ LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENyZWF0ZSB1c2VyIG5hbWUgb3B0aW9uLg0KPi0gIC8v DQo+LSAgc3dpdGNoIChJbmRleCAmIEtFWV9GSVJTVF9GT1JNX01BU0spIHsNCj4tICBjYXNlIEtF WV9NT0RJRllfVVNFUjoNCj4tICAgIEhpaUNyZWF0ZUdvdG9PcENvZGUgKA0KPi0gICAgICBPcENv ZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVh dGVkIG9wY29kZXMNCj4tICAgICAgRk9STUlEX1VTRVJfSU5GTywgICAgICAgICAgICAgICAvLyBU YXJnZXQgRm9ybSBJRA0KPi0gICAgICBOYW1lSWQsICAgICAgICAgICAgICAgICAgICAgICAgIC8v IFByb21wdCB0ZXh0DQo+LSAgICAgIFNUUklOR19UT0tFTiAoU1RSX05VTExfU1RSSU5HKSwgLy8g SGVscCB0ZXh0DQo+LSAgICAgIEVGSV9JRlJfRkxBR19DQUxMQkFDSywgICAgICAgICAgLy8gUXVl c3Rpb24gZmxhZw0KPi0gICAgICBJbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1 ZXN0aW9uIElEDQo+LSAgICAgICk7DQo+LSAgICBicmVhazsNCj4tDQo+LSAgY2FzZSBLRVlfREVM X1VTRVI6DQo+LSAgICBIaWlDcmVhdGVBY3Rpb25PcENvZGUgKA0KPi0gICAgICBPcENvZGVIYW5k bGUsICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVhdGVkIG9w Y29kZXMNCj4tICAgICAgSW5kZXgsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWVzdGlv biBJRA0KPi0gICAgICBOYW1lSWQsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21wdCB0 ZXh0DQo+LSAgICAgIFNUUklOR19UT0tFTiAoU1RSX05VTExfU1RSSU5HKSwgLy8gSGVscCB0ZXh0 DQo+LSAgICAgIEVGSV9JRlJfRkxBR19DQUxMQkFDSywgICAgICAgICAgLy8gUXVlc3Rpb24gZmxh Zw0KPi0gICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdGlvbiBTdHJp bmcgSUQNCj4tICAgICAgKTsNCj4tICAgIGJyZWFrOw0KPi0NCj4tICBkZWZhdWx0Og0KPi0gICAg YnJlYWs7DQo+LSAgfQ0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRGVsZXRlIHRoZSB1c2VyIHNw ZWNpZmllZCBieSBVc2VySW5kZXggaW4gdXNlciBwcm9maWxlIGRhdGFiYXNlLg0KPi0NCj4tICBA cGFyYW1baW5dICBVc2VySW5kZXggICAgICAgVGhlIGluZGV4IG9mIHVzZXIgaW4gdGhlIHVzZXIg bmFtZSBsaXN0DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGRlbGV0ZWQu DQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1EZWxldGVVc2VyICgNCj4tICBJTiBVSU5UOCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckluZGV4DQo+LSAgKQ0KPi17DQo+LSAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPi0gIEVGSV9VU0VSX1BST0ZJTEVfSEFO RExFIFVzZXI7DQo+LSAgRUZJX0lOUFVUX0tFWSAgICAgICAgICAgS2V5Ow0KPi0gIEVGSV9VU0VS X0lORk9fSEFORExFICAgIFVzZXJJbmZvOw0KPi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAgICpJ bmZvOw0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgIEluZm9TaXplOw0KPi0NCj4tICAvLw0K Pi0gIC8vIEZpbmQgc3BlY2lmaWVkIHVzZXIgcHJvZmlsZSBhbmQgZGVsZXRlIGl0Lg0KPi0gIC8v DQo+LSAgVXNlciAgICA9IE5VTEw7DQo+LSAgU3RhdHVzICA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4 dCAobVVzZXJNYW5hZ2VyLCAmVXNlcik7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K Pi0gICAgZ290byBEb25lOw0KPi0gIH0NCj4tDQo+LSAgd2hpbGUgKFVzZXJJbmRleCA+IDEpIHsN Cj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dCAobVVzZXJNYW5hZ2VyLCAmVXNl cik7DQo+LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgIGdvdG8gRG9uZTsN Cj4tICAgIH0NCj4tICAgIFVzZXJJbmRleC0tOw0KPi0gIH0NCj4tDQo+LSAgaWYgKFVzZXJJbmRl eCA9PSAxKSB7DQo+LSAgICAvLw0KPi0gICAgLy8gR2V0IHRoZSBpZGVudGlmaWNhdGlvbiBwb2xp Y3kuDQo+LSAgICAvLw0KPi0gICAgU3RhdHVzID0gRmluZEluZm9CeVR5cGUgKFVzZXIsDQo+RUZJ X1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lfUkVDT1JELCAmVXNlckluZm8pOw0KPi0gICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBnb3RvIERvbmU7DQo+LSAgICB9DQo+LQ0K Pi0gICAgSW5mb1NpemUgPSAwOw0KPi0gICAgSW5mbyA9IE5VTEw7DQo+LSAgICBTdGF0dXMgICA9 IG1Vc2VyTWFuYWdlci0+R2V0SW5mbyAobVVzZXJNYW5hZ2VyLCBVc2VyLCBVc2VySW5mbywgSW5m bywNCj4mSW5mb1NpemUpOw0KPi0gICAgaWYgKFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFM TCkgew0KPi0gICAgICBJbmZvID0gQWxsb2NhdGVaZXJvUG9vbCAoSW5mb1NpemUpOw0KPi0gICAg ICBpZiAoSW5mbyA9PSBOVUxMKSB7DQo+LSAgICAgICAgZ290byBEb25lOw0KPi0gICAgICB9DQo+ LSAgICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0SW5mbyAobVVzZXJNYW5hZ2VyLCBVc2Vy LCBVc2VySW5mbywgSW5mbywNCj4mSW5mb1NpemUpOw0KPi0gICAgfQ0KPi0NCj4tICAgIC8vDQo+ LSAgICAvLyBEZWxldGUgdGhlIHVzZXIgb24gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXJzIGJ5IGl0 cyBpZGVudGlmaWNhdGlvbiBwb2xpY3kuDQo+LSAgICAvLw0KPi0gICAgQVNTRVJUIChJbmZvICE9 IE5VTEwpOw0KPi0gICAgRGVsZXRlQ3JlZGVudGlhbEZyb21Qcm92aWRlcnMgKChVSU5UOCAqKShJ bmZvICsgMSksIEluZm8tPkluZm9TaXplIC0gc2l6ZW9mDQo+KEVGSV9VU0VSX0lORk8pLCBVc2Vy KTsNCj4tICAgIEZyZWVQb29sIChJbmZvKTsNCj4tDQo+LSAgICBTdGF0dXMgPSBtVXNlck1hbmFn ZXItPkRlbGV0ZSAobVVzZXJNYW5hZ2VyLCBVc2VyKTsNCj4tICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4tICAgICAgZ290byBEb25lOw0KPi0gICAgfQ0KPi0gICAgQ3JlYXRlUG9wVXAg KA0KPi0gICAgICBFRklfTElHSFRHUkFZIHwgRUZJX0JBQ0tHUk9VTkRfQkxVRSwNCj4tICAgICAg JktleSwNCj4tICAgICAgTCJEZWxldGUgVXNlciBTdWNjZWVkISIsDQo+LSAgICAgIEwiIiwNCj4t ICAgICAgTCJQbGVhc2UgUHJlc3MgQW55IEtleSB0byBDb250aW51ZSAuLi4iLA0KPi0gICAgICBO VUxMDQo+LSAgICAgICk7DQo+LSAgICByZXR1cm4gOw0KPi0gIH0NCj4tDQo+LURvbmU6DQo+LSAg Q3JlYXRlUG9wVXAgKA0KPi0gICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNLR1JPVU5EX0JMVUUs DQo+LSAgICAmS2V5LA0KPi0gICAgTCJEZWxldGUgVXNlciBGYWlsZWQhIiwNCj4tICAgIEwiIiwN Cj4tICAgIEwiUGxlYXNlIFByZXNzIEFueSBLZXkgdG8gQ29udGludWUgLi4uIiwNCj4tICAgIE5V TEwNCj4tICAgICk7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5IHVzZXIgc2VsZWN0 IGZvcm0sIGNhYiBzZWxlY3QgYSB1c2VyIHRvIGRlbGV0ZS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+ LVNlbGVjdFVzZXJUb0RlbGV0ZSAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFU VVMgICAgICAgICAgICAgIFN0YXR1czsNCj4tICBVSU5UOCAgICAgICAgICAgICAgICAgICBJbmRl eDsNCj4tICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSBVc2VyOw0KPi0gIEVGSV9VU0VSX1BST0ZJ TEVfSEFORExFIEN1cnJlbnRVc2VyOw0KPi0gIFZPSUQgICAgICAgICAgICAgICAgICAgICpTdGFy dE9wQ29kZUhhbmRsZTsNCj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAqRW5kT3BDb2RlSGFu ZGxlOw0KPi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAgICAgICpTdGFydExhYmVsOw0KPi0gIEVGSV9J RlJfR1VJRF9MQUJFTCAgICAgICpFbmRMYWJlbDsNCj4tDQo+LSAgLy8NCj4tICAvLyBJbml0aWFs aXplIHRoZSBjb250YWluZXIgZm9yIGR5bmFtaWMgb3Bjb2Rlcy4NCj4tICAvLw0KPi0gIFN0YXJ0 T3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgQVNTRVJUIChT dGFydE9wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4tDQo+LSAgRW5kT3BDb2RlSGFuZGxlID0gSGlp QWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgQVNTRVJUIChFbmRPcENvZGVIYW5kbGUgIT0g TlVMTCk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ3JlYXRlIEhpaSBFeHRlbmQgTGFiZWwgT3BDb2Rl Lg0KPi0gIC8vDQo+LSAgU3RhcnRMYWJlbCA9IChFRklfSUZSX0dVSURfTEFCRUwgKikgSGlpQ3Jl YXRlR3VpZE9wQ29kZSAoDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTdGFydE9wQ29kZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZnRWZpSWZyVGlhbm9HdWlkLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4tICBTdGFydExhYmVsLT5FeHRlbmRPcENvZGUgID0gRUZJ X0lGUl9FWFRFTkRfT1BfTEFCRUw7DQo+LSAgU3RhcnRMYWJlbC0+TnVtYmVyICAgICAgICA9IExB QkVMX1VTRVJfREVMX0ZVTkM7DQo+LQ0KPi0gIEVuZExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJF TCAqKSBIaWlDcmVhdGVHdWlkT3BDb2RlICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFbmRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOw0KPi0gIEVuZExhYmVsLT5FeHRlbmRPcENvZGUgID0gRUZJX0lG Ul9FWFRFTkRfT1BfTEFCRUw7DQo+LSAgRW5kTGFiZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9F TkQ7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWRkIGVhY2ggdXNlciBjYW4gYmUgZGVsZXRlZC4NCj4t ICAvLw0KPi0gIFVzZXIgID0gTlVMTDsNCj4tICBJbmRleCA9IDE7DQo+LSAgbVVzZXJNYW5hZ2Vy LT5DdXJyZW50IChtVXNlck1hbmFnZXIsICZDdXJyZW50VXNlcik7DQo+LSAgd2hpbGUgKFRSVUUp IHsNCj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dCAobVVzZXJNYW5hZ2VyLCAm VXNlcik7DQo+LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgIGJyZWFrOw0K Pi0gICAgfQ0KPi0NCj4tICAgIGlmIChVc2VyICE9IEN1cnJlbnRVc2VyKSB7DQo+LSAgICAgIEFk ZFVzZXJUb0Zvcm0gKA0KPi0gICAgICAgIFVzZXIsDQo+LSAgICAgICAgKFVJTlQxNikoS0VZX0RF TF9VU0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwgSW5kZXgpLA0KPi0gICAgICAgIFN0YXJ0T3BDb2Rl SGFuZGxlDQo+LSAgICAgICAgKTsNCj4tICAgIH0NCj4tICAgIEluZGV4Kys7DQo+LSAgfQ0KPi0N Cj4tICBIaWlVcGRhdGVGb3JtICgNCj4tICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgLy8g SElJIGhhbmRsZQ0KPi0gICAgJmdVc2VyUHJvZmlsZU1hbmFnZXJHdWlkLCAvLyBGb3Jtc2V0IEdV SUQNCj4tICAgIEZPUk1JRF9ERUxfVVNFUiwgICAgICAgICAgLy8gRm9ybSBJRA0KPi0gICAgU3Rh cnRPcENvZGVIYW5kbGUsICAgICAgICAvLyBMYWJlbCBmb3Igd2hlcmUgdG8gaW5zZXJ0IG9wY29k ZXMNCj4tICAgIEVuZE9wQ29kZUhhbmRsZSAgICAgICAgICAgLy8gUmVwbGFjZSBkYXRhDQo+LSAg ICApOw0KPi0NCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFydE9wQ29kZUhhbmRsZSk7DQo+ LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRW5kT3BDb2RlSGFuZGxlKTsNCj4tfQ0KPmRpZmYgLS1n aXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJE eGUvVXNlclByb2ZpbGVNYW5hZw0KPmVyLmMNCj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNh dGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZw0KPmVyLmMNCj5kZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCBlNzNiYTNhOGZjLi4wMDAwMDAwMDAwDQo+LS0t DQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhl L1VzZXJQcm9maWxlTWFuYWcNCj5lci5jDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDg4NyArMCww IEBADQo+LS8qKiBAZmlsZQ0KPi0gIFRoaXMgZHJpdmVyIGlzIGEgY29uZmlndXJhdGlvbiB0b29s IGZvciBhZGRpbmcsIGRlbGV0aW5nIG9yIG1vZGlmeWluZyB1c2VyDQo+LSAgcHJvZmlsZXMsIGlu Y2x1ZGluZyBnYXRoZXJpbmcgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBhc2NlcnRhaW4g dGhlaXINCj4tICBpZGVudGl0eSBpbiB0aGUgZnV0dXJlLCB1cGRhdGluZyB1c2VyIGFjY2VzcyBw b2xpY3kgYW5kIGlkZW50aWZpY2F0aW9uDQo+LSAgcG9saWN5LCBldGMuDQo+LQ0KPi1Db3B5cmln aHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQo+LShDKSBDb3B5cmlnaHQgMjAxOCBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBE ZXZlbG9wbWVudCBMUDxCUj4NCj4tVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1h dGVyaWFscw0KPi1hcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi13aGljaCBhY2NvbXBhbmll cyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJl DQo+Zm91bmQgYXQNCj4taHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNl LnBocA0KPi0NCj4tVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNF TlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+LVdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNF TlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPkVYUFJFU1MgT1IgSU1QTElFRC4NCj4tDQo+ LSoqLw0KPi0NCj4tI2luY2x1ZGUgIlVzZXJQcm9maWxlTWFuYWdlci5oIg0KPi0NCj4tRUZJX1VT RVJfTUFOQUdFUl9QUk9UT0NPTCAqbVVzZXJNYW5hZ2VyICAgICAgICAgICA9IE5VTEw7DQo+LUNS RURFTlRJQUxfUFJPVklERVJfSU5GTyAgKm1Qcm92aWRlckluZm8gICAgICAgICAgPSBOVUxMOw0K Pi1VSU5UOCAgICAgICAgICAgICAgICAgICAgIG1Qcm92aWRlckNob2ljZTsNCj4tVUlOVDggICAg ICAgICAgICAgICAgICAgICBtQ29ubmNldExvZ2ljYWw7DQo+LVVTRVJfSU5GT19BQ0NFU1MgICAg ICAgICAgbUFjY2Vzc0luZm87DQo+LVVTRVJfSU5GTyAgICAgICAgICAgICAgICAgbVVzZXJJbmZv Ow0KPi1VU0VSX1BST0ZJTEVfTUFOQUdFUl9DQUxMQkFDS19JTkZPICAqbUNhbGxiYWNrSW5mbzsN Cj4tSElJX1ZFTkRPUl9ERVZJQ0VfUEFUSCAgbUhpaVZlbmRvckRldmljZVBhdGggPSB7DQo+LSAg ew0KPi0gICAgew0KPi0gICAgICBIQVJEV0FSRV9ERVZJQ0VfUEFUSCwNCj4tICAgICAgSFdfVkVO RE9SX0RQLA0KPi0gICAgICB7DQo+LSAgICAgICAgKFVJTlQ4KSAoc2l6ZW9mIChWRU5ET1JfREVW SUNFX1BBVEgpKSwNCj4tICAgICAgICAoVUlOVDgpICgoc2l6ZW9mIChWRU5ET1JfREVWSUNFX1BB VEgpKSA+PiA4KQ0KPi0gICAgICB9DQo+LSAgICB9LA0KPi0gICAgVVNFUl9QUk9GSUxFX01BTkFH RVJfR1VJRA0KPi0gIH0sDQo+LSAgew0KPi0gICAgRU5EX0RFVklDRV9QQVRIX1RZUEUsDQo+LSAg ICBFTkRfRU5USVJFX0RFVklDRV9QQVRIX1NVQlRZUEUsDQo+LSAgICB7DQo+LSAgICAgIChVSU5U OCkgKEVORF9ERVZJQ0VfUEFUSF9MRU5HVEgpLA0KPi0gICAgICAoVUlOVDgpICgoRU5EX0RFVklD RV9QQVRIX0xFTkdUSCkgPj4gOCkNCj4tICAgIH0NCj4tICB9DQo+LX07DQo+LQ0KPi0NCj4tLyoq DQo+LSAgR2V0IHN0cmluZyBieSBzdHJpbmcgaWQgZnJvbSBISUkgSW50ZXJmYWNlLg0KPi0NCj4t DQo+LSAgQHBhcmFtW2luXSBJZCAgICAgIFN0cmluZyBJRCB0byBnZXQgdGhlIHN0cmluZyBmcm9t Lg0KPi0NCj4tICBAcmV0dmFsICBDSEFSMTYgKiAgU3RyaW5nIGZyb20gSUQuDQo+LSAgQHJldHZh bCAgTlVMTCAgICAgIElmIGVycm9yIG9jY3Vycy4NCj4tDQo+LSoqLw0KPi1DSEFSMTYgKg0KPi1H ZXRTdHJpbmdCeUlkICgNCj4tICBJTiBFRklfU1RSSU5HX0lEICAgICAgICAgICAgIElkDQo+LSAg KQ0KPi17DQo+LSAgLy8NCj4tICAvLyBHZXQgdGhlIGN1cnJlbnQgc3RyaW5nIGZvciB0aGUgY3Vy cmVudCBMYW5ndWFnZS4NCj4tICAvLw0KPi0gIHJldHVybiBIaWlHZXRTdHJpbmcgKG1DYWxsYmFj a0luZm8tPkhpaUhhbmRsZSwgSWQsIE5VTEwpOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgVGhp cyBmdW5jdGlvbiBnZXRzIGFsbCB0aGUgY3JlZGVudGlhbCBwcm92aWRlcnMgaW4gdGhlIHN5c3Rl bSBhbmQgc2F2ZWQgdGhlbQ0KPi0gIHRvIG1Qcm92aWRlckluZm8uDQo+LQ0KPi0gIEByZXR2YWwg RUZJX1NVQ0VTUyAgICAgSW5pdCBjcmVkZW50aWFsIHByb3ZpZGVyIGRhdGFiYXNlIHN1Y2Nlc3Nm dWxseS4NCj4tICBAcmV0dmFsIE90aGVycyAgICAgICAgIEZhaWwgdG8gaW5pdCBjcmVkZW50aWFs IHByb3ZpZGVyIGRhdGFiYXNlLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tSW5pdFByb3Zp ZGVySW5mbyAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgIFN0YXR1czsN Cj4tICBVSU5UTiAgICAgICBIYW5kbGVDb3VudDsNCj4tICBFRklfSEFORExFICAqSGFuZGxlQnVm Ow0KPi0gIFVJTlROICAgICAgIEluZGV4Ow0KPi0NCj4tICAvLw0KPi0gIC8vIFRyeSB0byBmaW5k IGFsbCB0aGUgdXNlciBjcmVkZW50aWFsIHByb3ZpZGVyIGRyaXZlci4NCj4tICAvLw0KPi0gIEhh bmRsZUNvdW50ID0gMDsNCj4tICBIYW5kbGVCdWYgICA9IE5VTEw7DQo+LSAgU3RhdHVzID0gZ0JT LT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KPi0gICAgICAgICAgICAgICAgICBCeVByb3RvY29sLA0K Pi0gICAgICAgICAgICAgICAgICAmZ0VmaVVzZXJDcmVkZW50aWFsMlByb3RvY29sR3VpZCwNCj4t ICAgICAgICAgICAgICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50 LA0KPi0gICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmDQo+LSAgICAgICAgICAgICAgICAgICk7 DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgcmV0dXJuIFN0YXR1czsNCj4t ICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IHByb3ZpZGVyIGluZm9tYXRpb24uDQo+LSAgLy8N Cj4tICBpZiAobVByb3ZpZGVySW5mbyAhPSBOVUxMKSB7DQo+LSAgICBGcmVlUG9vbCAobVByb3Zp ZGVySW5mbyk7DQo+LSAgfQ0KPi0gIG1Qcm92aWRlckluZm8gPSBBbGxvY2F0ZVplcm9Qb29sICgN Cj4tICAgICAgICAgICAgICAgICAgICBzaXplb2YgKENSRURFTlRJQUxfUFJPVklERVJfSU5GTykg LQ0KPi0gICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX1VTRVJfQ1JFREVOVElBTDJfUFJP VE9DT0wgKikgKw0KPi0gICAgICAgICAgICAgICAgICAgIEhhbmRsZUNvdW50ICogc2l6ZW9mIChF RklfVVNFUl9DUkVERU5USUFMMl9QUk9UT0NPTCAqKQ0KPi0gICAgICAgICAgICAgICAgICAgICk7 DQo+LSAgaWYgKG1Qcm92aWRlckluZm8gPT0gTlVMTCkgew0KPi0gICAgRnJlZVBvb2wgKEhhbmRs ZUJ1Zik7DQo+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+LSAgfQ0KPi0NCj4t ICBtUHJvdmlkZXJJbmZvLT5Db3VudCA9IEhhbmRsZUNvdW50Ow0KPi0gIGZvciAoSW5kZXggPSAw OyBJbmRleCA8IEhhbmRsZUNvdW50OyBJbmRleCsrKSB7DQo+LSAgICBTdGF0dXMgPSBnQlMtPkhh bmRsZVByb3RvY29sICgNCj4tICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZbSW5kZXhdLA0K Pi0gICAgICAgICAgICAgICAgICAgICZnRWZpVXNlckNyZWRlbnRpYWwyUHJvdG9jb2xHdWlkLA0K Pi0gICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAmbVByb3ZpZGVySW5mby0+UHJvdmlkZXJb SW5kZXhdDQo+LSAgICAgICAgICAgICAgICAgICAgKTsNCj4tICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4tICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1Zik7DQo+LSAgICAgIEZyZWVQb29s IChtUHJvdmlkZXJJbmZvKTsNCj4tICAgICAgbVByb3ZpZGVySW5mbyA9IE5VTEw7DQo+LSAgICAg IHJldHVybiBTdGF0dXM7DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICBGcmVlUG9vbCAoSGFuZGxl QnVmKTsNCj4tICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBU aGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBjaGFuZ2VzIGluIHVzZXIgcHJvZmlsZSBjb25maWd1cmF0 aW9uLg0KPi0NCj4tICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRo ZSBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wuDQo+LSAgQHBhcmFtICBBY3Rpb24gICAg ICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBhY3Rpb24gdGFrZW4gYnkgdGhlIGJy b3dzZXIuDQo+LSAgQHBhcmFtICBRdWVzdGlvbklkICAgICAgICAgICAgIEEgdW5pcXVlIHZhbHVl IHdoaWNoIGlzIHNlbnQgdG8gdGhlIG9yaWdpbmFsDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4cG9ydGluZyBkcml2ZXIgc28gdGhhdCBpdCBjYW4gaWRlbnRpZnkgdGhlIHR5 cGUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgZGF0YSB0byBleHBlY3Qu DQo+LSAgQHBhcmFtICBUeXBlICAgICAgICAgICAgICAgICAgIFRoZSB0eXBlIG9mIHZhbHVlIGZv ciB0aGUgcXVlc3Rpb24uDQo+LSAgQHBhcmFtICBWYWx1ZSAgICAgICAgICAgICAgICAgIEEgcG9p bnRlciB0byB0aGUgZGF0YSBiZWluZyBzZW50IHRvIHRoZSBvcmlnaW5hbA0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRpbmcgZHJpdmVyLg0KPi0gIEBwYXJhbSAgQWN0 aW9uUmVxdWVzdCAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgYWN0aW9uIHJlcXVl c3RlZCBieQ0KPnRoZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj ayBmdW5jdGlvbi4NCj4tDQo+LSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBj YWxsYmFjayBzdWNjZXNzZnVsbHkgaGFuZGxlZCB0aGUgYWN0aW9uLg0KPi0gIEByZXR2YWwgT3Ro ZXJzICAgICAgICAgICAgICAgICBGYWlsIHRvIGhhbmRsZSB0aGUgYWN0aW9uLg0KPi0NCj4tKiov DQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlTWFuYWdlckNhbGxiYWNrICgN Cj4tICBJTiAgQ09OU1QgRUZJX0hJSV9DT05GSUdfQUNDRVNTX1BST1RPQ09MICAgICAgKlRoaXMs DQo+LSAgSU4gIEVGSV9CUk9XU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlv biwNCj4tICBJTiAgRUZJX1FVRVNUSU9OX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVl c3Rpb25JZCwNCj4tICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVHlwZSwNCj4tICBJTiAgRUZJX0lGUl9UWVBFX1ZBTFVFICAgICAgICAgICAgICAgICAgICAg ICAgKlZhbHVlLA0KPi0gIE9VVCBFRklfQlJPV1NFUl9BQ1RJT05fUkVRVUVTVCAgICAgICAgICAg ICAgICAqQWN0aW9uUmVxdWVzdA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICBTdGF0dXM7DQo+LSAgRUZJX0lOUFVUX0tFWSAgICAgICAgICAgIEtleTsNCj4tICBVSU5U MzIgICAgICAgICAgICAgICAgICAgQ3VycmVudEFjY2Vzc1JpZ2h0Ow0KPi0gIENIQVIxNiAgICAg ICAgICAgICAgICAgICAqUXVlc3Rpb25TdHI7DQo+LSAgQ0hBUjE2ICAgICAgICAgICAgICAgICAg ICpQcm9tcHRTdHI7DQo+LSAgVk9JRCAgICAgICAgICAgICAgICAgICAgICpTdGFydE9wQ29kZUhh bmRsZTsNCj4tICBWT0lEICAgICAgICAgICAgICAgICAgICAgKkVuZE9wQ29kZUhhbmRsZTsNCj4t ICBFRklfSUZSX0dVSURfTEFCRUwgICAgICAgKlN0YXJ0TGFiZWw7DQo+LSAgRUZJX0lGUl9HVUlE X0xBQkVMICAgICAgICpFbmRMYWJlbDsNCj4tICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgQ3Vy cmVudFVzZXI7DQo+LQ0KPi0gIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPi0NCj4tICBzd2l0Y2gg KEFjdGlvbikgew0KPi0gIGNhc2UgRUZJX0JST1dTRVJfQUNUSU9OX0ZPUk1fT1BFTjoNCj4tICAg IHsNCj4tICAgICAgLy8NCj4tICAgICAgLy8gVXBkYXRlIHVzZXIgbWFuYWdlIEZvcm0gd2hlbiB1 c2VyIG1hbmFnZSBGb3JtIGlzIG9wZW5lZC4NCj4tICAgICAgLy8gVGhpcyB3aWxsIGJlIGRvbmUg b25seSBpbiBGT1JNX09QRU4gQ2FsbEJhY2sgb2YgcXVlc3Rpb24gd2l0aA0KPlFVRVNUSU9OSURf VVNFUl9NQU5BR0UgZnJvbSB1c2VyIG1hbmFnZSBGb3JtLg0KPi0gICAgICAvLw0KPi0gICAgICBp ZiAoUXVlc3Rpb25JZCAhPSBRVUVTVElPTklEX1VTRVJfTUFOQUdFKSB7DQo+LSAgICAgICAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICAvLw0KPi0gICAgICAvLyBH ZXQgY3VycmVudCB1c2VyDQo+LSAgICAgIC8vDQo+LSAgICAgIEN1cnJlbnRVc2VyID0gTlVMTDsN Cj4tICAgICAgbVVzZXJNYW5hZ2VyLT5DdXJyZW50IChtVXNlck1hbmFnZXIsICZDdXJyZW50VXNl cik7DQo+LSAgICAgIGlmIChDdXJyZW50VXNlciA9PSBOVUxMKSB7DQo+LSAgICAgICAgREVCVUcg KChERUJVR19FUlJPUiwgIkVycm9yOiBjdXJyZW50IHVzZXIgZG9lcyBub3QgZXhpc3QhXG4iKSk7 DQo+LSAgICAgICAgcmV0dXJuIEVGSV9OT1RfUkVBRFk7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAg IC8vDQo+LSAgICAgIC8vIEdldCBjdXJyZW50IHVzZXIncyByaWdodCBpbmZvcm1hdGlvbi4NCj4t ICAgICAgLy8NCj4tICAgICAgU3RhdHVzID0gR2V0QWNjZXNzUmlnaHQgKCZDdXJyZW50QWNjZXNz UmlnaHQpOw0KPi0gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICAgICAgQ3Vy cmVudEFjY2Vzc1JpZ2h0ID0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX1NFTEY7DQo+LSAg ICAgIH0NCj4tDQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIEluaXQgY3JlZGVudGlhbCBwcm92aWRl ciBpbmZvcm1hdGlvbi4NCj4tICAgICAgLy8NCj4tICAgICAgU3RhdHVzID0gSW5pdFByb3ZpZGVy SW5mbyAoKTsNCj4tICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICAgIHJl dHVybiBTdGF0dXM7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIEluaXRp YWxpemUgdGhlIGNvbnRhaW5lciBmb3IgZHluYW1pYyBvcGNvZGVzLg0KPi0gICAgICAvLw0KPi0g ICAgICBTdGFydE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0g ICAgICBBU1NFUlQgKFN0YXJ0T3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICAgICAgRW5k T3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgICAgIEFTU0VS VCAoRW5kT3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICAgICAgLy8NCj4tICAgICAgLy8g Q3JlYXRlIEhpaSBFeHRlbmQgTGFiZWwgT3BDb2RlLg0KPi0gICAgICAvLw0KPi0gICAgICBTdGFy dExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVhdGVHdWlkT3BDb2RlICgNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydE9wQ29kZUhh bmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0Vm aUlmclRpYW5vR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAgIFN0YXJ0TGFiZWwtPkV4dGVuZE9wQ29kZSAg PSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICAgICAgU3RhcnRMYWJlbC0+TnVtYmVyICAg ICAgICA9IExBQkVMX1VTRVJfTUFOQUdFX0ZVTkM7DQo+LQ0KPi0gICAgICBFbmRMYWJlbCA9IChF RklfSUZSX0dVSURfTEFCRUwgKikgSGlpQ3JlYXRlR3VpZE9wQ29kZSAoDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZE9wQ29kZUhhbmRsZSwNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlE X0xBQkVMKQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0K Pi0gICAgICBFbmRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVM Ow0KPi0gICAgICBFbmRMYWJlbC0+TnVtYmVyICAgICAgICA9IExBQkVMX0VORDsNCj4tDQo+LSAg ICAgIC8vDQo+LSAgICAgIC8vIEFkZCB1c2VyIHByb2ZpbGUgb3B0aW9uLg0KPi0gICAgICAvLw0K Pi0gICAgICBpZiAoKEN1cnJlbnRBY2Nlc3NSaWdodCA9PSBFRklfVVNFUl9JTkZPX0FDQ0VTU19N QU5BR0UpIHx8DQo+LSAgICAgICAgICAoQ3VycmVudEFjY2Vzc1JpZ2h0ID09IEVGSV9VU0VSX0lO Rk9fQUNDRVNTX0VOUk9MTF9PVEhFUlMpDQo+LSAgICAgICAgICApIHsNCj4tICAgICAgICBIaWlD cmVhdGVBY3Rpb25PcENvZGUgKA0KPi0gICAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAg ICAgICAgICAgICAgLy8gQ29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQgb3Bjb2Rlcw0KPi0g ICAgICAgICAgS0VZX0FERF9VU0VSLCAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVlc3Rpb24g SUQNCj4tICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0FERF9VU0VSX1RJVExFKSwgIC8vIFBy b21wdCB0ZXh0DQo+LSAgICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9BRERfVVNFUl9IRUxQKSwg ICAvLyBIZWxwIHRleHQNCj4tICAgICAgICAgIEVGSV9JRlJfRkxBR19DQUxMQkFDSywgICAgICAg ICAgICAgIC8vIFF1ZXN0aW9uIGZsYWcNCj4tICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIEFjdGlvbiBTdHJpbmcgSUQNCj4tICAgICAgICAgICk7DQo+LSAg ICAgIH0NCj4tDQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIEFkZCBtb2RpZnkgdXNlciBwcm9maWxl IG9wdGlvbi4NCj4tICAgICAgLy8NCj4tICAgICAgSGlpQ3JlYXRlR290b09wQ29kZSAoDQo+LSAg ICAgICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgICAvLyBDb250YWluZXIg Zm9yIGR5bmFtaWMgY3JlYXRlZCBvcGNvZGVzDQo+LSAgICAgICAgRk9STUlEX01PRElGWV9VU0VS LCAgICAgICAgICAgICAgICAgICAvLyBUYXJnZXQgRm9ybSBJRA0KPi0gICAgICAgIFNUUklOR19U T0tFTiAoU1RSX01PRElGWV9VU0VSX1RJVExFKSwgLy8gUHJvbXB0IHRleHQNCj4tICAgICAgICBT VFJJTkdfVE9LRU4gKFNUUl9NT0RJRllfVVNFUl9IRUxQKSwgIC8vIEhlbHAgdGV4dA0KPi0gICAg ICAgIEVGSV9JRlJfRkxBR19DQUxMQkFDSywgICAgICAgICAgICAgICAgLy8gUXVlc3Rpb24gZmxh Zw0KPi0gICAgICAgIEtFWV9NT0RJRllfVVNFUiAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVl c3Rpb24gSUQNCj4tICAgICAgICApOw0KPi0NCj4tICAgICAgLy8NCj4tICAgICAgLy8gQWRkIGRl bGV0ZSB1c2VyIHByb2ZpbGUgb3B0aW9uDQo+LSAgICAgIC8vDQo+LSAgICAgIGlmIChDdXJyZW50 QWNjZXNzUmlnaHQgPT0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFKSB7DQo+LSAgICAgICAg SGlpQ3JlYXRlR290b09wQ29kZSAoDQo+LSAgICAgICAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAg ICAgICAgICAgICAgICAgIC8vIENvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVhdGVkIG9wY29kZXMN Cj4tICAgICAgICAgIEZPUk1JRF9ERUxfVVNFUiwgICAgICAgICAgICAgICAgICAgICAgLy8gVGFy Z2V0IEZvcm0gSUQNCj4tICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0RFTEVURV9VU0VSX1RJ VExFKSwgLy8gUHJvbXB0IHRleHQNCj4tICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0RFTEVU RV9VU0VSX0hFTFApLCAgLy8gSGVscCB0ZXh0DQo+LSAgICAgICAgICBFRklfSUZSX0ZMQUdfQ0FM TEJBQ0ssICAgICAgICAgICAgICAgIC8vIFF1ZXN0aW9uIGZsYWcNCj4tICAgICAgICAgIEtFWV9E RUxfVVNFUiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVlc3Rpb24gSUQNCj4tICAgICAg ICAgICk7DQo+LSAgICAgIH0NCj4tDQo+LSAgICAgIEhpaVVwZGF0ZUZvcm0gKA0KPi0gICAgICAg IG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwgICAgICAgICAgICAgICAvLyBISUkgaGFuZGxlDQo+ LSAgICAgICAgJmdVc2VyUHJvZmlsZU1hbmFnZXJHdWlkLCAgICAgICAgICAgICAgIC8vIEZvcm1z ZXQgR1VJRA0KPi0gICAgICAgIEZPUk1JRF9VU0VSX01BTkFHRSwgICAgICAgICAgICAgICAgICAg ICAvLyBGb3JtIElEDQo+LSAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAg ICAgICAgIC8vIExhYmVsIGZvciB3aGVyZSB0byBpbnNlcnQgb3Bjb2Rlcw0KPi0gICAgICAgIEVu ZE9wQ29kZUhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGRhdGENCj4t ICAgICAgICApOw0KPi0NCj4tICAgICAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoU3RhcnRPcENvZGVI YW5kbGUpOw0KPi0gICAgICBIaWlGcmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVIYW5kbGUpOw0K Pi0NCj4tICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPi0gICAgfQ0KPi0gICAgYnJlYWs7DQo+ LQ0KPi0gIGNhc2UgRUZJX0JST1dTRVJfQUNUSU9OX0ZPUk1fQ0xPU0U6DQo+LSAgICBTdGF0dXMg PSBFRklfU1VDQ0VTUzsNCj4tICAgIGJyZWFrOw0KPi0NCj4tICBjYXNlIEVGSV9CUk9XU0VSX0FD VElPTl9DSEFOR0VEOg0KPi0gIHsNCj4tICAgIC8vDQo+LSAgICAvLyBIYW5kbGUgdGhlIHJlcXVl c3QgZnJvbSBmb3JtLg0KPi0gICAgLy8NCj4tICAgIGlmICgoVmFsdWUgPT0gTlVMTCkgfHwgKEFj dGlvblJlcXVlc3QgPT0gTlVMTCkpIHsNCj4tICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCj4tICAgIH0NCj4tDQo+LSAgICAvLw0KPi0gICAgLy8gSnVkZ2UgZmlyc3QgMiBiaXRz Lg0KPi0gICAgLy8NCj4tICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAmIEtFWV9GSVJTVF9GT1JNX01B U0spIHsNCj4tICAgIC8vDQo+LSAgICAvLyBBZGQgdXNlciBwcm9maWxlIG9wZXJhdGlvbi4NCj4t ICAgIC8vDQo+LSAgICBjYXNlIEtFWV9BRERfVVNFUjoNCj4tICAgICAgQ2FsbEFkZFVzZXIgKCk7 DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBEZWxldGUgdXNlciBwcm9m aWxlIG9wZXJhdGlvbi4NCj4tICAgIC8vDQo+LSAgICBjYXNlIEtFWV9ERUxfVVNFUjoNCj4tICAg ICAgLy8NCj4tICAgICAgLy8gSnVkZ2UgbmV4dCAyIGJpdHMuDQo+LSAgICAgIC8vDQo+LSAgICAg IHN3aXRjaCAoUXVlc3Rpb25JZCAmIEtFWV9TRUNPTkRfRk9STV9NQVNLKSB7DQo+LSAgICAgIC8v DQo+LSAgICAgIC8vIERlbGV0ZSBzcGVjaWZpZWQgdXNlciBwcm9maWxlLg0KPi0gICAgICAvLw0K Pi0gICAgICBjYXNlIEtFWV9TRUxFQ1RfVVNFUjoNCj4tICAgICAgICBEZWxldGVVc2VyICgoVUlO VDgpIFF1ZXN0aW9uSWQpOw0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gVXBkYXRlIHNlbGVj dCB1c2VyIGZvcm0gYWZ0ZXIgZGVsZXRlIGEgdXNlci4NCj4tICAgICAgICAvLw0KPi0gICAgICAg IFNlbGVjdFVzZXJUb0RlbGV0ZSAoKTsNCj4tICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgIGRl ZmF1bHQ6DQo+LSAgICAgICAgYnJlYWs7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0K Pi0gICAgLy8NCj4tICAgIC8vIE1vZGlmeSB1c2VyIHByb2ZpbGUgb3BlcmF0aW9uLg0KPi0gICAg Ly8NCj4tICAgIGNhc2UgS0VZX01PRElGWV9VU0VSOg0KPi0gICAgICAvLw0KPi0gICAgICAvLyBK dWRnZSBuZXh0IDIgYml0cy4NCj4tICAgICAgLy8NCj4tICAgICAgc3dpdGNoIChRdWVzdGlvbklk ICYgS0VZX1NFQ09ORF9GT1JNX01BU0spIHsNCj4tICAgICAgLy8NCj4tICAgICAgLy8gRW50ZXIg dXNlciBwcm9maWxlIGluZm9ybWF0aW9uIGZvcm0uDQo+LSAgICAgIC8vDQo+LSAgICAgIGNhc2Ug S0VZX1NFTEVDVF9VU0VSOg0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gSnVkZ2UgbmV4dCAz IGJpdHMuDQo+LSAgICAgICAgLy8NCj4tICAgICAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQgJiBLRVlf TU9ESUZZX0lORk9fTUFTSykgew0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gTW9kaWZ5IHVz ZXIgbmFtZS4NCj4tICAgICAgICAvLw0KPi0gICAgICAgIGNhc2UgS0VZX01PRElGWV9OQU1FOg0K Pi0gICAgICAgICAgTW9kaWZ5VXNlck5hbWUgKCk7DQo+LSAgICAgICAgICAvLw0KPi0gICAgICAg ICAgLy8gVXBkYXRlIHVzZXJuYW1lIGluIHBhcmVudCBmb3JtLg0KPi0gICAgICAgICAgLy8NCj4t ICAgICAgICAgIFNlbGVjdFVzZXJUb01vZGlmeSAoKTsNCj4tICAgICAgICAgIGJyZWFrOw0KPi0N Cj4tICAgICAgICAvLw0KPi0gICAgICAgIC8vIE1vZGlmeSBpZGVudGl0eSBwb2xpY3kuDQo+LSAg ICAgICAgLy8NCj4tICAgICAgICBjYXNlIEtFWV9NT0RJRllfSVA6DQo+LSAgICAgICAgICAvLw0K Pi0gICAgICAgICAgLy8gSnVkZ2UgbmV4dCAzIGJpdHMNCj4tICAgICAgICAgIC8vDQo+LSAgICAg ICAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQgJiBLRVlfTU9ESUZZX0lQX01BU0spIHsNCj4tICAgICAg ICAgIC8vDQo+LSAgICAgICAgICAvLyBDaGFuZ2UgY3JlZGVudGlhbCBwcm92aWRlciBvcHRpb24u DQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgY2FzZSBLRVlfTU9ESUZZX1BST1Y6DQo+LSAg ICAgICAgICAgIG1Qcm92aWRlckNob2ljZSA9IFZhbHVlLT51ODsNCj4tICAgICAgICAgICAgYnJl YWs7DQo+LQ0KPi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIC8vIENoYW5nZSBsb2dpY2FsIGNv bm5lY3Rvci4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBjYXNlIEtFWV9NT0RJRllfQ09O TjoNCj4tICAgICAgICAgICAgbUNvbm5jZXRMb2dpY2FsID0gVmFsdWUtPnU4Ow0KPi0gICAgICAg ICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgLy8gU2F2ZSBvcHRp b24uDQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgY2FzZSBLRVlfQUREX0lQX09QOg0KPi0g ICAgICAgICAgICBBZGRJZGVudGl0eVBvbGljeUl0ZW0gKCk7DQo+LSAgICAgICAgICAgIGJyZWFr Ow0KPi0NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICAvLyBSZXR1cm4gdG8gdXNlciBwcm9m aWxlIGluZm9ybWF0aW9uIGZvcm0uDQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgY2FzZSBL RVlfSVBfUkVUVVJOX1VJRjoNCj4tICAgICAgICAgICAgU2F2ZUlkZW50aXR5UG9saWN5ICgpOw0K Pi0gICAgICAgICAgICAqQWN0aW9uUmVxdWVzdCA9DQo+RUZJX0JST1dTRVJfQUNUSU9OX1JFUVVF U1RfRk9STV9TVUJNSVRfRVhJVDsNCj4tICAgICAgICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgICAg ICAgZGVmYXVsdDoNCj4tICAgICAgICAgICAgYnJlYWs7DQo+LSAgICAgICAgICB9DQo+LSAgICAg ICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgLy8NCj4tICAgICAgICAvLyBNb2RpZnkgYWNjZXNz IHBvbGljeS4NCj4tICAgICAgICAvLw0KPi0gICAgICAgIGNhc2UgS0VZX01PRElGWV9BUDoNCj4t ICAgICAgICAgIC8vDQo+LSAgICAgICAgICAvLyBKdWRnZSBuZXh0IDMgYml0cy4NCj4tICAgICAg ICAgIC8vDQo+LSAgICAgICAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQgJiBLRVlfTU9ESUZZX0FQX01B U0spIHsNCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICAvLyBDaGFuZ2UgYWNjZXNzIHJpZ2h0 IGNob2ljZS4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBjYXNlIEtFWV9NT0RJRllfUklH SFQ6DQo+LSAgICAgICAgICAgIG1BY2Nlc3NJbmZvLkFjY2Vzc1JpZ2h0ID0gVmFsdWUtPnU4Ow0K Pi0gICAgICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgLy8g Q2hhbmdlIHNldHVwIGNob2ljZS4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBjYXNlIEtF WV9NT0RJRllfU0VUVVA6DQo+LSAgICAgICAgICAgIG1BY2Nlc3NJbmZvLkFjY2Vzc1NldHVwPSBW YWx1ZS0+dTg7DQo+LSAgICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAgIC8vDQo+LSAg ICAgICAgICAvLyBDaGFuZ2UgYm9vdCBvcmRlciBjaG9pY2UuDQo+LSAgICAgICAgICAvLw0KPi0g ICAgICAgICAgY2FzZSBLRVlfTU9ESUZZX0JPT1Q6DQo+LSAgICAgICAgICAgIG1BY2Nlc3NJbmZv LkFjY2Vzc0Jvb3RPcmRlciA9IFZhbHVlLT51MzI7DQo+LSAgICAgICAgICAgIGJyZWFrOw0KPi0N Cj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICAvLyBSZXR1cm4gdG8gdXNlciBwcm9maWxlIGlu Zm9ybWF0aW9uIGZvcm0uDQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgY2FzZSBLRVlfQVBf UkVUVVJOX1VJRjoNCj4tICAgICAgICAgICAgU2F2ZUFjY2Vzc1BvbGljeSAoKTsNCj4tICAgICAg ICAgICAgKkFjdGlvblJlcXVlc3QgPQ0KPkVGSV9CUk9XU0VSX0FDVElPTl9SRVFVRVNUX0ZPUk1f U1VCTUlUX0VYSVQ7DQo+LSAgICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAgIGRlZmF1 bHQ6DQo+LSAgICAgICAgICAgIGJyZWFrOw0KPi0gICAgICAgICAgfQ0KPi0gICAgICAgICAgYnJl YWs7DQo+LQ0KPi0gICAgICAgIGRlZmF1bHQ6DQo+LSAgICAgICAgICBicmVhazsNCj4tICAgICAg ICB9DQo+LSAgICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgICAvLw0KPi0gICAgICAvLyBBY2Nlc3Mg cG9saWN5IGRldmljZSBwYXRoIG1vZGlmaWVkLg0KPi0gICAgICAvLw0KPi0gICAgICBjYXNlIEtF WV9NT0RJRllfQVBfRFA6DQo+LSAgICAgICAgLy8NCj4tICAgICAgICAvLyBKdWRnZSBuZXh0IDIg Yml0cy4NCj4tICAgICAgICAvLw0KPi0gICAgICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAmIEtFWV9N T0RJRllfRFBfTUFTSykgew0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gTG9hZCBwZXJtaXQg ZGV2aWNlIHBhdGggbW9kaWZpZWQuDQo+LSAgICAgICAgLy8NCj4tICAgICAgICBjYXNlIEtFWV9M T0FEX1BFUk1JVF9NT0RJRlk6DQo+LSAgICAgICAgICBRdWVzdGlvblN0ciA9IEdldFN0cmluZ0J5 SWQgKFNUUklOR19UT0tFTg0KPihTVFJfTU9WRV9UT19GT1JCSURfTElTVCkpOw0KPi0gICAgICAg ICAgUHJvbXB0U3RyICAgPSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4oU1RSX1BSRVNT X0tFWV9DT05USU5VRSkpOw0KPi0gICAgICAgICAgQ3JlYXRlUG9wVXAgKA0KPi0gICAgICAgICAg ICBFRklfTElHSFRHUkFZIHwgRUZJX0JBQ0tHUk9VTkRfQkxVRSwNCj4tICAgICAgICAgICAgJktl eSwNCj4tICAgICAgICAgICAgUXVlc3Rpb25TdHIsDQo+LSAgICAgICAgICAgIEwiIiwNCj4tICAg ICAgICAgICAgUHJvbXB0U3RyLA0KPi0gICAgICAgICAgICBOVUxMDQo+LSAgICAgICAgICAgICk7 DQo+LSAgICAgICAgICBGcmVlUG9vbCAoUXVlc3Rpb25TdHIpOw0KPi0gICAgICAgICAgRnJlZVBv b2wgKFByb21wdFN0cik7DQo+LSAgICAgICAgICBpZiAoS2V5LlVuaWNvZGVDaGFyICE9IENIQVJf Q0FSUklBR0VfUkVUVVJOKSB7DQo+LSAgICAgICAgICAgIGJyZWFrOw0KPi0gICAgICAgICAgfQ0K Pi0NCj4tICAgICAgICAgIEFkZFRvRm9yYmlkTG9hZCAoKFVJTlQxNikoUXVlc3Rpb25JZCAmIChL RVlfTU9ESUZZX0RQX01BU0sgLQ0KPjEpKSk7DQo+LSAgICAgICAgICBEaXNwbGF5TG9hZFBlcm1p dCAoKTsNCj4tICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAvLw0KPi0gICAgICAgIC8v IExvYWQgZm9yYmlkIGRldmljZSBwYXRoIG1vZGlmaWVkLg0KPi0gICAgICAgIC8vDQo+LSAgICAg ICAgY2FzZSBLRVlfTE9BRF9GT1JCSURfTU9ESUZZOg0KPi0gICAgICAgICAgUXVlc3Rpb25TdHIg PSBHZXRTdHJpbmdCeUlkIChTVFJJTkdfVE9LRU4NCj4oU1RSX01PVkVfVE9fUEVSTUlUX0xJU1Qp KTsNCj4tICAgICAgICAgIFByb21wdFN0ciAgID0gR2V0U3RyaW5nQnlJZCAoU1RSSU5HX1RPS0VO DQo+KFNUUl9QUkVTU19LRVlfQ09OVElOVUUpKTsNCj4tICAgICAgICAgIENyZWF0ZVBvcFVwICgN Cj4tICAgICAgICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNLR1JPVU5EX0JMVUUsDQo+LSAg ICAgICAgICAgICZLZXksDQo+LSAgICAgICAgICAgIFF1ZXN0aW9uU3RyLA0KPi0gICAgICAgICAg ICBMIiIsDQo+LSAgICAgICAgICAgIFByb21wdFN0ciwNCj4tICAgICAgICAgICAgTlVMTA0KPi0g ICAgICAgICAgICApOw0KPi0gICAgICAgICAgRnJlZVBvb2wgKFF1ZXN0aW9uU3RyKTsNCj4tICAg ICAgICAgIEZyZWVQb29sIChQcm9tcHRTdHIpOw0KPi0gICAgICAgICAgaWYgKEtleS5Vbmljb2Rl Q2hhciAhPSBDSEFSX0NBUlJJQUdFX1JFVFVSTikgew0KPi0gICAgICAgICAgICBicmVhazsNCj4t ICAgICAgICAgIH0NCj4tDQo+LSAgICAgICAgICBEZWxldGVGcm9tRm9yYmlkTG9hZCAoKFVJTlQx NikoUXVlc3Rpb25JZCAmDQo+KEtFWV9NT0RJRllfRFBfTUFTSyAtIDEpKSk7DQo+LSAgICAgICAg ICBEaXNwbGF5TG9hZEZvcmJpZCAoKTsNCj4tICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAg ICAvLw0KPi0gICAgICAgIC8vIENvbm5lY3QgcGVybWl0IGRldmljZSBwYXRoIG1vZGlmaWVkLg0K Pi0gICAgICAgIC8vDQo+LSAgICAgICAgY2FzZSBLRVlfQ09OTkVDVF9QRVJNSVRfTU9ESUZZOg0K Pi0gICAgICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gQ29ubmVj dCBmb3JiaWQgZGV2aWNlIHBhdGggbW9kaWZpZWQuDQo+LSAgICAgICAgLy8NCj4tICAgICAgICBj YXNlIEtFWV9DT05ORUNUX0ZPUkJJRF9NT0RJRlk6DQo+LSAgICAgICAgICBicmVhazsNCj4tDQo+ LSAgICAgICAgZGVmYXVsdDoNCj4tICAgICAgICAgIGJyZWFrOw0KPi0gICAgICAgIH0NCj4tICAg ICAgICBicmVhazsNCj4tDQo+LSAgICAgIGRlZmF1bHQ6DQo+LSAgICAgICAgYnJlYWs7DQo+LSAg ICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgZGVmYXVsdDoNCj4tICAgICAgYnJlYWs7 DQo+LSAgICB9DQo+LSAgfQ0KPi0gIGJyZWFrOw0KPi0NCj4tDQo+LSAgY2FzZSBFRklfQlJPV1NF Ul9BQ1RJT05fQ0hBTkdJTkc6DQo+LSAgew0KPi0gICAgLy8NCj4tICAgIC8vIEhhbmRsZSB0aGUg cmVxdWVzdCBmcm9tIGZvcm0uDQo+LSAgICAvLw0KPi0gICAgaWYgKFZhbHVlID09IE5VTEwpIHsN Cj4tICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICAgIH0NCj4tDQo+LSAg ICAvLw0KPi0gICAgLy8gSnVkZ2UgZmlyc3QgMiBiaXRzLg0KPi0gICAgLy8NCj4tICAgIHN3aXRj aCAoUXVlc3Rpb25JZCAmIEtFWV9GSVJTVF9GT1JNX01BU0spIHsNCj4tICAgIC8vDQo+LSAgICAv LyBEZWxldGUgdXNlciBwcm9maWxlIG9wZXJhdGlvbi4NCj4tICAgIC8vDQo+LSAgICBjYXNlIEtF WV9ERUxfVVNFUjoNCj4tICAgICAgLy8NCj4tICAgICAgLy8gSnVkZ2UgbmV4dCAyIGJpdHMuDQo+ LSAgICAgIC8vDQo+LSAgICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAmIEtFWV9TRUNPTkRfRk9STV9N QVNLKSB7DQo+LSAgICAgIC8vDQo+LSAgICAgIC8vIEVudGVyIGRlbGV0ZSB1c2VyIHByb2ZpbGUg Zm9ybS4NCj4tICAgICAgLy8NCj4tICAgICAgY2FzZSBLRVlfRU5URVJfTkVYVF9GT1JNOg0KPi0g ICAgICAgIFNlbGVjdFVzZXJUb0RlbGV0ZSAoKTsNCj4tICAgICAgICBicmVhazsNCj4tDQo+LSAg ICAgIGRlZmF1bHQ6DQo+LSAgICAgICAgYnJlYWs7DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7 DQo+LQ0KPi0gICAgLy8NCj4tICAgIC8vIE1vZGlmeSB1c2VyIHByb2ZpbGUgb3BlcmF0aW9uLg0K Pi0gICAgLy8NCj4tICAgIGNhc2UgS0VZX01PRElGWV9VU0VSOg0KPi0gICAgICAvLw0KPi0gICAg ICAvLyBKdWRnZSBuZXh0IDIgYml0cy4NCj4tICAgICAgLy8NCj4tICAgICAgc3dpdGNoIChRdWVz dGlvbklkICYgS0VZX1NFQ09ORF9GT1JNX01BU0spIHsNCj4tICAgICAgLy8NCj4tICAgICAgLy8g RW50ZXIgbW9kaWZ5IHVzZXIgcHJvZmlsZSBmb3JtLg0KPi0gICAgICAvLw0KPi0gICAgICBjYXNl IEtFWV9FTlRFUl9ORVhUX0ZPUk06DQo+LSAgICAgICAgU2VsZWN0VXNlclRvTW9kaWZ5ICgpOw0K Pi0gICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgLy8NCj4tICAgICAgLy8gRW50ZXIgdXNlciBw cm9maWxlIGluZm9ybWF0aW9uIGZvcm0uDQo+LSAgICAgIC8vDQo+LSAgICAgIGNhc2UgS0VZX1NF TEVDVF9VU0VSOg0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gSnVkZ2UgbmV4dCAzIGJpdHMu DQo+LSAgICAgICAgLy8NCj4tICAgICAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQgJiBLRVlfTU9ESUZZ X0lORk9fTUFTSykgew0KPi0gICAgICAgIC8vDQo+LSAgICAgICAgLy8gRGlzcGxheSB1c2VyIGlu Zm9ybWF0aW9uIGZvcm0uDQo+LSAgICAgICAgLy8NCj4tICAgICAgICBjYXNlIEtFWV9FTlRFUl9O RVhUX0ZPUk06DQo+LSAgICAgICAgICBNb2RpZnlVc2VySW5mbyAoKFVJTlQ4KSBRdWVzdGlvbklk KTsNCj4tICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAvLw0KPi0gICAgICAgIC8vIE1v ZGlmeSBpZGVudGl0eSBwb2xpY3kuDQo+LSAgICAgICAgLy8NCj4tICAgICAgICBjYXNlIEtFWV9N T0RJRllfSVA6DQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgLy8gSnVkZ2UgbmV4dCAzIGJp dHMNCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBzd2l0Y2ggKFF1ZXN0aW9uSWQgJiBLRVlf TU9ESUZZX0lQX01BU0spIHsNCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICAvLyBEaXNwbGF5 IGlkZW50aXR5IHBvbGljeSBtb2RpZnkgZm9ybS4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAg ICBjYXNlIEtFWV9FTlRFUl9ORVhUX0ZPUk06DQo+LSAgICAgICAgICAgIE1vZGlmeUlkZW50aXR5 UG9saWN5ICgpOw0KPi0gICAgICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgICBkZWZhdWx0 Og0KPi0gICAgICAgICAgICBicmVhazsNCj4tICAgICAgICAgIH0NCj4tICAgICAgICAgIGJyZWFr Ow0KPi0NCj4tICAgICAgICAvLw0KPi0gICAgICAgIC8vIE1vZGlmeSBhY2Nlc3MgcG9saWN5Lg0K Pi0gICAgICAgIC8vDQo+LSAgICAgICAgY2FzZSBLRVlfTU9ESUZZX0FQOg0KPi0gICAgICAgICAg Ly8NCj4tICAgICAgICAgIC8vIEp1ZGdlIG5leHQgMyBiaXRzLg0KPi0gICAgICAgICAgLy8NCj4t ICAgICAgICAgIHN3aXRjaCAoUXVlc3Rpb25JZCAmIEtFWV9NT0RJRllfQVBfTUFTSykgew0KPi0g ICAgICAgICAgLy8NCj4tICAgICAgICAgIC8vIERpc3BsYXkgYWNjZXNzIHBvbGljeSBtb2RpZnkg Zm9ybS4NCj4tICAgICAgICAgIC8vDQo+LSAgICAgICAgICBjYXNlIEtFWV9FTlRFUl9ORVhUX0ZP Uk06DQo+LSAgICAgICAgICAgIE1vZGlkeUFjY2Vzc1BvbGljeSAoKTsNCj4tICAgICAgICAgICAg YnJlYWs7DQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgLy8gTG9hZCBkZXZpY2UgcGF0aCBm b3JtLg0KPi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIGNhc2UgS0VZX01PRElGWV9MT0FEOg0K Pi0gICAgICAgICAgICAvLw0KPi0gICAgICAgICAgICAvLyBKdWRnZSBuZXh0IDIgYml0cy4NCj4t ICAgICAgICAgICAgLy8NCj4tICAgICAgICAgICAgc3dpdGNoIChRdWVzdGlvbklkICYgS0VZX0RJ U1BMQVlfRFBfTUFTSykgew0KPi0gICAgICAgICAgICAvLw0KPi0gICAgICAgICAgICAvLyBQZXJt aXQgbG9hZCBkZXZpY2UgcGF0aC4NCj4tICAgICAgICAgICAgLy8NCj4tICAgICAgICAgICAgY2Fz ZSBLRVlfUEVSTUlUX01PRElGWToNCj4tICAgICAgICAgICAgICBEaXNwbGF5TG9hZFBlcm1pdCAo KTsNCj4tICAgICAgICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgICAgIC8vDQo+LSAgICAg ICAgICAgIC8vIEZvcmJpZCBsb2FkIGRldmljZSBwYXRoLg0KPi0gICAgICAgICAgICAvLw0KPi0g ICAgICAgICAgICBjYXNlIEtFWV9GT1JCSURfTU9ESUZZOg0KPi0gICAgICAgICAgICAgIERpc3Bs YXlMb2FkRm9yYmlkICgpOw0KPi0gICAgICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAg ICAgZGVmYXVsdDoNCj4tICAgICAgICAgICAgICBicmVhazsNCj4tICAgICAgICAgICAgfQ0KPi0g ICAgICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgICAgICAvLw0KPi0gICAgICAgICAgLy8gQ29u bmVjdCBkZXZpY2UgcGF0aCBmb3JtLg0KPi0gICAgICAgICAgLy8NCj4tICAgICAgICAgIGNhc2Ug S0VZX01PRElGWV9DT05ORUNUOg0KPi0gICAgICAgICAgICAvLw0KPi0gICAgICAgICAgICAvLyBK dWRnZSBuZXh0IDIgYml0cy4NCj4tICAgICAgICAgICAgLy8NCj4tICAgICAgICAgICAgc3dpdGNo IChRdWVzdGlvbklkICYgS0VZX0RJU1BMQVlfRFBfTUFTSykgew0KPi0gICAgICAgICAgICAvLw0K Pi0gICAgICAgICAgICAvLyBQZXJtaXQgY29ubmVjdCBkZXZpY2UgcGF0aC4NCj4tICAgICAgICAg ICAgLy8NCj4tICAgICAgICAgICAgY2FzZSBLRVlfUEVSTUlUX01PRElGWToNCj4tICAgICAgICAg ICAgICBEaXNwbGF5Q29ubmVjdFBlcm1pdCAoKTsNCj4tICAgICAgICAgICAgICBicmVhazsNCj4t DQo+LSAgICAgICAgICAgIC8vDQo+LSAgICAgICAgICAgIC8vIEZvcmJpZCBjb25uZWN0IGRldmlj ZSBwYXRoLg0KPi0gICAgICAgICAgICAvLw0KPi0gICAgICAgICAgICBjYXNlIEtFWV9GT1JCSURf TU9ESUZZOg0KPi0gICAgICAgICAgICAgIERpc3BsYXlDb25uZWN0Rm9yYmlkICgpOw0KPi0gICAg ICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICAgICAgZGVmYXVsdDoNCj4tICAgICAgICAg ICAgICBicmVhazsNCj4tICAgICAgICAgICAgfQ0KPi0gICAgICAgICAgICBicmVhazsNCj4tDQo+ LSAgICAgICAgICBkZWZhdWx0Og0KPi0gICAgICAgICAgICBicmVhazsNCj4tICAgICAgICAgIH0N Cj4tICAgICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgICBkZWZhdWx0Og0KPi0gICAgICAgICAg YnJlYWs7DQo+LSAgICAgICAgfQ0KPi0gICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgZGVmYXVs dDoNCj4tICAgICAgICBicmVhazsNCj4tICAgICAgfQ0KPi0gICAgICBicmVhazsNCj4tDQo+LSAg ICBkZWZhdWx0Og0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tICB9DQo+LSAgYnJlYWs7DQo+ LQ0KPi0gIGRlZmF1bHQ6DQo+LSAgICAvLw0KPi0gICAgLy8gQWxsIG90aGVyIGFjdGlvbiByZXR1 cm4gdW5zdXBwb3J0ZWQuDQo+LSAgICAvLw0KPi0gICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVE Ow0KPi0gICAgYnJlYWs7DQo+LSAgfQ0KPi0NCj4tDQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0K Pi0NCj4tDQo+LS8qKg0KPi0gIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGEgY2FsbGVyIHRvIGV4dHJh Y3QgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBmb3Igb25lDQo+LSAgb3IgbW9yZSBuYW1lZCBl bGVtZW50cyBmcm9tIHRoZSB0YXJnZXQgZHJpdmVyLg0KPi0NCj4tDQo+LSAgQHBhcmFtIFRoaXMg ICAgICAgICAgICBQb2ludHMgdG8gdGhlIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTC4N Cj4tICBAcGFyYW0gUmVxdWVzdCAgICAgICAgIEEgbnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3Ry aW5nIGluIDxDb25maWdSZXF1ZXN0Pg0KPmZvcm1hdC4NCj4tICBAcGFyYW0gUHJvZ3Jlc3MgICAg ICAgIE9uIHJldHVybiwgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBSZXF1ZXN0IHN0cmlu Zy4NCj4tICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgc3RyaW5nJ3MgbnVs bCB0ZXJtaW5hdG9yIGlmIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwuDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICBQb2ludHMgdG8gdGhlIG1vc3QgcmVjZW50ICcmJyBiZWZvcmUgdGhlIGZpcnN0 IGZhaWxpbmcgbmFtZS92YWx1ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgcGFpciAob3Ig dGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIGlmIHRoZSBmYWlsdXJlIGlzIGluIHRoZQ0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgbmFtZS92YWx1ZSBwYWlyKSBpZiB0aGUgcmVx dWVzdCB3YXMgbm90IHN1Y2Nlc3NmdWwuDQo+LSAgQHBhcmFtIFJlc3VsdHMgICAgICAgICBBIG51 bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZyBpbiA8Q29uZmlnQWx0UmVzcD4NCj5mb3JtYXQg d2hpY2gNCj4tICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBhbGwgdmFsdWVzIGZpbGxlZCBp biBmb3IgdGhlIG5hbWVzIGluIHRoZSBSZXF1ZXN0IHN0cmluZy4NCj4tICAgICAgICAgICAgICAg ICAgICAgICAgIFN0cmluZyB0byBiZSBhbGxvY2F0ZWQgYnkgdGhlIGNhbGxlZCBmdW5jdGlvbi4N Cj4tDQo+LSAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgUmVzdWx0cyBpcyBm aWxsZWQgd2l0aCB0aGUgcmVxdWVzdGVkIHZhbHVlcy4NCj4tICBAcmV0dmFsICBFRklfT1VUX09G X1JFU09VUkNFUyAgIE5vdCBlbm91Z2ggbWVtb3J5IHRvIHN0b3JlIHRoZQ0KPnJlc3VsdHMuDQo+ LSAgQHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBSZXF1ZXN0IGlzIGlsbGVnYWwgc3lu dGF4LCBvciB1bmtub3duDQo+bmFtZS4NCj4tICBAcmV0dmFsICBFRklfTk9UX0ZPVU5EICAgICAg ICAgIFJvdXRpbmcgZGF0YSBkb2Vzbid0IG1hdGNoIGFueSBzdG9yYWdlIGluDQo+dGhpcyBkcml2 ZXIuDQo+LQ0KPi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1FRklBUEkNCj4tRmFrZUV4dHJhY3RDb25m aWcgKA0KPi0gIElOICBDT05TVCBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgICAqVGhp cywNCj4tICBJTiAgQ09OU1QgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVz dCwNCj4tICBPVVQgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlByb2dy ZXNzLA0KPi0gIE9VVCBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVz dWx0cw0KPi0gICkNCj4tew0KPi0gIGlmIChQcm9ncmVzcyA9PSBOVUxMIHx8IFJlc3VsdHMgPT0g TlVMTCkgew0KPi0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4tICB9DQo+LSAg KlByb2dyZXNzID0gUmVxdWVzdDsNCj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tfQ0KPi0N Cj4tLyoqDQo+LSAgVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJlc3VsdHMgb2YgY2hhbmdl cyBpbiBjb25maWd1cmF0aW9uLg0KPi0NCj4tDQo+LSAgQHBhcmFtIFRoaXMgICAgICAgICAgICBQ b2ludHMgdG8gdGhlIEVGSV9ISUlfQ09ORklHX0FDQ0VTU19QUk9UT0NPTC4NCj4tICBAcGFyYW0g Q29uZmlndXJhdGlvbiAgIEEgbnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIGluIDxDb25m aWdSZXNwPg0KPmZvcm1hdC4NCj4tICBAcGFyYW0gUHJvZ3Jlc3MgICAgICAgIEEgcG9pbnRlciB0 byBhIHN0cmluZyBmaWxsZWQgaW4gd2l0aCB0aGUgb2Zmc2V0IG9mIHRoZQ0KPm1vc3QNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgIHJlY2VudCAnJicgYmVmb3JlIHRoZSBmaXJzdCBmYWlsaW5n IG5hbWUvdmFsdWUgcGFpciAob3IgdGhlDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICBiZWdp bm5pbmcgb2YgdGhlIHN0cmluZyBpZiB0aGUgZmFpbHVyZSBpcyBpbiB0aGUgZmlyc3QNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgIG5hbWUvdmFsdWUgcGFpcikgb3IgdGhlIHRlcm1pbmF0aW5n IE5VTEwgaWYgYWxsIHdhcyBzdWNjZXNzZnVsLg0KPi0NCj4tICBAcmV0dmFsICBFRklfU1VDQ0VT UyAgICAgICAgICAgIFRoZSBSZXN1bHRzIGlzIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuDQo+LSAg QHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBDb25maWd1cmF0aW9uIGlzIE5VTEwuDQo+ LSAgQHJldHZhbCAgRUZJX05PVF9GT1VORCAgICAgICAgICBSb3V0aW5nIGRhdGEgZG9lc24ndCBt YXRjaCBhbnkgc3RvcmFnZSBpbg0KPnRoaXMgZHJpdmVyLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFU VVMNCj4tRUZJQVBJDQo+LUZha2VSb3V0ZUNvbmZpZyAoDQo+LSAgSU4gIENPTlNUIEVGSV9ISUlf Q09ORklHX0FDQ0VTU19QUk9UT0NPTCAgICpUaGlzLA0KPi0gIElOICBDT05TVCBFRklfU1RSSU5H ICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLA0KPi0gIE9VVCBFRklfU1RSSU5H ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUHJvZ3Jlc3MNCj4tICApDQo+LXsNCj4tICBp ZiAoQ29uZmlndXJhdGlvbiA9PSBOVUxMIHx8IFByb2dyZXNzID09IE5VTEwpIHsNCj4tICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+LSAgfQ0KPi0NCj4tICAqUHJvZ3Jlc3MgPSBD b25maWd1cmF0aW9uOw0KPi0NCj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4tfQ0KPi0NCj4t DQo+LS8qKg0KPi0gIE1haW4gZW50cnkgZm9yIHRoaXMgZHJpdmVyLg0KPi0NCj4tICBAcGFyYW0g SW1hZ2VIYW5kbGUgICAgIEltYWdlIGhhbmRsZSB0aGlzIGRyaXZlci4NCj4tICBAcGFyYW0gU3lz dGVtVGFibGUgICAgIFBvaW50ZXIgdG8gU3lzdGVtVGFibGUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJ X1NVQ0VTUyAgICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgY29tcGxldGUgc3VjY2Vzc2Z1bGx5Lg0K Pi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tRUZJQVBJDQo+LVVzZXJQcm9maWxlTWFuYWdlcklu aXQgKA0KPi0gIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgIEltYWdlSGFuZGxl LA0KPi0gIElOIEVGSV9TWVNURU1fVEFCTEUgICAgICAgICAgICAgICAgICpTeXN0ZW1UYWJsZQ0K Pi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4tICBVU0VSX1BST0ZJTEVfTUFOQUdFUl9DQUxMQkFDS19JTkZPICAqQ2FsbGJhY2tJbmZv Ow0KPi0NCj4tICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sICgNCj4tICAgICAgICAgICAg ICAgICAgJmdFZmlVc2VyTWFuYWdlclByb3RvY29sR3VpZCwNCj4tICAgICAgICAgICAgICAgICAg TlVMTCwNCj4tICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZtVXNlck1hbmFnZXINCj4tICAg ICAgICAgICAgICAgICAgKTsNCj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEluaXRpYWxpemUg ZHJpdmVyIHByaXZhdGUgZGF0YS4NCj4tICAvLw0KPi0gIFplcm9NZW0gKCZtVXNlckluZm8sIHNp emVvZiAobVVzZXJJbmZvKSk7DQo+LSAgWmVyb01lbSAoJm1BY2Nlc3NJbmZvLCBzaXplb2YgKG1B Y2Nlc3NJbmZvKSk7DQo+LQ0KPi0gIENhbGxiYWNrSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNp emVvZg0KPihVU0VSX1BST0ZJTEVfTUFOQUdFUl9DQUxMQkFDS19JTkZPKSk7DQo+LSAgQVNTRVJU IChDYWxsYmFja0luZm8gIT0gTlVMTCk7DQo+LQ0KPi0gIENhbGxiYWNrSW5mby0+U2lnbmF0dXJl ICAgICAgICAgICAgICAgICAgID0gVVNFUl9QUk9GSUxFX01BTkFHRVJfU0lHTkFUVVJFOw0KPi0g IENhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNzLkV4dHJhY3RDb25maWcgID0gRmFrZUV4dHJhY3RD b25maWc7DQo+LSAgQ2FsbGJhY2tJbmZvLT5Db25maWdBY2Nlc3MuUm91dGVDb25maWcgICAgPSBG YWtlUm91dGVDb25maWc7DQo+LSAgQ2FsbGJhY2tJbmZvLT5Db25maWdBY2Nlc3MuQ2FsbGJhY2sg ICAgICAgPSBVc2VyUHJvZmlsZU1hbmFnZXJDYWxsYmFjazsNCj4tICBDYWxsYmFja0luZm8tPkRy aXZlckhhbmRsZSAgICAgICAgICAgICAgICA9IE5VTEw7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5z dGFsbCBEZXZpY2UgUGF0aCBQcm90b2NvbCBhbmQgQ29uZmlnIEFjY2VzcyBwcm90b2NvbCB0byBk cml2ZXIgaGFuZGxlLg0KPi0gIC8vDQo+LSAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQ cm90b2NvbEludGVyZmFjZXMgKA0KPi0gICAgICAgICAgICAgICAgICAmQ2FsbGJhY2tJbmZvLT5E cml2ZXJIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29s R3VpZCwNCj4tICAgICAgICAgICAgICAgICAgJm1IaWlWZW5kb3JEZXZpY2VQYXRoLA0KPi0gICAg ICAgICAgICAgICAgICAmZ0VmaUhpaUNvbmZpZ0FjY2Vzc1Byb3RvY29sR3VpZCwNCj4tICAgICAg ICAgICAgICAgICAgJkNhbGxiYWNrSW5mby0+Q29uZmlnQWNjZXNzLA0KPi0gICAgICAgICAgICAg ICAgICBOVUxMDQo+LSAgICAgICAgICAgICAgICAgICk7DQo+LSAgQVNTRVJUX0VGSV9FUlJPUiAo U3RhdHVzKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBQdWJsaXNoIEhJSSBkYXRhLg0KPi0gIC8vDQo+ LSAgQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUgPSBIaWlBZGRQYWNrYWdlcyAoDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZnVXNlclByb2ZpbGVNYW5hZ2VyR3VpZCwNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGJhY2tJbmZvLT5Ecml2ZXJIYW5kbGUsDQo+LSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJQcm9maWxlTWFuYWdlclN0cmluZ3MsDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJQcm9maWxlTWFuYWdlclZmckJpbiwN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOw0KPi0gIEFTU0VSVCAoQ2FsbGJhY2tJbmZvLT5IaWlIYW5kbGUgIT0g TlVMTCk7DQo+LSAgbUNhbGxiYWNrSW5mbyA9IENhbGxiYWNrSW5mbzsNCj4tDQo+LSAgcmV0dXJu IFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+ZGlmZiAtLWdpdA0KPmEvU2VjdXJpdHlQa2cvVXNlcklk ZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnDQo+ZXIu aA0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4 ZS9Vc2VyUHJvZmlsZU1hbmFnDQo+ZXIuaA0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmlu ZGV4IGFmZjFlMjhkOWQuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVu dGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZw0KPmVyLmgN Cj4rKysgL2Rldi9udWxsDQo+QEAgLTEsNDQ0ICswLDAgQEANCj4tLyoqIEBmaWxlDQo+LSAgVGhl IGhlYWRlciBmaWxlIGZvciB1c2VyIHByb2ZpbGUgbWFuYWdlciBkcml2ZXIuDQo+LQ0KPi1Db3B5 cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN Cj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5k IGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4t DQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBB TiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05T IE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4t DQo+LSNpZm5kZWYgX19FRklfVVNFUl9QUk9GSUxFX01BTkFHRVJfSF9fDQo+LSNkZWZpbmUgX19F RklfVVNFUl9QUk9GSUxFX01BTkFHRVJfSF9fDQo+LQ0KPi0jaW5jbHVkZSA8VWVmaS5oPg0KPi0N Cj4tI2luY2x1ZGUgPEd1aWQvR2xvYmFsVmFyaWFibGUuaD4NCj4tI2luY2x1ZGUgPEd1aWQvTWRl TW9kdWxlSGlpLmg+DQo+LQ0KPi0jaW5jbHVkZSA8UHJvdG9jb2wvSGlpQ29uZmlnQWNjZXNzLmg+ DQo+LSNpbmNsdWRlIDxQcm90b2NvbC9Vc2VyQ3JlZGVudGlhbDIuaD4NCj4tI2luY2x1ZGUgPFBy b3RvY29sL1VzZXJNYW5hZ2VyLmg+DQo+LQ0KPi0jaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGlt ZVNlcnZpY2VzVGFibGVMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNl c1RhYmxlTGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4N Cj4tI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPi0jaW5jbHVkZSA8TGlicmFy eS9EZXZpY2VQYXRoTGliLmg+DQo+LSNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+LSNp bmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvUHJpbnRMaWIu aD4NCj4tI2luY2x1ZGUgPExpYnJhcnkvSGlpTGliLmg+DQo+LQ0KPi0jaW5jbHVkZSAiVXNlclBy b2ZpbGVNYW5hZ2VyRGF0YS5oIg0KPi0NCj4tI2RlZmluZSAgVVNFUl9OQU1FX0xFTkdUSCAgICAg ICAgICAxNw0KPi0NCj4tLy8NCj4tLy8gQ3JlZGVudGlhbCBQcm92aWRlciBJbmZvcm1hdGlvbi4N Cj4tLy8NCj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPi0gIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgIENvdW50Ow0KPi0gIEVGSV9VU0VSX0NSRURFTlRJQUwyX1BST1RPQ09MICpQcm92aWRlclsx XTsNCj4tfSBDUkVERU5USUFMX1BST1ZJREVSX0lORk87DQo+LQ0KPi0vLw0KPi0vLyBVc2VyIHBy b2ZpbGUgaW5mb3JtYXRpb24gc3RydWN0dXJlLg0KPi0vLw0KPi10eXBlZGVmIHN0cnVjdCB7DQo+ LSAgVUlOVDY0ICAgIFVzYWdlQ291bnQ7DQo+LSAgRUZJX1RJTUUgIENyZWF0ZURhdGU7DQo+LSAg RUZJX1RJTUUgIFVzYWdlRGF0ZTsNCj4tICBVSU5UTiAgICAgQWNjZXNzUG9saWN5TGVuOw0KPi0g IFVJTlROICAgICBJZGVudGl0eVBvbGljeUxlbjsNCj4tICBVSU5UTiAgICAgTmV3SWRlbnRpdHlQ b2xpY3lMZW47DQo+LSAgVUlOVDggICAgICpBY2Nlc3NQb2xpY3k7DQo+LSAgVUlOVDggICAgICpJ ZGVudGl0eVBvbGljeTsNCj4tICBVSU5UOCAgICAgKk5ld0lkZW50aXR5UG9saWN5Ow0KPi0gIENI QVIxNiAgICBVc2VyTmFtZVtVU0VSX05BTUVfTEVOR1RIXTsNCj4tICBCT09MRUFOICAgQ3JlYXRl RGF0ZUV4aXN0Ow0KPi0gIEJPT0xFQU4gICBVc2FnZURhdGVFeGlzdDsNCj4tICBCT09MRUFOICAg QWNjZXNzUG9saWN5TW9kaWZpZWQ7DQo+LSAgQk9PTEVBTiAgIElkZW50aXR5UG9saWN5TW9kaWZp ZWQ7DQo+LSAgQk9PTEVBTiAgIE5ld0lkZW50aXR5UG9saWN5TW9kaWZpZWQ7DQo+LX0gVVNFUl9J TkZPOw0KPi0NCj4tLy8NCj4tLy8gVXNlciBhY2Nlc3MgaW5mb3JtYXRpb24gc3RydWN0dXJlLg0K Pi0vLw0KPi10eXBlZGVmIHN0cnVjdCB7DQo+LSAgVUlOVE4gIExvYWRQZXJtaXRMZW47DQo+LSAg VUlOVE4gIExvYWRGb3JiaWRMZW47DQo+LSAgVUlOVE4gIENvbm5lY3RQZXJtaXRMZW47DQo+LSAg VUlOVE4gIENvbm5lY3RGb3JiaWRMZW47DQo+LSAgVUlOVDggICpMb2FkUGVybWl0Ow0KPi0gIFVJ TlQ4ICAqTG9hZEZvcmJpZDsNCj4tICBVSU5UOCAgKkNvbm5lY3RQZXJtaXQ7DQo+LSAgVUlOVDgg ICpDb25uZWN0Rm9yYmlkOw0KPi0gIFVJTlQzMiBBY2Nlc3NCb290T3JkZXI7DQo+LSAgVUlOVDgg IEFjY2Vzc1JpZ2h0Ow0KPi0gIFVJTlQ4ICBBY2Nlc3NTZXR1cDsNCj4tfSBVU0VSX0lORk9fQUND RVNTOw0KPi0NCj4tI2RlZmluZSBVU0VSX1BST0ZJTEVfTUFOQUdFUl9TSUdOQVRVUkUgIFNJR05B VFVSRV8zMiAoJ1UnLCAnUCcsICdNJywNCj4nUycpDQo+LQ0KPi10eXBlZGVmIHN0cnVjdCB7DQo+ LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+LSAgRUZJX0hB TkRMRSAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJIYW5kbGU7DQo+LSAgRUZJX0hJSV9IQU5E TEUgICAgICAgICAgICAgICAgICBIaWlIYW5kbGU7DQo+LSAgRUZJX0hJSV9DT05GSUdfQUNDRVNT X1BST1RPQ09MICBDb25maWdBY2Nlc3M7DQo+LX0gVVNFUl9QUk9GSUxFX01BTkFHRVJfQ0FMTEJB Q0tfSU5GTzsNCj4tDQo+LS8vDQo+LS8vIEhJSSBzcGVjaWZpYyBWZW5kb3IgRGV2aWNlIFBhdGgg ZGVmaW5pdGlvbi4NCj4tLy8NCj4tdHlwZWRlZiBzdHJ1Y3Qgew0KPi0gIFZFTkRPUl9ERVZJQ0Vf UEFUSCAgICAgICAgVmVuZG9yRGV2aWNlUGF0aDsNCj4tICBFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgIEVuZDsNCj4tfSBISUlfVkVORE9SX0RFVklDRV9QQVRIOw0KPi0NCj4tLy8NCj4tLy8gVGhp cyBpcyB0aGUgZ2VuZXJhdGVkIElGUiBiaW5hcnkgZGF0YSBmb3IgZWFjaCBmb3Jtc2V0IGRlZmlu ZWQgaW4gVkZSLg0KPi0vLw0KPi1leHRlcm4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVXNlclByb2ZpbGVNYW5hZ2VyVmZyQmluW107DQo+LQ0KPi0vLw0KPi0vLyBUaGlzIGlz IHRoZSBnZW5lcmF0ZWQgU3RyaW5nIHBhY2thZ2UgZGF0YSBmb3IgLlVOSSBmaWxlLg0KPi0vLw0K Pi1leHRlcm4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlclByb2ZpbGVN YW5hZ2VyU3RyaW5nc1tdOw0KPi0NCj4tLy8NCj4tLy8gVGhlIHVzZXIgbWFuYWdlciBwcm90b2Nv bCwgdXNlZCBpbiBzZXZlcmFsIGZ1bmN0aW9uLg0KPi0vLw0KPi1leHRlcm4gRUZJX1VTRVJfTUFO QUdFUl9QUk9UT0NPTCAgICAgICAgICAgKm1Vc2VyTWFuYWdlcjsNCj4tDQo+LS8vDQo+LS8vIFRo ZSBjcmVkZW50aWFsIHByb3ZpZGVycyBkYXRhYmFzZSBpbiBzeXN0ZW0uDQo+LS8vDQo+LWV4dGVy biBDUkVERU5USUFMX1BST1ZJREVSX0lORk8gICAgICAgICAgICAqbVByb3ZpZGVySW5mbzsNCj4t DQo+LS8vDQo+LS8vIFRoZSB2YXJpYWJsZXMgdXNlZCB0byB1cGRhdGUgaWRlbnRpdHkgcG9saWN5 Lg0KPi0vLw0KPi1leHRlcm4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBy b3ZpZGVyQ2hvaWNlOw0KPi1leHRlcm4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbUNvbm5jZXRMb2dpY2FsOw0KPi0NCj4tLy8NCj4tLy8gVGhlIHZhcmlhYmxlcyB1c2VkIHRv IHVwZGF0ZSBhY2Nlc3MgcG9saWN5Lg0KPi0vLw0KPi1leHRlcm4gVVNFUl9JTkZPX0FDQ0VTUyAg ICAgICAgICAgICAgICAgICAgbUFjY2Vzc0luZm87DQo+LQ0KPi0vLw0KPi0vLyBUaGUgdXNlciBp bmZvcm1hdGlvbiB1c2VkIHRvIHJlY29yZCBhbGwgZGF0YSBpbiBVSS4NCj4tLy8NCj4tZXh0ZXJu IFVTRVJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VySW5mbzsNCj4tDQo+LWV4 dGVybiBVU0VSX1BST0ZJTEVfTUFOQUdFUl9DQUxMQkFDS19JTkZPICAqbUNhbGxiYWNrSW5mbzsN Cj4tDQo+LWV4dGVybiBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICBtTW9kaWZ5 VXNlcjsNCj4tDQo+LS8qKg0KPi0gIEdldCBzdHJpbmcgYnkgc3RyaW5nIGlkIGZyb20gSElJIElu dGVyZmFjZS4NCj4tDQo+LQ0KPi0gIEBwYXJhbVtpbl0gSWQgICAgICBTdHJpbmcgSUQgdG8gZ2V0 IHRoZSBzdHJpbmcgZnJvbS4NCj4tDQo+LSAgQHJldHZhbCAgQ0hBUjE2ICogIFN0cmluZyBmcm9t IElELg0KPi0gIEByZXR2YWwgIE5VTEwgICAgICBJZiBlcnJvciBvY2N1cnMuDQo+LQ0KPi0qKi8N Cj4tQ0hBUjE2ICoNCj4tR2V0U3RyaW5nQnlJZCAoDQo+LSAgSU4gRUZJX1NUUklOR19JRCAgICAg ICAgICAgICBJZA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBBZGQgYSBuZXcgdXNlciBwcm9maWxl IGludG8gdGhlIHVzZXIgcHJvZmlsZSBkYXRhYmFzZS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUNh bGxBZGRVc2VyICgNCj4tICBWT0lEDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIERpc3BsYXkgdXNl ciBzZWxlY3QgZm9ybTsgY2FuIHNlbGVjdCBhIHVzZXIgdG8gbW9kaWZ5Lg0KPi0NCj4tKiovDQo+ LVZPSUQNCj4tU2VsZWN0VXNlclRvTW9kaWZ5ICAoDQo+LSAgVk9JRA0KPi0gICk7DQo+LQ0KPi0v KioNCj4tICBEaXNwbGF5IHVzZXIgc2VsZWN0IGZvcm0sIGNhYiBzZWxlY3QgYSB1c2VyIHRvIGRl bGV0ZS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LVNlbGVjdFVzZXJUb0RlbGV0ZSAoDQo+LSAgVk9J RA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBEZWxldGUgdGhlIHVzZXIgc3BlY2lmaWVkIGJ5IFVz ZXJJbmRleCBpbiB1c2VyIHByb2ZpbGUgZGF0YWJhc2UuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIFVz ZXJJbmRleCAgICBUaGUgaW5kZXggb2YgdXNlciBpbiB0aGUgdXNlciBuYW1lIGxpc3QgdG8gYmUN Cj5kZWxldGVkLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tRGVsZXRlVXNlciAoDQo+LSAgSU4gVUlO VDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJbmRleA0KPi0gICk7 DQo+LQ0KPi0vKioNCj4tICBBZGQgYSB1c2VybmFtZSBpdGVtIGluIGZvcm0uDQo+LQ0KPi0gIEBw YXJhbVtpbl0gIFVzZXIgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSB1c2VyIHByb2ZpbGUgd2hv c2UgdXNlcm5hbWUgaXMgYWRkZWQuDQo+LSAgQHBhcmFtW2luXSAgSW5kZXggICAgICAgICAgICBU aGUgaW5kZXggb2YgdGhlIHVzZXIgaW4gdGhlIHVzZXIgbmFtZSBsaXN0Lg0KPi0gIEBwYXJhbVtp bl0gIE9wQ29kZUhhbmRsZSAgICAgUG9pbnRzIHRvIGNvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVh dGVkDQo+b3Bjb2Rlcy4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUFkZFVzZXJUb0Zvcm0gKA0KPi0g IElOICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgICBVc2VyLA0KPi0g IElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCwNCj4t ICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk9wQ29kZUhh bmRsZQ0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5IG1vZGlmeSB1c2VyIGluZm9ybWF0 aW9uIGZvcm0NCj4tDQo+LSAgSW4gdGhpcyBmb3JtLCB1c2VybmFtZSwgY3JlYXRlIERhdGUsIHVz YWdlIGRhdGUsIHVzYWdlIGNvdW50LCBpZGVudGl0eSBwb2xpY3ksDQo+LSAgYW5kIGFjY2VzcyBw b2xpY3kgYXJlIGRpc3BsYXllZC4NCj4tDQo+LSAgQHBhcmFtW2luXSBVc2VySW5kZXggICAgICAg VGhlIGluZGV4IG9mIHRoZSB1c2VyIGluIGRpc3BsYXkgbGlzdCB0byBtb2RpZnkuDQo+LQ0KPi0q Ki8NCj4tVk9JRA0KPi1Nb2RpZnlVc2VySW5mbyAoDQo+LSAgSU4gVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJbmRleA0KPi0gICk7DQo+LQ0KPi0vKioNCj4t ICBHZXQgdGhlIHVzZXJuYW1lIGZyb20gdXNlciBpbnB1dCBhbmQgdXBkYXRlIHVzZXJuYW1lIHN0 cmluZyBpbiBIaWkNCj4tICBkYXRhYmFzZSB3aXRoIGl0Lg0KPi0NCj4tKiovDQo+LVZPSUQNCj4t TW9kaWZ5VXNlck5hbWUgKA0KPi0gIFZPSUQNCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgRGlzcGxh eSB0aGUgZm9ybSBvZiBtb2RpZnlpbmcgdXNlciBpZGVudGl0eSBwb2xpY3kuDQo+LQ0KPi0qKi8N Cj4tVk9JRA0KPi1Nb2RpZnlJZGVudGl0eVBvbGljeSAoDQo+LSAgVk9JRA0KPi0gICk7DQo+LQ0K Pi0vKioNCj4tICBVcGRhdGUgdGhlIG1Vc2VySW5mby5OZXdJZGVudGl0eVBvbGljeSBhbmQgVUkg d2hlbiAnYWRkIG9wdGlvbicgaXMNCj5wcmVzc2VkLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tQWRk SWRlbnRpdHlQb2xpY3lJdGVtICgNCj4tICBWT0lEDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIFNh dmUgdGhlIGlkZW50aXR5IHBvbGljeSBhbmQgdXBkYXRlIFVJIHdpdGggaXQuDQo+LQ0KPi0gIFRo aXMgZnVuY3Rpb24gd2lsbCB2ZXJpZnkgdGhlIG5ldyBpZGVudGl0eSBwb2xpY3ksIGluIGN1cnJl bnQgaW1wbGVtZW50YXRpb24sDQo+LSAgdGhlIGlkZW50aXR5IHBvbGljeSBjYW4gYmU6ICBULCBQ ICYgUCAmIFAgJiAuLi4sIFAgfCBQIHwgUCB8IC4uLg0KPi0gIEhlcmUsICJUIiBtZWFucyAiVHJ1 ZSIsICJQIiBtZWFucyAiQ3JlZGVudGlhbCBQcm92aWRlciIsICImIiBtZWFucyAiYW5kIiwNCj4i fCIgbWVhbnMgIm9yIi4NCj4tICBPdGhlciBpZGVudGl0eSBwb2xpY2llcyBhcmUgbm90IHN1cHBv cnRlZC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LVNhdmVJZGVudGl0eVBvbGljeSAoDQo+LSAgVk9J RA0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5IG1vZGlmeSB1c2VyIGFjY2VzcyBwb2xp Y3kgZm9ybQ0KPi0NCj4tICBJbiB0aGlzIGZvcm0sIGFjY2VzcyByaWdodCwgYWNjZXNzIHNldHUs cCBhbmQgYWNjZXNzIGJvb3Qgb3JkZXIgYXJlDQo+ZHluYW1pY2FsbHkNCj4tICBhZGRlZC4gTG9h ZCBkZXZpY2VwYXRoIGFuZCBjb25uZWN0IGRldmljZXBhdGggYXJlIGRpc3BsYXllZCB0b28uDQo+ LQ0KPi0qKi8NCj4tVk9JRA0KPi1Nb2RpZHlBY2Nlc3NQb2xpY3kgKA0KPi0gIFZPSUQNCj4tICAp Ow0KPi0NCj4tLyoqDQo+LSAgQ29sbGVjdCBhbGwgdGhlIGFjY2VzcyBwb2xpY3kgZGF0YSB0byBt VXNlckluZm8uQWNjZXNzUG9saWN5LA0KPi0gIGFuZCBzYXZlIGl0IHRvIHVzZXIgcHJvZmlsZS4N Cj4tDQo+LSoqLw0KPi1WT0lEDQo+LVNhdmVBY2Nlc3NQb2xpY3kgKA0KPi0gIFZPSUQNCj4tICAp Ow0KPi0NCj4tLyoqDQo+LSAgR2V0IGN1cnJlbnQgdXNlcidzIGFjY2VzcyByaWdodHMuDQo+LQ0K Pi0gIEBwYXJhbVtvdXRdICBBY2Nlc3NSaWdodCAgIFBvaW50cyB0byB0aGUgYnVmZmVyIHVzZWQg Zm9yIHVzZXIncyBhY2Nlc3MgcmlnaHRzLg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICBHZXQgY3VycmVudCB1c2VyIGFjY2VzcyByaWdodHMgc3VjY2Vzc2Z1bGx5Lg0KPi0gIEBy ZXR2YWwgb3RoZXJzICAgICAgICAgICAgIEZhaWwgdG8gZ2V0IGN1cnJlbnQgdXNlciBhY2Nlc3Mg cmlnaHRzLg0KPi0NCj4tKiovDQo+LUVGSV9TVEFUVVMNCj4tR2V0QWNjZXNzUmlnaHQgKA0KPi0g IE9VVCAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkFjY2Vzc1Jp Z2h0DQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIERpc3BsYXkgdGhlIHBlcm1pdCBsb2FkIGRldmlj ZSBwYXRoIGluIHRoZSBsb2FkYWJsZSBkZXZpY2UgcGF0aCBsaXN0Lg0KPi0NCj4tKiovDQo+LVZP SUQNCj4tRGlzcGxheUxvYWRQZXJtaXQoDQo+LSAgVk9JRA0KPi0gICk7DQo+LQ0KPi0vKioNCj4t ICBEaXNwbGF5IHRoZSBmb3JiaWQgbG9hZCBkZXZpY2UgcGF0aCBsaXN0IChtQWNjZXNzSW5mby5M b2FkRm9yYmlkKS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LURpc3BsYXlMb2FkRm9yYmlkICgNCj4t ICBWT0lEDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIERpc3BsYXkgdGhlIHBlcm1pdCBjb25uZWN0 IGRldmljZSBwYXRoLg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tRGlzcGxheUNvbm5lY3RQZXJtaXQg KA0KPi0gIFZPSUQNCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgRGlzcGxheSB0aGUgZm9yYmlkIGNv bm5lY3QgZGV2aWNlIHBhdGggbGlzdC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LURpc3BsYXlDb25u ZWN0Rm9yYmlkICgNCj4tICBWT0lEDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIERlbGV0ZSB0aGUg c3BlY2lmaWVkIGRldmljZSBwYXRoIGJ5IERyaXZlckluZGV4IGZyb20gdGhlIGZvcmJpZCBkZXZp Y2UgcGF0aA0KPi0gIGxpc3QgKG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQpLg0KPi0NCj4tICBAcGFy YW1baW5dICBEcml2ZXJJbmRleCAgIFRoZSBpbmRleCBvZiBkcml2ZXIgaW4gYSBmb3JiaWRkZW4g ZGV2aWNlIHBhdGggbGlzdC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LURlbGV0ZUZyb21Gb3JiaWRM b2FkICgNCj4tICBJTiAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RHJpdmVySW5kZXgNCj4tICApOw0KPi0NCj4tLyoqDQo+LSAgQWRkIHRoZSBzcGVjaWZpZWQgZGV2 aWNlIHBhdGggYnkgRHJpdmVySW5kZXggdG8gdGhlIGZvcmJpZCBkZXZpY2UgcGF0aA0KPi0gIGxp c3QgKG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQpLg0KPi0NCj4tICBAcGFyYW1baW5dICBEcml2ZXJJ bmRleCAgIFRoZSBpbmRleCBvZiBkcml2ZXIgc2F2ZWQgaW4gZHJpdmVyIG9wdGlvbnMuDQo+LQ0K Pi0qKi8NCj4tVk9JRA0KPi1BZGRUb0ZvcmJpZExvYWQgKA0KPi0gIElOICBVSU5UMTYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJJbmRleA0KPi0gICk7DQo+LQ0KPi0v KioNCj4tICBHZXQgdXNlciBuYW1lIGZyb20gdGhlIHBvcHVwIHdpbmRvd3MuDQo+LQ0KPi0gIEBw YXJhbVtpbiwgb3V0XSAgVXNlck5hbWVMZW4gICBPbiBlbnRyeSwgcG9pbnQgdG8gdGhlIGJ1ZmZl ciBsZW5naCBvZg0KPlVzZXJOYW1lLg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPbiBleGl0LCBwb2ludCB0byB0aGUgaW5wdXQgdXNlciBuYW1lIGxlbmd0aC4NCj4tICBAcGFy YW1bb3V0XSAgICAgIFVzZXJOYW1lICAgICAgVGhlIGJ1ZmZlciB0byBob2xkIHRoZSBpbnB1dCB1 c2VyIG5hbWUuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX0FCT1JURUQgICAgICAgICAgICBJdCBpcyBn aXZlbiB1cCBieSBwcmVzc2luZyAnRVNDJyBrZXkuDQo+LSAgQHJldHZhbCBFRklfTk9UX1JFQURZ ICAgICAgICAgIE5vdCBhIHZhbGlkIGlucHV0IGF0IGFsbC4NCj4tICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgR2V0IGEgdXNlciBuYW1lIHN1Y2Nlc3NmdWxseS4NCj4tDQo+LSoqLw0K Pi1FRklfU1RBVFVTDQo+LUdldFVzZXJOYW1lSW5wdXQgKA0KPi0gIElOIE9VVCAgVUlOVE4gICAg ICAgICAqVXNlck5hbWVMZW4sDQo+LSAgICAgT1VUICBDSEFSMTYgICAgICAgICpVc2VyTmFtZQ0K Pi0gICk7DQo+LQ0KPi0vKioNCj4tICBGaW5kIHRoZSBzcGVjaWZpZWQgaW5mbyBpbiBVc2VyIHBy b2ZpbGUgYnkgdGhlIEluZm9UeXBlLg0KPi0NCj4tICBAcGFyYW1baW5dICBVc2VyICAgICAgICAg SGFuZGxlIG9mIHRoZSB1c2VyIHdob3NlIGluZm9ybWF0aW9uIHdpbGwgYmUNCj5zZWFyY2hlZC4N Cj4tICBAcGFyYW1baW5dICBJbmZvVHlwZSAgICAgVGhlIHVzZXIgaW5mb3JtYXRpb24gdHlwZSB0 byBmaW5kLg0KPi0gIEBwYXJhbVtvdXRdIFVzZXJJbmZvICAgICBQb2ludHMgdG8gdXNlciBpbmZv cm1hdGlvbiBoYW5kbGUgZm91bmQuDQo+LQ0KPi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICBG aW5kIHRoZSB1c2VyIGluZm9ybWF0aW9uIHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIE90aGVy cyAgICAgICAgICAgRmFpbCB0byBmaW5kIHRoZSB1c2VyIGluZm9ybWF0aW9uLg0KPi0NCj4tKiov DQo+LUVGSV9TVEFUVVMNCj4tRmluZEluZm9CeVR5cGUgKA0KPi0gIElOICBFRklfVVNFUl9QUk9G SUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgICBVc2VyLA0KPi0gIElOICBVSU5UOCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvVHlwZSwNCj4tICBPVVQgRUZJX1VTRVJf SU5GT19IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgKlVzZXJJbmZvDQo+LSAgKTsNCj4tDQo+ LS8qKg0KPi0gIENvbnZlcnQgdGhlIGlkZW50aXR5IHBvbGljeSB0byBhIHVuaWNvZGUgc3RyaW5n IGFuZCB1cGRhdGUgdGhlIEhpaSBkYXRhYmFzZQ0KPi0gIElwU3RyaW5nSWQgc3RyaW5nIHdpdGgg aXQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gIElwICAgICAgICAgUG9pbnRzIHRvIGlkZW50aXR5IHBv bGljeS4NCj4tICBAcGFyYW1baW5dICBJcExlbiAgICAgIFRoZSBpZGVudGl0eSBwb2xpY3kgbGVu Z3RoLg0KPi0gIEBwYXJhbVtpbl0gIElwU3RyaW5nSWQgU3RyaW5nIElEIGluIHRoZSBISUkgZGF0 YWJhc2UgdG8gYmUgcmVwbGFjZWQuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1SZXNvbHZlSWRlbnRp dHlQb2xpY3kgKA0KPi0gIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqSXAsDQo+LSAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIElwTGVuLA0KPi0gIElOICBFRklfU1RSSU5HX0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJcFN0cmluZ0lkDQo+LSAgKTsNCj4tDQo+LS8qKg0KPi0gIEV4cGFuZCBhY2Nlc3MgcG9s aWN5IG1lbW9yeSBzaXplLg0KPi0NCj4tICBAcGFyYW1baW5dIFZhbGlkTGVuICAgICAgIFRoZSB2 YWxpZCBhY2Nlc3MgcG9saWN5IGxlbmd0aC4NCj4tICBAcGFyYW1baW5dIEV4cGFuZExlbiAgICAg IFRoZSBsZW5ndGggdGhhdCBpcyBuZWVkZWQgdG8gZXhwYW5kLg0KPi0NCj4tKiovDQo+LVZPSUQN Cj4tRXhwYW5kTWVtb3J5ICgNCj4tICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVmFsaWRMZW4sDQo+LSAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEV4cGFuZExlbg0KPi0gICk7DQo+LQ0KPi0vKioNCj4tICBEZWxldGUg VXNlcidzIGNyZWRlbnRhbCBmcm9tIGFsbCB0aGUgcHJvdmlkZXJzIHRoYXQgZXhpc3QgaW4gVXNl cidzIGlkZW50aXR5DQo+cG9saWN5Lg0KPi0NCj4tICBAcGFyYW1baW5dICBJZGVudGl0eVBvbGlj eSAgICAgUG9pbnQgdG8gVXNlcidzIGlkZW50aXR5IHBvbGljeS4NCj4tICBAcGFyYW1baW5dICBJ ZGVudGl0eVBvbGljeUxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgaWRlbnRpdHkgcG9saWN5Lg0KPi0g IEBwYXJhbVtpbl0gIFVzZXIgICAgICAgICAgICAgICBQb2ludHMgdG8gdXNlciBwcm9maWxlLg0K Pi0NCj4tKiovDQo+LVZPSUQNCj4tRGVsZXRlQ3JlZGVudGlhbEZyb21Qcm92aWRlcnMgKA0KPi0g IElOICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKklkZW50aXR5UG9s aWN5LA0KPi0gIElOICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElk ZW50aXR5UG9saWN5TGVuLA0KPi0gIElOICAgICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSAgICAg ICAgICAgICAgIFVzZXINCj4tICApOw0KPi0NCj4tI2VuZGlmDQo+ZGlmZiAtLWdpdA0KPmEvU2Vj dXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJv ZmlsZU1hbmFnDQo+ZXIudW5pDQo+Yi9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNl clByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lci51bmkNCj5kZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQNCj5pbmRleCBlNGE3NjhlMDBhLi4wMDAwMDAwMDAwDQo+LS0tDQo+YS9T ZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQ cm9maWxlTWFuYWcNCj5lci51bmkNCj4rKysgL2Rldi9udWxsDQo+QEAgLTEsMjIgKzAsMCBAQA0K Pi0vLyAvKiogQGZpbGUNCj4tLy8gQSBVSSB0b29sIHRvIG1hbmFnZSB1c2VyIHByb2ZpbGVzDQo+ LS8vDQo+LS8vIEJ5IHRoaXMgbW9kdWxlLCB1c2VyIGNhbiBhZGQvdXBkYXRlL2RlbGV0ZSB1c2Vy IHByb2ZpbGVzLCBhbmQgY2FuIGFsc28NCj4tLy8gbW9kaWZ5IHRoZSB1c2VyIGFjY2VzcyBwb2xp Y3kgYW5kIHRoZSB1c2VyIGlkZW50aWZpY2F0aW9uIHBvbGljeS4NCj4tLy8NCj4tLy8gQ29weXJp Z2h0IChjKSAyMDA5IC0gMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPi0vLw0KPi0vLyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0 ZXJpYWxzDQo+LS8vIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LS8vIHdoaWNoIGFjY29t cGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1h eSBiZQ0KPmZvdW5kIGF0DQo+LS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2Qt bGljZW5zZS5waHANCj4tLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJT RCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj5CQVNJUywNCj4tLy8gV0lUSE9VVCBXQVJSQU5USUVT IE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBM SUVELg0KPi0vLw0KPi0vLyAqKi8NCj4tDQo+LQ0KPi0jc3RyaW5nIFNUUl9NT0RVTEVfQUJTVFJB Q1QgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJBIFVJIHRvb2wgdG8NCj5tYW5hZ2UgdXNl ciBwcm9maWxlcyINCj4tDQo+LSNzdHJpbmcgU1RSX01PRFVMRV9ERVNDUklQVElPTiAgICAgICAg ICAjbGFuZ3VhZ2UgZW4tVVMgIkJ5IHRoaXMgbW9kdWxlLA0KPnVzZXIgY2FuIGFkZC91cGRhdGUv ZGVsZXRlIHVzZXIgcHJvZmlsZXMsIGFuZCBjYW4gYWxzbyBtb2RpZnkgdGhlIHVzZXIgYWNjZXNz DQo+cG9saWN5IGFuZCB0aGUgdXNlciBpZGVudGlmaWNhdGlvbiBwb2xpY3kuIg0KPi0NCj5kaWZm IC0tZ2l0DQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5h Z2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lckRhdGEuaA0KPmIvU2VjdXJpdHlQa2cvVXNlcklk ZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnDQo+ZXJE YXRhLmgNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCBhODNjYWFjOWJhLi4wMDAw MDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2Zp bGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lckRhdGEuaA0KPisrKyAvZGV2L251bGwN Cj5AQCAtMSwxNTggKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBUaGUgZm9ybSBkYXRhIGZvciB1 c2VyIHByb2ZpbGUgbWFuYWdlciBkcml2ZXIuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAy MDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMg cHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFu ZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJT RA0KPkxpY2Vuc2UNCj4td2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg ZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVu c291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElT IERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0K Pi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI RVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpZm5kZWYgX19VU0VS X1BST0ZJTEVfTUFOQUdFUl9EQVRBX0hfXw0KPi0jZGVmaW5lIF9fVVNFUl9QUk9GSUxFX01BTkFH RVJfREFUQV9IX18NCj4tDQo+LSNpbmNsdWRlIDxHdWlkL1VzZXJQcm9maWxlTWFuYWdlckhpaS5o Pg0KPi0NCj4tLy8NCj4tLy8gRm9ybSBJRA0KPi0vLw0KPi0jZGVmaW5lIEZPUk1JRF9VU0VSX01B TkFHRSAgICAgICAgICAweDAwMDENCj4tI2RlZmluZSBGT1JNSURfTU9ESUZZX1VTRVIgICAgICAg ICAgMHgwMDAyDQo+LSNkZWZpbmUgRk9STUlEX0RFTF9VU0VSICAgICAgICAgICAgIDB4MDAwMw0K Pi0jZGVmaW5lIEZPUk1JRF9VU0VSX0lORk8gICAgICAgICAgICAweDAwMDQNCj4tI2RlZmluZSBG T1JNSURfTU9ESUZZX0lQICAgICAgICAgICAgMHgwMDA1DQo+LSNkZWZpbmUgRk9STUlEX01PRElG WV9BUCAgICAgICAgICAgIDB4MDAwNg0KPi0jZGVmaW5lIEZPUk1JRF9MT0FEX0RQICAgICAgICAg ICAgICAweDAwMDcNCj4tI2RlZmluZSBGT1JNSURfQ09OTkVDVF9EUCAgICAgICAgICAgMHgwMDA4 DQo+LSNkZWZpbmUgRk9STUlEX1BFUk1JVF9MT0FEX0RQICAgICAgIDB4MDAwOQ0KPi0jZGVmaW5l IEZPUk1JRF9GT1JCSURfTE9BRF9EUCAgICAgICAweDAwMEENCj4tI2RlZmluZSBGT1JNSURfUEVS TUlUX0NPTk5FQ1RfRFAgICAgMHgwMDBCDQo+LSNkZWZpbmUgRk9STUlEX0ZPUkJJRF9DT05ORUNU X0RQICAgIDB4MDAwQw0KPi0NCj4tLy8NCj4tLy8gTGFiZWwgSUQNCj4tLy8NCj4tI2RlZmluZSAg TEFCRUxfVVNFUl9NQU5BR0VfRlVOQyAgICAgMHgwMDEwDQo+LSNkZWZpbmUgIExBQkVMX1VTRVJf REVMX0ZVTkMgICAgICAgIDB4MDAyMA0KPi0jZGVmaW5lICBMQUJFTF9VU0VSX01PRF9GVU5DICAg ICAgICAweDAwMzANCj4tI2RlZmluZSAgTEFCRUxfVVNFUl9JTkZPX0ZVTkMgICAgICAgMHgwMDQw DQo+LSNkZWZpbmUgIExBQkVMX0lQX01PRF9GVU5DICAgICAgICAgIDB4MDA1MA0KPi0jZGVmaW5l ICBMQUJFTF9BUF9NT0RfRlVOQyAgICAgICAgICAweDAwNjANCj4tI2RlZmluZSAgTEFCRUxfUEVS TUlUX0xPQURfRlVOQyAgICAgMHgwMDcwDQo+LSNkZWZpbmUgIExBQkxFX0ZPUkJJRF9MT0FEX0ZV TkMgICAgIDB4MDA4MA0KPi0jZGVmaW5lICBMQUJFTF9FTkQgICAgICAgICAgICAgICAgICAweDAw RjANCj4tDQo+LS8vDQo+LS8vIEZpcnN0IGZvcm0ga2V5IChBZGQvbW9kaWZ5L2RlbCB1c2VyIHBy b2ZpbGUpLg0KPi0vLyBGaXJzdCAyIGJpdHMgKGJpdCAxNn4xNSkuDQo+LS8vDQo+LSNkZWZpbmUg IEtFWV9NT0RJRllfVVNFUiAgICAgICAgICAgIDB4NDAwMA0KPi0jZGVmaW5lICBLRVlfREVMX1VT RVIgICAgICAgICAgICAgICAweDgwMDANCj4tI2RlZmluZSAgS0VZX0FERF9VU0VSICAgICAgICAg ICAgICAgMHhDMDAwDQo+LSNkZWZpbmUgIEtFWV9GSVJTVF9GT1JNX01BU0sgICAgICAgIDB4QzAw MA0KPi0NCj4tLy8NCj4tLy8gU2Vjb25kIGZvcm0ga2V5IChEaXNwbGF5IG5ldyBmb3JtIC9TZWxl Y3QgdXNlciAvIG1vZGlmeSBkZXZpY2UgcGF0aCBpbg0KPmFjY2VzcyBwb2xpY3kpLg0KPi0vLyBO ZXh0IDIgYml0cyAoYml0IDE0fjEzKS4NCj4tLy8NCj4tI2RlZmluZSAgS0VZX0VOVEVSX05FWFRf Rk9STSAgICAgICAgMHgwMDAwDQo+LSNkZWZpbmUgIEtFWV9TRUxFQ1RfVVNFUiAgICAgICAgICAg IDB4MTAwMA0KPi0jZGVmaW5lICBLRVlfTU9ESUZZX0FQX0RQICAgICAgICAgICAweDIwMDANCj4t I2RlZmluZSAgS0VZX09QRU5fQ0xPU0VfRk9STV9BQ1RJT04gMHgzMDAwDQo+LSNkZWZpbmUgIEtF WV9TRUNPTkRfRk9STV9NQVNLICAgICAgIDB4MzAwMA0KPi0NCj4tLy8NCj4tLy8gVXNlciBwcm9m aWxlIGluZm9ybWF0aW9uIGZvcm0ga2V5Lg0KPi0vLyBOZXh0IDMgYml0cyAoYml0IDEyfjEwKS4N Cj4tLy8NCj4tI2RlZmluZSAgS0VZX01PRElGWV9OQU1FICAgICAgICAgICAgMHgwMjAwDQo+LSNk ZWZpbmUgIEtFWV9NT0RJRllfSVAgICAgICAgICAgICAgIDB4MDQwMA0KPi0jZGVmaW5lICBLRVlf TU9ESUZZX0FQICAgICAgICAgICAgICAweDA2MDANCj4tI2RlZmluZSAgS0VZX01PRElGWV9JTkZP X01BU0sgICAgICAgMHgwRTAwDQo+LQ0KPi0vLw0KPi0vLyBTcGVjaWZpZWQga2V5LCB1c2VkIGlu IFZGUiAoS0VZX01PRElGWV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwNCj5LRVlfTU9ESUZZX05B TUUpLg0KPi0vLw0KPi0jZGVmaW5lICBLRVlfTU9ESUZZX1VTRVJfTkFNRSAgICAgICAweDUyMDAN Cj4tDQo+LS8vDQo+LS8vIE1vZGlmeSBpZGVudGl0eSBwb2xpY3kgZm9ybSBrZXkuDQo+LS8vIE5l eHQgMyBiaXRzIChiaXQgOX43KS4NCj4tLy8NCj4tI2RlZmluZSAgS0VZX01PRElGWV9QUk9WICAg ICAgICAgICAgMHgwMDQwDQo+LSNkZWZpbmUgIEtFWV9NT0RJRllfTVRZUEUgICAgICAgICAgIDB4 MDA4MA0KPi0jZGVmaW5lICBLRVlfTU9ESUZZX0NPTk4gICAgICAgICAgICAweDAwQzANCj4tI2Rl ZmluZSAgS0VZX0FERF9JUF9PUCAgICAgICAgICAgICAgMHgwMTAwDQo+LSNkZWZpbmUgIEtFWV9J UF9SRVRVUk5fVUlGICAgICAgICAgIDB4MDE0MA0KPi0jZGVmaW5lICBLRVlfTU9ESUZZX0lQX01B U0sgICAgICAgICAweDAxQzANCj4tDQo+LS8vDQo+LS8vIFNwZWNpZmllZCBrZXkuDQo+LS8vDQo+ LSNkZWZpbmUgIEtFWV9BRERfTE9HSUNBTF9PUCAgICAgICAgIDB4NTUwMA0KPi0jZGVmaW5lICBL RVlfSVBfUkVUVVJOICAgICAgICAgICAgICAweDU1NDANCj4tDQo+LS8vDQo+LS8vIE1vZGlmeSBh Y2Nlc3MgcG9saWN5IGZvcm0ga2V5Lg0KPi0vLyBOZXh0IDMgYml0cyAoYml0IDl+NykuDQo+LS8v DQo+LSNkZWZpbmUgIEtFWV9NT0RJRllfUklHSFQgICAgICAgICAgIDB4MDA0MA0KPi0jZGVmaW5l ICBLRVlfTU9ESUZZX1NFVFVQICAgICAgICAgICAweDAwODANCj4tI2RlZmluZSAgS0VZX01PRElG WV9CT09UICAgICAgICAgICAgMHgwMEMwDQo+LSNkZWZpbmUgIEtFWV9NT0RJRllfTE9BRCAgICAg ICAgICAgIDB4MDEwMA0KPi0jZGVmaW5lICBLRVlfTU9ESUZZX0NPTk5FQ1QgICAgICAgICAweDAx NDANCj4tI2RlZmluZSAgS0VZX0FQX1JFVFVSTl9VSUYgICAgICAgICAgMHgwMTgwDQo+LSNkZWZp bmUgIEtFWV9NT0RJRllfQVBfTUFTSyAgICAgICAgIDB4MDFDMA0KPi0NCj4tLy8NCj4tLy8gU3Bl Y2lmaWVkIGtleS4NCj4tLy8NCj4tI2RlZmluZSAgS0VZX0xPQURfRFAgICAgICAgICAgICAgICAg MHg1NzAwDQo+LSNkZWZpbmUgIEtFWV9DT05OX0RQICAgICAgICAgICAgICAgIDB4NTc0MA0KPi0j ZGVmaW5lICBLRVlfQVBfUkVUVVJOICAgICAgICAgICAgICAweDU3ODANCj4tDQo+LS8vDQo+LS8v IERldmljZSBwYXRoIGZvcm0ga2V5Lg0KPi0vLyBOZXh0IDIgYml0cyAoYml0IDZ+NSkuDQo+LS8v DQo+LSNkZWZpbmUgIEtFWV9QRVJNSVRfTU9ESUZZICAgICAgICAgIDB4MDAxMA0KPi0jZGVmaW5l ICBLRVlfRk9SQklEX01PRElGWSAgICAgICAgICAweDAwMjANCj4tI2RlZmluZSAgS0VZX0RJU1BM QVlfRFBfTUFTSyAgICAgICAgMHgwMDMwDQo+LQ0KPi0vLw0KPi0vLyBTcGVjaWZpZWQga2V5Lg0K Pi0vLw0KPi0jZGVmaW5lICBLRVlfTE9BRF9QRVJNSVQgICAgICAgICAgICAweDU3MTANCj4tI2Rl ZmluZSAgS0VZX0xPQURfRk9SQklEICAgICAgICAgICAgMHg1NzIwDQo+LSNkZWZpbmUgIEtFWV9D T05ORUNUX1BFUk1JVCAgICAgICAgIDB4NTc1MA0KPi0jZGVmaW5lICBLRVlfQ09OTkVDVF9GT1JC SUQgICAgICAgICAweDU3NjANCj4tDQo+LS8vDQo+LS8vIERldmljZSBwYXRoIG1vZGlmeSBrZXku DQo+LS8vIDIgYml0cyAoYml0IDEyfjExKS4NCj4tLy8NCj4tI2RlZmluZSBLRVlfTE9BRF9QRVJN SVRfTU9ESUZZICAgICAgMHgwMDAwDQo+LSNkZWZpbmUgS0VZX0xPQURfRk9SQklEX01PRElGWSAg ICAgIDB4MDQwMA0KPi0jZGVmaW5lIEtFWV9DT05ORUNUX1BFUk1JVF9NT0RJRlkgICAweDA4MDAN Cj4tI2RlZmluZSBLRVlfQ09OTkVDVF9GT1JCSURfTU9ESUZZICAgMHgwQzAwDQo+LSNkZWZpbmUg S0VZX01PRElGWV9EUF9NQVNLICAgICAgICAgIDB4MEMwMA0KPi0NCj4tDQo+LS8vDQo+LS8vIFRo ZSBwZXJtaXNzaW9ucyB1c2FibGUgd2hlbiBjb25maWd1cmluZyB0aGUgcGxhdGZvcm0uDQo+LS8v DQo+LSNkZWZpbmUgIEFDQ0VTU19TRVRVUF9SRVNUUklDVEVEICAgMQ0KPi0jZGVmaW5lICBBQ0NF U1NfU0VUVVBfTk9STUFMICAgICAgIDINCj4tI2RlZmluZSAgQUNDRVNTX1NFVFVQX0FETUlOICAg ICAgICAzDQo+LQ0KPi0vLw0KPi0vLyBRdWVzdGlvbiBJRCBmb3IgdGhlIHF1ZXN0aW9uIHVzZWQg aW4gZWFjaCBmb3JtDQo+KEtFWV9PUEVOX0NMT1NFX0ZPUk1fQUNUSU9OIHwgRk9STUlEX0ZPUk1f VVNFUl9NQU5BR0UpDQo+LS8vIFRoaXMgSUQgaXMgdXNlZCBpbiBGT1JNIE9QRU4vQ0xPU0UgQ2Fs bEJhY2sgYWN0aW9uLg0KPi0vLw0KPi0jZGVmaW5lIFFVRVNUSU9OSURfVVNFUl9NQU5BR0UgICAg ICAweDMwMDENCj4tDQo+LSNlbmRpZg0KPmRpZmYgLS1naXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZw0KPmVy RHhlLmluZg0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFu YWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnDQo+ZXJEeGUuaW5mDQo+ZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0DQo+aW5kZXggY2RkOTc3MzFiMi4uMDAwMDAwMDAwMA0KPi0tLQ0KPmEvU2VjdXJpdHlQ a2cvVXNlcklkZW50aWZpY2F0aW9uL1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1h bmFnDQo+ZXJEeGUuaW5mDQo+KysrIC9kZXYvbnVsbA0KPkBAIC0xLDcyICswLDAgQEANCj4tIyMg QGZpbGUNCj4tIyAgQSBVSSB0b29sIHRvIG1hbmFnZSB1c2VyIHByb2ZpbGVzDQo+LSMNCj4tIyAg QnkgdGhpcyBtb2R1bGUsIHVzZXIgY2FuIGFkZC91cGRhdGUvZGVsZXRlIHVzZXIgcHJvZmlsZXMs IGFuZCBjYW4gYWxzbw0KPi0jICBtb2RpZnkgdGhlIHVzZXIgYWNjZXNzIHBvbGljeSBhbmQgdGhl IHVzZXIgaWRlbnRpZmljYXRpb24gcG9saWN5Lg0KPi0jDQo+LSMgQ29weXJpZ2h0IChjKSAyMDA5 IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi0j IFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4tIyBhcmUgbGlj ZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgQlNEDQo+TGljZW5zZQ0KPi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0 aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LSMg aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPi0jIFRIRSBQ Uk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMi DQo+QkFTSVMsDQo+LSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBB TlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0jDQo+LSMjDQo+LQ0KPi1b RGVmaW5lc10NCj4tICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1 DQo+LSAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gVXNlclByb2ZpbGVNYW5hZ2Vy DQo+LSAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAgICAgICAgID0gVXNlclByb2ZpbGVNYW5hZ2Vy LnVuaQ0KPi0gIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IEUzOENCNTJELUE3NEQt NDVkYi1BOEQwLTI5MEM5QjIxQkJGMg0KPi0gIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAg ICA9IERYRV9EUklWRVINCj4tICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjAN Cj4tICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBVc2VyUHJvZmlsZU1hbmFnZXJJ bml0DQo+LQ0KPi1bU291cmNlc10NCj4tICBVc2VyUHJvZmlsZU1hbmFnZXIuYw0KPi0gIFVzZXJQ cm9maWxlTWFuYWdlci5oDQo+LSAgVXNlclByb2ZpbGVBZGQuYw0KPi0gIFVzZXJQcm9maWxlRGVs ZXRlLmMNCj4tICBVc2VyUHJvZmlsZU1vZGlmeS5jDQo+LSAgTW9kaWZ5SWRlbnRpdHlQb2xpY3ku Yw0KPi0gIE1vZGlmeUFjY2Vzc1BvbGljeS5jDQo+LSAgVXNlclByb2ZpbGVNYW5hZ2VyRGF0YS5o DQo+LSAgVXNlclByb2ZpbGVNYW5hZ2VyU3RyaW5ncy51bmkNCj4tICBVc2VyUHJvZmlsZU1hbmFn ZXJWZnIuVmZyDQo+LQ0KPi1bUGFja2FnZXNdDQo+LSAgTWRlUGtnL01kZVBrZy5kZWMNCj4tICBN ZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPi0gIFNlY3VyaXR5UGtnL1NlY3VyaXR5UGtn LmRlYw0KPi0NCj4tW0xpYnJhcnlDbGFzc2VzXQ0KPi0gIFVlZmlSdW50aW1lU2VydmljZXNUYWJs ZUxpYg0KPi0gIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KPi0gIFVlZmlEcml2ZXJFbnRyeVBv aW50DQo+LSAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPi0gIEJhc2VNZW1vcnlMaWINCj4tICBEZWJ1 Z0xpYg0KPi0gIEhpaUxpYg0KPi0gIFVlZmlMaWINCj4tICBEZXZpY2VQYXRoTGliDQo+LQ0KPi1b R3VpZHNdDQo+LSAgZ0VmaUlmclRpYW5vR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMjIFNPTUVUSU1FU19DT05TVU1FUyAgIyMgR1VJRA0KPi0gIGdFZmlVc2VySW5mb0FjY2Vzc1Nl dHVwQWRtaW5HdWlkICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICMjDQo+R1VJ RA0KPi0gIGdFZmlVc2VySW5mb0FjY2Vzc1NldHVwTm9ybWFsR3VpZCAgICAgICAgICAgICAjIyBT T01FVElNRVNfQ09OU1VNRVMgICMjDQo+R1VJRA0KPi0gIGdFZmlVc2VySW5mb0FjY2Vzc1NldHVw UmVzdHJpY3RlZEd1aWQgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4jIyBHVUlEDQo+ LSAgZ1VzZXJQcm9maWxlTWFuYWdlckd1aWQgICAgICAgICAgICAgICAgICAgICAgICMjIENPTlNV TUVTICAgICAgICAgICAgIyMgSElJDQo+LQ0KPi1bUHJvdG9jb2xzXQ0KPi0gIGdFZmlEZXZpY2VQ YXRoUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KPi0gIGdFZmlI aWlDb25maWdBY2Nlc3NQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KPi0g IGdFZmlVc2VyQ3JlZGVudGlhbDJQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAjIyBTT01FVElN RVNfQ09OU1VNRVMNCj4tICBnRWZpVXNlck1hbmFnZXJQcm90b2NvbEd1aWQgICAgICAgICAgICAg ICAgICAgIyMgQ09OU1VNRVMNCj4tDQo+LVtEZXBleF0NCj4tICBnRWZpVXNlck1hbmFnZXJQcm90 b2NvbEd1aWQNCj4tDQo+LVtVc2VyRXh0ZW5zaW9ucy5UaWFub0NvcmUuIkV4dHJhRmlsZXMiXQ0K Pi0gIFVzZXJQcm9maWxlTWFuYWdlckV4dHJhLnVuaQ0KPi0NCj5kaWZmIC0tZ2l0DQo+YS9TZWN1 cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9m aWxlTWFuYWcNCj5lckV4dHJhLnVuaQ0KPmIvU2VjdXJpdHlQa2cvVXNlcklkZW50aWZpY2F0aW9u L1VzZXJQcm9maWxlTWFuYWdlckR4ZS9Vc2VyUHJvZmlsZU1hbmFnDQo+ZXJFeHRyYS51bmkNCj5k ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCBiZjdhYzdkYzA0Li4wMDAwMDAwMDAwDQo+ LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5hZ2Vy RHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lckV4dHJhLnVuaQ0KPisrKyAvZGV2L251bGwNCj5AQCAt MSwxOSArMCwwIEBADQo+LS8vIC8qKiBAZmlsZQ0KPi0vLyBVc2VyUHJvZmlsZU1hbmFnZXIgTG9j YWxpemVkIFN0cmluZ3MgYW5kIENvbnRlbnQNCj4tLy8NCj4tLy8gQ29weXJpZ2h0IChjKSAyMDEz IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi0v Lw0KPi0vLyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LS8v IGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMg ZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPmZvdW5k IGF0DQo+LS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAN Cj4tLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9O IEFOICJBUyBJUyINCj5CQVNJUywNCj4tLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VO VEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0vLw0K Pi0vLyAqKi8NCj4tDQo+LSNzdHJpbmcgU1RSX1BST1BFUlRJRVNfTU9EVUxFX05BTUUNCj4tI2xh bmd1YWdlIGVuLVVTDQo+LSJVc2VyIFByb2ZpbGUgTWFuYWdlciINCj4tDQo+LQ0KPmRpZmYgLS1n aXQNCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJE eGUvVXNlclByb2ZpbGVNYW5hZw0KPmVyU3RyaW5ncy51bmkNCj5iL1NlY3VyaXR5UGtnL1VzZXJJ ZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZw0KPmVy U3RyaW5ncy51bmkNCj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCAzYTAwM2E5ODgz Li4wMDAwMDAwMDAwDQo+LS0tDQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNl clByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lclN0cmluZ3MudW5pDQo+Kysr IC9kZXYvbnVsbA0KPkBAIC0xLDE1OCArMCwwIEBADQo+LS8qKiBAZmlsZQ0KPi0gIFN0cmluZyBk ZWZpbml0aW9ucyBmb3IgVXNlciBQcm9maWxlIE1hbmFnZXIgZHJpdmVyLg0KPi0NCj4tQ29weXJp Z2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPi1UaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ LWFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QNCj5MaWNlbnNlDQo+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlz dHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBh dA0KPi1odHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LQ0K Pi1USEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4g IkFTIElTIiBCQVNJUywNCj4tV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBP RiBBTlkgS0lORCwgRUlUSEVSDQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0NCj4tKiovDQo+LQ0K Pi0jbGFuZ2RlZiAgIGVuLVVTICJFbmdsaXNoIg0KPi0jbGFuZ2RlZiAgIGZyLUZSICJGcmFuw6dh aXMiDQo+LQ0KPi0jc3RyaW5nIFNUUl9OVUxMX1NUUklORyAgICAgICAgICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgICIiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNs YW5ndWFnZSBmci1GUiAgIiINCj4tI3N0cmluZyBTVFJfRk9STVNFVF9USVRMRSAgICAgICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTICAiVXNlciBNYW5hZ2VyIg0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJVc2VyIE1hbmFnZXIoRnJlbmNo KSINCj4tI3N0cmluZyBTVFJfVElUTEVfSEVMUCAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVu LVVTICAiVGhpcyBzZWxlY3Rpb24gd2lsbCB0YWtlDQo+eW91IHRvIHRoZSBVc2VyIE1hbmFnZXIi DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1G UiAgIlRoaXMgc2VsZWN0aW9uIHdpbGwgdGFrZSB5b3UgdG8gdGhlIFVzZXINCj5NYW5hZ2VyKEZy ZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1VTRVJNQU5fVElUTEUgICAgICAgICAgICAgICNsYW5ndWFn ZSBlbi1VUyAgIlVzZXIgTWFuYWdlciINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiVXNlciBNYW5hZ2VyKEZyZW5jaCkiDQo+LSNzdHJp bmcgU1RSX0FERF9VU0VSX1RJVExFICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFkZCBV c2VyIFByb2ZpbGUiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNs YW5ndWFnZSBmci1GUiAgIkFkZCBVc2VyIFByb2ZpbGUoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJf QUREX1VTRVJfSEVMUCAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFkZCBVc2VyIFBy b2ZpbGUgdG8NCj5Vc2VyIERhdGFiYXNlIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJBZGQgVXNlciBQcm9maWxlIHRvIFVzZXINCj5E YXRhYmFzZShGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9NT0RJRllfVVNFUl9USVRMRSAgICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTICAiTW9kaWZ5IFVzZXINCj5Qcm9maWxlIg0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJNb2RpZnkgVXNl ciBQcm9maWxlKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX01PRElGWV9VU0VSX0hFTFAgICAgICAg ICAgICNsYW5ndWFnZSBlbi1VUyAgIk1vZGlmeSBVc2VyIFByb2ZpbGUNCj5JbmZvcm1hdGlvbiIN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZS ICAiTW9kaWZ5IFVzZXIgUHJvZmlsZQ0KPkluZm9ybWF0aW9uKEZyZW5jaCkiDQo+LSNzdHJpbmcg U1RSX0RFTEVURV9VU0VSX1RJVExFICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJEZWxldGUg VXNlciBQcm9maWxlIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj bGFuZ3VhZ2UgZnItRlIgICJEZWxldGUgVXNlciBQcm9maWxlKEZyZW5jaCkiDQo+LSNzdHJpbmcg U1RSX0RFTEVURV9VU0VSX0hFTFAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkRlbGV0ZSBV c2VyIFByb2ZpbGUNCj5mcm9tIFVzZXIgRGF0YWJhc2UiDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkRlbGV0ZSBVc2VyIFByb2ZpbGUg ZnJvbSBVc2VyDQo+RGF0YWJhc2UoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfVVNFUl9JTkZPICAg ICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlVzZXIgUHJvZmlsZQ0KPkluZm9ybWF0 aW9uIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2Ug ZnItRlIgICJVc2VyIFByb2ZpbGUgSW5mb3JtYXRpb24oRnJlbmNoKSINCj4tI3N0cmluZyBTVFJf VVNFUl9OQU1FICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlVzZXIgTmFtZSIN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZS ICAiVXNlciBOYW1lKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1VTRVJfTkFNRV9WQUwgICAgICAg ICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICIiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIiINCj4tI3N0cmluZyBTVFJfQ1JFQVRFX0RB VEUgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkNyZWF0ZSBEYXRlIg0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJDcmVh dGUgRGF0ZShGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9DUkVBVEVfREFURV9WQUwgICAgICAgICAg ICAgI2xhbmd1YWdlIGVuLVVTICAiIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICIiDQo+LSNzdHJpbmcgU1RSX1VTQUdFX0RBVEUgICAg ICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJVc2FnZSBEYXRlIg0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJVc2FnZSBEYXRl KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1VTQUdFX0RBVEVfVkFMICAgICAgICAgICAgICNsYW5n dWFnZSBlbi1VUyAgIiINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg I2xhbmd1YWdlIGZyLUZSICAiIg0KPi0jc3RyaW5nIFNUUl9VU0FHRV9DT1VOVCAgICAgICAgICAg ICAgICAgI2xhbmd1YWdlIGVuLVVTICAiVXNhZ2UgQ291bnQiDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlVzYWdlIENvdW50KEZyZW5j aCkiDQo+LSNzdHJpbmcgU1RSX1VTQUdFX0NPVU5UX1ZBTCAgICAgICAgICAgICAjbGFuZ3VhZ2Ug ZW4tVVMgICIiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5n dWFnZSBmci1GUiAgIiINCj4tI3N0cmluZyBTVFJfSURFTlRJRllfUE9MSUNZICAgICAgICAgICAg ICNsYW5ndWFnZSBlbi1VUyAgIklkZW50aWZ5IFBvbGljeSINCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiSWRlbnRpZnkgUG9saWN5KEZy ZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0lERU5USUZZX1BPTElDWV9WQUwgICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgICIiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNs YW5ndWFnZSBmci1GUiAgIiINCj4tI3N0cmluZyBTVFJfQUNDRVNTX1BPTElDWSAgICAgICAgICAg ICAgICNsYW5ndWFnZSBlbi1VUyAgIkFjY2VzcyBQb2xpY3kiDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkFjY2VzcyBQb2xpY3koRnJl bmNoKSINCj4tI3N0cmluZyBTVFJfU0FWRSAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdl IGVuLVVTICAiU2F2ZSAmIEV4aXQiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlNhdmUgJiBFeGl0KEZyZW5jaCkiDQo+LSNzdHJpbmcg U1RSX0lERU5USUZZX1NBVkVfSEVMUCAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlNhdmUgSWRl bnRpZnkgUG9saWN5DQo+YW5kIEV4aXQiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlNhdmUgSWRlbnRpZnkgUG9saWN5IGFuZCBFeGl0 KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1BST1ZJREVSICAgICAgICAgICAgICAgICAgICNsYW5n dWFnZSBlbi1VUyAgIkNyZWRlbnRpYWwgUHJvdmlkZXIiDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkNyZWRlbnRpYWwgUHJvdmlkZXIo RnJlbmNoKSINCj4tI3N0cmluZyBTVFJfUFJPVklERVJfSEVMUCAgICAgICAgICAgICAgICNsYW5n dWFnZSBlbi1VUyAgIlNlbGVjdCBDcmVkZW50aWFsDQo+UHJvdmlkZXIgT3B0aW9uIg0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJTZWxl Y3QgQ3JlZGVudGlhbCBQcm92aWRlcg0KPk9wdGlvbihGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9P Ul9DT04gICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJPciINCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiT3IoRnJl bmNoKSINCj4tI3N0cmluZyBTVFJfQU5EX0NPTiAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFn ZSBlbi1VUyAgIkFuZCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg I2xhbmd1YWdlIGZyLUZSICAiQW5kKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0NPTk5FQ1RPUiAg ICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJMb2dpY2FsIENvbm5lY3RvciINCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAi TG9naWNhbCBDb25uZWN0b3IoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfQ09OTkVDVE9SX0hFTFAg ICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiU2VsZWN0IExvZ2ljYWwNCj5Db25uZWN0b3Ig T3B0aW9uIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3Vh Z2UgZnItRlIgICJTZWxlY3QgTG9naWNhbCBDb25uZWN0b3INCj5PcHRpb24oRnJlbmNoKSINCj4t I3N0cmluZyBTVFJfSURFTlRJRllfUE9MSUNZX1ZBTFVFICAgICAgICNsYW5ndWFnZSBlbi1VUyAg IiINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZy LUZSICAiIg0KPi0jc3RyaW5nIFNUUl9JREVOVElGWV9QT0xJQ1lfSEVMUCAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgICJDdXJyZW50IElkZW50aWZ5DQo+UG9saWN5Ig0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJDdXJyZW50IElkZW50aWZ5 IFBvbGljeShGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9BRERfT1BUSU9OICAgICAgICAgICAgICAg ICAjbGFuZ3VhZ2UgZW4tVVMgICJBZGQgT3B0aW9uIg0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJBZGQgT3B0aW9uKEZyZW5jaCkiDQo+ LSNzdHJpbmcgU1RSX0FERF9PUFRJT05fSEVMUCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMg ICJBZGQgVGhpcyBPcHRpb24gdG8NCj5JZGVudGlmeSBQb2xpY3kiDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkFkZCBUaGlzIE9wdGlv biB0byBJZGVudGlmeQ0KPlBvbGljeShGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9BQ0NFU1NfU0FW RV9IRUxQICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJTYXZlIEFjY2VzcyBQb2xpY3kNCj5h bmQgRXhpdCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1 YWdlIGZyLUZSICAiU2F2ZSBBY2Nlc3MgUG9saWN5IGFuZCBFeGl0KEZyZW5jaCkiDQo+LSNzdHJp bmcgU1RSX0FDQ0VTU19SSUdIVCAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFjY2Vz cyBSaWdodCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1 YWdlIGZyLUZSICAiQWNjZXNzIFJpZ2h0KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0FDQ0VTU19S SUdIVF9IRUxQICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJTZWxlY3QgQWNjZXNzIFJpZ2h0 DQo+T3B0aW9uIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFu Z3VhZ2UgZnItRlIgICJTZWxlY3QgQWNjZXNzIFJpZ2h0IE9wdGlvbihGcmVuY2gpIg0KPi0jc3Ry aW5nIFNUUl9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJOb3Jt YWwiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBm ci1GUiAgIk5vcm1hbChGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9FTlJPTEwgICAgICAgICAgICAg ICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJFbnJvbGwiDQo+LSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkVucm9sbChGcmVuY2gpIg0KPi0j c3RyaW5nIFNUUl9NQU5BR0UgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJN YW5hZ2UiDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFn ZSBmci1GUiAgIk1hbmFnZShGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9BQ0NFU1NfU0VUVVAgICAg ICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJBY2Nlc3MgU2V0dXAiDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkFjY2VzcyBTZXR1 cChGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9BQ0NFU1NfU0VUVVBfSEVMUCAgICAgICAgICAgI2xh bmd1YWdlIGVuLVVTICAiU2VsZWN0IEFjY2Vzcw0KPlNldHVwIE9wdGlvbiINCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiU2VsZWxjdCBB Y2Nlc3MgU2V0dXAgT3B0aW9uKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1JFU1RSSUNURUQgICAg ICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlJlc3RyaWN0ZWQiDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlJlc3RyaWN0ZWQo RnJlbmNoKSINCj4tI3N0cmluZyBTVFJfQURNSU4gICAgICAgICAgICAgICAgICAgICAgICNsYW5n dWFnZSBlbi1VUyAgIkFkbWluIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjbGFuZ3VhZ2UgZnItRlIgICJBZG1pbihGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9CT09S X09SREVSICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJBY2Nlc3MgQm9vdCBPcmRl ciINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZy LUZSICAiQWNjZXNzIEJvb3QgT3JkZXIoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfQk9PVF9PUkRF Ul9IRUxQICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIlNlbGVjdCBBY2Nlc3MgQm9vdA0K Pk9yZGVyIE9wdGlvbiINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg I2xhbmd1YWdlIGZyLUZSICAiU2VsZWN0IEFjY2VzcyBCb290IE9yZGVyDQo+T3B0aW9uKEZyZW5j aCkiDQo+LSNzdHJpbmcgU1RSX0lOU0VSVCAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBl bi1VUyAgIkluc2VydCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg I2xhbmd1YWdlIGZyLUZSICAiSW5zZXJ0KEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX0FQUEVORCAg ICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAgIkFwcGVuZCINCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQXBwZW5kKEZy ZW5jaCkiDQo+LSNzdHJpbmcgU1RSX1JFUExBQ0UgICAgICAgICAgICAgICAgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgICJSZXBsYWNlIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjbGFuZ3VhZ2UgZnItRlIgICJSZXBsYWNlKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RSX05P REVGQVVMVCAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJOb2RlZmF1bHQiDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAg Ik5vZGVmYXVsdChGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9MT0FEICAgICAgICAgICAgICAgICAg ICAgICAgI2xhbmd1YWdlIGVuLVVTICAiTG9hZCBEZXZpY2UgUGF0aCINCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkxvYWQgRGV2aWNl IFBhdGgoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfTE9BRF9IRUxQICAgICAgICAgICAgICAgICAg ICNsYW5ndWFnZSBlbi1VUyAgIlNlbGVjdCBQZXJtaXQvRm9yYmlkDQo+TG9hZCBEZXZpY2UgUGF0 aCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZy LUZSICAiU2VsZWN0IFBlcm1pdC9Gb3JiaWQgTG9hZCBEZXZpY2UNCj5QYXRoKEZyZW5jaCkiDQo+ LSNzdHJpbmcgU1RSX0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMg ICJDb25uZWN0IERldmljZSBQYXRoIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJDb25uZWN0IERldmljZSBQYXRoKEZyZW5jaCkiDQo+ LSNzdHJpbmcgU1RSX0NPTk5FQ1RfSEVMUCAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAg IlNlbGVjdCBQZXJtaXQvRm9yYmlkDQo+Q29ubmVjdCBEZXZpY2UgUGF0aCINCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiU2VsZWN0IFBl cm1pdC9Gb3JiaWQgQ29ubmVjdCBEZXZpY2UNCj5QYXRoKEZyZW5jaCkiDQo+LSNzdHJpbmcgU1RS X0xPQURfUEVSTUlUICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiUGVybWl0IExv YWQgRGV2aWNlDQo+UGF0aCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgI2xhbmd1YWdlIGZyLUZSICAiUGVybWl0IExvYWQgRGV2aWNlIFBhdGgoRnJlbmNoKSINCj4t I3N0cmluZyBTVFJfTE9BRF9QRVJNSVRfSEVMUCAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAi Q2hhbmdlIFBlcm1pdA0KPkxvYWQgRGV2aWNlIFBhdGggdG8gRm9yYmlkIg0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJDaGFuZ2UgUGVy bWl0IExvYWQgRGV2aWNlIFBhdGggdG8NCj5Gb3JiaWQoRnJlbmNoKSINCj4tI3N0cmluZyBTVFJf TE9BRF9GT1JCSUQgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJGb3JiaWQgTG9h ZCBEZXZpY2UNCj5QYXRoIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjbGFuZ3VhZ2UgZnItRlIgICJGb3JiaWQgTG9hZCBEZXZpY2UgUGF0aChGcmVuY2gpIg0KPi0j c3RyaW5nIFNUUl9MT0FEX0ZPUkJJRF9IRUxQICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJD aGFuZ2UgRm9yYmlkIExvYWQNCj5EZXZpY2UgUGF0aCB0byBQZXJtaXQiDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIkNoYW5nZSBGb3Ji aWQgTG9hZCBEZXZpY2UgUGF0aCB0bw0KPlBlcm1pdChGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9D T05ORUNUX1BFUk1JVCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJQZXJtaXQgQ29ubmVj dA0KPkRldmljZSBQYXRoIg0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjbGFuZ3VhZ2UgZnItRlIgICJQZXJtaXQgQ29ubmVjdCBEZXZpY2UgUGF0aChGcmVuY2gpIg0K Pi0jc3RyaW5nIFNUUl9DT05ORUNUX1BFUk1JVF9IRUxQICAgICAgICAgI2xhbmd1YWdlIGVuLVVT ICAiQ2hhbmdlIFBlcm1pdA0KPkNvbm5lY3QgRGV2aWNlIFBhdGggdG8gRm9yYmlkIg0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnItRlIgICJDaGFu Z2UgUGVybWl0IENvbm5lY3QgRGV2aWNlIFBhdGggdG8NCj5Gb3JiaWQoRnJlbmNoKSINCj4tI3N0 cmluZyBTVFJfQ09OTkVDVF9GT1JCSUQgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiRm9y YmlkIENvbm5lY3QNCj5EZXZpY2UgUGF0aCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiRm9yYmlkIENvbm5lY3QgRGV2aWNlIFBhdGgo RnJlbmNoKSINCj4tI3N0cmluZyBTVFJfQ09OTkVDVF9GT1JCSURfSEVMUCAgICAgICAgICNsYW5n dWFnZSBlbi1VUyAgIkNoYW5nZSBGb3JiaWQNCj5Db25uZWN0IERldmljZSBQYXRoIHRvIFBlcm1p dCINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZy LUZSICAiQ2hhbmdlIEZvcmJpZCBDb25uZWN0IERldmljZSBQYXRoIHRvDQo+UGVybWl0KEZyZW5j aCkiDQo+LSNzdHJpbmcgU1RSX1BSRVNTX0tFWV9DT05USU5VRSAgICAgICAgICNsYW5ndWFnZSBl bi1VUyAgIlByZXNzIEVOVEVSIHRvDQo+Q29udGludWUsIE90aGVyIEtleSB0byBDYW5jZWwgLi4u Ig0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZnIt RlIgICJQcmVzcyBFTlRFUiB0byBDb250aW51ZSwgT3RoZXIgS2V5IHRvDQo+Q2FuY2VsIC4uLihG cmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9NT1ZFX1RPX0ZPUkJJRF9MSVNUICAgICAgICAgI2xhbmd1 YWdlIGVuLVVTICAiQXJlIFlvdSBTdXJlIHRvDQo+TW92ZSBJdCB0byBGb3JiaWQgTGlzdD8iDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAg IkFyZSBZb3UgU3VyZSB0byBNb3ZlIEl0IHRvIEZvcmJpZA0KPkxpc3Q/KEZyZW5jaCkiDQo+LSNz dHJpbmcgU1RSX01PVkVfVE9fUEVSTUlUX0xJU1QgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJB cmUgWW91IFN1cmUgdG8NCj5Nb3ZlIEl0IHRvIFBlcm1pdCBMaXN0PyINCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQXJlIFlvdSBTdXJl IHRvIE1vdmUgSXQgdG8gUGVybWl0DQo+TGlzdD8oRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfU1RS T0tFX0tFWV9DT05USU5VRSAgICAgICAgI2xhbmd1YWdlIGVuLVVTICAiUGxlYXNlIFByZXNzIEFu eQ0KPktleSB0byBDb250aW51ZSAuLi4iDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICNsYW5ndWFnZSBmci1GUiAgIlBsZWFzZSBQcmVzcyBBbnkgS2V5IHRvIENvbnRp bnVlIC4uLg0KPihGcmVuY2gpIg0KPi0jc3RyaW5nIFNUUl9DUkVBVEVfUFJPRklMRV9GQUlMRUQg ICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJDcmVhdGUgTmV3IFVzZXINCj5Qcm9maWxlIEZhaWxlZCEi DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1G UiAgIkNyZWF0ZSBOZXcgVXNlciBQcm9maWxlIEZhaWxlZCENCj4oRnJlbmNoKSINCj4tI3N0cmlu ZyBTVFJfQ1JFQVRFX1BST0ZJTEVfU1VDQ0VTUyAgICAgI2xhbmd1YWdlIGVuLVVTICAiQ3JlYXRl IE5ldw0KPlVzZXIgUHJvZmlsZSBTdWNjZWVkISINCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgI2xhbmd1YWdlIGZyLUZSICAiQ3JlYXRlIE5ldyBVc2VyIFByb2ZpbGUg U3VjY2VlZCENCj4oRnJlbmNoKSINCj4tI3N0cmluZyBTVFJfVVNFUl9BTFJFQURZX0VYSVNURUQg ICAgICAgI2xhbmd1YWdlIGVuLVVTICAiVXNlciBOYW1lIEhhZA0KPkFscmVhZHkgRXhpc3RlZC4i DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsYW5ndWFnZSBmci1G UiAgIlVzZXIgTmFtZSBIYWQgQWxyZWFkeSBFeGlzdGVkLg0KPihGcmVuY2gpIg0KPi0jc3RyaW5n IFNUUl9HRVRfVVNFUk5BTUVfRkFJTEVEICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgICJGYWlsZWQg VG8gR2V0DQo+VXNlciBOYW1lLiINCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgI2xhbmd1YWdlIGZyLUZSICAiRmFpbGVkIFRvIEdldCBVc2VyIE5hbWUuIChGcmVuY2gp Ig0KPi0NCj5kaWZmIC0tZ2l0DQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNl clByb2ZpbGVNYW5hZ2VyRHhlL1VzZXJQcm9maWxlTWFuYWcNCj5lclZmci5WZnINCj5iL1NlY3Vy aXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2Zp bGVNYW5hZw0KPmVyVmZyLlZmcg0KPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IDJj ZjMzNTlmMmEuLjAwMDAwMDAwMDANCj4tLS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNh dGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNYW5hZw0KPmVyVmZyLlZmcg0K PisrKyAvZGV2L251bGwNCj5AQCAtMSwyNDQgKzAsMCBAQA0KPi0vKiogQGZpbGUNCj4tICBVc2Vy IFByb2ZpbGUgTWFuYWdlciBmb3Jtc2V0Lg0KPi0NCj4tQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAx MCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPi1UaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+LWFyZSBsaWNlbnNlZCBhbmQg bWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QN Cj5MaWNlbnNlDQo+LXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1 bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj5mb3VuZCBhdA0KPi1odHRwOi8vb3BlbnNv dXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+LQ0KPi1USEUgUFJPR1JBTSBJUyBE SVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4t V0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVS DQo+RVhQUkVTUyBPUiBJTVBMSUVELg0KPi0NCj4tKiovDQo+LQ0KPi0jaW5jbHVkZSAiVXNlclBy b2ZpbGVNYW5hZ2VyRGF0YS5oIg0KPi0NCj4tI2RlZmluZSBVU0VSX01BTkFHRVJfQ0xBU1MgICAg ICAgMHgwMA0KPi0jZGVmaW5lIFVTRVJfTUFOQUdFUl9TVUJDTEFTUyAgICAweDA0DQo+LQ0KPi1m b3Jtc2V0DQo+LSAgZ3VpZCAgICAgPSBVU0VSX1BST0ZJTEVfTUFOQUdFUl9HVUlELA0KPi0gIHRp dGxlICAgID0gU1RSSU5HX1RPS0VOKFNUUl9GT1JNU0VUX1RJVExFKSwNCj4tICBoZWxwICAgICA9 IFNUUklOR19UT0tFTihTVFJfVElUTEVfSEVMUCksDQo+LQ0KPi0gIC8vIFVzZXIgbWFuYWdlciBm b3JtDQo+LSAgZm9ybSBmb3JtaWQgPSBGT1JNSURfVVNFUl9NQU5BR0UsDQo+LSAgICB0aXRsZSAg ICAgPSBTVFJJTkdfVE9LRU4oU1RSX1VTRVJNQU5fVElUTEUpOw0KPi0NCj4tICAgIGxhYmVsIExB QkVMX1VTRVJfTUFOQUdFX0ZVTkM7DQo+LSAgICBsYWJlbCBMQUJFTF9FTkQ7DQo+LQ0KPi0gICAg c3VwcHJlc3NpZiBUUlVFOw0KPi0gICAgICB0ZXh0DQo+LSAgICAgICAgaGVscCAgID0gU1RSSU5H X1RPS0VOKFNUUl9OVUxMX1NUUklORyksDQo+LSAgICAgICAgdGV4dCAgID0gU1RSSU5HX1RPS0VO KFNUUl9OVUxMX1NUUklORyksDQo+LSAgICAgICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQo+LSAg ICAgICAga2V5ICAgID0gUVVFU1RJT05JRF9VU0VSX01BTkFHRTsNCj4tICAgIGVuZGlmOw0KPi0N Cj4tICBlbmRmb3JtOw0KPi0NCj4tICAvLyBNb2RpZnkgdXNlciBwcm9maWxlIGZvcm0NCj4tICBm b3JtIGZvcm1pZCA9IEZPUk1JRF9NT0RJRllfVVNFUiwNCj4tICAgIHRpdGxlICAgICA9IFNUUklO R19UT0tFTihTVFJfTU9ESUZZX1VTRVJfVElUTEUpOw0KPi0NCj4tICAgIGxhYmVsIExBQkVMX1VT RVJfTU9EX0ZVTkM7DQo+LSAgICBsYWJlbCBMQUJFTF9FTkQ7DQo+LQ0KPi0gIGVuZGZvcm07DQo+ LQ0KPi0gIC8vIERlbGV0ZSB1c2VyIHByb2ZpbGUgZm9ybQ0KPi0gIGZvcm0gZm9ybWlkID0gRk9S TUlEX0RFTF9VU0VSLA0KPi0gICAgdGl0bGUgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9ERUxFVEVf VVNFUl9USVRMRSk7DQo+LQ0KPi0gICAgbGFiZWwgTEFCRUxfVVNFUl9ERUxfRlVOQzsNCj4tICAg IGxhYmVsIExBQkVMX0VORDsNCj4tDQo+LSAgICBzdWJ0aXRsZQ0KPi0gICAgICB0ZXh0ICAgPSBT VFJJTkdfVE9LRU4oU1RSX05VTExfU1RSSU5HKTsNCj4tICBlbmRmb3JtOw0KPi0NCj4tICAvLw0K Pi0gIC8vIFVzZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3JtDQo+LSAgLy8NCj4tICBmb3JtIGZv cm1pZCA9IEZPUk1JRF9VU0VSX0lORk8sDQo+LSAgICB0aXRsZSAgICAgPSBTVFJJTkdfVE9LRU4o U1RSX1VTRVJfSU5GTyk7DQo+LQ0KPi0gICAgdGV4dA0KPi0gICAgICBoZWxwICAgPSBTVFJJTkdf VE9LRU4oU1RSX1VTRVJfTkFNRV9WQUwpLA0KPi0gICAgICB0ZXh0ICAgPSBTVFJJTkdfVE9LRU4o U1RSX1VTRVJfTkFNRSksDQo+LSAgICAgIGZsYWdzICA9IElOVEVSQUNUSVZFLA0KPi0gICAgICBr ZXkgICAgPSBLRVlfTU9ESUZZX1VTRVJfTkFNRTsNCj4tDQo+LSAgICB0ZXh0DQo+LSAgICAgIGhl bHAgICA9IFNUUklOR19UT0tFTihTVFJfQ1JFQVRFX0RBVEVfVkFMKSwNCj4tICAgICAgdGV4dCAg ID0gU1RSSU5HX1RPS0VOKFNUUl9DUkVBVEVfREFURSk7DQo+LQ0KPi0gICAgdGV4dA0KPi0gICAg ICBoZWxwICAgPSBTVFJJTkdfVE9LRU4oU1RSX1VTQUdFX0RBVEVfVkFMKSwNCj4tICAgICAgdGV4 dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9VU0FHRV9EQVRFKTsNCj4tDQo+LSAgICB0ZXh0DQo+LSAg ICAgIGhlbHAgICA9IFNUUklOR19UT0tFTihTVFJfVVNBR0VfQ09VTlRfVkFMKSwNCj4tICAgICAg dGV4dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9VU0FHRV9DT1VOVCk7DQo+LQ0KPi0gICAgbGFiZWwg TEFCRUxfVVNFUl9JTkZPX0ZVTkM7DQo+LSAgICBsYWJlbCBMQUJFTF9FTkQ7DQo+LQ0KPi0gIGVu ZGZvcm07DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSWRlbnRpZnkgcG9saWN5IG1vZGlmeSBmb3JtDQo+ LSAgLy8NCj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9NT0RJRllfSVAsDQo+LSAgICB0aXRsZSAg ICAgPSBTVFJJTkdfVE9LRU4oU1RSX0lERU5USUZZX1BPTElDWSk7DQo+LQ0KPi0gICAgdGV4dA0K Pi0gICAgICBoZWxwICAgPSBTVFJJTkdfVE9LRU4oU1RSX0lERU5USUZZX1BPTElDWV9IRUxQKSwN Cj4tICAgICAgdGV4dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9JREVOVElGWV9QT0xJQ1kpLA0KPi0g ICAgICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfSURFTlRJRllfUE9MSUNZX1ZBTFVFKTsN Cj4tDQo+LSAgICBsYWJlbCBMQUJFTF9JUF9NT0RfRlVOQzsNCj4tICAgIGxhYmVsIExBQkVMX0VO RDsNCj4tDQo+LSAgICB0ZXh0DQo+LSAgICAgIGhlbHAgICA9IFNUUklOR19UT0tFTihTVFJfQURE X09QVElPTl9IRUxQKSwNCj4tICAgICAgdGV4dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9BRERfT1BU SU9OKSwNCj4tICAgICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQo+LSAgICAgIGtleSAgICA9IEtF WV9BRERfTE9HSUNBTF9PUDsNCj4tDQo+LSAgICBzdWJ0aXRsZQ0KPi0gICAgICB0ZXh0ICAgPSBT VFJJTkdfVE9LRU4oU1RSX05VTExfU1RSSU5HKTsNCj4tDQo+LSAgICB0ZXh0DQo+LSAgICAgIGhl bHAgICA9IFNUUklOR19UT0tFTihTVFJfSURFTlRJRllfU0FWRV9IRUxQKSwNCj4tICAgICAgdGV4 dCAgID0gU1RSSU5HX1RPS0VOKFNUUl9TQVZFKSwNCj4tICAgICAgZmxhZ3MgID0gSU5URVJBQ1RJ VkUsDQo+LSAgICAgIGtleSAgICA9IEtFWV9JUF9SRVRVUk47DQo+LQ0KPi0gIGVuZGZvcm07DQo+ LQ0KPi0gIC8vDQo+LSAgLy8gQWNjZXNzIHBvbGljeSBtb2RpZnkgZm9ybQ0KPi0gIC8vDQo+LSAg Zm9ybSBmb3JtaWQgPSBGT1JNSURfTU9ESUZZX0FQLA0KPi0gICAgdGl0bGUgICAgID0gU1RSSU5H X1RPS0VOKFNUUl9BQ0NFU1NfUE9MSUNZKTsNCj4tDQo+LSAgICBsYWJlbCBMQUJFTF9BUF9NT0Rf RlVOQzsNCj4tICAgIGxhYmVsIExBQkVMX0VORDsNCj4tDQo+LSAgICBnb3RvIEZPUk1JRF9MT0FE X0RQLA0KPi0gICAgICBwcm9tcHQgID0gU1RSSU5HX1RPS0VOKFNUUl9MT0FEKSwNCj4tICAgICAg aGVscCAgICA9IFNUUklOR19UT0tFTihTVFJfTE9BRF9IRUxQKSwNCj4tICAgICAgZmxhZ3MgICA9 IElOVEVSQUNUSVZFLA0KPi0gICAgICBrZXkgICAgID0gS0VZX0xPQURfRFA7DQo+LQ0KPi0gICAg Z290byBGT1JNSURfQ09OTkVDVF9EUCwNCj4tICAgICAgcHJvbXB0ICA9IFNUUklOR19UT0tFTihT VFJfQ09OTkVDVCksDQo+LSAgICAgIGhlbHAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0NPTk5FQ1Rf SEVMUCksDQo+LSAgICAgIGZsYWdzICAgPSBJTlRFUkFDVElWRSwNCj4tICAgICAga2V5ICAgICA9 IEtFWV9DT05OX0RQOw0KPi0NCj4tICAgIHN1YnRpdGxlDQo+LSAgICAgIHRleHQgICA9IFNUUklO R19UT0tFTihTVFJfTlVMTF9TVFJJTkcpOw0KPi0NCj4tICAgIHRleHQNCj4tICAgICAgaGVscCAg ID0gU1RSSU5HX1RPS0VOKFNUUl9BQ0NFU1NfU0FWRV9IRUxQKSwNCj4tICAgICAgdGV4dCAgID0g U1RSSU5HX1RPS0VOKFNUUl9TQVZFKSwNCj4tICAgICAgZmxhZ3MgID0gSU5URVJBQ1RJVkUsDQo+ LSAgICAgIGtleSAgICA9IEtFWV9BUF9SRVRVUk47DQo+LQ0KPi0gIGVuZGZvcm07DQo+LQ0KPi0g IC8vDQo+LSAgLy8gTG9hZCBkZXZpY2UgcGF0aCBmb3JtDQo+LSAgLy8NCj4tICBmb3JtIGZvcm1p ZCA9IEZPUk1JRF9MT0FEX0RQLA0KPi0gICAgdGl0bGUgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9M T0FEKTsNCj4tDQo+LSAgICBnb3RvIEZPUk1JRF9QRVJNSVRfTE9BRF9EUCwNCj4tICAgICAgcHJv bXB0ICA9IFNUUklOR19UT0tFTihTVFJfTE9BRF9QRVJNSVQpLA0KPi0gICAgICBoZWxwICAgID0g U1RSSU5HX1RPS0VOKFNUUl9MT0FEX1BFUk1JVF9IRUxQKSwNCj4tICAgICAgZmxhZ3MgICA9IElO VEVSQUNUSVZFLA0KPi0gICAgICBrZXkgICAgID0gS0VZX0xPQURfUEVSTUlUOw0KPi0NCj4tICAg IGdvdG8gRk9STUlEX0ZPUkJJRF9MT0FEX0RQLA0KPi0gICAgICBwcm9tcHQgID0gU1RSSU5HX1RP S0VOKFNUUl9MT0FEX0ZPUkJJRCksDQo+LSAgICAgIGhlbHAgICAgPSBTVFJJTkdfVE9LRU4oU1RS X0xPQURfRk9SQklEX0hFTFApLA0KPi0gICAgICBmbGFncyAgID0gSU5URVJBQ1RJVkUsDQo+LSAg ICAgIGtleSAgICAgPSBLRVlfTE9BRF9GT1JCSUQ7DQo+LQ0KPi0gIGVuZGZvcm07DQo+LQ0KPi0g IC8vDQo+LSAgLy8gUGVybWl0IGxvYWQgZGV2aWNlIHBhdGggZm9ybQ0KPi0gIC8vDQo+LSAgZm9y bSBmb3JtaWQgPSBGT1JNSURfUEVSTUlUX0xPQURfRFAsDQo+LSAgICB0aXRsZSAgICAgPSBTVFJJ TkdfVE9LRU4oU1RSX0xPQURfUEVSTUlUKTsNCj4tDQo+LSAgICBsYWJlbCBMQUJFTF9QRVJNSVRf TE9BRF9GVU5DOw0KPi0gICAgbGFiZWwgTEFCRUxfRU5EOw0KPi0NCj4tICAgIHN1YnRpdGxlDQo+ LSAgICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfTlVMTF9TVFJJTkcpOw0KPi0NCj4tICBl bmRmb3JtOw0KPi0NCj4tICAvLw0KPi0gIC8vIEZvcmJpZCBsb2FkIGRldmljZSBwYXRoIGZvcm0N Cj4tICAvLw0KPi0gIGZvcm0gZm9ybWlkID0gRk9STUlEX0ZPUkJJRF9MT0FEX0RQLA0KPi0gICAg dGl0bGUgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9MT0FEX0ZPUkJJRCk7DQo+LQ0KPi0gICAgbGFi ZWwgTEFCTEVfRk9SQklEX0xPQURfRlVOQzsNCj4tICAgIGxhYmVsIExBQkVMX0VORDsNCj4tDQo+ LSAgICBzdWJ0aXRsZQ0KPi0gICAgICB0ZXh0ICAgPSBTVFJJTkdfVE9LRU4oU1RSX05VTExfU1RS SU5HKTsNCj4tDQo+LSAgZW5kZm9ybTsNCj4tDQo+LSAgLy8NCj4tICAvLyBDb25uZWN0IGRldmlj ZSBwYXRoIGZvcm0NCj4tICAvLw0KPi0gIGZvcm0gZm9ybWlkID0gRk9STUlEX0NPTk5FQ1RfRFAs DQo+LSAgICB0aXRsZSAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX0NPTk5FQ1QpOw0KPi0NCj4tICAg IGdvdG8gRk9STUlEX1BFUk1JVF9DT05ORUNUX0RQLA0KPi0gICAgICBwcm9tcHQgID0gU1RSSU5H X1RPS0VOKFNUUl9DT05ORUNUX1BFUk1JVCksDQo+LSAgICAgIGhlbHAgICAgPSBTVFJJTkdfVE9L RU4oU1RSX0NPTk5FQ1RfUEVSTUlUX0hFTFApLA0KPi0gICAgICBmbGFncyAgID0gSU5URVJBQ1RJ VkUsDQo+LSAgICAgIGtleSAgICAgPSBLRVlfQ09OTkVDVF9QRVJNSVQ7DQo+LQ0KPi0gICAgZ290 byBGT1JNSURfRk9SQklEX0NPTk5FQ1RfRFAsDQo+LSAgICAgIHByb21wdCAgPSBTVFJJTkdfVE9L RU4oU1RSX0NPTk5FQ1RfRk9SQklEKSwNCj4tICAgICAgaGVscCAgICA9IFNUUklOR19UT0tFTihT VFJfQ09OTkVDVF9GT1JCSURfSEVMUCksDQo+LSAgICAgIGZsYWdzICAgPSBJTlRFUkFDVElWRSwN Cj4tICAgICAga2V5ICAgICA9IEtFWV9DT05ORUNUX0ZPUkJJRDsNCj4tDQo+LSAgZW5kZm9ybTsN Cj4tDQo+LSAgLy8NCj4tICAvLyBQZXJtaXQgY29ubmVjdCBkZXZpY2UgcGF0aCBmb3JtDQo+LSAg Ly8NCj4tICBmb3JtIGZvcm1pZCA9IEZPUk1JRF9QRVJNSVRfQ09OTkVDVF9EUCwNCj4tICAgIHRp dGxlICAgICA9IFNUUklOR19UT0tFTihTVFJfQ09OTkVDVF9QRVJNSVQpOw0KPi0NCj4tICAgIHN1 YnRpdGxlDQo+LSAgICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJfTlVMTF9TVFJJTkcpOw0K Pi0NCj4tICBlbmRmb3JtOw0KPi0NCj4tICAvLw0KPi0gIC8vIEZvcmJpZCBjb25uZWN0IGRldmlj ZSBwYXRoIGZvcm0NCj4tICAvLw0KPi0gIGZvcm0gZm9ybWlkID0gRk9STUlEX0ZPUkJJRF9DT05O RUNUX0RQLA0KPi0gICAgdGl0bGUgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9DT05ORUNUX0ZPUkJJ RCk7DQo+LQ0KPi0gICBzdWJ0aXRsZQ0KPi0gICAgIHRleHQgICA9IFNUUklOR19UT0tFTihTVFJf TlVMTF9TVFJJTkcpOw0KPi0NCj4tICBlbmRmb3JtOw0KPi0NCj4tZW5kZm9ybXNldDsNCj5kaWZm IC0tZ2l0DQo+YS9TZWN1cml0eVBrZy9Vc2VySWRlbnRpZmljYXRpb24vVXNlclByb2ZpbGVNYW5h Z2VyRHhlL1VzZXJQcm9maWxlTW9kaWZ5DQo+LmMNCj5iL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlm aWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJEeGUvVXNlclByb2ZpbGVNb2RpZnkNCj4uYw0KPmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPmluZGV4IGQxNjVlNWFlOWIuLjAwMDAwMDAwMDANCj4t LS0NCj5hL1NlY3VyaXR5UGtnL1VzZXJJZGVudGlmaWNhdGlvbi9Vc2VyUHJvZmlsZU1hbmFnZXJE eGUvVXNlclByb2ZpbGVNb2RpZnkNCj4uYw0KPisrKyAvZGV2L251bGwNCj5AQCAtMSwxNDc1ICsw LDAgQEANCj4tLyoqIEBmaWxlDQo+LSAgVGhlIGZ1bmN0aW9ucyB0byBtb2RpZnkgYSB1c2VyIHBy b2ZpbGUuDQo+LQ0KPi1Db3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+LVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCj4tYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPkxpY2Vuc2UNCj4td2hpY2gg YWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNl bnNlIG1heSBiZQ0KPmZvdW5kIGF0DQo+LWh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9i c2QtbGljZW5zZS5waHANCj4tDQo+LVRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRI RSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPi1XSVRIT1VUIFdBUlJBTlRJRVMg T1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJ RUQuDQo+LQ0KPi0qKi8NCj4tDQo+LSNpbmNsdWRlICJVc2VyUHJvZmlsZU1hbmFnZXIuaCINCj4t DQo+LUVGSV9VU0VSX1BST0ZJTEVfSEFORExFICAgICAgICAgICBtTW9kaWZ5VXNlciA9IE5VTEw7 DQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5IHVzZXIgc2VsZWN0IGZvcm0sIGNhYiBzZWxlY3QgYSB1 c2VyIHRvIG1vZGlmeS4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LVNlbGVjdFVzZXJUb01vZGlmeSAg KA0KPi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0 dXM7DQo+LSAgVUlOVDggICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+LSAgRUZJX1VTRVJfUFJP RklMRV9IQU5ETEUgVXNlcjsNCj4tICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSBDdXJyZW50VXNl cjsNCj4tICBVSU5UMzIgICAgICAgICAgICAgICAgICBDdXJyZW50QWNjZXNzUmlnaHQ7DQo+LSAg Vk9JRCAgICAgICAgICAgICAgICAgICAgKlN0YXJ0T3BDb2RlSGFuZGxlOw0KPi0gIFZPSUQgICAg ICAgICAgICAgICAgICAgICpFbmRPcENvZGVIYW5kbGU7DQo+LSAgRUZJX0lGUl9HVUlEX0xBQkVM ICAgICAgKlN0YXJ0TGFiZWw7DQo+LSAgRUZJX0lGUl9HVUlEX0xBQkVMICAgICAgKkVuZExhYmVs Ow0KPi0NCj4tICAvLw0KPi0gIC8vIEluaXRpYWxpemUgdGhlIGNvbnRhaW5lciBmb3IgZHluYW1p YyBvcGNvZGVzLg0KPi0gIC8vDQo+LSAgU3RhcnRPcENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0ZU9w Q29kZUhhbmRsZSAoKTsNCj4tICBBU1NFUlQgKFN0YXJ0T3BDb2RlSGFuZGxlICE9IE5VTEwpOw0K Pi0NCj4tICBFbmRPcENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4t ICBBU1NFUlQgKEVuZE9wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBD cmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUuDQo+LSAgLy8NCj4tICBTdGFydExhYmVsID0g KEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVhdGVHdWlkT3BDb2RlICgNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0T3BDb2RlSGFuZGxlLA0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+ LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfSUZSX0dVSURfTEFC RUwpDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gIFN0 YXJ0TGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICBT dGFydExhYmVsLT5OdW1iZXIgICAgICAgID0gTEFCRUxfVVNFUl9NT0RfRlVOQzsNCj4tDQo+LSAg RW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZE9wQ29kZUhhbmRsZSwN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3Vp ZCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xB QkVMKQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgRW5k TGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICBFbmRM YWJlbC0+TnVtYmVyICAgICAgICA9IExBQkVMX0VORDsNCj4tDQo+LSAgLy8NCj4tICAvLyBBZGQg ZWFjaCB1c2VyIGNhbiBiZSBtb2RpZmllZC4NCj4tICAvLw0KPi0gIFVzZXIgID0gTlVMTDsNCj4t ICBJbmRleCA9IDE7DQo+LSAgbVVzZXJNYW5hZ2VyLT5DdXJyZW50IChtVXNlck1hbmFnZXIsICZD dXJyZW50VXNlcik7DQo+LSAgd2hpbGUgKFRSVUUpIHsNCj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFu YWdlci0+R2V0TmV4dCAobVVzZXJNYW5hZ2VyLCAmVXNlcik7DQo+LSAgICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+LSAgICAgIGJyZWFrOw0KPi0gICAgfQ0KPi0NCj4tICAgIFN0YXR1cyA9 IEdldEFjY2Vzc1JpZ2h0ICgmQ3VycmVudEFjY2Vzc1JpZ2h0KTsNCj4tICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4tICAgICAgQ3VycmVudEFjY2Vzc1JpZ2h0ID0gRUZJX1VTRVJfSU5G T19BQ0NFU1NfRU5ST0xMX1NFTEY7DQo+LSAgICB9DQo+LQ0KPi0gICAgaWYgKChDdXJyZW50QWNj ZXNzUmlnaHQgPT0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFKSB8fCAoVXNlciA9PQ0KPkN1 cnJlbnRVc2VyKSkgew0KPi0gICAgICBBZGRVc2VyVG9Gb3JtIChVc2VyLCAoVUlOVDE2KShLRVlf TU9ESUZZX1VTRVIgfCBLRVlfU0VMRUNUX1VTRVINCj58IEluZGV4KSwgU3RhcnRPcENvZGVIYW5k bGUpOw0KPi0gICAgfQ0KPi0gICAgSW5kZXgrKzsNCj4tICB9DQo+LQ0KPi0gIEhpaVVwZGF0ZUZv cm0gKA0KPi0gICAgbUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCAvLyBISUkgaGFuZGxlDQo+LSAg ICAmZ1VzZXJQcm9maWxlTWFuYWdlckd1aWQsIC8vIEZvcm1zZXQgR1VJRA0KPi0gICAgRk9STUlE X01PRElGWV9VU0VSLCAgICAgICAvLyBGb3JtIElEDQo+LSAgICBTdGFydE9wQ29kZUhhbmRsZSwg ICAgICAgIC8vIExhYmVsIGZvciB3aGVyZSB0byBpbnNlcnQgb3Bjb2Rlcw0KPi0gICAgRW5kT3BD b2RlSGFuZGxlICAgICAgICAgICAvLyBSZXBsYWNlIGRhdGENCj4tICAgICk7DQo+LQ0KPi0gIEhp aUZyZWVPcENvZGVIYW5kbGUgKFN0YXJ0T3BDb2RlSGFuZGxlKTsNCj4tICBIaWlGcmVlT3BDb2Rl SGFuZGxlIChFbmRPcENvZGVIYW5kbGUpOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgR2V0IGFs bCB0aGUgdXNlciBpbmZvIGZyb20gbU1vZGlmeVVzZXIgaW4gdGhlIHVzZXIgbWFuYWdlciwgYW5k IHNhdmUgb24NCj50aGUNCj4tICBnbG9iYWwgdmFyaWFibGUuDQo+LQ0KPi0qKi8NCj4tVk9JRA0K Pi1HZXRBbGxVc2VySW5mbyAoDQo+LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMg ICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX1VTRVJfSU5GT19IQU5ETEUgIFVzZXJJbmZvOw0K Pi0gIEVGSV9VU0VSX0lORk8gICAgICAgICAqSW5mbzsNCj4tICBVSU5UTiAgICAgICAgICAgICAg ICAgSW5mb1NpemU7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgIE1lbVNpemU7DQo+LSAgVUlO VE4gICAgICAgICAgICAgICAgIERhdGFMZW47DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5pdCB2YXJp YWJsZSB0byBkZWZhdWx0IHZhbHVlLg0KPi0gIC8vDQo+LSAgbVByb3ZpZGVyQ2hvaWNlICAgICAg ICAgICAgICAgICAgID0gMDsNCj4tICBtQ29ubmNldExvZ2ljYWwgICAgICAgICAgICAgICAgICAg PSAwOw0KPi0NCj4tICBtVXNlckluZm8uQ3JlYXRlRGF0ZUV4aXN0ICAgICAgICAgPSBGQUxTRTsN Cj4tICBtVXNlckluZm8uVXNhZ2VEYXRlRXhpc3QgICAgICAgICAgPSBGQUxTRTsNCj4tICBtVXNl ckluZm8uVXNhZ2VDb3VudCAgICAgICAgICAgICAgPSAwOw0KPi0NCj4tICBtVXNlckluZm8uQWNj ZXNzUG9saWN5TGVuICAgICAgICAgPSAwOw0KPi0gIG1Vc2VySW5mby5BY2Nlc3NQb2xpY3lNb2Rp ZmllZCAgICA9IEZBTFNFOw0KPi0gIGlmIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICE9IE5VTEwp IHsNCj4tICAgIEZyZWVQb29sIChtVXNlckluZm8uQWNjZXNzUG9saWN5KTsNCj4tICAgIG1Vc2Vy SW5mby5BY2Nlc3NQb2xpY3kgPSBOVUxMOw0KPi0gIH0NCj4tICBtVXNlckluZm8uSWRlbnRpdHlQ b2xpY3lMZW4gICAgICAgPSAwOw0KPi0gIG1Vc2VySW5mby5JZGVudGl0eVBvbGljeU1vZGlmaWVk ICA9IEZBTFNFOw0KPi0gIGlmIChtVXNlckluZm8uSWRlbnRpdHlQb2xpY3kgIT0gTlVMTCkgew0K Pi0gICAgRnJlZVBvb2wgKG1Vc2VySW5mby5JZGVudGl0eVBvbGljeSk7DQo+LSAgICBtVXNlcklu Zm8uSWRlbnRpdHlQb2xpY3kgPSBOVUxMOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBBbGxv Y2F0ZSB1c2VyIGluZm9ybWF0aW9uIG1lbW9yeS4NCj4tICAvLw0KPi0gIE1lbVNpemUgPSBzaXpl b2YgKEVGSV9VU0VSX0lORk8pICsgNjM7DQo+LSAgSW5mbyAgICA9IEFsbG9jYXRlWmVyb1Bvb2wg KE1lbVNpemUpOw0KPi0gIGlmIChJbmZvID09IE5VTEwpIHsNCj4tICAgIHJldHVybiA7DQo+LSAg fQ0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCBlYWNoIHVzZXIgaW5mb3JtYXRpb24uDQo+LSAgLy8N Cj4tICBVc2VySW5mbyA9IE5VTEw7DQo+LSAgd2hpbGUgKFRSVUUpIHsNCj4tICAgIFN0YXR1cyA9 IG1Vc2VyTWFuYWdlci0+R2V0TmV4dEluZm8gKG1Vc2VyTWFuYWdlciwgbU1vZGlmeVVzZXIsDQo+ JlVzZXJJbmZvKTsNCj4tICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4tICAgICAgYnJl YWs7DQo+LSAgICB9DQo+LSAgICAvLw0KPi0gICAgLy8gR2V0IGluZm9ybWF0aW9uLg0KPi0gICAg Ly8NCj4tICAgIEluZm9TaXplICA9IE1lbVNpemU7DQo+LSAgICBTdGF0dXMgICAgPSBtVXNlck1h bmFnZXItPkdldEluZm8gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vy TWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTW9kaWZ5VXNlciwN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbmZvLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZJbmZvU2l6ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ LSAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+LSAgICAgIE1lbVNp emUgPSBJbmZvU2l6ZTsNCj4tICAgICAgRnJlZVBvb2wgKEluZm8pOw0KPi0gICAgICBJbmZvID0g QWxsb2NhdGVaZXJvUG9vbCAoTWVtU2l6ZSk7DQo+LSAgICAgIGlmIChJbmZvID09IE5VTEwpIHsN Cj4tICAgICAgICByZXR1cm4gOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICBTdGF0dXMgPSBtVXNl ck1hbmFnZXItPkdldEluZm8gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVz ZXJNYW5hZ2VyLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1vZGlmeVVzZXIs DQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEluZm8sDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmSW5mb1NpemUNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAg ICB9DQo+LQ0KPi0gICAgaWYgKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgew0KPi0gICAgICAvLw0K Pi0gICAgICAvLyBEZWFsIHdpdGggZWFjaCBpbmZvcm1hdGlvbiBhY2NvcmRpbmcgdG8gaW5mb3Jt YWl0b24gdHlwZS4NCj4tICAgICAgLy8NCj4tICAgICAgRGF0YUxlbiA9IEluZm8tPkluZm9TaXpl IC0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKTsNCj4tICAgICAgc3dpdGNoIChJbmZvLT5JbmZvVHlw ZSkgew0KPi0gICAgICBjYXNlIEVGSV9VU0VSX0lORk9fTkFNRV9SRUNPUkQ6DQo+LSAgICAgICAg Q29weU1lbSAoJm1Vc2VySW5mby5Vc2VyTmFtZSwgKFVJTlQ4ICopIChJbmZvICsgMSksIERhdGFM ZW4pOw0KPi0gICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgY2FzZSBFRklfVVNFUl9JTkZPX0NS RUFURV9EQVRFX1JFQ09SRDoNCj4tICAgICAgICBDb3B5TWVtICgmbVVzZXJJbmZvLkNyZWF0ZURh dGUsIChVSU5UOCAqKSAoSW5mbyArIDEpLCBEYXRhTGVuKTsNCj4tICAgICAgICBtVXNlckluZm8u Q3JlYXRlRGF0ZUV4aXN0ID0gVFJVRTsNCj4tICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgIGNh c2UgRUZJX1VTRVJfSU5GT19VU0FHRV9EQVRFX1JFQ09SRDoNCj4tICAgICAgICBDb3B5TWVtICgm bVVzZXJJbmZvLlVzYWdlRGF0ZSwgKFVJTlQ4ICopIChJbmZvICsgMSksIERhdGFMZW4pOw0KPi0g ICAgICAgIG1Vc2VySW5mby5Vc2FnZURhdGVFeGlzdCA9IFRSVUU7DQo+LSAgICAgICAgYnJlYWs7 DQo+LQ0KPi0gICAgICBjYXNlIEVGSV9VU0VSX0lORk9fVVNBR0VfQ09VTlRfUkVDT1JEOg0KPi0g ICAgICAgIENvcHlNZW0gKCZtVXNlckluZm8uVXNhZ2VDb3VudCwgKFVJTlQ4ICopIChJbmZvICsg MSksIERhdGFMZW4pOw0KPi0gICAgICAgIGJyZWFrOw0KPi0NCj4tICAgICAgY2FzZSBFRklfVVNF Ul9JTkZPX0FDQ0VTU19QT0xJQ1lfUkVDT1JEOg0KPi0gICAgICAgIG1Vc2VySW5mby5BY2Nlc3NQ b2xpY3kgPSBBbGxvY2F0ZVplcm9Qb29sIChEYXRhTGVuKTsNCj4tICAgICAgICBpZiAobVVzZXJJ bmZvLkFjY2Vzc1BvbGljeSA9PSBOVUxMKSB7DQo+LSAgICAgICAgICBicmVhazsNCj4tICAgICAg ICB9DQo+LQ0KPi0gICAgICAgIENvcHlNZW0gKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3ksIChVSU5U OCAqKSAoSW5mbyArIDEpLCBEYXRhTGVuKTsNCj4tICAgICAgICBtVXNlckluZm8uQWNjZXNzUG9s aWN5TGVuID0gRGF0YUxlbjsNCj4tICAgICAgICBicmVhazsNCj4tDQo+LSAgICAgIGNhc2UgRUZJ X1VTRVJfSU5GT19JREVOVElUWV9QT0xJQ1lfUkVDT1JEOg0KPi0gICAgICAgIG1Vc2VySW5mby5J ZGVudGl0eVBvbGljeSA9IEFsbG9jYXRlWmVyb1Bvb2wgKERhdGFMZW4pOw0KPi0gICAgICAgIGlm IChtVXNlckluZm8uSWRlbnRpdHlQb2xpY3kgPT0gTlVMTCkgew0KPi0gICAgICAgICAgYnJlYWs7 DQo+LSAgICAgICAgfQ0KPi0NCj4tICAgICAgICBDb3B5TWVtIChtVXNlckluZm8uSWRlbnRpdHlQ b2xpY3ksIChVSU5UOCAqKSAoSW5mbyArIDEpLCBEYXRhTGVuKTsNCj4tICAgICAgICBtVXNlcklu Zm8uSWRlbnRpdHlQb2xpY3lMZW4gPSBEYXRhTGVuOw0KPi0gICAgICAgIGJyZWFrOw0KPi0NCj4t ICAgICAgZGVmYXVsdDoNCj4tICAgICAgICBicmVhazsNCj4tICAgICAgfQ0KPi0gICAgfQ0KPi0g IH0NCj4tICBGcmVlUG9vbCAoSW5mbyk7DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBDb252ZXJ0 IHRoZSBEYXRlIHRvIGEgc3RyaW5nLCBhbmQgdXBkYXRlIHRoZSBIaWkgZGF0YWJhc2UgRGF0ZUlE IHN0cmluZyB3aXRoDQo+aXQuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gRGF0ZSAgICAgICBQb2ludHMg dG8gdGhlIGRhdGUgdG8gYmUgY29udmVydGVkLg0KPi0gIEBwYXJhbVtpbl0gRGF0ZUlkICAgICBT dHJpbmcgSUQgaW4gdGhlIEhJSSBkYXRhYmFzZSB0byBiZSByZXBsYWNlZC4NCj4tDQo+LSoqLw0K Pi1WT0lEDQo+LVJlc29sdmVEYXRlICgNCj4tICBJTiBFRklfVElNRSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKkRhdGUsDQo+LSAgSU4gRUZJX1NUUklOR19JRCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERhdGVJZA0KPi0gICkNCj4tew0KPi0gIENIQVIxNiAgKlN0cjsN Cj4tICBVSU5UTiAgIERhdGVCdWZMZW47DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQ29udmVydCBkYXRl IHRvIHN0cmluZy4NCj4tICAvLw0KPi0gIERhdGVCdWZMZW4gPSA2NDsNCj4tICBTdHIgICAgICAg ID0gQWxsb2NhdGVaZXJvUG9vbCAoRGF0ZUJ1Zkxlbik7DQo+LSAgaWYgKFN0ciA9PSBOVUxMKSB7 DQo+LSAgICByZXR1cm4gOw0KPi0gIH0NCj4tDQo+LSAgVW5pY29kZVNQcmludCAoDQo+LSAgICBT dHIsDQo+LSAgICBEYXRlQnVmTGVuLA0KPi0gICAgTCIlNGQtJTJkLSUyZCAiLA0KPi0gICAgRGF0 ZS0+WWVhciwNCj4tICAgIERhdGUtPk1vbnRoLA0KPi0gICAgRGF0ZS0+RGF5DQo+LSAgICApOw0K Pi0NCj4tICAvLw0KPi0gIC8vIENvbnZlcnQgdGltZSB0byBzdHJpbmcuDQo+LSAgLy8NCj4tICBE YXRlQnVmTGVuIC09IFN0ckxlbiAoU3RyKTsNCj4tICBVbmljb2RlU1ByaW50ICgNCj4tICAgIFN0 ciArIFN0ckxlbiAoU3RyKSwNCj4tICAgIERhdGVCdWZMZW4sDQo+LSAgICBMIiUyZDolMmQ6JTJk IiwNCj4tICAgIERhdGUtPkhvdXIsDQo+LSAgICBEYXRlLT5NaW51dGUsDQo+LSAgICBEYXRlLT5T ZWNvbmQNCj4tICAgICk7DQo+LQ0KPi0gIEhpaVNldFN0cmluZyAobUNhbGxiYWNrSW5mby0+SGlp SGFuZGxlLCBEYXRlSWQsIFN0ciwgTlVMTCk7DQo+LSAgRnJlZVBvb2wgKFN0cik7DQo+LX0NCj4t DQo+LQ0KPi0vKioNCj4tICBDb252ZXJ0IHRoZSBDb3VudFZhbCB0byBhIHN0cmluZywgYW5kIHVw ZGF0ZSB0aGUgSGlpIGRhdGFiYXNlIENvdW50SWQgc3RyaW5nDQo+LSAgd2l0aCBpdC4NCj4tDQo+ LSAgQHBhcmFtW2luXSAgQ291bnRWYWwgICBUaGUgaGV4IHZhbHVlIHRvIGNvbnZlcnQuDQo+LSAg QHBhcmFtW2luXSAgQ291bnRJZCAgICBTdHJpbmcgSUQgaW4gdGhlIEhJSSBkYXRhYmFzZSB0byBi ZSByZXBsYWNlZC4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LVJlc29sdmVDb3VudCAoDQo+LSAgSU4g VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50VmFsLA0KPi0g IElOIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudElkDQo+ LSAgKQ0KPi17DQo+LSAgQ0hBUjE2ICBDb3VudFsxMF07DQo+LQ0KPi0gIFVuaWNvZGVTUHJpbnQg KENvdW50LCAyMCwgTCIlZCIsIENvdW50VmFsKTsNCj4tICBIaWlTZXRTdHJpbmcgKG1DYWxsYmFj a0luZm8tPkhpaUhhbmRsZSwgQ291bnRJZCwgQ291bnQsIE5VTEwpOw0KPi19DQo+LQ0KPi0NCj4t LyoqDQo+LSAgQ29uY2F0ZW5hdGVzIG9uZSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcg dG8gYW5vdGhlciBOdWxsLQ0KPnRlcm1pbmF0ZWQNCj4tICBVbmljb2RlIHN0cmluZy4NCj4tDQo+ LSAgQHBhcmFtW2luLCBvdXRdICBTb3VyY2UxICAgICAgT24gZW50cnksIHBvaW50IHRvIGEgTnVs bC10ZXJtaW5hdGVkIFVuaWNvZGUNCj5zdHJpbmcuDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT24gZXhpdCwgcG9pbnQgdG8gYSBuZXcgY29uY2F0ZW5hdGVkIFVuaWNvZGUgc3Ry aW5nDQo+LSAgQHBhcmFtW2luXSAgICAgICBTb3VyY2UyICAgICAgUG9pbnRlciB0byBhIE51bGwt dGVybWluYXRlZCBVbmljb2RlIHN0cmluZy4NCj4tDQo+LSoqLw0KPi1WT0lEDQo+LUFkZFN0ciAo DQo+LSAgSU4gT1VUICBDSEFSMTYgICAgICAgICAgICAgICAgICAqKlNvdXJjZTEsDQo+LSAgSU4g ICAgICBDT05TVCBDSEFSMTYgICAgICAgICAgICAqU291cmNlMg0KPi0gICkNCj4tew0KPi0gIENI QVIxNiAgICAgICAgICAgICAgICAgICAgICAgICpUbXBTdHI7DQo+LSAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgU3RyTGVuZ3RoOw0KPi0NCj4tICBBU1NFUlQgKFNvdXJjZTEgIT0gTlVM TCk7DQo+LSAgQVNTRVJUIChTb3VyY2UyICE9IE5VTEwpOw0KPi0NCj4tICBpZiAoKlNvdXJjZTEg PT0gTlVMTCkgew0KPi0gICAgU3RyTGVuZ3RoID0gU3RyU2l6ZSAoU291cmNlMik7DQo+LSAgfSBl bHNlIHsNCj4tICAgIFN0ckxlbmd0aCAgPSBTdHJTaXplICgqU291cmNlMSk7DQo+LSAgICBTdHJM ZW5ndGggKz0gU3RyU2l6ZSAoU291cmNlMikgLSAyOw0KPi0gIH0NCj4tDQo+LSAgVG1wU3RyICAg ICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFN0ckxlbmd0aCk7DQo+LSAgQVNTRVJUIChUbXBTdHIgIT0g TlVMTCk7DQo+LQ0KPi0gIGlmICgqU291cmNlMSA9PSBOVUxMKSB7DQo+LSAgICBTdHJDcHlTIChU bXBTdHIsIFN0ckxlbmd0aCAvIHNpemVvZiAoQ0hBUjE2KSwgU291cmNlMik7DQo+LSAgfSBlbHNl IHsNCj4tICAgIFN0ckNweVMgKFRtcFN0ciwgU3RyTGVuZ3RoIC8gc2l6ZW9mIChDSEFSMTYpLCAq U291cmNlMSk7DQo+LSAgICBGcmVlUG9vbCAoKlNvdXJjZTEpOw0KPi0gICAgU3RyQ2F0UyAoVG1w U3RyLCBTdHJMZW5ndGggLyBzaXplb2YgKENIQVIxNiksU291cmNlMik7DQo+LSAgfQ0KPi0NCj4t ICAqU291cmNlMSA9IFRtcFN0cjsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIENvbnZlcnQgdGhl IGlkZW50aXR5IHBvbGljeSB0byBhIHVuaWNvZGUgc3RyaW5nIGFuZCB1cGRhdGUgdGhlIEhpaSBk YXRhYmFzZQ0KPi0gIElwU3RyaW5nSWQgc3RyaW5nIHdpdGggaXQuDQo+LQ0KPi0gIEBwYXJhbVtp bl0gIElwICAgICAgICAgUG9pbnRzIHRvIGlkZW50aXR5IHBvbGljeS4NCj4tICBAcGFyYW1baW5d ICBJcExlbiAgICAgIFRoZSBpZGVudGl0eSBwb2xpY3kgbGVuZ3RoLg0KPi0gIEBwYXJhbVtpbl0g IElwU3RyaW5nSWQgU3RyaW5nIElEIGluIHRoZSBISUkgZGF0YWJhc2UgdG8gYmUgcmVwbGFjZWQu DQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1SZXNvbHZlSWRlbnRpdHlQb2xpY3kgKA0KPi0gIElOICBV SU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSXAsDQo+LSAgSU4gIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElwTGVuLA0KPi0gIElOICBF RklfU1RSSU5HX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJcFN0cmluZ0lkDQo+LSAg KQ0KPi17DQo+LSAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgKlRtcFN0cjsNCj4tICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBDaGtMZW47DQo+LSAgRUZJX1VTRVJfSU5GT19J REVOVElUWV9QT0xJQ1kgKklkZW50aXR5Ow0KPi0gIFVJTlQxNiAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4Ow0KPi0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICpQcm92U3RyOw0K Pi0gIEVGSV9TVFJJTkdfSUQgICAgICAgICAgICAgICAgIFByb3ZJZDsNCj4tICBFRklfSElJX0hB TkRMRSAgICAgICAgICAgICAgICBIaWlIYW5kbGU7DQo+LSAgRUZJX1VTRVJfQ1JFREVOVElBTDJf UFJPVE9DT0wgKlVzZXJDcmVkZW50aWFsOw0KPi0NCj4tICBUbXBTdHIgPSBOVUxMOw0KPi0NCj4t ICAvLw0KPi0gIC8vIFJlc29sdmUgZWFjaCBwb2xpY3kuDQo+LSAgLy8NCj4tICBDaGtMZW4gID0g MDsNCj4tICB3aGlsZSAoQ2hrTGVuIDwgSXBMZW4pIHsNCj4tICAgIElkZW50aXR5ID0gKEVGSV9V U0VSX0lORk9fSURFTlRJVFlfUE9MSUNZICopIChJcCArIENoa0xlbik7DQo+LSAgICBzd2l0Y2gg KElkZW50aXR5LT5UeXBlKSB7DQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfRkFM U0U6DQo+LSAgICAgIEFkZFN0ciAoJlRtcFN0ciwgTCJGYWxzZSIpOw0KPi0gICAgICBicmVhazsN Cj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfVFJVRToNCj4tICAgICAgQWRk U3RyICgmVG1wU3RyLCBMIk5vbmUiKTsNCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgY2FzZSBF RklfVVNFUl9JTkZPX0lERU5USVRZX05PVDoNCj4tICAgICAgQWRkU3RyICgmVG1wU3RyLCBMIiEg Iik7DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElU WV9BTkQ6DQo+LSAgICAgIEFkZFN0ciAoJlRtcFN0ciwgTCIgJiYgIik7DQo+LSAgICAgIGJyZWFr Ow0KPi0NCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19JREVOVElUWV9PUjoNCj4tICAgICAgQWRk U3RyICgmVG1wU3RyLCBMIiB8fCAiKTsNCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgY2FzZSBF RklfVVNFUl9JTkZPX0lERU5USVRZX0NSRURFTlRJQUxfVFlQRToNCj4tICAgICAgZm9yIChJbmRl eCA9IDA7IEluZGV4IDwgbVByb3ZpZGVySW5mby0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgICAg ICBVc2VyQ3JlZGVudGlhbCA9IG1Qcm92aWRlckluZm8tPlByb3ZpZGVyW0luZGV4XTsNCj4tICAg ICAgICBpZiAoQ29tcGFyZUd1aWQgKChFRklfR1VJRCAqKSAoSWRlbnRpdHkgKyAxKSwgJlVzZXJD cmVkZW50aWFsLT5UeXBlKSkgew0KPi0gICAgICAgICAgVXNlckNyZWRlbnRpYWwtPlRpdGxlICgN Cj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJDcmVkZW50aWFsLA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgJkhpaUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZQcm92SWQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAg ICAgICBQcm92U3RyID0gSGlpR2V0U3RyaW5nIChIaWlIYW5kbGUsIFByb3ZJZCwgTlVMTCk7DQo+ LSAgICAgICAgICBpZiAoUHJvdlN0ciAhPSBOVUxMKSB7DQo+LSAgICAgICAgICAgIEFkZFN0ciAo JlRtcFN0ciwgUHJvdlN0cik7DQo+LSAgICAgICAgICAgIEZyZWVQb29sIChQcm92U3RyKTsNCj4t ICAgICAgICAgIH0NCj4tICAgICAgICAgIGJyZWFrOw0KPi0gICAgICAgIH0NCj4tICAgICAgfQ0K Pi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fSURFTlRJVFlfQ1JF REVOVElBTF9QUk9WSURFUjoNCj4tICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVByb3Zp ZGVySW5mby0+Q291bnQ7IEluZGV4KyspIHsNCj4tICAgICAgICBVc2VyQ3JlZGVudGlhbCA9IG1Q cm92aWRlckluZm8tPlByb3ZpZGVyW0luZGV4XTsNCj4tICAgICAgICBpZiAoQ29tcGFyZUd1aWQg KChFRklfR1VJRCAqKSAoSWRlbnRpdHkgKyAxKSwgJlVzZXJDcmVkZW50aWFsLQ0KPj5JZGVudGlm aWVyKSkgew0KPi0gICAgICAgICAgVXNlckNyZWRlbnRpYWwtPlRpdGxlICgNCj4tICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFVzZXJDcmVkZW50aWFsLA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgJkhpaUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm92 SWQNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAgICAgICBQcm92U3Ry ID0gSGlpR2V0U3RyaW5nIChIaWlIYW5kbGUsIFByb3ZJZCwgTlVMTCk7DQo+LSAgICAgICAgICBp ZiAoUHJvdlN0ciAhPSBOVUxMKSB7DQo+LSAgICAgICAgICAgIEFkZFN0ciAoJlRtcFN0ciwgUHJv dlN0cik7DQo+LSAgICAgICAgICAgIEZyZWVQb29sIChQcm92U3RyKTsNCj4tICAgICAgICAgIH0N Cj4tICAgICAgICAgIGJyZWFrOw0KPi0gICAgICAgIH0NCj4tICAgICAgfQ0KPi0gICAgICBicmVh azsNCj4tICAgIH0NCj4tDQo+LSAgICBDaGtMZW4gKz0gSWRlbnRpdHktPkxlbmd0aDsNCj4tICB9 DQo+LQ0KPi0gIGlmIChUbXBTdHIgIT0gTlVMTCkgew0KPi0gICAgSGlpU2V0U3RyaW5nIChtQ2Fs bGJhY2tJbmZvLT5IaWlIYW5kbGUsIElwU3RyaW5nSWQsIFRtcFN0ciwgTlVMTCk7DQo+LSAgICBG cmVlUG9vbCAoVG1wU3RyKTsNCj4tICB9DQo+LX0NCj4tDQo+LQ0KPi0vKioNCj4tICBEaXNwbGF5 IG1vZGlmeSB1c2VyIGluZm9ybWF0aW9uIGZvcm0uDQo+LQ0KPi0gIFRoaXMgZm9ybSBkaXNwbGF5 cywgdXNlcm5hbWUsIGNyZWF0ZSBEYXRlLCB1c2FnZSBkYXRlLCB1c2FnZSBjb3VudCwgaWRlbnRp dHkNCj5wb2xpY3ksDQo+LSAgYW5kIGFjY2VzcyBwb2xpY3kuDQo+LQ0KPi0gIEBwYXJhbVtpbl0g VXNlckluZGV4ICAgICAgIFRoZSBpbmRleCBvZiB0aGUgdXNlciBpbiBkaXNwbGF5IGxpc3QgdG8g bW9kaWZ5Lg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tTW9kaWZ5VXNlckluZm8gKA0KPi0gIElOIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5kZXgNCj4tICAp DQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgU3RhdHVzOw0KPi0gIEVGSV9VU0VS X1BST0ZJTEVfSEFORExFICBDdXJyZW50VXNlcjsNCj4tICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgQ3VycmVudEFjY2Vzc1JpZ2h0Ow0KPi0gIFZPSUQgICAgICAgICAgICAgICAgICAgICAqU3Rh cnRPcENvZGVIYW5kbGU7DQo+LSAgVk9JRCAgICAgICAgICAgICAgICAgICAgICpFbmRPcENvZGVI YW5kbGU7DQo+LSAgRUZJX0lGUl9HVUlEX0xBQkVMICAgICAgICpTdGFydExhYmVsOw0KPi0gIEVG SV9JRlJfR1VJRF9MQUJFTCAgICAgICAqRW5kTGFiZWw7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gSW5p dGlhbGl6ZSB0aGUgY29udGFpbmVyIGZvciBkeW5hbWljIG9wY29kZXMuDQo+LSAgLy8NCj4tICBT dGFydE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gIEFTU0VS VCAoU3RhcnRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+LQ0KPi0gIEVuZE9wQ29kZUhhbmRsZSA9 IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gIEFTU0VSVCAoRW5kT3BDb2RlSGFuZGxl ICE9IE5VTEwpOw0KPi0NCj4tICAvLw0KPi0gIC8vIENyZWF0ZSBIaWkgRXh0ZW5kIExhYmVsIE9w Q29kZS4NCj4tICAvLw0KPi0gIFN0YXJ0TGFiZWwgPSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhp aUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU3RhcnRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgU3RhcnRMYWJlbC0+RXh0ZW5kT3BDb2RlICA9 IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPi0gIFN0YXJ0TGFiZWwtPk51bWJlciAgICAgICAg PSBMQUJFTF9VU0VSX0lORk9fRlVOQzsNCj4tDQo+LSAgRW5kTGFiZWwgPSAoRUZJX0lGUl9HVUlE X0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVuZE9wQ29kZUhhbmRsZSwNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgRW5kTGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBF RklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICBFbmRMYWJlbC0+TnVtYmVyICAgICAgICA9IExB QkVMX0VORDsNCj4tDQo+LSAgLy8NCj4tICAvLyBGaW5kIHRoZSB1c2VyIHByb2ZpbGUgdG8gYmUg bW9kaWZpZWQuDQo+LSAgLy8NCj4tICBtTW9kaWZ5VXNlciA9IE5VTEw7DQo+LSAgU3RhdHVzICAg ICAgPSBtVXNlck1hbmFnZXItPkdldE5leHQgKG1Vc2VyTWFuYWdlciwgJm1Nb2RpZnlVc2VyKTsN Cj4tICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICByZXR1cm4gOw0KPi0gIH0NCj4t DQo+LSAgd2hpbGUgKFVzZXJJbmRleCA+IDEpIHsNCj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdl ci0+R2V0TmV4dCAobVVzZXJNYW5hZ2VyLCAmbU1vZGlmeVVzZXIpOw0KPi0gICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICByZXR1cm4gOw0KPi0gICAgfQ0KPi0gICAgVXNlcklu ZGV4LS07DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEdldCB1c2VyIHByb2ZpbGUgaW5mb3Jt YXRpb24uDQo+LSAgLy8NCj4tICBHZXRBbGxVc2VySW5mbyAoKTsNCj4tDQo+LSAgLy8NCj4tICAv LyBVcGRhdGUgdXNlciBuYW1lLg0KPi0gIEhpaVNldFN0cmluZyAoDQo+LSAgICBtQ2FsbGJhY2tJ bmZvLT5IaWlIYW5kbGUsDQo+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9VU0VSX05BTUVfVkFMKSwN Cj4tICAgIG1Vc2VySW5mby5Vc2VyTmFtZSwNCj4tICAgIE5VTEwNCj4tICAgICk7DQo+LQ0KPi0g IC8vDQo+LSAgLy8gVXBkYXRlIGNyZWF0ZSBkYXRlLg0KPi0gIC8vDQo+LSAgaWYgKG1Vc2VySW5m by5DcmVhdGVEYXRlRXhpc3QpIHsNCj4tICAgIFJlc29sdmVEYXRlICgmbVVzZXJJbmZvLkNyZWF0 ZURhdGUsIFNUUklOR19UT0tFTg0KPihTVFJfQ1JFQVRFX0RBVEVfVkFMKSk7DQo+LSAgfSBlbHNl IHsNCj4tICAgIEhpaVNldFN0cmluZyAoDQo+LSAgICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRs ZSwNCj4tICAgICAgU1RSSU5HX1RPS0VOIChTVFJfQ1JFQVRFX0RBVEVfVkFMKSwNCj4tICAgICAg TCIiLA0KPi0gICAgICBOVUxMDQo+LSAgICAgICk7DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8v IEFkZCB1c2FnZSBkYXRlLg0KPi0gIC8vDQo+LSAgaWYgKG1Vc2VySW5mby5Vc2FnZURhdGVFeGlz dCkgew0KPi0gICAgUmVzb2x2ZURhdGUgKCZtVXNlckluZm8uVXNhZ2VEYXRlLCBTVFJJTkdfVE9L RU4NCj4oU1RSX1VTQUdFX0RBVEVfVkFMKSk7DQo+LSAgfSBlbHNlIHsNCj4tICAgIEhpaVNldFN0 cmluZyAoDQo+LSAgICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwNCj4tICAgICAgU1RSSU5H X1RPS0VOIChTVFJfVVNBR0VfREFURV9WQUwpLA0KPi0gICAgICBMIiIsDQo+LSAgICAgIE5VTEwN Cj4tICAgICAgKTsNCj4tICB9DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWRkIHVzYWdlIGNvdW50Lg0K Pi0gIC8vDQo+LSAgUmVzb2x2ZUNvdW50ICgoVUlOVDMyKSBtVXNlckluZm8uVXNhZ2VDb3VudCwg U1RSSU5HX1RPS0VODQo+KFNUUl9VU0FHRV9DT1VOVF9WQUwpKTsNCj4tDQo+LSAgLy8NCj4tICAv LyBBZGQgaWRlbnRpdHkgcG9saWN5Lg0KPi0gIC8vDQo+LSAgbVVzZXJNYW5hZ2VyLT5DdXJyZW50 IChtVXNlck1hbmFnZXIsICZDdXJyZW50VXNlcik7DQo+LSAgaWYgKG1Nb2RpZnlVc2VyID09IEN1 cnJlbnRVc2VyKSB7DQo+LSAgICBSZXNvbHZlSWRlbnRpdHlQb2xpY3kgKA0KPi0gICAgICBtVXNl ckluZm8uSWRlbnRpdHlQb2xpY3ksDQo+LSAgICAgIG1Vc2VySW5mby5JZGVudGl0eVBvbGljeUxl biwNCj4tICAgICAgU1RSSU5HX1RPS0VOIChTVFJfSURFTlRJRllfUE9MSUNZX1ZBTCkNCj4tICAg ICAgKTsNCj4tICAgIEhpaUNyZWF0ZUdvdG9PcENvZGUgKA0KPi0gICAgICBTdGFydE9wQ29kZUhh bmRsZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGFpbmVyIGZvciBv cGNvZGVzDQo+LSAgICAgIEZPUk1JRF9NT0RJRllfSVAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLyBUYXJnZXQgRm9ybSBJRA0KPi0gICAgICBTVFJJTkdfVE9LRU4gKFNUUl9J REVOVElGWV9QT0xJQ1kpLCAgICAgICAgICAgICAgICAgLy8gUHJvbXB0IHRleHQNCj4tICAgICAg U1RSSU5HX1RPS0VOIChTVFJfSURFTlRJRllfUE9MSUNZX1ZBTCksICAgICAgICAgICAgIC8vIEhl bHAgdGV4dA0KPi0gICAgICBFRklfSUZSX0ZMQUdfQ0FMTEJBQ0ssICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gUXVlc3Rpb24gZmxhZw0KPi0gICAgICBLRVlfTU9ESUZZX1VTRVIgfCBL RVlfU0VMRUNUX1VTRVIgfCBLRVlfTU9ESUZZX0lQICAgLy8gUXVlc3Rpb24NCj5JRA0KPi0gICAg ICApOw0KPi0gIH0NCj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgYWNjZXNzIHBvbGljeS4NCj4tICAv Lw0KPi0gIFN0YXR1cyA9IEdldEFjY2Vzc1JpZ2h0ICgmQ3VycmVudEFjY2Vzc1JpZ2h0KTsNCj4t ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBDdXJyZW50QWNjZXNzUmlnaHQgPSBF RklfVVNFUl9JTkZPX0FDQ0VTU19FTlJPTExfU0VMRjsNCj4tICB9DQo+LQ0KPi0gIGlmIChDdXJy ZW50QWNjZXNzUmlnaHQgPT0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFOQUdFKSB7DQo+LSAgICBI aWlDcmVhdGVHb3RvT3BDb2RlICgNCj4tICAgICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5lciBmb3Igb3Bjb2Rlcw0KPi0gICAg ICBGT1JNSURfTU9ESUZZX0FQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g VGFyZ2V0IEZvcm0gSUQNCj4tICAgICAgU1RSSU5HX1RPS0VOIChTVFJfQUNDRVNTX1BPTElDWSks ICAgICAgICAgICAgICAgICAgIC8vIFByb21wdCB0ZXh0DQo+LSAgICAgIFNUUklOR19UT0tFTiAo U1RSX05VTExfU1RSSU5HKSwgICAgICAgICAgICAgICAgICAgICAvLyBIZWxwIHRleHQNCj4tICAg ICAgRUZJX0lGUl9GTEFHX0NBTExCQUNLLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v IFF1ZXN0aW9uIGZsYWcNCj4tICAgICAgS0VZX01PRElGWV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VS IHwgS0VZX01PRElGWV9BUCAgIC8vIFF1ZXN0aW9uDQo+SUQNCj4tICAgICAgKTsNCj4tICB9DQo+ LQ0KPi0gIEhpaVVwZGF0ZUZvcm0gKA0KPi0gICAgbUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSElJIGhhbmRsZQ0KPi0gICAgJmdVc2VyUHJv ZmlsZU1hbmFnZXJHdWlkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9ybXNldCBH VUlEDQo+LSAgICBGT1JNSURfVVNFUl9JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBGb3JtIElEDQo+LSAgICBTdGFydE9wQ29kZUhhbmRsZSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLyBMYWJlbA0KPi0gICAgRW5kT3BDb2RlSGFuZGxlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBkYXRhDQo+LSAg ICApOw0KPi0NCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChTdGFydE9wQ29kZUhhbmRsZSk7DQo+ LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRW5kT3BDb2RlSGFuZGxlKTsNCj4tfQ0KPi0NCj4tDQo+ LS8qKg0KPi0gIEdldCBhbGwgdGhlIGFjY2VzcyBwb2xpY3kgaW5mbyBmcm9tIGN1cnJlbnQgdXNl ciBpbmZvLCBhbmQgc2F2ZSBpbiB0aGUgZ2xvYmFsDQo+LSAgdmFyaWFibGUuDQo+LQ0KPi0qKi8N Cj4tVk9JRA0KPi1SZXNvbHZlQWNjZXNzUG9saWN5ICgNCj4tICBWT0lEDQo+LSAgKQ0KPi17DQo+ LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgT2ZmU2V0Ow0KPi0gIEVGSV9VU0VSX0lO Rk9fQUNDRVNTX0NPTlRST0wgIENvbnRyb2w7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgVmFsTGVuOw0KPi0gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICpBY2Nlc3NE YXRhOw0KPi0NCj4tICAvLw0KPi0gIC8vIFNldCBkZWZhdWx0IHZhbHVlDQo+LSAgLy8NCj4tICBt QWNjZXNzSW5mby5BY2Nlc3NSaWdodCAgICAgICA9IEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9M TF9TRUxGOw0KPi0gIG1BY2Nlc3NJbmZvLkFjY2Vzc1NldHVwICAgICAgID0gQUNDRVNTX1NFVFVQ X1JFU1RSSUNURUQ7DQo+LSAgbUFjY2Vzc0luZm8uQWNjZXNzQm9vdE9yZGVyICAgPQ0KPkVGSV9V U0VSX0lORk9fQUNDRVNTX0JPT1RfT1JERVJfSU5TRVJUOw0KPi0NCj4tICBtQWNjZXNzSW5mby5M b2FkUGVybWl0TGVuICAgICA9IDA7DQo+LSAgbUFjY2Vzc0luZm8uTG9hZEZvcmJpZExlbiAgICAg PSAwOw0KPi0gIG1BY2Nlc3NJbmZvLkNvbm5lY3RQZXJtaXRMZW4gID0gMDsNCj4tICBtQWNjZXNz SW5mby5Db25uZWN0Rm9yYmlkTGVuICA9IDA7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gR2V0IGVhY2gg dXNlciBhY2Nlc3MgcG9saWN5Lg0KPi0gIC8vDQo+LSAgT2ZmU2V0ID0gMDsNCj4tICB3aGlsZSAo T2ZmU2V0IDwgbVVzZXJJbmZvLkFjY2Vzc1BvbGljeUxlbikgew0KPi0gICAgQ29weU1lbSAoJkNv bnRyb2wsIG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZTZXQsIHNpemVvZiAoQ29udHJvbCkp Ow0KPi0gICAgVmFsTGVuID0gQ29udHJvbC5TaXplIC0gc2l6ZW9mIChDb250cm9sKTsNCj4tICAg IHN3aXRjaCAoQ29udHJvbC5UeXBlKSB7DQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNT X0VOUk9MTF9TRUxGOg0KPi0gICAgICBtQWNjZXNzSW5mby5BY2Nlc3NSaWdodCA9IEVGSV9VU0VS X0lORk9fQUNDRVNTX0VOUk9MTF9TRUxGOw0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNl IEVGSV9VU0VSX0lORk9fQUNDRVNTX0VOUk9MTF9PVEhFUlM6DQo+LSAgICAgIG1BY2Nlc3NJbmZv LkFjY2Vzc1JpZ2h0ID0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX09USEVSUzsNCj4tICAg ICAgYnJlYWs7DQo+LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19NQU5BR0U6DQo+ LSAgICAgIG1BY2Nlc3NJbmZvLkFjY2Vzc1JpZ2h0ID0gRUZJX1VTRVJfSU5GT19BQ0NFU1NfTUFO QUdFOw0KPi0gICAgICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNT X1NFVFVQOg0KPi0gICAgICBBY2Nlc3NEYXRhID0gbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9m ZlNldCArIHNpemVvZiAoQ29udHJvbCk7DQo+LSAgICAgIGlmIChDb21wYXJlR3VpZCAoKEVGSV9H VUlEICopIEFjY2Vzc0RhdGEsDQo+JmdFZmlVc2VySW5mb0FjY2Vzc1NldHVwTm9ybWFsR3VpZCkp IHsNCj4tICAgICAgICBtQWNjZXNzSW5mby5BY2Nlc3NTZXR1cCA9IEFDQ0VTU19TRVRVUF9OT1JN QUw7DQo+LSAgICAgIH0gZWxzZSBpZiAoQ29tcGFyZUd1aWQgKChFRklfR1VJRCAqKSBBY2Nlc3NE YXRhLA0KPiZnRWZpVXNlckluZm9BY2Nlc3NTZXR1cFJlc3RyaWN0ZWRHdWlkKSkgew0KPi0gICAg ICAgIG1BY2Nlc3NJbmZvLkFjY2Vzc1NldHVwID0gQUNDRVNTX1NFVFVQX1JFU1RSSUNURUQ7DQo+ LSAgICAgIH0gZWxzZSBpZiAoQ29tcGFyZUd1aWQgKChFRklfR1VJRCAqKSBBY2Nlc3NEYXRhLA0K PiZnRWZpVXNlckluZm9BY2Nlc3NTZXR1cEFkbWluR3VpZCkpIHsNCj4tICAgICAgICBtQWNjZXNz SW5mby5BY2Nlc3NTZXR1cCA9IEFDQ0VTU19TRVRVUF9BRE1JTjsNCj4tICAgICAgfQ0KPi0gICAg ICBicmVhazsNCj4tDQo+LSAgICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX0JPT1RfT1JERVI6 DQo+LSAgICAgIEFjY2Vzc0RhdGEgPSBtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0ICsg c2l6ZW9mIChDb250cm9sKTsNCj4tICAgICAgQ29weU1lbSAoJm1BY2Nlc3NJbmZvLkFjY2Vzc0Jv b3RPcmRlciwgQWNjZXNzRGF0YSwgc2l6ZW9mIChVSU5UMzIpKTsNCj4tICAgICAgYnJlYWs7DQo+ LQ0KPi0gICAgY2FzZSBFRklfVVNFUl9JTkZPX0FDQ0VTU19GT1JCSURfTE9BRDoNCj4tICAgICAg aWYgKG1BY2Nlc3NJbmZvLkxvYWRGb3JiaWQgIT0gTlVMTCkgew0KPi0gICAgICAgIEZyZWVQb29s IChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkKTsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAgbUFjY2Vz c0luZm8uTG9hZEZvcmJpZCA9IEFsbG9jYXRlWmVyb1Bvb2wgKFZhbExlbik7DQo+LSAgICAgIGlm IChtQWNjZXNzSW5mby5Mb2FkRm9yYmlkICE9IE5VTEwpIHsNCj4tICAgICAgICBBY2Nlc3NEYXRh ID0gbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCArIHNpemVvZiAoQ29udHJvbCk7DQo+ LSAgICAgICAgQ29weU1lbSAobUFjY2Vzc0luZm8uTG9hZEZvcmJpZCwgQWNjZXNzRGF0YSwgVmFs TGVuKTsNCj4tICAgICAgICBtQWNjZXNzSW5mby5Mb2FkRm9yYmlkTGVuID0gVmFsTGVuOw0KPi0g ICAgICB9DQo+LSAgICAgIGJyZWFrOw0KPi0NCj4tICAgIGNhc2UgRUZJX1VTRVJfSU5GT19BQ0NF U1NfUEVSTUlUX0xPQUQ6DQo+LSAgICAgIGlmIChtQWNjZXNzSW5mby5Mb2FkUGVybWl0ICE9IE5V TEwpIHsNCj4tICAgICAgICBGcmVlUG9vbCAobUFjY2Vzc0luZm8uTG9hZFBlcm1pdCk7DQo+LSAg ICAgIH0NCj4tDQo+LSAgICAgIG1BY2Nlc3NJbmZvLkxvYWRQZXJtaXQgPSBBbGxvY2F0ZVplcm9Q b29sIChWYWxMZW4pOw0KPi0gICAgICBpZiAobUFjY2Vzc0luZm8uTG9hZFBlcm1pdCAhPSBOVUxM KSB7DQo+LSAgICAgICAgQWNjZXNzRGF0YSA9IG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kgKyBPZmZT ZXQgKyBzaXplb2YgKENvbnRyb2wpOw0KPi0gICAgICAgIENvcHlNZW0gKG1BY2Nlc3NJbmZvLkxv YWRQZXJtaXQsIEFjY2Vzc0RhdGEsIFZhbExlbik7DQo+LSAgICAgICAgbUFjY2Vzc0luZm8uTG9h ZFBlcm1pdExlbiA9IFZhbExlbjsNCj4tICAgICAgfQ0KPi0gICAgICBicmVhazsNCj4tDQo+LSAg ICBjYXNlIEVGSV9VU0VSX0lORk9fQUNDRVNTX0ZPUkJJRF9DT05ORUNUOg0KPi0gICAgICBpZiAo bUFjY2Vzc0luZm8uQ29ubmVjdEZvcmJpZCAhPSBOVUxMKSB7DQo+LSAgICAgICAgRnJlZVBvb2wg KG1BY2Nlc3NJbmZvLkNvbm5lY3RGb3JiaWQpOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICBtQWNj ZXNzSW5mby5Db25uZWN0Rm9yYmlkID0gQWxsb2NhdGVaZXJvUG9vbCAoVmFsTGVuKTsNCj4tICAg ICAgaWYgKG1BY2Nlc3NJbmZvLkNvbm5lY3RGb3JiaWQgIT0gTlVMTCkgew0KPi0gICAgICAgIEFj Y2Vzc0RhdGEgPSBtVXNlckluZm8uQWNjZXNzUG9saWN5ICsgT2ZmU2V0ICsgc2l6ZW9mIChDb250 cm9sKTsNCj4tICAgICAgICBDb3B5TWVtIChtQWNjZXNzSW5mby5Db25uZWN0Rm9yYmlkLCBBY2Nl c3NEYXRhLCBWYWxMZW4pOw0KPi0gICAgICAgIG1BY2Nlc3NJbmZvLkNvbm5lY3RGb3JiaWRMZW4g PSBWYWxMZW47DQo+LSAgICAgIH0NCj4tICAgICAgYnJlYWs7DQo+LQ0KPi0gICAgY2FzZSBFRklf VVNFUl9JTkZPX0FDQ0VTU19QRVJNSVRfQ09OTkVDVDoNCj4tICAgICAgaWYgKG1BY2Nlc3NJbmZv LkNvbm5lY3RQZXJtaXQgIT0gTlVMTCkgew0KPi0gICAgICAgIEZyZWVQb29sIChtQWNjZXNzSW5m by5Db25uZWN0UGVybWl0KTsNCj4tICAgICAgfQ0KPi0NCj4tICAgICAgbUFjY2Vzc0luZm8uQ29u bmVjdFBlcm1pdCA9IEFsbG9jYXRlWmVyb1Bvb2wgKFZhbExlbik7DQo+LSAgICAgIGlmIChtQWNj ZXNzSW5mby5Db25uZWN0UGVybWl0ICE9IE5VTEwpIHsNCj4tICAgICAgICBBY2Nlc3NEYXRhID0g bVVzZXJJbmZvLkFjY2Vzc1BvbGljeSArIE9mZlNldCArIHNpemVvZiAoQ29udHJvbCk7DQo+LSAg ICAgICAgQ29weU1lbSAobUFjY2Vzc0luZm8uQ29ubmVjdFBlcm1pdCwgQWNjZXNzRGF0YSwgVmFs TGVuKTsNCj4tICAgICAgICBtQWNjZXNzSW5mby5Db25uZWN0UGVybWl0TGVuID0gVmFsTGVuOw0K Pi0gICAgICB9DQo+LSAgICAgIGJyZWFrOw0KPi0gICAgfQ0KPi0NCj4tICAgIE9mZlNldCArPSBD b250cm9sLlNpemU7DQo+LSAgfQ0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRmluZCB0aGUgc3Bl Y2lmaWVkIGluZm8gaW4gVXNlciBwcm9maWxlIGJ5IHRoZSBJbmZvVHlwZS4NCj4tDQo+LSAgQHBh cmFtW2luXSAgVXNlciAgICAgICAgIEhhbmRsZSBvZiB0aGUgdXNlciB3aG9zZSBpbmZvcm1hdGlv biB3aWxsIGJlDQo+c2VhcmNoZWQuDQo+LSAgQHBhcmFtW2luXSAgSW5mb1R5cGUgICAgIFRoZSB1 c2VyIGluZm9ybWF0aW9uIHR5cGUgdG8gZmluZC4NCj4tICBAcGFyYW1bb3V0XSBVc2VySW5mbyAg ICAgUG9pbnRzIHRvIHVzZXIgaW5mb3JtYXRpb24gaGFuZGxlIGZvdW5kLg0KPi0NCj4tICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgRmluZCB0aGUgdXNlciBpbmZvcm1hdGlvbiBzdWNjZXNzZnVs bHkuDQo+LSAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgIEZhaWwgdG8gZmluZCB0aGUgdXNlciBp bmZvcm1hdGlvbi4NCj4tDQo+LSoqLw0KPi1FRklfU1RBVFVTDQo+LUZpbmRJbmZvQnlUeXBlICgN Cj4tICBJTiAgRUZJX1VTRVJfUFJPRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICAgVXNlciwN Cj4tICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mb1R5 cGUsDQo+LSAgT1VUIEVGSV9VU0VSX0lORk9fSEFORExFICAgICAgICAgICAgICAgICAgICAgICpV c2VySW5mbw0KPi0gICkNCj4tew0KPi0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPi0gIEVGSV9V U0VSX0lORk8gKkluZm87DQo+LSAgVUlOVE4gICAgICAgICBJbmZvU2l6ZTsNCj4tICBVSU5UTiAg ICAgICAgIE1lbVNpemU7DQo+LQ0KPi0gIGlmIChVc2VySW5mbyA9PSBOVUxMKSB7DQo+LSAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPi0gIH0NCj4tDQo+LSAgKlVzZXJJbmZvID0g TlVMTDsNCj4tICAvLw0KPi0gIC8vIEFsbG9jYXRlIHVzZXIgaW5mb3JtYXRpb24gbWVtb3J5Lg0K Pi0gIC8vDQo+LSAgTWVtU2l6ZSA9IHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyA2MzsNCj4tICBJ bmZvICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoTWVtU2l6ZSk7DQo+LSAgaWYgKEluZm8gPT0gTlVM TCkgew0KPi0gICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPi0gIH0NCj4tDQo+LSAg Ly8NCj4tICAvLyBHZXQgZWFjaCB1c2VyIGluZm9ybWF0aW9uLg0KPi0gIC8vDQo+LSAgd2hpbGUg KFRSVUUpIHsNCj4tICAgIFN0YXR1cyA9IG1Vc2VyTWFuYWdlci0+R2V0TmV4dEluZm8gKG1Vc2Vy TWFuYWdlciwgVXNlciwgVXNlckluZm8pOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tICAgIC8vDQo+LSAgICAvLyBHZXQgaW5mb3Jt YXRpb24uDQo+LSAgICAvLw0KPi0gICAgSW5mb1NpemUgID0gTWVtU2l6ZTsNCj4tICAgIFN0YXR1 cyAgICA9IG1Vc2VyTWFuYWdlci0+R2V0SW5mbyAoDQo+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbVVzZXJNYW5hZ2VyLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVzZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlVzZXJJbmZvLA0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm8sDQo+LSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJkluZm9TaXplDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsNCj4tICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4tICAg ICAgTWVtU2l6ZSA9IEluZm9TaXplOw0KPi0gICAgICBGcmVlUG9vbCAoSW5mbyk7DQo+LSAgICAg IEluZm8gPSBBbGxvY2F0ZVplcm9Qb29sIChNZW1TaXplKTsNCj4tICAgICAgaWYgKEluZm8gPT0g TlVMTCkgew0KPi0gICAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4tICAgICAg fQ0KPi0gICAgICBTdGF0dXMgPSBtVXNlck1hbmFnZXItPkdldEluZm8gKA0KPi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLA0KPi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVXNlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpVc2Vy SW5mbywNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm8sDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmSW5mb1NpemUNCj4tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+LSAgICB9DQo+LSAgICBpZiAoU3RhdHVzID09IEVGSV9TVUNDRVNTKSB7 DQo+LSAgICAgIGlmIChJbmZvLT5JbmZvVHlwZSA9PSBJbmZvVHlwZSkgew0KPi0gICAgICAgIGJy ZWFrOw0KPi0gICAgICB9DQo+LSAgICB9DQo+LSAgfQ0KPi0NCj4tICBGcmVlUG9vbCAoSW5mbyk7 DQo+LSAgcmV0dXJuIFN0YXR1czsNCj4tfQ0KPi0NCj4tDQo+LS8qKg0KPi0gIERpc3BsYXkgbW9k aWZ5IHVzZXIgYWNjZXNzIHBvbGljeSBmb3JtLg0KPi0NCj4tICBJbiB0aGlzIGZvcm0sIGFjY2Vz cyByaWdodCwgYWNjZXNzIHNldHVwIGFuZCBhY2Nlc3MgYm9vdCBvcmRlciBhcmUgZHluYW1pY2Fs bHkNCj4tICBhZGRlZC4gTG9hZCBkZXZpY2VwYXRoIGFuZCBjb25uZWN0IGRldmljZXBhdGggYXJl IGRpc3BsYXllZCB0b28uDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1Nb2RpZHlBY2Nlc3NQb2xpY3kg KA0KPi0gIFZPSUQNCj4tICApDQo+LXsNCj4tICBWT0lEICAgICAgICAgICAgICAgICpTdGFydE9w Q29kZUhhbmRsZTsNCj4tICBWT0lEICAgICAgICAgICAgICAgICpFbmRPcENvZGVIYW5kbGU7DQo+ LSAgVk9JRCAgICAgICAgICAgICAgICAqT3B0aW9uc09wQ29kZUhhbmRsZTsNCj4tICBFRklfSUZS X0dVSURfTEFCRUwgICpTdGFydExhYmVsOw0KPi0gIEVGSV9JRlJfR1VJRF9MQUJFTCAgKkVuZExh YmVsOw0KPi0gIFZPSUQgICAgICAgICAgICAgICAgKkRlZmF1bHRPcENvZGVIYW5kbGU7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gSW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyIGZvciBkeW5hbWljIG9wY29k ZXMuDQo+LSAgLy8NCj4tICBTdGFydE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFu ZGxlICgpOw0KPi0gIEFTU0VSVCAoU3RhcnRPcENvZGVIYW5kbGUgIT0gTlVMTCk7DQo+LQ0KPi0g IEVuZE9wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gIEFTU0VS VCAoRW5kT3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICAvLw0KPi0gIC8vIENyZWF0ZSBI aWkgRXh0ZW5kIExhYmVsIE9wQ29kZS4NCj4tICAvLw0KPi0gIFN0YXJ0TGFiZWwgPSAoRUZJX0lG Ul9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+LSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgU3RhcnRMYWJl bC0+RXh0ZW5kT3BDb2RlICA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KPi0gIFN0YXJ0TGFi ZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9BUF9NT0RfRlVOQzsNCj4tDQo+LSAgRW5kTGFiZWwg PSAoRUZJX0lGUl9HVUlEX0xBQkVMICopIEhpaUNyZWF0ZUd1aWRPcENvZGUgKA0KPi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZE9wQ29kZUhhbmRsZSwNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUlmclRpYW5vR3VpZCwNCj4tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX0lGUl9HVUlEX0xBQkVMKQ0KPi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgRW5kTGFiZWwtPkV4 dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VYVEVORF9PUF9MQUJFTDsNCj4tICBFbmRMYWJlbC0+TnVt YmVyICAgICAgICA9IExBQkVMX0VORDsNCj4tDQo+LQ0KPi0gIC8vDQo+LSAgLy8gUmVzb2x2ZSBh Y2Nlc3MgcG9saWN5IGluZm9ybWF0aW9uLg0KPi0gIC8vDQo+LSAgUmVzb2x2ZUFjY2Vzc1BvbGlj eSAoKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBBZGQgYWNjZXNzIHJpZ2h0IG9uZS1vZi1jb2RlLg0K Pi0gIC8vDQo+LSAgT3B0aW9uc09wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxl ICgpOw0KPi0gIEFTU0VSVCAoT3B0aW9uc09wQ29kZUhhbmRsZSAhPSBOVUxMKTsNCj4tICBEZWZh dWx0T3BDb2RlSGFuZGxlID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgQVNTRVJU IChEZWZhdWx0T3BDb2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICBIaWlDcmVhdGVPbmVPZk9w dGlvbk9wQ29kZSAoDQo+LSAgICBPcHRpb25zT3BDb2RlSGFuZGxlLA0KPi0gICAgU1RSSU5HX1RP S0VOIChTVFJfTk9STUFMKSwNCj4tICAgIDAsDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8x LA0KPi0gICAgRUZJX1VTRVJfSU5GT19BQ0NFU1NfRU5ST0xMX1NFTEYNCj4tICAgICk7DQo+LQ0K Pi0gIEhpaUNyZWF0ZU9uZU9mT3B0aW9uT3BDb2RlICgNCj4tICAgIE9wdGlvbnNPcENvZGVIYW5k bGUsDQo+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9FTlJPTEwpLA0KPi0gICAgMCwNCj4tICAgIEVG SV9JRlJfTlVNRVJJQ19TSVpFXzEsDQo+LSAgICBFRklfVVNFUl9JTkZPX0FDQ0VTU19FTlJPTExf T1RIRVJTDQo+LSAgICApOw0KPi0NCj4tICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoDQo+ LSAgICBPcHRpb25zT3BDb2RlSGFuZGxlLA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJfTUFOQUdF KSwNCj4tICAgIDAsDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLA0KPi0gICAgRUZJX1VT RVJfSU5GT19BQ0NFU1NfTUFOQUdFDQo+LSAgICApOw0KPi0NCj4tICBIaWlDcmVhdGVEZWZhdWx0 T3BDb2RlICgNCj4tICAgIERlZmF1bHRPcENvZGVIYW5kbGUsDQo+LSAgICBFRklfSElJX0RFRkFV TFRfQ0xBU1NfU1RBTkRBUkQsDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLA0KPi0gICAg bUFjY2Vzc0luZm8uQWNjZXNzUmlnaHQNCj4tICAgICk7DQo+LQ0KPi0gIEhpaUNyZWF0ZU9uZU9m T3BDb2RlICgNCj4tICAgIFN0YXJ0T3BDb2RlSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgLy8g Q29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQgb3Bjb2Rlcw0KPi0gICAgS0VZX01PRElGWV9V U0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwgS0VZX01PRElGWV9BUCB8DQo+S0VZX01PRElGWV9SSUdI VCwgLy8gUXVlc3Rpb24gSUQNCj4tICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gVmFyU3RvcmUgSUQNCj4tICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gT2Zmc2V0IGluIEJ1ZmZlciBTdG9yYWdlDQo+LSAgICBTVFJJTkdfVE9LRU4g KFNUUl9BQ0NFU1NfUklHSFQpLCAgICAgIC8vIFF1ZXN0aW9uIHByb21wdCB0ZXh0DQo+LSAgICBT VFJJTkdfVE9LRU4gKFNUUl9BQ0NFU1NfUklHSFRfSEVMUCksIC8vIFF1ZXN0aW9uIGhlbHAgdGV4 dA0KPi0gICAgRUZJX0lGUl9GTEFHX0NBTExCQUNLLCAgICAgICAgICAgICAgICAvLyBRdWVzdGlv biBmbGFnDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLCAgICAgICAgICAgICAgIC8vIERh dGEgdHlwZSBvZiBRdWVzdGlvbiBWYWx1ZQ0KPi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwgICAg ICAgICAgICAgICAgICAvLyBPcHRpb24gT3Bjb2RlIGxpc3QNCj4tICAgIERlZmF1bHRPcENvZGVI YW5kbGUgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBPcGNvZGUNCj4tICAgICk7DQo+LSAg SGlpRnJlZU9wQ29kZUhhbmRsZSAoRGVmYXVsdE9wQ29kZUhhbmRsZSk7DQo+LSAgSGlpRnJlZU9w Q29kZUhhbmRsZSAoT3B0aW9uc09wQ29kZUhhbmRsZSk7DQo+LQ0KPi0NCj4tICAvLw0KPi0gIC8v IEFkZCBzZXR1cCB0eXBlIG9uZS1vZi1jb2RlLg0KPi0gIC8vDQo+LSAgT3B0aW9uc09wQ29kZUhh bmRsZSA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gIEFTU0VSVCAoT3B0aW9uc09w Q29kZUhhbmRsZSAhPSBOVUxMKTsNCj4tICBEZWZhdWx0T3BDb2RlSGFuZGxlID0gSGlpQWxsb2Nh dGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgQVNTRVJUIChEZWZhdWx0T3BDb2RlSGFuZGxlICE9IE5V TEwpOw0KPi0NCj4tICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoDQo+LSAgICBPcHRpb25z T3BDb2RlSGFuZGxlLA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJfUkVTVFJJQ1RFRCksDQo+LSAg ICAwLA0KPi0gICAgRUZJX0lGUl9OVU1FUklDX1NJWkVfMSwNCj4tICAgIEFDQ0VTU19TRVRVUF9S RVNUUklDVEVEDQo+LSAgICApOw0KPi0NCj4tICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAo DQo+LSAgICBPcHRpb25zT3BDb2RlSGFuZGxlLA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJfTk9S TUFMKSwNCj4tICAgIDAsDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLA0KPi0gICAgQUND RVNTX1NFVFVQX05PUk1BTA0KPi0gICAgKTsNCj4tDQo+LSAgSGlpQ3JlYXRlT25lT2ZPcHRpb25P cENvZGUgKA0KPi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4tICAgIFNUUklOR19UT0tFTiAo U1RSX0FETUlOKSwNCj4tICAgIDAsDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLA0KPi0g ICAgQUNDRVNTX1NFVFVQX0FETUlODQo+LSAgICApOw0KPi0NCj4tICBIaWlDcmVhdGVEZWZhdWx0 T3BDb2RlICgNCj4tICAgIERlZmF1bHRPcENvZGVIYW5kbGUsDQo+LSAgICBFRklfSElJX0RFRkFV TFRfQ0xBU1NfU1RBTkRBUkQsDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLA0KPi0gICAg bUFjY2Vzc0luZm8uQWNjZXNzU2V0dXANCj4tICAgICk7DQo+LQ0KPi0gIEhpaUNyZWF0ZU9uZU9m T3BDb2RlICgNCj4tICAgIFN0YXJ0T3BDb2RlSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgLy8g Q29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQgb3Bjb2Rlcw0KPi0gICAgS0VZX01PRElGWV9V U0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwgS0VZX01PRElGWV9BUCB8DQo+S0VZX01PRElGWV9TRVRV UCwgLy8gUXVlc3Rpb24gSUQNCj4tICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gVmFyU3RvcmUgSUQNCj4tICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gT2Zmc2V0IGluIEJ1ZmZlciBTdG9yYWdlDQo+LSAgICBTVFJJTkdfVE9LRU4g KFNUUl9BQ0NFU1NfU0VUVVApLCAgICAgIC8vIFF1ZXN0aW9uIHByb21wdCB0ZXh0DQo+LSAgICBT VFJJTkdfVE9LRU4gKFNUUl9BQ0NFU1NfU0VUVVBfSEVMUCksIC8vIFF1ZXN0aW9uIGhlbHAgdGV4 dA0KPi0gICAgRUZJX0lGUl9GTEFHX0NBTExCQUNLLCAgICAgICAgICAgICAgICAvLyBRdWVzdGlv biBmbGFnDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLCAgICAgICAgICAgICAgIC8vIERh dGEgdHlwZSBvZiBRdWVzdGlvbiBWYWx1ZQ0KPi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwgICAg ICAgICAgICAgICAgICAvLyBPcHRpb24gT3Bjb2RlIGxpc3QNCj4tICAgIERlZmF1bHRPcENvZGVI YW5kbGUgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBPcGNvZGUNCj4tICAgICk7DQo+LSAg SGlpRnJlZU9wQ29kZUhhbmRsZSAoRGVmYXVsdE9wQ29kZUhhbmRsZSk7DQo+LSAgSGlpRnJlZU9w Q29kZUhhbmRsZSAoT3B0aW9uc09wQ29kZUhhbmRsZSk7DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWRk IGJvb3Qgb3JkZXIgb25lLW9mLWNvZGUuDQo+LSAgLy8NCj4tICBPcHRpb25zT3BDb2RlSGFuZGxl ID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQo+LSAgQVNTRVJUIChPcHRpb25zT3BDb2Rl SGFuZGxlICE9IE5VTEwpOw0KPi0gIERlZmF1bHRPcENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0ZU9w Q29kZUhhbmRsZSAoKTsNCj4tICBBU1NFUlQgKERlZmF1bHRPcENvZGVIYW5kbGUgIT0gTlVMTCk7 DQo+LQ0KPi0gIEhpaUNyZWF0ZU9uZU9mT3B0aW9uT3BDb2RlICgNCj4tICAgIE9wdGlvbnNPcENv ZGVIYW5kbGUsDQo+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9JTlNFUlQpLA0KPi0gICAgMCwNCj4t ICAgIEVGSV9JRlJfTlVNRVJJQ19TSVpFXzQsDQo+LSAgICBFRklfVVNFUl9JTkZPX0FDQ0VTU19C T09UX09SREVSX0lOU0VSVA0KPi0gICAgKTsNCj4tDQo+LSAgSGlpQ3JlYXRlT25lT2ZPcHRpb25P cENvZGUgKA0KPi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4tICAgIFNUUklOR19UT0tFTiAo U1RSX0FQUEVORCksDQo+LSAgICAwLA0KPi0gICAgRUZJX0lGUl9OVU1FUklDX1NJWkVfNCwNCj4t ICAgIEVGSV9VU0VSX0lORk9fQUNDRVNTX0JPT1RfT1JERVJfQVBQRU5EDQo+LSAgICApOw0KPi0N Cj4tICBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoDQo+LSAgICBPcHRpb25zT3BDb2RlSGFu ZGxlLA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJfUkVQTEFDRSksDQo+LSAgICAwLA0KPi0gICAg RUZJX0lGUl9OVU1FUklDX1NJWkVfNCwNCj4tICAgIEVGSV9VU0VSX0lORk9fQUNDRVNTX0JPT1Rf T1JERVJfUkVQTEFDRQ0KPi0gICAgKTsNCj4tDQo+LSAgSGlpQ3JlYXRlT25lT2ZPcHRpb25PcENv ZGUgKA0KPi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4tICAgIFNUUklOR19UT0tFTiAoU1RS X05PREVGQVVMVCksDQo+LSAgICAwLA0KPi0gICAgRUZJX0lGUl9OVU1FUklDX1NJWkVfNCwNCj4t ICAgIEVGSV9VU0VSX0lORk9fQUNDRVNTX0JPT1RfT1JERVJfTk9ERUZBVUxUDQo+LSAgICApOw0K Pi0NCj4tICBIaWlDcmVhdGVEZWZhdWx0T3BDb2RlICgNCj4tICAgIERlZmF1bHRPcENvZGVIYW5k bGUsDQo+LSAgICBFRklfSElJX0RFRkFVTFRfQ0xBU1NfU1RBTkRBUkQsDQo+LSAgICBFRklfSUZS X05VTUVSSUNfU0laRV80LA0KPi0gICAgbUFjY2Vzc0luZm8uQWNjZXNzQm9vdE9yZGVyDQo+LSAg ICApOw0KPi0NCj4tICBIaWlDcmVhdGVPbmVPZk9wQ29kZSAoDQo+LSAgICBTdGFydE9wQ29kZUhh bmRsZSwgICAgICAgICAgICAgICAgICAvLyBDb250YWluZXIgZm9yIGR5bmFtaWMgY3JlYXRlZCBv cGNvZGVzDQo+LSAgICBLRVlfTU9ESUZZX1VTRVIgfCBLRVlfU0VMRUNUX1VTRVIgfCBLRVlfTU9E SUZZX0FQIHwNCj5LRVlfTU9ESUZZX0JPT1QsIC8vIFF1ZXN0aW9uIElEDQo+LSAgICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYXJTdG9yZSBJRA0KPi0gICAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0IGluIEJ1ZmZlciBTdG9yYWdl DQo+LSAgICBTVFJJTkdfVE9LRU4gKFNUUl9CT09SX09SREVSKSwgICAgICAvLyBRdWVzdGlvbiBw cm9tcHQgdGV4dA0KPi0gICAgU1RSSU5HX1RPS0VOIChTVFJfQk9PVF9PUkRFUl9IRUxQKSwgLy8g UXVlc3Rpb24gaGVscCB0ZXh0DQo+LSAgICBFRklfSUZSX0ZMQUdfQ0FMTEJBQ0ssICAgICAgICAg ICAgICAvLyBRdWVzdGlvbiBmbGFnDQo+LSAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLCAgICAg ICAgICAgICAvLyBEYXRhIHR5cGUgb2YgUXVlc3Rpb24gVmFsdWUNCj4tICAgIE9wdGlvbnNPcENv ZGVIYW5kbGUsICAgICAgICAgICAgICAgIC8vIE9wdGlvbiBPcGNvZGUgbGlzdA0KPi0gICAgRGVm YXVsdE9wQ29kZUhhbmRsZSAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBPcGNvZGUNCj4tICAg ICk7DQo+LSAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoRGVmYXVsdE9wQ29kZUhhbmRsZSk7DQo+LSAg SGlpRnJlZU9wQ29kZUhhbmRsZSAoT3B0aW9uc09wQ29kZUhhbmRsZSk7DQo+LQ0KPi0gIC8vDQo+ LSAgLy8gVXBkYXRlIEZvcm0uDQo+LSAgLy8NCj4tICBIaWlVcGRhdGVGb3JtICgNCj4tICAgIG1D YWxsYmFja0luZm8tPkhpaUhhbmRsZSwgICAgICAgICAgIC8vIEhJSSBoYW5kbGUNCj4tICAgICZn VXNlclByb2ZpbGVNYW5hZ2VyR3VpZCwgICAgICAgICAgIC8vIEZvcm1zZXQgR1VJRA0KPi0gICAg Rk9STUlEX01PRElGWV9BUCwgICAgICAgICAgICAgICAgICAgLy8gRm9ybSBJRA0KPi0gICAgU3Rh cnRPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgLy8gTGFiZWwgZm9yIHdoZXJlIHRvIGlu c2VydCBvcGNvZGVzDQo+LSAgICBFbmRPcENvZGVIYW5kbGUgICAgICAgICAgICAgICAgICAgICAv LyBSZXBsYWNlIGRhdGENCj4tICAgICk7DQo+LQ0KPi0gIEhpaUZyZWVPcENvZGVIYW5kbGUgKFN0 YXJ0T3BDb2RlSGFuZGxlKTsNCj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVIYW5k bGUpOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgRXhwYW5kIGFjY2VzcyBwb2xpY3kgbWVtb3J5 IHNpemUuDQo+LQ0KPi0gIEBwYXJhbVtpbl0gVmFsaWRMZW4gICAgICAgVGhlIHZhbGlkIGFjY2Vz cyBwb2xpY3kgbGVuZ3RoLg0KPi0gIEBwYXJhbVtpbl0gRXhwYW5kTGVuICAgICAgVGhlIGxlbmd0 aCB0aGF0IGlzIG5lZWRlZCB0byBleHBhbmQuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1FeHBhbmRN ZW1vcnkgKA0KPi0gIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWYWxpZExlbiwNCj4tICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRXhwYW5kTGVuDQo+LSAgKQ0KPi17DQo+LSAgVUlOVDggKk1lbTsNCj4tICBVSU5UTiBM ZW47DQo+LQ0KPi0gIC8vDQo+LSAgLy8gRXhwYW5kIG1lbW9yeS4NCj4tICAvLw0KPi0gIExlbiA9 IG1Vc2VySW5mby5BY2Nlc3NQb2xpY3lMZW4gKyAoRXhwYW5kTGVuIC8gNjQgKyAxKSAqIDY0Ow0K Pi0gIE1lbSA9IEFsbG9jYXRlWmVyb1Bvb2wgKExlbik7DQo+LSAgQVNTRVJUIChNZW0gIT0gTlVM TCk7DQo+LQ0KPi0gIGlmIChtVXNlckluZm8uQWNjZXNzUG9saWN5ICE9IE5VTEwpIHsNCj4tICAg IENvcHlNZW0gKE1lbSwgbVVzZXJJbmZvLkFjY2Vzc1BvbGljeSwgVmFsaWRMZW4pOw0KPi0gICAg RnJlZVBvb2wgKG1Vc2VySW5mby5BY2Nlc3NQb2xpY3kpOw0KPi0gIH0NCj4tDQo+LSAgbVVzZXJJ bmZvLkFjY2Vzc1BvbGljeSAgICA9IE1lbTsNCj4tICBtVXNlckluZm8uQWNjZXNzUG9saWN5TGVu ID0gTGVuOw0KPi19DQo+LQ0KPi0NCj4tLyoqDQo+LSAgR2V0IHRoZSB1c2VybmFtZSBmcm9tIHVz ZXIgaW5wdXQsIGFuZCB1cGRhdGUgdXNlcm5hbWUgc3RyaW5nIGluIHRoZSBIaWkNCj4tICBkYXRh YmFzZSB3aXRoIGl0Lg0KPi0NCj4tKiovDQo+LVZPSUQNCj4tTW9kaWZ5VXNlck5hbWUgKA0KPi0g IFZPSUQNCj4tICApDQo+LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ LSAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgVXNlck5hbWVbVVNFUl9OQU1FX0xFTkdUSF07DQo+ LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgTGVuOw0KPi0gIEVGSV9JTlBVVF9LRVkgICAgICAg ICAgIEtleTsNCj4tICBFRklfVVNFUl9JTkZPX0hBTkRMRSAgICBVc2VySW5mbzsNCj4tICBFRklf VVNFUl9JTkZPICAgICAgICAgICAqSW5mbzsNCj4tICBFRklfVVNFUl9QUk9GSUxFX0hBTkRMRSBU ZW1wVXNlcjsNCj4tDQo+LSAgLy8NCj4tICAvLyBHZXQgdGhlIG5ldyB1c2VyIG5hbWUuDQo+LSAg Ly8NCj4tICBMZW4gPSBzaXplb2YgKFVzZXJOYW1lKTsNCj4tICBTdGF0dXMgPSBHZXRVc2VyTmFt ZUlucHV0ICgmTGVuLCBVc2VyTmFtZSk7DQo+LSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K Pi0gICAgaWYgKFN0YXR1cyAhPSBFRklfQUJPUlRFRCkgew0KPi0gICAgICBDcmVhdGVQb3BVcCAo DQo+LSAgICAgICAgRUZJX0xJR0hUR1JBWSB8IEVGSV9CQUNLR1JPVU5EX0JMVUUsDQo+LSAgICAg ICAgJktleSwNCj4tICAgICAgICBMIkZhaWxlZCBUbyBHZXQgVXNlciBOYW1lLiIsDQo+LSAgICAg ICAgTCIiLA0KPi0gICAgICAgIEwiUGxlYXNlIFByZXNzIEFueSBLZXkgdG8gQ29udGludWUgLi4u IiwNCj4tICAgICAgICBOVUxMDQo+LSAgICAgICAgKTsNCj4tICAgIH0NCj4tICAgIHJldHVybiA7 DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIENoZWNrIHdoZXRoZXIgdGhlIHVzZXJuYW1lIGhh ZCBiZWVuIHVzZWQgb3Igbm90Lg0KPi0gIC8vDQo+LSAgSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wg KHNpemVvZiAoRUZJX1VTRVJfSU5GTykgKyBMZW4pOw0KPi0gIGlmIChJbmZvID09IE5VTEwpIHsN Cj4tICAgIHJldHVybiA7DQo+LSAgfQ0KPi0NCj4tICBJbmZvLT5JbmZvVHlwZSAgICA9IEVGSV9V U0VSX0lORk9fTkFNRV9SRUNPUkQ7DQo+LSAgSW5mby0+SW5mb0F0dHJpYnMgPSBFRklfVVNFUl9J TkZPX1NUT1JBR0VfUExBVEZPUk1fTlYgfA0KPi0gICAgICAgICAgICAgICAgICAgICAgRUZJX1VT RVJfSU5GT19QVUJMSUMgfA0KPi0gICAgICAgICAgICAgICAgICAgICAgRUZJX1VTRVJfSU5GT19F WENMVVNJVkU7DQo+LSAgSW5mby0+SW5mb1NpemUgICAgPSAoVUlOVDMyKSAoc2l6ZW9mIChFRklf VVNFUl9JTkZPKSArIExlbik7DQo+LSAgQ29weU1lbSAoKFVJTlQ4ICopIChJbmZvICsgMSksIFVz ZXJOYW1lLCBMZW4pOw0KPi0NCj4tICBUZW1wVXNlciAgPSBOVUxMOw0KPi0gIFN0YXR1cyAgICA9 IG1Vc2VyTWFuYWdlci0+RmluZCAoDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V c2VyTWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRlbXBVc2VyLA0K Pi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmZvLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZv LT5JbmZvU2l6ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0gIGlmICgh RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+LSAgICBDcmVhdGVQb3BVcCAoDQo+LSAgICAgIEVGSV9M SUdIVEdSQVkgfCBFRklfQkFDS0dST1VORF9CTFVFLA0KPi0gICAgICAmS2V5LA0KPi0gICAgICBM IlRoZSBVc2VyIE5hbWUgSGFkIEJlZW4gVXNlZC4iLA0KPi0gICAgICBMIiIsDQo+LSAgICAgIEwi UGxlYXNlIFVzZSBPdGhlciBVc2VyIE5hbWUiLA0KPi0gICAgICBOVUxMDQo+LSAgICAgICk7DQo+ LSAgICBGcmVlUG9vbCAoSW5mbyk7DQo+LSAgICByZXR1cm4gOw0KPi0gIH0NCj4tDQo+LSAgLy8N Cj4tICAvLyBVcGRhdGUgdXNlcm5hbWUgZGlzcGxheSBpbiB0aGUgZm9ybS4NCj4tICAvLw0KPi0g IENvcHlNZW0gKG1Vc2VySW5mby5Vc2VyTmFtZSwgVXNlck5hbWUsIExlbik7DQo+LSAgSGlpU2V0 U3RyaW5nICgNCj4tICAgIG1DYWxsYmFja0luZm8tPkhpaUhhbmRsZSwNCj4tICAgIFNUUklOR19U T0tFTiAoU1RSX1VTRVJfTkFNRV9WQUwpLA0KPi0gICAgbVVzZXJJbmZvLlVzZXJOYW1lLA0KPi0g ICAgTlVMTA0KPi0gICAgKTsNCj4tDQo+LSAgLy8NCj4tICAvLyBTYXZlIHRoZSB1c2VyIG5hbWUu DQo+LSAgLy8NCj4tICBTdGF0dXMgPSBGaW5kSW5mb0J5VHlwZSAobU1vZGlmeVVzZXIsIEVGSV9V U0VSX0lORk9fTkFNRV9SRUNPUkQsDQo+JlVzZXJJbmZvKTsNCj4tICBpZiAoIUVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPi0gICAgbVVzZXJNYW5hZ2VyLT5TZXRJbmZvICgNCj4tICAgICAgICAgICAg ICAgICAgICBtVXNlck1hbmFnZXIsDQo+LSAgICAgICAgICAgICAgICAgICAgbU1vZGlmeVVzZXIs DQo+LSAgICAgICAgICAgICAgICAgICAgJlVzZXJJbmZvLA0KPi0gICAgICAgICAgICAgICAgICAg IEluZm8sDQo+LSAgICAgICAgICAgICAgICAgICAgSW5mby0+SW5mb1NpemUNCj4tICAgICAgICAg ICAgICAgICAgICApOw0KPi0gIH0NCj4tICBGcmVlUG9vbCAoSW5mbyk7DQo+LX0NCj4tDQo+LQ0K Pi0vKioNCj4tICBEaXNwbGF5IHRoZSBmb3JtIG9mIHRoZSBtb2RpZnlpbmcgdXNlciBpZGVudGl0 eSBwb2xpY3kuDQo+LQ0KPi0qKi8NCj4tVk9JRA0KPi1Nb2RpZnlJZGVudGl0eVBvbGljeSAoDQo+ LSAgVk9JRA0KPi0gICkNCj4tew0KPi0gIFVJTlROICAgICAgICAgICAgICAgSW5kZXg7DQo+LSAg Q0hBUjE2ICAgICAgICAgICAgICAqUHJvdlN0cjsNCj4tICBFRklfU1RSSU5HX0lEICAgICAgIFBy b3ZJRDsNCj4tICBFRklfSElJX0hBTkRMRSAgICAgIEhpaUhhbmRsZTsNCj4tICBWT0lEICAgICAg ICAgICAgICAgICpPcHRpb25zT3BDb2RlSGFuZGxlOw0KPi0gIFZPSUQgICAgICAgICAgICAgICAg KlN0YXJ0T3BDb2RlSGFuZGxlOw0KPi0gIFZPSUQgICAgICAgICAgICAgICAgKkVuZE9wQ29kZUhh bmRsZTsNCj4tICBFRklfSUZSX0dVSURfTEFCRUwgICpTdGFydExhYmVsOw0KPi0gIEVGSV9JRlJf R1VJRF9MQUJFTCAgKkVuZExhYmVsOw0KPi0NCj4tICAvLw0KPi0gIC8vIEluaXRpYWxpemUgdGhl IGNvbnRhaW5lciBmb3IgZHluYW1pYyBvcGNvZGVzLg0KPi0gIC8vDQo+LSAgU3RhcnRPcENvZGVI YW5kbGUgPSBIaWlBbGxvY2F0ZU9wQ29kZUhhbmRsZSAoKTsNCj4tICBBU1NFUlQgKFN0YXJ0T3BD b2RlSGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICBFbmRPcENvZGVIYW5kbGUgPSBIaWlBbGxvY2F0 ZU9wQ29kZUhhbmRsZSAoKTsNCj4tICBBU1NFUlQgKEVuZE9wQ29kZUhhbmRsZSAhPSBOVUxMKTsN Cj4tDQo+LSAgLy8NCj4tICAvLyBDcmVhdGUgSGlpIEV4dGVuZCBMYWJlbCBPcENvZGUuDQo+LSAg Ly8NCj4tICBTdGFydExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlDcmVhdGVHdWlk T3BDb2RlICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0 T3BDb2RlSGFuZGxlLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JmdFZmlJZnJUaWFub0d1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mIChFRklfSUZSX0dVSURfTEFCRUwpDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPi0gIFN0YXJ0TGFiZWwtPkV4dGVuZE9wQ29kZSAgPSBFRklfSUZSX0VY VEVORF9PUF9MQUJFTDsNCj4tICBTdGFydExhYmVsLT5OdW1iZXIgICAgICAgID0gTEFCRUxfSVBf TU9EX0ZVTkM7DQo+LQ0KPi0gIEVuZExhYmVsID0gKEVGSV9JRlJfR1VJRF9MQUJFTCAqKSBIaWlD cmVhdGVHdWlkT3BDb2RlICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFbmRPcENvZGVIYW5kbGUsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmdFZmlJZnJUaWFub0d1aWQsDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2YgKEVGSV9JRlJfR1VJRF9MQUJFTCkNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOw0KPi0gIEVuZExhYmVsLT5FeHRlbmRPcENvZGUgID0gRUZJX0lGUl9FWFRFTkRf T1BfTEFCRUw7DQo+LSAgRW5kTGFiZWwtPk51bWJlciAgICAgICAgPSBMQUJFTF9FTkQ7DQo+LQ0K Pi0gIC8vDQo+LSAgLy8gQWRkIGNyZWRlbnRpYWwgcHJvdmlkZXJzDQo+LSAgLy8uDQo+LSAgaWYg KG1Qcm92aWRlckluZm8tPkNvdW50ID4gMCkgew0KPi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSA9 IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0KPi0gICAgQVNTRVJUIChPcHRpb25zT3BDb2Rl SGFuZGxlICE9IE5VTEwpOw0KPi0NCj4tICAgIC8vDQo+LSAgICAvLyBBZGQgY3JlZGVudGlhbCBw cm92aWRlciBPcHRpb24gT3BDb2RlLg0KPi0gICAgLy8NCj4tICAgIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IG1Qcm92aWRlckluZm8tPkNvdW50OyBJbmRleCsrKSB7DQo+LSAgICAgIG1Qcm92aWRl ckluZm8tPlByb3ZpZGVyW0luZGV4XS0+VGl0bGUgKA0KPi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbVByb3ZpZGVySW5mby0+UHJvdmlkZXJbSW5kZXhdLA0KPi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkhpaUhhbmRsZSwNCj4tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm92SUQNCj4tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICAgIFByb3ZTdHIgPSBIaWlHZXRT dHJpbmcgKEhpaUhhbmRsZSwgUHJvdklELCBOVUxMKTsNCj4tICAgICAgUHJvdklEICA9IEhpaVNl dFN0cmluZyAobUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCAwLCBQcm92U3RyLCBOVUxMKTsNCj4t ICAgICAgRnJlZVBvb2wgKFByb3ZTdHIpOw0KPi0gICAgICBpZiAoUHJvdklEID09IDApIHsNCj4t ICAgICAgICByZXR1cm4gOw0KPi0gICAgICB9DQo+LQ0KPi0gICAgICBIaWlDcmVhdGVPbmVPZk9w dGlvbk9wQ29kZSAoDQo+LSAgICAgICAgT3B0aW9uc09wQ29kZUhhbmRsZSwNCj4tICAgICAgICBQ cm92SUQsDQo+LSAgICAgICAgMCwNCj4tICAgICAgICBFRklfSUZSX05VTUVSSUNfU0laRV8xLA0K Pi0gICAgICAgIChVSU5UOCkgSW5kZXgNCj4tICAgICAgICApOw0KPi0gICAgfQ0KPi0NCj4tICAg IEhpaUNyZWF0ZU9uZU9mT3BDb2RlICgNCj4tICAgICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAg ICAgICAgICAgIC8vIENvbnRhaW5lciBmb3IgZHluYW1pYyBjcmVhdGVkIG9wY29kZXMNCj4tICAg ICAgS0VZX01PRElGWV9VU0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwgS0VZX01PRElGWV9JUCB8DQo+ S0VZX01PRElGWV9QUk9WLCAgLy8gUXVlc3Rpb24gSUQNCj4tICAgICAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIFZhclN0b3JlIElEDQo+LSAgICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQgaW4gQnVmZmVyIFN0b3JhZ2UNCj4tICAgICAg U1RSSU5HX1RPS0VOIChTVFJfUFJPVklERVIpLCAgICAgIC8vIFF1ZXN0aW9uIHByb21wdCB0ZXh0 DQo+LSAgICAgIFNUUklOR19UT0tFTiAoU1RSX1BST1ZJREVSX0hFTFApLCAvLyBRdWVzdGlvbiBo ZWxwIHRleHQNCj4tICAgICAgRUZJX0lGUl9GTEFHX0NBTExCQUNLLCAgICAgICAgICAgIC8vIFF1 ZXN0aW9uIGZsYWcNCj4tICAgICAgRUZJX0lGUl9OVU1FUklDX1NJWkVfMSwgICAgICAgICAgIC8v IERhdGEgdHlwZSBvZiBRdWVzdGlvbiBWYWx1ZQ0KPi0gICAgICBPcHRpb25zT3BDb2RlSGFuZGxl LCAgICAgICAgICAgICAgLy8gT3B0aW9uIE9wY29kZSBsaXN0DQo+LSAgICAgIE5VTEwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IE9wY29kZSBpcyBOVUxsDQo+LSAgICAg ICk7DQo+LQ0KPi0gICAgSGlpRnJlZU9wQ29kZUhhbmRsZSAoT3B0aW9uc09wQ29kZUhhbmRsZSk7 DQo+LSAgfQ0KPi0NCj4tICAvLw0KPi0gIC8vIEFkZCBsb2dpY2FsIGNvbm5lY3RvciBPcHRpb24g T3BDb2RlLg0KPi0gIC8vDQo+LSAgT3B0aW9uc09wQ29kZUhhbmRsZSA9IEhpaUFsbG9jYXRlT3BD b2RlSGFuZGxlICgpOw0KPi0gIEFTU0VSVCAoT3B0aW9uc09wQ29kZUhhbmRsZSAhPSBOVUxMKTsN Cj4tDQo+LSAgSGlpQ3JlYXRlT25lT2ZPcHRpb25PcENvZGUgKA0KPi0gICAgT3B0aW9uc09wQ29k ZUhhbmRsZSwNCj4tICAgIFNUUklOR19UT0tFTiAoU1RSX0FORF9DT04pLA0KPi0gICAgMCwNCj4t ICAgIEVGSV9JRlJfTlVNRVJJQ19TSVpFXzEsDQo+LSAgICAwDQo+LSAgICApOw0KPi0NCj4tICBI aWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoDQo+LSAgICBPcHRpb25zT3BDb2RlSGFuZGxlLA0K Pi0gICAgU1RSSU5HX1RPS0VOIChTVFJfT1JfQ09OKSwNCj4tICAgIDAsDQo+LSAgICBFRklfSUZS X05VTUVSSUNfU0laRV8xLA0KPi0gICAgMQ0KPi0gICAgKTsNCj4tDQo+LSAgSGlpQ3JlYXRlT25l T2ZPcENvZGUgKA0KPi0gICAgU3RhcnRPcENvZGVIYW5kbGUsICAgICAgICAgICAgICAgICAgLy8g Q29udGFpbmVyIGZvciBkeW5hbWljIGNyZWF0ZWQgb3Bjb2Rlcw0KPi0gICAgS0VZX01PRElGWV9V U0VSIHwgS0VZX1NFTEVDVF9VU0VSIHwgS0VZX01PRElGWV9JUCB8DQo+S0VZX01PRElGWV9DT05O LCAgLy8gUXVlc3Rpb24gSUQNCj4tICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIFZhclN0b3JlIElEDQo+LSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBPZmZzZXQgaW4gQnVmZmVyIFN0b3JhZ2UNCj4tICAgIFNUUklOR19UT0tFTiAoU1RS X0NPTk5FQ1RPUiksICAgICAgIC8vIFF1ZXN0aW9uIHByb21wdCB0ZXh0DQo+LSAgICBTVFJJTkdf VE9LRU4gKFNUUl9DT05ORUNUT1JfSEVMUCksICAvLyBRdWVzdGlvbiBoZWxwIHRleHQNCj4tICAg IEVGSV9JRlJfRkxBR19DQUxMQkFDSywgICAgICAgICAgICAgIC8vIFF1ZXN0aW9uIGZsYWcNCj4t ICAgIEVGSV9JRlJfTlVNRVJJQ19TSVpFXzEsICAgICAgICAgICAgIC8vIERhdGEgdHlwZSBvZiBR dWVzdGlvbiBWYWx1ZQ0KPi0gICAgT3B0aW9uc09wQ29kZUhhbmRsZSwgICAgICAgICAgICAgICAg Ly8gT3B0aW9uIE9wY29kZSBsaXN0DQo+LSAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBEZWZhdWx0IE9wY29kZSBpcyBOVUxsDQo+LSAgICApOw0KPi0NCj4tICBIaWlG cmVlT3BDb2RlSGFuZGxlIChPcHRpb25zT3BDb2RlSGFuZGxlKTsNCj4tDQo+LSAgLy8NCj4tICAv LyBVcGRhdGUgaWRlbnRpdHkgcG9saWN5IGluIHRoZSBmb3JtLg0KPi0gIC8vDQo+LSAgUmVzb2x2 ZUlkZW50aXR5UG9saWN5ICgNCj4tICAgIG1Vc2VySW5mby5JZGVudGl0eVBvbGljeSwNCj4tICAg IG1Vc2VySW5mby5JZGVudGl0eVBvbGljeUxlbiwNCj4tICAgIFNUUklOR19UT0tFTiAoU1RSX0lE RU5USUZZX1BPTElDWV9WQUxVRSkNCj4tICAgICk7DQo+LQ0KPi0gIGlmIChtVXNlckluZm8uTmV3 SWRlbnRpdHlQb2xpY3kgIT0gTlVMTCkgew0KPi0gICAgRnJlZVBvb2wgKG1Vc2VySW5mby5OZXdJ ZGVudGl0eVBvbGljeSk7DQo+LSAgICBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3kgICAgICAg ICA9IE5VTEw7DQo+LSAgICBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lMZW4gICAgICA9IDA7 DQo+LSAgICBtVXNlckluZm8uTmV3SWRlbnRpdHlQb2xpY3lNb2RpZmllZCA9IEZBTFNFOw0KPi0g IH0NCj4tICBtUHJvdmlkZXJDaG9pY2UgPSAwOw0KPi0gIG1Db25uY2V0TG9naWNhbCA9IDA7DQo+ LQ0KPi0gIEhpaVVwZGF0ZUZvcm0gKA0KPi0gICAgbUNhbGxiYWNrSW5mby0+SGlpSGFuZGxlLCAv LyBISUkgaGFuZGxlDQo+LSAgICAmZ1VzZXJQcm9maWxlTWFuYWdlckd1aWQsIC8vIEZvcm1zZXQg R1VJRA0KPi0gICAgRk9STUlEX01PRElGWV9JUCwgICAgICAgICAvLyBGb3JtIElEDQo+LSAgICBT dGFydE9wQ29kZUhhbmRsZSwgICAgICAgIC8vIExhYmVsIGZvciB3aGVyZSB0byBpbnNlcnQgb3Bj b2Rlcw0KPi0gICAgRW5kT3BDb2RlSGFuZGxlICAgICAgICAgICAvLyBSZXBsYWNlIGRhdGENCj4t ICAgICk7DQo+LQ0KPi0gIEhpaUZyZWVPcENvZGVIYW5kbGUgKFN0YXJ0T3BDb2RlSGFuZGxlKTsN Cj4tICBIaWlGcmVlT3BDb2RlSGFuZGxlIChFbmRPcENvZGVIYW5kbGUpOw0KPi19DQo+LQ0KPi0N Cj4tLyoqDQo+LSAgR2V0IGN1cnJlbnQgdXNlcidzIGFjY2VzcyByaWdodC4NCj4tDQo+LSAgQHBh cmFtW291dF0gIEFjY2Vzc1JpZ2h0ICBQb2ludHMgdG8gdGhlIGJ1ZmZlciB1c2VkIGZvciB1c2Vy J3MgYWNjZXNzIHJpZ2h0Lg0KPi0NCj4tICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIEdldCBj dXJyZW50IHVzZXIgYWNjZXNzIHJpZ2h0IHN1Y2Nlc3NmdWxseS4NCj4tICBAcmV0dmFsIG90aGVy cyAgICAgICAgICAgIEZhaWwgdG8gZ2V0IGN1cnJlbnQgdXNlciBhY2Nlc3MgcmlnaHQuDQo+LQ0K Pi0qKi8NCj4tRUZJX1NUQVRVUw0KPi1HZXRBY2Nlc3NSaWdodCAoDQo+LSAgT1VUICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQWNjZXNzUmlnaHQNCj4tICApDQo+ LXsNCj4tICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+LSAgRUZJX1VT RVJfSU5GT19IQU5ETEUgICAgICAgICAgVXNlckluZm87DQo+LSAgRUZJX1VTRVJfSU5GTyAgICAg ICAgICAgICAgICAgKkluZm87DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgSW5m b1NpemU7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgTWVtU2l6ZTsNCj4tICBF RklfVVNFUl9JTkZPX0FDQ0VTU19DT05UUk9MICBBY2Nlc3M7DQo+LSAgRUZJX1VTRVJfUFJPRklM RV9IQU5ETEUgICAgICAgQ3VycmVudFVzZXI7DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgVG90YWxMZW47DQo+LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tM ZW47DQo+LQ0KPi0gIC8vDQo+LSAgLy8gQWxsb2NhdGUgdXNlciBpbmZvcm1hdGlvbiBtZW1vcnku DQo+LSAgLy8NCj4tICBNZW1TaXplID0gc2l6ZW9mIChFRklfVVNFUl9JTkZPKSArIDYzOw0KPi0g IEluZm8gICAgPSBBbGxvY2F0ZVplcm9Qb29sIChNZW1TaXplKTsNCj4tICBpZiAoSW5mbyA9PSBO VUxMKSB7DQo+LSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+LSAgfQ0KPi0NCj4t ICAvLw0KPi0gIC8vIEdldCB1c2VyIGFjY2VzcyBpbmZvcm1hdGlvbi4NCj4tICAvLw0KPi0gIFVz ZXJJbmZvID0gTlVMTDsNCj4tICBtVXNlck1hbmFnZXItPkN1cnJlbnQgKG1Vc2VyTWFuYWdlciwg JkN1cnJlbnRVc2VyKTsNCj4tICB3aGlsZSAoVFJVRSkgew0KPi0gICAgSW5mb1NpemUgPSBNZW1T aXplOw0KPi0gICAgLy8NCj4tICAgIC8vIEdldCBuZXh0IHVzZXIgaW5mb3JtYXRpb24uDQo+LSAg ICAvLw0KPi0gICAgU3RhdHVzID0gbVVzZXJNYW5hZ2VyLT5HZXROZXh0SW5mbyAobVVzZXJNYW5h Z2VyLCBDdXJyZW50VXNlciwNCj4mVXNlckluZm8pOw0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPi0gICAgICBicmVhazsNCj4tICAgIH0NCj4tDQo+LSAgICBTdGF0dXMgPSBtVXNl ck1hbmFnZXItPkdldEluZm8gKA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vy TWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50VXNlciwNCj4t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySW5mbywNCj4tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmZvLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbmZv U2l6ZQ0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+LSAgICBpZiAoU3RhdHVz ID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+LSAgICAgIE1lbVNpemUgPSBJbmZvU2l6ZTsN Cj4tICAgICAgRnJlZVBvb2wgKEluZm8pOw0KPi0gICAgICBJbmZvID0gQWxsb2NhdGVaZXJvUG9v bCAoTWVtU2l6ZSk7DQo+LSAgICAgIGlmIChJbmZvID09IE5VTEwpIHsNCj4tICAgICAgICByZXR1 cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+LSAgICAgIH0NCj4tICAgICAgU3RhdHVzID0gbVVz ZXJNYW5hZ2VyLT5HZXRJbmZvICgNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V c2VyTWFuYWdlciwNCj4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRVc2Vy LA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckluZm8sDQo+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbmZvLA0KPi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJkluZm9TaXplDQo+LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPi0g ICAgfQ0KPi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPi0gICAgICBicmVhazsNCj4t ICAgIH0NCj4tDQo+LSAgICAvLw0KPi0gICAgLy8gQ2hlY2sgdXNlciBpbmZvcm1hdGlvbi4NCj4t ICAgIC8vDQo+LSAgICBpZiAoSW5mby0+SW5mb1R5cGUgPT0gRUZJX1VTRVJfSU5GT19BQ0NFU1Nf UE9MSUNZX1JFQ09SRCkgew0KPi0gICAgICBUb3RhbExlbiAgPSBJbmZvLT5JbmZvU2l6ZSAtIHNp emVvZiAoRUZJX1VTRVJfSU5GTyk7DQo+LSAgICAgIENoZWNrTGVuICA9IDA7DQo+LSAgICAgIC8v DQo+LSAgICAgIC8vIEdldCBzcGVjaWZpZWQgYWNjZXNzIGluZm9ybWF0aW9uLg0KPi0gICAgICAv Lw0KPi0gICAgICB3aGlsZSAoQ2hlY2tMZW4gPCBUb3RhbExlbikgew0KPi0gICAgICAgIENvcHlN ZW0gKCZBY2Nlc3MsIChVSU5UOCAqKSAoSW5mbyArIDEpICsgQ2hlY2tMZW4sIHNpemVvZiAoQWNj ZXNzKSk7DQo+LSAgICAgICAgaWYgKChBY2Nlc3MuVHlwZSA9PSBFRklfVVNFUl9JTkZPX0FDQ0VT U19FTlJPTExfU0VMRikgfHwNCj4tICAgICAgICAgICAgKEFjY2Vzcy5UeXBlID09IEVGSV9VU0VS X0lORk9fQUNDRVNTX0VOUk9MTF9PVEhFUlMpIHx8DQo+LSAgICAgICAgICAgIChBY2Nlc3MuVHlw ZSA9PSBFRklfVVNFUl9JTkZPX0FDQ0VTU19NQU5BR0UpDQo+LSAgICAgICAgICAgICkgew0KPi0g ICAgICAgICAgKkFjY2Vzc1JpZ2h0ID0gQWNjZXNzLlR5cGU7DQo+LSAgICAgICAgICBGcmVlUG9v bCAoSW5mbyk7DQo+LSAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+LSAgICAgICAgfQ0K Pi0gICAgICAgIENoZWNrTGVuICs9IEFjY2Vzcy5TaXplOw0KPi0gICAgICB9DQo+LSAgICB9DQo+ LSAgfQ0KPi0gIEZyZWVQb29sIChJbmZvKTsNCj4tICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4t fQ0KPi0NCj4tLQ0KPjIuMTYuMi53aW5kb3dzLjENCj4NCj5fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXw0KPmVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQo+ZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmcNCj5odHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2VkazItZGV2ZWwNCg==