From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.88; helo=mga01.intel.com; envelope-from=bob.c.feng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 52E54211A2D80 for ; Thu, 20 Dec 2018 02:36:08 -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 fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Dec 2018 02:36:07 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,376,1539673200"; d="scan'208";a="103328711" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga008.jf.intel.com with ESMTP; 20 Dec 2018 02:36:07 -0800 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 20 Dec 2018 02:36:07 -0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.201]) by shsmsx102.ccr.corp.intel.com ([169.254.2.182]) with mapi id 14.03.0415.000; Thu, 20 Dec 2018 18:36:04 +0800 From: "Feng, Bob C" To: Ard Biesheuvel , "Zhao, ZhiqiangX" , "Gao, Liming" CC: "edk2-devel@lists.01.org" , "Carsey, Jaben" Thread-Topic: [edk2] [PATCH V2] BaseTools: AutoGen and GenFds share the parser data. Thread-Index: AQHUgvrgXQ+hf88Kf0KciEJMDADyyKWHEVCAgACG7EA= Date: Thu, 20 Dec 2018 10:36:03 +0000 Message-ID: <08650203BA1BD64D8AD9B6D5D74A85D1600319B1@SHSMSX101.ccr.corp.intel.com> References: <20181123070445.7764-1-zhiqiangx.zhao@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: AutoGen and GenFds share the parser data. 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: Thu, 20 Dec 2018 10:36:08 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T0suICBJJ2xsIGxvb2sgYXQgdGhpcyBpc3N1ZS4NCg0KVGhhbmtzLA0KQm9iDQoNCi0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBBcmQgQmllc2hldXZlbCBbbWFpbHRvOmFyZC5iaWVz aGV1dmVsQGxpbmFyby5vcmddIA0KU2VudDogVGh1cnNkYXksIERlY2VtYmVyIDIwLCAyMDE4IDY6 MjggUE0NClRvOiBaaGFvLCBaaGlxaWFuZ1ggPHpoaXFpYW5neC56aGFvQGludGVsLmNvbT47IEdh bywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IEZlbmcsIEJvYiBDIDxib2IuYy5mZW5n QGludGVsLmNvbT4NCkNjOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgQ2Fyc2V5LCBKYWJlbiA8 amFiZW4uY2Fyc2V5QGludGVsLmNvbT4NClN1YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENIIFYyXSBC YXNlVG9vbHM6IEF1dG9HZW4gYW5kIEdlbkZkcyBzaGFyZSB0aGUgcGFyc2VyIGRhdGEuDQoNCk9u IEZyaSwgMjMgTm92IDIwMTggYXQgMDg6MDQsIFpoYW96aDF4IDx6aGlxaWFuZ3guemhhb0BpbnRl bC5jb20+IHdyb3RlOg0KPg0KPiBWMjoNCj4gRXh0cmFjdCB0aGUgY29tbW9uIHBhcnQgb2YgbmV3 IEFQSSBhbmQgdGhlIG9yaWdpbmFsIG1haW4oKSBmdW5jdGlvbiANCj4gaW50byBvbmUgZnVuY3Rp b24uDQo+DQo+IFYxOg0KPiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcu Y2dpP2lkPTEyODgNCj4NCj4gQ3VycmVudGx5LCBBdXRvR2VuIGFuZCBHZW5GZHMgcnVuIGluIGRp ZmZlcmVudCBweXRob24gaW50ZXJwcmV0ZXJzLiANCj4gVGhlIHBhcnNlciBhcmUgZHVwbGljYXRl ZC4gVGhpcyBwYXRjaCBpcyBnb2luZyB0byBjcmVhdGUgbmV3IEFQSSBmb3IgDQo+IEdlbkZkcyBh bmQgaGF2ZSB0aGUgYnVpbGQgdG8gY2FsbCB0aGF0IEFQSSBpbnN0ZWFkIG9mIGV4ZWN1dGluZyAN Cj4gR2VuRmRzLnB5LiBBcyBzdWNoLCB0aGUgR2VuRmRzIGFuZCBidWlsZCBjYW4gc2hhcmUgdGhl IHBhcnNlciBkYXRhLg0KPg0KPiBUaGlzIHBhdGNoIGlzIGV4cGVjdGVkIHRvIHNhdmUgdGhlIHRp bWUgb2YgR2VuRmRzIGFib3V0IDJ+MyBzZWNvbmRzLg0KPiBNb3JlIGRldGFpbHMgd2lsbCBiZSBs b2dnZWQgaW4gQlouDQo+DQo+IFRoaXMgaXMgdGhlIHN1bW1hcnkgbWVhc3VyZSBkYXRhIGdlbmVy YXRlZCBmcm9tIHB5dGhvbiBjUHJvZmlsZSBmb3IgDQo+IGJ1aWxkaW5nIE92bWYuDQo+DQo+IEN1 cnJlbnRseToNCj4gODM3OTE0NyBmdW5jdGlvbiBjYWxscyAoODEzNTQ1MCBwcmltaXRpdmUgY2Fs bHMpIGluIDEyLjU4MCBzZWNvbmRzDQo+DQo+IEFmdGVyIGFwcGx5aW5nIHRoaXMgcGF0Y2g6DQo+ IDM0Mjg3MTIgZnVuY3Rpb24gY2FsbHMgKDM0MTg4ODEgcHJpbWl0aXZlIGNhbGxzKSBpbiA4Ljk0 NCBzZWNvbmRzDQo+DQo+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9u IEFncmVlbWVudCAxLjENCj4gU2lnbmVkLW9mZi1ieTogWmhpcWlhbmdYIFpoYW8gPHpoaXFpYW5n eC56aGFvQGludGVsLmNvbT4NCj4gQ2M6IExpbWluZyBHYW8gPGxpbWluZy5nYW9AaW50ZWwuY29t Pg0KPiBDYzogQ2Fyc2V5IEphYmVuIDxqYWJlbi5jYXJzZXlAaW50ZWwuY29tPg0KPiBDYzogQm9i IEZlbmcgPGJvYi5jLmZlbmdAaW50ZWwuY29tPg0KPiAtLS0NCj4gIEJhc2VUb29scy9Tb3VyY2Uv UHl0aG9uL0F1dG9HZW4vQXV0b0dlbi5weSB8ICAgNCArDQo+ICBCYXNlVG9vbHMvU291cmNlL1B5 dGhvbi9HZW5GZHMvR2VuRmRzLnB5ICAgfCAxNDEgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LS0NCj4gIEJhc2VUb29scy9Tb3VyY2UvUHl0aG9uL2J1aWxkL2J1aWxkLnB5ICAgICB8ICAgNiAr LQ0KPiAgMyBmaWxlcyBjaGFuZ2VkLCA5NCBpbnNlcnRpb25zKCspLCA1NyBkZWxldGlvbnMoLSkN Cj4NCg0KSSBhbSBjdXJyZW50bHkgc2VlaW5nIGEgcmVncmVzc2lvbiB3aGljaCBpcyBwcm9iYWJs eSBjYXVzZWQgYnkgdGhpcyBjaGFuZ2UgKG9yIGEgcmVsYXRlZCBvbmUpDQoNCldoZW4gYnVpbGRp bmcgc2V2ZXJhbCB0YXJnZXRzIGF0IGEgdGltZSwgZS5nLiwNCg0KYnVpbGQgLXAgPHBsYXRmb3Jt PiAtYiBERUJVRyAtYiBSRUxFQVNFDQoNCm9ubHkgdGhlIGZpcnN0IG9uZSBnZXRzIGJ1aWx0IGNv bXBsZXRlbHkgKGluY2x1ZGluZyB0aGUgRkQgaW1hZ2UpLCBhbmQgdGhlIGxhdHRlciBvbmUgaXMg b25seSBidWlsdCBwYXJ0aWFsbHkuDQoNCkkgZmlsZWQgYSBidWcgaGVyZQ0KaHR0cHM6Ly9idWd6 aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4DQoNCg0KDQoNCj4gZGlmZiAt LWdpdCBhL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL0F1dG9HZW4vQXV0b0dlbi5weSANCj4gYi9C YXNlVG9vbHMvU291cmNlL1B5dGhvbi9BdXRvR2VuL0F1dG9HZW4ucHkNCj4gaW5kZXggZjM1NjBi ZmM3OC4uMTBjZTdlYjk2MiAxMDA2NDQNCj4gLS0tIGEvQmFzZVRvb2xzL1NvdXJjZS9QeXRob24v QXV0b0dlbi9BdXRvR2VuLnB5DQo+ICsrKyBiL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL0F1dG9H ZW4vQXV0b0dlbi5weQ0KPiBAQCAtOTM1LDYgKzkzNSwxMCBAQCBjbGFzcyBXb3Jrc3BhY2VBdXRv R2VuKEF1dG9HZW4pOg0KPiAgICAgIGRlZiBHZW5GZHNDb21tYW5kKHNlbGYpOg0KPiAgICAgICAg ICByZXR1cm4gDQo+IChHZW5NYWtlLlRvcExldmVsTWFrZWZpbGUoc2VsZikuX1RFTVBMQVRFXy5S ZXBsYWNlKEdlbk1ha2UuVG9wTGV2ZWxNYWsNCj4gZWZpbGUoc2VsZikuX1RlbXBsYXRlRGljdCkp LnN0cmlwKCkNCj4NCj4gKyAgICBAcHJvcGVydHkNCj4gKyAgICBkZWYgR2VuRmRzQ29tbWFuZERp Y3Qoc2VsZik6DQo+ICsgICAgICAgIHJldHVybiBHZW5NYWtlLlRvcExldmVsTWFrZWZpbGUoc2Vs ZikuX1RlbXBsYXRlRGljdA0KPiArDQo+ICAgICAgIyMgQ3JlYXRlIG1ha2VmaWxlIGZvciB0aGUg cGxhdGZvcm0gYW5kIG1vZHVsZXMgaW4gaXQNCj4gICAgICAjDQo+ICAgICAgIyAgIEBwYXJhbSAg ICAgIENyZWF0ZURlcHNNYWtlRmlsZSAgICAgIEZsYWcgaW5kaWNhdGluZyBpZiB0aGUgbWFrZWZp bGUgZm9yDQo+IGRpZmYgLS1naXQgYS9CYXNlVG9vbHMvU291cmNlL1B5dGhvbi9HZW5GZHMvR2Vu RmRzLnB5IA0KPiBiL0Jhc2VUb29scy9Tb3VyY2UvUHl0aG9uL0dlbkZkcy9HZW5GZHMucHkNCj4g aW5kZXggMGM4MDkxYjc5OC4uZDI0MDkxYzA2YyAxMDA2NDQNCj4gLS0tIGEvQmFzZVRvb2xzL1Nv dXJjZS9QeXRob24vR2VuRmRzL0dlbkZkcy5weQ0KPiArKysgYi9CYXNlVG9vbHMvU291cmNlL1B5 dGhvbi9HZW5GZHMvR2VuRmRzLnB5DQo+IEBAIC0zNSw3ICszNSw3IEBAIGZyb20gQ29tbW9uLk1p c2MgaW1wb3J0IERpckNhY2hlLCBQYXRoQ2xhc3MsIA0KPiBHdWlkU3RydWN0dXJlU3RyaW5nVG9H dWlkU3RyaW5nICBmcm9tIENvbW1vbi5NaXNjIGltcG9ydCANCj4gU2F2ZUZpbGVPbkNoYW5nZSwg Q2xlYXJEdXBsaWNhdGVkSW5mICBmcm9tIENvbW1vbi5CdWlsZFZlcnNpb24gaW1wb3J0IA0KPiBn QlVJTERfVkVSU0lPTiAgZnJvbSBDb21tb24uTXVsdGlwbGVXb3Jrc3BhY2UgaW1wb3J0IE11bHRp cGxlV29ya3NwYWNlIA0KPiBhcyBtd3MgLWZyb20gQ29tbW9uLkJ1aWxkVG9vbEVycm9yIGltcG9y dCBGYXRhbEVycm9yLCBHRU5GRFNfRVJST1IsIA0KPiBDT0RFX0VSUk9SLCBGT1JNQVRfSU5WQUxJ RCwgUkVTT1VSQ0VfTk9UX0FWQUlMQUJMRSwgRklMRV9OT1RfRk9VTkQsIA0KPiBPUFRJT05fTUlT U0lORywgRk9STUFUX05PVF9TVVBQT1JURUQsT1BUSU9OX1ZBTFVFX0lOVkFMSUQNCj4gK2Zyb20g Q29tbW9uLkJ1aWxkVG9vbEVycm9yIGltcG9ydCBGYXRhbEVycm9yLCBHRU5GRFNfRVJST1IsIA0K PiArQ09ERV9FUlJPUiwgRk9STUFUX0lOVkFMSUQsIFJFU09VUkNFX05PVF9BVkFJTEFCTEUsIEZJ TEVfTk9UX0ZPVU5ELCANCj4gK09QVElPTl9NSVNTSU5HLCBGT1JNQVRfTk9UX1NVUFBPUlRFRCwg T1BUSU9OX1ZBTFVFX0lOVkFMSUQsIA0KPiArUEFSQU1FVEVSX0lOVkFMSUQNCj4gIGZyb20gV29y a3NwYWNlLldvcmtzcGFjZURhdGFiYXNlIGltcG9ydCBXb3Jrc3BhY2VEYXRhYmFzZQ0KPg0KPiAg ZnJvbSAuRmRmUGFyc2VyIGltcG9ydCBGZGZQYXJzZXIsIFdhcm5pbmcgQEAgLTU5LDQzICs1OSw0 NSBAQCANCj4gX19jb3B5cmlnaHRfXyA9ICJDb3B5cmlnaHQgKGMpIDIwMDcgLSAyMDE4LCBJbnRl bCBDb3Jwb3JhdGlvbiAgQWxsIA0KPiByaWdodHMgcmVzZXJ2ICBkZWYgbWFpbigpOg0KPiAgICAg IGdsb2JhbCBPcHRpb25zDQo+ICAgICAgT3B0aW9ucyA9IG15T3B0aW9uUGFyc2VyKCkNCj4gKyAg ICBFZGtMb2dnZXIuSW5pdGlhbGl6ZSgpDQo+ICsgICAgcmV0dXJuIEdlbkZkc0FwaShPcHRpb25z VG9Db21tYW5kRGljdChPcHRpb25zKSkNCj4NCj4gK2RlZiBHZW5GZHNBcGkoRmRzQ29tbWFuZERp Y3QsIFdvcmtTcGFjZURhdGFCYXNlPU5vbmUpOg0KPiAgICAgIGdsb2JhbCBXb3Jrc3BhY2UNCj4g ICAgICBXb3Jrc3BhY2UgPSAiIg0KPiAgICAgIEFyY2hMaXN0ID0gTm9uZQ0KPiAgICAgIFJldHVy bkNvZGUgPSAwDQo+DQo+IC0gICAgRWRrTG9nZ2VyLkluaXRpYWxpemUoKQ0KPiAgICAgIHRyeToN Cj4gLSAgICAgICAgaWYgT3B0aW9ucy52ZXJib3NlOg0KPiArICAgICAgICBpZiBGZHNDb21tYW5k RGljdC5nZXQoInZlcmJvc2UiKToNCj4gICAgICAgICAgICAgIEVka0xvZ2dlci5TZXRMZXZlbChF ZGtMb2dnZXIuVkVSQk9TRSkNCj4gICAgICAgICAgICAgIEdlbkZkc0dsb2JhbFZhcmlhYmxlLlZl cmJvc2VNb2RlID0gVHJ1ZQ0KPg0KPiAtICAgICAgICBpZiBPcHRpb25zLkZpeGVkQWRkcmVzczoN Cj4gKyAgICAgICAgaWYgRmRzQ29tbWFuZERpY3QuZ2V0KCJGaXhlZEFkZHJlc3MiKToNCj4gICAg ICAgICAgICAgIEdlbkZkc0dsb2JhbFZhcmlhYmxlLkZpeGVkTG9hZEFkZHJlc3MgPSBUcnVlDQo+ DQo+IC0gICAgICAgIGlmIE9wdGlvbnMucXVpZXQ6DQo+ICsgICAgICAgIGlmIEZkc0NvbW1hbmRE aWN0LmdldCgicXVpZXQiKToNCj4gICAgICAgICAgICAgIEVka0xvZ2dlci5TZXRMZXZlbChFZGtM b2dnZXIuUVVJRVQpDQo+IC0gICAgICAgIGlmIE9wdGlvbnMuZGVidWc6DQo+IC0gICAgICAgICAg ICBFZGtMb2dnZXIuU2V0TGV2ZWwoT3B0aW9ucy5kZWJ1ZyArIDEpDQo+IC0gICAgICAgICAgICBH ZW5GZHNHbG9iYWxWYXJpYWJsZS5EZWJ1Z0xldmVsID0gT3B0aW9ucy5kZWJ1Zw0KPiArICAgICAg ICBpZiBGZHNDb21tYW5kRGljdC5nZXQoImRlYnVnIik6DQo+ICsgICAgICAgICAgICBFZGtMb2dn ZXIuU2V0TGV2ZWwoRmRzQ29tbWFuZERpY3QuZ2V0KCJkZWJ1ZyIpICsgMSkNCj4gKyAgICAgICAg ICAgIEdlbkZkc0dsb2JhbFZhcmlhYmxlLkRlYnVnTGV2ZWwgPSANCj4gKyBGZHNDb21tYW5kRGlj dC5nZXQoImRlYnVnIikNCj4gICAgICAgICAgZWxzZToNCj4gICAgICAgICAgICAgIEVka0xvZ2dl ci5TZXRMZXZlbChFZGtMb2dnZXIuSU5GTykNCj4NCj4gLSAgICAgICAgaWYgbm90IE9wdGlvbnMu V29ya3NwYWNlOg0KPiArICAgICAgICBpZiBub3QgRmRzQ29tbWFuZERpY3QuZ2V0KCJXb3Jrc3Bh Y2UiLG9zLmVudmlyb24uZ2V0KCdXT1JLU1BBQ0UnKSk6DQo+ICAgICAgICAgICAgICBFZGtMb2dn ZXIuZXJyb3IoIkdlbkZkcyIsIE9QVElPTl9NSVNTSU5HLCAiV09SS1NQQUNFIG5vdCBkZWZpbmVk IiwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYURhdGE9IlBsZWFzZSB1c2Ug Jy13JyBzd2l0Y2ggdG8gcGFzcyBpdCBvciBzZXQgdGhlIFdPUktTUEFDRSBlbnZpcm9ubWVudCB2 YXJpYWJsZS4iKQ0KPiAtICAgICAgICBlbGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhPcHRpb25zLldv cmtzcGFjZSk6DQo+ICsgICAgICAgIGVsaWYgbm90IG9zLnBhdGguZXhpc3RzKEZkc0NvbW1hbmRE aWN0LmdldCgiV29ya3NwYWNlIixvcy5lbnZpcm9uLmdldCgnV09SS1NQQUNFJykpKToNCj4gICAg ICAgICAgICAgIEVka0xvZ2dlci5lcnJvcigiR2VuRmRzIiwgUEFSQU1FVEVSX0lOVkFMSUQsICJX T1JLU1BBQ0UgaXMgaW52YWxpZCIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0 cmFEYXRhPSJQbGVhc2UgdXNlICctdycgc3dpdGNoIHRvIHBhc3MgaXQgb3Igc2V0IHRoZSBXT1JL U1BBQ0UgZW52aXJvbm1lbnQgdmFyaWFibGUuIikNCj4gICAgICAgICAgZWxzZToNCj4gLSAgICAg ICAgICAgIFdvcmtzcGFjZSA9IG9zLnBhdGgubm9ybWNhc2UoT3B0aW9ucy5Xb3Jrc3BhY2UpDQo+ ICsgICAgICAgICAgICBXb3Jrc3BhY2UgPSANCj4gKyBvcy5wYXRoLm5vcm1jYXNlKEZkc0NvbW1h bmREaWN0LmdldCgiV29ya3NwYWNlIixvcy5lbnZpcm9uLmdldCgnV09SSw0KPiArIFNQQUNFJykp KQ0KPiAgICAgICAgICAgICAgR2VuRmRzR2xvYmFsVmFyaWFibGUuV29ya1NwYWNlRGlyID0gV29y a3NwYWNlDQo+ICAgICAgICAgICAgICBpZiAnRURLX1NPVVJDRScgaW4gb3MuZW52aXJvbjoNCj4g ICAgICAgICAgICAgICAgICBHZW5GZHNHbG9iYWxWYXJpYWJsZS5FZGtTb3VyY2VEaXIgPSBvcy5w YXRoLm5vcm1jYXNlKG9zLmVudmlyb25bJ0VES19TT1VSQ0UnXSkNCj4gLSAgICAgICAgICAgIGlm IE9wdGlvbnMuZGVidWc6DQo+ICsgICAgICAgICAgICBpZiBGZHNDb21tYW5kRGljdC5nZXQoImRl YnVnIik6DQo+ICAgICAgICAgICAgICAgICAgR2VuRmRzR2xvYmFsVmFyaWFibGUuVmVyYm9zZUxv Z2dlcigiVXNpbmcgV29ya3NwYWNlOiIgKyBXb3Jrc3BhY2UpDQo+IC0gICAgICAgICAgICBpZiBP cHRpb25zLkdlbmZkc011bHRpVGhyZWFkOg0KPiArICAgICAgICAgICAgaWYgRmRzQ29tbWFuZERp Y3QuZ2V0KCJHZW5mZHNNdWx0aVRocmVhZCIpOg0KPiAgICAgICAgICAgICAgICAgIEdlbkZkc0ds b2JhbFZhcmlhYmxlLkVuYWJsZUdlbmZkc011bHRpVGhyZWFkID0gVHJ1ZQ0KPiAgICAgICAgICBv cy5jaGRpcihHZW5GZHNHbG9iYWxWYXJpYWJsZS5Xb3JrU3BhY2VEaXIpDQo+DQo+IEBAIC0xMDMs OCArMTA1LDggQEAgZGVmIG1haW4oKToNCj4gICAgICAgICAgUGFja2FnZXNQYXRoID0gb3MuZ2V0 ZW52KCJQQUNLQUdFU19QQVRIIikNCj4gICAgICAgICAgbXdzLnNldFdzKEdlbkZkc0dsb2JhbFZh cmlhYmxlLldvcmtTcGFjZURpciwgUGFja2FnZXNQYXRoKQ0KPg0KPiAtICAgICAgICBpZiBPcHRp b25zLmZpbGVuYW1lOg0KPiAtICAgICAgICAgICAgRmRmRmlsZW5hbWUgPSBPcHRpb25zLmZpbGVu YW1lDQo+ICsgICAgICAgIGlmIEZkc0NvbW1hbmREaWN0LmdldCgiZmRmX2ZpbGUiKToNCj4gKyAg ICAgICAgICAgIEZkZkZpbGVuYW1lID0gRmRzQ29tbWFuZERpY3QuZ2V0KCJmZGZfZmlsZSIpWzBd LlBhdGgNCj4gICAgICAgICAgICAgIEZkZkZpbGVuYW1lID0gDQo+IEdlbkZkc0dsb2JhbFZhcmlh YmxlLlJlcGxhY2VXb3Jrc3BhY2VNYWNybyhGZGZGaWxlbmFtZSkNCj4NCj4gICAgICAgICAgICAg IGlmIEZkZkZpbGVuYW1lWzA6Ml0gPT0gJy4uJzoNCj4gQEAgLTExOSwxNCArMTIxLDE0IEBAIGRl ZiBtYWluKCk6DQo+ICAgICAgICAgIGVsc2U6DQo+ICAgICAgICAgICAgICBFZGtMb2dnZXIuZXJy b3IoIkdlbkZkcyIsIE9QVElPTl9NSVNTSU5HLCAiTWlzc2luZyBGREYgDQo+IGZpbGVuYW1lIikN Cj4NCj4gLSAgICAgICAgaWYgT3B0aW9ucy5CdWlsZFRhcmdldDoNCj4gLSAgICAgICAgICAgIEdl bkZkc0dsb2JhbFZhcmlhYmxlLlRhcmdldE5hbWUgPSBPcHRpb25zLkJ1aWxkVGFyZ2V0DQo+ICsg ICAgICAgIGlmIEZkc0NvbW1hbmREaWN0LmdldCgiYnVpbGRfdGFyZ2V0Iik6DQo+ICsgICAgICAg ICAgICBHZW5GZHNHbG9iYWxWYXJpYWJsZS5UYXJnZXROYW1lID0gDQo+ICsgRmRzQ29tbWFuZERp Y3QuZ2V0KCJidWlsZF90YXJnZXQiKQ0KPg0KPiAtICAgICAgICBpZiBPcHRpb25zLlRvb2xDaGFp bjoNCj4gLSAgICAgICAgICAgIEdlbkZkc0dsb2JhbFZhcmlhYmxlLlRvb2xDaGFpblRhZyA9IE9w dGlvbnMuVG9vbENoYWluDQo+ICsgICAgICAgIGlmIEZkc0NvbW1hbmREaWN0LmdldCgidG9vbGNo YWluX3RhZyIpOg0KPiArICAgICAgICAgICAgR2VuRmRzR2xvYmFsVmFyaWFibGUuVG9vbENoYWlu VGFnID0gDQo+ICsgRmRzQ29tbWFuZERpY3QuZ2V0KCJ0b29sY2hhaW5fdGFnIikNCj4NCj4gLSAg ICAgICAgaWYgT3B0aW9ucy5hY3RpdmVQbGF0Zm9ybToNCj4gLSAgICAgICAgICAgIEFjdGl2ZVBs YXRmb3JtID0gT3B0aW9ucy5hY3RpdmVQbGF0Zm9ybQ0KPiArICAgICAgICBpZiBGZHNDb21tYW5k RGljdC5nZXQoImFjdGl2ZV9wbGF0Zm9ybSIpOg0KPiArICAgICAgICAgICAgQWN0aXZlUGxhdGZv cm0gPSBGZHNDb21tYW5kRGljdC5nZXQoImFjdGl2ZV9wbGF0Zm9ybSIpDQo+ICAgICAgICAgICAg ICBBY3RpdmVQbGF0Zm9ybSA9IA0KPiBHZW5GZHNHbG9iYWxWYXJpYWJsZS5SZXBsYWNlV29ya3Nw YWNlTWFjcm8oQWN0aXZlUGxhdGZvcm0pDQo+DQo+ICAgICAgICAgICAgICBpZiBBY3RpdmVQbGF0 Zm9ybVswOjJdID09ICcuLic6DQo+IEBAIC0xNDAsMTIgKzE0MiwxMiBAQCBkZWYgbWFpbigpOg0K PiAgICAgICAgICBlbHNlOg0KPiAgICAgICAgICAgICAgRWRrTG9nZ2VyLmVycm9yKCJHZW5GZHMi LCBPUFRJT05fTUlTU0lORywgIk1pc3NpbmcgYWN0aXZlIA0KPiBwbGF0Zm9ybSIpDQo+DQo+IC0g ICAgICAgIEdsb2JhbERhdGEuQnVpbGRPcHRpb25QY2QgPSBPcHRpb25zLk9wdGlvblBjZCBpZiBP cHRpb25zLk9wdGlvblBjZCBlbHNlIHt9DQo+ICsgICAgICAgIEdsb2JhbERhdGEuQnVpbGRPcHRp b25QY2QgPSBGZHNDb21tYW5kRGljdC5nZXQoIk9wdGlvblBjZCIpIA0KPiArIGlmIEZkc0NvbW1h bmREaWN0LmdldCgiT3B0aW9uUGNkIikgZWxzZSB7fQ0KPiAgICAgICAgICBHZW5GZHNHbG9iYWxW YXJpYWJsZS5BY3RpdmVQbGF0Zm9ybSA9IA0KPiBQYXRoQ2xhc3MoTm9ybVBhdGgoQWN0aXZlUGxh dGZvcm0pKQ0KPg0KPiAtICAgICAgICBpZiBPcHRpb25zLkNvbmZEaXJlY3Rvcnk6DQo+ICsgICAg ICAgIGlmIEZkc0NvbW1hbmREaWN0LmdldCgiY29uZl9kaXJlY3RvcnkiKToNCj4gICAgICAgICAg ICAgICMgR2V0IGFsdGVybmF0ZSBDb25mIGxvY2F0aW9uLCBpZiBpdCBpcyBhYnNvbHV0ZSwgdGhl biBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUNCj4gLSAgICAgICAgICAgIENv bmZEaXJlY3RvcnlQYXRoID0gb3MucGF0aC5ub3JtcGF0aChPcHRpb25zLkNvbmZEaXJlY3Rvcnkp DQo+ICsgICAgICAgICAgICBDb25mRGlyZWN0b3J5UGF0aCA9IA0KPiArIG9zLnBhdGgubm9ybXBh dGgoRmRzQ29tbWFuZERpY3QuZ2V0KCJjb25mX2RpcmVjdG9yeSIpKQ0KPiAgICAgICAgICAgICAg aWYgQ29uZkRpcmVjdG9yeVBhdGguc3RhcnRzd2l0aCgnIicpOg0KPiAgICAgICAgICAgICAgICAg IENvbmZEaXJlY3RvcnlQYXRoID0gQ29uZkRpcmVjdG9yeVBhdGhbMTpdDQo+ICAgICAgICAgICAg ICBpZiBDb25mRGlyZWN0b3J5UGF0aC5lbmRzd2l0aCgnIicpOg0KPiBAQCAtMTY5LDE0ICsxNzEs MTQgQEAgZGVmIG1haW4oKToNCj4gICAgICAgICAgICAgIFRhcmdldFR4dC5Mb2FkVGFyZ2V0VHh0 RmlsZShCdWlsZENvbmZpZ3VyYXRpb25GaWxlKQ0KPiAgICAgICAgICAgICAgIyBpZiBubyBidWls ZCB0YXJnZXQgZ2l2ZW4gaW4gY29tbWFuZCBsaW5lLCBnZXQgaXQgZnJvbSB0YXJnZXQudHh0DQo+ ICAgICAgICAgICAgICBpZiBub3QgR2VuRmRzR2xvYmFsVmFyaWFibGUuVGFyZ2V0TmFtZToNCj4g LSAgICAgICAgICAgICAgICBCdWlsZFRhcmdldExpc3QgPSBUYXJnZXRUeHQuVGFyZ2V0VHh0RGlj dGlvbmFyeVtEYXRhVHlwZS5UQUJfVEFUX0RFRklORVNfVEFSR0VUXQ0KPiArICAgICAgICAgICAg ICAgIEJ1aWxkVGFyZ2V0TGlzdCA9IA0KPiArIFRhcmdldFR4dC5UYXJnZXRUeHREaWN0aW9uYXJ5 W1RBQl9UQVRfREVGSU5FU19UQVJHRVRdDQo+ICAgICAgICAgICAgICAgICAgaWYgbGVuKEJ1aWxk VGFyZ2V0TGlzdCkgIT0gMToNCj4gICAgICAgICAgICAgICAgICAgICAgRWRrTG9nZ2VyLmVycm9y KCJHZW5GZHMiLCBPUFRJT05fVkFMVUVfSU5WQUxJRCwgRXh0cmFEYXRhPSJPbmx5IGFsbG93cyBv bmUgaW5zdGFuY2UgZm9yIFRhcmdldC4iKQ0KPiAgICAgICAgICAgICAgICAgIEdlbkZkc0dsb2Jh bFZhcmlhYmxlLlRhcmdldE5hbWUgPSBCdWlsZFRhcmdldExpc3RbMF0NCj4NCj4gICAgICAgICAg ICAgICMgaWYgbm8gdG9vbCBjaGFpbiBnaXZlbiBpbiBjb21tYW5kIGxpbmUsIGdldCBpdCBmcm9t IHRhcmdldC50eHQNCj4gICAgICAgICAgICAgIGlmIG5vdCBHZW5GZHNHbG9iYWxWYXJpYWJsZS5U b29sQ2hhaW5UYWc6DQo+IC0gICAgICAgICAgICAgICAgVG9vbENoYWluTGlzdCA9IFRhcmdldFR4 dC5UYXJnZXRUeHREaWN0aW9uYXJ5W0RhdGFUeXBlLlRBQl9UQVRfREVGSU5FU19UT09MX0NIQUlO X1RBR10NCj4gKyAgICAgICAgICAgICAgICBUb29sQ2hhaW5MaXN0ID0gDQo+ICsgVGFyZ2V0VHh0 LlRhcmdldFR4dERpY3Rpb25hcnlbVEFCX1RBVF9ERUZJTkVTX1RPT0xfQ0hBSU5fVEFHXQ0KPiAg ICAgICAgICAgICAgICAgIGlmIFRvb2xDaGFpbkxpc3QgaXMgTm9uZSBvciBsZW4oVG9vbENoYWlu TGlzdCkgPT0gMDoNCj4gICAgICAgICAgICAgICAgICAgICAgRWRrTG9nZ2VyLmVycm9yKCJHZW5G ZHMiLCBSRVNPVVJDRV9OT1RfQVZBSUxBQkxFLCBFeHRyYURhdGE9Ik5vIHRvb2xjaGFpbiBnaXZl bi4gRG9uJ3Qga25vdyBob3cgdG8gYnVpbGQuIikNCj4gICAgICAgICAgICAgICAgICBpZiBsZW4o VG9vbENoYWluTGlzdCkgIT0gMToNCj4gQEAgLTE4NiwxMCArMTg4LDEwIEBAIGRlZiBtYWluKCk6 DQo+ICAgICAgICAgICAgICBFZGtMb2dnZXIuZXJyb3IoIkdlbkZkcyIsIEZJTEVfTk9UX0ZPVU5E LCANCj4gRXh0cmFEYXRhPUJ1aWxkQ29uZmlndXJhdGlvbkZpbGUpDQo+DQo+ICAgICAgICAgICNT ZXQgZ2xvYmFsIGZsYWcgZm9yIGJ1aWxkIG1vZGUNCj4gLSAgICAgICAgR2xvYmFsRGF0YS5nSWdu b3JlU291cmNlID0gT3B0aW9ucy5JZ25vcmVTb3VyY2VzDQo+ICsgICAgICAgIEdsb2JhbERhdGEu Z0lnbm9yZVNvdXJjZSA9IA0KPiArIEZkc0NvbW1hbmREaWN0LmdldCgiSWdub3JlU291cmNlcyIp DQo+DQo+IC0gICAgICAgIGlmIE9wdGlvbnMuTWFjcm9zOg0KPiAtICAgICAgICAgICAgZm9yIFBh aXIgaW4gT3B0aW9ucy5NYWNyb3M6DQo+ICsgICAgICAgIGlmIEZkc0NvbW1hbmREaWN0LmdldCgi bWFjcm8iKToNCj4gKyAgICAgICAgICAgIGZvciBQYWlyIGluIEZkc0NvbW1hbmREaWN0LmdldCgi bWFjcm8iKToNCj4gICAgICAgICAgICAgICAgICBpZiBQYWlyLnN0YXJ0c3dpdGgoJyInKToNCj4g ICAgICAgICAgICAgICAgICAgICAgUGFpciA9IFBhaXJbMTpdDQo+ICAgICAgICAgICAgICAgICAg aWYgUGFpci5lbmRzd2l0aCgnIicpOg0KPiBAQCAtMjI0LDggKzIyNiwxMSBAQCBkZWYgbWFpbigp Og0KPg0KPiAgICAgICAgICAiIiJjYWxsIFdvcmtzcGFjZSBidWlsZCBjcmVhdGUgZGF0YWJhc2Ui IiINCj4gICAgICAgICAgR2xvYmFsRGF0YS5nRGF0YWJhc2VQYXRoID0gb3MucGF0aC5ub3JtcGF0 aChvcy5wYXRoLmpvaW4oQ29uZkRpcmVjdG9yeVBhdGgsIEdsb2JhbERhdGEuZ0RhdGFiYXNlUGF0 aCkpDQo+IC0gICAgICAgIEJ1aWxkV29ya1NwYWNlID0gV29ya3NwYWNlRGF0YWJhc2UoR2xvYmFs RGF0YS5nRGF0YWJhc2VQYXRoKQ0KPiAtICAgICAgICBCdWlsZFdvcmtTcGFjZS5Jbml0RGF0YWJh c2UoKQ0KPiArICAgICAgICBpZiBXb3JrU3BhY2VEYXRhQmFzZToNCj4gKyAgICAgICAgICAgIEJ1 aWxkV29ya1NwYWNlID0gV29ya1NwYWNlRGF0YUJhc2UNCj4gKyAgICAgICAgZWxzZToNCj4gKyAg ICAgICAgICAgIEJ1aWxkV29ya1NwYWNlID0gV29ya3NwYWNlRGF0YWJhc2UoR2xvYmFsRGF0YS5n RGF0YWJhc2VQYXRoKQ0KPiArICAgICAgICAgICAgQnVpbGRXb3JrU3BhY2UuSW5pdERhdGFiYXNl KCkNCj4NCj4gICAgICAgICAgIw0KPiAgICAgICAgICAjIEdldCBmaWxlcyByZWFsIG5hbWUgaW4g d29ya3NwYWNlIGRpciBAQCAtMjMzLDIzICsyMzgsMjMgQEAgDQo+IGRlZiBtYWluKCk6DQo+ICAg ICAgICAgIEdsb2JhbERhdGEuZ0FsbEZpbGVzID0gRGlyQ2FjaGUoV29ya3NwYWNlKQ0KPiAgICAg ICAgICBHbG9iYWxEYXRhLmdXb3Jrc3BhY2UgPSBXb3Jrc3BhY2UNCj4NCj4gLSAgICAgICAgaWYg T3B0aW9ucy5hcmNoTGlzdDoNCj4gLSAgICAgICAgICAgIEFyY2hMaXN0ID0gT3B0aW9ucy5hcmNo TGlzdC5zcGxpdCgnLCcpDQo+ICsgICAgICAgIGlmIEZkc0NvbW1hbmREaWN0LmdldCgiYnVpbGRf YXJjaGl0ZWN0dXJlX2xpc3QiKToNCj4gKyAgICAgICAgICAgIEFyY2hMaXN0ID0gDQo+ICsgRmRz Q29tbWFuZERpY3QuZ2V0KCJidWlsZF9hcmNoaXRlY3R1cmVfbGlzdCIpLnNwbGl0KCcsJykNCj4g ICAgICAgICAgZWxzZToNCj4gLSAgICAgICAgICAgIEFyY2hMaXN0ID0gQnVpbGRXb3JrU3BhY2Uu QnVpbGRPYmplY3RbR2VuRmRzR2xvYmFsVmFyaWFibGUuQWN0aXZlUGxhdGZvcm0sIFRBQl9DT01N T04sIE9wdGlvbnMuQnVpbGRUYXJnZXQsIE9wdGlvbnMuVG9vbENoYWluXS5TdXBBcmNoTGlzdA0K PiArICAgICAgICAgICAgQXJjaExpc3QgPSANCj4gKyBCdWlsZFdvcmtTcGFjZS5CdWlsZE9iamVj dFtHZW5GZHNHbG9iYWxWYXJpYWJsZS5BY3RpdmVQbGF0Zm9ybSwgDQo+ICsgVEFCX0NPTU1PTiwg RmRzQ29tbWFuZERpY3QuZ2V0KCJidWlsZF90YXJnZXQiKSwgDQo+ICsgRmRzQ29tbWFuZERpY3Qu Z2V0KCJ0b29sY2hhaW5fdGFnIildLlN1cEFyY2hMaXN0DQo+DQo+IC0gICAgICAgIFRhcmdldEFy Y2hMaXN0ID0gc2V0KEJ1aWxkV29ya1NwYWNlLkJ1aWxkT2JqZWN0W0dlbkZkc0dsb2JhbFZhcmlh YmxlLkFjdGl2ZVBsYXRmb3JtLCBUQUJfQ09NTU9OLCBPcHRpb25zLkJ1aWxkVGFyZ2V0LCBPcHRp b25zLlRvb2xDaGFpbl0uU3VwQXJjaExpc3QpICYgc2V0KEFyY2hMaXN0KQ0KPiArICAgICAgICBU YXJnZXRBcmNoTGlzdCA9IA0KPiArIHNldChCdWlsZFdvcmtTcGFjZS5CdWlsZE9iamVjdFtHZW5G ZHNHbG9iYWxWYXJpYWJsZS5BY3RpdmVQbGF0Zm9ybSwgDQo+ICsgVEFCX0NPTU1PTiwgRmRzQ29t bWFuZERpY3QuZ2V0KCJidWlsZF90YXJnZXQiKSwgDQo+ICsgRmRzQ29tbWFuZERpY3QuZ2V0KCJ0 b29sY2hhaW5fdGFnIildLlN1cEFyY2hMaXN0KSAmIHNldChBcmNoTGlzdCkNCj4gICAgICAgICAg aWYgbGVuKFRhcmdldEFyY2hMaXN0KSA9PSAwOg0KPiAgICAgICAgICAgICAgRWRrTG9nZ2VyLmVy cm9yKCJHZW5GZHMiLCBHRU5GRFNfRVJST1IsICJUYXJnZXQgQVJDSCAlcyANCj4gbm90IGluIHBs YXRmb3JtIHN1cHBvcnRlZCBBUkNIICVzIiAlIChzdHIoQXJjaExpc3QpLCANCj4gc3RyKEJ1aWxk V29ya1NwYWNlLkJ1aWxkT2JqZWN0W0dlbkZkc0dsb2JhbFZhcmlhYmxlLkFjdGl2ZVBsYXRmb3Jt LCANCj4gVEFCX0NPTU1PTl0uU3VwQXJjaExpc3QpKSkNCj4NCj4gICAgICAgICAgZm9yIEFyY2gg aW4gQXJjaExpc3Q6DQo+IC0gICAgICAgICAgICBHZW5GZHNHbG9iYWxWYXJpYWJsZS5PdXRwdXRE aXJGcm9tRHNjRGljdFtBcmNoXSA9IE5vcm1QYXRoKEJ1aWxkV29ya1NwYWNlLkJ1aWxkT2JqZWN0 W0dlbkZkc0dsb2JhbFZhcmlhYmxlLkFjdGl2ZVBsYXRmb3JtLCBBcmNoLCBPcHRpb25zLkJ1aWxk VGFyZ2V0LCBPcHRpb25zLlRvb2xDaGFpbl0uT3V0cHV0RGlyZWN0b3J5KQ0KPiArICAgICAgICAg ICAgR2VuRmRzR2xvYmFsVmFyaWFibGUuT3V0cHV0RGlyRnJvbURzY0RpY3RbQXJjaF0gPSANCj4g KyBOb3JtUGF0aChCdWlsZFdvcmtTcGFjZS5CdWlsZE9iamVjdFtHZW5GZHNHbG9iYWxWYXJpYWJs ZS5BY3RpdmVQbGF0Zg0KPiArIG9ybSwgQXJjaCwgRmRzQ29tbWFuZERpY3QuZ2V0KCJidWlsZF90 YXJnZXQiKSwgDQo+ICsgRmRzQ29tbWFuZERpY3QuZ2V0KCJ0b29sY2hhaW5fdGFnIildLk91dHB1 dERpcmVjdG9yeSkNCj4NCj4gICAgICAgICAgIyBhc3NpZ24gcGxhdGZvcm0gbmFtZSBiYXNlZCBv biBsYXN0IGVudHJ5IGluIEFyY2hMaXN0DQo+IC0gICAgICAgIEdlbkZkc0dsb2JhbFZhcmlhYmxl LlBsYXRmb3JtTmFtZSA9IEJ1aWxkV29ya1NwYWNlLkJ1aWxkT2JqZWN0W0dlbkZkc0dsb2JhbFZh cmlhYmxlLkFjdGl2ZVBsYXRmb3JtLCBBcmNoTGlzdFstMV0sIE9wdGlvbnMuQnVpbGRUYXJnZXQs IE9wdGlvbnMuVG9vbENoYWluXS5QbGF0Zm9ybU5hbWUNCj4gKyAgICAgICAgR2VuRmRzR2xvYmFs VmFyaWFibGUuUGxhdGZvcm1OYW1lID0gDQo+ICsgQnVpbGRXb3JrU3BhY2UuQnVpbGRPYmplY3Rb R2VuRmRzR2xvYmFsVmFyaWFibGUuQWN0aXZlUGxhdGZvcm0sIA0KPiArIEFyY2hMaXN0Wy0xXSwg RmRzQ29tbWFuZERpY3QuZ2V0KCJidWlsZF90YXJnZXQiKSwgDQo+ICsgRmRzQ29tbWFuZERpY3Qu Z2V0KCJ0b29sY2hhaW5fdGFnIildLlBsYXRmb3JtTmFtZQ0KPg0KPiAtICAgICAgICBpZiBPcHRp b25zLm91dHB1dERpcjoNCj4gLSAgICAgICAgICAgIE91dHB1dERpckZyb21Db21tYW5kTGluZSA9 IEdlbkZkc0dsb2JhbFZhcmlhYmxlLlJlcGxhY2VXb3Jrc3BhY2VNYWNybyhPcHRpb25zLm91dHB1 dERpcikNCj4gKyAgICAgICAgaWYgRmRzQ29tbWFuZERpY3QuZ2V0KCJwbGF0Zm9ybV9idWlsZF9k aXJlY3RvcnkiKToNCj4gKyAgICAgICAgICAgIE91dHB1dERpckZyb21Db21tYW5kTGluZSA9IA0K PiArIEdlbkZkc0dsb2JhbFZhcmlhYmxlLlJlcGxhY2VXb3Jrc3BhY2VNYWNybyhGZHNDb21tYW5k RGljdC5nZXQoInBsYXRmDQo+ICsgb3JtX2J1aWxkX2RpcmVjdG9yeSIpKQ0KPiAgICAgICAgICAg ICAgaWYgbm90IG9zLnBhdGguaXNhYnMgKE91dHB1dERpckZyb21Db21tYW5kTGluZSk6DQo+ICAg ICAgICAgICAgICAgICAgT3V0cHV0RGlyRnJvbUNvbW1hbmRMaW5lID0gb3MucGF0aC5qb2luKEdl bkZkc0dsb2JhbFZhcmlhYmxlLldvcmtTcGFjZURpciwgT3V0cHV0RGlyRnJvbUNvbW1hbmRMaW5l KQ0KPiAgICAgICAgICAgICAgZm9yIEFyY2ggaW4gQXJjaExpc3Q6DQo+IEBAIC0yNzEsMzIgKzI3 NiwzNSBAQCBkZWYgbWFpbigpOg0KPiAgICAgICAgICAgICAgR2VuRmRzR2xvYmFsVmFyaWFibGUu T3V0cHV0RGlyRGljdFtLZXldID0gT3V0cHV0RGlyDQo+DQo+ICAgICAgICAgICIiIiBQYXJzZSBG ZGYgZmlsZSwgaGFzIHRvIHBsYWNlIGFmdGVyIGJ1aWxkIFdvcmtzcGFjZSBhcyBGREYgbWF5IGNv bnRhaW4gbWFjcm9zIGZyb20gRFNDIGZpbGUgIiIiDQo+IC0gICAgICAgIEZkZlBhcnNlck9iaiA9 IEZkZlBhcnNlcihGZGZGaWxlbmFtZSkNCj4gLSAgICAgICAgRmRmUGFyc2VyT2JqLlBhcnNlRmls ZSgpDQo+ICsgICAgICAgIGlmIFdvcmtTcGFjZURhdGFCYXNlOg0KPiArICAgICAgICAgICAgRmRm UGFyc2VyT2JqID0gR2xvYmFsRGF0YS5nRmRmUGFyc2VyDQo+ICsgICAgICAgIGVsc2U6DQo+ICsg ICAgICAgICAgICBGZGZQYXJzZXJPYmogPSBGZGZQYXJzZXIoRmRmRmlsZW5hbWUpDQo+ICsgICAg ICAgICAgICBGZGZQYXJzZXJPYmouUGFyc2VGaWxlKCkNCj4NCj4gICAgICAgICAgaWYgRmRmUGFy c2VyT2JqLkN5Y2xlUmVmZXJlbmNlQ2hlY2soKToNCj4gICAgICAgICAgICAgIEVka0xvZ2dlci5l cnJvcigiR2VuRmRzIiwgRk9STUFUX05PVF9TVVBQT1JURUQsICJDeWNsZSANCj4gUmVmZXJlbmNl IERldGVjdGVkIGluIEZERiBmaWxlIikNCj4NCj4gLSAgICAgICAgaWYgT3B0aW9ucy51aUZkTmFt ZToNCj4gLSAgICAgICAgICAgIGlmIE9wdGlvbnMudWlGZE5hbWUudXBwZXIoKSBpbiBGZGZQYXJz ZXJPYmouUHJvZmlsZS5GZERpY3Q6DQo+IC0gICAgICAgICAgICAgICAgR2VuRmRzLk9ubHlHZW5l cmF0ZVRoaXNGZCA9IE9wdGlvbnMudWlGZE5hbWUNCj4gKyAgICAgICAgaWYgRmRzQ29tbWFuZERp Y3QuZ2V0KCJmZCIpOg0KPiArICAgICAgICAgICAgaWYgRmRzQ29tbWFuZERpY3QuZ2V0KCJmZCIp WzBdLnVwcGVyKCkgaW4gRmRmUGFyc2VyT2JqLlByb2ZpbGUuRmREaWN0Og0KPiArICAgICAgICAg ICAgICAgIEdlbkZkcy5Pbmx5R2VuZXJhdGVUaGlzRmQgPSANCj4gKyBGZHNDb21tYW5kRGljdC5n ZXQoImZkIilbMF0NCj4gICAgICAgICAgICAgIGVsc2U6DQo+ICAgICAgICAgICAgICAgICAgRWRr TG9nZ2VyLmVycm9yKCJHZW5GZHMiLCBPUFRJT05fVkFMVUVfSU5WQUxJRCwNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIk5vIHN1Y2ggYW4gRkQgaW4gRkRGIGZpbGU6ICVzIiAl IE9wdGlvbnMudWlGZE5hbWUpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJO byBzdWNoIGFuIEZEIGluIEZERiBmaWxlOiAlcyIgJSANCj4gKyBGZHNDb21tYW5kRGljdC5nZXQo ImZkIilbMF0pDQo+DQo+IC0gICAgICAgIGlmIE9wdGlvbnMudWlGdk5hbWU6DQo+IC0gICAgICAg ICAgICBpZiBPcHRpb25zLnVpRnZOYW1lLnVwcGVyKCkgaW4gRmRmUGFyc2VyT2JqLlByb2ZpbGUu RnZEaWN0Og0KPiAtICAgICAgICAgICAgICAgIEdlbkZkcy5Pbmx5R2VuZXJhdGVUaGlzRnYgPSBP cHRpb25zLnVpRnZOYW1lDQo+ICsgICAgICAgIGlmIEZkc0NvbW1hbmREaWN0LmdldCgiZnYiKToN Cj4gKyAgICAgICAgICAgIGlmIEZkc0NvbW1hbmREaWN0LmdldCgiZnYiKVswXS51cHBlcigpIGlu IEZkZlBhcnNlck9iai5Qcm9maWxlLkZ2RGljdDoNCj4gKyAgICAgICAgICAgICAgICBHZW5GZHMu T25seUdlbmVyYXRlVGhpc0Z2ID0gDQo+ICsgRmRzQ29tbWFuZERpY3QuZ2V0KCJmdiIpWzBdDQo+ ICAgICAgICAgICAgICBlbHNlOg0KPiAgICAgICAgICAgICAgICAgIEVka0xvZ2dlci5lcnJvcigi R2VuRmRzIiwgT1BUSU9OX1ZBTFVFX0lOVkFMSUQsDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJObyBzdWNoIGFuIEZWIGluIEZERiBmaWxlOiAlcyIgJSBPcHRpb25zLnVpRnZO YW1lKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gc3VjaCBhbiBGViBp biBGREYgZmlsZTogJXMiICUgDQo+ICsgRmRzQ29tbWFuZERpY3QuZ2V0KCJmdiIpWzBdKQ0KPg0K PiAtICAgICAgICBpZiBPcHRpb25zLnVpQ2FwTmFtZToNCj4gLSAgICAgICAgICAgIGlmIE9wdGlv bnMudWlDYXBOYW1lLnVwcGVyKCkgaW4gRmRmUGFyc2VyT2JqLlByb2ZpbGUuQ2Fwc3VsZURpY3Q6 DQo+IC0gICAgICAgICAgICAgICAgR2VuRmRzLk9ubHlHZW5lcmF0ZVRoaXNDYXAgPSBPcHRpb25z LnVpQ2FwTmFtZQ0KPiArICAgICAgICBpZiBGZHNDb21tYW5kRGljdC5nZXQoImNhcCIpOg0KPiAr ICAgICAgICAgICAgaWYgRmRzQ29tbWFuZERpY3QuZ2V0KCJjYXAiKVswXS51cHBlcigpIGluIEZk ZlBhcnNlck9iai5Qcm9maWxlLkNhcHN1bGVEaWN0Og0KPiArICAgICAgICAgICAgICAgIEdlbkZk cy5Pbmx5R2VuZXJhdGVUaGlzQ2FwID0gDQo+ICsgRmRzQ29tbWFuZERpY3QuZ2V0KCJjYXAiKVsw XQ0KPiAgICAgICAgICAgICAgZWxzZToNCj4gICAgICAgICAgICAgICAgICBFZGtMb2dnZXIuZXJy b3IoIkdlbkZkcyIsIE9QVElPTl9WQUxVRV9JTlZBTElELA0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiTm8gc3VjaCBhIENhcHN1bGUgaW4gRkRGIGZpbGU6ICVzIiAlIE9wdGlv bnMudWlDYXBOYW1lKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gc3Vj aCBhIENhcHN1bGUgaW4gRkRGIGZpbGU6ICVzIiAlIA0KPiArIEZkc0NvbW1hbmREaWN0LmdldCgi Y2FwIilbMF0pDQo+DQo+ICAgICAgICAgIEdlbkZkc0dsb2JhbFZhcmlhYmxlLldvcmtTcGFjZSA9 IEJ1aWxkV29ya1NwYWNlDQo+ICAgICAgICAgIGlmIEFyY2hMaXN0Og0KPiBAQCAtMzM3LDcgKzM0 NSw3IEBAIGRlZiBtYWluKCk6DQo+ICAgICAgICAgIEVka0xvZ2dlci5lcnJvcihYLlRvb2xOYW1l LCBGT1JNQVRfSU5WQUxJRCwgRmlsZT1YLkZpbGVOYW1lLCBMaW5lPVguTGluZU51bWJlciwgRXh0 cmFEYXRhPVguTWVzc2FnZSwgUmFpc2VFcnJvcj1GYWxzZSkNCj4gICAgICAgICAgUmV0dXJuQ29k ZSA9IEZPUk1BVF9JTlZBTElEDQo+ICAgICAgZXhjZXB0IEZhdGFsRXJyb3IgYXMgWDoNCj4gLSAg ICAgICAgaWYgT3B0aW9ucy5kZWJ1ZyBpcyBub3QgTm9uZToNCj4gKyAgICAgICAgaWYgRmRzQ29t bWFuZERpY3QuZ2V0KCJkZWJ1ZyIpIGlzIG5vdCBOb25lOg0KPiAgICAgICAgICAgICAgaW1wb3J0 IHRyYWNlYmFjaw0KPiAgICAgICAgICAgICAgRWRrTG9nZ2VyLnF1aWV0KHRyYWNlYmFjay5mb3Jt YXRfZXhjKCkpDQo+ICAgICAgICAgIFJldHVybkNvZGUgPSBYLmFyZ3NbMF0NCj4gQEAgLTM1Niw2 ICszNjQsMzAgQEAgZGVmIG1haW4oKToNCj4gICAgICAgICAgQ2xlYXJEdXBsaWNhdGVkSW5mKCkN Cj4gICAgICByZXR1cm4gUmV0dXJuQ29kZQ0KPg0KPiArZGVmIE9wdGlvbnNUb0NvbW1hbmREaWN0 KE9wdGlvbnMpOg0KPiArICAgIEZkc0NvbW1hbmREaWN0ID0ge30NCj4gKyAgICBGZHNDb21tYW5k RGljdFsidmVyYm9zZSJdID0gT3B0aW9ucy52ZXJib3NlDQo+ICsgICAgRmRzQ29tbWFuZERpY3Rb IkZpeGVkQWRkcmVzcyJdID0gT3B0aW9ucy5GaXhlZEFkZHJlc3MNCj4gKyAgICBGZHNDb21tYW5k RGljdFsicXVpZXQiXSA9IE9wdGlvbnMucXVpZXQNCj4gKyAgICBGZHNDb21tYW5kRGljdFsiZGVi dWciXSA9IE9wdGlvbnMuZGVidWcNCj4gKyAgICBGZHNDb21tYW5kRGljdFsiV29ya3NwYWNlIl0g PSBPcHRpb25zLldvcmtzcGFjZQ0KPiArICAgIEZkc0NvbW1hbmREaWN0WyJHZW5mZHNNdWx0aVRo cmVhZCJdID0gT3B0aW9ucy5HZW5mZHNNdWx0aVRocmVhZA0KPiArICAgIEZkc0NvbW1hbmREaWN0 WyJmZGZfZmlsZSJdID0gW1BhdGhDbGFzcyhPcHRpb25zLmZpbGVuYW1lKV0gaWYgT3B0aW9ucy5m aWxlbmFtZSBlbHNlIFtdDQo+ICsgICAgRmRzQ29tbWFuZERpY3RbImJ1aWxkX3RhcmdldCJdID0g T3B0aW9ucy5CdWlsZFRhcmdldA0KPiArICAgIEZkc0NvbW1hbmREaWN0WyJ0b29sY2hhaW5fdGFn Il0gPSBPcHRpb25zLlRvb2xDaGFpbg0KPiArICAgIEZkc0NvbW1hbmREaWN0WyJhY3RpdmVfcGxh dGZvcm0iXSA9IE9wdGlvbnMuYWN0aXZlUGxhdGZvcm0NCj4gKyAgICBGZHNDb21tYW5kRGljdFsi T3B0aW9uUGNkIl0gPSBPcHRpb25zLk9wdGlvblBjZA0KPiArICAgIEZkc0NvbW1hbmREaWN0WyJj b25mX2RpcmVjdG9yeSJdID0gT3B0aW9ucy5Db25mRGlyZWN0b3J5DQo+ICsgICAgRmRzQ29tbWFu ZERpY3RbIklnbm9yZVNvdXJjZXMiXSA9IE9wdGlvbnMuSWdub3JlU291cmNlcw0KPiArICAgIEZk c0NvbW1hbmREaWN0WyJtYWNybyJdID0gT3B0aW9ucy5NYWNyb3MNCj4gKyAgICBGZHNDb21tYW5k RGljdFsiYnVpbGRfYXJjaGl0ZWN0dXJlX2xpc3QiXSA9IE9wdGlvbnMuYXJjaExpc3QNCj4gKyAg ICBGZHNDb21tYW5kRGljdFsicGxhdGZvcm1fYnVpbGRfZGlyZWN0b3J5Il0gPSBPcHRpb25zLm91 dHB1dERpcg0KPiArICAgIEZkc0NvbW1hbmREaWN0WyJmZCJdID0gW09wdGlvbnMudWlGZE5hbWVd IGlmIE9wdGlvbnMudWlGZE5hbWUgZWxzZSBbXQ0KPiArICAgIEZkc0NvbW1hbmREaWN0WyJmdiJd ID0gW09wdGlvbnMudWlGdk5hbWVdIGlmIE9wdGlvbnMudWlGdk5hbWUgZWxzZSBbXQ0KPiArICAg IEZkc0NvbW1hbmREaWN0WyJjYXAiXSA9IFtPcHRpb25zLnVpQ2FwTmFtZV0gaWYgT3B0aW9ucy51 aUNhcE5hbWUgZWxzZSBbXQ0KPiArICAgIHJldHVybiBGZHNDb21tYW5kRGljdA0KPiArDQo+ICsN Cj4gIGdQYXJhbUNoZWNrID0gW10NCj4gIGRlZiBTaW5nbGVDaGVja0NhbGxiYWNrKG9wdGlvbiwg b3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6DQo+ICAgICAgaWYgb3B0aW9uIG5vdCBpbiBnUGFyYW1D aGVjazoNCj4gQEAgLTcxNiw2ICs3NDgsNyBAQCBjbGFzcyBHZW5GZHMob2JqZWN0KToNCj4gICAg ICAgICAgICAgIG9zLnJlbW92ZShHdWlkWFJlZkZpbGVOYW1lKQ0KPiAgICAgICAgICBHdWlkWFJl ZkZpbGUuY2xvc2UoKQ0KPg0KPiArDQo+ICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOg0KPiAg ICAgIHIgPSBtYWluKCkNCj4gICAgICAjIyAwLTEyNyBpcyBhIHNhZmUgcmV0dXJuIHJhbmdlLCBh bmQgMSBpcyBhIHN0YW5kYXJkIGRlZmF1bHQgDQo+IGVycm9yIGRpZmYgLS1naXQgYS9CYXNlVG9v bHMvU291cmNlL1B5dGhvbi9idWlsZC9idWlsZC5weSANCj4gYi9CYXNlVG9vbHMvU291cmNlL1B5 dGhvbi9idWlsZC9idWlsZC5weQ0KPiBpbmRleCBkNzQwODJmYzI2Li5kODdiMTNjMDkwIDEwMDY0 NA0KPiAtLS0gYS9CYXNlVG9vbHMvU291cmNlL1B5dGhvbi9idWlsZC9idWlsZC5weQ0KPiArKysg Yi9CYXNlVG9vbHMvU291cmNlL1B5dGhvbi9idWlsZC9idWlsZC5weQ0KPiBAQCAtNTIsNyArNTIs NyBAQCBmcm9tIFBhdGNoUGNkVmFsdWUuUGF0Y2hQY2RWYWx1ZSBpbXBvcnQgKg0KPg0KPiAgaW1w b3J0IENvbW1vbi5FZGtMb2dnZXINCj4gIGltcG9ydCBDb21tb24uR2xvYmFsRGF0YSBhcyBHbG9i YWxEYXRhIC1mcm9tIEdlbkZkcy5HZW5GZHMgaW1wb3J0IA0KPiBHZW5GZHMNCj4gK2Zyb20gR2Vu RmRzLkdlbkZkcyBpbXBvcnQgR2VuRmRzLCBHZW5GZHNBcGkNCj4NCj4gIGZyb20gY29sbGVjdGlv bnMgaW1wb3J0IE9yZGVyZWREaWN0LCBkZWZhdWx0ZGljdA0KPg0KPiBAQCAtMTM5Miw3ICsxMzky LDcgQEAgY2xhc3MgQnVpbGQoKToNCj4NCj4gICAgICAgICAgIyBnZW5mZHMNCj4gICAgICAgICAg aWYgVGFyZ2V0ID09ICdmZHMnOg0KPiAtICAgICAgICAgICAgTGF1bmNoQ29tbWFuZChBdXRvR2Vu T2JqZWN0LkdlbkZkc0NvbW1hbmQsIEF1dG9HZW5PYmplY3QuTWFrZUZpbGVEaXIpDQo+ICsgICAg ICAgICAgICBHZW5GZHNBcGkoQXV0b0dlbk9iamVjdC5HZW5GZHNDb21tYW5kRGljdCwgc2VsZi5E YikNCj4gICAgICAgICAgICAgIHJldHVybiBUcnVlDQo+DQo+ICAgICAgICAgICMgcnVuDQo+IEBA IC0yMTM2LDcgKzIxMzYsNyBAQCBjbGFzcyBCdWlsZCgpOg0KPiAgICAgICAgICAgICAgICAgICAg ICAgICAgIyBHZW5lcmF0ZSBGRCBpbWFnZSBpZiB0aGVyZSdzIGEgRkRGIGZpbGUgZm91bmQNCj4g ICAgICAgICAgICAgICAgICAgICAgICAgICMNCj4gICAgICAgICAgICAgICAgICAgICAgICAgIEdl bkZkc1N0YXJ0ID0gdGltZS50aW1lKCkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIExhdW5j aENvbW1hbmQoV2EuR2VuRmRzQ29tbWFuZCwgb3MuZ2V0Y3dkKCkpDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICBHZW5GZHNBcGkoV2EuR2VuRmRzQ29tbWFuZERpY3QsIHNlbGYuRGIpDQo+DQo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAjDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAj IENyZWF0ZSBNQVAgZmlsZSBmb3IgYWxsIHBsYXRmb3JtIEZWcyBhZnRlciBHZW5GZHMuDQo+IC0t DQo+IDIuMTQuMS53aW5kb3dzLjENCj4NCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18NCj4gZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmcNCj4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9l ZGsyLWRldmVsDQo=