From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Meneghel Rodrigues Subject: Re: [PATCH] KVM test: KSM overcommit test v4 Date: Thu, 25 Feb 2010 17:14:06 -0300 Message-ID: <6ac58f4f1002251214m6c3cb3d7k433dd9d75a4d0e96@mail.gmail.com> References: <1266870554-16915-1-git-send-email-lmr@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: kvm@vger.kernel.org To: autotest@test.kernel.org Return-path: In-Reply-To: <1266870554-16915-1-git-send-email-lmr@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 RllJLCB0ZXN0IGFwcGxpZWQ6CgpodHRwOi8vYXV0b3Rlc3Qua2VybmVsLm9yZy9jaGFuZ2VzZXQv NDI2NAoKT24gTW9uLCBGZWIgMjIsIDIwMTAgYXQgNToyOSBQTSwgTHVjYXMgTWVuZWdoZWwgUm9k cmlndWVzCjxsbXJAcmVkaGF0LmNvbT4gd3JvdGU6Cj4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlv biBvZiBLU00gdGVzdGluZy4gVGhlIGJhc2ljIGlkZWEgYmVoaW5kIHRoZQo+IHRlc3QgaXMgdG8g c3RhcnQgZ3Vlc3RzLCBjb3B5IHRoZSBzY3JpcHQgYWxsb2NhdG9yLnB5IHRvIHRoZW0uIE9uY2UK PiBleGVjdXRlZCwgdGhlIHByb2Nlc3MgYWNjZXB0cyBpbnB1dCBjb21tYW5kcyBvbiBpdHMgbWFp biBsb29wLgo+Cj4gVGhlIHNjcmlwdCB3aWxsIGFsbG93IHRvIGZpbGwgdXAgbWVtb3J5IHBhZ2Vz IG9mIHRoZSBndWVzdHMsIGFjY29yZGluZwo+IHRvIHBhdHRlcm5zLCB0aGlzIHdheSBpdCdzIHBv c3NpYmxlIHRvIGhhdmUgYSBsYXJnZSBwb3J0aW9uIG9mIGd1ZXN0cwo+IG1lbW9yeSBleGFjdGx5 IHRoZSBzYW1lLCBzbyBLU00gY2FuIGRvIG1lbW9yeSBtZXJnZS4KPgo+IFRoZW4gd2UgY2FuIGVh c2lseSBzcGxpdCBtZW1vcnkgYnkgZmlsbGluZyBtZW1vcnkgb2Ygc29tZSBndWVzdHMgd2l0aAo+ IG90aGVyIHZhbHVlcywgYW5kIHZlcmlmeSBob3cgS1NNIGJlaGF2ZXMgYWNjb3JkaW5nIHRvIGVh Y2ggb3BlcmF0aW9uLgo+Cj4gwqBUZXN0IDoKPiDCoGFdIHNlcmlhbAo+IMKgIDEpIGluaXRpYWxp emUsIG1lcmdlIGFsbCBtZW0gdG8gc2luZ2xlIHBhZ2UKPiDCoCAyKSBzZXBhcmF0ZSBmaXJzdCBn dXNldCBtZW0KPiDCoCAzKSBzZXBhcmF0ZSByZXN0IG9mIGd1ZXN0IHVwIHRvIGZpbGwgYWxsIG1l bQo+IMKgIDQpIGtpbGwgYWxsIGd1ZXN0cyBleGNlcHQgZm9yIHRoZSBsYXN0Cj4gwqAgNSkgY2hl Y2sgaWYgbWVtIG9mIGxhc3QgZ3Vlc3QgaXMgb2sKPiDCoCA2KSBraWxsIGd1ZXN0Cj4KPiDCoGJd IHBhcmFsbGVsCj4gwqAgMSkgaW5pdGlhbGl6ZSwgbWVyZ2UgYWxsIG1lbSB0byBzaW5nbGUgcGFn ZQo+IMKgIDIpIHNlcGFyYXRlIG1lbSBvZiBndWVzdAo+IMKgIDMpIHZlcmlmaWNhdGlvbiBvZiBn dWVzdCBtZW0KPiDCoCA0KSBtZXJnZSBtZW0gdG8gb25lIGJsb2NrCj4gwqAgNSkgdmVyaWZpY2F0 aW9uIG9mIGd1ZXN0cyBtZW0KPiDCoCA2KSBzZXBhcmF0ZSBtZW0gb2YgZ3Vlc3RzIGJ5IDk2Qgo+ IMKgIDcpIGNoZWNrIGlmIG1lbSBpcyBhbGwgcmlnaHQKPiDCoCA4KSBraWxsIGd1ZXN0Cj4KPiDC oGFsbG9jYXRvci5weSAoY2xpZW50IHNpZGUgc2NyaXB0KQo+IMKgIEFmdGVyIHN0YXJ0IHRoZXkg d2FpdCBmb3IgY29tbWFuZCB3aXRjaCB0aGV5IG1ha2UgaW4gY2xpZW50IHNpZGUuCj4gwqAgbWVt X2ZpbGwgY2xhc3MgaW1wbGVtZW50IGNvbW1hbmRzIHRvIGZpbGwsIGNoZWNrIG1lbSBhbmQgcmV0 dXJuCj4gwqAgZXJyb3IgdG8gaG9zdC4KPgo+IE5vdGVzOgo+IEppcmkgYW5kIEx1a8OhxaEsIHBs ZWFzZSB2ZXJpZnkgdGhpcyBsYXN0IHZlcnNpb24sIHdlIGFyZSBjbG9zZQo+IHRvIGNvbW1pdGlu ZyB0aGlzIHRlc3QsIGF0IGxhc3QuCj4KPiBDaGFuZ2Vsb2c6Cj4KPiB2NCAtIENsZWFudXAgYW5k IGJ1Z2ZpeGluZyBmb3IgdGhlIHRlc3QsIGFmdGVyIGEgZ29vZCByb3VuZCBvZgo+IHRlc3Rpbmc6 Cj4gwqAqIE1vdmVkIHRoZSBob3N0X3Jlc2VydmVfbWVtb3J5IGFuZCBndWVzdF9yZXNlcnZlX21l bW9yeSB0bwo+IHRoZSBjb25maWcgZmlsZSwgaW4gb3JkZXIgdG8gaGF2ZSBtb3JlIGZsZXhpYmls aXR5LiBUaGUgMjU2TUIKPiBkZWZhdWx0IG1lbW9yeSByZXNlcnZlIGZvciBndWVzdHMgd2FzIG1h a2luZyBndWVzdHMgdG8gcnVuIG91dAo+IG9mIG1lbW9yeSBhbmQgdHJpZ2dlciB0aGUga2VybmVs IE9PTSBraWxsZXIsIGZyZXF1ZW50bHkga2lsbGluZwo+IHRoZSBzc2ggZGFlbW9uIGFuZCBydWlu aW5nIHRoZSB0ZXN0LCBvbiBhIGJhcmUgYm9uZXMgRmVkb3JhIDEyCj4gZ3Vlc3QuCj4gwqAqIEZp eGVkIHVwIGRlYnVnIGFuZCBpbmZvIG1lc3NhZ2VzIGluIGdlbmVyYWwgdG8gYmUgbW9yZSBjbGVh cgo+IGFuZCBjb25zaXN0ZW50Cj4gwqAqIFRoZSBwYXJhbGxlbCB0ZXN0IGhhZCAyIHJlcGVhdGVk IG9wZXJhdGlvbnMsIG1lbV9maWxsKHZhbHVlKQo+IGFuZCBhbm90aGVyIG1lbV9maWxsKHZhbHVl KS4gRnJvbSB0aGUgbG9nZ2luZyBtZXNzYWdlcywgaXQKPiBiZWNhbWUgY2xlYXIgdGhlIGF1dGhv ciBtZWFudCBhIG1lbV9maWxsKHZhbHVlKSBmb2xsb3dlZCBieSBhCj4gbWVtX2NoZWNrKHZhbHVl KQo+IMKgKiBNYWRlIE1lbUZpbGwuY2hlY2tfdmFsdWUoKSB0byBhY2NlcHQgYSB2YWx1ZSwgc3Vp dGFibGUgZm9yCj4gdGVzdGluZyBtZW1vcnkgY29udGVudHMgdGhhdCB3ZXJlIG5vdCBmaWxsZWQg YnkgdGhlIGRlZmF1bHQKPiBzdGF0aWMgdmFsdWUKPiDCoCogRmFjdG9yZWQgYWxsb2NhdG9yLnB5 IG9wZXJhdGlvbnMgdG8gYSBmdW5jdGlvbiwgc2F2ZWQgdXAgYQo+IGdvb2QgZGVhbCBvZiBjb2Rl Lgo+IMKgKiBHZW5lcmFsIGNvZGUgY2xlYW51cCBhbmQgY29kaW5nIHN0eWxlCj4KPiBTaWduZWQt b2ZmLWJ5OiBKaXJpIFp1cGthIDxqenVwa2FAcmVkaGF0LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBM dWvDocWhIERva3RvcjxsZG9rdG9yQHJlZGhhdC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTHVjYXMg TWVuZWdoZWwgUm9kcmlndWVzIDxsbXJAcmVkaGF0LmNvbT4KPiAtLS0KPiDCoGNsaWVudC90ZXN0 cy9rdm0va3ZtX3Rlc3RfdXRpbHMucHkgwqAgwqAgwqAgfCDCoCAzNiArKy0KPiDCoGNsaWVudC90 ZXN0cy9rdm0va3ZtX3V0aWxzLnB5IMKgIMKgIMKgIMKgIMKgIMKgfCDCoCAxNiArCj4gwqBjbGll bnQvdGVzdHMva3ZtL2t2bV92bS5weSDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8IMKgIDE3ICsKPiDC oGNsaWVudC90ZXN0cy9rdm0vc2NyaXB0cy9hbGxvY2F0b3IucHkgwqAgwqB8IMKgMjM0ICsrKysr KysrKysrKysKPiDCoGNsaWVudC90ZXN0cy9rdm0vdGVzdHMva3NtX292ZXJjb21taXQucHkgfCDC oDU1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiDCoGNsaWVudC90ZXN0cy9rdm0v dGVzdHNfYmFzZS5jZmcuc2FtcGxlIMKgIHwgwqAgMjMgKysKPiDCoDYgZmlsZXMgY2hhbmdlZCwg ODg0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQg Y2xpZW50L3Rlc3RzL2t2bS9zY3JpcHRzL2FsbG9jYXRvci5weQo+IMKgY3JlYXRlIG1vZGUgMTAw NjQ0IGNsaWVudC90ZXN0cy9rdm0vdGVzdHMva3NtX292ZXJjb21taXQucHkKPgo+IGRpZmYgLS1n aXQgYS9jbGllbnQvdGVzdHMva3ZtL2t2bV90ZXN0X3V0aWxzLnB5IGIvY2xpZW50L3Rlc3RzL2t2 bS9rdm1fdGVzdF91dGlscy5weQo+IGluZGV4IDAyZWMwY2YuLjdkOTZkNmUgMTAwNjQ0Cj4gLS0t IGEvY2xpZW50L3Rlc3RzL2t2bS9rdm1fdGVzdF91dGlscy5weQo+ICsrKyBiL2NsaWVudC90ZXN0 cy9rdm0va3ZtX3Rlc3RfdXRpbHMucHkKPiBAQCAtMjIsNyArMjIsOCBAQCBNb3JlIHNwZWNpZmlj YWxseToKPiDCoCIiIgo+Cj4gwqBpbXBvcnQgdGltZSwgb3MsIGxvZ2dpbmcsIHJlLCBjb21tYW5k cwo+IC1mcm9tIGF1dG90ZXN0X2xpYi5jbGllbnQuY29tbW9uX2xpYiBpbXBvcnQgdXRpbHMsIGVy cm9yCj4gK2Zyb20gYXV0b3Rlc3RfbGliLmNsaWVudC5jb21tb25fbGliIGltcG9ydCBlcnJvcgo+ ICtmcm9tIGF1dG90ZXN0X2xpYi5jbGllbnQuYmluIGltcG9ydCB1dGlscwo+IMKgaW1wb3J0IGt2 bV91dGlscywga3ZtX3ZtLCBrdm1fc3VicHJvY2Vzcwo+Cj4KPiBAQCAtMjAzLDMgKzIwNCwzNiBA QCBkZWYgZ2V0X3RpbWUoc2Vzc2lvbiwgdGltZV9jb21tYW5kLCB0aW1lX2ZpbHRlcl9yZSwgdGlt ZV9mb3JtYXQpOgo+IMKgIMKgIHMgPSByZS5maW5kYWxsKHRpbWVfZmlsdGVyX3JlLCBzKVswXQo+ IMKgIMKgIGd1ZXN0X3RpbWUgPSB0aW1lLm1rdGltZSh0aW1lLnN0cnB0aW1lKHMsIHRpbWVfZm9y bWF0KSkKPiDCoCDCoCByZXR1cm4gKGhvc3RfdGltZSwgZ3Vlc3RfdGltZSkKPiArCj4gKwo+ICtk ZWYgZ2V0X21lbW9yeV9pbmZvKGx2bXMpOgo+ICsgwqAgwqAiIiIKPiArIMKgIMKgR2V0IG1lbW9y eSBpbmZvcm1hdGlvbiBmcm9tIGhvc3QgYW5kIGd1ZXN0cyBpbiBmb3JtYXQ6Cj4gKyDCoCDCoEhv c3Q6IG1lbWZyZWUgPSBYWFhNOyBHdWVzdHMgbWVtc2ggPSB7WFhYLFhYWCwuLi59Cj4gKwo+ICsg wqAgwqBAcGFyYW1zIGx2bXM6IExpc3Qgb2YgVk0gb2JqZWN0cwo+ICsgwqAgwqBAcmV0dXJuOiBT dHJpbmcgd2l0aCBtZW1vcnkgaW5mbyByZXBvcnQKPiArIMKgIMKgIiIiCj4gKyDCoCDCoGlmIG5v dCBpc2luc3RhbmNlKGx2bXMsIGxpc3QpOgo+ICsgwqAgwqAgwqAgwqByYWlzZSBlcnJvci5UZXN0 RXJyb3IoIkludmFsaWQgbGlzdCBwYXNzZWQgdG8gZ2V0X3N0YXQ6ICVzICIgJSBsdm1zKQo+ICsK PiArIMKgIMKgdHJ5Ogo+ICsgwqAgwqAgwqAgwqBtZW1pbmZvID0gIkhvc3Q6IG1lbWZyZWUgPSAi Cj4gKyDCoCDCoCDCoCDCoG1lbWluZm8gKz0gc3RyKGludCh1dGlscy5mcmVlbWVtdG90YWwoKSkg LyAxMDI0KSArICJNOyAiCj4gKyDCoCDCoCDCoCDCoG1lbWluZm8gKz0gInN3YXBmcmVlID0gIgo+ ICsgwqAgwqAgwqAgwqBtZiA9IGludCh1dGlscy5yZWFkX2Zyb21fbWVtaW5mbygiU3dhcEZyZWUi KSkgLyAxMDI0Cj4gKyDCoCDCoCDCoCDCoG1lbWluZm8gKz0gc3RyKG1mKSArICJNOyAiCj4gKyDC oCDCoGV4Y2VwdCBFeGNlcHRpb24sIGU6Cj4gKyDCoCDCoCDCoCDCoHJhaXNlIGVycm9yLlRlc3RG YWlsKCJDb3VsZCBub3QgZmV0Y2ggaG9zdCBmcmVlIG1lbW9yeSBpbmZvLCAiCj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAicmVhc29uOiAlcyIgJSBlKQo+ICsK PiArIMKgIMKgbWVtaW5mbyArPSAiR3Vlc3RzIG1lbXNoID0geyIKPiArIMKgIMKgZm9yIHZtIGlu IGx2bXM6Cj4gKyDCoCDCoCDCoCDCoHNobSA9IHZtLmdldF9zaGFyZWRfbWVtaW5mbygpCj4gKyDC oCDCoCDCoCDCoGlmIHNobSBpcyBOb25lOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqByYWlzZSBlcnJv ci5UZXN0RXJyb3IoIkNvdWxkIG5vdCBnZXQgc2hhcmVkIG1lbWluZm8gZnJvbSAiCj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCJWTSAlcyIgJSB2 bSkKPiArIMKgIMKgIMKgIMKgbWVtaW5mbyArPSAiJWRNOyAiICUgc2htCj4gKyDCoCDCoG1lbWlu Zm8gPSBtZW1pbmZvWzA6LTJdICsgIn0iCj4gKwo+ICsgwqAgwqByZXR1cm4gbWVtaW5mbwo+IGRp ZmYgLS1naXQgYS9jbGllbnQvdGVzdHMva3ZtL2t2bV91dGlscy5weSBiL2NsaWVudC90ZXN0cy9r dm0va3ZtX3V0aWxzLnB5Cj4gaW5kZXggZTE1NTk1MS4uNDU2NWRjMSAxMDA2NDQKPiAtLS0gYS9j bGllbnQvdGVzdHMva3ZtL2t2bV91dGlscy5weQo+ICsrKyBiL2NsaWVudC90ZXN0cy9rdm0va3Zt X3V0aWxzLnB5Cj4gQEAgLTY5Niw2ICs2OTYsMjIgQEAgZGVmIGdlbmVyYXRlX3JhbmRvbV9zdHJp bmcobGVuZ3RoKToKPiDCoCDCoCByZXR1cm4gc3RyCj4KPgo+ICtkZWYgZ2VuZXJhdGVfdG1wX2Zp bGVfbmFtZShmaWxlLCBleHQ9Tm9uZSwgZGlyPScvdG1wLycpOgo+ICsgwqAgwqAiIiIKPiArIMKg IMKgUmV0dXJucyBhIHRlbXBvcmFyeSBmaWxlIG5hbWUuIFRoZSBmaWxlIGlzIG5vdCBjcmVhdGVk Lgo+ICsgwqAgwqAiIiIKPiArIMKgIMKgd2hpbGUgVHJ1ZToKPiArIMKgIMKgIMKgIMKgZmlsZV9u YW1lID0gKGZpbGUgKyAnLScgKyB0aW1lLnN0cmZ0aW1lKCIlWSVtJWQtJUglTSVTLSIpICsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdlbmVyYXRlX3JhbmRvbV9zdHJpbmcoNCkp Cj4gKyDCoCDCoCDCoCDCoGlmIGV4dDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgZmlsZV9uYW1lICs9 ICcuJyArIGV4dAo+ICsgwqAgwqAgwqAgwqBmaWxlX25hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCBm aWxlX25hbWUpCj4gKyDCoCDCoCDCoCDCoGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlX25hbWUp Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhawo+ICsKPiArIMKgIMKgcmV0dXJuIGZpbGVfbmFt ZQo+ICsKPiArCj4gwqBkZWYgZm9ybWF0X3N0cl9mb3JfbWVzc2FnZShzdHIpOgo+IMKgIMKgICIi Igo+IMKgIMKgIEZvcm1hdCBzdHIgc28gdGhhdCBpdCBjYW4gYmUgYXBwZW5kZWQgdG8gYSBtZXNz YWdlLgo+IGRpZmYgLS1naXQgYS9jbGllbnQvdGVzdHMva3ZtL2t2bV92bS5weSBiL2NsaWVudC90 ZXN0cy9rdm0va3ZtX3ZtLnB5Cj4gaW5kZXggYzE2NmFjOS4uOTIxNDE0ZCAxMDA3NTUKPiAtLS0g YS9jbGllbnQvdGVzdHMva3ZtL2t2bV92bS5weQo+ICsrKyBiL2NsaWVudC90ZXN0cy9rdm0va3Zt X3ZtLnB5Cj4gQEAgLTc0OCw2ICs3NDgsMjMgQEAgY2xhc3MgVk06Cj4gwqAgwqAgwqAgwqAgcmV0 dXJuIHNlbGYucHJvY2Vzcy5nZXRfcGlkKCkKPgo+Cj4gKyDCoCDCoGRlZiBnZXRfc2hhcmVkX21l bWluZm8oc2VsZik6Cj4gKyDCoCDCoCDCoCDCoCIiIgo+ICsgwqAgwqAgwqAgwqBSZXR1cm5zIHRo ZSBWTSdzIHNoYXJlZCBtZW1vcnkgaW5mb3JtYXRpb24uCj4gKwo+ICsgwqAgwqAgwqAgwqBAcmV0 dXJuOiBTaGFyZWQgbWVtb3J5IHVzZWQgYnkgVk0gKE1CKQo+ICsgwqAgwqAgwqAgwqAiIiIKPiAr IMKgIMKgIMKgIMKgaWYgc2VsZi5pc19kZWFkKCk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGxvZ2dp bmcuZXJyb3IoIkNvdWxkIG5vdCBnZXQgc2hhcmVkIG1lbW9yeSBpbmZvIGZyb20gZGVhZCBWTS4i KQo+ICsgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gTm9uZQo+ICsKPiArIMKgIMKgIMKgIMKgY21k ID0gImNhdCAvcHJvYy8lZC9zdGF0bSIgJSBzZWxmLnBhcmFtcy5nZXQoJ3BpZF8nICsgc2VsZi5u YW1lKQo+ICsgwqAgwqAgwqAgwqBzaG0gPSBpbnQob3MucG9wZW4oY21kKS5yZWFkbGluZSgpLnNw bGl0KClbMl0pCj4gKyDCoCDCoCDCoCDCoCMgc3RhdG0gc3RvcmVzIGluZm9ybWF0aW9ucyBpbiBw YWdlcywgdHJhbnNsYXRlIGl0IHRvIE1CCj4gKyDCoCDCoCDCoCDCoHNobSA9IHNobSAqIDQgLyAx MDI0Cj4gKyDCoCDCoCDCoCDCoHJldHVybiBzaG0KPiArCj4gKwo+IMKgIMKgIGRlZiByZW1vdGVf bG9naW4oc2VsZiwgbmljX2luZGV4PTAsIHRpbWVvdXQ9MTApOgo+IMKgIMKgIMKgIMKgICIiIgo+ IMKgIMKgIMKgIMKgIExvZyBpbnRvIHRoZSBndWVzdCB2aWEgU1NIL1RlbG5ldC9OZXRjYXQuCj4g ZGlmZiAtLWdpdCBhL2NsaWVudC90ZXN0cy9rdm0vc2NyaXB0cy9hbGxvY2F0b3IucHkgYi9jbGll bnQvdGVzdHMva3ZtL3NjcmlwdHMvYWxsb2NhdG9yLnB5Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi4xMDM2ODkzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2NsaWVudC90 ZXN0cy9rdm0vc2NyaXB0cy9hbGxvY2F0b3IucHkKPiBAQCAtMCwwICsxLDIzNCBAQAo+ICsjIS91 c3IvYmluL3B5dGhvbgo+ICsjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQo+ICsiIiIKPiArQXV4aWxp YXJ5IHNjcmlwdCB1c2VkIHRvIGFsbG9jYXRlIG1lbW9yeSBvbiBndWVzdHMuCj4gKwo+ICtAY29w eXJpZ2h0OiAyMDA4LTIwMDkgUmVkIEhhdCBJbmMuCj4gK0BhdXRob3I6IEppcmkgWnVwa2EgKGp6 dXBrYUByZWRoYXQuY29tKQo+ICsiIiIKPiArCj4gKwo+ICtpbXBvcnQgb3MsIGFycmF5LCBzeXMs IHN0cnVjdCwgcmFuZG9tLCBjb3B5LCBpbnNwZWN0LCB0ZW1wZmlsZSwgZGF0ZXRpbWUKPiArCj4g K1BBR0VfU0laRSA9IDQwOTYgIyBtYWNoaW5lIHBhZ2Ugc2l6ZQo+ICsKPiArCj4gK2NsYXNzIE1l bUZpbGwob2JqZWN0KToKPiArIMKgIMKgIiIiCj4gKyDCoCDCoEZpbGxzIGd1ZXN0IG1lbW9yeSBh Y2NvcmRpbmcgdG8gY2VydGFpbiBwYXR0ZXJucy4KPiArIMKgIMKgIiIiCj4gKyDCoCDCoGRlZiBf X2luaXRfXyhzZWxmLCBtZW0sIHN0YXRpY192YWx1ZSwgcmFuZG9tX2tleSk6Cj4gKyDCoCDCoCDC oCDCoCIiIgo+ICsgwqAgwqAgwqAgwqBDb25zdHJ1Y3RvciBvZiBNZW1GaWxsIGNsYXNzLgo+ICsK PiArIMKgIMKgIMKgIMKgQHBhcmFtIG1lbTogQW1vdW50IG9mIHRlc3QgbWVtb3J5IGluIE1CLgo+ ICsgwqAgwqAgwqAgwqBAcGFyYW0gcmFuZG9tX2tleTogU2VlZCBvZiByYW5kb20gc2VyaWVzIHVz ZWQgZm9yIGZpbGwgdXAgbWVtb3J5Lgo+ICsgwqAgwqAgwqAgwqBAcGFyYW0gc3RhdGljX3ZhbHVl OiBWYWx1ZSB1c2VkIHRvIGZpbGwgYWxsIG1lbW9yeS4KPiArIMKgIMKgIMKgIMKgIiIiCj4gKyDC oCDCoCDCoCDCoGlmIChzdGF0aWNfdmFsdWUgPCAwIG9yIHN0YXRpY192YWx1ZSA+IDI1NSk6Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoHByaW50ICgiRkFJTDogSW5pdGlhbGl6YXRpb24gc3RhdGljIHZh bHVlIgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgImNhbiBiZSBvbmx5IGluIHJhbmdl ICgwLi4yNTUpIikKPiArIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuCj4gKwo+ICsgwqAgwqAgwqAg wqBzZWxmLnRtcGRwID0gdGVtcGZpbGUubWtkdGVtcCgpCj4gKyDCoCDCoCDCoCDCoHJldF9jb2Rl ID0gb3Muc3lzdGVtKCJtb3VudCAtbyBzaXplPSVkTSB0bXBmcyAlcyAtdCB0bXBmcyIgJQo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKChtZW0gKyAyNSksIHNl bGYudG1wZHApKQo+ICsgwqAgwqAgwqAgwqBpZiByZXRfY29kZSAhPSAwOgo+ICsgwqAgwqAgwqAg wqAgwqAgwqBpZiBvcy5nZXR1aWQoKSAhPSAwOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBw cmludCAoIkZBSUw6IFVuYWJsZSB0byBtb3VudCB0bXBmcyAiCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCAiKGxpa2VseSBjYXVzZTogeW91IGFyZSBub3Qgcm9vdCkiKQo+ICsg wqAgwqAgwqAgwqAgwqAgwqBlbHNlOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwcmludCAi RkFJTDogVW5hYmxlIHRvIG1vdW50IHRtcGZzIgo+ICsgwqAgwqAgwqAgwqBlbHNlOgo+ICsgwqAg wqAgwqAgwqAgwqAgwqBzZWxmLmYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKHByZWZpeD0nbWVt JywgZGlyPXNlbGYudG1wZHApCj4gKyDCoCDCoCDCoCDCoCDCoCDCoHNlbGYuYWxsb2NhdGVfYnkg PSAnTCcKPiArIMKgIMKgIMKgIMKgIMKgIMKgc2VsZi5ucGFnZXMgPSAobWVtICogMTAyNCAqIDEw MjQpIC8gUEFHRV9TSVpFCj4gKyDCoCDCoCDCoCDCoCDCoCDCoHNlbGYucmFuZG9tX2tleSA9IHJh bmRvbV9rZXkKPiArIMKgIMKgIMKgIMKgIMKgIMKgc2VsZi5zdGF0aWNfdmFsdWUgPSBzdGF0aWNf dmFsdWUKPiArIMKgIMKgIMKgIMKgIMKgIMKgcHJpbnQgIlBBU1M6IEluaXRpYWxpemF0aW9uIgo+ ICsKPiArCj4gKyDCoCDCoGRlZiBfX2RlbF9fKHNlbGYpOgo+ICsgwqAgwqAgwqAgwqBpZiBvcy5w YXRoLmlzbW91bnQoc2VsZi50bXBkcCk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHNlbGYuZi5jbG9z ZSgpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoG9zLnN5c3RlbSgidW1vdW50ICVzIiAlIChzZWxmLnRt cGRwKSkKPiArCj4gKwo+ICsgwqAgwqBkZWYgY29tcGFyZV9wYWdlKHNlbGYsIG9yaWdpbmFsLCBp bm1lbSk6Cj4gKyDCoCDCoCDCoCDCoCIiIgo+ICsgwqAgwqAgwqAgwqBDb21wYXJlIHBhZ2VzIG9m IG1lbW9yeSBhbmQgcHJpbnQgdGhlIGRpZmZlcmVuY2VzIGZvdW5kLgo+ICsKPiArIMKgIMKgIMKg IMKgQHBhcmFtIG9yaWdpbmFsOiBEYXRhIHRoYXQgd2FzIGV4cGVjdGVkIHRvIGJlIGluIG1lbW9y eS4KPiArIMKgIMKgIMKgIMKgQHBhcmFtIGlubWVtOiBEYXRhIGluIG1lbW9yeS4KPiArIMKgIMKg IMKgIMKgIiIiCj4gKyDCoCDCoCDCoCDCoGZvciBpcCBpbiByYW5nZShQQUdFX1NJWkUgLyBvcmln aW5hbC5pdGVtc2l6ZSk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGlmIChub3Qgb3JpZ2luYWxbaXBd ID09IGlubWVtW2lwXSk6ICMgZmluZCB3aGljaCBpdGVtIGlzIHdyb25nCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoG9yaWdpbmFscCA9IGFycmF5LmFycmF5KCJCIikKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgaW5tZW1wID0gYXJyYXkuYXJyYXkoIkIiKQo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBvcmlnaW5hbHAuZnJvbXN0cmluZyhvcmlnaW5hbFtpcDppcCsxXS50b3N0cmluZygp KQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbm1lbXAuZnJvbXN0cmluZyhpbm1lbVtpcDpp cCsxXS50b3N0cmluZygpKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmb3IgaWIgaW4gcmFu Z2UobGVuKG9yaWdpbmFscCkpOiAjIGZpbmQgd3JvbmcgYnl0ZSBpbiBpdGVtCj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIG5vdCAob3JpZ2luYWxwW2liXSA9PSBpbm1lbXBbaWJd KToKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcG9zaXRpb24gPSAoc2Vs Zi5mLnRlbGwoKSAtIFBBR0VfU0laRSArIGlwICoKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgb3JpZ2luYWwuaXRlbXNpemUgKyBpYikKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcHJpbnQgKCJNZW0gZXJyb3Igb24g cG9zaXRpb24gJWQgd2FudGVkIDB4JUx4IGFuZCBpcyAiCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiMHglTHgiICUgKHBvc2l0aW9uLCBvcmlnaW5hbHBb aWJdLCBpbm1lbXBbaWJdKSkKPiArCj4gKwo+ICsgwqAgwqBkZWYgdmFsdWVfcGFnZShzZWxmLCB2 YWx1ZSk6Cj4gKyDCoCDCoCDCoCDCoCIiIgo+ICsgwqAgwqAgwqAgwqBDcmVhdGUgcGFnZSBmaWxs ZWQgYnkgdmFsdWUuCj4gKwo+ICsgwqAgwqAgwqAgwqBAcGFyYW0gdmFsdWU6IFN0cmluZyB3ZSB3 YW50IHRvIGZpbGwgdGhlIHBhZ2Ugd2l0aC4KPiArIMKgIMKgIMKgIMKgQHJldHVybjogcmV0dXJu IGFycmF5IG9mIGJ5dGVzIHNpemUgUEFHRV9TSVpFLgo+ICsgwqAgwqAgwqAgwqAiIiIKPiArIMKg IMKgIMKgIMKgYSA9IGFycmF5LmFycmF5KCJCIikKPiArIMKgIMKgIMKgIMKgZm9yIGkgaW4gcmFu Z2UoUEFHRV9TSVpFIC8gYS5pdGVtc2l6ZSk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRyeToKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYS5hcHBlbmQodmFsdWUpCj4gKyDCoCDCoCDCoCDCoCDC oCDCoGV4Y2VwdDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcHJpbnQgIkZBSUw6IFZhbHVl IGNhbiBiZSBvbmx5IGluIHJhbmdlICgwLi4yNTUpIgo+ICsgwqAgwqAgwqAgwqByZXR1cm4gYQo+ ICsKPiArCj4gKyDCoCDCoGRlZiByYW5kb21fcGFnZShzZWxmLCBzZWVkKToKPiArIMKgIMKgIMKg IMKgIiIiCj4gKyDCoCDCoCDCoCDCoENyZWF0ZSBwYWdlIGZpbGxlZCBieSBzdGF0aWMgcmFuZG9t IHNlcmllcy4KPiArCj4gKyDCoCDCoCDCoCDCoEBwYXJhbSBzZWVkOiBTZWVkIG9mIHJhbmRvbSBz ZXJpZXMuCj4gKyDCoCDCoCDCoCDCoEByZXR1cm46IFN0YXRpYyByYW5kb20gYXJyYXkgc2VyaWVz Lgo+ICsgwqAgwqAgwqAgwqAiIiIKPiArIMKgIMKgIMKgIMKgcmFuZG9tLnNlZWQoc2VlZCkKPiAr IMKgIMKgIMKgIMKgYSA9IGFycmF5LmFycmF5KHNlbGYuYWxsb2NhdGVfYnkpCj4gKyDCoCDCoCDC oCDCoGZvciBpIGluIHJhbmdlKFBBR0VfU0laRSAvIGEuaXRlbXNpemUpOgo+ICsgwqAgwqAgwqAg wqAgwqAgwqBhLmFwcGVuZChyYW5kb20ucmFuZHJhbmdlKDAsIHN5cy5tYXhpbnQpKQo+ICsgwqAg wqAgwqAgwqByZXR1cm4gYQo+ICsKPiArCj4gKyDCoCDCoGRlZiB2YWx1ZV9maWxsKHNlbGYsIHZh bHVlPU5vbmUpOgo+ICsgwqAgwqAgwqAgwqAiIiIKPiArIMKgIMKgIMKgIMKgRmlsbCBtZW1vcnkg cGFnZSBieSBwYWdlLCB3aXRoIHZhbHVlIGdlbmVyYXRlZCB3aXRoIHZhbHVlX3BhZ2UuCj4gKwo+ ICsgwqAgwqAgwqAgwqBAcGFyYW0gdmFsdWU6IFBhcmFtZXRlciB0byBiZSBwYXNzZWQgdG8gdmFs dWVfcGFnZS4gTm9uZSB0byBqdXN0IHVzZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB3aGF0 J3Mgb24gdGhlIGF0dHJpYnV0ZSBzdGF0aWNfdmFsdWUuCj4gKyDCoCDCoCDCoCDCoCIiIgo+ICsg wqAgwqAgwqAgwqBzZWxmLmYuc2VlaygwKQo+ICsgwqAgwqAgwqAgwqBpZiB2YWx1ZSBpcyBOb25l Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqB2YWx1ZSA9IHNlbGYuc3RhdGljX3ZhbHVlCj4gKyDCoCDC oCDCoCDCoHBhZ2UgPSBzZWxmLnZhbHVlX3BhZ2UodmFsdWUpCj4gKyDCoCDCoCDCoCDCoGZvciBw YWdlcyBpbiByYW5nZShzZWxmLm5wYWdlcyk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHBhZ2UudG9m aWxlKHNlbGYuZikKPiArIMKgIMKgIMKgIMKgcHJpbnQgIlBBU1M6IE1lbSB2YWx1ZSBmaWxsIgo+ ICsKPiArCj4gKyDCoCDCoGRlZiB2YWx1ZV9jaGVjayhzZWxmLCB2YWx1ZT1Ob25lKToKPiArIMKg IMKgIMKgIMKgIiIiCj4gKyDCoCDCoCDCoCDCoENoZWNrIG1lbW9yeSB0byBzZWUgaWYgZGF0YSBp cyBjb3JyZWN0Lgo+ICsKPiArIMKgIMKgIMKgIMKgQHBhcmFtIHZhbHVlOiBQYXJhbWV0ZXIgdG8g YmUgcGFzc2VkIHRvIHZhbHVlX3BhZ2UuIE5vbmUgdG8ganVzdCB1c2UKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgd2hhdCdzIG9uIHRoZSBhdHRyaWJ1dGUgc3RhdGljX3ZhbHVlLgo+ICsgwqAg wqAgwqAgwqBAcmV0dXJuOiBpZiBkYXRhIGluIG1lbW9yeSBpcyBjb3JyZWN0IHJldHVybiBQQVNT Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGVsc2UgcHJpbnQgc29tZSB3cm9uZyBkYXRhIGFu ZCByZXR1cm4gRkFJTAo+ICsgwqAgwqAgwqAgwqAiIiIKPiArIMKgIMKgIMKgIMKgc2VsZi5mLnNl ZWsoMCkKPiArIMKgIMKgIMKgIMKgZSA9IDIKPiArIMKgIMKgIMKgIMKgZmFpbHVyZSA9IEZhbHNl Cj4gKyDCoCDCoCDCoCDCoGlmIHZhbHVlIGlzIE5vbmU6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHZh bHVlID0gc2VsZi5zdGF0aWNfdmFsdWUKPiArIMKgIMKgIMKgIMKgcGFnZSA9IHNlbGYudmFsdWVf cGFnZSh2YWx1ZSkKPiArIMKgIMKgIMKgIMKgZm9yIHBhZ2VzIGluIHJhbmdlKHNlbGYubnBhZ2Vz KToKPiArIMKgIMKgIMKgIMKgIMKgIMKgcGYgPSBhcnJheS5hcnJheSgiQiIpCj4gKyDCoCDCoCDC oCDCoCDCoCDCoHBmLmZyb21maWxlKHNlbGYuZiwgUEFHRV9TSVpFIC8gcGYuaXRlbXNpemUpCj4g KyDCoCDCoCDCoCDCoCDCoCDCoGlmIG5vdCAocGFnZSA9PSBwZik6Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGZhaWx1cmUgPSBUcnVlCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHNlbGYu Y29tcGFyZV9wYWdlKHBhZ2UsIHBmKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBlID0gZSAt IDEKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgZSA9PSAwOgo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBicmVhawo+ICsgwqAgwqAgwqAgwqBpZiBmYWlsdXJlOgo+ICsgwqAg wqAgwqAgwqAgwqAgwqBwcmludCAiRkFJTDogdmFsdWUgdmVyaWZpY2F0aW9uIgo+ICsgwqAgwqAg wqAgwqBlbHNlOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqBwcmludCAiUEFTUzogdmFsdWUgdmVyaWZp Y2F0aW9uIgo+ICsKPiArCj4gKyDCoCDCoGRlZiBzdGF0aWNfcmFuZG9tX2ZpbGwoc2VsZiwgbl9i eXRlc19vbl9lbmQ9UEFHRV9TSVpFKToKPiArIMKgIMKgIMKgIMKgIiIiCj4gKyDCoCDCoCDCoCDC oEZpbGwgbWVtb3J5IGJ5IHBhZ2Ugd2l0aCBzdGF0aWMgcmFuZG9tIHNlcmllcyB3aXRoIGFkZGVk IHNwZWNpYWwgdmFsdWUKPiArIMKgIMKgIMKgIMKgb24gcmFuZG9tIHBsYWNlIGluIHBhZ2VzLgo+ ICsKPiArIMKgIMKgIMKgIMKgQHBhcmFtIG5fYnl0ZXNfb25fZW5kOiBob3cgbWFueSBieXRlcyBv biB0aGUgZW5kIG9mIHBhZ2UgY2FuIGJlIGNoYW5nZWQuCj4gKyDCoCDCoCDCoCDCoEByZXR1cm46 IFBBU1MuCj4gKyDCoCDCoCDCoCDCoCIiIgo+ICsgwqAgwqAgwqAgwqBzZWxmLmYuc2VlaygwKQo+ ICsgwqAgwqAgwqAgwqBwYWdlID0gc2VsZi5yYW5kb21fcGFnZShzZWxmLnJhbmRvbV9rZXkpCj4g KyDCoCDCoCDCoCDCoHJhbmRvbS5zZWVkKHNlbGYucmFuZG9tX2tleSkKPiArIMKgIMKgIMKgIMKg cCA9IGNvcHkuY29weShwYWdlKQo+ICsKPiArIMKgIMKgIMKgIMKgdF9zdGFydCA9IGRhdGV0aW1l LmRhdGV0aW1lLm5vdygpCj4gKyDCoCDCoCDCoCDCoGZvciBwYWdlcyBpbiByYW5nZShzZWxmLm5w YWdlcyk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHJhbmQgPSByYW5kb20ucmFuZGludCgoKFBBR0Vf U0laRSAvIHBhZ2UuaXRlbXNpemUpIC0gMSkgLQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAobl9ieXRlc19vbl9lbmQgLyBwYWdlLml0ZW1zaXpl KSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg KFBBR0VfU0laRS9wYWdlLml0ZW1zaXplKSAtIDEpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoHBbcmFu ZF0gPSBwYWdlcwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBwLnRvZmlsZShzZWxmLmYpCj4gKyDCoCDC oCDCoCDCoCDCoCDCoHBbcmFuZF0gPSBwYWdlW3JhbmRdCj4gKwo+ICsgwqAgwqAgwqAgwqB0X2Vu ZCA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpCj4gKyDCoCDCoCDCoCDCoGRlbHRhID0gdF9lbmQg LSB0X3N0YXJ0Cj4gKyDCoCDCoCDCoCDCoG1pbGlzZWMgPSBkZWx0YS5taWNyb3NlY29uZHMgLyAx ZTMgKyBkZWx0YS5zZWNvbmRzICogMWUzCj4gKyDCoCDCoCDCoCDCoHByaW50ICJQQVNTOiBmaWxs aW5nIGR1cmF0aW9uID0gJUxkIG1zIiAlIG1pbGlzZWMKPiArCj4gKwo+ICsgwqAgwqBkZWYgc3Rh dGljX3JhbmRvbV92ZXJpZnkoc2VsZiwgbl9ieXRlc19vbl9lbmQ9UEFHRV9TSVpFKToKPiArIMKg IMKgIMKgIMKgIiIiCj4gKyDCoCDCoCDCoCDCoENoZWNrIG1lbW9yeSB0byBzZWUgaWYgaXQgY29u dGFpbnMgY29ycmVjdCBjb250ZW50cy4KPiArCj4gKyDCoCDCoCDCoCDCoEByZXR1cm46IGlmIGRh dGEgaW4gbWVtb3J5IGlzIGNvcnJlY3QgcmV0dXJuIFBBU1MKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgZWxzZSBwcmludCBzb21lIHdyb25nIGRhdGEgYW5kIHJldHVybiBGQUlMLgo+ICsgwqAg wqAgwqAgwqAiIiIKPiArIMKgIMKgIMKgIMKgc2VsZi5mLnNlZWsoMCkKPiArIMKgIMKgIMKgIMKg ZSA9IDIKPiArIMKgIMKgIMKgIMKgcGFnZSA9IHNlbGYucmFuZG9tX3BhZ2Uoc2VsZi5yYW5kb21f a2V5KQo+ICsgwqAgwqAgwqAgwqByYW5kb20uc2VlZChzZWxmLnJhbmRvbV9rZXkpCj4gKyDCoCDC oCDCoCDCoHAgPSBjb3B5LmNvcHkocGFnZSkKPiArIMKgIMKgIMKgIMKgZmFpbHVyZSA9IEZhbHNl Cj4gKyDCoCDCoCDCoCDCoGZvciBwYWdlcyBpbiByYW5nZShzZWxmLm5wYWdlcyk6Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoHJhbmQgPSByYW5kb20ucmFuZGludCgoKFBBR0VfU0laRS9wYWdlLml0ZW1z aXplKSAtIDEpIC0KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgKG5fYnl0ZXNfb25fZW5kL3BhZ2UuaXRlbXNpemUpLAo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoUEFHRV9TSVpFL3BhZ2UuaXRl bXNpemUpIC0gMSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgcFtyYW5kXSA9IHBhZ2VzCj4gKyDCoCDC oCDCoCDCoCDCoCDCoHBmID0gYXJyYXkuYXJyYXkoc2VsZi5hbGxvY2F0ZV9ieSkKPiArIMKgIMKg IMKgIMKgIMKgIMKgcGYuZnJvbWZpbGUoc2VsZi5mLCBQQUdFX1NJWkUgLyBwZi5pdGVtc2l6ZSkK PiArIMKgIMKgIMKgIMKgIMKgIMKgaWYgbm90IChwID09IHBmKToKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgZmFpbHVyZSA9IFRydWUKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc2VsZi5j b21wYXJlX3BhZ2UocCwgcGYpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGUgPSBlIC0gMQo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiBlID09IDA6Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGJyZWFrCj4gKyDCoCDCoCDCoCDCoCDCoCDCoHBbcmFuZF0gPSBwYWdlW3Jh bmRdCj4gKyDCoCDCoCDCoCDCoGlmIGZhaWx1cmU6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHByaW50 ICJGQUlMOiBSYW5kb20gc2VyaWVzIHZlcmlmaWNhdGlvbiIKPiArIMKgIMKgIMKgIMKgZWxzZToK PiArIMKgIMKgIMKgIMKgIMKgIMKgcHJpbnQgIlBBU1M6IFJhbmRvbSBzZXJpZXMgdmVyaWZpY2F0 aW9uIgo+ICsKPiArCj4gK2RlZiBkaWUoKToKPiArIMKgIMKgIiIiCj4gKyDCoCDCoFF1aXQgYWxs b2NhdG9yLgo+ICsgwqAgwqAiIiIKPiArIMKgIMKgZXhpdCgwKQo+ICsKPiArCj4gK2RlZiBtYWlu KCk6Cj4gKyDCoCDCoCIiIgo+ICsgwqAgwqBNYWluIChpbmZpbml0ZSkgbG9vcCBvZiBhbGxvY2F0 b3IuCj4gKyDCoCDCoCIiIgo+ICsgwqAgwqBwcmludCAiUEFTUzogU3RhcnQiCj4gKyDCoCDCoGVu ZCA9IEZhbHNlCj4gKyDCoCDCoHdoaWxlIG5vdCBlbmQ6Cj4gKyDCoCDCoCDCoCDCoHN0ciA9IHJh d19pbnB1dCgpCj4gKyDCoCDCoCDCoCDCoGV4ZWMgc3RyCj4gKwo+ICsKPiAraWYgX19uYW1lX18g PT0gIl9fbWFpbl9fIjoKPiArIMKgIMKgbWFpbigpCj4gZGlmZiAtLWdpdCBhL2NsaWVudC90ZXN0 cy9rdm0vdGVzdHMva3NtX292ZXJjb21taXQucHkgYi9jbGllbnQvdGVzdHMva3ZtL3Rlc3RzL2tz bV9vdmVyY29tbWl0LnB5Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4y ZGQ0NmM0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2NsaWVudC90ZXN0cy9rdm0vdGVzdHMva3Nt X292ZXJjb21taXQucHkKPiBAQCAtMCwwICsxLDU1OSBAQAo+ICtpbXBvcnQgbG9nZ2luZywgdGlt ZSwgcmFuZG9tLCBzdHJpbmcsIG1hdGgsIG9zLCB0ZW1wZmlsZQo+ICtmcm9tIGF1dG90ZXN0X2xp Yi5jbGllbnQuY29tbW9uX2xpYiBpbXBvcnQgZXJyb3IKPiArZnJvbSBhdXRvdGVzdF9saWIuY2xp ZW50LmJpbiBpbXBvcnQgdXRpbHMKPiAraW1wb3J0IGt2bV9zdWJwcm9jZXNzLCBrdm1fdGVzdF91 dGlscywga3ZtX3V0aWxzLCBrdm1fcHJlcHJvY2Vzc2luZwo+ICsKPiArCj4gK2RlZiBydW5fa3Nt X292ZXJjb21taXQodGVzdCwgcGFyYW1zLCBlbnYpOgo+ICsgwqAgwqAiIiIKPiArIMKgIMKgVGVz dCBob3cgS1NNIChLZXJuZWwgU2hhcmVkIE1lbW9yeSkgYWN0IHdoZW4gbW9yZSB0aGFuIHBoeXNp Y2FsIG1lbW9yeSBpcwo+ICsgwqAgwqB1c2VkLiBJbiBzZWNvbmQgcGFydCB3ZSBhbHNvIHRlc3Qg aG93IEtWTSBoYW5kbGVzIGEgc2l0dWF0aW9uIHdoZW4gdGhlIGhvc3QKPiArIMKgIMKgcnVucyBv dXQgb2YgbWVtb3J5IChpdCBpcyBleHBlY3RlZCB0byBwYXVzZSB0aGUgZ3Vlc3Qgc3lzdGVtLCB3 YWl0IHVudGlsCj4gKyDCoCDCoHNvbWUgcHJvY2VzcyByZXR1cm5zIG1lbW9yeSBhbmQgYnJpbmcg dGhlIGd1ZXN0IGJhY2sgdG8gbGlmZSkKPiArCj4gKyDCoCDCoEBwYXJhbSB0ZXN0OiBrdm0gdGVz dCBvYmplY3QuCj4gKyDCoCDCoEBwYXJhbSBwYXJhbXM6IERpY3Rpb25hcnkgd2l0aCB0ZXN0IHBh cmFtZXRlcnMuCj4gKyDCoCDCoEBwYXJhbSBlbnY6IERpY3Rpb25hcnkgd2l0aCB0aGUgdGVzdCB3 bnZpcm9ubWVudC4KPiArIMKgIMKgIiIiCj4gKwo+ICsgwqAgwqBkZWYgX3N0YXJ0X2FsbG9jYXRv cih2bSwgc2Vzc2lvbiwgdGltZW91dCk6Cj4gKyDCoCDCoCDCoCDCoCIiIgo+ICsgwqAgwqAgwqAg wqBFeGVjdXRlIGFsbG9jYXRvci5weSBvbiBhIGd1ZXN0LCB3YWl0IHVudGlsIGl0IGlzIGluaXRp YWxpemVkLgo+ICsKPiArIMKgIMKgIMKgIMKgQHBhcmFtIHZtOiBWTSBvYmplY3QuCj4gKyDCoCDC oCDCoCDCoEBwYXJhbSBzZXNzaW9uOiBSZW1vdGUgc2Vzc2lvbiB0byBhIFZNIG9iamVjdC4KPiAr IMKgIMKgIMKgIMKgQHBhcmFtIHRpbWVvdXQ6IFRpbWVvdXQgdGhhdCB3aWxsIGJlIHVzZWQgdG8g dmVyaWZ5IGlmIGFsbG9jYXRvci5weQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzdGFydGVk IHByb3Blcmx5Lgo+ICsgwqAgwqAgwqAgwqAiIiIKPiArIMKgIMKgIMKgIMKgbG9nZ2luZy5kZWJ1 ZygiU3RhcnRpbmcgYWxsb2NhdG9yLnB5IG9uIGd1ZXN0ICVzIiwgdm0ubmFtZSkKPiArIMKgIMKg IMKgIMKgc2Vzc2lvbi5zZW5kbGluZSgicHl0aG9uIC90bXAvYWxsb2NhdG9yLnB5IikKPiArIMKg IMKgIMKgIMKgKG1hdGNoLCBkYXRhKSA9IHNlc3Npb24ucmVhZF91bnRpbF9sYXN0X2xpbmVfbWF0 Y2hlcyhbIlBBU1M6IiwgIkZBSUw6Il0sCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCB0aW1lb3V0KQo+ICsgwqAgwqAgwqAgwqBpZiBtYXRjaCA9PSAxIG9yIG1hdGNoIGlzIE5v bmU6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHJhaXNlIGVycm9yLlRlc3RGYWlsKCJDb21tYW5kIGFs bG9jYXRvci5weSBvbiBndWVzdCAlcyBmYWlsZWQuXG4iCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAicmV0dXJuIGNvZGU6ICVzXG4gb3V0cHV0Olxu JXMiICUKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg ICh2bS5uYW1lLCBtYXRjaCwgZGF0YSkpCj4gKwo+ICsKPiArIMKgIMKgZGVmIF9leGVjdXRlX2Fs bG9jYXRvcihjb21tYW5kLCB2bSwgc2Vzc2lvbiwgdGltZW91dCk6Cj4gKyDCoCDCoCDCoCDCoCIi Igo+ICsgwqAgwqAgwqAgwqBFeGVjdXRlIGEgZ2l2ZW4gY29tbWFuZCBvbiBhbGxvY2F0b3IucHkg bWFpbiBsb29wLCBpbmRpY2F0aW5nIHRoZSB2bQo+ICsgwqAgwqAgwqAgwqB0aGUgY29tbWFuZCB3 YXMgZXhlY3V0ZWQgb24uCj4gKwo+ICsgwqAgwqAgwqAgwqBAcGFyYW0gY29tbWFuZDogQ29tbWFu ZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuCj4gKyDCoCDCoCDCoCDCoEBwYXJhbSB2bTogVk0gb2Jq ZWN0Lgo+ICsgwqAgwqAgwqAgwqBAcGFyYW0gc2Vzc2lvbjogUmVtb3RlIHNlc3Npb24gdG8gVk0g b2JqZWN0Lgo+ICsgwqAgwqAgwqAgwqBAcGFyYW0gdGltZW91dDogVGltZW91dCB1c2VkIHRvIHZl cmlmeSBleHBlY3RlZCBvdXRwdXQuCj4gKwo+ICsgwqAgwqAgwqAgwqBAcmV0dXJuOiBUdXBsZSAo bWF0Y2ggaW5kZXgsIGRhdGEpCj4gKyDCoCDCoCDCoCDCoCIiIgo+ICsgwqAgwqAgwqAgwqBsb2dn aW5nLmRlYnVnKCJFeGVjdXRpbmcgJyVzJyBvbiBhbGxvY2F0b3IucHkgbG9vcCwgdm06ICVzLCB0 aW1lb3V0OiAlcyIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNvbW1hbmQs IHZtLm5hbWUsIHRpbWVvdXQpCj4gKyDCoCDCoCDCoCDCoHNlc3Npb24uc2VuZGxpbmUoY29tbWFu ZCkKPiArIMKgIMKgIMKgIMKgKG1hdGNoLCBkYXRhKSA9IHNlc3Npb24ucmVhZF91bnRpbF9sYXN0 X2xpbmVfbWF0Y2hlcyhbIlBBU1M6IiwiRkFJTDoiXSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHRpbWVvdXQpCj4gKyDCoCDCoCDCoCDCoGlmIG1hdGNoID09IDEgb3IgbWF0 Y2ggaXMgTm9uZToKPiArIMKgIMKgIMKgIMKgIMKgIMKgcmFpc2UgZXJyb3IuVGVzdEZhaWwoIkZh aWxlZCB0byBleGVjdXRlICclcycgb24gYWxsb2NhdG9yLnB5LCAiCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAidm06ICVzLCBvdXRwdXQ6XG4lcyIg JQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGNv bW1hbmQsIHZtLm5hbWUsIGRhdGEpKQo+ICsgwqAgwqAgwqAgwqByZXR1cm4gKG1hdGNoLCBkYXRh KQo+ICsKPiArCj4gKyDCoCDCoGRlZiBpbml0aWFsaXplX2d1ZXN0cygpOgo+ICsgwqAgwqAgwqAg wqAiIiIKPiArIMKgIMKgIMKgIMKgSW5pdGlhbGl6ZSBndWVzdHMgKGZpbGwgdGhlaXIgbWVtb3Jp ZXMgd2l0aCBzcGVjaWZpZWQgcGF0dGVybnMpLgo+ICsgwqAgwqAgwqAgwqAiIiIKPiArIMKgIMKg IMKgIMKgbG9nZ2luZy5pbmZvKCJQaGFzZSAxOiBmaWxsaW5nIGd1ZXN0IG1lbW9yeSBwYWdlcyIp Cj4gKyDCoCDCoCDCoCDCoGZvciBzZXNzaW9uIGluIGxzZXNzaW9uczoKPiArIMKgIMKgIMKgIMKg IMKgIMKgdm0gPSBsdm1zW2xzZXNzaW9ucy5pbmRleChzZXNzaW9uKV0KPiArCj4gKyDCoCDCoCDC oCDCoCDCoCDCoGxvZ2dpbmcuZGVidWcoIlR1cm5pbmcgb2ZmIHN3YXAgb24gdm0gJXMiICUgdm0u bmFtZSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgcmV0ID0gc2Vzc2lvbi5nZXRfY29tbWFuZF9zdGF0 dXMoInN3YXBvZmYgLWEiLCB0aW1lb3V0PTMwMCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgaWYgcmV0 IGlzIE5vbmUgb3IgcmV0Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByYWlzZSBlcnJvci5U ZXN0RmFpbCgiRmFpbGVkIHRvIHN3YXBvZmYgb24gVk0gJXMiICUgdm0ubmFtZSkKPiArCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCMgU3RhcnQgdGhlIGFsbG9jYXRvcgo+ICsgwqAgwqAgwqAgwqAgwqAg wqBfc3RhcnRfYWxsb2NhdG9yKHZtLCBzZXNzaW9uLCA2MCAqIHBlcmZfcmF0aW8pCj4gKwo+ICsg wqAgwqAgwqAgwqAjIEV4ZWN1dGUgYWxsb2NhdG9yIG9uIGd1ZXN0cwo+ICsgwqAgwqAgwqAgwqBm b3IgaSBpbiByYW5nZSgwLCB2bXNjKToKPiArIMKgIMKgIMKgIMKgIMKgIMKgdm0gPSBsdm1zW2ld Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBhX2NtZCA9ICJtZW0gPSBNZW1GaWxsKCVkLCAlcywg JXMpIiAlIChrc21fc2l6ZSwgc2tleXNbaV0sIGRrZXlzW2ldKQo+ICsgwqAgwqAgwqAgwqAgwqAg wqBfZXhlY3V0ZV9hbGxvY2F0b3IoYV9jbWQsIHZtLCBsc2Vzc2lvbnNbaV0sIDYwICogcGVyZl9y YXRpbykKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGFfY21kID0gIm1lbS52YWx1ZV9maWxsKCVk KSIgJSBza2V5c1swXQo+ICsgwqAgwqAgwqAgwqAgwqAgwqBfZXhlY3V0ZV9hbGxvY2F0b3IoYV9j bWQsIHZtLCBsc2Vzc2lvbnNbaV0sIDEyMCAqIHBlcmZfcmF0aW8pCj4gKwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAjIExldCBhbGxvY2F0b3IucHkgZG8gaXRzIGpvYgo+ICsgwqAgwqAgwqAgwqAgwqAg wqAjICh1bnRpbCBzaGFyZWQgbWVtIHJlYWNoZXMgZXhwZWN0ZWQgdmFsdWUpCj4gKyDCoCDCoCDC oCDCoCDCoCDCoHNobSA9IDAKPiArIMKgIMKgIMKgIMKgIMKgIMKgaSA9IDAKPiArIMKgIMKgIMKg IMKgIMKgIMKgbG9nZ2luZy5kZWJ1ZygiVGFyZ2V0IHNoYXJlZCBtZW1pbmZvIGZvciBndWVzdCAl czogJXMiLCB2bS5uYW1lLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBrc21fc2l6ZSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgd2hpbGUgc2htIDwga3NtX3NpemU6Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIGkgPiA2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgbG9nZ2luZy5kZWJ1Zyhrdm1fdGVzdF91dGlscy5nZXRfbWVtb3J5X2luZm8o bHZtcykpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJhaXNlIGVycm9yLlRlc3RF cnJvcigiU0hNIGRpZG4ndCBtZXJnZSB0aGUgbWVtb3J5IHVudGlsICIKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgInRoZSBE TCBvbiBndWVzdDogJXMiICUgdm0ubmFtZSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3Qg PSBrc21fc2l6ZSAvIDIwMCAqIHBlcmZfcmF0aW8KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg bG9nZ2luZy5kZWJ1ZygiV2FpdGluZyAlZHMgYmVmb3JlIHByb2NlZWRpbmcuLi4iICUgc3QpCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRpbWUuc2xlZXAoc3QpCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoHNobSA9IHZtLmdldF9zaGFyZWRfbWVtaW5mbygpCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGxvZ2dpbmcuZGVidWcoIlNoYXJlZCBtZW1pbmZvIGZvciBndWVzdCAlcyBhZnRl ciAiCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCJpdGVy YXRpb24gJXM6ICVzIiwgdm0ubmFtZSwgaSwgc2htKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBpICs9IDEKPiArCj4gKyDCoCDCoCDCoCDCoCMgS2VlcCBzb21lIHJlc2VydmUKPiArIMKgIMKg IMKgIMKgcnQgPSBrc21fc2l6ZSAvIDIwMCAqIHBlcmZfcmF0aW8KPiArIMKgIMKgIMKgIMKgbG9n Z2luZy5kZWJ1ZygiV2FpdGluZyAlZHMgYmVmb3JlIHByb2NlZWRpbmcuLi4iLCBydCkKPiArIMKg IMKgIMKgIMKgdGltZS5zbGVlcChydCkKPiArCj4gKyDCoCDCoCDCoCDCoGxvZ2dpbmcuZGVidWco a3ZtX3Rlc3RfdXRpbHMuZ2V0X21lbW9yeV9pbmZvKGx2bXMpKQo+ICsgwqAgwqAgwqAgwqBsb2dn aW5nLmluZm8oIlBoYXNlIDE6IFBBU1MiKQo+ICsKPiArCj4gKyDCoCDCoGRlZiBzZXBhcmF0ZV9m aXJzdF9ndWVzdCgpOgo+ICsgwqAgwqAgwqAgwqAiIiIKPiArIMKgIMKgIMKgIMKgU2VwYXJhdGUg bWVtb3J5IG9mIHRoZSBmaXJzdCBndWVzdCBieSBnZW5lcmF0aW5nIHNwZWNpYWwgcmFuZG9tIHNl cmllcwo+ICsgwqAgwqAgwqAgwqAiIiIKPiArIMKgIMKgIMKgIMKgbG9nZ2luZy5pbmZvKCJQaGFz ZSAyOiBTcGxpdCB0aGUgcGFnZXMgb24gdGhlIGZpcnN0IGd1ZXN0IikKPiArCj4gKyDCoCDCoCDC oCDCoGFfY21kID0gIm1lbS5zdGF0aWNfcmFuZG9tX2ZpbGwoKSIKPiArIMKgIMKgIMKgIMKgKG1h dGNoLCBkYXRhKSA9IF9leGVjdXRlX2FsbG9jYXRvcihhX2NtZCwgbHZtc1swXSwgbHNlc3Npb25z WzBdLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgMTIwICogcGVyZl9yYXRpbykKPiArCj4gKyDCoCDCoCDCoCDCoHJfbXNn ID0gZGF0YS5zcGxpdGxpbmVzKClbLTFdCj4gKyDCoCDCoCDCoCDCoGxvZ2dpbmcuZGVidWcoIlJl dHVybiBtZXNzYWdlIG9mIHN0YXRpY19yYW5kb21fZmlsbDogJXMiLCByX21zZykKPiArIMKgIMKg IMKgIMKgb3V0ID0gaW50KHJfbXNnLnNwbGl0KClbNF0pCj4gKyDCoCDCoCDCoCDCoGxvZ2dpbmcu ZGVidWcoIlBlcmZvcm1hbmNlOiAlZE1CICogMTAwMCAvICVkbXMgPSAlZE1CL3MiLCBrc21fc2l6 ZSwgb3V0LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGtzbV9zaXplICogMTAw MCAvIG91dCkpCj4gKyDCoCDCoCDCoCDCoGxvZ2dpbmcuZGVidWcoa3ZtX3Rlc3RfdXRpbHMuZ2V0 X21lbW9yeV9pbmZvKGx2bXMpKQo+ICsgwqAgwqAgwqAgwqBsb2dnaW5nLmRlYnVnKCJQaGFzZSAy OiBQQVNTIikKPiArCj4gKwo+ICsgwqAgwqBkZWYgc3BsaXRfZ3Vlc3QoKToKPiArIMKgIMKgIMKg IMKgIiIiCj4gKyDCoCDCoCDCoCDCoFNlcXVlbnRpYWwgc3BsaXQgb2YgcGFnZXMgb24gZ3Vlc3Rz IHVwIHRvIG1lbW9yeSBsaW1pdAo+ICsgwqAgwqAgwqAgwqAiIiIKPiArIMKgIMKgIMKgIMKgbG9n Z2luZy5pbmZvKCJQaGFzZSAzYTogU2VxdWVudGlhbCBzcGxpdCBvZiBwYWdlcyBvbiBndWVzdHMg dXAgdG8gIgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIm1lbW9yeSBsaW1pdCIp Cj4gKyDCoCDCoCDCoCDCoGxhc3Rfdm0gPSAwCj4gKyDCoCDCoCDCoCDCoHNlc3Npb24gPSBOb25l Cj4gKyDCoCDCoCDCoCDCoHZtID0gTm9uZQo+ICsgwqAgwqAgwqAgwqBmb3IgaSBpbiByYW5nZSgx LCB2bXNjKToKPiArIMKgIMKgIMKgIMKgIMKgIMKgdm0gPSBsdm1zW2ldCj4gKyDCoCDCoCDCoCDC oCDCoCDCoHNlc3Npb24gPSBsc2Vzc2lvbnNbaV0KPiArIMKgIMKgIMKgIMKgIMKgIMKgYV9jbWQg PSAibWVtLnN0YXRpY19yYW5kb21fZmlsbCgpIgo+ICsgwqAgwqAgwqAgwqAgwqAgwqBsb2dnaW5n LmRlYnVnKCJFeGVjdXRpbmcgJXMgb24gYWxsb2NhdG9yLnB5IGxvb3AsIHZtOiAlcyIsCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGFfY21kLCB2bS5uYW1lKQo+ICsg wqAgwqAgwqAgwqAgwqAgwqBzZXNzaW9uLnNlbmRsaW5lKGFfY21kKQo+ICsKPiArIMKgIMKgIMKg IMKgIMKgIMKgb3V0ID0gIiIKPiArIMKgIMKgIMKgIMKgIMKgIMKgdHJ5Ogo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBsb2dnaW5nLmRlYnVnKCJXYXRjaGluZyBob3N0IG1lbW9yeSB3aGlsZSBm aWxsaW5nIHZtICVzIG1lbW9yeSIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoHZtLm5hbWUpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHdoaWxlIG5v dCBvdXQuc3RhcnRzd2l0aCgiUEFTUyIpIGFuZCBub3Qgb3V0LnN0YXJ0c3dpdGgoIkZBSUwiKToK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZnJlZV9tZW0gPSBpbnQodXRpbHMucmVh ZF9mcm9tX21lbWluZm8oIk1lbUZyZWUiKSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgaWYgKGtzbV9zd2FwKToKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg ZnJlZV9tZW0gPSAoZnJlZV9tZW0gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbnQodXRpbHMucmVhZF9mcm9tX21lbWluZm8oIlN3YXBG cmVlIikpKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBsb2dnaW5nLmRlYnVnKCJG cmVlIG1lbW9yeSBvbiBob3N0OiAlZCIgJSAoZnJlZV9tZW0pKQo+ICsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIyBXZSBuZWVkIHRvIGtlZXAgc29tZSBtZW1vcnkgZm9yIHB5dGhv biB0byBydW4uCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIChmcmVlX21lbSA8 IDY0MDAwKSBvciAoa3NtX3N3YXAgYW5kCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGZyZWVfbWVtIDwgKDQ1MDAw MCAqIHBlcmZfcmF0aW8pKToKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg dm0uc2VuZF9tb25pdG9yX2NtZCgnc3RvcCcpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGZvciBqIGluIHJhbmdlKDAsIGkpOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBsdm1zW2pdLmRlc3Ryb3koZ3JhY2VmdWxseSA9IEZhbHNlKQo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0aW1lLnNsZWVwKDIwKQo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB2bS5zZW5kX21vbml0b3JfY21kKCdj JykKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbG9nZ2luZy5kZWJ1Zygi T25seSAlcyBmcmVlIG1lbW9yeSwga2lsbGluZyAlZCBndWVzdHMiICUKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKGZyZWVfbWVtLCAo aS0xKSkpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGxhc3Rfdm0gPSBp Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrCj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoG91dCA9IHNlc3Npb24ucmVhZF9ub25ibG9ja2luZygwLjEp Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRpbWUuc2xlZXAoMikKPiArIMKgIMKg IMKgIMKgIMKgIMKgZXhjZXB0IE9TRXJyb3IsIChlcnIpOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBsb2dnaW5nLmRlYnVnKCJPbmx5ICVzIGhvc3QgZnJlZSBtZW1vcnksIGtpbGxpbmcgJWQg Z3Vlc3RzIiAlCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oChmcmVlX21lbSwgKGkgLSAxKSkpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGxvZ2dpbmcu ZGVidWcoIlN0b3BwaW5nICVzIiwgdm0ubmFtZSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg dm0uc2VuZF9tb25pdG9yX2NtZCgnc3RvcCcpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGZv ciBqIGluIHJhbmdlKDAsIGkpOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBsb2dn aW5nLmRlYnVnKCJEZXN0cm95aW5nICVzIiwgbHZtc1tqXS5uYW1lKQo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBsdm1zW2pdLmRlc3Ryb3koZ3JhY2VmdWxseSA9IEZhbHNlKQo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0aW1lLnNsZWVwKDIwKQo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqB2bS5zZW5kX21vbml0b3JfY21kKCdjJykKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgbGFzdF92bSA9IGkKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGlmIGxhc3Rfdm0gIT0gMDoK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWsKPiArIMKgIMKgIMKgIMKgIMKgIMKgbG9n Z2luZy5kZWJ1ZygiTWVtb3J5IGZpbGxlZCBmb3IgZ3Vlc3QgJXMiICUgKHZtLm5hbWUpKQo+ICsK PiArIMKgIMKgIMKgIMKgbG9nZ2luZy5pbmZvKCJQaGFzZSAzYTogUEFTUyIpCj4gKwo+ICsgwqAg wqAgwqAgwqBsb2dnaW5nLmluZm8oIlBoYXNlIDNiOiBDaGVjayBpZiBtZW1vcnkgaW4gbWF4IGxv YWRpbmcgZ3Vlc3QgaXMgcmlnaHQiKQo+ICsgwqAgwqAgwqAgwqBmb3IgaSBpbiByYW5nZShsYXN0 X3ZtICsgMSwgdm1zYyk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGxzZXNzaW9uc1tpXS5jbG9zZSgp Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGlmIGkgPT0gKHZtc2MgLSAxKToKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgbG9nZ2luZy5kZWJ1Zyhrdm1fdGVzdF91dGlscy5nZXRfbWVtb3J5X2luZm8o W2x2bXNbaV1dKSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgbG9nZ2luZy5kZWJ1ZygiRGVzdHJveWlu ZyBndWVzdCAlcyIgJSBsdm1zW2ldLm5hbWUpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGx2bXNbaV0u ZGVzdHJveShncmFjZWZ1bGx5ID0gRmFsc2UpCj4gKwo+ICsgwqAgwqAgwqAgwqAjIFZlcmlmeSBs YXN0IG1hY2hpbmUgd2l0aCByYW5kb21seSBnZW5lcmF0ZWQgbWVtb3J5Cj4gKyDCoCDCoCDCoCDC oGFfY21kID0gIm1lbS5zdGF0aWNfcmFuZG9tX3ZlcmlmeSgpIgo+ICsgwqAgwqAgwqAgwqBfZXhl Y3V0ZV9hbGxvY2F0b3IoYV9jbWQsIGx2bXNbbGFzdF92bV0sIHNlc3Npb24sCj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobWVtIC8gMjAwICogNTAgKiBwZXJmX3Jh dGlvKSkKPiArIMKgIMKgIMKgIMKgbG9nZ2luZy5kZWJ1Zyhrdm1fdGVzdF91dGlscy5nZXRfbWVt b3J5X2luZm8oW2x2bXNbbGFzdF92bV1dKSkKPiArCj4gKyDCoCDCoCDCoCDCoChzdGF0dXMsIGRh dGEpID0gbHNlc3Npb25zW2ldLmdldF9jb21tYW5kX3N0YXR1c19vdXRwdXQoImRpZSgpIiwgMjAp Cj4gKyDCoCDCoCDCoCDCoGx2bXNbbGFzdF92bV0uZGVzdHJveShncmFjZWZ1bGx5ID0gRmFsc2Up Cj4gKyDCoCDCoCDCoCDCoGxvZ2dpbmcuaW5mbygiUGhhc2UgM2I6IFBBU1MiKQo+ICsKPiArCj4g KyDCoCDCoGRlZiBzcGxpdF9wYXJhbGxlbCgpOgo+ICsgwqAgwqAgwqAgwqAiIiIKPiArIMKgIMKg IMKgIMKgUGFyYWxsZWwgcGFnZSBzcGxpdGluZwo+ICsgwqAgwqAgwqAgwqAiIiIKPiArIMKgIMKg IMKgIMKgbG9nZ2luZy5pbmZvKCJQaGFzZSAxOiBwYXJhbGxlbCBwYWdlIHNwbGl0aW5nIikKPiAr IMKgIMKgIMKgIMKgIyBXZSBoYXZlIHRvIHdhaXQgdW50aWwgYWxsb2NhdG9yIGlzIGZpbmlzaGVk IChpdCB3YWl0cyA1IHNlY29uZHMgdG8KPiArIMKgIMKgIMKgIMKgIyBjbGVhbiB0aGUgc29ja2V0 Cj4gKwo+ICsgwqAgwqAgwqAgwqBzZXNzaW9uID0gbHNlc3Npb25zWzBdCj4gKyDCoCDCoCDCoCDC oHZtID0gbHZtc1swXQo+ICsgwqAgwqAgwqAgwqBmb3IgaSBpbiByYW5nZSgxLCBtYXhfYWxsb2Mp Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqBsc2Vzc2lvbnMuYXBwZW5kKGt2bV91dGlscy53YWl0X2Zv cih2bS5yZW1vdGVfbG9naW4sIDM2MCwgMCwgMikpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGlmIG5v dCBsc2Vzc2lvbnNbaV06Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJhaXNlIGVycm9yLlRl c3RGYWlsKCJDb3VsZCBub3QgbG9nIGludG8gZ3Vlc3QgJXMiICUKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHZtLm5hbWUpCj4gKwo+ICsg wqAgwqAgwqAgwqByZXQgPSBzZXNzaW9uLmdldF9jb21tYW5kX3N0YXR1cygic3dhcG9mZiAtYSIs IHRpbWVvdXQ9MzAwKQo+ICsgwqAgwqAgwqAgwqBpZiByZXQgIT0gMDoKPiArIMKgIMKgIMKgIMKg IMKgIMKgcmFpc2UgZXJyb3IuVGVzdEZhaWwoIkZhaWxlZCB0byB0dXJuIG9mZiBzd2FwIG9uICVz IiAlIHZtLm5hbWUpCj4gKwo+ICsgwqAgwqAgwqAgwqBmb3IgaSBpbiByYW5nZSgwLCBtYXhfYWxs b2MpOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAjIFN0YXJ0IHRoZSBhbGxvY2F0b3IKPiArIMKgIMKg IMKgIMKgIMKgIMKgX3N0YXJ0X2FsbG9jYXRvcih2bSwgbHNlc3Npb25zW2ldLCA2MCAqIHBlcmZf cmF0aW8pCj4gKwo+ICsgwqAgwqAgwqAgwqBsb2dnaW5nLmluZm8oIlBoYXNlIDE6IFBBU1MiKQo+ ICsKPiArIMKgIMKgIMKgIMKgbG9nZ2luZy5pbmZvKCJQaGFzZSAyYTogU2ltdWx0YW5lb3VzIG1l cmdpbmciKQo+ICsgwqAgwqAgwqAgwqBsb2dnaW5nLmRlYnVnKCJNZW1vcnkgdXNlZCBieSBhbGxv Y2F0b3Igb24gZ3Vlc3RzID0gJWRNQiIgJQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgKGtzbV9zaXplIC8gbWF4X2FsbG9jKSkKPiArCj4gKyDCoCDCoCDCoCDCoGZvciBpIGluIHJh bmdlKDAsIG1heF9hbGxvYyk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGFfY21kID0gIm1lbSA9IE1l bUZpbGwoJWQsICVzLCAlcykiICUgKChrc21fc2l6ZSAvIG1heF9hbGxvYyksCj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBza2V5c1tpXSwgZGtleXNbaV0pCj4gKyDCoCDCoCDCoCDCoCDCoCDCoF9leGVj dXRlX2FsbG9jYXRvcihhX2NtZCwgdm0sIGxzZXNzaW9uc1tpXSwgNjAgKiBwZXJmX3JhdGlvKQo+ ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYV9jbWQgPSAibWVtLnZhbHVlX2ZpbGwoJWQpIiAlIChz a2V5c1swXSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgX2V4ZWN1dGVfYWxsb2NhdG9yKGFfY21kLCB2 bSwgbHNlc3Npb25zW2ldLCA5MCAqIHBlcmZfcmF0aW8pCj4gKwo+ICsgwqAgwqAgwqAgwqAjIFdh aXQgdW50aWwgYWxsb2NhdG9yLnB5IG1lcmdlcyB0aGUgcGFnZXMgKDMgKiBrc21fc2l6ZSAvIDMp Cj4gKyDCoCDCoCDCoCDCoHNobSA9IDAKPiArIMKgIMKgIMKgIMKgaSA9IDAKPiArIMKgIMKgIMKg IMKgbG9nZ2luZy5kZWJ1ZygiVGFyZ2V0IHNoYXJlZCBtZW1vcnkgc2l6ZTogJXMiLCBrc21fc2l6 ZSkKPiArIMKgIMKgIMKgIMKgd2hpbGUgc2htIDwga3NtX3NpemU6Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoGlmIGkgPiA2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbG9nZ2luZy5kZWJ1Zyhr dm1fdGVzdF91dGlscy5nZXRfbWVtb3J5X2luZm8obHZtcykpCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHJhaXNlIGVycm9yLlRlc3RFcnJvcigiU0hNIGRpZG4ndCBtZXJnZSB0aGUgbWVtb3J5 IHVudGlsIERMIikKPiArIMKgIMKgIMKgIMKgIMKgIMKgd3QgPSBrc21fc2l6ZSAvIDIwMCAqIHBl cmZfcmF0aW8KPiArIMKgIMKgIMKgIMKgIMKgIMKgbG9nZ2luZy5kZWJ1ZygiV2FpdGluZyAlZHMg YmVmb3JlIHByb2NlZWQuLi4iLCB3dCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGltZS5zbGVlcCh3 dCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgc2htID0gdm0uZ2V0X3NoYXJlZF9tZW1pbmZvKCkKPiAr IMKgIMKgIMKgIMKgIMKgIMKgbG9nZ2luZy5kZWJ1ZygiU2hhcmVkIG1lbWluZm8gYWZ0ZXIgYXR0 ZW1wdCAlczogJXMiLCBpLCBzaG0pCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGkgKz0gMQo+ICsKPiAr IMKgIMKgIMKgIMKgbG9nZ2luZy5kZWJ1Zyhrdm1fdGVzdF91dGlscy5nZXRfbWVtb3J5X2luZm8o W3ZtXSkpCj4gKyDCoCDCoCDCoCDCoGxvZ2dpbmcuaW5mbygiUGhhc2UgMmE6IFBBU1MiKQo+ICsK PiArIMKgIMKgIMKgIMKgbG9nZ2luZy5pbmZvKCJQaGFzZSAyYjogU2ltdWx0YW5lb3VzIHNwbGl0 aW5nIikKPiArIMKgIMKgIMKgIMKgIyBBY3R1YWwgc3BsaXR0aW5nCj4gKyDCoCDCoCDCoCDCoGZv ciBpIGluIHJhbmdlKDAsIG1heF9hbGxvYyk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGFfY21kID0g Im1lbS5zdGF0aWNfcmFuZG9tX2ZpbGwoKSIKPiArIMKgIMKgIMKgIMKgIMKgIMKgKG1hdGNoLCBk YXRhKSA9IF9leGVjdXRlX2FsbG9jYXRvcihhX2NtZCwgdm0sIGxzZXNzaW9uc1tpXSwKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIDkwICogcGVyZl9yYXRpbykKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGRhdGEg PSBkYXRhLnNwbGl0bGluZXMoKVstMV0KPiArIMKgIMKgIMKgIMKgIMKgIMKgbG9nZ2luZy5kZWJ1 ZyhkYXRhKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqBvdXQgPSBpbnQoZGF0YS5zcGxpdCgpWzRdKQo+ ICsgwqAgwqAgwqAgwqAgwqAgwqBsb2dnaW5nLmRlYnVnKCJQZXJmb3JtYW5jZTogJWRNQiAqIDEw MDAgLyAlZG1zID0gJWRNQi9zIiAlCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAoKGtzbV9zaXplIC8gbWF4X2FsbG9jKSwgb3V0LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAoa3NtX3NpemUgKiAxMDAwIC8gb3V0IC8gbWF4X2FsbG9jKSkp Cj4gKyDCoCDCoCDCoCDCoGxvZ2dpbmcuZGVidWcoa3ZtX3Rlc3RfdXRpbHMuZ2V0X21lbW9yeV9p bmZvKFt2bV0pKQo+ICsgwqAgwqAgwqAgwqBsb2dnaW5nLmluZm8oIlBoYXNlIDJiOiBQQVNTIikK PiArCj4gKyDCoCDCoCDCoCDCoGxvZ2dpbmcuaW5mbygiUGhhc2UgMmM6IFNpbXVsdGFuZW91cyB2 ZXJpZmljYXRpb24iKQo+ICsgwqAgwqAgwqAgwqBmb3IgaSBpbiByYW5nZSgwLCBtYXhfYWxsb2Mp Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqBhX2NtZCA9ICJtZW0uc3RhdGljX3JhbmRvbV92ZXJpZnko KSIKPiArIMKgIMKgIMKgIMKgIMKgIMKgKG1hdGNoLCBkYXRhKSA9IF9leGVjdXRlX2FsbG9jYXRv cihhX2NtZCwgdm0sIGxzZXNzaW9uc1tpXSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChtZW0gLyAyMDAgKiA1 MCAqIHBlcmZfcmF0aW8pKQo+ICsgwqAgwqAgwqAgwqBsb2dnaW5nLmluZm8oIlBoYXNlIDJjOiBQ QVNTIikKPiArCj4gKyDCoCDCoCDCoCDCoGxvZ2dpbmcuaW5mbygiUGhhc2UgMmQ6IFNpbXVsdGFu ZW91cyBtZXJnaW5nIikKPiArIMKgIMKgIMKgIMKgIyBBY3R1YWwgc3BsaXR0aW5nCj4gKyDCoCDC oCDCoCDCoGZvciBpIGluIHJhbmdlKDAsIG1heF9hbGxvYyk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oGFfY21kID0gIm1lbS52YWx1ZV9maWxsKCVkKSIgJSBza2V5c1swXQo+ICsgwqAgwqAgwqAgwqAg wqAgwqAobWF0Y2gsIGRhdGEpID0gX2V4ZWN1dGVfYWxsb2NhdG9yKGFfY21kLCB2bSwgbHNlc3Np b25zW2ldLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMTIwICogcGVyZl9yYXRpbykKPiArIMKgIMKgIMKgIMKg bG9nZ2luZy5kZWJ1Zyhrdm1fdGVzdF91dGlscy5nZXRfbWVtb3J5X2luZm8oW3ZtXSkpCj4gKyDC oCDCoCDCoCDCoGxvZ2dpbmcuaW5mbygiUGhhc2UgMmQ6IFBBU1MiKQo+ICsKPiArIMKgIMKgIMKg IMKgbG9nZ2luZy5pbmZvKCJQaGFzZSAyZTogU2ltdWx0YW5lb3VzIHZlcmlmaWNhdGlvbiIpCj4g KyDCoCDCoCDCoCDCoGZvciBpIGluIHJhbmdlKDAsIG1heF9hbGxvYyk6Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoGFfY21kID0gIm1lbS52YWx1ZV9jaGVjayglZCkiICUgc2tleXNbMF0KPiArIMKgIMKg IMKgIMKgIMKgIMKgKG1hdGNoLCBkYXRhKSA9IF9leGVjdXRlX2FsbG9jYXRvcihhX2NtZCwgdm0s IGxzZXNzaW9uc1tpXSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChtZW0gLyAyMDAgKiA1MCAqIHBlcmZfcmF0 aW8pKQo+ICsgwqAgwqAgwqAgwqBsb2dnaW5nLmluZm8oIlBoYXNlIDJlOiBQQVNTIikKPiArCj4g KyDCoCDCoCDCoCDCoGxvZ2dpbmcuaW5mbygiUGhhc2UgMmY6IFNpbXVsdGFuZW91cyBzcGxpdGlu ZyBsYXN0IDk2QiIpCj4gKyDCoCDCoCDCoCDCoGZvciBpIGluIHJhbmdlKDAsIG1heF9hbGxvYyk6 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGFfY21kID0gIm1lbS5zdGF0aWNfcmFuZG9tX2ZpbGwoOTYp Igo+ICsgwqAgwqAgwqAgwqAgwqAgwqAobWF0Y2gsIGRhdGEpID0gX2V4ZWN1dGVfYWxsb2NhdG9y KGFfY21kLCB2bSwgbHNlc3Npb25zW2ldLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgNjAgKiBwZXJmX3JhdGlv KQo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgZGF0YSA9IGRhdGEuc3BsaXRsaW5lcygpWy0xXQo+ ICsgwqAgwqAgwqAgwqAgwqAgwqBvdXQgPSBpbnQoZGF0YS5zcGxpdCgpWzRdKQo+ICsgwqAgwqAg wqAgwqAgwqAgwqBsb2dnaW5nLmRlYnVnKCJQZXJmb3JtYW5jZTogJWRNQiAqIDEwMDAgLyAlZG1z ID0gJWRNQi9zIiwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGtzbV9z aXplL21heF9hbGxvYywgb3V0LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgKGtzbV9zaXplICogMTAwMCAvIG91dCAvIG1heF9hbGxvYykpCj4gKwo+ICsgwqAgwqAgwqAg wqBsb2dnaW5nLmRlYnVnKGt2bV90ZXN0X3V0aWxzLmdldF9tZW1vcnlfaW5mbyhbdm1dKSkKPiAr IMKgIMKgIMKgIMKgbG9nZ2luZy5pbmZvKCJQaGFzZSAyZjogUEFTUyIpCj4gKwo+ICsgwqAgwqAg wqAgwqBsb2dnaW5nLmluZm8oIlBoYXNlIDJnOiBTaW11bHRhbmVvdXMgdmVyaWZpY2F0aW9uIGxh c3QgOTZCIikKPiArIMKgIMKgIMKgIMKgZm9yIGkgaW4gcmFuZ2UoMCwgbWF4X2FsbG9jKToKPiAr IMKgIMKgIMKgIMKgIMKgIMKgYV9jbWQgPSAibWVtLnN0YXRpY19yYW5kb21fdmVyaWZ5KDk2KSIK PiArIMKgIMKgIMKgIMKgIMKgIMKgKG1hdGNoLCBkYXRhKSA9IF9leGVjdXRlX2FsbG9jYXRvcihh X2NtZCwgdm0sIGxzZXNzaW9uc1tpXSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChtZW0gLyAyMDAgKiA1MCAq IHBlcmZfcmF0aW8pKQo+ICsgwqAgwqAgwqAgwqBsb2dnaW5nLmRlYnVnKGt2bV90ZXN0X3V0aWxz LmdldF9tZW1vcnlfaW5mbyhbdm1dKSkKPiArIMKgIMKgIMKgIMKgbG9nZ2luZy5pbmZvKCJQaGFz ZSAyZzogUEFTUyIpCj4gKwo+ICsgwqAgwqAgwqAgwqBsb2dnaW5nLmRlYnVnKCJDbGVhbmluZyB1 cC4uLiIpCj4gKyDCoCDCoCDCoCDCoGZvciBpIGluIHJhbmdlKDAsIG1heF9hbGxvYyk6Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoGxzZXNzaW9uc1tpXS5nZXRfY29tbWFuZF9zdGF0dXNfb3V0cHV0KCJk aWUoKSIsIDIwKQo+ICsgwqAgwqAgwqAgwqBzZXNzaW9uLmNsb3NlKCkKPiArIMKgIMKgIMKgIMKg dm0uZGVzdHJveShncmFjZWZ1bGx5ID0gRmFsc2UpCj4gKwo+ICsKPiArIMKgIMKgIyBNYWluIHRl c3QgY29kZQo+ICsgwqAgwqBsb2dnaW5nLmluZm8oIlN0YXJ0aW5nIHBoYXNlIDA6IEluaXRpYWxp emF0aW9uIikKPiArIMKgIMKgIyBob3N0X3Jlc2VydmU6IG1lbSByZXNlcnZlIGtlcHQgZm9yIHRo ZSBob3N0IHN5c3RlbSB0byBydW4KPiArIMKgIMKgaG9zdF9yZXNlcnZlID0gaW50KHBhcmFtcy5n ZXQoImtzbV9ob3N0X3Jlc2VydmUiLCA1MTIpKQo+ICsgwqAgwqAjIGd1ZXN0X3Jlc2VydmU6IG1l bSByZXNlcnZlIGtlcHQgdG8gYXZvaWQgZ3Vlc3QgT1MgdG8ga2lsbCBwcm9jZXNzZXMKPiArIMKg IMKgZ3Vlc3RfcmVzZXJ2ZSA9IGludChwYXJhbXMuZ2V0KCJrc21fZ3Vlc3RfcmVzZXJ2ZSIsIDEw MjQpKQo+ICsgwqAgwqBsb2dnaW5nLmRlYnVnKCJNZW1vcnkgcmVzZXJ2ZWQgZm9yIGhvc3QgdG8g cnVuOiAlZCIsIGhvc3RfcmVzZXJ2ZSkKPiArIMKgIMKgbG9nZ2luZy5kZWJ1ZygiTWVtb3J5IHJl c2VydmVkIGZvciBndWVzdCB0byBydW46ICVkIiwgZ3Vlc3RfcmVzZXJ2ZSkKPiArCj4gKyDCoCDC oG1heF92bXMgPSBpbnQocGFyYW1zLmdldCgibWF4X3ZtcyIsIDIpKQo+ICsgwqAgwqBvdmVyY29t bWl0ID0gZmxvYXQocGFyYW1zLmdldCgia3NtX292ZXJjb21taXRfcmF0aW8iLCAyLjApKQo+ICsg wqAgwqBtYXhfYWxsb2MgPSBpbnQocGFyYW1zLmdldCgia3NtX3BhcmFsbGVsX3JhdGlvIiwgMSkp Cj4gKwo+ICsgwqAgwqAjIHZtc2M6IGNvdW50IG9mIGFsbCB1c2VkIFZNcwo+ICsgwqAgwqB2bXNj ID0gaW50KG92ZXJjb21taXQpICsgMQo+ICsgwqAgwqB2bXNjID0gbWF4KHZtc2MsIG1heF92bXMp Cj4gKwo+ICsgwqAgwqBpZiAocGFyYW1zWydrc21fbW9kZSddID09ICJzZXJpYWwiKToKPiArIMKg IMKgIMKgIMKgbWF4X2FsbG9jID0gdm1zYwo+ICsKPiArIMKgIMKgaG9zdF9tZW0gPSAoaW50KHV0 aWxzLm1lbXRvdGFsKCkpIC8gMTAyNCAtIGhvc3RfcmVzZXJ2ZSkKPiArCj4gKyDCoCDCoGtzbV9z d2FwID0gRmFsc2UKPiArIMKgIMKgaWYgcGFyYW1zLmdldCgia3NtX3N3YXAiKSA9PSAieWVzIjoK PiArIMKgIMKgIMKgIMKga3NtX3N3YXAgPSBUcnVlCj4gKwo+ICsgwqAgwqAjIFBlcmZvcm1hbmNl IHJhdGlvCj4gKyDCoCDCoHBlcmZfcmF0aW8gPSBwYXJhbXMuZ2V0KCJrc21fcGVyZl9yYXRpbyIp Cj4gKyDCoCDCoGlmIHBlcmZfcmF0aW86Cj4gKyDCoCDCoCDCoCDCoHBlcmZfcmF0aW8gPSBmbG9h dChwZXJmX3JhdGlvKQo+ICsgwqAgwqBlbHNlOgo+ICsgwqAgwqAgwqAgwqBwZXJmX3JhdGlvID0g MQo+ICsKPiArIMKgIMKgaWYgKHBhcmFtc1sna3NtX21vZGUnXSA9PSAicGFyYWxsZWwiKToKPiAr IMKgIMKgIMKgIMKgdm1zYyA9IDEKPiArIMKgIMKgIMKgIMKgb3ZlcmNvbW1pdCA9IDEKPiArIMKg IMKgIMKgIMKgbWVtID0gaG9zdF9tZW0KPiArIMKgIMKgIMKgIMKgIyAzMmJpdCBzeXN0ZW0gYWRq dXN0bWVudAo+ICsgwqAgwqAgwqAgwqBpZiBub3QgcGFyYW1zWydpbWFnZV9uYW1lJ10uZW5kc3dp dGgoIjY0Iik6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGxvZ2dpbmcuZGVidWcoIlByb2JhYmx5IGkz ODYgZ3Vlc3QgYXJjaGl0ZWN0dXJlLCAiCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCJtYXggYWxsb2NhdG9yIG1lbSA9IDJHIikKPiArIMKgIMKgIMKgIMKgIMKgIMKg IyBHdWVzdCBjYW4gaGF2ZSBtb3JlIHRoYW4gMkcgYnV0Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCMg a3ZtIG1lbSArIDFNQiAoYWxsb2NhdG9yIGl0c2VsZikgY2FuJ3QKPiArIMKgIMKgIMKgIMKgIMKg IMKgaWYgKGhvc3RfbWVtID4gMzEwMCk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG1lbSA9 IDMxMDAKPiArCj4gKyDCoCDCoCDCoCDCoGlmIG9zLnBvcGVuKCJ1bmFtZSAtaSIpLnJlYWRsaW5l KCkuc3RhcnRzd2l0aCgiaTM4NiIpOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqBsb2dnaW5nLmRlYnVn KCJIb3N0IGlzIGkzODYgYXJjaGl0ZWN0dXJlLCBtYXggZ3Vlc3QgbWVtIGlzIDJHIikKPiArIMKg IMKgIMKgIMKgIMKgIMKgIyBHdWVzdCBzeXN0ZW0gd2l0aCBxZW11IG92ZXJoZWFkICg2NE0pIGNh bid0IGhhdmUgbW9yZSB0aGFuIDJHCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGlmIG1lbSA+IDMxMDAg LSA2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbWVtID0gMzEwMCAtIDY0Cj4gKwo+ICsg wqAgwqBlbHNlOgo+ICsgwqAgwqAgwqAgwqAjIG1lbTogTWVtb3J5IG9mIHRoZSBndWVzdCBzeXN0 ZW1zLiBNYXhpbXVtIG11c3QgYmUgbGVzcyB0aGFuCj4gKyDCoCDCoCDCoCDCoCMgaG9zdCdzIHBo eXNpY2FsIHJhbQo+ICsgwqAgwqAgwqAgwqBtZW0gPSBpbnQob3ZlcmNvbW1pdCAqIGhvc3RfbWVt IC8gdm1zYykKPiArCj4gKyDCoCDCoCDCoCDCoCMgMzJiaXQgc3lzdGVtIGFkanVzdG1lbnQKPiAr IMKgIMKgIMKgIMKgaWYgbm90IHBhcmFtc1snaW1hZ2VfbmFtZSddLmVuZHN3aXRoKCI2NCIpOgo+ ICsgwqAgwqAgwqAgwqAgwqAgwqBsb2dnaW5nLmRlYnVnKCJQcm9iYWJseSBpMzg2IGd1ZXN0IGFy Y2hpdGVjdHVyZSwgIgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAi bWF4IGFsbG9jYXRvciBtZW0gPSAyRyIpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCMgR3Vlc3QgY2Fu IGhhdmUgbW9yZSB0aGFuIDJHIGJ1dAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAjIGt2bSBtZW0gKyAx TUIgKGFsbG9jYXRvciBpdHNlbGYpIGNhbid0Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGlmIG1lbSAt IGd1ZXN0X3Jlc2VydmUgLSAxID4gMzEwMDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdm1z YyA9IGludChtYXRoLmNlaWwoKGhvc3RfbWVtICogb3ZlcmNvbW1pdCkgLwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKDMxMDAgKyBndWVz dF9yZXNlcnZlKSkpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG1lbSA9IGludChtYXRoLmZs b29yKGhvc3RfbWVtICogb3ZlcmNvbW1pdCAvIHZtc2MpKQo+ICsKPiArIMKgIMKgIMKgIMKgaWYg b3MucG9wZW4oInVuYW1lIC1pIikucmVhZGxpbmUoKS5zdGFydHN3aXRoKCJpMzg2Iik6Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoGxvZ2dpbmcuZGVidWcoIkhvc3QgaXMgaTM4NiBhcmNoaXRlY3R1cmUs IG1heCBndWVzdCBtZW0gaXMgMkciKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAjIEd1ZXN0IHN5c3Rl bSB3aXRoIHFlbXUgb3ZlcmhlYWQgKDY0TSkgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gMkcKPiArIMKg IMKgIMKgIMKgIMKgIMKgaWYgbWVtID4gMzEwMCAtIDY0Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqB2bXNjID0gaW50KG1hdGguY2VpbCgoaG9zdF9tZW0gKiBvdmVyY29tbWl0KSAvCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoMzEw MCAtIDY0LjApKSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbWVtID0gaW50KG1hdGguZmxv b3IoaG9zdF9tZW0gKiBvdmVyY29tbWl0IC8gdm1zYykpCj4gKwo+ICsgwqAgwqBsb2dnaW5nLmRl YnVnKCJDaGVja2luZyBLU00gc3RhdHVzLi4uIikKPiArIMKgIMKga3NtX2ZsYWcgPSAwCj4gKyDC oCDCoGZvciBsaW5lIGluIG9zLnBvcGVuKCdrc21jdGwgaW5mbycpLnJlYWRsaW5lcygpOgo+ICsg wqAgwqAgwqAgwqBpZiBsaW5lLnN0YXJ0c3dpdGgoJ2ZsYWdzJyk6Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoGtzbV9mbGFnID0gaW50KGxpbmUuc3BsaXQoJyAnKVsxXS5zcGxpdCgnLCcpWzBdKQo+ICsg wqAgwqBpZiBpbnQoa3NtX2ZsYWcpICE9IDE6Cj4gKyDCoCDCoCDCoCDCoGxvZ2dpbmcuaW5mbygi S1NNIG1vZHVsZSBpcyBub3QgbG9hZGVkISBUcnlpbmcgdG8gbG9hZCBtb2R1bGUgYW5kICIKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICJzdGFydCBrc21jdGwuLi4iKQo+ICsgwqAg wqAgwqAgwqB0cnk6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHV0aWxzLnJ1bigibW9kcHJvYmUga3Nt IikKPiArIMKgIMKgIMKgIMKgIMKgIMKgdXRpbHMucnVuKCJrc21jdGwgc3RhcnQgNTAwMCAxMDAi KQo+ICsgwqAgwqAgwqAgwqBleGNlcHQgZXJyb3IuQ21kRXJyb3IsIGU6Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoHJhaXNlIGVycm9yLlRlc3RGYWlsKCJGYWlsZWQgdG8gbG9hZCBLU006ICVzIiAlIGUp Cj4gKyDCoCDCoGxvZ2dpbmcuZGVidWcoIktTTSBtb2R1bGUgbG9hZGVkIGFuZCBrc21jdGwgc3Rh cnRlZCIpCj4gKwo+ICsgwqAgwqBzd2FwID0gaW50KHV0aWxzLnJlYWRfZnJvbV9tZW1pbmZvKCJT d2FwVG90YWwiKSkgLyAxMDI0Cj4gKwo+ICsgwqAgwqBsb2dnaW5nLmRlYnVnKCJPdmVyY29tbWl0 ID0gJWYiLCBvdmVyY29tbWl0KQo+ICsgwqAgwqBsb2dnaW5nLmRlYnVnKCJUcnVlIG92ZXJjb21t aXQgPSAlZiAiLCAoZmxvYXQodm1zYyAqIG1lbSkgLwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmbG9hdChob3N0X21l bSkpKQo+ICsgwqAgwqBsb2dnaW5nLmRlYnVnKCJIb3N0IG1lbW9yeSA9ICVkTSIsIGhvc3RfbWVt KQo+ICsgwqAgwqBsb2dnaW5nLmRlYnVnKCJHdWVzdCBtZW1vcnkgPSAlZE0iLCBtZW0pCj4gKyDC oCDCoGxvZ2dpbmcuZGVidWcoIlVzaW5nIHN3YXAgPSAlcyIsIGtzbV9zd2FwKQo+ICsgwqAgwqBs b2dnaW5nLmRlYnVnKCJTd2FwID0gJWRNIiwgc3dhcCkKPiArIMKgIMKgbG9nZ2luZy5kZWJ1Zygi bWF4X3ZtcyA9ICVkIiwgbWF4X3ZtcykKPiArIMKgIMKgbG9nZ2luZy5kZWJ1ZygiQ291bnQgb2Yg YWxsIHVzZWQgVk1zID0gJWQiLCB2bXNjKQo+ICsgwqAgwqBsb2dnaW5nLmRlYnVnKCJQZXJmb3Jt YW5jZV9yYXRpbyA9ICVmIiwgcGVyZl9yYXRpbykKPiArCj4gKyDCoCDCoCMgR2VuZXJhdGUgdW5p cXVlIGtleXMgZm9yIHJhbmRvbSBzZXJpZXMKPiArIMKgIMKgc2tleXMgPSBbXQo+ICsgwqAgwqBk a2V5cyA9IFtdCj4gKyDCoCDCoGZvciBpIGluIHJhbmdlKDAsIG1heCh2bXNjLCBtYXhfYWxsb2Mp KToKPiArIMKgIMKgIMKgIMKga2V5ID0gcmFuZG9tLnJhbmRyYW5nZSgwLCAyNTUpCj4gKyDCoCDC oCDCoCDCoHdoaWxlIGtleSBpbiBza2V5czoKPiArIMKgIMKgIMKgIMKgIMKgIMKga2V5ID0gcmFu ZG9tLnJhbmRyYW5nZSgwLCAyNTUpCj4gKyDCoCDCoCDCoCDCoHNrZXlzLmFwcGVuZChrZXkpCj4g Kwo+ICsgwqAgwqAgwqAgwqBrZXkgPSByYW5kb20ucmFuZHJhbmdlKDAsIDk5OSkKPiArIMKgIMKg IMKgIMKgd2hpbGUga2V5IGluIGRrZXlzOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqBrZXkgPSByYW5k b20ucmFuZHJhbmdlKDAsIDk5OSkKPiArIMKgIMKgIMKgIMKgZGtleXMuYXBwZW5kKGtleSkKPiAr Cj4gKyDCoCDCoGxvZ2dpbmcuZGVidWcoInNrZXlzOiAlcyIgJSBza2V5cykKPiArIMKgIMKgbG9n Z2luZy5kZWJ1ZygiZGtleXM6ICVzIiAlIGRrZXlzKQo+ICsKPiArIMKgIMKgbHZtcyA9IFtdCj4g KyDCoCDCoGxzZXNzaW9ucyA9IFtdCj4gKwo+ICsgwqAgwqAjIEFzIHdlIGRvbid0IGtub3cgdGhl IG51bWJlciBhbmQgbWVtb3J5IGFtb3VudCBvZiBWTXMgaW4gYWR2YW5jZSwKPiArIMKgIMKgIyB3 ZSBuZWVkIHRvIHNwZWNpZnkgYW5kIGNyZWF0ZSB0aGVtIGhlcmUgKEZJWE1FOiBub3QgYSBuaWNl IHRoaW5nKQo+ICsgwqAgwqB2bV9uYW1lID0gcGFyYW1zLmdldCgibWFpbl92bSIpCj4gKyDCoCDC oHBhcmFtc1snbWVtJ10gPSBtZW0KPiArIMKgIMKgcGFyYW1zWyd2bXMnXSA9IHZtX25hbWUKPiAr IMKgIMKgIyBBc3NvY2lhdGUgcGlkZmlsZSBuYW1lCj4gKyDCoCDCoHBhcmFtc1sncGlkXycgKyB2 bV9uYW1lXSA9IGt2bV91dGlscy5nZW5lcmF0ZV90bXBfZmlsZV9uYW1lKHZtX25hbWUsCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCdwaWQnKQo+ICsgwqAgwqBpZiBu b3QgcGFyYW1zLmdldCgnZXh0cmFfcGFyYW1zJyk6Cj4gKyDCoCDCoCDCoCDCoHBhcmFtc1snZXh0 cmFfcGFyYW1zJ10gPSAnICcKPiArIMKgIMKgcGFyYW1zWydleHRyYV9wYXJhbXNfJyArIHZtX25h bWVdID0gcGFyYW1zLmdldCgnZXh0cmFfcGFyYW1zJykKPiArIMKgIMKgcGFyYW1zWydleHRyYV9w YXJhbXNfJyArIHZtX25hbWVdICs9ICgiIC1waWRmaWxlICVzIiAlCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChwYXJhbXMu Z2V0KCdwaWRfJyArIHZtX25hbWUpKSkKPiArIMKgIMKgcGFyYW1zWydleHRyYV9wYXJhbXMnXSA9 IHBhcmFtcy5nZXQoJ2V4dHJhX3BhcmFtc18nK3ZtX25hbWUpCj4gKwo+ICsgwqAgwqAjIGtzbV9z aXplOiBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgYWxsb2NhdG9yCj4gKyDCoCDCoGtzbV9zaXpl ID0gbWVtIC0gZ3Vlc3RfcmVzZXJ2ZQo+ICsgwqAgwqBsb2dnaW5nLmRlYnVnKCJNZW1vcnkgdXNl ZCBieSBhbGxvY2F0b3Igb24gZ3Vlc3RzID0gJWRNIiAlIChrc21fc2l6ZSkpCj4gKwo+ICsgwqAg wqAjIENyZWF0aW5nIHRoZSBmaXJzdCBndWVzdAo+ICsgwqAgwqBrdm1fcHJlcHJvY2Vzc2luZy5w cmVwcm9jZXNzX3ZtKHRlc3QsIHBhcmFtcywgZW52LCB2bV9uYW1lKQo+ICsgwqAgwqBsdm1zLmFw cGVuZChrdm1fdXRpbHMuZW52X2dldF92bShlbnYsIHZtX25hbWUpKQo+ICsgwqAgwqBpZiBub3Qg bHZtc1swXToKPiArIMKgIMKgIMKgIMKgcmFpc2UgZXJyb3IuVGVzdEVycm9yKCJWTSBvYmplY3Qg bm90IGZvdW5kIGluIGVudmlyb25tZW50IikKPiArIMKgIMKgaWYgbm90IGx2bXNbMF0uaXNfYWxp dmUoKToKPiArIMKgIMKgIMKgIMKgcmFpc2UgZXJyb3IuVGVzdEVycm9yKCJWTSBzZWVtcyB0byBi ZSBkZWFkOyBUZXN0IHJlcXVpcmVzIGEgbGl2aW5nICIKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIlZNIikKPiArCj4gKyDCoCDCoGxvZ2dpbmcuZGVidWco IkJvb3RpbmcgZmlyc3QgZ3Vlc3QgJXMiLCBsdm1zWzBdLm5hbWUpCj4gKwo+ICsgwqAgwqBsc2Vz c2lvbnMuYXBwZW5kKGt2bV91dGlscy53YWl0X2Zvcihsdm1zWzBdLnJlbW90ZV9sb2dpbiwgMzYw LCAwLCAyKSkKPiArIMKgIMKgaWYgbm90IGxzZXNzaW9uc1swXToKPiArIMKgIMKgIMKgIMKgcmFp c2UgZXJyb3IuVGVzdEZhaWwoIkNvdWxkIG5vdCBsb2cgaW50byBmaXJzdCBndWVzdCIpCj4gKyDC oCDCoCMgQXNzb2NpYXRlIHZtIFBJRAo+ICsgwqAgwqB0cnk6Cj4gKyDCoCDCoCDCoCDCoHRtcCA9 IG9wZW4ocGFyYW1zLmdldCgncGlkXycgKyB2bV9uYW1lKSwgJ3InKQo+ICsgwqAgwqAgwqAgwqBw YXJhbXNbJ3BpZF8nICsgdm1fbmFtZV0gPSBpbnQodG1wLnJlYWRsaW5lKCkpCj4gKyDCoCDCoGV4 Y2VwdDoKPiArIMKgIMKgIMKgIMKgcmFpc2UgZXJyb3IuVGVzdEZhaWwoIkNvdWxkIG5vdCBnZXQg UElEIG9mICVzIiAlICh2bV9uYW1lKSkKPiArCj4gKyDCoCDCoCMgQ3JlYXRpbmcgb3RoZXIgZ3Vl c3Qgc3lzdGVtcwo+ICsgwqAgwqBmb3IgaSBpbiByYW5nZSgxLCB2bXNjKToKPiArIMKgIMKgIMKg IMKgdm1fbmFtZSA9ICJ2bSIgKyBzdHIoaSArIDEpCj4gKyDCoCDCoCDCoCDCoHBhcmFtc1sncGlk XycgKyB2bV9uYW1lXSA9IGt2bV91dGlscy5nZW5lcmF0ZV90bXBfZmlsZV9uYW1lKHZtX25hbWUs Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCdwaWQnKQo+ ICsgwqAgwqAgwqAgwqBwYXJhbXNbJ2V4dHJhX3BhcmFtc18nICsgdm1fbmFtZV0gPSBwYXJhbXMu Z2V0KCdleHRyYV9wYXJhbXMnKQo+ICsgwqAgwqAgwqAgwqBwYXJhbXNbJ2V4dHJhX3BhcmFtc18n ICsgdm1fbmFtZV0gKz0gKCIgLXBpZGZpbGUgJXMiICUKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChwYXJhbXMuZ2V0 KCdwaWRfJyArIHZtX25hbWUpKSkKPiArIMKgIMKgIMKgIMKgcGFyYW1zWydleHRyYV9wYXJhbXMn XSA9IHBhcmFtcy5nZXQoJ2V4dHJhX3BhcmFtc18nICsgdm1fbmFtZSkKPiArCj4gKyDCoCDCoCDC oCDCoCMgTGFzdCBWTSBpcyBsYXRlciB1c2VkIHRvIHJ1biBtb3JlIGFsbG9jYXRvcnMgc2ltdWx0 YW5lb3VzbHkKPiArIMKgIMKgIMKgIMKgbHZtcy5hcHBlbmQobHZtc1swXS5jbG9uZSh2bV9uYW1l LCBwYXJhbXMpKQo+ICsgwqAgwqAgwqAgwqBrdm1fdXRpbHMuZW52X3JlZ2lzdGVyX3ZtKGVudiwg dm1fbmFtZSwgbHZtc1tpXSkKPiArIMKgIMKgIMKgIMKgcGFyYW1zWyd2bXMnXSArPSAiICIgKyB2 bV9uYW1lCj4gKwo+ICsgwqAgwqAgwqAgwqBsb2dnaW5nLmRlYnVnKCJCb290aW5nIGd1ZXN0ICVz IiAlIGx2bXNbaV0ubmFtZSkKPiArIMKgIMKgIMKgIMKgaWYgbm90IGx2bXNbaV0uY3JlYXRlKCk6 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHJhaXNlIGVycm9yLlRlc3RGYWlsKCJDYW5ub3QgY3JlYXRl IFZNICVzIiAlIGx2bXNbaV0ubmFtZSkKPiArIMKgIMKgIMKgIMKgaWYgbm90IGx2bXNbaV0uaXNf YWxpdmUoKToKPiArIMKgIMKgIMKgIMKgIMKgIMKgcmFpc2UgZXJyb3IuVGVzdEVycm9yKCJWTSAl cyBzZWVtcyB0byBiZSBkZWFkOyBUZXN0IHJlcXVpcmVzIGEiCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCJsaXZpbmcgVk0iICUgbHZtc1tpXS5u YW1lKQo+ICsKPiArIMKgIMKgIMKgIMKgbHNlc3Npb25zLmFwcGVuZChrdm1fdXRpbHMud2FpdF9m b3IobHZtc1tpXS5yZW1vdGVfbG9naW4sIDM2MCwgMCwgMikpCj4gKyDCoCDCoCDCoCDCoGlmIG5v dCBsc2Vzc2lvbnNbaV06Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHJhaXNlIGVycm9yLlRlc3RGYWls KCJDb3VsZCBub3QgbG9nIGludG8gZ3Vlc3QgJXMiICUKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGx2bXNbaV0ubmFtZSkKPiArIMKgIMKgIMKgIMKg dHJ5Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0bXAgPSBvcGVuKHBhcmFtcy5nZXQoJ3BpZF8nICsg dm1fbmFtZSksICdyJykKPiArIMKgIMKgIMKgIMKgIMKgIMKgcGFyYW1zWydwaWRfJyArIHZtX25h bWVdID0gaW50KHRtcC5yZWFkbGluZSgpKQo+ICsgwqAgwqAgwqAgwqBleGNlcHQ6Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoHJhaXNlIGVycm9yLlRlc3RGYWlsKCJDb3VsZCBub3QgZ2V0IFBJRCBvZiAl cyIgJSAodm1fbmFtZSkpCj4gKwo+ICsgwqAgwqAjIExldCBndWVzdHMgcmVzdCBhIGxpdHRsZSBi aXQgOi0pCj4gKyDCoCDCoHN0ID0gdm1zYyAqIDIgKiBwZXJmX3JhdGlvCj4gKyDCoCDCoGxvZ2dp bmcuZGVidWcoIldhaXRpbmcgJWRzIGJlZm9yZSBwcm9jZWVkIiwgc3QpCj4gKyDCoCDCoHRpbWUu c2xlZXAodm1zYyAqIDIgKiBwZXJmX3JhdGlvKQo+ICsgwqAgwqBsb2dnaW5nLmRlYnVnKGt2bV90 ZXN0X3V0aWxzLmdldF9tZW1vcnlfaW5mbyhsdm1zKSkKPiArCj4gKyDCoCDCoCMgQ29weSBhbGxv Y2F0b3IucHkgaW50byBndWVzdHMKPiArIMKgIMKgcHdkID0gb3MucGF0aC5qb2luKG9zLmVudmly b25bJ0FVVE9ESVInXSwndGVzdHMva3ZtJykKPiArIMKgIMKgdmtzbWRfc3JjID0gb3MucGF0aC5q b2luKHB3ZCwgInNjcmlwdHMvYWxsb2NhdG9yLnB5IikKPiArIMKgIMKgZHN0X2RpciA9ICIvdG1w Igo+ICsgwqAgwqBmb3Igdm0gaW4gbHZtczoKPiArIMKgIMKgIMKgIMKgaWYgbm90IHZtLmNvcHlf ZmlsZXNfdG8odmtzbWRfc3JjLCBkc3RfZGlyKToKPiArIMKgIMKgIMKgIMKgIMKgIMKgcmFpc2Ug ZXJyb3IuVGVzdEZhaWwoImNvcHlfZmlsZXNfdG8gZmFpbGVkICVzIiAlIHZtLm5hbWUpCj4gKyDC oCDCoGxvZ2dpbmcuaW5mbygiUGhhc2UgMDogUEFTUyIpCj4gKwo+ICsgwqAgwqBpZiBwYXJhbXNb J2tzbV9tb2RlJ10gPT0gInBhcmFsbGVsIjoKPiArIMKgIMKgIMKgIMKgbG9nZ2luZy5pbmZvKCJT dGFydGluZyBLU00gdGVzdCBwYXJhbGxlbCBtb2RlIikKPiArIMKgIMKgIMKgIMKgc3BsaXRfcGFy YWxsZWwoKQo+ICsgwqAgwqAgwqAgwqBsb2dnaW5nLmluZm8oIktTTSB0ZXN0IHBhcmFsbGVsIG1v ZGU6IFBBU1MiKQo+ICsgwqAgwqBlbGlmIHBhcmFtc1sna3NtX21vZGUnXSA9PSAic2VyaWFsIjoK PiArIMKgIMKgIMKgIMKgbG9nZ2luZy5pbmZvKCJTdGFydGluZyBLU00gdGVzdCBzZXJpYWwgbW9k ZSIpCj4gKyDCoCDCoCDCoCDCoGluaXRpYWxpemVfZ3Vlc3RzKCkKPiArIMKgIMKgIMKgIMKgc2Vw YXJhdGVfZmlyc3RfZ3Vlc3QoKQo+ICsgwqAgwqAgwqAgwqBzcGxpdF9ndWVzdCgpCj4gKyDCoCDC oCDCoCDCoGxvZ2dpbmcuaW5mbygiS1NNIHRlc3Qgc2VyaWFsIG1vZGU6IFBBU1MiKQo+IGRpZmYg LS1naXQgYS9jbGllbnQvdGVzdHMva3ZtL3Rlc3RzX2Jhc2UuY2ZnLnNhbXBsZSBiL2NsaWVudC90 ZXN0cy9rdm0vdGVzdHNfYmFzZS5jZmcuc2FtcGxlCj4gaW5kZXggZTlmZGQwNS4uNDUxNmVkMCAx MDA2NDQKPiAtLS0gYS9jbGllbnQvdGVzdHMva3ZtL3Rlc3RzX2Jhc2UuY2ZnLnNhbXBsZQo+ICsr KyBiL2NsaWVudC90ZXN0cy9rdm0vdGVzdHNfYmFzZS5jZmcuc2FtcGxlCj4gQEAgLTI1NSw2ICsy NTUsMjggQEAgdmFyaWFudHM6Cj4gwqAgwqAgwqAgwqAgdHlwZSA9IHBoeXNpY2FsX3Jlc291cmNl c19jaGVjawo+IMKgIMKgIMKgIMKgIGNhdGNoX3V1aWRfY21kID0gZG1pZGVjb2RlIHwgYXdrIC1G OiAnL1VVSUQvIHtwcmludCAkMn0nCj4KPiArIMKgIMKgLSBrc21fb3ZlcmNvbW1pdDoKPiArIMKg IMKgIMKgIMKgIyBEb24ndCBwcmVwcm9jZXNzIGFueSB2bXMgYXMgd2UgbmVlZCB0byBjaGFuZ2Ug aXRzIHBhcmFtcwo+ICsgwqAgwqAgwqAgwqB2bXMgPSAnJwo+ICsgwqAgwqAgwqAgwqBpbWFnZV9z bmFwc2hvdCA9IHllcwo+ICsgwqAgwqAgwqAgwqBraWxsX3ZtX2dyYWNlZnVsbHkgPSBubwo+ICsg wqAgwqAgwqAgwqB0eXBlID0ga3NtX292ZXJjb21taXQKPiArIMKgIMKgIMKgIMKgIyBNYWtlIGhv c3QgdXNlIHN3YXAgKGEgdmFsdWUgb2YgJ25vJyB3aWxsIHR1cm4gb2ZmIGhvc3Qgc3dhcCkKPiAr IMKgIMKgIMKgIMKga3NtX3N3YXAgPSB5ZXMKPiArIMKgIMKgIMKgIMKgbm8gaHVnZXBhZ2VzCj4g KyDCoCDCoCDCoCDCoCMgT3ZlcmNvbW1pdCBvZiBob3N0IG1lbW1vcnkKPiArIMKgIMKgIMKgIMKg a3NtX292ZXJjb21taXRfcmF0aW8gPSAzCj4gKyDCoCDCoCDCoCDCoCMgTWF4IHBhcmFsZWwgcnVu cyBtYWNoaW5lCj4gKyDCoCDCoCDCoCDCoGtzbV9wYXJhbGxlbF9yYXRpbyA9IDQKPiArIMKgIMKg IMKgIMKgIyBIb3N0IG1lbW9yeSByZXNlcnZlCj4gKyDCoCDCoCDCoCDCoGtzbV9ob3N0X3Jlc2Vy dmUgPSA1MTIKPiArIMKgIMKgIMKgIMKga3NtX2d1ZXN0X3Jlc2VydmUgPSAxMDI0Cj4gKyDCoCDC oCDCoCDCoHZhcmlhbnRzOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAtIGtzbV9zZXJpYWwKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKga3NtX21vZGUgPSAic2VyaWFsIgo+ICsgwqAgwqAgwqAgwqAg wqAgwqAtIGtzbV9wYXJhbGxlbAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBrc21fbW9kZSA9 ICJwYXJhbGxlbCIKPiArCj4gwqAgwqAgIyBzeXN0ZW1fcG93ZXJkb3duLCBzeXN0ZW1fcmVzZXQg YW5kIHNodXRkb3duICptdXN0KiBiZSB0aGUgbGFzdCBvbmVzCj4gwqAgwqAgIyBkZWZpbmVkIChp biB0aGlzIG9yZGVyKSwgc2luY2UgdGhlIGVmZmVjdCBvZiBzdWNoIHRlc3RzIGNhbiBsZWF2ZQo+ IMKgIMKgICMgdGhlIFZNIG9uIGEgYmFkIHN0YXRlLgo+IEBAIC0yNzgsNiArMzAwLDcgQEAgdmFy aWFudHM6Cj4gwqAgwqAgwqAgwqAga2lsbF92bV9ncmFjZWZ1bGx5ID0gbm8KPiDCoCDCoCAjIERv IG5vdCBkZWZpbmUgdGVzdCB2YXJpYW50cyBiZWxvdyBzaHV0ZG93bgo+Cj4gKwo+IMKgIyBOSUNz Cj4gwqB2YXJpYW50czoKPiDCoCDCoCAtIEBydGw4MTM5Ogo+IC0tCj4gMS42LjYuMQo+Cj4gLS0K PiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3Jp YmUga3ZtIiBpbgo+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJu ZWwub3JnCj4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCDCoGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcv bWFqb3Jkb21vLWluZm8uaHRtbAo+CgoKCi0tIApMdWNhcwpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpBdXRvdGVzdCBtYWlsaW5nIGxpc3QKQXV0b3Rlc3RA dGVzdC5rZXJuZWwub3JnCmh0dHA6Ly90ZXN0Lmtlcm5lbC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xp c3RpbmZvL2F1dG90ZXN0Cg==