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 392D71FF168 for ; Tue, 4 Feb 2025 10:56:04 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 0D8121109B; Tue, 4 Feb 2025 10:56:04 +0100 (CET) From: Wolfgang Bumiller To: pdm-devel@lists.proxmox.com Date: Tue, 4 Feb 2025 10:55:51 +0100 Message-Id: <20250204095554.39501-5-w.bumiller@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250204095554.39501-1-w.bumiller@proxmox.com> References: <20250204095554.39501-1-w.bumiller@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.084 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: [pdm-devel] [PATCH datacenter-manager 4/7] server: cache pve node reachability and names 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" QWRkIGEgYHJlbW90ZV9jYWNoZWAgbW9kdWxlIHRvIGFjY2VzcyB0aGUgY2FjaGUgd2hpY2ggbWFw cwoocmVtb3RlLGhvc3QpIHRvIGEgc3RydWN0IGhvbGRpbmcgdGhlIG5vZGUgbmFtZSBhbmQgYSAi cmVhY2hhYmxlIgpib29sZWFuLiBUaGlzIGNhbiBlIHVzZWQgdG8gY29ubmVjdCB0byBzcGVjaWZp YyBub2RlcyBvciBza2lwIG5vZGVzCmtub3duIHRvIGJlIGN1cnJlbnRseSB1bnJlYWNoYWJsZSAo YWx0aG91Z2ggdGhlIGxhdHRlciBwYXJ0IGlzIG5vdApjdXJyZW50bHkgaW1wbGVtZW50ZWQpLgoK VGhlIENsaWVudEZhY3RvcnkgdHJhaXQgZ2FpbnMgaGVscGVycyB0byBjb25uZWN0IHRvIHNwZWNp ZmljIG5vZGVzLgoKVGhlIHVucHJpdmlsZWdlZCBBUEkgZ2V0cyBhIGB0YXNrc2Agc3VibW9kdWxl IHdpdGggYSB0YXNrIHdoaWNoCmZpbGxzIHRoZSBub2RlIGNhY2hlIGFuZCB3YXRjaGVzIHRoZSBy ZW1vdGUgY29uZmlnIGZvciB1cGRhdGVzICh2aWEKdGhlIGNvbmZpZyB2ZXJzaW9uIGNhY2hlKS4K ClNpZ25lZC1vZmYtYnk6IFdvbGZnYW5nIEJ1bWlsbGVyIDx3LmJ1bWlsbGVyQHByb3htb3guY29t PgotLS0KIGxpYi9wZG0tY29uZmlnL3NyYy9jb25maWdfdmVyc2lvbl9jYWNoZS5ycyAgICB8ICAz MyArLQogLi4uL21haW4ucnN9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAz ICsKIC4uLi9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS90YXNrcy9tb2QucnMgICB8ICAgMSAr CiAuLi4vdGFza3MvcmVtb3RlX25vZGVfbWFwcGluZy5ycyAgICAgICAgICAgICAgfCAyMjYgKysr KysrKysrKysrKysKIHNlcnZlci9zcmMvY29ubmVjdGlvbi5ycyAgICAgICAgICAgICAgICAgICAg ICB8ICAzMiArKwogc2VydmVyL3NyYy9saWIucnMgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIHNlcnZlci9zcmMvcmVtb3RlX2NhY2hlL21vZC5ycyAgICAgICAgICAgICAgICB8 IDI4NSArKysrKysrKysrKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgNTgwIGluc2VydGlvbnMo KyksIDEgZGVsZXRpb24oLSkKIHJlbmFtZSBzZXJ2ZXIvc3JjL2Jpbi97cHJveG1veC1kYXRhY2Vu dGVyLWFwaS5ycyA9PiBwcm94bW94LWRhdGFjZW50ZXItYXBpL21haW4ucnN9ICg5OSUpCiBjcmVh dGUgbW9kZSAxMDA2NDQgc2VydmVyL3NyYy9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS90YXNr cy9tb2QucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRhdGFj ZW50ZXItYXBpL3Rhc2tzL3JlbW90ZV9ub2RlX21hcHBpbmcucnMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzZXJ2ZXIvc3JjL3JlbW90ZV9jYWNoZS9tb2QucnMKCmRpZmYgLS1naXQgYS9saWIvcGRtLWNv bmZpZy9zcmMvY29uZmlnX3ZlcnNpb25fY2FjaGUucnMgYi9saWIvcGRtLWNvbmZpZy9zcmMvY29u ZmlnX3ZlcnNpb25fY2FjaGUucnMKaW5kZXggYjRhNDdhOC4uNWM0YjYxYSAxMDA2NDQKLS0tIGEv bGliL3BkbS1jb25maWcvc3JjL2NvbmZpZ192ZXJzaW9uX2NhY2hlLnJzCisrKyBiL2xpYi9wZG0t Y29uZmlnL3NyYy9jb25maWdfdmVyc2lvbl9jYWNoZS5ycwpAQCAtMjUsNiArMjUsOCBAQCBzdHJ1 Y3QgQ29uZmlnVmVyc2lvbkNhY2hlRGF0YUlubmVyIHsKICAgICB1c2VyX2NhY2hlX2dlbmVyYXRp b246IEF0b21pY1VzaXplLAogICAgIC8vIFRyYWZmaWMgY29udHJvbCAodHJhZmZpYy1jb250cm9s LmNmZykgZ2VuZXJhdGlvbi92ZXJzaW9uLgogICAgIHRyYWZmaWNfY29udHJvbF9nZW5lcmF0aW9u OiBBdG9taWNVc2l6ZSwKKyAgICAvLyBUcmFja3MgdXBkYXRlcyB0byB0aGUgcmVtb3RlL2hvc3Ru YW1lL25vZGVuYW1lIG1hcHBpbmcgY2FjaGUuCisgICAgcmVtb3RlX21hcHBpbmdfY2FjaGU6IEF0 b21pY1VzaXplLAogICAgIC8vIEFkZCBmdXJ0aGVyIGF0b21pY3MgaGVyZQogfQogCkBAIC04MSwx MSArODMsMjMgQEAgcHViIHN0cnVjdCBDb25maWdWZXJzaW9uQ2FjaGUgewogc3RhdGljIElOU1RB TkNFOiBPbmNlQ2VsbDxBcmM8Q29uZmlnVmVyc2lvbkNhY2hlPj4gPSBPbmNlQ2VsbDo6bmV3KCk7 CiAKIGltcGwgQ29uZmlnVmVyc2lvbkNhY2hlIHsKLSAgICAvLy8gT3BlbiB0aGUgbWVtb3J5IGJh c2VkIGNvbW11bmljYXRpb24gY2hhbm5lbCBzaW5nbGV0b24uCisgICAgLy8vIE9wZW4gdGhlIG1l bW9yeSBiYWNrZWQgdmVyc2lvbiBjYWNoZS4KICAgICBwdWIgZm4gbmV3KCkgLT4gUmVzdWx0PEFy YzxTZWxmPiwgRXJyb3I+IHsKICAgICAgICAgSU5TVEFOQ0UuZ2V0X29yX3RyeV9pbml0KFNlbGY6 Om9wZW4pLmNsb25lZCgpCiAgICAgfQogCisgICAgLy8vIENvbnZlbmllbmNlIG1ldGhvZCB0byBj YWxsIFtgQ29uZmlnVmVyc2lvbkNhY2hlOjpuZXdgXSB3aGlsZSB0dXJuaW5nIHRoZSBlcnJvciBp bnRvIGEgbG9nCisgICAgLy8vIG1lc3NhZ2UuCisgICAgcHViIGZuIG5ld19sb2dfZXJyb3IoKSAt PiBPcHRpb248QXJjPFNlbGY+PiB7CisgICAgICAgIG1hdGNoIFNlbGY6Om5ldygpIHsKKyAgICAg ICAgICAgIE9rKHRoaXMpID0+IFNvbWUodGhpcyksCisgICAgICAgICAgICBFcnIoZXJyKSA9PiB7 CisgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoImZhaWxlZCB0byBvcGVuIGNvbmZpZyB2ZXJz aW9uIGNhY2hlIC0ge2Vycjo/fSIpOworICAgICAgICAgICAgICAgIE5vbmUKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIEFjdHVhbCB3b3JrIG9mIGBuZXdgOgogICAg IGZuIG9wZW4oKSAtPiBSZXN1bHQ8QXJjPFNlbGY+LCBFcnJvcj4gewogICAgICAgICBsZXQgdXNl ciA9IGNyYXRlOjphcGlfdXNlcigpPzsKQEAgLTE0MSw0ICsxNTUsMjEgQEAgaW1wbCBDb25maWdW ZXJzaW9uQ2FjaGUgewogICAgICAgICAgICAgLnRyYWZmaWNfY29udHJvbF9nZW5lcmF0aW9uCiAg ICAgICAgICAgICAuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpBY3FSZWwpOwogICAgIH0KKworICAg IC8vLyBSZXR1cm4gdGhlIGN1cnJlbnQgcmVtb3RlIG1hcHBpbmcgY2FjaGUgZ2VuZXJhdGlvbi4K KyAgICBwdWIgZm4gcmVtb3RlX21hcHBpbmdfY2FjaGUoJnNlbGYpIC0+IHVzaXplIHsKKyAgICAg ICAgc2VsZi5zaG1lbQorICAgICAgICAgICAgLmRhdGEoKQorICAgICAgICAgICAgLnJlbW90ZV9t YXBwaW5nX2NhY2hlCisgICAgICAgICAgICAubG9hZChPcmRlcmluZzo6UmVsYXhlZCkKKyAgICB9 CisKKyAgICAvLy8gSW5jcmVhc2UgdGhlIHJlbW90ZSBtYXBwaW5nIGNhY2hlIG51bWJlci4KKyAg ICBwdWIgZm4gaW5jcmVhc2VfcmVtb3RlX21hcHBpbmdfY2FjaGUoJnNlbGYpIC0+IHVzaXplIHsK KyAgICAgICAgc2VsZi5zaG1lbQorICAgICAgICAgICAgLmRhdGEoKQorICAgICAgICAgICAgLnJl bW90ZV9tYXBwaW5nX2NhY2hlCisgICAgICAgICAgICAuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpS ZWxheGVkKQorICAgICAgICAgICAgKyAxCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2VydmVyL3Ny Yy9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS5ycyBiL3NlcnZlci9zcmMvYmluL3Byb3htb3gt ZGF0YWNlbnRlci1hcGkvbWFpbi5ycwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBz ZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRhdGFjZW50ZXItYXBpLnJzCnJlbmFtZSB0byBzZXJ2ZXIv c3JjL2Jpbi9wcm94bW94LWRhdGFjZW50ZXItYXBpL21haW4ucnMKaW5kZXggYTc5MDk0ZC4uMjU4 NTJjOCAxMDA2NDQKLS0tIGEvc2VydmVyL3NyYy9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS5y cworKysgYi9zZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRhdGFjZW50ZXItYXBpL21haW4ucnMKQEAg LTMxLDYgKzMxLDggQEAgdXNlIHNlcnZlcjo6bWV0cmljX2NvbGxlY3Rpb247CiB1c2Ugc2VydmVy OjpyZXNvdXJjZV9jYWNoZTsKIHVzZSBzZXJ2ZXI6OnRhc2tfdXRpbHM7CiAKK21vZCB0YXNrczsK KwogcHViIGNvbnN0IFBST1hNT1hfQkFDS1VQX1RDUF9LRUVQQUxJVkVfVElNRTogdTMyID0gNSAq IDYwOwogCiBjb25zdCBQRE1fTElTVEVOX0FERFI6IFNvY2tldEFkZHIgPSBTb2NrZXRBZGRyOjpu ZXcoCkBAIC0yODcsNiArMjg5LDcgQEAgYXN5bmMgZm4gcnVuKGRlYnVnOiBib29sKSAtPiBSZXN1 bHQ8KCksIEVycm9yPiB7CiAKICAgICBzdGFydF90YXNrX3NjaGVkdWxlcigpOwogICAgIG1ldHJp Y19jb2xsZWN0aW9uOjpzdGFydF90YXNrKCk7CisgICAgdGFza3M6OnJlbW90ZV9ub2RlX21hcHBp bmc6OnN0YXJ0X3Rhc2soKTsKICAgICByZXNvdXJjZV9jYWNoZTo6c3RhcnRfdGFzaygpOwogCiAg ICAgc2VydmVyLmF3YWl0PzsKZGlmZiAtLWdpdCBhL3NlcnZlci9zcmMvYmluL3Byb3htb3gtZGF0 YWNlbnRlci1hcGkvdGFza3MvbW9kLnJzIGIvc2VydmVyL3NyYy9iaW4vcHJveG1veC1kYXRhY2Vu dGVyLWFwaS90YXNrcy9tb2QucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZTZlYWQ4OAotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZlci9zcmMvYmluL3Byb3htb3gtZGF0YWNl bnRlci1hcGkvdGFza3MvbW9kLnJzCkBAIC0wLDAgKzEgQEAKK3B1YiBtb2QgcmVtb3RlX25vZGVf bWFwcGluZzsKZGlmZiAtLWdpdCBhL3NlcnZlci9zcmMvYmluL3Byb3htb3gtZGF0YWNlbnRlci1h cGkvdGFza3MvcmVtb3RlX25vZGVfbWFwcGluZy5ycyBiL3NlcnZlci9zcmMvYmluL3Byb3htb3gt ZGF0YWNlbnRlci1hcGkvdGFza3MvcmVtb3RlX25vZGVfbWFwcGluZy5ycwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTEyMzY1Ci0tLSAvZGV2L251bGwKKysrIGIvc2VydmVy L3NyYy9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS90YXNrcy9yZW1vdGVfbm9kZV9tYXBwaW5n LnJzCkBAIC0wLDAgKzEsMjI2IEBACisvLyEgUFZFIHJlbW90ZXMgaGF2ZSBtdWx0aXBsZSBub2Rl cyB3aGljaCBoYXZlIG5hbWVzIHdlIGNhbm5vdCBuZWNlc3NhcmlseSBpbmZlciBmcm9tIHRoZQor Ly8hICJob3N0bmFtZSIgZmllbGQsIHNpbmNlIHRoYXQgbWlnaHQgYmUgYSBkaWZmZXJlbnQgYWRk cmVzcywgcG90ZW50aWFsbHkgd2l0aCBhIHBvcnQuCisvLyEKKy8vISBXZSBhbHNvIGRvIG5vdCB3 YW50IHVzZXJzIHRvIGhhdmUgdG8gbWFpbnRhaW4gdGhlIFBETSBob3N0L25vZGUtbmFtZSBjb21i aW5hdGlvbnMgKGluIGNhc2UgdGhleQorLy8hIHJlbmFtZSBvciByZWluc3RhbGwgbm9kZXMpLiBS ZW5hbWluZyB3b3VsZCBicmVhayB0aGUgUERNIGNvbmZpZywgcmVpbnN0YWxsaW5nIHdvdWxkIGJy ZWFrIGVnLiBhCisvLyEgIm1hY2hpbmUtaWQiIGJhc2VkIG1hcHBpbmcuCisvLyEKKy8vISBXZSBh bHNvIGNhbm5vdCByZWx5IGluIHRoZSBUTFMgZmluZ2VycHJpbnRzLCBiZWNhdXNlIGEgd2hvbGUg Y2x1c3RlciBjb3VsZCBwb3RlbnRpYWxseSB1c2UgYQorLy8hIHNpbmdsZSB3aWxkY2FyZCBjZXJ0 aWZpY2F0ZS4KKy8vIQorLy8hIEluc3RlYWQsIHdlIG1haW50YWluIGEgY2FjaGVkIG1hcHBpbmcg b2YgYGFkZHJlc3Mg4oaUIG5hbWVgIGluIGAvdmFyYCwgd2hpY2ggZ2V0cyBwb2xsZWQKKy8vISBy ZWd1bGFybHkuCisvLyEgRm9yIFBWRSB3ZSBjYW4gcXVlcnkgYW4gYWRkcmVzcycgYC9jbHVzdGVy L3N0YXR1c2AgYW5kIGxvb2sgZm9yIGFuIGVudHJ5IG1hcmtlZCBhcyBgbG9jYWw6MWAuCisvLyEg TGF0ZXIgdGhpcyBtaWdodCBiZSBjaGFuZ2VkIHRvIGxvb2tpbmcgZm9yIHRoZSBub2RlIG5hbWUg aW4gdGhlIHJlc3VsdCBvZgorLy8hIGAvbm9kZXMvbG9jYWxob3N0L3N0YXR1c2AgLSBvbmNlIHRo aXMgaXMgaW1wbGVtZW50ZWQgYW5kIHJvbGxlZCBvdXQgbG9uZyBlbm91Z2ggaW4gUFZFLgorCit1 c2Ugc3RkOjpmdXR1cmU6OkZ1dHVyZTsKK3VzZSBzdGQ6OnBpbjo6cGluOworCit1c2UgYW55aG93 Ojp7YmFpbCwgRXJyb3J9OwordXNlIHRva2lvOjp0YXNrOjpKb2luSGFuZGxlOworCit1c2UgcHJv eG1veF9jb25maWdfZGlnZXN0OjpDb25maWdEaWdlc3Q7Cit1c2UgcHJveG1veF9zZWN0aW9uX2Nv bmZpZzo6dHlwZWQ6OlNlY3Rpb25Db25maWdEYXRhOworCit1c2UgcGRtX2FwaV90eXBlczo6cmVt b3Rlczo6e1JlbW90ZSwgUmVtb3RlVHlwZX07CisKK3VzZSBzZXJ2ZXI6OnJlbW90ZV9jYWNoZTo6 e3NlbGYsIFJlbW90ZU1hcHBpbmdDYWNoZX07Cit1c2Ugc2VydmVyOjp0YXNrX3V0aWxzOworCitj b25zdCBDT05GSUdfUE9MTF9JTlRFUlZBTDogdTY0ID0gNjA7CisKK2ZuIHNwYXduX2Fib3J0ZWRf b25fc2h1dGRvd248Rj4oZnV0dXJlOiBGKSAtPiBKb2luSGFuZGxlPCgpPgord2hlcmUKKyAgICBG OiBGdXR1cmUgKyBTZW5kICsgJ3N0YXRpYywKK3sKKyAgICB0b2tpbzo6c3Bhd24oYXN5bmMgbW92 ZSB7CisgICAgICAgIC8vIFRPRE86IFRoZSB3cmFwcGluZyBpbiBhIHNlbGVjdChzaHV0ZG93bl9m dXR1cmUsIGZ1dCkgc2hvdWxkIHByb2JhYmx5IGJlIGEgaGVscGVyIGluCisgICAgICAgIC8vIGBw cm94bW94X2RhZW1vbmAuCisgICAgICAgIGxldCBmdXR1cmUgPSBwaW4hKGZ1dHVyZSk7CisgICAg ICAgIGxldCBhYm9ydF9mdXR1cmUgPSBwaW4hKHByb3htb3hfZGFlbW9uOjpzaHV0ZG93bl9mdXR1 cmUoKSk7CisgICAgICAgIGZ1dHVyZXM6OmZ1dHVyZTo6c2VsZWN0KGZ1dHVyZSwgYWJvcnRfZnV0 dXJlKS5hd2FpdDsKKyAgICB9KQorfQorCitwdWIgZm4gc3RhcnRfdGFzaygpIHsKKyAgICBzcGF3 bl9hYm9ydGVkX29uX3NodXRkb3duKENhY2hpbmdUYXNrOjpkZWZhdWx0KCkucnVuKCkpOworfQor Cithc3luYyBmbiBwb2xsX2ludGVydmFsKCkgeworICAgIGxldCBkZWxheV90YXJnZXQgPSB0YXNr X3V0aWxzOjpuZXh0X2FsaWduZWRfaW5zdGFudChDT05GSUdfUE9MTF9JTlRFUlZBTCk7CisgICAg dG9raW86OnRpbWU6OnNsZWVwX3VudGlsKHRva2lvOjp0aW1lOjpJbnN0YW50Ojpmcm9tX3N0ZChk ZWxheV90YXJnZXQpKS5hd2FpdDsKK30KKworI1tkZXJpdmUoRGVmYXVsdCldCitzdHJ1Y3QgQ2Fj aGluZ1Rhc2sgeworICAgIGN1cnJlbnRfbmFtZV90YXNrOiBPcHRpb248Sm9pbkhhbmRsZTwoKT4+ LAorICAgIGxhc3RfY29uZmlnX2RpZ2VzdDogT3B0aW9uPENvbmZpZ0RpZ2VzdD4sCit9CisKK2lt cGwgQ2FjaGluZ1Rhc2sgeworICAgIC8vLyBUaGUgY2FjaGluZyB0YXNrJ3MgbWFpbiBlbnRyeSBw b2ludC4KKyAgICBhc3luYyBmbiBydW4obXV0IHNlbGYpIHsKKyAgICAgICAgbG9vcCB7CisgICAg ICAgICAgICBzZWxmLnJ1bl9vbmNlKCkuYXdhaXQ7CisgICAgICAgICAgICBwb2xsX2ludGVydmFs KCkuYXdhaXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gQSBzaW5nbGUgaXRlcmF0aW9u IG9mIHRoZSBjYWNoaW5nIHRhc2suCisgICAgYXN5bmMgZm4gcnVuX29uY2UoJm11dCBzZWxmKSB7 CisgICAgICAgIGxldCAoY29uZmlnLCBkaWdlc3QpID0gbWF0Y2ggcGRtX2NvbmZpZzo6cmVtb3Rl czo6Y29uZmlnKCkgeworICAgICAgICAgICAgT2soY2QpID0+IGNkLAorICAgICAgICAgICAgRXJy KGVycikgPT4geworICAgICAgICAgICAgICAgIGxvZzo6ZXJyb3IhKCJmYWlsZWQgdG8gbG9hZCBy ZW1vdGUgY29uZmlnLCBub3QgdXBkYXRpbmcgY2FjaGUgLSB7ZXJyOj99Iik7CisgICAgICAgICAg ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGlmIHNl bGYKKyAgICAgICAgICAgIC5sYXN0X2NvbmZpZ19kaWdlc3QKKyAgICAgICAgICAgIC5hc19yZWYo KQorICAgICAgICAgICAgLmlzX25vbmVfb3IofGR8IGRpZ2VzdCAhPSAqZCkKKyAgICAgICAgewor ICAgICAgICAgICAgdHJhY2luZzo6ZGVidWchKCJuZXcgY29uZmlnIC0gdXBkYXRpbmcgcmVtb3Rl IG5vZGUgbmFtZSBjYWNoZSIpOworICAgICAgICAgICAgc2VsZi5sYXN0X2NvbmZpZ19kaWdlc3Qg PSBTb21lKGRpZ2VzdCk7CisKKyAgICAgICAgICAgIC8vIHRoZSBjb25maWcgZ290IHVwZGF0ZWQg LSBhYm9ydCB0aGUgY3VycmVudCBuYW1lLWZldGNoaW5nIHRhc2ssIHdlJ2xsCisgICAgICAgICAg ICAvLyBzcGF3biBhIG5ldyBvbmUKKyAgICAgICAgICAgIGlmIGxldCBTb21lKG5hbWVfdGFzaykg PSBzZWxmLmN1cnJlbnRfbmFtZV90YXNrLnRha2UoKSB7CisgICAgICAgICAgICAgICAgdHJhY2lu Zzo6ZGVidWchKCJhYm9ydGluZyBxdWVyeSB0YXNrIik7CisgICAgICAgICAgICAgICAgbmFtZV90 YXNrLmFib3J0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIGxldCBFcnIoZXJy KSA9IHNlbGYuY29uZmlnX3VwZGF0ZSgmY29uZmlnKSB7CisgICAgICAgICAgICAgICAgbG9nOjpl cnJvciEoImVycm9yIHVwZGF0aW5nIHJlbW90ZSBub2RlIGNhY2hlOiB7ZXJyOj99Iik7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICAvL30gZWxzZSB7CisgICAgICAgICAgICAvLyAgICB0cmFj aW5nOjpkZWJ1ZyEoIm5vIGNoYW5nZSB0byB0aGUgY29uZmlnIik7CisgICAgICAgIH0KKworICAg ICAgICBpZiBzZWxmCisgICAgICAgICAgICAuY3VycmVudF9uYW1lX3Rhc2sKKyAgICAgICAgICAg IC5hc19yZWYoKQorICAgICAgICAgICAgLmlzX25vbmVfb3IofHRhc2t8IHRhc2suaXNfZmluaXNo ZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9nOjpkZWJ1ZyEoIm5hbWUgdGFzayBmaW5p c2hlZCwgc3RhcnRpbmcgcmVhY2hhYmlsaXR5IHF1ZXJ5IHRhc2siKTsKKyAgICAgICAgICAgIHNl bGYuY3VycmVudF9uYW1lX3Rhc2sgPQorICAgICAgICAgICAgICAgIFNvbWUoc3Bhd25fYWJvcnRl ZF9vbl9zaHV0ZG93bihTZWxmOjpxdWVyeV9ub2RlX25hbWVzKGNvbmZpZykpKTsKKyAgICAgICAg fQorICAgIH0KKworICAgIC8vLyBJZiB0aGUgYHJlbW90ZXMuY2ZnYCB3YXMgdXBkYXRlZCB3ZSBu ZWVkIHRvIGdvIG92ZXIgYWxsIHRoZSByZW1vdGVzIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55Cisg ICAgLy8vIGluZm9ybWF0aW9uIHdlIG5lZWQgdG8gdXBkYXRlLgorICAgIGZuIGNvbmZpZ191cGRh dGUoJm11dCBzZWxmLCBjb25maWc6ICZTZWN0aW9uQ29uZmlnRGF0YTxSZW1vdGU+KSAtPiBSZXN1 bHQ8KCksIEVycm9yPiB7CisgICAgICAgIGxldCBtdXQgY2FjaGUgPSBSZW1vdGVNYXBwaW5nQ2Fj aGU6OndyaXRlKCk/OworCisgICAgICAgIC8vIHBydW5lIHJlbW90ZXMgd2hpY2ggd2VyZSByZW1v dmVkOgorICAgICAgICBjYWNoZQorICAgICAgICAgICAgLnJlbW90ZXMKKyAgICAgICAgICAgIC5y ZXRhaW4ofG5hbWUsIF9lbnRyeXwgY29uZmlnLmNvbnRhaW5zX2tleShuYW1lKSk7CisKKyAgICAg ICAgLy8gbm93IHVwZGF0ZSB0aGUgZXhpc3RpbmcgcmVtb3RlczoKKyAgICAgICAgZm9yIChuYW1l LCByZW1vdGUpIGluIGNvbmZpZyB7CisgICAgICAgICAgICBzZWxmLnBydW5lX3JlbW90ZV9ub2Rl cygmbXV0IGNhY2hlLCBuYW1lLCByZW1vdGUpOworICAgICAgICB9CisKKyAgICAgICAgY2FjaGUu c2F2ZSgpPzsKKworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBmbiBwcnVuZV9yZW1vdGVf bm9kZXMoJm11dCBzZWxmLCBjYWNoZTogJm11dCBSZW1vdGVNYXBwaW5nQ2FjaGUsIG5hbWU6ICZz dHIsIHJlbW90ZTogJlJlbW90ZSkgeworICAgICAgICBsZXQgZW50cnkgPSBjYWNoZQorICAgICAg ICAgICAgLnJlbW90ZXMKKyAgICAgICAgICAgIC5lbnRyeShuYW1lLnRvX3N0cmluZygpKQorICAg ICAgICAgICAgLm9yX2luc2VydF93aXRoKHx8IHJlbW90ZV9jYWNoZTo6UmVtb3RlTWFwcGluZzo6 bmV3KHJlbW90ZS50eSkpOworCisgICAgICAgIC8vIGlmIHRoZSBlbnRyeSBjaGFuZ2VkIHR5cGUs IGNsZWFyIGl0CisgICAgICAgIGlmIGVudHJ5LnR5ICE9IHJlbW90ZS50eSB7CisgICAgICAgICAg ICAqZW50cnkgPSByZW1vdGVfY2FjaGU6OlJlbW90ZU1hcHBpbmc6Om5ldyhyZW1vdGUudHkpOwor ICAgICAgICB9CisKKyAgICAgICAgLy8gT25seSBQVkUgZW50cmllcyBjdXJyZW50bHkgaGF2ZSBh IG5vZGUgY2FjaGUsIHNvIHNraXAgbm9uLVBWRSByZW1vdGVzOgorICAgICAgICBpZiByZW1vdGUu dHkgIT0gUmVtb3RlVHlwZTo6UHZlIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor CisgICAgICAgIC8vIHBydW5lIG5vZGVzIHdoaWNoIHdlcmUgcmVtb3ZlZDoKKyAgICAgICAgZW50 cnkuaG9zdHMucmV0YWluKHxob3N0bmFtZSwgaW5mb3wgeworICAgICAgICAgICAgbGV0IHJldGFp biA9IHJlbW90ZS5ub2Rlcy5pdGVyKCkuYW55KHxub2RlfCBub2RlLmhvc3RuYW1lID09ICpob3N0 bmFtZSk7CisgICAgICAgICAgICBpZiAhcmV0YWluIHsKKyAgICAgICAgICAgICAgICBpZiBsZXQg U29tZShub2RlX25hbWUpID0gaW5mby5ub2RlX25hbWUoKSB7CisgICAgICAgICAgICAgICAgICAg IGVudHJ5Lm5vZGVfdG9faG9zdC5yZW1vdmUobm9kZV9uYW1lKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXRhaW4KKyAgICAgICAgfSk7CisKKyAgICAg ICAgLy8gbWFrZSBzdXJlIGN1cnJlbnRseSBrbm93biBob3N0bmFtZXMgZXhpc3QgaW4gdGhlIGNh Y2hlIGF0IGxlYXN0IGVtcHR5OgorICAgICAgICBmb3Igbm9kZSBpbiAmcmVtb3RlLm5vZGVzIHsK KyAgICAgICAgICAgIGlmICFlbnRyeS5ob3N0cy5jb250YWluc19rZXkoJm5vZGUuaG9zdG5hbWUp IHsKKyAgICAgICAgICAgICAgICBlbnRyeS5ob3N0cy5pbnNlcnQoCisgICAgICAgICAgICAgICAg ICAgIG5vZGUuaG9zdG5hbWUuY2xvbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2Nh Y2hlOjpIb3N0SW5mbzo6bmV3KG5vZGUuaG9zdG5hbWUuY2xvbmUoKSksCisgICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGFzeW5jIGZuIHF1 ZXJ5X25vZGVfbmFtZXMoY29uZmlnOiBTZWN0aW9uQ29uZmlnRGF0YTxSZW1vdGU+KSB7CisgICAg ICAgIGZvciAoX25hbWUsIHJlbW90ZSkgaW4gJmNvbmZpZyB7CisgICAgICAgICAgICBpZiBsZXQg RXJyKGVycikgPSBTZWxmOjpxdWVyeV9ub2RlX25hbWVzX2Zvcl9yZW1vdGUocmVtb3RlKS5hd2Fp dCB7CisgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoImVycm9yIHVwZGF0aW5nIG5vZGUgbmFt ZSBjYWNoZSAtIHtlcnI6P30iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor ICAgIGFzeW5jIGZuIHF1ZXJ5X25vZGVfbmFtZXNfZm9yX3JlbW90ZShyZW1vdGU6ICZSZW1vdGUp IC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgLy8gT25seSBQVkUgZW50cmllcyBjdXJy ZW50bHkgaGF2ZSBhIG5vZGUgY2FjaGUsIHNvIHNraXAgbm9uLVBWRSByZW1vdGVzOgorICAgICAg ICBpZiByZW1vdGUudHkgIT0gUmVtb3RlVHlwZTo6UHZlIHsKKyAgICAgICAgICAgIHJldHVybiBP aygoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBub3cgYWRkIG5ldyBub2RlcworICAgICAg ICBmb3Igbm9kZSBpbiAmcmVtb3RlLm5vZGVzIHsKKyAgICAgICAgICAgIHRyYWNpbmc6OmRlYnVn ISgicXVlcnlpbmcgcmVtb3RlIHs6P30gbm9kZSB7Oj99IiwgcmVtb3RlLmlkLCBub2RlLmhvc3Ru YW1lKTsKKworICAgICAgICAgICAgLy8gaWYgdGhlIGhvc3QgaXMgbmV3LCB3ZSBuZWVkIHRvIHF1 ZXJ5IGl0cyBuYW1lCisgICAgICAgICAgICBsZXQgcXVlcnlfcmVzdWx0ID0gbWF0Y2ggcXVlcnlf bm9kZV9uYW1lKHJlbW90ZSwgJm5vZGUuaG9zdG5hbWUpLmF3YWl0IHsKKyAgICAgICAgICAgICAg ICBPayhub2RlX25hbWUpID0+IFNvbWUobm9kZV9uYW1lKSwKKyAgICAgICAgICAgICAgICBFcnIo ZXJyKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGxvZzo6ZXJyb3IhKAorICAgICAgICAgICAg ICAgICAgICAgICAgImZhaWxlZCB0byBxdWVyeSBpbmZvIGZvciByZW1vdGUgJ3t9JyBub2RlICd7 fScgLSB7ZXJyOj99IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZS5pZCwKKyAgICAg ICAgICAgICAgICAgICAgICAgIG5vZGUuaG9zdG5hbWUKKyAgICAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgICAgICAgICAgICAgTm9uZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH07CisKKyAgICAgICAgICAgIGxldCBtdXQgY2FjaGUgPSBSZW1vdGVNYXBwaW5nQ2FjaGU6Ondy aXRlKCk/OworICAgICAgICAgICAgaWYgbGV0IFNvbWUoaW5mbykgPSBjYWNoZS5pbmZvX2J5X2hv c3RuYW1lX211dCgmcmVtb3RlLmlkLCAmbm9kZS5ob3N0bmFtZSkgeworICAgICAgICAgICAgICAg IGluZm8ucmVhY2hhYmxlID0gcXVlcnlfcmVzdWx0LmlzX3NvbWUoKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmIGxldCBTb21lKG5vZGVfbmFtZSkgPSBxdWVyeV9yZXN1bHQgeworICAg ICAgICAgICAgICAgIGNhY2hlLnNldF9ub2RlX25hbWUoJnJlbW90ZS5pZCwgJm5vZGUuaG9zdG5h bWUsIFNvbWUobm9kZV9uYW1lKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWNoZS5z YXZlKCk/OworICAgICAgICB9CisKKyAgICAgICAgT2soKCkpCisgICAgfQorfQorCisvLy8gQ2Fs bHMgYC9jbHVzdGVyL3N0YXR1c2AgZGlyZWN0bHkgb24gYSBzcGVjaWZpYyBub2RlIHRvIGZpbmQg aXRzIG5hbWUuCithc3luYyBmbiBxdWVyeV9ub2RlX25hbWUocmVtb3RlOiAmUmVtb3RlLCBob3N0 bmFtZTogJnN0cikgLT4gUmVzdWx0PFN0cmluZywgRXJyb3I+IHsKKyAgICBsZXQgY2xpZW50ID0g c2VydmVyOjpjb25uZWN0aW9uOjptYWtlX3B2ZV9jbGllbnRfd2l0aF9lbmRwb2ludChyZW1vdGUs IFNvbWUoaG9zdG5hbWUpKT87CisgICAgbGV0IG5vZGVfc3RhdHVzX2xpc3QgPSBjbGllbnQuY2x1 c3Rlcl9zdGF0dXMoKS5hd2FpdD87CisgICAgZm9yIG5vZGUgaW4gbm9kZV9zdGF0dXNfbGlzdCB7 CisgICAgICAgIGlmIG5vZGUubG9jYWwgPT0gU29tZSh0cnVlKSB7CisgICAgICAgICAgICByZXR1 cm4gT2sobm9kZS5uYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBiYWlsISgiZmFpbGVkIHRv IGNvbm5lY3QgdG8gbm9kZSB7aG9zdG5hbWV9Iik7Cit9CmRpZmYgLS1naXQgYS9zZXJ2ZXIvc3Jj L2Nvbm5lY3Rpb24ucnMgYi9zZXJ2ZXIvc3JjL2Nvbm5lY3Rpb24ucnMKaW5kZXggYWVlYTA4OS4u MjRlMmU0NCAxMDA2NDQKLS0tIGEvc2VydmVyL3NyYy9jb25uZWN0aW9uLnJzCisrKyBiL3NlcnZl ci9zcmMvY29ubmVjdGlvbi5ycwpAQCAtMjE0LDYgKzIxNCwxOSBAQCBwdWIgdHJhaXQgQ2xpZW50 RmFjdG9yeSB7CiAgICAgICAgIHRhcmdldF9lbmRwb2ludDogT3B0aW9uPCZzdHI+LAogICAgICkg LT4gUmVzdWx0PEFyYzxQdmVDbGllbnQ+LCBFcnJvcj47CiAKKyAgICAvLy8gQ3JlYXRlIGEgbmV3 IEFQSSBjbGllbnQgZm9yIFBWRSByZW1vdGVzLCBidXQgd2l0aCBhIHNwZWNpZmljIGVuZHBvaW50 LgorICAgIC8vLworICAgIC8vLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRo ZSBgbm9kZWAgcGFyYW1ldGVyIGFuZCBmb3J3YXJkcyB0bworICAgIC8vLyBgbWFrZV9wdmVfY2xp ZW50KClgLgorICAgIGZuIG1ha2VfcHZlX2NsaWVudF93aXRoX25vZGUoCisgICAgICAgICZzZWxm LAorICAgICAgICByZW1vdGU6ICZSZW1vdGUsCisgICAgICAgIG5vZGU6ICZzdHIsCisgICAgKSAt PiBSZXN1bHQ8QXJjPFB2ZUNsaWVudD4sIEVycm9yPiB7CisgICAgICAgIGxldCBfID0gbm9kZTsK KyAgICAgICAgc2VsZi5tYWtlX3B2ZV9jbGllbnQocmVtb3RlKQorICAgIH0KKwogICAgIC8vLyBD cmVhdGUgYSBuZXcgQVBJIGNsaWVudCBmb3IgUFZFIHJlbW90ZXMuCiAgICAgLy8vCiAgICAgLy8v IEluIGNhc2UgdGhlIHJlbW90ZSBoYXMgYSB1c2VyIGNvbmZpZ3VyZWQgKGluc3RlYWQgb2YgYW4g QVBJIHRva2VuKSwgaXQgd2lsbCBjb25uZWN0IGFuZCBnZXQKQEAgLTM0Myw2ICszNTYsMjAgQEAg aW1wbCBDbGllbnRGYWN0b3J5IGZvciBEZWZhdWx0Q2xpZW50RmFjdG9yeSB7CiAgICAgICAgIE9r KEFyYzo6bmV3KFB2ZUNsaWVudEltcGwoY2xpZW50KSkpCiAgICAgfQogCisgICAgZm4gbWFrZV9w dmVfY2xpZW50X3dpdGhfbm9kZSgKKyAgICAgICAgJnNlbGYsCisgICAgICAgIHJlbW90ZTogJlJl bW90ZSwKKyAgICAgICAgbm9kZTogJnN0ciwKKyAgICApIC0+IFJlc3VsdDxBcmM8UHZlQ2xpZW50 PiwgRXJyb3I+IHsKKyAgICAgICAgbGV0IGNhY2hlID0gY3JhdGU6OnJlbW90ZV9jYWNoZTo6UmVt b3RlTWFwcGluZ0NhY2hlOjpnZXQoKTsKKyAgICAgICAgbWF0Y2ggY2FjaGUuaW5mb19ieV9ub2Rl X25hbWUoJnJlbW90ZS5pZCwgbm9kZSkgeworICAgICAgICAgICAgU29tZShpbmZvKSBpZiBpbmZv LnJlYWNoYWJsZSA9PiB7CisgICAgICAgICAgICAgICAgc2VsZi5tYWtlX3B2ZV9jbGllbnRfd2l0 aF9lbmRwb2ludChyZW1vdGUsIFNvbWUoJmluZm8uaG9zdG5hbWUpKQorICAgICAgICAgICAgfQor ICAgICAgICAgICAgXyA9PiBzZWxmLm1ha2VfcHZlX2NsaWVudChyZW1vdGUpLAorICAgICAgICB9 CisgICAgfQorCiAgICAgYXN5bmMgZm4gbWFrZV9wdmVfY2xpZW50X2FuZF9sb2dpbigmc2VsZiwg cmVtb3RlOiAmUmVtb3RlKSAtPiBSZXN1bHQ8QXJjPFB2ZUNsaWVudD4sIEVycm9yPiB7CiAgICAg ICAgIGxldCBjbGllbnQgPSBjb25uZWN0X29yX2xvZ2luKHJlbW90ZSwgTm9uZSkuYXdhaXQ/Owog ICAgICAgICBPayhBcmM6Om5ldyhQdmVDbGllbnRJbXBsKGNsaWVudCkpKQpAQCAtMzc3LDYgKzQw NCwxMSBAQCBwdWIgZm4gbWFrZV9wdmVfY2xpZW50X3dpdGhfZW5kcG9pbnQoCiAgICAgaW5zdGFu Y2UoKS5tYWtlX3B2ZV9jbGllbnRfd2l0aF9lbmRwb2ludChyZW1vdGUsIHRhcmdldF9lbmRwb2lu dCkKIH0KIAorLy8vIENyZWF0ZSBhIG5ldyBBUEkgY2xpZW50IGZvciBQVkUgcmVtb3RlcyBhbmQg dHJ5IHRvIG1ha2UgaXQgY29ubmVjdCB0byBhIHNwZWNpZmljICpub2RlKi4KK3B1YiBmbiBtYWtl X3B2ZV9jbGllbnRfd2l0aF9ub2RlKHJlbW90ZTogJlJlbW90ZSwgbm9kZTogJnN0cikgLT4gUmVz dWx0PEFyYzxQdmVDbGllbnQ+LCBFcnJvcj4geworICAgIGluc3RhbmNlKCkubWFrZV9wdmVfY2xp ZW50X3dpdGhfbm9kZShyZW1vdGUsIG5vZGUpCit9CisKIC8vLyBDcmVhdGUgYSBuZXcgQVBJIGNs aWVudCBmb3IgUEJTIHJlbW90ZXMKIHB1YiBmbiBtYWtlX3Bic19jbGllbnQocmVtb3RlOiAmUmVt b3RlKSAtPiBSZXN1bHQ8Qm94PFBic0NsaWVudD4sIEVycm9yPiB7CiAgICAgaW5zdGFuY2UoKS5t YWtlX3Bic19jbGllbnQocmVtb3RlKQpkaWZmIC0tZ2l0IGEvc2VydmVyL3NyYy9saWIucnMgYi9z ZXJ2ZXIvc3JjL2xpYi5ycwppbmRleCAxMmRjOTEyLi5kY2IyNGYwIDEwMDY0NAotLS0gYS9zZXJ2 ZXIvc3JjL2xpYi5ycworKysgYi9zZXJ2ZXIvc3JjL2xpYi5ycwpAQCAtNiw2ICs2LDcgQEAgcHVi IG1vZCBhdXRoOwogcHViIG1vZCBjb250ZXh0OwogcHViIG1vZCBlbnY7CiBwdWIgbW9kIG1ldHJp Y19jb2xsZWN0aW9uOworcHViIG1vZCByZW1vdGVfY2FjaGU7CiBwdWIgbW9kIHJlc291cmNlX2Nh Y2hlOwogcHViIG1vZCB0YXNrX2NhY2hlOwogcHViIG1vZCB0YXNrX3V0aWxzOwpkaWZmIC0tZ2l0 IGEvc2VydmVyL3NyYy9yZW1vdGVfY2FjaGUvbW9kLnJzIGIvc2VydmVyL3NyYy9yZW1vdGVfY2Fj aGUvbW9kLnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZTc5ZjEKLS0t IC9kZXYvbnVsbAorKysgYi9zZXJ2ZXIvc3JjL3JlbW90ZV9jYWNoZS9tb2QucnMKQEAgLTAsMCAr MSwyODUgQEAKKy8vISBUaGlzIGN1cnJlbnRseSBvbmx5IG1hdHRlcnMgZm9yIFBWRSByZW1vdGVz LgorLy8hCisvLyEgUFZFIHJlbW90ZXMgaGF2ZSBtdWx0aXBsZSBub2RlcyB3aGljaCBoYXZlIG5h bWVzIHdlIGNhbm5vdCBuZWNlc3NhcmlseSBpbmZlciBmcm9tIHRoZQorLy8hICJob3N0bmFtZSIg ZmllbGQsIHNpbmNlIHRoYXQgbWlnaHQgYmUgYSBkaWZmZXJlbnQgYWRkcmVzcywgcG90ZW50aWFs bHkgd2l0aCBhIHBvcnQuCisvLyEKKy8vISBXZSBhbHNvIGRvIG5vdCB3YW50IHVzZXJzIHRvIGhh dmUgdG8gbWFpbnRhaW4gdGhlIFBETSBob3N0L25vZGUtbmFtZSBjb21iaW5hdGlvbnMgKGluIGNh c2UgdGhleQorLy8hIHJlbmFtZSBvciByZWluc3RhbGwgbm9kZXMpLiBSZW5hbWluZyB3b3VsZCBi cmVhayB0aGUgUERNIGNvbmZpZywgcmVpbnN0YWxsaW5nIHdvdWxkIGJyZWFrIGVnLiBhCisvLyEg Im1hY2hpbmUtaWQiIGJhc2VkIG1hcHBpbmcuCisvLyEKKy8vISBXZSBhbHNvIGNhbm5vdCByZWx5 IGluIHRoZSBUTFMgZmluZ2VycHJpbnRzLCBiZWNhdXNlIGEgd2hvbGUgY2x1c3RlciBjb3VsZCBw b3RlbnRpYWxseSB1c2UgYQorLy8hIHNpbmdsZSB3aWxkY2FyZCBjZXJ0aWZpY2F0ZS4KKy8vIQor Ly8hIEluc3RlYWQsIHdlIG1haW50YWluIGEgY2FjaGVkIG1hcHBpbmcgb2YgYGFkZHJlc3Mg4oaU IG5hbWVgIGluIGAvdmFyYCwgd2hpY2ggZ2V0cyBwb2xsZWQKKy8vISByZWd1bGFybHkuCisvLyEg Rm9yIFBWRSB3ZSBjYW4gcXVlcnkgYW4gYWRkcmVzcycgYC9jbHVzdGVyL3N0YXR1c2AgYW5kIGxv b2sgZm9yIGFuIGVudHJ5IG1hcmtlZCBhcyBgbG9jYWw6MWAuCisvLyEgTGF0ZXIgdGhpcyBtaWdo dCBiZSBjaGFuZ2VkIHRvIGxvb2tpbmcgZm9yIHRoZSBub2RlIG5hbWUgaW4gdGhlIHJlc3VsdCBv ZgorLy8hIGAvbm9kZXMvbG9jYWxob3N0L3N0YXR1c2AgLSBvbmNlIHRoaXMgaXMgaW1wbGVtZW50 ZWQgYW5kIHJvbGxlZCBvdXQgbG9uZyBlbm91Z2ggaW4gUFZFLgorCit1c2Ugc3RkOjpjb2xsZWN0 aW9uczo6SGFzaE1hcDsKK3VzZSBzdGQ6OnN5bmM6OntBcmMsIE11dGV4fTsKKwordXNlIGFueWhv dzo6e0NvbnRleHQgYXMgXywgRXJyb3J9OwordXNlIHNlcmRlOjp7RGVzZXJpYWxpemUsIFNlcmlh bGl6ZX07CisKK3VzZSBwcm94bW94X3Byb2R1Y3RfY29uZmlnOjpyZXBsYWNlX2NvbmZpZzsKK3Vz ZSBwcm94bW94X3Byb2R1Y3RfY29uZmlnOjp7b3Blbl9hcGlfbG9ja2ZpbGUsIEFwaUxvY2tHdWFy ZH07CisKK3VzZSBwZG1fYXBpX3R5cGVzOjpyZW1vdGVzOjpSZW1vdGVUeXBlOwordXNlIHBkbV9j b25maWc6OkNvbmZpZ1ZlcnNpb25DYWNoZTsKKworY29uc3QgQ0FDSEVfRklMRU5BTUU6ICZzdHIg PSBjb25jYXQhKAorICAgIHBkbV9idWlsZGNmZzo6UERNX0NBQ0hFX0RJUl9NISgpLAorICAgICIv cmVtb3RlLW1hcHBpbmctY2FjaGUuanNvbiIKKyk7CisKK2NvbnN0IExPQ0tfRklMRTogJnN0ciA9 IGNvbmNhdCEoCisgICAgcGRtX2J1aWxkY2ZnOjpQRE1fQ0FDSEVfRElSX00hKCksCisgICAgIi8u cmVtb3RlLW1hcHBpbmctY2FjaGUuanNvbi5sb2NrIgorKTsKKworc3RhdGljIENVUlJFTlRfQ0FD SEU6IE11dGV4PE9wdGlvbjxDYWNoZVN0YXRlPj4gPSBNdXRleDo6bmV3KE5vbmUpOworCisjW2Rl cml2ZShDbG9uZSldCitzdHJ1Y3QgQ2FjaGVTdGF0ZSB7CisgICAgY2FjaGU6IEFyYzxSZW1vdGVN YXBwaW5nQ2FjaGU+LAorICAgIGdlbmVyYXRpb246IHVzaXplLAorfQorCitpbXBsIENhY2hlU3Rh dGUgeworICAgIGZuIGdldCgpIC0+IFNlbGYgeworICAgICAgICBsZXQgbXV0IGNhY2hlID0gQ1VS UkVOVF9DQUNIRS5sb2NrKCkudW53cmFwKCk7CisKKyAgICAgICAgbGV0IHZlcnNpb25fY2FjaGUg PSBDb25maWdWZXJzaW9uQ2FjaGU6Om5ld19sb2dfZXJyb3IoKTsKKworICAgICAgICBpZiBsZXQg U29tZShjYWNoZSkgPSBjYWNoZS5jbG9uZSgpIHsKKyAgICAgICAgICAgIGlmIGxldCBTb21lKHZl cnNpb25fY2FjaGUpID0gdmVyc2lvbl9jYWNoZS5hc19kZXJlZigpIHsKKyAgICAgICAgICAgICAg ICBpZiBjYWNoZS5nZW5lcmF0aW9uID09IHZlcnNpb25fY2FjaGUucmVtb3RlX21hcHBpbmdfY2Fj aGUoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgLy8gb3V0ZGF0ZWQsIGZhbGwgYmFjayB0byByZWxvYWRpbmcK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIG91dGRhdGVkLCBvciB3ZSBmYWlsZWQgdG8g cXVlcnkgdGhlIHZlcnNpb24gY2FjaGUsIGZhbGwgdGhyb3VnaCB0byB0aGUgbG9hZAorICAgICAg ICB9CisKKyAgICAgICAgLy8gd2UgaGF2ZSBubyB2YWxpZCBjYWNoZSB5ZXQ6CisgICAgICAgIGxl dCBnZW5lcmF0aW9uID0gdmVyc2lvbl9jYWNoZS5tYXAofGN8IGMucmVtb3RlX21hcHBpbmdfY2Fj aGUoKSkudW53cmFwX29yKDApOworCisgICAgICAgIGxldCBkYXRhID0gQXJjOjpuZXcoUmVtb3Rl TWFwcGluZ0NhY2hlOjpsb2FkKCkpOworICAgICAgICBsZXQgdGhpcyA9IENhY2hlU3RhdGUgewor ICAgICAgICAgICAgY2FjaGU6IEFyYzo6Y2xvbmUoJmRhdGEpLAorICAgICAgICAgICAgZ2VuZXJh dGlvbiwKKyAgICAgICAgfTsKKyAgICAgICAgKmNhY2hlID0gU29tZSh0aGlzLmNsb25lKCkpOwor ICAgICAgICB0aGlzCisgICAgfQorCisgICAgZm4gdXBkYXRlKGNhY2hlOiBSZW1vdGVNYXBwaW5n Q2FjaGUpIHsKKyAgICAgICAgbGV0IG11dCBjdXJyZW50X2NhY2hlID0gQ1VSUkVOVF9DQUNIRS5s b2NrKCkudW53cmFwKCk7CisgICAgICAgIGxldCBnZW5lcmF0aW9uID0gbWF0Y2ggcGRtX2NvbmZp Zzo6Q29uZmlnVmVyc2lvbkNhY2hlOjpuZXdfbG9nX2Vycm9yKCkgeworICAgICAgICAgICAgU29t ZSh2ZXJzaW9uX2NhY2hlKSA9PiB2ZXJzaW9uX2NhY2hlLmluY3JlYXNlX3JlbW90ZV9tYXBwaW5n X2NhY2hlKCksCisgICAgICAgICAgICBOb25lID0+IDAsCisgICAgICAgIH07CisgICAgICAgICpj dXJyZW50X2NhY2hlID0gU29tZShDYWNoZVN0YXRlIHsKKyAgICAgICAgICAgIGdlbmVyYXRpb24s CisgICAgICAgICAgICBjYWNoZTogQXJjOjpuZXcoY2FjaGUpLAorICAgICAgICB9KTsKKyAgICB9 Cit9CisKK3B1YiBzdHJ1Y3QgV3JpdGVSZW1vdGVNYXBwaW5nQ2FjaGUgeworICAgIHB1YiBkYXRh OiBSZW1vdGVNYXBwaW5nQ2FjaGUsCisgICAgX2xvY2s6IEFwaUxvY2tHdWFyZCwKK30KKworaW1w bCBzdGQ6Om9wczo6RGVyZWYgZm9yIFdyaXRlUmVtb3RlTWFwcGluZ0NhY2hlIHsKKyAgICB0eXBl IFRhcmdldCA9IFJlbW90ZU1hcHBpbmdDYWNoZTsKKworICAgIGZuIGRlcmVmKCZzZWxmKSAtPiAm U2VsZjo6VGFyZ2V0IHsKKyAgICAgICAgJnNlbGYuZGF0YQorICAgIH0KK30KKworaW1wbCBzdGQ6 Om9wczo6RGVyZWZNdXQgZm9yIFdyaXRlUmVtb3RlTWFwcGluZ0NhY2hlIHsKKyAgICBmbiBkZXJl Zl9tdXQoJm11dCBzZWxmKSAtPiAmbXV0IFNlbGY6OlRhcmdldCB7CisgICAgICAgICZtdXQgc2Vs Zi5kYXRhCisgICAgfQorfQorCitpbXBsIFdyaXRlUmVtb3RlTWFwcGluZ0NhY2hlIHsKKyAgICBm biBuZXcobG9jazogQXBpTG9ja0d1YXJkLCBkYXRhOiBSZW1vdGVNYXBwaW5nQ2FjaGUpIC0+IFNl bGYgeworICAgICAgICBTZWxmIHsgX2xvY2s6IGxvY2ssIGRhdGEgfQorICAgIH0KKworICAgIHB1 YiBmbiBzYXZlKHNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgc2VsZi5kYXRh LnNhdmUoKT87CisgICAgICAgIENhY2hlU3RhdGU6OnVwZGF0ZShzZWxmLmRhdGEpOworICAgICAg ICBPaygoKSkKKyAgICB9Cit9CisKKy8vLyBGaWxlIGZvcm1hdCBmb3IgYC92YXIvY2FjaGUvcHJv eG1veC1kYXRhY2VudGVyLW1hbmFnZXIvcmVtb3RlLW1hcHBpbmctY2FjaGUuanNvbmAKKyNbZGVy aXZlKENsb25lLCBEZWZhdWx0LCBEZXNlcmlhbGl6ZSwgU2VyaWFsaXplKV0KK3B1YiBzdHJ1Y3Qg UmVtb3RlTWFwcGluZ0NhY2hlIHsKKyAgICAvLy8gVGhpcyBtYXBzIGEgcmVtb3RlIG5hbWUgdG8g aXRzIG1hcHBpbmcuCisgICAgcHViIHJlbW90ZXM6IEhhc2hNYXA8U3RyaW5nLCBSZW1vdGVNYXBw aW5nPiwKK30KKworaW1wbCBSZW1vdGVNYXBwaW5nQ2FjaGUgeworICAgIC8vLyBHZXQgcmVhZCBv bmx5IGFjY2VzcyB0byB0aGUgY3VycmVudCBjYWNoZS4KKyAgICBwdWIgZm4gZ2V0KCkgLT4gQXJj PFNlbGY+IHsKKyAgICAgICAgQXJjOjpjbG9uZSgmQ2FjaGVTdGF0ZTo6Z2V0KCkuY2FjaGUpCisg ICAgfQorCisgICAgLy8vICpMb2NrKiB0aGUgY2FjaGUgbG9jayBmaWxlIGFuZCBnZXQgbXV0YWJs ZSBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgY29udGVudHMuCisgICAgcHViIGZuIHdyaXRlKCkgLT4g UmVzdWx0PFdyaXRlUmVtb3RlTWFwcGluZ0NhY2hlLCBFcnJvcj4geworICAgICAgICBsZXQgd3Jp dGVfbG9jayA9IG9wZW5fYXBpX2xvY2tmaWxlKExPQ0tfRklMRSwgTm9uZSwgdHJ1ZSk/OworCisg ICAgICAgIE9rKFdyaXRlUmVtb3RlTWFwcGluZ0NhY2hlOjpuZXcoCisgICAgICAgICAgICB3cml0 ZV9sb2NrLAorICAgICAgICAgICAgU2VsZjo6Y2xvbmUoJlNlbGY6OmdldCgpKSwKKyAgICAgICAg KSkKKyAgICB9CisKKyAgICAvLy8gTG9hZCB0aGUgY3VycmVudCByZW1vdGUgbWFwcGluZyBjYWNo ZS4gVGhpcyBhbHdheXMgc3VjY2VlZHMgYW5kIG1heSByZXR1cm4gYW4gZW1wdHkgY2FjaGUuCisg ICAgZm4gbG9hZCgpIC0+IFNlbGYgeworICAgICAgICBmbiBkb19sb2FkKCkgLT4gUmVzdWx0PE9w dGlvbjxSZW1vdGVNYXBwaW5nQ2FjaGU+LCBFcnJvcj4geworICAgICAgICAgICAgT2socHJveG1v eF9zeXM6OmZzOjpmaWxlX3JlYWRfb3B0aW9uYWxfc3RyaW5nKENBQ0hFX0ZJTEVOQU1FKT8KKyAg ICAgICAgICAgICAgICAubWFwKHxjb250ZW50fCBzZXJkZV9qc29uOjpmcm9tX3N0cigmY29udGVu dCkpCisgICAgICAgICAgICAgICAgLnRyYW5zcG9zZSgpPykKKyAgICAgICAgfQorCisgICAgICAg IG1hdGNoIGRvX2xvYWQoKSB7CisgICAgICAgICAgICBPayhTb21lKGRhdGEpKSA9PiByZXR1cm4g ZGF0YSwKKyAgICAgICAgICAgIE9rKE5vbmUpID0+ICgpLAorICAgICAgICAgICAgRXJyKGVycikg PT4geworICAgICAgICAgICAgICAgIGxvZzo6ZXJyb3IhKCJjb3JydXB0ZWQgcmVtb3RlLW1hcHBp bmctY2FjaGUuanNvbiBmaWxlLCBkaXNjYXJkaW5nIC0ge2Vycjo/fSIpOworICAgICAgICAgICAg fQorICAgICAgICB9CisKKyAgICAgICAgU2VsZjo6ZGVmYXVsdCgpCisgICAgfQorCisgICAgLy8v IFNhdmUgdGhlIGN1cnJlbnQgcmVtb3RlIG1hcHBpbmcgY2FjaGUuIFRoaXMgc2hvdWxkIG9ubHkg YmUgZG9uZSBieSB0aGUgcmVtb3RlIG1hcHBpbmcgdGFzay4KKyAgICBmbiBzYXZlKCZzZWxmKSAt PiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIGxldCByYXcgPSBzZXJkZV9qc29uOjp0b192 ZWMoc2VsZikuY29udGV4dCgiZmFpbGVkIHRvIHNlcmlhbGl6ZSByZW1vdGUgbWFwcGluZyBjYWNo ZSIpPzsKKyAgICAgICAgcmVwbGFjZV9jb25maWcoQ0FDSEVfRklMRU5BTUUsICZyYXcpCisgICAg fQorCisgICAgLy8vIEF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIGhvc3QgbmFtZSBmcm9tIGEgbm9k ZSBuYW1lLgorICAgIHB1YiBmbiBub2RlX25hbWVfdG9faG9zdG5hbWUoJnNlbGYsIHJlbW90ZTog JnN0ciwgbm9kZV9uYW1lOiAmc3RyKSAtPiBPcHRpb248JnN0cj4geworICAgICAgICBTb21lKHNl bGYucmVtb3Rlcy5nZXQocmVtb3RlKT8ubm9kZV90b19ob3N0LmdldChub2RlX25hbWUpPykKKyAg ICB9CisKKyAgICAvLy8gQXR0ZW1wdCB0byBnZXQgdGhlIG5vZGUgaW5mbyBmb3IgYSBub2RlIG5h bWUuCisgICAgcHViIGZuIGluZm9fYnlfbm9kZV9uYW1lKCZzZWxmLCByZW1vdGVfbmFtZTogJnN0 ciwgbm9kZV9uYW1lOiAmc3RyKSAtPiBPcHRpb248Jkhvc3RJbmZvPiB7CisgICAgICAgIGxldCBy ZW1vdGUgPSBzZWxmLnJlbW90ZXMuZ2V0KHJlbW90ZV9uYW1lKT87CisgICAgICAgIGxldCBob3N0 ID0gcmVtb3RlLm5vZGVfdG9faG9zdC5nZXQobm9kZV9uYW1lKT87CisgICAgICAgIHJlbW90ZS5o b3N0cy5nZXQoaG9zdCkKKyAgICB9CisKKyAgICBwdWIgZm4gaW5mb19ieV9ub2RlX25hbWVfbXV0 KAorICAgICAgICAmbXV0IHNlbGYsCisgICAgICAgIHJlbW90ZV9uYW1lOiAmc3RyLAorICAgICAg ICBub2RlX25hbWU6ICZzdHIsCisgICAgKSAtPiBPcHRpb248Jm11dCBIb3N0SW5mbz4geworICAg ICAgICBsZXQgcmVtb3RlID0gc2VsZi5yZW1vdGVzLmdldF9tdXQocmVtb3RlX25hbWUpPzsKKyAg ICAgICAgbGV0IGhvc3QgPSByZW1vdGUubm9kZV90b19ob3N0LmdldChub2RlX25hbWUpPzsKKyAg ICAgICAgcmVtb3RlLmhvc3RzLmdldF9tdXQoaG9zdCkKKyAgICB9CisKKyAgICAvLy8gQXR0ZW1w dCB0byByZXRyaWV2ZSB0aGUgbm9kZSBuYW1lIGZyb20gYSBob3N0IG5hbWUuCisgICAgcHViIGZu IGluZm9fYnlfaG9zdG5hbWUoJnNlbGYsIHJlbW90ZTogJnN0ciwgaG9zdG5hbWU6ICZzdHIpIC0+ IE9wdGlvbjwmSG9zdEluZm8+IHsKKyAgICAgICAgc2VsZi5yZW1vdGVzLmdldChyZW1vdGUpPy5o b3N0cy5nZXQoaG9zdG5hbWUpCisgICAgfQorCisgICAgcHViIGZuIGluZm9fYnlfaG9zdG5hbWVf bXV0KCZtdXQgc2VsZiwgcmVtb3RlOiAmc3RyLCBob3N0bmFtZTogJnN0cikgLT4gT3B0aW9uPCZt dXQgSG9zdEluZm8+IHsKKyAgICAgICAgc2VsZi5yZW1vdGVzLmdldF9tdXQocmVtb3RlKT8uaG9z dHMuZ2V0X211dChob3N0bmFtZSkKKyAgICB9CisKKyAgICAvLy8gTWFyayBhIGhvc3QgYXMgcmVh Y2hhYmxlLgorICAgIHB1YiBmbiBtYXJrX2hvc3RfcmVhY2hhYmxlKCZtdXQgc2VsZiwgcmVtb3Rl X25hbWU6ICZzdHIsIGhvc3RuYW1lOiAmc3RyLCByZWFjaGFibGU6IGJvb2wpIHsKKyAgICAgICAg aWYgbGV0IFNvbWUoaW5mbykgPSBzZWxmLmluZm9fYnlfaG9zdG5hbWVfbXV0KHJlbW90ZV9uYW1l LCBob3N0bmFtZSkgeworICAgICAgICAgICAgaW5mby5yZWFjaGFibGUgPSByZWFjaGFibGU7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gTWFyayBhIGhvc3QgYXMgcmVhY2hhYmxlLgorICAg IHB1YiBmbiBtYXJrX25vZGVfcmVhY2hhYmxlKCZtdXQgc2VsZiwgcmVtb3RlX25hbWU6ICZzdHIs IG5vZGVfbmFtZTogJnN0ciwgcmVhY2hhYmxlOiBib29sKSB7CisgICAgICAgIGlmIGxldCBTb21l KGluZm8pID0gc2VsZi5pbmZvX2J5X25vZGVfbmFtZV9tdXQocmVtb3RlX25hbWUsIG5vZGVfbmFt ZSkgeworICAgICAgICAgICAgaW5mby5yZWFjaGFibGUgPSByZWFjaGFibGU7CisgICAgICAgIH0K KyAgICB9CisKKyAgICAvLy8gVXBkYXRlIHRoZSBub2RlIG5hbWUgZm9yIGEgaG9zdCwgaWYgdGhl IHJlbW90ZSBhbmQgaG9zdCBleGlzdCAob3RoZXJ3aXNlIHRoaXMgZG9lcworICAgIC8vLyBub3Ro aW5nKS4KKyAgICBwdWIgZm4gc2V0X25vZGVfbmFtZSgmbXV0IHNlbGYsIHJlbW90ZV9uYW1lOiAm c3RyLCBob3N0bmFtZTogJnN0ciwgbm9kZV9uYW1lOiBPcHRpb248U3RyaW5nPikgeworICAgICAg ICBpZiBsZXQgU29tZShyZW1vdGUpID0gc2VsZi5yZW1vdGVzLmdldF9tdXQocmVtb3RlX25hbWUp IHsKKyAgICAgICAgICAgIHJlbW90ZS5zZXRfbm9kZV9uYW1lKGhvc3RuYW1lLCBub2RlX25hbWUp OworICAgICAgICB9CisgICAgfQorfQorCisvLy8gQW4gZW50cnkgZm9yIGEgcmVtb3RlIGluIGEg W2BSZW1vdGVNYXBwaW5nQ2FjaGVgXS4KKyNbZGVyaXZlKENsb25lLCBEZXNlcmlhbGl6ZSwgU2Vy aWFsaXplKV0KK3B1YiBzdHJ1Y3QgUmVtb3RlTWFwcGluZyB7CisgICAgLy8vIFRoZSByZW1vdGUg dHlwZS4KKyAgICBwdWIgdHk6IFJlbW90ZVR5cGUsCisKKyAgICAvLy8gTWFwcyBhIGBob3N0bmFt ZWAgdG8gaW5mb3JtYXRpb24gd2Uga2VlcCBhYm91dCBpdC4KKyAgICBwdWIgaG9zdHM6IEhhc2hN YXA8U3RyaW5nLCBIb3N0SW5mbz4sCisKKyAgICAvLy8gTWFwcyBhIG5vZGUgbmFtZSB0byBhIGhv c3RuYW1lLCBmb3Igd2hlcmUgd2UgaGF2ZSB0aGF0IGluZm8uCisgICAgcHViIG5vZGVfdG9faG9z dDogSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4sCit9CisKK2ltcGwgUmVtb3RlTWFwcGluZyB7Cisg ICAgcHViIGZuIG5ldyh0eTogUmVtb3RlVHlwZSkgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgewor ICAgICAgICAgICAgdHksCisgICAgICAgICAgICBob3N0czogSGFzaE1hcDo6bmV3KCksCisgICAg ICAgICAgICBub2RlX3RvX2hvc3Q6IEhhc2hNYXA6Om5ldygpLAorICAgICAgICB9CisgICAgfQor CisgICAgLy8vIFVwZGF0ZSB0aGUgbm9kZSBuYW1lIGZvciBhIGhvc3QsIGlmIHRoZSBob3N0IGV4 aXN0cyAob3RoZXJ3aXNlIHRoaXMgZG9lcyBub3RoaW5nKS4KKyAgICBwdWIgZm4gc2V0X25vZGVf bmFtZSgmbXV0IHNlbGYsIGhvc3RuYW1lOiAmc3RyLCBub2RlX25hbWU6IE9wdGlvbjxTdHJpbmc+ KSB7CisgICAgICAgIGlmIGxldCBTb21lKGluZm8pID0gc2VsZi5ob3N0cy5nZXRfbXV0KGhvc3Ru YW1lKSB7CisgICAgICAgICAgICBpZiBsZXQgU29tZShvbGQpID0gaW5mby5ub2RlX25hbWUudGFr ZSgpIHsKKyAgICAgICAgICAgICAgICBzZWxmLm5vZGVfdG9faG9zdC5yZW1vdmUoJm9sZCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpbmZvLm5vZGVfbmFtZSA9IG5vZGVfbmFtZTsKKyAg ICAgICAgICAgIGlmIGxldCBTb21lKG5ldykgPSAmaW5mby5ub2RlX25hbWUgeworICAgICAgICAg ICAgICAgIHNlbGYubm9kZV90b19ob3N0Lmluc2VydChuZXcuY2xvbmUoKSwgaG9zdG5hbWUudG9f c3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisvLy8gQWxs IHRoZSBkYXRhIHdlIGtlZXAgY2FjaGVkIGZvciBub2RlcyBmb3VuZCBpbiBbYFJlbW90ZU1hcHBp bmdgXS4KKyNbZGVyaXZlKENsb25lLCBEZXNlcmlhbGl6ZSwgU2VyaWFsaXplKV0KK3B1YiBzdHJ1 Y3QgSG9zdEluZm8geworICAgIC8vLyBUaGlzIGlzIHRoZSBob3N0IG5hbWUgYXNzb2NpYXRlZCB3 aXRoIHRoaXMgbm9kZS4KKyAgICBwdWIgaG9zdG5hbWU6IFN0cmluZywKKworICAgIC8vLyBUaGlz IGlzIHRoZSBjbHVzdGVyIHNpZGUgbm9kZSBuYW1lLCBpZiB3ZSBrbm93IGl0LgorICAgIG5vZGVf bmFtZTogT3B0aW9uPFN0cmluZz4sCisKKyAgICAvLy8gVGhpcyBtZWFucyB3ZSB3ZXJlIGFibGUg dG8gcmVhY2ggdGhlIG5vZGUuCisgICAgLy8vIFdoZW4gYSBjbGllbnQgZmFpbHMgdG8gY29ubmVj dCBpdCBtYXkgdXBkYXRlIHRoaXMgdG8gbWFyayBpdCBhcyB1bnJlYWNoYWJsZS4KKyAgICBwdWIg cmVhY2hhYmxlOiBib29sLAorfQorCitpbXBsIEhvc3RJbmZvIHsKKyAgICBwdWIgZm4gbmV3KGhv c3RuYW1lOiBTdHJpbmcpIC0+IFNlbGYgeworICAgICAgICBTZWxmIHsKKyAgICAgICAgICAgIGhv c3RuYW1lLAorICAgICAgICAgICAgbm9kZV9uYW1lOiBOb25lLAorICAgICAgICAgICAgcmVhY2hh YmxlOiB0cnVlLAorICAgICAgICB9CisgICAgfQorCisgICAgcHViIGZuIG5vZGVfbmFtZSgmc2Vs ZikgLT4gT3B0aW9uPCZzdHI+IHsKKyAgICAgICAgc2VsZi5ub2RlX25hbWUuYXNfZGVyZWYoKQor ICAgIH0KK30KLS0gCjIuMzkuNQoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpwZG0tZGV2ZWwgbWFpbGluZyBsaXN0CnBkbS1kZXZlbEBsaXN0cy5wcm94 bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5m by9wZG0tZGV2ZWwK