From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Goldish Subject: Re: [KVM-AUTOTEST PATCH v4] KVM test: A memory efficient kvm_config implementation Date: Wed, 3 Mar 2010 11:20:42 -0500 (EST) Message-ID: <143095017.2708041267633242222.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> References: <199667921.2707991267633218479.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: autotest@test.kernel.org, kvm@vger.kernel.org To: Lucas Meneghel Rodrigues Return-path: In-Reply-To: <199667921.2707991267633218479.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: autotest-bounces@test.kernel.org Errors-To: autotest-bounces@test.kernel.org List-Id: kvm.vger.kernel.org Ci0tLS0tICJMdWNhcyBNZW5lZ2hlbCBSb2RyaWd1ZXMiIDxsbXJAcmVkaGF0LmNvbT4gd3JvdGU6 Cgo+IE9uIFR1ZSwgMjAxMC0wMy0wMiBhdCAxOTozMCArMDIwMCwgTWljaGFlbCBHb2xkaXNoIHdy b3RlOgo+ID4gVGhpcyBwYXRjaDoKPiA+IAo+ID4gLSBNYWtlcyBrdm1fY29uZmlnIHVzZSBsZXNz IG1lbW9yeSBkdXJpbmcgcGFyc2luZywgYnkgc3RvcmluZyBjb25maWcKPiBkYXRhCj4gPiAgIGNv bXBhY3RseSBpbiBhcnJheXMgZHVyaW5nIHBhcnNpbmcsIGFuZCBnZW5lcmF0aW5nIHRoZSBmaW5h bCBkaWN0cwo+IG9ubHkgd2hlbgo+ID4gICByZXF1ZXN0ZWQuCj4gPiAgIE9uIG15IG1hY2hpbmUg dGhpcyByZXN1bHRzIGluIDUtMTAgdGltZXMgbGVzcyBtZW1vcnkgYmVpbmcgdXNlZAo+IChkZXBl bmRpbmcgb24KPiA+ICAgdGhlIHNpemUgb2YgdGhlIGZpbmFsIGdlbmVyYXRlZCBsaXN0KS4KPiA+ ICAgVGhpcyBhbGxvd3MgdGhlIHRlc3QgY29uZmlndXJhdGlvbiB0byBrZWVwIGV4cGFuZGluZyB3 aXRob3V0Cj4gaGF2aW5nIHRoZQo+ID4gICBwYXJzZXIgcnVuIG91dCBvZiBtZW1vcnkuCj4gPiAK PiA+IC0gQWRkcyBjb25maWcuZm9ya19hbmRfcGFyc2UoKSwgYSBmdW5jdGlvbiB0aGF0IHBhcnNl cyBhIGNvbmZpZwo+IGZpbGUvc3RyaW5nIGluCj4gPiAgIGEgZm9ya2VkIHByb2Nlc3MgYW5kIHRo ZW4gdGVybWluYXRlcyB0aGUgcHJvY2Vzcy4gIFRoaXMgd29ya3MKPiBhcm91bmQgUHl0aG9uJ3MK PiA+ICAgcG9saWN5IG9mIGtlZXBpbmcgYWxsb2NhdGVkIG1lbW9yeSB0byBpdHNlbGYgZXZlbiBh ZnRlciB0aGUKPiBvYmplY3RzIG9jY3VweWluZwo+ID4gICB0aGUgbWVtb3J5IGhhdmUgYmVlbiBk ZXN0cm95ZWQuICBJZiB0aGUgcHJvY2VzcyB0aGF0IGRvZXMgdGhlCj4gcGFyc2luZyBpcyB0aGUK PiA+ICAgc2FtZSBvbmUgdGhhdCBydW5zIHRoZSB0ZXN0cywgbGVzcyBtZW1vcnkgd2lsbCBiZSBh dmFpbGFibGUgdG8gdGhlCj4gVk1zIGR1cmluZwo+ID4gICB0ZXN0aW5nLgo+ID4gCj4gPiAtIE1h a2VzIHBhcnNpbmcgNC01IHRpbWVzIGZhc3RlciBhcyBhIHJlc3VsdCBvZiB0aGUgbmV3IGludGVy bmFsCj4gcmVwcmVzZW50YXRpb24uCj4gPiAKPiA+IE92ZXJhbGwsIGt2bV9jb25maWcncyBtZW1v cnkgdXNhZ2Ugc2hvdWxkIG5vdyBiZSBuZWdsaWdpYmxlIGluIG1vc3QKPiBjYXNlcy4KPiA+IAo+ ID4gQ2hhbmdlcyBmcm9tIHYzOgo+ID4gLSBVc2UgdGhlIGhvbWVtYWRlICdjb25maWdyZWFkZXIn IGNsYXNzIGluc3RlYWQgb2YgcmVndWxhciBmaWxlcyBpbgo+IHBhcnNlKCkKPiA+ICAgYW5kIHBh cnNlX3ZhcmlhbnRzKCkgKHJlYWRsaW5lKCkgYW5kL29yIHNlZWsoKSBhcmUgdmVyeSBzbG93KS4K PiA+IC0gVXNlIGEgcmVnZXggY2FjaGUgZGljdCAocmVnZXhfY2FjaGUpLgo+ID4gLSBVc2UgYSBz dHJpbmcgY2FjaGUgZGljdCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdAo+IChvYmplY3RfY2FjaGVf aW5kaWNlcykuCj4gPiAtIFNvbWUgY2hhbmdlcyB0byBmb3JrX2FuZF9wYXJzZSgpIChkaXNhYmxl IGJ1ZmZlcmluZykuCj4gPiAKPiA+IENoYW5nZXMgZnJvbSB2MjoKPiA+IC0gTWVyZ2VkIF9nZXRf bmV4dF9saW5lKCkgYW5kIF9nZXRfbmV4dF9saW5lX2luZGVudCgpLgo+ID4gLSBNYWRlIF9hcnJh eV9nZXRfbmFtZSgpIGZhc3Rlci4KPiA+IAo+ID4gQ2hhbmdlcyBmcm9tIHYxOgo+ID4gLSBBZGRl ZCBjb25maWcuZ2V0X2dlbmVyYXRvcigpIHdoaWNoIGlzIHNpbWlsYXIgdG8gZ2V0X2xpc3QoKSBi dXQKPiByZXR1cm5zIGEKPiA+ICAgZGljdCBnZW5lcmF0b3IgaW5zdGVhZCBvZiBhIGxpc3QuICBU aGlzIHNob3VsZCBzYXZlIHNvbWUgbW9yZQo+IG1lbW9yeSBhbmQgd2lsbAo+ID4gICBtYWtlIHRl c3RzIHN0YXJ0IHNvb25lci4KPiA+IC0gVXNlIGdldF9nZW5lcmF0b3IoKSBpbiBjb250cm9sLgo+ ID4gLSBDYWxsIHdhaXRwaWQoKSBhdCB0aGUgZW5kIG9mIGZvcmtfYW5kX3BhcnNlKCkuCj4gCj4g QXMgdGhlIGdlbmVyYXRlZCBwYXRjaCBpcyBraW5kYSBmcmFnbWVudGVkIGZvciBwb3N0aW5nIGNv bW1lbnRzCj4gaW5saW5lLAo+IEkgYW0gZ29pbmcgdG8gdGhyb3cganVzdCBhIGJsb2NrIG9mIG1p bm9yIGNvbW1lbnRzIGFmdGVyIEkgaGF2ZQo+IHJldmlld2VkCj4gdGhlIGNvZGU6Cj4gCj4gT2Jz ZXJ2YXRpb25zOgo+IAo+ICogV2hlbiBhIGZpbGUgaXMgbWlzc2luZywgaXQncyBtb3JlIGFwcHJv cHJpYXRlIHRvIHJhaXNlIGEgSU9FcnJvcgo+IHRoYW4KPiBhbiBFeGNlcHRpb24sIHNvIHdlIG11 c3QgY2hhbmdlIHRoYXQuIEFsc28sIGl0J3MgaW1wb3J0YW50IHRvIGZvbGxvdwo+IHRoZSBjb2Rp bmcgc3RhbmRhcmRzIGZvciByYWlzaW5nIGV4Y2VwdGlvbnMuCgpJIGFncmVlLiAgVGhhdCBFeGNl cHRpb24gaXMgbm90aGluZyBuZXcgYnV0IGl0J3MgYmVlbiBvdmVybG9va2VkIHNvIGZhci4KCj4g 4oCiIEkgd2FzIHdvbmRlcmluZyB3aGV0aGVyIG1ha2UgZm9ya19hbmRfcGFyc2UgYSBwdWJsaWMg aW50ZXJmYWNlIGZvcgo+IHRoZSBjb25maWcgb2JqZWN0IHdhcyB0aGUgcmlnaHQgZGVjaXNpb24s IG1heWJlIGFsbCBjYWxscyB0byBwYXJzZV9maWxlCj4gc2hvdWxkIGJlIGRvbmUgaW4gYSBmb3Jr X2FuZF9wYXJzZSBmYXNoaW9uPyBJIGd1ZXNzIEkgZ290IHlvdXIgcG9pbnQKPiBpbiBtYWtpbmcg aXQgYSBwdWJsaWMgaW50ZXJmYWNlIGFuZCBzZXBhcmF0ZSBpdCBmcm9tIHBhcnNlX2ZpbGUsIGJ1 dAo+IGlzbid0IHRoYXQga2luZGEgY29uZnVzaW5nIGZvciB0aGUgdXNlcnMgKEkgbWVhbiwgcGVv cGxlIHdyaXRpbmcgY29udHJvbAo+IGZpbGVzIGZvciBrdm0gYXV0b3Rlc3QpPwoKSWYgdGhlIHRl c3Qgc2V0IGlzIHNlbGVjdGVkIGluIGEgc3RyaW5nIHRoYXQgZ2V0cyBwYXJzZWQgYWZ0ZXIgdGhl IGNvbmZpZwpmaWxlLCB0aGVuIHlvdSBoYXZlIHRvIHBhcnNlIGJvdGggdGhlIGZpbGUgYW5kIHRo ZSBzdHJpbmcgaW4gdGhlIHNhbWUKZm9ya2VkIHByb2Nlc3MuICBJZiB5b3UgZG8gdGhlIGZvcmtp bmcgaW4gcGFyc2VfZmlsZSgpIGFuZCBwYXJzZV9zdHJpbmcoKQpzZXBhcmF0ZWx5LCBhbmQgY2Fs bCB0aGVtIG9uZSBhZnRlciB0aGUgb3RoZXIsIHRoZSBkYXRhIGdlbmVyYXRlZCBieQpwYXJzZV9m aWxlKCkgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHBhcmVudCBwcm9jZXNzIGFuZCBjb25zdW1lcyBh IGxvdCBvZgptZW1vcnkuICBJZiB5b3UgcGFyc2VfZmlsZSgpIGFuZCBwYXJzZV9zdHJpbmcoKSBp biB0aGUgc2FtZSBmb3JrZWQgcHJvY2VzcywKb25seSBhIHNtYWxsIGFtb3VudCBvZiBkYXRhIHRo YXQgcmVtYWlucyBhZnRlciBwYXJzZV9zdHJpbmcoKSBnZXRzCnRyYW5zZmVycmVkIGJhY2sgdG8g dGhlIHBhcmVudCBwcm9jZXNzLgpTbyBpbiBhbnkgY2FzZSwgd2UgbmVlZCBhIGZ1bmN0aW9uIHRo YXQgZm9ya3MgYW5kIHBhcnNlcyBhIGZpbGUgYW5kIGEKc3RyaW5nIHRvZ2V0aGVyLCB3aGljaCBp cyB3aGF0IGZvcmtfYW5kX3BhcnNlKCkgZG9lcy4KV2UgY291bGQgbWFrZSBwYXJzZV9maWxlKCkg YW5kIHBhcnNlX3N0cmluZygpIGZvcmsgdG9vLCBidXQgdGhhdCB3b3VsZCBiZQpyZWR1bmRhbnQg YmVjYXVzZSBmb3JrX2FuZF9wYXJzZSgpIGNhbiBiZSBjYWxsZWQgd2l0aCBhbnkgb2YgdGhlIHBh cmFtZXRlcnMKb21pdHRlZC4KCj4g4oCiIEFib3V0IGJ1ZmZlcmluZyBvbiBmb3JrX2FuZF9wYXJz ZTogVGhlIHBlcmZvcm1hbmNlIHBlbmFsdGllcyBpbgo+IGRpc2FibGluZyBidWZmZXJpbmcgdmFy aWVzLCB3aXRoIGNhY2hlcyBkcm9wcGVkIGl0IHdhcyBzb21ldGhpbmcgbGlrZQo+IDMtNSUsIGFm dGVyICd3YXJtaW5nIHVwJyBpdCB3YXMgc29tZXRoaW5nIGxpa2UgOC0xMSUsIHNvIGl0J3Mgc21h bGwKPiBzdHVmZi4gQnV0IHdlIGNhbiBmYXZvdXIgc3BlZWQgaW4gdGhpcyBjYXNlIHNvIHRoZSBm aW5hbCB2ZXJzaW9uCj4gd29uJ3QgZGlzYWJsZSBidWZmZXJpbmcuCj4gCj4gQ29tcGxpbWVudHM6 Cj4gCj4g4oCiIFRoZSBjb25maWdyZWFkZXIgY2xhc3Mgd2FzIGEgdmVyeSBpbnRlcmVzdGluZyBt b3ZlLCBzaW1wbGUsIGNsZWFuCj4gYW5kIGZhc3QuIENvbmdyYXRzIQo+IOKAoiBUaGUgb3V0cHV0 IG9mIHRoZSBjb25maWcgc3lzdGVtIGlzIGdvb2QgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcywgc28K PiB3ZSdsbCBzdGljayB3aXRoIGl0Lgo+IOKAoiBUaGFuayB5b3UgdmVyeSBtdWNoIGZvciB5b3Vy IHdvcmssIG5vdyB3ZSBoYXZlIGZhc3RlciBwYXJzaW5nLCB0aGF0Cj4gY29uc3VtZXMgYSBsb3Qg bGVzcyBtZW1vcnksIHNvIHNtYWxsZXIgYm94ZXMgd2lsbCBiZW5lZml0IGEgKmxvdCoKPiBmcm9t Cj4gdGhhdC4KPiAKPiBXaGF0IEkgYW0gZ29pbmcgdG8gZG86Cj4gCj4g4oCiIEkgd2lsbCByZS1z ZW5kIHRoZSB2ZXJzaW9uIHdpdGggdGhlIHRpbnkgY2hhbmdlcyBJIG1hZGUgc28gaXQgZ2V0cwo+ IHJlY29yZGVkIG9uIHBhdGNod29yaywgYW5kIHNvb24gYWZ0ZXIgSSdsbCBhcHBseSBpdCB1cHN0 cmVhbS4gSSB0aGluawo+IGZyb20gdGhpcyBwb2ludCBvbiB3ZSBtaWdodCBoYXZlIG9ubHkgbWlu b3IgdHdlYWtzIHRvIG1ha2UuCj4gCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IE1pY2hhZWwgR29s ZGlzaCA8bWdvbGRpc2hAcmVkaGF0LmNvbT4KPiA+IC0tLQo+ID4gIGNsaWVudC90ZXN0cy9rdm0v Y29udHJvbCAgICAgICAgICB8ICAgMzAgKy0KPiA+ICBjbGllbnQvdGVzdHMva3ZtL2NvbnRyb2wu cGFyYWxsZWwgfCAgIDIxICstCj4gPiAgY2xpZW50L3Rlc3RzL2t2bS9rdm1fY29uZmlnLnB5ICAg IHwgIDgzMgo+ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KPiA+ICAzIGZp bGVzIGNoYW5nZWQsIDUzNSBpbnNlcnRpb25zKCspLCAzNDggZGVsZXRpb25zKC0pCj4gPiAKPiA+ IGRpZmYgLS1naXQgYS9jbGllbnQvdGVzdHMva3ZtL2NvbnRyb2wgYi9jbGllbnQvdGVzdHMva3Zt L2NvbnRyb2wKPiA+IGluZGV4IDE2MzI4NmUuLjE1YzQ1MzkgMTAwNjQ0Cj4gPiAtLS0gYS9jbGll bnQvdGVzdHMva3ZtL2NvbnRyb2wKPiA+ICsrKyBiL2NsaWVudC90ZXN0cy9rdm0vY29udHJvbAo+ ID4gQEAgLTMwLDM0ICszMCwzOCBAQCBpbXBvcnQga3ZtX3V0aWxzLCBrdm1fY29uZmlnCj4gPiAg IyBzZXQgRW5nbGlzaCBlbnZpcm9ubWVudCAoY29tbWFuZCBvdXRwdXQgbWlnaHQgYmUgbG9jYWxp emVkLCBuZWVkCj4gdG8gYmUgc2FmZSkKPiA+ICBvcy5lbnZpcm9uWydMQU5HJ10gPSAnZW5fVVMu VVRGLTgnCj4gPiAgCj4gPiAtYnVpbGRfY2ZnX3BhdGggPSBvcy5wYXRoLmpvaW4oa3ZtX3Rlc3Rf ZGlyLCAiYnVpbGQuY2ZnIikKPiA+IC1idWlsZF9jZmcgPSBrdm1fY29uZmlnLmNvbmZpZyhidWls ZF9jZmdfcGF0aCkKPiA+IC0jIE1ha2UgYW55IGRlc2lyZWQgY2hhbmdlcyB0byB0aGUgYnVpbGQg Y29uZmlndXJhdGlvbiBoZXJlLiBGb3IKPiBleGFtcGxlOgo+ID4gLSNidWlsZF9jZmcucGFyc2Vf c3RyaW5nKCIiIgo+ID4gK3N0ciA9ICIiIgo+ID4gKyMgVGhpcyBzdHJpbmcgd2lsbCBiZSBwYXJz ZWQgYWZ0ZXIgYnVpbGQuY2ZnLiAgTWFrZSBhbnkgZGVzaXJlZAo+IGNoYW5nZXMgdG8gdGhlCj4g PiArIyBidWlsZCBjb25maWd1cmF0aW9uIGhlcmUuICBGb3IgZXhhbXBsZToKPiA+ICAjcmVsZWFz ZV90YWcgPSA4NAo+ID4gLSMiIiIpCj4gPiAtaWYgbm90IGt2bV91dGlscy5ydW5fdGVzdHMoYnVp bGRfY2ZnLmdldF9saXN0KCksIGpvYik6Cj4gPiArIiIiCj4gPiArYnVpbGRfY2ZnID0ga3ZtX2Nv bmZpZy5jb25maWcoKQo+ID4gK2J1aWxkX2NmZ19wYXRoID0gb3MucGF0aC5qb2luKGt2bV90ZXN0 X2RpciwgImJ1aWxkLmNmZyIpCj4gPiArYnVpbGRfY2ZnLmZvcmtfYW5kX3BhcnNlKGJ1aWxkX2Nm Z19wYXRoLCBzdHIpCj4gPiAraWYgbm90IGt2bV91dGlscy5ydW5fdGVzdHMoYnVpbGRfY2ZnLmdl dF9nZW5lcmF0b3IoKSwgam9iKToKPiA+ICAgICAgbG9nZ2luZy5lcnJvcigiS1ZNIGJ1aWxkIHN0 ZXAgZmFpbGVkLCBleGl0aW5nLiIpCj4gPiAgICAgIHN5cy5leGl0KDEpCj4gPiAgCj4gPiAtdGVz dHNfY2ZnX3BhdGggPSBvcy5wYXRoLmpvaW4oa3ZtX3Rlc3RfZGlyLCAidGVzdHMuY2ZnIikKPiA+ IC10ZXN0c19jZmcgPSBrdm1fY29uZmlnLmNvbmZpZyh0ZXN0c19jZmdfcGF0aCkKPiA+IC0jIE1h a2UgYW55IGRlc2lyZWQgY2hhbmdlcyB0byB0aGUgdGVzdCBjb25maWd1cmF0aW9uIGhlcmUuIEZv cgo+IGV4YW1wbGU6Cj4gPiAtI3Rlc3RzX2NmZy5wYXJzZV9zdHJpbmcoIiIiCj4gPiArc3RyID0g IiIiCj4gPiArIyBUaGlzIHN0cmluZyB3aWxsIGJlIHBhcnNlZCBhZnRlciB0ZXN0cy5jZmcuICBN YWtlIGFueSBkZXNpcmVkCj4gY2hhbmdlcyB0byB0aGUKPiA+ICsjIHRlc3QgY29uZmlndXJhdGlv biBoZXJlLiAgRm9yIGV4YW1wbGU6Cj4gPiAgI2Rpc3BsYXkgPSBzZGwKPiA+ICAjaW5zdGFsbHxz ZXR1cDogdGltZW91dF9tdWx0aXBsaWVyID0gMwo+ID4gLSMiIiIpCj4gPiArIiIiCj4gPiArdGVz dHNfY2ZnID0ga3ZtX2NvbmZpZy5jb25maWcoKQo+ID4gK3Rlc3RzX2NmZ19wYXRoID0gb3MucGF0 aC5qb2luKGt2bV90ZXN0X2RpciwgInRlc3RzLmNmZyIpCj4gPiArdGVzdHNfY2ZnLmZvcmtfYW5k X3BhcnNlKHRlc3RzX2NmZ19wYXRoLCBzdHIpCj4gPiAgCj4gPiAgcG9vbHNfY2ZnX3BhdGggPSBv cy5wYXRoLmpvaW4oa3ZtX3Rlc3RfZGlyLCAiYWRkcmVzc19wb29scy5jZmciKQo+ID4gIHRlc3Rz X2NmZy5wYXJzZV9maWxlKHBvb2xzX2NmZ19wYXRoKQo+ID4gIGhvc3RuYW1lID0gb3MudW5hbWUo KVsxXS5zcGxpdCgiLiIpWzBdCj4gPiAtaWYgdGVzdHNfY2ZnLmZpbHRlcigiXiIgKyBob3N0bmFt ZSk6Cj4gPiAraWYgdGVzdHNfY2ZnLmNvdW50KCJeIiArIGhvc3RuYW1lKToKPiA+ICAgICAgdGVz dHNfY2ZnLnBhcnNlX3N0cmluZygib25seSBeJXMiICUgaG9zdG5hbWUpCj4gPiAgZWxzZToKPiA+ ICAgICAgdGVzdHNfY2ZnLnBhcnNlX3N0cmluZygib25seSBeZGVmYXVsdF9ob3N0IikKPiA+ICAK PiA+ICAjIFJ1biB0aGUgdGVzdHMKPiA+IC1rdm1fdXRpbHMucnVuX3Rlc3RzKHRlc3RzX2NmZy5n ZXRfbGlzdCgpLCBqb2IpCj4gPiAra3ZtX3V0aWxzLnJ1bl90ZXN0cyh0ZXN0c19jZmcuZ2V0X2dl bmVyYXRvcigpLCBqb2IpCj4gPiAgCj4gPiAgIyBHZW5lcmF0ZSBhIG5pY2UgSFRNTCByZXBvcnQg aW5zaWRlIHRoZSBqb2IncyByZXN1bHRzIGRpcgo+ID4gIGt2bV91dGlscy5jcmVhdGVfcmVwb3J0 KGt2bV90ZXN0X2Rpciwgam9iLnJlc3VsdGRpcikKPiA+IGRpZmYgLS1naXQgYS9jbGllbnQvdGVz dHMva3ZtL2NvbnRyb2wucGFyYWxsZWwKPiBiL2NsaWVudC90ZXN0cy9rdm0vY29udHJvbC5wYXJh bGxlbAo+ID4gaW5kZXggMzQzZjY5NC4uMDdiYzZlNSAxMDA2NDQKPiA+IC0tLSBhL2NsaWVudC90 ZXN0cy9rdm0vY29udHJvbC5wYXJhbGxlbAo+ID4gKysrIGIvY2xpZW50L3Rlc3RzL2t2bS9jb250 cm9sLnBhcmFsbGVsCj4gPiBAQCAtMTYwLDE5ICsxNjAsMjIgQEAgaWYgbm90IHBhcmFtcy5nZXQo Im1vZGUiKSA9PSAibm9pbnN0YWxsIjoKPiA+ICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICBpbXBvcnQga3ZtX2NvbmZpZwo+ ID4gIAo+ID4gLWZpbGVuYW1lID0gb3MucGF0aC5qb2luKHB3ZCwgImt2bV90ZXN0cy5jZmciKQo+ ID4gLWNmZyA9IGt2bV9jb25maWcuY29uZmlnKGZpbGVuYW1lKQo+ID4gLQo+ID4gLSMgSWYgZGVz aXJhYmxlLCBtYWtlIGNoYW5nZXMgdG8gdGhlIHRlc3QgY29uZmlndXJhdGlvbiBoZXJlLiAgRm9y Cj4gZXhhbXBsZToKPiA+IC0jIGNmZy5wYXJzZV9zdHJpbmcoImluc3RhbGx8c2V0dXA6IHRpbWVv dXRfbXVsdGlwbGllciA9IDIiKQo+ID4gLSMgY2ZnLnBhcnNlX3N0cmluZygib25seSBmYzhfcXVp Y2siKQo+ID4gLSMgY2ZnLnBhcnNlX3N0cmluZygiZGlzcGxheSA9IHNkbCIpCj4gPiArc3RyID0g IiIiCj4gPiArIyBUaGlzIHN0cmluZyB3aWxsIGJlIHBhcnNlZCBhZnRlciB0ZXN0cy5jZmcuICBN YWtlIGFueSBkZXNpcmVkCj4gY2hhbmdlcyB0byB0aGUKPiA+ICsjIHRlc3QgY29uZmlndXJhdGlv biBoZXJlLiAgRm9yIGV4YW1wbGU6Cj4gPiArI2luc3RhbGx8c2V0dXA6IHRpbWVvdXRfbXVsdGlw bGllciA9IDMKPiA+ICsjb25seSBmYzhfcXVpY2sKPiA+ICsjZGlzcGxheSA9IHNkbAo+ID4gKyIi Igo+ID4gK2NmZyA9IGt2bV9jb25maWcuY29uZmlnKCkKPiA+ICtmaWxlbmFtZSA9IG9zLnBhdGgu am9pbihwd2QsICJ0ZXN0cy5jZmciKQo+ID4gK2NmZy5mb3JrX2FuZF9wYXJzZShmaWxlbmFtZSwg c3RyKQo+ID4gIAo+ID4gLWZpbGVuYW1lID0gb3MucGF0aC5qb2luKHB3ZCwgImt2bV9hZGRyZXNz X3Bvb2xzLmNmZyIpCj4gPiArZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocHdkLCAiYWRkcmVzc19w b29scy5jZmciKQo+ID4gIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKPiA+ICAgICAgY2Zn LnBhcnNlX2ZpbGUoZmlsZW5hbWUpCj4gPiAgICAgIGhvc3RuYW1lID0gb3MudW5hbWUoKVsxXS5z cGxpdCgiLiIpWzBdCj4gPiAtICAgIGlmIGNmZy5maWx0ZXIoIl4iICsgaG9zdG5hbWUpOgo+ID4g KyAgICBpZiBjZmcuY291bnQoIl4iICsgaG9zdG5hbWUpOgo+ID4gICAgICAgICAgY2ZnLnBhcnNl X3N0cmluZygib25seSBeJXMiICUgaG9zdG5hbWUpCj4gPiAgICAgIGVsc2U6Cj4gPiAgICAgICAg ICBjZmcucGFyc2Vfc3RyaW5nKCJvbmx5IF5kZWZhdWx0X2hvc3QiKQo+ID4gZGlmZiAtLWdpdCBh L2NsaWVudC90ZXN0cy9rdm0va3ZtX2NvbmZpZy5weQo+IGIvY2xpZW50L3Rlc3RzL2t2bS9rdm1f Y29uZmlnLnB5Cj4gPiBpbmRleCA3OThlZjU2Li43ZmYyOGU0IDEwMDc1NQo+ID4gLS0tIGEvY2xp ZW50L3Rlc3RzL2t2bS9rdm1fY29uZmlnLnB5Cj4gPiArKysgYi9jbGllbnQvdGVzdHMva3ZtL2t2 bV9jb25maWcucHkKPiA+IEBAIC0yLDEwICsyLDEwIEBACj4gPiAgIiIiCj4gPiAgS1ZNIGNvbmZp Z3VyYXRpb24gZmlsZSB1dGlsaXR5IGZ1bmN0aW9ucy4KPiA+ICAKPiA+IC1AY29weXJpZ2h0OiBS ZWQgSGF0IDIwMDgtMjAwOQo+ID4gK0Bjb3B5cmlnaHQ6IFJlZCBIYXQgMjAwOC0yMDEwCj4gPiAg IiIiCj4gPiAgCj4gPiAtaW1wb3J0IGxvZ2dpbmcsIHJlLCBvcywgc3lzLCBTdHJpbmdJTywgb3B0 cGFyc2UKPiA+ICtpbXBvcnQgbG9nZ2luZywgcmUsIG9zLCBzeXMsIG9wdHBhcnNlLCBhcnJheSwg dHJhY2ViYWNrLCBjUGlja2xlCj4gPiAgaW1wb3J0IGNvbW1vbgo+ID4gIGZyb20gYXV0b3Rlc3Rf bGliLmNsaWVudC5jb21tb25fbGliIGltcG9ydCBlcnJvcgo+ID4gIGZyb20gYXV0b3Rlc3RfbGli LmNsaWVudC5jb21tb25fbGliIGltcG9ydCBsb2dnaW5nX2NvbmZpZywKPiBsb2dnaW5nX21hbmFn ZXIKPiA+IEBAIC0yMSw0OTAgKzIxLDY3MCBAQCBjbGFzcyBjb25maWc6Cj4gPiAgICAgICIiIgo+ ID4gICAgICBQYXJzZSBhbiBpbnB1dCBmaWxlIG9yIHN0cmluZyB0aGF0IGZvbGxvd3MgdGhlIEtW TSBUZXN0IENvbmZpZwo+IEZpbGUgZm9ybWF0Cj4gPiAgICAgIGFuZCBnZW5lcmF0ZSBhIGxpc3Qg b2YgZGljdHMgdGhhdCB3aWxsIGJlIGxhdGVyIHVzZWQgYXMKPiBjb25maWd1cmF0aW9uCj4gPiAt ICAgIHBhcmFtZXRlcnMgYnkgdGhlIHRoZSBLVk0gdGVzdHMuCj4gPiArICAgIHBhcmFtZXRlcnMg YnkgdGhlIEtWTSB0ZXN0cy4KPiA+ICAKPiA+ICAgICAgQHNlZToKPiBodHRwOi8vd3d3LmxpbnV4 LWt2bS5vcmcvcGFnZS9LVk0tQXV0b3Rlc3QvVGVzdF9Db25maWdfRmlsZQo+ID4gICAgICAiIiIK PiA+ICAKPiA+IC0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUsIGRlYnVnPUZh bHNlKToKPiA+ICsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUsIGRlYnVnPVRy dWUpOgo+ID4gICAgICAgICAgIiIiCj4gPiAtICAgICAgICBJbml0aWFsaXplIHRoZSBsaXN0IGFu ZCBvcHRpb25hbGx5IHBhcnNlIGZpbGVuYW1lLgo+ID4gKyAgICAgICAgSW5pdGlhbGl6ZSB0aGUg bGlzdCBhbmQgb3B0aW9uYWxseSBwYXJzZSBhIGZpbGUuCj4gPiAgCj4gPiAgICAgICAgICBAcGFy YW0gZmlsZW5hbWU6IFBhdGggb2YgdGhlIGZpbGUgdGhhdCB3aWxsIGJlIHRha2VuLgo+ID4gLSAg ICAgICAgQHBhcmFtIGRlYnVnOiBXaGV0aGVyIHRvIHR1cm4gZGVidWdnaW5nIG91dHB1dC4KPiA+ ICsgICAgICAgIEBwYXJhbSBkZWJ1ZzogV2hldGhlciB0byB0dXJuIG9uIGRlYnVnZ2luZyBvdXRw dXQuCj4gPiAgICAgICAgICAiIiIKPiA+IC0gICAgICAgIHNlbGYubGlzdCA9IFt7Im5hbWUiOiAi IiwgInNob3J0bmFtZSI6ICIiLCAiZGVwZW5kIjogW119XQo+ID4gLSAgICAgICAgc2VsZi5kZWJ1 ZyA9IGRlYnVnCj4gPiArICAgICAgICBzZWxmLmxpc3QgPSBbYXJyYXkuYXJyYXkoIkgiLCBbNCwg NCwgNCwgNF0pXQo+ID4gKyAgICAgICAgc2VsZi5vYmplY3RfY2FjaGUgPSBbXQo+ID4gKyAgICAg ICAgc2VsZi5vYmplY3RfY2FjaGVfaW5kaWNlcyA9IHt9Cj4gPiArICAgICAgICBzZWxmLnJlZ2V4 X2NhY2hlID0ge30KPiA+ICAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQo+ID4gKyAg ICAgICAgc2VsZi5kZWJ1ZyA9IGRlYnVnCj4gPiAgICAgICAgICBpZiBmaWxlbmFtZToKPiA+ICAg ICAgICAgICAgICBzZWxmLnBhcnNlX2ZpbGUoZmlsZW5hbWUpCj4gPiAgCj4gPiAKPiA+ICAgICAg ZGVmIHBhcnNlX2ZpbGUoc2VsZiwgZmlsZW5hbWUpOgo+ID4gICAgICAgICAgIiIiCj4gPiAtICAg ICAgICBQYXJzZSBmaWxlbmFtZSwgcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdCBhbmQgc3RvcmUg aXQgaW4KPiAubGlzdC4gSWYKPiA+IC0gICAgICAgIGZpbGVuYW1lIGRvZXMgbm90IGV4aXN0LCBy YWlzZSBhbiBleGNlcHRpb24uCj4gPiArICAgICAgICBQYXJzZSBmaWxlLiAgSWYgaXQgZG9lc24n dCBleGlzdCwgcmFpc2UgYW4gZXhjZXB0aW9uLgo+ID4gIAo+ID4gICAgICAgICAgQHBhcmFtIGZp bGVuYW1lOiBQYXRoIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCj4gPiAgICAgICAgICAiIiIK PiA+ICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6Cj4gPiAgICAgICAg ICAgICAgcmFpc2UgRXhjZXB0aW9uLCAiRmlsZSAlcyBub3QgZm91bmQiICUgZmlsZW5hbWUKPiA+ ICAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQo+ID4gLSAgICAgICAgZmlsZSA9IG9w ZW4oZmlsZW5hbWUsICJyIikKPiA+IC0gICAgICAgIHNlbGYubGlzdCA9IHNlbGYucGFyc2UoZmls ZSwgc2VsZi5saXN0KQo+ID4gLSAgICAgICAgZmlsZS5jbG9zZSgpCj4gPiAtICAgICAgICByZXR1 cm4gc2VsZi5saXN0Cj4gPiArICAgICAgICBzdHIgPSBvcGVuKGZpbGVuYW1lKS5yZWFkKCkKPiA+ ICsgICAgICAgIHNlbGYubGlzdCA9IHNlbGYucGFyc2UoY29uZmlncmVhZGVyKHN0ciksIHNlbGYu bGlzdCkKPiA+ICAKPiA+IAo+ID4gICAgICBkZWYgcGFyc2Vfc3RyaW5nKHNlbGYsIHN0cik6Cj4g PiAgICAgICAgICAiIiIKPiA+IC0gICAgICAgIFBhcnNlIGEgc3RyaW5nLCByZXR1cm4gdGhlIHJl c3VsdGluZyBsaXN0IGFuZCBzdG9yZSBpdCBpbgo+IC5saXN0Lgo+ID4gKyAgICAgICAgUGFyc2Ug YSBzdHJpbmcuCj4gPiAgCj4gPiAtICAgICAgICBAcGFyYW0gc3RyOiBTdHJpbmcgdGhhdCB3aWxs IGJlIHBhcnNlZC4KPiA+ICsgICAgICAgIEBwYXJhbSBzdHI6IFN0cmluZyB0byBwYXJzZS4KPiA+ ICAgICAgICAgICIiIgo+ID4gLSAgICAgICAgZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lPKHN0cikK PiA+IC0gICAgICAgIHNlbGYubGlzdCA9IHNlbGYucGFyc2UoZmlsZSwgc2VsZi5saXN0KQo+ID4g LSAgICAgICAgZmlsZS5jbG9zZSgpCj4gPiAtICAgICAgICByZXR1cm4gc2VsZi5saXN0Cj4gPiAr ICAgICAgICBzZWxmLmxpc3QgPSBzZWxmLnBhcnNlKGNvbmZpZ3JlYWRlcihzdHIpLCBzZWxmLmxp c3QpCj4gPiAgCj4gPiAKPiA+IC0gICAgZGVmIGdldF9saXN0KHNlbGYpOgo+ID4gLSAgICAgICAg IiIiCj4gPiAtICAgICAgICBSZXR1cm4gdGhlIGxpc3Qgb2YgZGljdGlvbmFyaWVzLiBUaGlzIHNo b3VsZCBwcm9iYWJseSBiZQo+IGNhbGxlZCBhZnRlcgo+ID4gLSAgICAgICAgcGFyc2luZyBzb21l dGhpbmcuCj4gPiArICAgIGRlZiBmb3JrX2FuZF9wYXJzZShzZWxmLCBmaWxlbmFtZT1Ob25lLCBz dHI9Tm9uZSk6Cj4gPiAgICAgICAgICAiIiIKPiA+IC0gICAgICAgIHJldHVybiBzZWxmLmxpc3QK PiA+ICsgICAgICAgIFBhcnNlIGEgZmlsZSBhbmQvb3IgYSBzdHJpbmcgaW4gYSBzZXBhcmF0ZSBw cm9jZXNzIHRvIHNhdmUKPiBtZW1vcnkuCj4gPiAgCj4gPiArICAgICAgICBQeXRob24gbGlrZXMg dG8ga2VlcCBtZW1vcnkgdG8gaXRzZWxmIGV2ZW4gYWZ0ZXIgdGhlCj4gb2JqZWN0cyBvY2N1cHlp bmcKPiA+ICsgICAgICAgIGl0IGhhdmUgYmVlbiBkZXN0cm95ZWQuICBJZiBkdXJpbmcgYSBjYWxs IHRvIHBhcnNlX2ZpbGUoKQo+IG9yCj4gPiArICAgICAgICBwYXJzZV9zdHJpbmcoKSBhIGxvdCBv ZiBtZW1vcnkgaXMgdXNlZCwgaXQgY2FuIG9ubHkgYmUKPiBmcmVlZCBieQo+ID4gKyAgICAgICAg dGVybWluYXRpbmcgdGhlIHByb2Nlc3MuICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGFyb3VuZCB0aGUK PiBwcm9ibGVtIGJ5Cj4gPiArICAgICAgICBkb2luZyB0aGUgcGFyc2luZyBpbiBhIGZvcmtlZCBw cm9jZXNzIGFuZCB0aGVuIHRlcm1pbmF0aW5nCj4gaXQsIGZyZWVpbmcKPiA+ICsgICAgICAgIGFu eSB1bm5lZWRlZCBtZW1vcnkuCj4gPiAgCj4gPiAtICAgIGRlZiBtYXRjaChzZWxmLCBmaWx0ZXIs IGRpY3QpOgo+ID4gLSAgICAgICAgIiIiCj4gPiAtICAgICAgICBSZXR1cm4gVHJ1ZSBpZiBkaWN0 IG1hdGNoZXMgZmlsdGVyLgo+ID4gKyAgICAgICAgTm90ZTogaWYgYW4gZXhjZXB0aW9uIGlzIHJh aXNlZCBkdXJpbmcgcGFyc2luZywgaXRzCj4gaW5mb3JtYXRpb24gd2lsbCBiZQo+ID4gKyAgICAg ICAgcHJpbnRlZCwgYW5kIHRoZSByZXN1bHRpbmcgbGlzdCB3aWxsIGJlIGVtcHR5LiAgVGhlCj4g ZXhjZXB0aW9uIHdpbGwgbm90Cj4gPiArICAgICAgICBiZSByYWlzZWQgaW4gdGhlIHByb2Nlc3Mg Y2FsbGluZyB0aGlzIGZ1bmN0aW9uLgo+ID4gIAo+ID4gLSAgICAgICAgQHBhcmFtIGZpbHRlcjog QSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBkZWZpbmVzIHRoZQo+IGZpbHRlci4KPiA+IC0gICAg ICAgIEBwYXJhbSBkaWN0OiBEaWN0aW9uYXJ5IHRoYXQgd2lsbCBiZSBpbnNwZWN0ZWQuCj4gPiAr ICAgICAgICBAcGFyYW0gZmlsZW5hbWU6IFBhdGggb2YgZmlsZSB0byBwYXJzZSAob3B0aW9uYWwp Lgo+ID4gKyAgICAgICAgQHBhcmFtIHN0cjogU3RyaW5nIHRvIHBhcnNlIChvcHRpb25hbCkuCj4g PiAgICAgICAgICAiIiIKPiA+IC0gICAgICAgIGZpbHRlciA9IHJlLmNvbXBpbGUociIoXC58Xiko JXMpKFwufCQpIiAlIGZpbHRlcikKPiA+IC0gICAgICAgIHJldHVybiBib29sKGZpbHRlci5zZWFy Y2goZGljdFsibmFtZSJdKSkKPiA+IC0KPiA+IC0KPiA+IC0gICAgZGVmIGZpbHRlcihzZWxmLCBm aWx0ZXIsIGxpc3Q9Tm9uZSk6Cj4gPiArICAgICAgICByLCB3ID0gb3MucGlwZSgpCj4gPiArICAg ICAgICByLCB3ID0gb3MuZmRvcGVuKHIsICJyIiwgMCksIG9zLmZkb3Blbih3LCAidyIsIDApCj4g PiArICAgICAgICBwaWQgPSBvcy5mb3JrKCkKPiA+ICsgICAgICAgIGlmIG5vdCBwaWQ6Cj4gPiAr ICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzCj4gPiArICAgICAgICAgICAgci5jbG9zZSgpCj4g PiArICAgICAgICAgICAgdHJ5Ogo+ID4gKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZToKPiA+ ICsgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZmlsZShmaWxlbmFtZSkKPiA+ICsgICAg ICAgICAgICAgICAgaWYgc3RyOgo+ID4gKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9z dHJpbmcoc3RyKQo+ID4gKyAgICAgICAgICAgIGV4Y2VwdDoKPiA+ICsgICAgICAgICAgICAgICAg dHJhY2ViYWNrLnByaW50X2V4YygpCj4gPiArICAgICAgICAgICAgICAgIHNlbGYubGlzdCA9IFtd Cj4gPiArICAgICAgICAgICAgIyBDb252ZXJ0IHRoZSBhcnJheXMgdG8gc3RyaW5ncyBiZWZvcmUg cGlja2xpbmcgYmVjYXVzZQo+IGF0IGxlYXN0Cj4gPiArICAgICAgICAgICAgIyBzb21lIFB5dGhv biB2ZXJzaW9ucyBjYW4ndCBwaWNrbGUvdW5waWNrbGUgYXJyYXlzCj4gPiArICAgICAgICAgICAg bCA9IFthLnRvc3RyaW5nKCkgZm9yIGEgaW4gc2VsZi5saXN0XQo+ID4gKyAgICAgICAgICAgIGNQ aWNrbGUuZHVtcCgobCwgc2VsZi5vYmplY3RfY2FjaGUpLCB3LCAtMSkKPiA+ICsgICAgICAgICAg ICB3LmNsb3NlKCkKPiA+ICsgICAgICAgICAgICBvcy5fZXhpdCgwKQo+ID4gKyAgICAgICAgZWxz ZToKPiA+ICsgICAgICAgICAgICAjIFBhcmVudCBwcm9jZXNzCj4gPiArICAgICAgICAgICAgdy5j bG9zZSgpCj4gPiArICAgICAgICAgICAgKGwsIHNlbGYub2JqZWN0X2NhY2hlKSA9IGNQaWNrbGUu bG9hZChyKQo+ID4gKyAgICAgICAgICAgIHIuY2xvc2UoKQo+ID4gKyAgICAgICAgICAgIG9zLndh aXRwaWQocGlkLCAwKQo+ID4gKyAgICAgICAgICAgIHNlbGYubGlzdCA9IFtdCj4gPiArICAgICAg ICAgICAgZm9yIHMgaW4gbDoKPiA+ICsgICAgICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KCJI IikKPiA+ICsgICAgICAgICAgICAgICAgYS5mcm9tc3RyaW5nKHMpCj4gPiArICAgICAgICAgICAg ICAgIHNlbGYubGlzdC5hcHBlbmQoYSkKPiA+ICsKPiA+ICsKPiA+ICsgICAgZGVmIGdldF9nZW5l cmF0b3Ioc2VsZik6Cj4gPiAgICAgICAgICAiIiIKPiA+IC0gICAgICAgIEZpbHRlciBhIGxpc3Qg b2YgZGljdHMuCj4gPiArICAgICAgICBHZW5lcmF0ZSBkaWN0aW9uYXJpZXMgZnJvbSB0aGUgY29k ZSBwYXJzZWQgc28gZmFyLiAgVGhpcwo+IHNob3VsZAo+ID4gKyAgICAgICAgcHJvYmFibHkgYmUg Y2FsbGVkIGFmdGVyIHBhcnNpbmcgc29tZXRoaW5nLgo+ID4gIAo+ID4gLSAgICAgICAgQHBhcmFt IGZpbHRlcjogQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIHVzZWQgYXMgYQo+IGZp bHRlci4KPiA+IC0gICAgICAgIEBwYXJhbSBsaXN0OiBBIGxpc3Qgb2YgZGljdGlvbmFyaWVzIHRo YXQgd2lsbCBiZSBmaWx0ZXJlZC4KPiA+ICsgICAgICAgIEByZXR1cm46IEEgZGljdCBnZW5lcmF0 b3IuCj4gPiAgICAgICAgICAiIiIKPiA+IC0gICAgICAgIGlmIGxpc3QgaXMgTm9uZToKPiA+IC0g ICAgICAgICAgICBsaXN0ID0gc2VsZi5saXN0Cj4gPiAtICAgICAgICByZXR1cm4gW2RpY3QgZm9y IGRpY3QgaW4gbGlzdCBpZiBzZWxmLm1hdGNoKGZpbHRlciwgZGljdCldCj4gPiArICAgICAgICBm b3IgYSBpbiBzZWxmLmxpc3Q6Cj4gPiArICAgICAgICAgICAgbmFtZSwgc2hvcnRuYW1lLCBkZXBl bmQsIGNvbnRlbnQgPSBfYXJyYXlfZ2V0X2FsbChhLAo+IHNlbGYub2JqZWN0X2NhY2hlKQo+ID4g KyAgICAgICAgICAgIGRpY3QgPSB7Im5hbWUiOiBuYW1lLCAic2hvcnRuYW1lIjogc2hvcnRuYW1l LCAiZGVwZW5kIjoKPiBkZXBlbmR9Cj4gPiArICAgICAgICAgICAgc2VsZi5fYXBwbHlfY29udGVu dF90b19kaWN0KGRpY3QsIGNvbnRlbnQpCj4gPiArICAgICAgICAgICAgeWllbGQgZGljdAo+ID4g IAo+ID4gCj4gPiAtICAgIGRlZiBzcGxpdF9hbmRfc3RyaXAoc2VsZiwgc3RyLCBzZXA9Ij0iKToK PiA+ICsgICAgZGVmIGdldF9saXN0KHNlbGYpOgo+ID4gICAgICAgICAgIiIiCj4gPiAtICAgICAg ICBTcGxpdCBzdHIgYW5kIHN0cmlwIHF1b3RlcyBmcm9tIHRoZSByZXN1bHRpbmcgcGFydHMuCj4g PiArICAgICAgICBHZW5lcmF0ZSBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzIGZyb20gdGhlIGNvZGUg cGFyc2VkIHNvCj4gZmFyLgo+ID4gKyAgICAgICAgVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgY2Fs bGVkIGFmdGVyIHBhcnNpbmcgc29tZXRoaW5nLgo+ID4gIAo+ID4gLSAgICAgICAgQHBhcmFtIHN0 cjogU3RyaW5nIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQKPiA+IC0gICAgICAgIEBwYXJhbSBzZXA6 IFNlcGFyYXRvciB0aGF0IHdpbGwgYmUgdXNlZCB0byBzcGxpdCB0aGUKPiBzdHJpbmcKPiA+ICsg ICAgICAgIEByZXR1cm46IEEgbGlzdCBvZiBkaWN0cy4KPiA+ICAgICAgICAgICIiIgo+ID4gLSAg ICAgICAgdGVtcCA9IHN0ci5zcGxpdChzZXAsIDEpCj4gPiAtICAgICAgICBmb3IgaSBpbiByYW5n ZShsZW4odGVtcCkpOgo+ID4gLSAgICAgICAgICAgIHRlbXBbaV0gPSB0ZW1wW2ldLnN0cmlwKCkK PiA+IC0gICAgICAgICAgICBpZiByZS5maW5kYWxsKCJeXCIuKlwiJCIsIHRlbXBbaV0pOgo+ID4g LSAgICAgICAgICAgICAgICB0ZW1wW2ldID0gdGVtcFtpXS5zdHJpcCgiXCIiKQo+ID4gLSAgICAg ICAgICAgIGVsaWYgcmUuZmluZGFsbCgiXlwnLipcJyQiLCB0ZW1wW2ldKToKPiA+IC0gICAgICAg ICAgICAgICAgdGVtcFtpXSA9IHRlbXBbaV0uc3RyaXAoIlwnIikKPiA+IC0gICAgICAgIHJldHVy biB0ZW1wCj4gPiAtCj4gPiArICAgICAgICByZXR1cm4gbGlzdChzZWxmLmdldF9nZW5lcmF0b3Io KSkKPiA+ICAKPiA+IC0gICAgZGVmIGdldF9uZXh0X2xpbmUoc2VsZiwgZmlsZSk6Cj4gPiAtICAg ICAgICAiIiIKPiA+IC0gICAgICAgIEdldCB0aGUgbmV4dCBub24tZW1wdHksIG5vbi1jb21tZW50 IGxpbmUgaW4gYSBmaWxlIGxpa2UKPiBvYmplY3QuCj4gPiAgCj4gPiAtICAgICAgICBAcGFyYW0g ZmlsZTogRmlsZSBsaWtlIG9iamVjdAo+ID4gLSAgICAgICAgQHJldHVybjogSWYgbm8gbGluZSBp cyBhdmFpbGFibGUsIHJldHVybiBOb25lLgo+ID4gKyAgICBkZWYgY291bnQoc2VsZiwgZmlsdGVy PSIuKiIpOgo+ID4gICAgICAgICAgIiIiCj4gPiAtICAgICAgICB3aGlsZSBUcnVlOgo+ID4gLSAg ICAgICAgICAgIGxpbmUgPSBmaWxlLnJlYWRsaW5lKCkKPiA+IC0gICAgICAgICAgICBpZiBsaW5l ID09ICIiOiByZXR1cm4gTm9uZQo+ID4gLSAgICAgICAgICAgIHN0cmlwcGVkX2xpbmUgPSBsaW5l LnN0cmlwKCkKPiA+IC0gICAgICAgICAgICBpZiBsZW4oc3RyaXBwZWRfbGluZSkgPiAwIFwKPiA+ IC0gICAgICAgICAgICAgICAgICAgIGFuZCBub3Qgc3RyaXBwZWRfbGluZS5zdGFydHN3aXRoKCcj JykgXAo+ID4gLSAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBzdHJpcHBlZF9saW5lLnN0YXJ0 c3dpdGgoJy8vJyk6Cj4gPiAtICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCj4gPiAtCj4gPiAr ICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBkaWN0aW9uYXJpZXMgd2hvc2UgbmFtZXMgbWF0 Y2gKPiBmaWx0ZXIuCj4gPiAgCj4gPiAtICAgIGRlZiBnZXRfbmV4dF9saW5lX2luZGVudChzZWxm LCBmaWxlKToKPiA+ICsgICAgICAgIEBwYXJhbSBmaWx0ZXI6IEEgcmVndWxhciBleHByZXNzaW9u IHN0cmluZy4KPiA+ICAgICAgICAgICIiIgo+ID4gLSAgICAgICAgUmV0dXJuIHRoZSBpbmRlbnQg bGV2ZWwgb2YgdGhlIG5leHQgbm9uLWVtcHR5LCBub24tY29tbWVudAo+IGxpbmUgaW4gZmlsZS4K PiA+IC0KPiA+IC0gICAgICAgIEBwYXJhbSBmaWxlOiBGaWxlIGxpa2Ugb2JqZWN0Lgo+ID4gLSAg ICAgICAgQHJldHVybjogSWYgbm8gbGluZSBpcyBhdmFpbGFibGUsIHJldHVybiAtMS4KPiA+IC0g ICAgICAgICIiIgo+ID4gLSAgICAgICAgcG9zID0gZmlsZS50ZWxsKCkKPiA+IC0gICAgICAgIGxp bmUgPSBzZWxmLmdldF9uZXh0X2xpbmUoZmlsZSkKPiA+IC0gICAgICAgIGlmIG5vdCBsaW5lOgo+ ID4gLSAgICAgICAgICAgIGZpbGUuc2Vlayhwb3MpCj4gPiAtICAgICAgICAgICAgcmV0dXJuIC0x Cj4gPiAtICAgICAgICBsaW5lID0gbGluZS5leHBhbmR0YWJzKCkKPiA+IC0gICAgICAgIGluZGVu dCA9IDAKPiA+IC0gICAgICAgIHdoaWxlIGxpbmVbaW5kZW50XSA9PSAnICc6Cj4gPiAtICAgICAg ICAgICAgaW5kZW50ICs9IDEKPiA+IC0gICAgICAgIGZpbGUuc2Vlayhwb3MpCj4gPiAtICAgICAg ICByZXR1cm4gaW5kZW50Cj4gPiAtCj4gPiAtCj4gPiAtICAgIGRlZiBhZGRfbmFtZShzZWxmLCBz dHIsIG5hbWUsIGFwcGVuZD1GYWxzZSk6Cj4gPiAtICAgICAgICAiIiIKPiA+IC0gICAgICAgIEFk ZCBuYW1lIHRvIHN0ciB3aXRoIGEgc2VwYXJhdG9yIGRvdCBhbmQgcmV0dXJuIHRoZQo+IHJlc3Vs dC4KPiA+IC0KPiA+IC0gICAgICAgIEBwYXJhbSBzdHI6IFN0cmluZyB0aGF0IHdpbGwgYmUgcHJv Y2Vzc2VkCj4gPiAtICAgICAgICBAcGFyYW0gbmFtZTogbmFtZSB0aGF0IHdpbGwgYmUgYXBwZW5k ZWQgdG8gdGhlIHN0cmluZy4KPiA+IC0gICAgICAgIEByZXR1cm46IElmIGFwcGVuZCBpcyBUcnVl LCBhcHBlbmQgbmFtZSB0byBzdHIuCj4gPiAtICAgICAgICAgICAgICAgIE90aGVyd2lzZSwgcHJl LXBlbmQgbmFtZSB0byBzdHIuCj4gPiAtICAgICAgICAiIiIKPiA+IC0gICAgICAgIGlmIHN0ciA9 PSAiIjoKPiA+IC0gICAgICAgICAgICByZXR1cm4gbmFtZQo+ID4gLSAgICAgICAgIyBBcHBlbmQ/ Cj4gPiAtICAgICAgICBlbGlmIGFwcGVuZDoKPiA+IC0gICAgICAgICAgICByZXR1cm4gc3RyICsg Ii4iICsgbmFtZQo+ID4gLSAgICAgICAgIyBQcmVwZW5kPwo+ID4gLSAgICAgICAgZWxzZToKPiA+ IC0gICAgICAgICAgICByZXR1cm4gbmFtZSArICIuIiArIHN0cgo+ID4gKyAgICAgICAgZXhwID0g c2VsZi5fZ2V0X2ZpbHRlcl9yZWdleChmaWx0ZXIpCj4gPiArICAgICAgICBjb3VudCA9IDAKPiA+ ICsgICAgICAgIGZvciBhIGluIHNlbGYubGlzdDoKPiA+ICsgICAgICAgICAgICBuYW1lID0gX2Fy cmF5X2dldF9uYW1lKGEsIHNlbGYub2JqZWN0X2NhY2hlKQo+ID4gKyAgICAgICAgICAgIGlmIGV4 cC5zZWFyY2gobmFtZSk6Cj4gPiArICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKPiA+ICsgICAg ICAgIHJldHVybiBjb3VudAo+ID4gIAo+ID4gCj4gPiAtICAgIGRlZiBwYXJzZV92YXJpYW50cyhz ZWxmLCBmaWxlLCBsaXN0LCBzdWJ2YXJpYW50cz1GYWxzZSwKPiBwcmV2X2luZGVudD0tMSk6Cj4g PiArICAgIGRlZiBwYXJzZV92YXJpYW50cyhzZWxmLCBjciwgbGlzdCwgc3VidmFyaWFudHM9RmFs c2UsCj4gcHJldl9pbmRlbnQ9LTEpOgo+ID4gICAgICAgICAgIiIiCj4gPiAtICAgICAgICBSZWFk IGFuZCBwYXJzZSBsaW5lcyBmcm9tIGZpbGUgbGlrZSBvYmplY3QgdW50aWwgYSBsaW5lCj4gd2l0 aCBhbiBpbmRlbnQKPiA+IC0gICAgICAgIGxldmVsIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gcHJl dl9pbmRlbnQgaXMgZW5jb3VudGVyZWQuCj4gPiArICAgICAgICBSZWFkIGFuZCBwYXJzZSBsaW5l cyBmcm9tIGEgY29uZmlncmVhZGVyIG9iamVjdCB1bnRpbCBhCj4gbGluZSB3aXRoIGFuCj4gPiAr ICAgICAgICBpbmRlbnQgbGV2ZWwgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBwcmV2X2luZGVudCBp cwo+IGVuY291bnRlcmVkLgo+ID4gIAo+ID4gLSAgICAgICAgQGJyaWVmOiBQYXJzZSBhICd2YXJp YW50cycgb3IgJ3N1YnZhcmlhbnRzJyBibG9jayBmcm9tIGEKPiBmaWxlLWxpa2UKPiA+IC0gICAg ICAgIG9iamVjdC4KPiA+IC0gICAgICAgIEBwYXJhbSBmaWxlOiBGaWxlLWxpa2Ugb2JqZWN0IHRo YXQgd2lsbCBiZSBwYXJzZWQKPiA+IC0gICAgICAgIEBwYXJhbSBsaXN0OiBMaXN0IG9mIGRpY3Rz IHRvIG9wZXJhdGUgb24KPiA+ICsgICAgICAgIEBicmllZjogUGFyc2UgYSAndmFyaWFudHMnIG9y ICdzdWJ2YXJpYW50cycgYmxvY2sgZnJvbSBhCj4gY29uZmlncmVhZGVyCj4gPiArICAgICAgICAg ICAgb2JqZWN0Lgo+ID4gKyAgICAgICAgQHBhcmFtIGNyOiBjb25maWdyZWFkZXIgb2JqZWN0IHRv IGJlIHBhcnNlZC4KPiA+ICsgICAgICAgIEBwYXJhbSBsaXN0OiBMaXN0IG9mIGFycmF5cyB0byBv cGVyYXRlIG9uLgo+ID4gICAgICAgICAgQHBhcmFtIHN1YnZhcmlhbnRzOiBJZiBUcnVlLCBwYXJz ZSBpbiAnc3VidmFyaWFudHMnIG1vZGU7Cj4gPiAtICAgICAgICBvdGhlcndpc2UgcGFyc2UgaW4g J3ZhcmlhbnRzJyBtb2RlCj4gPiAtICAgICAgICBAcGFyYW0gcHJldl9pbmRlbnQ6IFRoZSBpbmRl bnQgbGV2ZWwgb2YgdGhlICJwYXJlbnQiIGJsb2NrCj4gPiAtICAgICAgICBAcmV0dXJuOiBUaGUg cmVzdWx0aW5nIGxpc3Qgb2YgZGljdHMuCj4gPiArICAgICAgICAgICAgb3RoZXJ3aXNlIHBhcnNl IGluICd2YXJpYW50cycgbW9kZS4KPiA+ICsgICAgICAgIEBwYXJhbSBwcmV2X2luZGVudDogVGhl IGluZGVudCBsZXZlbCBvZiB0aGUgInBhcmVudCIKPiBibG9jay4KPiA+ICsgICAgICAgIEByZXR1 cm46IFRoZSByZXN1bHRpbmcgbGlzdCBvZiBhcnJheXMuCj4gPiAgICAgICAgICAiIiIKPiA+ICAg ICAgICAgIG5ld19saXN0ID0gW10KPiA+ICAKPiA+ICAgICAgICAgIHdoaWxlIFRydWU6Cj4gPiAt ICAgICAgICAgICAgaW5kZW50ID0gc2VsZi5nZXRfbmV4dF9saW5lX2luZGVudChmaWxlKQo+ID4g KyAgICAgICAgICAgIHBvcyA9IGNyLnRlbGwoKQo+ID4gKyAgICAgICAgICAgIChpbmRlbnRlZF9s aW5lLCBsaW5lLCBpbmRlbnQpID0gY3IuZ2V0X25leHRfbGluZSgpCj4gPiAgICAgICAgICAgICAg aWYgaW5kZW50IDw9IHByZXZfaW5kZW50Ogo+ID4gKyAgICAgICAgICAgICAgICBjci5zZWVrKHBv cykKPiA+ICAgICAgICAgICAgICAgICAgYnJlYWsKPiA+IC0gICAgICAgICAgICBpbmRlbnRlZF9s aW5lID0gc2VsZi5nZXRfbmV4dF9saW5lKGZpbGUpLnJzdHJpcCgpCj4gPiAtICAgICAgICAgICAg bGluZSA9IGluZGVudGVkX2xpbmUuc3RyaXAoKQo+ID4gIAo+ID4gICAgICAgICAgICAgICMgR2V0 IG5hbWUgYW5kIGRlcGVuZGVuY2llcwo+ID4gLSAgICAgICAgICAgIHRlbXAgPSBsaW5lLnN0cmlw KCItICIpLnNwbGl0KCI6IikKPiA+IC0gICAgICAgICAgICBuYW1lID0gdGVtcFswXQo+ID4gLSAg ICAgICAgICAgIGlmIGxlbih0ZW1wKSA9PSAxOgo+ID4gLSAgICAgICAgICAgICAgICBkZXBfbGlz dCA9IFtdCj4gPiAtICAgICAgICAgICAgZWxzZToKPiA+IC0gICAgICAgICAgICAgICAgZGVwX2xp c3QgPSB0ZW1wWzFdLnNwbGl0KCkKPiA+ICsgICAgICAgICAgICAobmFtZSwgZGVwZW5kKSA9IG1h cChzdHIuc3RyaXAsIGxpbmUubHN0cmlwKCItCj4gIikuc3BsaXQoIjoiKSkKPiA+ICAKPiA+ICAg ICAgICAgICAgICAjIFNlZSBpZiBuYW1lIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgJ3Nob3J0bmFt ZScgZmllbGQKPiA+IC0gICAgICAgICAgICBhZGRfdG9fc2hvcnRuYW1lID0gVHJ1ZQo+ID4gLSAg ICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiQCIpOgo+ID4gLSAgICAgICAgICAgICAgICBu YW1lID0gbmFtZS5zdHJpcCgiQCIpCj4gPiAtICAgICAgICAgICAgICAgIGFkZF90b19zaG9ydG5h bWUgPSBGYWxzZQo+ID4gLQo+ID4gLSAgICAgICAgICAgICMgTWFrZSBhIGRlZXAgY29weSBvZiBs aXN0Cj4gPiAtICAgICAgICAgICAgdGVtcF9saXN0ID0gW10KPiA+IC0gICAgICAgICAgICBmb3Ig ZGljdCBpbiBsaXN0Ogo+ID4gLSAgICAgICAgICAgICAgICBuZXdfZGljdCA9IGRpY3QuY29weSgp Cj4gPiAtICAgICAgICAgICAgICAgIG5ld19kaWN0WyJkZXBlbmQiXSA9IGRpY3RbImRlcGVuZCJd WzpdCj4gPiAtICAgICAgICAgICAgICAgIHRlbXBfbGlzdC5hcHBlbmQobmV3X2RpY3QpCj4gPiAr ICAgICAgICAgICAgYWRkX3RvX3Nob3J0bmFtZSA9IG5vdCBuYW1lLnN0YXJ0c3dpdGgoIkAiKQo+ ID4gKyAgICAgICAgICAgIG5hbWUgPSBuYW1lLmxzdHJpcCgiQCIpCj4gPiArCj4gPiArICAgICAg ICAgICAgIyBTdG9yZSBuYW1lIGFuZCBkZXBlbmRlbmNpZXMgaW4gY2FjaGUgYW5kIGdldCB0aGVp cgo+IGluZGljZXMKPiA+ICsgICAgICAgICAgICBuID0gc2VsZi5fc3RvcmVfc3RyKG5hbWUpCj4g PiArICAgICAgICAgICAgZCA9IHNlbGYuX3N0b3JlX3N0cihkZXBlbmQpCj4gPiArCj4gPiArICAg ICAgICAgICAgIyBNYWtlIGEgY29weSBvZiBsaXN0Cj4gPiArICAgICAgICAgICAgdGVtcF9saXN0 ID0gW2FbOl0gZm9yIGEgaW4gbGlzdF0KPiA+ICAKPiA+ICAgICAgICAgICAgICBpZiBzdWJ2YXJp YW50czoKPiA+ICAgICAgICAgICAgICAgICAgIyBJZiB3ZSdyZSBwYXJzaW5nICdzdWJ2YXJpYW50 cycsIGZpcnN0IG1vZGlmeSB0aGUKPiBsaXN0Cj4gPiAtICAgICAgICAgICAgICAgIHNlbGYuX19t b2RpZnlfbGlzdF9zdWJ2YXJpYW50cyh0ZW1wX2xpc3QsIG5hbWUsCj4gZGVwX2xpc3QsCj4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfdG9fc2hv cnRuYW1lKQo+ID4gLSAgICAgICAgICAgICAgICB0ZW1wX2xpc3QgPSBzZWxmLnBhcnNlKGZpbGUs IHRlbXBfbGlzdCwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGVkPVRydWUs IHByZXZfaW5kZW50PWluZGVudCkKPiA+ICsgICAgICAgICAgICAgICAgaWYgYWRkX3RvX3Nob3J0 bmFtZToKPiA+ICsgICAgICAgICAgICAgICAgICAgIGZvciBhIGluIHRlbXBfbGlzdDoKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlfYXBwZW5kX3RvX25hbWVfc2hvcnRuYW1lX2Rl cGVuZChhLAo+IG4sIGQpCj4gPiArICAgICAgICAgICAgICAgIGVsc2U6Cj4gPiArICAgICAgICAg ICAgICAgICAgICBmb3IgYSBpbiB0ZW1wX2xpc3Q6Cj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgX2FycmF5X2FwcGVuZF90b19uYW1lX2RlcGVuZChhLCBuLCBkKQo+ID4gKyAgICAgICAgICAg ICAgICB0ZW1wX2xpc3QgPSBzZWxmLnBhcnNlKGNyLCB0ZW1wX2xpc3QsCj4gcmVzdHJpY3RlZD1U cnVlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfaW5k ZW50PWluZGVudCkKPiA+ICAgICAgICAgICAgICBlbHNlOgo+ID4gICAgICAgICAgICAgICAgICAj IElmIHdlJ3JlIHBhcnNpbmcgJ3ZhcmlhbnRzJywgcGFyc2UgYmVmb3JlCj4gbW9kaWZ5aW5nIHRo ZSBsaXN0Cj4gPiAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6Cj4gPiAtICAgICAgICAg ICAgICAgICAgICBzZWxmLl9fZGVidWdfcHJpbnQoaW5kZW50ZWRfbGluZSwKPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW50ZXJpbmcgdmFyaWFudCAnJXMnICIK PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHZhcmlhbnQgaW5o ZXJpdHMgJWQKPiBkaWN0cykiICUKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobmFtZSwgbGVuKGxpc3QpKSkKPiA+IC0gICAgICAgICAgICAgICAgdGVtcF9saXN0 ID0gc2VsZi5wYXJzZShmaWxlLCB0ZW1wX2xpc3QsCj4gPiAtICAgICAgICAgICAgICAgICAgICAg ICAgcmVzdHJpY3RlZD1GYWxzZSwgcHJldl9pbmRlbnQ9aW5kZW50KQo+ID4gLSAgICAgICAgICAg ICAgICBzZWxmLl9fbW9kaWZ5X2xpc3RfdmFyaWFudHModGVtcF9saXN0LCBuYW1lLAo+IGRlcF9s aXN0LAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRk X3RvX3Nob3J0bmFtZSkKPiA+ICsgICAgICAgICAgICAgICAgICAgIF9kZWJ1Z19wcmludChpbmRl bnRlZF9saW5lLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbnRlcmlu ZyB2YXJpYW50ICclcycgIgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIo dmFyaWFudCBpbmhlcml0cyAlZCBkaWN0cykiICUKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobmFtZSwgbGVuKGxpc3QpKSkKPiA+ICsgICAgICAgICAgICAgICAgdGVtcF9s aXN0ID0gc2VsZi5wYXJzZShjciwgdGVtcF9saXN0LAo+IHJlc3RyaWN0ZWQ9RmFsc2UsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9pbmRlbnQ9aW5kZW50 KQo+ID4gKyAgICAgICAgICAgICAgICBpZiBhZGRfdG9fc2hvcnRuYW1lOgo+ID4gKyAgICAgICAg ICAgICAgICAgICAgZm9yIGEgaW4gdGVtcF9saXN0Ogo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIF9hcnJheV9wcmVwZW5kX3RvX25hbWVfc2hvcnRuYW1lX2RlcGVuZChhLAo+IG4sIGQpCj4g PiArICAgICAgICAgICAgICAgIGVsc2U6Cj4gPiArICAgICAgICAgICAgICAgICAgICBmb3IgYSBp biB0ZW1wX2xpc3Q6Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgX2FycmF5X3ByZXBlbmRf dG9fbmFtZV9kZXBlbmQoYSwgbiwgZCkKPiA+ICAKPiA+ICAgICAgICAgICAgICBuZXdfbGlzdCAr PSB0ZW1wX2xpc3QKPiA+ICAKPiA+ICAgICAgICAgIHJldHVybiBuZXdfbGlzdAo+ID4gIAo+ID4g Cj4gPiAtICAgIGRlZiBwYXJzZShzZWxmLCBmaWxlLCBsaXN0LCByZXN0cmljdGVkPUZhbHNlLCBw cmV2X2luZGVudD0tMSk6Cj4gPiArICAgIGRlZiBwYXJzZShzZWxmLCBjciwgbGlzdCwgcmVzdHJp Y3RlZD1GYWxzZSwgcHJldl9pbmRlbnQ9LTEpOgo+ID4gICAgICAgICAgIiIiCj4gPiAtICAgICAg ICBSZWFkIGFuZCBwYXJzZSBsaW5lcyBmcm9tIGZpbGUgdW50aWwgYSBsaW5lIHdpdGggYW4gaW5k ZW50Cj4gbGV2ZWwgbG93ZXIKPiA+IC0gICAgICAgIHRoYW4gb3IgZXF1YWwgdG8gcHJldl9pbmRl bnQgaXMgZW5jb3VudGVyZWQuCj4gPiAtCj4gPiAtICAgICAgICBAYnJpZWY6IFBhcnNlIGEgZmls ZS1saWtlIG9iamVjdC4KPiA+IC0gICAgICAgIEBwYXJhbSBmaWxlOiBBIGZpbGUtbGlrZSBvYmpl Y3QKPiA+IC0gICAgICAgIEBwYXJhbSBsaXN0OiBBIGxpc3Qgb2YgZGljdHMgdG8gb3BlcmF0ZSBv biAobGlzdCBpcwo+IG1vZGlmaWVkIGluCj4gPiAtICAgICAgICBwbGFjZSBhbmQgc2hvdWxkIG5v dCBiZSB1c2VkIGFmdGVyIHRoZSBjYWxsKQo+ID4gLSAgICAgICAgQHBhcmFtIHJlc3RyaWN0ZWQ6 IGlmIFRydWUsIG9wZXJhdGUgaW4gcmVzdHJpY3RlZCBtb2RlCj4gPiAtICAgICAgICAocHJvaGli aXQgJ3ZhcmlhbnRzJykKPiA+IC0gICAgICAgIEBwYXJhbSBwcmV2X2luZGVudDogdGhlIGluZGVu dCBsZXZlbCBvZiB0aGUgInBhcmVudCIgYmxvY2sKPiA+IC0gICAgICAgIEByZXR1cm46IFJldHVy biB0aGUgcmVzdWx0aW5nIGxpc3Qgb2YgZGljdHMuCj4gPiArICAgICAgICBSZWFkIGFuZCBwYXJz ZSBsaW5lcyBmcm9tIGEgY29uZmlncmVhZGVyIG9iamVjdCB1bnRpbCBhCj4gbGluZSB3aXRoIGFu Cj4gPiArICAgICAgICBpbmRlbnQgbGV2ZWwgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBwcmV2X2lu ZGVudCBpcwo+IGVuY291bnRlcmVkLgo+ID4gKwo+ID4gKyAgICAgICAgQGJyaWVmOiBQYXJzZSBh IGNvbmZpZ3JlYWRlciBvYmplY3QuCj4gPiArICAgICAgICBAcGFyYW0gY3I6IEEgY29uZmlncmVh ZGVyIG9iamVjdC4KPiA+ICsgICAgICAgIEBwYXJhbSBsaXN0OiBBIGxpc3Qgb2YgYXJyYXlzIHRv IG9wZXJhdGUgb24gKGxpc3QgaXMKPiBtb2RpZmllZCBpbgo+ID4gKyAgICAgICAgICAgIHBsYWNl IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYWZ0ZXIgdGhlIGNhbGwpLgo+ID4gKyAgICAgICAgQHBh cmFtIHJlc3RyaWN0ZWQ6IElmIFRydWUsIG9wZXJhdGUgaW4gcmVzdHJpY3RlZCBtb2RlCj4gPiAr ICAgICAgICAgICAgKHByb2hpYml0ICd2YXJpYW50cycpLgo+ID4gKyAgICAgICAgQHBhcmFtIHBy ZXZfaW5kZW50OiBUaGUgaW5kZW50IGxldmVsIG9mIHRoZSAicGFyZW50Igo+IGJsb2NrLgo+ID4g KyAgICAgICAgQHJldHVybjogVGhlIHJlc3VsdGluZyBsaXN0IG9mIGFycmF5cy4KPiA+ICAgICAg ICAgIEBub3RlOiBMaXN0IGlzIGRlc3Ryb3llZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFmdGVy IHRoZQo+IGNhbGwuCj4gPiAtICAgICAgICBPbmx5IHRoZSByZXR1cm5lZCBsaXN0IHNob3VsZCBi ZSB1c2VkLgo+ID4gKyAgICAgICAgICAgIE9ubHkgdGhlIHJldHVybmVkIGxpc3Qgc2hvdWxkIGJl IHVzZWQuCj4gPiAgICAgICAgICAiIiIKPiA+ICsgICAgICAgIGN1cnJlbnRfYmxvY2sgPSAiIgo+ ID4gKwo+ID4gICAgICAgICAgd2hpbGUgVHJ1ZToKPiA+IC0gICAgICAgICAgICBpbmRlbnQgPSBz ZWxmLmdldF9uZXh0X2xpbmVfaW5kZW50KGZpbGUpCj4gPiArICAgICAgICAgICAgcG9zID0gY3Iu dGVsbCgpCj4gPiArICAgICAgICAgICAgKGluZGVudGVkX2xpbmUsIGxpbmUsIGluZGVudCkgPSBj ci5nZXRfbmV4dF9saW5lKCkKPiA+ICAgICAgICAgICAgICBpZiBpbmRlbnQgPD0gcHJldl9pbmRl bnQ6Cj4gPiArICAgICAgICAgICAgICAgIGNyLnNlZWsocG9zKQo+ID4gKyAgICAgICAgICAgICAg ICBzZWxmLl9hcHBlbmRfY29udGVudF90b19hcnJheXMobGlzdCwKPiBjdXJyZW50X2Jsb2NrKQo+ ID4gICAgICAgICAgICAgICAgICBicmVhawo+ID4gLSAgICAgICAgICAgIGluZGVudGVkX2xpbmUg PSBzZWxmLmdldF9uZXh0X2xpbmUoZmlsZSkucnN0cmlwKCkKPiA+IC0gICAgICAgICAgICBsaW5l ID0gaW5kZW50ZWRfbGluZS5zdHJpcCgpCj4gPiAtICAgICAgICAgICAgd29yZHMgPSBsaW5lLnNw bGl0KCkKPiA+ICAKPiA+ICAgICAgICAgICAgICBsZW5fbGlzdCA9IGxlbihsaXN0KQo+ID4gIAo+ ID4gLSAgICAgICAgICAgICMgTG9vayBmb3IgYSBrbm93biBvcGVyYXRvciBpbiB0aGUgbGluZQo+ ID4gLSAgICAgICAgICAgIG9wZXJhdG9ycyA9IFsiPys9IiwgIj88PSIsICI/PSIsICIrPSIsICI8 PSIsICI9Il0KPiA+IC0gICAgICAgICAgICBvcF9mb3VuZCA9IE5vbmUKPiA+IC0gICAgICAgICAg ICBvcF9wb3MgPSBsZW4obGluZSkKPiA+IC0gICAgICAgICAgICBmb3Igb3AgaW4gb3BlcmF0b3Jz Ogo+ID4gLSAgICAgICAgICAgICAgICBwb3MgPSBsaW5lLmZpbmQob3ApCj4gPiAtICAgICAgICAg ICAgICAgIGlmIHBvcyA+PSAwIGFuZCBwb3MgPCBvcF9wb3M6Cj4gPiAtICAgICAgICAgICAgICAg ICAgICBvcF9mb3VuZCA9IG9wCj4gPiAtICAgICAgICAgICAgICAgICAgICBvcF9wb3MgPSBwb3MK PiA+IC0KPiA+IC0gICAgICAgICAgICAjIEZvdW5kIGFuIG9wZXJhdG9yPwo+ID4gLSAgICAgICAg ICAgIGlmIG9wX2ZvdW5kOgo+ID4gKyAgICAgICAgICAgICMgUGFyc2UgYXNzaWdubWVudCBvcGVy YXRvcnMgKGtlZXAgbGluZXMgaW4gdGVtcG9yYXJ5Cj4gYnVmZmVyKQo+ID4gKyAgICAgICAgICAg IGlmICI9IiBpbiBsaW5lOgo+ID4gICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnIGFuZCBu b3QgcmVzdHJpY3RlZDoKPiA+IC0gICAgICAgICAgICAgICAgICAgIHNlbGYuX19kZWJ1Z19wcmlu dChpbmRlbnRlZF9saW5lLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQYXJzaW5nIG9wZXJhdG9yICglZCBkaWN0cwo+IGluIGN1cnJlbnQgIgo+ID4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb250ZXh0KSIgJSBsZW5fbGlzdCkK PiA+IC0gICAgICAgICAgICAgICAgKGxlZnQsIHZhbHVlKSA9IHNlbGYuc3BsaXRfYW5kX3N0cmlw KGxpbmUsCj4gb3BfZm91bmQpCj4gPiAtICAgICAgICAgICAgICAgIGZpbHRlcnNfYW5kX2tleSA9 IHNlbGYuc3BsaXRfYW5kX3N0cmlwKGxlZnQsICI6IikKPiA+IC0gICAgICAgICAgICAgICAgZmls dGVycyA9IGZpbHRlcnNfYW5kX2tleVs6LTFdCj4gPiAtICAgICAgICAgICAgICAgIGtleSA9IGZp bHRlcnNfYW5kX2tleVstMV0KPiA+IC0gICAgICAgICAgICAgICAgZmlsdGVyZWRfbGlzdCA9IGxp c3QKPiA+IC0gICAgICAgICAgICAgICAgZm9yIGZpbHRlciBpbiBmaWx0ZXJzOgo+ID4gLSAgICAg ICAgICAgICAgICAgICAgZmlsdGVyZWRfbGlzdCA9IHNlbGYuZmlsdGVyKGZpbHRlciwKPiBmaWx0 ZXJlZF9saXN0KQo+ID4gLSAgICAgICAgICAgICAgICAjIEFwcGx5IHRoZSBvcGVyYXRpb24gdG8g dGhlIGZpbHRlcmVkIGxpc3QKPiA+IC0gICAgICAgICAgICAgICAgaWYgb3BfZm91bmQgPT0gIj0i Ogo+ID4gLSAgICAgICAgICAgICAgICAgICAgZm9yIGRpY3QgaW4gZmlsdGVyZWRfbGlzdDoKPiA+ IC0gICAgICAgICAgICAgICAgICAgICAgICBkaWN0W2tleV0gPSB2YWx1ZQo+ID4gLSAgICAgICAg ICAgICAgICBlbGlmIG9wX2ZvdW5kID09ICIrPSI6Cj4gPiAtICAgICAgICAgICAgICAgICAgICBm b3IgZGljdCBpbiBmaWx0ZXJlZF9saXN0Ogo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgIGRp Y3Rba2V5XSA9IGRpY3QuZ2V0KGtleSwgIiIpICsgdmFsdWUKPiA+IC0gICAgICAgICAgICAgICAg ZWxpZiBvcF9mb3VuZCA9PSAiPD0iOgo+ID4gLSAgICAgICAgICAgICAgICAgICAgZm9yIGRpY3Qg aW4gZmlsdGVyZWRfbGlzdDoKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICBkaWN0W2tleV0g PSB2YWx1ZSArIGRpY3QuZ2V0KGtleSwgIiIpCj4gPiAtICAgICAgICAgICAgICAgIGVsaWYgb3Bf Zm91bmQuc3RhcnRzd2l0aCgiPyIpOgo+ID4gLSAgICAgICAgICAgICAgICAgICAgZXhwID0gcmUu Y29tcGlsZSgiXiglcykkIiAlIGtleSkKPiA+IC0gICAgICAgICAgICAgICAgICAgIGlmIG9wX2Zv dW5kID09ICI/PSI6Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRpY3QgaW4gZmls dGVyZWRfbGlzdDoKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBk aWN0LmtleXMoKToKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4cC5t YXRjaChrZXkpOgo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rb a2V5XSA9IHZhbHVlCj4gPiAtICAgICAgICAgICAgICAgICAgICBlbGlmIG9wX2ZvdW5kID09ICI/ Kz0iOgo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkaWN0IGluIGZpbHRlcmVkX2xp c3Q6Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gZGljdC5rZXlz KCk6Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHAubWF0Y2goa2V5 KToKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0W2tleV0gPSBk aWN0LmdldChrZXksICIiKSArCj4gdmFsdWUKPiA+IC0gICAgICAgICAgICAgICAgICAgIGVsaWYg b3BfZm91bmQgPT0gIj88PSI6Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRpY3Qg aW4gZmlsdGVyZWRfbGlzdDoKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtl eSBpbiBkaWN0LmtleXMoKToKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IGV4cC5tYXRjaChrZXkpOgo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRpY3Rba2V5XSA9IHZhbHVlICsKPiBkaWN0LmdldChrZXksICIiKQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgX2RlYnVnX3ByaW50KGluZGVudGVkX2xpbmUsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBhcnNpbmcgb3BlcmF0b3IgKCVkIGRpY3RzIGluCj4gY3VycmVu dCAiCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRleHQpIiAlIGxl bl9saXN0KQo+ID4gKyAgICAgICAgICAgICAgICBjdXJyZW50X2Jsb2NrICs9IGxpbmUgKyAiXG4i Cj4gPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlCj4gPiArCj4gPiArICAgICAgICAgICAgIyBG bHVzaCB0aGUgdGVtcG9yYXJ5IGJ1ZmZlcgo+ID4gKyAgICAgICAgICAgIHNlbGYuX2FwcGVuZF9j b250ZW50X3RvX2FycmF5cyhsaXN0LCBjdXJyZW50X2Jsb2NrKQo+ID4gKyAgICAgICAgICAgIGN1 cnJlbnRfYmxvY2sgPSAiIgo+ID4gKwo+ID4gKyAgICAgICAgICAgIHdvcmRzID0gbGluZS5zcGxp dCgpCj4gPiAgCj4gPiAgICAgICAgICAgICAgIyBQYXJzZSAnbm8nIGFuZCAnb25seScgc3RhdGVt ZW50cwo+ID4gLSAgICAgICAgICAgIGVsaWYgd29yZHNbMF0gPT0gIm5vIiBvciB3b3Jkc1swXSA9 PSAib25seSI6Cj4gPiArICAgICAgICAgICAgaWYgd29yZHNbMF0gPT0gIm5vIiBvciB3b3Jkc1sw XSA9PSAib25seSI6Cj4gPiAgICAgICAgICAgICAgICAgIGlmIGxlbih3b3JkcykgPD0gMToKPiA+ ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCj4gPiAtICAgICAgICAgICAgICAgIGZpbHRl cnMgPSB3b3Jkc1sxOl0KPiA+ICsgICAgICAgICAgICAgICAgZmlsdGVycyA9IG1hcChzZWxmLl9n ZXRfZmlsdGVyX3JlZ2V4LCB3b3Jkc1sxOl0pCj4gPiAgICAgICAgICAgICAgICAgIGZpbHRlcmVk X2xpc3QgPSBbXQo+ID4gICAgICAgICAgICAgICAgICBpZiB3b3Jkc1swXSA9PSAibm8iOgo+ID4g LSAgICAgICAgICAgICAgICAgICAgZm9yIGRpY3QgaW4gbGlzdDoKPiA+ICsgICAgICAgICAgICAg ICAgICAgIGZvciBhIGluIGxpc3Q6Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9 IF9hcnJheV9nZXRfbmFtZShhLAo+IHNlbGYub2JqZWN0X2NhY2hlKQo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgIGZvciBmaWx0ZXIgaW4gZmlsdGVyczoKPiA+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgc2VsZi5tYXRjaChmaWx0ZXIsIGRpY3QpOgo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiBmaWx0ZXIuc2VhcmNoKG5hbWUpOgo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWsKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICBl bHNlOgo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9saXN0LmFwcGVu ZChkaWN0KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9saXN0LmFw cGVuZChhKQo+ID4gICAgICAgICAgICAgICAgICBpZiB3b3Jkc1swXSA9PSAib25seSI6Cj4gPiAt ICAgICAgICAgICAgICAgICAgICBmb3IgZGljdCBpbiBsaXN0Ogo+ID4gKyAgICAgICAgICAgICAg ICAgICAgZm9yIGEgaW4gbGlzdDoKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0g X2FycmF5X2dldF9uYW1lKGEsCj4gc2VsZi5vYmplY3RfY2FjaGUpCj4gPiAgICAgICAgICAgICAg ICAgICAgICAgICAgZm9yIGZpbHRlciBpbiBmaWx0ZXJzOgo+ID4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiBzZWxmLm1hdGNoKGZpbHRlciwgZGljdCk6Cj4gPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9saXN0LmFwcGVuZChkaWN0KQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWx0ZXIuc2VhcmNoKG5hbWUpOgo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfbGlzdC5hcHBlbmQoYSkKPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCj4gPiAgICAgICAgICAgICAgICAg IGxpc3QgPSBmaWx0ZXJlZF9saXN0Cj4gPiAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWcg YW5kIG5vdCByZXN0cmljdGVkOgo+ID4gLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2RlYnVn X3ByaW50KGluZGVudGVkX2xpbmUsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlBhcnNpbmcgbm8vb25seSAoJWQgZGljdHMKPiBpbiBjdXJyZW50ICIKPiA+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udGV4dCwgJWQgcmVtYWlu KSIgJQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZW5fbGlz dCwgbGVuKGxpc3QpKSkKPiA+ICsgICAgICAgICAgICAgICAgICAgIF9kZWJ1Z19wcmludChpbmRl bnRlZF9saW5lLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJzaW5n IG5vL29ubHkgKCVkIGRpY3RzIGluCj4gY3VycmVudCAiCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImNvbnRleHQsICVkIHJlbWFpbikiICUKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobGVuX2xpc3QsIGxlbihsaXN0KSkpCj4gPiArICAgICAgICAg ICAgICAgIGNvbnRpbnVlCj4gPiAgCj4gPiAgICAgICAgICAgICAgIyBQYXJzZSAndmFyaWFudHMn Cj4gPiAtICAgICAgICAgICAgZWxpZiBsaW5lID09ICJ2YXJpYW50czoiOgo+ID4gKyAgICAgICAg ICAgIGlmIGxpbmUgPT0gInZhcmlhbnRzOiI6Cj4gPiAgICAgICAgICAgICAgICAgICMgJ3Zhcmlh bnRzJyBub3QgYWxsb3dlZCBpbiByZXN0cmljdGVkIG1vZGUKPiA+ICAgICAgICAgICAgICAgICAg IyAoaW5zaWRlIGFuIGV4Y2VwdGlvbiBvciBpbnNpZGUgc3VidmFyaWFudHMpCj4gPiAgICAgICAg ICAgICAgICAgIGlmIHJlc3RyaWN0ZWQ6Cj4gPiAgICAgICAgICAgICAgICAgICAgICBlX21zZyA9 ICJVc2luZyB2YXJpYW50cyBpbiB0aGlzIGNvbnRleHQgaXMgbm90Cj4gYWxsb3dlZCIKPiA+ICAg ICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yLkF1dG90ZXN0RXJyb3IoZV9tc2cpCj4gPiAg ICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWcgYW5kIG5vdCByZXN0cmljdGVkOgo+ID4gLSAg ICAgICAgICAgICAgICAgICAgc2VsZi5fX2RlYnVnX3ByaW50KGluZGVudGVkX2xpbmUsCj4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVudGVyaW5nIHZhcmlhbnRz IGJsb2NrICglZAo+IGRpY3RzIGluICIKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiY3VycmVudCBjb250ZXh0KSIgJQo+IGxlbl9saXN0KQo+ID4gLSAgICAgICAg ICAgICAgICBsaXN0ID0gc2VsZi5wYXJzZV92YXJpYW50cyhmaWxlLCBsaXN0LAo+IHN1YnZhcmlh bnRzPUZhbHNlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgX2RlYnVnX3ByaW50KGluZGVudGVk X2xpbmUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVudGVyaW5nIHZh cmlhbnRzIGJsb2NrICglZCBkaWN0cwo+IGluICIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiY3VycmVudCBjb250ZXh0KSIgJSBsZW5fbGlzdCkKPiA+ICsgICAgICAgICAg ICAgICAgbGlzdCA9IHNlbGYucGFyc2VfdmFyaWFudHMoY3IsIGxpc3QsCj4gc3VidmFyaWFudHM9 RmFsc2UsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy ZXZfaW5kZW50PWluZGVudCkKPiA+ICsgICAgICAgICAgICAgICAgY29udGludWUKPiA+ICAKPiA+ ICAgICAgICAgICAgICAjIFBhcnNlICdzdWJ2YXJpYW50cycgKHRoZSBibG9jayBpcyBwYXJzZWQg Zm9yIGVhY2gKPiBkaWN0Cj4gPiAgICAgICAgICAgICAgIyBzZXBhcmF0ZWx5KQo+ID4gLSAgICAg ICAgICAgIGVsaWYgbGluZSA9PSAic3VidmFyaWFudHM6IjoKPiA+ICsgICAgICAgICAgICBpZiBs aW5lID09ICJzdWJ2YXJpYW50czoiOgo+ID4gICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVn IGFuZCBub3QgcmVzdHJpY3RlZDoKPiA+IC0gICAgICAgICAgICAgICAgICAgIHNlbGYuX19kZWJ1 Z19wcmludChpbmRlbnRlZF9saW5lLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJFbnRlcmluZyBzdWJ2YXJpYW50cyBibG9jawo+ICglZCBkaWN0cyBpbiAiCj4g PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnQgY29udGV4 dCkiICUKPiBsZW5fbGlzdCkKPiA+ICsgICAgICAgICAgICAgICAgICAgIF9kZWJ1Z19wcmludChp bmRlbnRlZF9saW5lLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbnRl cmluZyBzdWJ2YXJpYW50cyBibG9jayAoJWQKPiBkaWN0cyBpbiAiCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnQgY29udGV4dCkiICUgbGVuX2xpc3QpCj4gPiAg ICAgICAgICAgICAgICAgIG5ld19saXN0ID0gW10KPiA+IC0gICAgICAgICAgICAgICAgIyBSZW1l bWJlciBjdXJyZW50IGZpbGUgcG9zaXRpb24KPiA+IC0gICAgICAgICAgICAgICAgcG9zID0gZmls ZS50ZWxsKCkKPiA+ICsgICAgICAgICAgICAgICAgIyBSZW1lbWJlciBjdXJyZW50IHBvc2l0aW9u Cj4gPiArICAgICAgICAgICAgICAgIHBvcyA9IGNyLnRlbGwoKQo+ID4gICAgICAgICAgICAgICAg ICAjIFJlYWQgdGhlIGxpbmVzIGluIGFueSBjYXNlCj4gPiAtICAgICAgICAgICAgICAgIHNlbGYu cGFyc2VfdmFyaWFudHMoZmlsZSwgW10sIHN1YnZhcmlhbnRzPVRydWUsCj4gPiArICAgICAgICAg ICAgICAgIHNlbGYucGFyc2VfdmFyaWFudHMoY3IsIFtdLCBzdWJ2YXJpYW50cz1UcnVlLAo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfaW5kZW50PWluZGVudCkK PiA+ICAgICAgICAgICAgICAgICAgIyBJdGVyYXRlIG92ZXIgdGhlIGxpc3QuLi4KPiA+IC0gICAg ICAgICAgICAgICAgZm9yIGluZGV4IGluIHJhbmdlKGxlbihsaXN0KSk6Cj4gPiAtICAgICAgICAg ICAgICAgICAgICAjIFJldmVydCB0byBpbml0aWFsIGZpbGUgcG9zaXRpb24gaW4gdGhpcwo+ICdz dWJ2YXJpYW50cycKPiA+IC0gICAgICAgICAgICAgICAgICAgICMgYmxvY2sKPiA+IC0gICAgICAg ICAgICAgICAgICAgIGZpbGUuc2Vlayhwb3MpCj4gPiArICAgICAgICAgICAgICAgIGZvciBpbmRl eCBpbiB4cmFuZ2UobGVuKGxpc3QpKToKPiA+ICsgICAgICAgICAgICAgICAgICAgICMgUmV2ZXJ0 IHRvIGluaXRpYWwgcG9zaXRpb24gaW4gdGhpcwo+ICdzdWJ2YXJpYW50cycgYmxvY2sKPiA+ICsg ICAgICAgICAgICAgICAgICAgIGNyLnNlZWsocG9zKQo+ID4gICAgICAgICAgICAgICAgICAgICAg IyBFdmVyeXRoaW5nIGluc2lkZSAnc3VidmFyaWFudHMnIHNob3VsZCBiZQo+IHBhcnNlZCBpbgo+ ID4gICAgICAgICAgICAgICAgICAgICAgIyByZXN0cmljdGVkIG1vZGUKPiA+IC0gICAgICAgICAg ICAgICAgICAgIG5ld19saXN0ICs9IHNlbGYucGFyc2VfdmFyaWFudHMoZmlsZSwKPiBsaXN0W2lu ZGV4OmluZGV4KzFdLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgbmV3X2xpc3QgKz0gc2VsZi5w YXJzZV92YXJpYW50cyhjciwKPiBsaXN0W2luZGV4OmluZGV4KzFdLAo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo+IHN1YnZhcmlhbnRzPVRy dWUsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCj4gcHJldl9pbmRlbnQ9aW5kZW50KQo+ID4gICAgICAgICAgICAgICAgICBsaXN0ID0gbmV3 X2xpc3QKPiA+ICsgICAgICAgICAgICAgICAgY29udGludWUKPiA+ICAKPiA+ICAgICAgICAgICAg ICAjIFBhcnNlICdpbmNsdWRlJyBzdGF0ZW1lbnRzCj4gPiAtICAgICAgICAgICAgZWxpZiB3b3Jk c1swXSA9PSAiaW5jbHVkZSI6Cj4gPiArICAgICAgICAgICAgaWYgd29yZHNbMF0gPT0gImluY2x1 ZGUiOgo+ID4gICAgICAgICAgICAgICAgICBpZiBsZW4od29yZHMpIDw9IDE6Cj4gPiAgICAgICAg ICAgICAgICAgICAgICBjb250aW51ZQo+ID4gICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVn IGFuZCBub3QgcmVzdHJpY3RlZDoKPiA+IC0gICAgICAgICAgICAgICAgICAgIHNlbGYuX19kZWJ1 Z19wcmludChpbmRlbnRlZF9saW5lLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJFbnRlcmluZyBmaWxlICVzIiAlCj4gd29yZHNbMV0pCj4gPiArICAgICAgICAg ICAgICAgICAgICBfZGVidWdfcHJpbnQoaW5kZW50ZWRfbGluZSwgIkVudGVyaW5nIGZpbGUgJXMi Cj4gJSB3b3Jkc1sxXSkKPiA+ICAgICAgICAgICAgICAgICAgaWYgc2VsZi5maWxlbmFtZToKPiA+ ICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0KPiBvcy5wYXRoLmpvaW4ob3MucGF0aC5k aXJuYW1lKHNlbGYuZmlsZW5hbWUpLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd29yZHNbMV0pCj4gPiAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5w YXRoLmV4aXN0cyhmaWxlbmFtZSk6Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2Zp bGUgPSBvcGVuKGZpbGVuYW1lLCAiciIpCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgbGlz dCA9IHNlbGYucGFyc2UobmV3X2ZpbGUsIGxpc3QsCj4gcmVzdHJpY3RlZCkKPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgICBuZXdfZmlsZS5jbG9zZSgpCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgc3RyID0gb3BlbihmaWxlbmFtZSkucmVhZCgpCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgbGlzdCA9IHNlbGYucGFyc2UoY29uZmlncmVhZGVyKHN0ciksIGxpc3QsCj4gcmVzdHJp Y3RlZCkKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnIGFuZCBub3Qg cmVzdHJpY3RlZDoKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2RlYnVn X3ByaW50KCIiLCAiTGVhdmluZyBmaWxlCj4gJXMiICUgd29yZHNbMV0pCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9kZWJ1Z19wcmludCgiIiwgIkxlYXZpbmcgZmlsZSAlcyIgJQo+ IHdvcmRzWzFdKQo+ID4gICAgICAgICAgICAgICAgICAgICAgZWxzZToKPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIkNhbm5vdCBpbmNsdWRlICVzIC0tIGZpbGUK PiBub3QgZm91bmQiLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmaWxlbmFtZSkKPiA+ICAgICAgICAgICAgICAgICAgZWxzZToKPiA+ICAgICAgICAgICAgICAg ICAgICAgIGxvZ2dpbmcud2FybmluZygiQ2Fubm90IGluY2x1ZGUgJXMgYmVjYXVzZSBubwo+IGZp bGUgaXMgIgo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50 bHkgb3BlbiIsIHdvcmRzWzFdKQo+ID4gKyAgICAgICAgICAgICAgICBjb250aW51ZQo+ID4gIAo+ ID4gICAgICAgICAgICAgICMgUGFyc2UgbXVsdGktbGluZSBleGNlcHRpb25zCj4gPiAgICAgICAg ICAgICAgIyAodGhlIGJsb2NrIGlzIHBhcnNlZCBmb3IgZWFjaCBkaWN0IHNlcGFyYXRlbHkpCj4g PiAtICAgICAgICAgICAgZWxpZiBsaW5lLmVuZHN3aXRoKCI6Iik6Cj4gPiArICAgICAgICAgICAg aWYgbGluZS5lbmRzd2l0aCgiOiIpOgo+ID4gICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVn IGFuZCBub3QgcmVzdHJpY3RlZDoKPiA+IC0gICAgICAgICAgICAgICAgICAgIHNlbGYuX19kZWJ1 Z19wcmludChpbmRlbnRlZF9saW5lLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJFbnRlcmluZyBtdWx0aS1saW5lCj4gZXhjZXB0aW9uIGJsb2NrICIKPiA+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCVkIGRpY3RzIGluIGN1cnJl bnQKPiBjb250ZXh0IG91dHNpZGUgIgo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJleGNlcHRpb24pIiAlIGxlbl9saXN0KQo+ID4gLSAgICAgICAgICAgICAgICBs aW5lID0gbGluZS5zdHJpcCgiOiIpCj4gPiArICAgICAgICAgICAgICAgICAgICBfZGVidWdfcHJp bnQoaW5kZW50ZWRfbGluZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi RW50ZXJpbmcgbXVsdGktbGluZSBleGNlcHRpb24KPiBibG9jayAiCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiglZCBkaWN0cyBpbiBjdXJyZW50IGNvbnRleHQKPiBvdXRz aWRlICIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uKSIg JSBsZW5fbGlzdCkKPiA+ICsgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQo+ID4gICAg ICAgICAgICAgICAgICBuZXdfbGlzdCA9IFtdCj4gPiAtICAgICAgICAgICAgICAgICMgUmVtZW1i ZXIgY3VycmVudCBmaWxlIHBvc2l0aW9uCj4gPiAtICAgICAgICAgICAgICAgIHBvcyA9IGZpbGUu dGVsbCgpCj4gPiArICAgICAgICAgICAgICAgICMgUmVtZW1iZXIgY3VycmVudCBwb3NpdGlvbgo+ ID4gKyAgICAgICAgICAgICAgICBwb3MgPSBjci50ZWxsKCkKPiA+ICAgICAgICAgICAgICAgICAg IyBSZWFkIHRoZSBsaW5lcyBpbiBhbnkgY2FzZQo+ID4gLSAgICAgICAgICAgICAgICBzZWxmLnBh cnNlKGZpbGUsIFtdLCByZXN0cmljdGVkPVRydWUsCj4gcHJldl9pbmRlbnQ9aW5kZW50KQo+ID4g KyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlKGNyLCBbXSwgcmVzdHJpY3RlZD1UcnVlLAo+IHBy ZXZfaW5kZW50PWluZGVudCkKPiA+ICAgICAgICAgICAgICAgICAgIyBJdGVyYXRlIG92ZXIgdGhl IGxpc3QuLi4KPiA+IC0gICAgICAgICAgICAgICAgZm9yIGluZGV4IGluIHJhbmdlKGxlbihsaXN0 KSk6Cj4gPiAtICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm1hdGNoKGxpbmUsIGxpc3RbaW5k ZXhdKToKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAjIFJldmVydCB0byBpbml0aWFsIGZp bGUgcG9zaXRpb24gaW4gdGhpcwo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICMgZXhjZXB0 aW9uIGJsb2NrCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5zZWVrKHBvcykKPiA+ ICsgICAgICAgICAgICAgICAgZXhwID0gc2VsZi5fZ2V0X2ZpbHRlcl9yZWdleChsaW5lKQo+ID4g KyAgICAgICAgICAgICAgICBmb3IgaW5kZXggaW4geHJhbmdlKGxlbihsaXN0KSk6Cj4gPiArICAg ICAgICAgICAgICAgICAgICBuYW1lID0gX2FycmF5X2dldF9uYW1lKGxpc3RbaW5kZXhdLAo+IHNl bGYub2JqZWN0X2NhY2hlKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgaWYgZXhwLnNlYXJjaChu YW1lKToKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAjIFJldmVydCB0byBpbml0aWFsIHBv c2l0aW9uIGluIHRoaXMKPiBleGNlcHRpb24gYmxvY2sKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICBjci5zZWVrKHBvcykKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAjIEV2ZXJ5dGhp bmcgaW5zaWRlIGFuIGV4Y2VwdGlvbiBzaG91bGQgYmUKPiBwYXJzZWQgaW4KPiA+ICAgICAgICAg ICAgICAgICAgICAgICAgICAjIHJlc3RyaWN0ZWQgbW9kZQo+ID4gLSAgICAgICAgICAgICAgICAg ICAgICAgIG5ld19saXN0ICs9IHNlbGYucGFyc2UoZmlsZSwKPiBsaXN0W2luZGV4OmluZGV4KzFd LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19saXN0ICs9IHNlbGYucGFyc2UoY3Is Cj4gbGlzdFtpbmRleDppbmRleCsxXSwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0ZWQ9VHJ1ZSwKPiA+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfaW5kZW50PWluZGVudCkKPiA+ICAg ICAgICAgICAgICAgICAgICAgIGVsc2U6Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgbmV3 X2xpc3QgKz0gbGlzdFtpbmRleDppbmRleCsxXQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg IG5ld19saXN0LmFwcGVuZChsaXN0W2luZGV4XSkKPiA+ICAgICAgICAgICAgICAgICAgbGlzdCA9 IG5ld19saXN0Cj4gPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlCj4gPiAgCj4gPiAgICAgICAg ICByZXR1cm4gbGlzdAo+ID4gIAo+ID4gCj4gPiAtICAgIGRlZiBfX2RlYnVnX3ByaW50KHNlbGYs IHN0cjEsIHN0cjI9IiIpOgo+ID4gKyAgICBkZWYgX2dldF9maWx0ZXJfcmVnZXgoc2VsZiwgZmls dGVyKToKPiA+ICAgICAgICAgICIiIgo+ID4gLSAgICAgICAgTmljZWx5IHByaW50IHR3byBzdHJp bmdzIGFuZCBhbiBhcnJvdy4KPiA+ICsgICAgICAgIFJldHVybiBhIHJlZ2V4IG9iamVjdCBjb3Jy ZXNwb25kaW5nIHRvIGEgZ2l2ZW4gZmlsdGVyCj4gc3RyaW5nLgo+ID4gIAo+ID4gLSAgICAgICAg QHBhcmFtIHN0cjE6IEZpcnN0IHN0cmluZwo+ID4gLSAgICAgICAgQHBhcmFtIHN0cjI6IFNlY29u ZCBzdHJpbmcKPiA+ICsgICAgICAgIEFsbCByZWd1bGFyIGV4cHJlc3Npb25zIGdpdmVuIHRvIHRo ZSBwYXJzZXIgYXJlIHBhc3NlZAo+IHRocm91Z2ggdGhpcwo+ID4gKyAgICAgICAgZnVuY3Rpb24g Zmlyc3QuICBJdHMgcHVycG9zZSBpcyB0byBtYWtlIHRoZW0gbW9yZSBzcGVjaWZpYwo+IGFuZCBi ZXR0ZXIKPiA+ICsgICAgICAgIHN1aXRlZCB0byBtYXRjaCBkaWN0aW9uYXJ5IG5hbWVzOiBpdCBm b3JjZXMgc2ltcGxlCj4gZXhwcmVzc2lvbnMgdG8gbWF0Y2gKPiA+ICsgICAgICAgIG9ubHkgYmV0 d2VlbiBkb3RzIG9yIGF0IHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEgc3RyaW5nLiAKPiBGb3Ig ZXhhbXBsZSwKPiA+ICsgICAgICAgIHRoZSBmaWx0ZXIgJ2Zvbycgd2lsbCBtYXRjaCAnZm9vLmJh cicgYnV0IG5vdCAnZm9vYmFyJy4KPiA+ICAgICAgICAgICIiIgo+ID4gLSAgICAgICAgaWYgc3Ry MjoKPiA+IC0gICAgICAgICAgICBzdHIgPSAiJS01MHMgLS0tPiAlcyIgJSAoc3RyMSwgc3RyMikK PiA+IC0gICAgICAgIGVsc2U6Cj4gPiAtICAgICAgICAgICAgc3RyID0gc3RyMQo+ID4gLSAgICAg ICAgbG9nZ2luZy5kZWJ1ZyhzdHIpCj4gPiAtCj4gPiAtCj4gPiAtICAgIGRlZiBfX21vZGlmeV9s aXN0X3ZhcmlhbnRzKHNlbGYsIGxpc3QsIG5hbWUsIGRlcF9saXN0LAo+IGFkZF90b19zaG9ydG5h bWUpOgo+ID4gLSAgICAgICAgIiIiCj4gPiAtICAgICAgICBNYWtlIHNvbWUgbW9kaWZpY2F0aW9u cyB0byBsaXN0LCBhcyBwYXJ0IG9mIHBhcnNpbmcgYQo+ICd2YXJpYW50cycgYmxvY2suCj4gPiAt Cj4gPiAtICAgICAgICBAcGFyYW0gbGlzdDogTGlzdCB0byBiZSBwcm9jZXNzZWQKPiA+IC0gICAg ICAgIEBwYXJhbSBuYW1lOiBOYW1lIHRvIGJlIHByZXBlbmRlZCB0byB0aGUgZGljdGlvbmFyeSdz Cj4gJ25hbWUnIGtleQo+ID4gLSAgICAgICAgQHBhcmFtIGRlcF9saXN0OiBMaXN0IG9mIGRlcGVu ZGVuY2llcyB0byBiZSBhZGRlZCB0byB0aGUKPiBkaWN0aW9uYXJ5J3MKPiA+IC0gICAgICAgICAg ICAgICAgJ2RlcGVuZCcga2V5Cj4gPiAtICAgICAgICBAcGFyYW0gYWRkX3RvX3Nob3J0bmFtZTog Qm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgbmFtZQo+IHNob3VsZCBiZQo+ID4gLSAgICAgICAg ICAgICAgICBwcmVwZW5kZWQgdG8gdGhlIGRpY3Rpb25hcnkncyAnc2hvcnRuYW1lJyBrZXkgYXMK PiB3ZWxsCj4gPiAtICAgICAgICAiIiIKPiA+IC0gICAgICAgIGZvciBkaWN0IGluIGxpc3Q6Cj4g PiAtICAgICAgICAgICAgIyBQcmVwZW5kIG5hbWUgdG8gdGhlIGRpY3QncyAnbmFtZScgZmllbGQK PiA+IC0gICAgICAgICAgICBkaWN0WyJuYW1lIl0gPSBzZWxmLmFkZF9uYW1lKGRpY3RbIm5hbWUi XSwgbmFtZSkKPiA+IC0gICAgICAgICAgICAjIFByZXBlbmQgbmFtZSB0byB0aGUgZGljdCdzICdz aG9ydG5hbWUnIGZpZWxkCj4gPiAtICAgICAgICAgICAgaWYgYWRkX3RvX3Nob3J0bmFtZToKPiA+ IC0gICAgICAgICAgICAgICAgZGljdFsic2hvcnRuYW1lIl0gPQo+IHNlbGYuYWRkX25hbWUoZGlj dFsic2hvcnRuYW1lIl0sIG5hbWUpCj4gPiAtICAgICAgICAgICAgIyBQcmVwZW5kIG5hbWUgdG8g ZWFjaCBvZiB0aGUgZGljdCdzIGRlcGVuZGVuY2llcwo+ID4gLSAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKGxlbihkaWN0WyJkZXBlbmQiXSkpOgo+ID4gLSAgICAgICAgICAgICAgICBkaWN0WyJk ZXBlbmQiXVtpXSA9Cj4gc2VsZi5hZGRfbmFtZShkaWN0WyJkZXBlbmQiXVtpXSwgbmFtZSkKPiA+ IC0gICAgICAgICAgICAjIEFkZCBuZXcgZGVwZW5kZW5jaWVzCj4gPiAtICAgICAgICAgICAgZGlj dFsiZGVwZW5kIl0gKz0gZGVwX2xpc3QKPiA+IC0KPiA+IC0KPiA+IC0gICAgZGVmIF9fbW9kaWZ5 X2xpc3Rfc3VidmFyaWFudHMoc2VsZiwgbGlzdCwgbmFtZSwgZGVwX2xpc3QsCj4gYWRkX3RvX3No b3J0bmFtZSk6Cj4gPiAtICAgICAgICAiIiIKPiA+IC0gICAgICAgIE1ha2Ugc29tZSBtb2RpZmlj YXRpb25zIHRvIGxpc3QsIGFzIHBhcnQgb2YgcGFyc2luZyBhCj4gJ3N1YnZhcmlhbnRzJwo+ID4g LSAgICAgICAgYmxvY2suCj4gPiAtCj4gPiAtICAgICAgICBAcGFyYW0gbGlzdDogTGlzdCB0byBi ZSBwcm9jZXNzZWQKPiA+IC0gICAgICAgIEBwYXJhbSBuYW1lOiBOYW1lIHRvIGJlIGFwcGVuZGVk IHRvIHRoZSBkaWN0aW9uYXJ5J3MgJ25hbWUnCj4ga2V5Cj4gPiAtICAgICAgICBAcGFyYW0gZGVw X2xpc3Q6IExpc3Qgb2YgZGVwZW5kZW5jaWVzIHRvIGJlIGFkZGVkIHRvIHRoZQo+IGRpY3Rpb25h cnkncwo+ID4gLSAgICAgICAgICAgICAgICAnZGVwZW5kJyBrZXkKPiA+IC0gICAgICAgIEBwYXJh bSBhZGRfdG9fc2hvcnRuYW1lOiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciBuYW1lCj4gc2hv dWxkIGJlCj4gPiAtICAgICAgICAgICAgICAgIGFwcGVuZGVkIHRvIHRoZSBkaWN0aW9uYXJ5J3Mg J3Nob3J0bmFtZScgYXMgd2VsbAo+ID4gLSAgICAgICAgIiIiCj4gPiAtICAgICAgICBmb3IgZGlj dCBpbiBsaXN0Ogo+ID4gLSAgICAgICAgICAgICMgQWRkIG5ldyBkZXBlbmRlbmNpZXMKPiA+IC0g ICAgICAgICAgICBmb3IgZGVwIGluIGRlcF9saXN0Ogo+ID4gLSAgICAgICAgICAgICAgICBkZXBf bmFtZSA9IHNlbGYuYWRkX25hbWUoZGljdFsibmFtZSJdLCBkZXAsCj4gYXBwZW5kPVRydWUpCj4g PiAtICAgICAgICAgICAgICAgIGRpY3RbImRlcGVuZCJdLmFwcGVuZChkZXBfbmFtZSkKPiA+IC0g ICAgICAgICAgICAjIEFwcGVuZCBuYW1lIHRvIHRoZSBkaWN0J3MgJ25hbWUnIGZpZWxkCj4gPiAt ICAgICAgICAgICAgZGljdFsibmFtZSJdID0gc2VsZi5hZGRfbmFtZShkaWN0WyJuYW1lIl0sIG5h bWUsCj4gYXBwZW5kPVRydWUpCj4gPiAtICAgICAgICAgICAgIyBBcHBlbmQgbmFtZSB0byB0aGUg ZGljdCdzICdzaG9ydG5hbWUnIGZpZWxkCj4gPiAtICAgICAgICAgICAgaWYgYWRkX3RvX3Nob3J0 bmFtZToKPiA+IC0gICAgICAgICAgICAgICAgZGljdFsic2hvcnRuYW1lIl0gPQo+IHNlbGYuYWRk X25hbWUoZGljdFsic2hvcnRuYW1lIl0sIG5hbWUsCj4gPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQ9VHJ1ZSkKPiA+ICsgICAgICAgIHRy eToKPiA+ICsgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWdleF9jYWNoZVtmaWx0ZXJdCj4gPiAr ICAgICAgICBleGNlcHQgS2V5RXJyb3I6Cj4gPiArICAgICAgICAgICAgZXhwID0gcmUuY29tcGls ZShyIihcLnxeKSglcykoXC58JCkiICUgZmlsdGVyKQo+ID4gKyAgICAgICAgICAgIHNlbGYucmVn ZXhfY2FjaGVbZmlsdGVyXSA9IGV4cAo+ID4gKyAgICAgICAgICAgIHJldHVybiBleHAKPiA+ICsK PiA+ICsKPiA+ICsgICAgZGVmIF9zdG9yZV9zdHIoc2VsZiwgc3RyKToKPiA+ICsgICAgICAgICIi Igo+ID4gKyAgICAgICAgU3RvcmUgc3RyIGluIHRoZSBpbnRlcm5hbCBvYmplY3QgY2FjaGUsIGlm IGl0IGlzbid0IGFscmVhZHkKPiB0aGVyZSwgYW5kCj4gPiArICAgICAgICByZXR1cm4gaXRzIGlk ZW50aWZ5aW5nIGluZGV4Lgo+ID4gKwo+ID4gKyAgICAgICAgQHBhcmFtIHN0cjogU3RyaW5nIHRv IHN0b3JlLgo+ID4gKyAgICAgICAgQHJldHVybjogVGhlIGluZGV4IG9mIHN0ciBpbiB0aGUgb2Jq ZWN0IGNhY2hlLgo+ID4gKyAgICAgICAgIiIiCj4gPiArICAgICAgICB0cnk6Cj4gPiArICAgICAg ICAgICAgcmV0dXJuIHNlbGYub2JqZWN0X2NhY2hlX2luZGljZXNbc3RyXQo+ID4gKyAgICAgICAg ZXhjZXB0IEtleUVycm9yOgo+ID4gKyAgICAgICAgICAgIHNlbGYub2JqZWN0X2NhY2hlLmFwcGVu ZChzdHIpCj4gPiArICAgICAgICAgICAgaW5kZXggPSBsZW4oc2VsZi5vYmplY3RfY2FjaGUpIC0g MQo+ID4gKyAgICAgICAgICAgIHNlbGYub2JqZWN0X2NhY2hlX2luZGljZXNbc3RyXSA9IGluZGV4 Cj4gPiArICAgICAgICAgICAgcmV0dXJuIGluZGV4Cj4gPiArCj4gPiArCj4gPiArICAgIGRlZiBf YXBwZW5kX2NvbnRlbnRfdG9fYXJyYXlzKHNlbGYsIGxpc3QsIGNvbnRlbnQpOgo+ID4gKyAgICAg ICAgIiIiCj4gPiArICAgICAgICBBcHBlbmQgY29udGVudCAoY29uZmlnIGNvZGUgY29udGFpbmlu ZyBhc3NpZ25tZW50Cj4gb3BlcmF0aW9ucykgdG8gYSBsaXN0Cj4gPiArICAgICAgICBvZiBhcnJh eXMuCj4gPiArCj4gPiArICAgICAgICBAcGFyYW0gbGlzdDogTGlzdCBvZiBhcnJheXMgdG8gb3Bl cmF0ZSBvbi4KPiA+ICsgICAgICAgIEBwYXJhbSBjb250ZW50OiBTdHJpbmcgY29udGFpbmluZyBh c3NpZ25tZW50IG9wZXJhdGlvbnMuCj4gPiArICAgICAgICAiIiIKPiA+ICsgICAgICAgIGlmIGNv bnRlbnQ6Cj4gPiArICAgICAgICAgICAgc3RyX2luZGV4ID0gc2VsZi5fc3RvcmVfc3RyKGNvbnRl bnQpCj4gPiArICAgICAgICAgICAgZm9yIGEgaW4gbGlzdDoKPiA+ICsgICAgICAgICAgICAgICAg X2FycmF5X2FwcGVuZF90b19jb250ZW50KGEsIHN0cl9pbmRleCkKPiA+ICsKPiA+ICsKPiA+ICsg ICAgZGVmIF9hcHBseV9jb250ZW50X3RvX2RpY3Qoc2VsZiwgZGljdCwgY29udGVudCk6Cj4gPiAr ICAgICAgICAiIiIKPiA+ICsgICAgICAgIEFwcGx5IHRoZSBvcGVyYXRpb25zIGluIGNvbnRlbnQg KGNvbmZpZyBjb2RlIGNvbnRhaW5pbmcKPiBhc3NpZ25tZW50Cj4gPiArICAgICAgICBvcGVyYXRp b25zKSB0byBhIGRpY3QuCj4gPiArCj4gPiArICAgICAgICBAcGFyYW0gZGljdDogRGljdGlvbmFy eSB0byBvcGVyYXRlIG9uLiAgTXVzdCBoYXZlICduYW1lJwo+IGtleS4KPiA+ICsgICAgICAgIEBw YXJhbSBjb250ZW50OiBTdHJpbmcgY29udGFpbmluZyBhc3NpZ25tZW50IG9wZXJhdGlvbnMuCj4g PiArICAgICAgICAiIiIKPiA+ICsgICAgICAgIGZvciBsaW5lIGluIGNvbnRlbnQuc3BsaXRsaW5l cygpOgo+ID4gKyAgICAgICAgICAgIG9wX2ZvdW5kID0gTm9uZQo+ID4gKyAgICAgICAgICAgIG9w X3BvcyA9IGxlbihsaW5lKQo+ID4gKyAgICAgICAgICAgIGZvciBvcCBpbiBvcHM6Cj4gPiArICAg ICAgICAgICAgICAgIHBvcyA9IGxpbmUuZmluZChvcCkKPiA+ICsgICAgICAgICAgICAgICAgaWYg cG9zID49IDAgYW5kIHBvcyA8IG9wX3BvczoKPiA+ICsgICAgICAgICAgICAgICAgICAgIG9wX2Zv dW5kID0gb3AKPiA+ICsgICAgICAgICAgICAgICAgICAgIG9wX3BvcyA9IHBvcwo+ID4gKyAgICAg ICAgICAgIGlmIG5vdCBvcF9mb3VuZDoKPiA+ICsgICAgICAgICAgICAgICAgY29udGludWUKPiA+ ICsgICAgICAgICAgICAobGVmdCwgdmFsdWUpID0gbWFwKHN0ci5zdHJpcCwgbGluZS5zcGxpdChv cF9mb3VuZCwKPiAxKSkKPiA+ICsgICAgICAgICAgICBpZiB2YWx1ZSBhbmQgKCh2YWx1ZVswXSA9 PSAnIicgYW5kIHZhbHVlWy0xXSA9PSAnIicpCj4gb3IKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICh2YWx1ZVswXSA9PSAiJyIgYW5kIHZhbHVlWy0xXSA9PSAiJyIpKToKPiA+ICsgICAg ICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVsxOi0xXQo+ID4gKyAgICAgICAgICAgIGZpbHRlcnNf YW5kX2tleSA9IG1hcChzdHIuc3RyaXAsIGxlZnQuc3BsaXQoIjoiKSkKPiA+ICsgICAgICAgICAg ICBmaWx0ZXJzID0gZmlsdGVyc19hbmRfa2V5WzotMV0KPiA+ICsgICAgICAgICAgICBrZXkgPSBm aWx0ZXJzX2FuZF9rZXlbLTFdCj4gPiArICAgICAgICAgICAgZm9yIGZpbHRlciBpbiBmaWx0ZXJz Ogo+ID4gKyAgICAgICAgICAgICAgICBleHAgPSBzZWxmLl9nZXRfZmlsdGVyX3JlZ2V4KGZpbHRl cikKPiA+ICsgICAgICAgICAgICAgICAgaWYgbm90IGV4cC5zZWFyY2goZGljdFsibmFtZSJdKToK PiA+ICsgICAgICAgICAgICAgICAgICAgIGJyZWFrCj4gPiArICAgICAgICAgICAgZWxzZToKPiA+ ICsgICAgICAgICAgICAgICAgb3BzW29wX2ZvdW5kXShkaWN0LCBrZXksIHZhbHVlKQo+ID4gKwo+ ID4gKwo+ID4gKyMgQXNzaWdubWVudCBvcGVyYXRvcnMKPiA+ICsKPiA+ICtkZWYgX29wX3NldChk aWN0LCBrZXksIHZhbHVlKToKPiA+ICsgICAgZGljdFtrZXldID0gdmFsdWUKPiA+ICsKPiA+ICsK PiA+ICtkZWYgX29wX2FwcGVuZChkaWN0LCBrZXksIHZhbHVlKToKPiA+ICsgICAgZGljdFtrZXld ID0gZGljdC5nZXQoa2V5LCAiIikgKyB2YWx1ZQo+ID4gKwo+ID4gKwo+ID4gK2RlZiBfb3BfcHJl cGVuZChkaWN0LCBrZXksIHZhbHVlKToKPiA+ICsgICAgZGljdFtrZXldID0gdmFsdWUgKyBkaWN0 LmdldChrZXksICIiKQo+ID4gKwo+ID4gKwo+ID4gK2RlZiBfb3BfcmVnZXhfc2V0KGRpY3QsIGV4 cCwgdmFsdWUpOgo+ID4gKyAgICBleHAgPSByZS5jb21waWxlKCJeKCVzKSQiICUgZXhwKQo+ID4g KyAgICBmb3Iga2V5IGluIGRpY3Q6Cj4gPiArICAgICAgICBpZiBleHAubWF0Y2goa2V5KToKPiA+ ICsgICAgICAgICAgICBkaWN0W2tleV0gPSB2YWx1ZQo+ID4gKwo+ID4gKwo+ID4gK2RlZiBfb3Bf cmVnZXhfYXBwZW5kKGRpY3QsIGV4cCwgdmFsdWUpOgo+ID4gKyAgICBleHAgPSByZS5jb21waWxl KCJeKCVzKSQiICUgZXhwKQo+ID4gKyAgICBmb3Iga2V5IGluIGRpY3Q6Cj4gPiArICAgICAgICBp ZiBleHAubWF0Y2goa2V5KToKPiA+ICsgICAgICAgICAgICBkaWN0W2tleV0gKz0gdmFsdWUKPiA+ ICsKPiA+ICsKPiA+ICtkZWYgX29wX3JlZ2V4X3ByZXBlbmQoZGljdCwgZXhwLCB2YWx1ZSk6Cj4g PiArICAgIGV4cCA9IHJlLmNvbXBpbGUoIl4oJXMpJCIgJSBleHApCj4gPiArICAgIGZvciBrZXkg aW4gZGljdDoKPiA+ICsgICAgICAgIGlmIGV4cC5tYXRjaChrZXkpOgo+ID4gKyAgICAgICAgICAg IGRpY3Rba2V5XSA9IHZhbHVlICsgZGljdFtrZXldCj4gPiArCj4gPiArCj4gPiArb3BzID0gewo+ ID4gKyAgICAiPSI6IF9vcF9zZXQsCj4gPiArICAgICIrPSI6IF9vcF9hcHBlbmQsCj4gPiArICAg ICI8PSI6IF9vcF9wcmVwZW5kLAo+ID4gKyAgICAiPz0iOiBfb3BfcmVnZXhfc2V0LAo+ID4gKyAg ICAiPys9IjogX29wX3JlZ2V4X2FwcGVuZCwKPiA+ICsgICAgIj88PSI6IF9vcF9yZWdleF9wcmVw ZW5kLAo+ID4gK30KPiA+ICsKPiA+ICsKPiA+ICsjIE1pc2MgZnVuY3Rpb25zCj4gPiArCj4gPiAr ZGVmIF9kZWJ1Z19wcmludChzdHIxLCBzdHIyPSIiKToKPiA+ICsgICAgIiIiCj4gPiArICAgIE5p Y2VseSBwcmludCB0d28gc3RyaW5ncyBhbmQgYW4gYXJyb3cuCj4gPiArCj4gPiArICAgIEBwYXJh bSBzdHIxOiBGaXJzdCBzdHJpbmcuCj4gPiArICAgIEBwYXJhbSBzdHIyOiBTZWNvbmQgc3RyaW5n Lgo+ID4gKyAgICAiIiIKPiA+ICsgICAgaWYgc3RyMjoKPiA+ICsgICAgICAgIHN0ciA9ICIlLTUw cyAtLS0+ICVzIiAlIChzdHIxLCBzdHIyKQo+ID4gKyAgICBlbHNlOgo+ID4gKyAgICAgICAgc3Ry ID0gc3RyMQo+ID4gKyAgICBsb2dnaW5nLmRlYnVnKHN0cikKPiA+ICsKPiA+ICsKPiA+ICsjIGNv bmZpZ3JlYWRlcgo+ID4gKwo+ID4gK2NsYXNzIGNvbmZpZ3JlYWRlcjoKPiA+ICsgICAgIiIiCj4g PiArICAgIFByZXByb2Nlc3MgYW4gaW5wdXQgc3RyaW5nIGFuZCBwcm92aWRlIGZpbGUtbGlrZSBz ZXJ2aWNlcy4KPiA+ICsgICAgVGhpcyBpcyBpbnRlbmRlZCBhcyBhIHJlcGxhY2VtZW50IGZvciB0 aGUgZmlsZSBhbmQgU3RyaW5nSU8KPiBjbGFzc2VzLAo+ID4gKyAgICB3aG9zZSByZWFkbGluZSgp IGFuZC9vciBzZWVrKCkgbWV0aG9kcyBzZWVtIHRvIGJlIHNsb3cuCj4gPiArICAgICIiIgo+ID4g Kwo+ID4gKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyKToKPiA+ICsgICAgICAgICIiIgo+ID4g KyAgICAgICAgSW5pdGlhbGl6ZSB0aGUgcmVhZGVyLgo+ID4gKwo+ID4gKyAgICAgICAgQHBhcmFt IHN0cjogVGhlIHN0cmluZyB0byBwYXJzZS4KPiA+ICsgICAgICAgICIiIgo+ID4gKyAgICAgICAg c2VsZi5saW5lX2luZGV4ID0gMAo+ID4gKyAgICAgICAgc2VsZi5saW5lcyA9IFtdCj4gPiArICAg ICAgICBmb3IgbGluZSBpbiBzdHIuc3BsaXRsaW5lcygpOgo+ID4gKyAgICAgICAgICAgIGxpbmUg PSBsaW5lLnJzdHJpcCgpLmV4cGFuZHRhYnMoKQo+ID4gKyAgICAgICAgICAgIHN0cmlwcGVkX2xp bmUgPSBsaW5lLnN0cmlwKCkKPiA+ICsgICAgICAgICAgICBpbmRlbnQgPSBsZW4obGluZSkgLSBs ZW4oc3RyaXBwZWRfbGluZSkKPiA+ICsgICAgICAgICAgICBpZiAobm90IHN0cmlwcGVkX2xpbmUK PiA+ICsgICAgICAgICAgICAgICAgb3Igc3RyaXBwZWRfbGluZS5zdGFydHN3aXRoKCIjIikKPiA+ ICsgICAgICAgICAgICAgICAgb3Igc3RyaXBwZWRfbGluZS5zdGFydHN3aXRoKCIvLyIpKToKPiA+ ICsgICAgICAgICAgICAgICAgY29udGludWUKPiA+ICsgICAgICAgICAgICBzZWxmLmxpbmVzLmFw cGVuZCgobGluZSwgc3RyaXBwZWRfbGluZSwgaW5kZW50KSkKPiA+ICsKPiA+ICsKPiA+ICsgICAg ZGVmIGdldF9uZXh0X2xpbmUoc2VsZik6Cj4gPiArICAgICAgICAiIiIKPiA+ICsgICAgICAgIEdl dCB0aGUgbmV4dCBub24tZW1wdHksIG5vbi1jb21tZW50IGxpbmUgaW4gdGhlIHN0cmluZy4KPiA+ ICsKPiA+ICsgICAgICAgIEBwYXJhbSBmaWxlOiBGaWxlIGxpa2Ugb2JqZWN0Lgo+ID4gKyAgICAg ICAgQHJldHVybjogKGxpbmUsIHN0cmlwcGVkX2xpbmUsIGluZGVudCksIHdoZXJlIGluZGVudCBp cyB0aGUKPiBsaW5lJ3MKPiA+ICsgICAgICAgICAgICBpbmRlbnQgbGV2ZWwgb3IgLTEgaWYgbm8g bGluZSBpcyBhdmFpbGFibGUuCj4gPiArICAgICAgICAiIiIKPiA+ICsgICAgICAgIHRyeToKPiA+ ICsgICAgICAgICAgICBpZiBzZWxmLmxpbmVfaW5kZXggPCBsZW4oc2VsZi5saW5lcyk6Cj4gPiAr ICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmxpbmVzW3NlbGYubGluZV9pbmRleF0KPiA+ICsg ICAgICAgICAgICBlbHNlOgo+ID4gKyAgICAgICAgICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUs IC0xKQo+ID4gKyAgICAgICAgZmluYWxseToKPiA+ICsgICAgICAgICAgICBzZWxmLmxpbmVfaW5k ZXggKz0gMQo+ID4gKwo+ID4gKwo+ID4gKyAgICBkZWYgdGVsbChzZWxmKToKPiA+ICsgICAgICAg ICIiIgo+ID4gKyAgICAgICAgUmV0dXJuIHRoZSBjdXJyZW50IGxpbmUgaW5kZXguCj4gPiArICAg ICAgICAiIiIKPiA+ICsgICAgICAgIHJldHVybiBzZWxmLmxpbmVfaW5kZXgKPiA+ICsKPiA+ICsK PiA+ICsgICAgZGVmIHNlZWsoc2VsZiwgaW5kZXgpOgo+ID4gKyAgICAgICAgIiIiCj4gPiArICAg ICAgICBTZXQgdGhlIGN1cnJlbnQgbGluZSBpbmRleC4KPiA+ICsgICAgICAgICIiIgo+ID4gKyAg ICAgICAgc2VsZi5saW5lX2luZGV4ID0gaW5kZXgKPiA+ICsKPiA+ICsKPiA+ICsjIEFycmF5IHN0 cnVjdHVyZToKPiA+ICsjIC0tLS0tLS0tLS0tLS0tLS0KPiA+ICsjIFRoZSBmaXJzdCA0IGVsZW1l bnRzIGNvbnRhaW4gdGhlIGluZGljZXMgb2YgdGhlIDQgc2VnbWVudHMuCj4gPiArIyBhWzBdIC0t IEluZGV4IG9mIGJlZ2lubmluZyBvZiAnbmFtZScgc2VnbWVudCAoYWx3YXlzIDQpLgo+ID4gKyMg YVsxXSAtLSBJbmRleCBvZiBiZWdpbm5pbmcgb2YgJ3Nob3J0bmFtZScgc2VnbWVudC4KPiA+ICsj IGFbMl0gLS0gSW5kZXggb2YgYmVnaW5uaW5nIG9mICdkZXBlbmQnIHNlZ21lbnQuCj4gPiArIyBh WzNdIC0tIEluZGV4IG9mIGJlZ2lubmluZyBvZiAnY29udGVudCcgc2VnbWVudC4KPiA+ICsjIFRo ZSBuZXh0IGVsZW1lbnRzIGluIHRoZSBhcnJheSBjb21wcmlzZSB0aGUgYWZvcmVtZW50aW9uZWQK PiBzZWdtZW50czoKPiA+ICsjIFRoZSAnbmFtZScgc2VnbWVudCBiZWdpbnMgd2l0aCBhW2FbMF1d IGFuZCBlbmRzIHdpdGggYVthWzFdLTFdLgo+ID4gKyMgVGhlICdzaG9ydG5hbWUnIHNlZ21lbnQg YmVnaW5zIHdpdGggYVthWzFdXSBhbmQgZW5kcyB3aXRoCj4gYVthWzJdLTFdLgo+ID4gKyMgVGhl ICdkZXBlbmQnIHNlZ21lbnQgYmVnaW5zIHdpdGggYVthWzJdXSBhbmQgZW5kcyB3aXRoCj4gYVth WzNdLTFdLgo+ID4gKyMgVGhlICdjb250ZW50JyBzZWdtZW50IGJlZ2lucyB3aXRoIGFbYVszXV0g YW5kIGVuZHMgYXQgdGhlIGVuZCBvZgo+IHRoZSBhcnJheS4KPiA+ICsKPiA+ICsjIFRoZSBmb2xs b3dpbmcgZnVuY3Rpb25zIGFwcGVuZC9wcmVwZW5kIHRvIHZhcmlvdXMgc2VnbWVudHMgb2YgYW4K PiBhcnJheS4KPiA+ICsKPiA+ICtkZWYgX2FycmF5X2FwcGVuZF90b19uYW1lX3Nob3J0bmFtZV9k ZXBlbmQoYSwgbmFtZSwgZGVwZW5kKToKPiA+ICsgICAgYS5pbnNlcnQoYVsxXSwgbmFtZSkKPiA+ ICsgICAgYS5pbnNlcnQoYVsyXSArIDEsIG5hbWUpCj4gPiArICAgIGEuaW5zZXJ0KGFbM10gKyAy LCBkZXBlbmQpCj4gPiArICAgIGFbMV0gKz0gMQo+ID4gKyAgICBhWzJdICs9IDIKPiA+ICsgICAg YVszXSArPSAzCj4gPiArCj4gPiArCj4gPiArZGVmIF9hcnJheV9wcmVwZW5kX3RvX25hbWVfc2hv cnRuYW1lX2RlcGVuZChhLCBuYW1lLCBkZXBlbmQpOgo+ID4gKyAgICBhWzFdICs9IDEKPiA+ICsg ICAgYVsyXSArPSAyCj4gPiArICAgIGFbM10gKz0gMwo+ID4gKyAgICBhLmluc2VydChhWzBdLCBu YW1lKQo+ID4gKyAgICBhLmluc2VydChhWzFdLCBuYW1lKQo+ID4gKyAgICBhLmluc2VydChhWzJd LCBkZXBlbmQpCj4gPiArCj4gPiArCj4gPiArZGVmIF9hcnJheV9hcHBlbmRfdG9fbmFtZV9kZXBl bmQoYSwgbmFtZSwgZGVwZW5kKToKPiA+ICsgICAgYS5pbnNlcnQoYVsxXSwgbmFtZSkKPiA+ICsg ICAgYS5pbnNlcnQoYVszXSArIDEsIGRlcGVuZCkKPiA+ICsgICAgYVsxXSArPSAxCj4gPiArICAg IGFbMl0gKz0gMQo+ID4gKyAgICBhWzNdICs9IDIKPiA+ICsKPiA+ICsKPiA+ICtkZWYgX2FycmF5 X3ByZXBlbmRfdG9fbmFtZV9kZXBlbmQoYSwgbmFtZSwgZGVwZW5kKToKPiA+ICsgICAgYVsxXSAr PSAxCj4gPiArICAgIGFbMl0gKz0gMQo+ID4gKyAgICBhWzNdICs9IDIKPiA+ICsgICAgYS5pbnNl cnQoYVswXSwgbmFtZSkKPiA+ICsgICAgYS5pbnNlcnQoYVsyXSwgZGVwZW5kKQo+ID4gKwo+ID4g Kwo+ID4gK2RlZiBfYXJyYXlfYXBwZW5kX3RvX2NvbnRlbnQoYSwgY29udGVudCk6Cj4gPiArICAg IGEuYXBwZW5kKGNvbnRlbnQpCj4gPiArCj4gPiArCj4gPiArZGVmIF9hcnJheV9nZXRfbmFtZShh LCBvYmplY3RfY2FjaGUpOgo+ID4gKyAgICAiIiIKPiA+ICsgICAgUmV0dXJuIHRoZSBuYW1lIG9m IGEgZGljdGlvbmFyeSByZXByZXNlbnRlZCBieSBhIGdpdmVuIGFycmF5Lgo+ID4gKwo+ID4gKyAg ICBAcGFyYW0gYTogQXJyYXkgcmVwcmVzZW50aW5nIGEgZGljdGlvbmFyeS4KPiA+ICsgICAgQHBh cmFtIG9iamVjdF9jYWNoZTogQSBsaXN0IG9mIHN0cmluZ3MgcmVmZXJlbmNlZCBieSBlbGVtZW50 cwo+IGluIHRoZSBhcnJheS4KPiA+ICsgICAgIiIiCj4gPiArICAgIHJldHVybiAiLiIuam9pbihb b2JqZWN0X2NhY2hlW2ldIGZvciBpIGluIGFbYVswXTphWzFdXV0pCj4gPiArCj4gPiArCj4gPiAr ZGVmIF9hcnJheV9nZXRfYWxsKGEsIG9iamVjdF9jYWNoZSk6Cj4gPiArICAgICIiIgo+ID4gKyAg ICBSZXR1cm4gYSA0LXR1cGxlIGNvbnRhaW5pbmcgYWxsIHRoZSBkYXRhIHN0b3JlZCBpbiBhIGdp dmVuCj4gYXJyYXksIGluIGEKPiA+ICsgICAgZm9ybWF0IHRoYXQgaXMgZWFzeSB0byB0dXJuIGlu dG8gYW4gYWN0dWFsIGRpY3Rpb25hcnkuCj4gPiArCj4gPiArICAgIEBwYXJhbSBhOiBBcnJheSBy ZXByZXNlbnRpbmcgYSBkaWN0aW9uYXJ5Lgo+ID4gKyAgICBAcGFyYW0gb2JqZWN0X2NhY2hlOiBB IGxpc3Qgb2Ygc3RyaW5ncyByZWZlcmVuY2VkIGJ5IGVsZW1lbnRzCj4gaW4gdGhlIGFycmF5Lgo+ ID4gKyAgICBAcmV0dXJuOiBBIDQtdHVwbGU6IChuYW1lLCBzaG9ydG5hbWUsIGRlcGVuZCwgY29u dGVudCksIGluCj4gd2hpY2ggYWxsCj4gPiArICAgICAgICBtZW1iZXJzIGFyZSBzdHJpbmdzIGV4 Y2VwdCBkZXBlbmQgd2hpY2ggaXMgYSBsaXN0IG9mCj4gc3RyaW5ncy4KPiA+ICsgICAgIiIiCj4g PiArICAgIG5hbWUgPSAiLiIuam9pbihbb2JqZWN0X2NhY2hlW2ldIGZvciBpIGluIGFbYVswXTph WzFdXV0pCj4gPiArICAgIHNob3J0bmFtZSA9ICIuIi5qb2luKFtvYmplY3RfY2FjaGVbaV0gZm9y IGkgaW4gYVthWzFdOmFbMl1dXSkKPiA+ICsgICAgY29udGVudCA9ICIiLmpvaW4oW29iamVjdF9j YWNoZVtpXSBmb3IgaSBpbiBhW2FbM106XV0pCj4gPiArICAgIGRlcGVuZCA9IFtdCj4gPiArICAg IHByZWZpeCA9ICIiCj4gPiArICAgIGZvciBuLCBkIGluIHppcChhW2FbMF06YVsxXV0sIGFbYVsy XTphWzNdXSk6Cj4gPiArICAgICAgICBmb3IgZGVwIGluIG9iamVjdF9jYWNoZVtkXS5zcGxpdCgp Ogo+ID4gKyAgICAgICAgICAgIGRlcGVuZC5hcHBlbmQocHJlZml4ICsgZGVwKQo+ID4gKyAgICAg ICAgcHJlZml4ICs9IG9iamVjdF9jYWNoZVtuXSArICIuIgo+ID4gKyAgICByZXR1cm4gbmFtZSwg c2hvcnRuYW1lLCBkZXBlbmQsIGNvbnRlbnQKPiA+ICsKPiA+ICAKPiA+IAo+ID4gIGlmIF9fbmFt ZV9fID09ICJfX21haW5fXyI6Cj4gPiAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNl cigpCj4gPiAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctZicsICctLWZpbGUnLCBkZXN0PSJmaWxl bmFtZSIsCj4gYWN0aW9uPSdzdG9yZScsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9 J3BhdGggdG8gYSBjb25maWcgZmlsZSB0aGF0IHdpbGwgYmUKPiBwYXJzZWQuICcKPiA+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAnSWYgbm90IHNwZWNpZmllZCwgd2lsbCBwYXJzZQo+IGt2 bV90ZXN0cy5jZmcgJwo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NhdGVkIGlu c2lkZSB0aGUga3ZtIHRlc3QgZGlyLicpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg J0lmIG5vdCBzcGVjaWZpZWQsIHdpbGwgcGFyc2UgdGVzdHMuY2ZnCj4gbG9jYXRlZCAnCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luc2lkZSB0aGUga3ZtIHRlc3QgZGlyLicpCj4g PiAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLXZlcmJvc2UnLCBkZXN0PSJkZWJ1ZyIsCj4gYWN0 aW9uPSdzdG9yZV90cnVlJywKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0naW5jbHVk ZSBkZWJ1ZyBtZXNzYWdlcyBpbiBjb25zb2xlCj4gb3V0cHV0JykKPiA+ICAKPiA+IEBAIC01MTgs OSArNjk4LDkgQEAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKPiA+ICAgICAgIyBIZXJlIHdl IGNvbmZpZ3VyZSB0aGUgc3RhbmQgYWxvbmUgcHJvZ3JhbSB0byB1c2UgdGhlCj4gYXV0b3Rlc3QK PiA+ICAgICAgIyBsb2dnaW5nIHN5c3RlbS4KPiA+ICAgICAgbG9nZ2luZ19tYW5hZ2VyLmNvbmZp Z3VyZV9sb2dnaW5nKEt2bUxvZ2dpbmdDb25maWcoKSwKPiB2ZXJib3NlPWRlYnVnKQo+ID4gLSAg ICBsaXN0ID0gY29uZmlnKGZpbGVuYW1lLCBkZWJ1Zz1kZWJ1ZykuZ2V0X2xpc3QoKQo+ID4gKyAg ICBkaWN0cyA9IGNvbmZpZyhmaWxlbmFtZSwgZGVidWc9ZGVidWcpLmdldF9nZW5lcmF0b3IoKQo+ ID4gICAgICBpID0gMAo+ID4gLSAgICBmb3IgZGljdCBpbiBsaXN0Ogo+ID4gKyAgICBmb3IgZGlj dCBpbiBkaWN0czoKPiA+ICAgICAgICAgIGxvZ2dpbmcuaW5mbygiRGljdGlvbmFyeSAjJWQ6Iiwg aSkKPiA+ICAgICAgICAgIGtleXMgPSBkaWN0LmtleXMoKQo+ID4gICAgICAgICAga2V5cy5zb3J0 KCkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQXV0b3Rl c3QgbWFpbGluZyBsaXN0CkF1dG90ZXN0QHRlc3Qua2VybmVsLm9yZwpodHRwOi8vdGVzdC5rZXJu ZWwub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9hdXRvdGVzdAo=