From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Meneghel Rodrigues Subject: [PATCH] KVM test: virtio_console test v2 Date: Wed, 1 Sep 2010 23:58:56 -0300 Message-ID: <1283396336-3970-1-git-send-email-lmr@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: amit.shah@redhat.com, kvm@vger.kernel.org To: autotest@test.kernel.org Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: autotest-bounces@test.kernel.org Errors-To: autotest-bounces@test.kernel.org List-Id: kvm.vger.kernel.org RnJvbTogTHVrw6HFoSBEb2t0b3IgPGxkb2t0b3JAcmVkaGF0LmNvbT4KCjEpIFN0YXJ0cyBWTXMg d2l0aCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB2aXJ0aW8gY29uc29sZSBkZXZpY2VzCjIpIFN0 YXJ0IHNtb2tlIHRlc3QKMykgU3RhcnQgbG9vcGJhY2sgdGVzdAo0KSBTdGFydCBwZXJmb3JtYW5j ZSB0ZXN0CgpUaGlzIHRlc3QgdXNlcyBhbiBhdXhpbGlhcnkgc2NyaXB0LCBjb25zb2xlX3N3aXRj aC5weSwgdGhhdCBpcwpjb3BpZWQgdG8gZ3Vlc3RzLiBUaGlzIHNjcmlwdCBoYXMgZnVuY3Rpb25z IHRvIHNlbmQgYW5kIHdyaXRlCmRhdGEgdG8gdmlydGlvIGNvbnNvbGUgcG9ydHMuIERldGFpbHMg b2YgZWFjaCB0ZXN0IGNhbiBiZSBmb3VuZApvbiB0aGUgZG9jc3RyaW5ncyBmb3IgdGhlIHRlc3Rf KiBmdW5jdGlvbnMuCgpDaGFuZ2VzIGZyb20gdjE6CiAqIFN0eWxlIGZpeGVzCiAqIFdoaXRlc3Bh Y2UgY2xlYW51cAogKiBEb2NzdHJpbmcgYW5kIG1lc3NhZ2UgZml4ZXMKICogSUQgZm9yIGNoYXIg ZGV2aWNlcyBjYW4ndCBiZSBhIHNpbXBsZSBudW1iZXIsIGZpeCBpdAoKVGVzdGVkIHdpdGggRmVk b3JhIDEzIGd1ZXN0L2hvc3QsIC1zbXAgMS4KClNpZ25lZC1vZmYtYnk6IEx1a2FzIERva3RvciA8 bGRva3RvckByZWRoYXQuY29tPgpTaWduZWQtb2ZmLWJ5OiBKaXJpIFp1cGthIDxqenVwa2FAcmVk aGF0LmNvbT4KU2lnbmVkLW9mZi1ieTogTHVjYXMgTWVuZWdoZWwgUm9kcmlndWVzIDxsbXJAcmVk aGF0LmNvbT4KLS0tCiBjbGllbnQvdGVzdHMva3ZtL3NjcmlwdHMvY29uc29sZV9zd2l0Y2gucHkg fCAgMjE4ICsrKysrKysrCiBjbGllbnQvdGVzdHMva3ZtL3Rlc3RzL3ZpcnRpb19jb25zb2xlLnB5 ICAgfCAgNzc0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGNsaWVudC90ZXN0cy9rdm0v dGVzdHNfYmFzZS5jZmcuc2FtcGxlICAgICB8ICAgMTEgKwogMyBmaWxlcyBjaGFuZ2VkLCAxMDAz IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgY2xpZW50 L3Rlc3RzL2t2bS9zY3JpcHRzL2NvbnNvbGVfc3dpdGNoLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQg Y2xpZW50L3Rlc3RzL2t2bS90ZXN0cy92aXJ0aW9fY29uc29sZS5weQoKZGlmZiAtLWdpdCBhL2Ns aWVudC90ZXN0cy9rdm0vc2NyaXB0cy9jb25zb2xlX3N3aXRjaC5weSBiL2NsaWVudC90ZXN0cy9r dm0vc2NyaXB0cy9jb25zb2xlX3N3aXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4wNWVkYmMyCi0tLSAvZGV2L251bGwKKysrIGIvY2xpZW50L3Rlc3RzL2t2bS9zY3Jp cHRzL2NvbnNvbGVfc3dpdGNoLnB5CkBAIC0wLDAgKzEsMjE4IEBACisjIS91c3IvYmluL3B5dGhv bgorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyIiIgorQXV4aWxpYXJ5IHNjcmlwdCB1c2VkIHRv IHNlbmQgZGF0YSBiZXR3ZWVuIHBvcnRzIG9uIGd1ZXN0cy4KKworQGNvcHlyaWdodDogMjAwOC0y MDA5IFJlZCBIYXQgSW5jLgorQGF1dGhvcjogSmlyaSBadXBrYSAoanp1cGthQHJlZGhhdC5jb20p CitAYXV0aG9yOiBMdWthcyBEb2t0b3IgKGxkb2t0b3JAcmVkaGF0LmNvbSkKKyIiIgoraW1wb3J0 IHRocmVhZGluZworZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAoraW1wb3J0IG9zLHRpbWUs c2VsZWN0LHJlLHJhbmRvbSxzeXMsYXJyYXkKKworZmlsZXMgPSBkaWN0KCkKK2V2ID0gdGhyZWFk aW5nLkV2ZW50KCkKK3RocmVhZHMgPSBbXQorCitERUJVR1BBVEg9Ii9zeXMva2VybmVsL2RlYnVn IgorCisKK2NsYXNzIFN3aXRjaChUaHJlYWQpOgorICAgICIiIgorICAgIENyZWF0ZSBhIHRocmVh ZCB3aGljaCBzZW5kcyBkYXRhIGJldHdlZW4gcG9ydHMuCisgICAgIiIiCisgICAgZGVmIF9faW5p dF9fKHNlbGYsIGV4aXRldmVudCwgaW5fZmlsZXMsIG91dF9maWxlcywgY2FjaGVzaXplPTEpOgor ICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIGV4aXRldmVudDogRXZlbnQgdG8gZW5kIHN3aXRj aC4KKyAgICAgICAgQHBhcmFtIGluX2ZpbGVzOiBBcnJheSBvZiBpbnB1dCBmaWxlcy4KKyAgICAg ICAgQHBhcmFtIG91dF9maWxlczogQXJyYXkgb2Ygb3V0cHV0IGZpbGVzLgorICAgICAgICBAcGFy YW0gY2FjaGVzaXplOiBCbG9jayB0byByZWNlaXZlIGFuZCBzZW5kLgorICAgICAgICAiIiIKKyAg ICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgc2VsZi5pbl9maWxlcyA9IGlu X2ZpbGVzCisgICAgICAgIHNlbGYub3V0X2ZpbGVzID0gb3V0X2ZpbGVzCisKKyAgICAgICAgc2Vs Zi5jYWNoZXNpemUgPSBjYWNoZXNpemUKKyAgICAgICAgc2VsZi5leGl0ZXZlbnQgPSBleGl0ZXZl bnQKKworCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuZXhpdGV2 ZW50LmlzU2V0KCk6CisgICAgICAgICAgICAjVE9ETzogV2h5IHNlbGVjdCBjYXVzZXMgdHJvdWJs ZT8gOi0oCisgICAgICAgICAgICAjcmV0ID0gc2VsZWN0LnNlbGVjdChzZWxmLmluX2ZpbGVzLFtd LFtdLDEuMCkKKyAgICAgICAgICAgIGRhdGEgPSAiIgorICAgICAgICAgICAgI2lmIG5vdCByZXRb MF0gPT0gW106CisgICAgICAgICAgICBmb3IgZGVzYyBpbiBzZWxmLmluX2ZpbGVzOgorICAgICAg ICAgICAgICAgIGRhdGEgKz0gb3MucmVhZChkZXNjLCBzZWxmLmNhY2hlc2l6ZSkKKyAgICAgICAg ICAgIGZvciBkZXNjIGluIHNlbGYub3V0X2ZpbGVzOgorICAgICAgICAgICAgICAgIG9zLndyaXRl KGRlc2MsIGRhdGEpCisKKworY2xhc3MgU2VuZGVyKFRocmVhZCk6CisgICAgIiIiCisgICAgQ3Jl YXRlcyB0aHJlYWQgd2hpY2ggc2VuZHMgcmFuZG9tIGJsb2NrcyBvZiBkYXRhIHRvIHRoZSBkZXN0 aW5hdGlvbiBwb3J0LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBsZW5n dGgpOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIHBvcnQ6IERlc3RpbmF0aW9uIHBvcnQu CisgICAgICAgIEBwYXJhbSBsZW5ndGg6IExlbmd0aCBvZiB0aGUgcmFuZG9tIGRhdGEgYmxvY2su CisgICAgICAgICIiIgorICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2Vs Zi5wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLmRhdGEgPSBhcnJheS5hcnJheSgnTCcpCisgICAg ICAgIGZvciBpIGluIHJhbmdlKG1heChsZW5ndGgvc2VsZi5kYXRhLml0ZW1zaXplLCAxKSk6Cisg ICAgICAgICAgICBzZWxmLmRhdGEuYXBwZW5kKHJhbmRvbS5yYW5kcmFuZ2Uoc3lzLm1heGludCkp CisKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAg ICBvcy53cml0ZShzZWxmLnBvcnQsIHNlbGYuZGF0YSkKKyAgICAgICAgZGVsIHRocmVhZHNbOl0K KworCitkZWYgZ2V0X3BvcnRfc3RhdHVzKCk6CisgICAgIiIiCisgICAgR2V0IGluZm8gYWJvdXQg cG9ydHMgZnJvbSBrZXJuZWwgZGVidWdmcy4KKworICAgIEByZXR1cm46IHBvcnRzIGRpY3Rpb25h cnkgb2YgcG9ydCBwcm9wZXJ0aWVzCisgICAgIiIiCisgICAgcG9ydHMgPSB7fQorCisgICAgbm90 X3ByZXNlbnRfbXNnID0gIkZBSUw6IFRoZXJlJ3Mgbm8gdmlydGlvLXBvcnRzIGRpciBpbiBkZWJ1 Z2ZzIgorICAgIGlmIG5vdCBvcy5wYXRoLmlzbW91bnQoREVCVUdQQVRIKToKKyAgICAgICAgb3Mu c3lzdGVtKCdtb3VudCAtdCBkZWJ1Z2ZzIG5vbmUgJXMnICUgREVCVUdQQVRIKQorICAgIHRyeToK KyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoJyVzL3ZpcnRpby1wb3J0cycgJSBERUJVR1BB VEgpOgorICAgICAgICAgICAgcHJpbnQgbm90X3ByZXNlbnRfbXNnCisgICAgZXhjZXB0OgorICAg ICAgICBwcmludCBub3RfcHJlc2VudF9tc2cKKyAgICBlbHNlOgorICAgICAgICB2aW9wX25hbWVz ID0gb3MubGlzdGRpcignJXMvdmlydGlvLXBvcnRzJyAlIERFQlVHUEFUSCkKKyAgICAgICAgZm9y IG5hbWUgaW4gdmlvcF9uYW1lczoKKyAgICAgICAgICAgIGYgPSBvcGVuKCIlcy92aXJ0aW8tcG9y dHMvJXMiICUgKERFQlVHUEFUSCwgbmFtZSksICdyJykKKyAgICAgICAgICAgIHBvcnQgPSB7fQor ICAgICAgICAgICAgZm9yIGxpbmUgaW4gaXRlcihmKToKKyAgICAgICAgICAgICAgICBtID0gcmUu bWF0Y2goIihcUyspOiAoXFMrKSIsbGluZSkKKyAgICAgICAgICAgICAgICBwb3J0W20uZ3JvdXAo MSldID0gbS5ncm91cCgyKQorCisgICAgICAgICAgICBpZiAocG9ydFsnaXNfY29uc29sZSddID09 ICJ5ZXMiKToKKyAgICAgICAgICAgICAgICBwb3J0WyJwYXRoIl0gPSAiL2Rldi9odmMlcyIgJSBw b3J0WyJjb25zb2xlX3Z0ZXJtbm8iXQorICAgICAgICAgICAgICAgICMgQ29uc29sZSB3b3JrcyBs aWtlIGEgc2VyaWFscG9ydAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwb3J0 WyJwYXRoIl0gPSAiL2Rldi8lcyIgJSBuYW1lCisgICAgICAgICAgICBwb3J0c1twb3J0WyduYW1l J11dID0gcG9ydAorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICByZXR1cm4gcG9ydHMKKwor CitkZWYgb3Blbl9kZXZpY2UoaW5fZmlsZXMsIHBvcnRzKToKKyAgICAiIiIKKyAgICBPcGVuIGRl dmljZXMgYW5kIHJldHVybiBhcnJheSBvZiBkZXNjcmlwdG9ycworCisgICAgQHBhcmFtIGluX2Zp bGVzOiBmaWxlcyBhcnJheQorICAgIEByZXR1cm46IGFycmF5IG9mIGRlc2NyaXB0b3IKKyAgICAi IiIKKyAgICBmID0gW10KKworICAgIGZvciBpdGVtIGluIGluX2ZpbGVzOgorICAgICAgICBuYW1l ID0gcG9ydHNbaXRlbVswXV1bInBhdGgiXQorICAgICAgICBpZiAobm90IGl0ZW1bMV0gPT0gcG9y dHNbaXRlbVswXV1bImlzX2NvbnNvbGUiXSk6CisgICAgICAgICAgICBwcmludCBwb3J0cworICAg ICAgICAgICAgcHJpbnQgIkZBSUw6IEhvc3QgY29uc29sZSBpcyBub3QgbGlrZSBjb25zb2xlIG9u IGd1ZXN0IHNpZGVcbiIKKworICAgICAgICBpZiAobmFtZSBpbiBmaWxlcyk6CisgICAgICAgICAg ICBmLmFwcGVuZChmaWxlc1tuYW1lXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToK KyAgICAgICAgICAgICAgICBmaWxlc1tuYW1lXSA9IG9zLm9wZW4obmFtZSwgb3MuT19SRFdSKQor ICAgICAgICAgICAgICAgIGlmIChwb3J0c1tpdGVtWzBdXVsiaXNfY29uc29sZSJdID09ICJ5ZXMi KToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgb3Muc3lzdGVtKCJzdHR5IC1GICVzIHJhdyAt ZWNobyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvcnRzW2l0ZW1b MF1dWyJwYXRoIl0pKQorICAgICAgICAgICAgICAgICAgICBwcmludCBvcy5zeXN0ZW0oInN0dHkg LUYgJXMgLWEiICUgcG9ydHNbaXRlbVswXV1bInBhdGgiXSkKKyAgICAgICAgICAgICAgICBmLmFw cGVuZChmaWxlc1tuYW1lXSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgaW5zdDoK KyAgICAgICAgICAgICAgICBwcmludCAiRkFJTDogRmFpbGVkIHRvIG9wZW4gZmlsZSAlcyIgJSBu YW1lCisgICAgICAgICAgICAgICAgcmFpc2UgaW5zdAorICAgIHJldHVybiBmCisKKworZGVmIHN0 YXJ0X3N3aXRjaChpbl9maWxlcyxvdXRfZmlsZXMsY2FjaGVzaXplPTEpOgorICAgICIiIgorICAg IEZ1bmN0aW9uIHRoYXQgc3RhcnRzIHN3aXRjaCB0aHJlYWQKKyAgICAoYmVjYXVzZSB0aGVyZSBp cyBhIHByb2JsZW0gd2l0aCBvcGVuaW5nIG9uZSBmaWxlIG11bHRpcGxlIHRpbWVzKS4KKworICAg IEBwYXJhbSBpbl9maWxlczogYXJyYXkgb2YgaW5wdXQgZmlsZXMKKyAgICBAcGFyYW0gb3V0X2Zp bGVzOiBhcnJheSBvZiBvdXRwdXQgZmlsZXMKKyAgICBAcGFyYW0gY2FjaGVzaXplOiBjYWNoZXNp emUKKyAgICAiIiIKKyAgICBwb3J0cyA9IGdldF9wb3J0X3N0YXR1cygpCisKKyAgICBpbl9mID0g b3Blbl9kZXZpY2UoaW5fZmlsZXMsIHBvcnRzKQorICAgIG91dF9mID0gb3Blbl9kZXZpY2Uob3V0 X2ZpbGVzLCBwb3J0cykKKworICAgIHMgPSBTd2l0Y2goZXYsIGluX2YsIG91dF9mLCBjYWNoZXNp emUpCisgICAgcy5zdGFydCgpCisgICAgdGhyZWFkcy5hcHBlbmQocykKKworICAgIHByaW50ICJQ QVNTOiBTdGFydCBzd2l0Y2giCisKKworZGVmIGVuZF9zd2l0Y2hlcygpOgorICAgICIiIgorICAg IEZ1bmN0aW9uIGVuZCBhbGwgcnVubmluZyBkYXRhIHN3aXRjaGVzLgorICAgICIiIgorICAgIGV2 LnNldCgpCisgICAgZm9yIHRoIGluIHRocmVhZHM6CisgICAgICAgIHByaW50ICJqb2luIgorICAg ICAgICB0aC5qb2luKDMuMCkKKyAgICBldi5jbGVhcigpCisKKyAgICBkZWwgdGhyZWFkc1s6XQor ICAgIHByaW50ICJQQVNTOiBFbmQgc3dpdGNoIgorCisKK2RlZiBkaWUoKToKKyAgICAiIiIKKyAg ICBRdWl0IGNvbnNvbGVzd2l0Y2guCisgICAgIiIiCisgICAgZm9yIGRlc2MgaW4gZmlsZXMuaXRl cnZhbHVlcygpOgorICAgICAgICBvcy5jbG9zZShkZXNjKQorICAgIGV4aXQoMCkKKworCitkZWYg c2VuZGVyX3ByZXBhcmUocG9ydCwgbGVuZ3RoKToKKyAgICAiIiIKKyAgICBQcmVwYXJlcyB0aGUg c2VuZGVyIHRocmVhZC4gUmVxdWlyZXMgYSBjbGVhbiB0aHJlYWQgc3RydWN0dXJlLgorICAgICIi IgorICAgIGRlbCB0aHJlYWRzWzpdCisgICAgcG9ydHMgPSBnZXRfcG9ydF9zdGF0dXMoKQorICAg IGluX2YgPSBvcGVuX2RldmljZShbcG9ydF0sIHBvcnRzKQorCisgICAgdGhyZWFkcy5hcHBlbmQo U2VuZGVyKGluX2ZbMF0sIGxlbmd0aCkpCisgICAgcHJpbnQgIlBBU1M6IFNlbmRlciBwcmVwYXJl IgorCisKK2RlZiBzZW5kZXJfc3RhcnQoKToKKyAgICAiIiIKKyAgICBTdGFydCBzZW5kZXIgZGF0 YSB0cmFuc2Zlci4gUmVxdWlyZXMgc2VuZGVyX3ByZXBhcmUgdG8gcnVuIGZpcnN0LgorICAgICIi IgorICAgIHRocmVhZHNbMF0uc3RhcnQoKQorICAgIHByaW50ICJQQVNTOiBTZW5kZXIgc3RhcnQi CisKKworZGVmIG1haW4oKToKKyAgICAiIiIKKyAgICBNYWluIChpbmZpbml0ZSkgbG9vcCBvZiBj b25zb2xlX3N3aXRjaC4KKyAgICAiIiIKKyAgICBwcmludCAiUEFTUzogU3RhcnQiCisgICAgZW5k ID0gRmFsc2UKKyAgICB3aGlsZSBub3QgZW5kOgorICAgICAgICBzdHIgPSByYXdfaW5wdXQoKQor ICAgICAgICBleGVjIHN0cgorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFp bigpCmRpZmYgLS1naXQgYS9jbGllbnQvdGVzdHMva3ZtL3Rlc3RzL3ZpcnRpb19jb25zb2xlLnB5 IGIvY2xpZW50L3Rlc3RzL2t2bS90ZXN0cy92aXJ0aW9fY29uc29sZS5weQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDczZDRkCi0tLSAvZGV2L251bGwKKysrIGIvY2xpZW50 L3Rlc3RzL2t2bS90ZXN0cy92aXJ0aW9fY29uc29sZS5weQpAQCAtMCwwICsxLDc3NCBAQAoraW1w b3J0IHNvY2tldCwgcmFuZG9tLCBhcnJheSwgc3lzLCBvcywgdGVtcGZpbGUsIHNodXRpbCwgdGhy ZWFkaW5nLCBzZWxlY3QsIHJlCitpbXBvcnQgbG9nZ2luZywgdGltZQorZnJvbSB0aHJlYWRpbmcg aW1wb3J0IFRocmVhZAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKK2Zyb20gYXV0b3Rl c3RfbGliLmNsaWVudC5jb21tb25fbGliIGltcG9ydCBlcnJvcgoraW1wb3J0IGt2bV9zdWJwcm9j ZXNzLCBrdm1fdGVzdF91dGlscywga3ZtX3V0aWxzLCBrdm1fcHJlcHJvY2Vzc2luZworCisKK2Rl ZiBydW5fdmlydGlvX2NvbnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgorICAgICIiIgorICAgIEtW TSB2aXJ0aW9fY29uc29sZSB0ZXN0CisKKyAgICAxKSBTdGFydHMgVk1zIHdpdGggdGhlIHNwZWNp ZmllZCBudW1iZXIgb2YgdmlydGlvIGNvbnNvbGUgZGV2aWNlcworICAgIDIpIFN0YXJ0IHNtb2tl IHRlc3QKKyAgICAzKSBTdGFydCBsb29wYmFjayB0ZXN0CisgICAgNCkgU3RhcnQgcGVyZm9ybWFu Y2UgdGVzdAorCisgICAgVGhpcyB0ZXN0IHVzZXMgYW4gYXV4aWxpYXJ5IHNjcmlwdCwgY29uc29s ZV9zd2l0Y2gucHksIHRoYXQgaXMgY29waWVkIHRvCisgICAgZ3Vlc3RzLiBUaGlzIHNjcmlwdCBo YXMgZnVuY3Rpb25zIHRvIHNlbmQgYW5kIHdyaXRlIGRhdGEgdG8gdmlydGlvIGNvbnNvbGUKKyAg ICBwb3J0cy4gRGV0YWlscyBvZiBlYWNoIHRlc3QgY2FuIGJlIGZvdW5kIG9uIHRoZSBkb2NzdHJp bmdzIGZvciB0aGUgdGVzdF8qCisgICAgZnVuY3Rpb25zLgorCisgICAgQHBhcmFtIHRlc3Q6IGt2 bSB0ZXN0IG9iamVjdAorICAgIEBwYXJhbSBwYXJhbXM6IERpY3Rpb25hcnkgd2l0aCB0aGUgdGVz dCBwYXJhbWV0ZXJzCisgICAgQHBhcmFtIGVudjogRGljdGlvbmFyeSB3aXRoIHRlc3QgZW52aXJv bm1lbnQKKyAgICAiIiIKKyAgICBjbGFzcyB0aF9zZW5kKFRocmVhZCk6CisgICAgICAgICIiIgor ICAgICAgICBSYW5kb20gZGF0YSBzZW5kZXIgdGhyZWFkLgorICAgICAgICAiIiIKKyAgICAgICAg ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGxlbmd0aCwgYnVmZmVycywgYmxvY2tsZW49MzIpOgor ICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBAcGFyYW0gcG9ydDogRGVzdGluYXRpb24gcG9y dC4KKyAgICAgICAgICAgIEBwYXJhbSBsZW5ndGg6IEFtb3VudCBvZiBkYXRhIHdlIHdhbnQgdG8g c2VuZC4KKyAgICAgICAgICAgIEBwYXJhbSBidWZmZXJzOiBCdWZmZXJzIGZvciB0aGUgY29udHJv bCBkYXRhIChGSUZPcykuCisgICAgICAgICAgICBAcGFyYW0gYmxvY2tsZW46IEJsb2NrIGxlbmd0 aC4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisg ICAgICAgICAgICBzZWxmLkV4aXRTdGF0ZSA9IFRydWUKKyAgICAgICAgICAgIHNlbGYucG9ydCA9 IHBvcnRbMF0KKyAgICAgICAgICAgIHNlbGYubGVuZ3RoID0gbGVuZ3RoCisgICAgICAgICAgICBz ZWxmLmJ1ZmZlcnMgPSBidWZmZXJzCisgICAgICAgICAgICBzZWxmLmJsb2NrbGVuID0gYmxvY2ts ZW4KKworCisgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVn KCJ0aF9zZW5kICVzOiBydW4iLCBzZWxmLmdldE5hbWUoKSkKKyAgICAgICAgICAgIGlkeCA9IDAK KyAgICAgICAgICAgIHdoaWxlIGlkeCA8IHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgICAgIHJl dCA9IHNlbGVjdC5zZWxlY3QoW10sIFtzZWxmLnBvcnRdLCBbXSwgMS4wKQorICAgICAgICAgICAg ICAgIGlmIHJldDoKKyAgICAgICAgICAgICAgICAgICAgIyBHZW5lcmF0ZSBibG9ja2xlbiBvZiBy YW5kb20gZGF0YSBhZGQgdGhlbSB0byB0aGUgRklGTworICAgICAgICAgICAgICAgICAgICAjIGFu ZCBzZW5kIHRoYW0gb3ZlciB2aXJ0aW9fY29uc29sZQorICAgICAgICAgICAgICAgICAgICBidWYg PSAiIgorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShtaW4oc2VsZi5ibG9ja2xl biwgc2VsZi5sZW5ndGgtaWR4KSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjaCA9ICIlYyIg JSByYW5kb20ucmFuZHJhbmdlKDI1NSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArPSBj aAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGJ1ZmZlciBpbiBzZWxmLmJ1ZmZlcnM6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChjaCkKKyAgICAgICAgICAg ICAgICAgICAgaWR4ICs9IGxlbihidWYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucG9ydC5z ZW5kYWxsKGJ1ZikKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoInRoX3NlbmQgJXM6IGV4aXQo JWQpIiwgc2VsZi5nZXROYW1lKCksIGlkeCkKKyAgICAgICAgICAgIGlmIGlkeCA+PSBzZWxmLmxl bmd0aDoKKyAgICAgICAgICAgICAgICBzZWxmLkV4aXRTdGF0ZSA9IEZhbHNlCisKKworICAgIGNs YXNzIHRoX3NlbmRfbG9vcChUaHJlYWQpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VuZCBkYXRh IGluIHRoZSBsb29wIHVudGlsIHRoZSBleGl0IGV2ZW50IGlzIHNldAorICAgICAgICAiIiIKKyAg ICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGRhdGEsIGV2ZW50KToKKyAgICAgICAgICAg ICIiIgorICAgICAgICAgICAgQHBhcmFtIHBvcnQ6IGRlc3RpbmF0aW9uIHBvcnQKKyAgICAgICAg ICAgIEBwYXJhbSBkYXRhOiB0aGUgZGF0YSBpbnRlbmQgdG8gYmUgc2VuZCBpbiBhIGxvb3AKKyAg ICAgICAgICAgIEBwYXJhbSBldmVudDogZXhpdCBldmVudAorICAgICAgICAgICAgIiIiCisgICAg ICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHBv cnQKKyAgICAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKyAgICAgICAgICAgIHNlbGYuZXhpdGV2 ZW50ID0gZXZlbnQKKyAgICAgICAgICAgIHNlbGYuaWR4ID0gMAorCisKKyAgICAgICAgZGVmIHJ1 bihzZWxmKToKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoInRoX3NlbmRfbG9vcCAlczogcnVu Iiwgc2VsZi5nZXROYW1lKCkpCisgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5leGl0ZXZlbnQu aXNTZXQoKToKKyAgICAgICAgICAgICAgICBzZWxmLmlkeCArPSBzZWxmLnBvcnQuc2VuZChzZWxm LmRhdGEpCisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aF9zZW5kX2xvb3AgJXM6IGV4aXQo JWQpIiwgc2VsZi5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWR4 KQorCisKKyAgICBjbGFzcyB0aF9yZWN2KFRocmVhZCk6CisgICAgICAgICIiIgorICAgICAgICBS YW5kb20gZGF0YSByZWNpZXZlci9jaGVja2VyIHRocmVhZAorICAgICAgICAiIiIKKyAgICAgICAg ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGJ1ZmZlciwgbGVuZ3RoLCBibG9ja2xlbj0zMik6Cisg ICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIEBwYXJhbSBwb3J0OiBzb3VyY2UgcG9ydAorICAg ICAgICAgICAgQHBhcmFtIGJ1ZmZlcjogY29udHJvbCBkYXRhIGJ1ZmZlciAoRklGTykKKyAgICAg ICAgICAgIEBwYXJhbSBsZW5ndGg6IGFtb3VudCBvZiBkYXRhIHdlIHdhbnQgdG8gcmVjZWl2ZQor ICAgICAgICAgICAgQHBhcmFtIGJsb2NrbGVuOiBibG9jayBsZW5ndGgKKyAgICAgICAgICAgICIi IgorICAgICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICBzZWxmLkV4 aXRTdGF0ZSA9IFRydWUKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHBvcnRbMF0KKyAgICAgICAg ICAgIHNlbGYuYnVmZmVyID0gYnVmZmVyCisgICAgICAgICAgICBzZWxmLmxlbmd0aCA9IGxlbmd0 aAorICAgICAgICAgICAgc2VsZi5ibG9ja2xlbiA9IGJsb2NrbGVuCisKKworICAgICAgICBkZWYg cnVuKHNlbGYpOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygidGhfcmVjdiAlczogcnVuIiwg c2VsZi5nZXROYW1lKCkpCisgICAgICAgICAgICBpZHggPSAwCisgICAgICAgICAgICB3aGlsZSBp ZHggPCBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgICAgICByZXQgPSBzZWxlY3Quc2VsZWN0KFtz ZWxmLnBvcnRdLCBbXSwgW10sIDEuMCkKKyAgICAgICAgICAgICAgICBpZiByZXQ6CisgICAgICAg ICAgICAgICAgICAgIGJ1ZiA9IHNlbGYucG9ydC5yZWN2KHNlbGYuYmxvY2tsZW4pCisgICAgICAg ICAgICAgICAgICAgIGlmIGJ1ZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQ29tcGFyZSB0 aGUgcmVjdmQgZGF0YSB3aXRoIHRoZSBjb250cm9sIGRhdGEKKyAgICAgICAgICAgICAgICAgICAg ICAgIGZvciBjaCBpbiBidWY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNo ID09IHNlbGYuYnVmZmVyLnBvcGxlZnQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXJyb3IuVGVzdEZhaWwoInRoX3JlY3Y6IGluY29ycmVjdCBkYXRhIikKKyAgICAgICAgICAg ICAgICAgICAgaWR4ICs9IGxlbihidWYpCisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aF9y ZWN2ICVzOiBleGl0KCVkKSIsIHNlbGYuZ2V0TmFtZSgpLCBpZHgpCisgICAgICAgICAgICBpZiAo aWR4ID49IHNlbGYubGVuZ3RoKSBhbmQgKGxlbihzZWxmLmJ1ZmZlcikgPT0gMCk6CisgICAgICAg ICAgICAgICAgc2VsZi5FeGl0U3RhdGUgPSBGYWxzZQorCisKKyAgICBjbGFzcyB0aF9yZWN2X251 bGwoVGhyZWFkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlY2VpdmVzIGRhdGEgYW5kIHRocm93 cyBpdCBhd2F5LgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQs IGV2ZW50LCBibG9ja2xlbj0zMik6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIEBwYXJh bSBwb3J0OiBEYXRhIHNvdXJjZSBwb3J0LgorICAgICAgICAgICAgQHBhcmFtIGV2ZW50OiBFeGl0 IGV2ZW50LgorICAgICAgICAgICAgQHBhcmFtIGJsb2NrbGVuOiBCbG9jayBsZW5ndGguCisgICAg ICAgICAgICAiIiIKKyAgICAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICAg ICAgc2VsZi5wb3J0ID0gcG9ydFswXQorICAgICAgICAgICAgc2VsZi5fcG9ydF90aW1lb3V0ID0g c2VsZi5wb3J0LmdldHRpbWVvdXQoKQorICAgICAgICAgICAgc2VsZi5wb3J0LnNldHRpbWVvdXQo MC4xKQorICAgICAgICAgICAgc2VsZi5leGl0ZXZlbnQgPSBldmVudAorICAgICAgICAgICAgc2Vs Zi5ibG9ja2xlbiA9IGJsb2NrbGVuCisgICAgICAgICAgICBzZWxmLmlkeCA9IDAKKworCisgICAg ICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aF9yZWN2X251 bGwgJXM6IHJ1biIsIHNlbGYuZ2V0TmFtZSgpKQorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYu ZXhpdGV2ZW50LmlzU2V0KCk6CisgICAgICAgICAgICAgICAgIyBXb3JrYXJvdW5kLCBpdCBkaWRu J3Qgd29yayB3aXRoIHNlbGVjdCA6LS8KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAg ICAgICAgICAgIHNlbGYuaWR4ICs9IGxlbihzZWxmLnBvcnQucmVjdihzZWxmLmJsb2NrbGVuKSkK KyAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgICAgICAgICAg ICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYucG9ydC5zZXR0aW1lb3V0KHNlbGYuX3BvcnRfdGlt ZW91dCkKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoInRoX3JlY3ZfbnVsbCAlczogZXhpdCgl ZCkiLCBzZWxmLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pZHgp CisKKyAgICBzZXFUZXN0ID0gdGhyZWFkaW5nLkxvY2soKTsKKworCisgICAgY2xhc3MgYXZlcmFn ZV9jcHVfbG9hZCgpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IGF2ZXJhZ2UgY3B1IGxvYWQg YmV0d2VlbiBzdGFydCBhbmQgZ2V0X2xvYWQKKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBfX2lu aXRfXyAoc2VsZik6CisgICAgICAgICAgICBzZWxmLm9sZF9sb2FkID0gWzAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDBdCisgICAgICAgICAgICBzZWxmLnN0YXJ0VGltZSA9IDAKKyAgICAgICAg ICAgIHNlbGYuZW5kVGltZSA9IDAKKworCisgICAgICAgIGRlZiBfZ2V0X2NwdV9sb2FkKHNlbGYp OgorICAgICAgICAgICAgIyBMZXQncyBzZWUgaWYgd2UgY2FuIGNhbGMgc3lzdGVtIGxvYWQuCisg ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oIi9wcm9jL3N0YXQiLCAi ciIpCisgICAgICAgICAgICAgICAgdG1wID0gZi5yZWFkbGluZXMoMjAwKQorICAgICAgICAgICAg ICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGxvZ2dp bmcuY3JpdGljYWwoIkVycm9yIHJlYWRpbmcgL3Byb2Mvc3RhdCIpCisgICAgICAgICAgICAgICAg ZXJyb3IuVGVzdEZhaWwoImF2ZXJhZ2VfY3B1X2xvYWQ6IEVycm9yIHJlYWRpbmcgL3Byb2Mvc3Rh dCIpCisKKyAgICAgICAgICAgICMgMjAwIGJ5dGVzIHNob3VsZCBiZSBlbm91Z2ggYmVjYXVzZSB0 aGUgaW5mb3JtYXRpb24gd2UgbmVlZAorICAgICAgICAgICAgIyBpcyB0eXBpY2FsbHkgc3RvcmVk IGluIHRoZSBmaXJzdCBsaW5lCisgICAgICAgICAgICAjIEluZm8gYWJvdXQgaW5kaXZpZHVhbCBw cm9jZXNzb3JzIChub3QgeWV0IHN1cHBvcnRlZCkgaXMgaW4KKyAgICAgICAgICAgICMgdGhlIHNl Y29uZCAodGhpcmQsIC4uLj8pIGxpbmUKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHRtcDoKKyAg ICAgICAgICAgICAgICBpZiBsaW5lWzA6NF0gPT0gImNwdSAiOgorICAgICAgICAgICAgICAgICAg ICByZWcgPSByZS5jb21waWxlKCdbMC05XSsnKQorICAgICAgICAgICAgICAgICAgICBsb2FkX3Zh bHVlcyA9IHJlZy5maW5kYWxsKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICMgZXh0cmFjdCB2 YWx1ZXMgZnJvbSAvcHJvYy9zdGF0CisgICAgICAgICAgICAgICAgICAgIGxvYWQgPSBbMCwgMCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0KKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFu Z2UoOCk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkW2ldID0gaW50KGxvYWRfdmFsdWVz W2ldKSAtIHNlbGYub2xkX2xvYWRbaV0KKworICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiBy YW5nZSg4KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub2xkX2xvYWRbaV0gPSBpbnQo bG9hZF92YWx1ZXNbaV0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkCisKKworICAg ICAgICBkZWYgc3RhcnQgKCBzZWxmICk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIFN0 YXJ0IENQVSB1c2FnZSBtZWFzdXJlbWVudAorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBz ZWxmLnN0YXJ0VGltZSA9IHRpbWUudGltZSgpOworICAgICAgICAgICAgc2VsZi5fZ2V0X2NwdV9s b2FkKCkKKworCisgICAgICAgIGRlZiBnZXRfbG9hZChzZWxmKToKKyAgICAgICAgICAgICIiIgor ICAgICAgICAgICAgR2V0IGFuZCByZXNldCBDUFUgdXNhZ2UKKyAgICAgICAgICAgIEByZXR1cm46 IHJldHVybiBncm91cCBjcHUgKHVzZXJbJV0sIHN5c3RlbVslXSwgc3VtWyVdLCB0ZXN0VGltZVtz XSkKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgc2VsZi5lbmRUaW1lID0gdGltZS50aW1l KCkKKyAgICAgICAgICAgIHRlc3RUaW1lID0gIHNlbGYuZW5kVGltZS1zZWxmLnN0YXJ0VGltZQor ICAgICAgICAgICAgbG9hZCA9IHNlbGYuX2dldF9jcHVfbG9hZCgpCisKKyAgICAgICAgICAgIHVz ZXIgPSBsb2FkWzBdIC8gdGVzdFRpbWUKKyAgICAgICAgICAgIHN5c3RlbSA9IGxvYWRbMl0gLyB0 ZXN0VGltZQorICAgICAgICAgICAgc3VtID0gdXNlciArIHN5c3RlbQorCisgICAgICAgICAgICBy ZXR1cm4gKHVzZXIsIHN5c3RlbSwgc3VtLCB0ZXN0VGltZSkKKworCisgICAgY2xhc3MgYXZlcmFn ZV9wcm9jZXNzX2NwdV9sb2FkKCk6CisgICAgICAgICIiIgorICAgICAgICBHZXQgYXZlcmFnZSBw cm9jZXNzIGNwdSBsb2FkIGJldHdlZW4gc3RhcnQgYW5kIGdldF9sb2FkCisgICAgICAgICIiIgor ICAgICAgICBkZWYgX19pbml0X18gKHNlbGYsIHBpZCwgbmFtZSk6CisgICAgICAgICAgICBzZWxm Lm9sZF9sb2FkID0gWzAsIDBdCisgICAgICAgICAgICBzZWxmLnN0YXJ0VGltZSA9IDAKKyAgICAg ICAgICAgIHNlbGYuZW5kVGltZSA9IDAKKyAgICAgICAgICAgIHNlbGYucGlkID0gcGlkCisgICAg ICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKworICAgICAgICBkZWYgX2dldF9jcHVfbG9hZChz ZWxmLHBpZCk6CisgICAgICAgICAgICAjIExldCdzIHNlZSBpZiB3ZSBjYW4gY2FsYyBzeXN0ZW0g bG9hZC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmID0gb3BlbigiL3Byb2Mv JWQvc3RhdCIgJSAocGlkKSwgInIiKQorICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5l KCkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAg ICAgICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKCJFcnJvciByZWFkaW5nIC9wcm9jLyVkL3N0YXQi LCBwaWQpCisgICAgICAgICAgICAgICAgZXJyb3IuVGVzdEZhaWwoImF2ZXJhZ2VfcHJvY2Vzc19j cHVfbG9hZDogRXJyb3IgcmVhZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ii9wcm9jL3N0YXQiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWcgPSBy ZS5jb21waWxlKCdbMC05XSsnKQorICAgICAgICAgICAgICAgIGxvYWRfdmFsdWVzID0gcmVnLmZp bmRhbGwobGluZSkKKyAgICAgICAgICAgICAgICBkZWwgbG9hZF92YWx1ZXNbMDoxMV0KKyAgICAg ICAgICAgICAgICAjIGV4dHJhY3QgdmFsdWVzIGZyb20gL3Byb2Mvc3RhdAorICAgICAgICAgICAg ICAgIGxvYWQgPSBbMCwwXQorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDIpOgorICAg ICAgICAgICAgICAgICAgICBsb2FkW2ldID0gaW50KGxvYWRfdmFsdWVzW2ldKS1zZWxmLm9sZF9s b2FkW2ldCisKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAg ICAgICAgICAgc2VsZi5vbGRfbG9hZFtpXSA9IGludChsb2FkX3ZhbHVlc1tpXSkKKyAgICAgICAg ICAgICAgICByZXR1cm4gbG9hZAorCisKKyAgICAgICAgZGVmIHN0YXJ0ICggc2VsZiApOgorICAg ICAgICAgICAgIiIiCisgICAgICAgICAgICBTdGFydCBDUFUgdXNhZ2UgbWVhc3VyZW1lbnQKKyAg ICAgICAgICAgICIiIgorICAgICAgICAgICAgc2VsZi5zdGFydFRpbWUgPSB0aW1lLnRpbWUoKTsK KyAgICAgICAgICAgIHNlbGYuX2dldF9jcHVfbG9hZChzZWxmLnBpZCkKKworCisgICAgICAgIGRl ZiBnZXRfbG9hZChzZWxmKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgR2V0IGFuZCBy ZXNldCBDUFUgdXNhZ2UuCisKKyAgICAgICAgICAgIEByZXR1cm46IEdyb3VwIGNwdQorICAgICAg ICAgICAgICAgICAgICAocGlkLCB1c2VyWyVdLCBzeXN0ZW1bJV0sIHN1bVslXSwgdGVzdFRpbWVb c10pCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHNlbGYuZW5kVGltZSA9IHRpbWUudGlt ZSgpCisgICAgICAgICAgICB0ZXN0VGltZSA9ICBzZWxmLmVuZFRpbWUgLSBzZWxmLnN0YXJ0VGlt ZQorICAgICAgICAgICAgbG9hZCA9IHNlbGYuX2dldF9jcHVfbG9hZChzZWxmLnBpZCkKKworICAg ICAgICAgICAgdXNlciA9IGxvYWRbMF0gLyB0ZXN0VGltZQorICAgICAgICAgICAgc3lzdGVtID0g bG9hZFsxXSAvIHRlc3RUaW1lCisgICAgICAgICAgICBzdW0gPSB1c2VyICsgc3lzdGVtCisKKyAg ICAgICAgICAgIHJldHVybiAoc2VsZi5uYW1lLCBzZWxmLnBpZCwgdXNlciwgc3lzdGVtLCBzdW0s IHRlc3RUaW1lKQorCisKKyAgICBkZWYgcHJpbnRfbG9hZChwcm9jZXNzLHN5c3RlbSk6CisgICAg ICAgICIiIgorICAgICAgICBQcmludCBsb2FkIGluIHRhYnVsYXIgbW9kZS4KKworICAgICAgICBA cGFyYW0gcHJvY2VzczogbGlzdCBvZiBwcm9jZXNzIHN0YXRpc3RpYyB0dXBsZXMKKyAgICAgICAg QHBhcmFtIHN5c3RlbTogdHVwbGUgb2Ygc3lzdGVtIGNwdSB1c2FnZQorICAgICAgICAiIiIKKwor ICAgICAgICBsb2dnaW5nLmluZm8oIiUtMTBzICU2cyAlNXMgJTVzICU1cyAlMTFzIiwKKyAgICAg ICAgICAgICAgICAgICAgICJOQU1FIiwgIlBJRCIsIlVTRVIiLCJTWVMiLCJTVU0iLCJUSU1FIikK KyAgICAgICAgZm9yIHByIGluIHByb2Nlc3M6CisgICAgICAgICAgICBsb2dnaW5nLmluZm8oIiUt MTBzICU2ZCAlNC4wZiUlICU0LjBmJSUgJTQuMGYlJSAlMTAuM2ZzIiAlIHByKQorICAgICAgICBs b2dnaW5nLmluZm8oIlRPVEFMOiAgICAgLS0tLS0tICU0LjBmJSUgJTQuMGYlJSAlNC4wZiUlICUx MC4zZnMiICUKKyAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSkKKworCisgICAgZGVmIHByb2Nl c3Nfc3RhdHMoc3RhdHMsIHNjYWxlPTEuMCk6CisgICAgICAgICIiIgorICAgICAgICBQcm9jZXNz IGFuZCBwcmludCB0aGUgc3RhdHMuCisKKyAgICAgICAgQHBhcmFtIHN0YXRzOiBMaXN0IG9mIG1l YXN1cmVkIGRhdGEuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc3RhdHM6CisgICAgICAg ICAgICByZXR1cm4gTm9uZQorICAgICAgICBmb3IgaSBpbiByYW5nZSgobGVuKHN0YXRzKS0xKSww LC0xKToKKyAgICAgICAgICAgIHN0YXRzW2ldID0gc3RhdHNbaV0gLSBzdGF0c1tpLTFdCisgICAg ICAgICAgICBzdGF0c1tpXSAvPSBzY2FsZQorICAgICAgICBzdGF0c1swXSAvPSBzY2FsZQorICAg ICAgICBzdGF0cyA9IHNvcnRlZChzdGF0cykKKyAgICAgICAgcmV0dXJuIHN0YXRzCisKKworICAg IGRlZiBfc3RhcnRfY29uc29sZV9zd2l0Y2godm0sIHRpbWVvdXQ9Mik6CisgICAgICAgICIiIgor ICAgICAgICBFeGVjdXRlIGNvbnNvbGVfc3dpdGNoLnB5IG9uIGd1ZXN0LCB3YWl0IHVudGlsIGl0 IGlzIGluaXRpYWxpemVkLgorCisgICAgICAgIEBwYXJhbSB2bTogSW5mb3JtYXRpb25zIGFib3V0 IHRoZSBndWVzdC4KKyAgICAgICAgQHBhcmFtIHRpbWVvdXQ6IFRpbWVvdXQgdGhhdCB3aWxsIGJl IHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBzY3JpcHQKKyAgICAgICAgICAgICAgICBzdGFydGVkIHBy b3Blcmx5LgorICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhcnRpbmcgY29u c29sZV9zd2l0Y2gucHkgb24gZ3Vlc3QgJXMiLCB2bVswXS5uYW1lKQorICAgICAgICB2bVsxXS5z ZW5kbGluZSgicHl0aG9uIC90bXAvY29uc29sZV9zd2l0Y2gucHkiKQorICAgICAgICAobWF0Y2gs IGRhdGEpID0gdm1bMV0ucmVhZF91bnRpbF9sYXN0X2xpbmVfbWF0Y2hlcyhbIlBBU1M6IiwgIkZB SUw6Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRpbWVvdXQpCisgICAgICAgIGlmIG1hdGNoID09IDEgb3IgbWF0Y2ggaXMgTm9u ZToKKyAgICAgICAgICAgIHJhaXNlIGVycm9yLlRlc3RGYWlsKCJDb21tYW5kIGNvbnNvbGVfc3dp dGNoLnB5IG9uIGd1ZXN0ICVzIGZhaWxlZC4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiXG5yZXR1cm4gY29kZTogJXNcbiBvdXRwdXQ6XG4lcyIgJQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHZtWzBdLm5hbWUsIG1hdGNoLCBkYXRhKSkKKworCisgICAgZGVm IF9leGVjdXRlX2NvbnNvbGVfc3dpdGNoKGNvbW1hbmQsIHZtLCB0aW1lb3V0PTIpOgorICAgICAg ICAiIiIKKyAgICAgICAgRXhlY3V0ZSBnaXZlbiBjb21tYW5kIGluc2lkZSB0aGUgc2NyaXB0J3Mg bWFpbiBsb29wLCBpbmRpY2F0aW5nIHRoZSB2bQorICAgICAgICB0aGUgY29tbWFuZCB3YXMgZXhl Y3V0ZWQgb24uCisKKyAgICAgICAgQHBhcmFtIGNvbW1hbmQ6IENvbW1hbmQgdGhhdCB3aWxsIGJl IGV4ZWN1dGVkLgorICAgICAgICBAcGFyYW0gdm06IEluZm9ybWF0aW9ucyBhYm91dCB0aGUgZ3Vl c3QKKyAgICAgICAgQHBhcmFtIHRpbWVvdXQ6IFRpbWVvdXQgdXNlZCB0byB2ZXJpZnkgZXhwZWN0 ZWQgb3V0cHV0LgorCisgICAgICAgIEByZXR1cm46IFR1cGxlIChtYXRjaCBpbmRleCwgZGF0YSkK KyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dpbmcuZGVidWcoIkV4ZWN1dGluZyAnJXMnIG9uIGNv bnNvbGVfc3dpdGNoLnB5IGxvb3AsIHZtOiAlcywiCisgICAgICAgICAgICAgICAgICAgICAgInRp bWVvdXQ6ICVzIiwgY29tbWFuZCwgdm1bMF0ubmFtZSwgdGltZW91dCkKKyAgICAgICAgdm1bMV0u c2VuZGxpbmUoY29tbWFuZCkKKyAgICAgICAgKG1hdGNoLCBkYXRhKSA9IHZtWzFdLnJlYWRfdW50 aWxfbGFzdF9saW5lX21hdGNoZXMoWyJQQVNTOiIsIkZBSUw6Il0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCkKKyAg ICAgICAgaWYgbWF0Y2ggPT0gMSBvciBtYXRjaCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2Ug ZXJyb3IuVGVzdEZhaWwoIkZhaWxlZCB0byBleGVjdXRlICclcycgb24gY29uc29sZV9zd2l0Y2gu cHksICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2bTogJXMsIG91dHB1dDpc biVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tbWFuZCwgdm1bMF0u bmFtZSwgZGF0YSkpCisgICAgICAgIHJldHVybiAobWF0Y2gsIGRhdGEpCisKKworICAgIGRlZiBz b2NrZXRfcmVhZGFsbChzb2NrLCByZWFkX3RpbWVvdXQsIG1lc2FnZXNpemUpOgorICAgICAgICAi IiIKKyAgICAgICBSZWFkIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc29ja2V0LgorCisgICAgICAgIEBw YXJhbSBzb2NrOiBzb2NrZXQKKyAgICAgICAgQHBhcmFtIHJlYWRfdGltZW91dDogcmVhZCB0aW1l b3V0CisgICAgICAgIEBwYXJhbSBtZXNhZ2VzaXplOiBzaXplIG9mIG1lc3NhZ2UKKyAgICAgICAg IiIiCisgICAgICAgIHNvY2tfZGVjcmlwdG9yID0gc29jay5maWxlbm8oKQorICAgICAgICBzb2Nr LnNldHRpbWVvdXQocmVhZF90aW1lb3V0KQorICAgICAgICBtZXNzYWdlID0gIiIKKyAgICAgICAg dHJ5OgorICAgICAgICAgICAgd2hpbGUgKGxlbihtZXNzYWdlKSA8IG1lc2FnZXNpemUpOgorICAg ICAgICAgICAgICAgIG1lc3NhZ2UgKz0gc29jay5yZWN2KG1lc2FnZXNpemUpCisgICAgICAgIGV4 Y2VwdCBFeGNlcHRpb24gYXMgaW5zdDoKKyAgICAgICAgICAgIGlmIChpbnN0LmFyZ3NbMF0gPT0g InRpbWVkIG91dCIpOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlJlYWRpbmcgdGlt ZW91dCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWco aW5zdCkKKyAgICAgICAgc29jay5zZXRibG9ja2luZygxKQorICAgICAgICByZXR1cm4gbWVzc2Fn ZQorCisKKyAgICBkZWYgX3ZtX2NyZWF0ZShub19jb25zb2xlPTMsIG5vX3NlcmlhbHBvcnQ9Myk6 CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGVzIHRoZSBWTSBhbmQgY29ubmVjdHMgdGhlIHNw ZWNpZmllZCBudW1iZXIgb2YgY29uc29sZXMgYW5kIHNlcmlhbAorICAgICAgICBwb3J0cy4KKwor ICAgICAgICBAcGFyYW0gbm9fY29uc29sZTogbnVtYmVyIG9mIGRlc2lyZWQgdmlydGNvbnNvbGVz CisgICAgICAgIEBwYXJhbSBub19zZXJpYWxwb3J0OiBudW1iZXIgb2YgZGVzaXJlZCB2aXJ0c2Vy aWFscG9ydHMKKyAgICAgICAgQHJldHVybiB0dXBsZSB3aXRoIChndWVzdCBpbmZvcm1hdGlvbiwg Y29uc29sZXMgaW5mb3JtYXRpb24pCisgICAgICAgICAgICBndWVzdCBpbmZvcm1hdGlvbnMgPSBb dm0sIHNlc3Npb24sIHRtcF9kaXJdCisgICAgICAgICAgICBjb25zb2xlcyBpbmZvcm1hdGlvbnMg PSBbY29uc29sZXNbXSwgc2VyaWFscG9ydHNbXV0KKyAgICAgICAgIiIiCisgICAgICAgIGNvbnNv bGVzID0gW10KKyAgICAgICAgc2VyaWFscG9ydHMgPSBbXQorICAgICAgICB0bXBfZGlyID0gdGVt cGZpbGUubWtkdGVtcChwcmVmaXg9InZpcnRpby1jb25zb2xlLSIsIGRpcj0iL3RtcC8iKQorICAg ICAgICBpZiBub3QgcGFyYW1zLmdldCgnZXh0cmFfcGFyYW1zJyk6CisgICAgICAgICAgICBwYXJh bXNbJ2V4dHJhX3BhcmFtcyddID0gJycKKyAgICAgICAgcGFyYW1zWydleHRyYV9wYXJhbXMnXSAr PSAiIC1kZXZpY2UgdmlydGlvLXNlcmlhbCIKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBu b19jb25zb2xlKToKKyAgICAgICAgICAgIHBhcmFtc1snZXh0cmFfcGFyYW1zJ10gKz0gKCIgLWNo YXJkZXYgc29ja2V0LHBhdGg9JXMvJWQsaWQ9YyVkLCIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJzZXJ2ZXIsbm93YWl0IiAlICh0bXBfZGlyLCBpLCBpKSkKKyAgICAg ICAgICAgIHBhcmFtc1snZXh0cmFfcGFyYW1zJ10gKz0gKCIgLWRldmljZSB2aXJ0Y29uc29sZSxj aGFyZGV2PWMlZCwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFt ZT1vcmcuZmVkb3JhcHJvamVjdC5jb25zb2xlLiVkLCIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJpZD1jJWQiICUgKGksIGksIGkpKQorCisgICAgICAgIGZvciBpIGlu ICByYW5nZShub19jb25zb2xlLCBub19jb25zb2xlICsgbm9fc2VyaWFscG9ydCk6CisgICAgICAg ICAgICBwYXJhbXNbJ2V4dHJhX3BhcmFtcyddICs9ICgiIC1jaGFyZGV2IHNvY2tldCxwYXRoPSVz LyVkLGlkPXAlZCwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vy dmVyLG5vd2FpdCIgJSAodG1wX2RpciwgaSwgaSkpCisgICAgICAgICAgICBwYXJhbXNbJ2V4dHJh X3BhcmFtcyddICs9ICgiIC1kZXZpY2UgdmlydHNlcmlhbHBvcnQsY2hhcmRldj1wJWQsIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWU9b3JnLmZlZG9yYXByb2pl Y3QuZGF0YS4lZCxpZD1wJWQiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChpLCBpLCBpKSkKKworICAgICAgICBsb2dnaW5nLmRlYnVnKCJCb290aW5nIGZpcnN0IGd1 ZXN0ICVzIiwgcGFyYW1zLmdldCgibWFpbl92bSIpKQorICAgICAgICBrdm1fcHJlcHJvY2Vzc2lu Zy5wcmVwcm9jZXNzX3ZtKHRlc3QsIHBhcmFtcywgZW52LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBhcmFtcy5nZXQoIm1haW5fdm0iKSkKKworICAgICAgICB2bSA9 IGt2bV91dGlscy5lbnZfZ2V0X3ZtKGVudiwgcGFyYW1zLmdldCgibWFpbl92bSIpKQorCisgICAg ICAgIHNlc3Npb24gPSBrdm1fdGVzdF91dGlscy53YWl0X2Zvcl9sb2dpbih2bSwgMCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQocGFyYW1zLmdldCgiYm9v dF90aW1lb3V0IiwgMjQwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDAsIDIpCisKKyAgICAgICAgIyBjb25uZWN0IHRoZSBzb2NrZXRzCisgICAgICAgIGZvciBp IGluIHJhbmdlKDAsIG5vX2NvbnNvbGUpOgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2Nr ZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNvY2su Y29ubmVjdCgiJXMvJWQiICUgKHRtcF9kaXIsIGkpKQorICAgICAgICAgICAgY29uc29sZXMuYXBw ZW5kKFtzb2NrLCAib3JnLmZlZG9yYXByb2plY3QuY29uc29sZS4lZCIgJSBpLCAieWVzIl0pCisK KyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9fY29uc29sZSwgbm9fY29uc29sZSArIG5vX3Nlcmlh bHBvcnQpOgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgs IHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNvY2suY29ubmVjdCgiJXMvJWQiICUg KHRtcF9kaXIsIGkpKQorICAgICAgICAgICAgc2VyaWFscG9ydHMuYXBwZW5kKFtzb2NrLCAib3Jn LmZlZG9yYXByb2plY3QuZGF0YS4lZCIgJSBpLCAibm8iXSkKKworICAgICAgICByZXR1cm4gW3Zt LCBzZXNzaW9uLCB0bXBfZGlyXSwgW2NvbnNvbGVzLCBzZXJpYWxwb3J0c10KKworCisgICAgZGVm IHRlc3Rfc21va2Uodm0sIGNvbnNvbGVzLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAg VmlydGlvIGNvbnNvbGUgc21va2UgdGVzdC4KKworICAgICAgICBDcmVhdGVzIGxvb3BiYWNrIG9u IHRoZSB2bSBtYWNoaW5lIGJldHdlZW4gdGhlIHBvcnRzWz49Ml0gcHJvdmlkZWQgYW5kCisgICAg ICAgIHNlbmRzIHRoZSBkYXRhCisKKyAgICAgICAgQHBhcmFtIHZtOiB0YXJnZXQgdmlydHVhbCBt YWNoaW5lIFt2bSwgc2Vzc2lvbiwgdG1wX2Rpcl0KKyAgICAgICAgQHBhcmFtIGNvbnNvbGVzOiBh IGZpZWxkIG9mIHZpcnRpbyBwb3J0cyB3aXRoIHRoZSBtaW5pbXVtIG9mIDIgaXRlbXMKKyAgICAg ICAgQHBhcmFtIHBhcmFtczogdGVzdCBwYXJhbWV0ZXJzICckY29uc29sZV90eXBlOiRkYXRhOy4u LicKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dpbmcuaW5mbygiU21va2UgdGVzdDogU2VuZCBk YXRhIG9uIHRoZSBzZW5kZXIgcG9ydCwgIgorICAgICAgICAgICAgICAgICAgICAgInZlcmlmeSBk YXRhIGludGVncml0eSBvbiB0aGUgcmVjZWl2aW5nIHBvcnQiKQorICAgICAgICAjIFBSRVBBUkUK KyAgICAgICAgZm9yIHBhcmFtIGluIHBhcmFtcy5zcGxpdCgnOycpOgorICAgICAgICAgICAgaWYg bm90IHBhcmFtOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBsb2dnaW5n LmluZm8oInRlc3Rfc21va2U6IHBhcmFtczogJXMiLCBwYXJhbSkKKyAgICAgICAgICAgIHBhcmFt ID0gcGFyYW0uc3BsaXQoJzonKQorICAgICAgICAgICAgaWYgbGVuKHBhcmFtKSA+IDE6CisgICAg ICAgICAgICAgICAgZGF0YSA9IHBhcmFtWzFdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg ICAgICAgIGRhdGEgPSAiU21va2UgdGVzdCBkYXRhIgorICAgICAgICAgICAgcGFyYW0gPSAocGFy YW1bMF0gPT0gJ3NlcmlhbHBvcnQnKQorICAgICAgICAgICAgc2VuZF9wdCA9IGNvbnNvbGVzW3Bh cmFtXVswXQorICAgICAgICAgICAgcmVjdl9wdCA9IGNvbnNvbGVzW3BhcmFtXVsxXQorICAgICAg ICAgICAgX3N0YXJ0X2NvbnNvbGVfc3dpdGNoKHZtLCAxMC4wKQorCisgICAgICAgICAgICAjIFRF U1QKKyAgICAgICAgICAgIF9leGVjdXRlX2NvbnNvbGVfc3dpdGNoKCdzdGFydF9zd2l0Y2goWyVz XSwgWyVzXSknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cihzZW5k X3B0WzE6M10pLCBzdHIocmVjdl9wdFsxOjNdKSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZtLCAyLjApCisKKyAgICAgICAgICAgIHNlbmRfcHRbMF0uc2VuZGFsbChkYXRh KQorICAgICAgICAgICAgZCA9IHNvY2tldF9yZWFkYWxsKHJlY3ZfcHRbMF0sIDEuMCwgbGVuKGRh dGEpKQorICAgICAgICAgICAgaWYgZGF0YSAhPSBkOgorICAgICAgICAgICAgICAgIHJhaXNlIGVy cm9yLlRlc3RGYWlsKCJ0ZXN0X3Ntb2tlOiByZWNlaXZlZCBkYXRhIG9uIHBvcnQgJXMgIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb2VzIG5vdCBtYXRjaCBkYXRhIHNl bnQgdGhyb3VnaCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcnQg JXMiICUgKHJlY3ZfcHQsIHNlbmRfcHQpKQorCisgICAgICAgICAgICB2bVsxXS5zZW5kbGluZSgi ZGllKCkiKQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygidGVzdF9zbW9rZTogUEFTUyIpCisKKwor ICAgIGRlZiB0ZXN0X2xvb3BiYWNrKHZtLCBjb25zb2xlcywgcGFyYW1zKToKKyAgICAgICAgIiIi CisgICAgICAgIFZpcnRpbyBjb25zb2xlIGxvb3BiYWNrIHRlc3QuCisKKyAgICAgICAgQ3JlYXRl cyBsb29wYmFjayBvbiB0aGUgdm0gbWFjaGluZSBiZXR3ZWVuIHNlbmRfcHQgYW5kIHJlY3ZfcHRz CisgICAgICAgIHBvcnRzIGFuZCBzZW5kcyBsZW5ndGggYW1vdW50IG9mIGRhdGEgdGhyb3VnaCB0 aGlzIGNvbm5lY3Rpb24uCisgICAgICAgIEl0IHZhbGlkYXRlcyB0aGUgY29ycmVjdG5lc3Mgb2Yg dGhlIGRhdGEgc2VudC4KKworICAgICAgICBAcGFyYW0gdm06IHRhcmdldCB2aXJ0dWFsIG1hY2hp bmUgW3ZtLCBzZXNzaW9uLCB0bXBfZGlyXQorICAgICAgICBAcGFyYW0gY29uc29sZXM6IGEgZmll bGQgb2YgdmlydGlvIHBvcnRzIHdpdGggdGhlIG1pbmltdW0gb2YgMiBpdGVtcworICAgICAgICBA cGFyYW0gcGFyYW1zOiB0ZXN0IHBhcmFtZXRlcnMsIG11bHRpcGxlIHJlY2lldmVycyBhbGxvd2Vk LgorICAgICAgICAgICAgICAgICckc291cmNlX2NvbnNvbGVfdHlwZUBidWZmZXJfbGVuZ3RoOgor ICAgICAgICAgICAgICAgICAkZGVzdGluYXRpb25fY29uc29sZV90eXBlMUBidWZmZXJfbGVuZ3Ro Oi4uLjoKKyAgICAgICAgICAgICAgICAgJGxvb3BiYWNrX2J1ZmZlcl9sZW5ndGg7Li4uJworICAg ICAgICAiIiIKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJMb29wYmFjayB0ZXN0OiBDcmVhdGVzIGEg bG9vcGJhY2sgYmV0d2VlbiBzZW5kZXIgcG9ydCAiCisgICAgICAgICAgICAgICAgICAgICAiYW5k IHJlY2VpdmluZyBwb3J0LCBzZW5kIGRhdGEgdGhyb3VnaCB0aGlzIGNvbm5lY3Rpb24sICIKKyAg ICAgICAgICAgICAgICAgICAgICJ2ZXJpZnkgZGF0YSBjb3JyZWN0bmVzcy4iKQorICAgICAgICAj IFBSRVBBUkUKKyAgICAgICAgZm9yIHBhcmFtIGluIHBhcmFtcy5zcGxpdCgnOycpOgorICAgICAg ICAgICAgaWYgbm90IHBhcmFtOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg ICBsb2dnaW5nLmluZm8oInRlc3RfbG9vcGJhY2s6IHBhcmFtczogJXMiLCBwYXJhbSkKKyAgICAg ICAgICAgIHBhcmFtID0gcGFyYW0uc3BsaXQoJzonKQorICAgICAgICAgICAgaWR4X3NlcmlhbHBv cnQgPSAwCisgICAgICAgICAgICBpZHhfY29uc29sZSA9IDAKKyAgICAgICAgICAgIGJ1Zl9sZW4g PSBbXQorICAgICAgICAgICAgaWYgKHBhcmFtWzBdLnN0YXJ0c3dpdGgoJ2NvbnNvbGUnKSk6Cisg ICAgICAgICAgICAgICAgc2VuZF9wdCA9IGNvbnNvbGVzWzBdW2lkeF9jb25zb2xlXQorICAgICAg ICAgICAgICAgIGlkeF9jb25zb2xlICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgc2VuZF9wdCA9IGNvbnNvbGVzWzFdW2lkeF9zZXJpYWxwb3J0XQorICAgICAgICAgICAg ICAgIGlkeF9zZXJpYWxwb3J0ICs9IDEKKyAgICAgICAgICAgIGlmIChsZW4ocGFyYW1bMF0uc3Bs aXQoJ0AnKSkgPT0gMik6CisgICAgICAgICAgICAgICAgYnVmX2xlbi5hcHBlbmQoaW50KHBhcmFt WzBdLnNwbGl0KCdAJylbMV0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBi dWZfbGVuLmFwcGVuZCgzMikKKyAgICAgICAgICAgIHJlY3ZfcHRzID0gW10KKyAgICAgICAgICAg IGZvciBwYXJtIGluIHBhcmFtWzE6XToKKyAgICAgICAgICAgICAgICBpZiAocGFybS5pc2RpZ2l0 KCkpOgorICAgICAgICAgICAgICAgICAgICBidWZfbGVuLmFwcGVuZChpbnQocGFybSkpCisgICAg ICAgICAgICAgICAgICAgIGJyZWFrICAgIyBidWZfbGVuIGlzIHRoZSBsYXN0IHBvcnRpb24gb2Yg cGFyYW0KKyAgICAgICAgICAgICAgICBpZiAocGFybS5zdGFydHN3aXRoKCdjb25zb2xlJykpOgor ICAgICAgICAgICAgICAgICAgICByZWN2X3B0cy5hcHBlbmQoY29uc29sZXNbMF1baWR4X2NvbnNv bGVdKQorICAgICAgICAgICAgICAgICAgICBpZHhfY29uc29sZSArPSAxCisgICAgICAgICAgICAg ICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVjdl9wdHMuYXBwZW5kKGNvbnNvbGVzWzFd W2lkeF9zZXJpYWxwb3J0XSkKKyAgICAgICAgICAgICAgICAgICAgaWR4X3NlcmlhbHBvcnQgKz0g MQorICAgICAgICAgICAgICAgIGlmIChsZW4ocGFybVswXS5zcGxpdCgnQCcpKSA9PSAyKToKKyAg ICAgICAgICAgICAgICAgICAgYnVmX2xlbi5hcHBlbmQoaW50KHBhcm1bMF0uc3BsaXQoJ0AnKVsx XSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnVmX2xlbi5h cHBlbmQoMzIpCisgICAgICAgICAgICAjIFRoZXJlIG11c3QgYmUgc3VtKGlkeF8qKSBjb25zb2xl cyArIGxhc3QgaXRlbSBhcyBsb29wYmFjayBidWZfbGVuCisgICAgICAgICAgICBpZiBsZW4oYnVm X2xlbikgPT0gKGlkeF9jb25zb2xlICsgaWR4X3NlcmlhbHBvcnQpOgorICAgICAgICAgICAgICAg IGJ1Zl9sZW4uYXBwZW5kKDMyKQorCisgICAgICAgICAgICBpZiBsZW4ocmVjdl9wdHMpID09IDA6 CisgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwoInRlc3RfbG9vcGJhY2s6IGlu Y29ycmVjdCByZWN2IGNvbnNvbGVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJkZWZpbml0aW9uIikKKyAgICAgICAgICAgIHRocmVhZHMgPSBbXQorICAgICAgICAgICAg YnVmZmVycyA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocmVjdl9wdHMp KToKKyAgICAgICAgICAgICAgICBidWZmZXJzLmFwcGVuZChkZXF1ZSgpKQorCisgICAgICAgICAg ICBfc3RhcnRfY29uc29sZV9zd2l0Y2godm0sIDEwLjApCisgICAgICAgICAgICB0bXAgPSBzdHIo cmVjdl9wdHNbMF1bMTozXSkKKyAgICAgICAgICAgIGZvciByZWN2X3B0IGluIHJlY3ZfcHRzWzE6 XToKKyAgICAgICAgICAgICAgICB0bXAgKz0gIiwgIiArIHN0cihyZWN2X3B0WzE6M10pCisgICAg ICAgICAgICBfZXhlY3V0ZV9jb25zb2xlX3N3aXRjaCgnc3RhcnRfc3dpdGNoKFslc10sIFslc10s ICVkKScgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cihzZW5kX3B0 WzE6M10pLCB0bXAsIGJ1Zl9sZW5bLTFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZtLCAyLjApCisKKyAgICAgICAgICAgICMgVEVTVAorICAgICAgICAgICAgdGhyZWFk ID0gdGhfc2VuZChzZW5kX3B0LCAxMDQ4NTc2LCBidWZmZXJzLCBidWZfbGVuWzBdKQorICAgICAg ICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHRocmVhZCkK KworICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHJlY3ZfcHRzKSk6CisgICAgICAgICAg ICAgICAgdGhyZWFkID0gdGhfcmVjdihyZWN2X3B0c1tpXSwgYnVmZmVyc1tpXSwgMTA0ODU3NiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zl9sZW5baSsxXSkKKyAgICAgICAg ICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHRo cmVhZCkKKworICAgICAgICAgICAgZGVhZF90aHJlYWRzID0gRmFsc2UKKyAgICAgICAgICAgICMg U2VuZCArIHJlY3YgdGhyZWFkcywgREwgNjBzCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg2 MCk6CisgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICAg ICAgaWYgbm90IHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHQuRXhp dFN0YXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLlRlc3RGYWlsKCJ0ZXN0 X2xvb3BiYWNrOiBzZW5kL3JlY3YgdGhyZWFkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiZmFpbGVkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRf dGhyZWFkcyA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBkZWFkX3RocmVhZHM6CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdG1wID0gIiIKKyAgICAgICAgICAg ICAgICBmb3IgYnVmIGluIGJ1ZmZlcnM6CisgICAgICAgICAgICAgICAgICAgIHRtcCArPSBzdHIo bGVuKGJ1ZikpICsgIiwgIgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoInRlc3RfbG9v cGJhY2s6IGJ1ZmZlciBsZW5ndGggKCVzKSIsIHRtcFs6LTJdKQorICAgICAgICAgICAgICAgIHRp bWUuc2xlZXAoMSkKKworICAgICAgICAgICAgaWYgbm90IGRlYWRfdGhyZWFkczoKKyAgICAgICAg ICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgidGVzdF9sb29wYmFjazogc2VuZC9yZWN2IHRp bWVvdXQiKQorICAgICAgICAgICAgIyBhdCB0aGlzIHBvaW50IGF0IGxlYXN0IG9uZSB0aHJlYWQg ZGllZC4gSXQgc2hvdWxkIGJlIHRoZSBzZW5kIG9uZS4KKworICAgICAgICAgICAgIyBXYWl0IGZv ciByZWN2IHRocmVhZHMgdG8gZmluaXNoIHRoZWlyJ3Mgd29yaworICAgICAgICAgICAgZm9yIGkg aW4gcmFuZ2UoNjApOgorICAgICAgICAgICAgICAgIGRlYWRfdGhyZWFkcyA9IFRydWUKKyAgICAg ICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgICAgICBpZiB0Lmlz X2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWFkX3RocmVhZHMgPSBGYWxzZQor ICAgICAgICAgICAgICAgICMgVGhlcmUgYXJlIG5vIGxpdmluZyB0aHJlYWRzCisgICAgICAgICAg ICAgICAgaWYgZGVhZF90aHJlYWRzOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAg ICAgICAgICAgIHRtcCA9ICIiCisgICAgICAgICAgICAgICAgZm9yIGJ1ZiBpbiBidWZmZXJzOgor ICAgICAgICAgICAgICAgICAgICB0bXAgKz0gc3RyKGxlbihidWYpKSArICIsICIKKyAgICAgICAg ICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0ZXN0X2xvb3BiYWNrOiBidWZmZXIgbGVuZ3RoICglcyki LCB0bXBbOi0yXSkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgICAg IGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgaWYgdC5FeGl0U3RhdGU6CisgICAg ICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yLlRlc3RGYWlsKCJ0ZXN0X2xvb3BiYWNrOiByZWN2 IHRocmVhZCBmYWlsZWQiKQorCisgICAgICAgICAgICAjIEF0IGxlYXN0IG9uZSB0aHJlYWQgaXMg c3RpbGwgYWxpdmUKKyAgICAgICAgICAgIGlmIG5vdCBkZWFkX3RocmVhZHM6CisgICAgICAgICAg ICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwoInRlc3RfbG9vcGJhY2s6IHJlY3YgdGltZW91dCIp CisKKyAgICAgICAgICAgIHZtWzFdLnNlbmRsaW5lKCJkaWUoKSIpCisKKyAgICAgICAgbG9nZ2lu Zy5pbmZvKCJ0ZXN0X2xvb3BiYWNrOiBQQVNTIikKKworCisgICAgZGVmIHRlc3RfcGVyZih2bSwg Y29uc29sZXMsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBWaXJ0aW8gY29uc29sZSBw ZXJmb3JtYW5jZSB0ZXN0LgorCisgICAgICAgIFRlc3RzIHBlcmZvcm1hbmNlIG9mIHRoZSB2aXJ0 aW9fY29uc29sZSB0dW5lbC4gRmlyc3QgaXQgc2VuZHMgdGhlIGRhdGEKKyAgICAgICAgZnJvbSBo b3N0IHRvIGd1ZXN0IGFuZCB0aGVuIGJhY2suIEl0IHByb3ZpZGVzIGluZm9ybWF0aW9ucyBhYm91 dAorICAgICAgICBjb21wdXRlciB1dGlsaXphdGlvbiBhbmQgc3RhdGlzdGljIGluZm9ybWF0aW9u IGFib3V0IHRoZSB0aHJvdWdocHV0LgorCisgICAgICAgIEBwYXJhbSB2bTogdGFyZ2V0IHZpcnR1 YWwgbWFjaGluZSBbdm0sIHNlc3Npb24sIHRtcF9kaXJdCisgICAgICAgIEBwYXJhbSBjb25zb2xl czogYSBmaWVsZCBvZiB2aXJ0aW8gcG9ydHMgd2l0aCB0aGUgbWluaW11bSBvZiAyIGl0ZW1zCisg ICAgICAgIEBwYXJhbSBwYXJhbXM6IHRlc3QgcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICAn JGNvbnNvbGVfdHlwZUBidWZmZXJfbGVuZ3RoOiR0ZXN0X2R1cmF0aW9uOy4uLicKKyAgICAgICAg IiIiCisgICAgICAgIGxvZ2dpbmcuaW5mbygiUGVyZm9ybWFuY2UgdGVzdDogTWVhc3VyZSBwZXJm b3JtYW5jZSBmb3IgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICJ2aXJ0aW8gY29uc29sZSB0 dW5uZWwiKQorICAgICAgICAjIFBSRVBBUkUKKyAgICAgICAgZm9yIHBhcmFtIGluIHBhcmFtcy5z cGxpdCgnOycpOgorICAgICAgICAgICAgaWYgbm90IHBhcmFtOgorICAgICAgICAgICAgICAgIGNv bnRpbnVlCisgICAgICAgICAgICBsb2dnaW5nLmluZm8oInRlc3RfcGVyZjogcGFyYW1zOiAlcyIs IHBhcmFtKQorICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5zcGxpdCgnOicpCisgICAgICAgICAg ICBpZiBsZW4ocGFyYW0pID4gMSBhbmQgcGFyYW1bMV0uaXNkaWdpdCgpOgorICAgICAgICAgICAg ICAgIGR1cmF0aW9uID0gZmxvYXQocGFyYW1bMV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAg ICAgICAgICAgIGR1cmF0aW9uID0gMzAuMAorICAgICAgICAgICAgcGFyYW0gPSBwYXJhbVswXS5z cGxpdCgnQCcpCisgICAgICAgICAgICBpZiBsZW4ocGFyYW0pID4gMSBhbmQgcGFyYW1bMV0uaXNk aWdpdCgpOgorICAgICAgICAgICAgICAgIGJ1Zl9sZW4gPSBpbnQocGFyYW1bMV0pCisgICAgICAg ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJ1Zl9sZW4gPSAzMgorICAgICAgICAgICAgaWYg cGFyYW1bMF0gPT0gInNlcmlhbHBvcnQiOgorICAgICAgICAgICAgICAgIHBvcnQgPSBjb25zb2xl c1sxXVswXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwb3J0ID0gY29uc29s ZXNbMF1bMF0KKyAgICAgICAgICAgIGRhdGEgPSBhcnJheS5hcnJheSgiTCIpCisgICAgICAgICAg ICBmb3IgaSBpbiByYW5nZShtYXgoKGJ1Zl9sZW4gLyBkYXRhLml0ZW1zaXplKSwgMSkpOgorICAg ICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHJhbmRvbS5yYW5kcmFuZ2Uoc3lzLm1heGludCkpCisK KyAgICAgICAgICAgIGV2ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgICAgIHRocmVhZCA9 IHRoX3NlbmRfbG9vcChwb3J0WzBdLCBkYXRhLnRvc3RyaW5nKCksIGV2KQorCisgICAgICAgICAg ICBfc3RhcnRfY29uc29sZV9zd2l0Y2godm0sIDEwLjApCisKKyAgICAgICAgICAgIF9leGVjdXRl X2NvbnNvbGVfc3dpdGNoKCdzdGFydF9zd2l0Y2goWyVzXSwgW10sICVkKScgJQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cihwb3J0WzE6M10pLCBidWZfbGVuKSwgdm0s IDIuMCkKKworICAgICAgICAgICAgIyBURVNUCisgICAgICAgICAgICAjIEhvc3QgLT4gR3Vlc3QK KyAgICAgICAgICAgIGxvYWQgPSBbXQorICAgICAgICAgICAgc3RhdHMgPSBhcnJheS5hcnJheSgn ZicsIFtdKQorICAgICAgICAgICAgc2xpY2UgPSBmbG9hdChkdXJhdGlvbikvMTAwCisgICAgICAg ICAgICBsb2FkLmFwcGVuZChhdmVyYWdlX2NwdV9sb2FkKCkpCisgICAgICAgICAgICBsb2FkLmFw cGVuZChhdmVyYWdlX3Byb2Nlc3NfY3B1X2xvYWQob3MuZ2V0cGlkKCksICdhdXRvdGVzdCcpKQor ICAgICAgICAgICAgbG9hZC5hcHBlbmQoYXZlcmFnZV9wcm9jZXNzX2NwdV9sb2FkKHZtWzBdLmdl dF9waWQoKSwgJ1ZNJykpCisgICAgICAgICAgICBmb3IgbGQgaW4gbG9hZDoKKyAgICAgICAgICAg ICAgICBsZC5zdGFydCgpCisgICAgICAgICAgICBfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAg ICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAg ICAgICAgICAgICAgICBzdGF0cy5hcHBlbmQodGhyZWFkLmlkeCkKKyAgICAgICAgICAgICAgICB0 aW1lLnNsZWVwKHNsaWNlKQorICAgICAgICAgICAgX3RpbWUgPSB0aW1lLnRpbWUoKSAtIF90aW1l IC0gZHVyYXRpb24KKyAgICAgICAgICAgIHByaW50X2xvYWQoW2xvYWRbMV0uZ2V0X2xvYWQoKSwg bG9hZFsyXS5nZXRfbG9hZCgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgbG9hZFswXS5nZXRf bG9hZCgpKQorICAgICAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgICAgIHRocmVhZC5qb2luKCkK KyAgICAgICAgICAgIGlmIChfdGltZSA+IHNsaWNlKToKKyAgICAgICAgICAgICAgICBsb2dnaW5n LmVycm9yKCJ0ZXN0X3BlcmY6IHRlc3QgcmFuICVmcyBsb25nZXIgIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIihtb3JlIHRoYW4gMSBzbGljZSkiLCBfdGltZSkKKyAgICAgICAgICAg IGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygidGVzdF9wZXJmOiB0ZXN0IHJh biAlZnMgbG9uZ2VyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIobGVzcyB0aGFu IDEgc2xpY2UpIiwgX3RpbWUpCisgICAgICAgICAgICBzdGF0cyA9IHByb2Nlc3Nfc3RhdHMoc3Rh dHNbMTpdLCBzbGljZSoxMDI0KjEwMjQpCisgICAgICAgICAgICBsb2dnaW5nLmluZm8oIkhvc3Qg LT4gR3Vlc3QgW01CL3NdIG1pbi9tZWQvbWF4ID0gJS4zZi8lLjNmLyUuM2YiLAorICAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXRzWzBdLCBzdGF0c1tsZW4oc3RhdHMpLzJdLCBzdGF0c1stMV0p CisgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgICAgICB2bVsxXS5zZW5kbGluZSgi ZGllKCkiKQorCisgICAgICAgICAgICAjIEd1ZXN0IC0+IEhvc3QKKyAgICAgICAgICAgIF9zdGFy dF9jb25zb2xlX3N3aXRjaCh2bSwgMTAuMCkKKyAgICAgICAgICAgIF9leGVjdXRlX2NvbnNvbGVf c3dpdGNoKCdzZW5kZXJfcHJlcGFyZSglcywgJWQpJyAlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc3RyKHBvcnRbMTozXSksIGJ1Zl9sZW4pLCB2bSwgMTApCisgICAgICAg ICAgICBzdGF0cyA9IGFycmF5LmFycmF5KCdmJywgW10pCisgICAgICAgICAgICBldi5jbGVhcigp CisgICAgICAgICAgICB0aHJlYWQgPSB0aF9yZWN2X251bGwocG9ydCwgZXYsIGJ1Zl9sZW4pCisg ICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgIyByZXNldCBsb2FkIG1lYXN1 cmVzCisgICAgICAgICAgICBmb3IgbGQgaW4gbG9hZDoKKyAgICAgICAgICAgICAgICBsZC5nZXRf bG9hZCgpCisgICAgICAgICAgICBfZXhlY3V0ZV9jb25zb2xlX3N3aXRjaCgnc2VuZGVyX3N0YXJ0 KCknLCB2bSwgMikKKyAgICAgICAgICAgIF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAg IGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICAgICAgc3RhdHMuYXBwZW5kKHRocmVh ZC5pZHgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcChzbGljZSkKKyAgICAgICAgICAgIF90 aW1lID0gdGltZS50aW1lKCkgLSBfdGltZSAtIGR1cmF0aW9uCisgICAgICAgICAgICBwcmludF9s b2FkKFtsb2FkWzFdLmdldF9sb2FkKCksIGxvYWRbMl0uZ2V0X2xvYWQoKV0sCisgICAgICAgICAg ICAgICAgICAgICAgIGxvYWRbMF0uZ2V0X2xvYWQoKSkKKyAgICAgICAgICAgIHZtWzFdLnNlbmRs aW5lKCJkaWUoKSIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgICAgICBldi5z ZXQoKQorICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgaWYgKF90aW1lID4g c2xpY2UpOiAjIERldmlhdGlvbiBpcyBoaWdoZXIgdGhhbiAxIHNsaWNlCisgICAgICAgICAgICAg ICAgbG9nZ2luZy5lcnJvcigidGVzdF9wZXJmOiB0ZXN0IHJhbiAlZnMgbG9uZ2VyICIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIobW9yZSB0aGFuIDEgc2xpY2UpIiwgX3RpbWUpCisg ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoInRlc3RfcGVy ZjogdGVzdCByYW4gJWZzIGxvbmdlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi KGxlc3MgdGhhbiAxIHNsaWNlKSIsIF90aW1lKQorICAgICAgICAgICAgc3RhdHMgPSBwcm9jZXNz X3N0YXRzKHN0YXRzWzE6XSwgc2xpY2UqMTAyNCoxMDI0KQorICAgICAgICAgICAgbG9nZ2luZy5p bmZvKCJHdWVzdCAtPiBIb3N0IFtNQi9zXSBtaW4vbWVkL21heCA9ICUuM2YvJS4zZi8lLjNmIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0c1swXSwgc3RhdHNbbGVuKHN0YXRzKS8yXSwg c3RhdHNbLTFdKQorICAgICAgICAgICAgZm9yIGxkIGluIGxvYWQ6CisgICAgICAgICAgICAgICAg ZGVsKGxkKQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygidGVzdF9wZXJmOiBQQVNTIikKKworCisg ICAgIyBJTklUSUFMSVpFCisgICAgdGVzdF9zbW9rZV9wYXJhbXMgPSBwYXJhbXMuZ2V0KCd2aXJ0 aW9fY29uc29sZV9zbW9rZScsICcnKQorICAgIHRlc3RfbG9vcGJhY2tfcGFyYW1zID0gcGFyYW1z LmdldCgndmlydGlvX2NvbnNvbGVfbG9vcGJhY2snLCAnJykKKyAgICB0ZXN0X3BlcmZfcGFyYW1z ID0gcGFyYW1zLmdldCgndmlydGlvX2NvbnNvbGVfcGVyZicsICcnKQorCisgICAgbm9fc2VyaWFs cG9ydHMgPSAwCisgICAgbm9fY29uc29sZXMgPSAwCisKKyAgICAjIGNvbnNvbGVzIHJlcXVpcmVk IGZvciBTbW9rZSB0ZXN0CisgICAgaWYgKHRlc3Rfc21va2VfcGFyYW1zLmNvdW50KCdzZXJpYWxw b3J0JykpOgorICAgICAgICBub19zZXJpYWxwb3J0cyA9IG1heCgyLCBub19zZXJpYWxwb3J0cykK KyAgICBpZiAodGVzdF9zbW9rZV9wYXJhbXMuY291bnQoJ2NvbnNvbGUnKSk6CisgICAgICAgIG5v X2NvbnNvbGVzID0gbWF4KDIsIG5vX2NvbnNvbGVzKQorCisgICAgIyBjb25zb2xlcyByZXF1aXJl ZCBmb3IgTG9vcGJhY2sgdGVzdAorICAgIGZvciBwYXJhbSBpbiB0ZXN0X2xvb3BiYWNrX3BhcmFt cy5zcGxpdCgnOycpOgorICAgICAgICBub19zZXJpYWxwb3J0cyA9IG1heChub19zZXJpYWxwb3J0 cywgcGFyYW0uY291bnQoJ3NlcmlhbHBvcnQnKSkKKyAgICAgICAgbm9fY29uc29sZXMgPSBtYXgo bm9fY29uc29sZXMsIHBhcmFtLmNvdW50KCdjb25zb2xlJykpCisKKyAgICAjIGNvbnNvbGVzIHJl cXVpcmVkIGZvciBQZXJmb3JtYW5jZSB0ZXN0CisgICAgaWYgKHRlc3RfcGVyZl9wYXJhbXMuY291 bnQoJ3NlcmlhbHBvcnQnKSk6CisgICAgICAgIG5vX3NlcmlhbHBvcnRzID0gbWF4KDEsIG5vX3Nl cmlhbHBvcnRzKQorICAgIGlmICh0ZXN0X3BlcmZfcGFyYW1zLmNvdW50KCdjb25zb2xlJykpOgor ICAgICAgICBub19jb25zb2xlcyA9IG1heCgxLCBub19jb25zb2xlcykKKworICAgIHZtLCBjb25z b2xlcyA9IF92bV9jcmVhdGUobm9fY29uc29sZXMsIG5vX3NlcmlhbHBvcnRzKQorCisgICAgIyBD b3B5IGNvbnNvbGVfc3dpdGNoLnB5IGludG8gZ3Vlc3RzCisgICAgcHdkID0gb3MucGF0aC5qb2lu KG9zLmVudmlyb25bJ0FVVE9ESVInXSwgJ3Rlc3RzL2t2bScpCisgICAgdmtzbWRfc3JjID0gb3Mu cGF0aC5qb2luKHB3ZCwgInNjcmlwdHMvY29uc29sZV9zd2l0Y2gucHkiKQorICAgIGRzdF9kaXIg PSAiL3RtcCIKKyAgICBpZiBub3Qgdm1bMF0uY29weV9maWxlc190byh2a3NtZF9zcmMsIGRzdF9k aXIpOgorICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiY29weV9maWxlc190byBmYWlsZWQg JXMiICUgdm1bMF0ubmFtZSkKKworICAgICMgQUNUVUFMIFRFU1RJTkcKKyAgICB0ZXN0X3Ntb2tl KHZtLCBjb25zb2xlcywgdGVzdF9zbW9rZV9wYXJhbXMpCisgICAgdGVzdF9sb29wYmFjayh2bSwg Y29uc29sZXMsIHRlc3RfbG9vcGJhY2tfcGFyYW1zKQorICAgIHRlc3RfcGVyZih2bSwgY29uc29s ZXMsIHRlc3RfcGVyZl9wYXJhbXMpCisKKyAgICAjIENMRUFOVVAKKyAgICB2bVsxXS5jbG9zZSgp CisgICAgdm1bMF0uZGVzdHJveShncmFjZWZ1bGx5ID0gRmFsc2UpCisgICAgc2h1dGlsLnJtdHJl ZSh2bVsyXSkKZGlmZiAtLWdpdCBhL2NsaWVudC90ZXN0cy9rdm0vdGVzdHNfYmFzZS5jZmcuc2Ft cGxlIGIvY2xpZW50L3Rlc3RzL2t2bS90ZXN0c19iYXNlLmNmZy5zYW1wbGUKaW5kZXggYTEwZjc3 MC4uNzU1NjY5MyAxMDA2NDQKLS0tIGEvY2xpZW50L3Rlc3RzL2t2bS90ZXN0c19iYXNlLmNmZy5z YW1wbGUKKysrIGIvY2xpZW50L3Rlc3RzL2t2bS90ZXN0c19iYXNlLmNmZy5zYW1wbGUKQEAgLTQ5 NCw5ICs0OTQsMjAgQEAgdmFyaWFudHM6CiAgICAgICAgICAgICAgICAga3NtX21vZGUgPSAic2Vy aWFsIgogICAgICAgICAgICAgLSBrc21fcGFyYWxsZWw6CiAgICAgICAgICAgICAgICAga3NtX21v ZGUgPSAicGFyYWxsZWwiCisKICAgICAtIGlvZnV6ejoKICAgICAgICAgdHlwZSA9IGlvZnV6egog CisgICAgLSB2aXJ0aW9fY29uc29sZToKKyAgICAgICAgdm1zID0gJycKKyAgICAgICAgdHlwZSA9 IHZpcnRpb19jb25zb2xlCisgICAgICAgICMgc21va2UgcGFyYW1zIC0gJGNvbnNvbGVfdHlwZTpk YXRhX3N0cmluZworICAgICAgICB2aXJ0aW9fY29uc29sZV9zbW9rZSA9ICJzZXJpYWxwb3J0O2Nv bnNvbGU6Q3VzdG9tIGRhdGEiCisgICAgICAgICMgbG9vcGJhY2sgcGFyYW1zIC0gJyRzb3VyY2Vf Y29uc29sZV90eXBlQGJ1ZmZlcl9sZW5ndGg6JGRlc3RpbmF0aW9uX2NvbnNvbGVfdHlwZTFAYnVm ZmVyX2xlbmd0aDouLi46JGxvb3BiYWNrX2J1ZmZlcl9sZW5ndGg7Li4uJworICAgICAgICB2aXJ0 aW9fY29uc29sZV9sb29wYmFjayA9ICJzZXJpYWxwb3J0OnNlcmlhbHBvcnQ7c2VyaWFscG9ydEAx MDI0OnNlcmlhbHBvcnRAMzI6Y29uc29sZUAxMDI0OmNvbnNvbGVAODoxNiIKKyAgICAgICAgIyBw ZXJmIHBhcmFtcyAtICRjb25zb2xlX3R5cGVAYnVmZmVyX2xlbmd0aDokdGVzdF9kdXJhdGlvbgor ICAgICAgICB2aXJ0aW9fY29uc29sZV9wZXJmID0gInNlcmlhbHBvcnQ7c2VyaWFscG9ydEAxMDAw MDAwOjEyMDtjb25zb2xlQDEwMjQ6NjAiCisKICAgICAjIFRoaXMgdW5pdCB0ZXN0IG1vZHVsZSBp cyBmb3Igb2xkZXIgYnJhbmNoZXMgb2YgS1ZNIHRoYXQgdXNlIHRoZQogICAgICMga3ZtY3RsIHRl c3QgaGFybmVzcyAoc3VjaCBhcyB0aGUgY29kZSBzaGlwcGVkIHdpdGggUkhFTCA1LngpCiAgICAg LSB1bml0X3Rlc3Rfa3ZtY3RsOgotLSAKMS43LjIuMgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KQXV0b3Rlc3QgbWFpbGluZyBsaXN0CkF1dG90ZXN0QHRl c3Qua2VybmVsLm9yZwpodHRwOi8vdGVzdC5rZXJuZWwub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0 aW5mby9hdXRvdGVzdAo=