From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 9DA7E1FF183 for ; Wed, 10 Sep 2025 12:23:33 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 3709D1E089; Wed, 10 Sep 2025 12:23:37 +0200 (CEST) From: Shannon Sterz To: pdm-devel@lists.proxmox.com Date: Wed, 10 Sep 2025 12:22:41 +0200 Message-ID: <20250910102240.107012-5-s.sterz@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20250910102240.107012-3-s.sterz@proxmox.com> References: <20250910102240.107012-3-s.sterz@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1757499784575 X-SPAM-LEVEL: Spam detection results: 1 AWL -2.831 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 KAM_SOMETLD_ARE_BAD_TLD 5 .bar, .beauty, .buzz, .cam, .casa, .cfd, .club, .date, .guru, .link, .live, .monster, .online, .press, .pw, .quest, .rest, .sbs, .shop, .stream, .top, .trade, .wiki, .work, .xyz TLD abuse PDS_OTHER_BAD_TLD 0.75 Untrustworthy TLDs SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pdm-devel] [PATCH datacenter-manager bookworm v4 1/3] server: add pdmAtoB upgrade checker script X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Datacenter Manager development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" VGVzdGVkLWJ5OiBNaWNoYWVsIEvDtnBwbCA8bS5rb2VwcGxAcHJveG1veC5jb20+ClNpZ25lZC1v ZmYtYnk6IFNoYW5ub24gU3RlcnogPHMuc3RlcnpAcHJveG1veC5jb20+Ci0tLQogQ2FyZ28udG9t bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogTWFrZWZpbGUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogY2xpL3BkbUF0b0IvQ2FyZ28udG9t bCAgICAgICAgICAgICAgICAgICAgfCAgMTUgKwogY2xpL3BkbUF0b0Ivc3JjL21haW4ucnMgICAg ICAgICAgICAgICAgICAgfCAgMTkgKwogZGViaWFuL3Byb3htb3gtZGF0YWNlbnRlci1tYW5hZ2Vy Lmluc3RhbGwgfCAgIDMgKwogbGliL3Byb3htb3gtdXBncmFkZS1jaGVja3MvQ2FyZ28udG9tbCAg ICAgfCAgMTkgKwogbGliL3Byb3htb3gtdXBncmFkZS1jaGVja3Mvc3JjL2xpYi5ycyAgICAgfCA4 NDYgKysrKysrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA5MDYgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNsaS9wZG1BdG9CL0NhcmdvLnRvbWwKIGNyZWF0ZSBt b2RlIDEwMDY0NCBjbGkvcGRtQXRvQi9zcmMvbWFpbi5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxp Yi9wcm94bW94LXVwZ3JhZGUtY2hlY2tzL0NhcmdvLnRvbWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBs aWIvcHJveG1veC11cGdyYWRlLWNoZWNrcy9zcmMvbGliLnJzCgpkaWZmIC0tZ2l0IGEvQ2FyZ28u dG9tbCBiL0NhcmdvLnRvbWwKaW5kZXggMWU2ZjVhMy4uZDZjMTI0OSAxMDA2NDQKLS0tIGEvQ2Fy Z28udG9tbAorKysgYi9DYXJnby50b21sCkBAIC0yMCwxMCArMjAsMTIgQEAgbWVtYmVycyA9IFsK ICAgICAibGliL3BkbS1jbGllbnQiLAogICAgICJsaWIvcGRtLWNvbmZpZyIsCiAgICAgImxpYi9w ZG0tdWktc2hhcmVkIiwKKyAgICAibGliL3Byb3htb3gtdXBncmFkZS1jaGVja3MiLAoKICAgICAi Y2xpL2NsaWVudCIsCiAgICAgImNsaS9hZG1pbiIsCiAgICAgImNsaS9wcm94bW94LWZpZG8yIiwK KyAgICAiY2xpL3BkbUF0b0IiLAogXQoKIFt3b3Jrc3BhY2UuZGVwZW5kZW5jaWVzXQpAQCAtODcs NiArODksNyBAQCBwZG0tY29uZmlnID0geyBwYXRoID0gImxpYi9wZG0tY29uZmlnIiB9CiBwZG0t Y2xpZW50ID0geyB2ZXJzaW9uID0gIjAuMSIsIHBhdGggPSAibGliL3BkbS1jbGllbnQiIH0KIHBk bS11aS1zaGFyZWQgPSB7IHZlcnNpb24gPSAiMC4xIiwgcGF0aCA9ICJsaWIvcGRtLXVpLXNoYXJl ZCIgfQogcHJveG1veC1maWRvMiA9IHsgcGF0aCA9ICJjbGkvcHJveG1veC1maWRvMiIgfQorcHJv eG1veC11cGdyYWRlLWNoZWNrcyA9IHsgcGF0aCA9ICJsaWIvcHJveG1veC11cGdyYWRlLWNoZWNr cyIgfQoKICMgcmVndWxhciBjcmF0ZXMKIGFueWhvdyA9ICIxLjAiCmRpZmYgLS1naXQgYS9NYWtl ZmlsZSBiL01ha2VmaWxlCmluZGV4IGQxOGZiMGQuLmZiMmU5YmQgMTAwNjQ0Ci0tLSBhL01ha2Vm aWxlCisrKyBiL01ha2VmaWxlCkBAIC00Miw2ICs0Miw3IEBAIFVTUl9CSU4gOj0gXAoKIFVTUl9T QklOIDo9IFwKIAlwcm94bW94LWRhdGFjZW50ZXItbWFuYWdlci1hZG1pbiBcCisJcGRtQXRvQiBc CgogU0VSVklDRV9CSU4gOj0gXAogCXByb3htb3gtZGF0YWNlbnRlci1hcGkgXApkaWZmIC0tZ2l0 IGEvY2xpL3BkbUF0b0IvQ2FyZ28udG9tbCBiL2NsaS9wZG1BdG9CL0NhcmdvLnRvbWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1ZDgzOQotLS0gL2Rldi9udWxsCisrKyBi L2NsaS9wZG1BdG9CL0NhcmdvLnRvbWwKQEAgLTAsMCArMSwxNSBAQAorW3BhY2thZ2VdCituYW1l ID0gInBkbUF0b0IiCitkZXNjcmlwdGlvbiA9ICJQcm94bW94IERhdGFjZW50ZXIgVXBncmFkZSBD aGVja3MiCitob21lcGFnZSA9ICJodHRwczovL3d3dy5wcm94bW94LmNvbSIKK3ZlcnNpb24ud29y a3NwYWNlID0gdHJ1ZQorYXV0aG9ycy53b3Jrc3BhY2UgPSB0cnVlCitlZGl0aW9uLndvcmtzcGFj ZSA9IHRydWUKK2xpY2Vuc2Uud29ya3NwYWNlID0gdHJ1ZQorcmVwb3NpdG9yeS53b3Jrc3BhY2Ug PSB0cnVlCitleGNsdWRlLndvcmtzcGFjZSA9IHRydWUKKworW2RlcGVuZGVuY2llc10KK2FueWhv dy53b3Jrc3BhY2UgPSB0cnVlCitwcm94bW94LXVwZ3JhZGUtY2hlY2tzLndvcmtzcGFjZSA9IHRy dWUKK3BkbS1idWlsZGNmZy53b3Jrc3BhY2UgPSB0cnVlCmRpZmYgLS1naXQgYS9jbGkvcGRtQXRv Qi9zcmMvbWFpbi5ycyBiL2NsaS9wZG1BdG9CL3NyYy9tYWluLnJzCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjUyYjcwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGkvcGRtQXRv Qi9zcmMvbWFpbi5ycwpAQCAtMCwwICsxLDE5IEBACit1c2UgcGRtX2J1aWxkY2ZnOjp7UFJPWE1P WF9QS0dfUkVMRUFTRSwgUFJPWE1PWF9QS0dfVkVSU0lPTn07Cit1c2UgcHJveG1veF91cGdyYWRl X2NoZWNrczo6VXBncmFkZUNoZWNrZXJCdWlsZGVyOworCitmbiBtYWluKCkgLT4gUmVzdWx0PCgp LCBhbnlob3c6OkVycm9yPiB7CisgICAgVXBncmFkZUNoZWNrZXJCdWlsZGVyOjpuZXcoCisgICAg ICAgICJib29rd29ybSIsCisgICAgICAgICJ0cml4aWUiLAorICAgICAgICAicHJveG1veC1kYXRh Y2VudGVyLW1hbmFnZXIiLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAxMSwKKyAg ICAgICAgJmZvcm1hdCEoIntQUk9YTU9YX1BLR19WRVJTSU9OfS57UFJPWE1PWF9QS0dfUkVMRUFT RX0iKSwKKyAgICApCisgICAgLmFwdF9zdGF0ZV9maWxlX2xvY2F0aW9uKHBkbV9idWlsZGNmZzo6 QVBUX1BLR19TVEFURV9GTikKKyAgICAuYWRkX3NlcnZpY2VfdG9fY2hlY2tzKCJwcm94bW94LWRh dGFjZW50ZXItYXBpIikKKyAgICAuYWRkX3NlcnZpY2VfdG9fY2hlY2tzKCJwcm94bW94LWRhdGFj ZW50ZXItcHJpdmlsZWdlZC1hcGkiKQorICAgIC5idWlsZCgpCisgICAgLnJ1bigpCit9CmRpZmYg LS1naXQgYS9kZWJpYW4vcHJveG1veC1kYXRhY2VudGVyLW1hbmFnZXIuaW5zdGFsbCBiL2RlYmlh bi9wcm94bW94LWRhdGFjZW50ZXItbWFuYWdlci5pbnN0YWxsCmluZGV4IDcxZjhkYTkuLmMxMmEx OTYgMTAwNjQ0Ci0tLSBhL2RlYmlhbi9wcm94bW94LWRhdGFjZW50ZXItbWFuYWdlci5pbnN0YWxs CisrKyBiL2RlYmlhbi9wcm94bW94LWRhdGFjZW50ZXItbWFuYWdlci5pbnN0YWxsCkBAIC0xMCw5 ICsxMCwxMiBAQCB1c3IvbGliZXhlYy9wcm94bW94L3Byb3htb3gtZGF0YWNlbnRlci1tYW5hZ2Vy LWJhbm5lcgogdXNyL2xpYmV4ZWMvcHJveG1veC9wcm94bW94LWRhdGFjZW50ZXItbWFuYWdlci1k YWlseS11cGRhdGUKIHVzci9saWJleGVjL3Byb3htb3gvcHJveG1veC1kYXRhY2VudGVyLXByaXZp bGVnZWQtYXBpCiB1c3Ivc2Jpbi9wcm94bW94LWRhdGFjZW50ZXItbWFuYWdlci1hZG1pbgordXNy L3NiaW4vcGRtQXRvQgogdXNyL3NoYXJlL2Jhc2gtY29tcGxldGlvbi9jb21wbGV0aW9ucy9wcm94 bW94LWRhdGFjZW50ZXItYXBpLmJjCiB1c3Ivc2hhcmUvYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRp b25zL3Byb3htb3gtZGF0YWNlbnRlci1tYW5hZ2VyLWFkbWluLmJjCiB1c3Ivc2hhcmUvYmFzaC1j b21wbGV0aW9uL2NvbXBsZXRpb25zL3Byb3htb3gtZGF0YWNlbnRlci1wcml2aWxlZ2VkLWFwaS5i YwordXNyL3NoYXJlL2Jhc2gtY29tcGxldGlvbi9jb21wbGV0aW9ucy9wZG1BdG9CLmJjCiB1c3Iv c2hhcmUvenNoL3ZlbmRvci1jb21wbGV0aW9ucy9fcHJveG1veC1kYXRhY2VudGVyLWFwaQogdXNy L3NoYXJlL3pzaC92ZW5kb3ItY29tcGxldGlvbnMvX3Byb3htb3gtZGF0YWNlbnRlci1tYW5hZ2Vy LWFkbWluCiB1c3Ivc2hhcmUvenNoL3ZlbmRvci1jb21wbGV0aW9ucy9fcHJveG1veC1kYXRhY2Vu dGVyLXByaXZpbGVnZWQtYXBpCit1c3Ivc2hhcmUvenNoL3ZlbmRvci1jb21wbGV0aW9ucy9fcGRt QXRvQgpkaWZmIC0tZ2l0IGEvbGliL3Byb3htb3gtdXBncmFkZS1jaGVja3MvQ2FyZ28udG9tbCBi L2xpYi9wcm94bW94LXVwZ3JhZGUtY2hlY2tzL0NhcmdvLnRvbWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNTc0NTgyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9wcm94bW94 LXVwZ3JhZGUtY2hlY2tzL0NhcmdvLnRvbWwKQEAgLTAsMCArMSwxOSBAQAorW3BhY2thZ2VdCitu YW1lID0gInByb3htb3gtdXBncmFkZS1jaGVja3MiCitkZXNjcmlwdGlvbiA9ICJIZWxwZXJzIHRv IGltcGxlbWVudCB1cGdyYWRlIGNoZWNrcyBmb3IgUHJveG1veCBwcm9kdWN0cy4iCit2ZXJzaW9u ID0gIjAuMS4wIgorCithdXRob3JzLndvcmtzcGFjZSA9IHRydWUKK2VkaXRpb24ud29ya3NwYWNl ID0gdHJ1ZQorbGljZW5zZS53b3Jrc3BhY2UgPSB0cnVlCityZXBvc2l0b3J5LndvcmtzcGFjZSA9 IHRydWUKK2V4Y2x1ZGUud29ya3NwYWNlID0gdHJ1ZQorCitbZGVwZW5kZW5jaWVzXQorYW55aG93 LndvcmtzcGFjZSA9IHRydWUKK2NvbnN0X2Zvcm1hdC53b3Jrc3BhY2UgPSB0cnVlCityZWdleC53 b3Jrc3BhY2UgPSB0cnVlCit0ZXJtY29sb3Iud29ya3NwYWNlID0gdHJ1ZQorCitwcm94bW94LWFw dCA9IHsgd29ya3NwYWNlID0gdHJ1ZSwgZmVhdHVyZXMgPSBbICJjYWNoZSIgXSB9Citwcm94bW94 LWFwdC1hcGktdHlwZXMud29ya3NwYWNlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvbGliL3Byb3htb3gt dXBncmFkZS1jaGVja3Mvc3JjL2xpYi5ycyBiL2xpYi9wcm94bW94LXVwZ3JhZGUtY2hlY2tzL3Ny Yy9saWIucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5OTllMQotLS0g L2Rldi9udWxsCisrKyBiL2xpYi9wcm94bW94LXVwZ3JhZGUtY2hlY2tzL3NyYy9saWIucnMKQEAg LTAsMCArMSw4NDYgQEAKK3VzZSBzdGQ6OnBhdGg6OlBhdGg7Cit1c2Ugc3RkOjp7aW86OldyaXRl LCBwYXRoOjpQYXRoQnVmfTsKKwordXNlIGFueWhvdzo6e2Zvcm1hdF9lcnIsIEVycm9yfTsKK3Vz ZSBjb25zdF9mb3JtYXQ6OmNvbmNhdGNwOwordXNlIHJlZ2V4OjpSZWdleDsKK3VzZSB0ZXJtY29s b3I6OntDb2xvciwgQ29sb3JDaG9pY2UsIENvbG9yU3BlYywgU3RhbmRhcmRTdHJlYW0sIFdyaXRl Q29sb3J9OworCit1c2UgcHJveG1veF9hcHQ6OnJlcG9zaXRvcmllczsKK3VzZSBwcm94bW94X2Fw dF9hcGlfdHlwZXM6OntBUFRSZXBvc2l0b3J5RmlsZSwgQVBUUmVwb3NpdG9yeVBhY2thZ2VUeXBl fTsKKworLy8vIEVhc2lseSBjcmVhdGUgYW5kIGNvbmZpZ3VyZSBhbiB1cGdyYWRlIGNoZWNrZXIg Zm9yIFByb3htb3ggcHJvZHVjdHMuCitwdWIgc3RydWN0IFVwZ3JhZGVDaGVja2VyQnVpbGRlciB7 CisgICAgb2xkX3N1aXRlOiBTdHJpbmcsCisgICAgbmV3X3N1aXRlOiBTdHJpbmcsCisgICAgbWV0 YV9wYWNrYWdlX25hbWU6IFN0cmluZywKKyAgICBtaW5pbXVtX21ham9yX3ZlcnNpb246IHU4LAor ICAgIG1pbmltdW1fbWlub3JfdmVyc2lvbjogdTgsCisgICAgbWluaW11bV9wa2dyZWw6IHU4LAor ICAgIGFwdF9zdGF0ZV9maWxlOiBPcHRpb248UGF0aEJ1Zj4sCisgICAgYXBpX3NlcnZlcl9wYWNr YWdlOiBPcHRpb248U3RyaW5nPiwKKyAgICBydW5uaW5nX2FwaV9zZXJ2ZXJfdmVyc2lvbjogU3Ry aW5nLAorICAgIHNlcnZpY2VzX2xpc3Q6IFZlYzxTdHJpbmc+LAorfQorCitpbXBsIFVwZ3JhZGVD aGVja2VyQnVpbGRlciB7CisgICAgLy8vIENyZWF0ZSBhIG5ldyBVcGdyYWRlQ2hlY2tlckJ1aWxk ZXIKKyAgICAvLy8KKyAgICAvLy8gKiBgb2xkX3N1aXRlYDogVGhlIERlYmlhbiBzdWl0ZSBiZWZv cmUgdGhlIHVwZ3JhZGUuCisgICAgLy8vICogYG5ld19zdWl0ZWA6IFRoZSBEZWJpYW4gc3VpdGUg YWZ0ZXIgdGhlIHVwZ3JhZGUuCisgICAgLy8vICogYG1ldGFfcGFja2FnZV9uYW1lYDogVGhlIG5h bWUgb2YgdGhlIHByb2R1Y3QncyBtZXRhIHBhY2thZ2UuCisgICAgLy8vICogYG1pbmltdW1fbWFq b3JfdmVyc2lvbmA6IFRoZSBtaW5pbXVtIG1ham9yIHZlcnNpb24gYmVmb3JlIHRoZSB1cGdyYWRl LgorICAgIC8vLyAqIGBtaW5pbXVtX21pbm9yX3ZlcnNpb25gOiBUaGUgbWluaW11bSBtaW5vciB2 ZXJzaW9uIGJlZm9yZSB0aGUgdXBncmFkZS4KKyAgICAvLy8gKiBgbWluaW11bV9wa2dyZWxgOiBU aGUgbWluaW11bSBwYWNrYWdlIHJlbGVhc2UgYmVmb3JlIHRoZSB1cGdyYWRlLgorICAgIC8vLyAq IGBydW5uaW5nX2FwaV9zZXJ2ZXJfdmVyc2lvbmA6IFRoZSBjdXJyZW50bHkgcnVubmluZyBBUEkg c2VydmVyIHZlcnNpb24uCisgICAgcHViIGZuIG5ldygKKyAgICAgICAgb2xkX3N1aXRlOiAmc3Ry LAorICAgICAgICBuZXdfc3VpdGU6ICZzdHIsCisgICAgICAgIG1ldGFfcGFja2FnZV9uYW1lOiAm c3RyLAorICAgICAgICBtaW5pbXVtX21ham9yX3ZlcnNpb246IHU4LAorICAgICAgICBtaW5pbXVt X21pbm9yX3ZlcnNpb246IHU4LAorICAgICAgICBtaW5pbXVtX3BrZ3JlbDogdTgsCisgICAgICAg IHJ1bm5pbmdfYXBpX3NlcnZlcl92ZXJzaW9uOiAmc3RyLAorICAgICkgLT4gVXBncmFkZUNoZWNr ZXJCdWlsZGVyIHsKKyAgICAgICAgVXBncmFkZUNoZWNrZXJCdWlsZGVyIHsKKyAgICAgICAgICAg IG9sZF9zdWl0ZTogb2xkX3N1aXRlLmludG8oKSwKKyAgICAgICAgICAgIG5ld19zdWl0ZTogbmV3 X3N1aXRlLmludG8oKSwKKyAgICAgICAgICAgIG1ldGFfcGFja2FnZV9uYW1lOiBtZXRhX3BhY2th Z2VfbmFtZS5pbnRvKCksCisgICAgICAgICAgICBtaW5pbXVtX21ham9yX3ZlcnNpb24sCisgICAg ICAgICAgICBtaW5pbXVtX21pbm9yX3ZlcnNpb24sCisgICAgICAgICAgICBtaW5pbXVtX3BrZ3Jl bCwKKyAgICAgICAgICAgIGFwdF9zdGF0ZV9maWxlOiBOb25lLAorICAgICAgICAgICAgYXBpX3Nl cnZlcl9wYWNrYWdlOiBOb25lLAorICAgICAgICAgICAgcnVubmluZ19hcGlfc2VydmVyX3ZlcnNp b246IHJ1bm5pbmdfYXBpX3NlcnZlcl92ZXJzaW9uLmludG8oKSwKKyAgICAgICAgICAgIHNlcnZp Y2VzX2xpc3Q6IFZlYzo6bmV3KCksCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gQnVpbGRl ci1zdHlsZSBtZXRob2QgdG8gc2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgQVBUIHN0YXRlIGZpbGUu CisgICAgcHViIGZuIGFwdF9zdGF0ZV9maWxlX2xvY2F0aW9uPFA6IEFzUmVmPFBhdGg+PihtdXQg c2VsZiwgcGF0aDogUCkgLT4gU2VsZiB7CisgICAgICAgIHNlbGYuYXB0X3N0YXRlX2ZpbGUgPSBT b21lKHBhdGguYXNfcmVmKCkuaW50bygpKTsKKyAgICAgICAgc2VsZgorICAgIH0KKworICAgIC8v LyBCdWlsZGVyLXN0eWxlIG1ldGhvZCB0byBzZXQgdGhlIEFQSSBzZXJ2ZXIgcGFja2FnZSBuYW1l LgorICAgIHB1YiBmbiBhcGlfc2VydmVyX3BhY2thZ2UobXV0IHNlbGYsIGFwaV9zZXJ2ZXJfcGFj a2FnZTogJnN0cikgLT4gU2VsZiB7CisgICAgICAgIHNlbGYuYXBpX3NlcnZlcl9wYWNrYWdlID0g U29tZShhcGlfc2VydmVyX3BhY2thZ2UuaW50bygpKTsKKyAgICAgICAgc2VsZgorICAgIH0KKyAg ICAvLy8gQWRkIGEgc2VydmljZSB0byB0aGUgbGlzdCBvZiBzZXJ2aWNlcyB0aGF0IHdpbGwgYmUg Y2hlY2tlZC4KKyAgICBwdWIgZm4gYWRkX3NlcnZpY2VfdG9fY2hlY2tzKG11dCBzZWxmLCBzZXJ2 aWNlX25hbWU6ICZzdHIpIC0+IFNlbGYgeworICAgICAgICBzZWxmLnNlcnZpY2VzX2xpc3QucHVz aChzZXJ2aWNlX25hbWUuaW50bygpKTsKKyAgICAgICAgc2VsZgorICAgIH0KKworICAgIC8vLyBD b25zdHJ1Y3QgdGhlIFVwZ3JhZGVDaGVja2VyLCBjb25zdW1lcyB0aGUgVXBncmFkZUNoZWNrZXJC dWlsZGVyCisgICAgcHViIGZuIGJ1aWxkKG11dCBzZWxmKSAtPiBVcGdyYWRlQ2hlY2tlciB7Cisg ICAgICAgIFVwZ3JhZGVDaGVja2VyIHsKKyAgICAgICAgICAgIG91dHB1dDogQ29uc29sZU91dHB1 dDo6bmV3KCksCisgICAgICAgICAgICB1cGdyYWRlZDogZmFsc2UsCisgICAgICAgICAgICBvbGRf c3VpdGU6IHNlbGYub2xkX3N1aXRlLAorICAgICAgICAgICAgbmV3X3N1aXRlOiBzZWxmLm5ld19z dWl0ZSwKKyAgICAgICAgICAgIG1pbmltdW1fbWFqb3JfdmVyc2lvbjogc2VsZi5taW5pbXVtX21h am9yX3ZlcnNpb24sCisgICAgICAgICAgICBtaW5pbXVtX21pbm9yX3ZlcnNpb246IHNlbGYubWlu aW11bV9taW5vcl92ZXJzaW9uLAorICAgICAgICAgICAgbWluaW11bV9wa2dyZWw6IHNlbGYubWlu aW11bV9wa2dyZWwsCisgICAgICAgICAgICBhcHRfc3RhdGVfZmlsZTogc2VsZi5hcHRfc3RhdGVf ZmlsZS50YWtlKCkudW53cmFwX29yX2Vsc2UofHwgeworICAgICAgICAgICAgICAgIFBhdGhCdWY6 OmZyb20oZm9ybWF0ISgKKyAgICAgICAgICAgICAgICAgICAgIi92YXIvbGliL3t9L3BrZy1zdGF0 ZS5qc29uIiwKKyAgICAgICAgICAgICAgICAgICAgJnNlbGYubWV0YV9wYWNrYWdlX25hbWUKKyAg ICAgICAgICAgICAgICApKQorICAgICAgICAgICAgfSksCisgICAgICAgICAgICBhcGlfc2VydmVy X3BhY2thZ2U6IHNlbGYKKyAgICAgICAgICAgICAgICAuYXBpX3NlcnZlcl9wYWNrYWdlCisgICAg ICAgICAgICAgICAgLnVud3JhcF9vcl9lbHNlKHx8IHNlbGYubWV0YV9wYWNrYWdlX25hbWUuY2xv bmUoKSksCisgICAgICAgICAgICBydW5uaW5nX2FwaV9zZXJ2ZXJfdmVyc2lvbjogc2VsZi5ydW5u aW5nX2FwaV9zZXJ2ZXJfdmVyc2lvbiwKKyAgICAgICAgICAgIG1ldGFfcGFja2FnZV9uYW1lOiBz ZWxmLm1ldGFfcGFja2FnZV9uYW1lLAorICAgICAgICAgICAgc2VydmljZXNfbGlzdDogc2VsZi5z ZXJ2aWNlc19saXN0LAorICAgICAgICB9CisgICAgfQorfQorCisvLy8gSGVscGVycyB0byBlYXNp bHkgY29uc3RydWN0IGEgc2V0IG9mIHVwZ3JhZGUgY2hlY2tzLgorcHViIHN0cnVjdCBVcGdyYWRl Q2hlY2tlciB7CisgICAgb3V0cHV0OiBDb25zb2xlT3V0cHV0LAorICAgIHVwZ3JhZGVkOiBib29s LAorICAgIG9sZF9zdWl0ZTogU3RyaW5nLAorICAgIG5ld19zdWl0ZTogU3RyaW5nLAorICAgIG1l dGFfcGFja2FnZV9uYW1lOiBTdHJpbmcsCisgICAgbWluaW11bV9tYWpvcl92ZXJzaW9uOiB1OCwK KyAgICBtaW5pbXVtX21pbm9yX3ZlcnNpb246IHU4LAorICAgIG1pbmltdW1fcGtncmVsOiB1OCwK KyAgICBhcHRfc3RhdGVfZmlsZTogUGF0aEJ1ZiwKKyAgICBhcGlfc2VydmVyX3BhY2thZ2U6IFN0 cmluZywKKyAgICBydW5uaW5nX2FwaV9zZXJ2ZXJfdmVyc2lvbjogU3RyaW5nLAorICAgIHNlcnZp Y2VzX2xpc3Q6IFZlYzxTdHJpbmc+LAorfQorCitpbXBsIFVwZ3JhZGVDaGVja2VyIHsKKyAgICAv Ly8gUnVuIGFsbCBjaGVja3MuCisgICAgcHViIGZuIHJ1bigmbXV0IHNlbGYpIC0+IFJlc3VsdDwo KSwgRXJyb3I+IHsKKyAgICAgICAgc2VsZi5jaGVja19wYWNrYWdlcygpPzsKKyAgICAgICAgc2Vs Zi5jaGVja19taXNjKCk/OworICAgICAgICBzZWxmLnN1bW1hcnkoKQorICAgIH0KKworICAgIC8v LyBSdW4gbWlzY2VsbGFuZW91cyBjaGVja3MuCisgICAgcHViIGZuIGNoZWNrX21pc2MoJm11dCBz ZWxmKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYub3V0cHV0LnByaW50X2hl YWRlcigiTUlTQ0VMTEFORU9VUyBDSEVDS1MiKT87CisgICAgICAgIHNlbGYuY2hlY2tfc2Vydmlj ZXMoKT87CisgICAgICAgIHNlbGYuY2hlY2tfdGltZV9zeW5jKCk/OworICAgICAgICBzZWxmLmNo ZWNrX2FwdF9yZXBvcygpPzsKKyAgICAgICAgc2VsZi5jaGVja19ib290bG9hZGVyKCk/OworICAg ICAgICBzZWxmLmNoZWNrX2RrbXNfbW9kdWxlcygpPzsKKyAgICAgICAgT2soKCkpCisgICAgfQor CisgICAgLy8vIFByaW50IGEgc3VtbWFyeSBvZiBhbGwgY2hlY2tzIHJ1biBzbyBmYXIuCisgICAg cHViIGZuIHN1bW1hcnkoJm11dCBzZWxmKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAg IHNlbGYub3V0cHV0LnByaW50X3N1bW1hcnkoKQorICAgIH0KKworICAgIC8vLyBSdW4gYWxsIHBh Y2thZ2UgcmVsYXRlZCBjaGVja3MuCisgICAgcHViIGZuIGNoZWNrX3BhY2thZ2VzKCZtdXQgc2Vs ZikgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgICAgICBzZWxmLm91dHB1dC5wcmludF9oZWFk ZXIoJmZvcm1hdCEoCisgICAgICAgICAgICAiQ0hFQ0tJTkcgVkVSU0lPTiBJTkZPUk1BVElPTiBG T1Ige30gUEFDS0FHRVMiLAorICAgICAgICAgICAgc2VsZi5tZXRhX3BhY2thZ2VfbmFtZS50b191 cHBlcmNhc2UoKQorICAgICAgICApKT87CisKKyAgICAgICAgc2VsZi5jaGVja191cGdyYWRhYmxl X3BhY2thZ2VzKCk/OworCisgICAgICAgIGxldCBwa2dfdmVyc2lvbnMgPSBwcm94bW94X2FwdDo6 Z2V0X3BhY2thZ2VfdmVyc2lvbnMoCisgICAgICAgICAgICAmc2VsZi5tZXRhX3BhY2thZ2VfbmFt ZSwKKyAgICAgICAgICAgICZzZWxmLmFwaV9zZXJ2ZXJfcGFja2FnZSwKKyAgICAgICAgICAgICZz ZWxmLnJ1bm5pbmdfYXBpX3NlcnZlcl92ZXJzaW9uLAorICAgICAgICAgICAgJltdLAorICAgICAg ICApPzsKKworICAgICAgICBzZWxmLmNoZWNrX21ldGFfcGFja2FnZV92ZXJzaW9uKCZwa2dfdmVy c2lvbnMpPzsKKyAgICAgICAgc2VsZi5jaGVja19rZXJuZWxfY29tcGF0KCZwa2dfdmVyc2lvbnMp PzsKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgZm4gY2hlY2tfdXBncmFkYWJsZV9wYWNr YWdlcygmbXV0IHNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgc2VsZi5vdXRw dXQubG9nX2luZm8oIkNoZWNraW5nIGZvciBwYWNrYWdlIHVwZGF0ZXMuLiIpPzsKKworICAgICAg ICBsZXQgcmVzdWx0ID0gcHJveG1veF9hcHQ6Omxpc3RfYXZhaWxhYmxlX2FwdF91cGRhdGUoJnNl bGYuYXB0X3N0YXRlX2ZpbGUpOworICAgICAgICBtYXRjaCByZXN1bHQgeworICAgICAgICAgICAg RXJyKGVycikgPT4geworICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0LmxvZ193YXJuKGZvcm1h dCEoIntlcnJ9IikpPzsKKyAgICAgICAgICAgICAgICBzZWxmLm91dHB1dAorICAgICAgICAgICAg ICAgICAgICAubG9nX2ZhaWwoInVuYWJsZSB0byByZXRyaWV2ZSBsaXN0IG9mIHBhY2thZ2UgdXBk YXRlcyEiKT87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBPayhwYWNrYWdlX3N0YXR1cykg PT4geworICAgICAgICAgICAgICAgIGlmIHBhY2thZ2Vfc3RhdHVzLmlzX2VtcHR5KCkgeworICAg ICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dC5sb2dfcGFzcygiYWxsIHBhY2thZ2VzIHVwLXRv LWRhdGUiKT87CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg bGV0IHBrZ3MgPSBwYWNrYWdlX3N0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgLml0ZXIo KQorICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh8cGtnfCBwa2cucGFja2FnZS5jbG9uZSgp KQorICAgICAgICAgICAgICAgICAgICAgICAgLmNvbGxlY3Q6OjxWZWM8U3RyaW5nPj4oKQorICAg ICAgICAgICAgICAgICAgICAgICAgLmpvaW4oIiwgIik7CisgICAgICAgICAgICAgICAgICAgIHNl bGYub3V0cHV0LmxvZ193YXJuKGZvcm1hdCEoCisgICAgICAgICAgICAgICAgICAgICAgICAidXBk YXRlcyBmb3IgdGhlIGZvbGxvd2luZyBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlOlxuICAgICAge3Br Z3N9IiwKKyAgICAgICAgICAgICAgICAgICAgKSk/OworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBmbiBjaGVj a19tZXRhX3BhY2thZ2VfdmVyc2lvbigKKyAgICAgICAgJm11dCBzZWxmLAorICAgICAgICBwa2df dmVyc2lvbnM6ICZbcHJveG1veF9hcHRfYXBpX3R5cGVzOjpBUFRVcGRhdGVJbmZvXSwKKyAgICAp IC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgc2VsZi5vdXRwdXQubG9nX2luZm8oZm9y bWF0ISgKKyAgICAgICAgICAgICJDaGVja2luZyB7fSBwYWNrYWdlIHZlcnNpb24uLiIsCisgICAg ICAgICAgICBzZWxmLm1ldGFfcGFja2FnZV9uYW1lCisgICAgICAgICkpPzsKKworICAgICAgICBs ZXQgbWV0YV9wa2cgPSBwa2dfdmVyc2lvbnMKKyAgICAgICAgICAgIC5pdGVyKCkKKyAgICAgICAg ICAgIC5maW5kKHxwa2d8IHBrZy5wYWNrYWdlLmFzX3N0cigpID09IHNlbGYubWV0YV9wYWNrYWdl X25hbWUpOworCisgICAgICAgIGlmIGxldCBTb21lKG1ldGFfcGtnKSA9IG1ldGFfcGtnIHsKKyAg ICAgICAgICAgIGxldCBwa2dfdmVyc2lvbiA9IFJlZ2V4OjpuZXcociJeKFxkKylcLihcZCspWy4t XShcZCspIik/OworICAgICAgICAgICAgbGV0IGNhcHR1cmVzID0gcGtnX3ZlcnNpb24uY2FwdHVy ZXMoJm1ldGFfcGtnLm9sZF92ZXJzaW9uKTsKKyAgICAgICAgICAgIGlmIGxldCBTb21lKGNhcHR1 cmVzKSA9IGNhcHR1cmVzIHsKKyAgICAgICAgICAgICAgICBsZXQgbWFqID0gU2VsZjo6ZXh0cmFj dF92ZXJzaW9uX2Zyb21fY2FwdHVyZXMoMSwgJmNhcHR1cmVzKT87CisgICAgICAgICAgICAgICAg bGV0IG1pbiA9IFNlbGY6OmV4dHJhY3RfdmVyc2lvbl9mcm9tX2NhcHR1cmVzKDIsICZjYXB0dXJl cyk/OworICAgICAgICAgICAgICAgIGxldCBwa2dyZWwgPSBTZWxmOjpleHRyYWN0X3ZlcnNpb25f ZnJvbV9jYXB0dXJlcygzLCAmY2FwdHVyZXMpPzsKKworICAgICAgICAgICAgICAgIGxldCBtaW5f dmVyc2lvbiA9IGZvcm1hdCEoCisgICAgICAgICAgICAgICAgICAgICJ7fS57fS57fSIsCisgICAg ICAgICAgICAgICAgICAgIHNlbGYubWluaW11bV9tYWpvcl92ZXJzaW9uLCBzZWxmLm1pbmltdW1f bWlub3JfdmVyc2lvbiwgc2VsZi5taW5pbXVtX3BrZ3JlbAorICAgICAgICAgICAgICAgICk7CisK KyAgICAgICAgICAgICAgICBpZiAobWFqID4gc2VsZi5taW5pbXVtX21ham9yX3ZlcnNpb24gJiYg c2VsZi5taW5pbXVtX21ham9yX3ZlcnNpb24gIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgLy8g SGFuZGxlIGFscGhhIGFuZCBiZXRhIHZlcnNpb24gdXBncmFkZSBjaGVja3M6CisgICAgICAgICAg ICAgICAgICAgIHx8IChzZWxmLm1pbmltdW1fbWFqb3JfdmVyc2lvbiA9PSAwICYmIG1pbiA+IHNl bGYubWluaW11bV9taW5vcl92ZXJzaW9uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgc2VsZi5vdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC5sb2dfcGFzcyhm b3JtYXQhKCJBbHJlYWR5IHVwZ3JhZGVkIHRvIHttYWp9LnttaW59IikpPzsKKyAgICAgICAgICAg ICAgICAgICAgc2VsZi51cGdyYWRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm IG1haiA+PSBzZWxmLm1pbmltdW1fbWFqb3JfdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAm JiBtaW4gPj0gc2VsZi5taW5pbXVtX21pbm9yX3ZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAg JiYgcGtncmVsID49IHNlbGYubWluaW11bV9wa2dyZWwKKyAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0LmxvZ19wYXNzKGZvcm1hdCEoCisgICAgICAgICAg ICAgICAgICAgICAgICAiJ3t9JyBoYXMgdmVyc2lvbiA+PSB7bWluX3ZlcnNpb259IiwKKyAgICAg ICAgICAgICAgICAgICAgICAgIHNlbGYubWV0YV9wYWNrYWdlX25hbWUKKyAgICAgICAgICAgICAg ICAgICAgKSk/OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg IHNlbGYub3V0cHV0LmxvZ19mYWlsKGZvcm1hdCEoCisgICAgICAgICAgICAgICAgICAgICAgICAi J3t9JyBwYWNrYWdlIGlzIHRvbyBvbGQsIHBsZWFzZSB1cGdyYWRlIHRvID49IHttaW5fdmVyc2lv bn0iLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXRhX3BhY2thZ2VfbmFtZQorICAg ICAgICAgICAgICAgICAgICApKT87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICBzZWxmLm91dHB1dC5sb2dfZmFpbChmb3JtYXQhKAorICAg ICAgICAgICAgICAgICAgICAiY291bGQgbm90IG1hdGNoIHRoZSAne30nIHBhY2thZ2UgdmVyc2lv biwgXAorICAgICAgICAgICAgICAgICAgICBpcyBpdCBpbnN0YWxsZWQ/IiwKKyAgICAgICAgICAg ICAgICAgICAgc2VsZi5tZXRhX3BhY2thZ2VfbmFtZQorICAgICAgICAgICAgICAgICkpPzsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNlbGYub3V0cHV0Cisg ICAgICAgICAgICAgICAgLmxvZ19mYWlsKGZvcm1hdCEoIid7fScgcGFja2FnZSBub3QgZm91bmQh Iiwgc2VsZi5tZXRhX3BhY2thZ2VfbmFtZSkpPzsKKyAgICAgICAgfQorICAgICAgICBPaygoKSkK KyAgICB9CisKKyAgICBmbiBpc19rZXJuZWxfdmVyc2lvbl9jb21wYXRpYmxlKCZzZWxmLCBydW5u aW5nX3ZlcnNpb246ICZzdHIpIC0+IGJvb2wgeworICAgICAgICAvLyBUT0RPOiByZXdvcmsgdGhp cyB0byBwYXJzZSBvdXQgbWFqLm1pbi5wYXRjaCBhbmQgZG8gbnVtZXJpY2FsIGNvbXBhcmlzb24g YW5kIGRldGVjdAorICAgICAgICAvLyB0aG9zZSB3aXRoIGEgImJwbzEyIiBhcyBiYWNrcG9ydCBr ZXJuZWxzIGZyb20gdGhlIG9sZGVyIHJlbGVhc2UuCisgICAgICAgIGNvbnN0IE1JTklNVU1fUkU6 ICZzdHIgPSByIjZcLig/OjE0XC4oPzpbMS05XVxkK3xbNi05XSl8MVs1LTldKVtefl0qIjsKKyAg ICAgICAgY29uc3QgQVJCSVRSQVJZX1JFOiAmc3RyID0gciIoPzoxWzQtOV18MlxkKylcLig/Olsw LTldfFxkezIsfSlbXn5dKi1wdmUiOworCisgICAgICAgIGxldCByZSA9IGlmIHNlbGYudXBncmFk ZWQgeworICAgICAgICAgICAgY29uY2F0Y3AhKHIiXig/OiIsIE1JTklNVU1fUkUsIHIifCIsIEFS QklUUkFSWV9SRSwgciIpJCIpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByIl4oPzo2 XC4oPzoyfDV8OHwxMXwxNCkpIgorICAgICAgICB9OworICAgICAgICBsZXQgcmUgPSBSZWdleDo6 bmV3KHJlKS5leHBlY3QoImZhaWxlZCB0byBjb21waWxlIGtlcm5lbCBjb21wYXQgcmVnZXgiKTsK KworICAgICAgICByZS5pc19tYXRjaChydW5uaW5nX3ZlcnNpb24pCisgICAgfQorCisgICAgZm4g Y2hlY2tfa2VybmVsX2NvbXBhdCgKKyAgICAgICAgJm11dCBzZWxmLAorICAgICAgICBwa2dfdmVy c2lvbnM6ICZbcHJveG1veF9hcHRfYXBpX3R5cGVzOjpBUFRVcGRhdGVJbmZvXSwKKyAgICApIC0+ IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgc2VsZi5vdXRwdXQubG9nX2luZm8oIkNoZWNr IHJ1bm5pbmcga2VybmVsIHZlcnNpb24uLiIpPzsKKworICAgICAgICBsZXQga2luc3RhbGxlZCA9 IGlmIHNlbGYudXBncmFkZWQgeworICAgICAgICAgICAgInByb3htb3gta2VybmVsLTYuMTQiCisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAicHJveG1veC1rZXJuZWwtNi44IgorICAgICAg ICB9OworCisgICAgICAgIGxldCBvdXRwdXQgPSBzdGQ6OnByb2Nlc3M6OkNvbW1hbmQ6Om5ldygi dW5hbWUiKS5hcmcoIi1yIikub3V0cHV0KCk7CisgICAgICAgIG1hdGNoIG91dHB1dCB7CisgICAg ICAgICAgICBFcnIoX2VycikgPT4gc2VsZgorICAgICAgICAgICAgICAgIC5vdXRwdXQKKyAgICAg ICAgICAgICAgICAubG9nX2ZhaWwoInVuYWJsZSB0byBkZXRlcm1pbmUgcnVubmluZyBrZXJuZWwg dmVyc2lvbi4iKT8sCisgICAgICAgICAgICBPayhyZXQpID0+IHsKKyAgICAgICAgICAgICAgICBs ZXQgcnVubmluZ192ZXJzaW9uID0gc3RkOjpzdHI6OmZyb21fdXRmOCgmcmV0LnN0ZG91dFsuLnJl dC5zdGRvdXQubGVuKCkgLSAxXSk/OworICAgICAgICAgICAgICAgIGlmIHNlbGYuaXNfa2VybmVs X3ZlcnNpb25fY29tcGF0aWJsZShydW5uaW5nX3ZlcnNpb24pIHsKKyAgICAgICAgICAgICAgICAg ICAgaWYgc2VsZi51cGdyYWRlZCB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1 dC5sb2dfcGFzcyhmb3JtYXQhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJydW5uaW5n IG5ldyBrZXJuZWwgJ3tydW5uaW5nX3ZlcnNpb259JyBhZnRlciB1cGdyYWRlLiIKKyAgICAgICAg ICAgICAgICAgICAgICAgICkpPzsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0LmxvZ19wYXNzKGZvcm1hdCEoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgInJ1bm5pbmcga2VybmVsICd7cnVubmluZ192ZXJzaW9ufScg aXMgY29uc2lkZXJlZCBzdWl0YWJsZSBmb3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVwZ3JhZGUuIgorICAgICAgICAgICAgICAgICAgICAgICAgKSk/OworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0 IGluc3RhbGxlZF9rZXJuZWwgPSBwa2dfdmVyc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgICAg IC5pdGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKHxwa2d8IHBrZy5wYWNrYWdl LmFzX3N0cigpID09IGtpbnN0YWxsZWQpOworICAgICAgICAgICAgICAgICAgICBpZiBpbnN0YWxs ZWRfa2VybmVsLmlzX3NvbWUoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1 dC5sb2dfd2Fybihmb3JtYXQhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIHN1aXRh YmxlIGtlcm5lbCAne2tpbnN0YWxsZWR9JyBpcyBpbnN0YWxsZWQsIGJ1dCBhbiBcCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zdWl0YWJsZSAne3J1bm5pbmdfdmVyc2lvbn0nIGlzIGJv b3RlZCwgbWlzc2luZyByZWJvb3Q/ISIsCisgICAgICAgICAgICAgICAgICAgICAgICApKT87Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxm Lm91dHB1dC5sb2dfd2Fybihmb3JtYXQhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1 bmV4cGVjdGVkIHJ1bm5pbmcgYW5kIGluc3RhbGxlZCBrZXJuZWwgJ3tydW5uaW5nX3ZlcnNpb259 Jy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKSk/OworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIE9r KCgpKQorICAgIH0KKworICAgIGZuIGV4dHJhY3RfdmVyc2lvbl9mcm9tX2NhcHR1cmVzKAorICAg ICAgICBpbmRleDogdXNpemUsCisgICAgICAgIGNhcHR1cmVzOiAmcmVnZXg6OkNhcHR1cmVzLAor ICAgICkgLT4gUmVzdWx0PHU4LCBFcnJvcj4geworICAgICAgICBpZiBsZXQgU29tZShjYXB0dXJl KSA9IGNhcHR1cmVzLmdldChpbmRleCkgeworICAgICAgICAgICAgbGV0IHZhbCA9IGNhcHR1cmUu YXNfc3RyKCkucGFyc2U6Ojx1OD4oKT87CisgICAgICAgICAgICBPayh2YWwpCisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBPaygwKQorICAgICAgICB9CisgICAgfQorCisgICAgZm4gY2hl Y2tfYm9vdGxvYWRlcigmbXV0IHNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAg c2VsZi5vdXRwdXQKKyAgICAgICAgICAgIC5sb2dfaW5mbygiQ2hlY2tpbmcgYm9vdGxvYWRlciBj b25maWd1cmF0aW9uLi4uIik/OworCisgICAgICAgIGxldCBzZF9ib290X2luc3RhbGxlZCA9Cisg ICAgICAgICAgICBQYXRoOjpuZXcoIi91c3Ivc2hhcmUvZG9jL3N5c3RlbWQtYm9vdC9jaGFuZ2Vs b2cuRGViaWFuLmd6IikuaXNfZmlsZSgpOworCisgICAgICAgIGlmICFQYXRoOjpuZXcoIi9zeXMv ZmlybXdhcmUvZWZpIikuaXNfZGlyKCkgeworICAgICAgICAgICAgaWYgc2RfYm9vdF9pbnN0YWxs ZWQgeworICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0LmxvZ193YXJuKAorICAgICAgICAgICAg ICAgICAgICAic3lzdGVtZC1ib290IHBhY2thZ2UgaW5zdGFsbGVkIG9uIGxlZ2FjeS1ib290IHN5 c3RlbSBpcyBub3QgXAorICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcnksIGNvbnNpZGVyIHJl bW92aW5nIGl0IiwKKyAgICAgICAgICAgICAgICApPzsKKyAgICAgICAgICAgICAgICByZXR1cm4g T2soKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VsZi5vdXRwdXQKKyAgICAgICAg ICAgICAgICAubG9nX3NraXAoIlN5c3RlbSBib290ZWQgaW4gbGVnYWN5LW1vZGUgLSBubyBuZWVk IGZvciBhZGRpdGlvbmFsIHBhY2thZ2VzLiIpPzsKKyAgICAgICAgICAgIHJldHVybiBPaygoKSk7 CisgICAgICAgIH0KKworICAgICAgICBsZXQgbXV0IGJvb3Rfb2sgPSB0cnVlOworICAgICAgICBp ZiBQYXRoOjpuZXcoIi9ldGMva2VybmVsL3Byb3htb3gtYm9vdC11dWlkcyIpLmlzX2ZpbGUoKSB7 CisgICAgICAgICAgICAvLyBQYWNrYWdlIHZlcnNpb24gY2hlY2sgbmVlZHMgdG8gYmUgcnVuIGJl Zm9yZQorICAgICAgICAgICAgaWYgIXNlbGYudXBncmFkZWQgeworICAgICAgICAgICAgICAgIGxl dCBvdXRwdXQgPSBzdGQ6OnByb2Nlc3M6OkNvbW1hbmQ6Om5ldygicHJveG1veC1ib290LXRvb2wi KQorICAgICAgICAgICAgICAgICAgICAuYXJnKCJzdGF0dXMiKQorICAgICAgICAgICAgICAgICAg ICAub3V0cHV0KCkKKyAgICAgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgeworICAgICAg ICAgICAgICAgICAgICAgICAgZm9ybWF0X2VyciEoImZhaWxlZCB0byByZXRyaWV2ZSBwcm94bW94 LWJvb3QtdG9vbCBzdGF0dXMgLSB7ZXJyfSIpCisgICAgICAgICAgICAgICAgICAgIH0pPzsKKyAg ICAgICAgICAgICAgICBsZXQgcmUgPSBSZWdleDo6bmV3KHIiY29uZmlndXJlZCB3aXRoOi4qICh1 ZWZpfHN5c3RlbWQtYm9vdCkgXCh2ZXJzaW9uczoiKQorICAgICAgICAgICAgICAgICAgICAuZXhw ZWN0KCJmYWlsZWQgdG8gcHJveG1veC1ib290LXRvb2wgc3RhdHVzIik7CisgICAgICAgICAgICAg ICAgaWYgcmUuaXNfbWF0Y2goc3RkOjpzdHI6OmZyb21fdXRmOCgmb3V0cHV0LnN0ZG91dCk/KSB7 CisgICAgICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAg ICAubG9nX3NraXAoIm5vdCB5ZXQgdXBncmFkZWQsIHN5c3RlbWQtYm9vdCBzdGlsbCBuZWVkZWQg Zm9yIGJvb3RjdGwiKT87CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBPaygoKSk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgaWYgIVBhdGg6Om5ldygiL3Vzci9zaGFyZS9kb2MvZ3J1Yi1lZmktYW1kNjQvY2hhbmdlbG9n LkRlYmlhbi5neiIpLmlzX2ZpbGUoKSB7CisgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXQubG9n X3dhcm4oCisgICAgICAgICAgICAgICAgICAgICJTeXN0ZW0gYm9vdGVkIGluIHVlZmkgbW9kZSBi dXQgZ3J1Yi1lZmktYW1kNjQgbWV0YS1wYWNrYWdlIG5vdCBpbnN0YWxsZWQsIFwKKyAgICAgICAg ICAgICAgICAgICAgIG5ldyBncnViIHZlcnNpb25zIHdpbGwgbm90IGJlIGluc3RhbGxlZCB0byAv Ym9vdC9lZmkhCisgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsIGdydWItZWZpLWFtZDY0LiIs CisgICAgICAgICAgICAgICAgKT87CisgICAgICAgICAgICAgICAgYm9vdF9vayA9IGZhbHNlOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgUGF0aDo6bmV3KCIvYm9vdC9lZmkvRUZJL0JP T1QvQk9PVFg2NC5lZmkiKS5pc19maWxlKCkgeworICAgICAgICAgICAgICAgIGxldCBvdXRwdXQg PSBzdGQ6OnByb2Nlc3M6OkNvbW1hbmQ6Om5ldygiZGViY29uZi1zaG93IikKKyAgICAgICAgICAg ICAgICAgICAgLmFyZygiLS1kYiIpCisgICAgICAgICAgICAgICAgICAgIC5hcmcoImNvbmZpZ2Ri IikKKyAgICAgICAgICAgICAgICAgICAgLmFyZygiZ3J1Yi1lZmktYW1kNjQiKQorICAgICAgICAg ICAgICAgICAgICAuYXJnKCJncnViLXBjIikKKyAgICAgICAgICAgICAgICAgICAgLm91dHB1dCgp CisgICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdF9lcnIhKCJmYWlsZWQg dG8gcmV0cmlldmUgZGViY29uZiBzZXR0aW5ncyAtIHtlcnJ9IikpPzsKKyAgICAgICAgICAgICAg ICBsZXQgcmUgPSBSZWdleDo6bmV3KHIiZ3J1YjIvZm9yY2VfZWZpX2V4dHJhX3JlbW92YWJsZTog K3RydWUoPzpcbnwkKSIpCisgICAgICAgICAgICAgICAgICAgIC5leHBlY3QoImZhaWxlZCB0byBj b21waWxlIGRiY29uZmlnIHJlZ2V4Iik7CisgICAgICAgICAgICAgICAgaWYgIXJlLmlzX21hdGNo KHN0ZDo6c3RyOjpmcm9tX3V0ZjgoJm91dHB1dC5zdGRvdXQpPykgeworICAgICAgICAgICAgICAg ICAgICBzZWxmLm91dHB1dC5sb2dfd2FybigKKyAgICAgICAgICAgICAgICAgICAgICAgICJSZW1v dmFibGUgYm9vdGxvYWRlciBmb3VuZCBhdCAnL2Jvb3QvZWZpL0VGSS9CT09UL0JPT1RYNjQuZWZp JywgYnV0IEdSVUIgcGFja2FnZXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgbm90IHNldCB1 cCB0byB1cGRhdGUgaXQhXG5SdW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOlxuXAorICAgICAgICAg ICAgICAgICAgICAgICAgZWNobyAnZ3J1Yi1lZmktYW1kNjQgZ3J1YjIvZm9yY2VfZWZpX2V4dHJh X3JlbW92YWJsZSBib29sZWFuIHRydWUnIHwgZGViY29uZi1zZXQtc2VsZWN0aW9ucyAtdiAtdVxu XAorICAgICAgICAgICAgICAgICAgICAgICAgVGhlbiByZWluc3RhbGwgR1JVQiB3aXRoICdhcHQg aW5zdGFsbCAtLXJlaW5zdGFsbCBncnViLWVmaS1hbWQ2NCciCisgICAgICAgICAgICAgICAgICAg ICk/OworICAgICAgICAgICAgICAgICAgICBib290X29rID0gZmFsc2U7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIHNkX2Jvb3RfaW5zdGFs bGVkIHsKKyAgICAgICAgICAgIHNlbGYub3V0cHV0LmxvZ19mYWlsKAorICAgICAgICAgICAgICAg ICJzeXN0ZW1kLWJvb3QgbWV0YS1wYWNrYWdlIGluc3RhbGxlZC4gVGhpcyB3aWxsIGNhdXNlIHBy b2JsZW1zIG9uIHVwZ3JhZGVzIG9mIG90aGVyIFwKKyAgICAgICAgICAgICAgICBib290LXJlbGF0 ZWQgcGFja2FnZXMuXG5cCisgICAgICAgICAgICAgICAgUmVtb3ZlIHRoZSAnc3lzdGVtZC1ib290 JyBwYWNrYWdlLlxuXAorICAgICAgICAgICAgICAgIFBsZWFzZSBjb25zdWx0IHRoZSB1cGdyYWRl IGd1aWRlIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uISIKKyAgICAgICAgICAgICk/OworICAgICAg ICAgICAgYm9vdF9vayA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIGJvb3Rfb2sgewor ICAgICAgICAgICAgc2VsZi5vdXRwdXQKKyAgICAgICAgICAgICAgICAubG9nX3Bhc3MoImJvb3Rs b2FkZXIgcGFja2FnZXMgaW5zdGFsbGVkIGNvcnJlY3RseSIpPzsKKyAgICAgICAgfQorICAgICAg ICBPaygoKSkKKyAgICB9CisKKyAgICBmbiBjaGVja19hcHRfcmVwb3MoJm11dCBzZWxmKSAtPiBS ZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYub3V0cHV0CisgICAgICAgICAgICAubG9n X2luZm8oIkNoZWNraW5nIGZvciBwYWNrYWdlIHJlcG9zaXRvcnkgc3VpdGUgbWlzbWF0Y2hlcy4u Iik/OworCisgICAgICAgIGxldCBtdXQgc3RyYW5nZV9zdWl0ZSA9IGZhbHNlOworICAgICAgICBs ZXQgbXV0IG1pc21hdGNoZXMgPSBWZWM6Om5ldygpOworICAgICAgICBsZXQgbXV0IGZvdW5kX3N1 aXRlOiBPcHRpb248KFN0cmluZywgU3RyaW5nKT4gPSBOb25lOworCisgICAgICAgIGxldCAocmVw b19maWxlcywgX3JlcG9fZXJyb3JzLCBfZGlnZXN0KSA9IHJlcG9zaXRvcmllczo6cmVwb3NpdG9y aWVzKCk/OworICAgICAgICBmb3IgcmVwb19maWxlIGluIHJlcG9fZmlsZXMgeworICAgICAgICAg ICAgc2VsZi5jaGVja19yZXBvX2ZpbGUoCisgICAgICAgICAgICAgICAgJm11dCBmb3VuZF9zdWl0 ZSwKKyAgICAgICAgICAgICAgICAmbXV0IG1pc21hdGNoZXMsCisgICAgICAgICAgICAgICAgJm11 dCBzdHJhbmdlX3N1aXRlLAorICAgICAgICAgICAgICAgIHJlcG9fZmlsZSwKKyAgICAgICAgICAg ICk/OworICAgICAgICB9CisKKyAgICAgICAgbWF0Y2ggKG1pc21hdGNoZXMuaXNfZW1wdHkoKSwg c3RyYW5nZV9zdWl0ZSkgeworICAgICAgICAgICAgKHRydWUsIGZhbHNlKSA9PiBzZWxmLm91dHB1 dC5sb2dfcGFzcygiZm91bmQgbm8gc3VpdGUgbWlzbWF0Y2giKT8sCisgICAgICAgICAgICAodHJ1 ZSwgdHJ1ZSkgPT4gc2VsZgorICAgICAgICAgICAgICAgIC5vdXRwdXQKKyAgICAgICAgICAgICAg ICAubG9nX25vdGljZSgiZm91bmQgbm8gc3VpdGUgbWlzbWF0Y2hlcywgYnV0IGZvdW5kIGF0IGxl YXN0IG9uZSBzdHJhbmdlIHN1aXRlIik/LAorICAgICAgICAgICAgKGZhbHNlLCBfKSA9PiB7Cisg ICAgICAgICAgICAgICAgbGV0IG11dCBtZXNzYWdlID0gU3RyaW5nOjpmcm9tKAorICAgICAgICAg ICAgICAgICAgICAiRm91bmQgbWl4ZWQgb2xkIGFuZCBuZXcgcGFja2FnZXMgcmVwb3NpdG9yeSBz dWl0ZXMsIGZpeCBiZWZvcmUgdXBncmFkaW5nIVwKKyAgICAgICAgICAgICAgICAgICAgXG4gICAg ICBNaXNtYXRjaGVzOiIsCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBmb3Ig KHN1aXRlLCBsb2NhdGlvbikgaW4gbWlzbWF0Y2hlcy5pdGVyKCkgeworICAgICAgICAgICAgICAg ICAgICBtZXNzYWdlLnB1c2hfc3RyKAorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ISgi XG4gICAgICBmb3VuZCBzdWl0ZSAne3N1aXRlfScgYXQgJ3tsb2NhdGlvbn0nIikuYXNfc3RyKCks CisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIG1lc3NhZ2UucHVzaCgnXG4nKTsKKyAgICAgICAgICAgICAgICBzZWxmLm91dHB1dC5sb2df ZmFpbChtZXNzYWdlKT8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIE9rKCgp KQorICAgIH0KKworICAgIGZuIGNoZWNrX2RrbXNfbW9kdWxlcygmbXV0IHNlbGYpIC0+IFJlc3Vs dDwoKSwgRXJyb3I+IHsKKyAgICAgICAgbGV0IGt2ZXIgPSBzdGQ6OnByb2Nlc3M6OkNvbW1hbmQ6 Om5ldygidW5hbWUiKQorICAgICAgICAgICAgLmFyZygiLXIiKQorICAgICAgICAgICAgLm91dHB1 dCgpCisgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXRfZXJyISgiZmFpbGVkIHRvIHJl dHJpZXZlIHJ1bm5pbmcga2VybmVsIHZlcnNpb24gLSB7ZXJyfSIpKT87CisKKyAgICAgICAgbGV0 IG91dHB1dCA9IHN0ZDo6cHJvY2Vzczo6Q29tbWFuZDo6bmV3KCJka21zIikKKyAgICAgICAgICAg IC5hcmcoInN0YXR1cyIpCisgICAgICAgICAgICAuYXJnKCItayIpCisgICAgICAgICAgICAuYXJn KHN0ZDo6c3RyOjpmcm9tX3V0ZjgoJmt2ZXIuc3Rkb3V0KT8pCisgICAgICAgICAgICAub3V0cHV0 KCk7CisgICAgICAgIG1hdGNoIG91dHB1dCB7CisgICAgICAgICAgICBFcnIoX2VycikgPT4gc2Vs Zi5vdXRwdXQubG9nX3NraXAoImNvdWxkIG5vdCBnZXQgZGttcyBzdGF0dXMiKT8sCisgICAgICAg ICAgICBPayhyZXQpID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgbnVtX2RrbXNfbW9kdWxlcyA9 IHN0ZDo6c3RyOjpmcm9tX3V0ZjgoJnJldC5zdGRvdXQpPy5saW5lcygpLmNvdW50KCk7CisgICAg ICAgICAgICAgICAgaWYgbnVtX2RrbXNfbW9kdWxlcyA9PSAwIHsKKyAgICAgICAgICAgICAgICAg ICAgc2VsZi5vdXRwdXQubG9nX3Bhc3MoIm5vIGRrbXMgbW9kdWxlcyBmb3VuZCIpPzsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dAorICAg ICAgICAgICAgICAgICAgICAgICAgLmxvZ193YXJuKCJka21zIG1vZHVsZXMgZm91bmQsIHRoaXMg bWlnaHQgY2F1c2UgaXNzdWVzIGR1cmluZyB1cGdyYWRlLiIpPzsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAg Zm4gY2hlY2tfcmVwb19maWxlKAorICAgICAgICAmbXV0IHNlbGYsCisgICAgICAgIGZvdW5kX3N1 aXRlOiAmbXV0IE9wdGlvbjwoU3RyaW5nLCBTdHJpbmcpPiwKKyAgICAgICAgbWlzbWF0Y2hlczog Jm11dCBWZWM8KFN0cmluZywgU3RyaW5nKT4sCisgICAgICAgIHN0cmFuZ2Vfc3VpdGU6ICZtdXQg Ym9vbCwKKyAgICAgICAgcmVwb19maWxlOiBBUFRSZXBvc2l0b3J5RmlsZSwKKyAgICApIC0+IFJl c3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgZm9yIHJlcG8gaW4gcmVwb19maWxlLnJlcG9zaXRv cmllcyB7CisgICAgICAgICAgICBpZiAhcmVwby5lbmFibGVkIHx8IHJlcG8udHlwZXMgPT0gW0FQ VFJlcG9zaXRvcnlQYWNrYWdlVHlwZTo6RGViU3JjXSB7CisgICAgICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3Igc3VpdGUgaW4gJnJlcG8uc3VpdGVz IHsKKyAgICAgICAgICAgICAgICBsZXQgc3VpdGUgPSBtYXRjaCBzdWl0ZS5maW5kKCZbJy0nLCAn LyddWy4uXSkgeworICAgICAgICAgICAgICAgICAgICBTb21lKG4pID0+ICZzdWl0ZVswLi5uXSwK KyAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiBzdWl0ZSwKKyAgICAgICAgICAgICAgICB9Owor CisgICAgICAgICAgICAgICAgaWYgc3VpdGUgIT0gc2VsZi5vbGRfc3VpdGUgJiYgc3VpdGUgIT0g c2VsZi5uZXdfc3VpdGUgeworICAgICAgICAgICAgICAgICAgICBsZXQgbG9jYXRpb24gPSByZXBv X2ZpbGUucGF0aC5jbG9uZSgpLnVud3JhcF9vcl9kZWZhdWx0KCk7CisgICAgICAgICAgICAgICAg ICAgIHNlbGYub3V0cHV0LmxvZ19ub3RpY2UoZm9ybWF0ISgKKyAgICAgICAgICAgICAgICAgICAg ICAgICJmb3VuZCB1bnVzdWFsIHN1aXRlICd7c3VpdGV9JywgbmVpdGhlciBvbGQgJ3t9JyBub3Ig bmV3IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAne30nLi5cbiAgICAgICAgQWZmZWN0 ZWQgZmlsZSB7bG9jYXRpb259XG4gICAgICAgIFBsZWFzZSBcCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXNzdXJlIHRoaXMgaXMgc2hpcHBpbmcgY29tcGF0aWJsZSBwYWNrYWdlcyBmb3Ig dGhlIHVwZ3JhZGUhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub2xkX3N1aXRlLCBz ZWxmLm5ld19zdWl0ZQorICAgICAgICAgICAgICAgICAgICApKT87CisgICAgICAgICAgICAgICAg ICAgICpzdHJhbmdlX3N1aXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgbGV0IFNvbWUoKHJlZiBj dXJyZW50X3N1aXRlLCByZWYgY3VycmVudF9sb2NhdGlvbikpID0gZm91bmRfc3VpdGUgeworICAg ICAgICAgICAgICAgICAgICBsZXQgbG9jYXRpb24gPSByZXBvX2ZpbGUucGF0aC5jbG9uZSgpLnVu d3JhcF9vcl9kZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIHN1aXRlICE9IGN1cnJl bnRfc3VpdGUgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWlzbWF0Y2hlcy5pc19lbXB0 eSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNtYXRjaGVzLnB1c2goKGN1cnJl bnRfc3VpdGUuY2xvbmUoKSwgY3VycmVudF9sb2NhdGlvbi5jbG9uZSgpKSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWlzbWF0Y2hlcy5wdXNoKChzdWl0ZS50b19zdHJpbmcoKSwgbG9j YXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWlzbWF0Y2hlcy5wdXNoKChzdWl0ZS50b19zdHJpbmcoKSwgbG9jYXRp b24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxldCBsb2NhdGlv biA9IHJlcG9fZmlsZS5wYXRoLmNsb25lKCkudW53cmFwX29yX2RlZmF1bHQoKTsKKyAgICAgICAg ICAgICAgICAgICAgKmZvdW5kX3N1aXRlID0gU29tZSgoc3VpdGUudG9fc3RyaW5nKCksIGxvY2F0 aW9uKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIE9rKCgpKQorICAgIH0KKworICAgIGZuIGdldF9zeXN0ZW1kX3VuaXRfc3RhdGUoCisgICAg ICAgICZzZWxmLAorICAgICAgICB1bml0OiAmc3RyLAorICAgICkgLT4gUmVzdWx0PChTeXN0ZW1k VW5pdFN0YXRlLCBTeXN0ZW1kVW5pdFN0YXRlKSwgRXJyb3I+IHsKKyAgICAgICAgbGV0IG91dHB1 dCA9IHN0ZDo6cHJvY2Vzczo6Q29tbWFuZDo6bmV3KCJzeXN0ZW1jdGwiKQorICAgICAgICAgICAg LmFyZygiaXMtZW5hYmxlZCIpCisgICAgICAgICAgICAuYXJnKHVuaXQpCisgICAgICAgICAgICAu b3V0cHV0KCkKKyAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdF9lcnIhKCJmYWlsZWQg dG8gZXhlY3V0ZSAtIHtlcnJ9IikpPzsKKworICAgICAgICBsZXQgZW5hYmxlZF9zdGF0ZSA9IG1h dGNoIG91dHB1dC5zdGRvdXQuYXNfc2xpY2UoKSB7CisgICAgICAgICAgICBiImVuYWJsZWRcbiIg PT4gU3lzdGVtZFVuaXRTdGF0ZTo6RW5hYmxlZCwKKyAgICAgICAgICAgIGIiZGlzYWJsZWRcbiIg PT4gU3lzdGVtZFVuaXRTdGF0ZTo6RGlzYWJsZWQsCisgICAgICAgICAgICBfID0+IFN5c3RlbWRV bml0U3RhdGU6OlVua25vd24sCisgICAgICAgIH07CisKKyAgICAgICAgbGV0IG91dHB1dCA9IHN0 ZDo6cHJvY2Vzczo6Q29tbWFuZDo6bmV3KCJzeXN0ZW1jdGwiKQorICAgICAgICAgICAgLmFyZygi aXMtYWN0aXZlIikKKyAgICAgICAgICAgIC5hcmcodW5pdCkKKyAgICAgICAgICAgIC5vdXRwdXQo KQorICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0X2VyciEoImZhaWxlZCB0byBleGVj dXRlIC0ge2Vycn0iKSk/OworCisgICAgICAgIGxldCBhY3RpdmVfc3RhdGUgPSBtYXRjaCBvdXRw dXQuc3Rkb3V0LmFzX3NsaWNlKCkgeworICAgICAgICAgICAgYiJhY3RpdmVcbiIgPT4gU3lzdGVt ZFVuaXRTdGF0ZTo6QWN0aXZlLAorICAgICAgICAgICAgYiJpbmFjdGl2ZVxuIiA9PiBTeXN0ZW1k VW5pdFN0YXRlOjpJbmFjdGl2ZSwKKyAgICAgICAgICAgIGIiZmFpbGVkXG4iID0+IFN5c3RlbWRV bml0U3RhdGU6OkZhaWxlZCwKKyAgICAgICAgICAgIF8gPT4gU3lzdGVtZFVuaXRTdGF0ZTo6VW5r bm93biwKKyAgICAgICAgfTsKKyAgICAgICAgT2soKGVuYWJsZWRfc3RhdGUsIGFjdGl2ZV9zdGF0 ZSkpCisgICAgfQorCisgICAgZm4gY2hlY2tfc2VydmljZXMoJm11dCBzZWxmKSAtPiBSZXN1bHQ8 KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYub3V0cHV0LmxvZ19pbmZvKGZvcm1hdCEoCisgICAg ICAgICAgICAiQ2hlY2tpbmcge30gZGFlbW9uIHNlcnZpY2VzLi4iLAorICAgICAgICAgICAgc2Vs Zi5tZXRhX3BhY2thZ2VfbmFtZQorICAgICAgICApKT87CisKKyAgICAgICAgZm9yIHNlcnZpY2Ug aW4gc2VsZi5zZXJ2aWNlc19saXN0LmFzX3NsaWNlKCkgeworICAgICAgICAgICAgbWF0Y2ggc2Vs Zi5nZXRfc3lzdGVtZF91bml0X3N0YXRlKHNlcnZpY2UpPyB7CisgICAgICAgICAgICAgICAgKF8s IFN5c3RlbWRVbml0U3RhdGU6OkFjdGl2ZSkgPT4geworICAgICAgICAgICAgICAgICAgICBzZWxm Lm91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgLmxvZ19wYXNzKGZvcm1hdCEoInN5c3Rl bWQgdW5pdCAne3NlcnZpY2V9JyBpcyBpbiBzdGF0ZSAnYWN0aXZlJyIpKT87CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIChfLCBTeXN0ZW1kVW5pdFN0YXRlOjpJbmFjdGl2ZSkg PT4geworICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dC5sb2dfZmFpbChmb3JtYXQhKAor ICAgICAgICAgICAgICAgICAgICAgICAgInN5c3RlbWQgdW5pdCAne3NlcnZpY2V9JyBpcyBpbiBz dGF0ZSAnaW5hY3RpdmUnXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIFBsZWFz ZSBjaGVjayB0aGUgc2VydmljZSBmb3IgZXJyb3JzIGFuZCBzdGFydCBpdC4iLAorICAgICAgICAg ICAgICAgICAgICApKT87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIChfLCBT eXN0ZW1kVW5pdFN0YXRlOjpGYWlsZWQpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5v dXRwdXQubG9nX2ZhaWwoZm9ybWF0ISgKKyAgICAgICAgICAgICAgICAgICAgICAgICJzeXN0ZW1k IHVuaXQgJ3tzZXJ2aWNlfScgaXMgaW4gc3RhdGUgJ2ZhaWxlZCdcCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXG4gICAgUGxlYXNlIGNoZWNrIHRoZSBzZXJ2aWNlIGZvciBlcnJvcnMgYW5k IHN0YXJ0IGl0LiIsCisgICAgICAgICAgICAgICAgICAgICkpPzsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgKF8sIF8pID0+IHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5v dXRwdXQubG9nX2ZhaWwoZm9ybWF0ISgKKyAgICAgICAgICAgICAgICAgICAgICAgICJzeXN0ZW1k IHVuaXQgJ3tzZXJ2aWNlfScgaXMgbm90IGluIHN0YXRlICdhY3RpdmUnXAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFxuICAgIFBsZWFzZSBjaGVjayB0aGUgc2VydmljZSBmb3IgZXJyb3Jz IGFuZCBzdGFydCBpdC4iLAorICAgICAgICAgICAgICAgICAgICApKT87CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIE9rKCgpKQorICAgIH0KKwor ICAgIGZuIGNoZWNrX3RpbWVfc3luYygmbXV0IHNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsK KyAgICAgICAgc2VsZi5vdXRwdXQKKyAgICAgICAgICAgIC5sb2dfaW5mbygiQ2hlY2tpbmcgZm9y IHN1cHBvcnRlZCAmIGFjdGl2ZSBOVFAgc2VydmljZS4uIik/OworICAgICAgICBpZiBzZWxmLmdl dF9zeXN0ZW1kX3VuaXRfc3RhdGUoInN5c3RlbWQtdGltZXN5bmNkLnNlcnZpY2UiKT8uMSA9PSBT eXN0ZW1kVW5pdFN0YXRlOjpBY3RpdmUgeworICAgICAgICAgICAgc2VsZi5vdXRwdXQubG9nX3dh cm4oCisgICAgICAgICAgICAgICAgInN5c3RlbWQtdGltZXN5bmNkIGlzIG5vdCB0aGUgYmVzdCBj aG9pY2UgZm9yIHRpbWUta2VlcGluZyBvbiBzZXJ2ZXJzLCBkdWUgdG8gb25seSBcCisgICAgICAg ICAgICAgICAgYXBwbHlpbmcgdXBkYXRlcyBvbiBib290LlwKKyAgICAgICAgICAgICAgICBcbiAg ICAgICBXaGlsZSBub3QgbmVjZXNzYXJ5IGZvciB0aGUgdXBncmFkZSBpdCdzIHJlY29tbWVuZGVk IHRvIHVzZSBvbmUgb2Y6XAorICAgICAgICAgICAgICAgIFxuICAgICAgICAqIGNocm9ueSAoRGVm YXVsdCBpbiBuZXcgUHJveG1veCBwcm9kdWN0IGluc3RhbGxhdGlvbnMpXAorICAgICAgICAgICAg ICAgIFxuICAgICAgICAqIG50cHNlY1wKKyAgICAgICAgICAgICAgICBcbiAgICAgICAgKiBvcGVu bnRwZCIKKyAgICAgICAgICAgICk/OworICAgICAgICB9IGVsc2UgaWYgc2VsZi5nZXRfc3lzdGVt ZF91bml0X3N0YXRlKCJudHAuc2VydmljZSIpPy4xID09IFN5c3RlbWRVbml0U3RhdGU6OkFjdGl2 ZSB7CisgICAgICAgICAgICBzZWxmLm91dHB1dC5sb2dfaW5mbygKKyAgICAgICAgICAgICAgICAi RGViaWFuIGRlcHJlY2F0ZWQgYW5kIHJlbW92ZWQgdGhlIG50cCBwYWNrYWdlIGZvciBCb29rd29y bSwgYnV0IHRoZSBzeXN0ZW0gXAorICAgICAgICAgICAgICAgICAgICB3aWxsIGF1dG9tYXRpY2Fs bHkgbWlncmF0ZSB0byB0aGUgJ250cHNlYycgcmVwbGFjZW1lbnQgcGFja2FnZSBvbiB1cGdyYWRl LiIsCisgICAgICAgICAgICApPzsKKyAgICAgICAgfSBlbHNlIGlmIHNlbGYuZ2V0X3N5c3RlbWRf dW5pdF9zdGF0ZSgiY2hyb255LnNlcnZpY2UiKT8uMSA9PSBTeXN0ZW1kVW5pdFN0YXRlOjpBY3Rp dmUKKyAgICAgICAgICAgIHx8IHNlbGYuZ2V0X3N5c3RlbWRfdW5pdF9zdGF0ZSgib3Blbm50cGQu c2VydmljZSIpPy4xID09IFN5c3RlbWRVbml0U3RhdGU6OkFjdGl2ZQorICAgICAgICAgICAgfHwg c2VsZi5nZXRfc3lzdGVtZF91bml0X3N0YXRlKCJudHBzZWMuc2VydmljZSIpPy4xID09IFN5c3Rl bWRVbml0U3RhdGU6OkFjdGl2ZQorICAgICAgICB7CisgICAgICAgICAgICBzZWxmLm91dHB1dAor ICAgICAgICAgICAgICAgIC5sb2dfcGFzcygiRGV0ZWN0ZWQgYWN0aXZlIHRpbWUgc3luY2hyb25p c2F0aW9uIHVuaXQiKT87CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZWxmLm91dHB1 dC5sb2dfd2FybigKKyAgICAgICAgICAgICAgICAiTm8gKGFjdGl2ZSkgdGltZSBzeW5jaHJvbmlz YXRpb24gZGFlbW9uIChOVFApIGRldGVjdGVkLCBidXQgc3luY2hyb25pemVkIHN5c3RlbXMgXAor ICAgICAgICAgICAgICAgIGFyZSBpbXBvcnRhbnQhIiwKKyAgICAgICAgICAgICk/OworICAgICAg ICB9CisgICAgICAgIE9rKCgpKQorICAgIH0KK30KKworI1tkZXJpdmUoUGFydGlhbEVxKV0KK2Vu dW0gU3lzdGVtZFVuaXRTdGF0ZSB7CisgICAgQWN0aXZlLAorICAgIEVuYWJsZWQsCisgICAgRGlz YWJsZWQsCisgICAgRmFpbGVkLAorICAgIEluYWN0aXZlLAorICAgIFVua25vd24sCit9CisKKyNb ZGVyaXZlKERlZmF1bHQpXQorc3RydWN0IENvdW50ZXJzIHsKKyAgICBwYXNzOiB1NjQsCisgICAg c2tpcDogdTY0LAorICAgIG5vdGljZTogdTY0LAorICAgIHdhcm46IHU2NCwKKyAgICBmYWlsOiB1 NjQsCit9CisKK2VudW0gTG9nTGV2ZWwgeworICAgIFBhc3MsCisgICAgSW5mbywKKyAgICBTa2lw LAorICAgIE5vdGljZSwKKyAgICBXYXJuLAorICAgIEZhaWwsCit9CisKK3N0cnVjdCBDb25zb2xl T3V0cHV0IHsKKyAgICBzdHJlYW06IFN0YW5kYXJkU3RyZWFtLAorICAgIGZpcnN0X2hlYWRlcjog Ym9vbCwKKyAgICBjb3VudGVyczogQ291bnRlcnMsCit9CisKK2ltcGwgQ29uc29sZU91dHB1dCB7 CisgICAgZm4gbmV3KCkgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgeworICAgICAgICAgICAgc3Ry ZWFtOiBTdGFuZGFyZFN0cmVhbTo6c3Rkb3V0KENvbG9yQ2hvaWNlOjpBbHdheXMpLAorICAgICAg ICAgICAgZmlyc3RfaGVhZGVyOiB0cnVlLAorICAgICAgICAgICAgY291bnRlcnM6IENvdW50ZXJz OjpkZWZhdWx0KCksCisgICAgICAgIH0KKyAgICB9CisKKyAgICBmbiBwcmludF9oZWFkZXIoJm11 dCBzZWxmLCBtZXNzYWdlOiAmc3RyKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIGlm ICFzZWxmLmZpcnN0X2hlYWRlciB7CisgICAgICAgICAgICB3cml0ZWxuISgmbXV0IHNlbGYuc3Ry ZWFtKT87CisgICAgICAgIH0KKyAgICAgICAgc2VsZi5maXJzdF9oZWFkZXIgPSBmYWxzZTsKKyAg ICAgICAgd3JpdGVsbiEoJm11dCBzZWxmLnN0cmVhbSwgIj0ge21lc3NhZ2V9ID1cbiIpPzsKKyAg ICAgICAgT2soKCkpCisgICAgfQorCisgICAgZm4gc2V0X2NvbG9yKCZtdXQgc2VsZiwgY29sb3I6 IENvbG9yLCBib2xkOiBib29sKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYu c3RyZWFtCisgICAgICAgICAgICAuc2V0X2NvbG9yKENvbG9yU3BlYzo6bmV3KCkuc2V0X2ZnKFNv bWUoY29sb3IpKS5zZXRfYm9sZChib2xkKSk/OworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAg ICBmbiByZXNldCgmbXV0IHNlbGYpIC0+IFJlc3VsdDwoKSwgc3RkOjppbzo6RXJyb3I+IHsKKyAg ICAgICAgc2VsZi5zdHJlYW0ucmVzZXQoKQorICAgIH0KKworICAgIGZuIGxvZ19saW5lKCZtdXQg c2VsZiwgbGV2ZWw6IExvZ0xldmVsLCBtZXNzYWdlOiAmc3RyKSAtPiBSZXN1bHQ8KCksIEVycm9y PiB7CisgICAgICAgIG1hdGNoIGxldmVsIHsKKyAgICAgICAgICAgIExvZ0xldmVsOjpQYXNzID0+ IHsKKyAgICAgICAgICAgICAgICBzZWxmLmNvdW50ZXJzLnBhc3MgKz0gMTsKKyAgICAgICAgICAg ICAgICBzZWxmLnNldF9jb2xvcihDb2xvcjo6R3JlZW4sIGZhbHNlKT87CisgICAgICAgICAgICAg ICAgd3JpdGVsbiEoJm11dCBzZWxmLnN0cmVhbSwgIlBBU1M6IHt9IiwgbWVzc2FnZSk/OworICAg ICAgICAgICAgfQorICAgICAgICAgICAgTG9nTGV2ZWw6OkluZm8gPT4geworICAgICAgICAgICAg ICAgIHdyaXRlbG4hKCZtdXQgc2VsZi5zdHJlYW0sICJJTkZPOiB7fSIsIG1lc3NhZ2UpPzsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIExvZ0xldmVsOjpTa2lwID0+IHsKKyAgICAgICAgICAg ICAgICBzZWxmLmNvdW50ZXJzLnNraXAgKz0gMTsKKyAgICAgICAgICAgICAgICB3cml0ZWxuISgm bXV0IHNlbGYuc3RyZWFtLCAiU0tJUDoge30iLCBtZXNzYWdlKT87CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBMb2dMZXZlbDo6Tm90aWNlID0+IHsKKyAgICAgICAgICAgICAgICBzZWxmLmNv dW50ZXJzLm5vdGljZSArPSAxOworICAgICAgICAgICAgICAgIHNlbGYuc2V0X2NvbG9yKENvbG9y OjpXaGl0ZSwgdHJ1ZSk/OworICAgICAgICAgICAgICAgIHdyaXRlbG4hKCZtdXQgc2VsZi5zdHJl YW0sICJOT1RJQ0U6IHt9IiwgbWVzc2FnZSk/OworICAgICAgICAgICAgfQorICAgICAgICAgICAg TG9nTGV2ZWw6Oldhcm4gPT4geworICAgICAgICAgICAgICAgIHNlbGYuY291bnRlcnMud2FybiAr PSAxOworICAgICAgICAgICAgICAgIHNlbGYuc2V0X2NvbG9yKENvbG9yOjpZZWxsb3csIGZhbHNl KT87CisgICAgICAgICAgICAgICAgd3JpdGVsbiEoJm11dCBzZWxmLnN0cmVhbSwgIldBUk46IHt9 IiwgbWVzc2FnZSk/OworICAgICAgICAgICAgfQorICAgICAgICAgICAgTG9nTGV2ZWw6OkZhaWwg PT4geworICAgICAgICAgICAgICAgIHNlbGYuY291bnRlcnMuZmFpbCArPSAxOworICAgICAgICAg ICAgICAgIHNlbGYuc2V0X2NvbG9yKENvbG9yOjpSZWQsIHRydWUpPzsKKyAgICAgICAgICAgICAg ICB3cml0ZWxuISgmbXV0IHNlbGYuc3RyZWFtLCAiRkFJTDoge30iLCBtZXNzYWdlKT87CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2VsZi5yZXNldCgpPzsKKyAgICAgICAgT2so KCkpCisgICAgfQorCisgICAgZm4gbG9nX3Bhc3M8VDogQXNSZWY8c3RyPj4oJm11dCBzZWxmLCBt ZXNzYWdlOiBUKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYubG9nX2xpbmUo TG9nTGV2ZWw6OlBhc3MsIG1lc3NhZ2UuYXNfcmVmKCkpCisgICAgfQorCisgICAgZm4gbG9nX2lu Zm88VDogQXNSZWY8c3RyPj4oJm11dCBzZWxmLCBtZXNzYWdlOiBUKSAtPiBSZXN1bHQ8KCksIEVy cm9yPiB7CisgICAgICAgIHNlbGYubG9nX2xpbmUoTG9nTGV2ZWw6OkluZm8sIG1lc3NhZ2UuYXNf cmVmKCkpCisgICAgfQorCisgICAgZm4gbG9nX3NraXA8VDogQXNSZWY8c3RyPj4oJm11dCBzZWxm LCBtZXNzYWdlOiBUKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYubG9nX2xp bmUoTG9nTGV2ZWw6OlNraXAsIG1lc3NhZ2UuYXNfcmVmKCkpCisgICAgfQorCisgICAgZm4gbG9n X25vdGljZTxUOiBBc1JlZjxzdHI+PigmbXV0IHNlbGYsIG1lc3NhZ2U6IFQpIC0+IFJlc3VsdDwo KSwgRXJyb3I+IHsKKyAgICAgICAgc2VsZi5sb2dfbGluZShMb2dMZXZlbDo6Tm90aWNlLCBtZXNz YWdlLmFzX3JlZigpKQorICAgIH0KKworICAgIGZuIGxvZ193YXJuPFQ6IEFzUmVmPHN0cj4+KCZt dXQgc2VsZiwgbWVzc2FnZTogVCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgICAgICBzZWxm LmxvZ19saW5lKExvZ0xldmVsOjpXYXJuLCBtZXNzYWdlLmFzX3JlZigpKQorICAgIH0KKworICAg IGZuIGxvZ19mYWlsPFQ6IEFzUmVmPHN0cj4+KCZtdXQgc2VsZiwgbWVzc2FnZTogVCkgLT4gUmVz dWx0PCgpLCBFcnJvcj4geworICAgICAgICBzZWxmLmxvZ19saW5lKExvZ0xldmVsOjpGYWlsLCBt ZXNzYWdlLmFzX3JlZigpKQorICAgIH0KKworICAgIGZuIHByaW50X3N1bW1hcnkoJm11dCBzZWxm KSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYucHJpbnRfaGVhZGVyKCJTVU1N QVJZIik/OworCisgICAgICAgIGxldCB0b3RhbCA9IHNlbGYuY291bnRlcnMuZmFpbAorICAgICAg ICAgICAgKyBzZWxmLmNvdW50ZXJzLnBhc3MKKyAgICAgICAgICAgICsgc2VsZi5jb3VudGVycy5u b3RpY2UKKyAgICAgICAgICAgICsgc2VsZi5jb3VudGVycy5za2lwCisgICAgICAgICAgICArIHNl bGYuY291bnRlcnMud2FybjsKKworICAgICAgICB3cml0ZWxuISgmbXV0IHNlbGYuc3RyZWFtLCAi VE9UQUw6ICAgICB7dG90YWx9Iik/OworICAgICAgICBzZWxmLnNldF9jb2xvcihDb2xvcjo6R3Jl ZW4sIGZhbHNlKT87CisgICAgICAgIHdyaXRlbG4hKCZtdXQgc2VsZi5zdHJlYW0sICJQQVNTRUQ6 ICAgIHt9Iiwgc2VsZi5jb3VudGVycy5wYXNzKT87CisgICAgICAgIHNlbGYucmVzZXQoKT87Cisg ICAgICAgIHdyaXRlbG4hKCZtdXQgc2VsZi5zdHJlYW0sICJTS0lQUEVEOiAgIHt9Iiwgc2VsZi5j b3VudGVycy5za2lwKT87CisgICAgICAgIHdyaXRlbG4hKCZtdXQgc2VsZi5zdHJlYW0sICJOT1RJ Q0U6ICAgIHt9Iiwgc2VsZi5jb3VudGVycy5ub3RpY2UpPzsKKyAgICAgICAgaWYgc2VsZi5jb3Vu dGVycy53YXJuID4gMCB7CisgICAgICAgICAgICBzZWxmLnNldF9jb2xvcihDb2xvcjo6WWVsbG93 LCBmYWxzZSk/OworICAgICAgICAgICAgd3JpdGVsbiEoJm11dCBzZWxmLnN0cmVhbSwgIldBUk5J TkdTOiAge30iLCBzZWxmLmNvdW50ZXJzLndhcm4pPzsKKyAgICAgICAgfQorICAgICAgICBpZiBz ZWxmLmNvdW50ZXJzLmZhaWwgPiAwIHsKKyAgICAgICAgICAgIHNlbGYuc2V0X2NvbG9yKENvbG9y OjpSZWQsIHRydWUpPzsKKyAgICAgICAgICAgIHdyaXRlbG4hKCZtdXQgc2VsZi5zdHJlYW0sICJG QUlMVVJFUzogIHt9Iiwgc2VsZi5jb3VudGVycy5mYWlsKT87CisgICAgICAgIH0KKyAgICAgICAg aWYgc2VsZi5jb3VudGVycy53YXJuID4gMCB8fCBzZWxmLmNvdW50ZXJzLmZhaWwgPiAwIHsKKyAg ICAgICAgICAgIGxldCAoY29sb3IsIGJvbGQpID0gaWYgc2VsZi5jb3VudGVycy5mYWlsID4gMCB7 CisgICAgICAgICAgICAgICAgKENvbG9yOjpSZWQsIHRydWUpCisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIChDb2xvcjo6WWVsbG93LCBmYWxzZSkKKyAgICAgICAgICAgIH07 CisKKyAgICAgICAgICAgIHNlbGYuc2V0X2NvbG9yKGNvbG9yLCBib2xkKT87CisgICAgICAgICAg ICB3cml0ZWxuISgKKyAgICAgICAgICAgICAgICAmbXV0IHNlbGYuc3RyZWFtLAorICAgICAgICAg ICAgICAgICJcbkFUVEVOVElPTjogUGxlYXNlIGNoZWNrIHRoZSBvdXRwdXQgZm9yIGRldGFpbGVk IGluZm9ybWF0aW9uISIsCisgICAgICAgICAgICApPzsKKyAgICAgICAgICAgIGlmIHNlbGYuY291 bnRlcnMuZmFpbCA+IDAgeworICAgICAgICAgICAgICAgIHdyaXRlbG4hKAorICAgICAgICAgICAg ICAgICAgICAmbXV0IHNlbGYuc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAiVHJ5IHRvIHNv bHZlIHRoZSBwcm9ibGVtcyBvbmUgYXQgYSB0aW1lIGFuZCByZXJ1biB0aGlzIGNoZWNrbGlzdCB0 b29sIGFnYWluLiIsCisgICAgICAgICAgICAgICAgKT87CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgc2VsZi5yZXNldCgpPzsKKyAgICAgICAgT2soKCkpCisgICAgfQorfQorCisj W2NmZyh0ZXN0KV0KK21vZCB0ZXN0cyB7CisgICAgdXNlIHN1cGVyOjoqOworCisgICAgZm4gdGVz dF9pc19rZXJuZWxfdmVyc2lvbl9jb21wYXRpYmxlKAorICAgICAgICBleHBlY3RlZF92ZXJzaW9u czogJlsmc3RyXSwKKyAgICAgICAgdW5leHBlY3RlZF92ZXJzaW9uczogJlsmc3RyXSwKKyAgICAg ICAgdXBncmFkZWQ6IGJvb2wsCisgICAgKSB7CisgICAgICAgIGxldCBtdXQgY2hlY2tlciA9IFVw Z3JhZGVDaGVja2VyQnVpbGRlcjo6bmV3KAorICAgICAgICAgICAgImJvb2t3b3JtIiwKKyAgICAg ICAgICAgICJ0cml4aWUiLAorICAgICAgICAgICAgInByb3htb3gtYmFja3VwIiwKKyAgICAgICAg ICAgIDMsCisgICAgICAgICAgICA0LAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICJydW5u aW5nIHZlcnNpb246IDMuNCIsCisgICAgICAgICkKKyAgICAgICAgLmJ1aWxkKCk7CisKKyAgICAg ICAgY2hlY2tlci51cGdyYWRlZCA9IHVwZ3JhZGVkOworCisgICAgICAgIGZvciB2ZXJzaW9uIGlu IGV4cGVjdGVkX3ZlcnNpb25zIHsKKyAgICAgICAgICAgIGFzc2VydCEoCisgICAgICAgICAgICAg ICAgY2hlY2tlci5pc19rZXJuZWxfdmVyc2lvbl9jb21wYXRpYmxlKHZlcnNpb24pLAorICAgICAg ICAgICAgICAgICJjb21wYXRpYmxlIGtlcm5lbCB2ZXJzaW9uICd7dmVyc2lvbn0nIGRpZCBub3Qg cGFzcyBhcyBleHBlY3RlZCEiCisgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIGZv ciB2ZXJzaW9uIGluIHVuZXhwZWN0ZWRfdmVyc2lvbnMgeworICAgICAgICAgICAgYXNzZXJ0ISgK KyAgICAgICAgICAgICAgICAhY2hlY2tlci5pc19rZXJuZWxfdmVyc2lvbl9jb21wYXRpYmxlKHZl cnNpb24pLAorICAgICAgICAgICAgICAgICJpbmNvbXBhdGlibGUga2VybmVsIHZlcnNpb24gJ3t2 ZXJzaW9ufScgcGFzc2VkIGFzIGV4cGVjdGVkISIKKyAgICAgICAgICAgICk7CisgICAgICAgIH0K KyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9iZWZvcmVfdXBncmFkZV9rZXJuZWxf dmVyc2lvbl9jb21wYXRpYmlsaXR5KCkgeworICAgICAgICBsZXQgZXhwZWN0ZWRfdmVyc2lvbnMg PSAmWyI2LjIuMTYtMjAtcHZlIiwgIjYuNS4xMy02LXB2ZSIsICI2LjguMTItMS1wdmUiXTsKKyAg ICAgICAgbGV0IHVuZXhwZWN0ZWRfdmVyc2lvbnMgPSAmWyI2LjEuMTAtMS1wdmUiLCAiNS4xOS4x Ny0yLXB2ZSJdOworCisgICAgICAgIHRlc3RfaXNfa2VybmVsX3ZlcnNpb25fY29tcGF0aWJsZShl eHBlY3RlZF92ZXJzaW9ucywgdW5leHBlY3RlZF92ZXJzaW9ucywgZmFsc2UpOworICAgIH0KKwor ICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X2FmdGVyX3VwZ3JhZGVfa2VybmVsX3ZlcnNpb25fY29t cGF0aWJpbGl0eSgpIHsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3ZlcnNpb25zID0gJlsiNi4xNC42 LTEtcHZlIiwgIjYuMTcuMC0xLXB2ZSJdOworICAgICAgICBsZXQgdW5leHBlY3RlZF92ZXJzaW9u cyA9ICZbIjYuMTIuMS0xLXB2ZSIsICI2LjIuMS0xLXB2ZSJdOworCisgICAgICAgIHRlc3RfaXNf a2VybmVsX3ZlcnNpb25fY29tcGF0aWJsZShleHBlY3RlZF92ZXJzaW9ucywgdW5leHBlY3RlZF92 ZXJzaW9ucywgdHJ1ZSk7CisgICAgfQorfQotLQoyLjQ3LjMKCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcGRtLWRldmVsIG1haWxpbmcgbGlzdApwZG0t ZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmlu L21haWxtYW4vbGlzdGluZm8vcGRtLWRldmVsCg==