From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Luis R. Rodriguez" Subject: [PATCH v5 08/14] tools/xendomains: move to libexec and use a smaller init helper Date: Tue, 20 May 2014 05:31:29 -0700 Message-ID: <1400589095-3872-9-git-send-email-mcgrof@do-not-panic.com> References: <1400589095-3872-1-git-send-email-mcgrof@do-not-panic.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WmjDR-0006P2-VE for xen-devel@lists.xenproject.org; Tue, 20 May 2014 12:32:22 +0000 Received: by mail-pd0-f170.google.com with SMTP id g10so287304pdj.1 for ; Tue, 20 May 2014 05:32:17 -0700 (PDT) In-Reply-To: <1400589095-3872-1-git-send-email-mcgrof@do-not-panic.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Ian Campbell , Stefano Stabellini , "Luis R. Rodriguez" , =?UTF-8?q?Jan=20R=C4=99korajski?= , Ian Jackson , Jacek Konieczny , M A Young List-Id: xen-devel@lists.xenproject.org RnJvbTogIkx1aXMgUi4gUm9kcmlndWV6IiA8bWNncm9mQHN1c2UuY29tPgoKVGhlIHhlbmRvbWFp bnMgc2NyaXB0IGNhbiBiZSByZXVzZWQgd2l0aCBzeXN0ZW1kIHN5c3RlbXMgYXMgaXQKZG9lcyBu b3QgY29udHJvbCBzZXJ2aWNlcyBvciBzb2NrZXRzIHBlciBzZSwgYnV0IGRvZXMgYSBvbmUgc2hv dApzY3JhcGUgb2YgZG9tVXMgaXQgbmVlZHMgc3RhcnQgYnJpbmcgdXAsIHN0b3AsIHJlbG9hZCBz byB3ZSdyZQpnb2luZyB0byByZXVzZSBpdC4gVGhpcyBtb3ZlcyB0aGUgY29yZSBvZiB0aGUgc2Ny aXB0IHRvIGxpYmV4ZWMKYW5kIGxlYXZlcyBvbmx5IGEgaGVscGVyIG9uIGluaXQuCgpDYzogSWFu IEphY2tzb24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBTdGVmYW5vIFN0YWJlbGxp bmkgPHN0ZWZhbm8uc3RhYmVsbGluaUBldS5jaXRyaXguY29tPgpDYzogSWFuIENhbXBiZWxsIDxp YW4uY2FtcGJlbGxAY2l0cml4LmNvbT4KQ2M6IEphbiBSxJlrb3JhanNraSA8YmFnZ2luc0BwbGQt bGludXgub3JnPgpDYzogTSBBIFlvdW5nIDxtLmEueW91bmdAZHVyaGFtLmFjLnVrPgpDYzogSmFj ZWsgS29uaWVjem55IDxqYWpjdXNAamFqY3VzLm5ldD4KQ2M6IHhlbi1kZXZlbEBsaXN0cy54ZW5w cm9qZWN0Lm9yZwpTaWduZWQtb2ZmLWJ5OiBMdWlzIFIuIFJvZHJpZ3VleiA8bWNncm9mQHN1c2Uu Y29tPgotLS0KIHRvb2xzL2hvdHBsdWcvTGludXgvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAg IDMgKwogdG9vbHMvaG90cGx1Zy9MaW51eC9pbml0LmQveGVuZG9tYWlucyAgICAgICB8IDYzNSAr KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB0b29scy9ob3RwbHVnL0xpbnV4L3tpbml0LmQg PT4gfS94ZW5kb21haW5zIHwgICAwCiAzIGZpbGVzIGNoYW5nZWQsIDUzIGluc2VydGlvbnMoKyks IDU4NSBkZWxldGlvbnMoLSkKIHJld3JpdGUgdG9vbHMvaG90cGx1Zy9MaW51eC9pbml0LmQveGVu ZG9tYWlucyAoOTUlKQogcmVuYW1lIHRvb2xzL2hvdHBsdWcvTGludXgve2luaXQuZCA9PiB9L3hl bmRvbWFpbnMgKDEwMCUpCgpkaWZmIC0tZ2l0IGEvdG9vbHMvaG90cGx1Zy9MaW51eC9NYWtlZmls ZSBiL3Rvb2xzL2hvdHBsdWcvTGludXgvTWFrZWZpbGUKaW5kZXggNDg3NGVjNS4uZDVkZTllNiAx MDA2NDQKLS0tIGEvdG9vbHMvaG90cGx1Zy9MaW51eC9NYWtlZmlsZQorKysgYi90b29scy9ob3Rw bHVnL0xpbnV4L01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQCBpbmNsdWRlICQoWEVOX1JPT1QpL3Rv b2xzL1J1bGVzLm1rCiAKICMgSW5pdCBzY3JpcHRzLgogWEVORE9NQUlOU19JTklURCA9IGluaXQu ZC94ZW5kb21haW5zCitYRU5ET01BSU5TX0xJQkVYRUMgPSB4ZW5kb21haW5zCiBYRU5ET01BSU5T X1NZU0NPTkZJRyA9IGluaXQuZC9zeXNjb25maWcueGVuZG9tYWlucwogCiBYRU5DT01NT05TX0lO SVREID0gaW5pdC5kL3hlbmNvbW1vbnMKQEAgLTQ1LDYgKzQ2LDggQEAgaW5zdGFsbDogYWxsIGlu c3RhbGwtaW5pdGQgaW5zdGFsbC1zY3JpcHRzIGluc3RhbGwtdWRldgogaW5zdGFsbC1pbml0ZDoK IAlbIC1kICQoREVTVERJUikkKElOSVREX0RJUikgXSB8fCAkKElOU1RBTExfRElSKSAkKERFU1RE SVIpJChJTklURF9ESVIpCiAJWyAtZCAkKERFU1RESVIpJChTWVNDT05GSUdfRElSKSBdIHx8ICQo SU5TVEFMTF9ESVIpICQoREVTVERJUikkKFNZU0NPTkZJR19ESVIpCisJWyAtZCAkKERFU1RESVIp JChMSUJFWEVDKSBdIHx8ICQoSU5TVEFMTF9ESVIpICQoREVTVERJUikkKExJQkVYRUMpCisJJChJ TlNUQUxMX1BST0cpICQoWEVORE9NQUlOU19MSUJFWEVDKSAkKERFU1RESVIpJChMSUJFWEVDKQog CSQoSU5TVEFMTF9QUk9HKSAkKFhFTkRPTUFJTlNfSU5JVEQpICQoREVTVERJUikkKElOSVREX0RJ UikKIAkkKElOU1RBTExfREFUQSkgJChYRU5ET01BSU5TX1NZU0NPTkZJRykgJChERVNURElSKSQo U1lTQ09ORklHX0RJUikveGVuZG9tYWlucwogCSQoSU5TVEFMTF9QUk9HKSAkKFhFTkNPTU1PTlNf SU5JVEQpICQoREVTVERJUikkKElOSVREX0RJUikKZGlmZiAtLWdpdCBhL3Rvb2xzL2hvdHBsdWcv TGludXgvaW5pdC5kL3hlbmRvbWFpbnMgYi90b29scy9ob3RwbHVnL0xpbnV4L2luaXQuZC94ZW5k b21haW5zCmRpc3NpbWlsYXJpdHkgaW5kZXggOTUlCmluZGV4IDU4NzU2OGQuLmQwMTIyZmMgMTAw NjQ0Ci0tLSBhL3Rvb2xzL2hvdHBsdWcvTGludXgvaW5pdC5kL3hlbmRvbWFpbnMKKysrIGIvdG9v bHMvaG90cGx1Zy9MaW51eC9pbml0LmQveGVuZG9tYWlucwpAQCAtMSw1ODUgKzEsNTAgQEAKLSMh L2Jpbi9iYXNoCi0jCi0jIC9ldGMvaW5pdC5kL3hlbmRvbWFpbnMKLSMgU3RhcnQgLyBzdG9wIGRv bWFpbnMgYXV0b21hdGljYWxseSB3aGVuIGRvbWFpbiAwIGJvb3RzIC8gc2h1dHMgZG93bi4KLSMK LSMgY2hrY29uZmlnOiAzNDUgOTkgMDAKLSMgZGVzY3JpcHRpb246IFN0YXJ0IC8gc3RvcCBYZW4g ZG9tYWlucy4KLSMKLSMgVGhpcyBzY3JpcHQgb2ZmZXJzIGZhaXJseSBiYXNpYyBmdW5jdGlvbmFs aXR5LiAgSXQgc2hvdWxkIHdvcmsgb24gUmVkaGF0Ci0jIGJ1dCBhbHNvIG9uIExTQi1jb21wbGlh bnQgU3VTRSByZWxlYXNlcyBhbmQgb24gRGViaWFuIHdpdGggdGhlIExTQiBwYWNrYWdlCi0jIGlu c3RhbGxlZC4gIChMU0IgaXMgdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UpCi0jCi0jIEJhc2VkIG9u IHRoZSBleGFtcGxlIGluIHRoZSAiRGVzaWduaW5nIEhpZ2ggUXVhbGl0eSBJbnRlZ3JhdGVkIExp bnV4Ci0jIEFwcGxpY2F0aW9ucyBIT1dUTyIgYnkgQXZpIEFsa2FsYXkKLSMgPGh0dHA6Ly93d3cu dGxkcC5vcmcvSE9XVE8vSGlnaFF1YWxpdHktQXBwcy1IT1dUTy8+Ci0jCi0jIyMgQkVHSU4gSU5J VCBJTkZPCi0jIFByb3ZpZGVzOiAgICAgICAgICB4ZW5kb21haW5zCi0jIFJlcXVpcmVkLVN0YXJ0 OiAgICAkc3lzbG9nICRyZW1vdGVfZnMgeGVuc3RvcmVkIHhlbmNvbnNvbGVkCi0jIFNob3VsZC1T dGFydDogICAgICB4ZW5kCi0jIFJlcXVpcmVkLVN0b3A6ICAgICAkc3lzbG9nICRyZW1vdGVfZnMg eGVuc3RvcmVkIHhlbmNvbnNvbGVkCi0jIFNob3VsZC1TdG9wOiAgICAgICB4ZW5kCi0jIERlZmF1 bHQtU3RhcnQ6ICAgICAyIDMgNQotIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKLSMgU2hvcnQt RGVzY3JpcHRpb246IFN0YXJ0L3N0b3Agc2Vjb25kYXJ5IHhlbiBkb21haW5zCi0jIERlc2NyaXB0 aW9uOiAgICAgICBTdGFydCAvIHN0b3AgZG9tYWlucyBhdXRvbWF0aWNhbGx5IHdoZW4gZG9tYWlu IDAKLSMgICAgICAgICAgICAgICAgICAgIGJvb3RzIC8gc2h1dHMgZG93bi4KLSMjIyBFTkQgSU5J VCBJTkZPCi0KLS4gL2V0Yy94ZW4vc2NyaXB0cy9ob3RwbHVncGF0aC5zaAotCi1DTUQ9JHtTQklO RElSfS94bAotSEVBRENPTVA9IlhlbiBzYXZlZCBkb21haW4iCi0kQ01EIGxpc3QgJj4gL2Rldi9u dWxsCi1pZiB0ZXN0ICQ/IC1uZSAwCi10aGVuCi0JQ01EPSR7U0JJTkRJUn0veG0KLQlIRUFEQ09N UD0iTGludXhHdWVzdFJlY29yZCIKLWZpCi0KLSRDTUQgbGlzdCAmPiAvZGV2L251bGwKLWlmIHRl c3QgJD8gLW5lIDAKLXRoZW4KLQlleGl0IDA7Ci1maQotCi0jIENvcnJlY3QgZXhpdCBjb2RlIHdv dWxkIHByb2JhYmx5IGJlIDUsIGJ1dCBpdCdzIGVub3VnaAotIyBpZiB4ZW5kIGNvbXBsYWlucyBp ZiB3ZSdyZSBub3QgcnVubmluZyBhcyBwcml2aWxlZ2VkIGRvbWFpbgotaWYgISBbIC1lIC9wcm9j L3hlbi9wcml2Y21kIF07IHRoZW4KLQlleGl0IDAKLWZpCi0KLSMgU2VlIGRvY3MvbWlzYy9kaXN0 cm9fbWFwcGluZy50eHQKLWlmIFsgLWQgL3Zhci9sb2NrL3N1YnN5cyBdOyB0aGVuCi0JTE9DS0ZJ TEU9L3Zhci9sb2NrL3N1YnN5cy94ZW5kb21haW5zCi1lbHNlCi0JTE9DS0ZJTEU9L3Zhci9sb2Nr L3hlbmRvbWFpbnMKLWZpCi0KLWlmIFsgLWQgL2V0Yy9zeXNjb25maWcgXTsgdGhlbgotCVhFTkRP TV9DT05GSUc9L2V0Yy9zeXNjb25maWcveGVuZG9tYWlucwotZWxzZQotCVhFTkRPTV9DT05GSUc9 L2V0Yy9kZWZhdWx0L3hlbmRvbWFpbnMKLWZpCi0KLXRlc3QgLXIgJFhFTkRPTV9DT05GSUcgfHwg eyBlY2hvICIkWEVORE9NX0NPTkZJRyBub3QgZXhpc3RpbmciOwotCWlmIFsgIiQxIiA9ICJzdG9w IiBdOyB0aGVuIGV4aXQgMDsKLQllbHNlIGV4aXQgNjsgZmk7IH0KLQotLiAkWEVORE9NX0NPTkZJ RwotCi0jIFVzZSB0aGUgU1VTRSByY18gaW5pdCBzY3JpcHQgZnVuY3Rpb25zOwotIyBlbXVsYXRl IHRoZW0gb24gTFNCLCBSSCBhbmQgb3RoZXIgc3lzdGVtcwotaWYgdGVzdCAtZSAvZXRjL3JjLnN0 YXR1czsgdGhlbgotICAgICMgU1VTRSByYyBzY3JpcHQgbGlicmFyeQotICAgIC4gL2V0Yy9yYy5z dGF0dXMKLWVsc2UKLSAgICBfY21kPSQxCi0gICAgZGVjbGFyZSAtYSBfU01TRwotICAgIGlmIHRl c3QgIiR7X2NtZH0iID0gInN0YXR1cyI7IHRoZW4KLQlfU01TRz0ocnVubmluZyBkZWFkIGRlYWQg dW51c2VkIHVua25vd24pCi0JX1JDX1VOVVNFRD0zCi0gICAgZWxzZQotCV9TTVNHPShkb25lIGZh aWxlZCBmYWlsZWQgbWlzc2VkIGZhaWxlZCBza2lwcGVkIHVudXNlZCBmYWlsZWQgZmFpbGVkKQot CV9SQ19VTlVTRUQ9NgotICAgIGZpCi0gICAgaWYgdGVzdCAtZSAvZXRjL2luaXQuZC9mdW5jdGlv bnM7IHRoZW4KLQkjIFJFREhBVAotCS4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCi0JZWNob19yYygp Ci0JewotCSAgICAjZWNobyAtbiAiICBbJHtfU01TR1ske19SQ19SVn1dfV0gIgotCSAgICBpZiB0 ZXN0ICR7X1JDX1JWfSA9IDA7IHRoZW4KLQkJc3VjY2VzcyAiICBbJHtfU01TR1ske19SQ19SVn1d fV0gIgotCSAgICBlbHNlCi0JCWZhaWx1cmUgIiAgWyR7X1NNU0dbJHtfUkNfUlZ9XX1dICIKLQkg ICAgZmkKLQl9Ci0gICAgZWxpZiB0ZXN0IC1lIC9saWIvbHNiL2luaXQtZnVuY3Rpb25zOyB0aGVu Ci0JIyBMU0IKLSAgICAJLiAvbGliL2xzYi9pbml0LWZ1bmN0aW9ucwotICAgICAgICBpZiBhbGlh cyBsb2dfc3VjY2Vzc19tc2cgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgotCSAgZWNob19y YygpCi0JICB7Ci0JICAgICAgIGVjaG8gIiAgWyR7X1NNU0dbJHtfUkNfUlZ9XX1dICIKLQkgIH0K LSAgICAgICAgZWxzZQotCSAgZWNob19yYygpCi0JICB7Ci0JICAgIGlmIHRlc3QgJHtfUkNfUlZ9 ID0gMDsgdGhlbgotCQlsb2dfc3VjY2Vzc19tc2cgIiAgWyR7X1NNU0dbJHtfUkNfUlZ9XX1dICIK LQkgICAgZWxzZQotCQlsb2dfZmFpbHVyZV9tc2cgIiAgWyR7X1NNU0dbJHtfUkNfUlZ9XX1dICIK LQkgICAgZmkKLQkgIH0KLSAgICAgICAgZmkKLSAgICBlbHNlCi0JIyBlbXVsYXRlIGl0Ci0JZWNo b19yYygpCi0JewotCSAgICBlY2hvICIgIFske19TTVNHWyR7X1JDX1JWfV19XSAiCi0JfQotICAg IGZpCi0gICAgcmNfcmVzZXQoKSB7IF9SQ19SVj0wOyB9Ci0gICAgcmNfZmFpbGVkKCkKLSAgICB7 Ci0JaWYgdGVzdCAteiAiJDEiOyB0aGVuCi0JICAgIF9SQ19SVj0xOwotCWVsaWYgdGVzdCAiJDEi ICE9ICIwIjsgdGhlbgotCSAgICBfUkNfUlY9JDE7Ci0JZmkKLQlyZXR1cm4gJHtfUkNfUlZ9Ci0g ICAgfQotICAgIHJjX2NoZWNrKCkKLSAgICB7Ci0JcmV0dXJuIHJjX2ZhaWxlZCAkPwotICAgIH0K LSAgICByY19zdGF0dXMoKQotICAgIHsKLQlyY19mYWlsZWQgJD8KLQlpZiB0ZXN0ICIkMSIgPSAi LXIiOyB0aGVuIF9SQ19SVj0wOyBzaGlmdDsgZmkKLQlpZiB0ZXN0ICIkMSIgPSAiLXMiOyB0aGVu IHJjX2ZhaWxlZCA1OyBlY2hvX3JjOyByY19mYWlsZWQgMzsgc2hpZnQ7IGZpCi0JaWYgdGVzdCAi JDEiID0gIi11IjsgdGhlbiByY19mYWlsZWQgJHtfUkNfVU5VU0VEfTsgZWNob19yYzsgcmNfZmFp bGVkIDM7IHNoaWZ0OyBmaQotCWlmIHRlc3QgIiQxIiA9ICItdiI7IHRoZW4gZWNob19yYzsgc2hp ZnQ7IGZpCi0JaWYgdGVzdCAiJDEiID0gIi1yIjsgdGhlbiBfUkNfUlY9MDsgc2hpZnQ7IGZpCi0J cmV0dXJuICR7X1JDX1JWfQotICAgIH0KLSAgICByY19leGl0KCkgeyBleGl0ICR7X1JDX1JWfTsg fQotICAgIHJjX2FjdGl2ZSgpCi0gICAgewotCWlmIHRlc3QgLXogIiRSVU5MRVZFTCI7IHRoZW4g cmVhZCBSVU5MRVZFTCBSRVNUIDwgPCgvc2Jpbi9ydW5sZXZlbCk7IGZpCi0JaWYgdGVzdCAtZSAv ZXRjL2luaXQuZC9TWzAtOV1bMC05XSR7MX07IHRoZW4gcmV0dXJuIDA7IGZpCi0JcmV0dXJuIDEK LSAgICB9Ci1maQotCi1pZiAhIHdoaWNoIHVzbGVlcCA+Ji9kZXYvbnVsbAotdGhlbgotICB1c2xl ZXAoKQotICB7Ci0gICAgaWYgWyAtbiAiJDEiIF0KLSAgICB0aGVuCi0gICAgICBzbGVlcCAkKCgg JDEgLyAxMDAwMDAwICkpCi0gICAgZmkKLSAgfQotZmkKLQotIyBSZXNldCBzdGF0dXMgb2YgdGhp cyBzZXJ2aWNlCi1yY19yZXNldAotCi0jIwotIyBSZXR1cm5zIDAgKHN1Y2Nlc3MpIGlmIHRoZSBn aXZlbiBwYXJhbWV0ZXIgbmFtZXMgYSBkaXJlY3RvcnksIGFuZCB0aGF0Ci0jIGRpcmVjdG9yeSBp cyBub3QgZW1wdHkuCi0jCi1jb250YWluc19zb21ldGhpbmcoKQotewotICBpZiBbIC1kICIkMSIg XSAmJiBbIGAvYmluL2xzICQxIHwgd2MgLWxgIC1ndCAwIF0KLSAgdGhlbgotICAgIHJldHVybiAw Ci0gIGVsc2UKLSAgICByZXR1cm4gMQotICBmaQotfQotCi0jIHJlYWQgbmFtZSBmcm9tIHhlbiBj b25maWcgZmlsZQotcmRuYW1lKCkKLXsKLSAgICBOTT0kKCRDTUQgY3JlYXRlIC0tcXVpZXQgLS1k cnlydW4gLS1kZWZjb25maWcgIiQxIiB8Ci0gICAgICAgICBzZWQgLW4gJ3MvXi4qKG5hbWUgXCgu KlwpKSQvXDEvcDtzL14uKiJuYW1lIjogIlwoLipcKSIsJC9cMS9wJykKLX0KLQotcmRuYW1lcygp Ci17Ci0gICAgTkFNRVM9Ci0gICAgaWYgISBjb250YWluc19zb21ldGhpbmcgIiRYRU5ET01BSU5T X0FVVE8iCi0gICAgdGhlbgotCXJldHVybgotICAgIGZpCi0gICAgZm9yIGRvbSBpbiAkWEVORE9N QUlOU19BVVRPLyo7IGRvCi0JcmRuYW1lICRkb20KLQlpZiB0ZXN0IC16ICROQU1FUzsgdGhlbgot CSAgICBOQU1FUz0kTk07Ci0JZWxzZQotCSAgICBOQU1FUz0iJE5BTUVTfCROTSIKLQlmaQotICAg IGRvbmUKLX0KLQotTElTVF9HUkVQPScoZG9tYWluXHwoZG9taWRcfChuYW1lXHxeICAgIHskXHwi bmFtZSI6XHwiZG9taWQiOicKLXBhcnNlbG4oKQotewotICAgIGlmIFtbICIkMSIgPX4gJyhkb21h aW4nIF1dIHx8IFtbICIkMSIgPSAieyIgXV07IHRoZW4KLSAgICAgICAgbmFtZT07aWQ9Ci0gICAg ZWxpZiBbWyAiJDEiID1+ICcobmFtZScgXV07IHRoZW4KLSAgICAgICAgbmFtZT0kKGVjaG8gJDEg fCBzZWQgLWUgJ3MvXi4qKG5hbWUgXCguKlwpKSQvXDEvJykKLSAgICBlbGlmIFtbICIkMSIgPX4g Jyhkb21pZCcgXV07IHRoZW4KLSAgICAgICAgaWQ9JChlY2hvICQxIHwgc2VkIC1lICdzL14uKihk b21pZCBcKC4qXCkpJC9cMS8nKQotICAgIGVsaWYgW1sgIiQxIiA9fiAnIm5hbWUiOicgXV07IHRo ZW4KLSAgICAgICAgbmFtZT0kKGVjaG8gJDEgfCBzZWQgLWUgJ3MvXi4qIm5hbWUiOiAiXCguKlwp IiwkL1wxLycpCi0gICAgZWxpZiBbWyAiJDEiID1+ICciZG9taWQiOicgXV07IHRoZW4KLSAgICAg ICAgaWQ9JChlY2hvICQxIHwgc2VkIC1lICdzL14uKiJkb21pZCI6IFwoLipcKSwkL1wxLycpCi0g ICAgZmkKLQotICAgIFsgLW4gIiRuYW1lIiAtYSAtbiAiJGlkIiBdICYmIHJldHVybiAwIHx8IHJl dHVybiAxCi19Ci0KLWlzX3J1bm5pbmcoKQotewotICAgIHJkbmFtZSAkMQotICAgIFJDPTEKLSAg ICBuYW1lPTtpZD0KLSAgICB3aGlsZSByZWFkIExOOyBkbwotCXBhcnNlbG4gIiRMTiIgfHwgY29u dGludWUKLQlpZiB0ZXN0ICRpZCA9IDA7IHRoZW4gY29udGludWU7IGZpCi0JY2FzZSAkbmFtZSBp bgotCSAgICAoJE5NKQotCQlSQz0wCi0JCTs7Ci0JZXNhYwotICAgIGRvbmUgPCA8KCRDTUQgbGlz dCAtbCB8IGdyZXAgIiRMSVNUX0dSRVAiKQotICAgIHJldHVybiAkUkMKLX0KLQotc3RhcnQoKQot ewotICAgIGlmIFsgLWYgJExPQ0tGSUxFIF07IHRoZW4KLQllY2hvIC1lICJ4ZW5kb21haW5zIGFs cmVhZHkgcnVubmluZyAobG9ja2ZpbGUgZXhpc3RzKSIKLQlyZXR1cm47Ci0gICAgZmkKLQotICAg IHNhdmVkX2RvbWFpbnM9IiAiCi0gICAgaWYgWyAiJFhFTkRPTUFJTlNfUkVTVE9SRSIgPSAidHJ1 ZSIgXSAmJgotICAgICAgIGNvbnRhaW5zX3NvbWV0aGluZyAiJFhFTkRPTUFJTlNfU0FWRSIKLSAg ICB0aGVuCi0JbWtkaXIgLXAgJChkaXJuYW1lICIkTE9DS0ZJTEUiKQotCXRvdWNoICRMT0NLRklM RQotCWVjaG8gLW4gIlJlc3RvcmluZyBYZW4gZG9tYWluczoiCi0Jc2F2ZWRfZG9tYWlucz1gbHMg JFhFTkRPTUFJTlNfU0FWRWAKLSAgICAgICAgZm9yIGRvbSBpbiAkWEVORE9NQUlOU19TQVZFLyo7 IGRvCi0gICAgICAgICAgICBpZiBbIC1mICRkb20gXSA7IHRoZW4KLSAgICAgICAgICAgICAgICBI RUFERVI9YGhlYWQgLWMgMTYgJGRvbSB8IGhlYWQgLW4gMSAyPiAvZGV2L251bGxgCi0gICAgICAg ICAgICAgICAgaWYgWyAiJEhFQURFUiIgPSAiJEhFQURDT01QIiBdOyB0aGVuCi0gICAgICAgICAg ICAgICAgICAgIGVjaG8gLW4gIiAke2RvbSMjKi99IgotICAgICAgICAgICAgICAgICAgICBYTVI9 YCRDTUQgcmVzdG9yZSAkZG9tIDI+JjEgMT4vZGV2L251bGxgCi0gICAgICAgICAgICAgICAgICAg ICMkQ01EIHJlc3RvcmUgJGRvbQotICAgICAgICAgICAgICAgICAgICBpZiBbICQ/IC1uZSAwIF07 IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gLWUgIlxuQW4gZXJyb3Igb2NjdXJy ZWQgd2hpbGUgcmVzdG9yaW5nIGRvbWFpbiAke2RvbSMjKi99OlxuJFhNUiIKLSAgICAgICAgICAg ICAgICAgICAgICAgIHJjX2ZhaWxlZCAkPwotICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAt ZSAnIScKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg IyBtdiAkZG9tICR7ZG9tJS8qfS8uJHtkb20jIyovfQotICAgICAgICAgICAgICAgICAgICAgICAg cm0gJGRvbQotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGZpCi0gICAg ICAgICAgICBmaQotICAgICAgICBkb25lCi0JZWNobyAtZQotICAgIGZpCi0KLSAgICBpZiBjb250 YWluc19zb21ldGhpbmcgIiRYRU5ET01BSU5TX0FVVE8iCi0gICAgdGhlbgotCXRvdWNoICRMT0NL RklMRQotCWVjaG8gLW4gIlN0YXJ0aW5nIGF1dG8gWGVuIGRvbWFpbnM6IgotCSMgV2UgZXhwZWN0 IGNvbmZpZyBzY3JpcHRzIGZvciBhdXRvIHN0YXJ0aW5nIGRvbWFpbnMgdG8gYmUgaW4KLQkjIFhF TkRPTUFJTlNfQVVUTyAtIHRoZXkgY291bGQganVzdCBiZSBzeW1saW5rcyB0byBmaWxlcyBlbHNl d2hlcmUKLQotCSMgQ3JlYXRlIGFsbCBkb21haW5zIHdpdGggY29uZmlnIGZpbGVzIGluIFhFTkRP TUFJTlNfQVVUTy4KLQkjIFRPRE86IFdlIHNob3VsZCByZWNvcmQgd2hpY2ggZG9tYWluIG5hbWUg YmVsb25ncwotCSMgc28gd2UgaGF2ZSB0aGUgb3B0aW9uIHRvIHNlbGVjdGl2ZWx5IHNodXQgZG93 biAvIG1pZ3JhdGUgbGF0ZXIKLQkjIElmIGEgZG9tYWluIHN0YXRlZmlsZSBmcm9tICRYRU5ET01B SU5TX1NBVkUgbWF0Y2hlcyBhIGRvbWFpbiBuYW1lCi0JIyBpbiAkWEVORE9NQUlOU19BVVRPLCBk byBub3QgdHJ5IHRvIHN0YXJ0IHRoYXQgZG9tYWluOyBpZiBpdCBkaWRuJ3QKLQkjIHJlc3RvcmUg Y29ycmVjdGx5IGl0IHJlcXVpcmVzIGFkbWluaXN0cmF0aXZlIGF0dGVudGlvbi4KLQlmb3IgZG9t IGluICRYRU5ET01BSU5TX0FVVE8vKjsgZG8KLQkgICAgZWNobyAtbiAiICR7ZG9tIyMqL30iCi0J ICAgIHNob3J0ZG9tPSQoZWNobyAkZG9tIHwgc2VkIC1uICdzL14uKlwvXCguKlwpJC9cMS9wJykK LQkgICAgZWNobyAkc2F2ZWRfZG9tYWlucyB8IGdyZXAgLXcgJHNob3J0ZG9tID4gL2Rldi9udWxs Ci0JICAgIGlmIFsgJD8gLWVxIDAgXSB8fCBpc19ydW5uaW5nICRkb207IHRoZW4KLQkJZWNobyAt biAiKHNraXApIgotCSAgICBlbHNlCi0JCVhNQz1gJENNRCBjcmVhdGUgLS1xdWlldCAtLWRlZmNv bmZpZyAkZG9tYAotCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KLQkJICAgIGVjaG8gLWUgIlxuQW4g ZXJyb3Igb2NjdXJyZWQgd2hpbGUgY3JlYXRpbmcgZG9tYWluICR7ZG9tIyMqL306ICRYTUNcbiIK LQkJICAgIHJjX2ZhaWxlZCAkPwotCQkgICAgZWNobyAtZSAnIScKLQkJZWxzZQotCQkgICAgdXNs ZWVwICRYRU5ET01BSU5TX0NSRUFURV9VU0xFRVAKLQkJZmkKLQkgICAgZmkKLQlkb25lCi0gICAg ZmkKLX0KLQotYWxsX3pvbWJpZXMoKQotewotICAgIG5hbWU9O2lkPQotICAgIHdoaWxlIHJlYWQg TE47IGRvCi0JcGFyc2VsbiAiJExOIiB8fCBjb250aW51ZQotCWlmIHRlc3QgJGlkID0gMDsgdGhl biBjb250aW51ZTsgZmkKLQlpZiB0ZXN0ICIkc3RhdGUiICE9ICItYi0tLWQiIC1hICIkc3RhdGUi ICE9ICItLS0tLWQiOyB0aGVuCi0JICAgIHJldHVybiAxOwotCWZpCi0gICAgZG9uZSA8IDwoJENN RCBsaXN0IC1sIHwgZ3JlcCAiJExJU1RfR1JFUCIpCi0gICAgcmV0dXJuIDAKLX0KLQotIyBXYWl0 IGZvciBtYXggJFhFTkRPTUFJTlNfU1RPUF9NQVhXQUlUIGZvciAkQ01EICQxIHRvIGZpbmlzaDsK LSMgaWYgaXQgaGFzIG5vdCBleGl0ZWQgYnkgdGhhdCB0aW1lIGtpbGwgaXQsIHNvIHRoZSBpbml0 IHNjcmlwdCB3aWxsCi0jIHN1Y2NlZWQgd2l0aGluIGEgZmluaXRlIGFtb3VudCBvZiB0aW1lOyBp ZiAkMiBpcyBub25udWxsLCBpdCB3aWxsCi0jIGtpbGwgdGhlIGNvbW1hbmQgYXMgd2VsbCBhcyBz b29uIGFzIG5vIGRvbWFpbiAoZXhjZXB0IGZvciB6b21iaWVzKQotIyBhcmUgbGVmdCAodXNlZCBm b3Igc2h1dGRvd24gLS1hbGwpLiBUaGlyZCBwYXJhbWV0ZXIsIGlmIGFueSwgc3VwcHJlc3Nlcwot IyBvdXRwdXQgb2YgZG90cyBwZXIgd29ya2luZyBzdGF0ZSAoZm9ybWF0dGluZyBpc3N1ZXMpCi13 YXRjaGRvZ194ZW5jbWQoKQotewotICAgIGlmIHRlc3QgLXogIiRYRU5ET01BSU5TX1NUT1BfTUFY V0FJVCIgLW8gIiRYRU5ET01BSU5TX1NUT1BfTUFYV0FJVCIgPSAiMCI7IHRoZW4KLQlleGl0Ci0g ICAgZmkKLQotICAgIHVzbGVlcCAyMDAwMAotICAgIGZvciBubyBpbiBgc2VxIDAgJFhFTkRPTUFJ TlNfU1RPUF9NQVhXQUlUYDsgZG8KLQkjIGV4aXQgaWYgJENNRCBzYXZlL21pZ3JhdGUvc2h1dGRv d24gaXMgZmluaXNoZWQKLQlQU0FYPWBwcyBheGx3IHwgZ3JlcCAiJENNRCAkMSIgfCBncmVwIC12 IGdyZXBgCi0JaWYgdGVzdCAteiAiJFBTQVgiOyB0aGVuIGV4aXQ7IGZpCi0JaWYgISB0ZXN0IC1u ICIkMyI7IHRoZW4gZWNobyAtbiAnLic7IGZpCi0Jc2xlZXAgMQotCSMgZ28gdG8ga2lsbCBpbW1l ZGlhdGVseSBpZiB0aGVyZSdzIG9ubHkgem9tYmllcyBsZWZ0Ci0JaWYgYWxsX3pvbWJpZXMgJiYg dGVzdCAtbiAiJDIiOyB0aGVuIGJyZWFrOyBmaQotICAgIGRvbmUKLSAgICBzbGVlcCAxCi0gICAg cmVhZCBQU0YgUFNVSUQgUFNQSUQgUFNQUElEIDwgPChlY2hvICIkUFNBWCIpCi0gICAgIyBraWxs ICRDTUQgJDEKLSAgICBraWxsICRQU1BJRCA+L2Rldi9udWxsIDI+JjEKLQotICAgIGVjaG8gLWUg LgotfQotCi1zdG9wKCkKLXsKLSAgICBleGVjIDM+JjIgMj4gL2Rldi9udWxsCi0KLSAgICAjIENv bGxlY3QgbGlzdCBvZiBkb21haW5zIHRvIHNodXQgZG93bgotICAgIGlmIHRlc3QgIiRYRU5ET01B SU5TX0FVVE9fT05MWSIgPSAidHJ1ZSI7IHRoZW4KLQlyZG5hbWVzCi0gICAgZmkKLSAgICBlY2hv IC1uICJTaHV0dGluZyBkb3duIFhlbiBkb21haW5zOiIKLSAgICBuYW1lPTtpZD0KLSAgICB3aGls ZSByZWFkIExOOyBkbwotCXBhcnNlbG4gIiRMTiIgfHwgY29udGludWUKLQlpZiB0ZXN0ICRpZCA9 IDA7IHRoZW4gY29udGludWU7IGZpCi0JZWNobyAtbiAiICRuYW1lIgotCWlmIHRlc3QgIiRYRU5E T01BSU5TX0FVVE9fT05MWSIgPSAidHJ1ZSI7IHRoZW4KLQkgICAgZXZhbCAiCi0JICAgIGNhc2Ug XCJcJG5hbWVcIiBpbgotCQkoJE5BTUVTKQotCQkgICAgIyBub3RoaW5nCi0JCSAgICA7OwotCQko KikKLQkJICAgIGVjaG8gLWUgJyhza2lwKScKLQkJICAgIGNvbnRpbnVlCi0JCSAgICA7OwotCSAg ICBlc2FjCi0JICAgICIKLQlmaQotCSMgWEVORE9NQUlOU19TWVNSUSBjaG91bGQgYmUgc29tZXRo aW5nIGxpa2UganVzdCAicyIKLQkjIG9yICJzIGUgaSB1IiBvciBldmVuICJzIGUgcyBpIHUgbyIK LQkjIGZvciB0aGUgbGF0dGVyLCB5b3Ugc2hvdWxkIHNldCBYRU5ET01BSU5TX1VTTEVFUCB0byAx MjAwMDAwIG9yIHNvCi0JaWYgdGVzdCAtbiAiJFhFTkRPTUFJTlNfU1lTUlEiOyB0aGVuCi0JICAg IGZvciBzeXNycSBpbiAkWEVORE9NQUlOU19TWVNSUTsgZG8KLQkJZWNobyAtbiAiKFNSLSRzeXNy cSkiCi0JCVhNUj1gJENNRCBzeXNycSAkaWQgJHN5c3JxIDI+JjEgMT4vZGV2L251bGxgCi0JCWlm IHRlc3QgJD8gLW5lIDA7IHRoZW4KLQkJICAgIGVjaG8gLWUgIlxuQW4gZXJyb3Igb2NjdXJyZWQg d2hpbGUgZG9pbmcgc3lzcnEgb24gZG9tYWluOlxuJFhNUlxuIgotCQkgICAgcmNfZmFpbGVkICQ/ Ci0JCSAgICBlY2hvIC1uICchJwotCQlmaQotCQkjIHVzbGVlcCBqdXN0IGlnbm9yZXMgZW1wdHkg YXJnCi0JCXVzbGVlcCAkWEVORE9NQUlOU19VU0xFRVAKLQkgICAgZG9uZQotCWZpCi0JaWYgdGVz dCAiJHN0YXRlIiA9ICItYi0tLWQiIC1vICIkc3RhdGUiID0gIi0tLS0tZCI7IHRoZW4KLQkgICAg ZWNobyAtbiAiKHpvbWIpIgotCSAgICBjb250aW51ZQotCWZpCi0JaWYgdGVzdCAtbiAiJFhFTkRP TUFJTlNfTUlHUkFURSI7IHRoZW4KLQkgICAgZWNobyAtbiAiKG1pZ3IpIgotCSAgICB3YXRjaGRv Z194ZW5jbWQgbWlncmF0ZSAmCi0JICAgIFdET0dfUElEPSQhCi0JICAgIFhNUj1gJENNRCBtaWdy YXRlICRpZCAkWEVORE9NQUlOU19NSUdSQVRFIDI+JjEgMT4vZGV2L251bGxgCi0JICAgIGlmIHRl c3QgJD8gLW5lIDA7IHRoZW4KLQkJZWNobyAtZSAiXG5BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBt aWdyYXRpbmcgZG9tYWluOlxuJFhNUlxuIgotCQlyY19mYWlsZWQgJD8KLQkJZWNobyAtZSAnIScK LQotCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKLQkgICAgZWxzZQotCQlraWxsICRX RE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKLQotCQllY2hvIC1lIC4KLQkJdXNsZWVwIDEwMDAKLQkJ Y29udGludWUKLQkgICAgZmkKLQlmaQotCWlmIHRlc3QgLW4gIiRYRU5ET01BSU5TX1NBVkUiOyB0 aGVuCi0JICAgIGVjaG8gLW4gIihzYXZlKSIKLQkgICAgd2F0Y2hkb2dfeGVuY21kIHNhdmUgJgot CSAgICBXRE9HX1BJRD0kIQotCSAgICBta2RpciAtcCAiJFhFTkRPTUFJTlNfU0FWRSIKLQkgICAg WE1SPWAkQ01EIHNhdmUgJGlkICRYRU5ET01BSU5TX1NBVkUvJG5hbWUgMj4mMSAxPi9kZXYvbnVs bGAKLQkgICAgaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgotCQllY2hvIC1lICJcbkFuIGVycm9yIG9j Y3VycmVkIHdoaWxlIHNhdmluZyBkb21haW46XG4kWE1SXG4iCi0JCXJjX2ZhaWxlZCAkPwotCQll Y2hvIC1lICchJwotCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKLQkgICAgZWxzZQot CQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKLQkJZWNobyAtZSAuCi0JCXVzbGVlcCAx MDAwCi0JCWNvbnRpbnVlCi0JICAgIGZpCi0JZmkKLQlpZiB0ZXN0IC1uICIkWEVORE9NQUlOU19T SFVURE9XTiI7IHRoZW4KLQkgICAgIyBYRU5ET01BSU5TX1NIVVRET1dOIHNob3VsZCBiZSAiLS13 YWl0IgotCSAgICBlY2hvIC1uICIoc2h1dCkiCi0JICAgIHdhdGNoZG9nX3hlbmNtZCBzaHV0ZG93 biAmCi0JICAgIFdET0dfUElEPSQhCi0JICAgIFhNUj1gJENNRCBzaHV0ZG93biAkWEVORE9NQUlO U19TSFVURE9XTiAkaWQgMj4mMSAxPi9kZXYvbnVsbGAKLQkgICAgaWYgdGVzdCAkPyAtbmUgMDsg dGhlbgotCQllY2hvIC1lICJcbkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNodXR0aW5nIGRvd24g ZG9tYWluOlxuJFhNUlxuIgotCQlyY19mYWlsZWQgJD8KLQkJZWNobyAtZSAnIScKLQkgICAgZmkK LQkgICAga2lsbCAkV0RPR19QSUQgPi9kZXYvbnVsbCAyPiYxCi0JZmkKLSAgICBkb25lIDwgPCgk Q01EIGxpc3QgLWwgfCBncmVwICIkTElTVF9HUkVQIikKLQotICAgICMgTkIuIHRoaXMgc2h1dHMg ZG93biBBTEwgWGVuIGRvbWFpbnMgKHBvbGl0ZWx5KSwgbm90IGp1c3QgdGhlIG9uZXMgaW4KLSAg ICAjIEFVVE9ESVIvKgotICAgICMgVGhpcyBpcyBiZWNhdXNlIGl0J3MgZWFzaWVyIHRvIGRvIDst KSBidXQgYXJndWFibHkgaWYgdGhpcyBzY3JpcHQgaXMgcnVuCi0gICAgIyBvbiBzeXN0ZW0gc2h1 dGRvd24gdGhlbiBpdCdzIGFsc28gdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgotICAgIGlmICEgYWxs X3pvbWJpZXMgJiYgdGVzdCAtbiAiJFhFTkRPTUFJTlNfU0hVVERPV05fQUxMIjsgdGhlbgotCSMg WEVORE9NQUlOU19TSFVURE9XTl9BTEwgc2hvdWxkIGJlICItLWFsbCAtLXdhaXQiCi0JZWNobyAt biAiIFNIVVRET1dOX0FMTCAiCi0Jd2F0Y2hkb2dfeGVuY21kIHNodXRkb3duIDEgZmFsc2UgJgot CVdET0dfUElEPSQhCi0JWE1SPWAkQ01EIHNodXRkb3duICRYRU5ET01BSU5TX1NIVVRET1dOX0FM TCAyPiYxIDE+L2Rldi9udWxsYAotCWlmIHRlc3QgJD8gLW5lIDA7IHRoZW4KLQkgICAgZWNobyAt ZSAiXG5BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzaHV0dGluZyBkb3duIGFsbCBkb21haW5zOiAk WE1SXG4iCi0JICAgIHJjX2ZhaWxlZCAkPwotCSAgICBlY2hvIC1lICchJwotCWZpCi0Ja2lsbCAk V0RPR19QSUQgPi9kZXYvbnVsbCAyPiYxCi0gICAgZmkKLQotICAgICMgVW5jb25kaXRpb25hbGx5 IGRlbGV0ZSBsb2NrIGZpbGUKLSAgICBybSAtZiAkTE9DS0ZJTEUKLQotICAgIGV4ZWMgMj4mMwot fQotCi1jaGVja19kb21haW5fdXAoKQotewotICAgIG5hbWU9O2lkPQotICAgIHdoaWxlIHJlYWQg TE47IGRvCi0JcGFyc2VsbiAiJExOIiB8fCBjb250aW51ZQotCWlmIHRlc3QgJGlkID0gMDsgdGhl biBjb250aW51ZTsgZmkKLQljYXNlICRuYW1lIGluCi0JICAgICgkMSkKLQkJcmV0dXJuIDAKLQkJ OzsKLQllc2FjCi0gICAgZG9uZSA8IDwoJENNRCBsaXN0IC1sIHwgZ3JlcCAiJExJU1RfR1JFUCIp Ci0gICAgcmV0dXJuIDEKLX0KLQotY2hlY2tfYWxsX2F1dG9fZG9tYWluc191cCgpCi17Ci0gICAg aWYgISBjb250YWluc19zb21ldGhpbmcgIiRYRU5ET01BSU5TX0FVVE8iCi0gICAgdGhlbgotICAg ICAgcmV0dXJuIDAKLSAgICBmaQotICAgIG1pc3Npbmc9Ci0gICAgZm9yIG5tIGluICRYRU5ET01B SU5TX0FVVE8vKjsgZG8KLQlyZG5hbWUgJG5tCi0JZm91bmQ9MAotCWlmIGNoZWNrX2RvbWFpbl91 cCAiJE5NIjsgdGhlbgotCSAgICBlY2hvIC1uICIgJG5hbWUiCi0JZWxzZQotCSAgICBtaXNzaW5n PSIkbWlzc2luZyAkTk0iCi0JZmkKLSAgICBkb25lCi0gICAgaWYgdGVzdCAtbiAiJG1pc3Npbmci OyB0aGVuCi0JZWNobyAtbiAiIE1JU1MgQVVUTzokbWlzc2luZyIKLQlyZXR1cm4gMQotICAgIGZp Ci0gICAgcmV0dXJuIDAKLX0KLQotY2hlY2tfYWxsX3NhdmVkX2RvbWFpbnNfdXAoKQotewotICAg IGlmICEgY29udGFpbnNfc29tZXRoaW5nICIkWEVORE9NQUlOU19TQVZFIgotICAgIHRoZW4KLSAg ICAgIHJldHVybiAwCi0gICAgZmkKLSAgICBtaXNzaW5nPWAvYmluL2xzICRYRU5ET01BSU5TX1NB VkVgCi0gICAgZWNobyAtbiAiIE1JU1MgU0FWRUQ6ICIgJG1pc3NpbmcKLSAgICByZXR1cm4gMQot fQotCi0jIFRoaXMgZG9lcyBOT1QgbmVjZXNzYXJpbHkgcmVzdGFydCBhbGwgcnVubmluZyBkb21h aW5zOiBpbnN0ZWFkIGl0Ci0jIHN0b3BzIGFsbCBydW5uaW5nIGRvbWFpbnMgYW5kIHRoZW4gYm9v dHMgYWxsIHRoZSBkb21haW5zIHNwZWNpZmllZCBpbgotIyBBVVRPRElSLiAgSWYgb3RoZXIgZG9t YWlucyBoYXZlIGJlZW4gc3RhcnRlZCBtYW51YWxseSB0aGVuIHRoZXkgd2lsbAotIyBub3QgZ2V0 IHJlc3RhcnRlZC4KLSMgQ29tbWVudGVkIG91dCB0byBhdm9pZCBjb25mdXNpb24hCi0KLXJlc3Rh cnQoKQotewotICAgIHN0b3AKLSAgICBzdGFydAotfQotCi1yZWxvYWQoKQotewotICAgIHJlc3Rh cnQKLX0KLQotCi1jYXNlICIkMSIgaW4KLSAgICBzdGFydCkKLQlzdGFydAotCXJjX3N0YXR1cwot CWlmIHRlc3QgLWYgJExPQ0tGSUxFOyB0aGVuIHJjX3N0YXR1cyAtdjsgZmkKLQk7OwotCi0gICAg c3RvcCkKLQlzdG9wCi0JcmNfc3RhdHVzIC12Ci0JOzsKLQotICAgIHJlc3RhcnQpCi0JcmVzdGFy dAotCTs7Ci0gICAgcmVsb2FkKQotCXJlbG9hZAotCTs7Ci0KLSAgICBzdGF0dXMpCi0JZWNobyAt biAiQ2hlY2tpbmcgZm9yIHhlbmRvbWFpbnM6IgotCWlmIHRlc3QgISAtZiAkTE9DS0ZJTEU7IHRo ZW4KLQkgICAgcmNfZmFpbGVkIDMKLQllbHNlCi0JICAgIGNoZWNrX2FsbF9hdXRvX2RvbWFpbnNf dXAKLQkgICAgcmNfc3RhdHVzCi0JICAgIGNoZWNrX2FsbF9zYXZlZF9kb21haW5zX3VwCi0JICAg IHJjX3N0YXR1cwotCWZpCi0JcmNfc3RhdHVzIC12Ci0JOzsKLQotICAgICopCi0JZWNobyAiVXNh Z2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfHN0YXR1c30iCi0JcmNfZmFpbGVkIDMK LQlyY19zdGF0dXMgLXYKLQk7OwotZXNhYwotCi1yY19leGl0CisjIS9iaW4vYmFzaAorIworIyAv ZXRjL2luaXQuZC94ZW5kb21haW5zCisjIFdyYXBwZXIgdG8gc3RhcnQgLyBzdG9wIGRvbWFpbnMg YXV0b21hdGljYWxseSB3aGVuIGRvbWFpbiAwIGJvb3RzIC8gc2h1dHMgZG93bgorIworIyBjaGtj b25maWc6IDM0NSA5OSAwMAorIyBkZXNjcmlwdGlvbjogSGVscGVyIHRvIHN0YXJ0IC8gc3RvcCBY ZW4gZG9tYWlucy4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgYSB3cmFwcGVyIGluaXQgaGVscGVyIGZv ciB0aGUgcmVhbCB3b3JrbG9hZCBob3JzZSBzY3JpcHQuCisjIEl0IHNob3VsZCB3b3JrIG9uIExT Qi1jb21wbGlhbnQgc3lzdGVtcy4KKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6 ICAgICAgICAgIHhlbmRvbWFpbnMKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRzeXNsb2cgJHJlbW90 ZV9mcyB4ZW5zdG9yZWQgeGVuY29uc29sZWQKKyMgU2hvdWxkLVN0YXJ0OiAgICAgIHhlbmQKKyMg UmVxdWlyZWQtU3RvcDogICAgICRzeXNsb2cgJHJlbW90ZV9mcyB4ZW5zdG9yZWQgeGVuY29uc29s ZWQKKyMgU2hvdWxkLVN0b3A6ICAgICAgIHhlbmQKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA1 CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogV3JhcHBl ciB0byBzdGFydC9zdG9wIHNlY29uZGFyeSB4ZW4gZG9tYWlucworIyBEZXNjcmlwdGlvbjogICAg ICAgV3JhcHBlciBmb3Igc3RhcnRpbmcgLyBzdG9wcGluZyBkb21haW5zIGF1dG9tYXRpY2FsbHkK KyMgICAgICAgICAgICAgICAgICAgIHdoZW4gZG9tYWluIDAgYm9vdHMgLyBzaHV0cyBkb3duIG9u IHN5c3RlbXMgdXNpbmcgaW5pdC4KKyMgICAgICAgICAgICAgICAgICAgIFRoZSAkU0JJTkRJUi94 ZW5kb21haW5zIGhlbHBlciBpcyBzaGFyZWQgYmV0d2VlbiBpbml0IGFuZAorIyAgICAgICAgICAg ICAgICAgICAgc3lzdGVtZCBzeXN0ZW1zLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL3hl bi9zY3JpcHRzL2hvdHBsdWdwYXRoLnNoCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCSRT QklORElSL3hlbmRvbWFpbnMgc3RhcnQKKwk7OworICAgIHN0b3ApCisJJFNCSU5ESVIveGVuZG9t YWlucyBzdG9wCisJOzsKKyAgICByZXN0YXJ0KQorCSRTQklORElSL3hlbmRvbWFpbnMgcmVzdGFy dAorCTs7CisgICAgcmVsb2FkKQorCSRTQklORElSL3hlbmRvbWFpbnMgcmVsb2FkCisJOzsKKyAg ICBzdGF0dXMpCisJJFNCSU5ESVIveGVuZG9tYWlucyBzdGF0dXMKKwk7OworICAgICopCisJZWNo byAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfHN0YXR1c30iCisJZXhpdCAz CisJOzsKK2VzYWMKK2V4aXQgJD8KZGlmZiAtLWdpdCBhL3Rvb2xzL2hvdHBsdWcvTGludXgvaW5p dC5kL3hlbmRvbWFpbnMgYi90b29scy9ob3RwbHVnL0xpbnV4L3hlbmRvbWFpbnMKc2ltaWxhcml0 eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2hvdHBsdWcvTGludXgvaW5pdC5kL3hlbmRv bWFpbnMKcmVuYW1lIHRvIHRvb2xzL2hvdHBsdWcvTGludXgveGVuZG9tYWlucwotLSAKMi4wLjAu cmMzLjE4LmcwMGE1Yjc5CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpo dHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK