From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pbs-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id EB4831FF15C for <inbox@lore.proxmox.com>; Wed, 26 Mar 2025 11:04:01 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 6ED7232FFF; Wed, 26 Mar 2025 11:03:55 +0100 (CET) From: Christian Ebner <c.ebner@proxmox.com> To: pbs-devel@lists.proxmox.com Date: Wed, 26 Mar 2025 11:03:32 +0100 Message-Id: <20250326100333.116722-5-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250326100333.116722-1-c.ebner@proxmox.com> References: <20250326100333.116722-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.031 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 v5 proxmox-backup 4/5] garbage collection: generate index file list via datastore iterators X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion <pbs-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/> List-Post: <mailto:pbs-devel@lists.proxmox.com> List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" <pbs-devel-bounces@lists.proxmox.com> SW5zdGVhZCBvZiBpdGVyYXRpbmcgb3ZlciBhbGwgaW5kZXggZmlsZXMgZm91bmQgaW4gdGhlIGRh dGFzdG9yZSBpbgphbiB1bnN0cnVjdHVyZWQgbWFubmVyLCB1c2UgdGhlIGRhdGFzdG9yZSBpdGVy YXRvcnMgdG8gbG9naWNhbGx5Cml0ZXJhdGUgb3ZlciB0aGVtIGFzIG90aGVyIGRhdGFzdG9yZSBv cGVyYXRpb25zIHdpbGwuCgpUaGlzIGFsbG93cyB0byBiZXR0ZXIgZGlzdGluZ3Vpc2ggaW5kZXgg ZmlsZXMgaW4gdW5leHBlY3RlZCBsb2NhdGlvbnMKZnJvbSBvbmVzIGluIHRoZWlyIGV4cGVjdGVk IGxvY2F0aW9uLCB3YXJuaW5nIHRoZSB1c2VyIG9mIHVuZXhwZWN0ZWQKb25lcyB0byBhbGxvdyB0 byBhY3Qgb24gcG9zc2libGUgbWlzc2NvbmZpZ3VyYXRpb25zLiBGdXJ0aGVyLCB0aGlzCndpbGwg YWxsb3cgdG8gaW50ZWdyYXRlIG1hcmtpbmcgb2Ygc25hcHNob3RzIHdpdGggbWlzc2luZyBjaHVu a3MgYXMKaW5jb21wbGV0ZS9jb3JydXB0IG1vcmUgZWFzaWx5IGFuZCBoZWxwcyBpbXByb3ZlIGNh Y2hlIGhpdHMgd2hlbgppbnRyb2R1Y2luZyBMUlUgY2FjaGluZyB0byBhdm9pZCBtdWx0aXBsZSBh dGltZSB1cGRhdGVzIGluIHBoYXNlIDEgb2YKZ2FyYmFnZSBjb2xsZWN0aW9uLgoKVGhpcyBub3cg aXRlcmF0ZXMgdHdpY2Ugb3ZlciB0aGUgaW5kZXggZmlsZXMsIGFzIGluZGljZXMgaW4KdW5leHBl Y3RlZCBsb2NhdGlvbnMgYXJlIHN0aWxsIGNvbnNpZGVyZWQgYnkgZ2VuZXJhdGluZyB0aGUgbGlz dCBvZgphbGwgaW5kZXggZmlsZXMgdG8gYmUgZm91bmQgaW4gdGhlIGRhdGFzdG9yZSBhbmQgcmVt b3ZpbmcgcmVndWxhcgppbmRleCBmaWxlcyBmcm9tIHRoYXQgbGlzdCwgbGVhdmluZyB1bmV4cGVj dGVkIG9uZXMgYmVoaW5kLgoKRnVydGhlciwgYWxpZ24gdGVybWlub2xvZ3kgYnkgcmVuYW1pbmcg dGhlIGBsaXN0X2ltYWdlc2AgbWV0aG9kIHRvCmEgbW9yZSBmaXR0aW5nIGBsaXN0X2luZGV4X2Zp bGVzYCBhbmQgdGhlIHZhcmlhYmxlIG5hbWVzIGFjY29yZGluZ2x5LgoKVGhpcyB3aWxsIHJlZHVj ZSBwb3NzaWJsZSBjb25mdXNpb24gc2luY2UgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UgYW5kCmlu IHRoZSBkb2N1bWVudGF0aW9uIGZpbGVzIHJlZmVyZW5jaW5nIHRoZSBkYXRhIGNodW5rcyBhcmUg cmVmZXJyZWQKdG8gYXMgaW5kZXggZmlsZXMuIFRoZSB0ZXJtIGltYWdlIG9uIHRoZSBvdGhlciBo YW5kIGlzIGFzc29jaWF0ZWQKd2l0aCB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzIGFuZCBvdGhlciBs YXJnZSBiaW5hcnkgZGF0YSBzdG9yZWQgYXMKZml4ZWQtc2l6ZSBjaHVua3MuCgpCYXNpYyBiZW5j aG1hcmtpbmc6CgpUb3RhbCBHQyBydW50aW1lIHNob3dzIG5vIHNpZ25pZmljYXRuIGNoYW5nZSAo YXZlcmFnZSBvZiAzIHJ1bnMpOgp1bnBhdGNoZWQ6IDE1NS40IMKxIDIuNiBzCnBhdGNoZWQ6ICAg MTU1LjQgwrEgMy41IHMKClZtUGVhayBtZWFzdXJlZCB2aWEgL3Byb2Mvc2VsZi9zdGF0dXMgYmVm b3JlIGFuZCBhZnRlcgpgbWFya191c2VkX2NodW5rc2AgKHByb3htb3gtYmFja3VwLXByb3h5IHdh cyByZXN0YXJ0ZWQgaW4gYmV0d2Vlbgpmb3Igbm9ybWFsaXphdGlvbiwgbm8gY2hhbmdlcyBmb3Ig YWxsIDMgcnVucyk6CnVucGF0Y2hlZCBiZWZvcmU6IDExOTYwMzIga0IKdW5wYXRjaGVkIGFmdGVy OiAgMTE5NjAzMiBrQgoKcGF0Y2hlZCBiZWZvcmU6IDExOTYwMjgga0IKcGF0Y2hlZCBhZnRlcjog IDExOTYwMjgga0IKCkxpc3QgaW1hZ2Ugc2hvd3MgYSBzbGlnaHQgaW5jcmVhc2UgZHVlIHRvIHRo ZSBzd2l0Y2ggdG8gYSBIYXNoU2V0CihhdmVyYWdlIG9mIDMgcnVucyk6CnVucGF0Y2hlZDogNjQu MiDCsSA4LjQgbXMKcGF0Y2hlZDogICA3Mi44IMKxIDMuNyBtcwoKRGVzY3JpcHRpb24gb2YgdGhl IFBCUyBob3N0IGFuZCBkYXRhc3RvcmU6CkNQVTogSW50ZWwgWGVvbiBFNS0yNjIwCkRhdGFzdG9y ZSBiYWNraW5nIHN0b3JhZ2U6IFpGUyBSQUlEIDEwIHdpdGggMyBtaXJyb3JzIG9mIDJ4ClNUMTYw MDBOTTAwMUcsIG1pcnJvciBvZiAyeCBTQU1TVU5HX01aMUxCMVQ5SEFMUyBhcyBzcGVjaWFsCgpO YW1lc3BhY2VzOiA0NQpHcm91cHM6IDE4MgpTbmFwc2hvdHM6IDMxODQKSW5kZXggZmlsZXM6IDY4 NzUKRGVkdXBsaWNhdGlvbiBmYWN0b3I6IDQ0LjU0CgpPcmlnaW5hbCBkYXRhIHVzYWdlOiAxMjAu NzQyIFRpQgpPbi1EaXNrIHVzYWdlOiAyLjcxMSBUaUIgKDIuMjUlKQpPbi1EaXNrIGNodW5rczog MTQ5NDcyNwpBdmVyYWdlIGNodW5rIHNpemU6IDEuOTAyIE1pQgoKRGlzdHJpYnV0aW9uIG9mIHNu YXBzaG90cyAoYmlubmVkIGJ5IG1vbnRoKToKMjAyMy0xMQkxMQoyMDIzLTEyCTE2CjIwMjQtMDEJ MzAKMjAyNC0wMgkzOAoyMDI0LTAzCTE3CjIwMjQtMDQJMzcKMjAyNC0wNQkxNwoyMDI0LTA2CTU5 CjIwMjQtMDcJOTkKMjAyNC0wOAk5NgoyMDI0LTA5CTExNQoyMDI0LTEwCTM1CjIwMjQtMTEJNDIK MjAyNC0xMgkzNwoyMDI1LTAxCTE2MgoyMDI1LTAyCTQ4OQoyMDI1LTAzCTE4ODQKClNpZ25lZC1v ZmYtYnk6IENocmlzdGlhbiBFYm5lciA8Yy5lYm5lckBwcm94bW94LmNvbT4KLS0tCmNoYW5nZXMg c2luY2UgdmVyc2lvbiA0OgotIGV4dGVuZGVkIGNvbW1pdCBtZXNzYWdlCgogcGJzLWRhdGFzdG9y ZS9zcmMvZGF0YXN0b3JlLnJzIHwgMTA0ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDcwIGluc2VydGlvbnMoKyksIDM0IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycyBiL3Bicy1kYXRhc3RvcmUv c3JjL2RhdGFzdG9yZS5ycwppbmRleCA2YzMwNDZmZjYuLjhjZTk4ZjFiMyAxMDA2NDQKLS0tIGEv cGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzCisrKyBiL3Bicy1kYXRhc3RvcmUvc3JjL2Rh dGFzdG9yZS5ycwpAQCAtMjUsNyArMjUsNyBAQCB1c2UgcGJzX2FwaV90eXBlczo6ewogICAgIE1h aW50ZW5hbmNlTW9kZSwgTWFpbnRlbmFuY2VUeXBlLCBPcGVyYXRpb24sIFVQSUQsCiB9OwogCi11 c2UgY3JhdGU6OmJhY2t1cF9pbmZvOjp7QmFja3VwRGlyLCBCYWNrdXBHcm91cH07Cit1c2UgY3Jh dGU6OmJhY2t1cF9pbmZvOjp7QmFja3VwRGlyLCBCYWNrdXBHcm91cCwgQmFja3VwSW5mb307CiB1 c2UgY3JhdGU6OmNodW5rX3N0b3JlOjpDaHVua1N0b3JlOwogdXNlIGNyYXRlOjpkeW5hbWljX2lu ZGV4Ojp7RHluYW1pY0luZGV4UmVhZGVyLCBEeW5hbWljSW5kZXhXcml0ZXJ9OwogdXNlIGNyYXRl OjpmaXhlZF9pbmRleDo6e0ZpeGVkSW5kZXhSZWFkZXIsIEZpeGVkSW5kZXhXcml0ZXJ9OwpAQCAt OTcwLDEwICs5NzAsMTUgQEAgaW1wbCBEYXRhU3RvcmUgewogICAgICAgICBMaXN0R3JvdXBzOjpu ZXcoQXJjOjpjbG9uZShzZWxmKSwgbnMpPy5jb2xsZWN0KCkKICAgICB9CiAKLSAgICBmbiBsaXN0 X2ltYWdlcygmc2VsZikgLT4gUmVzdWx0PFZlYzxQYXRoQnVmPiwgRXJyb3I+IHsKKyAgICAvLy8g TG9va3VwIGFsbCBpbmRleCBmaWxlcyB0byBiZSBmb3VuZCBpbiB0aGUgZGF0YXN0b3JlIHdpdGhv dXQgdGFraW5nIGFueSBsb2dpY2FsIGl0ZXJhdGlvbgorICAgIC8vLyBpbnRvIGFjY291bnQuCisg ICAgLy8vIFRoZSBmaWxlc3lzdGVtIGlzIHdhbGtlZCByZWN1cnNldmx5IHRvIGRldGVjdCBpbmRl eCBmaWxlcyBiYXNlZCBvbiB0aGVpciBhcmNoaXZlIHR5cGUgYmFzZWQKKyAgICAvLy8gb24gdGhl IGZpbGVuYW1lLiBUaGlzIGhvd2V2ZXIgZXhjbHVkZXMgdGhlIGNodW5rcyBmb2xkZXIsIGhpZGRl biBmaWxlcyBhbmQgZG9lcyBub3QgZm9sbG93CisgICAgLy8vIHN5bWxpbmtzLgorICAgIGZuIGxp c3RfaW5kZXhfZmlsZXMoJnNlbGYpIC0+IFJlc3VsdDxIYXNoU2V0PFBhdGhCdWY+LCBFcnJvcj4g ewogICAgICAgICBsZXQgYmFzZSA9IHNlbGYuYmFzZV9wYXRoKCk7CiAKLSAgICAgICAgbGV0IG11 dCBsaXN0ID0gdmVjIVtdOworICAgICAgICBsZXQgbXV0IGxpc3QgPSBIYXNoU2V0OjpuZXcoKTsK IAogICAgICAgICB1c2Ugd2Fsa2Rpcjo6V2Fsa0RpcjsKIApAQCAtMTAyMSw3ICsxMDI2LDcgQEAg aW1wbCBEYXRhU3RvcmUgewogICAgICAgICAgICAgICAgIGlmIGFyY2hpdmVfdHlwZSA9PSBBcmNo aXZlVHlwZTo6Rml4ZWRJbmRleAogICAgICAgICAgICAgICAgICAgICB8fCBhcmNoaXZlX3R5cGUg PT0gQXJjaGl2ZVR5cGU6OkR5bmFtaWNJbmRleAogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICAgICAgbGlzdC5wdXNoKHBhdGgpOworICAgICAgICAgICAgICAgICAgICBsaXN0Lmlu c2VydChwYXRoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K QEAgLTExMDcsNDQgKzExMTIsNzUgQEAgaW1wbCBEYXRhU3RvcmUgewogICAgICAgICBzdGF0dXM6 ICZtdXQgR2FyYmFnZUNvbGxlY3Rpb25TdGF0dXMsCiAgICAgICAgIHdvcmtlcjogJmR5biBXb3Jr ZXJUYXNrQ29udGV4dCwKICAgICApIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKLSAgICAgICAgbGV0 IGltYWdlX2xpc3QgPSBzZWxmLmxpc3RfaW1hZ2VzKCk/OwotICAgICAgICBsZXQgaW1hZ2VfY291 bnQgPSBpbWFnZV9saXN0LmxlbigpOwotCisgICAgICAgIC8vIEl0ZXJhdGUgdHdpY2Ugb3ZlciB0 aGUgZGF0YXN0b3JlIHRvIGZldGNoIGluZGV4IGZpbGVzLCBldmVuIGlmIHRoaXMgY29tZXMgd2l0 aCBhbgorICAgICAgICAvLyBhZGRpdGlvbmFsIHJ1bnRpbWUgY29zdDoKKyAgICAgICAgLy8gLSBG aXJzdCBpdGVyYXRpb24gdG8gZmluZCBhbGwgaW5kZXggZmlsZXMsIG5vIG1hdHRlciBpZiB0aGV5 IGFyZSBpbiBhIGxvY2F0aW9uIGV4cGVjdGVkCisgICAgICAgIC8vICAgYnkgdGhlIGRhdGFzdG9y ZSdzIGhpZXJhcmNoeQorICAgICAgICAvLyAtIEl0ZXJhdGUgdXNpbmcgdGhlIGRhdGFzdG9yZSdz IGhlbHBlcnMsIHNvIHRoZSBuYW1lc3BhY2VzLCBncm91cHMgYW5kIHNuYXBzaG90cyBhcmUKKyAg ICAgICAgLy8gICBsb29rZWQgdXAgZ2l2ZW4gdGhlIGV4cGVjdGVkIGhpZXJhcmNoeSBhbmQgaXRl cmF0b3IgbG9naWMKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQnkgdGhpcyBpdCBpcyBhc3N1cmVk IHRoYXQgYWxsIGluZGV4IGZpbGVzIGFyZSB1c2VkLCBldmVuIGlmIHRoZXkgd291bGQgbm90IGhh dmUgYmVlbgorICAgICAgICAvLyBzZWVuIGJ5IHRoZSByZWd1bGFyIGxvZ2ljIGFuZCB0aGUgdXNl ciBpcyBpbmZvcm1lZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHJ1biBhYm91dAorICAgICAg ICAvLyB0aGUgZGV0ZWN0ZWQgaW5kZXggZmlsZXMgbm90IGZvbGxvd2luZyB0aGUgaXRlcmF0b3Jz IGxvZ2ljLgorCisgICAgICAgIGxldCBtdXQgdW5wcm9jZXNzZWRfaW5kZXhfbGlzdCA9IHNlbGYu bGlzdF9pbmRleF9maWxlcygpPzsKKyAgICAgICAgbGV0IGluZGV4X2NvdW50ID0gdW5wcm9jZXNz ZWRfaW5kZXhfbGlzdC5sZW4oKTsKKworICAgICAgICBsZXQgbXV0IHByb2Nlc3NlZF9pbmRleF9m aWxlcyA9IDA7CiAgICAgICAgIGxldCBtdXQgbGFzdF9wZXJjZW50YWdlOiB1c2l6ZSA9IDA7CiAK LSAgICAgICAgbGV0IG11dCBzdHJhbmdlX3BhdGhzX2NvdW50OiB1NjQgPSAwOwotCi0gICAgICAg IGZvciAoaSwgaW1nKSBpbiBpbWFnZV9saXN0LmludG9faXRlcigpLmVudW1lcmF0ZSgpIHsKLSAg ICAgICAgICAgIHdvcmtlci5jaGVja19hYm9ydCgpPzsKLSAgICAgICAgICAgIHdvcmtlci5mYWls X29uX3NodXRkb3duKCk/OwotCi0gICAgICAgICAgICBpZiBsZXQgU29tZShiYWNrdXBfZGlyX3Bh dGgpID0gaW1nLnBhcmVudCgpIHsKLSAgICAgICAgICAgICAgICBsZXQgYmFja3VwX2Rpcl9wYXRo ID0gYmFja3VwX2Rpcl9wYXRoLnN0cmlwX3ByZWZpeChzZWxmLmJhc2VfcGF0aCgpKT87Ci0gICAg ICAgICAgICAgICAgaWYgbGV0IFNvbWUoYmFja3VwX2Rpcl9zdHIpID0gYmFja3VwX2Rpcl9wYXRo LnRvX3N0cigpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgcGJzX2FwaV90eXBlczo6cGFyc2Vf bnNfYW5kX3NuYXBzaG90KGJhY2t1cF9kaXJfc3RyKS5pc19lcnIoKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBzdHJhbmdlX3BhdGhzX2NvdW50ICs9IDE7CisgICAgICAgIGxldCBhcmNfc2Vs ZiA9IEFyYzo6bmV3KHNlbGYuY2xvbmUoKSk7CisgICAgICAgIGZvciBuYW1lc3BhY2UgaW4gYXJj X3NlbGYKKyAgICAgICAgICAgIC5yZWN1cnNpdmVfaXRlcl9iYWNrdXBfbnMoQmFja3VwTmFtZXNw YWNlOjpyb290KCkpCisgICAgICAgICAgICAuY29udGV4dCgiY3JlYXRpbmcgbmFtZXNwYWNlIGl0 ZXJhdG9yIGZhaWxlZCIpPworICAgICAgICB7CisgICAgICAgICAgICBsZXQgbmFtZXNwYWNlID0g bmFtZXNwYWNlLmNvbnRleHQoIml0ZXJhdGluZyBuYW1lc3BhY2VzIGZhaWxlZCIpPzsKKyAgICAg ICAgICAgIGZvciBncm91cCBpbiBhcmNfc2VsZi5pdGVyX2JhY2t1cF9ncm91cHMobmFtZXNwYWNl KT8geworICAgICAgICAgICAgICAgIGxldCBncm91cCA9IGdyb3VwLmNvbnRleHQoIml0ZXJhdGlu ZyBiYWNrdXAgZ3JvdXBzIGZhaWxlZCIpPzsKKyAgICAgICAgICAgICAgICBsZXQgbXV0IHNuYXBz aG90cyA9IGdyb3VwLmxpc3RfYmFja3VwcygpLmNvbnRleHQoImxpc3Rpbmcgc25hcHNob3RzIGZh aWxlZCIpPzsKKyAgICAgICAgICAgICAgICAvLyBTb3J0IGJ5IHNuYXBzaG90IHRpbWVzdGFtcCB0 byBpdGVyYXRlIG92ZXIgY29uc2VjdXRpdmUgc25hcHNob3RzIGZvciBlYWNoIGltYWdlLgorICAg ICAgICAgICAgICAgIEJhY2t1cEluZm86OnNvcnRfbGlzdCgmbXV0IHNuYXBzaG90cywgdHJ1ZSk7 CisgICAgICAgICAgICAgICAgZm9yIHNuYXBzaG90IGluIHNuYXBzaG90cyB7CisgICAgICAgICAg ICAgICAgICAgIGZvciBmaWxlIGluIHNuYXBzaG90LmZpbGVzIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHdvcmtlci5jaGVja19hYm9ydCgpPzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdv cmtlci5mYWlsX29uX3NodXRkb3duKCk/OworCisgICAgICAgICAgICAgICAgICAgICAgICBsZXQg bXV0IHBhdGggPSBzbmFwc2hvdC5iYWNrdXBfZGlyLmZ1bGxfcGF0aCgpOworICAgICAgICAgICAg ICAgICAgICAgICAgcGF0aC5wdXNoKGZpbGUpOworCisgICAgICAgICAgICAgICAgICAgICAgICBs ZXQgaW5kZXggPSBtYXRjaCBzZWxmLm9wZW5faW5kZXhfcmVhZGVyKCZwYXRoKT8geworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFNvbWUoaW5kZXgpID0+IGluZGV4LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5vbmUgPT4gY29udGludWUsCisgICAgICAgICAgICAgICAgICAgICAg ICB9OworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRleF9tYXJrX3VzZWRfY2h1bmtz KGluZGV4LCAmcGF0aCwgc3RhdHVzLCB3b3JrZXIpPzsKKworICAgICAgICAgICAgICAgICAgICAg ICAgdW5wcm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpOworCisgICAgICAgICAgICAg ICAgICAgICAgICBsZXQgcGVyY2VudGFnZSA9IChwcm9jZXNzZWRfaW5kZXhfZmlsZXMgKyAxKSAq IDEwMCAvIGluZGV4X2NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGVyY2VudGFn ZSA+IGxhc3RfcGVyY2VudGFnZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyEo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXJrZWQge3BlcmNlbnRhZ2V9JSAo e30gb2Yge2luZGV4X2NvdW50fSBpbmRleCBmaWxlcykiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcm9jZXNzZWRfaW5kZXhfZmlsZXMgKyAxLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9wZXJjZW50YWdl ID0gcGVyY2VudGFnZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgIHByb2Nlc3NlZF9pbmRleF9maWxlcyArPSAxOwogICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiBs ZXQgU29tZShpbmRleCkgPSBzZWxmLm9wZW5faW5kZXhfcmVhZGVyKCZpbWcpPyB7Ci0gICAgICAg ICAgICAgICAgc2VsZi5pbmRleF9tYXJrX3VzZWRfY2h1bmtzKGluZGV4LCAmaW1nLCBzdGF0dXMs IHdvcmtlcik/OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsZXQgcGVyY2VudGFnZSA9 IChpICsgMSkgKiAxMDAgLyBpbWFnZV9jb3VudDsKLSAgICAgICAgICAgIGlmIHBlcmNlbnRhZ2Ug PiBsYXN0X3BlcmNlbnRhZ2UgewotICAgICAgICAgICAgICAgIGluZm8hKAotICAgICAgICAgICAg ICAgICAgICAibWFya2VkIHtwZXJjZW50YWdlfSUgKHt9IG9mIHtpbWFnZV9jb3VudH0gaW5kZXgg ZmlsZXMpIiwKLSAgICAgICAgICAgICAgICAgICAgaSArIDEsCi0gICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgICAgICBsYXN0X3BlcmNlbnRhZ2UgPSBwZXJjZW50YWdlOwotICAgICAgICAg ICAgfQogICAgICAgICB9CiAKKyAgICAgICAgbGV0IHN0cmFuZ2VfcGF0aHNfY291bnQgPSB1bnBy b2Nlc3NlZF9pbmRleF9saXN0LmxlbigpOwogICAgICAgICBpZiBzdHJhbmdlX3BhdGhzX2NvdW50 ID4gMCB7Ci0gICAgICAgICAgICBpbmZvISgKLSAgICAgICAgICAgICAgICAiZm91bmQgKGFuZCBt YXJrZWQpIHtzdHJhbmdlX3BhdGhzX2NvdW50fSBpbmRleCBmaWxlcyBvdXRzaWRlIG9mIGV4cGVj dGVkIGRpcmVjdG9yeSBzY2hlbWUiCi0gICAgICAgICAgICApOworICAgICAgICAgICAgd2FybiEo ImZvdW5kIHtzdHJhbmdlX3BhdGhzX2NvdW50fSBpbmRleCBmaWxlcyBvdXRzaWRlIG9mIGV4cGVj dGVkIGRpcmVjdG9yeSBzY2hlbWUiKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgcGF0aCBpbiB1 bnByb2Nlc3NlZF9pbmRleF9saXN0IHsKKyAgICAgICAgICAgIGxldCBpbmRleCA9IG1hdGNoIHNl bGYub3Blbl9pbmRleF9yZWFkZXIoJnBhdGgpPyB7CisgICAgICAgICAgICAgICAgU29tZShpbmRl eCkgPT4gaW5kZXgsCisgICAgICAgICAgICAgICAgTm9uZSA9PiBjb250aW51ZSwKKyAgICAgICAg ICAgIH07CisgICAgICAgICAgICBzZWxmLmluZGV4X21hcmtfdXNlZF9jaHVua3MoaW5kZXgsICZw YXRoLCBzdGF0dXMsIHdvcmtlcik/OworICAgICAgICAgICAgd2FybiEoIk1hcmtlZCBjaHVua3Mg Zm9yIHVuZXhwZWN0ZWQgaW5kZXggZmlsZSBhdCAne3BhdGg6P30nIik7CiAgICAgICAgIH0KIAog ICAgICAgICBPaygoKSkKLS0gCjIuMzkuNQoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpwYnMtZGV2ZWwgbWFpbGluZyBsaXN0CnBicy1kZXZlbEBsaXN0 cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9s aXN0aW5mby9wYnMtZGV2ZWwK