From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Luis R. Rodriguez" Subject: [PATCH v4 08/15] tools/xendomains: move to libexec and use a smaller init helper Date: Tue, 29 Apr 2014 18:12:01 -0700 Message-ID: <1398820328-15132-9-git-send-email-mcgrof@do-not-panic.com> References: <1398820328-15132-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 1WfJ50-0000Px-N8 for xen-devel@lists.xenproject.org; Wed, 30 Apr 2014 01:12:59 +0000 Received: by mail-pa0-f49.google.com with SMTP id kq14so1085098pab.8 for ; Tue, 29 Apr 2014 18:12:52 -0700 (PDT) In-Reply-To: <1398820328-15132-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 Y29tPgotLS0KIHRvb2xzL2hvdHBsdWcvTGludXgvTWFrZWZpbGUgICAgICAgICAgfCAgIDYgKwog dG9vbHMvaG90cGx1Zy9MaW51eC9pbml0LmQveGVuZG9tYWlucyB8IDU2NyArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogdG9vbHMvaG90cGx1Zy9MaW51eC94ZW5kb21haW5zICAgICAg ICB8IDU4NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5n ZWQsIDYwNyBpbnNlcnRpb25zKCspLCA1NTEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgdG9vbHMvaG90cGx1Zy9MaW51eC94ZW5kb21haW5zCgpkaWZmIC0tZ2l0IGEvdG9vbHMvaG90 cGx1Zy9MaW51eC9NYWtlZmlsZSBiL3Rvb2xzL2hvdHBsdWcvTGludXgvTWFrZWZpbGUKaW5kZXgg NDg3NGVjNS4uN2U2NjQ2ZSAxMDA2NDQKLS0tIGEvdG9vbHMvaG90cGx1Zy9MaW51eC9NYWtlZmls ZQorKysgYi90b29scy9ob3RwbHVnL0xpbnV4L01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQCBpbmNs dWRlICQoWEVOX1JPT1QpL3Rvb2xzL1J1bGVzLm1rCiAKICMgSW5pdCBzY3JpcHRzLgogWEVORE9N QUlOU19JTklURCA9IGluaXQuZC94ZW5kb21haW5zCitYRU5ET01BSU5TX0xJQkVYRUMgPSB4ZW5k b21haW5zCiBYRU5ET01BSU5TX1NZU0NPTkZJRyA9IGluaXQuZC9zeXNjb25maWcueGVuZG9tYWlu cwogCiBYRU5DT01NT05TX0lOSVREID0gaW5pdC5kL3hlbmNvbW1vbnMKQEAgLTQ1LDYgKzQ2LDEx IEBAIGluc3RhbGw6IGFsbCBpbnN0YWxsLWluaXRkIGluc3RhbGwtc2NyaXB0cyBpbnN0YWxsLXVk ZXYKIGluc3RhbGwtaW5pdGQ6CiAJWyAtZCAkKERFU1RESVIpJChJTklURF9ESVIpIF0gfHwgJChJ TlNUQUxMX0RJUikgJChERVNURElSKSQoSU5JVERfRElSKQogCVsgLWQgJChERVNURElSKSQoU1lT Q09ORklHX0RJUikgXSB8fCAkKElOU1RBTExfRElSKSAkKERFU1RESVIpJChTWVNDT05GSUdfRElS KQorCVsgLWQgJChERVNURElSKSQoTElCRVhFQykgXSB8fCAkKElOU1RBTExfRElSKSAkKERFU1RE SVIpJChMSUJFWEVDKQoraWZlcSAoJChDT05GSUdfWEVORCkseSkKKwkkKElOU1RBTExfUFJPRykg JChYRU5EX0lOSVREKSAkKERFU1RESVIpJChJTklURF9ESVIpCitlbmRpZgorCSQoSU5TVEFMTF9Q Uk9HKSAkKFhFTkRPTUFJTlNfTElCRVhFQykgJChERVNURElSKSQoTElCRVhFQykKIAkkKElOU1RB TExfUFJPRykgJChYRU5ET01BSU5TX0lOSVREKSAkKERFU1RESVIpJChJTklURF9ESVIpCiAJJChJ TlNUQUxMX0RBVEEpICQoWEVORE9NQUlOU19TWVNDT05GSUcpICQoREVTVERJUikkKFNZU0NPTkZJ R19ESVIpL3hlbmRvbWFpbnMKIAkkKElOU1RBTExfUFJPRykgJChYRU5DT01NT05TX0lOSVREKSAk KERFU1RESVIpJChJTklURF9ESVIpCmRpZmYgLS1naXQgYS90b29scy9ob3RwbHVnL0xpbnV4L2lu aXQuZC94ZW5kb21haW5zIGIvdG9vbHMvaG90cGx1Zy9MaW51eC9pbml0LmQveGVuZG9tYWlucwpp bmRleCA1ODc1NjhkLi5kMDEyMmZjIDEwMDY0NAotLS0gYS90b29scy9ob3RwbHVnL0xpbnV4L2lu aXQuZC94ZW5kb21haW5zCisrKyBiL3Rvb2xzL2hvdHBsdWcvTGludXgvaW5pdC5kL3hlbmRvbWFp bnMKQEAgLTEsMTggKzEsMTMgQEAKICMhL2Jpbi9iYXNoCiAjCiAjIC9ldGMvaW5pdC5kL3hlbmRv bWFpbnMKLSMgU3RhcnQgLyBzdG9wIGRvbWFpbnMgYXV0b21hdGljYWxseSB3aGVuIGRvbWFpbiAw IGJvb3RzIC8gc2h1dHMgZG93bi4KKyMgV3JhcHBlciB0byBzdGFydCAvIHN0b3AgZG9tYWlucyBh dXRvbWF0aWNhbGx5IHdoZW4gZG9tYWluIDAgYm9vdHMgLyBzaHV0cyBkb3duCiAjCiAjIGNoa2Nv bmZpZzogMzQ1IDk5IDAwCi0jIGRlc2NyaXB0aW9uOiBTdGFydCAvIHN0b3AgWGVuIGRvbWFpbnMu CisjIGRlc2NyaXB0aW9uOiBIZWxwZXIgdG8gc3RhcnQgLyBzdG9wIFhlbiBkb21haW5zLgogIwot IyBUaGlzIHNjcmlwdCBvZmZlcnMgZmFpcmx5IGJhc2ljIGZ1bmN0aW9uYWxpdHkuICBJdCBzaG91 bGQgd29yayBvbiBSZWRoYXQKLSMgYnV0IGFsc28gb24gTFNCLWNvbXBsaWFudCBTdVNFIHJlbGVh c2VzIGFuZCBvbiBEZWJpYW4gd2l0aCB0aGUgTFNCIHBhY2thZ2UKLSMgaW5zdGFsbGVkLiAgKExT QiBpcyB0aGUgTGludXggU3RhbmRhcmQgQmFzZSkKLSMKLSMgQmFzZWQgb24gdGhlIGV4YW1wbGUg aW4gdGhlICJEZXNpZ25pbmcgSGlnaCBRdWFsaXR5IEludGVncmF0ZWQgTGludXgKLSMgQXBwbGlj YXRpb25zIEhPV1RPIiBieSBBdmkgQWxrYWxheQotIyA8aHR0cDovL3d3dy50bGRwLm9yZy9IT1dU Ty9IaWdoUXVhbGl0eS1BcHBzLUhPV1RPLz4KKyMgVGhpcyBzY3JpcHQgaXMgYSB3cmFwcGVyIGlu aXQgaGVscGVyIGZvciB0aGUgcmVhbCB3b3JrbG9hZCBob3JzZSBzY3JpcHQuCisjIEl0IHNob3Vs ZCB3b3JrIG9uIExTQi1jb21wbGlhbnQgc3lzdGVtcy4KICMKICMjIyBCRUdJTiBJTklUIElORk8K ICMgUHJvdmlkZXM6ICAgICAgICAgIHhlbmRvbWFpbnMKQEAgLTIyLDU2NCArMTcsMzQgQEAKICMg U2hvdWxkLVN0b3A6ICAgICAgIHhlbmQKICMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA1CiAjIERl ZmF1bHQtU3RvcDogICAgICAwIDEgNgotIyBTaG9ydC1EZXNjcmlwdGlvbjogU3RhcnQvc3RvcCBz ZWNvbmRhcnkgeGVuIGRvbWFpbnMKLSMgRGVzY3JpcHRpb246ICAgICAgIFN0YXJ0IC8gc3RvcCBk b21haW5zIGF1dG9tYXRpY2FsbHkgd2hlbiBkb21haW4gMAotIyAgICAgICAgICAgICAgICAgICAg Ym9vdHMgLyBzaHV0cyBkb3duLgorIyBTaG9ydC1EZXNjcmlwdGlvbjogV3JhcHBlciB0byBzdGFy dC9zdG9wIHNlY29uZGFyeSB4ZW4gZG9tYWlucworIyBEZXNjcmlwdGlvbjogICAgICAgV3JhcHBl ciBmb3Igc3RhcnRpbmcgLyBzdG9wcGluZyBkb21haW5zIGF1dG9tYXRpY2FsbHkKKyMgICAgICAg ICAgICAgICAgICAgIHdoZW4gZG9tYWluIDAgYm9vdHMgLyBzaHV0cyBkb3duIG9uIHN5c3RlbXMg dXNpbmcgaW5pdC4KKyMgICAgICAgICAgICAgICAgICAgIFRoZSAkU0JJTkRJUi94ZW5kb21haW5z IGhlbHBlciBpcyBzaGFyZWQgYmV0d2VlbiBpbml0IGFuZAorIyAgICAgICAgICAgICAgICAgICAg c3lzdGVtZCBzeXN0ZW1zLgogIyMjIEVORCBJTklUIElORk8KIAogLiAvZXRjL3hlbi9zY3JpcHRz L2hvdHBsdWdwYXRoLnNoCiAKLUNNRD0ke1NCSU5ESVJ9L3hsCi1IRUFEQ09NUD0iWGVuIHNhdmVk IGRvbWFpbiIKLSRDTUQgbGlzdCAmPiAvZGV2L251bGwKLWlmIHRlc3QgJD8gLW5lIDAKLXRoZW4K LQlDTUQ9JHtTQklORElSfS94bQotCUhFQURDT01QPSJMaW51eEd1ZXN0UmVjb3JkIgotZmkKLQot JENNRCBsaXN0ICY+IC9kZXYvbnVsbAotaWYgdGVzdCAkPyAtbmUgMAotdGhlbgotCWV4aXQgMDsK LWZpCi0KLSMgQ29ycmVjdCBleGl0IGNvZGUgd291bGQgcHJvYmFibHkgYmUgNSwgYnV0IGl0J3Mg ZW5vdWdoCi0jIGlmIHhlbmQgY29tcGxhaW5zIGlmIHdlJ3JlIG5vdCBydW5uaW5nIGFzIHByaXZp bGVnZWQgZG9tYWluCi1pZiAhIFsgLWUgL3Byb2MveGVuL3ByaXZjbWQgXTsgdGhlbgotCWV4aXQg MAotZmkKLQotIyBTZWUgZG9jcy9taXNjL2Rpc3Ryb19tYXBwaW5nLnR4dAotaWYgWyAtZCAvdmFy L2xvY2svc3Vic3lzIF07IHRoZW4KLQlMT0NLRklMRT0vdmFyL2xvY2svc3Vic3lzL3hlbmRvbWFp bnMKLWVsc2UKLQlMT0NLRklMRT0vdmFyL2xvY2sveGVuZG9tYWlucwotZmkKLQotaWYgWyAtZCAv ZXRjL3N5c2NvbmZpZyBdOyB0aGVuCi0JWEVORE9NX0NPTkZJRz0vZXRjL3N5c2NvbmZpZy94ZW5k b21haW5zCi1lbHNlCi0JWEVORE9NX0NPTkZJRz0vZXRjL2RlZmF1bHQveGVuZG9tYWlucwotZmkK LQotdGVzdCAtciAkWEVORE9NX0NPTkZJRyB8fCB7IGVjaG8gIiRYRU5ET01fQ09ORklHIG5vdCBl eGlzdGluZyI7Ci0JaWYgWyAiJDEiID0gInN0b3AiIF07IHRoZW4gZXhpdCAwOwotCWVsc2UgZXhp dCA2OyBmaTsgfQotCi0uICRYRU5ET01fQ09ORklHCi0KLSMgVXNlIHRoZSBTVVNFIHJjXyBpbml0 IHNjcmlwdCBmdW5jdGlvbnM7Ci0jIGVtdWxhdGUgdGhlbSBvbiBMU0IsIFJIIGFuZCBvdGhlciBz eXN0ZW1zCi1pZiB0ZXN0IC1lIC9ldGMvcmMuc3RhdHVzOyB0aGVuCi0gICAgIyBTVVNFIHJjIHNj cmlwdCBsaWJyYXJ5Ci0gICAgLiAvZXRjL3JjLnN0YXR1cwotZWxzZQotICAgIF9jbWQ9JDEKLSAg ICBkZWNsYXJlIC1hIF9TTVNHCi0gICAgaWYgdGVzdCAiJHtfY21kfSIgPSAic3RhdHVzIjsgdGhl bgotCV9TTVNHPShydW5uaW5nIGRlYWQgZGVhZCB1bnVzZWQgdW5rbm93bikKLQlfUkNfVU5VU0VE PTMKLSAgICBlbHNlCi0JX1NNU0c9KGRvbmUgZmFpbGVkIGZhaWxlZCBtaXNzZWQgZmFpbGVkIHNr aXBwZWQgdW51c2VkIGZhaWxlZCBmYWlsZWQpCi0JX1JDX1VOVVNFRD02Ci0gICAgZmkKLSAgICBp ZiB0ZXN0IC1lIC9ldGMvaW5pdC5kL2Z1bmN0aW9uczsgdGhlbgotCSMgUkVESEFUCi0JLiAvZXRj L2luaXQuZC9mdW5jdGlvbnMKLQllY2hvX3JjKCkKLQl7Ci0JICAgICNlY2hvIC1uICIgIFske19T TVNHWyR7X1JDX1JWfV19XSAiCi0JICAgIGlmIHRlc3QgJHtfUkNfUlZ9ID0gMDsgdGhlbgotCQlz dWNjZXNzICIgIFske19TTVNHWyR7X1JDX1JWfV19XSAiCi0JICAgIGVsc2UKLQkJZmFpbHVyZSAi ICBbJHtfU01TR1ske19SQ19SVn1dfV0gIgotCSAgICBmaQotCX0KLSAgICBlbGlmIHRlc3QgLWUg L2xpYi9sc2IvaW5pdC1mdW5jdGlvbnM7IHRoZW4KLQkjIExTQgotICAgIAkuIC9saWIvbHNiL2lu aXQtZnVuY3Rpb25zCi0gICAgICAgIGlmIGFsaWFzIGxvZ19zdWNjZXNzX21zZyA+L2Rldi9udWxs IDI+L2Rldi9udWxsOyB0aGVuCi0JICBlY2hvX3JjKCkKLQkgIHsKLQkgICAgICAgZWNobyAiICBb JHtfU01TR1ske19SQ19SVn1dfV0gIgotCSAgfQotICAgICAgICBlbHNlCi0JICBlY2hvX3JjKCkK LQkgIHsKLQkgICAgaWYgdGVzdCAke19SQ19SVn0gPSAwOyB0aGVuCi0JCWxvZ19zdWNjZXNzX21z ZyAiICBbJHtfU01TR1ske19SQ19SVn1dfV0gIgotCSAgICBlbHNlCi0JCWxvZ19mYWlsdXJlX21z ZyAiICBbJHtfU01TR1ske19SQ19SVn1dfV0gIgotCSAgICBmaQotCSAgfQotICAgICAgICBmaQot ICAgIGVsc2UKLQkjIGVtdWxhdGUgaXQKLQllY2hvX3JjKCkKLQl7Ci0JICAgIGVjaG8gIiAgWyR7 X1NNU0dbJHtfUkNfUlZ9XX1dICIKLQl9Ci0gICAgZmkKLSAgICByY19yZXNldCgpIHsgX1JDX1JW PTA7IH0KLSAgICByY19mYWlsZWQoKQotICAgIHsKLQlpZiB0ZXN0IC16ICIkMSI7IHRoZW4KLQkg ICAgX1JDX1JWPTE7Ci0JZWxpZiB0ZXN0ICIkMSIgIT0gIjAiOyB0aGVuCi0JICAgIF9SQ19SVj0k MTsKLQlmaQotCXJldHVybiAke19SQ19SVn0KLSAgICB9Ci0gICAgcmNfY2hlY2soKQotICAgIHsK LQlyZXR1cm4gcmNfZmFpbGVkICQ/Ci0gICAgfQotICAgIHJjX3N0YXR1cygpCi0gICAgewotCXJj X2ZhaWxlZCAkPwotCWlmIHRlc3QgIiQxIiA9ICItciI7IHRoZW4gX1JDX1JWPTA7IHNoaWZ0OyBm aQotCWlmIHRlc3QgIiQxIiA9ICItcyI7IHRoZW4gcmNfZmFpbGVkIDU7IGVjaG9fcmM7IHJjX2Zh aWxlZCAzOyBzaGlmdDsgZmkKLQlpZiB0ZXN0ICIkMSIgPSAiLXUiOyB0aGVuIHJjX2ZhaWxlZCAk e19SQ19VTlVTRUR9OyBlY2hvX3JjOyByY19mYWlsZWQgMzsgc2hpZnQ7IGZpCi0JaWYgdGVzdCAi JDEiID0gIi12IjsgdGhlbiBlY2hvX3JjOyBzaGlmdDsgZmkKLQlpZiB0ZXN0ICIkMSIgPSAiLXIi OyB0aGVuIF9SQ19SVj0wOyBzaGlmdDsgZmkKLQlyZXR1cm4gJHtfUkNfUlZ9Ci0gICAgfQotICAg IHJjX2V4aXQoKSB7IGV4aXQgJHtfUkNfUlZ9OyB9Ci0gICAgcmNfYWN0aXZlKCkKLSAgICB7Ci0J aWYgdGVzdCAteiAiJFJVTkxFVkVMIjsgdGhlbiByZWFkIFJVTkxFVkVMIFJFU1QgPCA8KC9zYmlu L3J1bmxldmVsKTsgZmkKLQlpZiB0ZXN0IC1lIC9ldGMvaW5pdC5kL1NbMC05XVswLTldJHsxfTsg dGhlbiByZXR1cm4gMDsgZmkKLQlyZXR1cm4gMQotICAgIH0KLWZpCi0KLWlmICEgd2hpY2ggdXNs ZWVwID4mL2Rldi9udWxsCi10aGVuCi0gIHVzbGVlcCgpCi0gIHsKLSAgICBpZiBbIC1uICIkMSIg XQotICAgIHRoZW4KLSAgICAgIHNsZWVwICQoKCAkMSAvIDEwMDAwMDAgKSkKLSAgICBmaQotICB9 Ci1maQotCi0jIFJlc2V0IHN0YXR1cyBvZiB0aGlzIHNlcnZpY2UKLXJjX3Jlc2V0Ci0KLSMjCi0j IFJldHVybnMgMCAoc3VjY2VzcykgaWYgdGhlIGdpdmVuIHBhcmFtZXRlciBuYW1lcyBhIGRpcmVj dG9yeSwgYW5kIHRoYXQKLSMgZGlyZWN0b3J5IGlzIG5vdCBlbXB0eS4KLSMKLWNvbnRhaW5zX3Nv bWV0aGluZygpCi17Ci0gIGlmIFsgLWQgIiQxIiBdICYmIFsgYC9iaW4vbHMgJDEgfCB3YyAtbGAg LWd0IDAgXQotICB0aGVuCi0gICAgcmV0dXJuIDAKLSAgZWxzZQotICAgIHJldHVybiAxCi0gIGZp Ci19Ci0KLSMgcmVhZCBuYW1lIGZyb20geGVuIGNvbmZpZyBmaWxlCi1yZG5hbWUoKQotewotICAg IE5NPSQoJENNRCBjcmVhdGUgLS1xdWlldCAtLWRyeXJ1biAtLWRlZmNvbmZpZyAiJDEiIHwKLSAg ICAgICAgIHNlZCAtbiAncy9eLioobmFtZSBcKC4qXCkpJC9cMS9wO3MvXi4qIm5hbWUiOiAiXCgu KlwpIiwkL1wxL3AnKQotfQotCi1yZG5hbWVzKCkKLXsKLSAgICBOQU1FUz0KLSAgICBpZiAhIGNv bnRhaW5zX3NvbWV0aGluZyAiJFhFTkRPTUFJTlNfQVVUTyIKLSAgICB0aGVuCi0JcmV0dXJuCi0g ICAgZmkKLSAgICBmb3IgZG9tIGluICRYRU5ET01BSU5TX0FVVE8vKjsgZG8KLQlyZG5hbWUgJGRv bQotCWlmIHRlc3QgLXogJE5BTUVTOyB0aGVuCi0JICAgIE5BTUVTPSROTTsKLQllbHNlCi0JICAg IE5BTUVTPSIkTkFNRVN8JE5NIgotCWZpCi0gICAgZG9uZQotfQotCi1MSVNUX0dSRVA9Jyhkb21h aW5cfChkb21pZFx8KG5hbWVcfF4gICAgeyRcfCJuYW1lIjpcfCJkb21pZCI6JwotcGFyc2Vsbigp Ci17Ci0gICAgaWYgW1sgIiQxIiA9fiAnKGRvbWFpbicgXV0gfHwgW1sgIiQxIiA9ICJ7IiBdXTsg dGhlbgotICAgICAgICBuYW1lPTtpZD0KLSAgICBlbGlmIFtbICIkMSIgPX4gJyhuYW1lJyBdXTsg dGhlbgotICAgICAgICBuYW1lPSQoZWNobyAkMSB8IHNlZCAtZSAncy9eLioobmFtZSBcKC4qXCkp JC9cMS8nKQotICAgIGVsaWYgW1sgIiQxIiA9fiAnKGRvbWlkJyBdXTsgdGhlbgotICAgICAgICBp ZD0kKGVjaG8gJDEgfCBzZWQgLWUgJ3MvXi4qKGRvbWlkIFwoLipcKSkkL1wxLycpCi0gICAgZWxp ZiBbWyAiJDEiID1+ICcibmFtZSI6JyBdXTsgdGhlbgotICAgICAgICBuYW1lPSQoZWNobyAkMSB8 IHNlZCAtZSAncy9eLioibmFtZSI6ICJcKC4qXCkiLCQvXDEvJykKLSAgICBlbGlmIFtbICIkMSIg PX4gJyJkb21pZCI6JyBdXTsgdGhlbgotICAgICAgICBpZD0kKGVjaG8gJDEgfCBzZWQgLWUgJ3Mv Xi4qImRvbWlkIjogXCguKlwpLCQvXDEvJykKLSAgICBmaQotCi0gICAgWyAtbiAiJG5hbWUiIC1h IC1uICIkaWQiIF0gJiYgcmV0dXJuIDAgfHwgcmV0dXJuIDEKLX0KLQotaXNfcnVubmluZygpCi17 Ci0gICAgcmRuYW1lICQxCi0gICAgUkM9MQotICAgIG5hbWU9O2lkPQotICAgIHdoaWxlIHJlYWQg TE47IGRvCi0JcGFyc2VsbiAiJExOIiB8fCBjb250aW51ZQotCWlmIHRlc3QgJGlkID0gMDsgdGhl biBjb250aW51ZTsgZmkKLQljYXNlICRuYW1lIGluCi0JICAgICgkTk0pCi0JCVJDPTAKLQkJOzsK LQllc2FjCi0gICAgZG9uZSA8IDwoJENNRCBsaXN0IC1sIHwgZ3JlcCAiJExJU1RfR1JFUCIpCi0g ICAgcmV0dXJuICRSQwotfQotCi1zdGFydCgpCi17Ci0gICAgaWYgWyAtZiAkTE9DS0ZJTEUgXTsg dGhlbgotCWVjaG8gLWUgInhlbmRvbWFpbnMgYWxyZWFkeSBydW5uaW5nIChsb2NrZmlsZSBleGlz dHMpIgotCXJldHVybjsKLSAgICBmaQotCi0gICAgc2F2ZWRfZG9tYWlucz0iICIKLSAgICBpZiBb ICIkWEVORE9NQUlOU19SRVNUT1JFIiA9ICJ0cnVlIiBdICYmCi0gICAgICAgY29udGFpbnNfc29t ZXRoaW5nICIkWEVORE9NQUlOU19TQVZFIgotICAgIHRoZW4KLQlta2RpciAtcCAkKGRpcm5hbWUg IiRMT0NLRklMRSIpCi0JdG91Y2ggJExPQ0tGSUxFCi0JZWNobyAtbiAiUmVzdG9yaW5nIFhlbiBk b21haW5zOiIKLQlzYXZlZF9kb21haW5zPWBscyAkWEVORE9NQUlOU19TQVZFYAotICAgICAgICBm b3IgZG9tIGluICRYRU5ET01BSU5TX1NBVkUvKjsgZG8KLSAgICAgICAgICAgIGlmIFsgLWYgJGRv bSBdIDsgdGhlbgotICAgICAgICAgICAgICAgIEhFQURFUj1gaGVhZCAtYyAxNiAkZG9tIHwgaGVh ZCAtbiAxIDI+IC9kZXYvbnVsbGAKLSAgICAgICAgICAgICAgICBpZiBbICIkSEVBREVSIiA9ICIk SEVBRENPTVAiIF07IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgZWNobyAtbiAiICR7ZG9tIyMq L30iCi0gICAgICAgICAgICAgICAgICAgIFhNUj1gJENNRCByZXN0b3JlICRkb20gMj4mMSAxPi9k ZXYvbnVsbGAKLSAgICAgICAgICAgICAgICAgICAgIyRDTUQgcmVzdG9yZSAkZG9tCi0gICAgICAg ICAgICAgICAgICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgotICAgICAgICAgICAgICAgICAgICAg ICAgZWNobyAtZSAiXG5BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXN0b3JpbmcgZG9tYWluICR7 ZG9tIyMqL306XG4kWE1SIgotICAgICAgICAgICAgICAgICAgICAgICAgcmNfZmFpbGVkICQ/Ci0g ICAgICAgICAgICAgICAgICAgICAgICBlY2hvIC1lICchJwotICAgICAgICAgICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAjIG12ICRkb20gJHtkb20lLyp9Ly4ke2RvbSMj Ki99Ci0gICAgICAgICAgICAgICAgICAgICAgICBybSAkZG9tCi0gICAgICAgICAgICAgICAgICAg IGZpCi0gICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGZpCi0gICAgICAgIGRvbmUKLQll Y2hvIC1lCi0gICAgZmkKLQotICAgIGlmIGNvbnRhaW5zX3NvbWV0aGluZyAiJFhFTkRPTUFJTlNf QVVUTyIKLSAgICB0aGVuCi0JdG91Y2ggJExPQ0tGSUxFCi0JZWNobyAtbiAiU3RhcnRpbmcgYXV0 byBYZW4gZG9tYWluczoiCi0JIyBXZSBleHBlY3QgY29uZmlnIHNjcmlwdHMgZm9yIGF1dG8gc3Rh cnRpbmcgZG9tYWlucyB0byBiZSBpbgotCSMgWEVORE9NQUlOU19BVVRPIC0gdGhleSBjb3VsZCBq dXN0IGJlIHN5bWxpbmtzIHRvIGZpbGVzIGVsc2V3aGVyZQotCi0JIyBDcmVhdGUgYWxsIGRvbWFp bnMgd2l0aCBjb25maWcgZmlsZXMgaW4gWEVORE9NQUlOU19BVVRPLgotCSMgVE9ETzogV2Ugc2hv dWxkIHJlY29yZCB3aGljaCBkb21haW4gbmFtZSBiZWxvbmdzCi0JIyBzbyB3ZSBoYXZlIHRoZSBv cHRpb24gdG8gc2VsZWN0aXZlbHkgc2h1dCBkb3duIC8gbWlncmF0ZSBsYXRlcgotCSMgSWYgYSBk b21haW4gc3RhdGVmaWxlIGZyb20gJFhFTkRPTUFJTlNfU0FWRSBtYXRjaGVzIGEgZG9tYWluIG5h bWUKLQkjIGluICRYRU5ET01BSU5TX0FVVE8sIGRvIG5vdCB0cnkgdG8gc3RhcnQgdGhhdCBkb21h aW47IGlmIGl0IGRpZG4ndAotCSMgcmVzdG9yZSBjb3JyZWN0bHkgaXQgcmVxdWlyZXMgYWRtaW5p c3RyYXRpdmUgYXR0ZW50aW9uLgotCWZvciBkb20gaW4gJFhFTkRPTUFJTlNfQVVUTy8qOyBkbwot CSAgICBlY2hvIC1uICIgJHtkb20jIyovfSIKLQkgICAgc2hvcnRkb209JChlY2hvICRkb20gfCBz ZWQgLW4gJ3MvXi4qXC9cKC4qXCkkL1wxL3AnKQotCSAgICBlY2hvICRzYXZlZF9kb21haW5zIHwg Z3JlcCAtdyAkc2hvcnRkb20gPiAvZGV2L251bGwKLQkgICAgaWYgWyAkPyAtZXEgMCBdIHx8IGlz X3J1bm5pbmcgJGRvbTsgdGhlbgotCQllY2hvIC1uICIoc2tpcCkiCi0JICAgIGVsc2UKLQkJWE1D PWAkQ01EIGNyZWF0ZSAtLXF1aWV0IC0tZGVmY29uZmlnICRkb21gCi0JCWlmIFsgJD8gLW5lIDAg XTsgdGhlbgotCQkgICAgZWNobyAtZSAiXG5BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBjcmVhdGlu ZyBkb21haW4gJHtkb20jIyovfTogJFhNQ1xuIgotCQkgICAgcmNfZmFpbGVkICQ/Ci0JCSAgICBl Y2hvIC1lICchJwotCQllbHNlCi0JCSAgICB1c2xlZXAgJFhFTkRPTUFJTlNfQ1JFQVRFX1VTTEVF UAotCQlmaQotCSAgICBmaQotCWRvbmUKLSAgICBmaQotfQotCi1hbGxfem9tYmllcygpCi17Ci0g ICAgbmFtZT07aWQ9Ci0gICAgd2hpbGUgcmVhZCBMTjsgZG8KLQlwYXJzZWxuICIkTE4iIHx8IGNv bnRpbnVlCi0JaWYgdGVzdCAkaWQgPSAwOyB0aGVuIGNvbnRpbnVlOyBmaQotCWlmIHRlc3QgIiRz dGF0ZSIgIT0gIi1iLS0tZCIgLWEgIiRzdGF0ZSIgIT0gIi0tLS0tZCI7IHRoZW4KLQkgICAgcmV0 dXJuIDE7Ci0JZmkKLSAgICBkb25lIDwgPCgkQ01EIGxpc3QgLWwgfCBncmVwICIkTElTVF9HUkVQ IikKLSAgICByZXR1cm4gMAotfQotCi0jIFdhaXQgZm9yIG1heCAkWEVORE9NQUlOU19TVE9QX01B WFdBSVQgZm9yICRDTUQgJDEgdG8gZmluaXNoOwotIyBpZiBpdCBoYXMgbm90IGV4aXRlZCBieSB0 aGF0IHRpbWUga2lsbCBpdCwgc28gdGhlIGluaXQgc2NyaXB0IHdpbGwKLSMgc3VjY2VlZCB3aXRo aW4gYSBmaW5pdGUgYW1vdW50IG9mIHRpbWU7IGlmICQyIGlzIG5vbm51bGwsIGl0IHdpbGwKLSMg a2lsbCB0aGUgY29tbWFuZCBhcyB3ZWxsIGFzIHNvb24gYXMgbm8gZG9tYWluIChleGNlcHQgZm9y IHpvbWJpZXMpCi0jIGFyZSBsZWZ0ICh1c2VkIGZvciBzaHV0ZG93biAtLWFsbCkuIFRoaXJkIHBh cmFtZXRlciwgaWYgYW55LCBzdXBwcmVzc2VzCi0jIG91dHB1dCBvZiBkb3RzIHBlciB3b3JraW5n IHN0YXRlIChmb3JtYXR0aW5nIGlzc3VlcykKLXdhdGNoZG9nX3hlbmNtZCgpCi17Ci0gICAgaWYg dGVzdCAteiAiJFhFTkRPTUFJTlNfU1RPUF9NQVhXQUlUIiAtbyAiJFhFTkRPTUFJTlNfU1RPUF9N QVhXQUlUIiA9ICIwIjsgdGhlbgotCWV4aXQKLSAgICBmaQotCi0gICAgdXNsZWVwIDIwMDAwCi0g ICAgZm9yIG5vIGluIGBzZXEgMCAkWEVORE9NQUlOU19TVE9QX01BWFdBSVRgOyBkbwotCSMgZXhp dCBpZiAkQ01EIHNhdmUvbWlncmF0ZS9zaHV0ZG93biBpcyBmaW5pc2hlZAotCVBTQVg9YHBzIGF4 bHcgfCBncmVwICIkQ01EICQxIiB8IGdyZXAgLXYgZ3JlcGAKLQlpZiB0ZXN0IC16ICIkUFNBWCI7 IHRoZW4gZXhpdDsgZmkKLQlpZiAhIHRlc3QgLW4gIiQzIjsgdGhlbiBlY2hvIC1uICcuJzsgZmkK LQlzbGVlcCAxCi0JIyBnbyB0byBraWxsIGltbWVkaWF0ZWx5IGlmIHRoZXJlJ3Mgb25seSB6b21i aWVzIGxlZnQKLQlpZiBhbGxfem9tYmllcyAmJiB0ZXN0IC1uICIkMiI7IHRoZW4gYnJlYWs7IGZp Ci0gICAgZG9uZQotICAgIHNsZWVwIDEKLSAgICByZWFkIFBTRiBQU1VJRCBQU1BJRCBQU1BQSUQg PCA8KGVjaG8gIiRQU0FYIikKLSAgICAjIGtpbGwgJENNRCAkMQotICAgIGtpbGwgJFBTUElEID4v ZGV2L251bGwgMj4mMQotCi0gICAgZWNobyAtZSAuCi19Ci0KLXN0b3AoKQotewotICAgIGV4ZWMg Mz4mMiAyPiAvZGV2L251bGwKLQotICAgICMgQ29sbGVjdCBsaXN0IG9mIGRvbWFpbnMgdG8gc2h1 dCBkb3duCi0gICAgaWYgdGVzdCAiJFhFTkRPTUFJTlNfQVVUT19PTkxZIiA9ICJ0cnVlIjsgdGhl bgotCXJkbmFtZXMKLSAgICBmaQotICAgIGVjaG8gLW4gIlNodXR0aW5nIGRvd24gWGVuIGRvbWFp bnM6IgotICAgIG5hbWU9O2lkPQotICAgIHdoaWxlIHJlYWQgTE47IGRvCi0JcGFyc2VsbiAiJExO IiB8fCBjb250aW51ZQotCWlmIHRlc3QgJGlkID0gMDsgdGhlbiBjb250aW51ZTsgZmkKLQllY2hv IC1uICIgJG5hbWUiCi0JaWYgdGVzdCAiJFhFTkRPTUFJTlNfQVVUT19PTkxZIiA9ICJ0cnVlIjsg dGhlbgotCSAgICBldmFsICIKLQkgICAgY2FzZSBcIlwkbmFtZVwiIGluCi0JCSgkTkFNRVMpCi0J CSAgICAjIG5vdGhpbmcKLQkJICAgIDs7Ci0JCSgqKQotCQkgICAgZWNobyAtZSAnKHNraXApJwot CQkgICAgY29udGludWUKLQkJICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgIgotCWZpCi0JIyBYRU5E T01BSU5TX1NZU1JRIGNob3VsZCBiZSBzb21ldGhpbmcgbGlrZSBqdXN0ICJzIgotCSMgb3IgInMg ZSBpIHUiIG9yIGV2ZW4gInMgZSBzIGkgdSBvIgotCSMgZm9yIHRoZSBsYXR0ZXIsIHlvdSBzaG91 bGQgc2V0IFhFTkRPTUFJTlNfVVNMRUVQIHRvIDEyMDAwMDAgb3Igc28KLQlpZiB0ZXN0IC1uICIk WEVORE9NQUlOU19TWVNSUSI7IHRoZW4KLQkgICAgZm9yIHN5c3JxIGluICRYRU5ET01BSU5TX1NZ U1JROyBkbwotCQllY2hvIC1uICIoU1ItJHN5c3JxKSIKLQkJWE1SPWAkQ01EIHN5c3JxICRpZCAk c3lzcnEgMj4mMSAxPi9kZXYvbnVsbGAKLQkJaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgotCQkgICAg ZWNobyAtZSAiXG5BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBkb2luZyBzeXNycSBvbiBkb21haW46 XG4kWE1SXG4iCi0JCSAgICByY19mYWlsZWQgJD8KLQkJICAgIGVjaG8gLW4gJyEnCi0JCWZpCi0J CSMgdXNsZWVwIGp1c3QgaWdub3JlcyBlbXB0eSBhcmcKLQkJdXNsZWVwICRYRU5ET01BSU5TX1VT TEVFUAotCSAgICBkb25lCi0JZmkKLQlpZiB0ZXN0ICIkc3RhdGUiID0gIi1iLS0tZCIgLW8gIiRz dGF0ZSIgPSAiLS0tLS1kIjsgdGhlbgotCSAgICBlY2hvIC1uICIoem9tYikiCi0JICAgIGNvbnRp bnVlCi0JZmkKLQlpZiB0ZXN0IC1uICIkWEVORE9NQUlOU19NSUdSQVRFIjsgdGhlbgotCSAgICBl Y2hvIC1uICIobWlncikiCi0JICAgIHdhdGNoZG9nX3hlbmNtZCBtaWdyYXRlICYKLQkgICAgV0RP R19QSUQ9JCEKLQkgICAgWE1SPWAkQ01EIG1pZ3JhdGUgJGlkICRYRU5ET01BSU5TX01JR1JBVEUg Mj4mMSAxPi9kZXYvbnVsbGAKLQkgICAgaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgotCQllY2hvIC1l ICJcbkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIG1pZ3JhdGluZyBkb21haW46XG4kWE1SXG4iCi0J CXJjX2ZhaWxlZCAkPwotCQllY2hvIC1lICchJwotCi0JCWtpbGwgJFdET0dfUElEID4vZGV2L251 bGwgMj4mMQotCSAgICBlbHNlCi0JCWtpbGwgJFdET0dfUElEID4vZGV2L251bGwgMj4mMQotCi0J CWVjaG8gLWUgLgotCQl1c2xlZXAgMTAwMAotCQljb250aW51ZQotCSAgICBmaQotCWZpCi0JaWYg dGVzdCAtbiAiJFhFTkRPTUFJTlNfU0FWRSI7IHRoZW4KLQkgICAgZWNobyAtbiAiKHNhdmUpIgot CSAgICB3YXRjaGRvZ194ZW5jbWQgc2F2ZSAmCi0JICAgIFdET0dfUElEPSQhCi0JICAgIG1rZGly IC1wICIkWEVORE9NQUlOU19TQVZFIgotCSAgICBYTVI9YCRDTUQgc2F2ZSAkaWQgJFhFTkRPTUFJ TlNfU0FWRS8kbmFtZSAyPiYxIDE+L2Rldi9udWxsYAotCSAgICBpZiB0ZXN0ICQ/IC1uZSAwOyB0 aGVuCi0JCWVjaG8gLWUgIlxuQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nIGRvbWFpbjpc biRYTVJcbiIKLQkJcmNfZmFpbGVkICQ/Ci0JCWVjaG8gLWUgJyEnCi0JCWtpbGwgJFdET0dfUElE ID4vZGV2L251bGwgMj4mMQotCSAgICBlbHNlCi0JCWtpbGwgJFdET0dfUElEID4vZGV2L251bGwg Mj4mMQotCQllY2hvIC1lIC4KLQkJdXNsZWVwIDEwMDAKLQkJY29udGludWUKLQkgICAgZmkKLQlm aQotCWlmIHRlc3QgLW4gIiRYRU5ET01BSU5TX1NIVVRET1dOIjsgdGhlbgotCSAgICAjIFhFTkRP TUFJTlNfU0hVVERPV04gc2hvdWxkIGJlICItLXdhaXQiCi0JICAgIGVjaG8gLW4gIihzaHV0KSIK LQkgICAgd2F0Y2hkb2dfeGVuY21kIHNodXRkb3duICYKLQkgICAgV0RPR19QSUQ9JCEKLQkgICAg WE1SPWAkQ01EIHNodXRkb3duICRYRU5ET01BSU5TX1NIVVRET1dOICRpZCAyPiYxIDE+L2Rldi9u dWxsYAotCSAgICBpZiB0ZXN0ICQ/IC1uZSAwOyB0aGVuCi0JCWVjaG8gLWUgIlxuQW4gZXJyb3Ig b2NjdXJyZWQgd2hpbGUgc2h1dHRpbmcgZG93biBkb21haW46XG4kWE1SXG4iCi0JCXJjX2ZhaWxl ZCAkPwotCQllY2hvIC1lICchJwotCSAgICBmaQotCSAgICBraWxsICRXRE9HX1BJRCA+L2Rldi9u dWxsIDI+JjEKLQlmaQotICAgIGRvbmUgPCA8KCRDTUQgbGlzdCAtbCB8IGdyZXAgIiRMSVNUX0dS RVAiKQotCi0gICAgIyBOQi4gdGhpcyBzaHV0cyBkb3duIEFMTCBYZW4gZG9tYWlucyAocG9saXRl bHkpLCBub3QganVzdCB0aGUgb25lcyBpbgotICAgICMgQVVUT0RJUi8qCi0gICAgIyBUaGlzIGlz IGJlY2F1c2UgaXQncyBlYXNpZXIgdG8gZG8gOy0pIGJ1dCBhcmd1YWJseSBpZiB0aGlzIHNjcmlw dCBpcyBydW4KLSAgICAjIG9uIHN5c3RlbSBzaHV0ZG93biB0aGVuIGl0J3MgYWxzbyB0aGUgcmln aHQgdGhpbmcgdG8gZG8uCi0gICAgaWYgISBhbGxfem9tYmllcyAmJiB0ZXN0IC1uICIkWEVORE9N QUlOU19TSFVURE9XTl9BTEwiOyB0aGVuCi0JIyBYRU5ET01BSU5TX1NIVVRET1dOX0FMTCBzaG91 bGQgYmUgIi0tYWxsIC0td2FpdCIKLQllY2hvIC1uICIgU0hVVERPV05fQUxMICIKLQl3YXRjaGRv Z194ZW5jbWQgc2h1dGRvd24gMSBmYWxzZSAmCi0JV0RPR19QSUQ9JCEKLQlYTVI9YCRDTUQgc2h1 dGRvd24gJFhFTkRPTUFJTlNfU0hVVERPV05fQUxMIDI+JjEgMT4vZGV2L251bGxgCi0JaWYgdGVz dCAkPyAtbmUgMDsgdGhlbgotCSAgICBlY2hvIC1lICJcbkFuIGVycm9yIG9jY3VycmVkIHdoaWxl IHNodXR0aW5nIGRvd24gYWxsIGRvbWFpbnM6ICRYTVJcbiIKLQkgICAgcmNfZmFpbGVkICQ/Ci0J ICAgIGVjaG8gLWUgJyEnCi0JZmkKLQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKLSAg ICBmaQotCi0gICAgIyBVbmNvbmRpdGlvbmFsbHkgZGVsZXRlIGxvY2sgZmlsZQotICAgIHJtIC1m ICRMT0NLRklMRQotCi0gICAgZXhlYyAyPiYzCi19Ci0KLWNoZWNrX2RvbWFpbl91cCgpCi17Ci0g ICAgbmFtZT07aWQ9Ci0gICAgd2hpbGUgcmVhZCBMTjsgZG8KLQlwYXJzZWxuICIkTE4iIHx8IGNv bnRpbnVlCi0JaWYgdGVzdCAkaWQgPSAwOyB0aGVuIGNvbnRpbnVlOyBmaQotCWNhc2UgJG5hbWUg aW4KLQkgICAgKCQxKQotCQlyZXR1cm4gMAotCQk7OwotCWVzYWMKLSAgICBkb25lIDwgPCgkQ01E IGxpc3QgLWwgfCBncmVwICIkTElTVF9HUkVQIikKLSAgICByZXR1cm4gMQotfQotCi1jaGVja19h bGxfYXV0b19kb21haW5zX3VwKCkKLXsKLSAgICBpZiAhIGNvbnRhaW5zX3NvbWV0aGluZyAiJFhF TkRPTUFJTlNfQVVUTyIKLSAgICB0aGVuCi0gICAgICByZXR1cm4gMAotICAgIGZpCi0gICAgbWlz c2luZz0KLSAgICBmb3Igbm0gaW4gJFhFTkRPTUFJTlNfQVVUTy8qOyBkbwotCXJkbmFtZSAkbm0K LQlmb3VuZD0wCi0JaWYgY2hlY2tfZG9tYWluX3VwICIkTk0iOyB0aGVuCi0JICAgIGVjaG8gLW4g IiAkbmFtZSIKLQllbHNlCi0JICAgIG1pc3Npbmc9IiRtaXNzaW5nICROTSIKLQlmaQotICAgIGRv bmUKLSAgICBpZiB0ZXN0IC1uICIkbWlzc2luZyI7IHRoZW4KLQllY2hvIC1uICIgTUlTUyBBVVRP OiRtaXNzaW5nIgotCXJldHVybiAxCi0gICAgZmkKLSAgICByZXR1cm4gMAotfQotCi1jaGVja19h bGxfc2F2ZWRfZG9tYWluc191cCgpCi17Ci0gICAgaWYgISBjb250YWluc19zb21ldGhpbmcgIiRY RU5ET01BSU5TX1NBVkUiCi0gICAgdGhlbgotICAgICAgcmV0dXJuIDAKLSAgICBmaQotICAgIG1p c3Npbmc9YC9iaW4vbHMgJFhFTkRPTUFJTlNfU0FWRWAKLSAgICBlY2hvIC1uICIgTUlTUyBTQVZF RDogIiAkbWlzc2luZwotICAgIHJldHVybiAxCi19Ci0KLSMgVGhpcyBkb2VzIE5PVCBuZWNlc3Nh cmlseSByZXN0YXJ0IGFsbCBydW5uaW5nIGRvbWFpbnM6IGluc3RlYWQgaXQKLSMgc3RvcHMgYWxs IHJ1bm5pbmcgZG9tYWlucyBhbmQgdGhlbiBib290cyBhbGwgdGhlIGRvbWFpbnMgc3BlY2lmaWVk IGluCi0jIEFVVE9ESVIuICBJZiBvdGhlciBkb21haW5zIGhhdmUgYmVlbiBzdGFydGVkIG1hbnVh bGx5IHRoZW4gdGhleSB3aWxsCi0jIG5vdCBnZXQgcmVzdGFydGVkLgotIyBDb21tZW50ZWQgb3V0 IHRvIGF2b2lkIGNvbmZ1c2lvbiEKLQotcmVzdGFydCgpCi17Ci0gICAgc3RvcAotICAgIHN0YXJ0 Ci19Ci0KLXJlbG9hZCgpCi17Ci0gICAgcmVzdGFydAotfQotCi0KIGNhc2UgIiQxIiBpbgogICAg IHN0YXJ0KQotCXN0YXJ0Ci0JcmNfc3RhdHVzCi0JaWYgdGVzdCAtZiAkTE9DS0ZJTEU7IHRoZW4g cmNfc3RhdHVzIC12OyBmaQorCSRTQklORElSL3hlbmRvbWFpbnMgc3RhcnQKIAk7OwotCiAgICAg c3RvcCkKLQlzdG9wCi0JcmNfc3RhdHVzIC12CisJJFNCSU5ESVIveGVuZG9tYWlucyBzdG9wCiAJ OzsKLQogICAgIHJlc3RhcnQpCi0JcmVzdGFydAorCSRTQklORElSL3hlbmRvbWFpbnMgcmVzdGFy dAogCTs7CiAgICAgcmVsb2FkKQotCXJlbG9hZAorCSRTQklORElSL3hlbmRvbWFpbnMgcmVsb2Fk CiAJOzsKLQogICAgIHN0YXR1cykKLQllY2hvIC1uICJDaGVja2luZyBmb3IgeGVuZG9tYWluczoi Ci0JaWYgdGVzdCAhIC1mICRMT0NLRklMRTsgdGhlbgotCSAgICByY19mYWlsZWQgMwotCWVsc2UK LQkgICAgY2hlY2tfYWxsX2F1dG9fZG9tYWluc191cAotCSAgICByY19zdGF0dXMKLQkgICAgY2hl Y2tfYWxsX3NhdmVkX2RvbWFpbnNfdXAKLQkgICAgcmNfc3RhdHVzCi0JZmkKLQlyY19zdGF0dXMg LXYKKwkkU0JJTkRJUi94ZW5kb21haW5zIHN0YXR1cwogCTs7Ci0KICAgICAqKQogCWVjaG8gIlVz YWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fHJlbG9hZHxzdGF0dXN9IgotCXJjX2ZhaWxlZCAz Ci0JcmNfc3RhdHVzIC12CisJZXhpdCAzCiAJOzsKIGVzYWMKLQotcmNfZXhpdAorZXhpdCAkPwpk aWZmIC0tZ2l0IGEvdG9vbHMvaG90cGx1Zy9MaW51eC94ZW5kb21haW5zIGIvdG9vbHMvaG90cGx1 Zy9MaW51eC94ZW5kb21haW5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4 NzU2OGQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9ob3RwbHVnL0xpbnV4L3hlbmRvbWFpbnMK QEAgLTAsMCArMSw1ODUgQEAKKyMhL2Jpbi9iYXNoCisjCisjIC9ldGMvaW5pdC5kL3hlbmRvbWFp bnMKKyMgU3RhcnQgLyBzdG9wIGRvbWFpbnMgYXV0b21hdGljYWxseSB3aGVuIGRvbWFpbiAwIGJv b3RzIC8gc2h1dHMgZG93bi4KKyMKKyMgY2hrY29uZmlnOiAzNDUgOTkgMDAKKyMgZGVzY3JpcHRp b246IFN0YXJ0IC8gc3RvcCBYZW4gZG9tYWlucy4KKyMKKyMgVGhpcyBzY3JpcHQgb2ZmZXJzIGZh aXJseSBiYXNpYyBmdW5jdGlvbmFsaXR5LiAgSXQgc2hvdWxkIHdvcmsgb24gUmVkaGF0CisjIGJ1 dCBhbHNvIG9uIExTQi1jb21wbGlhbnQgU3VTRSByZWxlYXNlcyBhbmQgb24gRGViaWFuIHdpdGgg dGhlIExTQiBwYWNrYWdlCisjIGluc3RhbGxlZC4gIChMU0IgaXMgdGhlIExpbnV4IFN0YW5kYXJk IEJhc2UpCisjCisjIEJhc2VkIG9uIHRoZSBleGFtcGxlIGluIHRoZSAiRGVzaWduaW5nIEhpZ2gg UXVhbGl0eSBJbnRlZ3JhdGVkIExpbnV4CisjIEFwcGxpY2F0aW9ucyBIT1dUTyIgYnkgQXZpIEFs a2FsYXkKKyMgPGh0dHA6Ly93d3cudGxkcC5vcmcvSE9XVE8vSGlnaFF1YWxpdHktQXBwcy1IT1dU Ty8+CisjCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB4ZW5kb21h aW5zCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkc3lzbG9nICRyZW1vdGVfZnMgeGVuc3RvcmVkIHhl bmNvbnNvbGVkCisjIFNob3VsZC1TdGFydDogICAgICB4ZW5kCisjIFJlcXVpcmVkLVN0b3A6ICAg ICAkc3lzbG9nICRyZW1vdGVfZnMgeGVuc3RvcmVkIHhlbmNvbnNvbGVkCisjIFNob3VsZC1TdG9w OiAgICAgICB4ZW5kCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNQorIyBEZWZhdWx0LVN0b3A6 ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFN0YXJ0L3N0b3Agc2Vjb25kYXJ5IHhl biBkb21haW5zCisjIERlc2NyaXB0aW9uOiAgICAgICBTdGFydCAvIHN0b3AgZG9tYWlucyBhdXRv bWF0aWNhbGx5IHdoZW4gZG9tYWluIDAKKyMgICAgICAgICAgICAgICAgICAgIGJvb3RzIC8gc2h1 dHMgZG93bi4KKyMjIyBFTkQgSU5JVCBJTkZPCisKKy4gL2V0Yy94ZW4vc2NyaXB0cy9ob3RwbHVn cGF0aC5zaAorCitDTUQ9JHtTQklORElSfS94bAorSEVBRENPTVA9IlhlbiBzYXZlZCBkb21haW4i CiskQ01EIGxpc3QgJj4gL2Rldi9udWxsCitpZiB0ZXN0ICQ/IC1uZSAwCit0aGVuCisJQ01EPSR7 U0JJTkRJUn0veG0KKwlIRUFEQ09NUD0iTGludXhHdWVzdFJlY29yZCIKK2ZpCisKKyRDTUQgbGlz dCAmPiAvZGV2L251bGwKK2lmIHRlc3QgJD8gLW5lIDAKK3RoZW4KKwlleGl0IDA7CitmaQorCisj IENvcnJlY3QgZXhpdCBjb2RlIHdvdWxkIHByb2JhYmx5IGJlIDUsIGJ1dCBpdCdzIGVub3VnaAor IyBpZiB4ZW5kIGNvbXBsYWlucyBpZiB3ZSdyZSBub3QgcnVubmluZyBhcyBwcml2aWxlZ2VkIGRv bWFpbgoraWYgISBbIC1lIC9wcm9jL3hlbi9wcml2Y21kIF07IHRoZW4KKwlleGl0IDAKK2ZpCisK KyMgU2VlIGRvY3MvbWlzYy9kaXN0cm9fbWFwcGluZy50eHQKK2lmIFsgLWQgL3Zhci9sb2NrL3N1 YnN5cyBdOyB0aGVuCisJTE9DS0ZJTEU9L3Zhci9sb2NrL3N1YnN5cy94ZW5kb21haW5zCitlbHNl CisJTE9DS0ZJTEU9L3Zhci9sb2NrL3hlbmRvbWFpbnMKK2ZpCisKK2lmIFsgLWQgL2V0Yy9zeXNj b25maWcgXTsgdGhlbgorCVhFTkRPTV9DT05GSUc9L2V0Yy9zeXNjb25maWcveGVuZG9tYWlucwor ZWxzZQorCVhFTkRPTV9DT05GSUc9L2V0Yy9kZWZhdWx0L3hlbmRvbWFpbnMKK2ZpCisKK3Rlc3Qg LXIgJFhFTkRPTV9DT05GSUcgfHwgeyBlY2hvICIkWEVORE9NX0NPTkZJRyBub3QgZXhpc3Rpbmci OworCWlmIFsgIiQxIiA9ICJzdG9wIiBdOyB0aGVuIGV4aXQgMDsKKwllbHNlIGV4aXQgNjsgZmk7 IH0KKworLiAkWEVORE9NX0NPTkZJRworCisjIFVzZSB0aGUgU1VTRSByY18gaW5pdCBzY3JpcHQg ZnVuY3Rpb25zOworIyBlbXVsYXRlIHRoZW0gb24gTFNCLCBSSCBhbmQgb3RoZXIgc3lzdGVtcwor aWYgdGVzdCAtZSAvZXRjL3JjLnN0YXR1czsgdGhlbgorICAgICMgU1VTRSByYyBzY3JpcHQgbGli cmFyeQorICAgIC4gL2V0Yy9yYy5zdGF0dXMKK2Vsc2UKKyAgICBfY21kPSQxCisgICAgZGVjbGFy ZSAtYSBfU01TRworICAgIGlmIHRlc3QgIiR7X2NtZH0iID0gInN0YXR1cyI7IHRoZW4KKwlfU01T Rz0ocnVubmluZyBkZWFkIGRlYWQgdW51c2VkIHVua25vd24pCisJX1JDX1VOVVNFRD0zCisgICAg ZWxzZQorCV9TTVNHPShkb25lIGZhaWxlZCBmYWlsZWQgbWlzc2VkIGZhaWxlZCBza2lwcGVkIHVu dXNlZCBmYWlsZWQgZmFpbGVkKQorCV9SQ19VTlVTRUQ9NgorICAgIGZpCisgICAgaWYgdGVzdCAt ZSAvZXRjL2luaXQuZC9mdW5jdGlvbnM7IHRoZW4KKwkjIFJFREhBVAorCS4gL2V0Yy9pbml0LmQv ZnVuY3Rpb25zCisJZWNob19yYygpCisJeworCSAgICAjZWNobyAtbiAiICBbJHtfU01TR1ske19S Q19SVn1dfV0gIgorCSAgICBpZiB0ZXN0ICR7X1JDX1JWfSA9IDA7IHRoZW4KKwkJc3VjY2VzcyAi ICBbJHtfU01TR1ske19SQ19SVn1dfV0gIgorCSAgICBlbHNlCisJCWZhaWx1cmUgIiAgWyR7X1NN U0dbJHtfUkNfUlZ9XX1dICIKKwkgICAgZmkKKwl9CisgICAgZWxpZiB0ZXN0IC1lIC9saWIvbHNi L2luaXQtZnVuY3Rpb25zOyB0aGVuCisJIyBMU0IKKyAgICAJLiAvbGliL2xzYi9pbml0LWZ1bmN0 aW9ucworICAgICAgICBpZiBhbGlhcyBsb2dfc3VjY2Vzc19tc2cgPi9kZXYvbnVsbCAyPi9kZXYv bnVsbDsgdGhlbgorCSAgZWNob19yYygpCisJICB7CisJICAgICAgIGVjaG8gIiAgWyR7X1NNU0db JHtfUkNfUlZ9XX1dICIKKwkgIH0KKyAgICAgICAgZWxzZQorCSAgZWNob19yYygpCisJICB7CisJ ICAgIGlmIHRlc3QgJHtfUkNfUlZ9ID0gMDsgdGhlbgorCQlsb2dfc3VjY2Vzc19tc2cgIiAgWyR7 X1NNU0dbJHtfUkNfUlZ9XX1dICIKKwkgICAgZWxzZQorCQlsb2dfZmFpbHVyZV9tc2cgIiAgWyR7 X1NNU0dbJHtfUkNfUlZ9XX1dICIKKwkgICAgZmkKKwkgIH0KKyAgICAgICAgZmkKKyAgICBlbHNl CisJIyBlbXVsYXRlIGl0CisJZWNob19yYygpCisJeworCSAgICBlY2hvICIgIFske19TTVNHWyR7 X1JDX1JWfV19XSAiCisJfQorICAgIGZpCisgICAgcmNfcmVzZXQoKSB7IF9SQ19SVj0wOyB9Cisg ICAgcmNfZmFpbGVkKCkKKyAgICB7CisJaWYgdGVzdCAteiAiJDEiOyB0aGVuCisJICAgIF9SQ19S Vj0xOworCWVsaWYgdGVzdCAiJDEiICE9ICIwIjsgdGhlbgorCSAgICBfUkNfUlY9JDE7CisJZmkK KwlyZXR1cm4gJHtfUkNfUlZ9CisgICAgfQorICAgIHJjX2NoZWNrKCkKKyAgICB7CisJcmV0dXJu IHJjX2ZhaWxlZCAkPworICAgIH0KKyAgICByY19zdGF0dXMoKQorICAgIHsKKwlyY19mYWlsZWQg JD8KKwlpZiB0ZXN0ICIkMSIgPSAiLXIiOyB0aGVuIF9SQ19SVj0wOyBzaGlmdDsgZmkKKwlpZiB0 ZXN0ICIkMSIgPSAiLXMiOyB0aGVuIHJjX2ZhaWxlZCA1OyBlY2hvX3JjOyByY19mYWlsZWQgMzsg c2hpZnQ7IGZpCisJaWYgdGVzdCAiJDEiID0gIi11IjsgdGhlbiByY19mYWlsZWQgJHtfUkNfVU5V U0VEfTsgZWNob19yYzsgcmNfZmFpbGVkIDM7IHNoaWZ0OyBmaQorCWlmIHRlc3QgIiQxIiA9ICIt diI7IHRoZW4gZWNob19yYzsgc2hpZnQ7IGZpCisJaWYgdGVzdCAiJDEiID0gIi1yIjsgdGhlbiBf UkNfUlY9MDsgc2hpZnQ7IGZpCisJcmV0dXJuICR7X1JDX1JWfQorICAgIH0KKyAgICByY19leGl0 KCkgeyBleGl0ICR7X1JDX1JWfTsgfQorICAgIHJjX2FjdGl2ZSgpCisgICAgeworCWlmIHRlc3Qg LXogIiRSVU5MRVZFTCI7IHRoZW4gcmVhZCBSVU5MRVZFTCBSRVNUIDwgPCgvc2Jpbi9ydW5sZXZl bCk7IGZpCisJaWYgdGVzdCAtZSAvZXRjL2luaXQuZC9TWzAtOV1bMC05XSR7MX07IHRoZW4gcmV0 dXJuIDA7IGZpCisJcmV0dXJuIDEKKyAgICB9CitmaQorCitpZiAhIHdoaWNoIHVzbGVlcCA+Ji9k ZXYvbnVsbAordGhlbgorICB1c2xlZXAoKQorICB7CisgICAgaWYgWyAtbiAiJDEiIF0KKyAgICB0 aGVuCisgICAgICBzbGVlcCAkKCggJDEgLyAxMDAwMDAwICkpCisgICAgZmkKKyAgfQorZmkKKwor IyBSZXNldCBzdGF0dXMgb2YgdGhpcyBzZXJ2aWNlCityY19yZXNldAorCisjIworIyBSZXR1cm5z IDAgKHN1Y2Nlc3MpIGlmIHRoZSBnaXZlbiBwYXJhbWV0ZXIgbmFtZXMgYSBkaXJlY3RvcnksIGFu ZCB0aGF0CisjIGRpcmVjdG9yeSBpcyBub3QgZW1wdHkuCisjCitjb250YWluc19zb21ldGhpbmco KQoreworICBpZiBbIC1kICIkMSIgXSAmJiBbIGAvYmluL2xzICQxIHwgd2MgLWxgIC1ndCAwIF0K KyAgdGhlbgorICAgIHJldHVybiAwCisgIGVsc2UKKyAgICByZXR1cm4gMQorICBmaQorfQorCisj IHJlYWQgbmFtZSBmcm9tIHhlbiBjb25maWcgZmlsZQorcmRuYW1lKCkKK3sKKyAgICBOTT0kKCRD TUQgY3JlYXRlIC0tcXVpZXQgLS1kcnlydW4gLS1kZWZjb25maWcgIiQxIiB8CisgICAgICAgICBz ZWQgLW4gJ3MvXi4qKG5hbWUgXCguKlwpKSQvXDEvcDtzL14uKiJuYW1lIjogIlwoLipcKSIsJC9c MS9wJykKK30KKworcmRuYW1lcygpCit7CisgICAgTkFNRVM9CisgICAgaWYgISBjb250YWluc19z b21ldGhpbmcgIiRYRU5ET01BSU5TX0FVVE8iCisgICAgdGhlbgorCXJldHVybgorICAgIGZpCisg ICAgZm9yIGRvbSBpbiAkWEVORE9NQUlOU19BVVRPLyo7IGRvCisJcmRuYW1lICRkb20KKwlpZiB0 ZXN0IC16ICROQU1FUzsgdGhlbgorCSAgICBOQU1FUz0kTk07CisJZWxzZQorCSAgICBOQU1FUz0i JE5BTUVTfCROTSIKKwlmaQorICAgIGRvbmUKK30KKworTElTVF9HUkVQPScoZG9tYWluXHwoZG9t aWRcfChuYW1lXHxeICAgIHskXHwibmFtZSI6XHwiZG9taWQiOicKK3BhcnNlbG4oKQoreworICAg IGlmIFtbICIkMSIgPX4gJyhkb21haW4nIF1dIHx8IFtbICIkMSIgPSAieyIgXV07IHRoZW4KKyAg ICAgICAgbmFtZT07aWQ9CisgICAgZWxpZiBbWyAiJDEiID1+ICcobmFtZScgXV07IHRoZW4KKyAg ICAgICAgbmFtZT0kKGVjaG8gJDEgfCBzZWQgLWUgJ3MvXi4qKG5hbWUgXCguKlwpKSQvXDEvJykK KyAgICBlbGlmIFtbICIkMSIgPX4gJyhkb21pZCcgXV07IHRoZW4KKyAgICAgICAgaWQ9JChlY2hv ICQxIHwgc2VkIC1lICdzL14uKihkb21pZCBcKC4qXCkpJC9cMS8nKQorICAgIGVsaWYgW1sgIiQx IiA9fiAnIm5hbWUiOicgXV07IHRoZW4KKyAgICAgICAgbmFtZT0kKGVjaG8gJDEgfCBzZWQgLWUg J3MvXi4qIm5hbWUiOiAiXCguKlwpIiwkL1wxLycpCisgICAgZWxpZiBbWyAiJDEiID1+ICciZG9t aWQiOicgXV07IHRoZW4KKyAgICAgICAgaWQ9JChlY2hvICQxIHwgc2VkIC1lICdzL14uKiJkb21p ZCI6IFwoLipcKSwkL1wxLycpCisgICAgZmkKKworICAgIFsgLW4gIiRuYW1lIiAtYSAtbiAiJGlk IiBdICYmIHJldHVybiAwIHx8IHJldHVybiAxCit9CisKK2lzX3J1bm5pbmcoKQoreworICAgIHJk bmFtZSAkMQorICAgIFJDPTEKKyAgICBuYW1lPTtpZD0KKyAgICB3aGlsZSByZWFkIExOOyBkbwor CXBhcnNlbG4gIiRMTiIgfHwgY29udGludWUKKwlpZiB0ZXN0ICRpZCA9IDA7IHRoZW4gY29udGlu dWU7IGZpCisJY2FzZSAkbmFtZSBpbgorCSAgICAoJE5NKQorCQlSQz0wCisJCTs7CisJZXNhYwor ICAgIGRvbmUgPCA8KCRDTUQgbGlzdCAtbCB8IGdyZXAgIiRMSVNUX0dSRVAiKQorICAgIHJldHVy biAkUkMKK30KKworc3RhcnQoKQoreworICAgIGlmIFsgLWYgJExPQ0tGSUxFIF07IHRoZW4KKwll Y2hvIC1lICJ4ZW5kb21haW5zIGFscmVhZHkgcnVubmluZyAobG9ja2ZpbGUgZXhpc3RzKSIKKwly ZXR1cm47CisgICAgZmkKKworICAgIHNhdmVkX2RvbWFpbnM9IiAiCisgICAgaWYgWyAiJFhFTkRP TUFJTlNfUkVTVE9SRSIgPSAidHJ1ZSIgXSAmJgorICAgICAgIGNvbnRhaW5zX3NvbWV0aGluZyAi JFhFTkRPTUFJTlNfU0FWRSIKKyAgICB0aGVuCisJbWtkaXIgLXAgJChkaXJuYW1lICIkTE9DS0ZJ TEUiKQorCXRvdWNoICRMT0NLRklMRQorCWVjaG8gLW4gIlJlc3RvcmluZyBYZW4gZG9tYWluczoi CisJc2F2ZWRfZG9tYWlucz1gbHMgJFhFTkRPTUFJTlNfU0FWRWAKKyAgICAgICAgZm9yIGRvbSBp biAkWEVORE9NQUlOU19TQVZFLyo7IGRvCisgICAgICAgICAgICBpZiBbIC1mICRkb20gXSA7IHRo ZW4KKyAgICAgICAgICAgICAgICBIRUFERVI9YGhlYWQgLWMgMTYgJGRvbSB8IGhlYWQgLW4gMSAy PiAvZGV2L251bGxgCisgICAgICAgICAgICAgICAgaWYgWyAiJEhFQURFUiIgPSAiJEhFQURDT01Q IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGVjaG8gLW4gIiAke2RvbSMjKi99IgorICAg ICAgICAgICAgICAgICAgICBYTVI9YCRDTUQgcmVzdG9yZSAkZG9tIDI+JjEgMT4vZGV2L251bGxg CisgICAgICAgICAgICAgICAgICAgICMkQ01EIHJlc3RvcmUgJGRvbQorICAgICAgICAgICAgICAg ICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8g LWUgIlxuQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVzdG9yaW5nIGRvbWFpbiAke2RvbSMjKi99 OlxuJFhNUiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjX2ZhaWxlZCAkPworICAgICAgICAg ICAgICAgICAgICAgICAgZWNobyAtZSAnIScKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICAgICAgICAgICAgIyBtdiAkZG9tICR7ZG9tJS8qfS8uJHtkb20jIyovfQorICAg ICAgICAgICAgICAgICAgICAgICAgcm0gJGRvbQorICAgICAgICAgICAgICAgICAgICBmaQorICAg ICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisJZWNobyAtZQor ICAgIGZpCisKKyAgICBpZiBjb250YWluc19zb21ldGhpbmcgIiRYRU5ET01BSU5TX0FVVE8iCisg ICAgdGhlbgorCXRvdWNoICRMT0NLRklMRQorCWVjaG8gLW4gIlN0YXJ0aW5nIGF1dG8gWGVuIGRv bWFpbnM6IgorCSMgV2UgZXhwZWN0IGNvbmZpZyBzY3JpcHRzIGZvciBhdXRvIHN0YXJ0aW5nIGRv bWFpbnMgdG8gYmUgaW4KKwkjIFhFTkRPTUFJTlNfQVVUTyAtIHRoZXkgY291bGQganVzdCBiZSBz eW1saW5rcyB0byBmaWxlcyBlbHNld2hlcmUKKworCSMgQ3JlYXRlIGFsbCBkb21haW5zIHdpdGgg Y29uZmlnIGZpbGVzIGluIFhFTkRPTUFJTlNfQVVUTy4KKwkjIFRPRE86IFdlIHNob3VsZCByZWNv cmQgd2hpY2ggZG9tYWluIG5hbWUgYmVsb25ncworCSMgc28gd2UgaGF2ZSB0aGUgb3B0aW9uIHRv IHNlbGVjdGl2ZWx5IHNodXQgZG93biAvIG1pZ3JhdGUgbGF0ZXIKKwkjIElmIGEgZG9tYWluIHN0 YXRlZmlsZSBmcm9tICRYRU5ET01BSU5TX1NBVkUgbWF0Y2hlcyBhIGRvbWFpbiBuYW1lCisJIyBp biAkWEVORE9NQUlOU19BVVRPLCBkbyBub3QgdHJ5IHRvIHN0YXJ0IHRoYXQgZG9tYWluOyBpZiBp dCBkaWRuJ3QKKwkjIHJlc3RvcmUgY29ycmVjdGx5IGl0IHJlcXVpcmVzIGFkbWluaXN0cmF0aXZl IGF0dGVudGlvbi4KKwlmb3IgZG9tIGluICRYRU5ET01BSU5TX0FVVE8vKjsgZG8KKwkgICAgZWNo byAtbiAiICR7ZG9tIyMqL30iCisJICAgIHNob3J0ZG9tPSQoZWNobyAkZG9tIHwgc2VkIC1uICdz L14uKlwvXCguKlwpJC9cMS9wJykKKwkgICAgZWNobyAkc2F2ZWRfZG9tYWlucyB8IGdyZXAgLXcg JHNob3J0ZG9tID4gL2Rldi9udWxsCisJICAgIGlmIFsgJD8gLWVxIDAgXSB8fCBpc19ydW5uaW5n ICRkb207IHRoZW4KKwkJZWNobyAtbiAiKHNraXApIgorCSAgICBlbHNlCisJCVhNQz1gJENNRCBj cmVhdGUgLS1xdWlldCAtLWRlZmNvbmZpZyAkZG9tYAorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4K KwkJICAgIGVjaG8gLWUgIlxuQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY3JlYXRpbmcgZG9tYWlu ICR7ZG9tIyMqL306ICRYTUNcbiIKKwkJICAgIHJjX2ZhaWxlZCAkPworCQkgICAgZWNobyAtZSAn IScKKwkJZWxzZQorCQkgICAgdXNsZWVwICRYRU5ET01BSU5TX0NSRUFURV9VU0xFRVAKKwkJZmkK KwkgICAgZmkKKwlkb25lCisgICAgZmkKK30KKworYWxsX3pvbWJpZXMoKQoreworICAgIG5hbWU9 O2lkPQorICAgIHdoaWxlIHJlYWQgTE47IGRvCisJcGFyc2VsbiAiJExOIiB8fCBjb250aW51ZQor CWlmIHRlc3QgJGlkID0gMDsgdGhlbiBjb250aW51ZTsgZmkKKwlpZiB0ZXN0ICIkc3RhdGUiICE9 ICItYi0tLWQiIC1hICIkc3RhdGUiICE9ICItLS0tLWQiOyB0aGVuCisJICAgIHJldHVybiAxOwor CWZpCisgICAgZG9uZSA8IDwoJENNRCBsaXN0IC1sIHwgZ3JlcCAiJExJU1RfR1JFUCIpCisgICAg cmV0dXJuIDAKK30KKworIyBXYWl0IGZvciBtYXggJFhFTkRPTUFJTlNfU1RPUF9NQVhXQUlUIGZv ciAkQ01EICQxIHRvIGZpbmlzaDsKKyMgaWYgaXQgaGFzIG5vdCBleGl0ZWQgYnkgdGhhdCB0aW1l IGtpbGwgaXQsIHNvIHRoZSBpbml0IHNjcmlwdCB3aWxsCisjIHN1Y2NlZWQgd2l0aGluIGEgZmlu aXRlIGFtb3VudCBvZiB0aW1lOyBpZiAkMiBpcyBub25udWxsLCBpdCB3aWxsCisjIGtpbGwgdGhl IGNvbW1hbmQgYXMgd2VsbCBhcyBzb29uIGFzIG5vIGRvbWFpbiAoZXhjZXB0IGZvciB6b21iaWVz KQorIyBhcmUgbGVmdCAodXNlZCBmb3Igc2h1dGRvd24gLS1hbGwpLiBUaGlyZCBwYXJhbWV0ZXIs IGlmIGFueSwgc3VwcHJlc3NlcworIyBvdXRwdXQgb2YgZG90cyBwZXIgd29ya2luZyBzdGF0ZSAo Zm9ybWF0dGluZyBpc3N1ZXMpCit3YXRjaGRvZ194ZW5jbWQoKQoreworICAgIGlmIHRlc3QgLXog IiRYRU5ET01BSU5TX1NUT1BfTUFYV0FJVCIgLW8gIiRYRU5ET01BSU5TX1NUT1BfTUFYV0FJVCIg PSAiMCI7IHRoZW4KKwlleGl0CisgICAgZmkKKworICAgIHVzbGVlcCAyMDAwMAorICAgIGZvciBu byBpbiBgc2VxIDAgJFhFTkRPTUFJTlNfU1RPUF9NQVhXQUlUYDsgZG8KKwkjIGV4aXQgaWYgJENN RCBzYXZlL21pZ3JhdGUvc2h1dGRvd24gaXMgZmluaXNoZWQKKwlQU0FYPWBwcyBheGx3IHwgZ3Jl cCAiJENNRCAkMSIgfCBncmVwIC12IGdyZXBgCisJaWYgdGVzdCAteiAiJFBTQVgiOyB0aGVuIGV4 aXQ7IGZpCisJaWYgISB0ZXN0IC1uICIkMyI7IHRoZW4gZWNobyAtbiAnLic7IGZpCisJc2xlZXAg MQorCSMgZ28gdG8ga2lsbCBpbW1lZGlhdGVseSBpZiB0aGVyZSdzIG9ubHkgem9tYmllcyBsZWZ0 CisJaWYgYWxsX3pvbWJpZXMgJiYgdGVzdCAtbiAiJDIiOyB0aGVuIGJyZWFrOyBmaQorICAgIGRv bmUKKyAgICBzbGVlcCAxCisgICAgcmVhZCBQU0YgUFNVSUQgUFNQSUQgUFNQUElEIDwgPChlY2hv ICIkUFNBWCIpCisgICAgIyBraWxsICRDTUQgJDEKKyAgICBraWxsICRQU1BJRCA+L2Rldi9udWxs IDI+JjEKKworICAgIGVjaG8gLWUgLgorfQorCitzdG9wKCkKK3sKKyAgICBleGVjIDM+JjIgMj4g L2Rldi9udWxsCisKKyAgICAjIENvbGxlY3QgbGlzdCBvZiBkb21haW5zIHRvIHNodXQgZG93bgor ICAgIGlmIHRlc3QgIiRYRU5ET01BSU5TX0FVVE9fT05MWSIgPSAidHJ1ZSI7IHRoZW4KKwlyZG5h bWVzCisgICAgZmkKKyAgICBlY2hvIC1uICJTaHV0dGluZyBkb3duIFhlbiBkb21haW5zOiIKKyAg ICBuYW1lPTtpZD0KKyAgICB3aGlsZSByZWFkIExOOyBkbworCXBhcnNlbG4gIiRMTiIgfHwgY29u dGludWUKKwlpZiB0ZXN0ICRpZCA9IDA7IHRoZW4gY29udGludWU7IGZpCisJZWNobyAtbiAiICRu YW1lIgorCWlmIHRlc3QgIiRYRU5ET01BSU5TX0FVVE9fT05MWSIgPSAidHJ1ZSI7IHRoZW4KKwkg ICAgZXZhbCAiCisJICAgIGNhc2UgXCJcJG5hbWVcIiBpbgorCQkoJE5BTUVTKQorCQkgICAgIyBu b3RoaW5nCisJCSAgICA7OworCQkoKikKKwkJICAgIGVjaG8gLWUgJyhza2lwKScKKwkJICAgIGNv bnRpbnVlCisJCSAgICA7OworCSAgICBlc2FjCisJICAgICIKKwlmaQorCSMgWEVORE9NQUlOU19T WVNSUSBjaG91bGQgYmUgc29tZXRoaW5nIGxpa2UganVzdCAicyIKKwkjIG9yICJzIGUgaSB1IiBv ciBldmVuICJzIGUgcyBpIHUgbyIKKwkjIGZvciB0aGUgbGF0dGVyLCB5b3Ugc2hvdWxkIHNldCBY RU5ET01BSU5TX1VTTEVFUCB0byAxMjAwMDAwIG9yIHNvCisJaWYgdGVzdCAtbiAiJFhFTkRPTUFJ TlNfU1lTUlEiOyB0aGVuCisJICAgIGZvciBzeXNycSBpbiAkWEVORE9NQUlOU19TWVNSUTsgZG8K KwkJZWNobyAtbiAiKFNSLSRzeXNycSkiCisJCVhNUj1gJENNRCBzeXNycSAkaWQgJHN5c3JxIDI+ JjEgMT4vZGV2L251bGxgCisJCWlmIHRlc3QgJD8gLW5lIDA7IHRoZW4KKwkJICAgIGVjaG8gLWUg IlxuQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZG9pbmcgc3lzcnEgb24gZG9tYWluOlxuJFhNUlxu IgorCQkgICAgcmNfZmFpbGVkICQ/CisJCSAgICBlY2hvIC1uICchJworCQlmaQorCQkjIHVzbGVl cCBqdXN0IGlnbm9yZXMgZW1wdHkgYXJnCisJCXVzbGVlcCAkWEVORE9NQUlOU19VU0xFRVAKKwkg ICAgZG9uZQorCWZpCisJaWYgdGVzdCAiJHN0YXRlIiA9ICItYi0tLWQiIC1vICIkc3RhdGUiID0g Ii0tLS0tZCI7IHRoZW4KKwkgICAgZWNobyAtbiAiKHpvbWIpIgorCSAgICBjb250aW51ZQorCWZp CisJaWYgdGVzdCAtbiAiJFhFTkRPTUFJTlNfTUlHUkFURSI7IHRoZW4KKwkgICAgZWNobyAtbiAi KG1pZ3IpIgorCSAgICB3YXRjaGRvZ194ZW5jbWQgbWlncmF0ZSAmCisJICAgIFdET0dfUElEPSQh CisJICAgIFhNUj1gJENNRCBtaWdyYXRlICRpZCAkWEVORE9NQUlOU19NSUdSQVRFIDI+JjEgMT4v ZGV2L251bGxgCisJICAgIGlmIHRlc3QgJD8gLW5lIDA7IHRoZW4KKwkJZWNobyAtZSAiXG5BbiBl cnJvciBvY2N1cnJlZCB3aGlsZSBtaWdyYXRpbmcgZG9tYWluOlxuJFhNUlxuIgorCQlyY19mYWls ZWQgJD8KKwkJZWNobyAtZSAnIScKKworCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEK KwkgICAgZWxzZQorCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKKworCQllY2hvIC1l IC4KKwkJdXNsZWVwIDEwMDAKKwkJY29udGludWUKKwkgICAgZmkKKwlmaQorCWlmIHRlc3QgLW4g IiRYRU5ET01BSU5TX1NBVkUiOyB0aGVuCisJICAgIGVjaG8gLW4gIihzYXZlKSIKKwkgICAgd2F0 Y2hkb2dfeGVuY21kIHNhdmUgJgorCSAgICBXRE9HX1BJRD0kIQorCSAgICBta2RpciAtcCAiJFhF TkRPTUFJTlNfU0FWRSIKKwkgICAgWE1SPWAkQ01EIHNhdmUgJGlkICRYRU5ET01BSU5TX1NBVkUv JG5hbWUgMj4mMSAxPi9kZXYvbnVsbGAKKwkgICAgaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgorCQll Y2hvIC1lICJcbkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNhdmluZyBkb21haW46XG4kWE1SXG4i CisJCXJjX2ZhaWxlZCAkPworCQllY2hvIC1lICchJworCQlraWxsICRXRE9HX1BJRCA+L2Rldi9u dWxsIDI+JjEKKwkgICAgZWxzZQorCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKKwkJ ZWNobyAtZSAuCisJCXVzbGVlcCAxMDAwCisJCWNvbnRpbnVlCisJICAgIGZpCisJZmkKKwlpZiB0 ZXN0IC1uICIkWEVORE9NQUlOU19TSFVURE9XTiI7IHRoZW4KKwkgICAgIyBYRU5ET01BSU5TX1NI VVRET1dOIHNob3VsZCBiZSAiLS13YWl0IgorCSAgICBlY2hvIC1uICIoc2h1dCkiCisJICAgIHdh dGNoZG9nX3hlbmNtZCBzaHV0ZG93biAmCisJICAgIFdET0dfUElEPSQhCisJICAgIFhNUj1gJENN RCBzaHV0ZG93biAkWEVORE9NQUlOU19TSFVURE9XTiAkaWQgMj4mMSAxPi9kZXYvbnVsbGAKKwkg ICAgaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgorCQllY2hvIC1lICJcbkFuIGVycm9yIG9jY3VycmVk IHdoaWxlIHNodXR0aW5nIGRvd24gZG9tYWluOlxuJFhNUlxuIgorCQlyY19mYWlsZWQgJD8KKwkJ ZWNobyAtZSAnIScKKwkgICAgZmkKKwkgICAga2lsbCAkV0RPR19QSUQgPi9kZXYvbnVsbCAyPiYx CisJZmkKKyAgICBkb25lIDwgPCgkQ01EIGxpc3QgLWwgfCBncmVwICIkTElTVF9HUkVQIikKKwor ICAgICMgTkIuIHRoaXMgc2h1dHMgZG93biBBTEwgWGVuIGRvbWFpbnMgKHBvbGl0ZWx5KSwgbm90 IGp1c3QgdGhlIG9uZXMgaW4KKyAgICAjIEFVVE9ESVIvKgorICAgICMgVGhpcyBpcyBiZWNhdXNl IGl0J3MgZWFzaWVyIHRvIGRvIDstKSBidXQgYXJndWFibHkgaWYgdGhpcyBzY3JpcHQgaXMgcnVu CisgICAgIyBvbiBzeXN0ZW0gc2h1dGRvd24gdGhlbiBpdCdzIGFsc28gdGhlIHJpZ2h0IHRoaW5n IHRvIGRvLgorICAgIGlmICEgYWxsX3pvbWJpZXMgJiYgdGVzdCAtbiAiJFhFTkRPTUFJTlNfU0hV VERPV05fQUxMIjsgdGhlbgorCSMgWEVORE9NQUlOU19TSFVURE9XTl9BTEwgc2hvdWxkIGJlICIt LWFsbCAtLXdhaXQiCisJZWNobyAtbiAiIFNIVVRET1dOX0FMTCAiCisJd2F0Y2hkb2dfeGVuY21k IHNodXRkb3duIDEgZmFsc2UgJgorCVdET0dfUElEPSQhCisJWE1SPWAkQ01EIHNodXRkb3duICRY RU5ET01BSU5TX1NIVVRET1dOX0FMTCAyPiYxIDE+L2Rldi9udWxsYAorCWlmIHRlc3QgJD8gLW5l IDA7IHRoZW4KKwkgICAgZWNobyAtZSAiXG5BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzaHV0dGlu ZyBkb3duIGFsbCBkb21haW5zOiAkWE1SXG4iCisJICAgIHJjX2ZhaWxlZCAkPworCSAgICBlY2hv IC1lICchJworCWZpCisJa2lsbCAkV0RPR19QSUQgPi9kZXYvbnVsbCAyPiYxCisgICAgZmkKKwor ICAgICMgVW5jb25kaXRpb25hbGx5IGRlbGV0ZSBsb2NrIGZpbGUKKyAgICBybSAtZiAkTE9DS0ZJ TEUKKworICAgIGV4ZWMgMj4mMworfQorCitjaGVja19kb21haW5fdXAoKQoreworICAgIG5hbWU9 O2lkPQorICAgIHdoaWxlIHJlYWQgTE47IGRvCisJcGFyc2VsbiAiJExOIiB8fCBjb250aW51ZQor CWlmIHRlc3QgJGlkID0gMDsgdGhlbiBjb250aW51ZTsgZmkKKwljYXNlICRuYW1lIGluCisJICAg ICgkMSkKKwkJcmV0dXJuIDAKKwkJOzsKKwllc2FjCisgICAgZG9uZSA8IDwoJENNRCBsaXN0IC1s IHwgZ3JlcCAiJExJU1RfR1JFUCIpCisgICAgcmV0dXJuIDEKK30KKworY2hlY2tfYWxsX2F1dG9f ZG9tYWluc191cCgpCit7CisgICAgaWYgISBjb250YWluc19zb21ldGhpbmcgIiRYRU5ET01BSU5T X0FVVE8iCisgICAgdGhlbgorICAgICAgcmV0dXJuIDAKKyAgICBmaQorICAgIG1pc3Npbmc9Cisg ICAgZm9yIG5tIGluICRYRU5ET01BSU5TX0FVVE8vKjsgZG8KKwlyZG5hbWUgJG5tCisJZm91bmQ9 MAorCWlmIGNoZWNrX2RvbWFpbl91cCAiJE5NIjsgdGhlbgorCSAgICBlY2hvIC1uICIgJG5hbWUi CisJZWxzZQorCSAgICBtaXNzaW5nPSIkbWlzc2luZyAkTk0iCisJZmkKKyAgICBkb25lCisgICAg aWYgdGVzdCAtbiAiJG1pc3NpbmciOyB0aGVuCisJZWNobyAtbiAiIE1JU1MgQVVUTzokbWlzc2lu ZyIKKwlyZXR1cm4gMQorICAgIGZpCisgICAgcmV0dXJuIDAKK30KKworY2hlY2tfYWxsX3NhdmVk X2RvbWFpbnNfdXAoKQoreworICAgIGlmICEgY29udGFpbnNfc29tZXRoaW5nICIkWEVORE9NQUlO U19TQVZFIgorICAgIHRoZW4KKyAgICAgIHJldHVybiAwCisgICAgZmkKKyAgICBtaXNzaW5nPWAv YmluL2xzICRYRU5ET01BSU5TX1NBVkVgCisgICAgZWNobyAtbiAiIE1JU1MgU0FWRUQ6ICIgJG1p c3NpbmcKKyAgICByZXR1cm4gMQorfQorCisjIFRoaXMgZG9lcyBOT1QgbmVjZXNzYXJpbHkgcmVz dGFydCBhbGwgcnVubmluZyBkb21haW5zOiBpbnN0ZWFkIGl0CisjIHN0b3BzIGFsbCBydW5uaW5n IGRvbWFpbnMgYW5kIHRoZW4gYm9vdHMgYWxsIHRoZSBkb21haW5zIHNwZWNpZmllZCBpbgorIyBB VVRPRElSLiAgSWYgb3RoZXIgZG9tYWlucyBoYXZlIGJlZW4gc3RhcnRlZCBtYW51YWxseSB0aGVu IHRoZXkgd2lsbAorIyBub3QgZ2V0IHJlc3RhcnRlZC4KKyMgQ29tbWVudGVkIG91dCB0byBhdm9p ZCBjb25mdXNpb24hCisKK3Jlc3RhcnQoKQoreworICAgIHN0b3AKKyAgICBzdGFydAorfQorCity ZWxvYWQoKQoreworICAgIHJlc3RhcnQKK30KKworCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkK KwlzdGFydAorCXJjX3N0YXR1cworCWlmIHRlc3QgLWYgJExPQ0tGSUxFOyB0aGVuIHJjX3N0YXR1 cyAtdjsgZmkKKwk7OworCisgICAgc3RvcCkKKwlzdG9wCisJcmNfc3RhdHVzIC12CisJOzsKKwor ICAgIHJlc3RhcnQpCisJcmVzdGFydAorCTs7CisgICAgcmVsb2FkKQorCXJlbG9hZAorCTs7CisK KyAgICBzdGF0dXMpCisJZWNobyAtbiAiQ2hlY2tpbmcgZm9yIHhlbmRvbWFpbnM6IgorCWlmIHRl c3QgISAtZiAkTE9DS0ZJTEU7IHRoZW4KKwkgICAgcmNfZmFpbGVkIDMKKwllbHNlCisJICAgIGNo ZWNrX2FsbF9hdXRvX2RvbWFpbnNfdXAKKwkgICAgcmNfc3RhdHVzCisJICAgIGNoZWNrX2FsbF9z YXZlZF9kb21haW5zX3VwCisJICAgIHJjX3N0YXR1cworCWZpCisJcmNfc3RhdHVzIC12CisJOzsK KworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfHN0 YXR1c30iCisJcmNfZmFpbGVkIDMKKwlyY19zdGF0dXMgLXYKKwk7OworZXNhYworCityY19leGl0 Ci0tIAoxLjkuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==