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 7E8D01FF16B for ; Tue, 15 Jul 2025 14:53:51 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 555813BEBF; Tue, 15 Jul 2025 14:54:22 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Tue, 15 Jul 2025 14:53:09 +0200 Message-ID: <20250715125332.954494-32-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250715125332.954494-1-c.ebner@proxmox.com> References: <20250715125332.954494-1-c.ebner@proxmox.com> MIME-Version: 1.0 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 RCVD_IN_MSPIKE_H2 0.001 Average reputation (+2) 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 v8 22/45] 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 bmVkLW9mZi1ieTogQ2hyaXN0aWFuIEVibmVyIDxjLmVibmVyQHByb3htb3guY29tPgotLS0KY2hh bmdlcyBzaW5jZSB2ZXJzaW9uIDc6Ci0gbm8gY2hhbmdlcwoKIHBicy1kYXRhc3RvcmUvc3JjL2No dW5rX3N0b3JlLnJzIHwgICA0ICsKIHBicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycyAgIHwg MjExICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTkw IGluc2VydGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Bicy1kYXRhc3Rv cmUvc3JjL2NodW5rX3N0b3JlLnJzIGIvcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMK aW5kZXggOGMxOTVkZjU0Li45NWYwMGU4ZDUgMTAwNjQ0Ci0tLSBhL3Bicy1kYXRhc3RvcmUvc3Jj L2NodW5rX3N0b3JlLnJzCisrKyBiL3Bicy1kYXRhc3RvcmUvc3JjL2NodW5rX3N0b3JlLnJzCkBA IC0zNTMsNiArMzUzLDEwIEBAIGltcGwgQ2h1bmtTdG9yZSB7CiAgICAgICAgIFByb2Nlc3NMb2Nr ZXI6Om9sZGVzdF9zaGFyZWRfbG9jayhzZWxmLmxvY2tlci5jbG9uZSgpLnVud3JhcCgpKQogICAg IH0KIAorICAgIHB1YiBmbiBtdXRleCgmc2VsZikgLT4gJnN0ZDo6c3luYzo6TXV0ZXg8KCk+IHsK KyAgICAgICAgJnNlbGYubXV0ZXgKKyAgICB9CisKICAgICBwdWIgZm4gc3dlZXBfdW51c2VkX2No dW5rcygKICAgICAgICAgJnNlbGYsCiAgICAgICAgIG9sZGVzdF93cml0ZXI6IGk2NCwKZGlmZiAt LWdpdCBhL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycyBiL3Bicy1kYXRhc3RvcmUvc3Jj L2RhdGFzdG9yZS5ycwppbmRleCBjYTA5OWMxZDAuLjZjYzdmZGJhYSAxMDA2NDQKLS0tIGEvcGJz LWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzCisrKyBiL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFz dG9yZS5ycwpAQCAtNCw3ICs0LDcgQEAgdXNlIHN0ZDo6b3M6OnVuaXg6OmZmaTo6T3NTdHJFeHQ7 CiB1c2Ugc3RkOjpvczo6dW5peDo6aW86OkFzUmF3RmQ7CiB1c2Ugc3RkOjpwYXRoOjp7UGF0aCwg UGF0aEJ1Zn07CiB1c2Ugc3RkOjpzeW5jOjp7QXJjLCBMYXp5TG9jaywgTXV0ZXh9OwotdXNlIHN0 ZDo6dGltZTo6RHVyYXRpb247Cit1c2Ugc3RkOjp0aW1lOjp7RHVyYXRpb24sIFN5c3RlbVRpbWV9 OwogCiB1c2UgYW55aG93Ojp7YmFpbCwgZm9ybWF0X2VyciwgQ29udGV4dCwgRXJyb3J9OwogdXNl IGh0dHBfYm9keV91dGlsOjpCb2R5RXh0OwpAQCAtMTIwOSw2ICsxMjA5LDcgQEAgaW1wbCBEYXRh U3RvcmUgewogICAgICAgICBjaHVua19scnVfY2FjaGU6ICZtdXQgT3B0aW9uPExydUNhY2hlPFt1 ODsgMzJdLCAoKT4+LAogICAgICAgICBzdGF0dXM6ICZtdXQgR2FyYmFnZUNvbGxlY3Rpb25TdGF0 dXMsCiAgICAgICAgIHdvcmtlcjogJmR5biBXb3JrZXJUYXNrQ29udGV4dCwKKyAgICAgICAgczNf Y2xpZW50OiBPcHRpb248QXJjPFMzQ2xpZW50Pj4sCiAgICAgKSAtPiBSZXN1bHQ8KCksIEVycm9y PiB7CiAgICAgICAgIHN0YXR1cy5pbmRleF9maWxlX2NvdW50ICs9IDE7CiAgICAgICAgIHN0YXR1 cy5pbmRleF9kYXRhX2J5dGVzICs9IGluZGV4LmluZGV4X2J5dGVzKCk7CkBAIC0xMjI1LDIxICsx MjI2LDQxIEBAIGltcGwgRGF0YVN0b3JlIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICB9CiAKLSAgICAgICAgICAgIGlmICFzZWxmLmlubmVyLmNodW5rX3N0b3JlLmNvbmRfdG91Y2hf Y2h1bmsoZGlnZXN0LCBmYWxzZSk/IHsKLSAgICAgICAgICAgICAgICBsZXQgaGV4ID0gaGV4Ojpl bmNvZGUoZGlnZXN0KTsKLSAgICAgICAgICAgICAgICB3YXJuISgKLSAgICAgICAgICAgICAgICAg ICAgIndhcm5pbmc6IHVuYWJsZSB0byBhY2Nlc3Mgbm9uLWV4aXN0ZW50IGNodW5rIHtoZXh9LCBy ZXF1aXJlZCBieSB7ZmlsZV9uYW1lOj99IgotICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAg ICAgICAgICAvLyB0b3VjaCBhbnkgY29ycmVzcG9uZGluZyAuYmFkIGZpbGVzIHRvIGtlZXAgdGhl bSBhcm91bmQsIG1lYW5pbmcgaWYgYSBjaHVuayBpcwotICAgICAgICAgICAgICAgIC8vIHJld3Jp dHRlbiBjb3JyZWN0bHkgdGhleSB3aWxsIGJlIHJlbW92ZWQgYXV0b21hdGljYWxseSwgYXMgd2Vs bCBhcyBpZiBubyBpbmRleAotICAgICAgICAgICAgICAgIC8vIGZpbGUgcmVxdWlyZXMgdGhlIGNo dW5rIGFueW1vcmUgKHdvbid0IGdldCB0byB0aGlzIGxvb3AgdGhlbikKLSAgICAgICAgICAgICAg ICBmb3IgaSBpbiAwLi49OSB7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBiYWRfZXh0ID0gZm9y bWF0ISgie30uYmFkIiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBtdXQgYmFkX3BhdGgg PSBQYXRoQnVmOjpuZXcoKTsKLSAgICAgICAgICAgICAgICAgICAgYmFkX3BhdGgucHVzaChzZWxm LmNodW5rX3BhdGgoZGlnZXN0KS4wKTsKLSAgICAgICAgICAgICAgICAgICAgYmFkX3BhdGguc2V0 X2V4dGVuc2lvbihiYWRfZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5pbm5lci5jaHVu a19zdG9yZS5jb25kX3RvdWNoX3BhdGgoJmJhZF9wYXRoLCBmYWxzZSk/OworICAgICAgICAgICAg bWF0Y2ggczNfY2xpZW50IHsKKyAgICAgICAgICAgICAgICBOb25lID0+IHsKKyAgICAgICAgICAg ICAgICAgICAgLy8gRmlsZXN5c3RlbSBiYWNrZW5kCisgICAgICAgICAgICAgICAgICAgIGlmICFz ZWxmLmlubmVyLmNodW5rX3N0b3JlLmNvbmRfdG91Y2hfY2h1bmsoZGlnZXN0LCBmYWxzZSk/IHsK KyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoZXggPSBoZXg6OmVuY29kZShkaWdlc3QpOwor ICAgICAgICAgICAgICAgICAgICAgICAgd2FybiEoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIndhcm5pbmc6IHVuYWJsZSB0byBhY2Nlc3Mgbm9uLWV4aXN0ZW50IGNodW5rIHtoZXh9LCBy ZXF1aXJlZCBieSB7ZmlsZV9uYW1lOj99IgorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwor ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG91Y2ggYW55IGNvcnJlc3BvbmRpbmcgLmJhZCBm aWxlcyB0byBrZWVwIHRoZW0gYXJvdW5kLCBtZWFuaW5nIGlmIGEgY2h1bmsgaXMKKyAgICAgICAg ICAgICAgICAgICAgICAgIC8vIHJld3JpdHRlbiBjb3JyZWN0bHkgdGhleSB3aWxsIGJlIHJlbW92 ZWQgYXV0b21hdGljYWxseSwgYXMgd2VsbCBhcyBpZiBubyBpbmRleAorICAgICAgICAgICAgICAg ICAgICAgICAgLy8gZmlsZSByZXF1aXJlcyB0aGUgY2h1bmsgYW55bW9yZSAod29uJ3QgZ2V0IHRv IHRoaXMgbG9vcCB0aGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gMC4uPTkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiYWRfZXh0ID0gZm9ybWF0ISgie30u YmFkIiwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG11dCBiYWRfcGF0aCA9 IFBhdGhCdWY6Om5ldygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZF9wYXRoLnB1 c2goc2VsZi5jaHVua19wYXRoKGRpZ2VzdCkuMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYmFkX3BhdGguc2V0X2V4dGVuc2lvbihiYWRfZXh0KTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZWxmLmlubmVyLmNodW5rX3N0b3JlLmNvbmRfdG91Y2hfcGF0aCgmYmFkX3BhdGgs IGZhbHNlKT87CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU29tZShyZWYgX3MzX2NsaWVu dCkgPT4geworICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgYXRpbWUgb24gbG9jYWwgY2Fj aGUgbWFya2VyIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBpZiAhc2VsZi5pbm5lci5jaHVu a19zdG9yZS5jb25kX3RvdWNoX2NodW5rKGRpZ2VzdCwgZmFsc2UpPyB7CisgICAgICAgICAgICAg ICAgICAgICAgICBsZXQgKGNodW5rX3BhdGgsIF9kaWdlc3QpID0gc2VsZi5jaHVua19wYXRoKGRp Z2VzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgZW1wdHkgZmlsZSBhcyBt YXJrZXIgdG8gdGVsbCBHQyBwaGFzZTIgdGhhdCB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAg ICAgICAvLyBhIGNodW5rIHN0aWxsIGluLXVzZSwgc28gdG8ga2VlcCBpbiB0aGUgUzMgb2JqZWN0 IHN0b3JlLgorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpmczo6RmlsZTo6b3B0aW9ucygp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndyaXRlKHRydWUpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLmNyZWF0ZV9uZXcodHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAub3BlbigmY2h1bmtfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0 aF9jb250ZXh0KHx8IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ISgi ZmFpbGVkIHRvIGNyZWF0ZSBtYXJrZXIgZm9yIGNodW5rIHt9IiwgaGV4OjplbmNvZGUoZGlnZXN0 KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KT87CisgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEyNTEs NiArMTI3Miw3IEBAIGltcGwgRGF0YVN0b3JlIHsKICAgICAgICAgc3RhdHVzOiAmbXV0IEdhcmJh Z2VDb2xsZWN0aW9uU3RhdHVzLAogICAgICAgICB3b3JrZXI6ICZkeW4gV29ya2VyVGFza0NvbnRl eHQsCiAgICAgICAgIGNhY2hlX2NhcGFjaXR5OiB1c2l6ZSwKKyAgICAgICAgczNfY2xpZW50OiBP cHRpb248QXJjPFMzQ2xpZW50Pj4sCiAgICAgKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CiAgICAg ICAgIC8vIEl0ZXJhdGUgdHdpY2Ugb3ZlciB0aGUgZGF0YXN0b3JlIHRvIGZldGNoIGluZGV4IGZp bGVzLCBldmVuIGlmIHRoaXMgY29tZXMgd2l0aCBhbgogICAgICAgICAvLyBhZGRpdGlvbmFsIHJ1 bnRpbWUgY29zdDoKQEAgLTEzNDQsNiArMTM2Niw3IEBAIGltcGwgRGF0YVN0b3JlIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm11dCBjaHVua19scnVfY2FjaGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd29ya2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19jbGll bnQuYXNfcmVmKCkuY2xvbmVkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT87CiAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAhdW5wcm9jZXNzZWRfaW5kZXhfbGlzdC5y ZW1vdmUoJnBhdGgpIHsKQEAgLTEzNzgsNyArMTQwMSwxNCBAQCBpbXBsIERhdGFTdG9yZSB7CiAg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgIH07Ci0gICAgICAgICAgICBzZWxmLmluZGV4X21hcmtfdXNlZF9jaHVua3MoaW5kZXgsICZw YXRoLCAmbXV0IGNodW5rX2xydV9jYWNoZSwgc3RhdHVzLCB3b3JrZXIpPzsKKyAgICAgICAgICAg IHNlbGYuaW5kZXhfbWFya191c2VkX2NodW5rcygKKyAgICAgICAgICAgICAgICBpbmRleCwKKyAg ICAgICAgICAgICAgICAmcGF0aCwKKyAgICAgICAgICAgICAgICAmbXV0IGNodW5rX2xydV9jYWNo ZSwKKyAgICAgICAgICAgICAgICBzdGF0dXMsCisgICAgICAgICAgICAgICAgd29ya2VyLAorICAg ICAgICAgICAgICAgIHMzX2NsaWVudC5hc19yZWYoKS5jbG9uZWQoKSwKKyAgICAgICAgICAgICk/ OwogICAgICAgICAgICAgd2FybiEoIk1hcmtlZCBjaHVua3MgZm9yIHVuZXhwZWN0ZWQgaW5kZXgg ZmlsZSBhdCAne3BhdGg6P30nIik7CiAgICAgICAgIH0KICAgICAgICAgaWYgc3RyYW5nZV9wYXRo c19jb3VudCA+IDAgewpAQCAtMTQ3NiwxOCArMTUwNiwxNDkgQEAgaW1wbCBEYXRhU3RvcmUgewog ICAgICAgICAgICAgICAgIDEwMjQgKiAxMDI0CiAgICAgICAgICAgICB9OwogCi0gICAgICAgICAg ICBpbmZvISgiU3RhcnQgR0MgcGhhc2UxIChtYXJrIHVzZWQgY2h1bmtzKSIpOworICAgICAgICAg ICAgbGV0IHMzX2NsaWVudCA9IG1hdGNoIHNlbGYuYmFja2VuZCgpPyB7CisgICAgICAgICAgICAg ICAgRGF0YXN0b3JlQmFja2VuZDo6RmlsZXN5c3RlbSA9PiBOb25lLAorICAgICAgICAgICAgICAg IERhdGFzdG9yZUJhY2tlbmQ6OlMzKHMzX2NsaWVudCkgPT4geworICAgICAgICAgICAgICAgICAg ICBwcm94bW94X2FzeW5jOjpydW50aW1lOjpibG9ja19vbihzM19jbGllbnQuaGVhZF9idWNrZXQo KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5jb250ZXh0KCJmYWlsZWQgdG8gcmVhY2ggYnVj a2V0Iik/OworICAgICAgICAgICAgICAgICAgICBTb21lKHMzX2NsaWVudCkKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBzZWxmLm1hcmtfdXNlZF9jaHVu a3MoJm11dCBnY19zdGF0dXMsIHdvcmtlciwgZ2NfY2FjaGVfY2FwYWNpdHkpCi0gICAgICAgICAg ICAgICAgLmNvbnRleHQoIm1hcmtpbmcgdXNlZCBjaHVua3MgZmFpbGVkIik/OworICAgICAgICAg ICAgaW5mbyEoIlN0YXJ0IEdDIHBoYXNlMSAobWFyayB1c2VkIGNodW5rcykiKTsKIAotICAgICAg ICAgICAgaW5mbyEoIlN0YXJ0IEdDIHBoYXNlMiAoc3dlZXAgdW51c2VkIGNodW5rcykiKTsKLSAg ICAgICAgICAgIHNlbGYuaW5uZXIuY2h1bmtfc3RvcmUuc3dlZXBfdW51c2VkX2NodW5rcygKLSAg ICAgICAgICAgICAgICBvbGRlc3Rfd3JpdGVyLAotICAgICAgICAgICAgICAgIG1pbl9hdGltZSwK KyAgICAgICAgICAgIHNlbGYubWFya191c2VkX2NodW5rcygKICAgICAgICAgICAgICAgICAmbXV0 IGdjX3N0YXR1cywKICAgICAgICAgICAgICAgICB3b3JrZXIsCi0gICAgICAgICAgICApPzsKKyAg ICAgICAgICAgICAgICBnY19jYWNoZV9jYXBhY2l0eSwKKyAgICAgICAgICAgICAgICBzM19jbGll bnQuYXNfcmVmKCkuY2xvbmVkKCksCisgICAgICAgICAgICApCisgICAgICAgICAgICAuY29udGV4 dCgibWFya2luZyB1c2VkIGNodW5rcyBmYWlsZWQiKT87CisKKyAgICAgICAgICAgIGluZm8hKCJT dGFydCBHQyBwaGFzZTIgKHN3ZWVwIHVudXNlZCBjaHVua3MpIik7CisKKyAgICAgICAgICAgIGlm IGxldCBTb21lKHJlZiBzM19jbGllbnQpID0gczNfY2xpZW50IHsKKyAgICAgICAgICAgICAgICBs ZXQgbXV0IGNodW5rX2NvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBsZXQgcHJlZml4ID0gUzNQ YXRoUHJlZml4OjpTb21lKCIuY2h1bmtzLyIudG9fc3RyaW5nKCkpOworICAgICAgICAgICAgICAg IC8vIE9wZXJhdGVzIGluIGJhdGNoZXMgb2YgMTAwMCBvYmplY3RzIG1heCBwZXIgcmVxdWVzdAor ICAgICAgICAgICAgICAgIGxldCBtdXQgbGlzdF9idWNrZXRfcmVzdWx0ID0KKyAgICAgICAgICAg ICAgICAgICAgcHJveG1veF9hc3luYzo6cnVudGltZTo6YmxvY2tfb24oczNfY2xpZW50Lmxpc3Rf b2JqZWN0c192MigmcHJlZml4LCBOb25lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5jb250 ZXh0KCJmYWlsZWQgdG8gbGlzdCBjaHVuayBpbiBzMyBvYmplY3Qgc3RvcmUiKT87CisKKyAgICAg ICAgICAgICAgICBsZXQgbXV0IGRlbGV0ZV9saXN0ID0gVmVjOjp3aXRoX2NhcGFjaXR5KDEwMDAp OworICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICBsZXQgbG9jayA9 IHNlbGYuaW5uZXIuY2h1bmtfc3RvcmUubXV0ZXgoKS5sb2NrKCkudW53cmFwKCk7CisKKyAgICAg ICAgICAgICAgICAgICAgZm9yIGNvbnRlbnQgaW4gbGlzdF9idWNrZXRfcmVzdWx0LmNvbnRlbnRz IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIG9iamVjdCBpcyBhY3R1YWxseSBh IGNodW5rCisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGlnZXN0ID0gbWF0Y2ggUGF0aDo6 bmV3Ojo8c3RyPigmY29udGVudC5rZXkpLmZpbGVfbmFtZSgpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTb21lKGZpbGVfbmFtZSkgPT4gZmlsZV9uYW1lLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIHNob3VsZCBuZXZlciBiZSB0aGUgY2FzZSBhcyBvYmplY3RzIHdpbGwg aGF2ZSBhIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiBjb250 aW51ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAg ICBsZXQgYnl0ZXMgPSBkaWdlc3QuYXNfYnl0ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIGJ5dGVzLmxlbigpICE9IDY0ICYmIGJ5dGVzLmxlbigpICE9IDY0ICsgIi4wLmJhZCIubGVu KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgIWJ5dGVzLml0ZXIoKS50 YWtlKDY0KS5hbGwodTg6OmlzX2FzY2lpX2hleGRpZ2l0KSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgICAgICAgICAgICAgIGxldCBiYWQgPSBieXRlcy5lbmRzX3dpdGgoYiIuYmFkIik7CisKKyAg ICAgICAgICAgICAgICAgICAgICAgIC8vIFNhZmUgc2luY2UgY29udGFpbnMgdmFsaWQgYXNjaWkg aGV4ZGlnaXRzIG9ubHkgYXMgY2hlY2tlZCBhYm92ZS4KKyAgICAgICAgICAgICAgICAgICAgICAg IGxldCBkaWdlc3Rfc3RyID0gZGlnZXN0LnRvX3N0cmluZ19sb3NzeSgpOworICAgICAgICAgICAg ICAgICAgICAgICAgbGV0IGhleGRpZ2l0X3ByZWZpeCA9IHVuc2FmZSB7IGRpZ2VzdF9zdHIuZ2V0 X3VuY2hlY2tlZCgwLi40KSB9OworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG11dCBjaHVu a19wYXRoID0gc2VsZi5iYXNlX3BhdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5r X3BhdGgucHVzaCgiLmNodW5rcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfcGF0 aC5wdXNoKGhleGRpZ2l0X3ByZWZpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVua19w YXRoLnB1c2goZGlnZXN0KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgbG9j YWwgbWFya2VycyAoY3JlYXRlZCBvciBhdGltZSB1cGRhdGVkIGR1cmluZyBwaGFzZTEpIGFuZAor ICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCBvciBkZWxldGUgY2h1bmsgYmFzZWQgb24g dGhhdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhdGltZSA9IG1hdGNoIHN0ZDo6ZnM6 Om1ldGFkYXRhKGNodW5rX3BhdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPayhz dGF0KSA9PiBzdGF0LmFjY2Vzc2VkKCk/LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVy cihlcnIpIGlmIGVyci5raW5kKCkgPT0gc3RkOjppbzo6RXJyb3JLaW5kOjpOb3RGb3VuZCA9PiB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbGUgbm90IGZvdW5kLCBkZWxl dGUgYnkgc2V0dGluZyBhdGltZSB0byB1bml4IGVwb2NoCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluZm8hKCJOb3QgZm91bmQsIG1hcmsgZm9yIGRlbGV0aW9uOiB7fSIsIGNvbnRl bnQua2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtVGltZTo6VU5J WF9FUE9DSAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFcnIoZXJyKSA9PiByZXR1cm4gRXJyKGVyci5pbnRvKCkpLAorICAgICAgICAg ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhdGltZSA9IGF0 aW1lLmR1cmF0aW9uX3NpbmNlKFN5c3RlbVRpbWU6OlVOSVhfRVBPQ0gpPy5hc19zZWNzKCkgYXMg aTY0OworCisgICAgICAgICAgICAgICAgICAgICAgICBjaHVua19jb3VudCArPSAxOworCisgICAg ICAgICAgICAgICAgICAgICAgICBpZiBhdGltZSA8IG1pbl9hdGltZSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVsZXRlX2xpc3QucHVzaChjb250ZW50LmtleSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgYmFkIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2Nfc3RhdHVzLnJlbW92ZWRfYmFkICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Nfc3RhdHVzLnJl bW92ZWRfY2h1bmtzICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdjX3N0YXR1cy5yZW1vdmVkX2J5dGVzICs9IGNvbnRlbnQu c2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiBhdGltZSA8IG9sZGVzdF93 cml0ZXIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJhZCB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdjX3N0YXR1cy5zdGlsbF9iYWQgKz0gMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnY19zdGF0dXMucGVuZGluZ19jaHVua3MgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Nfc3RhdHVzLnBlbmRpbmdf Ynl0ZXMgKz0gY29udGVudC5zaXplOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAhYmFkIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2Nfc3RhdHVzLmRpc2tfY2h1bmtzICs9IDE7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjX3N0YXR1cy5k aXNrX2J5dGVzICs9IGNvbnRlbnQuc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICFkZWxldGVfbGlz dC5pc19lbXB0eSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZWxldGVfb2JqZWN0 c19yZXN1bHQgPSBwcm94bW94X2FzeW5jOjpydW50aW1lOjpibG9ja19vbigKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzM19jbGllbnQuZGVsZXRlX29iamVjdHMoJmRlbGV0ZV9saXN0KSwK KyAgICAgICAgICAgICAgICAgICAgICAgICk/OworICAgICAgICAgICAgICAgICAgICAgICAgaWYg bGV0IFNvbWUoX2VycikgPSBkZWxldGVfb2JqZWN0c19yZXN1bHQuZXJyb3IgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJhaWwhKCJmYWlsZWQgdG8gZGVsZXRlIHNvbWUgb2JqZWN0cyIp OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVs ZXRlX2xpc3QuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg ICAgICAgIGRyb3AobG9jayk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBuZXh0 IGJhdGNoIG9mIGNodW5rcyBpZiB0aGVyZSBpcyBtb3JlCisgICAgICAgICAgICAgICAgICAgIGlm IGxpc3RfYnVja2V0X3Jlc3VsdC5pc190cnVuY2F0ZWQgeworICAgICAgICAgICAgICAgICAgICAg ICAgbGlzdF9idWNrZXRfcmVzdWx0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94 bW94X2FzeW5jOjpydW50aW1lOjpibG9ja19vbihzM19jbGllbnQubGlzdF9vYmplY3RzX3YyKAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJlZml4LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaXN0X2J1Y2tldF9yZXN1bHQubmV4dF9jb250aW51YXRpb25fdG9r ZW4uYXNfZGVyZWYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApKT87CisgICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBpbmZvISgicHJvY2Vzc2VkIHtjaHVua19jb3VudH0gdG90YWwgY2h1bmtzIik7CisKKyAgICAg ICAgICAgICAgICAvLyBQaGFzZSAyIEdDIG9mIEZpbGVzeXN0ZW0gYmFja2VkIHN0b3JhZ2UgaXMg cGhhc2UgMyBmb3IgUzMgYmFja2VkIEdDCisgICAgICAgICAgICAgICAgaW5mbyEoIlN0YXJ0IEdD IHBoYXNlMyAoc3dlZXAgdW51c2VkIGNodW5rIG1hcmtlcnMpIik7CisKKyAgICAgICAgICAgICAg ICBsZXQgbXV0IHRtcF9nY19zdGF0dXMgPSBHYXJiYWdlQ29sbGVjdGlvblN0YXR1cyB7CisgICAg ICAgICAgICAgICAgICAgIHVwaWQ6IFNvbWUodXBpZC50b19zdHJpbmcoKSksCisgICAgICAgICAg ICAgICAgICAgIC4uRGVmYXVsdDo6ZGVmYXVsdCgpCisgICAgICAgICAgICAgICAgfTsKKyAgICAg ICAgICAgICAgICBzZWxmLmlubmVyLmNodW5rX3N0b3JlLnN3ZWVwX3VudXNlZF9jaHVua3MoCisg ICAgICAgICAgICAgICAgICAgIG9sZGVzdF93cml0ZXIsCisgICAgICAgICAgICAgICAgICAgIG1p bl9hdGltZSwKKyAgICAgICAgICAgICAgICAgICAgJm11dCB0bXBfZ2Nfc3RhdHVzLAorICAgICAg ICAgICAgICAgICAgICB3b3JrZXIsCisgICAgICAgICAgICAgICAgKT87CisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIHNlbGYuaW5uZXIuY2h1bmtfc3RvcmUuc3dlZXBfdW51 c2VkX2NodW5rcygKKyAgICAgICAgICAgICAgICAgICAgb2xkZXN0X3dyaXRlciwKKyAgICAgICAg ICAgICAgICAgICAgbWluX2F0aW1lLAorICAgICAgICAgICAgICAgICAgICAmbXV0IGdjX3N0YXR1 cywKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyLAorICAgICAgICAgICAgICAgICk/OworICAg ICAgICAgICAgfQogCiAgICAgICAgICAgICBpbmZvISgKICAgICAgICAgICAgICAgICAiUmVtb3Zl ZCBnYXJiYWdlOiB7fSIsCi0tIAoyLjQ3LjIKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KcGJzLWRldmVsIG1haWxpbmcgbGlzdApwYnMtZGV2ZWxAbGlz dHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4v bGlzdGluZm8vcGJzLWRldmVsCg==