From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 2383A1FF16F for <inbox@lore.proxmox.com>; Thu, 13 Mar 2025 16:17:58 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1EBAD1CD14; Thu, 13 Mar 2025 16:17:50 +0100 (CET) From: Alexander Zeidler <a.zeidler@proxmox.com> To: pve-devel@lists.proxmox.com Date: Thu, 13 Mar 2025 16:17:34 +0100 Message-Id: <20250313151734.258337-1-a.zeidler@proxmox.com> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.087 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: [pve-devel] [RFC proxmox] fix #6143: notify: allow overriding notification templates X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> UHJldmlvdXNseSwgbm90aWZpY2F0aW9uIHRlbXBsYXRlcyBjb3VsZCBiZSBtb2RpZmllZCBieSB0 aGUgdXNlciwgYnV0CnRoZXNlIHdlcmUgb3ZlcndyaXR0ZW4gYWdhaW4gd2l0aCBpbnN0YWxsaW5n IG5ld2VyIHBhY2thZ2UgdmVyc2lvbnMgb2YKcHZlLW1hbmFnZXIgYW5kIHByb3htb3gtYmFja3Vw LgoKTm93IG92ZXJyaWRlIHRlbXBsYXRlcyBjYW4gYmUgY3JlYXRlZCBjbHVzdGVyLXdpZGUgaW4g dGhlIHBhdGgK4oCcL2V0Yy97cHZlLHByb3htb3gtYmFja3VwfS9ub3RpZmljYXRpb24tdGVtcGxh dGVzL3tuYW1lc3BhY2V94oCdLCB3aGljaAphcmUgdXNlZCB3aXRoIHByaW9yaXR5LiBUaGUgZm9s ZGVyIHN0cnVjdHVyZSBoYXMgdG8gYmUgY3JlYXRlZCBhbmQKcG9wdWxhdGVkIG1hbnVhbGx5IChl LmcuIC9ldGMvcHZlL25vdGlmaWNhdGlvbi10ZW1wbGF0ZXMvZGVmYXVsdC8pLgoKSWYgb3ZlcnJp ZGUgdGVtcGxhdGVzIGFyZSBub3QgZXhpc3Rpbmcgb3IgdGhlaXIgcmVuZGVyaW5nIGZhaWxzLCB0 aGUKdmVuZG9yIHRlbXBsYXRlcyBpbgoiL3Vzci9zaGFyZS97cHZlLW1hbmFnZXIscHJveG1veC1i YWNrdXB9L3RlbXBsYXRlcy9kZWZhdWx0LyIgYXJlIHVzZWQuCgpTZXF1ZW5jZTogW292ZXJyaWRl IGh0bWwgLT4gdmVuZG9yIGh0bWwgLT5dIG92ZXJyaWRlIHR4dCAtPiB2ZW5kb3IgdHh0CgpBbiBl cnJvciBpcyBvbmx5IHJldHVybmVkIGlmIG5vbmUgb2YgdGhlIHRlbXBsYXRlIGNhbmRpZGF0ZXMg Y291bGQgYmUKdXNlZC4gVXNpbmcgYW4gb3ZlcnJpZGUgdGVtcGxhdGUgZ2V0cyBub3QgbG9nZ2Vk LgoKU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIFplaWRsZXIgPGEuemVpZGxlckBwcm94bW94LmNv bT4KLS0tCgpRdWVzdGlvbnM6Ci0gSXMgdGhlcmUgYW55dGhpbmcgYWdhaW5zdCB0aGUgY2hvc2Vu IG92ZXJyaWRlIHBhdGg/CgpVcGNvbWluZyAoZnJvbSBidWd6aWxsYSByZXBvcnQpOgotIEx1a2Fz IFdhZ25lcjogRXhpc3RpbmcgdGVtcGxhdGVzL3ZhcmlhYmxlcy9oZWxwZXJzIGhhdmUgYmVlbgog IHJldmlld2VkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYXJlIE9LIHRvIGJlIHB1YmxpYyBBUEkK LSBUaGUgc3RlcHMgbmVlZGVkIHRvIG92ZXJyaWRlIHRoZSB0ZW1wbGF0ZSBhcmUgYWRkZWQgdG8g dGhlCiAgbm90aWZpY2F0aW9uIGRvY3MKLSBUZW1wbGF0ZSB2YXJpYWJsZXMgYW5kIGhlbHBlcnMg YXJlIGRvY3VtZW50ZWQKCgogcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvbW9kLnJzICB8ICAg MyArLQogcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvcGJzLnJzICB8ICAgOSArKy0KIHByb3ht b3gtbm90aWZ5L3NyYy9jb250ZXh0L3B2ZS5ycyAgfCAgMTAgKystCiBwcm94bW94LW5vdGlmeS9z cmMvY29udGV4dC90ZXN0LnJzIHwgICAxICsKIHByb3htb3gtbm90aWZ5L3NyYy9yZW5kZXJlci9t b2QucnMgfCAxMjQgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIDUgZmlsZXMgY2hhbmdl ZCwgOTkgaW5zZXJ0aW9ucygrKSwgNDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvcHJveG1v eC1ub3RpZnkvc3JjL2NvbnRleHQvbW9kLnJzIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQv bW9kLnJzCmluZGV4IGMwYTVhMTNiLi5jNDY0OWQ5MSAxMDA2NDQKLS0tIGEvcHJveG1veC1ub3Rp Znkvc3JjL2NvbnRleHQvbW9kLnJzCisrKyBiL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L21v ZC5ycwpAQCAtMjQsMTEgKzI0LDEyIEBAIHB1YiB0cmFpdCBDb250ZXh0OiBTZW5kICsgU3luYyAr IERlYnVnIHsKICAgICBmbiBodHRwX3Byb3h5X2NvbmZpZygmc2VsZikgLT4gT3B0aW9uPFN0cmlu Zz47CiAgICAgLy8vIFJldHVybiBkZWZhdWx0IGNvbmZpZyBmb3IgYnVpbHQtaW4gdGFyZ2V0cy9t YXRjaGVycy4KICAgICBmbiBkZWZhdWx0X2NvbmZpZygmc2VsZikgLT4gJidzdGF0aWMgc3RyOwot ICAgIC8vLyBMb29rdXAgYSB0ZW1wbGF0ZSBpbiBhIGNlcnRhaW4gKG9wdGlvbmFsKSBuYW1lc3Bh Y2UKKyAgICAvLy8gTG9va3VwIGEgdGVtcGxhdGUgKG9yIGl0cyBvdmVycmlkZSkgaW4gYSBjZXJ0 YWluIChvcHRpb25hbCkgbmFtZXNwYWNlCiAgICAgZm4gbG9va3VwX3RlbXBsYXRlKAogICAgICAg ICAmc2VsZiwKICAgICAgICAgZmlsZW5hbWU6ICZzdHIsCiAgICAgICAgIG5hbWVzcGFjZTogT3B0 aW9uPCZzdHI+LAorICAgICAgICB1c2Vfb3ZlcnJpZGU6IGJvb2wsCiAgICAgKSAtPiBSZXN1bHQ8 T3B0aW9uPFN0cmluZz4sIEVycm9yPjsKIH0KIApkaWZmIC0tZ2l0IGEvcHJveG1veC1ub3RpZnkv c3JjL2NvbnRleHQvcGJzLnJzIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvcGJzLnJzCmlu ZGV4IGU4MTA2YzU3Li5kYTRkOWJhMCAxMDA2NDQKLS0tIGEvcHJveG1veC1ub3RpZnkvc3JjL2Nv bnRleHQvcGJzLnJzCisrKyBiL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Bicy5ycwpAQCAt MTA5LDggKzEwOSwxNSBAQCBpbXBsIENvbnRleHQgZm9yIFBCU0NvbnRleHQgewogICAgICAgICAm c2VsZiwKICAgICAgICAgZmlsZW5hbWU6ICZzdHIsCiAgICAgICAgIG5hbWVzcGFjZTogT3B0aW9u PCZzdHI+LAorICAgICAgICB1c2Vfb3ZlcnJpZGU6IGJvb2wsCiAgICAgKSAtPiBSZXN1bHQ8T3B0 aW9uPFN0cmluZz4sIEVycm9yPiB7Ci0gICAgICAgIGxldCBwYXRoID0gUGF0aDo6bmV3KCIvdXNy L3NoYXJlL3Byb3htb3gtYmFja3VwL3RlbXBsYXRlcyIpCisgICAgICAgIGxldCBwYXRoID0gaWYg dXNlX292ZXJyaWRlIHsKKyAgICAgICAgICAgICIvZXRjL3Byb3htb3gtYmFja3VwL25vdGlmaWNh dGlvbi10ZW1wbGF0ZXMiCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAiL3Vzci9zaGFy ZS9wcm94bW94LWJhY2t1cC90ZW1wbGF0ZXMiCisgICAgICAgIH07CisKKyAgICAgICAgbGV0IHBh dGggPSBQYXRoOjpuZXcoJnBhdGgpCiAgICAgICAgICAgICAuam9pbihuYW1lc3BhY2UudW53cmFw X29yKCJkZWZhdWx0IikpCiAgICAgICAgICAgICAuam9pbihmaWxlbmFtZSk7CiAKZGlmZiAtLWdp dCBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3B2ZS5ycyBiL3Byb3htb3gtbm90aWZ5L3Ny Yy9jb250ZXh0L3B2ZS5ycwppbmRleCBkNDlhYjI3Yy4uMDViMWI1YjcgMTAwNjQ0Ci0tLSBhL3By b3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3B2ZS5ycworKysgYi9wcm94bW94LW5vdGlmeS9zcmMv Y29udGV4dC9wdmUucnMKQEAgLTU4LDEwICs1OCwxOCBAQCBpbXBsIENvbnRleHQgZm9yIFBWRUNv bnRleHQgewogICAgICAgICAmc2VsZiwKICAgICAgICAgZmlsZW5hbWU6ICZzdHIsCiAgICAgICAg IG5hbWVzcGFjZTogT3B0aW9uPCZzdHI+LAorICAgICAgICB1c2Vfb3ZlcnJpZGU6IGJvb2wsCiAg ICAgKSAtPiBSZXN1bHQ8T3B0aW9uPFN0cmluZz4sIEVycm9yPiB7Ci0gICAgICAgIGxldCBwYXRo ID0gUGF0aDo6bmV3KCIvdXNyL3NoYXJlL3B2ZS1tYW5hZ2VyL3RlbXBsYXRlcyIpCisgICAgICAg IGxldCBwYXRoID0gaWYgdXNlX292ZXJyaWRlIHsKKyAgICAgICAgICAgICIvZXRjL3B2ZS9ub3Rp ZmljYXRpb24tdGVtcGxhdGVzIgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIi91c3Iv c2hhcmUvcHZlLW1hbmFnZXIvdGVtcGxhdGVzIgorICAgICAgICB9OworCisgICAgICAgIGxldCBw YXRoID0gUGF0aDo6bmV3KCZwYXRoKQogICAgICAgICAgICAgLmpvaW4obmFtZXNwYWNlLnVud3Jh cF9vcigiZGVmYXVsdCIpKQogICAgICAgICAgICAgLmpvaW4oZmlsZW5hbWUpOworCiAgICAgICAg IGxldCB0ZW1wbGF0ZV9zdHJpbmcgPSBwcm94bW94X3N5czo6ZnM6OmZpbGVfcmVhZF9vcHRpb25h bF9zdHJpbmcocGF0aCkKICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IEVycm9yOjpHZW5lcmlj KGZvcm1hdCEoImNvdWxkIG5vdCBsb2FkIHRlbXBsYXRlOiB7ZXJyfSIpKSk/OwogICAgICAgICBP ayh0ZW1wbGF0ZV9zdHJpbmcpCmRpZmYgLS1naXQgYS9wcm94bW94LW5vdGlmeS9zcmMvY29udGV4 dC90ZXN0LnJzIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvdGVzdC5ycwppbmRleCA1ZGYy NWQwNS4uNmVmZDg0YzUgMTAwNjQ0Ci0tLSBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Rl c3QucnMKKysrIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvdGVzdC5ycwpAQCAtMjksNiAr MjksNyBAQCBpbXBsIENvbnRleHQgZm9yIFRlc3RDb250ZXh0IHsKICAgICAgICAgJnNlbGYsCiAg ICAgICAgIF9maWxlbmFtZTogJnN0ciwKICAgICAgICAgX25hbWVzcGFjZTogT3B0aW9uPCZzdHI+ LAorICAgICAgICBfdXNlX292ZXJyaWRlOiBib29sLAogICAgICkgLT4gUmVzdWx0PE9wdGlvbjxT dHJpbmc+LCBFcnJvcj4gewogICAgICAgICBPayhTb21lKFN0cmluZzo6bmV3KCkpKQogICAgIH0K ZGlmZiAtLWdpdCBhL3Byb3htb3gtbm90aWZ5L3NyYy9yZW5kZXJlci9tb2QucnMgYi9wcm94bW94 LW5vdGlmeS9zcmMvcmVuZGVyZXIvbW9kLnJzCmluZGV4IGUwNThlYTIyLi5hYzUxOWJlZSAxMDA2 NDQKLS0tIGEvcHJveG1veC1ub3RpZnkvc3JjL3JlbmRlcmVyL21vZC5ycworKysgYi9wcm94bW94 LW5vdGlmeS9zcmMvcmVuZGVyZXIvbW9kLnJzCkBAIC0xOTEsNyArMTkxLDcgQEAgaW1wbCBWYWx1 ZVJlbmRlckZ1bmN0aW9uIHsKIH0KIAogLy8vIEF2YWlsYWJsZSB0ZW1wbGF0ZSB0eXBlcwotI1tk ZXJpdmUoQ29weSwgQ2xvbmUpXQorI1tkZXJpdmUoQ29weSwgQ2xvbmUsIFBhcnRpYWxFcSldCiBw dWIgZW51bSBUZW1wbGF0ZVR5cGUgewogICAgIC8vLyBIVE1MIGJvZHkgdGVtcGxhdGUKICAgICBI dG1sQm9keSwKQEAgLTI1MCw3MCArMjUwLDEwNCBAQCBpbXBsIEJsb2NrUmVuZGVyRnVuY3Rpb25z IHsKIH0KIAogZm4gcmVuZGVyX3RlbXBsYXRlX2ltcGwoCi0gICAgdGVtcGxhdGU6ICZzdHIsCiAg ICAgZGF0YTogJlZhbHVlLAogICAgIHJlbmRlcmVyOiBUZW1wbGF0ZVR5cGUsCi0pIC0+IFJlc3Vs dDxTdHJpbmcsIEVycm9yPiB7Ci0gICAgbGV0IG11dCBoYW5kbGViYXJzID0gSGFuZGxlYmFyczo6 bmV3KCk7Ci0gICAgaGFuZGxlYmFycy5yZWdpc3Rlcl9lc2NhcGVfZm4ocmVuZGVyZXIuZXNjYXBl X2ZuKCkpOworICAgIGZpbGVuYW1lOiAmc3RyLAorICAgIHVzZV9vdmVycmlkZTogYm9vbCwKKyAg ICBodG1sX2ZhbGxiYWNrOiBib29sLAorKSAtPiBSZXN1bHQ8T3B0aW9uPFN0cmluZz4sIEVycm9y PiB7CisgICAgbGV0IHRlbXBsYXRlX3N0cmluZyA9IGNvbnRleHQ6OmNvbnRleHQoKS5sb29rdXBf dGVtcGxhdGUoJmZpbGVuYW1lLCBOb25lLCB1c2Vfb3ZlcnJpZGUpPzsKKworICAgIGlmIGxldCBT b21lKHRlbXBsYXRlX3N0cmluZykgPSB0ZW1wbGF0ZV9zdHJpbmcgeworICAgICAgICBsZXQgbXV0 IGhhbmRsZWJhcnMgPSBIYW5kbGViYXJzOjpuZXcoKTsKKyAgICAgICAgaGFuZGxlYmFycy5yZWdp c3Rlcl9lc2NhcGVfZm4ocmVuZGVyZXIuZXNjYXBlX2ZuKCkpOworCisgICAgICAgIGxldCBibG9j a19yZW5kZXJfZm5zID0gcmVuZGVyZXIuYmxvY2tfcmVuZGVyX2ZucygpOworICAgICAgICBibG9j a19yZW5kZXJfZm5zLnJlZ2lzdGVyX2hlbHBlcnMoJm11dCBoYW5kbGViYXJzKTsKIAotICAgIGxl dCBibG9ja19yZW5kZXJfZm5zID0gcmVuZGVyZXIuYmxvY2tfcmVuZGVyX2ZucygpOwotICAgIGJs b2NrX3JlbmRlcl9mbnMucmVnaXN0ZXJfaGVscGVycygmbXV0IGhhbmRsZWJhcnMpOworICAgICAg ICBWYWx1ZVJlbmRlckZ1bmN0aW9uOjpyZWdpc3Rlcl9oZWxwZXJzKCZtdXQgaGFuZGxlYmFycyk7 CisKKyAgICAgICAgaGFuZGxlYmFycy5yZWdpc3Rlcl9oZWxwZXIoCisgICAgICAgICAgICAicmVs YXRpdmUtcGVyY2VudGFnZSIsCisgICAgICAgICAgICBCb3g6Om5ldyhoYW5kbGViYXJzX3JlbGF0 aXZlX3BlcmNlbnRhZ2VfaGVscGVyKSwKKyAgICAgICAgKTsKIAotICAgIFZhbHVlUmVuZGVyRnVu Y3Rpb246OnJlZ2lzdGVyX2hlbHBlcnMoJm11dCBoYW5kbGViYXJzKTsKKyAgICAgICAgbGV0IHJl bmRlcmVkX3RlbXBsYXRlID0gaGFuZGxlYmFycworICAgICAgICAgICAgLnJlbmRlcl90ZW1wbGF0 ZSgmdGVtcGxhdGVfc3RyaW5nLCBkYXRhKQorICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgRXJy b3I6OlJlbmRlckVycm9yKGVyci5pbnRvKCkpKT87CiAKLSAgICBoYW5kbGViYXJzLnJlZ2lzdGVy X2hlbHBlcigKLSAgICAgICAgInJlbGF0aXZlLXBlcmNlbnRhZ2UiLAotICAgICAgICBCb3g6Om5l dyhoYW5kbGViYXJzX3JlbGF0aXZlX3BlcmNlbnRhZ2VfaGVscGVyKSwKLSAgICApOworICAgICAg ICBsZXQgbXV0IHJlbmRlcmVkX3RlbXBsYXRlID0gcmVuZGVyZXIucG9zdHByb2Nlc3MocmVuZGVy ZWRfdGVtcGxhdGUpOwogCi0gICAgbGV0IHJlbmRlcmVkX3RlbXBsYXRlID0gaGFuZGxlYmFycwot ICAgICAgICAucmVuZGVyX3RlbXBsYXRlKHRlbXBsYXRlLCBkYXRhKQotICAgICAgICAubWFwX2Vy cih8ZXJyfCBFcnJvcjo6UmVuZGVyRXJyb3IoZXJyLmludG8oKSkpPzsKKyAgICAgICAgaWYgaHRt bF9mYWxsYmFjayB7CisgICAgICAgICAgICByZW5kZXJlZF90ZW1wbGF0ZSA9IGZvcm1hdCEoCisg ICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxwcmU+e308L3ByZT48L2JvZHk+PC9odG1sPiIs CisgICAgICAgICAgICAgICAgaGFuZGxlYmFyczo6aHRtbF9lc2NhcGUoJnJlbmRlcmVkX3RlbXBs YXRlKQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQogCi0gICAgT2socmVuZGVyZWRfdGVtcGxh dGUpCisgICAgICAgIE9rKFNvbWUocmVuZGVyZWRfdGVtcGxhdGUpKQorICAgIH0gZWxzZSB7Cisg ICAgICAgIE9rKE5vbmUpCisgICAgfQogfQogCiAvLy8gUmVuZGVyIGEgdGVtcGxhdGUgc3RyaW5n LgogLy8vCi0vLy8gVGhlIG91dHB1dCBmb3JtYXQgY2FuIGJlIGNob3NlbiB2aWEgdGhlIGByZW5k ZXJlcmAgcGFyYW1ldGVyIChzZWUgW1RlbXBsYXRlVHlwZV0KLS8vLyBmb3IgYXZhaWxhYmxlIG9w dGlvbnMpLgorLy8vIFRoZSBvdXRwdXQgZm9ybWF0IGNhbiBiZSBjaG9zZW4gdmlhIHRoZSBgdHlg IHBhcmFtZXRlciAoc2VlIFtUZW1wbGF0ZVR5cGVdCisvLy8gZm9yIGF2YWlsYWJsZSBvcHRpb25z KS4gVXNlIGFuIG92ZXJyaWRlIHRlbXBsYXRlIGlmIGV4aXN0aW5nIGFuZCByZW5kZXJhYmxlLAor Ly8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gb3JpZ2luYWwgdGVtcGxhdGUuIElmIFtUZW1wbGF0 ZVR5cGVdIGlzIGBIdG1sQm9keWAgYnV0IG5vCisvLy8gSFRNTCB0ZW1wbGF0ZSBjb3VsZCBiZSB1 c2VkLCBmYWxsIGJhY2sgdG8gcGxhaW50ZXh0IHRlbXBsYXRlcyBhbmQgYWRkIHRoZSB0YWdzCisv Ly8gYDxodG1sPjxib2R5PjxwcmU+YC4KIHB1YiBmbiByZW5kZXJfdGVtcGxhdGUoCiAgICAgbXV0 IHR5OiBUZW1wbGF0ZVR5cGUsCiAgICAgdGVtcGxhdGU6ICZzdHIsCiAgICAgZGF0YTogJlZhbHVl LAogKSAtPiBSZXN1bHQ8U3RyaW5nLCBFcnJvcj4gewotICAgIGxldCBmaWxlbmFtZSA9IGZvcm1h dCEoInt0ZW1wbGF0ZX0te3N1ZmZpeH0iLCBzdWZmaXggPSB0eS5maWxlX3N1ZmZpeCgpKTsKLQot ICAgIGxldCB0ZW1wbGF0ZV9zdHJpbmcgPSBjb250ZXh0Ojpjb250ZXh0KCkubG9va3VwX3RlbXBs YXRlKCZmaWxlbmFtZSwgTm9uZSk/OwotCi0gICAgbGV0ICh0ZW1wbGF0ZV9zdHJpbmcsIGZhbGxi YWNrKSA9IG1hdGNoICh0ZW1wbGF0ZV9zdHJpbmcsIHR5KSB7Ci0gICAgICAgIChOb25lLCBUZW1w bGF0ZVR5cGU6Okh0bWxCb2R5KSA9PiB7Ci0gICAgICAgICAgICB0eSA9IFRlbXBsYXRlVHlwZTo6 UGxhaW50ZXh0Qm9keTsKLSAgICAgICAgICAgIGxldCBwbGFpbnRleHRfZmlsZW5hbWUgPSBmb3Jt YXQhKCJ7dGVtcGxhdGV9LXtzdWZmaXh9Iiwgc3VmZml4ID0gdHkuZmlsZV9zdWZmaXgoKSk7Ci0g ICAgICAgICAgICAoCi0gICAgICAgICAgICAgICAgY29udGV4dDo6Y29udGV4dCgpLmxvb2t1cF90 ZW1wbGF0ZSgmcGxhaW50ZXh0X2ZpbGVuYW1lLCBOb25lKT8sCi0gICAgICAgICAgICAgICAgdHJ1 ZSwKLSAgICAgICAgICAgICkKKyAgICBsZXQgbXV0IHVzZV9vdmVycmlkZSA9IHRydWU7CisgICAg bGV0IG11dCBodG1sX2ZhbGxiYWNrID0gZmFsc2U7CisKKyAgICBsb29wIHsKKyAgICAgICAgbGV0 IGZpbGVuYW1lID0gZm9ybWF0ISgie3RlbXBsYXRlfS17c3VmZml4fSIsIHN1ZmZpeCA9IHR5LmZp bGVfc3VmZml4KCkpOworICAgICAgICBsZXQgcmVzdWx0ID0gcmVuZGVyX3RlbXBsYXRlX2ltcGwo ZGF0YSwgdHksICZmaWxlbmFtZSwgdXNlX292ZXJyaWRlLCBodG1sX2ZhbGxiYWNrKTsKKworICAg ICAgICBtYXRjaCByZXN1bHQgeworICAgICAgICAgICAgT2soU29tZShzKSkgPT4geworICAgICAg ICAgICAgICAgIHJldHVybiBPayhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9rKE5v bmUpID0+IHt9CisgICAgICAgICAgICBFcnIoZXJyKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0 IHNvdXJjZSA9IGlmIHVzZV9vdmVycmlkZSB7ICJvdmVycmlkZSIgfSBlbHNlIHsgInZlbmRvciIg fTsKKyAgICAgICAgICAgICAgICB0cmFjaW5nOjplcnJvciEoImZhaWxlZCB0byByZW5kZXIge3Nv dXJjZX0gdGVtcGxhdGUgJ3tmaWxlbmFtZX0nOiB7ZXJyfSIpOworICAgICAgICAgICAgfQogICAg ICAgICB9Ci0gICAgICAgICh0ZW1wbGF0ZV9zdHJpbmcsIF8pID0+ICh0ZW1wbGF0ZV9zdHJpbmcs IGZhbHNlKSwKLSAgICB9OwotCi0gICAgbGV0IHRlbXBsYXRlX3N0cmluZyA9IHRlbXBsYXRlX3N0 cmluZy5va19vcihFcnJvcjo6R2VuZXJpYyhmb3JtYXQhKAotICAgICAgICAiY291bGQgbm90IGxv YWQgdGVtcGxhdGUgJ3t0ZW1wbGF0ZX0nIgotICAgICkpKT87CiAKLSAgICBsZXQgbXV0IHJlbmRl cmVkID0gcmVuZGVyX3RlbXBsYXRlX2ltcGwoJnRlbXBsYXRlX3N0cmluZywgZGF0YSwgdHkpPzsK LSAgICByZW5kZXJlZCA9IHR5LnBvc3Rwcm9jZXNzKHJlbmRlcmVkKTsKLQotICAgIGlmIGZhbGxi YWNrIHsKLSAgICAgICAgcmVuZGVyZWQgPSBmb3JtYXQhKAotICAgICAgICAgICAgIjxodG1sPjxi b2R5PjxwcmU+e308L3ByZT48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICBoYW5kbGViYXJz OjpodG1sX2VzY2FwZSgmcmVuZGVyZWQpCi0gICAgICAgICk7CisgICAgICAgIG1hdGNoICh0eSwg dXNlX292ZXJyaWRlKSB7CisgICAgICAgICAgICAoVGVtcGxhdGVUeXBlOjpIdG1sQm9keSwgdHJ1 ZSkgPT4geworICAgICAgICAgICAgICAgIHVzZV9vdmVycmlkZSA9IGZhbHNlOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgKFRlbXBsYXRlVHlwZTo6SHRtbEJvZHksIGZhbHNlKSA9PiB7Cisg ICAgICAgICAgICAgICAgdHkgPSBUZW1wbGF0ZVR5cGU6OlBsYWludGV4dEJvZHk7CisgICAgICAg ICAgICAgICAgdXNlX292ZXJyaWRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBodG1sX2ZhbGxi YWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIChUZW1wbGF0ZVR5cGU6OlBs YWludGV4dEJvZHksIHRydWUpID0+IHsKKyAgICAgICAgICAgICAgICB1c2Vfb3ZlcnJpZGUgPSBm YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIChUZW1wbGF0ZVR5cGU6OlBsYWludGV4 dEJvZHksIGZhbHNlKSA9PiB7CisgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGVycm9yLCBubyBv dGhlciBvcHRpb25zCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICAoVGVtcGxhdGVUeXBlOjpTdWJqZWN0LCB0cnVlKSA9PiB7CisgICAgICAgICAgICAg ICAgdXNlX292ZXJyaWRlID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAoVGVt cGxhdGVUeXBlOjpTdWJqZWN0LCBmYWxzZSkgPT4gYnJlYWssCisgICAgICAgIH0KICAgICB9CiAK LSAgICBPayhyZW5kZXJlZCkKKyAgICBFcnIoRXJyb3I6OkdlbmVyaWMoCisgICAgICAgICJmYWls ZWQgdG8gcmVuZGVyIG5vdGlmaWNhdGlvbiB0ZW1wbGF0ZSwgYWxsIHRlbXBsYXRlIGNhbmRpZGF0 ZXMgYXJlIGVycm9uZW91cyBvciBtaXNzaW5nIgorICAgICAgICAgICAgLmludG8oKSwKKyAgICAp KQogfQogCiAjW2NmZyh0ZXN0KV0KLS0gCjIuMzkuNQoKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpwdmUtZGV2ZWwgbWFpbGluZyBsaXN0CnB2ZS1kZXZl bEBsaXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFp bG1hbi9saXN0aW5mby9wdmUtZGV2ZWwK