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 D4BEB1FF162 for <inbox@lore.proxmox.com>; Mon, 7 Apr 2025 17:37:52 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A1B223534; Mon, 7 Apr 2025 17:37:48 +0200 (CEST) Message-ID: <45ca8fdd-a878-4ca3-879b-b686b0e5e690@proxmox.com> Date: Mon, 7 Apr 2025 17:37:43 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Hannes Duerr <h.duerr@proxmox.com> To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>, Stefan Hanreich <s.hanreich@proxmox.com> References: <20250310085103.30549-1-s.hanreich@proxmox.com> <85e475d1-d0de-4811-b158-874069768e48@proxmox.com> Content-Language: en-US In-Reply-To: <85e475d1-d0de-4811-b158-874069768e48@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.961 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 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 Subject: Re: [pve-devel] [PATCH pve-network v2 1/8] ipam: netbox: factor out common api methods and unify error handling 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> UGxlYXNlIGNvbnNpZGVyIHRoaXMKClRlc3RlZC1ieTogSGFubmVzIER1ZXJyIDxoLmR1ZXJyQHBy b3htb3guY29tPgoKT24gNC83LzI1IDE3OjMyLCBIYW5uZXMgRHVlcnIgd3JvdGU6Cj4gVGVzdGVk IHRoaXMgc2VyaWVzIGFnYWluc3QgbmV0Ym94IHZlcnNpb24gNC4yLjIgYW5kIGRpZG4ndCBydW4g aW50byAKPiBhbnkgaXNzdWVzLgo+IENyZWF0ZWQgYW5kIGRlbGV0ZWQgYSBzaW1wbGUgem9uZSB3 aXRoIHR3byB2bmV0cyBhbmQgcmVzcGVjdGl2ZSBzdWJuZXQuCj4gVGhlIHByZWZpeGVzIHdlcmUg Y3JlYXRlZCBhbmQgZGVsZXRlZCBjb3JyZWN0bHkKPiBBc3NpZ25lZCBhbmQgcmVtb3ZlZCBWTXMg dG8gdGhlIHZuZXRzIGFuZCB0aGUgaXAgYWRkcmVzc2VzIHdlcmUgCj4gY3JlYXRlZCBhbmQgcmVt b3ZlZCBjb3JyZWN0bHkuCj4KPiBPbiAzLzEwLzI1IDA5OjUwLCBTdGVmYW4gSGFucmVpY2ggd3Jv dGU6Cj4+IENyZWF0ZSBhIGhlbHBlciBtZXRob2QgdGhhdCBhYnN0cmFjdHMgdGhlIGNvbW1vbiBj b2RlIHVzZWQgaW4gbWFraW5nCj4+IG5ldGJveCByZXF1ZXN0cy4gTW92ZSBhbGwgYXBpX3JlcXVl c3QgaW5jb3ZhdGlvbnMgb3ZlciB0byB1c2luZyB0aGUKPj4gaGVscGVyIG1ldGhvZC4gVGhpcyBz YXZlcyB1cyBmcm9tIHdyaXRpbmcgbG90cyBvZiByZXBlYXRlZCBjb2RlLgo+Pgo+PiBUaGlzIGFs c28gdXBkYXRlcyB0aGUgaGVscGVycyBhbmQgaW50cm9kdWNlcyBlcnJvciBjaGVja2luZyB0aGVy ZS4KPj4gSGVscGVycyBkaWRuJ3QgY2F0Y2ggYW55IGVycm9ycyBhbmQgdGhlIGludm9raW5nIG1l dGhvZHMgZGlkbid0IGFzCj4+IHdlbGwuIFRoaXMgbWVhbnQgdGhhdCBmdW5jdGlvbnMgd2l0aCAk bm9lcnIgc2V0IHRvIDEgd291bGQgc3RpbGwgZXJyb3IKPj4gb3V0LiBXZSBub3cgcGFzcyAkbm9l cnIgdG8gdGhlIGhlbHBlciBmdW5jdGlvbnMgYW5kIHRoZXkgYmVoYXZlIHRoZQo+PiBzYW1lIGFz IHRoZSBwYXJlbnQgbWV0aG9kcy4gVGhpcyByZXF1aXJlcyBzb21lIGFkZGl0aW9uYWwgY2hlY2tz IGluCj4+IHRoZSBjYWxsIHNpdGVzIG9mIHRoZSBoZWxwZXJzLgo+Pgo+PiBBbHNvIGNhbm9uaWNh bGl6ZSBhbGwgVVJMcywgc2luY2UgTmV0Ym94IGRvZXMgdGhhdCBhbmQgaXQgc2F2ZXMgdXMgYQo+ PiByZWRpcmVjdC4KPj4KPj4gU2lnbmVkLW9mZi1ieTogU3RlZmFuIEhhbnJlaWNoIDxzLmhhbnJl aWNoQHByb3htb3guY29tPgo+PiAtLS0KPj4gQ2hhbmdlcyBmcm9tIHYxIHRvIHYyOgo+PiAqIHJl bW92ZWQgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNvbWUgcXVlcnkgc3RyaW5ncwo+Pgo+PiDCoCBz cmMvUFZFL05ldHdvcmsvU0ROL0lwYW1zL05ldGJveFBsdWdpbi5wbSB8IDI0MSArKysrKysrKysr Ky0tLS0tLS0tLS0tCj4+IMKgIDEgZmlsZSBjaGFuZ2VkLCAxMjYgaW5zZXJ0aW9ucygrKSwgMTE1 IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvc3JjL1BWRS9OZXR3b3JrL1NETi9JcGFt cy9OZXRib3hQbHVnaW4ucG0gCj4+IGIvc3JjL1BWRS9OZXR3b3JrL1NETi9JcGFtcy9OZXRib3hQ bHVnaW4ucG0KPj4gaW5kZXggMTgwODliNy4uNTZhMTc4NyAxMDA2NDQKPj4gLS0tIGEvc3JjL1BW RS9OZXR3b3JrL1NETi9JcGFtcy9OZXRib3hQbHVnaW4ucG0KPj4gKysrIGIvc3JjL1BWRS9OZXR3 b3JrL1NETi9JcGFtcy9OZXRib3hQbHVnaW4ucG0KPj4gQEAgLTI1LDYgKzI1LDIxIEBAIHN1YiBv cHRpb25zIHsKPj4gwqDCoMKgwqDCoCB9Owo+PiDCoCB9Cj4+IMKgICtzdWIgbmV0Ym94X2FwaV9y ZXF1ZXN0IHsKPj4gK8KgwqDCoCBteSAoJGNvbmZpZywgJG1ldGhvZCwgJHBhdGgsICRwYXJhbXMp ID0gQF87Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gUFZFOjpOZXR3b3JrOjpTRE46OmFwaV9yZXF1 ZXN0KAo+PiArwqDCoMKgICRtZXRob2QsCj4+ICvCoMKgwqAgIiRjb25maWctPnt1cmx9JHtwYXRo fSIsCj4+ICvCoMKgwqAgWwo+PiArwqDCoMKgwqDCoMKgwqAgJ0NvbnRlbnQtVHlwZScgPT4gJ2Fw cGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnLAo+PiArwqDCoMKgwqDCoMKgwqAgJ0F1dGhv cml6YXRpb24nID0+ICJ0b2tlbiAkY29uZmlnLT57dG9rZW59Igo+PiArwqDCoMKgIF0sCj4+ICvC oMKgwqAgJHBhcmFtcywKPj4gK8KgwqDCoCAkY29uZmlnLT57ZmluZ2VycHJpbnR9LAo+PiArwqDC oMKgICk7Cj4+ICt9Cj4+ICsKPj4gwqAgIyBQbHVnaW4gaW1wbGVtZW50YXRpb24KPj4gwqAgwqAg c3ViIGFkZF9zdWJuZXQgewo+PiBAQCAtMzIsNjIgKzQ3LDQyIEBAIHN1YiBhZGRfc3VibmV0IHsK Pj4gwqAgwqDCoMKgwqDCoCBteSAkY2lkciA9ICRzdWJuZXQtPntjaWRyfTsKPj4gwqDCoMKgwqDC oCBteSAkZ2F0ZXdheSA9ICRzdWJuZXQtPntnYXRld2F5fTsKPj4gLcKgwqDCoCBteSAkdXJsID0g JHBsdWdpbl9jb25maWctPnt1cmx9Owo+PiAtwqDCoMKgIG15ICR0b2tlbiA9ICRwbHVnaW5fY29u ZmlnLT57dG9rZW59Owo+PiAtwqDCoMKgIG15ICRmaW5nZXJwcmludCA9ICRwbHVnaW5fY29uZmln LT57ZmluZ2VycHJpbnR9Owo+PiAtwqDCoMKgIG15ICRoZWFkZXJzID0gWydDb250ZW50LVR5cGUn ID0+ICdhcHBsaWNhdGlvbi9qc29uOyAKPj4gY2hhcnNldD1VVEYtOCcsICdBdXRob3JpemF0aW9u JyA9PiAidG9rZW4gJHRva2VuIl07Cj4+IC0KPj4gLcKgwqDCoCBteSAkaW50ZXJuYWxpZCA9IGdl dF9wcmVmaXhfaWQoJHVybCwgJGNpZHIsICRoZWFkZXJzLCAKPj4gJGZpbmdlcnByaW50KTsKPj4g wqAgLcKgwqDCoCAjY3JlYXRlIHN1Ym5ldAo+PiAtwqDCoMKgIGlmICghJGludGVybmFsaWQpIHsK Pj4gLQo+PiAtwqDCoMKgIG15ICRwYXJhbXMgPSB7IHByZWZpeCA9PiAkY2lkciB9Owo+PiArwqDC oMKgIGlmIChnZXRfcHJlZml4X2lkKCRwbHVnaW5fY29uZmlnLCAkY2lkciwgJG5vZXJyKSkgewo+ PiArwqDCoMKgIHJldHVybiBpZiAkbm9lcnI7Cj4+ICvCoMKgwqAgZGllICJwcmVmaXggJGNpZHIg YWxyZWFkeSBleGlzdHMgaW4gbmV0Ym94IjsKPj4gK8KgwqDCoCB9Cj4+IMKgIC3CoMKgwqAgZXZh bCB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBteSAkcmVzdWx0ID0gUFZFOjpOZXR3b3JrOjpTRE46OmFw aV9yZXF1ZXN0KAo+PiAtwqDCoMKgwqDCoMKgwqAgIlBPU1QiLCAiJHVybC9pcGFtL3ByZWZpeGVz LyIsICRoZWFkZXJzLCAkcGFyYW1zLCAKPj4gJGZpbmdlcnByaW50ICk7Cj4+IC3CoMKgwqAgfTsK Pj4gLcKgwqDCoCBpZiAoJEApIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGRpZSAiZXJyb3IgYWRkIHN1 Ym5ldCB0byBpcGFtOiAkQCIgaWYgISRub2VycjsKPj4gLcKgwqDCoCB9Cj4+ICvCoMKgwqAgZXZh bCB7Cj4+ICvCoMKgwqAgbmV0Ym94X2FwaV9yZXF1ZXN0KCRwbHVnaW5fY29uZmlnLCAiUE9TVCIs ICIvaXBhbS9wcmVmaXhlcy8iLCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcmVmaXggPT4gJGNpZHIK Pj4gK8KgwqDCoCB9KTsKPj4gK8KgwqDCoCB9Owo+PiArwqDCoMKgIGlmICgkQCkgewo+PiArwqDC oMKgIHJldHVybiBpZiAkbm9lcnI7Cj4+ICvCoMKgwqAgZGllICJlcnJvciBhZGRpbmcgc3VibmV0 IHRvIGlwYW06ICRAIjsKPj4gwqDCoMKgwqDCoCB9Cj4+IC0KPj4gwqAgfQo+PiDCoCDCoCBzdWIg ZGVsX3N1Ym5ldCB7Cj4+IMKgwqDCoMKgwqAgbXkgKCRjbGFzcywgJHBsdWdpbl9jb25maWcsICRz dWJuZXRpZCwgJHN1Ym5ldCwgJG5vZXJyKSA9IEBfOwo+PiDCoCDCoMKgwqDCoMKgIG15ICRjaWRy ID0gJHN1Ym5ldC0+e2NpZHJ9Owo+PiAtwqDCoMKgIG15ICR1cmwgPSAkcGx1Z2luX2NvbmZpZy0+ e3VybH07Cj4+IC3CoMKgwqAgbXkgJHRva2VuID0gJHBsdWdpbl9jb25maWctPnt0b2tlbn07Cj4+ IC3CoMKgwqAgbXkgJGdhdGV3YXkgPSAkc3VibmV0LT57Z2F0ZXdheX07Cj4+IC3CoMKgwqAgbXkg JGZpbmdlcnByaW50ID0gJHBsdWdpbl9jb25maWctPntmaW5nZXJwcmludH07Cj4+IC3CoMKgwqAg bXkgJGhlYWRlcnMgPSBbJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb247IAo+PiBj aGFyc2V0PVVURi04JywgJ0F1dGhvcml6YXRpb24nID0+ICJ0b2tlbiAkdG9rZW4iXTsKPj4gwqAg LcKgwqDCoCBteSAkaW50ZXJuYWxpZCA9IGdldF9wcmVmaXhfaWQoJHVybCwgJGNpZHIsICRoZWFk ZXJzLCAKPj4gJGZpbmdlcnByaW50KTsKPj4gLcKgwqDCoCByZXR1cm4gaWYgISRpbnRlcm5hbGlk Owo+PiArwqDCoMKgIG15ICRpbnRlcm5hbGlkID0gZ2V0X3ByZWZpeF9pZCgkcGx1Z2luX2NvbmZp ZywgJGNpZHIsICRub2Vycik7Cj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuOyAjZml4bWU6IGNoZWNr IHRoYXQgcHJlZml4IGlzIGVtcHR5IGV4bHVkaW5nIGdhdGV3YXksIAo+PiBiZWZvcmUgZGVsZXRl Cj4+IMKgIMKgwqDCoMKgwqAgZXZhbCB7Cj4+IC3CoMKgwqAgUFZFOjpOZXR3b3JrOjpTRE46OmFw aV9yZXF1ZXN0KAo+PiAtwqDCoMKgwqDCoMKgwqAgIkRFTEVURSIsICIkdXJsL2lwYW0vcHJlZml4 ZXMvJGludGVybmFsaWQvIiwgJGhlYWRlcnMsIAo+PiB1bmRlZiwgJGZpbmdlcnByaW50KTsKPj4g K8KgwqDCoCBuZXRib3hfYXBpX3JlcXVlc3QoJHBsdWdpbl9jb25maWcsICJERUxFVEUiLCAKPj4g Ii9pcGFtL3ByZWZpeGVzLyRpbnRlcm5hbGlkLyIpOwo+PiDCoMKgwqDCoMKgIH07Cj4+IC3CoMKg wqAgaWYgKCRAKSB7Cj4+IC3CoMKgwqAgZGllICJlcnJvciBkZWxldGluZyBzdWJuZXQgZnJvbSBp cGFtOiAkQCIgaWYgISRub2VycjsKPj4gLcKgwqDCoCB9Cj4+IC0KPj4gK8KgwqDCoCBkaWUgImVy cm9yIGRlbGV0aW5nIHN1Ym5ldCBmcm9tIGlwYW06ICRAIiBpZiAkQCAmJiAhJG5vZXJyOwo+PiDC oCB9Cj4+IMKgIMKgIHN1YiBhZGRfaXAgewo+PiDCoMKgwqDCoMKgIG15ICgkY2xhc3MsICRwbHVn aW5fY29uZmlnLCAkc3VibmV0aWQsICRzdWJuZXQsICRpcCwgJGhvc3RuYW1lLCAKPj4gJG1hYywg JHZtaWQsICRpc19nYXRld2F5LCAkbm9lcnIpID0gQF87Cj4+IMKgIMKgwqDCoMKgwqAgbXkgJG1h c2sgPSAkc3VibmV0LT57bWFza307Cj4+IC3CoMKgwqAgbXkgJHVybCA9ICRwbHVnaW5fY29uZmln LT57dXJsfTsKPj4gLcKgwqDCoCBteSAkdG9rZW4gPSAkcGx1Z2luX2NvbmZpZy0+e3Rva2VufTsK Pj4gLcKgwqDCoCBteSAkZmluZ2VycHJpbnQgPSAkcGx1Z2luX2NvbmZpZy0+e2ZpbmdlcnByaW50 fTsKPj4gLcKgwqDCoCBteSAkaGVhZGVycyA9IFsnQ29udGVudC1UeXBlJyA9PiAnYXBwbGljYXRp b24vanNvbjsgCj4+IGNoYXJzZXQ9VVRGLTgnLCAnQXV0aG9yaXphdGlvbicgPT4gInRva2VuICR0 b2tlbiJdOwo+PiDCoCDCoMKgwqDCoMKgIG15ICRkZXNjcmlwdGlvbiA9IHVuZGVmOwo+PiDCoMKg wqDCoMKgIGlmICgkaXNfZ2F0ZXdheSkgewo+PiBAQCAtOTYsMTggKzkxLDE4IEBAIHN1YiBhZGRf aXAgewo+PiDCoMKgwqDCoMKgICRkZXNjcmlwdGlvbiA9ICJtYWM6JG1hYyI7Cj4+IMKgwqDCoMKg wqAgfQo+PiDCoCAtwqDCoMKgIG15ICRwYXJhbXMgPSB7IGFkZHJlc3MgPT4gIiRpcC8kbWFzayIs IGRuc19uYW1lID0+ICRob3N0bmFtZSwgCj4+IGRlc2NyaXB0aW9uID0+ICRkZXNjcmlwdGlvbiB9 Owo+PiAtCj4+IMKgwqDCoMKgwqAgZXZhbCB7Cj4+IC3CoMKgwqAgUFZFOjpOZXR3b3JrOjpTRE46 OmFwaV9yZXF1ZXN0KAo+PiAtwqDCoMKgwqDCoMKgwqAgIlBPU1QiLCAiJHVybC9pcGFtL2lwLWFk ZHJlc3Nlcy8iLCAkaGVhZGVycywgJHBhcmFtcywgCj4+ICRmaW5nZXJwcmludCk7Cj4+ICvCoMKg wqAgbmV0Ym94X2FwaV9yZXF1ZXN0KCRwbHVnaW5fY29uZmlnLCAiUE9TVCIsICIvaXBhbS9pcC1h ZGRyZXNzZXMvIiwgewo+PiArwqDCoMKgwqDCoMKgwqAgYWRkcmVzcyA9PiAiJGlwLyRtYXNrIiwK Pj4gK8KgwqDCoMKgwqDCoMKgIGRuc19uYW1lID0+ICRob3N0bmFtZSwKPj4gK8KgwqDCoMKgwqDC oMKgIGRlc2NyaXB0aW9uID0+ICRkZXNjcmlwdGlvbiwKPj4gK8KgwqDCoCB9KTsKPj4gwqDCoMKg wqDCoCB9Owo+PiDCoCDCoMKgwqDCoMKgIGlmICgkQCkgewo+PiDCoMKgwqDCoMKgIGlmICgkaXNf Z2F0ZXdheSkgewo+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKCFpc19pcF9nYXRld2F5KCR1cmwsICRp cCwgJGhlYWRlcnMsICRmaW5nZXJwcmludCkgJiYgCj4+ICEkbm9lcnIpIHsKPj4gLcKgwqDCoMKg wqDCoMKgIGRpZSAiZXJyb3IgYWRkIHN1Ym5ldCBpcCB0byBpcGFtOiBpcCAkaXAgYWxyZWFkeSBl eGlzdDogJEAiOwo+PiAtwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgZGllICJl cnJvciBhZGQgc3VibmV0IGlwIHRvIGlwYW06IGlwICRpcCBhbHJlYWR5IGV4aXN0OiAkQCIKPj4g K8KgwqDCoMKgwqDCoMKgIGlmICFpc19pcF9nYXRld2F5KCRwbHVnaW5fY29uZmlnLCAkaXAsICRu b2Vycik7Cj4+IMKgwqDCoMKgwqAgfSBlbHNpZiAoISRub2Vycikgewo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgZGllICJlcnJvciBhZGQgc3VibmV0IGlwIHRvIGlwYW06IGlwIGFscmVhZHkgZXhpc3Q6 ICRAIjsKPj4gwqDCoMKgwqDCoCB9Cj4+IEBAIC0xMTgsMTEgKzExMyw2IEBAIHN1YiB1cGRhdGVf aXAgewo+PiDCoMKgwqDCoMKgIG15ICgkY2xhc3MsICRwbHVnaW5fY29uZmlnLCAkc3VibmV0aWQs ICRzdWJuZXQsICRpcCwgJGhvc3RuYW1lLCAKPj4gJG1hYywgJHZtaWQsICRpc19nYXRld2F5LCAk bm9lcnIpID0gQF87Cj4+IMKgIMKgwqDCoMKgwqAgbXkgJG1hc2sgPSAkc3VibmV0LT57bWFza307 Cj4+IC3CoMKgwqAgbXkgJHVybCA9ICRwbHVnaW5fY29uZmlnLT57dXJsfTsKPj4gLcKgwqDCoCBt eSAkdG9rZW4gPSAkcGx1Z2luX2NvbmZpZy0+e3Rva2VufTsKPj4gLcKgwqDCoCBteSAkc2VjdGlv biA9ICRwbHVnaW5fY29uZmlnLT57c2VjdGlvbn07Cj4+IC3CoMKgwqAgbXkgJGZpbmdlcnByaW50 ID0gJHBsdWdpbl9jb25maWctPntmaW5nZXJwcmludH07Cj4+IC3CoMKgwqAgbXkgJGhlYWRlcnMg PSBbJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb247IAo+PiBjaGFyc2V0PVVURi04 JywgJ0F1dGhvcml6YXRpb24nID0+ICJ0b2tlbiAkdG9rZW4iXTsKPj4gwqAgwqDCoMKgwqDCoCBt eSAkZGVzY3JpcHRpb24gPSB1bmRlZjsKPj4gwqDCoMKgwqDCoCBpZiAoJGlzX2dhdGV3YXkpIHsK Pj4gQEAgLTEzMSwxNCArMTIxLDIwIEBAIHN1YiB1cGRhdGVfaXAgewo+PiDCoMKgwqDCoMKgICRk ZXNjcmlwdGlvbiA9ICJtYWM6JG1hYyI7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCAtwqDCoMKgIG15 ICRwYXJhbXMgPSB7IGFkZHJlc3MgPT4gIiRpcC8kbWFzayIsIGRuc19uYW1lID0+ICRob3N0bmFt ZSwgCj4+IGRlc2NyaXB0aW9uID0+ICRkZXNjcmlwdGlvbiB9Owo+PiArwqDCoMKgIG15ICRpcF9p ZCA9IGdldF9pcF9pZCgkcGx1Z2luX2NvbmZpZywgJGlwLCAkbm9lcnIpOwo+PiDCoCAtwqDCoMKg IG15ICRpcF9pZCA9IGdldF9pcF9pZCgkdXJsLCAkaXAsICRoZWFkZXJzLCAkZmluZ2VycHJpbnQp Owo+PiAtwqDCoMKgIGRpZSAiY2FuJ3QgZmluZCBpcCAkaXAgaW4gaXBhbSIgaWYgISRpcF9pZDsK Pj4gK8KgwqDCoCAjIGRlZmluZWRuZXNzIGNoZWNrLCBiZWNhdXNlIElEIGNvdWxkIGJlIDAKPj4g K8KgwqDCoCBpZiAoIWRlZmluZWQoJGlwX2lkKSkgewo+PiArwqDCoMKgIHJldHVybiBpZiAkbm9l cnI7Cj4+ICvCoMKgwqAgZGllICJjb3VsZCBub3QgZmluZCBpZCBmb3IgaXAgYWRkcmVzcyAkaXAi Owo+PiArwqDCoMKgIH0KPj4gwqAgwqDCoMKgwqDCoCBldmFsIHsKPj4gLcKgwqDCoCBQVkU6Ok5l dHdvcms6OlNETjo6YXBpX3JlcXVlc3QoCj4+IC3CoMKgwqDCoMKgwqDCoCAiUEFUQ0giLCAiJHVy bC9pcGFtL2lwLWFkZHJlc3Nlcy8kaXBfaWQvIiwgJGhlYWRlcnMsIAo+PiAkcGFyYW1zLCAkZmlu Z2VycHJpbnQpOwo+PiArwqDCoMKgIG5ldGJveF9hcGlfcmVxdWVzdCgkcGx1Z2luX2NvbmZpZywg IlBBVENIIiwgCj4+ICIvaXBhbS9pcC1hZGRyZXNzZXMvJGlwX2lkLyIsIHsKPj4gK8KgwqDCoMKg wqDCoMKgIGFkZHJlc3MgPT4gIiRpcC8kbWFzayIsCj4+ICvCoMKgwqDCoMKgwqDCoCBkbnNfbmFt ZSA9PiAkaG9zdG5hbWUsCj4+ICvCoMKgwqDCoMKgwqDCoCBkZXNjcmlwdGlvbiA9PiAkZGVzY3Jp cHRpb24sCj4+ICvCoMKgwqAgfSk7Cj4+IMKgwqDCoMKgwqAgfTsKPj4gwqDCoMKgwqDCoCBpZiAo JEApIHsKPj4gwqDCoMKgwqDCoCBkaWUgImVycm9yIHVwZGF0ZSBpcCAkaXAgOiAkQCIgaWYgISRu b2VycjsKPj4gQEAgLTE1MCwyMCArMTQ2LDIyIEBAIHN1YiBhZGRfbmV4dF9mcmVlaXAgewo+PiDC oCDCoMKgwqDCoMKgIG15ICRjaWRyID0gJHN1Ym5ldC0+e2NpZHJ9Owo+PiDCoCAtwqDCoMKgIG15 ICR1cmwgPSAkcGx1Z2luX2NvbmZpZy0+e3VybH07Cj4+IC3CoMKgwqAgbXkgJHRva2VuID0gJHBs dWdpbl9jb25maWctPnt0b2tlbn07Cj4+IC3CoMKgwqAgbXkgJGZpbmdlcnByaW50ID0gJHBsdWdp bl9jb25maWctPntmaW5nZXJwcmludH07Cj4+IC3CoMKgwqAgbXkgJGhlYWRlcnMgPSBbJ0NvbnRl bnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb247IAo+PiBjaGFyc2V0PVVURi04JywgJ0F1dGhv cml6YXRpb24nID0+ICJ0b2tlbiAkdG9rZW4iXTsKPj4gK8KgwqDCoCBteSAkaW50ZXJuYWxpZCA9 IGdldF9wcmVmaXhfaWQoJHBsdWdpbl9jb25maWcsICRjaWRyLCAkbm9lcnIpOwo+PiDCoCAtwqDC oMKgIG15ICRpbnRlcm5hbGlkID0gZ2V0X3ByZWZpeF9pZCgkdXJsLCAkY2lkciwgJGhlYWRlcnMs IAo+PiAkZmluZ2VycHJpbnQpOwo+PiArwqDCoMKgICMgZGVmaW5lZG5lc3MgY2hlY2ssIGJlY2F1 c2UgSUQgY291bGQgYmUgMAo+PiArwqDCoMKgIGlmICghZGVmaW5lZCgkaW50ZXJuYWxpZCkpIHsK Pj4gK8KgwqDCoCByZXR1cm4gaWYgJG5vZXJyOwo+PiArwqDCoMKgIGRpZSAiY291bGQgbm90IGZp bmQgaWQgZm9yIHByZWZpeCAkY2lkciI7Cj4+ICvCoMKgwqAgfQo+PiDCoCDCoMKgwqDCoMKgIG15 ICRkZXNjcmlwdGlvbiA9ICJtYWM6JG1hYyIgaWYgJG1hYzsKPj4gwqAgLcKgwqDCoCBteSAkcGFy YW1zID0geyBkbnNfbmFtZSA9PiAkaG9zdG5hbWUsIGRlc2NyaXB0aW9uID0+IAo+PiAkZGVzY3Jp cHRpb24gfTsKPj4gLQo+PiDCoMKgwqDCoMKgIGV2YWwgewo+PiAtwqDCoMKgIG15ICRyZXN1bHQg PSBQVkU6Ok5ldHdvcms6OlNETjo6YXBpX3JlcXVlc3QoCj4+IC3CoMKgwqDCoMKgwqDCoCAiUE9T VCIsICIkdXJsL2lwYW0vcHJlZml4ZXMvJGludGVybmFsaWQvYXZhaWxhYmxlLWlwcy8iLCAKPj4g JGhlYWRlcnMsICRwYXJhbXMsICRmaW5nZXJwcmludCk7Cj4+ICvCoMKgwqAgbXkgJHJlc3VsdCA9 IG5ldGJveF9hcGlfcmVxdWVzdCgkcGx1Z2luX2NvbmZpZywgIlBPU1QiLCAKPj4gIi9pcGFtL3By ZWZpeGVzLyRpbnRlcm5hbGlkL2F2YWlsYWJsZS1pcHMvIiwgewo+PiArwqDCoMKgwqDCoMKgwqAg ZG5zX25hbWUgPT4gJGhvc3RuYW1lLAo+PiArwqDCoMKgwqDCoMKgwqAgZGVzY3JpcHRpb24gPT4g JGRlc2NyaXB0aW9uLAo+PiArwqDCoMKgIH0pOwo+PiArCj4+IMKgwqDCoMKgwqAgbXkgKCRpcCwg dW5kZWYpID0gc3BsaXQoL1wvLywgJHJlc3VsdC0+e2FkZHJlc3N9KTsKPj4gwqDCoMKgwqDCoCBy ZXR1cm4gJGlwOwo+PiDCoMKgwqDCoMKgIH07Cj4+IEBAIC0xNzYsMTkgKzE3NCwyMiBAQCBzdWIg YWRkX25leHRfZnJlZWlwIHsKPj4gwqAgc3ViIGFkZF9yYW5nZV9uZXh0X2ZyZWVpcCB7Cj4+IMKg wqDCoMKgwqAgbXkgKCRjbGFzcywgJHBsdWdpbl9jb25maWcsICRzdWJuZXQsICRyYW5nZSwgJGRh dGEsICRub2VycikgPSBAXzsKPj4gwqAgLcKgwqDCoCBteSAkdXJsID0gJHBsdWdpbl9jb25maWct Pnt1cmx9Owo+PiAtwqDCoMKgIG15ICR0b2tlbiA9ICRwbHVnaW5fY29uZmlnLT57dG9rZW59Owo+ PiAtwqDCoMKgIG15ICRoZWFkZXJzID0gWydDb250ZW50LVR5cGUnID0+ICdhcHBsaWNhdGlvbi9q c29uOyAKPj4gY2hhcnNldD1VVEYtOCcsICdBdXRob3JpemF0aW9uJyA9PiAidG9rZW4gJHRva2Vu Il07Cj4+IC3CoMKgwqAgbXkgJGZpbmdlcnByaW50ID0gJHBsdWdpbl9jb25maWctPntmaW5nZXJw cmludH07Cj4+ICvCoMKgwqAgbXkgJGludGVybmFsaWQgPSBnZXRfaXByYW5nZV9pZCgkcGx1Z2lu X2NvbmZpZywgJHJhbmdlLCAkbm9lcnIpOwo+PiDCoCAtwqDCoMKgIG15ICRpbnRlcm5hbGlkID0g Z2V0X2lwcmFuZ2VfaWQoJHVybCwgJHJhbmdlLCAkaGVhZGVycywgCj4+ICRmaW5nZXJwcmludCk7 Cj4+IC3CoMKgwqAgbXkgJGRlc2NyaXB0aW9uID0gIm1hYzokZGF0YS0+e21hY30iIGlmICRkYXRh LT57bWFjfTsKPj4gK8KgwqDCoCAjIGRlZmluZWRuZXNzIGNoZWNrLCBiZWNhdXNlIElEIGNvdWxk IGJlIDAKPj4gK8KgwqDCoCBpZiAoIWRlZmluZWQoJGludGVybmFsaWQpKSB7Cj4+ICvCoMKgwqAg cmV0dXJuIGlmICRub2VycjsKPj4gK8KgwqDCoCBkaWUgImNvdWxkIG5vdCBmaW5kIGlkIGZvciBp cCByYW5nZSAKPj4gJHJhbmdlLT57J3N0YXJ0LWFkZHJlc3MnfTokcmFuZ2UtPnsnZW5kLWFkZHJl c3MnfSI7Cj4+ICvCoMKgwqAgfQo+PiDCoCAtwqDCoMKgIG15ICRwYXJhbXMgPSB7IGRuc19uYW1l ID0+ICRkYXRhLT57aG9zdG5hbWV9LCBkZXNjcmlwdGlvbiA9PiAKPj4gJGRlc2NyaXB0aW9uIH07 Cj4+ICvCoMKgwqAgbXkgJGRlc2NyaXB0aW9uID0gIm1hYzokZGF0YS0+e21hY30iIGlmICRkYXRh LT57bWFjfTsKPj4gwqAgwqDCoMKgwqDCoCBldmFsIHsKPj4gLcKgwqDCoCBteSAkcmVzdWx0ID0g UFZFOjpOZXR3b3JrOjpTRE46OmFwaV9yZXF1ZXN0KAo+PiAtwqDCoMKgwqDCoMKgwqAgIlBPU1Qi LCAiJHVybC9pcGFtL2lwLXJhbmdlcy8kaW50ZXJuYWxpZC9hdmFpbGFibGUtaXBzLyIsIAo+PiAk aGVhZGVycywgJHBhcmFtcywgJGZpbmdlcnByaW50KTsKPj4gK8KgwqDCoCBteSAkcmVzdWx0ID0g bmV0Ym94X2FwaV9yZXF1ZXN0KCRwbHVnaW5fY29uZmlnLCAiUE9TVCIsIAo+PiAiL2lwYW0vaXAt cmFuZ2VzLyRpbnRlcm5hbGlkL2F2YWlsYWJsZS1pcHMvIiwgewo+PiArwqDCoMKgwqDCoMKgwqAg ZG5zX25hbWUgPT4gJGRhdGEtPntob3N0bmFtZX0sCj4+ICvCoMKgwqDCoMKgwqDCoCBkZXNjcmlw dGlvbiA9PiAkZGVzY3JpcHRpb24sCj4+ICvCoMKgwqAgfSk7Cj4+ICsKPj4gwqDCoMKgwqDCoCBt eSAoJGlwLCB1bmRlZikgPSBzcGxpdCgvXC8vLCAkcmVzdWx0LT57YWRkcmVzc30pOwo+PiDCoMKg wqDCoMKgIHByaW50ICJmb3VuZCBpcCBmcmVlICRpcCBpbiByYW5nZSAKPj4gJHJhbmdlLT57J3N0 YXJ0LWFkZHJlc3MnfS0kcmFuZ2UtPnsnZW5kLWFkZHJlc3MnfVxuIiBpZiAkaXA7Cj4+IMKgwqDC oMKgwqAgcmV0dXJuICRpcDsKPj4gQEAgLTIwNCwxNiArMjA1LDE0IEBAIHN1YiBkZWxfaXAgewo+ PiDCoCDCoMKgwqDCoMKgIHJldHVybiBpZiAhJGlwOwo+PiDCoCAtwqDCoMKgIG15ICR1cmwgPSAk cGx1Z2luX2NvbmZpZy0+e3VybH07Cj4+IC3CoMKgwqAgbXkgJHRva2VuID0gJHBsdWdpbl9jb25m aWctPnt0b2tlbn07Cj4+IC3CoMKgwqAgbXkgJGhlYWRlcnMgPSBbJ0NvbnRlbnQtVHlwZScgPT4g J2FwcGxpY2F0aW9uL2pzb247IAo+PiBjaGFyc2V0PVVURi04JywgJ0F1dGhvcml6YXRpb24nID0+ ICJ0b2tlbiAkdG9rZW4iXTsKPj4gLcKgwqDCoCBteSAkZmluZ2VycHJpbnQgPSAkcGx1Z2luX2Nv bmZpZy0+e2ZpbmdlcnByaW50fTsKPj4gLQo+PiAtwqDCoMKgIG15ICRpcF9pZCA9IGdldF9pcF9p ZCgkdXJsLCAkaXAsICRoZWFkZXJzLCAkZmluZ2VycHJpbnQpOwo+PiAtwqDCoMKgIGRpZSAiY2Fu J3QgZmluZCBpcCAkaXAgaW4gaXBhbSIgaWYgISRpcF9pZDsKPj4gK8KgwqDCoCBteSAkaXBfaWQg PSBnZXRfaXBfaWQoJHBsdWdpbl9jb25maWcsICRpcCwgJG5vZXJyKTsKPj4gK8KgwqDCoCBpZiAo IWRlZmluZWQoJGlwX2lkKSkgewo+PiArwqDCoMKgIHdhcm4gImNvdWxkIG5vdCBmaW5kIGlkIGZv ciBpcCAkaXAiOwo+PiArwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCB9Cj4+IMKgIMKgwqDCoMKg wqAgZXZhbCB7Cj4+IC3CoMKgwqAgUFZFOjpOZXR3b3JrOjpTRE46OmFwaV9yZXF1ZXN0KCJERUxF VEUiLCAKPj4gIiR1cmwvaXBhbS9pcC1hZGRyZXNzZXMvJGlwX2lkLyIsICRoZWFkZXJzLCB1bmRl ZiwgJGZpbmdlcnByaW50KTsKPj4gK8KgwqDCoCBuZXRib3hfYXBpX3JlcXVlc3QoJHBsdWdpbl9j b25maWcsICJERUxFVEUiLCAKPj4gIi9pcGFtL2lwLWFkZHJlc3Nlcy8kaXBfaWQvIik7Cj4+IMKg wqDCoMKgwqAgfTsKPj4gwqDCoMKgwqDCoCBpZiAoJEApIHsKPj4gwqDCoMKgwqDCoCBkaWUgImVy cm9yIGRlbGV0ZSBpcCAkaXAgOiAkQCIgaWYgISRub2VycjsKPj4gQEAgLTIyMSwxOCArMjIwLDE0 IEBAIHN1YiBkZWxfaXAgewo+PiDCoCB9Cj4+IMKgIMKgIHN1YiBnZXRfaXBzX2Zyb21fbWFjIHsK Pj4gLcKgwqDCoCBteSAoJGNsYXNzLCAkcGx1Z2luX2NvbmZpZywgJG1hYywgJHpvbmVpZCkgPSBA XzsKPj4gLQo+PiAtwqDCoMKgIG15ICR1cmwgPSAkcGx1Z2luX2NvbmZpZy0+e3VybH07Cj4+IC3C oMKgwqAgbXkgJHRva2VuID0gJHBsdWdpbl9jb25maWctPnt0b2tlbn07Cj4+IC3CoMKgwqAgbXkg JGhlYWRlcnMgPSBbJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb247IAo+PiBjaGFy c2V0PVVURi04JywgJ0F1dGhvcml6YXRpb24nID0+ICJ0b2tlbiAkdG9rZW4iXTsKPj4gLcKgwqDC oCBteSAkZmluZ2VycHJpbnQgPSAkcGx1Z2luX2NvbmZpZy0+e2ZpbmdlcnByaW50fTsKPj4gK8Kg wqDCoCBteSAoJGNsYXNzLCAkcGx1Z2luX2NvbmZpZywgJG1hYywgJHpvbmVpZCwgJG5vZXJyKSA9 IEBfOwo+PiDCoCDCoMKgwqDCoMKgIG15ICRpcDQgPSB1bmRlZjsKPj4gwqDCoMKgwqDCoCBteSAk aXA2ID0gdW5kZWY7Cj4+IMKgIC3CoMKgwqAgbXkgJGRhdGEgPSBQVkU6Ok5ldHdvcms6OlNETjo6 YXBpX3JlcXVlc3QoCj4+IC3CoMKgwqAgIkdFVCIsICIkdXJsL2lwYW0vaXAtYWRkcmVzc2VzLz9k ZXNjcmlwdGlvbl9faWM9JG1hYyIsICRoZWFkZXJzLCAKPj4gdW5kZWYsICRmaW5nZXJwcmludCk7 Cj4+ICvCoMKgwqAgbXkgJGRhdGEgPSBldmFsIHsKPj4gK8KgwqDCoCBuZXRib3hfYXBpX3JlcXVl c3QoJHBsdWdpbl9jb25maWcsICJHRVQiLCAKPj4gIi9pcGFtL2lwLWFkZHJlc3Nlcy8/ZGVzY3Jp cHRpb25fX2ljPSRtYWMiKTsKPj4gK8KgwqDCoCB9Owo+PiDCoCDCoMKgwqDCoMKgIGZvciBteSAk aXAgKEB7JGRhdGEtPntyZXN1bHRzfX0pIHsKPj4gwqDCoMKgwqDCoCBpZiAoJGlwLT57ZmFtaWx5 fS0+e3ZhbHVlfSA9PSA0ICYmICEkaXA0KSB7Cj4+IEBAIC0yNDcsMTggKzI0MiwxMCBAQCBzdWIg Z2V0X2lwc19mcm9tX21hYyB7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuICgkaXA0LCAkaXA2KTsKPj4g wqAgfQo+PiDCoCAtCj4+IMKgIHN1YiB2ZXJpZnlfYXBpIHsKPj4gwqDCoMKgwqDCoCBteSAoJGNs YXNzLCAkcGx1Z2luX2NvbmZpZykgPSBAXzsKPj4gwqAgLcKgwqDCoCBteSAkdXJsID0gJHBsdWdp bl9jb25maWctPnt1cmx9Owo+PiAtwqDCoMKgIG15ICR0b2tlbiA9ICRwbHVnaW5fY29uZmlnLT57 dG9rZW59Owo+PiAtwqDCoMKgIG15ICRoZWFkZXJzID0gWydDb250ZW50LVR5cGUnID0+ICdhcHBs aWNhdGlvbi9qc29uOyAKPj4gY2hhcnNldD1VVEYtOCcsICdBdXRob3JpemF0aW9uJyA9PiAidG9r ZW4gJHRva2VuIl07Cj4+IC3CoMKgwqAgbXkgJGZpbmdlcnByaW50ID0gJHBsdWdpbl9jb25maWct PntmaW5nZXJwcmludH07Cj4+IC0KPj4gLcKgwqDCoCBldmFsIHsKPj4gLcKgwqDCoCBQVkU6Ok5l dHdvcms6OlNETjo6YXBpX3JlcXVlc3QoIkdFVCIsICIkdXJsL2lwYW0vYWdncmVnYXRlcy8iLCAK Pj4gJGhlYWRlcnMsIHVuZGVmLCAkZmluZ2VycHJpbnQpOwo+PiAtwqDCoMKgIH07Cj4+ICvCoMKg wqAgZXZhbCB7IG5ldGJveF9hcGlfcmVxdWVzdCgkcGx1Z2luX2NvbmZpZywgIkdFVCIsIAo+PiAi L2lwYW0vYWdncmVnYXRlcy8iKTsgfTsKPj4gwqDCoMKgwqDCoCBpZiAoJEApIHsKPj4gwqDCoMKg wqDCoCBkaWUgIkNhbid0IGNvbm5lY3QgdG8gbmV0Ym94IGFwaTogJEAiOwo+PiDCoMKgwqDCoMKg IH0KPj4gQEAgLTI2Niw0NyArMjUzLDcxIEBAIHN1YiB2ZXJpZnlfYXBpIHsKPj4gwqAgwqAgc3Vi IG9uX3VwZGF0ZV9ob29rIHsKPj4gwqDCoMKgwqDCoCBteSAoJGNsYXNzLCAkcGx1Z2luX2NvbmZp ZykgPSBAXzsKPj4gLQo+PiAtwqDCoMKgIFBWRTo6TmV0d29yazo6U0ROOjpJcGFtczo6TmV0Ym94 UGx1Z2luOjp2ZXJpZnlfYXBpKCRjbGFzcywgCj4+ICRwbHVnaW5fY29uZmlnKTsKPj4gK8KgwqDC oCB2ZXJpZnlfYXBpKCRjbGFzcywgJHBsdWdpbl9jb25maWcpOwo+PiDCoCB9Cj4+IMKgIC0jaGVs cGVycwo+PiAtCj4+ICsjIGhlbHBlcnMKPj4gwqAgc3ViIGdldF9wcmVmaXhfaWQgewo+PiAtwqDC oMKgIG15ICgkdXJsLCAkY2lkciwgJGhlYWRlcnMsICRmaW5nZXJwcmludCkgPSBAXzsKPj4gLcKg wqDCoCBteSAkcmVzdWx0ID0gUFZFOjpOZXR3b3JrOjpTRE46OmFwaV9yZXF1ZXN0KAo+PiAtwqDC oMKgICJHRVQiLCAiJHVybC9pcGFtL3ByZWZpeGVzLz9xPSRjaWRyIiwgJGhlYWRlcnMsIHVuZGVm LCAKPj4gJGZpbmdlcnByaW50KTsKPj4gK8KgwqDCoCBteSAoJGNvbmZpZywgJGNpZHIsICRub2Vy cikgPSBAXzsKPj4gKwo+PiArwqDCoMKgICMgd2UgbmVlZCB0byBzdXBwbHkgYW55IElQIGluc2lk ZSB0aGUgcHJlZml4LCB3aXRob3V0IHN1cHBseWluZyAKPj4gdGhlIG1hc2ssIHNvCj4+ICvCoMKg wqAgIyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tIHRoZSBjaWRyCj4+ICvCoMKgwqAgbXkgKCRpcCwg dW5kZWYpID0gc3BsaXQoL1wvLywgJGNpZHIpOwo+PiArCj4+ICvCoMKgwqAgbXkgJHJlc3VsdCA9 IGV2YWwgeyBuZXRib3hfYXBpX3JlcXVlc3QoJGNvbmZpZywgIkdFVCIsIAo+PiAiL2lwYW0vcHJl Zml4ZXMvP3E9JGlwIikgfTsKPj4gK8KgwqDCoCBpZiAoJEApIHsKPj4gK8KgwqDCoCByZXR1cm4g aWYgJG5vZXJyOwo+PiArwqDCoMKgIGRpZSAiY291bGQgbm90IG9idGFpbiBJRCBmb3IgcHJlZml4 ICRjaWRyOiAkQCI7Cj4+ICvCoMKgwqAgfQo+PiArCj4+IMKgwqDCoMKgwqAgbXkgJGRhdGEgPSBA eyRyZXN1bHQtPntyZXN1bHRzfX1bMF07Cj4+IMKgwqDCoMKgwqAgbXkgJGludGVybmFsaWQgPSAk ZGF0YS0+e2lkfTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gJGludGVybmFsaWQ7Cj4+IMKgIH0KPj4g wqAgwqAgc3ViIGdldF9pcHJhbmdlX2lkIHsKPj4gLcKgwqDCoCBteSAoJHVybCwgJHJhbmdlLCAk aGVhZGVycywgJGZpbmdlcnByaW50KSA9IEBfOwo+PiAtwqDCoMKgIG15ICRyZXN1bHQgPSBQVkU6 Ok5ldHdvcms6OlNETjo6YXBpX3JlcXVlc3QoCj4+IC3CoMKgwqAgIkdFVCIsCj4+IC0gCj4+ICIk dXJsL2lwYW0vaXAtcmFuZ2VzLz9zdGFydF9hZGRyZXNzPSRyYW5nZS0+eydzdGFydC1hZGRyZXNz J30mZW5kX2FkZHJlc3M9JHJhbmdlLT57J2VuZC1hZGRyZXNzJ30iLAo+PiAtwqDCoMKgICRoZWFk ZXJzLAo+PiAtwqDCoMKgIHVuZGVmLAo+PiAtwqDCoMKgICRmaW5nZXJwcmludAo+PiAtwqDCoMKg ICk7Cj4+ICvCoMKgwqAgbXkgKCRjb25maWcsICRyYW5nZSwgJG5vZXJyKSA9IEBfOwo+PiArCj4+ ICvCoMKgwqAgbXkgJHJlc3VsdCA9IGV2YWwgewo+PiArwqDCoMKgIG5ldGJveF9hcGlfcmVxdWVz dCgKPj4gK8KgwqDCoMKgwqDCoMKgICRjb25maWcsCj4+ICvCoMKgwqDCoMKgwqDCoCAiR0VUIiwK Pj4gKyAKPj4gIi9pcGFtL2lwLXJhbmdlcy8/c3RhcnRfYWRkcmVzcz0kcmFuZ2UtPnsnc3RhcnQt YWRkcmVzcyd9JmVuZF9hZGRyZXNzPSRyYW5nZS0+eydlbmQtYWRkcmVzcyd9IiwKPj4gK8KgwqDC oCApOwo+PiArwqDCoMKgIH07Cj4+ICvCoMKgwqAgaWYgKCRAKSB7Cj4+ICvCoMKgwqAgcmV0dXJu IGlmICRub2VycjsKPj4gK8KgwqDCoCBkaWUgImNvdWxkIG5vdCBvYnRhaW4gSUQgZm9yIElQIHJh bmdlIAo+PiAkcmFuZ2UtPnsnc3RhcnQtYWRkcmVzcyd9OiRyYW5nZS0+eydlbmQtYWRkcmVzcyd9 OiAkQCI7Cj4+ICvCoMKgwqAgfQo+PiArCj4+IMKgwqDCoMKgwqAgbXkgJGRhdGEgPSBAeyRyZXN1 bHQtPntyZXN1bHRzfX1bMF07Cj4+IMKgwqDCoMKgwqAgbXkgJGludGVybmFsaWQgPSAkZGF0YS0+ e2lkfTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gJGludGVybmFsaWQ7Cj4+IMKgIH0KPj4gwqAgwqAg c3ViIGdldF9pcF9pZCB7Cj4+IC3CoMKgwqAgbXkgKCR1cmwsICRpcCwgJGhlYWRlcnMsICRmaW5n ZXJwcmludCkgPSBAXzsKPj4gLcKgwqDCoCBteSAkcmVzdWx0ID0gUFZFOjpOZXR3b3JrOjpTRE46 OmFwaV9yZXF1ZXN0KAo+PiAtwqDCoMKgICJHRVQiLCAiJHVybC9pcGFtL2lwLWFkZHJlc3Nlcy8/ cT0kaXAiLCAkaGVhZGVycywgdW5kZWYsIAo+PiAkZmluZ2VycHJpbnQpOwo+PiArwqDCoMKgIG15 ICgkY29uZmlnLCAkaXAsICRub2VycikgPSBAXzsKPj4gKwo+PiArwqDCoMKgIG15ICRyZXN1bHQg PSBldmFsIHsgbmV0Ym94X2FwaV9yZXF1ZXN0KCRjb25maWcsICJHRVQiLCAKPj4gIi9pcGFtL2lw LWFkZHJlc3Nlcy8/cT0kaXAiKSB9Owo+PiArwqDCoMKgIGlmICgkQCkgewo+PiArwqDCoMKgIHJl dHVybiBpZiAkbm9lcnI7Cj4+ICvCoMKgwqAgZGllICJjb3VsZCBub3Qgb2J0YWluIElEIGZvciBJ UCAkaXA6ICRAIjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gwqDCoMKgwqDCoCBteSAkZGF0YSA9IEB7 JHJlc3VsdC0+e3Jlc3VsdHN9fVswXTsKPj4gwqDCoMKgwqDCoCBteSAkaXBfaWQgPSAkZGF0YS0+ e2lkfTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gJGlwX2lkOwo+PiDCoCB9Cj4+IMKgIMKgIHN1YiBp c19pcF9nYXRld2F5IHsKPj4gLcKgwqDCoCBteSAoJHVybCwgJGlwLCAkaGVhZGVycywgJGZpbmdl cnByaW50KSA9IEBfOwo+PiAtwqDCoMKgIG15ICRyZXN1bHQgPSBQVkU6Ok5ldHdvcms6OlNETjo6 YXBpX3JlcXVlc3QoIkdFVCIsIAo+PiAiJHVybC9pcGFtL2lwLWFkZHJlc3Nlcy8/cT0kaXAiLCAk aGVhZGVycywgdW5kZWYsICRmaW5nZXJwcmludCk7Cj4+ICvCoMKgwqAgbXkgKCRjb25maWcsICRp cCwgJG5vZXJyKSA9IEBfOwo+PiArCj4+ICvCoMKgwqAgbXkgJHJlc3VsdCA9IGV2YWwgeyBuZXRi b3hfYXBpX3JlcXVlc3QoJGNvbmZpZywgIkdFVCIsIAo+PiAiL2lwYW0vaXAtYWRkcmVzc2VzLz9x PSRpcCIpIH07Cj4+ICvCoMKgwqAgaWYgKCRAKSB7Cj4+ICvCoMKgwqAgcmV0dXJuIGlmICRub2Vy cjsKPj4gK8KgwqDCoCBkaWUgImNvdWxkIG5vdCBvYnRhaW4gaXBhbSBlbnRyeSBmb3IgYWRkcmVz cyAkaXA6ICRAIjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gwqDCoMKgwqDCoCBteSAkZGF0YSA9IEB7 JHJlc3VsdC0+e2RhdGF9fVswXTsKPj4gwqDCoMKgwqDCoCBteSAkZGVzY3JpcHRpb24gPSAkZGF0 YS0+e2Rlc2NyaXB0aW9ufTsKPj4gwqDCoMKgwqDCoCBteSAkaXNfZ2F0ZXdheSA9IDEgaWYgJGRl c2NyaXB0aW9uIGVxICdnYXRld2F5JzsKPgo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPiBwdmUtZGV2ZWwgbWFpbGluZyBsaXN0Cj4gcHZlLWRldmVs QGxpc3RzLnByb3htb3guY29tCj4gaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21h aWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCj4KPgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxp c3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFu L2xpc3RpbmZvL3B2ZS1kZXZlbAo=