From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id B7A371FF141 for ; Fri, 16 Jan 2026 16:13:17 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B01031BDB8; Fri, 16 Jan 2026 16:13:22 +0100 (CET) Message-ID: <13d6a203-415d-45ff-b4bb-149903d08f94@proxmox.com> Date: Fri, 16 Jan 2026 16:13:17 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox Backup Server development discussion , =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= References: <20260102160750.285157-1-s.rufinatscha@proxmox.com> <20260102160750.285157-3-s.rufinatscha@proxmox.com> <1768385575.9kaf9dmuhn.astroid@yuna.none> Content-Language: en-US From: Samuel Rufinatscha In-Reply-To: <1768385575.9kaf9dmuhn.astroid@yuna.none> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.291 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_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes 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. [proxmox.com] Subject: Re: [pbs-devel] [PATCH proxmox-backup v3 2/4] pbs-config: cache verified API token secrets X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" T24gMS8xNC8yNiAxMTo0NCBBTSwgRmFiaWFuIEdyw7xuYmljaGxlciB3cm90ZToKPiBPbiBKYW51 YXJ5IDIsIDIwMjYgNTowNyBwbSwgU2FtdWVsIFJ1ZmluYXRzY2hhIHdyb3RlOgo+PiBDdXJyZW50 bHksIGV2ZXJ5IHRva2VuLWJhc2VkIEFQSSByZXF1ZXN0IHJlYWRzIHRoZSB0b2tlbi5zaGFkb3cg ZmlsZSBhbmQKPj4gcnVucyB0aGUgZXhwZW5zaXZlIHBhc3N3b3JkIGhhc2ggdmVyaWZpY2F0aW9u IGZvciB0aGUgZ2l2ZW4gdG9rZW4KPj4gc2VjcmV0LiBUaGlzIHNob3dzIHVwIGFzIGEgaG90c3Bv dCBpbiAvc3RhdHVzIHByb2ZpbGluZyAoc2VlCj4+IGJ1ZyAjNzAxNyBbMV0pLgo+Pgo+PiBUaGlz IHBhdGNoIGludHJvZHVjZXMgYW4gaW4tbWVtb3J5IGNhY2hlIG9mIHN1Y2Nlc3NmdWxseSB2ZXJp ZmllZCB0b2tlbgo+PiBzZWNyZXRzLiBTdWJzZXF1ZW50IHJlcXVlc3RzIGZvciB0aGUgc2FtZSB0 b2tlbitzZWNyZXQgY29tYmluYXRpb24gb25seQo+PiBwZXJmb3JtIGEgY29tcGFyaXNvbiB1c2lu ZyBvcGVuc3NsOjptZW1jbXA6OmVxIGFuZCBhdm9pZCByZS1ydW5uaW5nIHRoZQo+PiBwYXNzd29y ZCBoYXNoLiBUaGUgY2FjaGUgaXMgdXBkYXRlZCB3aGVuIGEgdG9rZW4gc2VjcmV0IGlzIHNldCBh bmQKPj4gY2xlYXJlZCB3aGVuIGEgdG9rZW4gaXMgZGVsZXRlZC4gTm90ZSwgdGhpcyBkb2VzIE5P VCBpbmNsdWRlIG1hbnVhbAo+PiBjb25maWcgY2hhbmdlcywgd2hpY2ggd2lsbCBiZSBjb3ZlcmVk IGluIGEgc3Vic2VxdWVudCBwYXRjaC4KPj4KPj4gVGhpcyBwYXRjaCBpcyBwYXJ0IG9mIHRoZSBz ZXJpZXMgd2hpY2ggZml4ZXMgYnVnICM3MDE3IFsxXS4KPj4KPj4gWzFdIGh0dHBzOi8vYnVnemls bGEucHJveG1veC5jb20vc2hvd19idWcuY2dpP2lkPTcwMTcKPj4KPj4gU2lnbmVkLW9mZi1ieTog U2FtdWVsIFJ1ZmluYXRzY2hhIDxzLnJ1ZmluYXRzY2hhQHByb3htb3guY29tPgo+PiAtLS0KPj4g Q2hhbmdlcyBmcm9tIHYxIHRvIHYyOgo+Pgo+PiAqIFJlcGxhY2UgT25jZUNlbGwgd2l0aCBMYXp5 TG9jaywgYW5kIHN0ZDo6c3luYzo6UndMb2NrIHdpdGgKPj4gcGFya2luZ19sb3Q6OlJ3TG9jay4K Pj4gKiBBZGQgQVBJX01VVEFUSU9OX0dFTkVSQVRJT04gYW5kIGd1YXJkIGNhY2hlIGluc2VydHMK Pj4gdG8gcHJldmVudCDigJx6b21iaWUgaW5zZXJ0c+KAnSBhY3Jvc3MgY29uY3VycmVudCBzZXQv ZGVsZXRlLgo+PiAqIFJlZmFjdG9yIGNhY2hlIG9wZXJhdGlvbnMgaW50byBjYWNoZV90cnlfc2Vj cmV0X21hdGNoZXMsCj4+IGNhY2hlX3RyeV9pbnNlcnRfc2VjcmV0LCBhbmQgY2VudHJhbGl6ZSB3 cml0ZS1zaWRlIGJlaGF2aW9yIGluCj4+IGFwcGx5X2FwaV9tdXRhdGlvbi4KPj4gKiBTd2l0Y2gg ZmFzdC1wYXRoIGNhY2hlIGFjY2VzcyB0byB0cnlfcmVhZC90cnlfd3JpdGUgKGJlc3QtZWZmb3J0 KS4KPj4KPj4gQ2hhbmdlcyBmcm9tIHYyIHRvIHYzOgo+Pgo+PiAqIFJlcGxhY2VkIHByb2Nlc3Mt bG9jYWwgY2FjaGUgaW52YWxpZGF0aW9uIChBdG9taWNVNjQKPj4gQVBJX01VVEFUSU9OX0dFTkVS QVRJT04pIHdpdGggYSBjcm9zcy1wcm9jZXNzIHNoYXJlZCBnZW5lcmF0aW9uIHZpYQo+PiBDb25m aWdWZXJzaW9uQ2FjaGUuCj4+ICogVmFsaWRhdGUgc2hhcmVkIGdlbmVyYXRpb24gYmVmb3JlL2Fm dGVyIHRoZSBjb25zdGFudC10aW1lIHNlY3JldAo+PiBjb21wYXJlOyBvbmx5IGluc2VydCBpbnRv IGNhY2hlIGlmIHRoZSBnZW5lcmF0aW9uIGlzIHVuY2hhbmdlZC4KPj4gKiBpbnZhbGlkYXRlX2Nh Y2hlX3N0YXRlKCkgb24gaW5zZXJ0IGlmIHNoYXJlZCBnZW5lcmF0aW9uIGNoYW5nZWQuCj4+Cj4+ ICAgQ2FyZ28udG9tbCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKPj4gICBwYnMtY29uZmln L0NhcmdvLnRvbWwgICAgICAgICAgfCAgIDEgKwo+PiAgIHBicy1jb25maWcvc3JjL3Rva2VuX3No YWRvdy5ycyB8IDE1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPj4gICAzIGZp bGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4+Cj4+IGRpZmYg LS1naXQgYS9DYXJnby50b21sIGIvQ2FyZ28udG9tbAo+PiBpbmRleCAxYWE1N2FlNS4uODIxYjYz YjcgMTAwNjQ0Cj4+IC0tLSBhL0NhcmdvLnRvbWwKPj4gKysrIGIvQ2FyZ28udG9tbAo+PiBAQCAt MTQzLDYgKzE0Myw3IEBAIG5vbSA9ICI3Igo+PiAgIG51bS10cmFpdHMgPSAiMC4yIgo+PiAgIG9u Y2VfY2VsbCA9ICIxLjMuMSIKPj4gICBvcGVuc3NsID0gIjAuMTAuNDAiCj4+ICtwYXJraW5nX2xv dCA9ICIwLjEyIgo+PiAgIHBlcmNlbnQtZW5jb2RpbmcgPSAiMi4xIgo+PiAgIHBpbi1wcm9qZWN0 LWxpdGUgPSAiMC4yIgo+PiAgIHJlZ2V4ID0gIjEuNS41Igo+PiBkaWZmIC0tZ2l0IGEvcGJzLWNv bmZpZy9DYXJnby50b21sIGIvcGJzLWNvbmZpZy9DYXJnby50b21sCj4+IGluZGV4IDc0YWZiM2M2 Li5lYjgxY2UwMCAxMDA2NDQKPj4gLS0tIGEvcGJzLWNvbmZpZy9DYXJnby50b21sCj4+ICsrKyBi L3Bicy1jb25maWcvQ2FyZ28udG9tbAo+PiBAQCAtMTMsNiArMTMsNyBAQCBsaWJjLndvcmtzcGFj ZSA9IHRydWUKPj4gICBuaXgud29ya3NwYWNlID0gdHJ1ZQo+PiAgIG9uY2VfY2VsbC53b3Jrc3Bh Y2UgPSB0cnVlCj4+ICAgb3BlbnNzbC53b3Jrc3BhY2UgPSB0cnVlCj4+ICtwYXJraW5nX2xvdC53 b3Jrc3BhY2UgPSB0cnVlCj4+ICAgcmVnZXgud29ya3NwYWNlID0gdHJ1ZQo+PiAgIHNlcmRlLndv cmtzcGFjZSA9IHRydWUKPj4gICBzZXJkZV9qc29uLndvcmtzcGFjZSA9IHRydWUKPj4gZGlmZiAt LWdpdCBhL3Bicy1jb25maWcvc3JjL3Rva2VuX3NoYWRvdy5ycyBiL3Bicy1jb25maWcvc3JjL3Rv a2VuX3NoYWRvdy5ycwo+PiBpbmRleCA2NDBmYWJiZi4uZmE4NGFlZTUgMTAwNjQ0Cj4+IC0tLSBh L3Bicy1jb25maWcvc3JjL3Rva2VuX3NoYWRvdy5ycwo+PiArKysgYi9wYnMtY29uZmlnL3NyYy90 b2tlbl9zaGFkb3cucnMKPj4gQEAgLTEsNiArMSw4IEBACj4+ICAgdXNlIHN0ZDo6Y29sbGVjdGlv bnM6Okhhc2hNYXA7Cj4+ICt1c2Ugc3RkOjpzeW5jOjpMYXp5TG9jazsKPj4gICAKPj4gICB1c2Ug YW55aG93Ojp7YmFpbCwgZm9ybWF0X2VyciwgRXJyb3J9Owo+PiArdXNlIHBhcmtpbmdfbG90OjpS d0xvY2s7Cj4+ICAgdXNlIHNlcmRlOjp7RGVzZXJpYWxpemUsIFNlcmlhbGl6ZX07Cj4+ICAgdXNl IHNlcmRlX2pzb246Ontmcm9tX3ZhbHVlLCBWYWx1ZX07Cj4+ICAgCj4+IEBAIC0xMyw2ICsxNSwx OCBAQCB1c2UgY3JhdGU6OntvcGVuX2JhY2t1cF9sb2NrZmlsZSwgQmFja3VwTG9ja0d1YXJkfTsK Pj4gICBjb25zdCBMT0NLX0ZJTEU6ICZzdHIgPSBwYnNfYnVpbGRjZmc6OmNvbmZpZ2RpciEoIi90 b2tlbi5zaGFkb3cubG9jayIpOwo+PiAgIGNvbnN0IENPTkZfRklMRTogJnN0ciA9IHBic19idWls ZGNmZzo6Y29uZmlnZGlyISgiL3Rva2VuLnNoYWRvdyIpOwo+PiAgIAo+PiArLy8vIEdsb2JhbCBp bi1tZW1vcnkgY2FjaGUgZm9yIHN1Y2Nlc3NmdWxseSB2ZXJpZmllZCBBUEkgdG9rZW4gc2VjcmV0 cy4KPj4gKy8vLyBUaGUgY2FjaGUgc3RvcmVzIHBsYWluIHRleHQgc2VjcmV0cyBmb3IgdG9rZW4g QXV0aGlkcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuCj4+ICsvLy8gdmVyaWZpZWQgYWdhaW5zdCB0 aGUgaGFzaGVkIHZhbHVlcyBpbiBgdG9rZW4uc2hhZG93YC4gVGhpcyBhbGxvd3MgZm9yIGNoZWFw Cj4+ICsvLy8gc3Vic2VxdWVudCBhdXRoZW50aWNhdGlvbnMgZm9yIHRoZSBzYW1lIHRva2VuK3Nl Y3JldCBjb21iaW5hdGlvbiwgYXZvaWRpbmcKPj4gKy8vLyByZWNvbXB1dGluZyB0aGUgcGFzc3dv cmQgaGFzaCBvbiBldmVyeSByZXF1ZXN0Lgo+PiArc3RhdGljIFRPS0VOX1NFQ1JFVF9DQUNIRTog TGF6eUxvY2s8UndMb2NrPEFwaVRva2VuU2VjcmV0Q2FjaGU+PiA9IExhenlMb2NrOjpuZXcofHwg ewo+PiArICAgIFJ3TG9jazo6bmV3KEFwaVRva2VuU2VjcmV0Q2FjaGUgewo+PiArICAgICAgICBz ZWNyZXRzOiBIYXNoTWFwOjpuZXcoKSwKPj4gKyAgICAgICAgc2hhcmVkX2dlbjogMCwKPj4gKyAg ICB9KQo+PiArfSk7Cj4+ICsKPj4gICAjW2Rlcml2ZShTZXJpYWxpemUsIERlc2VyaWFsaXplKV0K Pj4gICAjW3NlcmRlKHJlbmFtZV9hbGwgPSAia2ViYWItY2FzZSIpXQo+PiAgIC8vLyBBcGlUb2tl biBpZCAvIHNlY3JldCBwYWlyCj4+IEBAIC01NCw5ICs2OCwyNyBAQCBwdWIgZm4gdmVyaWZ5X3Nl Y3JldCh0b2tlbmlkOiAmQXV0aGlkLCBzZWNyZXQ6ICZzdHIpIC0+IFJlc3VsdDwoKSwgRXJyb3I+ IHsKPj4gICAgICAgICAgIGJhaWwhKCJub3QgYW4gQVBJIHRva2VuIElEIik7Cj4+ICAgICAgIH0K Pj4gICAKPj4gKyAgICAvLyBGYXN0IHBhdGgKPj4gKyAgICBpZiBjYWNoZV90cnlfc2VjcmV0X21h dGNoZXModG9rZW5pZCwgc2VjcmV0KSB7Cj4+ICsgICAgICAgIHJldHVybiBPaygoKSk7Cj4+ICsg ICAgfQo+PiArCj4+ICsgICAgLy8gU2xvdyBwYXRoCj4+ICsgICAgLy8gRmlyc3QsIGNhcHR1cmUg dGhlIHNoYXJlZCBnZW5lcmF0aW9uIGJlZm9yZSBkb2luZyB0aGUgaGFzaCB2ZXJpZmljYXRpb24u Cj4+ICsgICAgbGV0IGdlbl9iZWZvcmUgPSB0b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigpOwo+PiAr Cj4+ICAgICAgIGxldCBkYXRhID0gcmVhZF9maWxlKCk/Owo+PiAgICAgICBtYXRjaCBkYXRhLmdl dCh0b2tlbmlkKSB7Cj4+IC0gICAgICAgIFNvbWUoaGFzaGVkX3NlY3JldCkgPT4gcHJveG1veF9z eXM6OmNyeXB0Ojp2ZXJpZnlfY3J5cHRfcHcoc2VjcmV0LCBoYXNoZWRfc2VjcmV0KSwKPj4gKyAg ICAgICAgU29tZShoYXNoZWRfc2VjcmV0KSA9PiB7Cj4+ICsgICAgICAgICAgICBwcm94bW94X3N5 czo6Y3J5cHQ6OnZlcmlmeV9jcnlwdF9wdyhzZWNyZXQsIGhhc2hlZF9zZWNyZXQpPzsKPj4gKwo+ PiArICAgICAgICAgICAgLy8gVHJ5IHRvIGNhY2hlIG9ubHkgaWYgbm90aGluZyBjaGFuZ2VkIHdo aWxlIHZlcmlmeWluZyB0aGUgc2VjcmV0Lgo+PiArICAgICAgICAgICAgaWYgbGV0IFNvbWUoZ2Vu KSA9IGdlbl9iZWZvcmUgewo+PiArICAgICAgICAgICAgICAgIGNhY2hlX3RyeV9pbnNlcnRfc2Vj cmV0KHRva2VuaWQuY2xvbmUoKSwgc2VjcmV0LnRvX293bmVkKCksIGdlbik7Cj4+ICsgICAgICAg ICAgICB9Cj4+ICsKPj4gKyAgICAgICAgICAgIE9rKCgpKQo+PiArICAgICAgICB9Cj4+ICAgICAg ICAgICBOb25lID0+IGJhaWwhKCJpbnZhbGlkIEFQSSB0b2tlbiIpLAo+PiAgICAgICB9Cj4+ICAg fQo+PiBAQCAtODIsNiArMTE0LDggQEAgZm4gc2V0X3NlY3JldCh0b2tlbmlkOiAmQXV0aGlkLCBz ZWNyZXQ6ICZzdHIpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPj4gICAgICAgZGF0YS5pbnNlcnQo dG9rZW5pZC5jbG9uZSgpLCBoYXNoZWRfc2VjcmV0KTsKPj4gICAgICAgd3JpdGVfZmlsZShkYXRh KT87Cj4+ICAgCj4+ICsgICAgYXBwbHlfYXBpX211dGF0aW9uKHRva2VuaWQsIFNvbWUoc2VjcmV0 KSk7Cj4+ICsKPj4gICAgICAgT2soKCkpCj4+ICAgfQo+PiAgIAo+PiBAQCAtOTcsNSArMTMxLDEy NiBAQCBwdWIgZm4gZGVsZXRlX3NlY3JldCh0b2tlbmlkOiAmQXV0aGlkKSAtPiBSZXN1bHQ8KCks IEVycm9yPiB7Cj4+ICAgICAgIGRhdGEucmVtb3ZlKHRva2VuaWQpOwo+PiAgICAgICB3cml0ZV9m aWxlKGRhdGEpPzsKPj4gICAKPj4gKyAgICBhcHBseV9hcGlfbXV0YXRpb24odG9rZW5pZCwgTm9u ZSk7Cj4+ICsKPj4gICAgICAgT2soKCkpCj4+ICAgfQo+PiArCj4+ICtzdHJ1Y3QgQXBpVG9rZW5T ZWNyZXRDYWNoZSB7Cj4+ICsgICAgLy8vIEtleXMgYXJlIHRva2VuIEF1dGhpZHMsIHZhbHVlcyBh cmUgdGhlIGNvcnJlc3BvbmRpbmcgcGxhaW4gdGV4dCBzZWNyZXRzLgo+PiArICAgIC8vLyBFbnRy aWVzIGFyZSBhZGRlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgb24tZGlzayB2ZXJpZmljYXRpb24gaW4K Pj4gKyAgICAvLy8gYHZlcmlmeV9zZWNyZXRgIG9yIHdoZW4gYSBuZXcgdG9rZW4gc2VjcmV0IGlz IGdlbmVyYXRlZCBieQo+PiArICAgIC8vLyBgZ2VuZXJhdGVfYW5kX3NldF9zZWNyZXRgLiBVc2Vk IHRvIGF2b2lkIHJlcGVhdGVkCj4+ICsgICAgLy8vIHBhc3N3b3JkLWhhc2ggY29tcHV0YXRpb24g b24gc3Vic2VxdWVudCBhdXRoZW50aWNhdGlvbnMuCj4+ICsgICAgc2VjcmV0czogSGFzaE1hcDxB dXRoaWQsIENhY2hlZFNlY3JldD4sCj4+ICsgICAgLy8vIFNoYXJlZCBnZW5lcmF0aW9uIHRvIGRl dGVjdCBtdXRhdGlvbnMgb2YgdGhlIHVuZGVybHlpbmcgdG9rZW4uc2hhZG93IGZpbGUuCj4+ICsg ICAgc2hhcmVkX2dlbjogdXNpemUsCj4+ICt9Cj4+ICsKPj4gKy8vLyBDYWNoZWQgc2VjcmV0Lgo+ PiArc3RydWN0IENhY2hlZFNlY3JldCB7Cj4+ICsgICAgc2VjcmV0OiBTdHJpbmcsCj4+ICt9Cj4+ ICsKPj4gK2ZuIGNhY2hlX3RyeV9pbnNlcnRfc2VjcmV0KHRva2VuaWQ6IEF1dGhpZCwgc2VjcmV0 OiBTdHJpbmcsIHNoYXJlZF9nZW5fYmVmb3JlOiB1c2l6ZSkgewo+PiArICAgIGxldCBTb21lKG11 dCBjYWNoZSkgPSBUT0tFTl9TRUNSRVRfQ0FDSEUudHJ5X3dyaXRlKCkgZWxzZSB7Cj4+ICsgICAg ICAgIHJldHVybjsKPj4gKyAgICB9Owo+PiArCj4+ICsgICAgbGV0IFNvbWUoc2hhcmVkX2dlbl9u b3cpID0gdG9rZW5fc2hhZG93X3NoYXJlZF9nZW4oKSBlbHNlIHsKPj4gKyAgICAgICAgcmV0dXJu Owo+PiArICAgIH07Cj4+ICsKPj4gKyAgICAvLyBJZiB0aGlzIHByb2Nlc3MgbWlzc2VkIGEgZ2Vu ZXJhdGlvbiBidW1wLCBpdHMgY2FjaGUgaXMgc3RhbGUuCj4+ICsgICAgaWYgY2FjaGUuc2hhcmVk X2dlbiAhPSBzaGFyZWRfZ2VuX25vdyB7Cj4+ICsgICAgICAgIGludmFsaWRhdGVfY2FjaGVfc3Rh dGUoJm11dCBjYWNoZSk7Cj4+ICsgICAgICAgIGNhY2hlLnNoYXJlZF9nZW4gPSBzaGFyZWRfZ2Vu X25vdzsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvLyBJZiBhIG11dGF0aW9uIGhhcHBlbmVkIHdo aWxlIHdlIHdlcmUgdmVyaWZ5aW5nIHRoZSBzZWNyZXQsIGRvIG5vdCBpbnNlcnQuCj4+ICsgICAg aWYgc2hhcmVkX2dlbl9ub3cgPT0gc2hhcmVkX2dlbl9iZWZvcmUgewo+PiArICAgICAgICBjYWNo ZS5zZWNyZXRzLmluc2VydCh0b2tlbmlkLCBDYWNoZWRTZWNyZXQgeyBzZWNyZXQgfSk7Cj4+ICsg ICAgfQo+PiArfQo+PiArCj4+ICsvLyBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gdG9rZW4gc2Vj cmV0IGFnYWluc3QgdGhlIGNhY2hlZCBzZWNyZXQuCj4+ICsvLyBDaGVja3MgdGhlIGdlbmVyYXRp b24gYmVmb3JlIGFuZCBhZnRlciB0aGUgY29uc3RhbnQtdGltZSBjb21wYXJlIHRvIGF2b2lkIGEK Pj4gKy8vIFRPQ1RPVSB3aW5kb3cuIElmIGFub3RoZXIgcHJvY2VzcyByb3RhdGVzL2RlbGV0ZXMg YSB0b2tlbiB3aGlsZSB3ZSdyZSB2YWxpZGF0aW5nCj4+ICsvLyB0aGUgY2FjaGVkIHNlY3JldCwg dGhlIGdlbmVyYXRpb24gd2lsbCBjaGFuZ2UsIGFuZCB3ZQo+PiArLy8gbXVzdCBub3QgdHJ1c3Qg dGhlIGNhY2hlIGZvciB0aGlzIHJlcXVlc3QuCj4+ICtmbiBjYWNoZV90cnlfc2VjcmV0X21hdGNo ZXModG9rZW5pZDogJkF1dGhpZCwgc2VjcmV0OiAmc3RyKSAtPiBib29sIHsKPj4gKyAgICBsZXQg U29tZShjYWNoZSkgPSBUT0tFTl9TRUNSRVRfQ0FDSEUudHJ5X3JlYWQoKSBlbHNlIHsKPj4gKyAg ICAgICAgcmV0dXJuIGZhbHNlOwo+PiArICAgIH07Cj4+ICsgICAgbGV0IFNvbWUoZW50cnkpID0g Y2FjaGUuc2VjcmV0cy5nZXQodG9rZW5pZCkgZWxzZSB7Cj4+ICsgICAgICAgIHJldHVybiBmYWxz ZTsKPj4gKyAgICB9Owo+PiArCj4+ICsgICAgbGV0IGNhY2hlX2dlbiA9IGNhY2hlLnNoYXJlZF9n ZW47Cj4+ICsKPj4gKyAgICBsZXQgU29tZShnZW4xKSA9IHRva2VuX3NoYWRvd19zaGFyZWRfZ2Vu KCkgZWxzZSB7Cj4+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPj4gKyAgICB9Owo+PiArICAgIGlm IGdlbjEgIT0gY2FjaGVfZ2VuIHsKPj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+PiArICAgIH0K Pj4gKwo+PiArICAgIGxldCBlcSA9IG9wZW5zc2w6Om1lbWNtcDo6ZXEoZW50cnkuc2VjcmV0LmFz X2J5dGVzKCksIHNlY3JldC5hc19ieXRlcygpKTsKPiAKPiBzaG91bGQgd2UgaW52YWxpZGF0ZSB0 aGUgY2FjaGUgaGVyZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGF1dGhpZCBpbiBjYXNlCj4gb2YgYSBt aXNtYXRjaCwgdG8gYXZvaWQgbWFraW5nIGJydXRlIGZvcmNpbmcgdG9vIGVhc3kvY2hlYXA/Cj4K CldlIGFyZSBub3QgZG9pbmcgYSBjaGVhcCByZWplY3QsIGluIG1pc21hdGNoIHdlIGRvIHN0aWxs IGZhbGwgdGhyb3VnaCB0bwp2ZXJpZnlfY3J5cHRfcHcoKS4gRXZpY3Rpbmcgb24gbWlzbWF0Y2gg Y291bGQgaG93ZXZlciBlbmFibGUgY2FjaGUKdGhyYXNoaW5nIHdoZXJlIHdyb25nIHNlY3JldHMg Zm9yIGEga25vd24gdG9rZW5pZCB3b3VsZCBldmljdCBjYWNoZWQKZW50cmllcy4gU28gSSB0aGlu ayB3ZSBzaG91bGQgbm90IGludmFsaWRhdGUgaGVyZSBvbiBtaXNtYXRjaC4KCj4+ICsgICAgbGV0 IFNvbWUoZ2VuMikgPSB0b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigpIGVsc2Ugewo+PiArICAgICAg ICByZXR1cm4gZmFsc2U7Cj4+ICsgICAgfTsKPj4gKwo+PiArICAgIGVxICYmIGdlbjIgPT0gY2Fj aGVfZ2VuCj4+ICt9Cj4+ICsKPj4gK2ZuIGFwcGx5X2FwaV9tdXRhdGlvbih0b2tlbmlkOiAmQXV0 aGlkLCBuZXdfc2VjcmV0OiBPcHRpb248JnN0cj4pIHsKPj4gKyAgICAvLyBTaWduYWwgY2FjaGUg aW52YWxpZGF0aW9uIHRvIG90aGVyIHByb2Nlc3NlcyAoYmVzdC1lZmZvcnQpLgo+PiArICAgIGxl dCBuZXdfc2hhcmVkX2dlbiA9IGJ1bXBfdG9rZW5fc2hhZG93X3NoYXJlZF9nZW4oKTsKPj4gKwo+ PiArICAgIGxldCBtdXQgY2FjaGUgPSBUT0tFTl9TRUNSRVRfQ0FDSEUud3JpdGUoKTsKPj4gKwo+ PiArICAgIC8vIElmIHdlIGNhbm5vdCByZWFkL2J1bXAgdGhlIHNoYXJlZCBnZW5lcmF0aW9uLCB3 ZSBjYW5ub3Qgc2FmZWx5IHRydXN0IHRoZSBjYWNoZS4KPj4gKyAgICBsZXQgU29tZShnZW4pID0g bmV3X3NoYXJlZF9nZW4gZWxzZSB7Cj4+ICsgICAgICAgIGludmFsaWRhdGVfY2FjaGVfc3RhdGUo Jm11dCBjYWNoZSk7Cj4+ICsgICAgICAgIGNhY2hlLnNoYXJlZF9nZW4gPSAwOwo+PiArICAgICAg ICByZXR1cm47Cj4+ICsgICAgfTsKPj4gKwo+PiArICAgIC8vIFVwZGF0ZSB0byB0aGUgcG9zdC1t dXRhdGlvbiBnZW5lcmF0aW9uLgo+PiArICAgIGNhY2hlLnNoYXJlZF9nZW4gPSBnZW47Cj4+ICsK Pj4gKyAgICAvLyBBcHBseSB0aGUgbmV3IG11dGF0aW9uLgo+PiArICAgIG1hdGNoIG5ld19zZWNy ZXQgewo+PiArICAgICAgICBTb21lKHNlY3JldCkgPT4gewo+PiArICAgICAgICAgICAgY2FjaGUu c2VjcmV0cy5pbnNlcnQoCj4+ICsgICAgICAgICAgICAgICAgdG9rZW5pZC5jbG9uZSgpLAo+PiAr ICAgICAgICAgICAgICAgIENhY2hlZFNlY3JldCB7Cj4+ICsgICAgICAgICAgICAgICAgICAgIHNl Y3JldDogc2VjcmV0LnRvX293bmVkKCksCj4+ICsgICAgICAgICAgICAgICAgfSwKPj4gKyAgICAg ICAgICAgICk7Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgICAgTm9uZSA9PiB7Cj4+ICsgICAgICAg ICAgICBjYWNoZS5zZWNyZXRzLnJlbW92ZSh0b2tlbmlkKTsKPj4gKyAgICAgICAgfQo+PiArICAg IH0KPj4gK30KPj4gKwo+PiArLy8vIEdldCB0aGUgY3VycmVudCBzaGFyZWQgZ2VuZXJhdGlvbi4K Pj4gK2ZuIHRva2VuX3NoYWRvd19zaGFyZWRfZ2VuKCkgLT4gT3B0aW9uPHVzaXplPiB7Cj4+ICsg ICAgY3JhdGU6OkNvbmZpZ1ZlcnNpb25DYWNoZTo6bmV3KCkKPj4gKyAgICAgICAgLm9rKCkKPj4g KyAgICAgICAgLm1hcCh8Y3ZjfCBjdmMudG9rZW5fc2hhZG93X2dlbmVyYXRpb24oKSkKPj4gK30K Pj4gKwo+PiArLy8vIEJ1bXAgYW5kIHJldHVybiB0aGUgbmV3IHNoYXJlZCBnZW5lcmF0aW9uLgo+ PiArZm4gYnVtcF90b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigpIC0+IE9wdGlvbjx1c2l6ZT4gewo+ PiArICAgIGNyYXRlOjpDb25maWdWZXJzaW9uQ2FjaGU6Om5ldygpCj4+ICsgICAgICAgIC5vaygp Cj4+ICsgICAgICAgIC5tYXAofGN2Y3wgY3ZjLmluY3JlYXNlX3Rva2VuX3NoYWRvd19nZW5lcmF0 aW9uKCkgKyAxKQo+PiArfQo+PiArCj4+ICsvLy8gSW52YWxpZGF0ZXMgdGhlIGNhY2hlIHN0YXRl IGFuZCBvbmx5IGtlZXBzIHRoZSBzaGFyZWQgZ2VuZXJhdGlvbi4KPiAKPiBib3RoIGNhbGxzIHRv IHRoaXMgYWN0dWFsbHkgc2V0IHRoZSBjYWNoZWQgZ2VuZXJhdGlvbiB0byBzb21lIHZhbHVlCj4g cmlnaHQgYWZ0ZXIsIHNvIG1heWJlIHRoaXMgc2hvdWxkIHRha2UgYSBnZW5lcmF0aW9uIGRpcmVj dGx5IGFuZCBzZXQgaXQ/Cj4KCnBhdGNoIDMvNCBkb2VzbuKAmXQgYWx3YXlzIHVwZGF0ZSB0aGUg Z2VuIG9uIGNhY2hlIGludmFsaWRhdGlvbgooc2hhZG93X210aW1lX2xlbigpIGVycm9yIGJyYW5j aCBpbiBhcHBseV9hcGlfbXV0YXRpb24pIGJ1dCBtb3N0IG90aGVyCmNhbGwgc2l0ZXMgZG8uIEFn cmVlZCB0aGlzIGNhbiBiZSByZWZhY3RvcmVkLCBtYXliZToKCmZuIGludmFsaWRhdGVfY2FjaGVf c3RhdGUoY2FjaGU6ICZtdXQgQXBpVG9rZW5TZWNyZXRDYWNoZSkgewogICAgIGNhY2hlLnNlY3Jl dHMuY2xlYXIoKTsKICAgICAvLyBjbGVhciBvdGhlciBjYWNoZSBmaWVsZHMgKG10aW1lL2xlbi9s YXN0X2NoZWNrZWQpIGFzIG5lZWRlZAp9CgpmbiBpbnZhbGlkYXRlX2NhY2hlX3N0YXRlX2FuZF9z ZXRfZ2VuKGNhY2hlOiAmbXV0IEFwaVRva2VuU2VjcmV0Q2FjaGUsIApnZW46IHVzaXplKSB7CiAg ICAgaW52YWxpZGF0ZV9jYWNoZV9zdGF0ZShjYWNoZSk7CiAgICAgY2FjaGUuc2hhcmVkX2dlbiA9 IGdlbjsKfQoKV2UgY291bGQgYWxzbyBkbyBhIHNpbmdsZSBoZWxwZXIgd2l0aCBPcHRpb248dXNp emU+IGJ1dCB0d28gaGVscGVycyBtYWtlIAp0aGUgY2FsbCBzaXRlcyBtb3JlIGV4cGxpY2l0LgoK Pj4gK2ZuIGludmFsaWRhdGVfY2FjaGVfc3RhdGUoY2FjaGU6ICZtdXQgQXBpVG9rZW5TZWNyZXRD YWNoZSkgewo+PiArICAgIGNhY2hlLnNlY3JldHMuY2xlYXIoKTsKPj4gK30KPj4gLS0gCj4+IDIu NDcuMwo+Pgo+Pgo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwo+PiBwYnMtZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IHBicy1kZXZlbEBsaXN0cy5wcm94 bW94LmNvbQo+PiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0 aW5mby9wYnMtZGV2ZWwKPj4KPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+IHBicy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBwYnMtZGV2ZWxAbGlz dHMucHJveG1veC5jb20KPiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1h bi9saXN0aW5mby9wYnMtZGV2ZWwKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KcGJzLWRldmVsIG1haWxpbmcgbGlzdApwYnMtZGV2ZWxAbGlzdHMucHJv eG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGlu Zm8vcGJzLWRldmVsCg==