From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 3EB061FF164 for <inbox@lore.proxmox.com>; Fri, 9 May 2025 10:45:54 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1F50538856; Fri, 9 May 2025 10:46:11 +0200 (CEST) Message-ID: <93bc24cc-2465-4ed2-b62f-d12305d5add3@proxmox.com> Date: Fri, 9 May 2025 10:46:02 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Hannes Duerr <h.duerr@proxmox.com> To: Lou.Lecrivain@wdz.de, pve-devel@lists.proxmox.com References: <20250506090041.53080-1-h.duerr@proxmox.com> <FR2PPF45D006270C594040B87F6E418E7548588A@FR2PPF45D006270.DEUP281.PROD.OUTLOOK.COM> Content-Language: en-US In-Reply-To: <FR2PPF45D006270C594040B87F6E418E7548588A@FR2PPF45D006270.DEUP281.PROD.OUTLOOK.COM> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.952 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy HTML_MESSAGE 0.001 HTML included in message KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_MAILER 2 Automated Mailer Tag Left in Email SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [pve-devel] SPAM: [PATCH pve-network v4 1/2] ipam: add Nautobot plugin - range workaround questions X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> Ck9uIDUvNy8yNSAxMToxNywgTG91LkxlY3JpdmFpbkB3ZHouZGUgd3JvdGU6Cj4gSGFubmVzLAo+ Cj4gVGhhbmsgeW91IGZvciBoZWxwaW5nIHdpdGggZ2V0dGluZyB0aGUgTmV0Ym94IHBsdWdpbiBp biBnb29kIHNoYXBlLCBpdCdzIGFwcHJlY2lhdGVkLCByZWFsbHkgOikKPgo+IEkganVzdCBoYXZl IHR3byBxdWVzdGlvbnMgcmVnYXJkaW5nIHRoZSBsYWNrIG9mIHJhbmdlIHN1cHBvcnQgaW4gTmF1 dG9ib3Q6Cj4gLSBXYXMgdGhlcmUgYW4gaXNzdWUgd2l0aCB0aGUgb3JpZ2luYWwgd29ya2Fyb3Vu ZCBjb2RlPyBJIGZpbmQgdGhpcyBvbmUgd2F5IG1vcmUgY29tcGxleCwKPiAgICAgYnV0IGFsc28g SSBndWVzcyBJIGNvdWxkJ3ZlIG1pc3NlZCBzb21lIGNvcm5lciBjYXNlKHMpLgpZZXMsIHRoZXJl IHdhcyB0aGUgcHJvYmxlbSB0aGF0IHRoZSBvbGQgdmVyc2lvbiB3b3VsZCBwb3NzaWJseSBvdXRw dXQKaW52YWxpZCBmcmVlIElQIGFkZHJlc3NlcyBpZiB0aGUgSVAgcmFuZ2UgZGlkIG5vdCBzdGFy dCBkaXJlY3RseSBhdAp0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcmVmaXguIEFzc3VtaW5nIHlvdSBo YXZlIDE5Mi4xNjguMC4wLzE2IGFzCnByZWZpeCwgYWxsIElQIGFkZHJlc3NlcyBhcmUgc3RpbGwg ZnJlZSBhbmQgeW91IHdhbnQgZnJlZSBpcCBhZGRyZXNzZXMKaW4gdGhlIHJhbmdlIDE5Mi4xNjgu Ni4xLzE2IC0gMTkyLjE2OC43LjI1NS8xNiB0aGVuIHRoZSBvbGQKaW1wbGVtZW50YXRpb24gd291 bGQgc3RpbGwgaGF2ZSByZWNlaXZlZCB0aGUgYWRkcmVzc2VzCjE5Mi4xNjguMC5bMC01MF0vMjQg ZnJvbSB0aGUgQVBJLiBUaGlzIGNvdWxkIGhhdmUgYmVlbiByZW1lZGllZCBieSBhbgpvZmZzZXQg cGFyYW1ldGVyLCBidXQgdGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHRoZSBBUEkgZW5kcG9p bnQuCkluY3JlYXNpbmcgdGhlIGBsaW1pdGAgaXMgYWxzbyBub3QgYW4gb3B0aW9uLCBhcyB0aGVy ZSBpcyBhIG1heGltdW0KbGltaXQgb2YgMTAwMCBhbmQgeW91IGNhbiBzdGlsbCBydW4gaW50byBw cm9ibGVtcy4KSSBoYXZlIHRoZXJlZm9yZSBvcHRlZCBmb3IgdGhlIGN1cnJlbnQgaW1wbGVtZW50 YXRpb24uCgo+IC0gV2hhdCBoYXBwZW5zIGlmIHdlIHVzZSBhIHByZWZpeCB3aXRoIGEgQ0lEUiBn cmVhdGVyIHRoYW4gLzI0IGluIElQdjQgb3IgLzEyMCBpbiBJUHY2Pwo+ICAgICBEb2VzIG5vdCBi ZWluZyBhYmxlIHRvIHNsaWNlIGl0IG1lYW5zIHRoYXQgcmFuZ2VzIHdpdGggc21hbGwgcHJlZml4 ZXMgc3VjaCBhcyB0aGVzZQo+ICAgICB3b3VsZCBiZSBmb3JiaWRkZW4vbm90IHdvcmtpbmc/Ck5v LCBhbGwgcHJlZml4ZXMgc2hvdWxkIHdvcmsuIEZvciBzbWFsbGVyIHByZWZpeGVzIHN1Y2ggYXMg LzI2LCB3ZQpzdGlsbCBjcmVhdGUgYSAvMjQgcG9vbCBhbmQgc2VhcmNoIGl0IGZvciBmcmVlIGlw cywgYnV0IHRoZW4gY2hlY2sKYWdhaW4gd2hldGhlciB0aGUgaXAgaXMgYWN0dWFsbHkgaW4gdGhl IGRlc2lyZWQgcmFuZ2UgaW4gLzI2LgoKPgo+IEJSCj4gTG91Cj4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+IERlIDrCoEhhbm5lcyBEdWVycjxoLmR1ZXJyQHByb3ht b3guY29tPgo+IEVudm95w6kgOsKgbWFyZGkgNiBtYWkgMjAyNSAxMTowMAo+IMOAIDpwdmUtZGV2 ZWxAbGlzdHMucHJveG1veC5jb20gPHB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbT4KPiBDY8Kg OsKgSGFubmVzIER1ZXJyPGguZHVlcnJAcHJveG1veC5jb20+OyBMZWNyaXZhaW4sIExvdSAoV0Ra KTxMb3UuTGVjcml2YWluQHdkei5kZT4KPiBPYmpldCA6wqBbISFBQ0hUVU5HIGV4dGVybiEhXSAt IFtQQVRDSCBwdmUtbmV0d29yayB2NCAxLzJdIGlwYW06IGFkZCBOYXV0b2JvdCBwbHVnaW4KPiAg IAo+IE5hdXRvYm90IGlzIGEgbmV0d29yayBzb3VyY2Ugb2YgdHJ1dGggWzBdIGFuZCBhcyBzdWNo IHRoaXMgcGx1Z2luIG9mZmVycwo+IHRoZSBwb3NzaWJpbGl0eSB0byBhdXRvbWF0aWNhbGx5IGVu dGVyIElQIGFkZHJlc3NlcyBhbmQgc3VibmV0cwo+IChwcmVmaXhlcyBpbiBOYXV0b2JvdCBqYXJn b24pIGludG8gTmF1dG9ib3QgYXMgc29vbiBhcyB0aGV5IGFyZSBjcmVhdGVkCj4gaW4gUHJveG1v eCBWRS4KPgo+IExpbWl0YXRpb25zOgo+ICogVGhlIElQQU0gcGx1Z2luIGN1cnJlbnRseSBkb2Vz IG5vdCByZWNvZ25pemUgd2hldGhlciBWTXMvQ1RzIGFyZQo+ICDCoCBhY3RpdmUvb25saW5lIGFu ZCBpbml0aWFsbHkgc2V0cyB0aGUgc3RhdHVzIHRvIEFjdGl2ZSBidXQgd2hlbiB0aGUKPiAgwqAg Vk1zL0NUcyBhcmUgc3dpdGNoZWQgb2ZmIHRoZSBzdGF0dXMgaXMgbm90IGRlYWN0aXZhdGVkLgo+ ICogTmF1dG9ib3QgZG9lcyBub3Qgc3VwcG9ydCByYW5nZXMgdGhhdCBjYW4gYmUgc2VhcmNoZWQg Zm9yIGZyZWUgaXAKPiAgwqAgYWRkcmVzc2VzLCBzbyB3ZSBtYXAgYXMgbWFueSBwb29sIHByZWZp eGVzIHRoYXQgd2Ugc2VhcmNoIHVudGlsIHdlCj4gIMKgIGhhdmUgc2VhcmNoZWQgdGhlIGVudGly ZSByYW5nZSBmb3IgZnJlZSBpcCBhZGRyZXNzZXMKPiAqIE5hdXRvYm90IGhhcyB0aGUgcG9zc2li aWxpdHkgdG8gbWFwIEROUyBuYW1lcyB0byBJUCBhZGRyZXNzZXMuCj4gIMKgIEhvd2V2ZXIsIHNp bmNlIHdlIGhhdmUgbm8gc3RhbmRhcmRpemVkIHdheSB0byBzZXQgdGhlIEROUyBuYW1lcyBpbgo+ ICDCoCBQcm94bW94IFZFIChmb3IgY29udGFpbmVycyB0aGUgY29udGFpbmVyIG5hbWUgaW4gUHJv eG1veCBWRSBpcyBzZXQgYXMKPiAgwqAgdGhlIGhvc3QgbmFtZSBpbiB0aGUgY29udGFpbmVyLCBi dXQgdGhpcyBpcyBub3QgcG9zc2libGUgZm9yIFZNcykgd2UKPiAgwqAgcmVmcmFpbiBmcm9tIHNl dHRpbmcgYSBETlMgbmFtZSBhdCB0aGUgbW9tZW50Lgo+ICogTmF1dG9ib3QgZG9lcyBub3QgaGF2 ZSBhIGZpZWxkIGluIElQIGFkZHJlc3Mgb2JqZWN0cyBmb3IgYSBNQUMgYWRkcmVzcwo+ICDCoCBv ciB0byBtYXJrIHRoZW0gYXMgZ2F0ZXdheSwgc28gd2Ugd3JpdGUgdGhpcyBpbiB0aGUgY29tbWVu dC4KPgo+IFswXWh0dHBzOi8vbmV0d29ya3RvY29kZS5jb20vbmF1dG9ib3QvCj4KPiBDby1hdXRo b3JlZC1ieTogbG91IGxlY3JpdmFpbjxsb3UubGVjcml2YWluQHdkei5kZT4KPiBTaWduZWQtb2Zm LWJ5OiBIYW5uZXMgRHVlcnI8aC5kdWVyckBwcm94bW94LmNvbT4KPiAtLS0KPgo+IE5vdGVzOgo+ ICDCoMKgwqAgQ2hhbmdlcyBmcm9tIHYzIC0+IHY0Ogo+ICDCoMKgwqAgKiBNZXJnZSB0aGUgY2hl Y2sgZm9yIGVtcHR5IHByZWZpeGVzL3N1Ym5ldHMgaW50byB0aGlzIGNvbW1pdAo+ICDCoMKgwqAg KiBDcmVhdGUgbmF1dG9ib3RfYXBpX3JlcXVlc3QgdG8gdW5pZnkgQVBJIGNhbGxzCj4gIMKgwqDC oCAqIGFkZCB1cGRhdGVfc3VibmV0IGZ1bmN0aW9uCj4gIMKgwqDCoCAqIGZpeCBhZGRfcmFuZ2Vf bmV4dF9mcmVlaXAKPiAgwqDCoMKgICogZml4IGFuZCB1bmlmeSBlcnJvciBoYW5kbGluZwo+ICDC oMKgwqAgKiBGaXggcGVybCBzdHlsZQo+Cj4gIMKgc3JjL1BWRS9BUEkyL05ldHdvcmsvU0ROL0lw YW1zLnBtwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gIMKgc3JjL1BWRS9OZXR3b3Jr L1NETi9JcGFtcy5wbcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAzICsKPiAg wqBzcmMvUFZFL05ldHdvcmsvU0ROL0lwYW1zL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgIHzC oMKgIDIgKy0KPiAgwqBzcmMvUFZFL05ldHdvcmsvU0ROL0lwYW1zL05hdXRvYm90UGx1Z2luLnBt IHwgNTEzICsrKysrKysrKysrKysrKysrKysrCj4gIMKgNCBmaWxlcyBjaGFuZ2VkLCA1MTggaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ICDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvUFZF L05ldHdvcmsvU0ROL0lwYW1zL05hdXRvYm90UGx1Z2luLnBtCj4KPiBkaWZmIC0tZ2l0IGEvc3Jj L1BWRS9BUEkyL05ldHdvcmsvU0ROL0lwYW1zLnBtIGIvc3JjL1BWRS9BUEkyL05ldHdvcmsvU0RO L0lwYW1zLnBtCj4gaW5kZXggMjdlYWQwMi4uODA3NDUxMiAxMDA2NDQKPiAtLS0gYS9zcmMvUFZF L0FQSTIvTmV0d29yay9TRE4vSXBhbXMucG0KPiArKysgYi9zcmMvUFZFL0FQSTIvTmV0d29yay9T RE4vSXBhbXMucG0KPiBAQCAtMTIsNiArMTIsNyBAQCB1c2UgUFZFOjpOZXR3b3JrOjpTRE46Oklw YW1zOjpQbHVnaW47Cj4gIMKgdXNlIFBWRTo6TmV0d29yazo6U0ROOjpJcGFtczo6UFZFUGx1Z2lu Owo+ICDCoHVzZSBQVkU6Ok5ldHdvcms6OlNETjo6SXBhbXM6OlBocElwYW1QbHVnaW47Cj4gIMKg dXNlIFBWRTo6TmV0d29yazo6U0ROOjpJcGFtczo6TmV0Ym94UGx1Z2luOwo+ICt1c2UgUFZFOjpO ZXR3b3JrOjpTRE46OklwYW1zOjpOYXV0b2JvdFBsdWdpbjsKPiAgwqB1c2UgUFZFOjpOZXR3b3Jr OjpTRE46OkRoY3A7Cj4gIMKgdXNlIFBWRTo6TmV0d29yazo6U0ROOjpWbmV0czsKPiAgwqB1c2Ug UFZFOjpOZXR3b3JrOjpTRE46OlpvbmVzOwo+IGRpZmYgLS1naXQgYS9zcmMvUFZFL05ldHdvcmsv U0ROL0lwYW1zLnBtIGIvc3JjL1BWRS9OZXR3b3JrL1NETi9JcGFtcy5wbQo+IGluZGV4IGM2ODli OGYuLjJlY2I3NWUgMTAwNjQ0Cj4gLS0tIGEvc3JjL1BWRS9OZXR3b3JrL1NETi9JcGFtcy5wbQo+ ICsrKyBiL3NyYy9QVkUvTmV0d29yay9TRE4vSXBhbXMucG0KPiBAQCAtMTIsMTEgKzEyLDE0IEBA IHVzZSBQVkU6Ok5ldHdvcms7Cj4gICAKPiAgwqB1c2UgUFZFOjpOZXR3b3JrOjpTRE46OklwYW1z OjpQVkVQbHVnaW47Cj4gIMKgdXNlIFBWRTo6TmV0d29yazo6U0ROOjpJcGFtczo6TmV0Ym94UGx1 Z2luOwo+ICt1c2UgUFZFOjpOZXR3b3JrOjpTRE46OklwYW1zOjpOYXV0b2JvdFBsdWdpbjsKPiAg wqB1c2UgUFZFOjpOZXR3b3JrOjpTRE46OklwYW1zOjpQaHBJcGFtUGx1Z2luOwo+ICDCoHVzZSBQ VkU6Ok5ldHdvcms6OlNETjo6SXBhbXM6OlBsdWdpbjsKPiAgIAo+ICsKPiAgwqBQVkU6Ok5ldHdv cms6OlNETjo6SXBhbXM6OlBWRVBsdWdpbi0+cmVnaXN0ZXIoKTsKPiAgwqBQVkU6Ok5ldHdvcms6 OlNETjo6SXBhbXM6Ok5ldGJveFBsdWdpbi0+cmVnaXN0ZXIoKTsKPiArUFZFOjpOZXR3b3JrOjpT RE46OklwYW1zOjpOYXV0b2JvdFBsdWdpbi0+cmVnaXN0ZXIoKTsKPiAgwqBQVkU6Ok5ldHdvcms6 OlNETjo6SXBhbXM6OlBocElwYW1QbHVnaW4tPnJlZ2lzdGVyKCk7Cj4gIMKgUFZFOjpOZXR3b3Jr OjpTRE46OklwYW1zOjpQbHVnaW4tPmluaXQoKTsKPiAgIAo+IGRpZmYgLS1naXQgYS9zcmMvUFZF L05ldHdvcmsvU0ROL0lwYW1zL01ha2VmaWxlIGIvc3JjL1BWRS9OZXR3b3JrL1NETi9JcGFtcy9N YWtlZmlsZQo+IGluZGV4IDRlN2Q2NWYuLjc1ZTViOWEgMTAwNjQ0Cj4gLS0tIGEvc3JjL1BWRS9O ZXR3b3JrL1NETi9JcGFtcy9NYWtlZmlsZQo+ICsrKyBiL3NyYy9QVkUvTmV0d29yay9TRE4vSXBh bXMvTWFrZWZpbGUKPiBAQCAtMSw0ICsxLDQgQEAKPiAtU09VUkNFUz1QbHVnaW4ucG0gUGhwSXBh bVBsdWdpbi5wbSBOZXRib3hQbHVnaW4ucG0gUFZFUGx1Z2luLnBtCj4gK1NPVVJDRVM9UGx1Z2lu LnBtIFBocElwYW1QbHVnaW4ucG0gTmV0Ym94UGx1Z2luLnBtIFBWRVBsdWdpbi5wbSBOYXV0b2Jv dFBsdWdpbi5wbQo+ICAgCj4gICAKPiAgwqBQRVJMNURJUj0ke0RFU1RESVJ9L3Vzci9zaGFyZS9w ZXJsNQo+IGRpZmYgLS1naXQgYS9zcmMvUFZFL05ldHdvcmsvU0ROL0lwYW1zL05hdXRvYm90UGx1 Z2luLnBtIGIvc3JjL1BWRS9OZXR3b3JrL1NETi9JcGFtcy9OYXV0b2JvdFBsdWdpbi5wbQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMjg5NzAyNQo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9zcmMvUFZFL05ldHdvcmsvU0ROL0lwYW1zL05hdXRvYm90UGx1Z2luLnBtCj4g QEAgLTAsMCArMSw1MTMgQEAKPiArcGFja2FnZSBQVkU6Ok5ldHdvcms6OlNETjo6SXBhbXM6Ok5h dXRvYm90UGx1Z2luOwo+ICsKPiArdXNlIHN0cmljdDsKPiArdXNlIHdhcm5pbmdzOwo+ICt1c2Ug UFZFOjpJTm90aWZ5Owo+ICt1c2UgUFZFOjpDbHVzdGVyOwo+ICt1c2UgUFZFOjpUb29sczsKPiAr dXNlIE5ldEFkZHI6OklQOwo+ICt1c2UgTmV0OjpTdWJuZXQgcXcoc3VibmV0X21hdGNoZXIpOwo+ ICsKPiArdXNlIGJhc2UoJ1BWRTo6TmV0d29yazo6U0ROOjpJcGFtczo6UGx1Z2luJyk7Cj4gKwo+ ICtzdWIgdHlwZSB7Cj4gK8KgwqDCoCByZXR1cm4gJ25hdXRvYm90JzsKPiArfQo+ICsKPiArc3Vi IHByb3BlcnRpZXMgewo+ICvCoMKgwqAgcmV0dXJuIHsKPiArwqDCoMKgwqDCoMKgIG5hbWVzcGFj ZSA9PiB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHR5cGUgPT4gJ3N0cmluZycsCj4gK8KgwqDC oMKgwqDCoCB9LAo+ICvCoMKgwqAgfTsKPiArfQo+ICsKPiArc3ViIG9wdGlvbnMgewo+ICvCoMKg wqAgcmV0dXJuIHsKPiArwqDCoMKgwqDCoMKgIHVybCA9PiB7IG9wdGlvbmFsID0+IDAgfSwKPiAr wqDCoMKgwqDCoMKgIHRva2VuID0+IHsgb3B0aW9uYWwgPT4gMCB9LAo+ICvCoMKgwqDCoMKgwqAg bmFtZXNwYWNlID0+IHsgb3B0aW9uYWwgPT4gMCB9LAo+ICvCoMKgwqDCoMKgwqAgZmluZ2VycHJp bnQgPT4geyBvcHRpb25hbCA9PiAxIH0sCj4gK8KgwqDCoCB9Owo+ICt9Cj4gKwo+ICtzdWIgZGVm YXVsdF9pcF9zdGF0dXMgewo+ICvCoMKgwqAgcmV0dXJuICdBY3RpdmUnOwo+ICt9Cj4gKwo+ICtz dWIgbmF1dG9ib3RfYXBpX3JlcXVlc3Qgewo+ICvCoMKgwqAgbXkgKCRjb25maWcsICRtZXRob2Qs ICRwYXRoLCAkcGFyYW1zKSA9IEBfOwo+ICsKPiArwqDCoMKgIHJldHVybiBQVkU6Ok5ldHdvcms6 OlNETjo6YXBpX3JlcXVlc3QoCj4gK8KgwqDCoMKgwqDCoCAkbWV0aG9kLAo+ICvCoMKgwqDCoMKg wqAgIiRjb25maWctPnt1cmx9JHtwYXRofSIsCj4gK8KgwqDCoMKgwqDCoCBbCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgICdDb250ZW50LVR5cGUnID0+ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0 PVVURi04JywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgJ0F1dGhvcml6YXRpb24nID0+ICJ0b2tl biAkY29uZmlnLT57dG9rZW59IiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgJ0FjY2VwdCcgPT4g ImFwcGxpY2F0aW9uL2pzb24iCj4gK8KgwqDCoMKgwqDCoCBdLAo+ICvCoMKgwqDCoMKgwqAgJHBh cmFtcywKPiArwqDCoMKgwqDCoMKgICRjb25maWctPntmaW5nZXJwcmludH0sCj4gK8KgwqDCoCAp Owo+ICt9Cj4gKwo+ICtzdWIgYWRkX3N1Ym5ldCB7Cj4gK8KgwqDCoCBteSAoJGNsYXNzLCAkY29u ZmlnLCB1bmRlZiwgJHN1Ym5ldCwgJG5vZXJyKSA9IEBfOwo+ICsKPiArwqDCoMKgIG15ICRjaWRy ID0gJHN1Ym5ldC0+e2NpZHJ9Owo+ICvCoMKgwqAgbXkgJG5hbWVzcGFjZSA9ICRjb25maWctPntu YW1lc3BhY2V9Owo+ICsKPiArwqDCoMKgIG15ICRpbnRlcm5hbGlkID0gZ2V0X3ByZWZpeF9pZCgk Y29uZmlnLCAkY2lkciwgJG5vZXJyKTsKPiArwqDCoMKgIGlmICgkaW50ZXJuYWxpZCkgewo+ICvC oMKgwqDCoMKgwqAgcmV0dXJuIGlmICRub2VycjsKPiArwqDCoMKgwqDCoMKgIGRpZSAiY291bGQg bm90IGFkZCB0aGUgc3VibmV0ICRzdWJuZXQgYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cyBpbiBu YXV0b2JvdFxuIgo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIG15ICRwYXJhbXMgPSB7Cj4gK8Kg wqDCoMKgwqDCoCBwcmVmaXggPT4gJGNpZHIsCj4gK8KgwqDCoMKgwqDCoCBuYW1lc3BhY2UgPT4g JG5hbWVzcGFjZSwKPiArwqDCoMKgwqDCoMKgIHN0YXR1cyA9PiBkZWZhdWx0X2lwX3N0YXR1cygp Cj4gK8KgwqDCoCB9Owo+ICsKPiArwqDCoMKgIGV2YWwgewo+ICvCoMKgwqDCoMKgwqAgbmF1dG9i b3RfYXBpX3JlcXVlc3QoJGNvbmZpZywgIlBPU1QiLCAiL2lwYW0vcHJlZml4ZXMvIiwgJHBhcmFt cyk7Cj4gK8KgwqDCoCB9Owo+ICvCoMKgwqAgaWYgKCRAKSB7Cj4gK8KgwqDCoMKgwqDCoCByZXR1 cm4gaWYgJG5vZXJyOwo+ICvCoMKgwqDCoMKgwqAgZGllICJlcnJvciBhZGRpbmcgdGhlIHN1Ym5l dCAkc3VibmV0IHRvIG5hdXRvYm90ICRAXG4iOwo+ICvCoMKgwqAgfQo+ICt9Cj4gKwo+ICtzdWIg dXBkYXRlX3N1Ym5ldCB7Cj4gK8KgwqDCoCBteSAoJGNsYXNzLCAkcGx1Z2luX2NvbmZpZywgJHN1 Ym5ldGlkLCAkc3VibmV0LCAkb2xkX3N1Ym5ldCwgJG5vZXJyKSA9IEBfOwo+ICvCoMKgwqAgIyBk aGNwIHJhbmdlcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBuYXV0b2JvdCBzbyB3ZSBkb24ndCBoYXZl IHRvIHVwZGF0ZSB0aGVtCj4gK30KPiArCj4gK3N1YiBkZWxfc3VibmV0IHsKPiArwqDCoMKgIG15 ICgkY2xhc3MsICRjb25maWcsICRzdWJuZXRpZCwgJHN1Ym5ldCwgJG5vZXJyKSA9IEBfOwo+ICsK PiArwqDCoMKgIG15ICRjaWRyID0gJHN1Ym5ldC0+e2NpZHJ9Owo+ICsKPiArwqDCoMKgIG15ICRp bnRlcm5hbGlkID0gZ2V0X3ByZWZpeF9pZCgkY29uZmlnLCAkY2lkciwgJG5vZXJyKTsKPiArwqDC oMKgIGlmICghJGludGVybmFsaWQpIHsKPiArwqDCoMKgwqDCoMKgIHdhcm4oImNvdWxkIG5vdCBm aW5kIGRlbGV0ZSB0aGUgc3VibmV0ICRjaWRyIGJlY2F1c2UgaXQgZG9lcyBub3QgZXhpc3QgaW4g bmF1dG9ib3RcbiIpOwo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuOwo+ICvCoMKgwqAgfQo+ICsKPiAr wqDCoMKgIGlmICghc3VibmV0X2lzX2RlbGV0YWJsZSgkY29uZmlnLCAkc3VibmV0aWQsICRzdWJu ZXQsICRpbnRlcm5hbGlkLCAkbm9lcnIpKSB7Cj4gK8KgwqDCoMKgwqDCoCByZXR1cm4gaWYgJG5v ZXJyOwo+ICvCoMKgwqDCoMKgwqAgZGllICJjb3VsZCBub3QgZGVsZXRlIHRoZSBzdWJuZXQgJGNp ZHIsIGl0IHN0aWxsIGNvbnRhaW5zIGlwIGFkZHJlc3NlcyFcbiI7Cj4gK8KgwqDCoCB9Cj4gKwo+ ICvCoMKgwqAgIyBkZWxldGUgYXNzb2NpYXRlZCBnYXRld2F5IElQIGFkZHJlc3Nlcwo+ICvCoMKg wqAgJGNsYXNzLT5lbXB0eV9zdWJuZXQoICRjb25maWcsICRzdWJuZXRpZCwgJHN1Ym5ldCwgJGlu dGVybmFsaWQsICRub2Vycik7Cj4gKwo+ICvCoMKgwqAgZXZhbCB7Cj4gK8KgwqDCoMKgwqDCoCBu YXV0b2JvdF9hcGlfcmVxdWVzdCgkY29uZmlnLCAiREVMRVRFIiwgIi9pcGFtL3ByZWZpeGVzLyRp bnRlcm5hbGlkLyIpOwo+ICvCoMKgwqAgfTsKPiArwqDCoMKgIGlmICgkQCkgewo+ICvCoMKgwqDC oMKgwqAgcmV0dXJuIGlmICRub2VycjsKPiArwqDCoMKgwqDCoMKgIGRpZSAiZXJyb3IgZGVsZXRp bmcgc3VibmV0IGZyb20gbmF1dG9ib3Q6ICRAXG4iOwo+ICvCoMKgwqAgfQo+ICvCoMKgwqAgcmV0 dXJuIDE7Cj4gK30KPiArCj4gK3N1YiBhZGRfaXAgewo+ICvCoMKgwqAgbXkgKCRjbGFzcywgJGNv bmZpZywgdW5kZWYsICRzdWJuZXQsICRpcCwgJGhvc3RuYW1lLCAkbWFjLCB1bmRlZiwKPiArwqDC oMKgwqDCoMKgICRpc19nYXRld2F5LCAkbm9lcnIpID0gQF87Cj4gKwo+ICvCoMKgwqAgbXkgJG1h c2sgPSAkc3VibmV0LT57bWFza307Cj4gK8KgwqDCoCBteSAkbmFtZXNwYWNlID0gJGNvbmZpZy0+ e25hbWVzcGFjZX07Cj4gKwo+ICvCoMKgwqAgbXkgJGRlc2NyaXB0aW9uID0gdW5kZWY7Cj4gK8Kg wqDCoCBpZiAoJGlzX2dhdGV3YXkpIHsKPiArwqDCoMKgwqDCoMKgICRkZXNjcmlwdGlvbiA9ICdn YXRld2F5JzsKPiArwqDCoMKgIH0gZWxzaWYgKCRtYWMpIHsKPiArwqDCoMKgwqDCoMKgICRkZXNj cmlwdGlvbiA9ICJtYWM6JG1hYyI7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgbXkgJHBhcmFt cyA9IHsKPiArwqDCoMKgwqDCoMKgIGFkZHJlc3MgPT4gIiRpcC8kbWFzayIsCj4gK8KgwqDCoMKg wqDCoCB0eXBlID0+ICJkaGNwIiwKPiArwqDCoMKgwqDCoMKgIGRlc2NyaXB0aW9uID0+ICRkZXNj cmlwdGlvbiwKPiArwqDCoMKgwqDCoMKgIG5hbWVzcGFjZSA9PiAkbmFtZXNwYWNlLAo+ICvCoMKg wqDCoMKgwqAgc3RhdHVzID0+IGRlZmF1bHRfaXBfc3RhdHVzKCkKPiArwqDCoMKgIH07Cj4gKwo+ ICvCoMKgwqAgZXZhbCB7Cj4gK8KgwqDCoMKgwqDCoCBuYXV0b2JvdF9hcGlfcmVxdWVzdCgkY29u ZmlnLCAiUE9TVCIsICIvaXBhbS9pcC1hZGRyZXNzZXMvIiwgJHBhcmFtcyk7Cj4gK8KgwqDCoCB9 Owo+ICsKPiArwqDCoMKgIGlmICgkQCkgewo+ICvCoMKgwqDCoMKgwqAgaWYgKCRpc19nYXRld2F5 KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGRpZSAiZXJyb3IgYWRkIHN1Ym5ldCBpcCB0byBp cGFtOiBpcCAkaXAgYWxyZWFkeSBleGlzdDogJEAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgIWlzX2lwX2dhdGV3YXkoJGNvbmZpZywgJGlwLCAkbm9lcnIpOwo+ICvCoMKgwqDC oMKgwqAgfSBlbHNpZiAoISRub2Vycikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBkaWUgImVy cm9yIGFkZCBzdWJuZXQgaXAgdG8gaXBhbTogaXAgYWxyZWFkeSBleGlzdDogJEAiOwo+ICvCoMKg wqDCoMKgwqAgfQo+ICvCoMKgwqAgfQo+ICt9Cj4gKwo+ICtzdWIgYWRkX25leHRfZnJlZWlwIHsK PiArwqDCoMKgIG15ICgkY2xhc3MsICRjb25maWcsIHVuZGVmLCAkc3VibmV0LCAkaG9zdG5hbWUs ICRtYWMsIHVuZGVmLCAkbm9lcnIpID0gQF87Cj4gKwo+ICvCoMKgwqAgbXkgJGNpZHIgPSAkc3Vi bmV0LT57Y2lkcn07Cj4gK8KgwqDCoCBteSAkbmFtZXNwYWNlID0gJGNvbmZpZy0+e25hbWVzcGFj ZX07Cj4gKwo+ICvCoMKgwqAgbXkgJGludGVybmFsaWQgPSBnZXRfcHJlZml4X2lkKCRjb25maWcs ICRjaWRyLCAkbm9lcnIpOwo+ICvCoMKgwqAgaWYgKCFkZWZpbmVkKCRpbnRlcm5hbGlkKSkgewo+ ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGlmICRub2VycjsKPiArwqDCoMKgwqDCoMKgIGRpZSAiY291 bGQgbm90IGZpbmQgcHJlZml4ICRjaWRyIGluIG5hdXRvYm90XG4iOwo+ICvCoMKgwqAgfQo+ICsK PiArwqDCoMKgIG15ICRkZXNjcmlwdGlvbiA9IHVuZGVmOwo+ICvCoMKgwqAgJGRlc2NyaXB0aW9u ID0gIm1hYzokbWFjIiBpZiAkbWFjOwo+ICsKPiArwqDCoMKgIG15ICRwYXJhbXMgPSB7Cj4gK8Kg wqDCoMKgwqDCoCB0eXBlID0+ICJkaGNwIiwKPiArwqDCoMKgwqDCoMKgIGRlc2NyaXB0aW9uID0+ ICRkZXNjcmlwdGlvbiwKPiArwqDCoMKgwqDCoMKgIG5hbWVzcGFjZSA9PiAkbmFtZXNwYWNlLAo+ ICvCoMKgwqDCoMKgwqAgc3RhdHVzID0+IGRlZmF1bHRfaXBfc3RhdHVzKCkKPiArwqDCoMKgIH07 Cj4gKwo+ICvCoMKgwqAgbXkgJHJlc3BvbnNlID0gZXZhbCB7Cj4gK8KgwqDCoMKgwqDCoCByZXR1 cm4gbmF1dG9ib3RfYXBpX3JlcXVlc3QoCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICRjb25maWcs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICJQT1NUIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg Ii9pcGFtL3ByZWZpeGVzLyRpbnRlcm5hbGlkL2F2YWlsYWJsZS1pcHMvIiwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqAgJHBhcmFtcwo+ICvCoMKgwqDCoMKgwqAgKTsKPiArwqDCoMKgIH07Cj4gK8Kg wqDCoCBpZiAoJEAgfHwgISRyZXNwb25zZSkgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGlmICRu b2VycjsKPiArwqDCoMKgwqDCoMKgIGRpZSAiY291bGQgbm90IGFsbG9jYXRlIGlwIGluIHN1Ym5l dCAkY2lkcjogJEBcbiI7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgbXkgJGlwID0gTmV0QWRk cjo6SVAtPm5ldygkcmVzcG9uc2UtPnthZGRyZXNzfSk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuICRp cC0+YWRkcjsKPiArfQo+ICsKPiArc3ViIGFkZF9yYW5nZV9uZXh0X2ZyZWVpcCB7Cj4gK8KgwqDC oCBteSAoJGNsYXNzLCAkY29uZmlnLCAkc3VibmV0LCAkcmFuZ2UsICRkYXRhLCAkbm9lcnIpID0g QF87Cj4gKwo+ICvCoMKgwqAgbXkgJGNpZHIgPSBOZXRBZGRyOjpJUC0+bmV3KCRzdWJuZXQtPntj aWRyfSk7Cj4gK8KgwqDCoCBteSAkbmFtZXNwYWNlID0gJGNvbmZpZy0+e25hbWVzcGFjZX07Cj4g Kwo+ICvCoMKgwqAgIyBOYXV0b2JvdCBkb2VzIG5vdCBzdXBwb3J0IElQIHJhbmdlcyBvbmx5IHBy ZWZpeGVzLgo+ICvCoMKgwqAgIyBXZSB0aGVyZWZvcmUgZGl2aWRlIHRoZSByYW5nZSBpbnRvIHNt YWxsZXIgcG9vbC1wcmVmaXhlcywKPiArwqDCoMKgICMgZWFjaCBjb250YWluaW5nIDI1NiBhZGRy ZXNzZXMsIGFuZCBzZWFyY2ggZm9yIGF2YWlsYWJsZSBJUHMgaW4gdGhlbQo+ICvCoMKgwqAgbXkg JHByZWZpeF9zaXplID0gJGNpZHItPnZlcnNpb24gPT0gNCA/IDI0IDogMTIwOwo+ICvCoMKgwqAg bXkgJGluY3JlbWVudCA9IDI1NjsKPiArwqDCoMKgIG15ICRmb3VuZF9pcCA9IHVuZGVmOwo+ICsK PiArwqDCoMKgIG15ICRzdGFydF9yYW5nZSA9IE5ldEFkZHI6OklQLT5uZXcoJHJhbmdlLT57J3N0 YXJ0LWFkZHJlc3MnfSwgJHByZWZpeF9zaXplKTsKPiArwqDCoMKgIG15ICRlbmRfcmFuZ2UgPSBO ZXRBZGRyOjpJUC0+bmV3KCRyYW5nZS0+eydlbmQtYWRkcmVzcyd9LCAkcHJlZml4X3NpemUpOwo+ ICvCoMKgwqAgbXkgJG1hdGNoZXIgPSBzdWJuZXRfbWF0Y2hlcigkZW5kX3JhbmdlLT5jaWRyKTsK PiArwqDCoMKgIG15ICRjdXJyZW50X2lwID0gJHN0YXJ0X3JhbmdlOwo+ICsKPiArwqDCoMKgIHdo aWxlICgxKSB7Cj4gK8KgwqDCoMKgwqDCoCBteSAkY3VycmVudF9jaWRyID0gJGN1cnJlbnRfaXAt PmFkZHIgLiAiLyRwcmVmaXhfc2l6ZSI7Cj4gKwo+ICvCoMKgwqDCoMKgwqAgbXkgJHBhcmFtcyA9 IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJlZml4ID0+ICRjdXJyZW50X2NpZHIsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgIG5hbWVzcGFjZSA9PiAkbmFtZXNwYWNlLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdGF0dXMgPT4gZGVmYXVsdF9pcF9zdGF0dXMoKSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqAgdHlwZSA9PiAicG9vbCIKPiArwqDCoMKgwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqDC oMKgwqAgIyBjcmVhdGUgdGVtcG9yYXJ5IHBvb2wgcHJlZml4Cj4gK8KgwqDCoMKgwqDCoCBteSAk dGVtcF9wcmVmaXggPSBldmFsIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIG5hdXRv Ym90X2FwaV9yZXF1ZXN0KCRjb25maWcsICJQT1NUIiwgIi9pcGFtL3ByZWZpeGVzLyIsICRwYXJh bXMpOwo+ICvCoMKgwqDCoMKgwqAgfTsKPiArCj4gK8KgwqDCoMKgwqDCoCAjIHNraXAgaWYgaXQg aXMgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBpdAo+ICvCoMKgwqDCoMKgwqAgbmV4dCBpZiAkQDsK PiArCj4gK8KgwqDCoMKgwqDCoCBteSAkdGVtcF9wcmVmaXhfaWQgPSAkdGVtcF9wcmVmaXgtPntp ZH07Cj4gKwo+ICvCoMKgwqDCoMKgwqAgIyBGZXRjaCBhdmFpbGFibGUgSVBzIGZyb20gdGhlIHRl bXBvcmFyeSBwb29sIGFuZCBmaW5kIGEgbWF0Y2hpbmcgSVAKPiArwqDCoMKgwqDCoMKgIG15ICRy ZXN1bHQgPSBldmFsIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIG5hdXRvYm90X2Fw aV9yZXF1ZXN0KAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICRjb25maWcsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkdFVCIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgIi9pcGFtL3ByZWZpeGVzLyR0ZW1wX3ByZWZpeF9pZC9hdmFpbGFibGUtaXBzLz9s aW1pdD0kaW5jcmVtZW50Igo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCApOwo+ICvCoMKgwqDCoMKg wqAgfTsKPiArCj4gK8KgwqDCoMKgwqDCoCAjIHNlYXJjaCBsaXN0IGZvciBJUHMgaW4gYWN0dWFs IHJhbmdlCj4gK8KgwqDCoMKgwqDCoCBpZiAoISRAKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg IGZvcmVhY2ggbXkgJGVudHJ5IChAJHJlc3VsdCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIG15ICRpcCA9IE5ldEFkZHI6OklQLT5uZXcoJGVudHJ5LT57YWRkcmVzc30pOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICMgY29tcGFyaXNvbiBpcyBvbmx5IHBvc3NpYmxl IGJlY2F1c2UgdGhleSBhcmUgaW4gdGhlIHNhbWUgc3VibmV0Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKCRzdGFydF9yYW5nZSA8PSAkaXAgJiYgJGlwIDw9ICRlbmRfcmFuZ2Up IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICRmb3VuZF9pcCA9ICRp cC0+YWRkcjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxhc3Q7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCB9 Cj4gK8KgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqAgIyBEZWxldGUgdGVtcG9yYXJ5 IHByZWZpeCBwb29sCj4gK8KgwqDCoMKgwqDCoCBldmFsIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqAgbmF1dG9ib3RfYXBpX3JlcXVlc3QoJGNvbmZpZywgIkRFTEVURSIsICIvaXBhbS9wcmVmaXhl cy8kdGVtcF9wcmVmaXhfaWQvIik7Cj4gK8KgwqDCoMKgwqDCoCB9Owo+ICsKPiArwqDCoMKgwqDC oMKgIGxhc3QgaWYgJGZvdW5kX2lwOwo+ICsKPiArwqDCoMKgwqDCoMKgICMgd2Ugc2VhcmNoZWQg dGhlIGxhc3QgcG9vbCBwcmVmaXgKPiArwqDCoMKgwqDCoMKgIGxhc3QgaWYgJG1hdGNoZXItPigk Y3VycmVudF9pcC0+YWRkcik7Cj4gKwo+ICvCoMKgwqDCoMKgwqAgJGN1cnJlbnRfaXAgPSAkY3Vy cmVudF9pcC0+cGx1cygkaW5jcmVtZW50KTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpZiAo ISRmb3VuZF9pcCkgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGlmICRub2VycjsKPiArwqDCoMKg wqDCoMKgIGRpZSAiY291bGQgbm90IGFsbG9jYXRlIGlwIGluIHRoZSByYW5nZSAiIC4gJHN0YXJ0 X3JhbmdlLT5hZGRyIC4gIiAtICIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgLiAkZW5kX3Jhbmdl LT5hZGRyIC4gIjogJEBcbiI7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgJGNsYXNzLT5hZGRf aXAoJGNvbmZpZywgdW5kZWYsICRzdWJuZXQsICRmb3VuZF9pcCwgJGRhdGEtPntob3N0bmFtZX0s ICRkYXRhLT57bWFjfSwgdW5kZWYsIDAsICRub2Vycik7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuICRm b3VuZF9pcDsKPiArfQo+ICsKPiArc3ViIHVwZGF0ZV9pcCB7Cj4gK8KgwqDCoCBteSAoJGNsYXNz LCAkY29uZmlnLCAkc3VibmV0aWQsICRzdWJuZXQsICRpcCwgJGhvc3RuYW1lLCAkbWFjLAo+ICvC oMKgwqDCoMKgwqAgdW5kZWYsICRpc19nYXRld2F5LCAkbm9lcnIpID0gQF87Cj4gKwo+ICvCoMKg wqAgbXkgJG1hc2sgPSAkc3VibmV0LT57bWFza307Cj4gK8KgwqDCoCBteSAkbmFtZXNwYWNlID0g JGNvbmZpZy0+e25hbWVzcGFjZX07Cj4gKwo+ICvCoMKgwqAgbXkgJGRlc2NyaXB0aW9uID0gdW5k ZWY7Cj4gK8KgwqDCoCBpZiAoJGlzX2dhdGV3YXkpIHsKPiArwqDCoMKgwqDCoMKgICRkZXNjcmlw dGlvbiA9ICdnYXRld2F5Jwo+ICvCoMKgwqAgfSBlbHNpZiAoJG1hYykgewo+ICvCoMKgwqDCoMKg wqAgJGRlc2NyaXB0aW9uID0gIm1hYzokbWFjIjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBt eSAkcGFyYW1zID0gewo+ICvCoMKgwqDCoMKgwqAgYWRkcmVzcyA9PiAiJGlwLyRtYXNrIiwKPiAr wqDCoMKgwqDCoMKgIHR5cGUgPT4gImRoY3AiLAo+ICvCoMKgwqDCoMKgwqAgZGVzY3JpcHRpb24g PT4gJGRlc2NyaXB0aW9uLAo+ICvCoMKgwqDCoMKgwqAgbmFtZXNwYWNlID0+ICRuYW1lc3BhY2Us Cj4gK8KgwqDCoMKgwqDCoCBzdGF0dXMgPT4gZGVmYXVsdF9pcF9zdGF0dXMoKQo+ICvCoMKgwqAg fTsKPiArCj4gK8KgwqDCoCBteSAkaXBfaWQgPSBnZXRfaXBfaWQoJGNvbmZpZywgJGlwLCAkbm9l cnIpOwo+ICvCoMKgwqAgaWYgKCFkZWZpbmVkKCRpcF9pZCkpIHsKPiArwqDCoMKgwqDCoMKgIHJl dHVybiBpZiAkbm9lcnI7Cj4gK8KgwqDCoMKgwqDCoCBkaWUgImNvdWxkIG5vdCBmaW5kIHRoZSBp cCAkaXAgaW4gbmF1dG9ib3RcbiI7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgZXZhbCB7Cj4g K8KgwqDCoMKgwqDCoCBuYXV0b2JvdF9hcGlfcmVxdWVzdCgkY29uZmlnLCAiUEFUQ0giLCAiL2lw YW0vaXAtYWRkcmVzc2VzLyRpcF9pZC8iLCAkcGFyYW1zKTsKPiArwqDCoMKgIH07Cj4gK8KgwqDC oCBpZiAoJEApIHsKPiArwqDCoMKgwqDCoMKgIHJldHVybiBpZiAkbm9lcnI7Cj4gK8KgwqDCoMKg wqDCoCBkaWUgImVycm9yIHVwZGF0aW5nIGlwICRpcDogJEAiOwo+ICvCoMKgwqAgfQo+ICt9Cj4g Kwo+ICsKPiArc3ViIGRlbF9pcCB7Cj4gK8KgwqDCoCBteSAoJGNsYXNzLCAkY29uZmlnLCB1bmRl ZiwgdW5kZWYsICRpcCwgJG5vZXJyKSA9IEBfOwo+ICsKPiArwqDCoMKgIHJldHVybiBpZiAhJGlw Owo+ICsKPiArwqDCoMKgIG15ICRpcF9pZCA9IGdldF9pcF9pZCgkY29uZmlnLCAkaXAsICRub2Vy cik7Cj4gK8KgwqDCoCBpZiAoIWRlZmluZWQoJGlwX2lkKSkgewo+ICvCoMKgwqDCoMKgwqAgd2Fy bigiY291bGQgbm90IGZpbmQgdGhlIGlwICRpcCBpbiBuYXV0b2JvdFxuIik7Cj4gK8KgwqDCoMKg wqDCoCByZXR1cm47Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgZXZhbCB7Cj4gK8KgwqDCoMKg wqDCoCBuYXV0b2JvdF9hcGlfcmVxdWVzdCgkY29uZmlnLCAiREVMRVRFIiwgIi9pcGFtL2lwLWFk ZHJlc3Nlcy8kaXBfaWQvIik7Cj4gK8KgwqDCoCB9Owo+ICvCoMKgwqAgaWYgKCRAKSB7Cj4gK8Kg wqDCoMKgwqDCoCByZXR1cm4gaWYgJG5vZXJyOwo+ICvCoMKgwqDCoMKgwqAgZGllICJlcnJvciBk ZWxldGluZyBpcCAkaXAgOiAkQFxuIjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCByZXR1cm4g MTsKPiArfQo+ICsKPiArc3ViIGVtcHR5X3N1Ym5ldCB7Cj4gK8KgwqDCoCBteSAoJGNsYXNzLCAk Y29uZmlnLCAkc3VibmV0aWQsICRzdWJuZXQsICRzdWJuZXR1dWlkLCAkbm9lcnIpID0gQF87Cj4g Kwo+ICvCoMKgwqAgbXkgJG5hbWVzcGFjZSA9ICRjb25maWctPntuYW1lc3BhY2V9Owo+ICsKPiAr wqDCoMKgIG15ICRyZXNwb25zZSA9IGV2YWwgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIG5hdXRv Ym90X2FwaV9yZXF1ZXN0KAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAkY29uZmlnLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoCAiR0VUIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgIi9pcGFtL2lw LWFkZHJlc3Nlcy8/bmFtZXNwYWNlPSRuYW1lc3BhY2UmcGFyZW50PSRzdWJuZXR1dWlkIgo+ICvC oMKgwqDCoMKgwqAgKTsKPiArwqDCoMKgIH07Cj4gK8KgwqDCoCBpZiAoJEApIHsKPiArwqDCoMKg wqDCoMKgIHJldHVybiBpZiAkbm9lcnI7Cj4gK8KgwqDCoMKgwqDCoCBkaWUgImNvdWxkIG5vdCBm aW5kIHRoZSBzdWJuZXQgJHN1Ym5ldCBpbiBuYXV0b2JvdDogJEBcbiI7Cj4gK8KgwqDCoCB9Cj4g Kwo+ICvCoMKgwqAgZm9yIG15ICRpcCAoQHskcmVzcG9uc2UtPntyZXN1bHRzfX0pIHsKPiArwqDC oMKgwqDCoMKgIGRlbF9pcCgkY2xhc3MsICRjb25maWcsIHVuZGVmLCB1bmRlZiwgJGlwLT57aG9z dH0sICRub2Vycik7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDE7Cj4gK30KPiAr Cj4gK3N1YiBzdWJuZXRfaXNfZGVsZXRhYmxlIHsKPiArwqDCoMKgIG15ICgkY29uZmlnLCAkc3Vi bmV0aWQsICRzdWJuZXQsICRzdWJuZXR1dWlkLCAkbm9lcnIpID0gQF87Cj4gKwo+ICvCoMKgwqAg bXkgJG5hbWVzcGFjZSA9ICRjb25maWctPntuYW1lc3BhY2V9Owo+ICsKPiArwqDCoMKgIG15ICRy ZXNwb25zZSA9IGV2YWwgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIG5hdXRvYm90X2FwaV9yZXF1 ZXN0KAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAkY29uZmlnLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCAiR0VUIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgIi9pcGFtL2lwLWFkZHJlc3Nlcy8/ bmFtZXNwYWNlPSRuYW1lc3BhY2UmcGFyZW50PSRzdWJuZXR1dWlkIgo+ICvCoMKgwqDCoMKgwqAg KTsKPiArwqDCoMKgIH07Cj4gK8KgwqDCoCBpZiAoJEApIHsKPiArwqDCoMKgwqDCoMKgIHJldHVy biBpZiAkbm9lcnI7Cj4gK8KgwqDCoMKgwqDCoCBkaWUgImVycm9yIHF1ZXJ5aW5nIHByZWZpeCAk c3VibmV0OiAkQFxuIjsKPiArwqDCoMKgIH0KPiArwqDCoMKgIG15ICRuX2lwcyA9IHNjYWxhciAk cmVzcG9uc2UtPntyZXN1bHRzfS0+QCo7Cj4gKwo+ICvCoMKgwqAgIyBsZWFzdCBjb3N0bHkgY2hl Y2sgb3BlcmF0aW9uIDFzdAo+ICvCoMKgwqAgcmV0dXJuIDEgaWYgKCRuX2lwcyA9PSAwKTsKPiAr Cj4gK8KgwqDCoCBmb3IgbXkgJGlwICh2YWx1ZXMgJHJlc3BvbnNlLT57cmVzdWx0c30tPkAqKSB7 Cj4gK8KgwqDCoMKgwqDCoCBpZiAoIWlzX2lwX2dhdGV3YXkoJGNvbmZpZywgJGlwLT57aG9zdH0s ICRub2VycikpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgIyBzb21lIHJlbWFpbmluZyBJUCBp cyBub3QgYSBnYXRld2F5IHNvIHdlIGNhbid0IGRlbGV0ZSB0aGUgc3VibmV0Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ICvCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqAgfQo+ICvC oMKgwqAgI2FsbCByZW1haW5pbmcgSVBzIGFyZSBnYXRld2F5cwo+ICvCoMKgwqAgcmV0dXJuIDE7 Cj4gK30KPiArCj4gK3N1YiB2ZXJpZnlfYXBpIHsKPiArwqDCoMKgIG15ICgkY2xhc3MsICRjb25m aWcpID0gQF87Cj4gKwo+ICvCoMKgwqAgbXkgJG5hbWVzcGFjZSA9ICRjb25maWctPntuYW1lc3Bh Y2V9Owo+ICsKPiArwqDCoMKgICMgY2hlY2sgaWYgdGhlIG5hbWVzcGFjZSBhbmQgdGhlIHN0YXR1 cyAiQWN0aXZlIiBleGlzdAo+ICvCoMKgwqAgZXZhbCB7Cj4gK8KgwqDCoMKgwqDCoCBnZXRfbmFt ZXNwYWNlX2lkKCRjb25maWcsICRuYW1lc3BhY2UpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIC8v IGRpZSAibmFtZXNwYWNlICRuYW1lc3BhY2UgZG9lcyBub3QgZXhpc3QiOwo+ICvCoMKgwqDCoMKg wqAgZ2V0X3N0YXR1c19pZCgkY29uZmlnLCBkZWZhdWx0X2lwX3N0YXR1cygpKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCAvLyBkaWUgInRoZSBzdGF0dXMgIiAuIGRlZmF1bHRfaXBfc3RhdHVzKCkg LiAiIGRvZXMgbm90IGV4aXN0IjsKPiArwqDCoMKgIH07Cj4gK8KgwqDCoCBpZiAoJEApIHsKPiAr wqDCoMKgwqDCoMKgIGRpZSAiY291bGQgbm90IHVzZSBuYXV0b2JvdCBhcGk6ICRAXG4iOwo+ICvC oMKgwqAgfQo+ICt9Cj4gKwo+ICtzdWIgZ2V0X2lwc19mcm9tX21hYyB7Cj4gK8KgwqDCoCBteSAo JGNsYXNzLCAkY29uZmlnLCAkbWFjLCAkem9uZSkgPSBAXzsKPiArCj4gK8KgwqDCoCBteSAkaXA0 ID0gdW5kZWY7Cj4gK8KgwqDCoCBteSAkaXA2ID0gdW5kZWY7Cj4gKwo+ICvCoMKgwqAgbXkgJGRh dGEgPSBldmFsIHsKPiArwqDCoMKgwqDCoMKgIG5hdXRvYm90X2FwaV9yZXF1ZXN0KCRjb25maWcs ICJHRVQiLCAiL2lwYW0vaXAtYWRkcmVzc2VzLz9xPSRtYWMiKTsKPiArwqDCoMKgIH07Cj4gK8Kg wqDCoCBpZiAoJEApIHsKPiArwqDCoMKgwqDCoMKgIGRpZSAiY291bGQgbm90IHF1ZXJ5IGlwIGFk ZHJlc3MgZW50cnkgZm9yIG1hYyAkbWFjOiAkQCI7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAg Zm9yIG15ICRpcCAoQHskZGF0YS0+e3Jlc3VsdHN9fSkgewo+ICvCoMKgwqDCoMKgwqAgaWYgKCRp cC0+e2lwX3ZlcnNpb259ID09IDQgJiYgISRpcDQpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg KCRpcDQsIHVuZGVmKSA9IHNwbGl0KC9cLy8sICRpcC0+e2FkZHJlc3N9KTsKPiArwqDCoMKgwqDC oMKgIH0KPiArCj4gK8KgwqDCoMKgwqDCoCBpZiAoJGlwLT57aXBfdmVyc2lvbn0gPT0gNiAmJiAh JGlwNikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAoJGlwNiwgdW5kZWYpID0gc3BsaXQoL1wv LywgJGlwLT57YWRkcmVzc30pOwo+ICvCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqAgfQo+ICsKPiAr wqDCoMKgIHJldHVybiAoJGlwNCwgJGlwNik7Cj4gK30KPiArCj4gK3N1YiBvbl91cGRhdGVfaG9v ayB7Cj4gK8KgwqDCoCBteSAoJGNsYXNzLCAkY29uZmlnKSA9IEBfOwo+ICsKPiArwqDCoMKgIFBW RTo6TmV0d29yazo6U0ROOjpJcGFtczo6TmF1dG9ib3RQbHVnaW46OnZlcmlmeV9hcGkoJGNsYXNz LCAkY29uZmlnKTsKPiArfQo+ICsKPiArc3ViIGdldF9pcF9pZCB7Cj4gK8KgwqDCoCBteSAoJGNv bmZpZywgJGlwLCAkbm9lcnIpID0gQF87Cj4gKwo+ICvCoMKgwqAgbXkgJHJlc3VsdCA9IGV2YWwg ewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIG5hdXRvYm90X2FwaV9yZXF1ZXN0KCRjb25maWcsICJH RVQiLCAiL2lwYW0vaXAtYWRkcmVzc2VzLz9hZGRyZXNzPSRpcCIpOwo+ICvCoMKgwqAgfTsKPiAr wqDCoMKgIGlmICgkQCkgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGlmICRub2VycjsKPiArwqDC oMKgwqDCoMKgIGRpZSAiZXJyb3Igd2hpbGUgcXVlcnlpbmcgZm9yIGlwICRpcCBpZDogJEBcbiI7 Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgbXkgJGRhdGEgPSBAeyRyZXN1bHQtPntyZXN1bHRz fX1bMF07Cj4gK8KgwqDCoCByZXR1cm4gJGRhdGEtPntpZH07Cj4gK30KPiArCj4gK3N1YiBnZXRf cHJlZml4X2lkIHsKPiArwqDCoMKgIG15ICgkY29uZmlnLCAkY2lkciwgJG5vZXJyKSA9IEBfOwo+ ICsKPiArwqDCoMKgIG15ICRyZXN1bHQgPSBldmFsIHsKPiArwqDCoMKgwqDCoMKgIHJldHVybiBu YXV0b2JvdF9hcGlfcmVxdWVzdCgkY29uZmlnLCAiR0VUIiwgIi9pcGFtL3ByZWZpeGVzLz9wcmVm aXg9JGNpZHIiKTsKPiArwqDCoMKgIH07Cj4gK8KgwqDCoCBpZiAoJEApIHsKPiArwqDCoMKgwqDC oMKgIHJldHVybiBpZiAkbm9lcnI7Cj4gK8KgwqDCoMKgwqDCoCBkaWUgImVycm9yIHdoaWxlIHF1 ZXJ5aW5nIGZvciBjaWRyICRjaWRyIHByZWZpeCBpZDogJEBcbiI7Cj4gK8KgwqDCoCB9Cj4gKwo+ ICvCoMKgwqAgbXkgJGRhdGEgPSBAeyRyZXN1bHQtPntyZXN1bHRzfX1bMF07Cj4gK8KgwqDCoCBy ZXR1cm4gJGRhdGEtPntpZH07Cj4gK30KPiArCj4gK3N1YiBnZXRfbmFtZXNwYWNlX2lkIHsKPiAr wqDCoMKgIG15ICgkY29uZmlnLCAkbmFtZXNwYWNlLCAkbm9lcnIpID0gQF87Cj4gKwo+ICvCoMKg wqAgbXkgJHJlc3VsdCA9IGV2YWwgewo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gbmF1dG9ib3Rf YXBpX3JlcXVlc3QoJGNvbmZpZywgIkdFVCIsICIvaXBhbS9uYW1lc3BhY2VzLz9uYW1lPSRuYW1l c3BhY2UiKTsKPiArwqDCoMKgIH07Cj4gK8KgwqDCoCBpZiAoJEApIHsKPiArwqDCoMKgwqDCoMKg IHJldHVybiBpZiAkbm9lcnI7Cj4gK8KgwqDCoMKgwqDCoCBkaWUgImVycm9yIHdoaWxlIHF1ZXJ5 aW5nIGZvciBuYW1lc3BhY2UgJG5hbWVzcGFjZSBpZDogJEBcbiI7Cj4gK8KgwqDCoCB9Cj4gKwo+ ICvCoMKgwqAgbXkgJGRhdGEgPSBAeyRyZXN1bHQtPntyZXN1bHRzfX1bMF07Cj4gK8KgwqDCoCBy ZXR1cm4gJGRhdGEtPntpZH07Cj4gK30KPiArCj4gK3N1YiBnZXRfc3RhdHVzX2lkIHsKPiArwqDC oMKgIG15ICgkY29uZmlnLCAkc3RhdHVzLCAkbm9lcnIpID0gQF87Cj4gKwo+ICvCoMKgwqAgbXkg JHJlc3VsdCA9IGV2YWwgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIG5hdXRvYm90X2FwaV9yZXF1 ZXN0KCRjb25maWcsICJHRVQiLCAiL2V4dHJhcy9zdGF0dXNlcy8/bmFtZT0kc3RhdHVzIik7Cj4g K8KgwqDCoCB9Owo+ICvCoMKgwqAgaWYgKCRAKSB7Cj4gK8KgwqDCoMKgwqDCoCByZXR1cm4gaWYg JG5vZXJyOwo+ICvCoMKgwqDCoMKgwqAgZGllICJlcnJvciB3aGlsZSBxdWVyeWluZyBmb3Igc3Rh dHVzICRzdGF0dXMgaWQ6ICRAXG4iOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIG15ICRkYXRh ID0gQHskcmVzdWx0LT57cmVzdWx0c319WzBdOwo+ICvCoMKgwqAgcmV0dXJuICRkYXRhLT57aWR9 Owo+ICt9Cj4gKwo+ICtzdWIgaXNfaXBfZ2F0ZXdheSB7Cj4gK8KgwqDCoCBteSAoJGNvbmZpZywg JGlwLCAkbm9lcnIpID0gQF87Cj4gKwo+ICvCoMKgwqAgbXkgJHJlc3VsdCA9IGV2YWwgewo+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gbmF1dG9ib3RfYXBpX3JlcXVlc3QoJGNvbmZpZywgIkdFVCIs ICIvaXBhbS9pcC1hZGRyZXNzZXMvP2FkZHJlc3M9JGlwIik7Cj4gK8KgwqDCoCB9Owo+ICvCoMKg wqAgaWYgKCRAKSB7Cj4gK8KgwqDCoMKgwqDCoCByZXR1cm4gaWYgJG5vZXJyOwo+ICvCoMKgwqDC oMKgwqAgZGllICJlcnJvciB3aGlsZSBjaGVja2luZyBpZiAkaXAgaXMgYSBnYXRld2F5OiAkQFxu IjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBteSAkZGF0YSA9IEB7JHJlc3VsdC0+e3Jlc3Vs dHN9fVswXTsKPiArwqDCoMKgIHJldHVybiAkZGF0YS0+e2Rlc2NyaXB0aW9ufSBlcSAnZ2F0ZXdh eSc7Cj4gK30KPiArCj4gKzE7Cj4gLS0KPiAyLjM5LjUKPgo+Cl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRl dmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9t YWlsbWFuL2xpc3RpbmZvL3B2ZS1kZXZlbAo=