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 1EC771FF16F for ; Tue, 22 Jul 2025 12:10:58 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 801A535B58; Tue, 22 Jul 2025 12:12:00 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Tue, 22 Jul 2025 12:10:42 +0200 Message-ID: <20250722101106.526438-27-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250722101106.526438-1-c.ebner@proxmox.com> References: <20250722101106.526438-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1753179083862 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.046 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-backup v11 22/46] datastore: implement garbage collection for s3 backend 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" SW1wbGVtZW50cyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGZvciBkYXRhc3RvcmVzIGJhY2tlZCBi eSBhbiBzMwpvYmplY3Qgc3RvcmUuClRha2UgYWR2YW50YWdlIG9mIHRoZSBsb2NhbCBkYXRhc3Rv cmUgYnkgcGxhY2luZyBtYXJrZXIgZmlsZXMgaW4gdGhlCmNodW5rIHN0b3JlIGR1cmluZyBwaGFz ZSAxIG9mIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24sIHVwZGF0aW5nIHRoZWlyCmF0aW1lIGlmIGFs cmVhZHkgcHJlc2VudC4KVGhpcyBhbGxvd3MgdXMgdG8gYXZvaWQgbWFraW5nIGV4cGVuc2l2ZSBB UEkgY2FsbHMgdG8gdXBkYXRlIG9iamVjdAptZXRhZGF0YSwgd2hpY2ggd291bGQgb25seSBiZSBw b3NzaWJsZSB2aWEgYSBjb3B5IG9iamVjdCBvcGVyYXRpb24uCgpUaGUgcGhhc2UgMiBpcyBpbXBs ZW1lbnRlZCBieSBmZXRjaGluZyBhIGxpc3Qgb2YgYWxsIHRoZSBjaHVua3MgdmlhCnRoZSBMaXN0 T2JqZWN0c1YyIEFQSSBjYWxsLCBmaWx0ZXJlZCBieSB0aGUgY2h1bmsgZm9sZGVyIHByZWZpeC4K VGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIHBlcmZvcm1lZCBpbiBiYXRjaGVzIG9mIDEwMDAgb2Jq ZWN0cywgZ2l2ZW4KYnkgdGhlIEFQSXMgcmVzcG9uc2UgbGltaXRzLgpGb3IgZWFjaCBvYmplY3Qg a2V5LCBsb29rdXAgdGhlIG1hcmtlciBmaWxlIGFuZCBkZWNpZGUgYmFzZWQgb24gdGhlCm1hcmtl ciBleGlzdGVuY2UgYW5kIGl0J3MgYXRpbWUgaWYgdGhlIGNodW5rIG9iamVjdCBuZWVkcyB0byBi ZQpyZW1vdmVkLiBEZWxldGlvbiBoYXBwZW5zIHZpYSB0aGUgZGVsZXRlIG9iamVjdHMgb3BlcmF0 aW9uLCBhbGxvd2luZwp0byBkZWxldGUgbXVsdGlwbGUgY2h1bmtzIGJ5IGEgc2luZ2xlIHJlcXVl c3QuCgpUaGlzIGFsbG93cyB0byBlZmZpY2llbnRseSBsb29rdXAgY2h1bmtzIHdoaWNoIGFyZSBu b3QgaW4gdXNlCmFueW1vcmUgd2hpbGUgYmVpbmcgcGVyZm9ybWFudCBhbmQgY29zdCBlZmZlY3Rp dmUuCgpCYXNlbGluZSBydW50aW1lIHBlcmZvcm1hbmNlIHRlc3RzOgotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKMyBnYXJiYWdlIGNvbGxlY3Rpb24gcnVucyB3ZXJlIHBlcmZv cm1lZCB3aXRoIGhvdCBmaWxlc3lzdGVtIGNhY2hlcwooYnkgYWRkaXRpb25hbCBHQyBydW4gYmVm b3JlIHRoZSB0ZXN0IHJ1bnMpLiBUaGUgUEJTIGluc3RhbmNlIHdhcwp2aXJ0dWFsaXplZCwgdGhl IHNhbWUgdmlydHVhbGl6ZWQgZGlzayB1c2luZyBaRlMgZm9yIGFsbCB0aGUgbG9jYWwKY2FjaGUg c3RvcmVzOgoKQWxsIGRhdGFzdG9yZXMgY29udGFpbmVkIHRoZSBzYW1lIGVuY3J5cHRlZCBkYXRh LCB3aXRoIHRoZSBmb2xsb3dpbmcKY29udGVudCBzdGF0aXN0aWNzOgpPcmlnaW5hbCBkYXRhIHVz YWdlOiAyNjkuNjg1IEdpQgpPbi1EaXNrIHVzYWdlOiA5LjAxOCBHaUIgKDMuMzQlKQpPbi1EaXNr IGNodW5rczogNjQ3NwpEZWR1cGxpY2F0aW9uIGZhY3RvcjogMjkuOTAKQXZlcmFnZSBjaHVuayBz aXplOiAxLjQyNiBNaUIKClRoZSByZXN1dGx0cyBkZW1vbnN0cmF0ZSB0aGUgb3ZlcmhlYWQgY2F1 c2VkIGJ5IHRoZSBhZGRpdGlvbmFsCkxpc3RPYmplY3RWMiBBUEkgY2FsbHMgYW5kIHRoZWlyIHBy b2Nlc3NpbmcsIGJ1dCBkZXBlbmRpbmcgb24gdGhlCm9iamVjdCBzdG9yZSBiYWNrZW5kLgoKQXZl cmFnZSBnYXJiYWdlIGNvbGxlY3Rpb24gcnVudGltZToKTG9jYWwgZGF0YXN0b3JlOiAgICAgICAg ICAgICAoMi4wNCDCsSAwLjAxKSBzCkxvY2FsIFJBRE9TIGdhdGV3YXkgKFNxdWlkKTogKDMuMDUg wrEgMC4wMSkgcwpBV1MgUzM6ICAgICAgICAgICAgICAgICAgICAgICgzLjA1IMKxIDAuMDEpIHMK Q2xvdWRmbGFyZSBSMjogICAgICAgICAgICAgICAoNi43MSDCsSAwLjU4KSBzCgpBZnRlciBwcnVu aW5nIG9mIGFsbCBkYXRhc3RvcmUgY29udGVudHMgKHRoZXJlZm9yZSBpbmNsdWRpbmcKRGVsZXRl T2JqZWN0cyByZXF1ZXN0cyk6CkxvY2FsIGRhdGFzdG9yZTogICAgICAgICAgICAgIDMuMDQgcwpM b2NhbCBSQURPUyBnYXRld2F5IChTcXVpZCk6IDE0LjA4IHMKQVdTIFMzOiAgICAgICAgICAgICAg ICAgICAgICAxMy4wNiBzCkNsb3VkZmxhcmUgUjI6ICAgICAgICAgICAgICAgNzguMjEgcwoKU2ln bmVkLW9mZi1ieTogQ2hyaXN0aWFuIEVibmVyIDxjLmVibmVyQHByb3htb3guY29tPgpSZXZpZXdl ZC1ieTogTHVrYXMgV2FnbmVyIDxsLndhZ25lckBwcm94bW94LmNvbT4KUmV2aWV3ZWQtYnk6IEhh bm5lcyBMYWltZXIgPGgubGFpbWVyQHByb3htb3guY29tPgotLS0KY2hhbmdlcyBzaW5jZSB2ZXJz aW9uIDEwOgogLSBubyBjaGFuZ2VzCgogcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMg fCAgIDQgKwogcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzICAgfCAyNTIgKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyMzAgaW5zZXJ0aW9ucygr KSwgMjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtf c3RvcmUucnMgYi9wYnMtZGF0YXN0b3JlL3NyYy9jaHVua19zdG9yZS5ycwppbmRleCA4YzE5NWRm NTQuLjk1ZjAwZThkNSAxMDA2NDQKLS0tIGEvcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUu cnMKKysrIGIvcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMKQEAgLTM1Myw2ICszNTMs MTAgQEAgaW1wbCBDaHVua1N0b3JlIHsKICAgICAgICAgUHJvY2Vzc0xvY2tlcjo6b2xkZXN0X3No YXJlZF9sb2NrKHNlbGYubG9ja2VyLmNsb25lKCkudW53cmFwKCkpCiAgICAgfQogCisgICAgcHVi IGZuIG11dGV4KCZzZWxmKSAtPiAmc3RkOjpzeW5jOjpNdXRleDwoKT4geworICAgICAgICAmc2Vs Zi5tdXRleAorICAgIH0KKwogICAgIHB1YiBmbiBzd2VlcF91bnVzZWRfY2h1bmtzKAogICAgICAg ICAmc2VsZiwKICAgICAgICAgb2xkZXN0X3dyaXRlcjogaTY0LApkaWZmIC0tZ2l0IGEvcGJzLWRh dGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzIGIvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJz CmluZGV4IGFlODQ5M2E3Yy4uMDRlNTRhMTBhIDEwMDY0NAotLS0gYS9wYnMtZGF0YXN0b3JlL3Ny Yy9kYXRhc3RvcmUucnMKKysrIGIvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzCkBAIC00 LDcgKzQsNyBAQCB1c2Ugc3RkOjpvczo6dW5peDo6ZmZpOjpPc1N0ckV4dDsKIHVzZSBzdGQ6Om9z Ojp1bml4Ojppbzo6QXNSYXdGZDsKIHVzZSBzdGQ6OnBhdGg6OntQYXRoLCBQYXRoQnVmfTsKIHVz ZSBzdGQ6OnN5bmM6OntBcmMsIExhenlMb2NrLCBNdXRleH07Ci11c2Ugc3RkOjp0aW1lOjpEdXJh dGlvbjsKK3VzZSBzdGQ6OnRpbWU6OntEdXJhdGlvbiwgU3lzdGVtVGltZX07CiAKIHVzZSBhbnlo b3c6OntiYWlsLCBmb3JtYXRfZXJyLCBDb250ZXh0LCBFcnJvcn07CiB1c2UgaHR0cF9ib2R5X3V0 aWw6OkJvZHlFeHQ7CkBAIC0xMyw3ICsxMyw3IEBAIHVzZSBwYnNfdG9vbHM6OmxydV9jYWNoZTo6 THJ1Q2FjaGU7CiB1c2UgdHJhY2luZzo6e2luZm8sIHdhcm59OwogCiB1c2UgcHJveG1veF9odW1h bl9ieXRlOjpIdW1hbkJ5dGU7Ci11c2UgcHJveG1veF9zM19jbGllbnQ6OntTM0NsaWVudCwgUzND bGllbnRDb25maWcsIFMzQ2xpZW50T3B0aW9ucywgUzNQYXRoUHJlZml4fTsKK3VzZSBwcm94bW94 X3MzX2NsaWVudDo6e1MzQ2xpZW50LCBTM0NsaWVudENvbmZpZywgUzNDbGllbnRPcHRpb25zLCBT M09iamVjdEtleSwgUzNQYXRoUHJlZml4fTsKIHVzZSBwcm94bW94X3NjaGVtYTo6QXBpVHlwZTsK IAogdXNlIHByb3htb3hfc3lzOjplcnJvcjo6U3lzRXJyb3I7CkBAIC0xMjEwLDYgKzEyMTAsNyBA QCBpbXBsIERhdGFTdG9yZSB7CiAgICAgICAgIGNodW5rX2xydV9jYWNoZTogJm11dCBPcHRpb248 THJ1Q2FjaGU8W3U4OyAzMl0sICgpPj4sCiAgICAgICAgIHN0YXR1czogJm11dCBHYXJiYWdlQ29s bGVjdGlvblN0YXR1cywKICAgICAgICAgd29ya2VyOiAmZHluIFdvcmtlclRhc2tDb250ZXh0LAor ICAgICAgICBzM19jbGllbnQ6IE9wdGlvbjxBcmM8UzNDbGllbnQ+PiwKICAgICApIC0+IFJlc3Vs dDwoKSwgRXJyb3I+IHsKICAgICAgICAgc3RhdHVzLmluZGV4X2ZpbGVfY291bnQgKz0gMTsKICAg ICAgICAgc3RhdHVzLmluZGV4X2RhdGFfYnl0ZXMgKz0gaW5kZXguaW5kZXhfYnl0ZXMoKTsKQEAg LTEyMzIsMjEgKzEyMzMsNDEgQEAgaW1wbCBEYXRhU3RvcmUgewogICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgIXNlbGYuaW5uZXIuY2h1bmtfc3RvcmUu Y29uZF90b3VjaF9jaHVuayhkaWdlc3QsIGZhbHNlKT8gewotICAgICAgICAgICAgICAgIGxldCBo ZXggPSBoZXg6OmVuY29kZShkaWdlc3QpOwotICAgICAgICAgICAgICAgIHdhcm4hKAotICAgICAg ICAgICAgICAgICAgICAid2FybmluZzogdW5hYmxlIHRvIGFjY2VzcyBub24tZXhpc3RlbnQgY2h1 bmsge2hleH0sIHJlcXVpcmVkIGJ5IHtmaWxlX25hbWU6P30iCi0gICAgICAgICAgICAgICAgKTsK LQotICAgICAgICAgICAgICAgIC8vIHRvdWNoIGFueSBjb3JyZXNwb25kaW5nIC5iYWQgZmlsZXMg dG8ga2VlcCB0aGVtIGFyb3VuZCwgbWVhbmluZyBpZiBhIGNodW5rIGlzCi0gICAgICAgICAgICAg ICAgLy8gcmV3cml0dGVuIGNvcnJlY3RseSB0aGV5IHdpbGwgYmUgcmVtb3ZlZCBhdXRvbWF0aWNh bGx5LCBhcyB3ZWxsIGFzIGlmIG5vIGluZGV4Ci0gICAgICAgICAgICAgICAgLy8gZmlsZSByZXF1 aXJlcyB0aGUgY2h1bmsgYW55bW9yZSAod29uJ3QgZ2V0IHRvIHRoaXMgbG9vcCB0aGVuKQotICAg ICAgICAgICAgICAgIGZvciBpIGluIDAuLj05IHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IGJh ZF9leHQgPSBmb3JtYXQhKCJ7fS5iYWQiLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgbGV0IG11 dCBiYWRfcGF0aCA9IFBhdGhCdWY6Om5ldygpOwotICAgICAgICAgICAgICAgICAgICBiYWRfcGF0 aC5wdXNoKHNlbGYuY2h1bmtfcGF0aChkaWdlc3QpLjApOwotICAgICAgICAgICAgICAgICAgICBi YWRfcGF0aC5zZXRfZXh0ZW5zaW9uKGJhZF9leHQpOwotICAgICAgICAgICAgICAgICAgICBzZWxm LmlubmVyLmNodW5rX3N0b3JlLmNvbmRfdG91Y2hfcGF0aCgmYmFkX3BhdGgsIGZhbHNlKT87Cisg ICAgICAgICAgICBtYXRjaCBzM19jbGllbnQgeworICAgICAgICAgICAgICAgIE5vbmUgPT4gewor ICAgICAgICAgICAgICAgICAgICAvLyBGaWxlc3lzdGVtIGJhY2tlbmQKKyAgICAgICAgICAgICAg ICAgICAgaWYgIXNlbGYuaW5uZXIuY2h1bmtfc3RvcmUuY29uZF90b3VjaF9jaHVuayhkaWdlc3Qs IGZhbHNlKT8geworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhleCA9IGhleDo6ZW5jb2Rl KGRpZ2VzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3YXJuISgKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAid2FybmluZzogdW5hYmxlIHRvIGFjY2VzcyBub24tZXhpc3RlbnQgY2h1 bmsge2hleH0sIHJlcXVpcmVkIGJ5IHtmaWxlX25hbWU6P30iCisgICAgICAgICAgICAgICAgICAg ICAgICApOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0b3VjaCBhbnkgY29ycmVzcG9u ZGluZyAuYmFkIGZpbGVzIHRvIGtlZXAgdGhlbSBhcm91bmQsIG1lYW5pbmcgaWYgYSBjaHVuayBp cworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV3cml0dGVuIGNvcnJlY3RseSB0aGV5IHdp bGwgYmUgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5LCBhcyB3ZWxsIGFzIGlmIG5vIGluZGV4CisgICAg ICAgICAgICAgICAgICAgICAgICAvLyBmaWxlIHJlcXVpcmVzIHRoZSBjaHVuayBhbnltb3JlICh3 b24ndCBnZXQgdG8gdGhpcyBsb29wIHRoZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig aSBpbiAwLi49OSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJhZF9leHQgPSBm b3JtYXQhKCJ7fS5iYWQiLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXV0 IGJhZF9wYXRoID0gUGF0aEJ1Zjo6bmV3KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg YmFkX3BhdGgucHVzaChzZWxmLmNodW5rX3BhdGgoZGlnZXN0KS4wKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBiYWRfcGF0aC5zZXRfZXh0ZW5zaW9uKGJhZF9leHQpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNlbGYuaW5uZXIuY2h1bmtfc3RvcmUuY29uZF90b3VjaF9wYXRo KCZiYWRfcGF0aCwgZmFsc2UpPzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTb21lKHJl ZiBfczNfY2xpZW50KSA9PiB7CisgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBhdGltZSBv biBsb2NhbCBjYWNoZSBtYXJrZXIgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIGlmICFzZWxm LmlubmVyLmNodW5rX3N0b3JlLmNvbmRfdG91Y2hfY2h1bmsoZGlnZXN0LCBmYWxzZSk/IHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGxldCAoY2h1bmtfcGF0aCwgX2RpZ2VzdCkgPSBzZWxmLmNo dW5rX3BhdGgoZGlnZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBlbXB0 eSBmaWxlIGFzIG1hcmtlciB0byB0ZWxsIEdDIHBoYXNlMiB0aGF0IHRoaXMgaXMKKyAgICAgICAg ICAgICAgICAgICAgICAgIC8vIGEgY2h1bmsgc3RpbGwgaW4tdXNlLCBzbyB0byBrZWVwIGluIHRo ZSBTMyBvYmplY3Qgc3RvcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmZzOjpGaWxl OjpvcHRpb25zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAud3JpdGUodHJ1ZSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlX25ldyh0cnVlKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC5vcGVuKCZjaHVua19wYXRoKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC53aXRoX2NvbnRleHQofHwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmb3JtYXQhKCJmYWlsZWQgdG8gY3JlYXRlIG1hcmtlciBmb3IgY2h1bmsge30iLCBoZXg6OmVu Y29kZShkaWdlc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pPzsKKyAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg fQpAQCAtMTI1OCw2ICsxMjc5LDcgQEAgaW1wbCBEYXRhU3RvcmUgewogICAgICAgICBzdGF0dXM6 ICZtdXQgR2FyYmFnZUNvbGxlY3Rpb25TdGF0dXMsCiAgICAgICAgIHdvcmtlcjogJmR5biBXb3Jr ZXJUYXNrQ29udGV4dCwKICAgICAgICAgY2FjaGVfY2FwYWNpdHk6IHVzaXplLAorICAgICAgICBz M19jbGllbnQ6IE9wdGlvbjxBcmM8UzNDbGllbnQ+PiwKICAgICApIC0+IFJlc3VsdDwoKSwgRXJy b3I+IHsKICAgICAgICAgLy8gSXRlcmF0ZSB0d2ljZSBvdmVyIHRoZSBkYXRhc3RvcmUgdG8gZmV0 Y2ggaW5kZXggZmlsZXMsIGV2ZW4gaWYgdGhpcyBjb21lcyB3aXRoIGFuCiAgICAgICAgIC8vIGFk ZGl0aW9uYWwgcnVudGltZSBjb3N0OgpAQCAtMTM1MSw2ICsxMzczLDcgQEAgaW1wbCBEYXRhU3Rv cmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXV0IGNodW5rX2xydV9jYWNo ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3b3JrZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHMzX2NsaWVudC5hc19yZWYoKS5jbG9uZWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApPzsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICF1bnByb2Nlc3NlZF9p bmRleF9saXN0LnJlbW92ZSgmcGF0aCkgewpAQCAtMTM4NSw3ICsxNDA4LDE0IEBAIGltcGwgRGF0 YVN0b3JlIHsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHNlbGYuaW5kZXhfbWFya191c2VkX2NodW5r cyhpbmRleCwgJnBhdGgsICZtdXQgY2h1bmtfbHJ1X2NhY2hlLCBzdGF0dXMsIHdvcmtlcik/Owor ICAgICAgICAgICAgc2VsZi5pbmRleF9tYXJrX3VzZWRfY2h1bmtzKAorICAgICAgICAgICAgICAg IGluZGV4LAorICAgICAgICAgICAgICAgICZwYXRoLAorICAgICAgICAgICAgICAgICZtdXQgY2h1 bmtfbHJ1X2NhY2hlLAorICAgICAgICAgICAgICAgIHN0YXR1cywKKyAgICAgICAgICAgICAgICB3 b3JrZXIsCisgICAgICAgICAgICAgICAgczNfY2xpZW50LmFzX3JlZigpLmNsb25lZCgpLAorICAg ICAgICAgICAgKT87CiAgICAgICAgICAgICB3YXJuISgiTWFya2VkIGNodW5rcyBmb3IgdW5leHBl Y3RlZCBpbmRleCBmaWxlIGF0ICd7cGF0aDo/fSciKTsKICAgICAgICAgfQogICAgICAgICBpZiBz dHJhbmdlX3BhdGhzX2NvdW50ID4gMCB7CkBAIC0xNDg0LDE4ICsxNTE0LDEwNCBAQCBpbXBsIERh dGFTdG9yZSB7CiAgICAgICAgICAgICAgICAgMTAyNCAqIDEwMjQKICAgICAgICAgICAgIH07CiAK LSAgICAgICAgICAgIGluZm8hKCJTdGFydCBHQyBwaGFzZTEgKG1hcmsgdXNlZCBjaHVua3MpIik7 CisgICAgICAgICAgICBsZXQgczNfY2xpZW50ID0gbWF0Y2ggc2VsZi5iYWNrZW5kKCk/IHsKKyAg ICAgICAgICAgICAgICBEYXRhc3RvcmVCYWNrZW5kOjpGaWxlc3lzdGVtID0+IE5vbmUsCisgICAg ICAgICAgICAgICAgRGF0YXN0b3JlQmFja2VuZDo6UzMoczNfY2xpZW50KSA9PiB7CisgICAgICAg ICAgICAgICAgICAgIHByb3htb3hfYXN5bmM6OnJ1bnRpbWU6OmJsb2NrX29uKHMzX2NsaWVudC5o ZWFkX2J1Y2tldCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgLmNvbnRleHQoImZhaWxlZCB0 byByZWFjaCBidWNrZXQiKT87CisgICAgICAgICAgICAgICAgICAgIFNvbWUoczNfY2xpZW50KQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIHNlbGYubWFy a191c2VkX2NodW5rcygmbXV0IGdjX3N0YXR1cywgd29ya2VyLCBnY19jYWNoZV9jYXBhY2l0eSkK LSAgICAgICAgICAgICAgICAuY29udGV4dCgibWFya2luZyB1c2VkIGNodW5rcyBmYWlsZWQiKT87 CisgICAgICAgICAgICBpbmZvISgiU3RhcnQgR0MgcGhhc2UxIChtYXJrIHVzZWQgY2h1bmtzKSIp OwogCi0gICAgICAgICAgICBpbmZvISgiU3RhcnQgR0MgcGhhc2UyIChzd2VlcCB1bnVzZWQgY2h1 bmtzKSIpOwotICAgICAgICAgICAgc2VsZi5pbm5lci5jaHVua19zdG9yZS5zd2VlcF91bnVzZWRf Y2h1bmtzKAotICAgICAgICAgICAgICAgIG9sZGVzdF93cml0ZXIsCi0gICAgICAgICAgICAgICAg bWluX2F0aW1lLAorICAgICAgICAgICAgc2VsZi5tYXJrX3VzZWRfY2h1bmtzKAogICAgICAgICAg ICAgICAgICZtdXQgZ2Nfc3RhdHVzLAogICAgICAgICAgICAgICAgIHdvcmtlciwKLSAgICAgICAg ICAgICk/OworICAgICAgICAgICAgICAgIGdjX2NhY2hlX2NhcGFjaXR5LAorICAgICAgICAgICAg ICAgIHMzX2NsaWVudC5hc19yZWYoKS5jbG9uZWQoKSwKKyAgICAgICAgICAgICkKKyAgICAgICAg ICAgIC5jb250ZXh0KCJtYXJraW5nIHVzZWQgY2h1bmtzIGZhaWxlZCIpPzsKKworICAgICAgICAg ICAgaW5mbyEoIlN0YXJ0IEdDIHBoYXNlMiAoc3dlZXAgdW51c2VkIGNodW5rcykiKTsKKworICAg ICAgICAgICAgaWYgbGV0IFNvbWUocmVmIHMzX2NsaWVudCkgPSBzM19jbGllbnQgeworICAgICAg ICAgICAgICAgIGxldCBtdXQgY2h1bmtfY291bnQgPSAwOworICAgICAgICAgICAgICAgIGxldCBw cmVmaXggPSBTM1BhdGhQcmVmaXg6OlNvbWUoIi5jaHVua3MvIi50b19zdHJpbmcoKSk7CisgICAg ICAgICAgICAgICAgLy8gT3BlcmF0ZXMgaW4gYmF0Y2hlcyBvZiAxMDAwIG9iamVjdHMgbWF4IHBl ciByZXF1ZXN0CisgICAgICAgICAgICAgICAgbGV0IG11dCBsaXN0X2J1Y2tldF9yZXN1bHQgPQor ICAgICAgICAgICAgICAgICAgICBwcm94bW94X2FzeW5jOjpydW50aW1lOjpibG9ja19vbihzM19j bGllbnQubGlzdF9vYmplY3RzX3YyKCZwcmVmaXgsIE5vbmUpKQorICAgICAgICAgICAgICAgICAg ICAgICAgLmNvbnRleHQoImZhaWxlZCB0byBsaXN0IGNodW5rIGluIHMzIG9iamVjdCBzdG9yZSIp PzsKKworICAgICAgICAgICAgICAgIGxldCBtdXQgZGVsZXRlX2xpc3QgPSBWZWM6OndpdGhfY2Fw YWNpdHkoMTAwMCk7CisgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAg IGxldCBsb2NrID0gc2VsZi5pbm5lci5jaHVua19zdG9yZS5tdXRleCgpLmxvY2soKS51bndyYXAo KTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgY29udGVudCBpbiBsaXN0X2J1Y2tldF9yZXN1 bHQuY29udGVudHMgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC5tYXJrX2NodW5rX2Zvcl9vYmplY3Rfa2V5KAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmY29udGVudC5rZXksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRlbnQuc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWluX2F0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRlc3Rfd3Jp dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXV0IGRlbGV0ZV9saXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXV0IGdjX3N0YXR1cywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhf Y29udGV4dCh8fCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCEoImZh aWxlZCB0byBtYXJrIGNodW5rIGZvciBvYmplY3Qga2V5IHt9IiwgY29udGVudC5rZXkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfSk/CisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfY291bnQgKz0gMTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg ICAgIGlmICFkZWxldGVfbGlzdC5pc19lbXB0eSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGxldCBkZWxldGVfb2JqZWN0c19yZXN1bHQgPSBwcm94bW94X2FzeW5jOjpydW50aW1lOjpibG9j a19vbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19jbGllbnQuZGVsZXRlX29iamVj dHMoJmRlbGV0ZV9saXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICk/OworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgbGV0IFNvbWUoX2VycikgPSBkZWxldGVfb2JqZWN0c19yZXN1bHQu ZXJyb3IgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhaWwhKCJmYWlsZWQgdG8gZGVs ZXRlIHNvbWUgb2JqZWN0cyIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgZGVsZXRlX2xpc3QuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAg fQorCisgICAgICAgICAgICAgICAgICAgIGRyb3AobG9jayk7CisKKyAgICAgICAgICAgICAgICAg ICAgLy8gUHJvY2VzcyBuZXh0IGJhdGNoIG9mIGNodW5rcyBpZiB0aGVyZSBpcyBtb3JlCisgICAg ICAgICAgICAgICAgICAgIGlmIGxpc3RfYnVja2V0X3Jlc3VsdC5pc190cnVuY2F0ZWQgeworICAg ICAgICAgICAgICAgICAgICAgICAgbGlzdF9idWNrZXRfcmVzdWx0ID0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcm94bW94X2FzeW5jOjpydW50aW1lOjpibG9ja19vbihzM19jbGllbnQu bGlzdF9vYmplY3RzX3YyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJlZml4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2J1Y2tldF9yZXN1bHQubmV4 dF9jb250aW51YXRpb25fdG9rZW4uYXNfZGVyZWYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICApKT87CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBpbmZvISgicHJvY2Vzc2VkIHtjaHVua19jb3VudH0gdG90YWwg Y2h1bmtzIik7CisKKyAgICAgICAgICAgICAgICAvLyBQaGFzZSAyIEdDIG9mIEZpbGVzeXN0ZW0g YmFja2VkIHN0b3JhZ2UgaXMgcGhhc2UgMyBmb3IgUzMgYmFja2VkIEdDCisgICAgICAgICAgICAg ICAgaW5mbyEoIlN0YXJ0IEdDIHBoYXNlMyAoc3dlZXAgdW51c2VkIGNodW5rIG1hcmtlcnMpIik7 CisKKyAgICAgICAgICAgICAgICBsZXQgbXV0IHRtcF9nY19zdGF0dXMgPSBHYXJiYWdlQ29sbGVj dGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAgICAgIHVwaWQ6IFNvbWUodXBpZC50b19zdHJp bmcoKSksCisgICAgICAgICAgICAgICAgICAgIC4uRGVmYXVsdDo6ZGVmYXVsdCgpCisgICAgICAg ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBzZWxmLmlubmVyLmNodW5rX3N0b3JlLnN3ZWVw X3VudXNlZF9jaHVua3MoCisgICAgICAgICAgICAgICAgICAgIG9sZGVzdF93cml0ZXIsCisgICAg ICAgICAgICAgICAgICAgIG1pbl9hdGltZSwKKyAgICAgICAgICAgICAgICAgICAgJm11dCB0bXBf Z2Nfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICB3b3JrZXIsCisgICAgICAgICAgICAgICAg KT87CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlbGYuaW5uZXIuY2h1 bmtfc3RvcmUuc3dlZXBfdW51c2VkX2NodW5rcygKKyAgICAgICAgICAgICAgICAgICAgb2xkZXN0 X3dyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgbWluX2F0aW1lLAorICAgICAgICAgICAgICAg ICAgICAmbXV0IGdjX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyLAorICAgICAg ICAgICAgICAgICk/OworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiBsZXQgU29tZShj YWNoZV9zdGF0cykgPSAmZ2Nfc3RhdHVzLmNhY2hlX3N0YXRzIHsKICAgICAgICAgICAgICAgICBs ZXQgdG90YWxfY2FjaGVfY291bnRzID0gY2FjaGVfc3RhdHMuaGl0cyArIGNhY2hlX3N0YXRzLm1p c3NlczsKQEAgLTE1ODIsNiArMTY5OCw5MCBAQCBpbXBsIERhdGFTdG9yZSB7CiAgICAgICAgIE9r KCgpKQogICAgIH0KIAorICAgIC8vIE1hcmsgdGhlIGNodW5rIG1hcmtlciBpbiB0aGUgbG9jYWwg Y2FjaGUgc3RvcmUgZm9yIHRoZSBnaXZlbiBvYmplY3Qga2V5IGFzIGluIHVzZQorICAgIC8vIGJ5 IHVwZGF0aW5nIGl0J3MgYXRpbWUuCisgICAgLy8gUmV0dXJucyBPayh0cnVlKSBpZiB0aGUgY2h1 bmsgd2FzIHVwZGF0ZWQgYW5kIE9rKGZhbHNlKSBpZiB0aGUgb2JqZWN0IHdhcyBub3QgYSBjaHVu ay4KKyAgICBmbiBtYXJrX2NodW5rX2Zvcl9vYmplY3Rfa2V5KAorICAgICAgICAmc2VsZiwKKyAg ICAgICAgb2JqZWN0X2tleTogJlMzT2JqZWN0S2V5LAorICAgICAgICBzaXplOiB1NjQsCisgICAg ICAgIG1pbl9hdGltZTogaTY0LAorICAgICAgICBvbGRlc3Rfd3JpdGVyOiBpNjQsCisgICAgICAg IGRlbGV0ZV9saXN0OiAmbXV0IFZlYzxTM09iamVjdEtleT4sCisgICAgICAgIGdjX3N0YXR1czog Jm11dCBHYXJiYWdlQ29sbGVjdGlvblN0YXR1cywKKyAgICApIC0+IFJlc3VsdDxib29sLCBFcnJv cj4geworICAgICAgICBsZXQgY2h1bmtfcGF0aCA9IG1hdGNoIHNlbGYuY2h1bmtfcGF0aF9mcm9t X29iamVjdF9rZXkoJm9iamVjdF9rZXkpIHsKKyAgICAgICAgICAgIFNvbWUocGF0aCkgPT4gcGF0 aCwKKyAgICAgICAgICAgIE5vbmUgPT4gcmV0dXJuIE9rKGZhbHNlKSwKKyAgICAgICAgfTsKKwor ICAgICAgICAvLyBDaGVjayBsb2NhbCBtYXJrZXJzIChjcmVhdGVkIG9yIGF0aW1lIHVwZGF0ZWQg ZHVyaW5nIHBoYXNlMSkgYW5kCisgICAgICAgIC8vIGtlZXAgb3IgZGVsZXRlIGNodW5rIGJhc2Vk IG9uIHRoYXQuCisgICAgICAgIGxldCBhdGltZSA9IG1hdGNoIHN0ZDo6ZnM6Om1ldGFkYXRhKCZj aHVua19wYXRoKSB7CisgICAgICAgICAgICBPayhzdGF0KSA9PiBzdGF0LmFjY2Vzc2VkKCk/LAor ICAgICAgICAgICAgRXJyKGVycikgaWYgZXJyLmtpbmQoKSA9PSBzdGQ6OmlvOjpFcnJvcktpbmQ6 Ok5vdEZvdW5kID0+IHsKKyAgICAgICAgICAgICAgICAvLyBGaWxlIG5vdCBmb3VuZCwgZGVsZXRl IGJ5IHNldHRpbmcgYXRpbWUgdG8gdW5peCBlcG9jaAorICAgICAgICAgICAgICAgIGluZm8hKCJO b3QgZm91bmQsIG1hcmsgZm9yIGRlbGV0aW9uOiB7b2JqZWN0X2tleX0iKTsKKyAgICAgICAgICAg ICAgICBTeXN0ZW1UaW1lOjpVTklYX0VQT0NICisgICAgICAgICAgICB9CisgICAgICAgICAgICBF cnIoZXJyKSA9PiByZXR1cm4gRXJyKGVyci5pbnRvKCkpLAorICAgICAgICB9OworICAgICAgICBs ZXQgYXRpbWUgPSBhdGltZS5kdXJhdGlvbl9zaW5jZShTeXN0ZW1UaW1lOjpVTklYX0VQT0NIKT8u YXNfc2VjcygpIGFzIGk2NDsKKworICAgICAgICBsZXQgYmFkID0gY2h1bmtfcGF0aC5hc19wYXRo KCkuZW5kc193aXRoKCIuYmFkIik7CisKKyAgICAgICAgaWYgYXRpbWUgPCBtaW5fYXRpbWUgewor ICAgICAgICAgICAgZGVsZXRlX2xpc3QucHVzaChvYmplY3Rfa2V5LmNsb25lKCkpOworICAgICAg ICAgICAgaWYgYmFkIHsKKyAgICAgICAgICAgICAgICBnY19zdGF0dXMucmVtb3ZlZF9iYWQgKz0g MTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZ2Nfc3RhdHVzLnJlbW92 ZWRfY2h1bmtzICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnY19zdGF0dXMucmVt b3ZlZF9ieXRlcyArPSBzaXplOworICAgICAgICB9IGVsc2UgaWYgYXRpbWUgPCBvbGRlc3Rfd3Jp dGVyIHsKKyAgICAgICAgICAgIGlmIGJhZCB7CisgICAgICAgICAgICAgICAgZ2Nfc3RhdHVzLnN0 aWxsX2JhZCArPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBnY19z dGF0dXMucGVuZGluZ19jaHVua3MgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdj X3N0YXR1cy5wZW5kaW5nX2J5dGVzICs9IHNpemU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBpZiAhYmFkIHsKKyAgICAgICAgICAgICAgICBnY19zdGF0dXMuZGlza19jaHVua3MgKz0g MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdjX3N0YXR1cy5kaXNrX2J5dGVzICs9IHNp emU7CisgICAgICAgIH0KKworICAgICAgICBPayh0cnVlKQorICAgIH0KKworICAgIC8vIENoZWNr IGFuZCBnZW5lcmF0ZSBhIGNodW5rIHBhdGggZnJvbSBnaXZlbiBvYmplY3Qga2V5CisgICAgZm4g Y2h1bmtfcGF0aF9mcm9tX29iamVjdF9rZXkoJnNlbGYsIG9iamVjdF9rZXk6ICZTM09iamVjdEtl eSkgLT4gT3B0aW9uPFBhdGhCdWY+IHsKKyAgICAgICAgLy8gQ2hlY2sgb2JqZWN0IGlzIGFjdHVh bGx5IGEgY2h1bmsKKyAgICAgICAgbGV0IGRpZ2VzdCA9IG1hdGNoIFBhdGg6Om5ldzo6PHN0cj4o b2JqZWN0X2tleSkuZmlsZV9uYW1lKCkgeworICAgICAgICAgICAgU29tZShmaWxlX25hbWUpID0+ IGZpbGVfbmFtZSwKKyAgICAgICAgICAgIC8vIHNob3VsZCBuZXZlciBiZSB0aGUgY2FzZSBhcyBv YmplY3RzIHdpbGwgaGF2ZSBhIGZpbGVuYW1lCisgICAgICAgICAgICBOb25lID0+IHJldHVybiBO b25lLAorICAgICAgICB9OworICAgICAgICBsZXQgYnl0ZXMgPSBkaWdlc3QuYXNfYnl0ZXMoKTsK KyAgICAgICAgaWYgYnl0ZXMubGVuKCkgIT0gNjQgJiYgYnl0ZXMubGVuKCkgIT0gNjQgKyAiLjAu YmFkIi5sZW4oKSB7CisgICAgICAgICAgICByZXR1cm4gTm9uZTsKKyAgICAgICAgfQorICAgICAg ICBpZiAhYnl0ZXMuaXRlcigpLnRha2UoNjQpLmFsbCh1ODo6aXNfYXNjaWlfaGV4ZGlnaXQpIHsK KyAgICAgICAgICAgIHJldHVybiBOb25lOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2FmZSBz aW5jZSBjb250YWlucyB2YWxpZCBhc2NpaSBoZXhkaWdpdHMgb25seSBhcyBjaGVja2VkIGFib3Zl LgorICAgICAgICBsZXQgZGlnZXN0X3N0ciA9IGRpZ2VzdC50b19zdHJpbmdfbG9zc3koKTsKKyAg ICAgICAgbGV0IGhleGRpZ2l0X3ByZWZpeCA9IHVuc2FmZSB7IGRpZ2VzdF9zdHIuZ2V0X3VuY2hl Y2tlZCgwLi40KSB9OworICAgICAgICBsZXQgbXV0IGNodW5rX3BhdGggPSBzZWxmLmJhc2VfcGF0 aCgpOworICAgICAgICBjaHVua19wYXRoLnB1c2goIi5jaHVua3MiKTsKKyAgICAgICAgY2h1bmtf cGF0aC5wdXNoKGhleGRpZ2l0X3ByZWZpeCk7CisgICAgICAgIGNodW5rX3BhdGgucHVzaChkaWdl c3QpOworCisgICAgICAgIFNvbWUoY2h1bmtfcGF0aCkKKyAgICB9CisKICAgICBwdWIgZm4gdHJ5 X3NoYXJlZF9jaHVua19zdG9yZV9sb2NrKCZzZWxmKSAtPiBSZXN1bHQ8UHJvY2Vzc0xvY2tTaGFy ZWRHdWFyZCwgRXJyb3I+IHsKICAgICAgICAgc2VsZi5pbm5lci5jaHVua19zdG9yZS50cnlfc2hh cmVkX2xvY2soKQogICAgIH0KLS0gCjIuNDcuMgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpwYnMtZGV2ZWwgbWFpbGluZyBsaXN0CnBicy1kZXZlbEBs aXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1h bi9saXN0aW5mby9wYnMtZGV2ZWwK