From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 0926C1FF163 for ; Thu, 24 Oct 2024 08:41:59 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 87824845C; Thu, 24 Oct 2024 08:42:37 +0200 (CEST) Date: Thu, 24 Oct 2024 08:42:01 +0200 (CEST) From: =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= To: "DERUMIER, Alexandre" , "pve-devel@lists.proxmox.com" Message-ID: <257159672.1161.1729752121142@webmail.proxmox.com> In-Reply-To: References: <20240930113153.2896648-1-alexandre.derumier@groupe-cyllene.com> <1350338065.715.1729678366532@webmail.proxmox.com> MIME-Version: 1.0 X-Priority: 3 Importance: Normal X-Mailer: Open-Xchange Mailer v7.10.6-Rev69 X-Originating-Client: open-xchange-appsuite X-SPAM-LEVEL: Spam detection results: 0 AWL 0.048 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 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [linuxfound.org, cyllene.com, plugin.pm, dirplugin.pm, igalia.com] Subject: Re: [pve-devel] [PATCH v2 pve-storage 1/2] add external snasphot support X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" Cj4gREVSVU1JRVIsIEFsZXhhbmRyZSA8YWxleGFuZHJlLmRlcnVtaWVyQGdyb3VwZS1jeWxsZW5l LmNvbT4gaGF0IGFtIDIzLjEwLjIwMjQgMTQ6NTkgQ0VTVCBnZXNjaHJpZWJlbjoKPiAKPiAgCj4g SGkgRmFiaWFuLAo+IAo+IHRoYW5rcyBmb3IgdGhlIHJldmlldyAhCj4gCj4gPj4tLS0tLS0tLSBN ZXNzYWdlIGluaXRpYWwgLS0tLS0tLS0KPiA+PkRlOiBGYWJpYW4gR3LDvG5iaWNobGVyIDxmLmdy dWVuYmljaGxlckBwcm94bW94LmNvbT4KPiA+PsOAOiBQcm94bW94IFZFIGRldmVsb3BtZW50IGRp c2N1c3Npb24gPHB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbT4KPiA+PkNjOiBBbGV4YW5kcmUg RGVydW1pZXIgPGFsZXhhbmRyZS5kZXJ1bWllckBncm91cGUtY3lsbGVuZS5jb20+Cj4gPj5PYmpl dDogUmU6IFtwdmUtZGV2ZWxdIFtQQVRDSCB2MiBwdmUtc3RvcmFnZSAxLzJdIGFkZCBleHRlcm5h bAo+ID4+c25hc3Bob3Qgc3VwcG9ydAo+ID4+RGF0ZTogMjMvMTAvMjAyNCAxMjoxMjo0Ngo+ID4+ Cj4gPj5zb21lIGhpZ2ggbGV2ZWwgY29tbWVudHM6Cj4gPj4KPiA+PkkgYW0gbm90IHN1cmUgaG93 IG11Y2ggd2UgZ2FpbiBoZXJlIHdpdGggdGhlIHJhdyBzdXBwb3J0Pwo+IAo+IFRoZXkgYXJlIHJl YWxseSBxY293MiBvdmVyaGVhZCwgbW9zdGx5IHdpdGggYmlnIGRpc2suCj4gYXMgZm9yIGdvb2Qg cGVyZm9ybWFuY2UsIHRoZSBxY293MiBsMi1jYWNoZS1zaXplIG5lZWQgdG8gYmUga2VlcGVkIGlu Cj4gbWVtb3J5IChhbmQgaXQncyAxTUIgYnkgZGlzaykKPiBodHRwczovL2V2ZW50cy5zdGF0aWMu bGludXhmb3VuZC5vcmcvc2l0ZXMvZXZlbnRzL2ZpbGVzL3NsaWRlcy9rdm0tZm9ydW0tMjAxNy1z bGlkZXMucGRmCj4gCj4gSG9wZWZ1bGx5LCB0aGV5IGFyZSBpbXByb3ZtZW50cyB3aXRoIHRoZSAi bmV3IiBzdWItY2x1c3RlciBmZWF0dXJlCj4gaHR0cHM6Ly9wZW9wbGUuaWdhbGlhLmNvbS9iZXJ0 by9maWxlcy9rdm0tZm9ydW0tMjAyMC1zbGlkZXMucGRmCj4gSSdtIGFscmVhZHkgdXNpbmcgaXQg YXQgc25hcHNob3QgY3JlYXRlLCBidXQgSSB0aGluayB3ZSBzaG91bGQgYWxzbyB1c2UKPiBpdCBm b3IgbWFpbiBxY293MiB2b2x1bWUuCj4gCj4gCj4gQnV0IGV2ZW4gd2l0aCB0aGF0LCB5b3UgY2Fu IHN0aWxsIGhhdmUgcGVyZm9ybWFuY2UgaW1wYWN0Lgo+IFNvIHllcywgSSB0aGluayB0aGV5IGFy ZSByZWFsbHkgdXNlY2FzZSBmb3Igd29ya2xvYWQgd2hlbiB5b3Ugb25seSBuZWVkCj4gc25hcHNo b3QgdGltZSB0byB0aW1lIChiZWZvcmUgYW4gdXBncmFkZSBmb3IgZXhhbXBsZSksIGJ1dCBtYXgK PiBwZXJmb3JtYW5jZSB3aXRoIG5vIHNuYXBob3QgZXhpc3QuCgpteSBtYWluIHBvaW50IGhlcmUg aXMgLSBhbGwgb3RoZXIgc3RvcmFnZXMgdHJlYXQgc25hcHNob3RzIGFzICJjaGVhcCIuIGlmIHlv dSBjb21iaW5lIHJhdytxY293MiBzbmFwc2hvdCBvdmVybGF5cywgc3VkZGVubHkgcGVyZm9ybWFu Y2Ugd2lsbCBnZXQgd29yc2UgaWYgeW91IGtlZXAgYSBzbmFwc2hvdCBhcm91bmQgZm9yIHdoYXRl dmVyIHJlYXNvbi4uIAogCj4gPj4gaXQncyBhIGJpdCBjb25mdXNpbmcgdG8gaGF2ZSBhIHZvbGlk IGVuZGluZyB3aXRoIHJhdywgd2l0aCB0aGUKPiA+PmN1cnJlbnQgdm9sdW1lIGFuZCBhbGwgYnV0 IHRoZSBmaXJzdCBzbmFwc2hvdCBhY3R1YWxseSBiZWluZyBzdG9yZWQKPiA+PmluIHFjb3cyIGZp bGVzLCB3aXRoIHRoZSByYXcgZmlsZSBiZWluZyB0aGUgIm9sZGVzdCIgc25hcHNob3QgaW4gdGhl Cj4gPj5jaGFpbi4uCgo+IGlmIGl0J3MgdG9vIGNvbmZ1c2luZywgd2UgY291bGQgdXNlIGZvciBl eGFtcGxlIGFuIC5zbmFwIGV4dGVuc2lvbi4KPiAoYXMgd2Uga25vd24gdGhhdCBpdCdzIHFjb3cy IGJlaGluZCkKCkkgaGF2ZW4ndCB0aG91Z2h0IHlldCBhYm91dCBob3cgdG8gZW5jb2RlIHRoZSBz bmFwc2hvdCBuYW1lIGludG8gdGhlIHNuYXBzaG90IGZpbGUgbmFtZSwgYnV0IHllYWgsIG1heWJl IHNvbWV0aGluZyBsaWtlICB0aGF0IHdvdWxkIGJlIGdvb2QuIG9yIG1heWJlIHNuYXAtVk1JRC1k aXNrLURJU0sucWNvdzIgPwoKPiBpZiBwb3NzaWJsZSwgSSdkIGJlIG11Y2ggaGFwcGllciB3aXRo IHRoZSBzbmFwc2hvdCBuYW1lIGluIHRoZSBzbmFwc2hvdAo+IGZpbGUgYmVpbmcgYSAxOjEgbWF0 Y2gsIHNlZSBjb21tZW50cyBpbmxpbmUKPiAKPiA+Pi0gbWFrZXMgaXQgYSBsb3QgZWFzaWVyIHRv IHVuZGVyc3RhbmQgKGFkbWluIHdhbnRzIHRvIG1hbnVhbGx5IHJlbW92ZQo+ID4+c25hcHNob3Qg ImZvbyIsIGlmICJmb28iIHdhcyB0aGUgbGFzdCBzbmFwc2hvdCB0aGVuIHJpZ2h0IG5vdyB0aGUK PiA+PnZvbHVtZSBjYWxsZWQgImZvbyIgaXMgYWN0dWFsbHkgdGhlIGN1cnJlbnQgY29udGVudHMh KQo+IAo+IFRoaXMgcGFydCBpcyByZWFsbHkgZGlmZmljdWx0LCBiZWNhdXNlIHlvdSBjYW4ndCBr bm93biBpbiBhZHZhbmNlIHRoZQo+IG5hbWUgb2YgdGhlIHNuYXBzaG90IHlvdSdsbCB0YWtlIGlu IHRoZSBmdXR1cmUuIFRoZSBvbmx5IHdheSBjb3VsZCBiZQo+IHRvIGNyZWF0ZSBhICJjdXJyZW50 IiB2b2x1bWUgLCAgcmVuYW1lIGl0IHdoZW4geW91IHRvb2sgYW5vdGhlcgo+IHNuYXNwaG90IChJ J20gbm90IHN1cmUgaXQncyBwb3NzaWJsZSB0byBkbyBpdCBsaXZlLAo+IGFuZCB0aGlzIGNvdWxk IGJyZWFrIGxpbmsgY2hhaW4gdG9vKQo+IAo+IEFsc28sIEkgZG9uJ3Qga25vd24gaG93IHRvIG1h bmFnZSB0aGUgbWFpbiB2b2x1bWUsIHdoZW4geW91IHRha2UgdGhlCj4gZmlyc3Qgc25hcHNob3Qg PyB3ZSBzaG91bGQgcmVuYW1lIGl0IHRvby4KCkkgbWVhbiwgaWYgd2UgZG9uJ3QgYWxsb3cgLnJh dyBmaWxlcyB0byBiZSBzbmFwc2hvdHRlZCB0aGVuIHRoaXMgcHJvYmxlbSBkb2Vzbid0IGV4aXN0 IDspCgo+IHNvICJ2bS1kaXNrLTEwMC1kaXNrLTAucmF3fHFjb3cyIiAgLCBiZWNvbWUgInZtLWRp c2stMTAwLWRpc2stMC0KPiBzbmFwMS4ocmF3fHFjb3cyKSIgKyBuZXcgInZtLWRpc2stMTAwLWRp c2stMC1jdXJyZW50LnFjb3cyIiA/Cgp0aGUgdm9saWQgY2hhbmdpbmcgb24gc25hcHNob3Qgc2Vl bXMgbGlrZSBpdCB3b3VsZCByZXF1aXJlIGEgbG90IG9mIGFkYXB0aW9uLi4gT1RPSCwgdGhlIHZv bGlkIGNvbnRhaW5pbmcgYSB3cm9uZyBmb3JtYXQgbWlnaHQgYWxzbyBicmVhayB0aGluZ3MuCgo+ IEknbGwgdHJ5IHRvIGRvIHRlc3QgYWdhaW4gdG8gc2VlIHdoYXQgaXMgcG9zc2libGUuCj4gCj4g Cj4gCj4gCj4gPj4tIG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gZG8gbG9va3VwcyB2aWEgdGhlIGZ1 bGwgc25hcHNob3QgbGlzdCBhbGwKPiA+PnRoZSB0aW1lIChlLmcuLCBpZiBJIHdhbnQgdG8gZG8g YSBmdWxsIGNsb25lIGZyb20gYSBzbmFwc2hvdCAiZm9vIiwgSQo+ID4+Y2FuIGp1c3QgcGFzcyB0 aGUgc25hcC1mb28gdm9sdW1lIHRvIHFlbXUtaW1nKQo+IAo+IG9rIGdvdCBpdAo+IAo+IAo+IAo+ ID4+dGhlIG5hbWluZyBzY2hlbWUgZm9yIHNuYXBzaG90cyBuZWVkcyB0byBiZSBhZGFwdGVkIHRv IG5vdCBjbGFzaCB3aXRoCj4gPj5yZWd1bGFyIHZvbHVtZXM6Cj4gCj4gPj4kIHB2ZXNtIGFsbG9j IGV4dHNuYXAgMTMxMzE0IHZtLTEzMTMxNC1kaXNrLWZvb2Jhci5xY293MiAyRwo+ID4+Rm9ybWF0 dGluZyAnL21udC9wdmUvZXh0NC9leHRzbmFwL2ltYWdlcy8xMzEzMTQvdm0tMTMxMzE0LWRpc2st Cj4gPj5mb29iYXIucWNvdzInLCBmbXQ9cWNvdzIgY2x1c3Rlcl9zaXplPTY1NTM2IGV4dGVuZGVk X2wyPW9mZgo+ID4+cHJlYWxsb2NhdGlvbj1vZmYgY29tcHJlc3Npb25fdHlwZT16bGliIHNpemU9 MjE0NzQ4MzY0OAo+ID4+bGF6eV9yZWZjb3VudHM9b2ZmIHJlZmNvdW50X2JpdHM9MTYKPiA+PnN1 Y2Nlc3NmdWxseSBjcmVhdGVkICdleHRzbmFwOjEzMTMxNC92bS0xMzEzMTQtZGlzay1mb29iYXIu cWNvdzInCj4gPj4kIHFtIHJlc2NhbiAtLXZtaWQgMTMxMzE0Cj4gPj5yZXNjYW4gdm9sdW1lcy4u Lgo+ID4+Y2FuJ3QgcGFyc2Ugc25hcG5hbWUgZnJvbSBwYXRoIGF0Cj4gPj4vdXNyL3NoYXJlL3Bl cmw1L1BWRS9TdG9yYWdlL1BsdWdpbi5wbSBsaW5lIDE5MzQuCj4gCj4gYW55IHByZWZlcmVuY2Ug Zm9yIG5hbWluZyBzY2hlbWUgPyBmb3IgbHZtIGV4dGVybmFsIHNuYXAsIEkgaGF2ZSB1c2VkCj4g InZtLTEzMTMxNC1kaXNrLTAtc25hcC08Zm9vYmFyPiI7CgpzZWUgYWJvdmUKCj4gPj5zdG9yYWdl X21pZ3JhdGUgbmVlZHMgdG8gaGFuZGxlIGV4dGVybmFsIHNuYXBzaG90cywgb3IgYXQgbGVhc3Qg ZXJyb3IKPiA+Pm91dC7CoAo+IGl0IHNob3VsZCBhbHJlYWR5IHdvcmsuIChJIGhhdmUgdGVzdGVk IG1vdmVfZGlzaywgYW5kIGxpdmUgbWlncmF0aW9uICsKPiBzdG9yYWdlIG1pZ3JhdGlvbikuIHFl bXVfaW1nX2NvbnZlcnQgb2ZmbGluZSBhbmQgcWVtdSBibG9jayBqb2IgZm9yCj4gbGl2ZS4KCmJ1 dCBkb24ndCBhbGwgb2YgdGhvc2UgbG9zZSB0aGUgc25hcHNob3RzPyBkaWQgeW91IHRlc3QgaXQg d2l0aCBzbmFwc2hvdHMgYW5kIHJvbGxiYWNrIGFmdGVyd2FyZHM/Cgo+ID4+SSBoYXZlbid0IHRl c3RlZCB0aGF0IHBhcnQgb3IgbGlua2VkIGNsb25lcyBvciBhIGxvdCBvZiBvdGhlcgo+ID4+YWR2 YW5jZWQgcmVsYXRlZCBhY3Rpb25zIGF0IGFsbCA7KQo+IAo+IEZvciBsaW5rZWQgY2xvbmUsIHdl IGNhbid0IGhhdmUgYSBiYXNlIGltYWdlIHdpdGggc25hcHNob3RzIChvdGhlciB0aGFuCj4gX2Jh c2VfKS4gc28gSXQnbGwgYmUgc2FmZS4KCmFjawoKPiA+IEFsZXhhbmRyZSBEZXJ1bWllciB2aWEg cHZlLWRldmVsIDxwdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20+IGhhdCBhbQo+ID4gMzAuMDku MjAyNCAxMzozMSBDRVNUIGdlc2NocmllYmVuOgo+ID4gU2lnbmVkLW9mZi1ieTogQWxleGFuZHJl IERlcnVtaWVyIDxhbGV4YW5kcmUuZGVydW1pZXJAZ3JvdXBlLQo+ID4gY3lsbGVuZS5jb20+Cj4g PiAtLS0KPiA+IMKgc3JjL1BWRS9TdG9yYWdlL0RpclBsdWdpbi5wbSB8wqDCoCAxICsKPiA+IMKg c3JjL1BWRS9TdG9yYWdlL1BsdWdpbi5wbcKgwqDCoCB8IDIyNSArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0KPiA+IC0tCj4gPiDCoDIgZmlsZXMgY2hhbmdlZCwgMjAxIGluc2VydGlv bnMoKyksIDI1IGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvc3JjL1BWRS9TdG9y YWdlL0RpclBsdWdpbi5wbQo+ID4gYi9zcmMvUFZFL1N0b3JhZ2UvRGlyUGx1Z2luLnBtCj4gPiBp bmRleCAyZWZhOGQ1Li4yYmVmNjczIDEwMDY0NAo+ID4gLS0tIGEvc3JjL1BWRS9TdG9yYWdlL0Rp clBsdWdpbi5wbQo+ID4gKysrIGIvc3JjL1BWRS9TdG9yYWdlL0RpclBsdWdpbi5wbQo+ID4gQEAg LTgwLDYgKzgwLDcgQEAgc3ViIG9wdGlvbnMgewo+ID4gwqAgaXNfbW91bnRwb2ludCA9PiB7IG9w dGlvbmFsID0+IDEgfSwKPiA+IMKgIGJ3bGltaXQgPT4geyBvcHRpb25hbCA9PiAxIH0sCj4gPiDC oCBwcmVhbGxvY2F0aW9uID0+IHsgb3B0aW9uYWwgPT4gMSB9LAo+ID4gKyBzbmFwZXh0ID0+IHsg b3B0aW9uYWwgPT4gMSB9LAo+ID4gwqDCoMKgIH07Cj4gPiDCoH0KPiA+IMKgCj4gPiBkaWZmIC0t Z2l0IGEvc3JjL1BWRS9TdG9yYWdlL1BsdWdpbi5wbSBiL3NyYy9QVkUvU3RvcmFnZS9QbHVnaW4u cG0KPiA+IGluZGV4IDY0NDQzOTAuLjVlNTE5N2EgMTAwNjQ0Cj4gPiAtLS0gYS9zcmMvUFZFL1N0 b3JhZ2UvUGx1Z2luLnBtCj4gPiArKysgYi9zcmMvUFZFL1N0b3JhZ2UvUGx1Z2luLnBtCj4gPiBA QCAtMjE0LDYgKzIxNCwxMSBAQCBteSAkZGVmYXVsdERhdGEgPSB7Cj4gPiDCoCDCoMKgwqAgbWF4 aW11bSA9PiA2NTUzNSwKPiA+IMKgIMKgwqDCoCBvcHRpb25hbCA9PiAxLAo+ID4gwqAgfSwKPiA+ ICvCoMKgwqDCoMKgwqDCoCAnc25hcGV4dCcgPT4gewo+ID4gKyDCoMKgwqAgdHlwZSA9PiAnYm9v bGVhbicsCj4gPiArIMKgwqDCoCBkZXNjcmlwdGlvbiA9PiAnZW5hYmxlIGV4dGVybmFsIHNuYXBz aG90LicsCj4gPiArIMKgwqDCoCBvcHRpb25hbCA9PiAxLAo+ID4gK8KgwqDCoMKgwqDCoMKgIH0s Cj4gPiDCoMKgwqDCoCB9LAo+ID4gwqB9Owo+ID4gwqAKPiA+IEBAIC02OTUsNyArNzAwLDcgQEAg c3ViIGdldF9zdWJkaXIgewo+ID4gwqB9Cj4gPiDCoAo+ID4gwqBzdWIgZmlsZXN5c3RlbV9wYXRo IHsKPiA+IC3CoMKgwqAgbXkgKCRjbGFzcywgJHNjZmcsICR2b2xuYW1lLCAkc25hcG5hbWUpID0g QF87Cj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkdm9sbmFtZSwgJHNuYXBuYW1lLCAk Y3VycmVudF9zbmFwKSA9IEBfOwo+IAo+IHNlZSBjb21tZW50IGJlbG93Cj4gCj4gPiDCoAo+ID4g wqDCoMKgwqAgbXkgKCR2dHlwZSwgJG5hbWUsICR2bWlkLCB1bmRlZiwgdW5kZWYsICRpc0Jhc2Us ICRmb3JtYXQpID0KPiA+IMKgICRjbGFzcy0+cGFyc2Vfdm9sbmFtZSgkdm9sbmFtZSk7Cj4gPiBA QCAtNzAzLDcgKzcwOCw3IEBAIHN1YiBmaWxlc3lzdGVtX3BhdGggewo+ID4gwqDCoMKgwqAgIyBO b3RlOiBxY293Mi9xZWQgaGFzIGludGVybmFsIHNuYXBzaG90LCBzbyBwYXRoIGlzIGFsd2F5cwo+ ID4gwqDCoMKgwqAgIyB0aGUgc2FtZSAod2l0aCBvciB3aXRob3V0IHNuYXBzaG90ID0+IHNhbWUg ZmlsZSkuCj4gPiDCoMKgwqDCoCBkaWUgImNhbid0IHNuYXBzaG90IHRoaXMgaW1hZ2UgZm9ybWF0 XG4iCj4gPiAtIGlmIGRlZmluZWQoJHNuYXBuYW1lKSAmJiAkZm9ybWF0ICF+IG0vXihxY293Mnxx ZWQpJC87Cj4gPiArIGlmIGRlZmluZWQoJHNuYXBuYW1lKSAmJiAhJHNjZmctPntzbmFwZXh0fSAm JiAkZm9ybWF0ICF+Cj4gPiBtL14ocWNvdzJ8cWVkKSQvOwo+ID4gwqAKPiA+IMKgwqDCoMKgIG15 ICRkaXIgPSAkY2xhc3MtPmdldF9zdWJkaXIoJHNjZmcsICR2dHlwZSk7Cj4gPiDCoAo+ID4gQEAg LTcxMSwxMyArNzE2LDIyIEBAIHN1YiBmaWxlc3lzdGVtX3BhdGggewo+ID4gwqAKPiA+IMKgwqDC oMKgIG15ICRwYXRoID0gIiRkaXIvJG5hbWUiOwo+ID4gwqAKPiA+ICvCoMKgwqAgaWYoJHNjZmct PntzbmFwZXh0fSkgewo+ID4gKyBteSAkc25hcHBhdGggPSBnZXRfc25hcF9wYXRoKCRwYXRoLCAk c25hcG5hbWUpOwo+ID4gKyBpZigkc25hcG5hbWUpIHsKPiA+ICsgwqDCoMKgICRwYXRoID0gJHNu YXBwYXRoOwo+ID4gKyB9IGVsc2lmICgkY3VycmVudF9zbmFwKSB7Cj4gPiArIMKgwqDCoCAkcGF0 aCA9ICRjdXJyZW50X3NuYXAtPntmaWxlfTsKPiA+ICsgfQo+ID4gK8KgwqDCoCB9Cj4gCj4gc2Vl IGNvbW1lbnRlIGJlbG93Cj4gCj4gPiDCoMKgwqDCoCByZXR1cm4gd2FudGFycmF5ID8gKCRwYXRo LCAkdm1pZCwgJHZ0eXBlKSA6ICRwYXRoOwo+ID4gwqB9Cj4gPiDCoAo+ID4gwqBzdWIgcGF0aCB7 Cj4gPiDCoMKgwqDCoCBteSAoJGNsYXNzLCAkc2NmZywgJHZvbG5hbWUsICRzdG9yZWlkLCAkc25h cG5hbWUpID0gQF87Cj4gPiDCoAo+ID4gLcKgwqDCoCByZXR1cm4gJGNsYXNzLT5maWxlc3lzdGVt X3BhdGgoJHNjZmcsICR2b2xuYW1lLCAkc25hcG5hbWUpOwo+ID4gK8KgwqDCoCBteSAkY3VycmVu dF9zbmFwc2hvdCA9ICRjbGFzcy0+Z2V0X2N1cnJlbnRfc25hcHNob3QoJHNjZmcsCj4gPiAkc3Rv cmVpZCwgJHZvbG5hbWUpOwo+IAo+ID4+dGhpcyBpcyBwcmV0dHkgZXhwZW5zaXZlLCBhbmQgd291 bGQgb25seSBiZSBuZWVkZWQgaWYgJHNuYXBuYW1lIGlzCj4gPj5ub3Qgc2V0Li4KPiAKPiBUaGUg bWFpbiBwcm9ibGVtIGlzIHdoZW4geW91IHN0YXJ0IGEgdm0gb24gYSBzcGVjaWZpYyBzbmFzcGhv dCwKPiB3ZSBkb24ndCBzZW5kIHRoZSAkc25hcG5hbWUgcGFyYW0uCj4gCj4gT25lIHdheSBjb3Vs ZCBiZSB0aGF0IHFlbXUtc2VydmVyIGNoZWNrIHRoZSBjdXJyZW50IHNuYXBzaG90IGZyb20KPiBj b25maWcgd2hlbiBkb2luZyBzcGVjaWZpYyBhY3Rpb24gbGlrZSBzdGFydC4KCmlmIHdlIG1hbmFn ZSB0byBmaW5kIGEgd2F5IHRvIG1ha2UgdGhlIHZvbGlkIGFsd2F5cyBwb2ludCBhdCB0aGUgdG9w IG92ZXJsYXksIHRoZW4gdGhhdCB3b3VsZG4ndCBiZSBuZWVkZWQuLgoKPiA+ICvCoMKgwqAgcmV0 dXJuICRjbGFzcy0+ZmlsZXN5c3RlbV9wYXRoKCRzY2ZnLCAkdm9sbmFtZSwgJHNuYXBuYW1lLAo+ ID4gJGN1cnJlbnRfc25hcHNob3QpOwo+IAo+ID4+Y291bGRuJ3Qgd2UgYXZvaWQgZXh0ZW5kaW5n IHRoZSBzaWduYXR1cmUgb2YgZmlsZXN5c3RlbV9wYXRoIGFuZCBqdXN0Cj4gcGFzcyB0aGUgbmFt ZSBvZiB0aGUgY3VycmVudCBzbmFwc2hvdCBhcyAkc25hcG5hbWU/Cj4gCj4gSSBuZWVkIHRvIHJl ZG8gdGVzdCwgSSBkb24ndCByZW1lbWJlciB3aHkgSSBoYXZlIHNwbGl0dGVkIHRoZW0sIGJ1dCB5 b3UKPiBhcmUgcmlnaHQsIGl0IHNob3VsZCBiZSBjbGVhbmVyLgo+IAo+ID4gwqB9Cj4gPiDCoAo+ ID4gwqBzdWIgY3JlYXRlX2Jhc2Ugewo+ID4gQEAgLTEwNzQsMTMgKzEwODgsMzEgQEAgc3ViIHZv bHVtZV9yZXNpemUgewo+ID4gwqBzdWIgdm9sdW1lX3NuYXBzaG90IHsKPiA+IMKgwqDCoMKgIG15 ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsICRzbmFwKSA9IEBfOwo+ID4gwqAK PiA+IC3CoMKgwqAgZGllICJjYW4ndCBzbmFwc2hvdCB0aGlzIGltYWdlIGZvcm1hdFxuIiBpZiAk dm9sbmFtZSAhfgo+ID4gbS9cLihxY293MnxxZWQpJC87Cj4gPiArwqDCoMKgIGRpZSAiY2FuJ3Qg c25hcHNob3QgdGhpcyBpbWFnZSBmb3JtYXRcbiIgaWYgJHZvbG5hbWUgIX4KPiA+IG0vXC4ocmF3 fHFjb3cyfHFlZCkkLzsKPiA+IMKgCj4gPiAtwqDCoMKgIG15ICRwYXRoID0gJGNsYXNzLT5maWxl c3lzdGVtX3BhdGgoJHNjZmcsICR2b2xuYW1lKTsKPiA+ICvCoMKgwqAgZGllICJleHRlcm5hbCBz bmFwc2hvdCBuZWVkIHRvIGJlIGVuYWJsZWQgdG8gc25hcHNob3QgLnJhdwo+ID4gdm9sdW1lc1xu IiBpZiAhJHNjZmctPntzbmFwZXh0fTsKPiAKPiA+PnRoaXMgY29uZGl0aW9uIGlzIGRlZmluaXRl bHkgd3JvbmcgLSBpdCBtZWFucyBubyBtb3JlIHNuYXBzaG90dGluZwo+ID4+dW5sZXNzIGV4dGVy bmFsIHNuYXBzaG90IHN1cHBvcnQgaXMgZW5hYmxlZC4uCj4gCj4gb29wcywgc29ycnkuCj4gCj4g PiDCoAo+ID4gLcKgwqDCoCBteSAkY21kID0gWycvdXNyL2Jpbi9xZW11LWltZycsICdzbmFwc2hv dCcsJy1jJywgJHNuYXAsICRwYXRoXTsKPiA+ICvCoMKgwqAgaWYoJHNjZmctPntzbmFwZXh0fSkg ewo+ID4gwqAKPiA+IC3CoMKgwqAgcnVuX2NvbW1hbmQoJGNtZCk7Cj4gPiArIG15ICRwYXRoID0g JGNsYXNzLT5wYXRoKCRzY2ZnLCAkdm9sbmFtZSwgJHN0b3JlaWQpOwo+ID4gKwo+ID4gKyBteSAk c25hcHBhdGggPSBnZXRfc25hcF9wYXRoKCRwYXRoLCAkc25hcCk7Cj4gPiArIG15ICRmb3JtYXQg PSAoJGNsYXNzLT5wYXJzZV92b2xuYW1lKCR2b2xuYW1lKSlbNl07Cj4gPiArCj4gPiArIG15ICRj bWQgPSBbJy91c3IvYmluL3FlbXUtaW1nJywgJ2NyZWF0ZScsICctYicsICRwYXRoLAo+ID4gKyDC oMKgICctRicsICRmb3JtYXQsICctZicsICdxY293MicsICRzbmFwcGF0aF07Cj4gCj4gPj5zZWUg Y29tbWVudHMgb24gcWVtdS1zZXJ2ZXIsIGJ1dC4uIHdvdWxkbid0IGl0IGJlIGJldHRlciBpZiB0 aGUgZmlsZQo+ID4+d2l0aCAkc25hcCBpbiBpdHMgbmFtZSB3b3VsZCBiZSB0aGUgb25lIHN0b3Jp bmcgdGhhdCBzbmFwc2hvdCdzIGRhdGE/Cj4gPj5pLmUuLCByZW5hbWUgdGhlICJjdXJyZW50IiB2 b2x1bWUgdG8gYmUgY2FsbGVkIC4uLi0kc25hcC4uLiAsIGFuZAo+ID4+dGhlbiBjcmVhdGUgYSBu ZXcgImN1cnJlbnQiIGZpbGUgd2l0aG91dCBhIHN1ZmZpeCB3aXRoIHRoZSByZW5hbWVkCj4gPj52 b2x1bWUgYXMgYmFja2luZyBmaWxlPwo+IAo+IEknbGwgdHJ5IGl0ICEKPiAKPiA+ICsKPiA+ICsg bXkgJG9wdGlvbnMgPSAiZXh0ZW5kZWRfbDI9b24sIjsKPiA+ICsgJG9wdGlvbnMgLj0gcHJlYWxs b2NhdGlvbl9jbWRfb3B0aW9uKCRzY2ZnLCAncWNvdzInKTsKPiA+ICsgcHVzaCBAJGNtZCwgJy1v JywgJG9wdGlvbnM7Cj4gPiArIHJ1bl9jb21tYW5kKCRjbWQpOwo+ID4gKwo+ID4gK8KgwqDCoCB9 IGVsc2Ugewo+ID4gKwo+ID4gKyBteSAkcGF0aCA9ICRjbGFzcy0+ZmlsZXN5c3RlbV9wYXRoKCRz Y2ZnLCAkdm9sbmFtZSk7Cj4gPiArIG15ICRjbWQgPSBbJy91c3IvYmluL3FlbXUtaW1nJywgJ3Nu YXBzaG90JywnLWMnLCAkc25hcCwgJHBhdGhdOwo+ID4gKyBydW5fY29tbWFuZCgkY21kKTsKPiA+ ICvCoMKgwqAgfQo+ID4gwqAKPiA+IMKgwqDCoMKgIHJldHVybiB1bmRlZjsKPiA+IMKgfQo+ID4g QEAgLTEwOTEsMTkgKzExMjMsMzkgQEAgc3ViIHZvbHVtZV9zbmFwc2hvdCB7Cj4gPiDCoHN1YiB2 b2x1bWVfcm9sbGJhY2tfaXNfcG9zc2libGUgewo+ID4gwqDCoMKgwqAgbXkgKCRjbGFzcywgJHNj ZmcsICRzdG9yZWlkLCAkdm9sbmFtZSwgJHNuYXAsICRibG9ja2VycykgPSBAXzsKPiA+IMKgCj4g PiArwqDCoMKgIGlmICgkc2NmZy0+e3NuYXBleHR9KSB7Cj4gPiArICN0ZWNobmljYWxseSwgd2Ug Y291bGQgbWFuYWdlIG11bHRpYnJhbmNoLCB3ZSBpdCBuZWVkIGxvdCBtb3JlIHdvcmsKPiA+IGZv ciBzbmFwc2hvdCBkZWxldGUKPiAKPiA+PndvdWxkIG11bHRpYnJhbmNoIGJlIGVhc2llciBpZiB0 aGVyZSBpcyBhIHNpbXBsZSAxOjEgY29ycmVzcG9uZGVuY2UKPiA+PmJldHdlZW4gc25hcHNob3Rz IGFuZCB0aGVpciBmaWxlbmFtZXM/Cj4gPj4KPiA+PnN3aXRjaGluZyB0byBhIGRpZmZlcmVudCBw YXJ0IG9mIHRoZSAiaGllcmFyY2h5IiBpcyB0aGVuIGp1c3QKPiA+Pi0gZGVsZXRlIGN1cnJlbnQg dm9sdW1lCj4gPj4tIGNyZWF0ZSBuZXcgY3VycmVudCB2b2x1bWUgdXNpbmcgcm9sbGJhY2sgdGFy Z2V0IGFzIGJhY2tpbmcgZmlsZQo+IHRoZSByb2xsYmFjay9icmFuY2ggc3dpdGNoIGlzIG5vdCB0 b28gZGlmZmljdWx0LCBtYXliZSAxOjEgbmFtaW5nIGNvdWxkCj4gaGVscC4KPiAKPiA+PkkgZ3Vl c3MgZGVsZXRpb24gZG9lcyBiZWNvbWUgaGFyZGVyIHRoZW4sIHNpbmNlIGl0IHBvdGVudGlhbGx5 Cj4gPj5yZXF1aXJlcyBtdWx0aXBsZSByZWJhc2VzLi4KPiAKPiB5ZXMsIFRoZSBiaWdnZXN0IGRp ZmZpY3VsdHkgaXMgc25hcHNob3QgZGVsZXRlLCBhcyB5b3UgbmVlZCB0byBjcmVhdGUgYQo+IGJs b2NrLXN0cmVhbSAgam9iLCBtZXJnaW4vd3JpdGluZyB0byBlYWNoIGJyYW5jaCBjaGlsZCwgYW5k IHlvdSBuZWVkIHRvCj4gZG8gaXQgYXRvbWljYWxseSB3aXRoIGEgdHJhbnNhY3Rpb24gd2l0aCBt dWx0aXBsZSBqb2JzLiAKPiBTbyB5ZXMsIGl0J3MgcG9zc2libGUsIGJ1dCBJIHdhbnRlZCB0byBr ZWVwIGl0IGVhc3kgZm9yIG5vdy4KCnN1cmUsIHRoaXMgcmVzdHJpY3Rpb24gY291bGQgYmUgbGlm dGVkIGluIGEgZm9sbG93LXVwIQoKPiA+ICsgbXkgJHBhdGggPSAkY2xhc3MtPmZpbGVzeXN0ZW1f cGF0aCgkc2NmZywgJHZvbG5hbWUpOwo+ID4gKyBteSAkc25hcHBhdGggPSBnZXRfc25hcF9wYXRo KCRwYXRoLCAkc25hcCk7Cj4gPiArCj4gPiArIG15ICRzbmFwc2hvdHMgPSAkY2xhc3MtPnZvbHVt ZV9zbmFwc2hvdF9pbmZvKCRzY2ZnLCAkc3RvcmVpZCwKPiA+ICR2b2xuYW1lKTsKPiA+ICsgbXkg JGN1cnJlbnRwYXRoID0gJHNuYXBzaG90cy0+e2N1cnJlbnR9LT57ZmlsZX07Cj4gPiArIHJldHVy biAxIGlmICEtZSAkc25hcHBhdGggfHwgJGN1cnJlbnRwYXRoIGVxICRzbmFwcGF0aDsKPiA+ICsK PiA+ICsgZGllICJjYW4ndCByb2xsYmFjaywgJyRzbmFwJyBpcyBub3QgbW9zdCByZWNlbnQgc25h cHNob3Qgb24KPiA+ICckdm9sbmFtZSdcbiI7Cj4gPiArwqDCoMKgIH0KPiA+ICsKPiA+IMKgwqDC oMKgIHJldHVybiAxOwo+ID4gwqB9Cj4gPiDCoAo+ID4gwqBzdWIgdm9sdW1lX3NuYXBzaG90X3Jv bGxiYWNrIHsKPiA+IMKgwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5h bWUsICRzbmFwKSA9IEBfOwo+ID4gwqAKPiA+IC3CoMKgwqAgZGllICJjYW4ndCByb2xsYmFjayBz bmFwc2hvdCB0aGlzIGltYWdlIGZvcm1hdFxuIiBpZiAkdm9sbmFtZSAhfgo+ID4gbS9cLihxY293 MnxxZWQpJC87Cj4gPiArwqDCoMKgIGRpZSAiY2FuJ3Qgcm9sbGJhY2sgc25hcHNob3QgdGhpcyBp bWFnZSBmb3JtYXRcbiIgaWYgJHZvbG5hbWUgIX4KPiA+IG0vXC4ocmF3fHFjb3cyfHFlZCkkLzsK PiA+IMKgCj4gPiAtwqDCoMKgIG15ICRwYXRoID0gJGNsYXNzLT5maWxlc3lzdGVtX3BhdGgoJHNj ZmcsICR2b2xuYW1lKTsKPiA+ICvCoMKgwqAgZGllICJleHRlcm5hbCBzbmFwc2hvdCBuZWVkIHRv IGJlIGVuYWJsZWQgdG8gcm9sbGJhY2sgc25hcHNob3QKPiA+IC5yYXcgdm9sdW1lc1xuIiBpZiAk dm9sbmFtZSA9fiBtL1wuKHJhdykkLyAmJiAhJHNjZmctPntzbmFwZXh0fTsKPiA+IMKgCj4gPiAt wqDCoMKgIG15ICRjbWQgPSBbJy91c3IvYmluL3FlbXUtaW1nJywgJ3NuYXBzaG90JywnLWEnLCAk c25hcCwgJHBhdGhdOwo+ID4gK8KgwqDCoCBteSAkcGF0aCA9ICRjbGFzcy0+ZmlsZXN5c3RlbV9w YXRoKCRzY2ZnLCAkdm9sbmFtZSk7Cj4gPiDCoAo+ID4gLcKgwqDCoCBydW5fY29tbWFuZCgkY21k KTsKPiA+ICvCoMKgwqAgaWYgKCRzY2ZnLT57c25hcGV4dH0pIHsKPiA+ICsgI3NpbXBseSBkZWxl dGUgdGhlIGN1cnJlbnQgc25hcHNob3QgYW5kIHJlY3JlYXRlIGl0Cj4gPiArIG15ICRzbmFwcGF0 aCA9IGdldF9zbmFwX3BhdGgoJHBhdGgsICRzbmFwKTsKPiA+ICsgdW5saW5rKCRzbmFwcGF0aCk7 Cj4gPiArICRjbGFzcy0+dm9sdW1lX3NuYXBzaG90KCRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUs ICRzbmFwKTsKPiAKPiB0aGlzICpyZWFkcyogc28gd2VpcmQgOykgaXQgaXMgcmlnaHQgZ2l2ZW4g dGhlIGN1cnJlbnQgc2VtYW50aWNzCj4gKGN1cnJlbnQgc25hcHNob3QgPT0gbGl2ZSBpbWFnZSwg c25hcHNob3QgZGF0YSBhY3R1YWxseSBzdG9yZWQgaW4KPiBwYXJlbnQgc25hcHNob3QpCj4gCj4g PiArwqDCoMKgIH0gZWxzZSB7Cj4gPiArIG15ICRjbWQgPSBbJy91c3IvYmluL3FlbXUtaW1nJywg J3NuYXBzaG90JywnLWEnLCAkc25hcCwgJHBhdGhdOwo+ID4gKyBydW5fY29tbWFuZCgkY21kKTsK PiA+ICvCoMKgwqAgfQo+ID4gwqAKPiA+IMKgwqDCoMKgIHJldHVybiB1bmRlZjsKPiA+IMKgfQo+ ID4gQEAgLTExMTEsMTcgKzExNjMsNTAgQEAgc3ViIHZvbHVtZV9zbmFwc2hvdF9yb2xsYmFjayB7 Cj4gPiDCoHN1YiB2b2x1bWVfc25hcHNob3RfZGVsZXRlIHsKPiA+IMKgwqDCoMKgIG15ICgkY2xh c3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsICRzbmFwLCAkcnVubmluZykgPSBAXzsKPiA+ IMKgCj4gPiAtwqDCoMKgIGRpZSAiY2FuJ3QgZGVsZXRlIHNuYXBzaG90IGZvciB0aGlzIGltYWdl IGZvcm1hdFxuIiBpZiAkdm9sbmFtZQo+ID4gIX4gbS9cLihxY293MnxxZWQpJC87Cj4gPiArwqDC oMKgIGRpZSAiY2FuJ3QgZGVsZXRlIHNuYXBzaG90IGZvciB0aGlzIGltYWdlIGZvcm1hdFxuIiBp ZiAkdm9sbmFtZQo+ID4gIX4gbS9cLihyYXd8cWNvdzJ8cWVkKSQvOwo+ID4gKwo+ID4gK8KgwqDC oCBkaWUgImV4dGVybmFsIHNuYXBzaG90IG5lZWQgdG8gYmUgZW5hYmxlZCB0byBkZWxldGUgc25h cHNob3Qgb2YKPiA+IC5yYXcgdm9sdW1lc1xuIiBpZiAhJHNjZmctPntzbmFwZXh0fTsKPiA+IMKg Cj4gPiDCoMKgwqDCoCByZXR1cm4gMSBpZiAkcnVubmluZzsKPiA+IMKgCj4gPiAtwqDCoMKgIG15 ICRwYXRoID0gJGNsYXNzLT5maWxlc3lzdGVtX3BhdGgoJHNjZmcsICR2b2xuYW1lKTsKPiA+ICvC oMKgwqAgbXkgJGNtZCA9ICIiOwo+ID4gK8KgwqDCoCBpZiAoJHNjZmctPntzbmFwZXh0fSkgewo+ ID4gKwo+ID4gKyBteSAkc25hcHNob3RzID0gJGNsYXNzLT52b2x1bWVfc25hcHNob3RfaW5mbygk c2NmZywgJHN0b3JlaWQsCj4gPiAkdm9sbmFtZSk7Cj4gPiArIG15ICRzbmFwcGF0aCA9ICRzbmFw c2hvdHMtPnskc25hcH0tPntmaWxlfTsKPiA+ICsgcmV0dXJuIGlmICEtZSAkc25hcHBhdGg7wqAg I2FscmVhZHkgZGVsZXRlZCA/Cj4gPiArCj4gPiArIG15ICRwYXJlbnRzbmFwID0gJHNuYXBzaG90 cy0+eyRzbmFwfS0+e3BhcmVudH07Cj4gPiArIG15ICRjaGlsZHNuYXAgPSAkc25hcHNob3RzLT57 JHNuYXB9LT57Y2hpbGR9Owo+ID4gK8KgwqDCoMKgwqDCoMKgIGRpZSAiZXJyb3I6IGNhbid0IGZp bmQgYSBwYXJlbnQgZm9yIHRoaXMgc25hcHNob3QiIGlmCj4gPiAhJHBhcmVudHNuYXA7Cj4gPiDC oAo+ID4gLcKgwqDCoCAkY2xhc3MtPmRlYWN0aXZhdGVfdm9sdW1lKCRzdG9yZWlkLCAkc2NmZywg JHZvbG5hbWUsICRzbmFwLCB7fSk7Cj4gPiArIG15ICRwYXJlbnRwYXRoID0gJHNuYXBzaG90cy0+ eyRwYXJlbnRzbmFwfS0+e2ZpbGV9Owo+ID4gKyBteSAkcGFyZW50Zm9ybWF0ID0gJHNuYXBzaG90 cy0+eyRwYXJlbnRzbmFwfS0+eydmb3JtYXQnfSBpZgo+ID4gJHBhcmVudHNuYXA7Cj4gPiArIG15 ICRjaGlsZHBhdGggPSAkc25hcHNob3RzLT57JGNoaWxkc25hcH0tPntmaWxlfSBpZiAkY2hpbGRz bmFwOwo+ID4gKyBteSAkY2hpbGRmb3JtYXQgPSAkc25hcHNob3RzLT57JGNoaWxkc25hcH0tPnsn Zm9ybWF0J30gaWYKPiA+ICRjaGlsZHNuYXA7Cj4gPiDCoAo+ID4gLcKgwqDCoCBteSAkY21kID0g WycvdXNyL2Jpbi9xZW11LWltZycsICdzbmFwc2hvdCcsJy1kJywgJHNuYXAsICRwYXRoXTsKPiA+ ICsgcHJpbnQgIm1lcmdlIHNuYXBzaG90ICRzbmFwIHRvICRwYXJlbnRzbmFwXG4iOwo+ID4gKyAk Y21kID0gWycvdXNyL2Jpbi9xZW11LWltZycsICdjb21taXQnLCAkc25hcHBhdGhdOwo+ID4gKyBy dW5fY29tbWFuZCgkY21kKTsKPiA+ICsKPiA+ICsgI2lmIHdlIGRlbGV0ZSBhbiBpbnRlcm1lZGlh dGUgc25hcHNob3QsIHdlIG5lZWQgdG8gbGluayB1cHBlcgo+ID4gc25hcHNob3QgdG8gYmFzZSBz bmFwc2hvdAo+ID4gKyBpZigkY2hpbGRwYXRoICYmIC1lICRjaGlsZHBhdGgpIHsKPiA+ICsgwqDC oMKgIGRpZSAibWlzc2luZyBwYXJlbnRzbmFwIHNuYXBzaG90IHRvIHJlYmFzZSBjaGlsZCAkY2hp bGRwYXRoXG4iCj4gPiBpZiAhJHBhcmVudHBhdGg7Cj4gPiArIMKgwqDCoCBwcmludCAibGluayAk Y2hpbGRzbmFwIHRvICRwYXJlbnRzbmFwXG4iOwo+ID4gKyDCoMKgwqAgJGNtZCA9IFsnL3Vzci9i aW4vcWVtdS1pbWcnLCAncmViYXNlJywgJy11JywgJy1iJywgJHBhcmVudHBhdGgsCj4gPiAnLUYn LCAkcGFyZW50Zm9ybWF0LCAnLWYnLCAkY2hpbGRmb3JtYXQsICRjaGlsZHBhdGhdOwo+ID4gKyDC oMKgwqAgcnVuX2NvbW1hbmQoJGNtZCk7Cj4gPiArIH0KPiAKPiA+PndvdWxkbid0IGEgcmVndWxh ciBzYWZlIHJlYmFzZSB3b3JrIGp1c3QgYXMgd2VsbCwgaW5zdGVhZCBvZiBjb21taXQgKwo+ID4+ dW5zYWZlIHJlYmFzZT8gaWYgdGhlcmUgaXMgbm8gcGFyZW50LCBwYXNzaW5nIGluICIiIGFzICJu ZXciIGJhY2tpbmcKPiA+PmZpbGUgc2hvdWxkIHdvcmsuLgo+IAo+IEknbGwgdGVzdCBpdCwgYnV0 IEknbSBwcmV0dHkgc3VyZSB0aGlzIGlzIHRoZSBjb3JyZWN0IHdheS4KPiAKPiA+ICsKPiA+ICsg I2RlbGV0ZSB0aGUgc25hcHNob3QKPiA+ICsgdW5saW5rKCRzbmFwcGF0aCk7Cj4gPiArwqDCoMKg IH0gZWxzZSB7Cj4gPiArIG15ICRwYXRoID0gJGNsYXNzLT5maWxlc3lzdGVtX3BhdGgoJHNjZmcs ICR2b2xuYW1lKTsKPiA+IMKgCj4gPiAtwqDCoMKgIHJ1bl9jb21tYW5kKCRjbWQpOwo+ID4gKyAk Y2xhc3MtPmRlYWN0aXZhdGVfdm9sdW1lKCRzdG9yZWlkLCAkc2NmZywgJHZvbG5hbWUsICRzbmFw LCB7fSk7Cj4gPiArCj4gPiArICRjbWQgPSBbJy91c3IvYmluL3FlbXUtaW1nJywgJ3NuYXBzaG90 JywnLWQnLCAkc25hcCwgJHBhdGhdOwo+ID4gKyBydW5fY29tbWFuZCgkY21kKTsKPiA+ICvCoMKg wqAgfQo+ID4gwqAKPiA+IMKgwqDCoMKgIHJldHVybiB1bmRlZjsKPiA+IMKgfQo+ID4gQEAgLTEx NDAsMTAgKzEyMjUsNiBAQCBzdWIgdm9sdW1lX2hhc19mZWF0dXJlIHsKPiA+IMKgwqDCoMKgIG15 ICgkY2xhc3MsICRzY2ZnLCAkZmVhdHVyZSwgJHN0b3JlaWQsICR2b2xuYW1lLCAkc25hcG5hbWUs Cj4gPiAkcnVubmluZywgJG9wdHMpID0gQF87Cj4gPiDCoAo+ID4gwqDCoMKgwqAgbXkgJGZlYXR1 cmVzID0gewo+ID4gLSBzbmFwc2hvdCA9PiB7Cj4gPiAtIMKgwqDCoCBjdXJyZW50ID0+IHsgcWNv dzIgPT4gMSB9LAo+ID4gLSDCoMKgwqAgc25hcCA9PiB7IHFjb3cyID0+IDEgfSwKPiA+IC0gfSwK PiA+IMKgIGNsb25lID0+IHsKPiA+IMKgIMKgwqDCoCBiYXNlID0+IHsgcWNvdzIgPT4gMSwgcmF3 ID0+IDEsIHZtZGsgPT4gMSB9LAo+ID4gwqAgfSwKPiA+IEBAIC0xMTU5LDExICsxMjQwLDIzIEBA IHN1YiB2b2x1bWVfaGFzX2ZlYXR1cmUgewo+ID4gwqAgwqDCoMKgIGJhc2UgPT4geyBxY293MiA9 PiAxLCByYXcgPT4gMSwgdm1kayA9PiAxIH0sCj4gPiDCoCDCoMKgwqAgY3VycmVudCA9PiB7IHFj b3cyID0+IDEsIHJhdyA9PiAxLCB2bWRrID0+IDEgfSwKPiA+IMKgIH0sCj4gPiAtIHJlbmFtZSA9 PiB7Cj4gPiAtIMKgwqDCoCBjdXJyZW50ID0+IHtxY293MiA9PiAxLCByYXcgPT4gMSwgdm1kayA9 PiAxfSwKPiA+IC0gfSwKPiA+ICsgJ3JlbmFtZScgPT4gewo+ID4gKyDCoMKgwqAgY3VycmVudCA9 PiB7IHFjb3cyID0+IDEsIHJhdyA9PiAxLCB2bWRrID0+IDF9LAo+ID4gKyB9Cj4gPiDCoMKgwqDC oCB9Owo+ID4gwqAKPiA+ICvCoMKgwqAgaWYgKCRzY2ZnLT57c25hcGV4dH0pIHsKPiA+ICsgJGZl YXR1cmVzLT57c25hcHNob3R9ID0gewo+ID4gKyBjdXJyZW50ID0+IHsgcmF3ID0+IDEsIHFjb3cy ID0+IDEgfSwKPiA+ICsgc25hcCA9PiB7IHJhdyA9PiAxLCBxY293MiA9PiAxIH0sCj4gPiArIH0K PiA+ICvCoMKgwqAgfSBlbHNlIHsKPiA+ICsgJGZlYXR1cmVzLT57c25hcHNob3R9ID0gewo+ID4g KyBjdXJyZW50ID0+IHsgcWNvdzIgPT4gMSB9LAo+ID4gKyBzbmFwID0+IHsgcWNvdzIgPT4gMSB9 LAo+ID4gKyB9Owo+ID4gK8KgwqDCoCB9Cj4gPiArCj4gCj4gPj50aGlzIGNvdWxkIGp1c3QgbGVh dmUgJGZlYXR1cmVzIGFzIGl0IGlzLCBhbmQgYWRkIHRoZSAicmF3IiBiaXRzOgo+ID4+Cj4gPj5p ZiAoJHNjZmctPntzbmFwZXh0fSkgewo+ID4+wqDCoMKgICRmZWF0dXJlcy0+e3NuYXBzaG90fS0+ e2N1cnJlbnR9LT57cmF3fSA9IDE7Cj4gPj7CoMKgwqAgJGZlYXR1cmVzLT57c25hcHNob3R9LT57 c25hcH0tPntyYXd9ID0gMTsKPiA+Pn0KPiAKPiBvayAhCj4gPiDCoMKgwqDCoCBpZiAoJGZlYXR1 cmUgZXEgJ2Nsb25lJykgewo+ID4gwqAgaWYgKAo+ID4gwqAgwqDCoMKgIGRlZmluZWQoJG9wdHMt Pnt2YWxpZF90YXJnZXRfZm9ybWF0c30pCj4gPiBAQCAtMTIyMiw3ICsxMzE1LDkgQEAgc3ViIGxp c3RfaW1hZ2VzIHsKPiA+IMKgIH0KPiA+IMKgCj4gPiDCoCBpZiAoJHZvbGxpc3QpIHsKPiA+IC0g wqDCoMKgIG15ICRmb3VuZCA9IGdyZXAgeyAkXyBlcSAkdm9saWQgfSBAJHZvbGxpc3Q7Cj4gPiAr IMKgwqDCoCBteSAkc2VhcmNoX3ZvbGlkID0gJHZvbGlkOwo+ID4gKyDCoMKgwqAgJHNlYXJjaF92 b2xpZCA9fiBzLy1zbmFwLS4qXC4vXC4vOwo+ID4gKyDCoMKgwqAgbXkgJGZvdW5kID0gZ3JlcCB7 ICRfIGVxICRzZWFyY2hfdm9saWQgfSBAJHZvbGxpc3Q7Cj4gPiDCoCDCoMKgwqAgbmV4dCBpZiAh JGZvdW5kOwo+ID4gwqAgfQo+ID4gwqAKPiA+IEBAIC0xMzgwLDcgKzE0NzUsNTMgQEAgc3ViIHN0 YXR1cyB7Cj4gPiDCoHN1YiB2b2x1bWVfc25hcHNob3RfaW5mbyB7Cj4gPiDCoMKgwqDCoCBteSAo JGNsYXNzLCAkc2NmZywgJHN0b3JlaWQsICR2b2xuYW1lKSA9IEBfOwo+ID4gwqAKPiA+IC3CoMKg wqAgZGllICJ2b2x1bWVfc25hcHNob3RfaW5mbyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yICRjbGFz cyI7Cj4gPiArwqDCoMKgIGRpZSAidm9sdW1lX3NuYXBzaG90X2luZm8gaXMgbm90IGltcGxlbWVu dGVkIGZvciAkY2xhc3MiIGlmCj4gPiAhJHNjZmctPntzbmFwZXh0fTsKPiA+ICsKPiA+ICvCoMKg wqAgbXkgJHBhdGggPSAkY2xhc3MtPmZpbGVzeXN0ZW1fcGF0aCgkc2NmZywgJHZvbG5hbWUpOwo+ ID4gKwo+ID4gK8KgwqDCoCBteSAoJHZ0eXBlLCAkbmFtZSwgJHZtaWQsICRiYXNlbmFtZSwgJGJh c2V2bWlkLCAkaXNCYXNlLAo+ID4gJGZvcm1hdCkgPSAkY2xhc3MtPnBhcnNlX3ZvbG5hbWUoJHZv bG5hbWUpOwo+ID4gKwo+ID4gK8KgwqDCoCBteSAkYmFzZXZvbG5hbWUgPSAkdm9sbmFtZTsKPiA+ ICvCoMKgwqAgJGJhc2V2b2xuYW1lID1+IHMvXC4ocmF3fHFjb3cyKSQvLzsKPiA+ICsKPiA+ICvC oMKgwqAgbXkgJHNuYXBzaG90cyA9ICRjbGFzcy0+bGlzdF9pbWFnZXMoJHN0b3JlaWQsICRzY2Zn LCAkdm1pZCk7Cj4gPiArwqDCoMKgIG15ICRpbmZvID0ge307Cj4gPiArwqDCoMKgIGZvciBteSAk c25hcCAoQCRzbmFwc2hvdHMpIHsKPiA+ICsKPiA+ICsgbXkgJHZvbGlkID0gJHNuYXAtPnt2b2xp ZH07Cj4gPiArIG5leHQgaWYgKCR2b2xpZCAhfiBtLyRiYXNldm9sbmFtZS8pOwo+IAo+ID4+dGhp cyByZWdleCBpcyBicm9rZW4gdy5yLnQuIHBhcnRpYWwgbWF0Y2hpbmchCj4gPj4KPiA+PmUuZy4s IGlmIGEgVk0gaGFzIGJvdGggYSBkaXNrIC0xLnFjb3cyIGFuZCAtMTEucWNvdzIgYW5kIEkgYXR0 ZW1wdCB0bwo+ID4+c25hcHNob3QgaXQgdXNpbmcgZXh0ZXJuYWwgc25hcHNob3RzOgo+IG9rICEK PiAKPiAKPiBzbmFwc2hvdHRpbmcgJ2RyaXZlLXNjc2kwJyAoZXh0c25hcDoxMzEzMTQvdm0tMTMx MzE0LWRpc2stMC5yYXcpCj4gRm9ybWF0dGluZyAnL21udC9wdmUvZXh0NC9leHRzbmFwL2ltYWdl cy8xMzEzMTQvdm0tMTMxMzE0LWRpc2stMC1zbmFwLQo+IHRlc3QyLnFjb3cyJywgZm10PXFjb3cy IGNsdXN0ZXJfc2l6ZT02NTUzNiBleHRlbmRlZF9sMj1vbgo+IHByZWFsbG9jYXRpb249b2ZmIGNv bXByZXNzaW9uX3R5cGU9emxpYiBzaXplPTIwMDcwNAo+IGJhY2tpbmdfZmlsZT0vbW50L3B2ZS9l eHQ0L2V4dHNuYXAvaW1hZ2VzLzEzMTMxNC92bS0xMzEzMTQtZGlzay0wLXNuYXAtCj4gdGVzdC5x Y293MiBiYWNraW5nX2ZtdD1yYXcgbGF6eV9yZWZjb3VudHM9b2ZmIHJlZmNvdW50X2JpdHM9MTYK PiBzbmFwc2hvdHRpbmcgJ2RyaXZlLXNjc2kxJyAoZXh0c25hcDoxMzEzMTQvdm0tMTMxMzE0LWRp c2stMS5xY293MikKPiBGb3JtYXR0aW5nICcvbW50L3B2ZS9leHQ0L2V4dHNuYXAvaW1hZ2VzLzEz MTMxNC92bS0xMzEzMTQtZGlzay0xMS1zbmFwLQo+IHRlc3QyLnFjb3cyJywgZm10PXFjb3cyIGNs dXN0ZXJfc2l6ZT02NTUzNiBleHRlbmRlZF9sMj1vbgo+IHByZWFsbG9jYXRpb249b2ZmIGNvbXBy ZXNzaW9uX3R5cGU9emxpYiBzaXplPTIxNDc0ODM2NDgKPiBiYWNraW5nX2ZpbGU9L21udC9wdmUv ZXh0NC9leHRzbmFwL2ltYWdlcy8xMzEzMTQvdm0tMTMxMzE0LWRpc2stCj4gMTEucWNvdzIgYmFj a2luZ19mbXQ9cWNvdzIgbGF6eV9yZWZjb3VudHM9b2ZmIHJlZmNvdW50X2JpdHM9MTYKPiBzbmFw c2hvdHRpbmcgJ2RyaXZlLXNjc2kyJyAoZXh0c25hcDoxMzEzMTQvdm0tMTMxMzE0LWRpc2stMTEu cWNvdzIpCj4gcWVtdS1pbWc6IC9tbnQvcHZlL2V4dDQvZXh0c25hcC9pbWFnZXMvMTMxMzE0L3Zt LTEzMTMxNC1kaXNrLTExLXNuYXAtCj4gdGVzdDIucWNvdzI6IEVycm9yOiBUcnlpbmcgdG8gY3Jl YXRlIGFuIGltYWdlIHdpdGggdGhlIHNhbWUgZmlsZW5hbWUgYXMKPiB0aGUgYmFja2luZyBmaWxl Cj4gc25hcHNob3QgY3JlYXRlIGZhaWxlZDogc3RhcnRpbmcgY2xlYW51cAo+IG1lcmdlIHNuYXBz aG90IHRlc3QyIHRvIHRlc3QKPiBJbWFnZSBjb21taXR0ZWQuCj4gbWVyZ2Ugc25hcHNob3QgdGVz dDIgdG8gYmFzZQo+IEltYWdlIGNvbW1pdHRlZC4KPiBUQVNLIEVSUk9SOiBjb21tYW5kICcvdXNy L2Jpbi9xZW11LWltZyBjcmVhdGUgLWIKPiAvbW50L3B2ZS9leHQ0L2V4dHNuYXAvaW1hZ2VzLzEz MTMxNC92bS0xMzEzMTQtZGlzay0xMS1zbmFwLXRlc3QyLnFjb3cyCj4gLUYgcWNvdzIgLWYgcWNv dzIgL21udC9wdmUvZXh0NC9leHRzbmFwL2ltYWdlcy8xMzEzMTQvdm0tMTMxMzE0LWRpc2stCj4g MTEtc25hcC10ZXN0Mi5xY293MiAtbyAnZXh0ZW5kZWRfbDI9b24scHJlYWxsb2NhdGlvbj1vZmYn JyBmYWlsZWQ6IGV4aXQKPiBjb2RlIDEgCj4gCj4gPiArCj4gPiArIG15ICh1bmRlZiwgJHNuYXB2 b2xuYW1lKSA9IHBhcnNlX3ZvbHVtZV9pZCgkdm9saWQpOwo+ID4gKyBteSAkc25hcG5hbWUgPSBn ZXRfc25hcG5hbWVfZnJvbV9wYXRoKCR2b2xpZCk7Cj4gPiArIG15ICRzbmFwZmlsZSA9ICRjbGFz cy0+ZmlsZXN5c3RlbV9wYXRoKCRzY2ZnLCAkc25hcHZvbG5hbWUsCj4gPiAkc25hcG5hbWUpOwo+ ID4gKyAkc25hcG5hbWUgPSAnYmFzZScgaWYgISRzbmFwbmFtZTsKPiA+ICsKPiA+ICsgbXkgJGZv cm1hdCA9ICRzbmFwLT57J2Zvcm1hdCd9Owo+ID4gKyBteSAkcGFyZW50ZmlsZSA9ICRzbmFwLT57 cGFyZW50fTsKPiA+ICsgbXkgJHBhcmVudG5hbWUgPSBnZXRfc25hcG5hbWVfZnJvbV9wYXRoKCRw YXJlbnRmaWxlKSBpZgo+ID4gJHBhcmVudGZpbGU7Cj4gPiArICRwYXJlbnRuYW1lID0gJ2Jhc2Un IGlmICEkcGFyZW50bmFtZSAmJiAkcGFyZW50ZmlsZTsKPiA+ICsKPiA+ICsgJGluZm8tPnskc25h cG5hbWV9LT57ZmlsZX0gPSAkc25hcGZpbGU7Cj4gPiArICRpbmZvLT57JHNuYXBuYW1lfS0+e3Zv bGlkfSA9ICR2b2xpZDsKPiA+ICsgJGluZm8tPnskc25hcG5hbWV9LT57J2Zvcm1hdCd9ID0gJGZv cm1hdDsKPiA+ICsgJGluZm8tPnskc25hcG5hbWV9LT57cGFyZW50fSA9ICRwYXJlbnRuYW1lIGlm ICRwYXJlbnRuYW1lOwo+ID4gKyAkaW5mby0+eyRwYXJlbnRuYW1lfS0+e2NoaWxkfSA9ICRzbmFw bmFtZSBpZiAkcGFyZW50bmFtZTsKPiA+ICvCoMKgwqAgfQo+ID4gKwo+ID4gK8KgwqDCoCBteSAk Y3VycmVudCA9IHVuZGVmOwo+ID4gK8KgwqDCoCBmb3IgbXkgJGlkIChrZXlzICUkaW5mbykgewo+ ID4gKyBteSAkc25hcCA9ICRpbmZvLT57JGlkfTsKPiA+ICsgZGllICJlcnJvcjogc25hcCAkaWQ6 IHlvdSBjYW4ndCBoYXZlIG11bHRpcGxlIGN1cnJlbnQgc25hcHNob3Q6wqAKPiA+IGN1cnJlbnQ6 JGN1cnJlbnRcbiIgaWYgISRzbmFwLT57Y2hpbGR9ICYmICRjdXJyZW50Owo+ID4gKyAkY3VycmVu dCA9ICRpZCBpZiAhJHNuYXAtPntjaGlsZH07Cj4gPiArwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKg wqAgaWYgKCRjdXJyZW50KSB7Cj4gPiArICRpbmZvLT57Y3VycmVudH0tPntmaWxlfSA9ICRpbmZv LT57JGN1cnJlbnR9LT57ZmlsZX07Cj4gPiArICRpbmZvLT57Y3VycmVudH0tPnsnZm9ybWF0J30g PSAkaW5mby0+eyRjdXJyZW50fS0+eydmb3JtYXQnfTsKPiA+ICsgJGluZm8tPntjdXJyZW50fS0+ e3BhcmVudH0gPSAkaW5mby0+eyRjdXJyZW50fS0+e3BhcmVudH07Cj4gPiArwqDCoMKgIH0KPiA+ ICsKPiA+ICvCoMKgwqAgcmV0dXJuICRpbmZvOwo+ID4gwqB9Cj4gPiDCoAo+ID4gwqBzdWIgYWN0 aXZhdGVfc3RvcmFnZSB7Cj4gPiBAQCAtMTc2NCw0ICsxOTA1LDM4IEBAIHN1YiBjb25maWdfYXdh cmVfYmFzZV9ta2RpciB7Cj4gPiDCoMKgwqDCoCB9Cj4gPiDCoH0KPiA+IMKgCj4gPiArc3ViIGdl dF9zbmFwX3BhdGggewo+ID4gK8KgwqDCoCBteSAoJHBhdGgsICRzbmFwKSA9IEBfOwo+ID4gKwo+ ID4gK8KgwqDCoCBteSAkYmFzZXBhdGggPSAiIjsKPiA+ICvCoMKgwqAgbXkgJGJhc2Vmb3JtYXQg PSAiIjsKPiA+ICvCoMKgwqAgaWYgKCRwYXRoID1+IG0vXigoLiopKHZtLShcZCspLWRpc2stKFxk KykpKSgtc25hcC0KPiA+ICguKikpP1wuKHJhd3xxY293MikvKSB7Cj4gCj4gPj50aGlzIHJlZ2V4 IGlzIHdyb25nIC0gdm9sdW1lcyBjYW4gaGF2ZSBhcmJpdHJhcnkgbmFtZXMgYWZ0ZXIgdGhlIC0K PiA+PmRpc2stIHBhcnQuLgo+IAo+IGFoIHNvcnJ5LiBkbyB5b3UgaGF2ZSBzb21lIGV4YW1wbGUg d2hlcmUgaXQncyB1c2VkID8gKG1heWJlIGZvciBlZmkgb3IKPiBvdGhlciBzcGVjaWZpYyBkaXNr ID8pCgpubywgYW55IHZkaXNrIGNhbiBoYXZlIChhbG1vc3QpIGFueXRoaW5nIGFmdGVyIHRoZSAt ZGlzay0gcGFydC4geW91IGNhbiBhbGxvY2F0ZSBzdWNoIHZvbHVtZXMgdXNpbmcgYHB2ZXNtIGFs bG9jYCBvciB0aGUgQVBJICh3ZSBqdXN0IGFyZSBub3QgdmVyeSBnb29kIGF0IGtlZXBpbmcgdGhv c2UgY3VzdG9tIHN1ZmZpeGVzIHdoZW4gbW92aW5nL21pZ3JhdGluZy8uLiA7KSkKCj4gPiArICRi YXNlcGF0aCA9ICQxOwo+ID4gKyAkYmFzZWZvcm1hdCA9ICQ4Owo+ID4gK8KgwqDCoCB9Cj4gPiAr wqDCoMKgIG15ICRmb3JtYXQgPSAkc25hcCA/ICdxY293MicgOiAkYmFzZWZvcm1hdDsKPiA+ICvC oMKgwqAgbXkgJHNuYXBwYXRoID0gJHNuYXAgPyAkYmFzZXBhdGguIi1zbmFwLSRzbmFwLiRmb3Jt YXQiIDogdW5kZWY7Cj4gPiArCj4gPiArwqDCoMKgIHJldHVybiAkc25hcHBhdGg7Cj4gPiArfQo+ ID4gKwo+ID4gK3N1YiBnZXRfc25hcG5hbWVfZnJvbV9wYXRoIHsKPiA+ICvCoMKgwqAgbXkgKCRw YXRoKSA9IEBfOwo+ID4gKwo+ID4gK8KgwqDCoCBpZiAoJHBhdGggPX4gbS9eKCguKikodm0tKFxk KyktZGlzay0oXGQrKSkpKC1zbmFwLQo+ID4gKC4qKSk/XC4ocmF3fHFjb3cyKS8pIHsKPiAKPiA+ PmhlcmUgYXMgd2VsbC4uIGFuZCB0aGlzIHdob2xlIGhlbHBlciBpcyBqdXN0IHVzZWQgdHdpY2Ug aW4KPiA+PnZvbHVtZV9zbmFwc2hvdF9pbmZvLCBtYXliZSBpdCBjb3VsZCBiZSBpbmxpbmVkIG9y IG1hZGUgcHJpdmF0ZSAKPiBvayAhCj4gCj4gCj4gPiArIG15ICRzbmFwbmFtZSA9ICQ3Owo+ID4g KyByZXR1cm4gJHNuYXBuYW1lOwo+ID4gK8KgwqDCoCB9Cj4gPiArwqDCoMKgIGRpZSAiY2FuJ3Qg cGFyc2Ugc25hcG5hbWUgZnJvbSBwYXRoIjsKPiA+ICt9Cj4gPiArCj4gPiArc3ViIGdldF9jdXJy ZW50X3NuYXBzaG90IHsKPiA+ICvCoMKgwqAgbXkgKCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAk dm9sbmFtZSkgPSBAXzsKPiA+ICvCoMKgwqAgI0lNUFJPVkUgTUU6IGZhc3RlciB3YXkgdG8gZmlu ZCBjdXJyZW50IHNuYXBzaG90PyAoc2VhcmNoIHRoZQo+ID4gbW9zdCByZWNlbnQgY3JlYXRlZCBz bmFwc2hvdCBmaWxlID8gbmVlZCB0byB3b3JrcyB3aXRoIGx2bSB2b2x1bWUKPiA+IHRvbykKPiA+ ICsKPiA+ICvCoMKgwqAgcmV0dXJuIGlmICEkc2NmZy0+e3NuYXBleHR9Owo+ID4gK8KgwqDCoCBt eSAkc25hcHNob3RzID0gJGNsYXNzLT52b2x1bWVfc25hcHNob3RfaW5mbygkc2NmZywgJHN0b3Jl aWQsCj4gPiAkdm9sbmFtZSk7Cj4gPiArwqDCoMKgIHJldHVybiAkc25hcHNob3RzLT57Y3VycmVu dH07Cj4gPiArfQo+ID4gKwo+ID4gwqAxOwo+ID4gLS0gCj4gPiAyLjM5LjIKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpwdmUtZGV2ZWwgbWFpbGluZyBs aXN0CnB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29t L2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wdmUtZGV2ZWwK