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 7C5EF1FF15E for ; Wed, 21 Jan 2026 16:14:10 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 7997A254D; Wed, 21 Jan 2026 16:14:23 +0100 (CET) From: Samuel Rufinatscha To: pbs-devel@lists.proxmox.com Date: Wed, 21 Jan 2026 16:14:02 +0100 Message-ID: <20260121151408.731516-7-s.rufinatscha@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260121151408.731516-1-s.rufinatscha@proxmox.com> References: <20260121151408.731516-1-s.rufinatscha@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1769008397107 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.254 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 SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH proxmox v4 2/4] proxmox-access-control: 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" QWRkcyBhbiBpbi1tZW1vcnkgY2FjaGUgb2Ygc3VjY2Vzc2Z1bGx5IHZlcmlmaWVkIHRva2VuIHNl Y3JldHMuClN1YnNlcXVlbnQgcmVxdWVzdHMgZm9yIHRoZSBzYW1lIHRva2VuK3NlY3JldCBjb21i aW5hdGlvbiBvbmx5IHBlcmZvcm0gYQpjb21wYXJpc29uIHVzaW5nIG9wZW5zc2w6Om1lbWNtcDo6 ZXEgYW5kIGF2b2lkIHJlLXJ1bm5pbmcgdGhlIHBhc3N3b3JkCmhhc2guIFRoZSBjYWNoZSBpcyB1 cGRhdGVkIHdoZW4gYSB0b2tlbiBzZWNyZXQgaXMgc2V0IGFuZCBjbGVhcmVkIHdoZW4gYQp0b2tl biBpcyBkZWxldGVkLgoKU2lnbmVkLW9mZi1ieTogU2FtdWVsIFJ1ZmluYXRzY2hhIDxzLnJ1Zmlu YXRzY2hhQHByb3htb3guY29tPgotLS0KQ2hhbmdlcyBmcm9tIHYzIHRvIHY0OgoqIEFkZCBnZW4g cGFyYW0gdG8gaW52YWxpZGF0ZV9jYWNoZV9zdGF0ZSgpCiogVmFsaWRhdGVzIHRoZSBnZW5lcmF0 aW9uIGJ1bXAgYWZ0ZXIgb2J0YWluaW5nIHdyaXRlIGxvY2sgaW4KYXBwbHlfYXBpX211dGF0aW9u CiogUGFzcyBsb2NrIHRvIGFwcGx5X2FwaV9tdXRhdGlvbgoqIFJlbW92ZSB1bm5lY2Vzc2FyeSBn ZW4gY2hlY2sgY2FjaGVfdHJ5X3NlY3JldF9tYXRjaGVzCiogQWRqdXN0ZWQgY29tbWl0IG1lc3Nh Z2UKCkNoYW5nZXMgZnJvbSB2MiB0byB2MzoKKiBSZXBsYWNlZCBwcm9jZXNzLWxvY2FsIGNhY2hl IGludmFsaWRhdGlvbiAoQXRvbWljVTY0CkFQSV9NVVRBVElPTl9HRU5FUkFUSU9OKSB3aXRoIGEg Y3Jvc3MtcHJvY2VzcyBzaGFyZWQgZ2VuZXJhdGlvbiB2aWEKQ29uZmlnVmVyc2lvbkNhY2hlLgoq IFZhbGlkYXRlIHNoYXJlZCBnZW5lcmF0aW9uIGJlZm9yZS9hZnRlciB0aGUgY29uc3RhbnQtdGlt ZSBzZWNyZXQKY29tcGFyZTsgb25seSBpbnNlcnQgaW50byBjYWNoZSBpZiB0aGUgZ2VuZXJhdGlv biBpcyB1bmNoYW5nZWQuCiogaW52YWxpZGF0ZV9jYWNoZV9zdGF0ZSgpIG9uIGluc2VydCBpZiBz aGFyZWQgZ2VuZXJhdGlvbiBjaGFuZ2VkLgoKQ2hhbmdlcyBmcm9tIHYxIHRvIHYyOgoqIFJlcGxh Y2UgT25jZUNlbGwgd2l0aCBMYXp5TG9jaywgYW5kIHN0ZDo6c3luYzo6UndMb2NrIHdpdGgKcGFy a2luZ19sb3Q6OlJ3TG9jay4KKiBBZGQgQVBJX01VVEFUSU9OX0dFTkVSQVRJT04gYW5kIGd1YXJk IGNhY2hlIGluc2VydHMKdG8gcHJldmVudCDigJx6b21iaWUgaW5zZXJ0c+KAnSBhY3Jvc3MgY29u Y3VycmVudCBzZXQvZGVsZXRlLgoqIFJlZmFjdG9yIGNhY2hlIG9wZXJhdGlvbnMgaW50byBjYWNo ZV90cnlfc2VjcmV0X21hdGNoZXMsCmNhY2hlX3RyeV9pbnNlcnRfc2VjcmV0LCBhbmQgY2VudHJh bGl6ZSB3cml0ZS1zaWRlIGJlaGF2aW9yIGluCmFwcGx5X2FwaV9tdXRhdGlvbi4KKiBTd2l0Y2gg ZmFzdC1wYXRoIGNhY2hlIGFjY2VzcyB0byB0cnlfcmVhZC90cnlfd3JpdGUgKGJlc3QtZWZmb3J0 KS4KCiBDYXJnby50b21sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwog cHJveG1veC1hY2Nlc3MtY29udHJvbC9DYXJnby50b21sICAgICAgICAgIHwgICAxICsKIHByb3ht b3gtYWNjZXNzLWNvbnRyb2wvc3JjL3Rva2VuX3NoYWRvdy5ycyB8IDE2MCArKysrKysrKysrKysr KysrKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgMTU5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvQ2FyZ28udG9tbCBiL0NhcmdvLnRvbWwKaW5kZXggMjdhNjlhZmEu LjU5YTJlYzkzIDEwMDY0NAotLS0gYS9DYXJnby50b21sCisrKyBiL0NhcmdvLnRvbWwKQEAgLTEx Miw2ICsxMTIsNyBAQCBuYXRpdmUtdGxzID0gIjAuMiIKIG5peCA9ICIwLjI5Igogb3BlbnNzbCA9 ICIwLjEwIgogcGFtLXN5cyA9ICIwLjUiCitwYXJraW5nX2xvdCA9ICIwLjEyIgogcGVyY2VudC1l bmNvZGluZyA9ICIyLjEiCiBwaW4tdXRpbHMgPSAiMC4xLjAiCiBwcm9jLW1hY3JvMiA9ICIxLjAi CmRpZmYgLS1naXQgYS9wcm94bW94LWFjY2Vzcy1jb250cm9sL0NhcmdvLnRvbWwgYi9wcm94bW94 LWFjY2Vzcy1jb250cm9sL0NhcmdvLnRvbWwKaW5kZXggZWMxODk2NjQuLjFkZTI4NDJjIDEwMDY0 NAotLS0gYS9wcm94bW94LWFjY2Vzcy1jb250cm9sL0NhcmdvLnRvbWwKKysrIGIvcHJveG1veC1h Y2Nlc3MtY29udHJvbC9DYXJnby50b21sCkBAIC0xNiw2ICsxNiw3IEBAIGFueWhvdy53b3Jrc3Bh Y2UgPSB0cnVlCiBjb25zdF9mb3JtYXQud29ya3NwYWNlID0gdHJ1ZQogbml4ID0geyB3b3Jrc3Bh Y2UgPSB0cnVlLCBvcHRpb25hbCA9IHRydWUgfQogb3BlbnNzbCA9IHsgd29ya3NwYWNlID0gdHJ1 ZSwgb3B0aW9uYWwgPSB0cnVlIH0KK3BhcmtpbmdfbG90LndvcmtzcGFjZSA9IHRydWUKIHJlZ2V4 LndvcmtzcGFjZSA9IHRydWUKIGhleCA9IHsgd29ya3NwYWNlID0gdHJ1ZSwgb3B0aW9uYWwgPSB0 cnVlIH0KIHNlcmRlLndvcmtzcGFjZSA9IHRydWUKZGlmZiAtLWdpdCBhL3Byb3htb3gtYWNjZXNz LWNvbnRyb2wvc3JjL3Rva2VuX3NoYWRvdy5ycyBiL3Byb3htb3gtYWNjZXNzLWNvbnRyb2wvc3Jj L3Rva2VuX3NoYWRvdy5ycwppbmRleCBjNTg2ZDgzNC4uZTRkZmFiNTAgMTAwNjQ0Ci0tLSBhL3By b3htb3gtYWNjZXNzLWNvbnRyb2wvc3JjL3Rva2VuX3NoYWRvdy5ycworKysgYi9wcm94bW94LWFj Y2Vzcy1jb250cm9sL3NyYy90b2tlbl9zaGFkb3cucnMKQEAgLTEsMTMgKzEsMjggQEAKIHVzZSBz dGQ6OmNvbGxlY3Rpb25zOjpIYXNoTWFwOwordXNlIHN0ZDo6c3luYzo6TGF6eUxvY2s7CiAKIHVz ZSBhbnlob3c6OntiYWlsLCBmb3JtYXRfZXJyLCBFcnJvcn07Cit1c2UgcGFya2luZ19sb3Q6OlJ3 TG9jazsKIHVzZSBzZXJkZV9qc29uOjp7ZnJvbV92YWx1ZSwgVmFsdWV9OwogCiB1c2UgcHJveG1v eF9hdXRoX2FwaTo6dHlwZXM6OkF1dGhpZDsKIHVzZSBwcm94bW94X3Byb2R1Y3RfY29uZmlnOjp7 b3Blbl9hcGlfbG9ja2ZpbGUsIHJlcGxhY2VfY29uZmlnLCBBcGlMb2NrR3VhcmR9OwogCit1c2Ug Y3JhdGU6OmluaXQ6OmFjY2Vzc19jb25mOwogdXNlIGNyYXRlOjppbml0OjppbXBsX2ZlYXR1cmU6 Ont0b2tlbl9zaGFkb3csIHRva2VuX3NoYWRvd19sb2NrfTsKIAorLy8vIEdsb2JhbCBpbi1tZW1v cnkgY2FjaGUgZm9yIHN1Y2Nlc3NmdWxseSB2ZXJpZmllZCBBUEkgdG9rZW4gc2VjcmV0cy4KKy8v LyBUaGUgY2FjaGUgc3RvcmVzIHBsYWluIHRleHQgc2VjcmV0cyBmb3IgdG9rZW4gQXV0aGlkcyB0 aGF0IGhhdmUgYWxyZWFkeSBiZWVuCisvLy8gdmVyaWZpZWQgYWdhaW5zdCB0aGUgaGFzaGVkIHZh bHVlcyBpbiBgdG9rZW4uc2hhZG93YC4gVGhpcyBhbGxvd3MgZm9yIGNoZWFwCisvLy8gc3Vic2Vx dWVudCBhdXRoZW50aWNhdGlvbnMgZm9yIHRoZSBzYW1lIHRva2VuK3NlY3JldCBjb21iaW5hdGlv biwgYXZvaWRpbmcKKy8vLyByZWNvbXB1dGluZyB0aGUgcGFzc3dvcmQgaGFzaCBvbiBldmVyeSBy ZXF1ZXN0Lgorc3RhdGljIFRPS0VOX1NFQ1JFVF9DQUNIRTogTGF6eUxvY2s8UndMb2NrPEFwaVRv a2VuU2VjcmV0Q2FjaGU+PiA9IExhenlMb2NrOjpuZXcofHwgeworICAgIFJ3TG9jazo6bmV3KEFw aVRva2VuU2VjcmV0Q2FjaGUgeworICAgICAgICBzZWNyZXRzOiBIYXNoTWFwOjpuZXcoKSwKKyAg ICAgICAgc2hhcmVkX2dlbjogMCwKKyAgICB9KQorfSk7CisKIC8vIEdldCBleGNsdXNpdmUgbG9j awogZm4gbG9ja19jb25maWcoKSAtPiBSZXN1bHQ8QXBpTG9ja0d1YXJkLCBFcnJvcj4gewogICAg IG9wZW5fYXBpX2xvY2tmaWxlKHRva2VuX3NoYWRvd19sb2NrKCksIE5vbmUsIHRydWUpCkBAIC0z Niw5ICs1MSwyNyBAQCBwdWIgZm4gdmVyaWZ5X3NlY3JldCh0b2tlbmlkOiAmQXV0aGlkLCBzZWNy ZXQ6ICZzdHIpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKICAgICAgICAgYmFpbCEoIm5vdCBhbiBB UEkgdG9rZW4gSUQiKTsKICAgICB9CiAKKyAgICAvLyBGYXN0IHBhdGgKKyAgICBpZiBjYWNoZV90 cnlfc2VjcmV0X21hdGNoZXModG9rZW5pZCwgc2VjcmV0KSB7CisgICAgICAgIHJldHVybiBPaygo KSk7CisgICAgfQorCisgICAgLy8gU2xvdyBwYXRoCisgICAgLy8gRmlyc3QsIGNhcHR1cmUgdGhl IHNoYXJlZCBnZW5lcmF0aW9uIGJlZm9yZSBkb2luZyB0aGUgaGFzaCB2ZXJpZmljYXRpb24uCisg ICAgbGV0IGdlbl9iZWZvcmUgPSB0b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigpOworCiAgICAgbGV0 IGRhdGEgPSByZWFkX2ZpbGUoKT87CiAgICAgbWF0Y2ggZGF0YS5nZXQodG9rZW5pZCkgewotICAg ICAgICBTb21lKGhhc2hlZF9zZWNyZXQpID0+IHByb3htb3hfc3lzOjpjcnlwdDo6dmVyaWZ5X2Ny eXB0X3B3KHNlY3JldCwgaGFzaGVkX3NlY3JldCksCisgICAgICAgIFNvbWUoaGFzaGVkX3NlY3Jl dCkgPT4geworICAgICAgICAgICAgcHJveG1veF9zeXM6OmNyeXB0Ojp2ZXJpZnlfY3J5cHRfcHco c2VjcmV0LCBoYXNoZWRfc2VjcmV0KT87CisKKyAgICAgICAgICAgIC8vIFRyeSB0byBjYWNoZSBv bmx5IGlmIG5vdGhpbmcgY2hhbmdlZCB3aGlsZSB2ZXJpZnlpbmcgdGhlIHNlY3JldC4KKyAgICAg ICAgICAgIGlmIGxldCBTb21lKGdlbikgPSBnZW5fYmVmb3JlIHsKKyAgICAgICAgICAgICAgICBj YWNoZV90cnlfaW5zZXJ0X3NlY3JldCh0b2tlbmlkLmNsb25lKCksIHNlY3JldC50b19vd25lZCgp LCBnZW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBPaygoKSkKKyAgICAgICAgfQog ICAgICAgICBOb25lID0+IGJhaWwhKCJpbnZhbGlkIEFQSSB0b2tlbiIpLAogICAgIH0KIH0KQEAg LTQ5LDEzICs4MiwxNSBAQCBwdWIgZm4gc2V0X3NlY3JldCh0b2tlbmlkOiAmQXV0aGlkLCBzZWNy ZXQ6ICZzdHIpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKICAgICAgICAgYmFpbCEoIm5vdCBhbiBB UEkgdG9rZW4gSUQiKTsKICAgICB9CiAKLSAgICBsZXQgX2d1YXJkID0gbG9ja19jb25maWcoKT87 CisgICAgbGV0IGd1YXJkID0gbG9ja19jb25maWcoKT87CiAKICAgICBsZXQgbXV0IGRhdGEgPSBy ZWFkX2ZpbGUoKT87CiAgICAgbGV0IGhhc2hlZF9zZWNyZXQgPSBwcm94bW94X3N5czo6Y3J5cHQ6 OmVuY3J5cHRfcHcoc2VjcmV0KT87CiAgICAgZGF0YS5pbnNlcnQodG9rZW5pZC5jbG9uZSgpLCBo YXNoZWRfc2VjcmV0KTsKICAgICB3cml0ZV9maWxlKGRhdGEpPzsKIAorICAgIGFwcGx5X2FwaV9t dXRhdGlvbihndWFyZCwgdG9rZW5pZCwgU29tZShzZWNyZXQpKTsKKwogICAgIE9rKCgpKQogfQog CkBAIC02NSwxMiArMTAwLDE0IEBAIHB1YiBmbiBkZWxldGVfc2VjcmV0KHRva2VuaWQ6ICZBdXRo aWQpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKICAgICAgICAgYmFpbCEoIm5vdCBhbiBBUEkgdG9r ZW4gSUQiKTsKICAgICB9CiAKLSAgICBsZXQgX2d1YXJkID0gbG9ja19jb25maWcoKT87CisgICAg bGV0IGd1YXJkID0gbG9ja19jb25maWcoKT87CiAKICAgICBsZXQgbXV0IGRhdGEgPSByZWFkX2Zp bGUoKT87CiAgICAgZGF0YS5yZW1vdmUodG9rZW5pZCk7CiAgICAgd3JpdGVfZmlsZShkYXRhKT87 CiAKKyAgICBhcHBseV9hcGlfbXV0YXRpb24oZ3VhcmQsIHRva2VuaWQsIE5vbmUpOworCiAgICAg T2soKCkpCiB9CiAKQEAgLTgxLDMgKzExOCwxMjAgQEAgcHViIGZuIGdlbmVyYXRlX2FuZF9zZXRf c2VjcmV0KHRva2VuaWQ6ICZBdXRoaWQpIC0+IFJlc3VsdDxTdHJpbmcsIEVycm9yPiB7CiAgICAg c2V0X3NlY3JldCh0b2tlbmlkLCAmc2VjcmV0KT87CiAgICAgT2soc2VjcmV0KQogfQorCitzdHJ1 Y3QgQXBpVG9rZW5TZWNyZXRDYWNoZSB7CisgICAgLy8vIEtleXMgYXJlIHRva2VuIEF1dGhpZHMs IHZhbHVlcyBhcmUgdGhlIGNvcnJlc3BvbmRpbmcgcGxhaW4gdGV4dCBzZWNyZXRzLgorICAgIC8v LyBFbnRyaWVzIGFyZSBhZGRlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgb24tZGlzayB2ZXJpZmljYXRp b24gaW4KKyAgICAvLy8gYHZlcmlmeV9zZWNyZXRgIG9yIHdoZW4gYSBuZXcgdG9rZW4gc2VjcmV0 IGlzIGdlbmVyYXRlZCBieQorICAgIC8vLyBgZ2VuZXJhdGVfYW5kX3NldF9zZWNyZXRgLiBVc2Vk IHRvIGF2b2lkIHJlcGVhdGVkCisgICAgLy8vIHBhc3N3b3JkLWhhc2ggY29tcHV0YXRpb24gb24g c3Vic2VxdWVudCBhdXRoZW50aWNhdGlvbnMuCisgICAgc2VjcmV0czogSGFzaE1hcDxBdXRoaWQs IENhY2hlZFNlY3JldD4sCisgICAgLy8vIFNoYXJlZCBnZW5lcmF0aW9uIHRvIGRldGVjdCBtdXRh dGlvbnMgb2YgdGhlIHVuZGVybHlpbmcgdG9rZW4uc2hhZG93IGZpbGUuCisgICAgc2hhcmVkX2dl bjogdXNpemUsCit9CisKKy8vLyBDYWNoZWQgc2VjcmV0Lgorc3RydWN0IENhY2hlZFNlY3JldCB7 CisgICAgc2VjcmV0OiBTdHJpbmcsCit9CisKK2ZuIGNhY2hlX3RyeV9pbnNlcnRfc2VjcmV0KHRv a2VuaWQ6IEF1dGhpZCwgc2VjcmV0OiBTdHJpbmcsIHNoYXJlZF9nZW5fYmVmb3JlOiB1c2l6ZSkg eworICAgIGxldCBTb21lKG11dCBjYWNoZSkgPSBUT0tFTl9TRUNSRVRfQ0FDSEUudHJ5X3dyaXRl KCkgZWxzZSB7CisgICAgICAgIHJldHVybjsKKyAgICB9OworCisgICAgbGV0IFNvbWUoc2hhcmVk X2dlbl9ub3cpID0gdG9rZW5fc2hhZG93X3NoYXJlZF9nZW4oKSBlbHNlIHsKKyAgICAgICAgcmV0 dXJuOworICAgIH07CisKKyAgICAvLyBJZiB0aGlzIHByb2Nlc3MgbWlzc2VkIGEgZ2VuZXJhdGlv biBidW1wLCBpdHMgY2FjaGUgaXMgc3RhbGUuCisgICAgaWYgY2FjaGUuc2hhcmVkX2dlbiAhPSBz aGFyZWRfZ2VuX25vdyB7CisgICAgICAgIGludmFsaWRhdGVfY2FjaGVfc3RhdGVfYW5kX3NldF9n ZW4oJm11dCBjYWNoZSwgc2hhcmVkX2dlbl9ub3cpOworICAgIH0KKworICAgIC8vIElmIGEgbXV0 YXRpb24gaGFwcGVuZWQgd2hpbGUgd2Ugd2VyZSB2ZXJpZnlpbmcgdGhlIHNlY3JldCwgZG8gbm90 IGluc2VydC4KKyAgICBpZiBzaGFyZWRfZ2VuX25vdyA9PSBzaGFyZWRfZ2VuX2JlZm9yZSB7Cisg ICAgICAgIGNhY2hlLnNlY3JldHMuaW5zZXJ0KHRva2VuaWQsIENhY2hlZFNlY3JldCB7IHNlY3Jl dCB9KTsKKyAgICB9Cit9CisKKy8vLyBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gdG9rZW4gc2Vj cmV0IGFnYWluc3QgdGhlIGNhY2hlZCBzZWNyZXQuCisvLy8KKy8vLyBWZXJpZmllcyB0aGUgZ2Vu ZXJhdGlvbi92ZXJzaW9uIGJlZm9yZSBkb2luZyB0aGUgY29uc3RhbnQtdGltZQorLy8vIGNvbXBh cmlzb24gdG8gcmVkdWNlIFRPQ1RPVSByaXNrLiBEdXJpbmcgdG9rZW4gcm90YXRpb24gb3IgZGVs ZXRpb24KKy8vLyB0b2tlbnMgZm9yIGluLWZsaWdodCByZXF1ZXN0cyBtYXkgc3RpbGwgdmFsaWRh dGUgYWdhaW5zdCB0aGUgcHJldmlvdXMKKy8vLyBnZW5lcmF0aW9uLgorZm4gY2FjaGVfdHJ5X3Nl Y3JldF9tYXRjaGVzKHRva2VuaWQ6ICZBdXRoaWQsIHNlY3JldDogJnN0cikgLT4gYm9vbCB7Cisg ICAgbGV0IFNvbWUoY2FjaGUpID0gVE9LRU5fU0VDUkVUX0NBQ0hFLnRyeV9yZWFkKCkgZWxzZSB7 CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIGxldCBTb21lKGVudHJ5KSA9IGNh Y2hlLnNlY3JldHMuZ2V0KHRva2VuaWQpIGVsc2UgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg ICAgfTsKKyAgICBsZXQgU29tZShjdXJyZW50X2dlbikgPSB0b2tlbl9zaGFkb3dfc2hhcmVkX2dl bigpIGVsc2UgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIGlmIGN1cnJl bnRfZ2VuID09IGNhY2hlLnNoYXJlZF9nZW4geworICAgICAgICByZXR1cm4gb3BlbnNzbDo6bWVt Y21wOjplcShlbnRyeS5zZWNyZXQuYXNfYnl0ZXMoKSwgc2VjcmV0LmFzX2J5dGVzKCkpOworICAg IH0KKworICAgIGZhbHNlCit9CisKK2ZuIGFwcGx5X2FwaV9tdXRhdGlvbihfZ3VhcmQ6IEJhY2t1 cExvY2tHdWFyZCwgdG9rZW5pZDogJkF1dGhpZCwgbmV3X3NlY3JldDogT3B0aW9uPCZzdHI+KSB7 CisgICAgLy8gU2lnbmFsIGNhY2hlIGludmFsaWRhdGlvbiB0byBvdGhlciBwcm9jZXNzZXMgKGJl c3QtZWZmb3J0KS4KKyAgICBsZXQgYnVtcGVkX2dlbiA9IGJ1bXBfdG9rZW5fc2hhZG93X3NoYXJl ZF9nZW4oKTsKKworICAgIGxldCBtdXQgY2FjaGUgPSBUT0tFTl9TRUNSRVRfQ0FDSEUud3JpdGUo KTsKKworICAgIC8vIElmIHdlIGNhbm5vdCBnZXQgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiwgd2Ug Y2Fubm90IHRydXN0IHRoZSBjYWNoZQorICAgIGxldCBTb21lKGN1cnJlbnRfZ2VuKSA9IHRva2Vu X3NoYWRvd19zaGFyZWRfZ2VuKCkgZWxzZSB7CisgICAgICAgIGludmFsaWRhdGVfY2FjaGVfc3Rh dGVfYW5kX3NldF9nZW4oJm11dCBjYWNoZSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Owor CisgICAgLy8gSWYgd2UgY2Fubm90IGJ1bXAgdGhlIHNoYXJlZCBnZW5lcmF0aW9uLCBvciBpZiBp dCBjaGFuZ2VkIGFmdGVyCisgICAgLy8gb2J0YWluaW5nIHRoZSBjYWNoZSB3cml0ZSBsb2NrLCB3 ZSBjYW5ub3QgdHJ1c3QgdGhlIGNhY2hlCisgICAgaWYgYnVtcGVkX2dlbiAhPSBTb21lKGN1cnJl bnRfZ2VuKSB7CisgICAgICAgIGludmFsaWRhdGVfY2FjaGVfc3RhdGVfYW5kX3NldF9nZW4oJm11 dCBjYWNoZSwgY3VycmVudF9nZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g VXBkYXRlIHRvIHRoZSBwb3N0LW11dGF0aW9uIGdlbmVyYXRpb24uCisgICAgY2FjaGUuc2hhcmVk X2dlbiA9IGN1cnJlbnRfZ2VuOworCisgICAgLy8gQXBwbHkgdGhlIG5ldyBtdXRhdGlvbi4KKyAg ICBtYXRjaCBuZXdfc2VjcmV0IHsKKyAgICAgICAgU29tZShzZWNyZXQpID0+IHsKKyAgICAgICAg ICAgIGNhY2hlLnNlY3JldHMuaW5zZXJ0KAorICAgICAgICAgICAgICAgIHRva2VuaWQuY2xvbmUo KSwKKyAgICAgICAgICAgICAgICBDYWNoZWRTZWNyZXQgeworICAgICAgICAgICAgICAgICAgICBz ZWNyZXQ6IHNlY3JldC50b19vd25lZCgpLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg ICApOworICAgICAgICB9CisgICAgICAgIE5vbmUgPT4geworICAgICAgICAgICAgY2FjaGUuc2Vj cmV0cy5yZW1vdmUodG9rZW5pZCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vLyBHZXQgdGhl IGN1cnJlbnQgc2hhcmVkIGdlbmVyYXRpb24uCitmbiB0b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigp IC0+IE9wdGlvbjx1c2l6ZT4geworICAgIGFjY2Vzc19jb25mKCkudG9rZW5fc2hhZG93X2NhY2hl X2dlbmVyYXRpb24oKQorfQorCisvLy8gQnVtcCBhbmQgcmV0dXJuIHRoZSBuZXcgc2hhcmVkIGdl bmVyYXRpb24uCitmbiBidW1wX3Rva2VuX3NoYWRvd19zaGFyZWRfZ2VuKCkgLT4gT3B0aW9uPHVz aXplPiB7CisgICAgYWNjZXNzX2NvbmYoKQorICAgICAgICAuaW5jcmVtZW50X3Rva2VuX3NoYWRv d19jYWNoZV9nZW5lcmF0aW9uKCkKKyAgICAgICAgLm9rKCkKKyAgICAgICAgLm1hcCh8cHJldnwg cHJldiArIDEpCit9CisKKy8vLyBJbnZhbGlkYXRlcyBsb2NhbCBjYWNoZSBjb250ZW50cyBhbmQg c2V0cy91cGRhdGVzIHRoZSBjYWNoZWQgZ2VuZXJhdGlvbi4KK2ZuIGludmFsaWRhdGVfY2FjaGVf c3RhdGVfYW5kX3NldF9nZW4oY2FjaGU6ICZtdXQgQXBpVG9rZW5TZWNyZXRDYWNoZSwgZ2VuOiB1 c2l6ZSkgeworICAgIGNhY2hlLnNlY3JldHMuY2xlYXIoKTsKKyAgICBjYWNoZS5zaGFyZWRfZ2Vu ID0gZ2VuOworfQotLSAKMi40Ny4zCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCnBicy1kZXZlbCBtYWlsaW5nIGxpc3QKcGJzLWRldmVsQGxpc3RzLnBy b3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3Rp bmZvL3Bicy1kZXZlbAo=