From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH 2/2] xtf: add a launcher script Date: Thu, 19 May 2016 15:46:57 +0200 Message-ID: <1463665617-21781-3-git-send-email-roger.pau@citrix.com> References: <1463665617-21781-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([85.158.143.247]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b3OIH-0005e1-6E for xen-devel@lists.xenproject.org; Thu, 19 May 2016 13:47:17 +0000 In-Reply-To: <1463665617-21781-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: andrew.cooper3@citrix.com, anshul.makkar@citrix.com, Ian.Jackson@eu.citrix.com, wei.liu2@citrix.com, Roger Pau Monne List-Id: xen-devel@lists.xenproject.org QWRkIGEgc2ltcGxlIHNjcmlwdCB0aGF0IGNhbiBsaXN0IHRoZSB0ZXN0cyByZWxldmFudCB0byB0 aGUgY3VycmVudAplbnZpcm9ubWVudCBhbmQgcnVuIHRoZW0uIEluIGl0J3MgY3VycmVudCBmb3Jt IGl0J3MgZnVuY3Rpb25hbGl0eSBpcyBxdWl0ZQpsaW1pdGVkLCBhbmQgY29uc2lzdHMgaW4gb25l IG9mIHRoaXMgdHdvIG9wdGlvbnM6CgogLSBsaXN0OiBsaXN0IHRlc3RzIHJlbGV2YW50IHRvIHRo ZSBjdXJyZW50IGVudmlyb25tZW50LiBUaGlzIGluZm9ybWF0aW9uIGlzCiAgIGZldGNoZWQgZnJv bSBlYWNoIHRlc3QgdGVzdC1pbmZvLmpzb24gYW5kIHRoZSBvdXRwdXQgb2YgYHhsIGluZm9gLgog LSB0ZXN0OiBsYXVuY2ggYSB0ZXN0ICh3aGljaCBjYW4gaW5jbHVkZSBjcmVhdGluZyBzZXZlcmFs IFZNcykgYW5kIHJlcG9ydAogICB0aGUgcmVzdWx0cyBiYWNrLiBUaGUgcmVzdWx0cyBhcmUgcHJp bnRlZCBvbiB0aGUgdGVybWluYWwsIGFuZCB0aGUgZXJyb3IKICAgY29kZSBpcyBzZXQgYXBwcm9w cmlhdGVseSAoc2VlIGJhY2tlbmQvcmV0dXJuX2NvZGUucHkgZm9yIHRoZSBsaXN0IG9mCiAgIHBv c3NpYmxlIGVycm9yIGNvZGVzKS4KClRoZSBwYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhl IHRlc3RzIGFyZSBzdG9yZWQgaXMgbWFuZGF0b3J5LCBhbmQKc2hvdWxkIGFsd2F5cyBiZSBwYXNz ZWQgdG8gdGhlIHNjcmlwdC4gQXMgYW4gZXhhbXBsZSwgSSd2ZSB1c2VkIHRoZQpmb2xsb3dpbmcg YmFzaCBydW5lcyBpbiBvcmRlciB0byBsYXVuY2ggYWxsIHRlc3RzIHN1aXRhYmxlIGZvciBteQpl bnZpcm9ubWVudDoKCmZvciB0ZXN0IGluIGBkaXN0L2Jpbi94dGYtbGF1bmNoZXIucHkgLWYgZGlz dC90ZXN0cy8gLWxgCmRvCmRpc3QvYmluL3h0Zi1sYXVuY2hlci5weSAtZiBkaXN0L3Rlc3RzLyAt dCAkdGVzdAplY2hvICJUZXN0ICR0ZXN0IHJldHVybiBjb2RlOiAkPyIKZG9uZQoKV2hpY2ggeWll bGRzIHRoZSBmb2xsb3dpbmcgKHRyaW1tZWQgZm9yIGNvbnZlbmllbmNlKToKClBhcnNpbmcgY29u ZmlnIGZyb20gZGlzdC90ZXN0cy9jcHVpZC90ZXN0LXB2NjQtY3B1aWQuY2ZnCnRlc3QtcHY2NC1j cHVpZCB0b29rIDBzClBhcnNpbmcgY29uZmlnIGZyb20gZGlzdC90ZXN0cy9jcHVpZC90ZXN0LXB2 MzJwYWUtY3B1aWQuY2ZnCnRlc3QtcHYzMnBhZS1jcHVpZCB0b29rIDBzClBhcnNpbmcgY29uZmln IGZyb20gZGlzdC90ZXN0cy9jcHVpZC90ZXN0LWh2bTY0LWNwdWlkLmNmZwpsaWJ4bDogd2Fybmlu ZzogbGlieGxfZG0uYzoxNDg2OmxpYnhsX19idWlsZF9kZXZpY2VfbW9kZWxfYXJnc19uZXc6IENv dWxkIG5vdCBmaW5kIHVzZXIgeGVuLXFlbXV1c2VyLXNoYXJlZCwgc3RhcnRpbmcgUUVNVSBhcyBy b290CnRlc3QtaHZtNjQtY3B1aWQgdG9vayAwcwpQYXJzaW5nIGNvbmZpZyBmcm9tIGRpc3QvdGVz dHMvY3B1aWQvdGVzdC1odm0zMnBhZS1jcHVpZC5jZmcKbGlieGw6IHdhcm5pbmc6IGxpYnhsX2Rt LmM6MTQ4NjpsaWJ4bF9fYnVpbGRfZGV2aWNlX21vZGVsX2FyZ3NfbmV3OiBDb3VsZCBub3QgZmlu ZCB1c2VyIHhlbi1xZW11dXNlci1zaGFyZWQsIHN0YXJ0aW5nIFFFTVUgYXMgcm9vdAp0ZXN0LWh2 bTMycGFlLWNwdWlkIHRvb2sgMHMKUGFyc2luZyBjb25maWcgZnJvbSBkaXN0L3Rlc3RzL2NwdWlk L3Rlc3QtaHZtMzJwc2UtY3B1aWQuY2ZnCmxpYnhsOiB3YXJuaW5nOiBsaWJ4bF9kbS5jOjE0ODY6 bGlieGxfX2J1aWxkX2RldmljZV9tb2RlbF9hcmdzX25ldzogQ291bGQgbm90IGZpbmQgdXNlciB4 ZW4tcWVtdXVzZXItc2hhcmVkLCBzdGFydGluZyBRRU1VIGFzIHJvb3QKdGVzdC1odm0zMnBzZS1j cHVpZCB0b29rIDBzClBhcnNpbmcgY29uZmlnIGZyb20gZGlzdC90ZXN0cy9jcHVpZC90ZXN0LWh2 bTMyLWNwdWlkLmNmZwpsaWJ4bDogd2FybmluZzogbGlieGxfZG0uYzoxNDg2OmxpYnhsX19idWls ZF9kZXZpY2VfbW9kZWxfYXJnc19uZXc6IENvdWxkIG5vdCBmaW5kIHVzZXIgeGVuLXFlbXV1c2Vy LXNoYXJlZCwgc3RhcnRpbmcgUUVNVSBhcyByb290CnRlc3QtaHZtMzItY3B1aWQgdG9vayAwcwp0 ZXN0LXB2NjQtY3B1aWQ6CVNVQ0NFU1MKdGVzdC1odm02NC1jcHVpZDoJU1VDQ0VTUwp0ZXN0LWh2 bTMyLWNwdWlkOglTVUNDRVNTCnRlc3QtaHZtMzJwc2UtY3B1aWQ6CVNVQ0NFU1MKdGVzdC1odm0z MnBhZS1jcHVpZDoJU1VDQ0VTUwp0ZXN0LXB2MzJwYWUtY3B1aWQ6CVNVQ0NFU1MKVGVzdCBjcHVp ZCByZXR1cm4gY29kZTogMApbLi4uXQoKTm90ZSB0aGF0IHRoZSBzcGVjaWZpYyBydW5lcyB0byBp bnRlcmFjdCB3aXRoIHhsIGhhdmUgYmVlbiBwbGFjZWQgaW4gYQpzZXBhcmF0ZSBmaWxlLCBhbmQg dGhhdCBvdGhlciBiYWNrZW5kcyBjb3VsZCBiZSBlYXNpbHkgYWRkZWQgcHJvdmlkZWQgdGhhdApj b25maWcgZmlsZXMgc3VpdGFibGUgZm9yIHRoZW0gYXJlIGFsc28gYWRkZWQgdG8gWFRGIHRlc3Rz LiBBIG5ldwotLXRvb2xzdGFjayBvcHRpb24gc2hvdWxkIGJlIGFkZGVkIHRoZW4gaW4gb3JkZXIg dG8gdGVsbCB0aGUgbGF1bmNoZXIgd2hpY2gKdG9vbHN0YWNrIHRvIHVzZS4KClNpZ25lZC1vZmYt Ynk6IFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXguY29tPgotLS0KQ2M6IGFuZHJl dy5jb29wZXIzQGNpdHJpeC5jb20KQ2M6IElhbi5KYWNrc29uQGV1LmNpdHJpeC5jb20KQ2M6IHdl aS5saXUyQGNpdHJpeC5jb20KQ2M6IGFuc2h1bC5tYWtrYXJAY2l0cml4LmNvbQotLS0KIE1ha2Vm aWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiB0b29scy9sYXVuY2hl ci9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAxMiArKysrCiB0b29scy9sYXVuY2hlci9iYWNr ZW5kcy9fX2luaXRfXy5weSAgICB8ICAgMAogdG9vbHMvbGF1bmNoZXIvYmFja2VuZHMvcmV0dXJu X2NvZGUucHkgfCAgMjggKysrKysrKysrCiB0b29scy9sYXVuY2hlci9iYWNrZW5kcy94bC5weSAg ICAgICAgICB8ICA1OSArKysrKysrKysrKysrKysrKysrCiB0b29scy9sYXVuY2hlci94dGYtbGF1 bmNoZXIucHkgICAgICAgICB8IDEwMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IDYgZmlsZXMgY2hhbmdlZCwgMjAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCB0b29scy9sYXVuY2hlci9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRvb2xzL2xhdW5jaGVyL2JhY2tlbmRzL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQg dG9vbHMvbGF1bmNoZXIvYmFja2VuZHMvcmV0dXJuX2NvZGUucHkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB0b29scy9sYXVuY2hlci9iYWNrZW5kcy94bC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xz L2xhdW5jaGVyL3h0Zi1sYXVuY2hlci5weQoKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZp bGUKaW5kZXggZmQ4YzNlMC4uZWRhOWEyNSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFr ZWZpbGUKQEAgLTksNyArOSw3IEBAIGFsbDoKIAogLlBIT05ZOiBpbnN0YWxsCiBpbnN0YWxsOgot CUBmb3IgRCBpbiAkKHdpbGRjYXJkIHRlc3RzLyopOyBkbyBcCisJQGZvciBEIGluICQod2lsZGNh cmQgdGVzdHMvKiB0b29scy8qKTsgZG8gXAogCQlbICEgLWUgJCREL01ha2VmaWxlIF0gJiYgY29u dGludWU7IFwKIAkJJChNQUtFKSAtQyAkJEQgaW5zdGFsbDsgXAogCWRvbmUKZGlmZiAtLWdpdCBh L3Rvb2xzL2xhdW5jaGVyL01ha2VmaWxlIGIvdG9vbHMvbGF1bmNoZXIvTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwNzYwNAotLS0gL2Rldi9udWxsCisrKyBi L3Rvb2xzL2xhdW5jaGVyL01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKK1JPT1QgOj0gJChhYnNw YXRoICQoQ1VSRElSKS8uLi8uLikKKworaW5jbHVkZSAkKFJPT1QpL2J1aWxkL2NvbW1vbi5tawor CitUT09MUyA6PSB4dGYtbGF1bmNoZXIucHkKK0JBQ0tFTkRTIDo9IF9faW5pdF9fLnB5IHhsLnB5 IHJldHVybl9jb2RlLnB5CisKK2luc3RhbGw6ICQoVE9PTFMpICQoYWRkcHJlZml4IGJhY2tlbmRz LywkKEJBQ0tFTkRTKSkKKwlAbWtkaXIgLXAgJChERVNURElSKS9iaW4KKwlAbWtkaXIgLXAgJChE RVNURElSKS9iaW4vYmFja2VuZHMKKwlpbnN0YWxsIC1tNzc1IC1wICQoVE9PTFMpICQoREVTVERJ UikvYmluCisJaW5zdGFsbCAtbTY2NCAtcCAkKGFkZHByZWZpeCBiYWNrZW5kcy8sJChCQUNLRU5E UykpICQoREVTVERJUikvYmluL2JhY2tlbmRzLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF1bmNoZXIv YmFja2VuZHMvX19pbml0X18ucHkgYi90b29scy9sYXVuY2hlci9iYWNrZW5kcy9fX2luaXRfXy5w eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5CmRpZmYgLS1naXQg YS90b29scy9sYXVuY2hlci9iYWNrZW5kcy9yZXR1cm5fY29kZS5weSBiL3Rvb2xzL2xhdW5jaGVy L2JhY2tlbmRzL3JldHVybl9jb2RlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjUwOTQ2MGEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9sYXVuY2hlci9iYWNrZW5kcy9y ZXR1cm5fY29kZS5weQpAQCAtMCwwICsxLDI4IEBACisjCisjIEVycm9yIGNvZGVzIGZvciBYVEYg bGF1bmNoZXIKKyMKKworIyBBbGwgd2VudCBmaW5lLgorU1VDQ0VTUyA9IDAKKworIyBCdWcgaW4g dGhlIGxhdW5jaGVyLgorRVJST1JfTEFVTkNIRVIgPSAxCisKKyMgVGVzdCBjYW5ub3QgYmUgY29t cGxldGVkLgorRVJST1JfU0tJUCA9IDIKKworIyBCdWcgaW4gdGhlIHRlc3QgY29kZSBvciBlbnZp cm9ubWVudC4KK0VSUk9SX0VSUk9SID0gMworCisjIEJ1ZyBpbiB0aGUgY29kZSB1bmRlciB0ZXN0 LgorRVJST1JfRkFJTFVSRSA9IDQKKworZGVmIGNvZGVfdG9fc3RyKGNvZGUpOgorICAgIGVycl90 cmFucyA9IHsKKyAgICAgICAgMCAgIDogICAnU1VDQ0VTUycsCisgICAgICAgIDEgICA6ICAgJ0xB VU5DSEVSIEVSUk9SJywKKyAgICAgICAgMiAgIDogICAnU0tJUCcsCisgICAgICAgIDMgICA6ICAg J0VSUk9SJywKKyAgICAgICAgNCAgIDogICAnRkFJTFVSRScsCisgICAgfQorICAgIHJldHVybiBl cnJfdHJhbnNbY29kZV0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xhdW5jaGVyL2JhY2tlbmRzL3hsLnB5 IGIvdG9vbHMvbGF1bmNoZXIvYmFja2VuZHMveGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYzFhYzExMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xhdW5jaGVyL2Jh Y2tlbmRzL3hsLnB5CkBAIC0wLDAgKzEsNTkgQEAKKyMKKyMgWEwgYmFja2VuZCBmb3IgWFRGCisj CisKK2ltcG9ydCBzdWJwcm9jZXNzLCBzeXMKK2ltcG9ydCByZXR1cm5fY29kZQorCisjIFhYWDog bXVsdGlwcm9jZXNzaW5nIGlzIF9ub3RfIGF2YWlsYWJsZSBpbiBweXRob24gPCAyLjYKK2Zyb20g bXVsdGlwcm9jZXNzaW5nLnBvb2wgaW1wb3J0IFBvb2wKKworZnJvbSB0aW1laXQgaW1wb3J0IGRl ZmF1bHRfdGltZXIgYXMgdGltZXIKKworZGVmIF94bF9jb25zb2xlX2hlbHBlcihkb21haW5fbmFt ZSk6CisgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd4bCcsICdjb25zb2xl JywgZG9tYWluX25hbWVdKQorICAgIHJlc3VsdF9saW5lID0gb3V0cHV0LnNwbGl0bGluZXMoKVst MV0KKyAgICBpZiAiU1VDQ0VTUyIgaW4gcmVzdWx0X2xpbmU6CisgICAgICAgIHJldHVybiByZXR1 cm5fY29kZS5TVUNDRVNTCisgICAgZWxpZiAiU0tJUCIgaW4gcmVzdWx0X2xpbmU6CisgICAgICAg IHJldHVybiByZXR1cm5fY29kZS5FUlJPUl9TS0lQCisgICAgZWxpZiAiRVJST1IiIGluIHJlc3Vs dF9saW5lOgorICAgICAgICByZXR1cm4gcmV0dXJuX2NvZGUuRVJST1JfRVJST1IKKyAgICBlbGlm ICJGQUlMVVJFIiBpbiByZXN1bHRfbGluZToKKyAgICAgICAgcmV0dXJuIHJldHVybl9jb2RlLkVS Uk9SX0ZBTElVUkUKKworICAgICMgU29tZXRoaW5nIHdlbnQgd3JvbmcsIG5vIHRlc3QgcmVwb3J0 IGxpbmUgd2FzIGZvdW5kIChvciBpdCdzIGludmFsaWQpLgorICAgIHJldHVybiByZXR1cm5fY29k ZS5FUlJPUl9MQVVOQ0hFUgorCitjbGFzcyB4bDoKKyAgICAiIiJYTCBkcml2ZXIgZm9yIFhURiIi IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl90aHBvb2wgPSBQb29s KHByb2Nlc3Nlcz0xKQorCisgICAgZGVmIGdldF9zdXBwb3J0ZWRfZW52aXJvbm1lbnRzKHNlbGYp OgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ3hsJywgJ2luZm8n XSkKKyAgICAgICAgI3ByaW50IG91dHB1dAorICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3Bs aXRsaW5lcygpOgorICAgICAgICAgICAgI3ByaW50IGxpbmUKKyAgICAgICAgICAgIGlmIG5vdCBs aW5lLnN0YXJ0c3dpdGgoInhlbl9jYXBzIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAg ICAgICAgICAgIGNhcHMgPSBsaW5lLnNwbGl0KClbMjpdCisgICAgICAgICAgICByZXR1cm4gY2Fw cworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3RfY2Zn LCBkb21haW5fbmFtZSk6CisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFsneGwnLCAnY3Jl YXRlJywgJy1wJywgdGVzdF9jZmddKQorICAgICAgICBpZiByYzoKKyAgICAgICAgICAgIHN5cy5z dGRlcnIud3JpdGUoIkZhaWxlZCB0byBjcmVhdGUgVk0gZnJvbSBjb25maWcgZmlsZSAlc1xuIiAl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2ZnKQorICAgICAgICAgICAgcmV0 dXJuIHJldHVybl9jb2RlLkVSUk9SX0xBVU5DSEVSCisgICAgICAgIHRocmVhZCA9IHNlbGYuX3Ro cG9vbC5hcHBseV9hc3luYyhfeGxfY29uc29sZV9oZWxwZXIsIChkb21haW5fbmFtZSwgKSkKKyAg ICAgICAgc3RhcnQgPSB0aW1lcigpCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFsneGwn LCAndW5wYXVzZScsIGRvbWFpbl9uYW1lXSkKKyAgICAgICAgaWYgcmM6CisgICAgICAgICAgICBz eXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gdW5wYXVzZSBWTSAlc1xuIiAlIGRvbWFpbl9uYW1l KQorICAgICAgICAgICAgcmV0dXJuIHJldHVybl9jb2RlLkVSUk9SX0xBVU5DSEVSCisgICAgICAg IHJjID0gdGhyZWFkLmdldCgpCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzIHRvb2sgJWRz XG4iICUgKGRvbWFpbl9uYW1lLCB0aW1lcigpIC0gc3RhcnQpKQorICAgICAgICByZXR1cm4gcmMK ZGlmZiAtLWdpdCBhL3Rvb2xzL2xhdW5jaGVyL3h0Zi1sYXVuY2hlci5weSBiL3Rvb2xzL2xhdW5j aGVyL3h0Zi1sYXVuY2hlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w Njg1YzJmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbGF1bmNoZXIveHRmLWxhdW5jaGVyLnB5 CkBAIC0wLDAgKzEsMTAxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgTGF1bmNoZXIg c2NyaXB0IGZvciBYVEYKKyMKKworIyBYWFg6IEpTT04gbW9kdWxlIGlzIF9ub3RfIGF2YWlsYWJs ZSBvbiBQeXRob24gPCAyLjYKK2ltcG9ydCBvcywgc3lzLCBqc29uCitpbXBvcnQgYmFja2VuZHMu eGwKK2ltcG9ydCBiYWNrZW5kcy5yZXR1cm5fY29kZSBhcyByZXR1cm5fY29kZQorCitmcm9tIG9w dHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKKworZGVmIGV4aXRfZXJyb3IoZXJyb3Jfc3RyKToK KyAgICBzeXMuc3RkZXJyLndyaXRlKGVycm9yX3N0cikKKyAgICBzeXMuZXhpdChyZXR1cm5fY29k ZS5FUlJPUl9MQVVOQ0hFUikKKworZGVmIGNoZWNrX2Vudmlucm9ubWVudChyZXFfZW52cywgYXZh aWxfZW52cyk6CisgICAgZW52X3RyYW5zID0geworICAgICAgICAncHYzMnBhZScgICA6ICAgJ3hl bi0zLjAteDg2XzMycCcsCisgICAgICAgICdwdjY0JyAgICAgIDogICAneGVuLTMuMC14ODZfNjQn LAorICAgICAgICAnaHZtMzInICAgICA6ICAgJ2h2bS0zLjAteDg2XzMyJywKKyAgICAgICAgJ2h2 bTMycHNlJyAgOiAgICdodm0tMy4wLXg4Nl8zMicsCisgICAgICAgICdodm0zMnBhZScgIDogICAn aHZtLTMuMC14ODZfMzJwJywKKyAgICAgICAgJ2h2bTY0JyAgICAgOiAgICdodm0tMy4wLXg4Nl82 NCcsCisgICAgfQorICAgIGZvciBlbnYgaW4gcmVxX2VudnM6CisgICAgICAgIGlmIGVudl90cmFu c1tlbnZdIG5vdCBpbiBhdmFpbF9lbnZzOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg cmV0dXJuIFRydWUKKworZGVmIGxpc3QoKToKKyAgICBmb3IgZm9sZGVyIGluIG9zLmxpc3RkaXIo b3B0aW9ucy5mb2xkZXIpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpv aW4ob3B0aW9ucy5mb2xkZXIsIGZvbGRlcikpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAg ICAgdGVzdF9pbmZvID0gb3MucGF0aC5qb2luKG9wdGlvbnMuZm9sZGVyLCBmb2xkZXIsICd0ZXN0 LWluZm8uanNvbicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSh0ZXN0X2luZm8pOgor ICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgJXMsIGlnbm9yaW5n IGZvbGRlclxuIiAlIHRlc3RpbmZvKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgd2l0 aCBvcGVuKHRlc3RfaW5mbykgYXMgZGF0YV9maWxlOgorICAgICAgICAgICAgaW5mbyA9IGpzb24u bG9hZChkYXRhX2ZpbGUpCisgICAgICAgIGVudnMgPSBiYWNrZW5kLmdldF9zdXBwb3J0ZWRfZW52 aXJvbm1lbnRzKCkKKyAgICAgICAgaWYgbm90IGVudnM6CisgICAgICAgICAgICBleGl0X2Vycm9y KCJVbmFibGUgdG8gZ2V0IFhlbiBzdXBwb3J0ZWQgZW52aXJvbm1lbnRzXG4iKQorICAgICAgICBh dmFpbCA9IGNoZWNrX2Vudmlucm9ubWVudChpbmZvWyJlbnZpcm9ubWVudHMiXSwgZW52cykKKyAg ICAgICAgaWYgbm90IGF2YWlsOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiU2tpcHBp bmcgdGVzdCAlczogbm90IHN1cHBvcnRlZFxuIiAlIGZvbGRlcikKKyAgICAgICAgICAgIGNvbnRp bnVlCisgICAgICAgIHByaW50IGZvbGRlcgorICAgIHJldHVybiByZXR1cm5fY29kZS5TVUNDRVNT CisKK2RlZiB0ZXN0KCk6CisgICAgdGVzdF9mb2xkZXIgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5m b2xkZXIsIG9wdGlvbnMudGVzdCkKKyAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcih0ZXN0X2ZvbGRl cik6CisgICAgICAgIGV4aXRfZXJyb3IoIiVzIGlzIG5vdCBhIGRpcmVjdG9yeVxuIiAlIHRlc3Rf Zm9sZGVyKQorICAgIHRlc3RfaW5mbyA9IG9zLnBhdGguam9pbih0ZXN0X2ZvbGRlciwgJ3Rlc3Qt aW5mby5qc29uJykKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUodGVzdF9pbmZvKToKKyAgICAg ICAgZXhpdF9lcnJvcigiJXMgZG9lc24ndCBleGlzdCIgJSB0ZXN0X2luZm8pCisgICAgd2l0aCBv cGVuKHRlc3RfaW5mbykgYXMgZGF0YV9maWxlOgorICAgICAgICBpbmZvID0ganNvbi5sb2FkKGRh dGFfZmlsZSkKKyAgICByZXN1bHQgPSB7fQorICAgIGZvciBlbnYgaW4gaW5mb1siZW52aXJvbm1l bnRzIl06CisgICAgICAgIHRlc3RfY2ZnID0gb3MucGF0aC5qb2luKHRlc3RfZm9sZGVyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdC0lcy0lcy5jZmciICUgKGVudiwgb3B0 aW9ucy50ZXN0KSkKKyAgICAgICAgdGVzdF9uYW1lID0gInRlc3QtJXMtJXMiICUgKGVudiwgb3B0 aW9ucy50ZXN0KQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUodGVzdF9jZmcpOgorICAg ICAgICAgICAgZXhpdF9lcnJvcigiVW5hYmxlIHRvIGZpbmQgdGVzdCBjb25maWcgZmlsZSAlc1xu IiAlIHRlc3RfY2ZnKQorICAgICAgICByZXN1bHRbdGVzdF9uYW1lXSA9IGJhY2tlbmQucnVuX3Rl c3QodGVzdF9jZmcsIHRlc3RfbmFtZSkKKyAgICAjIFByaW50IGFsbCB0aGUgcmVzdWx0cworICAg IHJlc3VsdF9jb2RlID0gMAorICAgIGZvciBrZXksIHZhbHVlIGluIHJlc3VsdC5pdGVyaXRlbXMo KToKKyAgICAgICAgcHJpbnQgIiVzOlx0JXMiICUgKGtleSwgcmV0dXJuX2NvZGUuY29kZV90b19z dHIodmFsdWUpKQorICAgICAgICAjIFJldHVybiB0aGUgaGlnaGVzdCBlcnJvciBjb2RlIGluIGNh c2Ugb2YgZXJyb3IuCisgICAgICAgIHJlc3VsdF9jb2RlID0gbWF4KHZhbHVlLCByZXN1bHRfY29k ZSkKKyAgICByZXR1cm4gcmVzdWx0X2NvZGUKKworcGFyc2VyID0gT3B0aW9uUGFyc2VyKCkKK3Bh cnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZvbGRlciIsIGRlc3Q9ImZvbGRlciIsCisgICAgICAg ICAgICAgICAgICBoZWxwPSJGT0xERVIgd2hlcmUgWFRGIHRlc3RzIGFyZSBsb2NhdGVkIiwgbWV0 YXZhcj0iRk9MREVSIikKK3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRlc3QiLCBkZXN0PSJ0 ZXN0IiwKKyAgICAgICAgICAgICAgICAgIGhlbHA9Ik5BTUUgb2YgdGVzdCB0byBydW4iLCBtZXRh dmFyPSJOQU1FIikKK3BhcnNlci5hZGRfb3B0aW9uKCItbCIsICItLWxpc3QiLCBhY3Rpb249InN0 b3JlX3RydWUiLCBkZXN0PSJsaXN0IiwKKyAgICAgICAgICAgICAgICAgIGhlbHA9Ikxpc3QgdGVz dCB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIGN1cnJlbnQgZW52aXJvbm1lbnQiKQorKG9wdGlvbnMs IGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCitpZiBub3Qgb3B0aW9ucy5mb2xkZXI6Cisg ICAgZXhpdF9lcnJvcigiZm9sZGVyIG5vdCBnaXZlblxuIikKKworaWYgb3B0aW9ucy5saXN0IGFu ZCBvcHRpb25zLnRlc3Q6CisgICAgZXhpdF9lcnJvcigib3B0aW9ucyAtbCBhbmQgLXQgYXJlIG11 dHVhbGx5IGV4Y2x1c2l2ZVxuIikKKworaWYgbm90IG9zLnBhdGguaXNkaXIob3B0aW9ucy5mb2xk ZXIpOgorICAgIGV4aXRfZXJyb3IoIiVzIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIGZvbGRl clxuIiAlIG9wdGlvbnMuZm9sZGVyKQorCitiYWNrZW5kID0gYmFja2VuZHMueGwueGwoKQorCitp ZiBvcHRpb25zLmxpc3Q6CisgICAgcmMgPSBsaXN0KCkKK2VsaWYgb3B0aW9ucy50ZXN0OgorICAg IHJjID0gdGVzdCgpCisKK3N5cy5leGl0KHJjKQotLSAKMi43LjQgKEFwcGxlIEdpdC02NikKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3Jn L3hlbi1kZXZlbAo=