From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.126; helo=mga18.intel.com; envelope-from=bob.c.feng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (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 DDE7221125471 for ; Sat, 10 Nov 2018 16:43:51 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Nov 2018 16:43:51 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,489,1534834800"; d="scan'208";a="91094765" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga008.jf.intel.com with ESMTP; 10 Nov 2018 16:43:51 -0800 Received: from fmsmsx161.amr.corp.intel.com (10.18.125.9) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sat, 10 Nov 2018 16:43:50 -0800 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX161.amr.corp.intel.com (10.18.125.9) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sat, 10 Nov 2018 16:43:50 -0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.102]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.161]) with mapi id 14.03.0415.000; Sun, 11 Nov 2018 08:43:47 +0800 From: "Feng, Bob C" To: "Carsey, Jaben" , "edk2-devel@lists.01.org" CC: "Gao, Liming" Thread-Topic: [Patch V2] BaseTools: Replace the sqlite database with list Thread-Index: AQHUeEBcZEpGRi6Qx0Sot4qOlProUKVJvjSQ Date: Sun, 11 Nov 2018 00:43:45 +0000 Message-ID: <08650203BA1BD64D8AD9B6D5D74A85D15FFFD013@SHSMSX101.ccr.corp.intel.com> References: <20181109084157.37996-1-bob.c.feng@intel.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch V2] BaseTools: Replace the sqlite database with list 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: Sun, 11 Nov 2018 00:43:52 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgSmFiZW4sDQoNCkl0IHdpbGwgYmUgZmFzdGVyIHRoYW4gYmVmb3JlIHdoZW4geW91IGRvIGJ1 aWxkLCBjbGVhbiwgYnVpbGQuLi4NCg0KX0JvYg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KRnJvbTogQ2Fyc2V5LCBKYWJlbiANClNlbnQ6IEZyaWRheSwgTm92ZW1iZXIgOSwgMjAxOCAx MToyNSBQTQ0KVG86IEZlbmcsIEJvYiBDIDxib2IuYy5mZW5nQGludGVsLmNvbT47IGVkazItZGV2 ZWxAbGlzdHMuMDEub3JnDQpDYzogR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPg0K U3ViamVjdDogUkU6IFtQYXRjaCBWMl0gQmFzZVRvb2xzOiBSZXBsYWNlIHRoZSBzcWxpdGUgZGF0 YWJhc2Ugd2l0aCBsaXN0DQoNClRoaXMgaXMgbXVjaCBlYXNpZXIgdG8gcmV2aWV3ISBUaGFua3Mh DQoNCkkgYW0gZ29vZCB3aXRoIHRoZSBjb2RlIGNoYW5nZS4NCg0KSSB3b25kZXI6IElmIHdlIGRv IG5vdCBoYXZlIHRoZSBEQiBkb2VzIGl0IHRha2UgbG9uZ2VyIGlmIEkgZG8gYnVpbGQsIGNsZWFu LCBidWlsZCB0aGFuIGl0IGRpZCBiZWZvcmU/DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gRnJvbTogRmVuZywgQm9iIEMNCj4gU2VudDogRnJpZGF5LCBOb3ZlbWJlciAwOSwgMjAx OCAxMjo0MiBBTQ0KPiBUbzogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gQ2M6IEdhbywgTGlt aW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IENhcnNleSwgSmFiZW4gDQo+IDxqYWJlbi5jYXJz ZXlAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbUGF0Y2ggVjJdIEJhc2VUb29sczogUmVwbGFjZSB0 aGUgc3FsaXRlIGRhdGFiYXNlIHdpdGggbGlzdA0KPiBJbXBvcnRhbmNlOiBIaWdoDQo+IA0KPiBo dHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTEyODgNCj4gDQo+ IFtWMl0NCj4gT3B0aW1pemUgdGhpcyBwYXRjaCBzbyB0aGF0IGl0IGNhbiBiZSBlYXN5IHRvIHJl dmlldy4NCj4gVGhpcyBwYXRjaCBpcyBqdXN0IGFwcGx5IHRoZSBjaGFuZ2UgdG8gb3JpZ2luYWwg ZmlsZXMgd2hpbGUgbm90IGNyZWF0ZSANCj4gbmV3IHNpbWlsYXIgZmlsZXMuDQo+IA0KPiBbVjFd DQo+IFRoaXMgcGF0Y2ggaXMgb25lIG9mIGJ1aWxkIHRvb2wgcGVyZm9ybWFuY2UgaW1wcm92ZW1l bnQgc2VyaWVzIA0KPiBwYXRjaGVzLg0KPiANCj4gVGhpcyBwYXRjaCBpcyBnb2luZyB0byB1c2Ug cHl0aG9uIGxpc3QgdG8gc3RvcmUgdGhlIHBhcnNlciBkYXRhIA0KPiBpbnN0ZWFkIG9mIHVzaW5n IHNxbGl0ZSBkYXRhYmFzZS4NCj4gDQo+IFRoZSByZXBsYWNlbWVudCBzb2x1dGlvbiBpcyBhcyBi ZWxvdzoNCj4gDQo+IFNRTCBpbnNlcnQ6IGxpc3QuYXBwZW5kKCkNCj4gU1FMIHNlbGVjdDogbGlz dCBjb21wcmVoZW5zaW9uLiBmb3IgZXhhbXBsZToNCj4gU2VsZWN0ICogZnJvbSB0YWJsZSB3aGVy ZSBmaWVsZCA9IOKAnHNvbWV0aGluZ+KAnQ0KPiAtPg0KPiBbIGl0ZW0gZm9yIGl0ZW0gaW4gdGFi bGUgaWYgaXRlbVszXSA9PSDigJxzb21ldGhpbmfigJ1dDQo+IA0KPiBTUUwgdXBkYXRlOiBweXRo b24gbWFwIGZ1bmN0aW9uLiBmb3IgZXhhbXBsZToNCj4gVXBkYXRlIHRhYmxlIHNldCBmaWVsZDE9 bmV3dmFsdWUgd2hlcmUgZmlsZWQyID0g4oCcc29tZXRoaW5n4oCdLg0KPiAtPiBtYXAobGFtYmRh IHg6IHhbMV0gPSBuZXd2YWx1ZSwNCj4gICAgW2l0ZW0gZm9yIGl0ZW0gaW4gdGFibGUgaWYgaXRl bVsyXSA9PSDigJxzb21ldGhpbmfigJ1dKQ0KPiANCj4gU1FMIGRlbGV0ZTogbGlzdCBjb21wcmVo ZW5zaW9uLg0KPiANCj4gV2l0aCB0aGlzIGNoYW5nZSwgV2UgY2FuIHNhdmUgdGhlIHRpbWUgb2Yg aW50ZXJwcmV0aW5nIFNRTCBzdGF0ZW1lbnQgDQo+IGFuZCB0aGUgdGltZSBvZiB3cml0ZSBkYXRh YmFzZSB0byBmaWxlIHN5c3RlbQ0KPiANCj4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBD b250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiBTaWduZWQtb2ZmLWJ5OiBCb2JDRiA8Ym9iLmMu ZmVuZ0BpbnRlbC5jb20+DQo+IENjOiBMaW1pbmcgR2FvIDxsaW1pbmcuZ2FvQGludGVsLmNvbT4N Cj4gQ2M6IEphYmVuIENhcnNleSA8amFiZW4uY2Fyc2V5QGludGVsLmNvbT4NCj4gLS0tDQo+ICBC YXNlVG9vbHMvU291cmNlL1B5dGhvbi9HZW5GZHMvR2VuRmRzLnB5ICAgICAgfCAgIDMgKy0NCj4g IC4uLi9Tb3VyY2UvUHl0aG9uL1dvcmtzcGFjZS9NZXRhRGF0YVRhYmxlLnB5ICB8ICA5MyArKy0t LS0tDQo+ICAuLi4vU291cmNlL1B5dGhvbi9Xb3Jrc3BhY2UvTWV0YUZpbGVQYXJzZXIucHkgfCAg IDUgKy0NCj4gIC4uLi9Tb3VyY2UvUHl0aG9uL1dvcmtzcGFjZS9NZXRhRmlsZVRhYmxlLnB5ICB8 IDI0OCArKysrKysrKysrLS0tLS0tLS0NCj4gIC4uLi9QeXRob24vV29ya3NwYWNlL1dvcmtzcGFj ZURhdGFiYXNlLnB5ICAgICB8IDEzMSArLS0tLS0tLS0NCj4gIEJhc2VUb29scy9Tb3VyY2UvUHl0 aG9uL2J1aWxkL2J1aWxkLnB5ICAgICAgICB8ICAyNyArLQ0KPiAgNiBmaWxlcyBjaGFuZ2VkLCAx ODYgaW5zZXJ0aW9ucygrKSwgMzIxIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL0Jh c2VUb29scy9Tb3VyY2UvUHl0aG9uL0dlbkZkcy9HZW5GZHMucHkNCj4gYi9CYXNlVG9vbHMvU291 cmNlL1B5dGhvbi9HZW5GZHMvR2VuRmRzLnB5DQo+IGluZGV4IDBjODA5MWI3OTguLjRmZDk2NzA2 YWYgMTAwNjQ0DQo+IC0tLSBhL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL0dlbkZkcy9HZW5GZHMu cHkNCj4gKysrIGIvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24vR2VuRmRzL0dlbkZkcy5weQ0KPiBA QCAtMjIyLDEyICsyMjIsMTEgQEAgZGVmIG1haW4oKToNCj4gICAgICAgICAgaWYgIlRPT0xfQ0hB SU5fVEFHIiBub3QgaW4gR2xvYmFsRGF0YS5nR2xvYmFsRGVmaW5lczoNCj4gICAgICAgICAgICAg IEdsb2JhbERhdGEuZ0dsb2JhbERlZmluZXNbJ1RPT0xfQ0hBSU5fVEFHJ10gPSANCj4gR2VuRmRz R2xvYmFsVmFyaWFibGUuVG9vbENoYWluVGFnDQo+IA0KPiAgICAgICAgICAiIiJjYWxsIFdvcmtz cGFjZSBidWlsZCBjcmVhdGUgZGF0YWJhc2UiIiINCj4gICAgICAgICAgR2xvYmFsRGF0YS5nRGF0 YWJhc2VQYXRoID0NCj4gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oQ29uZkRpcmVjdG9y eVBhdGgsDQo+IEdsb2JhbERhdGEuZ0RhdGFiYXNlUGF0aCkpDQo+IC0gICAgICAgIEJ1aWxkV29y a1NwYWNlID0gV29ya3NwYWNlRGF0YWJhc2UoR2xvYmFsRGF0YS5nRGF0YWJhc2VQYXRoKQ0KPiAt ICAgICAgICBCdWlsZFdvcmtTcGFjZS5Jbml0RGF0YWJhc2UoKQ0KPiArICAgICAgICBCdWlsZFdv cmtTcGFjZSA9IFdvcmtzcGFjZURhdGFiYXNlKCkNCj4gDQo+ICAgICAgICAgICMNCj4gICAgICAg ICAgIyBHZXQgZmlsZXMgcmVhbCBuYW1lIGluIHdvcmtzcGFjZSBkaXINCj4gICAgICAgICAgIw0K PiAgICAgICAgICBHbG9iYWxEYXRhLmdBbGxGaWxlcyA9IERpckNhY2hlKFdvcmtzcGFjZSkgZGlm ZiAtLWdpdCANCj4gYS9CYXNlVG9vbHMvU291cmNlL1B5dGhvbi9Xb3Jrc3BhY2UvTWV0YURhdGFU YWJsZS5weQ0KPiBiL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL1dvcmtzcGFjZS9NZXRhRGF0YVRh YmxlLnB5DQo+IGluZGV4IGJkNzUxZWFkZmIuLjhiZWNkZGJlMDggMTAwNjQ0DQo+IC0tLSBhL0Jh c2VUb29scy9Tb3VyY2UvUHl0aG9uL1dvcmtzcGFjZS9NZXRhRGF0YVRhYmxlLnB5DQo+ICsrKyBi L0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL1dvcmtzcGFjZS9NZXRhRGF0YVRhYmxlLnB5DQo+IEBA IC0zNyw4NCArMzcsNTggQEAgY2xhc3MgVGFibGUob2JqZWN0KToNCj4gICAgICBfQ09MVU1OXyA9 ICcnDQo+ICAgICAgX0lEX1NURVBfID0gMQ0KPiAgICAgIF9JRF9NQVhfID0gMHg4MDAwMDAwMA0K PiAgICAgIF9EVU1NWV8gPSAwDQo+IA0KPiAtICAgIGRlZiBfX2luaXRfXyhzZWxmLCBDdXJzb3Is IE5hbWU9JycsIElkQmFzZT0wLCBUZW1wb3Jhcnk9RmFsc2UpOg0KPiAtICAgICAgICBzZWxmLkN1 ciA9IEN1cnNvcg0KPiArICAgIGRlZiBfX2luaXRfXyhzZWxmLCBEYiwgTmFtZT0nJywgSWRCYXNl PTAsIFRlbXBvcmFyeT1GYWxzZSk6DQo+ICsgICAgICAgIHNlbGYuRGIgPSBEYg0KPiAgICAgICAg ICBzZWxmLlRhYmxlID0gTmFtZQ0KPiAgICAgICAgICBzZWxmLklkQmFzZSA9IGludChJZEJhc2Up DQo+ICAgICAgICAgIHNlbGYuSUQgPSBpbnQoSWRCYXNlKQ0KPiAgICAgICAgICBzZWxmLlRlbXBv cmFyeSA9IFRlbXBvcmFyeQ0KPiArICAgICAgICBzZWxmLkNvbnRlbnRzID0gW10NCj4gDQo+ICAg ICAgZGVmIF9fc3RyX18oc2VsZik6DQo+ICAgICAgICAgIHJldHVybiBzZWxmLlRhYmxlDQo+IA0K PiAgICAgICMjIENyZWF0ZSB0YWJsZQ0KPiAgICAgICMNCj4gICAgICAjIENyZWF0ZSBhIHRhYmxl DQo+ICAgICAgIw0KPiAgICAgIGRlZiBDcmVhdGUoc2VsZiwgTmV3VGFibGU9VHJ1ZSk6DQo+IC0g ICAgICAgIGlmIE5ld1RhYmxlOg0KPiAtICAgICAgICAgICAgc2VsZi5Ecm9wKCkNCj4gLQ0KPiAt ICAgICAgICBpZiBzZWxmLlRlbXBvcmFyeToNCj4gLSAgICAgICAgICAgIFNxbENvbW1hbmQgPSAi IiJjcmVhdGUgdGVtcCB0YWJsZSBJRiBOT1QgRVhJU1RTICVzICglcykiIiIgJQ0KPiAoc2VsZi5U YWJsZSwgc2VsZi5fQ09MVU1OXykNCj4gLSAgICAgICAgZWxzZToNCj4gLSAgICAgICAgICAgIFNx bENvbW1hbmQgPSAiIiJjcmVhdGUgdGFibGUgSUYgTk9UIEVYSVNUUyAlcyAoJXMpIiIiICUgKHNl bGYuVGFibGUsDQo+IHNlbGYuX0NPTFVNTl8pDQo+IC0gICAgICAgIEVka0xvZ2dlci5kZWJ1ZyhF ZGtMb2dnZXIuREVCVUdfOCwgU3FsQ29tbWFuZCkNCj4gLSAgICAgICAgc2VsZi5DdXIuZXhlY3V0 ZShTcWxDb21tYW5kKQ0KPiArICAgICAgICBzZWxmLkRiLkNyZWF0ZUVtcHR5VGFibGUoc2VsZi5U YWJsZSkNCj4gICAgICAgICAgc2VsZi5JRCA9IHNlbGYuR2V0SWQoKQ0KPiANCj4gICAgICAjIyBJ bnNlcnQgdGFibGUNCj4gICAgICAjDQo+ICAgICAgIyBJbnNlcnQgYSByZWNvcmQgaW50byBhIHRh YmxlDQo+ICAgICAgIw0KPiAgICAgIGRlZiBJbnNlcnQoc2VsZiwgKkFyZ3MpOg0KPiAgICAgICAg ICBzZWxmLklEID0gc2VsZi5JRCArIHNlbGYuX0lEX1NURVBfDQo+ICAgICAgICAgIGlmIHNlbGYu SUQgPj0gKHNlbGYuSWRCYXNlICsgc2VsZi5fSURfTUFYXyk6DQo+ICAgICAgICAgICAgICBzZWxm LklEID0gc2VsZi5JZEJhc2UgKyBzZWxmLl9JRF9TVEVQXw0KPiAtICAgICAgICBWYWx1ZXMgPSAi LCAiLmpvaW4oc3RyKEFyZykgZm9yIEFyZyBpbiBBcmdzKQ0KPiAtICAgICAgICBTcWxDb21tYW5k ID0gImluc2VydCBpbnRvICVzIHZhbHVlcyglcywgJXMpIiAlIChzZWxmLlRhYmxlLCBzZWxmLklE LA0KPiBWYWx1ZXMpDQo+IC0gICAgICAgIEVka0xvZ2dlci5kZWJ1ZyhFZGtMb2dnZXIuREVCVUdf NSwgU3FsQ29tbWFuZCkNCj4gLSAgICAgICAgc2VsZi5DdXIuZXhlY3V0ZShTcWxDb21tYW5kKQ0K PiAtICAgICAgICByZXR1cm4gc2VsZi5JRA0KPiArICAgICAgICByb3cgPSBbc2VsZi5JRF0NCj4g KyAgICAgICAgcm93LmV4dGVuZChBcmdzKQ0KPiArICAgICAgICBzZWxmLkNvbnRlbnRzLmFwcGVu ZChyb3cpDQo+IA0KPiAtICAgICMjIFF1ZXJ5IHRhYmxlDQo+IC0gICAgIw0KPiAtICAgICMgUXVl cnkgYWxsIHJlY29yZHMgb2YgdGhlIHRhYmxlDQo+IC0gICAgIw0KPiAtICAgIGRlZiBRdWVyeShz ZWxmKToNCj4gLSAgICAgICAgU3FsQ29tbWFuZCA9ICIiInNlbGVjdCAqIGZyb20gJXMiIiIgJSBz ZWxmLlRhYmxlDQo+IC0gICAgICAgIHNlbGYuQ3VyLmV4ZWN1dGUoU3FsQ29tbWFuZCkNCj4gLSAg ICAgICAgZm9yIFJzIGluIHNlbGYuQ3VyOg0KPiAtICAgICAgICAgICAgRWRrTG9nZ2VyLnZlcmJv c2Uoc3RyKFJzKSkNCj4gLSAgICAgICAgVG90YWxDb3VudCA9IHNlbGYuR2V0SWQoKQ0KPiArICAg ICAgICByZXR1cm4gc2VsZi5JRA0KPiANCj4gLSAgICAjIyBEcm9wIGEgdGFibGUNCj4gLSAgICAj DQo+IC0gICAgIyBEcm9wIHRoZSB0YWJsZQ0KPiAtICAgICMNCj4gLSAgICBkZWYgRHJvcChzZWxm KToNCj4gLSAgICAgICAgU3FsQ29tbWFuZCA9ICIiImRyb3AgdGFibGUgSUYgRVhJU1RTICVzIiIi ICUgc2VsZi5UYWJsZQ0KPiAtICAgICAgICBzZWxmLkN1ci5leGVjdXRlKFNxbENvbW1hbmQpDQo+ IA0KPiAgICAgICMjIEdldCBjb3VudA0KPiAgICAgICMNCj4gICAgICAjIEdldCBhIGNvdW50IG9m IGFsbCByZWNvcmRzIG9mIHRoZSB0YWJsZQ0KPiAgICAgICMNCj4gICAgICAjIEByZXR2YWwgQ291 bnQ6ICBUb3RhbCBjb3VudCBvZiBhbGwgcmVjb3Jkcw0KPiAgICAgICMNCj4gICAgICBkZWYgR2V0 Q291bnQoc2VsZik6DQo+IC0gICAgICAgIFNxbENvbW1hbmQgPSAiIiJzZWxlY3QgY291bnQoSUQp IGZyb20gJXMiIiIgJSBzZWxmLlRhYmxlDQo+IC0gICAgICAgIFJlY29yZCA9IHNlbGYuQ3VyLmV4 ZWN1dGUoU3FsQ29tbWFuZCkuZmV0Y2hhbGwoKQ0KPiAtICAgICAgICByZXR1cm4gUmVjb3JkWzBd WzBdDQo+ICsgICAgICAgIHRhYiA9IHNlbGYuRGIuR2V0VGFibGUoc2VsZi5UYWJsZSkNCj4gKyAg ICAgICAgcmV0dXJuIGxlbih0YWIpDQo+ICsNCj4gDQo+ICAgICAgZGVmIEdldElkKHNlbGYpOg0K PiAtICAgICAgICBTcWxDb21tYW5kID0gIiIic2VsZWN0IG1heChJRCkgZnJvbSAlcyIiIiAlIHNl bGYuVGFibGUNCj4gLSAgICAgICAgUmVjb3JkID0gc2VsZi5DdXIuZXhlY3V0ZShTcWxDb21tYW5k KS5mZXRjaGFsbCgpDQo+IC0gICAgICAgIElkID0gUmVjb3JkWzBdWzBdDQo+ICsgICAgICAgIHRh YiA9IHNlbGYuRGIuR2V0VGFibGUoc2VsZi5UYWJsZSkNCj4gKyAgICAgICAgSWQgPSBtYXgoW2lu dChpdGVtWzBdKSBmb3IgaXRlbSBpbiB0YWJdKQ0KPiAgICAgICAgICBpZiBJZCBpcyBOb25lOg0K PiAgICAgICAgICAgICAgSWQgPSBzZWxmLklkQmFzZQ0KPiAgICAgICAgICByZXR1cm4gSWQNCj4g DQo+ICAgICAgIyMgSW5pdCB0aGUgSUQgb2YgdGhlIHRhYmxlDQo+IEBAIC0xMzIsMjkgKzEwNiwz MCBAQCBjbGFzcyBUYWJsZShvYmplY3QpOg0KPiAgICAgICMNCj4gICAgICAjIEByZXR2YWwgUmVj b3JkU2V0OiAgVGhlIHJlc3VsdCBhZnRlciBleGVjdXRlZA0KPiAgICAgICMNCj4gICAgICBkZWYg RXhlYyhzZWxmLCBTcWxDb21tYW5kKToNCj4gICAgICAgICAgRWRrTG9nZ2VyLmRlYnVnKEVka0xv Z2dlci5ERUJVR181LCBTcWxDb21tYW5kKQ0KPiAtICAgICAgICBzZWxmLkN1ci5leGVjdXRlKFNx bENvbW1hbmQpDQo+IC0gICAgICAgIFJlY29yZFNldCA9IHNlbGYuQ3VyLmZldGNoYWxsKCkNCj4g KyAgICAgICAgc2VsZi5EYi5leGVjdXRlKFNxbENvbW1hbmQpDQo+ICsgICAgICAgIFJlY29yZFNl dCA9IHNlbGYuRGIuZmV0Y2hhbGwoKQ0KPiAgICAgICAgICByZXR1cm4gUmVjb3JkU2V0DQo+IA0K PiAgICAgIGRlZiBTZXRFbmRGbGFnKHNlbGYpOg0KPiAtICAgICAgICBzZWxmLkV4ZWMoImluc2Vy dCBpbnRvICVzIHZhbHVlcyglcykiICUgKHNlbGYuVGFibGUsIHNlbGYuX0RVTU1ZXykpDQo+IC0g ICAgICAgICMNCj4gLSAgICAgICAgIyBOZWVkIHRvIGV4ZWN1dGlvbiBjb21taXQgZm9yIHRhYmxl IGRhdGEgY2hhbmdlZC4NCj4gLSAgICAgICAgIw0KPiAtICAgICAgICBzZWxmLkN1ci5jb25uZWN0 aW9uLmNvbW1pdCgpDQo+ICsgICAgICAgIFRhYiA9IHNlbGYuRGIuR2V0VGFibGUoc2VsZi5UYWJs ZSkNCj4gKyAgICAgICAgVGFiLmFwcGVuZChzZWxmLl9EVU1NWV8pDQo+ICsNCj4gDQo+ICAgICAg ZGVmIElzSW50ZWdyYWwoc2VsZik6DQo+IC0gICAgICAgIFJlc3VsdCA9IHNlbGYuRXhlYygic2Vs ZWN0IG1pbihJRCkgZnJvbSAlcyIgJSAoc2VsZi5UYWJsZSkpDQo+IC0gICAgICAgIGlmIFJlc3Vs dFswXVswXSAhPSAtMToNCj4gKyAgICAgICAgdGFiID0gc2VsZi5EYi5HZXRUYWJsZShzZWxmLlRh YmxlKQ0KPiArICAgICAgICBJZCA9IG1pbihbaW50KGl0ZW1bMF0pIGZvciBpdGVtIGluIHRhYl0p DQo+ICsgICAgICAgIGlmIElkICE9IC0xOg0KPiAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQo+ ICAgICAgICAgIHJldHVybiBUcnVlDQo+IA0KPiAgICAgIGRlZiBHZXRBbGwoc2VsZik6DQo+IC0g ICAgICAgIHJldHVybiBzZWxmLkV4ZWMoInNlbGVjdCAqIGZyb20gJXMgd2hlcmUgSUQgPiAwIG9y ZGVyIGJ5IElEIiAlDQo+IChzZWxmLlRhYmxlKSkNCj4gKyAgICAgICAgdGFiID0gc2VsZi5EYi5H ZXRUYWJsZShzZWxmLlRhYmxlKQ0KPiArICAgICAgICByZXR1cm4gdGFiDQo+ICsNCj4gDQo+ICAj IyBUYWJsZUZpbGUNCj4gICMNCj4gICMgVGhpcyBjbGFzcyBkZWZpbmVkIGEgdGFibGUgdXNlZCBm b3IgZmlsZSAgIyBAQCAtMjI1LDI2ICsyMDAsMTAgQEAgDQo+IGNsYXNzIFRhYmxlRmlsZShUYWJs ZSk6DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlLlBhdGgsDQo+ICAgICAgICAgICAg ICAgICAgICAgICAgICBNb2RlbCwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUuVGlt ZVN0YW1wDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICApDQo+IA0KPiAtICAgICMjIEdldCBJ RCBvZiBhIGdpdmVuIGZpbGUNCj4gLSAgICAjDQo+IC0gICAgIyAgIEBwYXJhbSAgRmlsZVBhdGgg ICAgUGF0aCBvZiBmaWxlDQo+IC0gICAgIw0KPiAtICAgICMgICBAcmV0dmFsIElEICAgICAgICAg IElEIHZhbHVlIG9mIGdpdmVuIGZpbGUgaW4gdGhlIHRhYmxlDQo+IC0gICAgIw0KPiAtICAgIGRl ZiBHZXRGaWxlSWQoc2VsZiwgRmlsZSwgRnJvbUl0ZW09Tm9uZSk6DQo+IC0gICAgICAgIGlmIEZy b21JdGVtOg0KPiAtICAgICAgICAgICAgUXVlcnlTY3JpcHQgPSAic2VsZWN0IElEIGZyb20gJXMg d2hlcmUgRnVsbFBhdGggPSAnJXMnIGFuZCBGcm9tSXRlbQ0KPiA9ICVzIiAlIChzZWxmLlRhYmxl LCBzdHIoRmlsZSksIHN0cihGcm9tSXRlbSkpDQo+IC0gICAgICAgIGVsc2U6DQo+IC0gICAgICAg ICAgICBRdWVyeVNjcmlwdCA9ICJzZWxlY3QgSUQgZnJvbSAlcyB3aGVyZSBGdWxsUGF0aCA9ICcl cyciICUgKHNlbGYuVGFibGUsDQo+IHN0cihGaWxlKSkNCj4gLSAgICAgICAgUmVjb3JkTGlzdCA9 IHNlbGYuRXhlYyhRdWVyeVNjcmlwdCkNCj4gLSAgICAgICAgaWYgbGVuKFJlY29yZExpc3QpID09 IDA6DQo+IC0gICAgICAgICAgICByZXR1cm4gTm9uZQ0KPiAtICAgICAgICByZXR1cm4gUmVjb3Jk TGlzdFswXVswXQ0KPiAtDQo+ICAgICAgIyMgR2V0IHR5cGUgb2YgYSBnaXZlbiBmaWxlDQo+ICAg ICAgIw0KPiAgICAgICMgICBAcGFyYW0gIEZpbGVJZCAgICAgIElEIG9mIGEgZmlsZQ0KPiAgICAg ICMNCj4gICAgICAjICAgQHJldHZhbCBmaWxlX3R5cGUgICBNb2RlbCB2YWx1ZSBvZiBnaXZlbiBm aWxlIGluIHRoZSB0YWJsZQ0KPiBAQCAtMzQzLDExICszMDIsMTEgQEAgY2xhc3MgVGFibGVEYXRh TW9kZWwoVGFibGUpOg0KPiAgICAgICMgQHJldHZhbCBDcm9zc0luZGV4OiAgQ3Jvc3NJbmRleCBv ZiB0aGUgbW9kZWwNCj4gICAgICAjDQo+ICAgICAgZGVmIEdldENyb3NzSW5kZXgoc2VsZiwgTW9k ZWxOYW1lKToNCj4gICAgICAgICAgQ3Jvc3NJbmRleCA9IC0xDQo+ICAgICAgICAgIFNxbENvbW1h bmQgPSAiIiJzZWxlY3QgQ3Jvc3NJbmRleCBmcm9tIERhdGFNb2RlbCB3aGVyZSBuYW1lID0gJyIi Ig0KPiArIE1vZGVsTmFtZSArICIiIiciIiINCj4gLSAgICAgICAgc2VsZi5DdXIuZXhlY3V0ZShT cWxDb21tYW5kKQ0KPiAtICAgICAgICBmb3IgSXRlbSBpbiBzZWxmLkN1cjoNCj4gKyAgICAgICAg c2VsZi5EYi5leGVjdXRlKFNxbENvbW1hbmQpDQo+ICsgICAgICAgIGZvciBJdGVtIGluIHNlbGYu RGI6DQo+ICAgICAgICAgICAgICBDcm9zc0luZGV4ID0gSXRlbVswXQ0KPiANCj4gICAgICAgICAg cmV0dXJuIENyb3NzSW5kZXgNCj4gDQo+IGRpZmYgLS1naXQgYS9CYXNlVG9vbHMvU291cmNlL1B5 dGhvbi9Xb3Jrc3BhY2UvTWV0YUZpbGVQYXJzZXIucHkNCj4gYi9CYXNlVG9vbHMvU291cmNlL1B5 dGhvbi9Xb3Jrc3BhY2UvTWV0YUZpbGVQYXJzZXIucHkNCj4gaW5kZXggODA0YTRhYTVjYi4uYTVh ZTA1N2JkMSAxMDA2NDQNCj4gLS0tIGEvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24vV29ya3NwYWNl L01ldGFGaWxlUGFyc2VyLnB5DQo+ICsrKyBiL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL1dvcmtz cGFjZS9NZXRhRmlsZVBhcnNlci5weQ0KPiBAQCAtMTMwNiwxMiArMTMwNiwxMSBAQCBjbGFzcyBE c2NQYXJzZXIoTWV0YUZpbGVQYXJzZXIpOg0KPiAgICAgICAgICAgICAgTU9ERUxfVU5LTk9XTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIHNlbGYuX1NraXAsDQo+ICAgICAg ICAgICAgICBNT0RFTF9NRVRBX0RBVEFfVVNFUl9FWFRFTlNJT04gICAgICAgICAgICAgICAgICA6 DQo+IHNlbGYuX1NraXBVc2VyRXh0ZW5zaW9uLA0KPiAgICAgICAgICAgICAgTU9ERUxfTUVUQV9E QVRBX0NPTkRJVElPTkFMX1NUQVRFTUVOVF9FUlJPUiAgICAgOg0KPiBzZWxmLl9Qcm9jZXNzRXJy b3IsDQo+ICAgICAgICAgIH0NCj4gDQo+IC0gICAgICAgIHNlbGYuX1RhYmxlID0gTWV0YUZpbGVT dG9yYWdlKHNlbGYuX1Jhd1RhYmxlLkN1ciwgc2VsZi5NZXRhRmlsZSwNCj4gTU9ERUxfRklMRV9E U0MsIFRydWUpDQo+IC0gICAgICAgIHNlbGYuX1RhYmxlLkNyZWF0ZSgpDQo+ICsgICAgICAgIHNl bGYuX1RhYmxlID0gTWV0YUZpbGVTdG9yYWdlKHNlbGYuX1Jhd1RhYmxlLkRCLCANCj4gKyBzZWxm Lk1ldGFGaWxlLA0KPiBNT0RFTF9GSUxFX0RTQywgVHJ1ZSkNCj4gICAgICAgICAgc2VsZi5fRGly ZWN0aXZlU3RhY2sgPSBbXQ0KPiAgICAgICAgICBzZWxmLl9EaXJlY3RpdmVFdmFsU3RhY2sgPSBb XQ0KPiAgICAgICAgICBzZWxmLl9GaWxlV2l0aEVycm9yID0gc2VsZi5NZXRhRmlsZQ0KPiAgICAg ICAgICBzZWxmLl9GaWxlTG9jYWxNYWNyb3MgPSB7fQ0KPiAgICAgICAgICBzZWxmLl9TZWN0aW9u c01hY3JvRGljdC5jbGVhcigpIEBAIC0xNTY2LDExICsxNTY1LDExIEBAIGNsYXNzIA0KPiBEc2NQ YXJzZXIoTWV0YUZpbGVQYXJzZXIpOg0KPiAgICAgICAgICAgICAgRnJvbUl0ZW0gPSBzZWxmLl9D b250ZW50W3NlbGYuX0NvbnRlbnRJbmRleCAtIDFdWzBdDQo+ICAgICAgICAgICAgICBpZiBzZWxm Ll9JblN1YnNlY3Rpb246DQo+ICAgICAgICAgICAgICAgICAgT3duZXIgPSBzZWxmLl9Db250ZW50 W3NlbGYuX0NvbnRlbnRJbmRleCAtIDFdWzhdDQo+ICAgICAgICAgICAgICBlbHNlOg0KPiAgICAg ICAgICAgICAgICAgIE93bmVyID0gc2VsZi5fQ29udGVudFtzZWxmLl9Db250ZW50SW5kZXggLSAx XVswXQ0KPiAtICAgICAgICAgICAgSW5jbHVkZWRGaWxlVGFibGUgPSBNZXRhRmlsZVN0b3JhZ2Uo c2VsZi5fVGFibGUuQ3VyLCBJbmNsdWRlZEZpbGUxLA0KPiBNT0RFTF9GSUxFX0RTQywgRmFsc2Us IEZyb21JdGVtPUZyb21JdGVtKQ0KPiArICAgICAgICAgICAgSW5jbHVkZWRGaWxlVGFibGUgPSBN ZXRhRmlsZVN0b3JhZ2Uoc2VsZi5fUmF3VGFibGUuREIsDQo+IEluY2x1ZGVkRmlsZTEsIE1PREVM X0ZJTEVfRFNDLCBGYWxzZSwgRnJvbUl0ZW09RnJvbUl0ZW0pDQo+ICAgICAgICAgICAgICBQYXJz ZXIgPSBEc2NQYXJzZXIoSW5jbHVkZWRGaWxlMSwgc2VsZi5fRmlsZVR5cGUsIA0KPiBzZWxmLl9B cmNoLCBJbmNsdWRlZEZpbGVUYWJsZSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPd25lcj1Pd25lciwgRnJvbT1Gcm9tSXRlbSkNCj4gDQo+ICAgICAgICAgICAgICBzZWxmLklu Y2x1ZGVkRmlsZXMuYWRkIChJbmNsdWRlZEZpbGUxKQ0KPiANCj4gZGlmZiAtLWdpdCBhL0Jhc2VU b29scy9Tb3VyY2UvUHl0aG9uL1dvcmtzcGFjZS9NZXRhRmlsZVRhYmxlLnB5DQo+IGIvQmFzZVRv b2xzL1NvdXJjZS9QeXRob24vV29ya3NwYWNlL01ldGFGaWxlVGFibGUucHkNCj4gaW5kZXggZTBh MGI4ZDkyMy4uMDgxOTcwZGJhOCAxMDA2NDQNCj4gLS0tIGEvQmFzZVRvb2xzL1NvdXJjZS9QeXRo b24vV29ya3NwYWNlL01ldGFGaWxlVGFibGUucHkNCj4gKysrIGIvQmFzZVRvb2xzL1NvdXJjZS9Q eXRob24vV29ya3NwYWNlL01ldGFGaWxlVGFibGUucHkNCj4gQEAgLTE4LDU5ICsxOCw2NCBAQCBm cm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydCAgaW1wb3J0IA0KPiB1dWlkDQo+ IA0KPiAgaW1wb3J0IENvbW1vbi5FZGtMb2dnZXIgYXMgRWRrTG9nZ2VyDQo+ICBmcm9tIENvbW1v bi5CdWlsZFRvb2xFcnJvciBpbXBvcnQgRk9STUFUX0lOVkFMSUQNCj4gDQo+IC1mcm9tIC5NZXRh RGF0YVRhYmxlIGltcG9ydCBUYWJsZSwgVGFibGVGaWxlIC1mcm9tIC5NZXRhRGF0YVRhYmxlIA0K PiBpbXBvcnQgQ29udmVydFRvU3FsU3RyaW5nICBmcm9tIENvbW1vbkRhdGFDbGFzcy5EYXRhQ2xh c3MgaW1wb3J0IA0KPiBNT0RFTF9GSUxFX0RTQywgTU9ERUxfRklMRV9ERUMsIE1PREVMX0ZJTEVf SU5GLCBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PREVMX0ZJ TEVfT1RIRVJTICBmcm9tIA0KPiBDb21tb24uRGF0YVR5cGUgaW1wb3J0ICoNCj4gDQo+IC1jbGFz cyBNZXRhRmlsZVRhYmxlKFRhYmxlKToNCj4gK2NsYXNzIE1ldGFGaWxlVGFibGUoKToNCj4gICAg ICAjIFRSSUNLOiB1c2UgZmlsZSBJRCBhcyB0aGUgcGFydCBiZWZvcmUgJy4nDQo+ICAgICAgX0lE X1NURVBfID0gMC4wMDAwMDAwMQ0KPiAgICAgIF9JRF9NQVhfID0gMC45OTk5OTk5OQ0KPiANCj4g ICAgICAjIyBDb25zdHJ1Y3Rvcg0KPiAtICAgIGRlZiBfX2luaXRfXyhzZWxmLCBDdXJzb3IsIE1l dGFGaWxlLCBGaWxlVHlwZSwgVGVtcG9yYXJ5LA0KPiBGcm9tSXRlbT1Ob25lKToNCj4gKyAgICBk ZWYgX19pbml0X18oc2VsZiwgREIsIE1ldGFGaWxlLCBGaWxlVHlwZSwgVGVtcG9yYXJ5LCBGcm9t SXRlbT1Ob25lKToNCj4gICAgICAgICAgc2VsZi5NZXRhRmlsZSA9IE1ldGFGaWxlDQo+IC0NCj4g LSAgICAgICAgc2VsZi5fRmlsZUluZGV4VGFibGUgPSBUYWJsZUZpbGUoQ3Vyc29yKQ0KPiAtICAg ICAgICBzZWxmLl9GaWxlSW5kZXhUYWJsZS5DcmVhdGUoRmFsc2UpDQo+IC0NCj4gLSAgICAgICAg RmlsZUlkID0gc2VsZi5fRmlsZUluZGV4VGFibGUuR2V0RmlsZUlkKE1ldGFGaWxlLCBGcm9tSXRl bSkNCj4gLSAgICAgICAgaWYgbm90IEZpbGVJZDoNCj4gLSAgICAgICAgICAgIEZpbGVJZCA9IHNl bGYuX0ZpbGVJbmRleFRhYmxlLkluc2VydEZpbGUoTWV0YUZpbGUsIEZpbGVUeXBlLCBGcm9tSXRl bSkNCj4gLQ0KPiArICAgICAgICBzZWxmLlRhYmxlTmFtZSA9ICIiDQo+ICsgICAgICAgIHNlbGYu REIgPSBEQg0KPiArICAgICAgICBzZWxmLl9OdW1weVRhYiA9IE5vbmUNCj4gKyAgICAgICAgc2Vs Zi5GaWxlSWQgPSBsZW4oREIuVGJsRmlsZSkNCj4gKyAgICAgICAgc2VsZi5JRCA9IHNlbGYuRmls ZUlkDQo+ICsgICAgICAgIHNlbGYuQ3VycmVudENvbnRlbnQgPSBbXQ0KPiArICAgICAgICBEQi5U YmxGaWxlLmFwcGVuZChbTWV0YUZpbGUuTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg IE1ldGFGaWxlLkV4dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIE1ldGFGaWxlLkRpciwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIE1ldGFGaWxlLlBhdGgsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICBGaWxlVHlwZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIE1ldGFG aWxlLlRpbWVTdGFtcCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIEZyb21JdGVtXSkNCj4g ICAgICAgICAgaWYgVGVtcG9yYXJ5Og0KPiAtICAgICAgICAgICAgVGFibGVOYW1lID0gIl8lc18l c18lcyIgJSAoRmlsZVR5cGUsIEZpbGVJZCwgdXVpZC51dWlkNCgpLmhleCkNCj4gKyAgICAgICAg ICAgIHNlbGYuVGFibGVOYW1lID0gIl8lc18lc18lcyIgJSAoRmlsZVR5cGUsIA0KPiArIGxlbihE Qi5UYmxGaWxlKSwNCj4gdXVpZC51dWlkNCgpLmhleCkNCj4gICAgICAgICAgZWxzZToNCj4gLSAg ICAgICAgICAgIFRhYmxlTmFtZSA9ICJfJXNfJXMiICUgKEZpbGVUeXBlLCBGaWxlSWQpDQo+IC0N Cj4gLSAgICAgICAgI1RhYmxlLl9faW5pdF9fKHNlbGYsIEN1cnNvciwgVGFibGVOYW1lLCBGaWxl SWQsIEZhbHNlKQ0KPiAtICAgICAgICBUYWJsZS5fX2luaXRfXyhzZWxmLCBDdXJzb3IsIFRhYmxl TmFtZSwgRmlsZUlkLCBUZW1wb3JhcnkpDQo+IC0gICAgICAgIHNlbGYuQ3JlYXRlKG5vdCBzZWxm LklzSW50ZWdyaXR5KCkpDQo+ICsgICAgICAgICAgICBzZWxmLlRhYmxlTmFtZSA9ICJfJXNfJXMi ICUgKEZpbGVUeXBlLCBsZW4oREIuVGJsRmlsZSkpDQo+IA0KPiAgICAgIGRlZiBJc0ludGVncml0 eShzZWxmKToNCj4gICAgICAgICAgdHJ5Og0KPiAgICAgICAgICAgICAgVGltZVN0YW1wID0gc2Vs Zi5NZXRhRmlsZS5UaW1lU3RhbXANCj4gLSAgICAgICAgICAgIFJlc3VsdCA9IHNlbGYuQ3VyLmV4 ZWN1dGUoInNlbGVjdCBJRCBmcm9tICVzIHdoZXJlIElEPDAiICUNCj4gKHNlbGYuVGFibGUpKS5m ZXRjaGFsbCgpDQo+ICsgICAgICAgICAgICBSZXN1bHQgPSBpbnQoc2VsZi5DdXJyZW50Q29udGVu dFstMV1bMF0pIDwgMA0KPiAgICAgICAgICAgICAgaWYgbm90IFJlc3VsdDoNCj4gICAgICAgICAg ICAgICAgICAjIHVwZGF0ZSB0aGUgdGltZXN0YW1wIGluIGRhdGFiYXNlDQo+IC0gICAgICAgICAg ICAgICAgc2VsZi5fRmlsZUluZGV4VGFibGUuU2V0RmlsZVRpbWVTdGFtcChzZWxmLklkQmFzZSwg VGltZVN0YW1wKQ0KPiArICAgICAgICAgICAgICAgIHNlbGYuREIuU2V0RmlsZVRpbWVTdGFtcChz ZWxmLkZpbGVJZCwgVGltZVN0YW1wKQ0KPiAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQ0K PiANCj4gLSAgICAgICAgICAgIGlmIFRpbWVTdGFtcCAhPSBzZWxmLl9GaWxlSW5kZXhUYWJsZS5H ZXRGaWxlVGltZVN0YW1wKHNlbGYuSWRCYXNlKToNCj4gKyAgICAgICAgICAgIGlmIFRpbWVTdGFt cCAhPSBzZWxmLkRCLkdldEZpbGVUaW1lU3RhbXAoc2VsZi5GaWxlSWQpOg0KPiAgICAgICAgICAg ICAgICAgICMgdXBkYXRlIHRoZSB0aW1lc3RhbXAgaW4gZGF0YWJhc2UNCj4gLSAgICAgICAgICAg ICAgICBzZWxmLl9GaWxlSW5kZXhUYWJsZS5TZXRGaWxlVGltZVN0YW1wKHNlbGYuSWRCYXNlLCBU aW1lU3RhbXApDQo+ICsgICAgICAgICAgICAgICAgc2VsZi5EQi5TZXRGaWxlVGltZVN0YW1wKHNl bGYuRmlsZUlkLCBUaW1lU3RhbXApDQo+ICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQo+ ICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgRXhjOg0KPiAgICAgICAgICAgICAgRWRrTG9n Z2VyLmRlYnVnKEVka0xvZ2dlci5ERUJVR181LCBzdHIoRXhjKSkNCj4gICAgICAgICAgICAgIHJl dHVybiBGYWxzZQ0KPiAgICAgICAgICByZXR1cm4gVHJ1ZQ0KPiANCj4gKyAgICBkZWYgU2V0RW5k RmxhZyhzZWxmKToNCj4gKyAgICAgICAgc2VsZi5DdXJyZW50Q29udGVudC5hcHBlbmQoc2VsZi5f RFVNTVlfKQ0KPiArDQo+ICsgICAgZGVmIEdldEFsbChzZWxmKToNCj4gKyAgICAgICAgcmV0dXJu IFtpdGVtIGZvciBpdGVtIGluIHNlbGYuQ3VycmVudENvbnRlbnQgaWYgaXRlbVswXSA+IDAgXQ0K PiArDQo+ICAjIyBQeXRob24gY2xhc3MgcmVwcmVzZW50YXRpb24gb2YgdGFibGUgc3RvcmluZyBt b2R1bGUgZGF0YSAgY2xhc3MgDQo+IE1vZHVsZVRhYmxlKE1ldGFGaWxlVGFibGUpOg0KPiAgICAg IF9JRF9TVEVQXyA9IDAuMDAwMDAwMDENCj4gICAgICBfSURfTUFYXyAgPSAwLjk5OTk5OTk5DQo+ ICAgICAgX0NPTFVNTl8gPSAnJycNCj4gQEAgLTg3LDE1ICs5MiwxNSBAQCBjbGFzcyBNb2R1bGVU YWJsZShNZXRhRmlsZVRhYmxlKToNCj4gICAgICAgICAgRW5kTGluZSBJTlRFR0VSIE5PVCBOVUxM LA0KPiAgICAgICAgICBFbmRDb2x1bW4gSU5URUdFUiBOT1QgTlVMTCwNCj4gICAgICAgICAgRW5h YmxlZCBJTlRFR0VSIERFRkFVTFQgMA0KPiAgICAgICAgICAnJycNCj4gICAgICAjIHVzZWQgYXMg dGFibGUgZW5kIGZsYWcsIGluIGNhc2UgdGhlIGNoYW5nZXMgdG8gZGF0YWJhc2UgaXMgbm90IA0K PiBjb21taXR0ZWQgdG8gZGIgZmlsZQ0KPiAtICAgIF9EVU1NWV8gPSAiLTEsIC0xLCAnPT09PScs ICc9PT09JywgJz09PT0nLCAnPT09PScsICc9PT09JywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtDQo+ IDEiDQo+ICsgICAgX0RVTU1ZXyA9IFstMSwgLTEsICc9PT09JywgJz09PT0nLCAnPT09PScsICc9 PT09JywgJz09PT0nLCAtMSwgDQo+ICsgLTEsIC0xLCAtMSwgLTEsIC0NCj4gMV0NCj4gDQo+ICAg ICAgIyMgQ29uc3RydWN0b3INCj4gLSAgICBkZWYgX19pbml0X18oc2VsZiwgQ3Vyc29yLCBNZXRh RmlsZSwgVGVtcG9yYXJ5KToNCj4gLSAgICAgICAgTWV0YUZpbGVUYWJsZS5fX2luaXRfXyhzZWxm LCBDdXJzb3IsIE1ldGFGaWxlLCBNT0RFTF9GSUxFX0lORiwNCj4gVGVtcG9yYXJ5KQ0KPiArICAg IGRlZiBfX2luaXRfXyhzZWxmLCBEYiwgTWV0YUZpbGUsIFRlbXBvcmFyeSk6DQo+ICsgICAgICAg IE1ldGFGaWxlVGFibGUuX19pbml0X18oc2VsZiwgRGIsIE1ldGFGaWxlLCBNT0RFTF9GSUxFX0lO RiwNCj4gVGVtcG9yYXJ5KQ0KPiANCj4gICAgICAjIyBJbnNlcnQgYSByZWNvcmQgaW50byB0YWJs ZSBJbmYNCj4gICAgICAjDQo+ICAgICAgIyBAcGFyYW0gTW9kZWw6ICAgICAgICAgIE1vZGVsIG9m IGEgSW5mIGl0ZW0NCj4gICAgICAjIEBwYXJhbSBWYWx1ZTE6ICAgICAgICAgVmFsdWUxIG9mIGEg SW5mIGl0ZW0NCj4gQEAgLTExMCw0OCArMTE1LDYyIEBAIGNsYXNzIE1vZHVsZVRhYmxlKE1ldGFG aWxlVGFibGUpOg0KPiAgICAgICMgQHBhcmFtIEVuZENvbHVtbjogICAgICBFbmRDb2x1bW4gb2Yg YSBJbmYgaXRlbQ0KPiAgICAgICMgQHBhcmFtIEVuYWJsZWQ6ICAgICAgICBJZiB0aGlzIGl0ZW0g ZW5hYmxlZA0KPiAgICAgICMNCj4gICAgICBkZWYgSW5zZXJ0KHNlbGYsIE1vZGVsLCBWYWx1ZTEs IFZhbHVlMiwgVmFsdWUzLCANCj4gU2NvcGUxPVRBQl9BUkNIX0NPTU1PTiwgU2NvcGUyPVRBQl9D T01NT04sDQo+ICAgICAgICAgICAgICAgICBCZWxvbmdzVG9JdGVtPS0xLCBTdGFydExpbmU9LTEs IFN0YXJ0Q29sdW1uPS0xLCANCj4gRW5kTGluZT0tMSwgRW5kQ29sdW1uPS0xLCBFbmFibGVkPTAp Og0KPiAtICAgICAgICAoVmFsdWUxLCBWYWx1ZTIsIFZhbHVlMywgU2NvcGUxLCBTY29wZTIpID0g Q29udmVydFRvU3FsU3RyaW5nKChWYWx1ZTEsDQo+IFZhbHVlMiwgVmFsdWUzLCBTY29wZTEsIFNj b3BlMikpDQo+IC0gICAgICAgIHJldHVybiBUYWJsZS5JbnNlcnQoDQo+IC0gICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWwsDQo+IC0g ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZTEsDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICBWYWx1ZTIsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZTMsDQo+IC0gICAgICAg ICAgICAgICAgICAgICAgICBTY29wZTEsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBTY29w ZTIsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBCZWxvbmdzVG9JdGVtLA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICAgU3RhcnRMaW5lLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAg U3RhcnRDb2x1bW4sDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBFbmRMaW5lLA0KPiAtICAg ICAgICAgICAgICAgICAgICAgICAgRW5kQ29sdW1uLA0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgRW5hYmxlZA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgKQ0KPiArDQo+ICsgICAgICAg IChWYWx1ZTEsIFZhbHVlMiwgVmFsdWUzLCBTY29wZTEsIFNjb3BlMikgPSAoVmFsdWUxLnN0cmlw KCksDQo+IFZhbHVlMi5zdHJpcCgpLCBWYWx1ZTMuc3RyaXAoKSwgU2NvcGUxLnN0cmlwKCksIFNj b3BlMi5zdHJpcCgpKQ0KPiArICAgICAgICBzZWxmLklEID0gc2VsZi5JRCArIHNlbGYuX0lEX1NU RVBfDQo+ICsgICAgICAgIGlmIHNlbGYuSUQgPj0gKE1PREVMX0ZJTEVfSU5GICsgc2VsZi5fSURf TUFYXyk6DQo+ICsgICAgICAgICAgICBzZWxmLklEID0gTU9ERUxfRklMRV9JTkYgKyBzZWxmLl9J RF9TVEVQXw0KPiArDQo+ICsgICAgICAgIHJvdyA9IFsgc2VsZi5JRCwNCj4gKyAgICAgICAgICAg ICAgICBNb2RlbCwNCj4gKyAgICAgICAgICAgICAgICBWYWx1ZTEsDQo+ICsgICAgICAgICAgICAg ICAgVmFsdWUyLA0KPiArICAgICAgICAgICAgICAgIFZhbHVlMywNCj4gKyAgICAgICAgICAgICAg ICBTY29wZTEsDQo+ICsgICAgICAgICAgICAgICAgU2NvcGUyLA0KPiArICAgICAgICAgICAgICAg IEJlbG9uZ3NUb0l0ZW0sDQo+ICsgICAgICAgICAgICAgICAgU3RhcnRMaW5lLA0KPiArICAgICAg ICAgICAgICAgIFN0YXJ0Q29sdW1uLA0KPiArICAgICAgICAgICAgICAgIEVuZExpbmUsDQo+ICsg ICAgICAgICAgICAgICAgRW5kQ29sdW1uLA0KPiArICAgICAgICAgICAgICAgIEVuYWJsZWQNCj4g KyAgICAgICAgICAgIF0NCj4gKyAgICAgICAgc2VsZi5DdXJyZW50Q29udGVudC5hcHBlbmQocm93 KQ0KPiArICAgICAgICByZXR1cm4gc2VsZi5JRA0KPiArDQo+IA0KPiAgICAgICMjIFF1ZXJ5IHRh YmxlDQo+ICAgICAgIw0KPiAgICAgICMgQHBhcmFtICAgIE1vZGVsOiAgICAgIFRoZSBNb2RlbCBv ZiBSZWNvcmQNCj4gICAgICAjIEBwYXJhbSAgICBBcmNoOiAgICAgICBUaGUgQXJjaCBhdHRyaWJ1 dGUgb2YgUmVjb3JkDQo+ICAgICAgIyBAcGFyYW0gICAgUGxhdGZvcm0gICAgVGhlIFBsYXRmb3Jt IGF0dHJpYnV0ZSBvZiBSZWNvcmQNCj4gICAgICAjDQo+ICAgICAgIyBAcmV0dmFsOiAgICAgICBB IHJlY29yZFNldCBvZiBhbGwgZm91bmQgcmVjb3Jkcw0KPiAgICAgICMNCj4gICAgICBkZWYgUXVl cnkoc2VsZiwgTW9kZWwsIEFyY2g9Tm9uZSwgUGxhdGZvcm09Tm9uZSwNCj4gQmVsb25nc1RvSXRl bT1Ob25lKToNCj4gLSAgICAgICAgQ29uZGl0aW9uU3RyaW5nID0gIk1vZGVsPSVzIEFORCBFbmFi bGVkPj0wIiAlIE1vZGVsDQo+IC0gICAgICAgIFZhbHVlU3RyaW5nID0gIlZhbHVlMSxWYWx1ZTIs VmFsdWUzLFNjb3BlMSxTY29wZTIsSUQsU3RhcnRMaW5lIg0KPiArDQo+ICsgICAgICAgIFF1ZXJ5 VGFiID0gc2VsZi5DdXJyZW50Q29udGVudA0KPiArICAgICAgICByZXN1bHQgPSBbaXRlbSBmb3Ig aXRlbSBpbiBRdWVyeVRhYiBpZiBpdGVtWzFdID09IE1vZGVsIGFuZCANCj4gKyBpdGVtWy0xXT49 MA0KPiBdDQo+IA0KPiAgICAgICAgICBpZiBBcmNoIGlzIG5vdCBOb25lIGFuZCBBcmNoICE9IFRB Ql9BUkNIX0NPTU1PTjoNCj4gLSAgICAgICAgICAgIENvbmRpdGlvblN0cmluZyArPSAiIEFORCAo U2NvcGUxPSclcycgT1IgU2NvcGUxPSdDT01NT04nKSIgJQ0KPiBBcmNoDQo+ICsgICAgICAgICAg ICBBcmNoTGlzdCA9IHNldChbJ0NPTU1PTiddKQ0KPiArICAgICAgICAgICAgQXJjaExpc3QuYWRk KEFyY2gpDQo+ICsgICAgICAgICAgICByZXN1bHQgPSBbaXRlbSBmb3IgaXRlbSBpbiByZXN1bHQg aWYgaXRlbVs1XSBpbiBBcmNoTGlzdF0NCj4gKw0KPiAgICAgICAgICBpZiBQbGF0Zm9ybSBpcyBu b3QgTm9uZSBhbmQgUGxhdGZvcm0gIT0gVEFCX0NPTU1PTjoNCj4gLSAgICAgICAgICAgIENvbmRp dGlvblN0cmluZyArPSAiIEFORCAoU2NvcGUyPSclcycgT1IgU2NvcGUyPSdDT01NT04nIE9SDQo+ IFNjb3BlMj0nREVGQVVMVCcpIiAlIFBsYXRmb3JtDQo+ICsgICAgICAgICAgICBQbGF0Zm9ybWxp c3QgPSBzZXQoIFsnQ09NTU9OJywnREVGQVVMVCddKQ0KPiArICAgICAgICAgICAgUGxhdGZvcm1s aXN0LmFkZChQbGF0Zm9ybSkNCj4gKyAgICAgICAgICAgIHJlc3VsdCA9IFtpdGVtIGZvciBpdGVt IGluIHJlc3VsdCBpZiBpdGVtWzZdIGluIA0KPiArIFBsYXRmb3JtbGlzdF0NCj4gKw0KPiAgICAg ICAgICBpZiBCZWxvbmdzVG9JdGVtIGlzIG5vdCBOb25lOg0KPiAtICAgICAgICAgICAgQ29uZGl0 aW9uU3RyaW5nICs9ICIgQU5EIEJlbG9uZ3NUb0l0ZW09JXMiICUgQmVsb25nc1RvSXRlbQ0KPiAr ICAgICAgICAgICAgcmVzdWx0ID0gW2l0ZW0gZm9yIGl0ZW0gaW4gcmVzdWx0IGlmIGl0ZW1bN10g PT0gDQo+ICsgQmVsb25nc1RvSXRlbV0NCj4gDQo+IC0gICAgICAgIFNxbENvbW1hbmQgPSAiU0VM RUNUICVzIEZST00gJXMgV0hFUkUgJXMiICUgKFZhbHVlU3RyaW5nLA0KPiBzZWxmLlRhYmxlLCBD b25kaXRpb25TdHJpbmcpDQo+IC0gICAgICAgIHJldHVybiBzZWxmLkV4ZWMoU3FsQ29tbWFuZCkN Cj4gKyAgICAgICAgcmVzdWx0ID0gWyBbclsyXSxyWzNdLHJbNF0scls1XSxyWzZdLHJbMF0scls5 XV0gZm9yIHIgaW4gcmVzdWx0IF0NCj4gKyAgICAgICAgcmV0dXJuIHJlc3VsdA0KPiANCj4gICMj IFB5dGhvbiBjbGFzcyByZXByZXNlbnRhdGlvbiBvZiB0YWJsZSBzdG9yaW5nIHBhY2thZ2UgZGF0 YSAgY2xhc3MgDQo+IFBhY2thZ2VUYWJsZShNZXRhRmlsZVRhYmxlKToNCj4gICAgICBfQ09MVU1O XyA9ICcnJw0KPiAgICAgICAgICBJRCBSRUFMIFBSSU1BUlkgS0VZLA0KPiBAQCAtMTY3LDExICsx ODYsMTEgQEAgY2xhc3MgUGFja2FnZVRhYmxlKE1ldGFGaWxlVGFibGUpOg0KPiAgICAgICAgICBF bmRMaW5lIElOVEVHRVIgTk9UIE5VTEwsDQo+ICAgICAgICAgIEVuZENvbHVtbiBJTlRFR0VSIE5P VCBOVUxMLA0KPiAgICAgICAgICBFbmFibGVkIElOVEVHRVIgREVGQVVMVCAwDQo+ICAgICAgICAg ICcnJw0KPiAgICAgICMgdXNlZCBhcyB0YWJsZSBlbmQgZmxhZywgaW4gY2FzZSB0aGUgY2hhbmdl cyB0byBkYXRhYmFzZSBpcyBub3QgDQo+IGNvbW1pdHRlZCB0byBkYiBmaWxlDQo+IC0gICAgX0RV TU1ZXyA9ICItMSwgLTEsICc9PT09JywgJz09PT0nLCAnPT09PScsICc9PT09JywgJz09PT0nLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0NCj4gMSINCj4gKyAgICBfRFVNTVlfID0gWy0xLCAtMSwgJz09 PT0nLCAnPT09PScsICc9PT09JywgJz09PT0nLCAnPT09PScsIC0xLCANCj4gKyAtMSwgLTEsIC0x LCAtMSwgLQ0KPiAxXQ0KPiANCj4gICAgICAjIyBDb25zdHJ1Y3Rvcg0KPiAgICAgIGRlZiBfX2lu aXRfXyhzZWxmLCBDdXJzb3IsIE1ldGFGaWxlLCBUZW1wb3JhcnkpOg0KPiAgICAgICAgICBNZXRh RmlsZVRhYmxlLl9faW5pdF9fKHNlbGYsIEN1cnNvciwgTWV0YUZpbGUsIA0KPiBNT0RFTF9GSUxF X0RFQywNCj4gVGVtcG9yYXJ5KQ0KPiANCj4gQEAgLTE5Miw1MiArMjExLDYwIEBAIGNsYXNzIFBh Y2thZ2VUYWJsZShNZXRhRmlsZVRhYmxlKToNCj4gICAgICAjIEBwYXJhbSBFbmRDb2x1bW46ICAg ICAgRW5kQ29sdW1uIG9mIGEgRGVjIGl0ZW0NCj4gICAgICAjIEBwYXJhbSBFbmFibGVkOiAgICAg ICAgSWYgdGhpcyBpdGVtIGVuYWJsZWQNCj4gICAgICAjDQo+ICAgICAgZGVmIEluc2VydChzZWxm LCBNb2RlbCwgVmFsdWUxLCBWYWx1ZTIsIFZhbHVlMywgDQo+IFNjb3BlMT1UQUJfQVJDSF9DT01N T04sIFNjb3BlMj1UQUJfQ09NTU9OLA0KPiAgICAgICAgICAgICAgICAgQmVsb25nc1RvSXRlbT0t MSwgU3RhcnRMaW5lPS0xLCBTdGFydENvbHVtbj0tMSwgDQo+IEVuZExpbmU9LTEsIEVuZENvbHVt bj0tMSwgRW5hYmxlZD0wKToNCj4gLSAgICAgICAgKFZhbHVlMSwgVmFsdWUyLCBWYWx1ZTMsIFNj b3BlMSwgU2NvcGUyKSA9IENvbnZlcnRUb1NxbFN0cmluZygoVmFsdWUxLA0KPiBWYWx1ZTIsIFZh bHVlMywgU2NvcGUxLCBTY29wZTIpKQ0KPiAtICAgICAgICByZXR1cm4gVGFibGUuSW5zZXJ0KA0K PiAtICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwNCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgIE1vZGVsLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUxLA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICAgVmFsdWUyLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgVmFs dWUzLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgU2NvcGUxLA0KPiAtICAgICAgICAgICAg ICAgICAgICAgICAgU2NvcGUyLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgQmVsb25nc1Rv SXRlbSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0TGluZSwNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgIFN0YXJ0Q29sdW1uLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAg RW5kTGluZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIEVuZENvbHVtbiwNCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgIEVuYWJsZWQNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICkN Cj4gKyAgICAgICAgKFZhbHVlMSwgVmFsdWUyLCBWYWx1ZTMsIFNjb3BlMSwgU2NvcGUyKSA9IChW YWx1ZTEuc3RyaXAoKSwNCj4gVmFsdWUyLnN0cmlwKCksIFZhbHVlMy5zdHJpcCgpLCBTY29wZTEu c3RyaXAoKSwgU2NvcGUyLnN0cmlwKCkpDQo+ICsgICAgICAgIHNlbGYuSUQgPSBzZWxmLklEICsg c2VsZi5fSURfU1RFUF8NCj4gKyAgICAgICAgaWYgc2VsZi5JRCA+PSAoTU9ERUxfRklMRV9JTkYg KyBzZWxmLl9JRF9NQVhfKToNCj4gKyAgICAgICAgICAgIHNlbGYuSUQgPSBNT0RFTF9GSUxFX0lO RiArIHNlbGYuX0lEX1NURVBfDQo+ICsNCj4gKyAgICAgICAgcm93ID0gWyBzZWxmLklELA0KPiAr ICAgICAgICAgICAgICAgIE1vZGVsLA0KPiArICAgICAgICAgICAgICAgIFZhbHVlMSwNCj4gKyAg ICAgICAgICAgICAgICBWYWx1ZTIsDQo+ICsgICAgICAgICAgICAgICAgVmFsdWUzLA0KPiArICAg ICAgICAgICAgICAgIFNjb3BlMSwNCj4gKyAgICAgICAgICAgICAgICBTY29wZTIsDQo+ICsgICAg ICAgICAgICAgICAgQmVsb25nc1RvSXRlbSwNCj4gKyAgICAgICAgICAgICAgICBTdGFydExpbmUs DQo+ICsgICAgICAgICAgICAgICAgU3RhcnRDb2x1bW4sDQo+ICsgICAgICAgICAgICAgICAgRW5k TGluZSwNCj4gKyAgICAgICAgICAgICAgICBFbmRDb2x1bW4sDQo+ICsgICAgICAgICAgICAgICAg RW5hYmxlZA0KPiArICAgICAgICAgICAgXQ0KPiArICAgICAgICBzZWxmLkN1cnJlbnRDb250ZW50 LmFwcGVuZChyb3cpDQo+ICsgICAgICAgIHJldHVybiBzZWxmLklEDQo+IA0KPiAgICAgICMjIFF1 ZXJ5IHRhYmxlDQo+ICAgICAgIw0KPiAgICAgICMgQHBhcmFtICAgIE1vZGVsOiAgVGhlIE1vZGVs IG9mIFJlY29yZA0KPiAgICAgICMgQHBhcmFtICAgIEFyY2g6ICAgVGhlIEFyY2ggYXR0cmlidXRl IG9mIFJlY29yZA0KPiAgICAgICMNCj4gICAgICAjIEByZXR2YWw6ICAgICAgIEEgcmVjb3JkU2V0 IG9mIGFsbCBmb3VuZCByZWNvcmRzDQo+ICAgICAgIw0KPiAgICAgIGRlZiBRdWVyeShzZWxmLCBN b2RlbCwgQXJjaD1Ob25lKToNCj4gLSAgICAgICAgQ29uZGl0aW9uU3RyaW5nID0gIk1vZGVsPSVz IEFORCBFbmFibGVkPj0wIiAlIE1vZGVsDQo+IC0gICAgICAgIFZhbHVlU3RyaW5nID0gIlZhbHVl MSxWYWx1ZTIsVmFsdWUzLFNjb3BlMSxTY29wZTIsSUQsU3RhcnRMaW5lIg0KPiArDQo+ICsgICAg ICAgIFF1ZXJ5VGFiID0gc2VsZi5DdXJyZW50Q29udGVudA0KPiArICAgICAgICByZXN1bHQgPSBb aXRlbSBmb3IgaXRlbSBpbiBRdWVyeVRhYiBpZiBpdGVtWzFdID09IE1vZGVsIGFuZCANCj4gKyBp dGVtWy0xXT49MA0KPiBdDQo+IA0KPiAgICAgICAgICBpZiBBcmNoIGlzIG5vdCBOb25lIGFuZCBB cmNoICE9IFRBQl9BUkNIX0NPTU1PTjoNCj4gLSAgICAgICAgICAgIENvbmRpdGlvblN0cmluZyAr PSAiIEFORCAoU2NvcGUxPSclcycgT1IgU2NvcGUxPSdDT01NT04nKSIgJQ0KPiBBcmNoDQo+ICsg ICAgICAgICAgICBBcmNoTGlzdCA9IHNldChbJ0NPTU1PTiddKQ0KPiArICAgICAgICAgICAgQXJj aExpc3QuYWRkKEFyY2gpDQo+ICsgICAgICAgICAgICByZXN1bHQgPSBbaXRlbSBmb3IgaXRlbSBp biByZXN1bHQgaWYgaXRlbVs1XSBpbiBBcmNoTGlzdF0NCj4gDQo+IC0gICAgICAgIFNxbENvbW1h bmQgPSAiU0VMRUNUICVzIEZST00gJXMgV0hFUkUgJXMiICUgKFZhbHVlU3RyaW5nLA0KPiBzZWxm LlRhYmxlLCBDb25kaXRpb25TdHJpbmcpDQo+IC0gICAgICAgIHJldHVybiBzZWxmLkV4ZWMoU3Fs Q29tbWFuZCkNCj4gKyAgICAgICAgcmV0dXJuIFtbclsyXSwgclszXSwgcls0XSwgcls1XSwgcls2 XSwgclswXSwgcls4XV0gZm9yIHIgaW4gDQo+ICsgcmVzdWx0XQ0KPiANCj4gICAgICBkZWYgR2V0 VmFsaWRFeHByZXNzaW9uKHNlbGYsIFRva2VuU3BhY2VHdWlkLCBQY2RDTmFtZSk6DQo+IC0gICAg ICAgIFNxbENvbW1hbmQgPSAic2VsZWN0IFZhbHVlMSxTdGFydExpbmUgZnJvbSAlcyBXSEVSRSBW YWx1ZTI9JyVzJw0KPiBhbmQgVmFsdWUzPSclcyciICUgKHNlbGYuVGFibGUsIFRva2VuU3BhY2VH dWlkLCBQY2RDTmFtZSkNCj4gLSAgICAgICAgc2VsZi5DdXIuZXhlY3V0ZShTcWxDb21tYW5kKQ0K PiArDQo+ICsgICAgICAgIFF1ZXJ5VGFiID0gc2VsZi5DdXJyZW50Q29udGVudA0KPiArICAgICAg ICByZXN1bHQgPSBbW2l0ZW1bMl0sIGl0ZW1bOF1dIGZvciBpdGVtIGluIFF1ZXJ5VGFiIGlmIGl0 ZW1bM10gDQo+ICsgPT0NCj4gVG9rZW5TcGFjZUd1aWQgYW5kIGl0ZW1bNF0gPT0gUGNkQ05hbWVd DQo+ICAgICAgICAgIHZhbGlkYXRlcmFuZ2VzID0gW10NCj4gICAgICAgICAgdmFsaWRsaXN0cyA9 IFtdDQo+ICAgICAgICAgIGV4cHJlc3Npb25zID0gW10NCj4gICAgICAgICAgdHJ5Og0KPiAtICAg ICAgICAgICAgZm9yIHJvdyBpbiBzZWxmLkN1cjoNCj4gKyAgICAgICAgICAgIGZvciByb3cgaW4g cmVzdWx0Og0KPiAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSByb3dbMF0NCj4gDQo+ICAgICAg ICAgICAgICAgICAgTGluZU51bSA9IHJvd1sxXQ0KPiAgICAgICAgICAgICAgICAgIGNvbW1lbnQg PSBjb21tZW50LnN0cmlwKCIjIikNCj4gICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVu dC5zdHJpcCgpIEBAIC0yODEsMTEgKzMwOCwxMSBAQCBjbGFzcyANCj4gUGxhdGZvcm1UYWJsZShN ZXRhRmlsZVRhYmxlKToNCj4gICAgICAgICAgRW5kTGluZSBJTlRFR0VSIE5PVCBOVUxMLA0KPiAg ICAgICAgICBFbmRDb2x1bW4gSU5URUdFUiBOT1QgTlVMTCwNCj4gICAgICAgICAgRW5hYmxlZCBJ TlRFR0VSIERFRkFVTFQgMA0KPiAgICAgICAgICAnJycNCj4gICAgICAjIHVzZWQgYXMgdGFibGUg ZW5kIGZsYWcsIGluIGNhc2UgdGhlIGNoYW5nZXMgdG8gZGF0YWJhc2UgaXMgbm90IA0KPiBjb21t aXR0ZWQgdG8gZGIgZmlsZQ0KPiAtICAgIF9EVU1NWV8gPSAiLTEsIC0xLCAnPT09PScsICc9PT09 JywgJz09PT0nLCAnPT09PScsICc9PT09JywnPT09PScsIC0xLCAtMSwgLTEsDQo+IC0xLCAtMSwg LTEsIC0xIg0KPiArICAgIF9EVU1NWV8gPSBbLTEsIC0xLCAnPT09PScsICc9PT09JywgJz09PT0n LCAnPT09PScsICc9PT09JywnPT09PScsIA0KPiArIC0xLCAtMSwgLTEsDQo+IC0xLCAtMSwgLTEs IC0xXQ0KPiANCj4gICAgICAjIyBDb25zdHJ1Y3Rvcg0KPiAgICAgIGRlZiBfX2luaXRfXyhzZWxm LCBDdXJzb3IsIE1ldGFGaWxlLCBUZW1wb3JhcnksIEZyb21JdGVtPTApOg0KPiAgICAgICAgICBN ZXRhRmlsZVRhYmxlLl9faW5pdF9fKHNlbGYsIEN1cnNvciwgTWV0YUZpbGUsIA0KPiBNT0RFTF9G SUxFX0RTQywgVGVtcG9yYXJ5LCBGcm9tSXRlbSkNCj4gDQo+IEBAIC0zMDcsMjggKzMzNCwzNCBA QCBjbGFzcyBQbGF0Zm9ybVRhYmxlKE1ldGFGaWxlVGFibGUpOg0KPiAgICAgICMgQHBhcmFtIEVu ZENvbHVtbjogICAgICBFbmRDb2x1bW4gb2YgYSBEc2MgaXRlbQ0KPiAgICAgICMgQHBhcmFtIEVu YWJsZWQ6ICAgICAgICBJZiB0aGlzIGl0ZW0gZW5hYmxlZA0KPiAgICAgICMNCj4gICAgICBkZWYg SW5zZXJ0KHNlbGYsIE1vZGVsLCBWYWx1ZTEsIFZhbHVlMiwgVmFsdWUzLCANCj4gU2NvcGUxPVRB Ql9BUkNIX0NPTU1PTiwgU2NvcGUyPVRBQl9DT01NT04sIA0KPiBTY29wZTM9VEFCX0RFRkFVTFRf U1RPUkVTX0RFRkFVTFQsQmVsb25nc1RvSXRlbT0tMSwNCj4gICAgICAgICAgICAgICAgIEZyb21J dGVtPS0xLCBTdGFydExpbmU9LTEsIFN0YXJ0Q29sdW1uPS0xLCBFbmRMaW5lPS0xLCANCj4gRW5k Q29sdW1uPS0xLCBFbmFibGVkPTEpOg0KPiAtICAgICAgICAoVmFsdWUxLCBWYWx1ZTIsIFZhbHVl MywgU2NvcGUxLCBTY29wZTIsIFNjb3BlMykgPQ0KPiBDb252ZXJ0VG9TcWxTdHJpbmcoKFZhbHVl MSwgVmFsdWUyLCBWYWx1ZTMsIFNjb3BlMSwgU2NvcGUyLCBTY29wZTMpKQ0KPiAtICAgICAgICBy ZXR1cm4gVGFibGUuSW5zZXJ0KA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVsLA0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgVmFsdWUxLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUyLA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICAgVmFsdWUzLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgU2Nv cGUxLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgU2NvcGUyLA0KPiAtICAgICAgICAgICAg ICAgICAgICAgICAgU2NvcGUzLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgQmVsb25nc1Rv SXRlbSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIEZyb21JdGVtLA0KPiAtICAgICAgICAg ICAgICAgICAgICAgICAgU3RhcnRMaW5lLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgU3Rh cnRDb2x1bW4sDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBFbmRMaW5lLA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICAgRW5kQ29sdW1uLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAg RW5hYmxlZA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgKQ0KPiArICAgICAgICAoVmFsdWUx LCBWYWx1ZTIsIFZhbHVlMywgU2NvcGUxLCBTY29wZTIsIFNjb3BlMykgPSANCj4gKyAoVmFsdWUx LnN0cmlwKCksDQo+IFZhbHVlMi5zdHJpcCgpLCBWYWx1ZTMuc3RyaXAoKSwgU2NvcGUxLnN0cmlw KCksIFNjb3BlMi5zdHJpcCgpLCANCj4gU2NvcGUzLnN0cmlwKCkpDQo+ICsgICAgICAgIHNlbGYu SUQgPSBzZWxmLklEICsgc2VsZi5fSURfU1RFUF8NCj4gKyAgICAgICAgaWYgc2VsZi5JRCA+PSAo TU9ERUxfRklMRV9JTkYgKyBzZWxmLl9JRF9NQVhfKToNCj4gKyAgICAgICAgICAgIHNlbGYuSUQg PSBNT0RFTF9GSUxFX0lORiArIHNlbGYuX0lEX1NURVBfDQo+ICsNCj4gKyAgICAgICAgcm93ID0g WyBzZWxmLklELA0KPiArICAgICAgICAgICAgICAgIE1vZGVsLA0KPiArICAgICAgICAgICAgICAg IFZhbHVlMSwNCj4gKyAgICAgICAgICAgICAgICBWYWx1ZTIsDQo+ICsgICAgICAgICAgICAgICAg VmFsdWUzLA0KPiArICAgICAgICAgICAgICAgIFNjb3BlMSwNCj4gKyAgICAgICAgICAgICAgICBT Y29wZTIsDQo+ICsgICAgICAgICAgICAgICAgU2NvcGUzLA0KPiArICAgICAgICAgICAgICAgIEJl bG9uZ3NUb0l0ZW0sDQo+ICsgICAgICAgICAgICAgICAgRnJvbUl0ZW0sDQo+ICsgICAgICAgICAg ICAgICAgU3RhcnRMaW5lLA0KPiArICAgICAgICAgICAgICAgIFN0YXJ0Q29sdW1uLA0KPiArICAg ICAgICAgICAgICAgIEVuZExpbmUsDQo+ICsgICAgICAgICAgICAgICAgRW5kQ29sdW1uLA0KPiAr ICAgICAgICAgICAgICAgIEVuYWJsZWQNCj4gKyAgICAgICAgICAgIF0NCj4gKyAgICAgICAgc2Vs Zi5DdXJyZW50Q29udGVudC5hcHBlbmQocm93KQ0KPiArICAgICAgICByZXR1cm4gc2VsZi5JRA0K PiArDQo+IA0KPiAgICAgICMjIFF1ZXJ5IHRhYmxlDQo+ICAgICAgIw0KPiAgICAgICMgQHBhcmFt IE1vZGVsOiAgICAgICAgICBUaGUgTW9kZWwgb2YgUmVjb3JkDQo+ICAgICAgIyBAcGFyYW0gU2Nv cGUxOiAgICAgICAgIEFyY2ggb2YgYSBEc2MgaXRlbQ0KPiBAQCAtMzM3LDM0ICszNzAsMzcgQEAg Y2xhc3MgUGxhdGZvcm1UYWJsZShNZXRhRmlsZVRhYmxlKToNCj4gICAgICAjIEBwYXJhbSBGcm9t SXRlbTogICAgICAgVGhlIGl0ZW0gYmVsb25ncyB0byB3aGljaCBkc2MgZmlsZQ0KPiAgICAgICMN Cj4gICAgICAjIEByZXR2YWw6ICAgICAgIEEgcmVjb3JkU2V0IG9mIGFsbCBmb3VuZCByZWNvcmRz DQo+ICAgICAgIw0KPiAgICAgIGRlZiBRdWVyeShzZWxmLCBNb2RlbCwgU2NvcGUxPU5vbmUsIFNj b3BlMj1Ob25lLCANCj4gQmVsb25nc1RvSXRlbT1Ob25lLCBGcm9tSXRlbT1Ob25lKToNCj4gLSAg ICAgICAgQ29uZGl0aW9uU3RyaW5nID0gIk1vZGVsPSVzIEFORCBFbmFibGVkPjAiICUgTW9kZWwN Cj4gLSAgICAgICAgVmFsdWVTdHJpbmcgPQ0KPiAiVmFsdWUxLFZhbHVlMixWYWx1ZTMsU2NvcGUx LFNjb3BlMixTY29wZTMsSUQsU3RhcnRMaW5lIg0KPiArDQo+ICsgICAgICAgIFF1ZXJ5VGFiID0g c2VsZi5DdXJyZW50Q29udGVudA0KPiArICAgICAgICByZXN1bHQgPSBbaXRlbSBmb3IgaXRlbSBp biBRdWVyeVRhYiBpZiBpdGVtWzFdID09IE1vZGVsIGFuZCANCj4gKyBpdGVtWy0xXT4wIF0NCj4g DQo+ICAgICAgICAgIGlmIFNjb3BlMSBpcyBub3QgTm9uZSBhbmQgU2NvcGUxICE9IFRBQl9BUkNI X0NPTU1PTjoNCj4gLSAgICAgICAgICAgIENvbmRpdGlvblN0cmluZyArPSAiIEFORCAoU2NvcGUx PSclcycgT1IgU2NvcGUxPSdDT01NT04nKSIgJQ0KPiBTY29wZTENCj4gLSAgICAgICAgaWYgU2Nv cGUyIGlzIG5vdCBOb25lIGFuZCBTY29wZTIgIT0gVEFCX0NPTU1PTjoNCj4gLSAgICAgICAgICAg ICMgQ292ZXIgdGhlIGNhc2UgdGhhdCBDb2RlQmFzZSBpcyAnQ09NTU9OJyBmb3IgQnVpbGRPcHRp b25zIHNlY3Rpb24NCj4gKyAgICAgICAgICAgIFNjMSA9IHNldChbJ0NPTU1PTiddKQ0KPiArICAg ICAgICAgICAgU2MxLmFkZChTY29wZTEpDQo+ICsgICAgICAgICAgICByZXN1bHQgPSBbaXRlbSBm b3IgaXRlbSBpbiByZXN1bHQgaWYgaXRlbVs1XSBpbiBTYzFdDQo+ICsgICAgICAgIFNjMiA9IHNl dCggWydDT01NT04nLCdERUZBVUxUJ10pDQo+ICsgICAgICAgIGlmIFNjb3BlMiBhbmQgU2NvcGUy ICE9IFRBQl9DT01NT046DQo+ICAgICAgICAgICAgICBpZiAnLicgaW4gU2NvcGUyOg0KPiAgICAg ICAgICAgICAgICAgIEluZGV4ID0gU2NvcGUyLmluZGV4KCcuJykNCj4gICAgICAgICAgICAgICAg ICBOZXdTY29wZSA9IFRBQl9DT01NT04gKyBTY29wZTJbSW5kZXg6XQ0KPiAtICAgICAgICAgICAg ICAgIENvbmRpdGlvblN0cmluZyArPSAiIEFORCAoU2NvcGUyPSclcycgT1IgU2NvcGUyPSdDT01N T04nIE9SDQo+IFNjb3BlMj0nREVGQVVMVCcgT1IgU2NvcGUyPSclcycpIiAlIChTY29wZTIsIE5l d1Njb3BlKQ0KPiAtICAgICAgICAgICAgZWxzZToNCj4gLSAgICAgICAgICAgICAgICBDb25kaXRp b25TdHJpbmcgKz0gIiBBTkQgKFNjb3BlMj0nJXMnIE9SIFNjb3BlMj0nQ09NTU9OJyBPUg0KPiBT Y29wZTI9J0RFRkFVTFQnKSIgJSBTY29wZTINCj4gKyAgICAgICAgICAgICAgICBTYzIuYWRkKE5l d1Njb3BlKQ0KPiArICAgICAgICAgICAgU2MyLmFkZChTY29wZTIpDQo+ICsgICAgICAgICAgICBy ZXN1bHQgPSBbaXRlbSBmb3IgaXRlbSBpbiByZXN1bHQgaWYgaXRlbVs2XSBpbiBTYzJdDQo+IA0K PiAgICAgICAgICBpZiBCZWxvbmdzVG9JdGVtIGlzIG5vdCBOb25lOg0KPiAtICAgICAgICAgICAg Q29uZGl0aW9uU3RyaW5nICs9ICIgQU5EIEJlbG9uZ3NUb0l0ZW09JXMiICUgQmVsb25nc1RvSXRl bQ0KPiArICAgICAgICAgICAgcmVzdWx0ID0gW2l0ZW0gZm9yIGl0ZW0gaW4gcmVzdWx0IGlmIGl0 ZW1bOF0gPT0gDQo+ICsgQmVsb25nc1RvSXRlbV0NCj4gICAgICAgICAgZWxzZToNCj4gLSAgICAg ICAgICAgIENvbmRpdGlvblN0cmluZyArPSAiIEFORCBCZWxvbmdzVG9JdGVtPDAiDQo+IC0NCj4g KyAgICAgICAgICAgIHJlc3VsdCA9IFtpdGVtIGZvciBpdGVtIGluIHJlc3VsdCBpZiBpdGVtWzhd IDwgMF0NCj4gICAgICAgICAgaWYgRnJvbUl0ZW0gaXMgbm90IE5vbmU6DQo+IC0gICAgICAgICAg ICBDb25kaXRpb25TdHJpbmcgKz0gIiBBTkQgRnJvbUl0ZW09JXMiICUgRnJvbUl0ZW0NCj4gKyAg ICAgICAgICAgIHJlc3VsdCA9IFtpdGVtIGZvciBpdGVtIGluIHJlc3VsdCBpZiBpdGVtWzldID09 IEZyb21JdGVtXQ0KPiArDQo+ICsgICAgICAgIHJlc3VsdCA9IFsgW3JbMl0sclszXSxyWzRdLHJb NV0scls2XSxyWzddLHJbMF0scls5XV0gZm9yIHIgaW4gcmVzdWx0IF0NCj4gKyAgICAgICAgcmV0 dXJuIHJlc3VsdA0KPiANCj4gLSAgICAgICAgU3FsQ29tbWFuZCA9ICJTRUxFQ1QgJXMgRlJPTSAl cyBXSEVSRSAlcyIgJSAoVmFsdWVTdHJpbmcsDQo+IHNlbGYuVGFibGUsIENvbmRpdGlvblN0cmlu ZykNCj4gLSAgICAgICAgcmV0dXJuIHNlbGYuRXhlYyhTcWxDb21tYW5kKQ0KPiANCj4gICMjIEZh Y3RvcnkgY2xhc3MgdG8gcHJvZHVjZSBkaWZmZXJlbnQgc3RvcmFnZSBmb3IgZGlmZmVyZW50IHR5 cGUgb2YgDQo+IG1ldGEtZmlsZSAgY2xhc3MgTWV0YUZpbGVTdG9yYWdlKG9iamVjdCk6DQo+ICAg ICAgX0ZJTEVfVEFCTEVfID0gew0KPiAgICAgICAgICBNT0RFTF9GSUxFX0lORiAgICAgIDogICBN b2R1bGVUYWJsZSwNCj4gZGlmZiAtLWdpdCBhL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL1dvcmtz cGFjZS9Xb3Jrc3BhY2VEYXRhYmFzZS5weQ0KPiBiL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL1dv cmtzcGFjZS9Xb3Jrc3BhY2VEYXRhYmFzZS5weQ0KPiBpbmRleCAzYmIyODdiOGIyLi5iYjZkYWZl OWNjIDEwMDY0NA0KPiAtLS0gYS9CYXNlVG9vbHMvU291cmNlL1B5dGhvbi9Xb3Jrc3BhY2UvV29y a3NwYWNlRGF0YWJhc2UucHkNCj4gKysrIGIvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24vV29ya3Nw YWNlL1dvcmtzcGFjZURhdGFiYXNlLnB5DQo+IEBAIC0xNCwxMSArMTQsMTAgQEANCj4gDQo+ICAj Iw0KPiAgIyBJbXBvcnQgTW9kdWxlcw0KPiAgIw0KPiAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBh YnNvbHV0ZV9pbXBvcnQgLWltcG9ydCBzcWxpdGUzICBmcm9tIA0KPiBDb21tb24uU3RyaW5nVXRp bHMgaW1wb3J0ICogIGZyb20gQ29tbW9uLkRhdGFUeXBlIGltcG9ydCAqICBmcm9tIA0KPiBDb21t b24uTWlzYyBpbXBvcnQgKiAgZnJvbSB0eXBlcyBpbXBvcnQgKg0KPiANCj4gQEAgLTExNiwxMSAr MTE1LDExIEBAIGNsYXNzIFdvcmtzcGFjZURhdGFiYXNlKG9iamVjdCk6DQo+ICAgICAgICAgICAg ICAjIGdldCB0aGUgcGFyc2VyIHJlYWR5IGZvciB0aGlzIGZpbGUNCj4gICAgICAgICAgICAgIE1l dGFGaWxlID0gc2VsZi5fRklMRV9QQVJTRVJfW0ZpbGVUeXBlXSgNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlsZVBhdGgsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZpbGVUeXBlLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmNo LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXRhRmlsZVN0b3JhZ2Uoc2Vs Zi5Xb3Jrc3BhY2VEYi5DdXIsIEZpbGVQYXRoLCBGaWxlVHlwZSkNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTWV0YUZpbGVTdG9yYWdlKHNlbGYuV29ya3NwYWNlRGIsIA0KPiAr IEZpbGVQYXRoLCBGaWxlVHlwZSkNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQ0KPiAgICAgICAgICAgICAgIyBhbHdhc3kgZG8gcG9zdC1wcm9jZXNzLCBpbiBjYXNlIG9mIG1h Y3JvcyBjaGFuZ2UNCj4gICAgICAgICAgICAgIE1ldGFGaWxlLkRvUG9zdFByb2Nlc3MoKQ0KPiAg ICAgICAgICAgICAgIyBvYmplY3QgdGhlIGJ1aWxkIGlzIGJhc2VkIG9uDQo+ICAgICAgICAgICAg ICBCdWlsZE9iamVjdCA9IHNlbGYuX0dFTkVSQVRPUl9bRmlsZVR5cGVdKCBAQCAtMTQ3LDEzNyAN Cj4gKzE0NiwyNyBAQCBjbGFzcyBXb3Jrc3BhY2VEYXRhYmFzZShvYmplY3QpOg0KPiAgICAgICMN Cj4gICAgICAjIEBwYXJhbSBEYlBhdGggICAgICAgICAgICAgUGF0aCBvZiBkYXRhYmFzZSBmaWxl DQo+ICAgICAgIyBAcGFyYW0gR2xvYmFsTWFjcm9zICAgICAgIEdsb2JhbCBtYWNyb3MgdXNlZCBm b3IgcmVwbGFjZW1lbnQgZHVyaW5nDQo+IGZpbGUgcGFyc2luZw0KPiAgICAgICMgQHByYXJtIFJl bmV3RGI9RmFsc2UgICAgICBDcmVhdGUgbmV3IGRhdGFiYXNlIGZpbGUgaWYgaXQncyBhbHJlYWR5 IHRoZXJlDQo+ICAgICAgIw0KPiAtICAgIGRlZiBfX2luaXRfXyhzZWxmLCBEYlBhdGgsIFJlbmV3 RGI9RmFsc2UpOg0KPiAtICAgICAgICBzZWxmLl9EYkNsb3NlZEZsYWcgPSBGYWxzZQ0KPiAtICAg ICAgICBpZiBub3QgRGJQYXRoOg0KPiAtICAgICAgICAgICAgRGJQYXRoID0gb3MucGF0aC5ub3Jt cGF0aChtd3Muam9pbihHbG9iYWxEYXRhLmdXb3Jrc3BhY2UsICdDb25mJywNCj4gR2xvYmFsRGF0 YS5nRGF0YWJhc2VQYXRoKSkNCj4gLQ0KPiAtICAgICAgICAjIGRvbid0IGNyZWF0ZSBuZWNlc3Nh cnkgcGF0aCBmb3IgZGIgaW4gbWVtb3J5DQo+IC0gICAgICAgIGlmIERiUGF0aCAhPSAnOm1lbW9y eTonOg0KPiAtICAgICAgICAgICAgRGJEaXIgPSBvcy5wYXRoLnNwbGl0KERiUGF0aClbMF0NCj4g LSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhEYkRpcik6DQo+IC0gICAgICAgICAg ICAgICAgb3MubWFrZWRpcnMoRGJEaXIpDQo+IC0NCj4gLSAgICAgICAgICAgICMgcmVtb3ZlIGRi IGZpbGUgaW4gY2FzZSBpbmNvbnNpc3RlbmN5IGJldHdlZW4gZGIgYW5kIGZpbGUgaW4gZmlsZQ0K PiBzeXN0ZW0NCj4gLSAgICAgICAgICAgIGlmIHNlbGYuX0NoZWNrV2hldGhlckRiTmVlZFJlbmV3 KFJlbmV3RGIsIERiUGF0aCk6DQo+IC0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKERiUGF0aCkN Cj4gLQ0KPiAtICAgICAgICAjIGNyZWF0ZSBkYiB3aXRoIG9wdGltaXplZCBwYXJhbWV0ZXJzDQo+ IC0gICAgICAgIHNlbGYuQ29ubiA9IHNxbGl0ZTMuY29ubmVjdChEYlBhdGgsIGlzb2xhdGlvbl9s ZXZlbD0nREVGRVJSRUQnKQ0KPiAtICAgICAgICBzZWxmLkNvbm4uZXhlY3V0ZSgiUFJBR01BIHN5 bmNocm9ub3VzPU9GRiIpDQo+IC0gICAgICAgIHNlbGYuQ29ubi5leGVjdXRlKCJQUkFHTUEgdGVt cF9zdG9yZT1NRU1PUlkiKQ0KPiAtICAgICAgICBzZWxmLkNvbm4uZXhlY3V0ZSgiUFJBR01BIGNv dW50X2NoYW5nZXM9T0ZGIikNCj4gLSAgICAgICAgc2VsZi5Db25uLmV4ZWN1dGUoIlBSQUdNQSBj YWNoZV9zaXplPTgxOTIiKQ0KPiAtICAgICAgICAjc2VsZi5Db25uLmV4ZWN1dGUoIlBSQUdNQSBw YWdlX3NpemU9ODE5MiIpDQo+IC0NCj4gLSAgICAgICAgIyB0byBhdm9pZCBub24tYXNjaWkgY2hh cmFjdGVyIGNvbnZlcnNpb24gaXNzdWUNCj4gLSAgICAgICAgc2VsZi5Db25uLnRleHRfZmFjdG9y eSA9IHN0cg0KPiAtICAgICAgICBzZWxmLkN1ciA9IHNlbGYuQ29ubi5jdXJzb3IoKQ0KPiAtDQo+ ICsgICAgZGVmIF9faW5pdF9fKHNlbGYpOg0KPiArICAgICAgICBzZWxmLkRCID0gZGljdCgpDQo+ ICAgICAgICAgICMgY3JlYXRlIHRhYmxlIGZvciBpbnRlcm5hbCB1c2VzDQo+IC0gICAgICAgIHNl bGYuVGJsRGF0YU1vZGVsID0gVGFibGVEYXRhTW9kZWwoc2VsZi5DdXIpDQo+IC0gICAgICAgIHNl bGYuVGJsRmlsZSA9IFRhYmxlRmlsZShzZWxmLkN1cikNCj4gKyAgICAgICAgc2VsZi5UYmxEYXRh TW9kZWwgPSBEYXRhQ2xhc3MuTU9ERUxfTElTVA0KPiArICAgICAgICBzZWxmLlRibEZpbGUgPSBb XQ0KPiAgICAgICAgICBzZWxmLlBsYXRmb3JtID0gTm9uZQ0KPiANCj4gICAgICAgICAgIyBjb252 ZXJzaW9uIG9iamVjdCBmb3IgYnVpbGQgb3IgZmlsZSBmb3JtYXQgY29udmVyc2lvbiBwdXJwb3Nl DQo+ICAgICAgICAgIHNlbGYuQnVpbGRPYmplY3QgPSBXb3Jrc3BhY2VEYXRhYmFzZS5CdWlsZE9i amVjdEZhY3Rvcnkoc2VsZikNCj4gICAgICAgICAgc2VsZi5UcmFuc2Zvcm1PYmplY3QgPQ0KPiBX b3Jrc3BhY2VEYXRhYmFzZS5UcmFuc2Zvcm1PYmplY3RGYWN0b3J5KHNlbGYpDQo+IA0KPiAtICAg ICMjIENoZWNrIHdoZXRoZXIgd29ya3NwYWNlIGRhdGFiYXNlIG5lZWQgdG8gYmUgcmVuZXcuDQo+ IC0gICAgIyAgVGhlIHJlbmV3IHJlYXNvbiBtYXliZToNCj4gLSAgICAjICAxKSBJZiB1c2VyIGZv cmNlIHRvIHJlbmV3Ow0KPiAtICAgICMgIDIpIElmIHVzZXIgZG8gbm90IGZvcmNlIHJlbmV3LCBh bmQNCj4gLSAgICAjICAgICBhKSBJZiB0aGUgdGltZSBvZiBsYXN0IG1vZGlmaWVkIHB5dGhvbiBz b3VyY2UgaXMgbmV3ZXIgdGhhbiBkYXRhYmFzZQ0KPiBmaWxlOw0KPiAtICAgICMgICAgIGIpIElm IHRoZSB0aW1lIG9mIGxhc3QgbW9kaWZpZWQgZnJvemVuIGV4ZWN1dGFibGUgZmlsZSBpcyBuZXdl ciB0aGFuDQo+IGRhdGFiYXNlIGZpbGU7DQo+IC0gICAgIw0KPiAtICAgICMgIEBwYXJhbSBmb3Jj ZSAgICAgVXNlciBmb3JjZSByZW5ldyBkYXRhYmFzZQ0KPiAtICAgICMgIEBwYXJhbSBEYlBhdGgg ICAgVGhlIGFic29sdXRlIHBhdGggb2Ygd29ya3NwYWNlIGRhdGFiYXNlIGZpbGUNCj4gLSAgICAj DQo+IC0gICAgIyAgQHJldHVybiBCb29sIHZhbHVlIGZvciB3aGV0aGVyIG5lZWQgcmVuZXcgd29y a3NwYWNlIGRhdGFic2UNCj4gLSAgICAjDQo+IC0gICAgZGVmIF9DaGVja1doZXRoZXJEYk5lZWRS ZW5ldyAoc2VsZiwgZm9yY2UsIERiUGF0aCk6DQo+IC0gICAgICAgICMgaWYgZGF0YWJhc2UgZG9l cyBub3QgZXhpc3QsIHdlIG5lZWQgZG8gbm90aGluZw0KPiAtICAgICAgICBpZiBub3Qgb3MucGF0 aC5leGlzdHMoRGJQYXRoKTogcmV0dXJuIEZhbHNlDQo+IC0NCj4gLSAgICAgICAgIyBpZiB1c2Vy IGZvcmNlIHRvIHJlbmV3IGRhdGFiYXNlLCB0aGVuIG5vdCBjaGVjayB3aGV0aGVyIGRhdGFiYXNl IGlzDQo+IG91dCBvZiBkYXRlDQo+IC0gICAgICAgIGlmIGZvcmNlOiByZXR1cm4gVHJ1ZQ0KPiAt DQo+IC0gICAgICAgICMNCj4gLSAgICAgICAgIyBDaGVjayB0aGUgdGltZSBvZiBsYXN0IG1vZGlm aWVkIHNvdXJjZSBmaWxlIG9yIGJ1aWxkLmV4ZQ0KPiAtICAgICAgICAjIGlmIGlzIG5ld2VyIHRo YW4gdGltZSBvZiBkYXRhYmFzZSwgdGhlbiBkYXRhYmFzZSBuZWVkIHRvIGJlIHJlLQ0KPiBjcmVh dGVkLg0KPiAtICAgICAgICAjDQo+IC0gICAgICAgIHRpbWVPZlRvb2xNb2RpZmllZCA9IDANCj4g LSAgICAgICAgaWYgaGFzYXR0cihzeXMsICJmcm96ZW4iKToNCj4gLSAgICAgICAgICAgIGV4ZVBh dGggICAgICAgICAgICAgPSBvcy5wYXRoLmFic3BhdGgoc3lzLmV4ZWN1dGFibGUpDQo+IC0gICAg ICAgICAgICB0aW1lT2ZUb29sTW9kaWZpZWQgID0gb3Muc3RhdChleGVQYXRoKS5zdF9tdGltZQ0K PiAtICAgICAgICBlbHNlOg0KPiAtICAgICAgICAgICAgY3VyUGF0aCAgPSBvcy5wYXRoLmRpcm5h bWUoX19maWxlX18pICMgY3VyUGF0aCBpcyB0aGUgcGF0aCBvZg0KPiBXb3Jrc3BhY2VEYXRhYmFz ZS5weQ0KPiAtICAgICAgICAgICAgcm9vdFBhdGggPSBvcy5wYXRoLnNwbGl0KGN1clBhdGgpWzBd ICMgcm9vdFBhdGggaXMgcm9vdCBwYXRoIG9mIHB5dGhvbg0KPiBzb3VyY2UsIHN1Y2ggYXMgL0Jh c2VUb29scy9Tb3VyY2UvUHl0aG9uDQo+IC0gICAgICAgICAgICBpZiByb290UGF0aCA9PSAiIiBv ciByb290UGF0aCBpcyBOb25lOg0KPiAtICAgICAgICAgICAgICAgIEVka0xvZ2dlci52ZXJib3Nl KCJcbkZhaWwgdG8gZmluZCB0aGUgcm9vdCBwYXRoIG9mIGJ1aWxkLmV4ZSBvcg0KPiBweXRob24g c291cmNlcywgc28gY2FuIG5vdCBcDQo+IC1kZXRlcm1pbmUgd2hldGhlciBkYXRhYmFzZSBmaWxl IGlzIG91dCBvZiBkYXRlIVxuIikNCj4gLQ0KPiAtICAgICAgICAgICAgIyB3YWxrIHRoZSByb290 IHBhdGggb2Ygc291cmNlIG9yIGJ1aWxkJ3MgYmluYXJ5IHRvIGdldCB0aGUgdGltZSBsYXN0DQo+ IG1vZGlmaWVkLg0KPiAtDQo+IC0gICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4g b3Mud2FsayAocm9vdFBhdGgpOg0KPiAtICAgICAgICAgICAgICAgIGZvciBkaXIgaW4gZGlyczoN Cj4gLSAgICAgICAgICAgICAgICAgICAgIyBieXBhc3Mgc291cmNlIGNvbnRyb2wgZm9sZGVyDQo+ IC0gICAgICAgICAgICAgICAgICAgIGlmIGRpci5sb3dlcigpIGluIFsiLnN2biIsICJfc3ZuIiwg ImN2cyJdOg0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgZGlycy5yZW1vdmUoZGlyKQ0KPiAr ICAgIGRlZiBTZXRGaWxlVGltZVN0YW1wKHNlbGYsRmlsZUlkLFRpbWVTdGFtcCk6DQo+ICsgICAg ICAgIHNlbGYuVGJsRmlsZVtGaWxlSWRdWzZdID0gVGltZVN0YW1wDQo+IA0KPiAtICAgICAgICAg ICAgICAgIGZvciBmaWxlIGluIGZpbGVzOg0KPiAtICAgICAgICAgICAgICAgICAgICBleHQgPSBv cy5wYXRoLnNwbGl0ZXh0KGZpbGUpWzFdDQo+IC0gICAgICAgICAgICAgICAgICAgIGlmIGV4dC5s b3dlcigpID09ICIucHkiOiAgICAgICAgICAgICMgb25seSBjaGVjayAucHkgZmlsZXMNCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgIGZkID0gb3Muc3RhdChvcy5wYXRoLmpvaW4ocm9vdCwgZmls ZSkpDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0aW1lT2ZUb29sTW9kaWZpZWQgPCBm ZC5zdF9tdGltZToNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lT2ZUb29sTW9k aWZpZWQgPSBmZC5zdF9tdGltZQ0KPiAtICAgICAgICBpZiB0aW1lT2ZUb29sTW9kaWZpZWQgPiBv cy5zdGF0KERiUGF0aCkuc3RfbXRpbWU6DQo+IC0gICAgICAgICAgICBFZGtMb2dnZXIudmVyYm9z ZSgiXG5Xb3Jrc3BhY2UgZGF0YWJhc2UgaXMgb3V0IG9mIGRhdGEhIikNCj4gLSAgICAgICAgICAg IHJldHVybiBUcnVlDQo+ICsgICAgZGVmIEdldEZpbGVUaW1lU3RhbXAoc2VsZixGaWxlSWQpOg0K PiArICAgICAgICByZXR1cm4gc2VsZi5UYmxGaWxlW0ZpbGVJZF1bNl0NCj4gDQo+IC0gICAgICAg IHJldHVybiBGYWxzZQ0KPiAtDQo+IC0gICAgIyMgSW5pdGlhbGl6ZSBidWlsZCBkYXRhYmFzZQ0K PiAtICAgIGRlZiBJbml0RGF0YWJhc2Uoc2VsZik6DQo+IC0gICAgICAgIEVka0xvZ2dlci52ZXJi b3NlKCJcbkluaXRpYWxpemUgYnVpbGQgZGF0YWJhc2Ugc3RhcnRlZCAuLi4iKQ0KPiAtDQo+IC0g ICAgICAgICMNCj4gLSAgICAgICAgIyBDcmVhdGUgbmV3IHRhYmxlcw0KPiAtICAgICAgICAjDQo+ IC0gICAgICAgIHNlbGYuVGJsRGF0YU1vZGVsLkNyZWF0ZShGYWxzZSkNCj4gLSAgICAgICAgc2Vs Zi5UYmxGaWxlLkNyZWF0ZShGYWxzZSkNCj4gLQ0KPiAtICAgICAgICAjDQo+IC0gICAgICAgICMg SW5pdGlhbGl6ZSB0YWJsZSBEYXRhTW9kZWwNCj4gLSAgICAgICAgIw0KPiAtICAgICAgICBzZWxm LlRibERhdGFNb2RlbC5Jbml0VGFibGUoKQ0KPiAtICAgICAgICBFZGtMb2dnZXIudmVyYm9zZSgi SW5pdGlhbGl6ZSBidWlsZCBkYXRhYmFzZSAuLi4gRE9ORSEiKQ0KPiAtDQo+IC0gICAgIyMgUXVl cnkgYSB0YWJsZQ0KPiAtICAgICMNCj4gLSAgICAjIEBwYXJhbSBUYWJsZTogIFRoZSBpbnN0YW5j ZSBvZiB0aGUgdGFibGUgdG8gYmUgcXVlcmllZA0KPiAtICAgICMNCj4gLSAgICBkZWYgUXVlcnlU YWJsZShzZWxmLCBUYWJsZSk6DQo+IC0gICAgICAgIFRhYmxlLlF1ZXJ5KCkNCj4gLQ0KPiAtICAg IGRlZiBfX2RlbF9fKHNlbGYpOg0KPiAtICAgICAgICBzZWxmLkNsb3NlKCkNCj4gLQ0KPiAtICAg ICMjIENsb3NlIGVudGlyZSBkYXRhYmFzZQ0KPiAtICAgICMNCj4gLSAgICAjIENvbW1pdCBhbGwg Zmlyc3QNCj4gLSAgICAjIENsb3NlIHRoZSBjb25uZWN0aW9uIGFuZCBjdXJzb3INCj4gLSAgICAj DQo+IC0gICAgZGVmIENsb3NlKHNlbGYpOg0KPiAtICAgICAgICBpZiBub3Qgc2VsZi5fRGJDbG9z ZWRGbGFnOg0KPiAtICAgICAgICAgICAgc2VsZi5Db25uLmNvbW1pdCgpDQo+IC0gICAgICAgICAg ICBzZWxmLkN1ci5jbG9zZSgpDQo+IC0gICAgICAgICAgICBzZWxmLkNvbm4uY2xvc2UoKQ0KPiAt ICAgICAgICAgICAgc2VsZi5fRGJDbG9zZWRGbGFnID0gVHJ1ZQ0KPiANCj4gICAgICAjIyBTdW1t YXJpemUgYWxsIHBhY2thZ2VzIGluIHRoZSBkYXRhYmFzZQ0KPiAgICAgIGRlZiBHZXRQYWNrYWdl TGlzdChzZWxmLCBQbGF0Zm9ybSwgQXJjaCwgVGFyZ2V0TmFtZSwgVG9vbENoYWluVGFnKToNCj4g ICAgICAgICAgc2VsZi5QbGF0Zm9ybSA9IFBsYXRmb3JtDQo+ICAgICAgICAgIFBhY2thZ2VMaXN0 ID0gW10NCj4gQEAgLTMwMiwxMSArMTkxLDExIEBAIGRldGVybWluZSB3aGV0aGVyIGRhdGFiYXNl IGZpbGUgaXMgb3V0IG9mIGRhdGUhXG4iKQ0KPiAgICAgICAgICByZXR1cm4gUGFja2FnZUxpc3QN Cj4gDQo+ICAgICAgIyMgU3VtbWFyaXplIGFsbCBwbGF0Zm9ybXMgaW4gdGhlIGRhdGFiYXNlDQo+ ICAgICAgZGVmIFBsYXRmb3JtTGlzdChzZWxmKToNCj4gICAgICAgICAgUmV0VmFsID0gW10NCj4g LSAgICAgICAgZm9yIFBsYXRmb3JtRmlsZSBpbiBzZWxmLlRibEZpbGUuR2V0RmlsZUxpc3QoTU9E RUxfRklMRV9EU0MpOg0KPiArICAgICAgICBmb3IgUGxhdGZvcm1GaWxlIGluIFtpdGVtWzNdIGZv ciBpdGVtIGluIHNlbGYuVGJsRmlsZSBpZiANCj4gKyBpdGVtWzVdID09DQo+IE1PREVMX0ZJTEVf RFNDXToNCj4gICAgICAgICAgICAgIHRyeToNCj4gICAgICAgICAgICAgICAgICANCj4gUmV0VmFs LmFwcGVuZChzZWxmLkJ1aWxkT2JqZWN0W1BhdGhDbGFzcyhQbGF0Zm9ybUZpbGUpLA0KPiBUQUJf Q09NTU9OXSkNCj4gICAgICAgICAgICAgIGV4Y2VwdDoNCj4gICAgICAgICAgICAgICAgICBwYXNz DQo+ICAgICAgICAgIHJldHVybiBSZXRWYWwNCj4gZGlmZiAtLWdpdCBhL0Jhc2VUb29scy9Tb3Vy Y2UvUHl0aG9uL2J1aWxkL2J1aWxkLnB5DQo+IGIvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24vYnVp bGQvYnVpbGQucHkNCj4gaW5kZXggZDc0MDgyZmMyNi4uMzE3ZDZhMjcyOCAxMDA2NDQNCj4gLS0t IGEvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24vYnVpbGQvYnVpbGQucHkNCj4gKysrIGIvQmFzZVRv b2xzL1NvdXJjZS9QeXRob24vYnVpbGQvYnVpbGQucHkNCj4gQEAgLTQxLDExICs0MSwxMSBAQCBm cm9tIENvbW1vbi5UYXJnZXRUeHRDbGFzc09iamVjdCBpbXBvcnQgKiAgZnJvbSANCj4gQ29tbW9u LlRvb2xEZWZDbGFzc09iamVjdCBpbXBvcnQgKiAgZnJvbSBDb21tb24uRGF0YVR5cGUgaW1wb3J0 ICogIA0KPiBmcm9tIENvbW1vbi5CdWlsZFZlcnNpb24gaW1wb3J0IGdCVUlMRF9WRVJTSU9OICBm cm9tIEF1dG9HZW4uQXV0b0dlbiANCj4gaW1wb3J0ICogIGZyb20gQ29tbW9uLkJ1aWxkVG9vbEVy cm9yIGltcG9ydCAqIC1mcm9tIA0KPiBXb3Jrc3BhY2UuV29ya3NwYWNlRGF0YWJhc2UgaW1wb3J0 ICoNCj4gK2Zyb20gV29ya3NwYWNlLldvcmtzcGFjZURhdGFiYXNlIGltcG9ydCBXb3Jrc3BhY2VE YXRhYmFzZQ0KPiAgZnJvbSBDb21tb24uTXVsdGlwbGVXb3Jrc3BhY2UgaW1wb3J0IE11bHRpcGxl V29ya3NwYWNlIGFzIG13cw0KPiANCj4gIGZyb20gQnVpbGRSZXBvcnQgaW1wb3J0IEJ1aWxkUmVw b3J0DQo+ICBmcm9tIEdlblBhdGNoUGNkVGFibGUuR2VuUGF0Y2hQY2RUYWJsZSBpbXBvcnQgKiAg ZnJvbSANCj4gUGF0Y2hQY2RWYWx1ZS5QYXRjaFBjZFZhbHVlIGltcG9ydCAqIEBAIC04MjUsMTQg KzgyNSwxMSBAQCBjbGFzcyANCj4gQnVpbGQoKToNCj4gICAgICAgICAgICAgICAgICAjIEdldCBz dGFuZGFyZCBXT1JLU1BBQ0UvQ29uZiB1c2UgdGhlIGFic29sdXRlIHBhdGggDQo+IHRvIHRoZSBX T1JLU1BBQ0UvQ29uZg0KPiAgICAgICAgICAgICAgICAgIENvbmZEaXJlY3RvcnlQYXRoID0gbXdz LmpvaW4oc2VsZi5Xb3Jrc3BhY2VEaXIsICdDb25mJykNCj4gICAgICAgICAgR2xvYmFsRGF0YS5n Q29uZkRpcmVjdG9yeSA9IENvbmZEaXJlY3RvcnlQYXRoDQo+ICAgICAgICAgIEdsb2JhbERhdGEu Z0RhdGFiYXNlUGF0aCA9DQo+IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKENvbmZEaXJl Y3RvcnlQYXRoLA0KPiBHbG9iYWxEYXRhLmdEYXRhYmFzZVBhdGgpKQ0KPiANCj4gLSAgICAgICAg aWYgQnVpbGRPcHRpb25zLkRpc2FibGVDYWNoZToNCj4gLSAgICAgICAgICAgIHNlbGYuRGIgICAg ICAgICA9IFdvcmtzcGFjZURhdGFiYXNlKCI6bWVtb3J5OiIpDQo+IC0gICAgICAgIGVsc2U6DQo+ IC0gICAgICAgICAgICBzZWxmLkRiID0gV29ya3NwYWNlRGF0YWJhc2UoR2xvYmFsRGF0YS5nRGF0 YWJhc2VQYXRoLA0KPiBzZWxmLlJlcGFyc2UpDQo+ICsgICAgICAgIHNlbGYuRGIgPSBXb3Jrc3Bh Y2VEYXRhYmFzZSgpDQo+ICAgICAgICAgIHNlbGYuQnVpbGREYXRhYmFzZSA9IHNlbGYuRGIuQnVp bGRPYmplY3QNCj4gICAgICAgICAgc2VsZi5QbGF0Zm9ybSA9IE5vbmUNCj4gICAgICAgICAgc2Vs Zi5Ub29sQ2hhaW5GYW1pbHkgPSBOb25lDQo+ICAgICAgICAgIHNlbGYuTG9hZEZpeEFkZHJlc3Mg PSAwDQo+ICAgICAgICAgIHNlbGYuVW5pRmxhZyAgICAgICAgPSBCdWlsZE9wdGlvbnMuRmxhZw0K PiBAQCAtOTgxLDEzICs5NzgsMTAgQEAgY2xhc3MgQnVpbGQoKToNCj4gICAgICAgICAgIyBBbGxv dyBjYXNlLWluc2Vuc2l0aXZlIGZvciB0aG9zZSBmcm9tIGNvbW1hbmQgbGluZSBvciANCj4gY29u ZmlndXJhdGlvbiBmaWxlDQo+ICAgICAgICAgIEVycm9yQ29kZSwgRXJyb3JJbmZvID0gc2VsZi5Q bGF0Zm9ybUZpbGUuVmFsaWRhdGUoIi5kc2MiLCBGYWxzZSkNCj4gICAgICAgICAgaWYgRXJyb3JD b2RlICE9IDA6DQo+ICAgICAgICAgICAgICBFZGtMb2dnZXIuZXJyb3IoImJ1aWxkIiwgRXJyb3JD b2RlLCBFeHRyYURhdGE9RXJyb3JJbmZvKQ0KPiANCj4gLSAgICAgICAgIyBjcmVhdGUgbWV0YWZp bGUgZGF0YWJhc2UNCj4gLSAgICAgICAgaWYgbm90IHNlbGYuRGJfRmxhZzoNCj4gLSAgICAgICAg ICAgIHNlbGYuRGIuSW5pdERhdGFiYXNlKCkNCj4gDQo+ICAgICAgZGVmIEluaXRQcmVCdWlsZChz ZWxmKToNCj4gICAgICAgICAgc2VsZi5Mb2FkQ29uZmlndXJhdGlvbigpDQo+ICAgICAgICAgIEVy cm9yQ29kZSwgRXJyb3JJbmZvID0gc2VsZi5QbGF0Zm9ybUZpbGUuVmFsaWRhdGUoIi5kc2MiLCBG YWxzZSkNCj4gICAgICAgICAgaWYgRXJyb3JDb2RlICE9IDA6DQo+IEBAIC0xMDAyLDExICs5OTYs MTAgQEAgY2xhc3MgQnVpbGQoKToNCj4gICAgICAgICAgaWYgc2VsZi5Ub29sQ2hhaW5GYW1pbHk6 DQo+ICAgICAgICAgICAgICBHbG9iYWxEYXRhLmdHbG9iYWxEZWZpbmVzWydGQU1JTFknXSA9IHNl bGYuVG9vbENoYWluRmFtaWx5WzBdDQo+ICAgICAgICAgIGlmICdQUkVCVUlMRCcgaW4gR2xvYmFs RGF0YS5nQ29tbWFuZExpbmVEZWZpbmVzOg0KPiAgICAgICAgICAgICAgc2VsZi5QcmVidWlsZCAg ID0gR2xvYmFsRGF0YS5nQ29tbWFuZExpbmVEZWZpbmVzLmdldCgnUFJFQlVJTEQnKQ0KPiAgICAg ICAgICBlbHNlOg0KPiAtICAgICAgICAgICAgc2VsZi5EYi5Jbml0RGF0YWJhc2UoKQ0KPiAgICAg ICAgICAgICAgc2VsZi5EYl9GbGFnID0gVHJ1ZQ0KPiAgICAgICAgICAgICAgUGxhdGZvcm0gPSBz ZWxmLkRiLk1hcFBsYXRmb3JtKHN0cihzZWxmLlBsYXRmb3JtRmlsZSkpDQo+ICAgICAgICAgICAg ICBzZWxmLlByZWJ1aWxkID0gc3RyKFBsYXRmb3JtLlByZWJ1aWxkKQ0KPiAgICAgICAgICBpZiBz ZWxmLlByZWJ1aWxkOg0KPiAgICAgICAgICAgICAgUHJlYnVpbGRMaXN0ID0gW10NCj4gQEAgLTIw ODEsMTcgKzIwNzQsMTEgQEAgY2xhc3MgQnVpbGQoKToNCj4gICAgICAgICAgICAgICAgICAgICAg aWYgQnVpbGRUYXNrLkhhc0Vycm9yKCk6DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICBFZGtM b2dnZXIuZXJyb3IoImJ1aWxkIiwgQlVJTERfRVJST1IsICJGYWlsZWQgDQo+IHRvIGJ1aWxkIG1v ZHVsZSIsIEV4dHJhRGF0YT1HbG9iYWxEYXRhLmdCdWlsZGluZ01vZHVsZSkNCj4gICAgICAgICAg ICAgICAgICAgICAgc2VsZi5NYWtlVGltZSArPSBpbnQocm91bmQoKHRpbWUudGltZSgpIC0gDQo+ IE1ha2VTdGFydCkpKQ0KPiANCj4gICAgICAgICAgICAgICAgICBNYWtlQ29udGl1ZSA9IHRpbWUu dGltZSgpDQo+IC0gICAgICAgICAgICAgICAgIw0KPiAtICAgICAgICAgICAgICAgICMgU2F2ZSB0 ZW1wIHRhYmxlcyB0byBhIFRtcFRhYmxlRGljdC4NCj4gLSAgICAgICAgICAgICAgICAjDQo+IC0g ICAgICAgICAgICAgICAgZm9yIEtleSBpbiBXYS5CdWlsZERhdGFiYXNlLl9DQUNIRV86DQo+IC0g ICAgICAgICAgICAgICAgICAgIGlmIFdhLkJ1aWxkRGF0YWJhc2UuX0NBQ0hFX1tLZXldLl9SYXdE YXRhIGFuZA0KPiBXYS5CdWlsZERhdGFiYXNlLl9DQUNIRV9bS2V5XS5fUmF3RGF0YS5fVGFibGUg YW5kDQo+IFdhLkJ1aWxkRGF0YWJhc2UuX0NBQ0hFX1tLZXldLl9SYXdEYXRhLl9UYWJsZS5UYWJs ZToNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGlmDQo+IFRlbXBvcmFyeVRhYmxlUGF0dGVy bi5tYXRjaChXYS5CdWlsZERhdGFiYXNlLl9DQUNIRV9bS2V5XS5fUmF3RGF0YS4NCj4gX1RhYmxl LlRhYmxlKToNCj4gLQ0KPiBUbXBUYWJsZURpY3RbV2EuQnVpbGREYXRhYmFzZS5fQ0FDSEVfW0tl eV0uX1Jhd0RhdGEuX1RhYmxlLlRhYmxlXSA9IA0KPiBXYS5CdWlsZERhdGFiYXNlLl9DQUNIRV9b S2V5XS5fUmF3RGF0YS5fVGFibGUuQ3VyDQo+ICsNCj4gICAgICAgICAgICAgICAgICAjDQo+ICAg ICAgICAgICAgICAgICAgIw0KPiAgICAgICAgICAgICAgICAgICMgQWxsIG1vZHVsZXMgaGF2ZSBi ZWVuIHB1dCBpbiBidWlsZCB0YXNrcyBxdWV1ZS4gVGVsbCB0YXNrIHNjaGVkdWxlcg0KPiAgICAg ICAgICAgICAgICAgICMgdG8gZXhpdCBpZiBhbGwgdGFza3MgYXJlIGNvbXBsZXRlZA0KPiAgICAg ICAgICAgICAgICAgICMNCj4gQEAgLTIyMjksMTEgKzIyMTYsMTAgQEAgY2xhc3MgQnVpbGQoKToN Cj4gICAgICAgICAgZWxzZToNCj4gICAgICAgICAgICAgIHNlbGYuU3Bhd25Nb2RlID0gRmFsc2UN Cj4gICAgICAgICAgICAgIHNlbGYuX0J1aWxkTW9kdWxlKCkNCj4gDQo+ICAgICAgICAgIGlmIHNl bGYuVGFyZ2V0ID09ICdjbGVhbmFsbCc6DQo+IC0gICAgICAgICAgICBzZWxmLkRiLkNsb3NlKCkN Cj4gICAgICAgICAgICAgIA0KPiBSZW1vdmVEaXJlY3Rvcnkob3MucGF0aC5kaXJuYW1lKEdsb2Jh bERhdGEuZ0RhdGFiYXNlUGF0aCksIFRydWUpDQo+IA0KPiAgICAgIGRlZiBDcmVhdGVBc0J1aWx0 SW5mKHNlbGYpOg0KPiAgICAgICAgICBmb3IgTW9kdWxlIGluIHNlbGYuQnVpbGRNb2R1bGVzOg0K PiAgICAgICAgICAgICAgTW9kdWxlLkNyZWF0ZUFzQnVpbHRJbmYoKSBAQCAtMjQ5MCwxNCArMjQ3 NiwxMSBAQCBkZWYgDQo+IE1haW4oKToNCj4gDQo+ICAgICAgICAgIE15QnVpbGQgPSBCdWlsZChU YXJnZXQsIFdvcmtzcGFjZSwgT3B0aW9uKQ0KPiAgICAgICAgICBHbG9iYWxEYXRhLmdDb21tYW5k TGluZURlZmluZXNbJ0FSQ0gnXSA9ICcgJy5qb2luKE15QnVpbGQuQXJjaExpc3QpDQo+ICAgICAg ICAgIGlmIG5vdCAoTXlCdWlsZC5MYXVuY2hQcmVidWlsZEZsYWcgYW5kDQo+IG9zLnBhdGguZXhp c3RzKE15QnVpbGQuUGxhdGZvcm1CdWlsZFBhdGgpKToNCj4gICAgICAgICAgICAgIE15QnVpbGQu TGF1bmNoKCkNCj4gLSAgICAgICAgIyBEcm9wIHRlbXAgdGFibGVzIHRvIGF2b2lkIGRhdGFiYXNl IGxvY2tlZC4NCj4gLSAgICAgICAgZm9yIFRtcFRhYmxlTmFtZSBpbiBUbXBUYWJsZURpY3Q6DQo+ IC0gICAgICAgICAgICBTcWxDb21tYW5kID0gIiIiZHJvcCB0YWJsZSBJRiBFWElTVFMgJXMiIiIg JSBUbXBUYWJsZU5hbWUNCj4gLSAgICAgICAgICAgIFRtcFRhYmxlRGljdFtUbXBUYWJsZU5hbWVd LmV4ZWN1dGUoU3FsQ29tbWFuZCkNCj4gKw0KPiAgICAgICAgICAjTXlCdWlsZC5EdW1wQnVpbGRE YXRhKCkNCj4gICAgICAgICAgIw0KPiAgICAgICAgICAjIEFsbCBqb2IgZG9uZSwgbm8gZXJyb3Ig Zm91bmQgYW5kIG5vIGV4Y2VwdGlvbiByYWlzZWQNCj4gICAgICAgICAgIw0KPiAgICAgICAgICBC dWlsZEVycm9yID0gRmFsc2UNCj4gQEAgLTI1NjUsMTEgKzI1NDgsMTEgQEAgZGVmIE1haW4oKToN Cj4gICAgICBlbHNlOg0KPiAgICAgICAgICBCdWlsZER1cmF0aW9uU3RyID0gdGltZS5zdHJmdGlt ZSgiJUg6JU06JVMiLCBCdWlsZER1cmF0aW9uKQ0KPiAgICAgIGlmIE15QnVpbGQgaXMgbm90IE5v bmU6DQo+ICAgICAgICAgIGlmIG5vdCBCdWlsZEVycm9yOg0KPiAgICAgICAgICAgICAgTXlCdWls ZC5CdWlsZFJlcG9ydC5HZW5lcmF0ZVJlcG9ydChCdWlsZER1cmF0aW9uU3RyLA0KPiBMb2dCdWls ZFRpbWUoTXlCdWlsZC5BdXRvR2VuVGltZSksIExvZ0J1aWxkVGltZShNeUJ1aWxkLk1ha2VUaW1l KSwNCj4gTG9nQnVpbGRUaW1lKE15QnVpbGQuR2VuRmRzVGltZSkpDQo+IC0gICAgICAgIE15QnVp bGQuRGIuQ2xvc2UoKQ0KPiArDQo+ICAgICAgRWRrTG9nZ2VyLlNldExldmVsKEVka0xvZ2dlci5R VUlFVCkNCj4gICAgICBFZGtMb2dnZXIucXVpZXQoIlxuLSAlcyAtIiAlIENvbmNsdXNpb24pDQo+ ICAgICAgRWRrTG9nZ2VyLnF1aWV0KHRpbWUuc3RyZnRpbWUoIkJ1aWxkIGVuZCB0aW1lOiAlSDol TTolUywgJWIuJWQgDQo+ICVZIiwNCj4gdGltZS5sb2NhbHRpbWUoKSkpDQo+ICAgICAgRWRrTG9n Z2VyLnF1aWV0KCJCdWlsZCB0b3RhbCB0aW1lOiAlc1xuIiAlIEJ1aWxkRHVyYXRpb25TdHIpDQo+ ICAgICAgcmV0dXJuIFJldHVybkNvZGUNCj4gLS0NCj4gMi4xOS4xLndpbmRvd3MuMQ0KDQo=