From e191320eb8c1fd063a8e93b9a4a82a5ca47ca541 Mon Sep 17 00:00:00 2001 From: Gitea Action Date: Sat, 20 Jun 2026 17:16:59 +0000 Subject: [PATCH] VI3DGL: v1.4.2 (2026-06-20T17:16) --- VI3DGL/sync-bundle-03.txt | 5134 ++++++++++++++++++------------------- 1 file changed, 2567 insertions(+), 2567 deletions(-) diff --git a/VI3DGL/sync-bundle-03.txt b/VI3DGL/sync-bundle-03.txt index ac1d5e3..840404a 100644 --- a/VI3DGL/sync-bundle-03.txt +++ b/VI3DGL/sync-bundle-03.txt @@ -6583,7 +6583,7 @@ dGlvbiB3cE5hZWNoc3RlV29jaGUoKSAgeyB3cE9mZnNldCsrOyB3cFJlbmRlcm4oKTsgfQpmdW5j dGlvbiB3cEFrdHVlbGxlV29jaGUoKSAgeyB3cE9mZnNldCA9IDA7IHdwUmVuZGVybigpOyB9Cgpl eHBvcnQgewogICAgd3BXb2NoZVRhZ2UsIHdwUmVuZGVybiwgcHBSZW5kZXJuLAogICAgd3BWb3J3 b2NoZSwgd3BOYWVjaHN0ZVdvY2hlLCB3cEFrdHVlbGxlV29jaGUKfTsK -### FILE: server.ps1 | 241201 +### FILE: server.ps1 | 241203 IyBTdGFuZDogMjAyNi0wNS0xNA0KcGFyYW0oDQogICAgW2ludF0kUG9ydCA9IDgwODAsDQogICAg W3N0cmluZ10kUm9vdFBhdGggPSAnJywNCiAgICAjIE9wdGlvbmFsZXMgendlaXRlcyBSb290IGZ1 ZXIgZ2VtZWluc2FtZSBEYXRlbiAoYWRtaW4uanNvbiBldGMuKS4gV2Vubg0KICAgICMgZ2VzZXR6 @@ -8229,2593 +8229,2593 @@ biB9DQogICAgJHNjcmlwdDpVcGRhdGVMYXN0Q2hlY2tVdGMgPSBbZGF0ZXRpbWVdOjpVdGNOb3cN CiAgICAkbG9jYWxWZXIgPSAnMC4wLjAnDQogICAgJF92ZiA9IEpvaW4tUGF0aCAkUm9vdCAnVkVS U0lPTicNCiAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkX3ZmKSB7ICRsb2NhbFZlciA9 IChHZXQtQ29udGVudCAtTGl0ZXJhbFBhdGggJF92ZiAtUmF3KS5UcmltKCkgfQ0KICAgIHRyeSB7 -DQogICAgICAgICRydiA9IChJbnZva2UtV2ViUmVxdWVzdCAtVXJpICdodHRwczovL2dpdGVhLnJo -aW5vLm5ydy9SaGluby9TdGF0dXNRdW9fVXBkYXRlcy9yYXcvYnJhbmNoL21haW4vVkkzREdML1ZF -UlNJT04nIGANCiAgICAgICAgICAgICAgIC1Vc2VCYXNpY1BhcnNpbmcgLVRpbWVvdXRTZWMgMyAt -RXJyb3JBY3Rpb24gU3RvcCkuQ29udGVudC5UcmltKCkNCiAgICAgICAgJHNjcmlwdDpSZW1vdGVW -ZXJzaW9uICAgPSAkcnYNCiAgICAgICAgJHNjcmlwdDpVcGRhdGVBdmFpbGFibGUgPSAoW1N5c3Rl -bS5WZXJzaW9uXSRydiAtZ3QgW1N5c3RlbS5WZXJzaW9uXSRsb2NhbFZlcikNCiAgICAgICAgTG9n -LUFwaSAoIlVQREFURS1DSEVDSzogbG9rYWw9JGxvY2FsVmVyIHJlbW90ZT0kcnYgYXZhaWxhYmxl -PSQoJHNjcmlwdDpVcGRhdGVBdmFpbGFibGUpIikNCiAgICB9IGNhdGNoIHsNCiAgICAgICAgTG9n -LUFwaSAoIlVQREFURS1DSEVDSzogbmljaHQgZXJyZWljaGJhciAoJCgkXy5FeGNlcHRpb24uTWVz -c2FnZSkpIikNCiAgICB9DQp9DQpSZWZyZXNoLVVwZGF0ZUNoZWNrDQoNCiMgSW5pdGlhbC1TbmFw -c2hvdCBkZXIgT2ZmbGluZS1Xb2NoZW5wbGFuLmh0bWwgYmVpbSBTdGFydCByZWdlbmVyaWVyZW4N -CiMgKGF1Y2ggd2VubiBzZWl0IGRlbSBsZXR6dGVuIExhdWYgbmljaHRzIGdlYWVuZGVydCB3dXJk -ZSwgaGF0IHNpY2ggei5CLg0KIyBkYXMgRGF0dW0gdmVyc2Nob2JlbiB1bmQgZGVyIEhldXRlLU1h -cmtlciB6ZWlndCBzb25zdCBkaWUgYWx0ZSBXb2NoZSkuDQp0cnkgeyBHZW5lcmF0ZS1Xb2NoZW5w -bGFuU25hcHNob3QgfCBPdXQtTnVsbCB9IGNhdGNoIHsgTG9nLUFwaSAoJ1NOQVBTSE9UIChpbml0 -aWFsKSBGRUhMRVI6IHswfScgLWYgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpIH0NCg0KIyAtLS0gU2Vy -dmVyIHN0YXJ0ZW4gLS0tDQokTGlzdGVuZXIgPSBOZXctT2JqZWN0IFN5c3RlbS5OZXQuSHR0cExp -c3RlbmVyDQokTGlzdGVuZXIuUHJlZml4ZXMuQWRkKCJodHRwOi8vbG9jYWxob3N0OiRQb3J0LyIp -DQp0cnkgew0KICAgICRMaXN0ZW5lci5TdGFydCgpDQp9IGNhdGNoIHsNCiAgICBXcml0ZS1Ib3N0 -ICgnRkVITEVSOiBMaXN0ZW5lciBhdWYgUG9ydCB7MH0ga2FubiBuaWNodCBzdGFydGVuLicgLWYg -JFBvcnQpIC1Gb3JlZ3JvdW5kQ29sb3IgUmVkDQogICAgV3JpdGUtSG9zdCAkXw0KICAgIExvZy1B -cGkgKCdMSVNURU5FUiBGRUhMRVI6IHswfScgLWYgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpDQogICAg -U3RhcnQtU2xlZXAgLVNlY29uZHMgNQ0KICAgIGV4aXQgMQ0KfQ0KDQpXcml0ZS1Ib3N0ICgnVkkz -IERHTC1QbGFudW5nIGF1ZiBodHRwOi8vbG9jYWxob3N0OnswfScgLWYgJFBvcnQpDQpXcml0ZS1I -b3N0ICgnUm9vdDogICAgezB9JyAtZiAkUm9vdCkNCldyaXRlLUhvc3QgKCdEYXRhRGlyOiB7MH0n -IC1mICREYXRhRGlyKQ0KV3JpdGUtSG9zdCAoJ0xvZzogICAgIHswfScgLWYgJHNjcmlwdDpBcGlM -b2cpDQoNCiMgLS0tIEhlYXJ0YmVhdC1XYXRjaGRvZyAtLS0NCiRXYXRjaGRvZ1RpbWVyID0gTmV3 -LU9iamVjdCBTeXN0ZW0uVGltZXJzLlRpbWVyDQokV2F0Y2hkb2dUaW1lci5JbnRlcnZhbCA9IDUw -MDANCiRXYXRjaGRvZ1RpbWVyLkF1dG9SZXNldCA9ICR0cnVlDQpSZWdpc3Rlci1PYmplY3RFdmVu -dCAtSW5wdXRPYmplY3QgJFdhdGNoZG9nVGltZXIgLUV2ZW50TmFtZSBFbGFwc2VkIC1BY3Rpb24g -ew0KICAgICRlbGFwc2VkID0gKEdldC1EYXRlKSAtICRzY3JpcHQ6TGFzdEhlYXJ0YmVhdA0KICAg -IGlmICgkZWxhcHNlZC5Ub3RhbFNlY29uZHMgLWd0IDMwKSB7DQogICAgICAgIGlmICgtbm90ICRz -Y3JpcHQ6U2h1dGRvd25QZW5kaW5nKSB7DQogICAgICAgICAgICAkc2NyaXB0OlNodXRkb3duUGVu -ZGluZyA9ICR0cnVlDQogICAgICAgIH0gZWxzZWlmICgkZWxhcHNlZC5Ub3RhbFNlY29uZHMgLWd0 -IDM1KSB7DQogICAgICAgICAgICAkTGlzdGVuZXIuU3RvcCgpDQogICAgICAgICAgICBbRW52aXJv -bm1lbnRdOjpFeGl0KDApDQogICAgICAgIH0NCiAgICB9DQp9IHwgT3V0LU51bGwNCiRXYXRjaGRv -Z1RpbWVyLlN0YXJ0KCkNCg0KIyAtLS0gUmVxdWVzdC1Mb29wIC0tLQ0KdHJ5IHsNCiAgICB3aGls -ZSAoJExpc3RlbmVyLklzTGlzdGVuaW5nKSB7DQogICAgICAgICRBc3luY1Jlc3VsdCA9ICRMaXN0 -ZW5lci5CZWdpbkdldENvbnRleHQoJG51bGwsICRudWxsKQ0KICAgICAgICB3aGlsZSAoLW5vdCAk -QXN5bmNSZXN1bHQuQXN5bmNXYWl0SGFuZGxlLldhaXRPbmUoMTAwMCkpIHsgfQ0KICAgICAgICAk -Q29udGV4dCA9ICRMaXN0ZW5lci5FbmRHZXRDb250ZXh0KCRBc3luY1Jlc3VsdCkNCiAgICAgICAg -JFJlcXVlc3QgPSAkQ29udGV4dC5SZXF1ZXN0DQogICAgICAgICRSZXNwb25zZSA9ICRDb250ZXh0 -LlJlc3BvbnNlDQogICAgICAgICRNZXRob2QgPSAkUmVxdWVzdC5IdHRwTWV0aG9kDQogICAgICAg -ICRQYXRoID0gJFJlcXVlc3QuVXJsLkFic29sdXRlUGF0aA0KICAgICAgICBMb2ctQXBpICgnUkVR -IHswfSB7MX0nIC1mICRNZXRob2QsICRQYXRoKQ0KDQogICAgICAgIHRyeSB7DQogICAgICAgICAg -ICAjID09PT09IENPUlMgUHJlZmxpZ2h0ID09PT09DQogICAgICAgICAgICBpZiAoJE1ldGhvZCAt -ZXEgJ09QVElPTlMnKSB7DQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLlN0YXR1c0NvZGUgPSAy -MDQNCiAgICAgICAgICAgICAgICBBZGQtU2VjdXJpdHlIZWFkZXJzICRSZXNwb25zZQ0KICAgICAg -ICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uQ2xvc2UoKQ0KICAgICAgICAgICAgICAg -IGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gU1lTVEVNID09 -PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2hlYXJ0YmVhdCcgLWFuZCAkTWV0 -aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAjIE9yaWdpbi1DaGVjayAoU3ByaW50 -IDEg4oCUIFNpY2hlcmhlaXRzLU5vdGJyZW1zZSAyMDI2LTA1LTI4KToNCiAgICAgICAgICAgICAg -ICAjIEhlYXJ0YmVhdCBha3plcHRpZXJ0IG51ciBSZXF1ZXN0cyB2b24gZGVyIGVpZ2VuZW4gQXBw -LiBBbmRlcmUNCiAgICAgICAgICAgICAgICAjIGxva2FsZSBQcm96ZXNzZSBrb2VubnRlbiBzb25z -dCBwZXIgTG9vcCBkaWUgQXV0by1TaHV0ZG93bi1Mb2dpaw0KICAgICAgICAgICAgICAgICMgdW1n -ZWhlbiBvZGVyIGRlbiBTZXJ2ZXIgYmV3dXNzdCBhbSBMZWJlbiBoYWx0ZW4uIEJyb3dzZXIgc2Vu -ZGV0DQogICAgICAgICAgICAgICAgIyBPcmlnaW4gYXV0b21hdGlzY2g7IGZlaGxlbmRlciBIZWFk -ZXIgd2lyZCB0b2xlcmllcmVuIChzZW5kQmVhY29uDQogICAgICAgICAgICAgICAgIyBpbiBtYW5j -aGVuIEJyb3dzZXJuKSwgYWJlciBGQUxTQ0hFUiBPcmlnaW4gd2lyZCBhYmdlbGVobnQuDQogICAg -ICAgICAgICAgICAgJG9yaWdpbiA9ICRSZXF1ZXN0LkhlYWRlcnNbJ09yaWdpbiddDQogICAgICAg -ICAgICAgICAgaWYgKCRvcmlnaW4gLWFuZCAkb3JpZ2luIC1uZSAkc2NyaXB0OkNvcnNPcmlnaW4p -IHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ09yaWdpbiBuaWNo -dCBlcmxhdWJ0JyA0MDMNCiAgICAgICAgICAgICAgICAgICAgTG9nLUFwaSAoJ0hFQVJUQkVBVCA0 -MDMgT3JpZ2luPXswfScgLWYgJG9yaWdpbikNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUN -CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDpMYXN0SGVhcnRiZWF0 -ID0gR2V0LURhdGUNCiAgICAgICAgICAgICAgICAkc2NyaXB0OlNodXRkb3duUGVuZGluZyA9ICRm -YWxzZQ0KICAgICAgICAgICAgICAgICMgYWRtaW5WZXJzaW9uIC8gcGxhbnVuZ1ZlcnNpb246IG10 -aW1lIGFscyBUaWNrcy4gRXJsYXVidCBkZW0NCiAgICAgICAgICAgICAgICAjIENsaWVudCwgUmVj -aHRlLSBiencuIFBlcnNvbmVuLUFlbmRlcnVuZ2VuIGltIEhpbnRlcmdydW5kIHp1DQogICAgICAg -ICAgICAgICAgIyBlcmtlbm5lbiB1bmQgWi5yZWNodGUvWi5wbGFudW5nIG5ldSB6dSBsYWRlbiwg -b2huZSBkYXNzIGRlcg0KICAgICAgICAgICAgICAgICMgVXNlciBGNSBkcnVlY2tlbiBtdXNzLiBw -bGFudW5nVmVyc2lvbiBkZWNrdCBpbnNiZXNvbmRlcmUNCiAgICAgICAgICAgICAgICAjIGVkaXRS -ZWNodGUvc2VoZW4tVXBkYXRlcyBhYiwgZGllIGRlciBMaXZlLVN5bmMtRGVsdGEgbmljaHQNCiAg -ICAgICAgICAgICAgICAjIGxpZWZlcnQgKENoZXJyeS1QaWNrIDFhZWZlMjYgQnVnICMzKS4NCiAg -ICAgICAgICAgICAgICAkYWRtaW5WZXIgICA9IDANCiAgICAgICAgICAgICAgICAkcGxhbnVuZ1Zl -ciA9IDANCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkYWRtaW5G -aWxlID0gSm9pbi1QYXRoICREYXRhRGlyICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAg -ICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkYWRtaW5GaWxlKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAkYWRtaW5WZXIgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRhZG1pbkZpbGUp -Lkxhc3RXcml0ZVRpbWVVdGMuVGlja3MNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAkcGxhbnVuZ0ZpbGUgPSBKb2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNv -bicNCiAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHBsYW51 -bmdGaWxlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZ1ZlciA9IChHZXQtSXRl -bSAtTGl0ZXJhbFBhdGggJHBsYW51bmdGaWxlKS5MYXN0V3JpdGVUaW1lVXRjLlRpY2tzDQogICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHt9DQogICAgICAgICAg -ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnb2snOyBhZG1pblZl -cnNpb24gPSAkYWRtaW5WZXI7IHBsYW51bmdWZXJzaW9uID0gJHBsYW51bmdWZXIgfQ0KICAgICAg -ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGgg -LWVxICcvYXBpL3NodXRkb3duJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAg -ICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ3NodXRkb3duJyB9 -DQogICAgICAgICAgICAgICAgU3RhcnQtU2xlZXAgLU1pbGxpc2Vjb25kcyAzMDANCiAgICAgICAg -ICAgICAgICAkTGlzdGVuZXIuU3RvcCgpDQogICAgICAgICAgICAgICAgW0Vudmlyb25tZW50XTo6 -RXhpdCgwKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9p -bmZvJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgUmVmcmVzaC1V -cGRhdGVDaGVjaw0KICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAg -ICAgICRpbmZvT2JqID0gQHsNCiAgICAgICAgICAgICAgICAgICAgYmVudXR6ZXIgICAgICAgICAg -ICAgICAgPSAiJERvbWFpblwkVXNlcm5hbWUiDQogICAgICAgICAgICAgICAgICAgIHJvbGxlICAg -ICAgICAgICAgICAgICAgID0gJHIucm9sbGUNCiAgICAgICAgICAgICAgICAgICAgaXN0U3VwZXJV -c2VyICAgICAgICAgICAgPSAkci5pc3RTdXBlclVzZXINCiAgICAgICAgICAgICAgICAgICAgaXN0 -RmFjaGF1ZnNpY2h0ICAgICAgICAgPSAkci5pc3RGYWNoYXVmc2ljaHQNCiAgICAgICAgICAgICAg -ICAgICAgaXN0R2VzYW10dmVyYW50d29ydGxpY2ggPSAkci5pc3RHZXNhbXR2ZXJhbnR3b3J0bGlj -aA0KICAgICAgICAgICAgICAgICAgICBzZWhlbiAgICAgICAgICAgICAgICAgICA9ICRyLnNlaGVu -DQogICAgICAgICAgICAgICAgICAgIGFkbWluU3VidGFicyAgICAgICAgICAgID0gJHIuYWRtaW5T -dWJ0YWJzDQogICAgICAgICAgICAgICAgICAgIHN0YXRpc3Rpa0JlcmVpY2hlICAgICAgID0gJHIu -c3RhdGlzdGlrQmVyZWljaGUNCiAgICAgICAgICAgICAgICAgICAgZWRpdGllcmVuICAgICAgICAg -ICAgICAgPSAkci5lZGl0aWVyZW4gICAjIG51bGwgYmVpIFN1cGVyVXNlciA9ICJhbGxlcyBlcmxh -dWJ0Ig0KICAgICAgICAgICAgICAgICAgICBtZWluZVBlcnNvbklkICAgICAgICAgICA9ICRyLm1l -aW5lUGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgc2VydmVyICAgICAgICAgICAgICAgICAg -PSAkc2NyaXB0OkNvcnNPcmlnaW4NCiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQXZhaWxhYmxl -ICAgICAgICAgPSAkc2NyaXB0OlVwZGF0ZUF2YWlsYWJsZQ0KICAgICAgICAgICAgICAgICAgICBy -ZW1vdGVWZXJzaW9uICAgICAgICAgICA9ICRzY3JpcHQ6UmVtb3RlVmVyc2lvbg0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlICRpbmZv -T2JqDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAg -IGlmICgkUGF0aCAtZXEgJy9hcGkvZGVidWcnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAg -ICAgICAgICAgICAgICAkZGF0ID0gQHsgUm9vdCA9ICRSb290OyBEYXRhRGlyID0gJERhdGFEaXI7 -IEZpbGVzID0gQHt9IH0NCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZiBpbiAnYWRtaW4uanNv -bicsJ3BsYW51bmcuanNvbicsJ2xvZ2J1Y2guanNvbicpIHsNCiAgICAgICAgICAgICAgICAgICAg -JGZwID0gSm9pbi1QYXRoICREYXRhRGlyICRmDQogICAgICAgICAgICAgICAgICAgICRpbmZvID0g -QHsgZXhpc3RzID0gKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGZwKSB9DQogICAgICAgICAgICAg -ICAgICAgIGlmICgkaW5mby5leGlzdHMpIHsgJGluZm8uc2l6ZSA9IChHZXQtSXRlbSAtTGl0ZXJh -bFBhdGggJGZwKS5MZW5ndGggfQ0KICAgICAgICAgICAgICAgICAgICAkZGF0LkZpbGVzWyRmXSA9 -ICRpbmZvDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgUmVjaHRlLUluZm8g -KHdpY2h0aWcgZnVlciBBZG1pbi1UYWItU2ljaHRiYXJrZWl0KQ0KICAgICAgICAgICAgICAgICRk -YXQuQmVudXR6ZXIgPSAiJERvbWFpblwkVXNlcm5hbWUiDQogICAgICAgICAgICAgICAgdHJ5IHsN -CiAgICAgICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgICAg -ICRkYXQuUmVjaHRlID0gQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGxlICAgICAgICAg -ICA9ICRyLnJvbGxlDQogICAgICAgICAgICAgICAgICAgICAgICBpc3RTdXBlclVzZXIgICAgPSAk -ci5pc3RTdXBlclVzZXINCiAgICAgICAgICAgICAgICAgICAgICAgIGlzdEZhY2hhdWZzaWNodCA9 -ICRyLmlzdEZhY2hhdWZzaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgc2VoZW4gICAgICAg -ICAgID0gJHIuc2VoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIG1laW5lUGVyc29uSWQgICA9 -ICRyLm1laW5lUGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -IH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICAkZGF0LlJlY2h0ZSA9IEB7IGZlaGxlciA9 -ICRfLkV4Y2VwdGlvbi5NZXNzYWdlIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgIyBBZG1pbi5qc29uIEt1cnpjaGVjaw0KICAgICAgICAgICAgICAgICRhZG1pbk9iaiA9IFJl -YWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx -ICRhZG1pbk9iaikgew0KICAgICAgICAgICAgICAgICAgICAkZGF0LkFkbWluSnNvbkxlc2JhciA9 -ICRmYWxzZQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRh -bnpTVSA9IDANCiAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbk9iai5zdXBlclVzZXIpIHsg -JGFuelNVID0gQCgkYWRtaW5PYmouc3VwZXJVc2VyKS5Db3VudCB9DQogICAgICAgICAgICAgICAg -ICAgICRzdUtlbm51bmdlbiA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluT2Jq -LnN1cGVyVXNlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHMgaW4gQCgk -YWRtaW5PYmouc3VwZXJVc2VyKSkgeyAkc3VLZW5udW5nZW4gKz0gW3N0cmluZ10kcy5ud0tlbm51 -bmcgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRkYXQuQWRt -aW5Kc29uTGVzYmFyID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgJGRhdC5TdXBlclVzZXJB -bnphaGwgPSAkYW56U1UNCiAgICAgICAgICAgICAgICAgICAgJGRhdC5TdXBlclVzZXJLZW5udW5n -ZW4gPSAkc3VLZW5udW5nZW4NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2Vu -ZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkZGF0DQogICAgICAgICAgICAgICAgY29udGludWUNCiAg -ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBTWU5DLUNIRUNLID09PT09DQogICAg -ICAgICAgICAjIFZlcmdsZWljaHQgcHJvIFdlYi1Bc3NldCBkaWUgRGF0ZWktR3JvZXNzZSBpbiBk -ZXIgU291cmNlIChnZXB1bGx0ZXMNCiAgICAgICAgICAgICMgUmVwbywgJHNjcmlwdDpBc3NldEZh -bGxiYWNrKSBnZWdlbiBkaWUgRGF0ZWktR3JvZXNzZSBpbSBBc3NldC1DYWNoZQ0KICAgICAgICAg -ICAgIyAoJFJvb3QsIFJvYm9jb3B5LVppZWwpLiBFcmtlbm50IHVudm9sbHN0YWVuZGlnZSBSb2Jv -Y29weS1VZWJlci0NCiAgICAgICAgICAgICMgdHJhZ3VuZ2VuLCB2ZXJhbHRldGUgQXNzZXQtQ2Fj -aGVzIHVuZCBmZWhsZW5kZSBEYXRlaWVuLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw -aS9zeW5jLWNoZWNrL2RhdGVpZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -J0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYg -KC1ub3QgJHNjcmlwdDpBc3NldEZhbGxiYWNrKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQt -SnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gJGZh -bHNlDQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgPSAnQXNzZXRGYWxsYmFjayBuaWNo -dCBrb25maWd1cmllcnQg4oCUIFNvdXJjZS1QZmFkIHVuYmVrYW5udCwgVmVyZ2xlaWNoIG5pY2h0 -IG1vZWdsaWNoLiAoU2VydmVyIHd1cmRlIG9obmUgLUFzc2V0RmFsbGJhY2sgZ2VzdGFydGV0Likn -DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHdlYkV4dCA9ICcuanMnLCcuY3NzJywn -Lmh0bWwnLCcuaWNvJywnLnBuZycsJy5qcGcnLCcuanBlZycsJy5zdmcnDQogICAgICAgICAgICAg -ICAgJGlnbm9yaWVyZVRvcCA9IEAoJy5naXQnLCdkb2NzJywnZGV2JywndGVzdHMnLCdkYXRhJywn -Y2FjaGUnKQ0KICAgICAgICAgICAgICAgICRkYXRlaWVuID0gQCgpDQogICAgICAgICAgICAgICAg -dHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGFsbGUgPSBHZXQtQ2hpbGRJdGVtIC1MaXRlcmFs -UGF0aCAkc2NyaXB0OkFzc2V0RmFsbGJhY2sgLVJlY3Vyc2UgLUZpbGUgLUVycm9yQWN0aW9uIFNp -bGVudGx5Q29udGludWUNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGYgaW4gJGFsbGUp -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRyZWwgPSAkZi5GdWxsTmFtZS5TdWJzdHJpbmco -JHNjcmlwdDpBc3NldEZhbGxiYWNrLkxlbmd0aCArIDEpIC1yZXBsYWNlICdcXCcsICcvJw0KICAg -ICAgICAgICAgICAgICAgICAgICAgJHRvcCA9ICgkcmVsIC1zcGxpdCAnLycpWzBdDQogICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoJGlnbm9yaWVyZVRvcCAtY29udGFpbnMgJHRvcCkgeyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkZXh0ID0gJGYuRXh0ZW5zaW9uLlRvTG93 -ZXIoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR3ZWJFeHQgLW5vdGNvbnRhaW5zICRl -eHQpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGVpZW4gKz0gJHJl -bA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICMgZGF0YS8tU29u -ZGVyZmFlbGxlOiBudXIgZGllIHp3ZWkgVGFybi1NYXJrdXBzLCBhbGxlcyBhbmRlcmUNCiAgICAg -ICAgICAgICAgICAgICAgIyBsaWVndCBpbSBEYXRhRGlyIChhZG1pbi5qc29uL3BsYW51bmcuanNv -bi8uLi4pIHVuZCB3aXJkIG5pY2h0DQogICAgICAgICAgICAgICAgICAgICMgaW4gZGVuIEFzc2V0 -LUNhY2hlIGtvcGllcnQuDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRleHRyYSBpbiAn -ZGF0YS9tYWluZnJhbWUuaHRtbCcsJ2RhdGEvc2FuaXRpemVyLmh0bWwnKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAkc3JjRXh0cmEgPSBKb2luLVBhdGggJHNjcmlwdDpBc3NldEZhbGxiYWNr -ICRleHRyYQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBh -dGggJHNyY0V4dHJhKSB7ICRkYXRlaWVuICs9ICRleHRyYSB9DQogICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSBAeyBvayA9ICRmYWxzZTsgZmVobGVyID0gKCdTb3VyY2UtVmVy -emVpY2huaXMgbmljaHQgbGVzYmFyOiAnICsgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpIH0NCiAgICAg -ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgJGRhdGVpZW4gPSAkZGF0ZWllbiB8IFNvcnQtT2JqZWN0IC1VbmlxdWUNCiAgICAgICAgICAg -ICAgICAkZWludHJhZWdlID0gQCgpDQogICAgICAgICAgICAgICAgJGFuek9rID0gMDsgJGFuekRp -ZmYgPSAwOyAkYW56RmVobHRBc3NldCA9IDA7ICRhbnpGZWhsdFNvdXJjZSA9IDANCiAgICAgICAg -ICAgICAgICBmb3JlYWNoICgkcmVsIGluICRkYXRlaWVuKSB7DQogICAgICAgICAgICAgICAgICAg -ICRhc3NldFBmYWQgID0gSm9pbi1QYXRoICRSb290ICRyZWwNCiAgICAgICAgICAgICAgICAgICAg -JHNvdXJjZVBmYWQgPSBKb2luLVBhdGggJHNjcmlwdDpBc3NldEZhbGxiYWNrICRyZWwNCiAgICAg -ICAgICAgICAgICAgICAgJGFzc2V0Qnl0ZXMgID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAg -JHNvdXJjZUJ5dGVzID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAt -TGl0ZXJhbFBhdGggJGFzc2V0UGZhZCkgIHsgJGFzc2V0Qnl0ZXMgID0gKEdldC1JdGVtIC1MaXRl -cmFsUGF0aCAkYXNzZXRQZmFkKS5MZW5ndGggfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoVGVz -dC1QYXRoIC1MaXRlcmFsUGF0aCAkc291cmNlUGZhZCkgeyAkc291cmNlQnl0ZXMgPSAoR2V0LUl0 -ZW0gLUxpdGVyYWxQYXRoICRzb3VyY2VQZmFkKS5MZW5ndGggfQ0KICAgICAgICAgICAgICAgICAg -ICAkc3RhdHVzID0gJ3VuYmVrYW5udCcNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l -cSAkc291cmNlQnl0ZXMgLWFuZCAkbnVsbCAtZXEgJGFzc2V0Qnl0ZXMpIHsgJHN0YXR1cyA9ICdi -ZWlkZV9mZWhsZW4nIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkbnVsbCAtZXEgJGFz -c2V0Qnl0ZXMpICB7ICRzdGF0dXMgPSAnYXNzZXRfZmVobHQnOyAgJGFuekZlaGx0QXNzZXQrKyB9 -DQogICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoJG51bGwgLWVxICRzb3VyY2VCeXRlcykgeyAk -c3RhdHVzID0gJ3NvdXJjZV9mZWhsdCc7ICRhbnpGZWhsdFNvdXJjZSsrIH0NCiAgICAgICAgICAg -ICAgICAgICAgZWxzZWlmICgkYXNzZXRCeXRlcyAtZXEgJHNvdXJjZUJ5dGVzKSB7ICRzdGF0dXMg -PSAnb2snOyAkYW56T2srKyB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkc3RhdHVzID0g -J2dyb2Vzc2VfZGlmZic7ICRhbnpEaWZmKysgfQ0KICAgICAgICAgICAgICAgICAgICAkZWludHJh -ZWdlICs9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgICAgICBwZmFkICAgICAgICA9 -ICRyZWwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUJ5dGVzID0gJHNvdXJjZUJ5dGVz -DQogICAgICAgICAgICAgICAgICAgICAgICBhc3NldEJ5dGVzICA9ICRhc3NldEJ5dGVzDQogICAg -ICAgICAgICAgICAgICAgICAgICBkaWZmQnl0ZXMgICA9IGlmICgkbnVsbCAtbmUgJHNvdXJjZUJ5 -dGVzIC1hbmQgJG51bGwgLW5lICRhc3NldEJ5dGVzKSB7ICRhc3NldEJ5dGVzIC0gJHNvdXJjZUJ5 -dGVzIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAg -ID0gJHN0YXR1cw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAg -ICAgICAgb2sgICAgICAgICAgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICBzb3VyY2VSb290 -ICA9ICRzY3JpcHQ6QXNzZXRGYWxsYmFjaw0KICAgICAgICAgICAgICAgICAgICBhc3NldFJvb3Qg -ICA9ICRSb290DQogICAgICAgICAgICAgICAgICAgIGFuemFobCAgICAgID0gJGVpbnRyYWVnZS5D -b3VudA0KICAgICAgICAgICAgICAgICAgICBhbnpPayAgICAgICA9ICRhbnpPaw0KICAgICAgICAg -ICAgICAgICAgICBhbnpEaWZmICAgICA9ICRhbnpEaWZmDQogICAgICAgICAgICAgICAgICAgIGFu -ekZlaGx0QXNzZXQgID0gJGFuekZlaGx0QXNzZXQNCiAgICAgICAgICAgICAgICAgICAgYW56RmVo -bHRTb3VyY2UgPSAkYW56RmVobHRTb3VyY2UNCiAgICAgICAgICAgICAgICAgICAgZGF0ZWllbiAg -ICAgPSAkZWludHJhZWdlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRp -bnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gQURNSU4gPT09PT0NCiAg -ICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dF -VCcpIHsNCiAgICAgICAgICAgICAgICAkdHh0ID0gUmVhZC1UZXh0RmlsZSAnYWRtaW4uanNvbicN -CiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICR0eHQpIHsgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJ2FkbWluLmpzb24gbmljaHQgZ2VmdW5kZW4nIDQwNCB9DQogICAgICAgICAgICAgICAgZWxz -ZSB7IFNlbmQtSnNvblRleHQgJFJlc3BvbnNlICR0eHQgfQ0KICAgICAgICAgICAgICAgIGNvbnRp -bnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWlu -JyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl -c3QtRGFyZkJlcmVpY2ggJ2FkbWluaXN0cmF0aW9uJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -J0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJv -ZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkg -eyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAg -ICAgICAgICAgICAgaWYgKCRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydhZG1pbktlbm51bmdl -biddKSB7ICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgnYWRtaW5LZW5udW5nZW4n -KSB9DQogICAgICAgICAgICAgICAgIyBQUy01LjEtVW53cmFwLVNjaHV0ejogYWxsZSBMaXN0ZW4t -RmVsZGVyLCBkaWUgZGVyIENsaWVudCB1bnRlcg0KICAgICAgICAgICAgICAgICMgQURNSU5fTElT -VF9GRUxERVIgZnVlaHJ0LCBzZXJ2ZXItc2VpdGlnIGFscyBBcnJheXMgZXJ6d2luZ2VuLg0KICAg -ICAgICAgICAgICAgICMgU29uc3Qgd2VyZGVuIExpc3RlbiBtaXQgbnVyIGVpbmVtIEVsZW1lbnQg -dm9tIFBvd2VyU2hlbGwtSlNPTi0NCiAgICAgICAgICAgICAgICAjIFJvdW5kdHJpcCB6dW0gRWlu -emVsLU9iamVrdCBlbnRwYWNrdCB1bmQgY2xpZW50LXNlaXRpZyBrb21tdA0KICAgICAgICAgICAg -ICAgICMgYWRtaW5MaXN0ZW5Ob3JtYWxpc2llcmVuIGdnZi4genUgc3BhZXQgKHouQi4gbmFjaCBI -b3QtUmVsb2FkKS4NCiAgICAgICAgICAgICAgICBOb3JtYWxpc2llcmUtQWRtaW5MaXN0ZW4gJGRh -dGVuDQogICAgICAgICAgICAgICAgIyBTZXJ2ZXItc2VpdGlnZSBSaWNoLVRleHQtU2FuaXRpc2ll -cnVuZyAoU3RvcmVkLVhTUy1TY2h1dHopLg0KICAgICAgICAgICAgICAgIEludm9rZS1BZG1pblJp -Y2h0ZXh0U2FuaXRpemUgJGRhdGVuDQogICAgICAgICAgICAgICAgJGlzdFNVID0gVGVzdC1Jc3RT -dXBlclVzZXINCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAg -ICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tl -LVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBO -dXIgU3VwZXJVc2VyIGRhcmYgZGllIFJvbGxlbi1MaXN0ZW4gc3VwZXJVc2VyL2ZhY2hhdWZzaWNo -dA0KICAgICAgICAgICAgICAgICAgICAgICAgIyB1ZWJlciAvYXBpL2FkbWluIGFlbmRlcm4g4oCU -IHNvbnN0IGtvZW5udGUgamVtYW5kIHNpY2ggc2VsYnN0DQogICAgICAgICAgICAgICAgICAgICAg -ICAjIHp1bSBTdXBlclVzZXIgYmVmb2VyZGVybiB1bmQgZGFtaXQgZGllIHNlcGFyYXRlbiBHdWFy -ZHMgYXVmDQogICAgICAgICAgICAgICAgICAgICAgICAjIC9hcGkvYWRtaW4vc3VwZXJ1c2VyIGJ6 -dy4gL2FwaS9hZG1pbi9mYWNoYXVmc2ljaHQgdW1nZWhlbi4NCiAgICAgICAgICAgICAgICAgICAg -ICAgICMgYWRtaW5LZW5udW5nZW4gaXN0IGdlbmVyZWxsIGFiZ2VzY2hhZmZ0IHVuZCB3aXJkIGVu -dGZlcm50Lg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBSZWFkIGRlciBhbHRlbiBXZXJ0ZSBt -dXNzIElOTkVSSEFMQiBkZXMgTG9ja3MgcGFzc2llcmVuLA0KICAgICAgICAgICAgICAgICAgICAg -ICAgIyBkYW1pdCBkaWUgU1UvRmFjaGF1ZnNpY2h0LUxpc3RlbiBhdG9tYXIgZXJoYWx0ZW4gYmxl -aWJlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICRhbHQgPSBSZWFkLUpzb25PYmplY3QgJ2Fk -bWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkaXN0U1UpIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmVsZCBpbiAnc3VwZXJVc2VyJywn -ZmFjaGF1ZnNpY2h0JywnZGlyZWt0aW9uc2xlaXR1bmcnLCdmdWVocnVuZ3NzdGVsbGUnKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWx0IC1hbmQgJGFsdC5QU09iamVj -dC5Qcm9wZXJ0aWVzWyRmZWxkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKCRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkXSkgeyAkZGF0ZW4uJGZlbGQg -PSAkYWx0LiRmZWxkIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug -eyAkZGF0ZW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRmZWxkIC1Ob3RlUHJvcGVy -dHlWYWx1ZSAkYWx0LiRmZWxkIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIH0gZWxzZWlmICgkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1skZmVsZF0pIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVz -LlJlbW92ZSgkZmVsZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICMgS2V5LVVuaW9uOiBuaWNodCBtaXRnZXNlbmRldGUgVG9wLUxl -dmVsLUtleXMgZXJoYWx0ZW4uDQogICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0oTWVyZ2Ut -QWRtaW5LZXlzICRhbHQgJGRhdGVuKQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNv -bk9iamVjdCAnYWRtaW4uanNvbicgJGRhdGVuIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAg -ICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVy -cm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2FkbWluLmdlYWVuZGVy -dCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0 -dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg -ICAgfQ0KDQogICAgICAgICAgICAjIFN1cGVyLVVzZXItTGlzdGU6IG51ciBTdXBlclVzZXIgZGFy -ZiBTdXBlclVzZXIgdmVyd2FsdGVuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2Fk -bWluL3N1cGVydXNlcicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAg -IGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051 -ciBTdXBlclVzZXIgZHVlcmZlbiBTdXBlclVzZXIgdmVyd2FsdGVuJyA0MDM7IGNvbnRpbnVlIH0N -CiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAg -ICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdy -b3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIEAoLi4uKSBlcnp3aW5ndCBB -cnJheSBhdWNoIGJlaSAxIEVsZW1lbnQgKFBTIDUuMSBlbnRwYWNrdCBzb25zdCB6dSBFaW56ZWwt -T2JqZWt0LA0KICAgICAgICAgICAgICAgICMgZGFubiB3aXJkIGRpZSBMaXN0ZSBpbiBhZG1pbi5q -c29uIHp1bSBPYmpla3QgZGVnZW5lcmllcnQgLT4gQ2xpZW50LUZlaGxlcikuDQogICAgICAgICAg -ICAgICAgJGJvZHlPYmogPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAg -ICAkZGF0ZW4gPSBbb2JqZWN0W11dQCgkYm9keU9iaikNCiAgICAgICAgICAgICAgICAkbG9ja0Vy -Z2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAg -ICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29u -Jw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJu -IEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxl -c2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkd2lwZU1zZyA9IFRlc3QtV2lwZVNj -aHV0eiAnc3VwZXJVc2VyJyAkZGF0ZW4gJGFkbWluICRSZXF1ZXN0ICRib2R5T2JqDQogICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoJHdpcGVNc2cpIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBz -dGF0dXMgPSA0MDk7IG1zZyA9ICR3aXBlTXNnIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -IyBBbHRlIExpc3RlIHZvciBkZW0gT3ZlcndyaXRlIHNuYXBzaG90dGVuIOKAlCB3aXIgYnJhdWNo -ZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2llIG5hY2ggZGVtIExvY2sgZnVlciBkaWUg -RGlmZi1CZXJlY2hudW5nIChtYWlsdG8gYmVpDQogICAgICAgICAgICAgICAgICAgICAgICAjIFNV -IHJlaW4vcmF1cykuDQogICAgICAgICAgICAgICAgICAgICAgICAkYWx0U1UgPSBAKCkNCiAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snc3VwZXJV -c2VyJ10pIHsgJGFsdFNVID0gW29iamVjdFtdXUAoJGFkbWluLnN1cGVyVXNlcikgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgW3ZvaWRdKEJhY2t1cC1BZG1pbkpzb24gJ3N1cGVyVXNlcicpDQog -ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N1 -cGVyVXNlciddKSB7ICRhZG1pbi5zdXBlclVzZXIgPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N1 -cGVyVXNlcicgLU5vdGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51 -bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlOyBhbHQgPSAk -YWx0U1UgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7 -DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6 -ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJn -ZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg -ICAgIyBEaWZmIGFsdC9uZXUgbmFjaCBud0tlbm51bmcuIFNVLVJlaW4vUmF1cyBsb2VzdCBtYWls -dG8gdmlhIENsaWVudCBhdXMNCiAgICAgICAgICAgICAgICAjIChWZXJhbnR3b3J0dW5ncy1VZWJl -cmdhbmcgVm9ybGFnZSAncm9sbGVfdmVyYW50d29ydHVuZycpLg0KICAgICAgICAgICAgICAgICRt -YWlsdG9EaWZmcyA9IEdldC1Sb2xsZURpZmZzICRsb2NrRXJnZWJuaXMuYWx0ICRkYXRlbiAnU3Vw -ZXJVc2VyJyAkZmFsc2UNCiAgICAgICAgICAgICAgICAjIGFuemFobCBtaXRnZWJlbiDigJQgZGVy -IExvZ2J1Y2gtQ2xpZW50IGxpZXN0IGUuYW56YWhsOyBvaG5lIGRhcw0KICAgICAgICAgICAgICAg -ICMgRmVsZCBibGllYiBkaWUgRGV0YWlsLVNwYWx0ZSBiZWkgU1UtTGlzdGVuYWVuZGVydW5nZW4g -bGVlcg0KICAgICAgICAgICAgICAgICMgKGZhY2hhdWZzaWNodC5nZWFlbmRlcnQgdW50ZW4gbWFj -aHQgZXMgZ2VuYXVzbykuDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3VwZXJV -c2VyLmdlYWVuZGVydCcgQHsgYW56YWhsID0gJGRhdGVuLkNvdW50OyBkaWZmcyA9ICRtYWlsdG9E -aWZmcy5Db3VudCB9DQogICAgICAgICAgICAgICAgJHJlc3AgPSBAeyBzdGF0dXMgPSAnZ2VzcGVp -Y2hlcnQnIH0NCiAgICAgICAgICAgICAgICBpZiAoJG1haWx0b0RpZmZzLkNvdW50IC1ndCAwKSB7 -DQogICAgICAgICAgICAgICAgICAgICMgUFMtNS4xLVVud3JhcC1TY2h1dHo6IEAoJHgpIGVyendp -bmd0IEFycmF5IGF1Y2ggYmVpIDEgRWxlbWVudC4NCiAgICAgICAgICAgICAgICAgICAgJHJlc3Bb -J19icmF1Y2h0X21haWx0byddID0gW29yZGVyZWRdQHsgdHJpZ2dlciA9ICdyb2xsZV92ZXJhbnR3 -b3J0dW5nJzsgZGlmZnMgPSBbb2JqZWN0W11dQCgkbWFpbHRvRGlmZnMpIH0NCiAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkcmVzcA0K -ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMg -RmFjaGF1ZnNpY2h0LUxpc3RlOiBudXIgU3VwZXJVc2VyIGRhcmYgRmFjaGF1ZnNpY2h0IHZlcndh -bHRlbg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9mYWNoYXVmc2ljaHQn -IC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz -dC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1 -ZXJmZW4gRmFjaGF1ZnNpY2h0IHZlcndhbHRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHlPYmogPSAkYm9keSB8IENvbnZlcnRGcm9t -LUpzb24NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSBbb2JqZWN0W11dQCgkYm9keU9iaikNCiAg -ICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkg -ew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9j -ayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1K -c29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxs -IC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9 -ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICAk -d2lwZU1zZyA9IFRlc3QtV2lwZVNjaHV0eiAnZmFjaGF1ZnNpY2h0JyAkZGF0ZW4gJGFkbWluICRS -ZXF1ZXN0ICRib2R5T2JqDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHdpcGVNc2cpIHsg -cmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA0MDk7IG1zZyA9ICR3aXBlTXNnIH0gfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgJGFsdEZBID0gQCgpDQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2ZhY2hhdWZzaWNodCddKSB7ICRh -bHRGQSA9IFtvYmplY3RbXV1AKCRhZG1pbi5mYWNoYXVmc2ljaHQpIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIFt2b2lkXShCYWNrdXAtQWRtaW5Kc29uICdmYWNoYXVmc2ljaHQnKQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydmYWNoYXVm -c2ljaHQnXSkgeyAkYWRtaW4uZmFjaGF1ZnNpY2h0ID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdm -YWNoYXVmc2ljaHQnIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91 -dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0 -ID0gJGFsdEZBIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0 -Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVo -bGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9j -a0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICMgRmFjaGF1ZnNpY2h0LURpZmY6IHRyZW5udCBtYWlsdG8td3VlcmRpZ2UgVmVyYW50 -d29ydHVuZ3MtDQogICAgICAgICAgICAgICAgIyBVZWJlcmdhZW5nZSAoR2VzYW10dmVyYW50d29y -dGxpY2ggcmVpbi9yYXVzKSB2b20gcmVzdGxpY2hlbg0KICAgICAgICAgICAgICAgICMgUm9sbGVu -LVVwZGF0ZXMgKEZBIGhpbnp1L3JhdXMgb2huZSBHZXNhbXQsIG9kZXIgU2VoZW4tRmxhZy0NCiAg -ICAgICAgICAgICAgICAjIFdlY2hzZWwpLiBFcnN0ZSBmbGllw59lbiBpbiBkZW4gbWFpbHRvLVRy -aWdnZXIsIGRlciBSZXN0IHdpcmQNCiAgICAgICAgICAgICAgICAjIHp1IEluLUFwcC1IaW53ZWlz -ZW4uDQogICAgICAgICAgICAgICAgJGZhQXVzd2VydHVuZyA9IEdldC1GYWNoYXVmc2ljaHREaWZm -cyAkbG9ja0VyZ2VibmlzLmFsdCAkZGF0ZW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50 -cmFnICdmYWNoYXVmc2ljaHQuZ2VhZW5kZXJ0JyBAeyBhbnphaGwgPSAkZGF0ZW4uQ291bnQ7IG1h -aWx0byA9ICRmYUF1c3dlcnR1bmcubWFpbHRvRGlmZnMuQ291bnQ7IGhpbndlaXNlID0gJGZhQXVz -d2VydHVuZy5oaW53ZWlzRGlmZnMuQ291bnQgfQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRo -IGluICRmYUF1c3dlcnR1bmcuaGlud2Vpc0RpZmZzKSB7DQogICAgICAgICAgICAgICAgICAgIE5l -dy1IaW53ZWlzICdyb2xsZV9nZWFlbmRlcnQnICRoIChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwg -T3V0LU51bGwNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHJlc3AgPSBAeyBz -dGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBpZiAoJGZhQXVzd2VydHVu -Zy5tYWlsdG9EaWZmcy5Db3VudCAtZ3QgMCkgew0KICAgICAgICAgICAgICAgICAgICAjIFBTLTUu -MS1VbndyYXAtU2NodXR6OiBAKCR4KSBlcnp3aW5ndCBBcnJheSBhdWNoIGJlaSAxIEVsZW1lbnQu -DQogICAgICAgICAgICAgICAgICAgICRyZXNwWydfYnJhdWNodF9tYWlsdG8nXSA9IFtvcmRlcmVk -XUB7IHRyaWdnZXIgPSAncm9sbGVfdmVyYW50d29ydHVuZyc7IGRpZmZzID0gW29iamVjdFtdXUAo -JGZhQXVzd2VydHVuZy5tYWlsdG9EaWZmcykgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlICRyZXNwDQogICAgICAgICAgICAgICAg -Y29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBEaXJla3Rpb25zbGVpdHVu -ZyArIEZ1ZWhydW5nc3N0ZWxsZSAoZ2xlaWNoZXMgU2NoZW1hIHdpZQ0KICAgICAgICAgICAgIyBG -YWNoYXVmc2ljaHQsIG51ciBzZXBhcmF0ZSBMaXN0ZW4pLiBCZWlkZSBSb3V0ZW4gdGVpbGVuIGRp -ZQ0KICAgICAgICAgICAgIyBnbGVpY2hlIExvZ2lrOiBTVS1vbmx5IFBVVCwgQmFja3VwLCBTY2hy -ZWliZW4sIERpZmZzIHp1DQogICAgICAgICAgICAjIEluLUFwcC1IaW53ZWlzZW4gdW1zZXR6ZW4u -DQogICAgICAgICAgICBpZiAoKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9kaXJla3Rpb25zbGVpdHVu -ZycgLW9yICRQYXRoIC1lcSAnL2FwaS9hZG1pbi9mdWVocnVuZ3NzdGVsbGUnKSAtYW5kICRNZXRo -b2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJV -c2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIFJvbGxl -biB2ZXJ3YWx0ZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRmZWxkTmFtZSA9 -IGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZGlyZWt0aW9uc2xlaXR1bmcnKSB7ICdkaXJla3Rp -b25zbGVpdHVuZycgfSBlbHNlIHsgJ2Z1ZWhydW5nc3N0ZWxsZScgfQ0KICAgICAgICAgICAgICAg -ICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJv -ZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgICRib2R5T2JqID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29u -DQogICAgICAgICAgICAgICAgJGRhdGVuID0gW29iamVjdFtdXUAoJGJvZHlPYmopDQogICAgICAg -ICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAg -ICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2Fk -bWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9i -amVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg -JGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRt -aW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdCA9 -IEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyRmZWxkTmFtZV0pIHsgJGFsdCA9IFtvYmplY3RbXV1AKCRhZG1pbi4kZmVsZE5hbWUpIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShCYWNrdXAtQWRtaW5Kc29uICRmZWxkTmFt -ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGll -c1skZmVsZE5hbWVdKSB7ICRhZG1pbi4kZmVsZE5hbWUgPSAkZGF0ZW4gfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUg -JGZlbGROYW1lIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1O -dWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0ID0g -JGFsdCB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsN -CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjog -JF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlm -ICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdl -Ym5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICBXcml0ZS1Mb2dFaW50cmFnICgkZmVsZE5hbWUgKyAnLmdlYWVuZGVydCcpIEB7IGFuemFobCA9 -ICRkYXRlbi5Db3VudCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z -ZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K -ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIEJlemVpY2hudW5nZW46IE9iamVrdCAoTWFw -IGtleS0+bGFiZWwpLiBMZWVyZXMgT2JqZWt0ID0gUmVzZXQuDQogICAgICAgICAgICBpZiAoJFBh -dGggLWVxICcvYXBpL2FkbWluL2JlemVpY2hudW5nZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcp -IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAo -LW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEz -OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJv -bS1Kc29uDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAg -ICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1X -aXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1p -biA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAg -IGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0g -NTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydiZXplaWNobnVuZ2VuJ10p -IHsgJGFkbWluLmJlemVpY2hudW5nZW4gPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2JlemVpY2hu -dW5nZW4nIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxs -DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAg -ICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRp -bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJn -ZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tF -cmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50 -cmFnICdiZXplaWNobnVuZ2VuLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFN0YXRpc3Rp -ay1CYXVrYXN0ZW4gKHNlbGJzdGdlYmF1dGUgS2FjaGVsbikgKyBTdXBlclVzZXItTGF5b3V0LVJh -c3Rlci4NCiAgICAgICAgICAgICMgR2F0ZSBiZXd1c3N0IFNVIE9ERVIgR2VzYW10dmVyYW50d29y -dGxpY2ggKG5pY2h0IFRlc3QtSXN0QWRtaW4pIOKAlCBkZXINCiAgICAgICAgICAgICMgQnVpbGRl -ciBsZWJ0IGltIFN0YXRpc3Rpay1UYWIgdW5kIG11c3MgYXVjaCBmdWVyIEdlc2FtdHZlcmFudHdv -cnRsaWNoZQ0KICAgICAgICAgICAgIyBvaG5lIGFkbWluaXN0cmF0aW9uLVp1Z2FuZyBzcGVpY2hl -cmJhciBzZWluLiBQYXJ0aWFsLU1lcmdlIG51ciBkZXINCiAgICAgICAgICAgICMgYmVpZGVuIGJl -a2FubnRlbiBLZXlzOyBiZWlkZSBhbHMgW29iamVjdFtdXSB6d2luZ2VuIChQUy01LjEtVW53cmFw -KS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vc3RhdGlzdGlrJyAtYW5k -ICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQog -ICAgICAgICAgICAgICAgaWYgKC1ub3QgKChUZXN0LUlzdEFkbWluKSAtb3IgJHIuaXN0R2VzYW10 -dmVyYW50d29ydGxpY2gpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdOdXIgQWRtaW5zIHVuZCBHZXNhbXR2ZXJhbnR3b3J0bGljaGUgZHVlcmZlbiBTdGF0aXN0 -aWstS2FjaGVsbiBhZW5kZXJuJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAg -aWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3Mn -IDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVy -dEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRoYXRLYWNoZWxuID0gKCRudWxsIC1uZSAkZGF0 -ZW4gLWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snc3RhdGlzdGlrS2FjaGVsbiddKQ0K -ICAgICAgICAgICAgICAgICRoYXRMYXlvdXQgID0gKCRudWxsIC1uZSAkZGF0ZW4gLWFuZCAkZGF0 -ZW4uUFNPYmplY3QuUHJvcGVydGllc1snc3RhdGlzdGlrTGF5b3V0J10pDQogICAgICAgICAgICAg -ICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAg -ICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpz -b24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAn -YWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWlu -KSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNv -biBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRoYXRLYWNo -ZWxuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGsgPSBbb2JqZWN0W11dQCgkZGF0 -ZW4uc3RhdGlzdGlrS2FjaGVsbikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFk -bWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXRpc3Rpa0thY2hlbG4nXSkgeyAkYWRtaW4uc3Rh -dGlzdGlrS2FjaGVsbiA9ICRrIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsg -JGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnc3RhdGlzdGlrS2FjaGVsbicg -LU5vdGVQcm9wZXJ0eVZhbHVlICRrIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGhhdExheW91dCkgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRsID0gW29iamVjdFtdXUAoJGRhdGVuLnN0YXRpc3Rpa0xheW91dCkN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ3N0YXRpc3Rpa0xheW91dCddKSB7ICRhZG1pbi5zdGF0aXN0aWtMYXlvdXQgPSAkbCB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5v -dGVQcm9wZXJ0eU5hbWUgJ3N0YXRpc3Rpa0xheW91dCcgLU5vdGVQcm9wZXJ0eVZhbHVlICRsIC1G -b3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg -ICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAg -ICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNl -bmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9r -KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMu -c3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3Rh -dGlzdGlrLmNvbmZpZy5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9i -amVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAg -ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBTdGFuZGFyZHJlY2h0 -ZSAocmVndWxhZXJlIFVzZXIpOiBnZWdlbnNlaXRpZ2UgUGxhbnVuZyBqZSBEaWVuc3RncnVwcGUv -DQogICAgICAgICAgICAjIFN0YW5kb3J0LiBTVS1vbmx5LiBXaXJkIGluIEdldC1SZWNodGUgYWRk -aXRpdiBpbiBlZGl0aWVyZW4gZWluZ2V3b2Jlbi4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvYWRtaW4vc3RhbmRhcmRyZWNodGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gU3RhbmRhcmRyZWNodGUgYWVuZGVybicg -NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVl -c3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRh -dGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGdnID0gQCgp -OyBpZiAoJGRhdGVuIC1hbmQgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlZ2Vuc2VpdGln -R3J1cHBlbiddKSAgIHsgJGdnID0gW3N0cmluZ1tdXUAoJGRhdGVuLmdlZ2Vuc2VpdGlnR3J1cHBl -biAgIHwgRm9yRWFjaC1PYmplY3QgeyBbc3RyaW5nXSRfIH0pIH0NCiAgICAgICAgICAgICAgICAk -Z3MgPSBAKCk7IGlmICgkZGF0ZW4gLWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snZ2Vn -ZW5zZWl0aWdTdGFuZG9ydGUnXSkgeyAkZ3MgPSBbc3RyaW5nW11dQCgkZGF0ZW4uZ2VnZW5zZWl0 -aWdTdGFuZG9ydGUgfCBGb3JFYWNoLU9iamVjdCB7IFtzdHJpbmddJF8gfSkgfQ0KICAgICAgICAg -ICAgICAgICRzciA9IEB7IGdlZ2Vuc2VpdGlnR3J1cHBlbiA9ICRnZzsgZ2VnZW5zZWl0aWdTdGFu -ZG9ydGUgPSAkZ3MgfQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAg -ICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJ -bnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0 -YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snc3RhbmRhcmRS -ZWNodGUnXSkgeyAkYWRtaW4uc3RhbmRhcmRSZWNodGUgPSAkc3IgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N0 -YW5kYXJkUmVjaHRlJyAtTm90ZVByb3BlcnR5VmFsdWUgJHNyIC1Gb3JjZSB9DQogICAgICAgICAg -ICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQt -TnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAg -ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBj -b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9j -a0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRs -b2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9n -RWludHJhZyAnc3RhbmRhcmRyZWNodGUuZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBT -ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAg -ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgRS1N -YWlsLVZvcmxhZ2VuOiBPYmpla3QgKG5pY2h0IEFycmF5KSDigJQgZWlnZW5lciBIYW5kbGVyLg0K -ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9lbWFpbHZvcmxhZ2VuJyAtYW5k -ICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0 -QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsg -Y29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQog -ICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0Fu -ZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9 -ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICMgUmljaC1UZXh0LUJv -ZHkgamUgVm9ybGFnZSBzZXJ2ZXJzZWl0aWcgYmVyZWluaWdlbiAoU3RvcmVkLVhTUykuDQogICAg -ICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkZGF0ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAg -Zm9yZWFjaCAoJHAgaW4gJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAg -ICAgICAgICAgICAgICR2ID0gJHAuVmFsdWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -bnVsbCAtbmUgJHYgLWFuZCAkdi5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10gLWFuZCAoJHYu -dGV4dCAtaXMgW3N0cmluZ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHYudGV4 -dCA9IENvbnZlcnRUby1TYWZlUmljaEh0bWwgJHYudGV4dA0KICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAg -ICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1p -bi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmpl -Y3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRh -ZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWlu -Lmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRt -aW4uUFNPYmplY3QuUHJvcGVydGllc1snZW1haWxWb3JsYWdlbiddKSB7ICRhZG1pbi5lbWFpbFZv -cmxhZ2VuID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4g -fCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdlbWFpbFZvcmxhZ2VuJyAtTm90ZVByb3Bl -cnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1K -c29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAg +DQogICAgICAgICRydiA9IChJbnZva2UtV2ViUmVxdWVzdCAtVXJpICdodHRwczovL3VwZGF0ZXMu +cmhpbm8ubnJ3L3JoaW5vL1N0YXR1c1F1b19VcGRhdGVzL3Jhdy9icmFuY2gvbWFpbi9WSTNER0wv +VkVSU0lPTicgYA0KICAgICAgICAgICAgICAgLVVzZUJhc2ljUGFyc2luZyAtVGltZW91dFNlYyAz +IC1FcnJvckFjdGlvbiBTdG9wKS5Db250ZW50LlRyaW0oKQ0KICAgICAgICAkc2NyaXB0OlJlbW90 +ZVZlcnNpb24gICA9ICRydg0KICAgICAgICAkc2NyaXB0OlVwZGF0ZUF2YWlsYWJsZSA9IChbU3lz +dGVtLlZlcnNpb25dJHJ2IC1ndCBbU3lzdGVtLlZlcnNpb25dJGxvY2FsVmVyKQ0KICAgICAgICBM +b2ctQXBpICgiVVBEQVRFLUNIRUNLOiBsb2thbD0kbG9jYWxWZXIgcmVtb3RlPSRydiBhdmFpbGFi +bGU9JCgkc2NyaXB0OlVwZGF0ZUF2YWlsYWJsZSkiKQ0KICAgIH0gY2F0Y2ggew0KICAgICAgICBM +b2ctQXBpICgiVVBEQVRFLUNIRUNLOiBuaWNodCBlcnJlaWNoYmFyICgkKCRfLkV4Y2VwdGlvbi5N +ZXNzYWdlKSkiKQ0KICAgIH0NCn0NClJlZnJlc2gtVXBkYXRlQ2hlY2sNCg0KIyBJbml0aWFsLVNu +YXBzaG90IGRlciBPZmZsaW5lLVdvY2hlbnBsYW4uaHRtbCBiZWltIFN0YXJ0IHJlZ2VuZXJpZXJl +bg0KIyAoYXVjaCB3ZW5uIHNlaXQgZGVtIGxldHp0ZW4gTGF1ZiBuaWNodHMgZ2VhZW5kZXJ0IHd1 +cmRlLCBoYXQgc2ljaCB6LkIuDQojIGRhcyBEYXR1bSB2ZXJzY2hvYmVuIHVuZCBkZXIgSGV1dGUt +TWFya2VyIHplaWd0IHNvbnN0IGRpZSBhbHRlIFdvY2hlKS4NCnRyeSB7IEdlbmVyYXRlLVdvY2hl +bnBsYW5TbmFwc2hvdCB8IE91dC1OdWxsIH0gY2F0Y2ggeyBMb2ctQXBpICgnU05BUFNIT1QgKGlu +aXRpYWwpIEZFSExFUjogezB9JyAtZiAkXy5FeGNlcHRpb24uTWVzc2FnZSkgfQ0KDQojIC0tLSBT +ZXJ2ZXIgc3RhcnRlbiAtLS0NCiRMaXN0ZW5lciA9IE5ldy1PYmplY3QgU3lzdGVtLk5ldC5IdHRw +TGlzdGVuZXINCiRMaXN0ZW5lci5QcmVmaXhlcy5BZGQoImh0dHA6Ly9sb2NhbGhvc3Q6JFBvcnQv +IikNCnRyeSB7DQogICAgJExpc3RlbmVyLlN0YXJ0KCkNCn0gY2F0Y2ggew0KICAgIFdyaXRlLUhv +c3QgKCdGRUhMRVI6IExpc3RlbmVyIGF1ZiBQb3J0IHswfSBrYW5uIG5pY2h0IHN0YXJ0ZW4uJyAt +ZiAkUG9ydCkgLUZvcmVncm91bmRDb2xvciBSZWQNCiAgICBXcml0ZS1Ib3N0ICRfDQogICAgTG9n +LUFwaSAoJ0xJU1RFTkVSIEZFSExFUjogezB9JyAtZiAkXy5FeGNlcHRpb24uTWVzc2FnZSkNCiAg +ICBTdGFydC1TbGVlcCAtU2Vjb25kcyA1DQogICAgZXhpdCAxDQp9DQoNCldyaXRlLUhvc3QgKCdW +STMgREdMLVBsYW51bmcgYXVmIGh0dHA6Ly9sb2NhbGhvc3Q6ezB9JyAtZiAkUG9ydCkNCldyaXRl +LUhvc3QgKCdSb290OiAgICB7MH0nIC1mICRSb290KQ0KV3JpdGUtSG9zdCAoJ0RhdGFEaXI6IHsw +fScgLWYgJERhdGFEaXIpDQpXcml0ZS1Ib3N0ICgnTG9nOiAgICAgezB9JyAtZiAkc2NyaXB0OkFw +aUxvZykNCg0KIyAtLS0gSGVhcnRiZWF0LVdhdGNoZG9nIC0tLQ0KJFdhdGNoZG9nVGltZXIgPSBO +ZXctT2JqZWN0IFN5c3RlbS5UaW1lcnMuVGltZXINCiRXYXRjaGRvZ1RpbWVyLkludGVydmFsID0g +NTAwMA0KJFdhdGNoZG9nVGltZXIuQXV0b1Jlc2V0ID0gJHRydWUNClJlZ2lzdGVyLU9iamVjdEV2 +ZW50IC1JbnB1dE9iamVjdCAkV2F0Y2hkb2dUaW1lciAtRXZlbnROYW1lIEVsYXBzZWQgLUFjdGlv +biB7DQogICAgJGVsYXBzZWQgPSAoR2V0LURhdGUpIC0gJHNjcmlwdDpMYXN0SGVhcnRiZWF0DQog +ICAgaWYgKCRlbGFwc2VkLlRvdGFsU2Vjb25kcyAtZ3QgMzApIHsNCiAgICAgICAgaWYgKC1ub3Qg +JHNjcmlwdDpTaHV0ZG93blBlbmRpbmcpIHsNCiAgICAgICAgICAgICRzY3JpcHQ6U2h1dGRvd25Q +ZW5kaW5nID0gJHRydWUNCiAgICAgICAgfSBlbHNlaWYgKCRlbGFwc2VkLlRvdGFsU2Vjb25kcyAt +Z3QgMzUpIHsNCiAgICAgICAgICAgICRMaXN0ZW5lci5TdG9wKCkNCiAgICAgICAgICAgIFtFbnZp +cm9ubWVudF06OkV4aXQoMCkNCiAgICAgICAgfQ0KICAgIH0NCn0gfCBPdXQtTnVsbA0KJFdhdGNo +ZG9nVGltZXIuU3RhcnQoKQ0KDQojIC0tLSBSZXF1ZXN0LUxvb3AgLS0tDQp0cnkgew0KICAgIHdo +aWxlICgkTGlzdGVuZXIuSXNMaXN0ZW5pbmcpIHsNCiAgICAgICAgJEFzeW5jUmVzdWx0ID0gJExp +c3RlbmVyLkJlZ2luR2V0Q29udGV4dCgkbnVsbCwgJG51bGwpDQogICAgICAgIHdoaWxlICgtbm90 +ICRBc3luY1Jlc3VsdC5Bc3luY1dhaXRIYW5kbGUuV2FpdE9uZSgxMDAwKSkgeyB9DQogICAgICAg +ICRDb250ZXh0ID0gJExpc3RlbmVyLkVuZEdldENvbnRleHQoJEFzeW5jUmVzdWx0KQ0KICAgICAg +ICAkUmVxdWVzdCA9ICRDb250ZXh0LlJlcXVlc3QNCiAgICAgICAgJFJlc3BvbnNlID0gJENvbnRl +eHQuUmVzcG9uc2UNCiAgICAgICAgJE1ldGhvZCA9ICRSZXF1ZXN0Lkh0dHBNZXRob2QNCiAgICAg +ICAgJFBhdGggPSAkUmVxdWVzdC5VcmwuQWJzb2x1dGVQYXRoDQogICAgICAgIExvZy1BcGkgKCdS +RVEgezB9IHsxfScgLWYgJE1ldGhvZCwgJFBhdGgpDQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAg +ICAgICMgPT09PT0gQ09SUyBQcmVmbGlnaHQgPT09PT0NCiAgICAgICAgICAgIGlmICgkTWV0aG9k +IC1lcSAnT1BUSU9OUycpIHsNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9 +IDIwNA0KICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0eUhlYWRlcnMgJFJlc3BvbnNlDQogICAg +ICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAgICAgICAg +ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBTWVNURU0g +PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGVhcnRiZWF0JyAtYW5kICRN +ZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICMgT3JpZ2luLUNoZWNrIChTcHJp +bnQgMSDigJQgU2ljaGVyaGVpdHMtTm90YnJlbXNlIDIwMjYtMDUtMjgpOg0KICAgICAgICAgICAg +ICAgICMgSGVhcnRiZWF0IGFremVwdGllcnQgbnVyIFJlcXVlc3RzIHZvbiBkZXIgZWlnZW5lbiBB +cHAuIEFuZGVyZQ0KICAgICAgICAgICAgICAgICMgbG9rYWxlIFByb3plc3NlIGtvZW5udGVuIHNv +bnN0IHBlciBMb29wIGRpZSBBdXRvLVNodXRkb3duLUxvZ2lrDQogICAgICAgICAgICAgICAgIyB1 +bWdlaGVuIG9kZXIgZGVuIFNlcnZlciBiZXd1c3N0IGFtIExlYmVuIGhhbHRlbi4gQnJvd3NlciBz +ZW5kZXQNCiAgICAgICAgICAgICAgICAjIE9yaWdpbiBhdXRvbWF0aXNjaDsgZmVobGVuZGVyIEhl +YWRlciB3aXJkIHRvbGVyaWVyZW4gKHNlbmRCZWFjb24NCiAgICAgICAgICAgICAgICAjIGluIG1h +bmNoZW4gQnJvd3Nlcm4pLCBhYmVyIEZBTFNDSEVSIE9yaWdpbiB3aXJkIGFiZ2VsZWhudC4NCiAg +ICAgICAgICAgICAgICAkb3JpZ2luID0gJFJlcXVlc3QuSGVhZGVyc1snT3JpZ2luJ10NCiAgICAg +ICAgICAgICAgICBpZiAoJG9yaWdpbiAtYW5kICRvcmlnaW4gLW5lICRzY3JpcHQ6Q29yc09yaWdp +bikgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnT3JpZ2luIG5p +Y2h0IGVybGF1YnQnIDQwMw0KICAgICAgICAgICAgICAgICAgICBMb2ctQXBpICgnSEVBUlRCRUFU +IDQwMyBPcmlnaW49ezB9JyAtZiAkb3JpZ2luKQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51 +ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Okxhc3RIZWFydGJl +YXQgPSBHZXQtRGF0ZQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6U2h1dGRvd25QZW5kaW5nID0g +JGZhbHNlDQogICAgICAgICAgICAgICAgIyBhZG1pblZlcnNpb24gLyBwbGFudW5nVmVyc2lvbjog +bXRpbWUgYWxzIFRpY2tzLiBFcmxhdWJ0IGRlbQ0KICAgICAgICAgICAgICAgICMgQ2xpZW50LCBS +ZWNodGUtIGJ6dy4gUGVyc29uZW4tQWVuZGVydW5nZW4gaW0gSGludGVyZ3J1bmQgenUNCiAgICAg +ICAgICAgICAgICAjIGVya2VubmVuIHVuZCBaLnJlY2h0ZS9aLnBsYW51bmcgbmV1IHp1IGxhZGVu +LCBvaG5lIGRhc3MgZGVyDQogICAgICAgICAgICAgICAgIyBVc2VyIEY1IGRydWVja2VuIG11c3Mu +IHBsYW51bmdWZXJzaW9uIGRlY2t0IGluc2Jlc29uZGVyZQ0KICAgICAgICAgICAgICAgICMgZWRp +dFJlY2h0ZS9zZWhlbi1VcGRhdGVzIGFiLCBkaWUgZGVyIExpdmUtU3luYy1EZWx0YSBuaWNodA0K +ICAgICAgICAgICAgICAgICMgbGllZmVydCAoQ2hlcnJ5LVBpY2sgMWFlZmUyNiBCdWcgIzMpLg0K +ICAgICAgICAgICAgICAgICRhZG1pblZlciAgID0gMA0KICAgICAgICAgICAgICAgICRwbGFudW5n +VmVyID0gMA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRhZG1p +bkZpbGUgPSBKb2luLVBhdGggJERhdGFEaXIgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAg +ICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhZG1pbkZpbGUpIHsNCiAgICAgICAgICAg +ICAgICAgICAgICAgICRhZG1pblZlciA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGFkbWluRmls +ZSkuTGFzdFdyaXRlVGltZVV0Yy5UaWNrcw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICRwbGFudW5nRmlsZSA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVuZy5q +c29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcGxh +bnVuZ0ZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nVmVyID0gKEdldC1J +dGVtIC1MaXRlcmFsUGF0aCAkcGxhbnVuZ0ZpbGUpLkxhc3RXcml0ZVRpbWVVdGMuVGlja3MNCiAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2gge30NCiAgICAgICAg +ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdvayc7IGFkbWlu +VmVyc2lvbiA9ICRhZG1pblZlcjsgcGxhbnVuZ1ZlcnNpb24gPSAkcGxhbnVuZ1ZlciB9DQogICAg +ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0 +aCAtZXEgJy9hcGkvc2h1dGRvd24nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAg +ICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnc2h1dGRvd24n +IH0NCiAgICAgICAgICAgICAgICBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDMwMA0KICAgICAg +ICAgICAgICAgICRMaXN0ZW5lci5TdG9wKCkNCiAgICAgICAgICAgICAgICBbRW52aXJvbm1lbnRd +OjpFeGl0KDApDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp +L2luZm8nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBSZWZyZXNo +LVVwZGF0ZUNoZWNrDQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAg +ICAgICAgJGluZm9PYmogPSBAew0KICAgICAgICAgICAgICAgICAgICBiZW51dHplciAgICAgICAg +ICAgICAgICA9ICIkRG9tYWluXCRVc2VybmFtZSINCiAgICAgICAgICAgICAgICAgICAgcm9sbGUg +ICAgICAgICAgICAgICAgICAgPSAkci5yb2xsZQ0KICAgICAgICAgICAgICAgICAgICBpc3RTdXBl +clVzZXIgICAgICAgICAgICA9ICRyLmlzdFN1cGVyVXNlcg0KICAgICAgICAgICAgICAgICAgICBp +c3RGYWNoYXVmc2ljaHQgICAgICAgICA9ICRyLmlzdEZhY2hhdWZzaWNodA0KICAgICAgICAgICAg +ICAgICAgICBpc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCA9ICRyLmlzdEdlc2FtdHZlcmFudHdvcnRs +aWNoDQogICAgICAgICAgICAgICAgICAgIHNlaGVuICAgICAgICAgICAgICAgICAgID0gJHIuc2Vo +ZW4NCiAgICAgICAgICAgICAgICAgICAgYWRtaW5TdWJ0YWJzICAgICAgICAgICAgPSAkci5hZG1p +blN1YnRhYnMNCiAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGlrQmVyZWljaGUgICAgICAgPSAk +ci5zdGF0aXN0aWtCZXJlaWNoZQ0KICAgICAgICAgICAgICAgICAgICBlZGl0aWVyZW4gICAgICAg +ICAgICAgICA9ICRyLmVkaXRpZXJlbiAgICMgbnVsbCBiZWkgU3VwZXJVc2VyID0gImFsbGVzIGVy +bGF1YnQiDQogICAgICAgICAgICAgICAgICAgIG1laW5lUGVyc29uSWQgICAgICAgICAgID0gJHIu +bWVpbmVQZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIgICAgICAgICAgICAgICAg +ICA9ICRzY3JpcHQ6Q29yc09yaWdpbg0KICAgICAgICAgICAgICAgICAgICB1cGRhdGVBdmFpbGFi +bGUgICAgICAgICA9ICRzY3JpcHQ6VXBkYXRlQXZhaWxhYmxlDQogICAgICAgICAgICAgICAgICAg +IHJlbW90ZVZlcnNpb24gICAgICAgICAgID0gJHNjcmlwdDpSZW1vdGVWZXJzaW9uDQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgJGlu +Zm9PYmoNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9kZWJ1ZycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0K +ICAgICAgICAgICAgICAgICRkYXQgPSBAeyBSb290ID0gJFJvb3Q7IERhdGFEaXIgPSAkRGF0YURp +cjsgRmlsZXMgPSBAe30gfQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmIGluICdhZG1pbi5q +c29uJywncGxhbnVuZy5qc29uJywnbG9nYnVjaC5qc29uJykgew0KICAgICAgICAgICAgICAgICAg +ICAkZnAgPSBKb2luLVBhdGggJERhdGFEaXIgJGYNCiAgICAgICAgICAgICAgICAgICAgJGluZm8g +PSBAeyBleGlzdHMgPSAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZnApIH0NCiAgICAgICAgICAg +ICAgICAgICAgaWYgKCRpbmZvLmV4aXN0cykgeyAkaW5mby5zaXplID0gKEdldC1JdGVtIC1MaXRl +cmFsUGF0aCAkZnApLkxlbmd0aCB9DQogICAgICAgICAgICAgICAgICAgICRkYXQuRmlsZXNbJGZd +ID0gJGluZm8NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBSZWNodGUtSW5m +byAod2ljaHRpZyBmdWVyIEFkbWluLVRhYi1TaWNodGJhcmtlaXQpDQogICAgICAgICAgICAgICAg +JGRhdC5CZW51dHplciA9ICIkRG9tYWluXCRVc2VybmFtZSINCiAgICAgICAgICAgICAgICB0cnkg +ew0KICAgICAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICAg +ICAgJGRhdC5SZWNodGUgPSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgcm9sbGUgICAgICAg +ICAgID0gJHIucm9sbGUNCiAgICAgICAgICAgICAgICAgICAgICAgIGlzdFN1cGVyVXNlciAgICA9 +ICRyLmlzdFN1cGVyVXNlcg0KICAgICAgICAgICAgICAgICAgICAgICAgaXN0RmFjaGF1ZnNpY2h0 +ID0gJHIuaXN0RmFjaGF1ZnNpY2h0DQogICAgICAgICAgICAgICAgICAgICAgICBzZWhlbiAgICAg +ICAgICAgPSAkci5zZWhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgbWVpbmVQZXJzb25JZCAg +ID0gJHIubWVpbmVQZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgICRkYXQuUmVjaHRlID0gQHsgZmVobGVy +ID0gJF8uRXhjZXB0aW9uLk1lc3NhZ2UgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAjIEFkbWluLmpzb24gS3VyemNoZWNrDQogICAgICAgICAgICAgICAgJGFkbWluT2JqID0g +UmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAt +ZXEgJGFkbWluT2JqKSB7DQogICAgICAgICAgICAgICAgICAgICRkYXQuQWRtaW5Kc29uTGVzYmFy +ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg +JGFuelNVID0gMA0KICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluT2JqLnN1cGVyVXNlcikg +eyAkYW56U1UgPSBAKCRhZG1pbk9iai5zdXBlclVzZXIpLkNvdW50IH0NCiAgICAgICAgICAgICAg +ICAgICAgJHN1S2VubnVuZ2VuID0gQCgpDQogICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW5P +Ymouc3VwZXJVc2VyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcyBpbiBA +KCRhZG1pbk9iai5zdXBlclVzZXIpKSB7ICRzdUtlbm51bmdlbiArPSBbc3RyaW5nXSRzLm53S2Vu +bnVuZyB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGRhdC5B +ZG1pbkpzb25MZXNiYXIgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAkZGF0LlN1cGVyVXNl +ckFuemFobCA9ICRhbnpTVQ0KICAgICAgICAgICAgICAgICAgICAkZGF0LlN1cGVyVXNlcktlbm51 +bmdlbiA9ICRzdUtlbm51bmdlbg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBT +ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlICRkYXQNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K +ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFNZTkMtQ0hFQ0sgPT09PT0NCiAg +ICAgICAgICAgICMgVmVyZ2xlaWNodCBwcm8gV2ViLUFzc2V0IGRpZSBEYXRlaS1Hcm9lc3NlIGlu +IGRlciBTb3VyY2UgKGdlcHVsbHRlcw0KICAgICAgICAgICAgIyBSZXBvLCAkc2NyaXB0OkFzc2V0 +RmFsbGJhY2spIGdlZ2VuIGRpZSBEYXRlaS1Hcm9lc3NlIGltIEFzc2V0LUNhY2hlDQogICAgICAg +ICAgICAjICgkUm9vdCwgUm9ib2NvcHktWmllbCkuIEVya2VubnQgdW52b2xsc3RhZW5kaWdlIFJv +Ym9jb3B5LVVlYmVyLQ0KICAgICAgICAgICAgIyB0cmFndW5nZW4sIHZlcmFsdGV0ZSBBc3NldC1D +YWNoZXMgdW5kIGZlaGxlbmRlIERhdGVpZW4uDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcv +YXBpL3N5bmMtY2hlY2svZGF0ZWllbicgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAg +ICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25z +ZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkc2NyaXB0OkFzc2V0RmFsbGJhY2spIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu +ZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSAk +ZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIGZlaGxlciA9ICdBc3NldEZhbGxiYWNrIG5p +Y2h0IGtvbmZpZ3VyaWVydCDigJQgU291cmNlLVBmYWQgdW5iZWthbm50LCBWZXJnbGVpY2ggbmlj +aHQgbW9lZ2xpY2guIChTZXJ2ZXIgd3VyZGUgb2huZSAtQXNzZXRGYWxsYmFjayBnZXN0YXJ0ZXQu +KScNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0K +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkd2ViRXh0ID0gJy5qcycsJy5jc3Mn +LCcuaHRtbCcsJy5pY28nLCcucG5nJywnLmpwZycsJy5qcGVnJywnLnN2ZycNCiAgICAgICAgICAg +ICAgICAkaWdub3JpZXJlVG9wID0gQCgnLmdpdCcsJ2RvY3MnLCdkZXYnLCd0ZXN0cycsJ2RhdGEn +LCdjYWNoZScpDQogICAgICAgICAgICAgICAgJGRhdGVpZW4gPSBAKCkNCiAgICAgICAgICAgICAg +ICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkYWxsZSA9IEdldC1DaGlsZEl0ZW0gLUxpdGVy +YWxQYXRoICRzY3JpcHQ6QXNzZXRGYWxsYmFjayAtUmVjdXJzZSAtRmlsZSAtRXJyb3JBY3Rpb24g +U2lsZW50bHlDb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZiBpbiAkYWxs +ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHJlbCA9ICRmLkZ1bGxOYW1lLlN1YnN0cmlu +Zygkc2NyaXB0OkFzc2V0RmFsbGJhY2suTGVuZ3RoICsgMSkgLXJlcGxhY2UgJ1xcJywgJy8nDQog +ICAgICAgICAgICAgICAgICAgICAgICAkdG9wID0gKCRyZWwgLXNwbGl0ICcvJylbMF0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIGlmICgkaWdub3JpZXJlVG9wIC1jb250YWlucyAkdG9wKSB7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRleHQgPSAkZi5FeHRlbnNpb24uVG9M +b3dlcigpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHdlYkV4dCAtbm90Y29udGFpbnMg +JGV4dCkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkZGF0ZWllbiArPSAk +cmVsDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgIyBkYXRhLy1T +b25kZXJmYWVsbGU6IG51ciBkaWUgendlaSBUYXJuLU1hcmt1cHMsIGFsbGVzIGFuZGVyZQ0KICAg +ICAgICAgICAgICAgICAgICAjIGxpZWd0IGltIERhdGFEaXIgKGFkbWluLmpzb24vcGxhbnVuZy5q +c29uLy4uLikgdW5kIHdpcmQgbmljaHQNCiAgICAgICAgICAgICAgICAgICAgIyBpbiBkZW4gQXNz +ZXQtQ2FjaGUga29waWVydC4NCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGV4dHJhIGlu +ICdkYXRhL21haW5mcmFtZS5odG1sJywnZGF0YS9zYW5pdGl6ZXIuaHRtbCcpIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICRzcmNFeHRyYSA9IEpvaW4tUGF0aCAkc2NyaXB0OkFzc2V0RmFsbGJh +Y2sgJGV4dHJhDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFs +UGF0aCAkc3JjRXh0cmEpIHsgJGRhdGVpZW4gKz0gJGV4dHJhIH0NCiAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG9rID0gJGZhbHNlOyBmZWhsZXIgPSAoJ1NvdXJjZS1W +ZXJ6ZWljaG5pcyBuaWNodCBsZXNiYXI6ICcgKyAkXy5FeGNlcHRpb24uTWVzc2FnZSkgfQ0KICAg +ICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAkZGF0ZWllbiA9ICRkYXRlaWVuIHwgU29ydC1PYmplY3QgLVVuaXF1ZQ0KICAgICAgICAg +ICAgICAgICRlaW50cmFlZ2UgPSBAKCkNCiAgICAgICAgICAgICAgICAkYW56T2sgPSAwOyAkYW56 +RGlmZiA9IDA7ICRhbnpGZWhsdEFzc2V0ID0gMDsgJGFuekZlaGx0U291cmNlID0gMA0KICAgICAg +ICAgICAgICAgIGZvcmVhY2ggKCRyZWwgaW4gJGRhdGVpZW4pIHsNCiAgICAgICAgICAgICAgICAg +ICAgJGFzc2V0UGZhZCAgPSBKb2luLVBhdGggJFJvb3QgJHJlbA0KICAgICAgICAgICAgICAgICAg +ICAkc291cmNlUGZhZCA9IEpvaW4tUGF0aCAkc2NyaXB0OkFzc2V0RmFsbGJhY2sgJHJlbA0KICAg +ICAgICAgICAgICAgICAgICAkYXNzZXRCeXRlcyAgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAg +ICAkc291cmNlQnl0ZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRo +IC1MaXRlcmFsUGF0aCAkYXNzZXRQZmFkKSAgeyAkYXNzZXRCeXRlcyAgPSAoR2V0LUl0ZW0gLUxp +dGVyYWxQYXRoICRhc3NldFBmYWQpLkxlbmd0aCB9DQogICAgICAgICAgICAgICAgICAgIGlmIChU +ZXN0LVBhdGggLUxpdGVyYWxQYXRoICRzb3VyY2VQZmFkKSB7ICRzb3VyY2VCeXRlcyA9IChHZXQt +SXRlbSAtTGl0ZXJhbFBhdGggJHNvdXJjZVBmYWQpLkxlbmd0aCB9DQogICAgICAgICAgICAgICAg +ICAgICRzdGF0dXMgPSAndW5iZWthbm50Jw0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwg +LWVxICRzb3VyY2VCeXRlcyAtYW5kICRudWxsIC1lcSAkYXNzZXRCeXRlcykgeyAkc3RhdHVzID0g +J2JlaWRlX2ZlaGxlbicgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCRudWxsIC1lcSAk +YXNzZXRCeXRlcykgIHsgJHN0YXR1cyA9ICdhc3NldF9mZWhsdCc7ICAkYW56RmVobHRBc3NldCsr +IH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkbnVsbCAtZXEgJHNvdXJjZUJ5dGVzKSB7 +ICRzdGF0dXMgPSAnc291cmNlX2ZlaGx0JzsgJGFuekZlaGx0U291cmNlKysgfQ0KICAgICAgICAg +ICAgICAgICAgICBlbHNlaWYgKCRhc3NldEJ5dGVzIC1lcSAkc291cmNlQnl0ZXMpIHsgJHN0YXR1 +cyA9ICdvayc7ICRhbnpPaysrIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRzdGF0dXMg +PSAnZ3JvZXNzZV9kaWZmJzsgJGFuekRpZmYrKyB9DQogICAgICAgICAgICAgICAgICAgICRlaW50 +cmFlZ2UgKz0gW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBmYWQgICAgICAg +ID0gJHJlbA0KICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQnl0ZXMgPSAkc291cmNlQnl0 +ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0Qnl0ZXMgID0gJGFzc2V0Qnl0ZXMNCiAg +ICAgICAgICAgICAgICAgICAgICAgIGRpZmZCeXRlcyAgID0gaWYgKCRudWxsIC1uZSAkc291cmNl +Qnl0ZXMgLWFuZCAkbnVsbCAtbmUgJGFzc2V0Qnl0ZXMpIHsgJGFzc2V0Qnl0ZXMgLSAkc291cmNl +Qnl0ZXMgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAg +ICAgPSAkc3RhdHVzDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAg +ICAgICAgICBvayAgICAgICAgICA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgIHNvdXJjZVJv +b3QgID0gJHNjcmlwdDpBc3NldEZhbGxiYWNrDQogICAgICAgICAgICAgICAgICAgIGFzc2V0Um9v +dCAgID0gJFJvb3QNCiAgICAgICAgICAgICAgICAgICAgYW56YWhsICAgICAgPSAkZWludHJhZWdl +LkNvdW50DQogICAgICAgICAgICAgICAgICAgIGFuek9rICAgICAgID0gJGFuek9rDQogICAgICAg +ICAgICAgICAgICAgIGFuekRpZmYgICAgID0gJGFuekRpZmYNCiAgICAgICAgICAgICAgICAgICAg +YW56RmVobHRBc3NldCAgPSAkYW56RmVobHRBc3NldA0KICAgICAgICAgICAgICAgICAgICBhbnpG +ZWhsdFNvdXJjZSA9ICRhbnpGZWhsdFNvdXJjZQ0KICAgICAgICAgICAgICAgICAgICBkYXRlaWVu +ICAgICA9ICRlaW50cmFlZ2UNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29u +dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBBRE1JTiA9PT09PQ0K +ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbicgLWFuZCAkTWV0aG9kIC1lcSAn +R0VUJykgew0KICAgICAgICAgICAgICAgICR0eHQgPSBSZWFkLVRleHRGaWxlICdhZG1pbi5qc29u +Jw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHR4dCkgeyBTZW5kLUVycm9yICRSZXNw +b25zZSAnYWRtaW4uanNvbiBuaWNodCBnZWZ1bmRlbicgNDA0IH0NCiAgICAgICAgICAgICAgICBl +bHNlIHsgU2VuZC1Kc29uVGV4dCAkUmVzcG9uc2UgJHR4dCB9DQogICAgICAgICAgICAgICAgY29u +dGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRt +aW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo +VGVzdC1EYXJmQmVyZWljaCAnYWRtaW5pc3RyYXRpb24nKSkgeyBTZW5kLUVycm9yICRSZXNwb25z +ZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk +Ym9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5 +KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAg +ICAgICAgICAgICAgICBpZiAoJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2FkbWluS2VubnVu +Z2VuJ10pIHsgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCdhZG1pbktlbm51bmdl +bicpIH0NCiAgICAgICAgICAgICAgICAjIFBTLTUuMS1VbndyYXAtU2NodXR6OiBhbGxlIExpc3Rl +bi1GZWxkZXIsIGRpZSBkZXIgQ2xpZW50IHVudGVyDQogICAgICAgICAgICAgICAgIyBBRE1JTl9M +SVNUX0ZFTERFUiBmdWVocnQsIHNlcnZlci1zZWl0aWcgYWxzIEFycmF5cyBlcnp3aW5nZW4uDQog +ICAgICAgICAgICAgICAgIyBTb25zdCB3ZXJkZW4gTGlzdGVuIG1pdCBudXIgZWluZW0gRWxlbWVu +dCB2b20gUG93ZXJTaGVsbC1KU09OLQ0KICAgICAgICAgICAgICAgICMgUm91bmR0cmlwIHp1bSBF +aW56ZWwtT2JqZWt0IGVudHBhY2t0IHVuZCBjbGllbnQtc2VpdGlnIGtvbW10DQogICAgICAgICAg +ICAgICAgIyBhZG1pbkxpc3Rlbk5vcm1hbGlzaWVyZW4gZ2dmLiB6dSBzcGFldCAoei5CLiBuYWNo +IEhvdC1SZWxvYWQpLg0KICAgICAgICAgICAgICAgIE5vcm1hbGlzaWVyZS1BZG1pbkxpc3RlbiAk +ZGF0ZW4NCiAgICAgICAgICAgICAgICAjIFNlcnZlci1zZWl0aWdlIFJpY2gtVGV4dC1TYW5pdGlz +aWVydW5nIChTdG9yZWQtWFNTLVNjaHV0eikuDQogICAgICAgICAgICAgICAgSW52b2tlLUFkbWlu +UmljaHRleHRTYW5pdGl6ZSAkZGF0ZW4NCiAgICAgICAgICAgICAgICAkaXN0U1UgPSBUZXN0LUlz +dFN1cGVyVXNlcg0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAg +ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZv +a2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAj +IE51ciBTdXBlclVzZXIgZGFyZiBkaWUgUm9sbGVuLUxpc3RlbiBzdXBlclVzZXIvZmFjaGF1ZnNp +Y2h0DQogICAgICAgICAgICAgICAgICAgICAgICAjIHVlYmVyIC9hcGkvYWRtaW4gYWVuZGVybiDi +gJQgc29uc3Qga29lbm50ZSBqZW1hbmQgc2ljaCBzZWxic3QNCiAgICAgICAgICAgICAgICAgICAg +ICAgICMgenVtIFN1cGVyVXNlciBiZWZvZXJkZXJuIHVuZCBkYW1pdCBkaWUgc2VwYXJhdGVuIEd1 +YXJkcyBhdWYNCiAgICAgICAgICAgICAgICAgICAgICAgICMgL2FwaS9hZG1pbi9zdXBlcnVzZXIg +Ynp3LiAvYXBpL2FkbWluL2ZhY2hhdWZzaWNodCB1bWdlaGVuLg0KICAgICAgICAgICAgICAgICAg +ICAgICAgIyBhZG1pbktlbm51bmdlbiBpc3QgZ2VuZXJlbGwgYWJnZXNjaGFmZnQgdW5kIHdpcmQg +ZW50ZmVybnQuDQogICAgICAgICAgICAgICAgICAgICAgICAjIFJlYWQgZGVyIGFsdGVuIFdlcnRl +IG11c3MgSU5ORVJIQUxCIGRlcyBMb2NrcyBwYXNzaWVyZW4sDQogICAgICAgICAgICAgICAgICAg +ICAgICAjIGRhbWl0IGRpZSBTVS9GYWNoYXVmc2ljaHQtTGlzdGVuIGF0b21hciBlcmhhbHRlbiBi +bGVpYmVuLg0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdCA9IFJlYWQtSnNvbk9iamVjdCAn +YWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRpc3RTVSkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmZWxkIGluICdzdXBlclVzZXIn +LCdmYWNoYXVmc2ljaHQnLCdkaXJla3Rpb25zbGVpdHVuZycsJ2Z1ZWhydW5nc3N0ZWxsZScpIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhbHQgLWFuZCAkYWx0LlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJGZlbGRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJGZlbGRdKSB7ICRkYXRlbi4kZmVs +ZCA9ICRhbHQuJGZlbGQgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz +ZSB7ICRkYXRlbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGZlbGQgLU5vdGVQcm9w +ZXJ0eVZhbHVlICRhbHQuJGZlbGQgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgfSBlbHNlaWYgKCRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkXSkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRp +ZXMuUmVtb3ZlKCRmZWxkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgIyBLZXktVW5pb246IG5pY2h0IG1pdGdlc2VuZGV0ZSBUb3At +TGV2ZWwtS2V5cyBlcmhhbHRlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShNZXJn +ZS1BZG1pbktleXMgJGFsdCAkZGF0ZW4pDQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1K +c29uT2JqZWN0ICdhZG1pbi5qc29uJyAkZGF0ZW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig JFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQt RXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZW1haWx2b3JsYWdl -bi5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u -c2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUN -CiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBFLU1haWwtVHJpZ2dlci1Lb25maWcgKHBy -byBUcmlnZ2VyOiBha3RpdiArIEVtcGZhZW5nZXItVGFncykg4oCUDQogICAgICAgICAgICAjIGF1 -c3NjaGxpZXNzbGljaCBTdGV1ZXJ1bmcgZnVlciBkZW4gRnJvbnRlbmQtbWFpbHRvOi1EaXNwYXRj -aGVyLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9lbWFpbHRyaWdnZXIn +b250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYWRtaW4uZ2VhZW5k +ZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 +YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg +ICAgICB9DQoNCiAgICAgICAgICAgICMgU3VwZXItVXNlci1MaXN0ZTogbnVyIFN1cGVyVXNlciBk +YXJmIFN1cGVyVXNlciB2ZXJ3YWx0ZW4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv +YWRtaW4vc3VwZXJ1c2VyJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAg +ICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn +TnVyIFN1cGVyVXNlciBkdWVyZmVuIFN1cGVyVXNlciB2ZXJ3YWx0ZW4nIDQwMzsgY29udGludWUg +fQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUg +Z3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgQCguLi4pIGVyendpbmd0 +IEFycmF5IGF1Y2ggYmVpIDEgRWxlbWVudCAoUFMgNS4xIGVudHBhY2t0IHNvbnN0IHp1IEVpbnpl +bC1PYmpla3QsDQogICAgICAgICAgICAgICAgIyBkYW5uIHdpcmQgZGllIExpc3RlIGluIGFkbWlu +Lmpzb24genVtIE9iamVrdCBkZWdlbmVyaWVydCAtPiBDbGllbnQtRmVobGVyKS4NCiAgICAgICAg +ICAgICAgICAkYm9keU9iaiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAg +ICAgICRkYXRlbiA9IFtvYmplY3RbXV1AKCRib2R5T2JqKQ0KICAgICAgICAgICAgICAgICRsb2Nr +RXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAg +ICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpz +b24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1 +cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQg +bGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICR3aXBlTXNnID0gVGVzdC1XaXBl +U2NodXR6ICdzdXBlclVzZXInICRkYXRlbiAkYWRtaW4gJFJlcXVlc3QgJGJvZHlPYmoNCiAgICAg +ICAgICAgICAgICAgICAgICAgIGlmICgkd2lwZU1zZykgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7 +IHN0YXR1cyA9IDQwOTsgbXNnID0gJHdpcGVNc2cgfSB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAjIEFsdGUgTGlzdGUgdm9yIGRlbSBPdmVyd3JpdGUgc25hcHNob3R0ZW4g4oCUIHdpciBicmF1 +Y2hlbg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBzaWUgbmFjaCBkZW0gTG9jayBmdWVyIGRp +ZSBEaWZmLUJlcmVjaG51bmcgKG1haWx0byBiZWkNCiAgICAgICAgICAgICAgICAgICAgICAgICMg +U1UgcmVpbi9yYXVzKS4NCiAgICAgICAgICAgICAgICAgICAgICAgICRhbHRTVSA9IEAoKQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdXBl +clVzZXInXSkgeyAkYWx0U1UgPSBbb2JqZWN0W11dQCgkYWRtaW4uc3VwZXJVc2VyKSB9DQogICAg +ICAgICAgICAgICAgICAgICAgICBbdm9pZF0oQmFja3VwLUFkbWluSnNvbiAnc3VwZXJVc2VyJykN +CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1sn +c3VwZXJVc2VyJ10pIHsgJGFkbWluLnN1cGVyVXNlciA9ICRkYXRlbiB9DQogICAgICAgICAgICAg +ICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAn +c3VwZXJVc2VyJyAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAgICAgICAg +ICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQt +TnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWU7IGFsdCA9 +ICRhbHRTVSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNo +IHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxl +cjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tF +cmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg +ICAgICAjIERpZmYgYWx0L25ldSBuYWNoIG53S2VubnVuZy4gU1UtUmVpbi9SYXVzIGxvZXN0IG1h +aWx0byB2aWEgQ2xpZW50IGF1cw0KICAgICAgICAgICAgICAgICMgKFZlcmFudHdvcnR1bmdzLVVl +YmVyZ2FuZyBWb3JsYWdlICdyb2xsZV92ZXJhbnR3b3J0dW5nJykuDQogICAgICAgICAgICAgICAg +JG1haWx0b0RpZmZzID0gR2V0LVJvbGxlRGlmZnMgJGxvY2tFcmdlYm5pcy5hbHQgJGRhdGVuICdT +dXBlclVzZXInICRmYWxzZQ0KICAgICAgICAgICAgICAgICMgYW56YWhsIG1pdGdlYmVuIOKAlCBk +ZXIgTG9nYnVjaC1DbGllbnQgbGllc3QgZS5hbnphaGw7IG9obmUgZGFzDQogICAgICAgICAgICAg +ICAgIyBGZWxkIGJsaWViIGRpZSBEZXRhaWwtU3BhbHRlIGJlaSBTVS1MaXN0ZW5hZW5kZXJ1bmdl +biBsZWVyDQogICAgICAgICAgICAgICAgIyAoZmFjaGF1ZnNpY2h0LmdlYWVuZGVydCB1bnRlbiBt +YWNodCBlcyBnZW5hdXNvKS4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdzdXBl +clVzZXIuZ2VhZW5kZXJ0JyBAeyBhbnphaGwgPSAkZGF0ZW4uQ291bnQ7IGRpZmZzID0gJG1haWx0 +b0RpZmZzLkNvdW50IH0NCiAgICAgICAgICAgICAgICAkcmVzcCA9IEB7IHN0YXR1cyA9ICdnZXNw +ZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGlmICgkbWFpbHRvRGlmZnMuQ291bnQgLWd0IDAp +IHsNCiAgICAgICAgICAgICAgICAgICAgIyBQUy01LjEtVW53cmFwLVNjaHV0ejogQCgkeCkgZXJ6 +d2luZ3QgQXJyYXkgYXVjaCBiZWkgMSBFbGVtZW50Lg0KICAgICAgICAgICAgICAgICAgICAkcmVz +cFsnX2JyYXVjaHRfbWFpbHRvJ10gPSBbb3JkZXJlZF1AeyB0cmlnZ2VyID0gJ3JvbGxlX3ZlcmFu +dHdvcnR1bmcnOyBkaWZmcyA9IFtvYmplY3RbXV1AKCRtYWlsdG9EaWZmcykgfQ0KICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlICRyZXNw +DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg +IyBGYWNoYXVmc2ljaHQtTGlzdGU6IG51ciBTdXBlclVzZXIgZGFyZiBGYWNoYXVmc2ljaHQgdmVy +d2FsdGVuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2ZhY2hhdWZzaWNo +dCcgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChU +ZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIg +ZHVlcmZlbiBGYWNoYXVmc2ljaHQgdmVyd2FsdGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg +ICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgt +bm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7 +IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keU9iaiA9ICRib2R5IHwgQ29udmVydEZy +b20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXRlbiA9IFtvYmplY3RbXV1AKCRib2R5T2JqKQ0K +ICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRy +eSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVM +b2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFk +LUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51 +bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNn +ID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICR3aXBlTXNnID0gVGVzdC1XaXBlU2NodXR6ICdmYWNoYXVmc2ljaHQnICRkYXRlbiAkYWRtaW4g +JFJlcXVlc3QgJGJvZHlPYmoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkd2lwZU1zZykg +eyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDQwOTsgbXNnID0gJHdpcGVNc2cgfSB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAkYWx0RkEgPSBAKCkNCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZmFjaGF1ZnNpY2h0J10pIHsg +JGFsdEZBID0gW29iamVjdFtdXUAoJGFkbWluLmZhY2hhdWZzaWNodCkgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgW3ZvaWRdKEJhY2t1cC1BZG1pbkpzb24gJ2ZhY2hhdWZzaWNodCcpDQogICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2ZhY2hh +dWZzaWNodCddKSB7ICRhZG1pbi5mYWNoYXVmc2ljaHQgPSAkZGF0ZW4gfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUg +J2ZhY2hhdWZzaWNodCcgLU5vdGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwg +T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlOyBh +bHQgPSAkYWx0RkEgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBj +YXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1G +ZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRs +b2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgIyBGYWNoYXVmc2ljaHQtRGlmZjogdHJlbm50IG1haWx0by13dWVyZGlnZSBWZXJh +bnR3b3J0dW5ncy0NCiAgICAgICAgICAgICAgICAjIFVlYmVyZ2FlbmdlIChHZXNhbXR2ZXJhbnR3 +b3J0bGljaCByZWluL3JhdXMpIHZvbSByZXN0bGljaGVuDQogICAgICAgICAgICAgICAgIyBSb2xs +ZW4tVXBkYXRlcyAoRkEgaGluenUvcmF1cyBvaG5lIEdlc2FtdCwgb2RlciBTZWhlbi1GbGFnLQ0K +ICAgICAgICAgICAgICAgICMgV2VjaHNlbCkuIEVyc3RlIGZsaWXDn2VuIGluIGRlbiBtYWlsdG8t +VHJpZ2dlciwgZGVyIFJlc3Qgd2lyZA0KICAgICAgICAgICAgICAgICMgenUgSW4tQXBwLUhpbndl +aXNlbi4NCiAgICAgICAgICAgICAgICAkZmFBdXN3ZXJ0dW5nID0gR2V0LUZhY2hhdWZzaWNodERp +ZmZzICRsb2NrRXJnZWJuaXMuYWx0ICRkYXRlbg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp +bnRyYWcgJ2ZhY2hhdWZzaWNodC5nZWFlbmRlcnQnIEB7IGFuemFobCA9ICRkYXRlbi5Db3VudDsg +bWFpbHRvID0gJGZhQXVzd2VydHVuZy5tYWlsdG9EaWZmcy5Db3VudDsgaGlud2Vpc2UgPSAkZmFB +dXN3ZXJ0dW5nLmhpbndlaXNEaWZmcy5Db3VudCB9DQogICAgICAgICAgICAgICAgZm9yZWFjaCAo +JGggaW4gJGZhQXVzd2VydHVuZy5oaW53ZWlzRGlmZnMpIHsNCiAgICAgICAgICAgICAgICAgICAg +TmV3LUhpbndlaXMgJ3JvbGxlX2dlYWVuZGVydCcgJGggKEdldC1Ba3R1ZWxsZXJCZW51dHplcikg +fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcmVzcCA9IEB7 +IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGlmICgkZmFBdXN3ZXJ0 +dW5nLm1haWx0b0RpZmZzLkNvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgICMgUFMt +NS4xLVVud3JhcC1TY2h1dHo6IEAoJHgpIGVyendpbmd0IEFycmF5IGF1Y2ggYmVpIDEgRWxlbWVu +dC4NCiAgICAgICAgICAgICAgICAgICAgJHJlc3BbJ19icmF1Y2h0X21haWx0byddID0gW29yZGVy +ZWRdQHsgdHJpZ2dlciA9ICdyb2xsZV92ZXJhbnR3b3J0dW5nJzsgZGlmZnMgPSBbb2JqZWN0W11d +QCgkZmFBdXN3ZXJ0dW5nLm1haWx0b0RpZmZzKSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgJHJlc3ANCiAgICAgICAgICAgICAg +ICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIERpcmVrdGlvbnNsZWl0 +dW5nICsgRnVlaHJ1bmdzc3RlbGxlIChnbGVpY2hlcyBTY2hlbWEgd2llDQogICAgICAgICAgICAj +IEZhY2hhdWZzaWNodCwgbnVyIHNlcGFyYXRlIExpc3RlbikuIEJlaWRlIFJvdXRlbiB0ZWlsZW4g +ZGllDQogICAgICAgICAgICAjIGdsZWljaGUgTG9naWs6IFNVLW9ubHkgUFVULCBCYWNrdXAsIFNj +aHJlaWJlbiwgRGlmZnMgenUNCiAgICAgICAgICAgICMgSW4tQXBwLUhpbndlaXNlbiB1bXNldHpl +bi4NCiAgICAgICAgICAgIGlmICgoJFBhdGggLWVxICcvYXBpL2FkbWluL2RpcmVrdGlvbnNsZWl0 +dW5nJyAtb3IgJFBhdGggLWVxICcvYXBpL2FkbWluL2Z1ZWhydW5nc3N0ZWxsZScpIC1hbmQgJE1l +dGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBl +clVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gUm9s +bGVuIHZlcndhbHRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGZlbGROYW1l +ID0gaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9kaXJla3Rpb25zbGVpdHVuZycpIHsgJ2RpcmVr +dGlvbnNsZWl0dW5nJyB9IGVsc2UgeyAnZnVlaHJ1bmdzc3RlbGxlJyB9DQogICAgICAgICAgICAg +ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +Ym9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHlPYmogPSAkYm9keSB8IENvbnZlcnRGcm9tLUpz +b24NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSBbb2JqZWN0W11dQCgkYm9keU9iaikNCiAgICAg +ICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0K +ICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAn +YWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29u +T2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l +cSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdh +ZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkYWx0 +ID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJGZlbGROYW1lXSkgeyAkYWx0ID0gW29iamVjdFtdXUAoJGFkbWluLiRmZWxkTmFtZSkg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdKEJhY2t1cC1BZG1pbkpzb24gJGZlbGRO +YW1lKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0 +aWVzWyRmZWxkTmFtZV0pIHsgJGFkbWluLiRmZWxkTmFtZSA9ICRkYXRlbiB9DQogICAgICAgICAg +ICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFt +ZSAkZmVsZE5hbWUgLU5vdGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwgT3V0 +LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlOyBhbHQg +PSAkYWx0IH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2gg +ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVy +OiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0Vy +Z2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgIFdyaXRlLUxvZ0VpbnRyYWcgKCRmZWxkTmFtZSArICcuZ2VhZW5kZXJ0JykgQHsgYW56YWhs +ID0gJGRhdGVuLkNvdW50IH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3Bv +bnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVl +DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgQmV6ZWljaG51bmdlbjogT2JqZWt0IChN +YXAga2V5LT5sYWJlbCkuIExlZXJlcyBPYmpla3QgPSBSZXNldC4NCiAgICAgICAgICAgIGlmICgk +UGF0aCAtZXEgJy9hcGkvYWRtaW4vYmV6ZWljaG51bmdlbicgLWFuZCAkTWV0aG9kIC1lcSAnUFVU +Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVy +cm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAg +ICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlm +ICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0 +MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRG +cm9tLUpzb24NCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAg +ICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tl +LVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFk +bWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMg +PSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2JlemVpY2hudW5nZW4n +XSkgeyAkYWRtaW4uYmV6ZWljaG51bmdlbiA9ICRkYXRlbiB9DQogICAgICAgICAgICAgICAgICAg +ICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnYmV6ZWlj +aG51bmdlbicgLU5vdGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51 +bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlIH0NCiAgICAg +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAg +ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29u +dGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tF +cmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9j +a0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp +bnRyYWcgJ2JlemVpY2hudW5nZW4uZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgU3RhdGlz +dGlrLUJhdWthc3RlbiAoc2VsYnN0Z2ViYXV0ZSBLYWNoZWxuKSArIFN1cGVyVXNlci1MYXlvdXQt +UmFzdGVyLg0KICAgICAgICAgICAgIyBHYXRlIGJld3Vzc3QgU1UgT0RFUiBHZXNhbXR2ZXJhbnR3 +b3J0bGljaCAobmljaHQgVGVzdC1Jc3RBZG1pbikg4oCUIGRlcg0KICAgICAgICAgICAgIyBCdWls +ZGVyIGxlYnQgaW0gU3RhdGlzdGlrLVRhYiB1bmQgbXVzcyBhdWNoIGZ1ZXIgR2VzYW10dmVyYW50 +d29ydGxpY2hlDQogICAgICAgICAgICAjIG9obmUgYWRtaW5pc3RyYXRpb24tWnVnYW5nIHNwZWlj +aGVyYmFyIHNlaW4uIFBhcnRpYWwtTWVyZ2UgbnVyIGRlcg0KICAgICAgICAgICAgIyBiZWlkZW4g +YmVrYW5udGVuIEtleXM7IGJlaWRlIGFscyBbb2JqZWN0W11dIHp3aW5nZW4gKFBTLTUuMS1Vbndy +YXApLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9zdGF0aXN0aWsnIC1h +bmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUN +CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoKFRlc3QtSXN0QWRtaW4pIC1vciAkci5pc3RHZXNh +bXR2ZXJhbnR3b3J0bGljaCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz +cG9uc2UgJ051ciBBZG1pbnMgdW5kIEdlc2FtdHZlcmFudHdvcnRsaWNoZSBkdWVyZmVuIFN0YXRp +c3Rpay1LYWNoZWxuIGFlbmRlcm4nIDQwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9z +cycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252 +ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGhhdEthY2hlbG4gPSAoJG51bGwgLW5lICRk +YXRlbiAtYW5kICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGF0aXN0aWtLYWNoZWxuJ10p +DQogICAgICAgICAgICAgICAgJGhhdExheW91dCAgPSAoJG51bGwgLW5lICRkYXRlbiAtYW5kICRk +YXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGF0aXN0aWtMYXlvdXQnXSkNCiAgICAgICAgICAg +ICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAg +ICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4u +anNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0 +ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRt +aW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5q +c29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGhhdEth +Y2hlbG4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkayA9IFtvYmplY3RbXV1AKCRk +YXRlbi5zdGF0aXN0aWtLYWNoZWxuKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +YWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snc3RhdGlzdGlrS2FjaGVsbiddKSB7ICRhZG1pbi5z +dGF0aXN0aWtLYWNoZWxuID0gJGsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug +eyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdzdGF0aXN0aWtLYWNoZWxu +JyAtTm90ZVByb3BlcnR5VmFsdWUgJGsgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaGF0TGF5b3V0KSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJGwgPSBbb2JqZWN0W11dQCgkZGF0ZW4uc3RhdGlzdGlrTGF5b3V0 +KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVy +dGllc1snc3RhdGlzdGlrTGF5b3V0J10pIHsgJGFkbWluLnN0YXRpc3Rpa0xheW91dCA9ICRsIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAt +Tm90ZVByb3BlcnR5TmFtZSAnc3RhdGlzdGlrTGF5b3V0JyAtTm90ZVByb3BlcnR5VmFsdWUgJGwg +LUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAg +ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAg +U2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQog +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMu +b2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5p +cy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdz +dGF0aXN0aWsuY29uZmlnLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29u +T2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAg +ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFN0YW5kYXJkcmVj +aHRlIChyZWd1bGFlcmUgVXNlcik6IGdlZ2Vuc2VpdGlnZSBQbGFudW5nIGplIERpZW5zdGdydXBw +ZS8NCiAgICAgICAgICAgICMgU3RhbmRvcnQuIFNVLW9ubHkuIFdpcmQgaW4gR2V0LVJlY2h0ZSBh +ZGRpdGl2IGluIGVkaXRpZXJlbiBlaW5nZXdvYmVuLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l +cSAnL2FwaS9hZG1pbi9zdGFuZGFyZHJlY2h0ZScgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0K +ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBTdGFuZGFyZHJlY2h0ZSBhZW5kZXJu +JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVx +dWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk +ZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZ2cgPSBA +KCk7IGlmICgkZGF0ZW4gLWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snZ2VnZW5zZWl0 +aWdHcnVwcGVuJ10pICAgeyAkZ2cgPSBbc3RyaW5nW11dQCgkZGF0ZW4uZ2VnZW5zZWl0aWdHcnVw +cGVuICAgfCBGb3JFYWNoLU9iamVjdCB7IFtzdHJpbmddJF8gfSkgfQ0KICAgICAgICAgICAgICAg +ICRncyA9IEAoKTsgaWYgKCRkYXRlbiAtYW5kICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydn +ZWdlbnNlaXRpZ1N0YW5kb3J0ZSddKSB7ICRncyA9IFtzdHJpbmdbXV1AKCRkYXRlbi5nZWdlbnNl +aXRpZ1N0YW5kb3J0ZSB8IEZvckVhY2gtT2JqZWN0IHsgW3N0cmluZ10kXyB9KSB9DQogICAgICAg +ICAgICAgICAgJHNyID0gQHsgZ2VnZW5zZWl0aWdHcnVwcGVuID0gJGdnOyBnZWdlbnNlaXRpZ1N0 +YW5kb3J0ZSA9ICRncyB9DQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQog +ICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9 +IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsg +c3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGFuZGFy +ZFJlY2h0ZSddKSB7ICRhZG1pbi5zdGFuZGFyZFJlY2h0ZSA9ICRzciB9DQogICAgICAgICAgICAg +ICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAn +c3RhbmRhcmRSZWNodGUnIC1Ob3RlUHJvcGVydHlWYWx1ZSAkc3IgLUZvcmNlIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91 +dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQog +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAg +ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7 +IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRs +b2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cg +JGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1M +b2dFaW50cmFnICdzdGFuZGFyZHJlY2h0ZS5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAg +IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQog +ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBF +LU1haWwtVm9ybGFnZW46IE9iamVrdCAobmljaHQgQXJyYXkpIOKAlCBlaWdlbmVyIEhhbmRsZXIu +DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2VtYWlsdm9ybGFnZW4nIC1h +bmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1J +c3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAz +OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QN +CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn +QW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVu +ID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgIyBSaWNoLVRleHQt +Qm9keSBqZSBWb3JsYWdlIHNlcnZlcnNlaXRpZyBiZXJlaW5pZ2VuIChTdG9yZWQtWFNTKS4NCiAg +ICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRkYXRlbikgew0KICAgICAgICAgICAgICAgICAg +ICBmb3JlYWNoICgkcCBpbiAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgJHYgPSAkcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRudWxsIC1uZSAkdiAtYW5kICR2LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSAtYW5kICgk +di50ZXh0IC1pcyBbc3RyaW5nXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdi50 +ZXh0ID0gQ29udmVydFRvLVNhZmVSaWNoSHRtbCAkdi50ZXh0DQogICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAg +ICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2Fk +bWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9i +amVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg +JGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRt +aW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRh +ZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydlbWFpbFZvcmxhZ2VuJ10pIHsgJGFkbWluLmVtYWls +Vm9ybGFnZW4gPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1p +biB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2VtYWlsVm9ybGFnZW4nIC1Ob3RlUHJv +cGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRl +LUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAg +ICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7 +IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdlbWFpbHZvcmxh +Z2VuLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNw +b25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51 +ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIEUtTWFpbC1UcmlnZ2VyLUtvbmZpZyAo +cHJvIFRyaWdnZXI6IGFrdGl2ICsgRW1wZmFlbmdlci1UYWdzKSDigJQNCiAgICAgICAgICAgICMg +YXVzc2NobGllc3NsaWNoIFN0ZXVlcnVuZyBmdWVyIGRlbiBGcm9udGVuZC1tYWlsdG86LURpc3Bh +dGNoZXIuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2VtYWlsdHJpZ2dl +cicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChU +ZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRl +JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVx +dWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk +ZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkbG9ja0Vy +Z2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAg +ICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29u +Jw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJu +IEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxl +c2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlBy +b3BlcnRpZXNbJ2VtYWlsVHJpZ2dlciddKSB7ICRhZG1pbi5lbWFpbFRyaWdnZXIgPSAkZGF0ZW4g +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5v +dGVQcm9wZXJ0eU5hbWUgJ2VtYWlsVHJpZ2dlcicgLU5vdGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAt +Rm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4u +anNvbicgJGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBA +eyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0g +Y2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2st +RmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAk +bG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAg +ICAgICAgICAgICRhbnogPSBpZiAoJGRhdGVuKSB7ICgkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGll +cyB8IE1lYXN1cmUtT2JqZWN0KS5Db3VudCB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICBX +cml0ZS1Mb2dFaW50cmFnICdlbWFpbHRyaWdnZXIuZ2VhZW5kZXJ0JyBAeyBhbnphaGxfdHJpZ2dl +ciA9ICRhbnogfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg +c3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg +ICAgICAgIH0NCg0KICAgICAgICAgICAgJGFkbWluS2V5cyA9IEB7DQogICAgICAgICAgICAgICAg +Jy9hcGkvYWRtaW4vZmVpZXJ0YWdlJyAgICAgID0gJ2ZlaWVydGFnZScNCiAgICAgICAgICAgICAg +ICAnL2FwaS9hZG1pbi9mZXJpZW4nICAgICAgICAgPSAnZmVyaWVuJw0KICAgICAgICAgICAgICAg +ICcvYXBpL2FkbWluL3NvbmRlcnRlcm1pbmUnICA9ICdzb25kZXJ0ZXJtaW5lJw0KICAgICAgICAg +ICAgICAgICcvYXBpL2FkbWluL3N0YW5kb3J0ZScgICAgICA9ICdzdGFuZG9ydGUnDQogICAgICAg +ICAgICB9DQogICAgICAgICAgICBpZiAoJGFkbWluS2V5cy5Db250YWluc0tleSgkUGF0aCkgLWFu +ZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlz +dEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7 +IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0K +ICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdB +bmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAka2V5ID0g +JGFkbWluS2V5c1skUGF0aF0NCiAgICAgICAgICAgICAgICAjIEAoLi4uKSBlcnp3aW5ndCBBcnJh +eSBhdWNoIGJlaSAxIEVsZW1lbnQgKFBTIDUuMSBlbnRwYWNrdCBzb25zdCkuDQogICAgICAgICAg +ICAgICAgJGJvZHlPYmogPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAg +ICAkZGF0ZW4gPSBbb2JqZWN0W11dQCgkYm9keU9iaikNCiAgICAgICAgICAgICAgICAjIHNvbmRl +cnRlcm1pbmUgdHJhZ2VuIFJpY2gtVGV4dCAodGV4dCkg4oCUIHNlcnZlcnNlaXRpZyBiZXJlaW5p +Z2VuLg0KICAgICAgICAgICAgICAgIGlmICgka2V5IC1lcSAnc29uZGVydGVybWluZScpIHsNCiAg +ICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGUgaW4gJGRhdGVuKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJG51bGwgLW5lICRlIC1hbmQgJGUuUFNPYmplY3QuUHJvcGVydGllc1sn +dGV4dCddIC1hbmQgKCRlLnRleHQgLWlzIFtzdHJpbmddKSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRlLnRleHQgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICRlLnRleHQNCiAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAg +ICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdp +dGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWlu +ID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1 +MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAkd2lwZU1zZyA9IFRlc3QtV2lwZVNjaHV0eiAka2V5ICRkYXRlbiAkYWRtaW4gJFJl +cXVlc3QgJGJvZHlPYmoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkd2lwZU1zZykgeyBy +ZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDQwOTsgbXNnID0gJHdpcGVNc2cgfSB9DQog +ICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0oQmFja3VwLUFkbWluSnNvbiAka2V5KQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRrZXld +KSB7ICRhZG1pbi4ka2V5ID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug +eyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRrZXkgLU5vdGVQcm9wZXJ0 +eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNv +bk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAg +ICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS +ZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVy +cm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgIiRrZXkuZ2VhZW5kZXJ0 +IiBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1 +cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg +ICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2VpbnN0ZWxsdW5nZW4n IC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz dC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScg NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVl c3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRh -dGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGxvY2tFcmdl -Ym5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAg -JGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicN -CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBA -eyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNi -YXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9w -ZXJ0aWVzWydlbWFpbFRyaWdnZXInXSkgeyAkYWRtaW4uZW1haWxUcmlnZ2VyID0gJGRhdGVuIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3Rl -UHJvcGVydHlOYW1lICdlbWFpbFRyaWdnZXInIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZv -cmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpz -b24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsg -b2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNh -dGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZl -aGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxv -Y2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAkYW56ID0gaWYgKCRkYXRlbikgeyAoJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMg -fCBNZWFzdXJlLU9iamVjdCkuQ291bnQgfSBlbHNlIHsgMCB9DQogICAgICAgICAgICAgICAgV3Jp -dGUtTG9nRWludHJhZyAnZW1haWx0cmlnZ2VyLmdlYWVuZGVydCcgQHsgYW56YWhsX3RyaWdnZXIg -PSAkYW56IH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 -YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQoNCiAgICAgICAgICAgICRhZG1pbktleXMgPSBAew0KICAgICAgICAgICAgICAgICcv -YXBpL2FkbWluL2ZlaWVydGFnZScgICAgICA9ICdmZWllcnRhZ2UnDQogICAgICAgICAgICAgICAg -Jy9hcGkvYWRtaW4vZmVyaWVuJyAgICAgICAgID0gJ2ZlcmllbicNCiAgICAgICAgICAgICAgICAn -L2FwaS9hZG1pbi9zb25kZXJ0ZXJtaW5lJyAgPSAnc29uZGVydGVybWluZScNCiAgICAgICAgICAg -ICAgICAnL2FwaS9hZG1pbi9zdGFuZG9ydGUnICAgICAgPSAnc3RhbmRvcnRlJw0KICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgaWYgKCRhZG1pbktleXMuQ29udGFpbnNLZXkoJFBhdGgpIC1hbmQg -JE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RB -ZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5m -cmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGtleSA9ICRh -ZG1pbktleXNbJFBhdGhdDQogICAgICAgICAgICAgICAgIyBAKC4uLikgZXJ6d2luZ3QgQXJyYXkg -YXVjaCBiZWkgMSBFbGVtZW50IChQUyA1LjEgZW50cGFja3Qgc29uc3QpLg0KICAgICAgICAgICAg -ICAgICRib2R5T2JqID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAg -JGRhdGVuID0gW29iamVjdFtdXUAoJGJvZHlPYmopDQogICAgICAgICAgICAgICAgIyBzb25kZXJ0 -ZXJtaW5lIHRyYWdlbiBSaWNoLVRleHQgKHRleHQpIOKAlCBzZXJ2ZXJzZWl0aWcgYmVyZWluaWdl -bi4NCiAgICAgICAgICAgICAgICBpZiAoJGtleSAtZXEgJ3NvbmRlcnRlcm1pbmUnKSB7DQogICAg -ICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlIGluICRkYXRlbikgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRudWxsIC1uZSAkZSAtYW5kICRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Rl -eHQnXSAtYW5kICgkZS50ZXh0IC1pcyBbc3RyaW5nXSkpIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkZS50ZXh0ID0gQ29udmVydFRvLVNhZmVSaWNoSHRtbCAkZS50ZXh0DQogICAgICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAg -ICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRo -RmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9 -IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAw -OyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgJHdpcGVNc2cgPSBUZXN0LVdpcGVTY2h1dHogJGtleSAkZGF0ZW4gJGFkbWluICRSZXF1 -ZXN0ICRib2R5T2JqDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHdpcGVNc2cpIHsgcmV0 -dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA0MDk7IG1zZyA9ICR3aXBlTXNnIH0gfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdKEJhY2t1cC1BZG1pbkpzb24gJGtleSkNCiAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1ska2V5XSkg -eyAkYWRtaW4uJGtleSA9ICRkYXRlbiB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsg -JGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAka2V5IC1Ob3RlUHJvcGVydHlW -YWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25P -YmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAg -ICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz -cG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICIka2V5LmdlYWVuZGVydCIg -QHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg -PSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9laW5zdGVsbHVuZ2VuJyAt -YW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3Qt -SXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQw -MzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -J0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRkYXRl -biA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICMgUmljaC1UZXh0 -IHNlcnZlcnNlaXRpZyBzYW5pdGlzaWVyZW4g4oCUIGRpZXNlciBQZmFkIHNwZWljaGVydA0KICAg -ICAgICAgICAgICAgICMgaW5mb3RleHQvaGlsZmV0ZXh0L2JlZGllbnVuZ3N0ZXh0ZS9pbXByZXNz -dW0vc3VwcG9ydGluZm8vDQogICAgICAgICAgICAgICAgIyBzY2hsaWVzc2luZm8sIHdhciBhYmVy -IGJpc2hlciBhbSBTZXJ2ZXItU2FuaXRpemVyIHZvcmJlaSAoZGVyDQogICAgICAgICAgICAgICAg -IyBudXIgYW0gVm9sbC1QVVQgL2FwaS9hZG1pbiBoaW5nKS4gU2NodXR6IGdlZ2VuIG1hbmlwdWxp -ZXJ0ZW4NCiAgICAgICAgICAgICAgICAjIENsaWVudCAvIERpcmVrdC1BUEktQ2FsbC4NCiAgICAg -ICAgICAgICAgICBJbnZva2UtQWRtaW5SaWNodGV4dFNhbml0aXplICRkYXRlbg0KICAgICAgICAg -ICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAg -ICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1p -bi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmpl -Y3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRh -ZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWlu -Lmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2gg -KCRrIGluICdqYWhyJywnaW5mb3RleHQnLCdzdXBwb3J0aW5mbycsJ3NjaGxpZXNzaW5mbycsJ2hp -bGZldGV4dCcsJ2JlZGllbnVuZ3N0ZXh0ZScsJ3BhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nJywn -ZW1haWxBdXRvRG9tYWluJywnYXZhdGFyR3JvZXNzZScsJ2ltcHJlc3N1bScsJ3N1cHBvcnRNYWls -VGV4dCcsJ2VkaXRvclRyaWdnZXInKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KCRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRrXSkgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJGtdKSB7ICRhZG1pbi4k -ayA9ICRkYXRlbi4kayB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAk -YWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRrIC1Ob3RlUHJvcGVydHlWYWx1 -ZSAkZGF0ZW4uJGsgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIGVkaXRvclRy -aWdnZXIgaXN0IGVpbiBFbnVtIOKAlCBmcmVtZGUgV2VydGUgKERpcmVrdC1BUEkpIGF1Zg0KICAg -ICAgICAgICAgICAgICAgICAgICAgIyBkZW4gRGVmYXVsdCBrbGVtbWVuLCBkYW1pdCBuaWUgTXVl -bGwgaW4gYWRtaW4uanNvbiBsYW5kZXQuDQogICAgICAgICAgICAgICAgICAgICAgICAkZXRWYWwg -PSBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VkaXRvclRyaWdnZXInXSkgeyBbc3Ry -aW5nXSRhZG1pbi5lZGl0b3JUcmlnZ2VyIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmIChAKCdyZWNodHMnLCdsaW5rcycsJ21pdHRlJywnZG9wcGVsJykgLW5vdGNvbnRh -aW5zICRldFZhbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNP -YmplY3QuUHJvcGVydGllc1snZWRpdG9yVHJpZ2dlciddKSB7ICRhZG1pbi5lZGl0b3JUcmlnZ2Vy -ID0gJ3JlY2h0cycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4g -fCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdlZGl0b3JUcmlnZ2VyJyAtTm90ZVByb3Bl -cnR5VmFsdWUgJ3JlY2h0cycgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1p -biB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1 -ZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAg -ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8i -KSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgt -bm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5p -cy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBX -cml0ZS1Mb2dFaW50cmFnICdlaW5zdGVsbHVuZ2VuLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAg -ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQn -IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAg -ICAjID09PT09IFBMQU5VTkcgPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -cGxhbnVuZycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgICR0eHQg -PSBSZWFkLVRleHRGaWxlICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxs -IC1lcSAkdHh0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdwbGFudW5nLmpzb24gbmljaHQgZ2Vm -dW5kZW4nIDQwNCB9DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAg -ICMgVmVyc2lvbnMtU3RlbXBlbCAobXRpbWUtVGlja3MpIGZ1ZXIgb3B0aW1pc3Rpc2NoZSBTcGVy -cmUgZGVzDQogICAgICAgICAgICAgICAgICAgICMgRXhjZWwtSW1wb3J0cy4gRGVyIENsaWVudCBz -Y2hpY2t0IGlobiBiZWltIFBVVCB6dXJ1ZWNrLg0KICAgICAgICAgICAgICAgICAgICB0cnkgew0K +dGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgIyBSaWNoLVRl +eHQgc2VydmVyc2VpdGlnIHNhbml0aXNpZXJlbiDigJQgZGllc2VyIFBmYWQgc3BlaWNoZXJ0DQog +ICAgICAgICAgICAgICAgIyBpbmZvdGV4dC9oaWxmZXRleHQvYmVkaWVudW5nc3RleHRlL2ltcHJl +c3N1bS9zdXBwb3J0aW5mby8NCiAgICAgICAgICAgICAgICAjIHNjaGxpZXNzaW5mbywgd2FyIGFi +ZXIgYmlzaGVyIGFtIFNlcnZlci1TYW5pdGl6ZXIgdm9yYmVpIChkZXINCiAgICAgICAgICAgICAg +ICAjIG51ciBhbSBWb2xsLVBVVCAvYXBpL2FkbWluIGhpbmcpLiBTY2h1dHogZ2VnZW4gbWFuaXB1 +bGllcnRlbg0KICAgICAgICAgICAgICAgICMgQ2xpZW50IC8gRGlyZWt0LUFQSS1DYWxsLg0KICAg +ICAgICAgICAgICAgIEludm9rZS1BZG1pblJpY2h0ZXh0U2FuaXRpemUgJGRhdGVuDQogICAgICAg +ICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAg +ICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2Fk +bWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9i +amVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg +JGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRt +aW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFj +aCAoJGsgaW4gJ2phaHInLCdpbmZvdGV4dCcsJ3N1cHBvcnRpbmZvJywnc2NobGllc3NpbmZvJywn +aGlsZmV0ZXh0JywnYmVkaWVudW5nc3RleHRlJywncGFwaWVya29yYlRhZ2VBdWZiZXdhaHJ1bmcn +LCdlbWFpbEF1dG9Eb21haW4nLCdhdmF0YXJHcm9lc3NlJywnaW1wcmVzc3VtJywnc3VwcG9ydE1h +aWxUZXh0JywnZWRpdG9yVHJpZ2dlcicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJGtdKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1ska10pIHsgJGFkbWlu +LiRrID0gJGRhdGVuLiRrIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7 +ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGsgLU5vdGVQcm9wZXJ0eVZh +bHVlICRkYXRlbi4kayAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgZWRpdG9y +VHJpZ2dlciBpc3QgZWluIEVudW0g4oCUIGZyZW1kZSBXZXJ0ZSAoRGlyZWt0LUFQSSkgYXVmDQog +ICAgICAgICAgICAgICAgICAgICAgICAjIGRlbiBEZWZhdWx0IGtsZW1tZW4sIGRhbWl0IG5pZSBN +dWVsbCBpbiBhZG1pbi5qc29uIGxhbmRldC4NCiAgICAgICAgICAgICAgICAgICAgICAgICRldFZh +bCA9IGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZWRpdG9yVHJpZ2dlciddKSB7IFtz +dHJpbmddJGFkbWluLmVkaXRvclRyaWdnZXIgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKEAoJ3JlY2h0cycsJ2xpbmtzJywnbWl0dGUnLCdkb3BwZWwnKSAtbm90Y29u +dGFpbnMgJGV0VmFsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydlZGl0b3JUcmlnZ2VyJ10pIHsgJGFkbWluLmVkaXRvclRyaWdn +ZXIgPSAncmVjaHRzJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1p +biB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2VkaXRvclRyaWdnZXInIC1Ob3RlUHJv +cGVydHlWYWx1ZSAncmVjaHRzJyAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFk +bWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0 +cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0K +ICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAk +XyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYg +KC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2Vi +bmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +IFdyaXRlLUxvZ0VpbnRyYWcgJ2VpbnN0ZWxsdW5nZW4uZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAg +ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVy +dCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAg +ICAgICMgPT09PT0gUExBTlVORyA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw +aS9wbGFudW5nJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJHR4 +dCA9IFJlYWQtVGV4dEZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51 +bGwgLWVxICR0eHQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ3BsYW51bmcuanNvbiBuaWNodCBn +ZWZ1bmRlbicgNDA0IH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAg +ICAgIyBWZXJzaW9ucy1TdGVtcGVsIChtdGltZS1UaWNrcykgZnVlciBvcHRpbWlzdGlzY2hlIFNw +ZXJyZSBkZXMNCiAgICAgICAgICAgICAgICAgICAgIyBFeGNlbC1JbXBvcnRzLiBEZXIgQ2xpZW50 +IHNjaGlja3QgaWhuIGJlaW0gUFVUIHp1cnVlY2suDQogICAgICAgICAgICAgICAgICAgIHRyeSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAkcHBWID0gSm9pbi1QYXRoICREYXRhRGlyICdwbGFu +dW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFs +UGF0aCAkcHBWKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFJlc3BvbnNlLkhlYWRl +cnMuQWRkKCdYLVBsYW51bmctVmVyc2lvbicsIFtzdHJpbmddKEdldC1JdGVtIC1MaXRlcmFsUGF0 +aCAkcHBWKS5MYXN0V3JpdGVUaW1lVXRjLlRpY2tzKQ0KICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAgICAgIFNl +bmQtSnNvblRleHQgJFJlc3BvbnNlICR0eHQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg +Jy9hcGkvcGxhbnVuZycgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAg +IGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUg +QWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJl +YWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAg +ICAgICAgICAgICAjIFJlYWQtTW9kaWZ5LVdyaXRlIGF0b21hciBpbiBkZXIgZ2xlaWNoZW4gU3Bl +cnJlIHdpZSBkaWUgRWluemVsLQ0KICAgICAgICAgICAgICAgICMgemVsbC1FbmRwb2ludHMsIGRh +bWl0IGRlciBWb2xsLUltcG9ydCBuaWNodCBtaXQgcGFyYWxsZWxlbg0KICAgICAgICAgICAgICAg +ICMgWmVsbC1TY2hyZWlidm9yZ2FlbmdlbiB2ZXJ6YWhudC4gT3B0aW9uYWxlciBWZXJzaW9ucy1D +aGVjaw0KICAgICAgICAgICAgICAgICMgKG9wdGltaXN0aXNjaGUgTmViZW5sYWV1Zmlna2VpdCk6 +IGhhdCBkZXIgQ2xpZW50IGVpbmVuDQogICAgICAgICAgICAgICAgIyBJZi1QbGFudW5nLVZlcnNp +b24tSGVhZGVyIGdlc2NoaWNrdCB1bmQgc3RpbW10IGRlciBuaWNodCBtZWhyDQogICAgICAgICAg +ICAgICAgIyBtaXQgZGVtIGFrdHVlbGxlbiBTdGFuZCB1ZWJlcmVpbiwgd3VyZGUgendpc2NoZW56 +ZWl0bGljaA0KICAgICAgICAgICAgICAgICMgZ2VzY2hyaWViZW4gLT4gNDA5LCBOSUNIVFMgd2ly +ZCB1ZWJlcnNjaHJpZWJlbi4NCiAgICAgICAgICAgICAgICAkZXJ3YXJ0ZXRlVmVyc2lvbiA9ICRS +ZXF1ZXN0LkhlYWRlcnNbJ0lmLVBsYW51bmctVmVyc2lvbiddDQogICAgICAgICAgICAgICAgJGxv +Y2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAg +ICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlcndhcnRldGVWZXJzaW9uKSB7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgJHBwViA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVu -Zy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBh -dGggJHBwVikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5IZWFkZXJz -LkFkZCgnWC1QbGFudW5nLVZlcnNpb24nLCBbc3RyaW5nXShHZXQtSXRlbSAtTGl0ZXJhbFBhdGgg -JHBwVikuTGFzdFdyaXRlVGltZVV0Yy5UaWNrcykNCiAgICAgICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgICAgICBTZW5k -LUpzb25UZXh0ICRSZXNwb25zZSAkdHh0DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcv -YXBpL3BsYW51bmcnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFk -bWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFk -LUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVy -cm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgIyBSZWFkLU1vZGlmeS1Xcml0ZSBhdG9tYXIgaW4gZGVyIGdsZWljaGVuIFNwZXJy -ZSB3aWUgZGllIEVpbnplbC0NCiAgICAgICAgICAgICAgICAjIHplbGwtRW5kcG9pbnRzLCBkYW1p -dCBkZXIgVm9sbC1JbXBvcnQgbmljaHQgbWl0IHBhcmFsbGVsZW4NCiAgICAgICAgICAgICAgICAj -IFplbGwtU2NocmVpYnZvcmdhZW5nZW4gdmVyemFobnQuIE9wdGlvbmFsZXIgVmVyc2lvbnMtQ2hl -Y2sNCiAgICAgICAgICAgICAgICAjIChvcHRpbWlzdGlzY2hlIE5lYmVubGFldWZpZ2tlaXQpOiBo -YXQgZGVyIENsaWVudCBlaW5lbg0KICAgICAgICAgICAgICAgICMgSWYtUGxhbnVuZy1WZXJzaW9u -LUhlYWRlciBnZXNjaGlja3QgdW5kIHN0aW1tdCBkZXIgbmljaHQgbWVocg0KICAgICAgICAgICAg -ICAgICMgbWl0IGRlbSBha3R1ZWxsZW4gU3RhbmQgdWViZXJlaW4sIHd1cmRlIHp3aXNjaGVuemVp -dGxpY2gNCiAgICAgICAgICAgICAgICAjIGdlc2NocmllYmVuIC0+IDQwOSwgTklDSFRTIHdpcmQg -dWViZXJzY2hyaWViZW4uDQogICAgICAgICAgICAgICAgJGVyd2FydGV0ZVZlcnNpb24gPSAkUmVx -dWVzdC5IZWFkZXJzWydJZi1QbGFudW5nLVZlcnNpb24nXQ0KICAgICAgICAgICAgICAgICRsb2Nr -RXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAg -ICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZXJ3YXJ0ZXRlVmVyc2lvbikgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICRwcFYgPSBKb2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcu -anNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWt0dWVsbGVWZXJzaW9uID0gJycN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAk -cHBWKSB7ICRha3R1ZWxsZVZlcnNpb24gPSBbc3RyaW5nXShHZXQtSXRlbSAtTGl0ZXJhbFBhdGgg -JHBwVikuTGFzdFdyaXRlVGltZVV0Yy5UaWNrcyB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKCRha3R1ZWxsZVZlcnNpb24gLW5lICRlcndhcnRldGVWZXJzaW9uKSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAna29uZmxpa3QnOyBha3R1 -ZWxsID0gJGFrdHVlbGxlVmVyc2lvbiB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUt -VGV4dEZpbGUgJ3BsYW51bmcuanNvbicgJGJvZHkgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAg -ICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdvaycgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJGxvY2tFcmdlYm5pcy50eXAgLWVxICdrb25mbGlr -dCcpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0K -ICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgICAgICAgID0gJ2tvbmZsaWt0Jw0KICAg -ICAgICAgICAgICAgICAgICAgICAgbWVsZHVuZyAgICAgICAgID0gJ0RpZSBQbGFudW5nIHd1cmRl -IHp3aXNjaGVuemVpdGxpY2ggdm9uIGVpbmVyIGFuZGVyZW4gUGVyc29uIGdlYWVuZGVydC4nDQog -ICAgICAgICAgICAgICAgICAgICAgICBha3R1ZWxsZVZlcnNpb24gPSAkbG9ja0VyZ2VibmlzLmFr -dHVlbGwNCiAgICAgICAgICAgICAgICAgICAgfSA0MDkNCiAgICAgICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 -ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBj -b250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9w -bGFudW5nL3plbGxlJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAg -ICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJv -ZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAg -ICAgICAgICAgICAgJGRhdHVtID0gJGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQg -PSBbc3RyaW5nXSRhLnBlcnNvbklkDQogICAgICAgICAgICAgICAgJHdlcnQgPSBpZiAoJGEuUFNP -YmplY3QuUHJvcGVydGllc1snd2VydCddKSB7ICRhLndlcnQgfSBlbHNlIHsgJycgfQ0KICAgICAg -ICAgICAgICAgICMgT3B0aW1pc3RpYy1Db25jdXJyZW5jeTogV2VubiBkZXIgQ2xpZW50IHNlaW5l -biB6dWxldHp0IGdlc2VoZW5lbg0KICAgICAgICAgICAgICAgICMgV2VydCBtaXRsaWVmZXJ0LCBw -cnVlZmVuIHdpciB2b3IgZGVtIFNjaHJlaWJlbiBvYiBkZXIgU2VydmVyDQogICAgICAgICAgICAg -ICAgIyBub2NoIGRlbnNlbGJlbiBTdGFuZCBoYXQuIE1pc21hdGNoIC0+IDQwOSBtaXQgYWt0dWVs -bGVyV2VydC4NCiAgICAgICAgICAgICAgICAkaGF0RXJ3YXJ0ZXQgPSAkYS5QU09iamVjdC5Qcm9w -ZXJ0aWVzWydlcndhcnRldGVyQWx0ZXJXZXJ0J10NCiAgICAgICAgICAgICAgICAkZXJ3YXJ0ZXQg -PSBpZiAoJGhhdEVyd2FydGV0KSB7IFtzdHJpbmddJGEuZXJ3YXJ0ZXRlckFsdGVyV2VydCB9IGVs -c2UgeyAkbnVsbCB9DQoNCiAgICAgICAgICAgICAgICAjIEVkaXQtUmVjaHQgZ2VnZW4gYWt0dWVs -bGVuIFN0YW5kIHBydWVmZW4gKG5vY2ggb2huZSBMb2NrIOKAlCBudXIgTG9va3VwKQ0KICAgICAg -ICAgICAgICAgICRwbGFudW5nQ2hlY2sgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicN -CiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRwbGFudW5nQ2hlY2spIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJHppZWxQZXJzb24gPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlm -ICgkcGxhbnVuZ0NoZWNrLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2gg -KCRwcCBpbiBAKCRwbGFudW5nQ2hlY2sucGVyc29uZW4pKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoW3N0cmluZ10kcHAuaWQgLWVxICRwZXJzb25JZCkgeyAkemllbFBlcnNvbiA9ICRw -cDsgYnJlYWsgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZaZWxsZUVkaXRpZXJlbiAkemllbFBlcnNv -bikpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJl -cmVjaHRpZ3VuZyBmdWVyIGRpZXNlIFplbGxlJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAg -ICAgfQ0KDQogICAgICAgICAgICAgICAgIyBSZWFkLU1vZGlmeS1Xcml0ZSBhdG9tYXIgaW4gTG9j -azoNCiAgICAgICAgICAgICAgICAkY2xpZW50UXVpdHRpZXJ0ID0gKCRhLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ3VudGVyYmVzZXR6dW5nU2NoaWNodCddIC1hbmQgJGEudW50ZXJiZXNldHp1bmdTY2hp -Y2h0KQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAg -ICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0 -aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFu -dW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoJG51bGwgLWVxICRwbGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBj -b2RlID0gNDA0OyBtc2cgPSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNb -J2VpbnRyYWVnZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgfCBB -ZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdlaW50cmFlZ2UnIC1Ob3RlUHJvcGVydHlWYWx1 -ZSAoTmV3LU9iamVjdCBQU09iamVjdCkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVuZy5laW50cmFlZ2UuUFNP -YmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -JHBsYW51bmcuZWludHJhZWdlIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkZGF0dW0g -LU5vdGVQcm9wZXJ0eVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRhbHRlciA9ICcnDQog -ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09i -amVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsgJGFsdGVyID0gW3N0cmluZ10kcGxhbnVuZy5l -aW50cmFlZ2UuJGRhdHVtLiRwZXJzb25JZCB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICMg -T3B0aW1pc3RpYy1Db25jdXJyZW5jeS1DaGVjaw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KCRoYXRFcndhcnRldCAtYW5kICRlcndhcnRldCAtbmUgJGFsdGVyKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdrb25mbGlrdCc7IGFrdHVlbGwgPSAkYWx0 -ZXIgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAg -ICAjIEZ1ZWhydW5ncy1VbnRlcmJlc2V0enVuZyAoVmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXIpIC0g -Z2xlaWNoZXMgUHJpbnppcCB3aWUgdm9yaGVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBq -ZXR6dCBhYmVyIGdlZ2VuIGRlbiBnZWxvY2t0ZW4gU3RhbmQuDQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAkY2xpZW50UXVpdHRpZXJ0IC1hbmQgKFRlc3QtSW5WZXJiaW5kbGljaGtl -aXQgJGRhdHVtKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbHRlU2NoaWNodCA9 -IEdldC1GdWVocnVuZ3NTY2hpY2h0TGV0dGVyICRhbHRlcg0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRuZXVlU2NoaWNodCA9IEdldC1GdWVocnVuZ3NTY2hpY2h0TGV0dGVyICR3ZXJ0DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhbHRlU2NoaWNodCAtYW5kICRhbHRlU2No -aWNodCAtbmUgJG5ldWVTY2hpY2h0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICRha3R1ZWxsQ291bnQgPSBHZXQtRnVlaHJ1bmdzQ291bnQgJHBsYW51bmcgJGRhdHVtICRhbHRl -U2NoaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCRha3R1ZWxsQ291 -bnQgLSAxKSAtbHQgMikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 -dXJuIEB7IHR5cCA9ICd1bnRlcmJlc2V0enVuZyc7IHNjaGljaHQgPSAkYWx0ZVNjaGljaHQ7IGFr -dHVlbGxDb3VudCA9ICRha3R1ZWxsQ291bnQ7IGFsdGVyID0gJGFsdGVyIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1u -b3QgJHdlcnQgLW9yIFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJHdlcnQpKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNP -YmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1v -dmUoJHBlcnNvbklkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRw -bGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7 -ICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uJHBlcnNvbklkID0gJHdlcnQgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtIHwgQWRk -LU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGVyc29uSWQgLU5vdGVQcm9wZXJ0eVZhbHVlICR3 -ZXJ0IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -ICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51 -bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAnb2snOyBhbHRlciA9 -ICRhbHRlciB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNo -IHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxl -cjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg -ICAgaWYgKCRsb2NrRXJnZWJuaXMudHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuY29kZTsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgIGlmICgkbG9ja0VyZ2VibmlzLnR5cCAtZXEgJ2tvbmZsaWt0Jykgew0KICAg -ICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAg -ICAgICAgICAgICAgICBmZWhsZXIgICAgICAgID0gJ2tvbmZsaWt0Jw0KICAgICAgICAgICAgICAg -ICAgICAgICAgbWVsZHVuZyAgICAgICA9ICdEaWVzZSBaZWxsZSB3dXJkZSBpbnp3aXNjaGVuIGdl -YWVuZGVydC4nDQogICAgICAgICAgICAgICAgICAgICAgICBha3R1ZWxsZXJXZXJ0ID0gJGxvY2tF -cmdlYm5pcy5ha3R1ZWxsDQogICAgICAgICAgICAgICAgICAgIH0gNDA5DQogICAgICAgICAgICAg -ICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgk -bG9ja0VyZ2VibmlzLnR5cCAtZXEgJ3VudGVyYmVzZXR6dW5nJykgew0KICAgICAgICAgICAgICAg -ICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAg -ICBmZWhsZXIgICAgICAgICA9ICdGdWVocnVuZ3MtVW50ZXJiZXNldHp1bmcnDQogICAgICAgICAg -ICAgICAgICAgICAgICBrb25mbGlrdFR5cCAgICA9ICd1bnRlcmJlc2V0enVuZycNCiAgICAgICAg -ICAgICAgICAgICAgICAgIHNjaGljaHQgICAgICAgID0gJGxvY2tFcmdlYm5pcy5zY2hpY2h0DQog -ICAgICAgICAgICAgICAgICAgICAgICBha3R1ZWxsQ291bnQgICA9ICRsb2NrRXJnZWJuaXMuYWt0 -dWVsbENvdW50DQogICAgICAgICAgICAgICAgICAgICAgICBhbHRlcldlcnQgICAgICA9ICRsb2Nr -RXJnZWJuaXMuYWx0ZXINCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldWVyV2VydCAgICAgID0g -JHdlcnQNCiAgICAgICAgICAgICAgICAgICAgfSA0MDkNCiAgICAgICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAkYWx0ZXIgPSAkbG9j -a0VyZ2VibmlzLmFsdGVyDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnemVsbGUu -Z2VhZW5kZXJ0JyBAeyBkYXR1bSA9ICRkYXR1bTsgcGVyc29uSWQgPSAkcGVyc29uSWQ7IGFsdGVy -V2VydCA9ICIkYWx0ZXIiOyBuZXVlcldlcnQgPSAiJHdlcnQiIH0NCiAgICAgICAgICAgICAgICAj -IExpdmUtU3luYzogQ2hhbmdlLUxvZyBmdWVyIGRlbiBzeW5jLXdvcmtlci4NCiAgICAgICAgICAg -ICAgICBBZGQtQ2hhbmdlTG9nRWludHJhZyAnemVsbGUnIEB7DQogICAgICAgICAgICAgICAgICAg -IGRhdHVtICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJHBlcnNv -bklkDQogICAgICAgICAgICAgICAgICAgIGFsdCAgICAgID0gIiRhbHRlciINCiAgICAgICAgICAg -ICAgICAgICAgbmV1ICAgICAgPSAiJHdlcnQiDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAg -ICAgICAgICAgIyBVbnRlcmJlc2V0enVuZ3MtUXVpdHR1bmc6IGV4dHJhIExvZ2J1Y2gtRWludHJh -ZywgZGVuIEZhY2hhdWZzaWNodC9XTCBzZWhlbiBzb2xsDQogICAgICAgICAgICAgICAgaWYgKCRh -LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3VudGVyYmVzZXR6dW5nU2NoaWNodCddIC1hbmQgJGEudW50 -ZXJiZXNldHp1bmdTY2hpY2h0KSB7DQogICAgICAgICAgICAgICAgICAgICRzY2hpY2h0TGV0dGVy -ID0gW3N0cmluZ10kYS51bnRlcmJlc2V0enVuZ1NjaGljaHQNCiAgICAgICAgICAgICAgICAgICAg -JHNjaGljaHRUZXh0ID0gc3dpdGNoICgkc2NoaWNodExldHRlcikgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgJ0YnIHsgJ0ZydWVoc2NoaWNodCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -J1MnIHsgJ1NwYWV0c2NoaWNodCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJ04nIHsgJ05h -Y2h0c2NoaWNodCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCB7ICRzY2hpY2h0 -TGV0dGVyIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkb2VU -eHQgPSAnJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHppZWxQZXJzb24gLWFuZCAkemllbFBl -cnNvbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydvZSddKSB7ICRvZVR4dCA9IFtzdHJpbmddJHppZWxQ -ZXJzb24ub2UgfQ0KICAgICAgICAgICAgICAgICAgICAkbmFtZVR4dCA9ICcnDQogICAgICAgICAg -ICAgICAgICAgIGlmICgkemllbFBlcnNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHZu -ID0gJyc7IGlmICgkemllbFBlcnNvbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsg -JHZuID0gW3N0cmluZ10kemllbFBlcnNvbi52b3JuYW1lIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgICRuYW1lVHh0ID0gKCIkdm4gJCgkemllbFBlcnNvbi5uYW1lKSIpLlRyaW0oKQ0KICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3Vu -dGVyYmVzZXR6dW5nLnF1aXR0aWVydCcgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdHVt -ICAgICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgID0gJHBlcnNv -bklkDQogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb24gICAgPSAkbmFtZVR4dA0KICAgICAg -ICAgICAgICAgICAgICAgICAgb2UgICAgICAgID0gJG9lVHh0DQogICAgICAgICAgICAgICAgICAg -ICAgICBzY2hpY2h0ICAgPSAkc2NoaWNodFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgIGFs -dGVyV2VydCA9ICIkYWx0ZXIiDQogICAgICAgICAgICAgICAgICAgICAgICBuZXVlcldlcnQgPSAi -JHdlcnQiDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgIyBQaGFzZSBELjMgKDIwMjYtMDUtMjEpOiB3ZW5uIGRpZSBLcmFua21lbGR1bmcg -enVydWVja2dlbm9tbWVuDQogICAgICAgICAgICAgICAgIyB3aXJkIChhbHRlciBXZXJ0IHdhciBr -ci9LdXIsIG5ldWVyIFdlcnQgaXN0IGVzIG5pY2h0IG1laHIpLA0KICAgICAgICAgICAgICAgICMg -ZW50ZmVybmVuIHdpciBkZW4gb2ZmZW5lbiBIaW53ZWlzIOKAlCBzb25zdCBpc3QgZXIgYmlzIHp1 -DQogICAgICAgICAgICAgICAgIyAzMCBUYWdlIHByYWVzZW50LCBvYndvaGwgZGFzIEVyZWlnbmlz -IGVybGVkaWd0IGlzdC4NCiAgICAgICAgICAgICAgICBpZiAoKCRhbHRlciAtZXEgJ2tyJyAtb3Ig -JGFsdGVyIC1lcSAnS3VyJykgLWFuZCAoJHdlcnQgLW5lICdrcicgLWFuZCAkd2VydCAtbmUgJ0t1 -cicpKSB7DQogICAgICAgICAgICAgICAgICAgIFJlbW92ZS1PZmZlbmVLcmFua21lbGR1bmdzSGlu -d2Vpc2UgJHBlcnNvbklkICRkYXR1bQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAjIEhpbndlaXMtVHJpZ2dlcjogS3JhbmttZWxkdW5nIGVyemV1Z3QgZWluZW4gSW4tQXBwLUhp -bndlaXMNCiAgICAgICAgICAgICAgICAjIGZ1ZXIgU1UgKyBHZXNhbXR2ZXJhbnR3b3J0bGljaGUg -KFNjaGljaHRsb2NoIGltIE1vZGFsIGRpcmVrdA0KICAgICAgICAgICAgICAgICMgYWRyZXNzaWVy -YmFyIHZpYSAiS2FuZGlkYXRlbiBhbnNjaHJlaWJlbiItQnV0dG9uKS4NCiAgICAgICAgICAgICAg -ICBpZiAoJHdlcnQgLWVxICdrcicgLW9yICR3ZXJ0IC1lcSAnS3VyJykgew0KICAgICAgICAgICAg -ICAgICAgICAka21OYW1lID0gJycNCiAgICAgICAgICAgICAgICAgICAgaWYgKCR6aWVsUGVyc29u -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAka3ZuID0gJyc7IGlmICgkemllbFBlcnNvbi5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsgJGt2biA9IFtzdHJpbmddJHppZWxQZXJz -b24udm9ybmFtZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAka21OYW1lID0gKCIka3ZuICQo -JHppZWxQZXJzb24ubmFtZSkiKS5UcmltKCkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAka21HcnVwcGUgPSAnJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHpp -ZWxQZXJzb24gLWFuZCAkemllbFBlcnNvbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydncnVwcGUnXSkg -eyAka21HcnVwcGUgPSBbc3RyaW5nXSR6aWVsUGVyc29uLmdydXBwZSB9DQogICAgICAgICAgICAg -ICAgICAgICRrbVNjaGljaHRMZXR0ZXIgPSAnJw0KICAgICAgICAgICAgICAgICAgICBpZiAoIiRh -bHRlciIgLW1hdGNoICdeKFtGU05dKS0nKSB7ICRrbVNjaGljaHRMZXR0ZXIgPSAkTWF0Y2hlc1sx -XSB9DQogICAgICAgICAgICAgICAgICAgIE5ldy1IaW53ZWlzICdrcmFua21lbGR1bmcnIChbb3Jk -ZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uX2lkICAgID0gJHBlcnNvbklk -DQogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25fbmFtZSAgPSAka21OYW1lDQogICAgICAg -ICAgICAgICAgICAgICAgICBncnVwcGUgICAgICAgPSAka21HcnVwcGUNCiAgICAgICAgICAgICAg -ICAgICAgICAgIGRhdHVtICAgICAgICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICAgICAg -c2NoaWNodENvZGUgID0gIiRhbHRlciINCiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGljaHRL -dXJ6ICA9ICRrbVNjaGljaHRMZXR0ZXINCiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgICAg -ICAgICA9ICIkd2VydCINCiAgICAgICAgICAgICAgICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51 -dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCc7IGFsdGVyV2Vy -dCA9ICRhbHRlciB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICMgQnVsay1TY2hyZWliZW4gbWVocmVyZXIgWmVsbGVuIGluIGVpbmVtIFNjaHJp -dHQg4oCUIGF1ZmdlcnVmZW4NCiAgICAgICAgICAgICMgdm9tIEV4Y2VsLUZ1ZWxsLUdyaWZmLiBT -cGFydCBwcm8gRHJhZyBiaXMgenUgMTAwKyBIVFRQLVJvdW5kdHJpcHMNCiAgICAgICAgICAgICMg -dW5kIERhdGVpLVNjaHJlaWJ2b3JnYWVuZ2UuIFBlcm1pc3Npb24tQ2hlY2sgcHJvIFplbGxlLCBl -aW4NCiAgICAgICAgICAgICMgZWluemlnZXIgTG9nYnVjaC1FaW50cmFnIGZhc3N0IGRpZSBBa3Rp -b24genVzYW1tZW4uDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvemVs -bGVuLWJ1bGsnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGJv -ZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkg -eyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAg -ICAgICAgICAkZWludHJhZWdlID0gQCgkYS5laW50cmFlZ2UpDQogICAgICAgICAgICAgICAgaWYg -KC1ub3QgJGVpbnRyYWVnZSAtb3IgJGVpbnRyYWVnZS5Db3VudCAtZXEgMCkgew0KICAgICAgICAg -ICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdvayc7IG9r -ID0gMDsgYWJnZWxlaG50ID0gQCgpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBSZWFkLU1vZGlmeS1Xcml0ZSBhdG9t -YXIgaW4gZGVyIERhdGVpLVNwZXJyZSDigJQgd2llIGRlciBFaW56ZWwtDQogICAgICAgICAgICAg -ICAgIyB6ZWxsLUVuZHBvaW50LiBPaG5lIExvY2sga2FubiBlaW4gcGFyYWxsZWxlciBFZGl0L0J1 -bGsgKGF1Y2gNCiAgICAgICAgICAgICAgICAjIGF1cyBlaW5lbSBhbmRlcmVuIFNlcnZlci1Qcm96 -ZXNzIGF1ZiBkZW1zZWxiZW4gU2hhcmUpIGRlbg0KICAgICAgICAgICAgICAgICMgZ2VyYWRlIGdl -bGVzZW5lbiBHZXNhbXRzdGFuZCB1ZWJlcnNjaHJlaWJlbiAoTG9zdCBVcGRhdGUgdWViZXINCiAg -ICAgICAgICAgICAgICAjIGRpZSBHQU5aRSBEYXRlaSkuIExvZ2J1Y2ggKyBMaXZlLVN5bmMgbGF1 -ZmVuIE5BQ0ggZGVyIFNwZXJyZSwNCiAgICAgICAgICAgICAgICAjIHVtIGdlc2NoYWNodGVsdGUg -TG9ja3MgKGxvZ2J1Y2gvY2hhbmdlcykgenUgdmVybWVpZGVuLg0KICAgICAgICAgICAgICAgICRy -ZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRy -ZXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRwbGFudW5nKSB7IHJldHVybiBAeyB0 -eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cgPSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVu -ZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVnZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJHBsYW51bmcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdlaW50cmFlZ2UnIC1O -b3RlUHJvcGVydHlWYWx1ZSAoW1BTQ3VzdG9tT2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIFBlcnNvbmVuLU1hcCBl -aW5tYWwgYXVmYmF1ZW4g4oCUIFBlcm1pc3Npb24tQ2hlY2sgcHJvDQogICAgICAgICAgICAgICAg -ICAgICAgICAjIEVpbnRyYWcgb2huZSBSZXNjYW4gZGVyIFBlcnNvbmVubGlzdGUuDQogICAgICAg -ICAgICAgICAgICAgICAgICAkcGVyc29uTWFwID0gQHt9DQogICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBm -b3JlYWNoICgkcHAgaW4gQCgkcGxhbnVuZy5wZXJzb25lbikpIHsgJHBlcnNvbk1hcFtbc3RyaW5n -XSRwcC5pZF0gPSAkcHAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgJG9rQ291bnQgPSAwDQogICAgICAgICAgICAgICAgICAgICAgICAkYWJnZWxl -aG50ID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICAkZXJzdGVzUGlkID0gJG51bGwNCiAg -ICAgICAgICAgICAgICAgICAgICAgICRlcnN0ZXNXZXJ0ID0gJG51bGwNCiAgICAgICAgICAgICAg -ICAgICAgICAgICRlcnN0ZXNEYXR1bSA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAk -bGV0enRlc0RhdHVtID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICMgYWx0ZVdlcnRl -LU1hcCBmdWVyIExvZ2J1Y2gtUmVzdG9yZTogS2V5ID0gIjxkYXR1bT58PHBlcnNvbklkPiIuDQog -ICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZVdlcnRlID0gQHt9DQogICAgICAgICAgICAgICAg -ICAgICAgICAjIHN5bmNFaW50cmFlZ2U6IHBybyBnZW11dGllcnRlciBaZWxsZSBlaW4gRWludHJh -ZyBmdWVyDQogICAgICAgICAgICAgICAgICAgICAgICAjIGRlbiBMaXZlLVN5bmMtQ2hhbmdlLUxv -ZyAoRm9ybWF0IHdpZSBTaW5nbGUtQ2VsbCkuDQogICAgICAgICAgICAgICAgICAgICAgICAkc3lu -Y0VpbnRyYWVnZSA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAg -ICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGUgaW4gJGVpbnRyYWVnZSkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICRkYXR1bSA9IFtzdHJpbmddJGUuZGF0dW0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbc3RyaW5nXSRlLnBlcnNvbklkDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJHdlcnQgPSBpZiAoJGUuUFNPYmplY3QuUHJvcGVydGll -c1snd2VydCddIC1hbmQgJG51bGwgLW5lICRlLndlcnQpIHsgW3N0cmluZ10kZS53ZXJ0IH0gZWxz -ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZGF0dW0gLW9y -IC1ub3QgJHBlcnNvbklkKSB7ICRhYmdlbGVobnQgKz0gQHsgZGF0dW0gPSAkZGF0dW07IHBlcnNv -bklkID0gJHBlcnNvbklkOyBncnVuZCA9ICd1bnZvbGxzdGFlbmRpZycgfTsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aWVsUGVyc29uID0gJHBlcnNvbk1hcFskcGVy -c29uSWRdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlpl -bGxlRWRpdGllcmVuICR6aWVsUGVyc29uKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkYWJnZWxlaG50ICs9IEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25J -ZDsgZ3J1bmQgPSAna2Vpbi1yZWNodCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVuZy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVy -dGllc1skZGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5n -LmVpbnRyYWVnZSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGRhdHVtIC1Ob3RlUHJv -cGVydHlWYWx1ZSAoW1BTQ3VzdG9tT2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZW4gV2VydCBt -ZXJrZW4gQkVWT1Igd2lyIGRpZSBaZWxsZSB1ZWJlcnNjaHJlaWJlbi4NCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkYWx0ZXJXZXJ0ID0gJycNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJz -b25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVyV2VydCA9IFtz -dHJpbmddJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS4kcGVyc29uSWQNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZVso -InswfXx7MX0iIC1mICRkYXR1bSwgJHBlcnNvbklkKV0gPSAkYWx0ZXJXZXJ0DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPckVtcHR5KCR3ZXJ0KSkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRk -YXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJv -cGVydGllcy5SZW1vdmUoJHBlcnNvbklkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3Qu -UHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLiRwZXJzb25JZCA9ICR3ZXJ0DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtIHwgQWRkLU1lbWJlciAtTm90 -ZVByb3BlcnR5TmFtZSAkcGVyc29uSWQgLU5vdGVQcm9wZXJ0eVZhbHVlICR3ZXJ0IC1Gb3JjZQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRva0NvdW50KysNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRlcnN0ZXNQaWQpIHsgJGVyc3Rlc1Bp -ZCA9ICRwZXJzb25JZDsgJGVyc3Rlc1dlcnQgPSAkd2VydDsgJGVyc3Rlc0RhdHVtID0gJGRhdHVt -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGV0enRlc0RhdHVtID0gJGRhdHVtDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJHN5bmNFaW50cmFlZ2UuQWRkKEB7IGRh -dHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgYWx0ID0gIiRhbHRlcldlcnQiOyBu -ZXUgPSAiJHdlcnQiIH0pDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAjIERhdGVpIG51ciBzY2hyZWliZW4sIHdlbm4gdGF0c2FlY2hsaWNoIHdhcyBn -ZWFlbmRlcnQgd3VyZGUuDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG9rQ291bnQgLWd0 -IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFu -dW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAnb2snOyBva0NvdW50ID0g -JG9rQ291bnQ7IGFiZ2VsZWhudCA9ICRhYmdlbGVobnQ7IGVyc3Rlc1BpZCA9ICRlcnN0ZXNQaWQ7 -IGVyc3Rlc1dlcnQgPSAkZXJzdGVzV2VydDsgZXJzdGVzRGF0dW0gPSAkZXJzdGVzRGF0dW07IGxl -dHp0ZXNEYXR1bSA9ICRsZXR6dGVzRGF0dW07IGFsdGVXZXJ0ZSA9ICRhbHRlV2VydGU7IHN5bmNF -aW50cmFlZ2UgPSAkc3luY0VpbnRyYWVnZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz -cG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIGlmICgkcmVzLnR5cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9y -ICRSZXNwb25zZSAkcmVzLm1zZyAkcmVzLmNvZGU7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICAjIExvZ2J1Y2ggKyBMaXZlLVN5bmMgTkFDSCBkZW0gTG9jayAoa2VpbiBnZXNjaGFjaHRlbHRl -cyBMb2NrKS4NCiAgICAgICAgICAgICAgICBpZiAoJHJlcy5va0NvdW50IC1ndCAwKSB7DQogICAg -ICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3plbGxlbi5idWxrLmdlYWVuZGVydCcg -QHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbklkICAgID0gJHJlcy5lcnN0ZXNQaWQN -CiAgICAgICAgICAgICAgICAgICAgICAgIHdlcnQgICAgICAgID0gJHJlcy5lcnN0ZXNXZXJ0DQog -ICAgICAgICAgICAgICAgICAgICAgICBhbnphaGwgICAgICA9ICRyZXMub2tDb3VudA0KICAgICAg -ICAgICAgICAgICAgICAgICAgZXJzdGVyVGFnICAgPSAkcmVzLmVyc3Rlc0RhdHVtDQogICAgICAg -ICAgICAgICAgICAgICAgICBsZXR6dGVyVGFnICA9ICRyZXMubGV0enRlc0RhdHVtDQogICAgICAg -ICAgICAgICAgICAgICAgICBhYmdlbGVobnQgICA9ICRyZXMuYWJnZWxlaG50LkNvdW50DQogICAg -ICAgICAgICAgICAgICAgICAgICAjIFJlc3RvcmUtUGF5bG9hZDogcHJvIFplbGxlIGRlciBXZXJ0 -IHZvciBkZXIgQWVuZGVydW5nLg0KICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZVdlcnRlICAg -PSAkcmVzLmFsdGVXZXJ0ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -ICAgICMgTGl2ZS1TeW5jOiBwcm8gWmVsbGUgZWluICd6ZWxsZSctRWludHJhZyBpbnMgY2hhbmdl -cy5qc29uLg0KICAgICAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRWludHJhZWdlICd6ZWxs -ZScgJHJlcy5zeW5jRWludHJhZWdlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ29rJzsgb2sgPSAkcmVzLm9r -Q291bnQ7IGFiZ2VsZWhudCA9IEAoJHJlcy5hYmdlbGVobnQpIH0NCiAgICAgICAgICAgICAgICBj -b250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvcGxhbnVuZy9r -b21tZW50YXINCiAgICAgICAgICAgICMgSGFlbmd0IGVpbmVuIG5ldWVuIEtvbW1lbnRhciBhbiBk -aWUgTGlzdGUgZnVlciAoZGF0dW0scGVyc29uSWQpIGFuLg0KICAgICAgICAgICAgIyBTY2hlbWEt -TWlncmF0aW9uIChsYXp5KTogdm9yaGFuZGVuZXIgU3RyaW5nIG9kZXIgT2JqZWt0LUVpbnRyYWcg -d2lyZA0KICAgICAgICAgICAgIyBiZWltIGVyc3RlbiBTY2hyZWliZW4gaW4gZWluZSBMaXN0ZSBr -b252ZXJ0aWVydC4gTGVlcmVyIFRleHQgd2lyZA0KICAgICAgICAgICAgIyBhYmdlbGVobnQg4oCU -IExvZXNjaGVuIGVpbnplbG5lciBLb21tZW50YXJlIGxhZXVmdCB1ZWJlciBkZW4gREVMRVRFLQ0K -ICAgICAgICAgICAgIyBFbmRwdW5rdCAobWl0IEtvbW1lbnRhci1JRCksIGRhcyBMb2VzY2hlbiBn -YW56ZXIgTGlzdGVuIGlzdCB1ZWJlcg0KICAgICAgICAgICAgIyBkaWUgQVBJIG5pY2h0IG1laHIg -bW9lZ2xpY2ggKHZlcnNlaGVudGxpY2hlciBWZXJsdXN0IGF1c2dlc2NobG9zc2VuKS4NCiAgICAg -ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9rb21tZW50YXInIC1hbmQgJE1ldGhv -ZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVl -c3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEg -PSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSAkYS5k -YXR1bQ0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAg -ICAgICAgICAgICAgICAkdGV4dCA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10p -IHsgKCIkKCRhLnRleHQpIikuVHJpbSgpIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkdGV4dCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25z -ZSAnTGVlcmVyIEtvbW1lbnRhciDigJQgYml0dGUgREVMRVRFIC9hcGkvcGxhbnVuZy9rb21tZW50 -YXIgZnVlciBMb2VzY2hlbiB2ZXJ3ZW5kZW4nIDQwMA0KICAgICAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIEVkaXQtUmVjaHQgdm9y -IExvY2sgcHJ1ZWZlbg0KICAgICAgICAgICAgICAgICRwbGFudW5nQ2hlY2sgPSBSZWFkLUpzb25P -YmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRwbGFu -dW5nQ2hlY2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1 -bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHppZWxQZXJzb24gPSAkbnVs -bA0KICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZ0NoZWNrLnBlcnNvbmVuKSB7DQogICAgICAg -ICAgICAgICAgICAgIGZvcmVhY2ggKCRwcCBpbiBAKCRwbGFudW5nQ2hlY2sucGVyc29uZW4pKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ10kcHAuaWQgLWVxICRwZXJzb25J -ZCkgeyAkemllbFBlcnNvbiA9ICRwcDsgYnJlYWsgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZaZWxs -ZUVkaXRpZXJlbiAkemllbFBlcnNvbikpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyBmdWVyIGRpZXNlbiBLb21tZW50YXInIDQw -MzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGpldHp0ID0g -KEdldC1EYXRlKS5Ub1N0cmluZygnbycpICAjIElTTyA4NjAxIG1pdCBaZWl0em9uZQ0KICAgICAg -ICAgICAgICAgICRiZW51dHplciA9ICIkRG9tYWluXCRVc2VybmFtZSINCiAgICAgICAgICAgICAg -ICAkbmV1ZUlkID0gJ2tfJyArIChbRGF0ZVRpbWVPZmZzZXRdOjpOb3cuVG9Vbml4VGltZU1pbGxp -c2Vjb25kcygpKSArICdfJyArIChHZXQtUmFuZG9tIC1NYXhpbXVtIDk5OTk5KQ0KICAgICAgICAg -ICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRudWxsID0gSW52b2tlLVdpdGhGaWxl -TG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9 -IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCRudWxsIC1lcSAkcGxhbnVuZykgeyByZXR1cm4gJG51bGwgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sna29tbWVudGFy -ZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgfCBBZGQtTWVtYmVy -IC1Ob3RlUHJvcGVydHlOYW1lICdrb21tZW50YXJlJyAtTm90ZVByb3BlcnR5VmFsdWUgKE5ldy1P -YmplY3QgUFNPYmplY3QpIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcua29tbWVudGFyZS5QU09iamVjdC5Q -cm9wZXJ0aWVzWyRkYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVu -Zy5rb21tZW50YXJlIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkZGF0dW0gLU5vdGVQ -cm9wZXJ0eVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgQWt0dWVsbGUgTGlzdGUgaGVy -YXVzemllaGVuICsgZ2dmLiBhdXMgQWx0c2NoZW1hIG1pZ3JpZXJlbi4NCiAgICAgICAgICAgICAg -ICAgICAgICAgICMgTGlzdGUgaXN0IGNocm9ub2xvZ2lzY2ggKGFlbHRlc3RlIHp1ZXJzdCksIGRl -ciBuZXVlDQogICAgICAgICAgICAgICAgICAgICAgICAjIEVpbnRyYWcgd2lyZCBoaW50ZW4gYW5n -ZWhhZW5ndC4NCiAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZSA9IE5ldy1PYmplY3QgU3lz -dGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdFtvYmplY3RdDQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1sk -cGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZvcmggPSAkcGxhbnVu -Zy5rb21tZW50YXJlLiRkYXR1bS4kcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJHZvcmggLWlzIFtzdHJpbmddIC1hbmQgJHZvcmgpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIyBBbHRlciBTdHJpbmctRWludHJhZyDigJQgZWluIEVsZW1lbnQgb2hu -ZSBNZXRhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZS5BZGQoW1BTQ3Vz -dG9tT2JqZWN0XUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAg -ICAgICAgPSAna19sZWdhY3lfJyArIChHZXQtUmFuZG9tIC1NYXhpbXVtIDk5OTk5KQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAgICAgICAgID0gJHZvcmgNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydEFtICA9ICRudWxsDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRWb24gPSAkbnVsbA0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB8IE91dC1OdWxsDQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR2b3JoIC1pcyBbYXJyYXldIC1vciAoJHZvcmggLWlz -IFtTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmFibGVdIC1hbmQgLW5vdCAoJHZvcmggLWlzIFtz -dHJpbmddKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTY2hvbiBlaW4g -QXJyYXkgKG5ldWVzIFNjaGVtYSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y -ZWFjaCAoJGUgaW4gQCgkdm9yaCkpIHsgJGxpc3RlLkFkZCgkZSkgfCBPdXQtTnVsbCB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR2b3JoIC1hbmQgJHZvcmguUFNPYmpl -Y3QuUHJvcGVydGllc1sndGV4dCddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICMgQWx0ZXMgT2JqZWt0LVNjaGVtYSB7IHRleHQsIGdlYWVuZGVydEFtLCBnZWFlbmRlcnRWb24g -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWlnSWQgPSBpZiAoJHZvcmguUFNP -YmplY3QuUHJvcGVydGllc1snaWQnXSkgeyBbc3RyaW5nXSR2b3JoLmlkIH0gZWxzZSB7ICdrX2xl -Z2FjeV8nICsgKEdldC1SYW5kb20gLU1heGltdW0gOTk5OTkpIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJGxpc3RlLkFkZChbUFNDdXN0b21PYmplY3RdQHsNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIGlkICAgICAgICAgICA9ICRtaWdJZA0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAgICAgICAgID0gW3N0cmluZ10kdm9yaC50 -ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRBbSAgPSBp -ZiAoJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1snZ2VhZW5kZXJ0QW0nXSkgIHsgJHZvcmguZ2Vh -ZW5kZXJ0QW0gfSAgZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIGdlYWVuZGVydFZvbiA9IGlmICgkdm9yaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWFl -bmRlcnRWb24nXSkgeyAkdm9yaC5nZWFlbmRlcnRWb24gfSBlbHNlIHsgJG51bGwgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgJGxpc3RlLkFkZChbUFNDdXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpZCAgICAgICAgICAgPSAkbmV1ZUlkDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgdGV4dCAgICAgICAgID0gJHRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBn -ZWFlbmRlcnRBbSAgPSAkamV0enQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRl -cnRWb24gPSAkYmVudXR6ZXINCiAgICAgICAgICAgICAgICAgICAgICAgIH0pIHwgT3V0LU51bGwN -CiAgICAgICAgICAgICAgICAgICAgICAgICMgWnVydWVjayBhbHMgQXJyYXkgKFBTLVNlcmlhbGlz -aWVydW5nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGFyciA9IEAoJGxpc3RlLlRvQXJyYXko -KSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1 -bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS4kcGVyc29uSWQgPSAkYXJyDQogICAg -ICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFt -ZSAkcGVyc29uSWQgLU5vdGVQcm9wZXJ0eVZhbHVlICRhcnIgLUZvcmNlDQogICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdw -bGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAg -IHJldHVybiAkbnVsbA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBj -YXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1G -ZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAjIFJlZGFjdGlvbiB3aWUgYmVpIGtvbW1lbnRhci5nZWxvZXNjaHQgKFNwcmludCAxIOKA -lCBTaWNoZXJoZWl0cy0NCiAgICAgICAgICAgICAgICAjIE5vdGJyZW1zZSAyMDI2LTA1LTI4KTog -Vm9sbHRleHQgYmxlaWJ0IGluIHBsYW51bmcuanNvbiAoZG9ydA0KICAgICAgICAgICAgICAgICMg -ZWRpdGllcmJhci9sb2VzY2hiYXIpLCBkYXMgTG9nYnVjaCBiZWtvbW10IG51ciBWb3JzY2hhdSAr -IExhZW5nZS4NCiAgICAgICAgICAgICAgICAjIFZlcm1laWRldCBQSUktRWNobywgd2VubiBlaW4g -S29tbWVudGFyIHNwYWV0ZXIgZ2Vsb2VzY2h0IHdpcmQNCiAgICAgICAgICAgICAgICAjIGFiZXIg -aW0gTG9nIGltbWVyIG5vY2gga29tcGxldHQgbGllc3Qgc3RlaHQuDQogICAgICAgICAgICAgICAg -JHRleHRWb3JzY2hhdSA9ICR0ZXh0DQogICAgICAgICAgICAgICAgaWYgKCR0ZXh0Vm9yc2NoYXUu -TGVuZ3RoIC1ndCA0MCkgeyAkdGV4dFZvcnNjaGF1ID0gJHRleHRWb3JzY2hhdS5TdWJzdHJpbmco -MCwgNDApICsgJ+KApicgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2tvbW1l -bnRhci5oaW56dWdlZnVlZ3QnIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAgICAg -PSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgICAgICA9ICRwZXJzb25JZA0K -ICAgICAgICAgICAgICAgICAgICBrb21tZW50YXJJZCAgID0gJG5ldWVJZA0KICAgICAgICAgICAg -ICAgICAgICB0ZXh0Vm9yc2NoYXUgID0gJHRleHRWb3JzY2hhdQ0KICAgICAgICAgICAgICAgICAg -ICB0ZXh0TGFlbmdlICAgID0gJHRleHQuTGVuZ3RoDQogICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFaW50cmFnICdrb21tZW50YXInIEB7DQogICAgICAgICAg -ICAgICAgICAgIGRhdHVtICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklk -ID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklkID0gJG5ldWVJZA0K -ICAgICAgICAgICAgICAgICAgICAjIExpdmUtU3luYyBicmF1Y2h0IGRlbiBUZXh0IG5pY2h0IOKA -lCBuYWVjaHN0ZXIgUmVuZGVyIGxhZWR0DQogICAgICAgICAgICAgICAgICAgICMgaWhuIGF1cyBw -bGFudW5nLmpzb24uIE51ciBNZXRhZGF0ZW4gZnVlciBBa3Rpdml0YWV0cy1BbnplaWdlLg0KICAg -ICAgICAgICAgICAgICAgICB6ZWl0c3RlbXBlbCA9ICRqZXR6dA0KICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAg -ICAgICAgICAgIHN0YXR1cyAgICAgICA9ICdoaW56dWdlZnVlZ3QnDQogICAgICAgICAgICAgICAg -ICAgIGtvbW1lbnRhcklkICA9ICRuZXVlSWQNCiAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0 -QW0gID0gJGpldHp0DQogICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9ICRiZW51dHpl -cg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg -ICAgfQ0KDQogICAgICAgICAgICAjIERFTEVURSAvYXBpL3BsYW51bmcva29tbWVudGFyDQogICAg -ICAgICAgICAjIEJvZHk6IHsgZGF0dW0sIHBlcnNvbklkLCBrb21tZW50YXJJZCB9DQogICAgICAg -ICAgICAjIEJlcmVjaHRpZ3VuZzogU3VwZXJVc2VyIG9kZXIgR2VzYW10dmVyYW50d29ydGxpY2hl -LiBBbmRlcmUgUm9sbGVuDQogICAgICAgICAgICAjIGJla29tbWVuIDQwMyDigJQgYXVjaCBkZXIg -VmVyZmFzc2VyIHNlbGJzdCBkYXJmIG5pY2h0IGxvZXNjaGVuDQogICAgICAgICAgICAjIChiZXd1 -c3N0ZSBEZXNpZ25lbnRzY2hlaWR1bmc6IEtvbW1lbnRhci1WZXJsYXVmIGlzdCBDaHJvbmlrKS4N -CiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9rb21tZW50YXInIC1hbmQg -JE1ldGhvZCAtZXEgJ0RFTEVURScpIHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9k -eSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg -ICAgICAkYSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXR1 -bSA9ICRhLmRhdHVtDQogICAgICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJz -b25JZA0KICAgICAgICAgICAgICAgICRrb21tZW50YXJJZCA9IFtzdHJpbmddJGEua29tbWVudGFy -SWQNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZGF0dW0gLW9yIC1ub3QgJHBlcnNvbklkIC1v -ciAtbm90ICRrb21tZW50YXJJZCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXNwb25zZSAnZGF0dW0sIHBlcnNvbklkIHVuZCBrb21tZW50YXJJZCBzaW5kIFBmbGljaHQnIDQw -MDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHIgPSBHZXQt -UmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKCRyLmlzdFN1cGVyVXNlciAtb3IgJHIu -aXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy -b3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIHVuZCBHZXNhbXR2ZXJhbnR3b3J0bGljaGUgZHVl -cmZlbiBLb21tZW50YXJlIGxvZXNjaGVuJyA0MDMNCiAgICAgICAgICAgICAgICAgICAgY29udGlu -dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGdlbG9lc2NodGVyVGV4dCA9 -ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGVyZyA9 -IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHBsYW51bmcgLW9yIC1ub3QgJHBsYW51bmcu -UFNPYmplY3QuUHJvcGVydGllc1sna29tbWVudGFyZSddKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51 +Zy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRha3R1ZWxsZVZlcnNpb24gPSAn +Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRo +ICRwcFYpIHsgJGFrdHVlbGxlVmVyc2lvbiA9IFtzdHJpbmddKEdldC1JdGVtIC1MaXRlcmFsUGF0 +aCAkcHBWKS5MYXN0V3JpdGVUaW1lVXRjLlRpY2tzIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoJGFrdHVlbGxlVmVyc2lvbiAtbmUgJGVyd2FydGV0ZVZlcnNpb24pIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdrb25mbGlrdCc7IGFr +dHVlbGwgPSAkYWt0dWVsbGVWZXJzaW9uIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0 +ZS1UZXh0RmlsZSAncGxhbnVuZy5qc29uJyAkYm9keSB8IE91dC1OdWxsDQogICAgICAgICAgICAg +ICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJyB9DQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbG9ja0VyZ2VibmlzLnR5cCAtZXEgJ2tvbmZs +aWt0Jykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 +DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAgICAgICAgPSAna29uZmxpa3QnDQog +ICAgICAgICAgICAgICAgICAgICAgICBtZWxkdW5nICAgICAgICAgPSAnRGllIFBsYW51bmcgd3Vy +ZGUgendpc2NoZW56ZWl0bGljaCB2b24gZWluZXIgYW5kZXJlbiBQZXJzb24gZ2VhZW5kZXJ0LicN +CiAgICAgICAgICAgICAgICAgICAgICAgIGFrdHVlbGxlVmVyc2lvbiA9ICRsb2NrRXJnZWJuaXMu +YWt0dWVsbA0KICAgICAgICAgICAgICAgICAgICB9IDQwOQ0KICAgICAgICAgICAgICAgICAgICBj +b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl +Y3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAg +IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp +L3BsYW51bmcvemVsbGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAg +ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +Ym9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAg +ICAgICAgICAgICAgICAkZGF0dW0gPSAkYS5kYXR1bQ0KICAgICAgICAgICAgICAgICRwZXJzb25J +ZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICAkd2VydCA9IGlmICgkYS5Q +U09iamVjdC5Qcm9wZXJ0aWVzWyd3ZXJ0J10pIHsgJGEud2VydCB9IGVsc2UgeyAnJyB9DQogICAg +ICAgICAgICAgICAgIyBPcHRpbWlzdGljLUNvbmN1cnJlbmN5OiBXZW5uIGRlciBDbGllbnQgc2Vp +bmVuIHp1bGV0enQgZ2VzZWhlbmVuDQogICAgICAgICAgICAgICAgIyBXZXJ0IG1pdGxpZWZlcnQs +IHBydWVmZW4gd2lyIHZvciBkZW0gU2NocmVpYmVuIG9iIGRlciBTZXJ2ZXINCiAgICAgICAgICAg +ICAgICAjIG5vY2ggZGVuc2VsYmVuIFN0YW5kIGhhdC4gTWlzbWF0Y2ggLT4gNDA5IG1pdCBha3R1 +ZWxsZXJXZXJ0Lg0KICAgICAgICAgICAgICAgICRoYXRFcndhcnRldCA9ICRhLlBTT2JqZWN0LlBy +b3BlcnRpZXNbJ2Vyd2FydGV0ZXJBbHRlcldlcnQnXQ0KICAgICAgICAgICAgICAgICRlcndhcnRl +dCA9IGlmICgkaGF0RXJ3YXJ0ZXQpIHsgW3N0cmluZ10kYS5lcndhcnRldGVyQWx0ZXJXZXJ0IH0g +ZWxzZSB7ICRudWxsIH0NCg0KICAgICAgICAgICAgICAgICMgRWRpdC1SZWNodCBnZWdlbiBha3R1 +ZWxsZW4gU3RhbmQgcHJ1ZWZlbiAobm9jaCBvaG5lIExvY2sg4oCUIG51ciBMb29rdXApDQogICAg +ICAgICAgICAgICAgJHBsYW51bmdDaGVjayA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u +Jw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHBsYW51bmdDaGVjaykgeyBTZW5kLUVy +cm9yICRSZXNwb25zZSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICAkemllbFBlcnNvbiA9ICRudWxsDQogICAgICAgICAgICAgICAg +aWYgKCRwbGFudW5nQ2hlY2sucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFj +aCAoJHBwIGluIEAoJHBsYW51bmdDaGVjay5wZXJzb25lbikpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmIChbc3RyaW5nXSRwcC5pZCAtZXEgJHBlcnNvbklkKSB7ICR6aWVsUGVyc29uID0g +JHBwOyBicmVhayB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlplbGxlRWRpdGllcmVuICR6aWVsUGVy +c29uKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUg +QmVyZWNodGlndW5nIGZ1ZXIgZGllc2UgWmVsbGUnIDQwMzsgY29udGludWUNCiAgICAgICAgICAg +ICAgICB9DQoNCiAgICAgICAgICAgICAgICAjIFJlYWQtTW9kaWZ5LVdyaXRlIGF0b21hciBpbiBM +b2NrOg0KICAgICAgICAgICAgICAgICRjbGllbnRRdWl0dGllcnQgPSAoJGEuUFNPYmplY3QuUHJv +cGVydGllc1sndW50ZXJiZXNldHp1bmdTY2hpY2h0J10gLWFuZCAkYS51bnRlcmJlc2V0enVuZ1Nj +aGljaHQpDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAg +ICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1X +aXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBs +YW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgkbnVsbCAtZXEgJHBsYW51bmcpIHsgcmV0dXJuIEB7IHR5cCA9ICdlcnJvcic7 +IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIH0gfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcuUFNPYmplY3QuUHJvcGVydGll +c1snZWludHJhZWdlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyB8 +IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2VpbnRyYWVnZScgLU5vdGVQcm9wZXJ0eVZh +bHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLmVpbnRyYWVnZS5Q +U09iamVjdC5Qcm9wZXJ0aWVzWyRkYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkcGxhbnVuZy5laW50cmFlZ2UgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRkYXR1 +bSAtTm90ZVByb3BlcnR5VmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIC1Gb3JjZQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVyID0gJycN +CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLlBT +T2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgeyAkYWx0ZXIgPSBbc3RyaW5nXSRwbGFudW5n +LmVpbnRyYWVnZS4kZGF0dW0uJHBlcnNvbklkIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAg +IyBPcHRpbWlzdGljLUNvbmN1cnJlbmN5LUNoZWNrDQogICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoJGhhdEVyd2FydGV0IC1hbmQgJGVyd2FydGV0IC1uZSAkYWx0ZXIpIHsNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ2tvbmZsaWt0JzsgYWt0dWVsbCA9ICRh +bHRlciB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAg +ICAgICMgRnVlaHJ1bmdzLVVudGVyYmVzZXR6dW5nIChWZXJiaW5kbGljaGtlaXRzZmVuc3Rlcikg +LSBnbGVpY2hlcyBQcmluemlwIHdpZSB2b3JoZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAj +IGpldHp0IGFiZXIgZ2VnZW4gZGVuIGdlbG9ja3RlbiBTdGFuZC4NCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgtbm90ICRjbGllbnRRdWl0dGllcnQgLWFuZCAoVGVzdC1JblZlcmJpbmRsaWNo +a2VpdCAkZGF0dW0pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVTY2hpY2h0 +ID0gR2V0LUZ1ZWhydW5nc1NjaGljaHRMZXR0ZXIgJGFsdGVyDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJG5ldWVTY2hpY2h0ID0gR2V0LUZ1ZWhydW5nc1NjaGljaHRMZXR0ZXIgJHdlcnQN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFsdGVTY2hpY2h0IC1hbmQgJGFsdGVT +Y2hpY2h0IC1uZSAkbmV1ZVNjaGljaHQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJGFrdHVlbGxDb3VudCA9IEdldC1GdWVocnVuZ3NDb3VudCAkcGxhbnVuZyAkZGF0dW0gJGFs +dGVTY2hpY2h0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGFrdHVlbGxD +b3VudCAtIDEpIC1sdCAyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy +ZXR1cm4gQHsgdHlwID0gJ3VudGVyYmVzZXR6dW5nJzsgc2NoaWNodCA9ICRhbHRlU2NoaWNodDsg +YWt0dWVsbENvdW50ID0gJGFrdHVlbGxDb3VudDsgYWx0ZXIgPSAkYWx0ZXIgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +LW5vdCAkd2VydCAtb3IgW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkd2VydCkpIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5Q +U09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJl +bW92ZSgkcGVyc29uSWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0p +IHsgJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS4kcGVyc29uSWQgPSAkd2VydCB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0gfCBB +ZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRwZXJzb25JZCAtTm90ZVByb3BlcnR5VmFsdWUg +JHdlcnQgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQt +TnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdvayc7IGFsdGVy +ID0gJGFsdGVyIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0 +Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVo +bGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg +ICAgICBpZiAoJGxvY2tFcmdlYm5pcy50eXAgLWVxICdlcnJvcicpIHsgU2VuZC1FcnJvciAkUmVz +cG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5jb2RlOyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgaWYgKCRsb2NrRXJnZWJuaXMudHlwIC1lcSAna29uZmxpa3QnKSB7DQog +ICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgIGZlaGxlciAgICAgICAgPSAna29uZmxpa3QnDQogICAgICAgICAgICAg +ICAgICAgICAgICBtZWxkdW5nICAgICAgID0gJ0RpZXNlIFplbGxlIHd1cmRlIGluendpc2NoZW4g +Z2VhZW5kZXJ0LicNCiAgICAgICAgICAgICAgICAgICAgICAgIGFrdHVlbGxlcldlcnQgPSAkbG9j +a0VyZ2VibmlzLmFrdHVlbGwNCiAgICAgICAgICAgICAgICAgICAgfSA0MDkNCiAgICAgICAgICAg +ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYg +KCRsb2NrRXJnZWJuaXMudHlwIC1lcSAndW50ZXJiZXNldHp1bmcnKSB7DQogICAgICAgICAgICAg +ICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgIGZlaGxlciAgICAgICAgID0gJ0Z1ZWhydW5ncy1VbnRlcmJlc2V0enVuZycNCiAgICAgICAg +ICAgICAgICAgICAgICAgIGtvbmZsaWt0VHlwICAgID0gJ3VudGVyYmVzZXR6dW5nJw0KICAgICAg +ICAgICAgICAgICAgICAgICAgc2NoaWNodCAgICAgICAgPSAkbG9ja0VyZ2VibmlzLnNjaGljaHQN +CiAgICAgICAgICAgICAgICAgICAgICAgIGFrdHVlbGxDb3VudCAgID0gJGxvY2tFcmdlYm5pcy5h +a3R1ZWxsQ291bnQNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyV2VydCAgICAgID0gJGxv +Y2tFcmdlYm5pcy5hbHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgbmV1ZXJXZXJ0ICAgICAg +PSAkd2VydA0KICAgICAgICAgICAgICAgICAgICB9IDQwOQ0KICAgICAgICAgICAgICAgICAgICBj +b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRhbHRlciA9ICRs +b2NrRXJnZWJuaXMuYWx0ZXINCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICd6ZWxs +ZS5nZWFlbmRlcnQnIEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgYWx0 +ZXJXZXJ0ID0gIiRhbHRlciI7IG5ldWVyV2VydCA9ICIkd2VydCIgfQ0KICAgICAgICAgICAgICAg +ICMgTGl2ZS1TeW5jOiBDaGFuZ2UtTG9nIGZ1ZXIgZGVuIHN5bmMtd29ya2VyLg0KICAgICAgICAg +ICAgICAgIEFkZC1DaGFuZ2VMb2dFaW50cmFnICd6ZWxsZScgQHsNCiAgICAgICAgICAgICAgICAg +ICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgPSAkcGVy +c29uSWQNCiAgICAgICAgICAgICAgICAgICAgYWx0ICAgICAgPSAiJGFsdGVyIg0KICAgICAgICAg +ICAgICAgICAgICBuZXUgICAgICA9ICIkd2VydCINCiAgICAgICAgICAgICAgICB9DQoNCiAgICAg +ICAgICAgICAgICAjIFVudGVyYmVzZXR6dW5ncy1RdWl0dHVuZzogZXh0cmEgTG9nYnVjaC1FaW50 +cmFnLCBkZW4gRmFjaGF1ZnNpY2h0L1dMIHNlaGVuIHNvbGwNCiAgICAgICAgICAgICAgICBpZiAo +JGEuUFNPYmplY3QuUHJvcGVydGllc1sndW50ZXJiZXNldHp1bmdTY2hpY2h0J10gLWFuZCAkYS51 +bnRlcmJlc2V0enVuZ1NjaGljaHQpIHsNCiAgICAgICAgICAgICAgICAgICAgJHNjaGljaHRMZXR0 +ZXIgPSBbc3RyaW5nXSRhLnVudGVyYmVzZXR6dW5nU2NoaWNodA0KICAgICAgICAgICAgICAgICAg +ICAkc2NoaWNodFRleHQgPSBzd2l0Y2ggKCRzY2hpY2h0TGV0dGVyKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAnRicgeyAnRnJ1ZWhzY2hpY2h0JyB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAnUycgeyAnU3BhZXRzY2hpY2h0JyB9DQogICAgICAgICAgICAgICAgICAgICAgICAnTicgeyAn +TmFjaHRzY2hpY2h0JyB9DQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHsgJHNjaGlj +aHRMZXR0ZXIgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRv +ZVR4dCA9ICcnDQogICAgICAgICAgICAgICAgICAgIGlmICgkemllbFBlcnNvbiAtYW5kICR6aWVs +UGVyc29uLlBTT2JqZWN0LlByb3BlcnRpZXNbJ29lJ10pIHsgJG9lVHh0ID0gW3N0cmluZ10kemll +bFBlcnNvbi5vZSB9DQogICAgICAgICAgICAgICAgICAgICRuYW1lVHh0ID0gJycNCiAgICAgICAg +ICAgICAgICAgICAgaWYgKCR6aWVsUGVyc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAk +dm4gPSAnJzsgaWYgKCR6aWVsUGVyc29uLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUnXSkg +eyAkdm4gPSBbc3RyaW5nXSR6aWVsUGVyc29uLnZvcm5hbWUgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgJG5hbWVUeHQgPSAoIiR2biAkKCR6aWVsUGVyc29uLm5hbWUpIikuVHJpbSgpDQogICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAn +dW50ZXJiZXNldHp1bmcucXVpdHRpZXJ0JyBAew0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0 +dW0gICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgPSAkcGVy +c29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbiAgICA9ICRuYW1lVHh0DQogICAg +ICAgICAgICAgICAgICAgICAgICBvZSAgICAgICAgPSAkb2VUeHQNCiAgICAgICAgICAgICAgICAg +ICAgICAgIHNjaGljaHQgICA9ICRzY2hpY2h0VGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAg +YWx0ZXJXZXJ0ID0gIiRhbHRlciINCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldWVyV2VydCA9 +ICIkd2VydCINCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAjIFBoYXNlIEQuMyAoMjAyNi0wNS0yMSk6IHdlbm4gZGllIEtyYW5rbWVsZHVu +ZyB6dXJ1ZWNrZ2Vub21tZW4NCiAgICAgICAgICAgICAgICAjIHdpcmQgKGFsdGVyIFdlcnQgd2Fy +IGtyL0t1ciwgbmV1ZXIgV2VydCBpc3QgZXMgbmljaHQgbWVociksDQogICAgICAgICAgICAgICAg +IyBlbnRmZXJuZW4gd2lyIGRlbiBvZmZlbmVuIEhpbndlaXMg4oCUIHNvbnN0IGlzdCBlciBiaXMg +enUNCiAgICAgICAgICAgICAgICAjIDMwIFRhZ2UgcHJhZXNlbnQsIG9id29obCBkYXMgRXJlaWdu +aXMgZXJsZWRpZ3QgaXN0Lg0KICAgICAgICAgICAgICAgIGlmICgoJGFsdGVyIC1lcSAna3InIC1v +ciAkYWx0ZXIgLWVxICdLdXInKSAtYW5kICgkd2VydCAtbmUgJ2tyJyAtYW5kICR3ZXJ0IC1uZSAn +S3VyJykpIHsNCiAgICAgICAgICAgICAgICAgICAgUmVtb3ZlLU9mZmVuZUtyYW5rbWVsZHVuZ3NI +aW53ZWlzZSAkcGVyc29uSWQgJGRhdHVtDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICMgSGlud2Vpcy1UcmlnZ2VyOiBLcmFua21lbGR1bmcgZXJ6ZXVndCBlaW5lbiBJbi1BcHAt +SGlud2Vpcw0KICAgICAgICAgICAgICAgICMgZnVlciBTVSArIEdlc2FtdHZlcmFudHdvcnRsaWNo +ZSAoU2NoaWNodGxvY2ggaW0gTW9kYWwgZGlyZWt0DQogICAgICAgICAgICAgICAgIyBhZHJlc3Np +ZXJiYXIgdmlhICJLYW5kaWRhdGVuIGFuc2NocmVpYmVuIi1CdXR0b24pLg0KICAgICAgICAgICAg +ICAgIGlmICgkd2VydCAtZXEgJ2tyJyAtb3IgJHdlcnQgLWVxICdLdXInKSB7DQogICAgICAgICAg +ICAgICAgICAgICRrbU5hbWUgPSAnJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHppZWxQZXJz +b24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRrdm4gPSAnJzsgaWYgKCR6aWVsUGVyc29u +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUnXSkgeyAka3ZuID0gW3N0cmluZ10kemllbFBl +cnNvbi52b3JuYW1lIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRrbU5hbWUgPSAoIiRrdm4g +JCgkemllbFBlcnNvbi5uYW1lKSIpLlRyaW0oKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICRrbUdydXBwZSA9ICcnDQogICAgICAgICAgICAgICAgICAgIGlmICgk +emllbFBlcnNvbiAtYW5kICR6aWVsUGVyc29uLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dydXBwZSdd +KSB7ICRrbUdydXBwZSA9IFtzdHJpbmddJHppZWxQZXJzb24uZ3J1cHBlIH0NCiAgICAgICAgICAg +ICAgICAgICAgJGttU2NoaWNodExldHRlciA9ICcnDQogICAgICAgICAgICAgICAgICAgIGlmICgi +JGFsdGVyIiAtbWF0Y2ggJ14oW0ZTTl0pLScpIHsgJGttU2NoaWNodExldHRlciA9ICRNYXRjaGVz +WzFdIH0NCiAgICAgICAgICAgICAgICAgICAgTmV3LUhpbndlaXMgJ2tyYW5rbWVsZHVuZycgKFtv +cmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25faWQgICAgPSAkcGVyc29u +SWQNCiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbl9uYW1lICA9ICRrbU5hbWUNCiAgICAg +ICAgICAgICAgICAgICAgICAgIGdydXBwZSAgICAgICA9ICRrbUdydXBwZQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgZGF0dW0gICAgICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgICAg +ICBzY2hpY2h0Q29kZSAgPSAiJGFsdGVyIg0KICAgICAgICAgICAgICAgICAgICAgICAgc2NoaWNo +dEt1cnogID0gJGttU2NoaWNodExldHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgY29kZSAg +ICAgICAgID0gIiR3ZXJ0Ig0KICAgICAgICAgICAgICAgICAgICB9KSAoR2V0LUFrdHVlbGxlckJl +bnV0emVyKSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNl +bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JzsgYWx0ZXJX +ZXJ0ID0gJGFsdGVyIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgIyBCdWxrLVNjaHJlaWJlbiBtZWhyZXJlciBaZWxsZW4gaW4gZWluZW0gU2No +cml0dCDigJQgYXVmZ2VydWZlbg0KICAgICAgICAgICAgIyB2b20gRXhjZWwtRnVlbGwtR3JpZmYu +IFNwYXJ0IHBybyBEcmFnIGJpcyB6dSAxMDArIEhUVFAtUm91bmR0cmlwcw0KICAgICAgICAgICAg +IyB1bmQgRGF0ZWktU2NocmVpYnZvcmdhZW5nZS4gUGVybWlzc2lvbi1DaGVjayBwcm8gWmVsbGUs +IGVpbg0KICAgICAgICAgICAgIyBlaW56aWdlciBMb2didWNoLUVpbnRyYWcgZmFzc3QgZGllIEFr +dGlvbiB6dXNhbW1lbi4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy96 +ZWxsZW4tYnVsaycgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAk +Ym9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5 +KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICAkYSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAg +ICAgICAgICAgICRlaW50cmFlZ2UgPSBAKCRhLmVpbnRyYWVnZSkNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkZWludHJhZWdlIC1vciAkZWludHJhZWdlLkNvdW50IC1lcSAwKSB7DQogICAgICAg +ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ29rJzsg +b2sgPSAwOyBhYmdlbGVobnQgPSBAKCkgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0K +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIFJlYWQtTW9kaWZ5LVdyaXRlIGF0 +b21hciBpbiBkZXIgRGF0ZWktU3BlcnJlIOKAlCB3aWUgZGVyIEVpbnplbC0NCiAgICAgICAgICAg +ICAgICAjIHplbGwtRW5kcG9pbnQuIE9obmUgTG9jayBrYW5uIGVpbiBwYXJhbGxlbGVyIEVkaXQv +QnVsayAoYXVjaA0KICAgICAgICAgICAgICAgICMgYXVzIGVpbmVtIGFuZGVyZW4gU2VydmVyLVBy +b3plc3MgYXVmIGRlbXNlbGJlbiBTaGFyZSkgZGVuDQogICAgICAgICAgICAgICAgIyBnZXJhZGUg +Z2VsZXNlbmVuIEdlc2FtdHN0YW5kIHVlYmVyc2NocmVpYmVuIChMb3N0IFVwZGF0ZSB1ZWJlcg0K +ICAgICAgICAgICAgICAgICMgZGllIEdBTlpFIERhdGVpKS4gTG9nYnVjaCArIExpdmUtU3luYyBs +YXVmZW4gTkFDSCBkZXIgU3BlcnJlLA0KICAgICAgICAgICAgICAgICMgdW0gZ2VzY2hhY2h0ZWx0 +ZSBMb2NrcyAobG9nYnVjaC9jaGFuZ2VzKSB6dSB2ZXJtZWlkZW4uDQogICAgICAgICAgICAgICAg +JHJlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAg +JHJlcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHBsYW51bmcpIHsgcmV0dXJuIEB7 +IHR5cCA9ICdlcnJvcic7IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2Vm +dW5kZW4nIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcuUFNP +YmplY3QuUHJvcGVydGllc1snZWludHJhZWdlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkcGxhbnVuZyB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2VpbnRyYWVnZScg +LU5vdGVQcm9wZXJ0eVZhbHVlIChbUFNDdXN0b21PYmplY3RdQHt9KSAtRm9yY2UNCiAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgUGVyc29uZW4tTWFw +IGVpbm1hbCBhdWZiYXVlbiDigJQgUGVybWlzc2lvbi1DaGVjayBwcm8NCiAgICAgICAgICAgICAg +ICAgICAgICAgICMgRWludHJhZyBvaG5lIFJlc2NhbiBkZXIgUGVyc29uZW5saXN0ZS4NCiAgICAg +ICAgICAgICAgICAgICAgICAgICRwZXJzb25NYXAgPSBAe30NCiAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGZvcmVhY2ggKCRwcCBpbiBAKCRwbGFudW5nLnBlcnNvbmVuKSkgeyAkcGVyc29uTWFwW1tzdHJp +bmddJHBwLmlkXSA9ICRwcCB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAkb2tDb3VudCA9IDANCiAgICAgICAgICAgICAgICAgICAgICAgICRhYmdl +bGVobnQgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICRlcnN0ZXNQaWQgPSAkbnVsbA0K +ICAgICAgICAgICAgICAgICAgICAgICAgJGVyc3Rlc1dlcnQgPSAkbnVsbA0KICAgICAgICAgICAg +ICAgICAgICAgICAgJGVyc3Rlc0RhdHVtID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAg +ICRsZXR6dGVzRGF0dW0gPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHRlV2Vy +dGUtTWFwIGZ1ZXIgTG9nYnVjaC1SZXN0b3JlOiBLZXkgPSAiPGRhdHVtPnw8cGVyc29uSWQ+Ii4N +CiAgICAgICAgICAgICAgICAgICAgICAgICRhbHRlV2VydGUgPSBAe30NCiAgICAgICAgICAgICAg +ICAgICAgICAgICMgc3luY0VpbnRyYWVnZTogcHJvIGdlbXV0aWVydGVyIFplbGxlIGVpbiBFaW50 +cmFnIGZ1ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGVuIExpdmUtU3luYy1DaGFuZ2Ut +TG9nIChGb3JtYXQgd2llIFNpbmdsZS1DZWxsKS4NCiAgICAgICAgICAgICAgICAgICAgICAgICRz +eW5jRWludHJhZWdlID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQog +ICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZSBpbiAkZWludHJhZWdlKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJGRhdHVtID0gW3N0cmluZ10kZS5kYXR1bQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtzdHJpbmddJGUucGVyc29uSWQNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkd2VydCA9IGlmICgkZS5QU09iamVjdC5Qcm9wZXJ0 +aWVzWyd3ZXJ0J10gLWFuZCAkbnVsbCAtbmUgJGUud2VydCkgeyBbc3RyaW5nXSRlLndlcnQgfSBl +bHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRkYXR1bSAt +b3IgLW5vdCAkcGVyc29uSWQpIHsgJGFiZ2VsZWhudCArPSBAeyBkYXR1bSA9ICRkYXR1bTsgcGVy +c29uSWQgPSAkcGVyc29uSWQ7IGdydW5kID0gJ3Vudm9sbHN0YWVuZGlnJyB9OyBjb250aW51ZSB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppZWxQZXJzb24gPSAkcGVyc29uTWFwWyRw +ZXJzb25JZF0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJm +WmVsbGVFZGl0aWVyZW4gJHppZWxQZXJzb24pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRhYmdlbGVobnQgKz0gQHsgZGF0dW0gPSAkZGF0dW07IHBlcnNvbklkID0gJHBlcnNv +bklkOyBncnVuZCA9ICdrZWluLXJlY2h0JyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLmVpbnRyYWVnZS5QU09iamVjdC5Qcm9w +ZXJ0aWVzWyRkYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51 +bmcuZWludHJhZWdlIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkZGF0dW0gLU5vdGVQ +cm9wZXJ0eVZhbHVlIChbUFNDdXN0b21PYmplY3RdQHt9KSAtRm9yY2UNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRlbiBXZXJ0 +IG1lcmtlbiBCRVZPUiB3aXIgZGllIFplbGxlIHVlYmVyc2NocmVpYmVuLg0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICRhbHRlcldlcnQgPSAnJw0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBl +cnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZXJXZXJ0ID0g +W3N0cmluZ10kcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLiRwZXJzb25JZA0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZVdlcnRl +WygiezB9fHsxfSIgLWYgJGRhdHVtLCAkcGVyc29uSWQpXSA9ICRhbHRlcldlcnQNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106OklzTnVsbE9yRW1wdHkoJHdlcnQpKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5laW50cmFlZ2Uu +JGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Q +cm9wZXJ0aWVzLlJlbW92ZSgkcGVyc29uSWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVj +dC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uJHBlcnNvbklkID0gJHdlcnQNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0gfCBBZGQtTWVtYmVyIC1O +b3RlUHJvcGVydHlOYW1lICRwZXJzb25JZCAtTm90ZVByb3BlcnR5VmFsdWUgJHdlcnQgLUZvcmNl +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9rQ291bnQrKw0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGVyc3Rlc1BpZCkgeyAkZXJzdGVz +UGlkID0gJHBlcnNvbklkOyAkZXJzdGVzV2VydCA9ICR3ZXJ0OyAkZXJzdGVzRGF0dW0gPSAkZGF0 +dW0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsZXR6dGVzRGF0dW0gPSAkZGF0dW0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kc3luY0VpbnRyYWVnZS5BZGQoQHsg +ZGF0dW0gPSAkZGF0dW07IHBlcnNvbklkID0gJHBlcnNvbklkOyBhbHQgPSAiJGFsdGVyV2VydCI7 +IG5ldSA9ICIkd2VydCIgfSkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICMgRGF0ZWkgbnVyIHNjaHJlaWJlbiwgd2VubiB0YXRzYWVjaGxpY2ggd2Fz +IGdlYWVuZGVydCB3dXJkZS4NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb2tDb3VudCAt +Z3QgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3Bs +YW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdvayc7IG9rQ291bnQg +PSAkb2tDb3VudDsgYWJnZWxlaG50ID0gJGFiZ2VsZWhudDsgZXJzdGVzUGlkID0gJGVyc3Rlc1Bp +ZDsgZXJzdGVzV2VydCA9ICRlcnN0ZXNXZXJ0OyBlcnN0ZXNEYXR1bSA9ICRlcnN0ZXNEYXR1bTsg +bGV0enRlc0RhdHVtID0gJGxldHp0ZXNEYXR1bTsgYWx0ZVdlcnRlID0gJGFsdGVXZXJ0ZTsgc3lu +Y0VpbnRyYWVnZSA9ICRzeW5jRWludHJhZWdlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS +ZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgaWYgKCRyZXMudHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJy +b3IgJFJlc3BvbnNlICRyZXMubXNnICRyZXMuY29kZTsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICMgTG9nYnVjaCArIExpdmUtU3luYyBOQUNIIGRlbSBMb2NrIChrZWluIGdlc2NoYWNodGVs +dGVzIExvY2spLg0KICAgICAgICAgICAgICAgIGlmICgkcmVzLm9rQ291bnQgLWd0IDApIHsNCiAg +ICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnemVsbGVuLmJ1bGsuZ2VhZW5kZXJ0 +JyBAew0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgICAgPSAkcmVzLmVyc3Rlc1Bp +ZA0KICAgICAgICAgICAgICAgICAgICAgICAgd2VydCAgICAgICAgPSAkcmVzLmVyc3Rlc1dlcnQN +CiAgICAgICAgICAgICAgICAgICAgICAgIGFuemFobCAgICAgID0gJHJlcy5va0NvdW50DQogICAg +ICAgICAgICAgICAgICAgICAgICBlcnN0ZXJUYWcgICA9ICRyZXMuZXJzdGVzRGF0dW0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIGxldHp0ZXJUYWcgID0gJHJlcy5sZXR6dGVzRGF0dW0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIGFiZ2VsZWhudCAgID0gJHJlcy5hYmdlbGVobnQuQ291bnQNCiAg +ICAgICAgICAgICAgICAgICAgICAgICMgUmVzdG9yZS1QYXlsb2FkOiBwcm8gWmVsbGUgZGVyIFdl +cnQgdm9yIGRlciBBZW5kZXJ1bmcuDQogICAgICAgICAgICAgICAgICAgICAgICBhbHRlV2VydGUg +ICA9ICRyZXMuYWx0ZVdlcnRlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgIyBMaXZlLVN5bmM6IHBybyBaZWxsZSBlaW4gJ3plbGxlJy1FaW50cmFnIGlucyBjaGFu +Z2VzLmpzb24uDQogICAgICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFaW50cmFlZ2UgJ3pl +bGxlJyAkcmVzLnN5bmNFaW50cmFlZ2UNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnb2snOyBvayA9ICRyZXMu +b2tDb3VudDsgYWJnZWxlaG50ID0gQCgkcmVzLmFiZ2VsZWhudCkgfQ0KICAgICAgICAgICAgICAg +IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjIFBPU1QgL2FwaS9wbGFudW5n +L2tvbW1lbnRhcg0KICAgICAgICAgICAgIyBIYWVuZ3QgZWluZW4gbmV1ZW4gS29tbWVudGFyIGFu +IGRpZSBMaXN0ZSBmdWVyIChkYXR1bSxwZXJzb25JZCkgYW4uDQogICAgICAgICAgICAjIFNjaGVt +YS1NaWdyYXRpb24gKGxhenkpOiB2b3JoYW5kZW5lciBTdHJpbmcgb2RlciBPYmpla3QtRWludHJh +ZyB3aXJkDQogICAgICAgICAgICAjIGJlaW0gZXJzdGVuIFNjaHJlaWJlbiBpbiBlaW5lIExpc3Rl +IGtvbnZlcnRpZXJ0LiBMZWVyZXIgVGV4dCB3aXJkDQogICAgICAgICAgICAjIGFiZ2VsZWhudCDi +gJQgTG9lc2NoZW4gZWluemVsbmVyIEtvbW1lbnRhcmUgbGFldWZ0IHVlYmVyIGRlbiBERUxFVEUt +DQogICAgICAgICAgICAjIEVuZHB1bmt0IChtaXQgS29tbWVudGFyLUlEKSwgZGFzIExvZXNjaGVu +IGdhbnplciBMaXN0ZW4gaXN0IHVlYmVyDQogICAgICAgICAgICAjIGRpZSBBUEkgbmljaHQgbWVo +ciBtb2VnbGljaCAodmVyc2VoZW50bGljaGVyIFZlcmx1c3QgYXVzZ2VzY2hsb3NzZW4pLg0KICAg +ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2tvbW1lbnRhcicgLWFuZCAkTWV0 +aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVx +dWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk +YSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXR1bSA9ICRh +LmRhdHVtDQogICAgICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0K +ICAgICAgICAgICAgICAgICR0ZXh0ID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQn +XSkgeyAoIiQoJGEudGV4dCkiKS5UcmltKCkgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAg +IGlmICgtbm90ICR0ZXh0KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdMZWVyZXIgS29tbWVudGFyIOKAlCBiaXR0ZSBERUxFVEUgL2FwaS9wbGFudW5nL2tvbW1l +bnRhciBmdWVyIExvZXNjaGVuIHZlcndlbmRlbicgNDAwDQogICAgICAgICAgICAgICAgICAgIGNv +bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgRWRpdC1SZWNodCB2 +b3IgTG9jayBwcnVlZmVuDQogICAgICAgICAgICAgICAgJHBsYW51bmdDaGVjayA9IFJlYWQtSnNv +bk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHBs +YW51bmdDaGVjaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAncGxhbnVuZy5qc29uIG5pY2h0IGdl +ZnVuZGVuJyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkemllbFBlcnNvbiA9ICRu +dWxsDQogICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nQ2hlY2sucGVyc29uZW4pIHsNCiAgICAg +ICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBwIGluIEAoJHBsYW51bmdDaGVjay5wZXJzb25lbikp +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXSRwcC5pZCAtZXEgJHBlcnNv +bklkKSB7ICR6aWVsUGVyc29uID0gJHBwOyBicmVhayB9DQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlpl +bGxlRWRpdGllcmVuICR6aWVsUGVyc29uKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVy +cm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIGZ1ZXIgZGllc2VuIEtvbW1lbnRhcicg +NDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkamV0enQg +PSAoR2V0LURhdGUpLlRvU3RyaW5nKCdvJykgICMgSVNPIDg2MDEgbWl0IFplaXR6b25lDQogICAg +ICAgICAgICAgICAgJGJlbnV0emVyID0gIiREb21haW5cJFVzZXJuYW1lIg0KICAgICAgICAgICAg +ICAgICRuZXVlSWQgPSAna18nICsgKFtEYXRlVGltZU9mZnNldF06Ok5vdy5Ub1VuaXhUaW1lTWls +bGlzZWNvbmRzKCkpICsgJ18nICsgKEdldC1SYW5kb20gLU1heGltdW0gOTk5OTkpDQogICAgICAg +ICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJG51bGwgPSBJbnZva2UtV2l0aEZp +bGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5n +ID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoJG51bGwgLWVxICRwbGFudW5nKSB7IHJldHVybiAkbnVsbCB9DQogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50 +YXJlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyB8IEFkZC1NZW1i +ZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2tvbW1lbnRhcmUnIC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3 +LU9iamVjdCBQU09iamVjdCkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0 +LlByb3BlcnRpZXNbJGRhdHVtXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFu +dW5nLmtvbW1lbnRhcmUgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRkYXR1bSAtTm90 +ZVByb3BlcnR5VmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIC1Gb3JjZQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBBa3R1ZWxsZSBMaXN0ZSBo +ZXJhdXN6aWVoZW4gKyBnZ2YuIGF1cyBBbHRzY2hlbWEgbWlncmllcmVuLg0KICAgICAgICAgICAg +ICAgICAgICAgICAgIyBMaXN0ZSBpc3QgY2hyb25vbG9naXNjaCAoYWVsdGVzdGUgenVlcnN0KSwg +ZGVyIG5ldWUNCiAgICAgICAgICAgICAgICAgICAgICAgICMgRWludHJhZyB3aXJkIGhpbnRlbiBh +bmdlaGFlbmd0Lg0KICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlID0gTmV3LU9iamVjdCBT +eXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0W29iamVjdF0NCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVz +WyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdm9yaCA9ICRwbGFu +dW5nLmtvbW1lbnRhcmUuJGRhdHVtLiRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkdm9yaCAtaXMgW3N0cmluZ10gLWFuZCAkdm9yaCkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAjIEFsdGVyIFN0cmluZy1FaW50cmFnIOKAlCBlaW4gRWxlbWVudCBv +aG5lIE1ldGENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlLkFkZChbUFND +dXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICAg +ICAgICAgICA9ICdrX2xlZ2FjeV8nICsgKEdldC1SYW5kb20gLU1heGltdW0gOTk5OTkpDQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICAgICAgICAgPSAkdm9yaA0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gJG51bGwNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9ICRudWxsDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHwgT3V0LU51bGwNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHZvcmggLWlzIFthcnJheV0gLW9yICgkdm9yaCAt +aXMgW1N5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYWJsZV0gLWFuZCAtbm90ICgkdm9yaCAtaXMg +W3N0cmluZ10pKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNjaG9uIGVp +biBBcnJheSAobmV1ZXMgU2NoZW1hKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm +b3JlYWNoICgkZSBpbiBAKCR2b3JoKSkgeyAkbGlzdGUuQWRkKCRlKSB8IE91dC1OdWxsIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHZvcmggLWFuZCAkdm9yaC5QU09i +amVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIyBBbHRlcyBPYmpla3QtU2NoZW1hIHsgdGV4dCwgZ2VhZW5kZXJ0QW0sIGdlYWVuZGVydFZv +biB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtaWdJZCA9IGlmICgkdm9yaC5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydpZCddKSB7IFtzdHJpbmddJHZvcmguaWQgfSBlbHNlIHsgJ2tf +bGVnYWN5XycgKyAoR2V0LVJhbmRvbSAtTWF4aW11bSA5OTk5OSkgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkbGlzdGUuQWRkKFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgID0gJG1pZ0lkDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICAgICAgICAgPSBbc3RyaW5nXSR2b3Jo +LnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydEFtICA9 +IGlmICgkdm9yaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWFlbmRlcnRBbSddKSAgeyAkdm9yaC5n +ZWFlbmRlcnRBbSB9ICBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgZ2VhZW5kZXJ0Vm9uID0gaWYgKCR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dl +YWVuZGVydFZvbiddKSB7ICR2b3JoLmdlYWVuZGVydFZvbiB9IGVsc2UgeyAkbnVsbCB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAkbGlzdGUuQWRkKFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlkICAgICAgICAgICA9ICRuZXVlSWQNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB0ZXh0ICAgICAgICAgPSAkdGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGdlYWVuZGVydEFtICA9ICRqZXR6dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVu +ZGVydFZvbiA9ICRiZW51dHplcg0KICAgICAgICAgICAgICAgICAgICAgICAgfSkgfCBPdXQtTnVs +bA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBadXJ1ZWNrIGFscyBBcnJheSAoUFMtU2VyaWFs +aXNpZXJ1bmcpDQogICAgICAgICAgICAgICAgICAgICAgICAkYXJyID0gQCgkbGlzdGUuVG9BcnJh +eSgpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmtvbW1lbnRhcmUuJGRh +dHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLiRwZXJzb25JZCA9ICRhcnINCiAg +ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlO +YW1lICRwZXJzb25JZCAtTm90ZVByb3BlcnR5VmFsdWUgJGFyciAtRm9yY2UNCiAgICAgICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3Qg +J3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAg +ICAgcmV0dXJuICRudWxsDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9 +IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2Nr +LUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICMgUmVkYWN0aW9uIHdpZSBiZWkga29tbWVudGFyLmdlbG9lc2NodCAoU3ByaW50IDEg +4oCUIFNpY2hlcmhlaXRzLQ0KICAgICAgICAgICAgICAgICMgTm90YnJlbXNlIDIwMjYtMDUtMjgp +OiBWb2xsdGV4dCBibGVpYnQgaW4gcGxhbnVuZy5qc29uIChkb3J0DQogICAgICAgICAgICAgICAg +IyBlZGl0aWVyYmFyL2xvZXNjaGJhciksIGRhcyBMb2didWNoIGJla29tbXQgbnVyIFZvcnNjaGF1 +ICsgTGFlbmdlLg0KICAgICAgICAgICAgICAgICMgVmVybWVpZGV0IFBJSS1FY2hvLCB3ZW5uIGVp +biBLb21tZW50YXIgc3BhZXRlciBnZWxvZXNjaHQgd2lyZA0KICAgICAgICAgICAgICAgICMgYWJl +ciBpbSBMb2cgaW1tZXIgbm9jaCBrb21wbGV0dCBsaWVzdCBzdGVodC4NCiAgICAgICAgICAgICAg +ICAkdGV4dFZvcnNjaGF1ID0gJHRleHQNCiAgICAgICAgICAgICAgICBpZiAoJHRleHRWb3JzY2hh +dS5MZW5ndGggLWd0IDQwKSB7ICR0ZXh0Vm9yc2NoYXUgPSAkdGV4dFZvcnNjaGF1LlN1YnN0cmlu +ZygwLCA0MCkgKyAn4oCmJyB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAna29t +bWVudGFyLmhpbnp1Z2VmdWVndCcgQHsNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgICAg +ICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgICAgID0gJHBlcnNvbklk +DQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklkICAgPSAkbmV1ZUlkDQogICAgICAgICAg +ICAgICAgICAgIHRleHRWb3JzY2hhdSAgPSAkdGV4dFZvcnNjaGF1DQogICAgICAgICAgICAgICAg +ICAgIHRleHRMYWVuZ2UgICAgPSAkdGV4dC5MZW5ndGgNCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VpbnRyYWcgJ2tvbW1lbnRhcicgQHsNCiAgICAgICAg +ICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29u +SWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAga29tbWVudGFySWQgPSAkbmV1ZUlk +DQogICAgICAgICAgICAgICAgICAgICMgTGl2ZS1TeW5jIGJyYXVjaHQgZGVuIFRleHQgbmljaHQg +4oCUIG5hZWNoc3RlciBSZW5kZXIgbGFlZHQNCiAgICAgICAgICAgICAgICAgICAgIyBpaG4gYXVz +IHBsYW51bmcuanNvbi4gTnVyIE1ldGFkYXRlbiBmdWVyIEFrdGl2aXRhZXRzLUFuemVpZ2UuDQog +ICAgICAgICAgICAgICAgICAgIHplaXRzdGVtcGVsID0gJGpldHp0DQogICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAg +ICAgICAgICAgICAgc3RhdHVzICAgICAgID0gJ2hpbnp1Z2VmdWVndCcNCiAgICAgICAgICAgICAg +ICAgICAga29tbWVudGFySWQgID0gJG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICBnZWFlbmRl +cnRBbSAgPSAkamV0enQNCiAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0Vm9uID0gJGJlbnV0 +emVyDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg +ICAgICB9DQoNCiAgICAgICAgICAgICMgREVMRVRFIC9hcGkvcGxhbnVuZy9rb21tZW50YXINCiAg +ICAgICAgICAgICMgQm9keTogeyBkYXR1bSwgcGVyc29uSWQsIGtvbW1lbnRhcklkIH0NCiAgICAg +ICAgICAgICMgQmVyZWNodGlndW5nOiBTdXBlclVzZXIgb2RlciBHZXNhbXR2ZXJhbnR3b3J0bGlj +aGUuIEFuZGVyZSBSb2xsZW4NCiAgICAgICAgICAgICMgYmVrb21tZW4gNDAzIOKAlCBhdWNoIGRl +ciBWZXJmYXNzZXIgc2VsYnN0IGRhcmYgbmljaHQgbG9lc2NoZW4NCiAgICAgICAgICAgICMgKGJl +d3Vzc3RlIERlc2lnbmVudHNjaGVpZHVuZzogS29tbWVudGFyLVZlcmxhdWYgaXN0IENocm9uaWsp +Lg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2tvbW1lbnRhcicgLWFu +ZCAkTWV0aG9kIC1lcSAnREVMRVRFJykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1C +b2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAg +ICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRh +dHVtID0gJGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbc3RyaW5nXSRhLnBl +cnNvbklkDQogICAgICAgICAgICAgICAgJGtvbW1lbnRhcklkID0gW3N0cmluZ10kYS5rb21tZW50 +YXJJZA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRkYXR1bSAtb3IgLW5vdCAkcGVyc29uSWQg +LW9yIC1ub3QgJGtvbW1lbnRhcklkKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICdkYXR1bSwgcGVyc29uSWQgdW5kIGtvbW1lbnRhcklkIHNpbmQgUGZsaWNodCcg +NDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkciA9IEdl +dC1SZWNodGUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJHIuaXN0U3VwZXJVc2VyIC1vciAk +ci5pc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F +cnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgdW5kIEdlc2FtdHZlcmFudHdvcnRsaWNoZSBk +dWVyZmVuIEtvbW1lbnRhcmUgbG9lc2NoZW4nIDQwMw0KICAgICAgICAgICAgICAgICAgICBjb250 +aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZ2Vsb2VzY2h0ZXJUZXh0 +ID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkZXJn +ID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAg +ICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVuZyAtb3IgLW5vdCAkcGxhbnVu +Zy5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50YXJlJ10pIHsgcmV0dXJuIEB7IHRleHQgPSAk +bnVsbCB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLmtvbW1l +bnRhcmUuUFNPYmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51 bGwgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVuZy5rb21tZW50 -YXJlLlBTT2JqZWN0LlByb3BlcnRpZXNbJGRhdHVtXSkgeyByZXR1cm4gQHsgdGV4dCA9ICRudWxs -IH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcua29tbWVudGFy -ZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7IHJldHVybiBAeyB0ZXh0 -ID0gJG51bGwgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkdm9yaCA9ICRwbGFudW5nLmtv -bW1lbnRhcmUuJGRhdHVtLiRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBDb21w -YXQgZnVlciBBbHQtRm9ybWF0ZSAoU3ByaW50IDMg4oCUIERyaWZ0L1JvYnVzdGhlaXQNCiAgICAg -ICAgICAgICAgICAgICAgICAgICMgMjAyNi0wNS0yOCk6IENsaWVudCBrZW5uemVpY2huZXQgU3Ry -aW5nLSBvZGVyIFNpbmdsZS0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgT2JqZWN0LW9obmUt -SUQgRWludHJhZWdlIGluIGtvbW1lbnRhckxpc3RlKCkgbWl0DQogICAgICAgICAgICAgICAgICAg -ICAgICAjIFNlbnRpbmVsLUlEICdrX2xlZ2FjeScuIERFTEVURSBtaXQgZGllc2VyIElEIGdlZ2Vu -DQogICAgICAgICAgICAgICAgICAgICAgICAjIGVpbmVuIEFsdC1FaW50cmFnID0ga29tcGxldHRl -ciBFaW50cmFnIHdpcmQgZW50ZmVybnQNCiAgICAgICAgICAgICAgICAgICAgICAgICMgKE1pZ3Jh -dGlvbiArIExvZXNjaHVuZyBpbiBlaW5lbSBTY2hyaXR0KS4NCiAgICAgICAgICAgICAgICAgICAg -ICAgICR0cmVmZmVyID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICRuZXVlTGlzdGUg -PSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3Rbb2JqZWN0XQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKCR2b3JoIC1pcyBbc3RyaW5nXSAtYW5kICR2b3JoKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRrb21tZW50YXJJZCAtZXEgJ2tfbGVn -YWN5Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHJlZmZlciA9IFtQU0N1 -c3RvbU9iamVjdF1AeyB0ZXh0ID0gJHZvcmggfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0ZXh0 -ID0gJG51bGw7IGZlaGxlciA9ICdrb21tZW50YXJOaWNodEdlZnVuZGVuJyB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkbGlzdGUgPSBAKCkNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJHZvcmggLWlzIFthcnJheV0gLW9yICgkdm9yaCAtaXMgW1N5c3RlbS5D -b2xsZWN0aW9ucy5JRW51bWVyYWJsZV0gLWFuZCAtbm90ICgkdm9yaCAtaXMgW3N0cmluZ10pKSkg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGlzdGUgPSBAKCR2b3JoKQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkdm9yaCAtYW5kICR2b3JoLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkYWx0SWQgPSBpZiAoJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1snaWQnXSkgeyBbc3RyaW5n -XSR2b3JoLmlkIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKC1ub3QgJGFsdElkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoJGtvbW1lbnRhcklkIC1lcSAna19sZWdhY3knKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJHRyZWZmZXIgPSAkdm9yaA0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICByZXR1cm4gQHsgdGV4dCA9ICRudWxsOyBmZWhsZXIgPSAna29tbWVudGFyTmljaHRH -ZWZ1bmRlbicgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJGxpc3RlID0gQCgkdm9yaCkNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAkdHJlZmZlcikgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBmb3JlYWNoICgkZSBpbiAkbGlzdGUpIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRlaWQgPSBpZiAoJGUgLWFuZCAkZS5QU09iamVjdC5Qcm9wZXJ0aWVz -WydpZCddKSB7IFtzdHJpbmddJGUuaWQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRlaWQgLWVxICRrb21tZW50YXJJZCkgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cmVmZmVyID0gJGUNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJG5ldWVMaXN0ZS5BZGQoJGUpIHwgT3V0LU51bGwNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICR0cmVmZmVyKSB7IHJl -dHVybiBAeyB0ZXh0ID0gJG51bGw7IGZlaGxlciA9ICdrb21tZW50YXJOaWNodEdlZnVuZGVuJyB9 -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbmV1ZUxpc3RlLkNvdW50IC1lcSAwKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBMZXR6dGVyIEtvbW1lbnRhciBlbnRmZXJu -dCAtPiBQcm9wZXJ0eSBrb21wbGV0dCByYXVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -JHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBl -cnNvbklkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTGVlcmVyIFRhZ2VzLUJ1Y2tl -dCBhdWZyYWV1bWVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhZ1Byb3BzID0gQCgk -cGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzKQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgkdGFnUHJvcHMuQ291bnQgLWVxIDApIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9w -ZXJ0aWVzLlJlbW92ZSgkZGF0dW0pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS4kcGVyc29uSWQgPSBAKCRuZXVlTGlzdGUuVG9B -cnJheSgpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQog -ICAgICAgICAgICAgICAgICAgICAgICAkZW50ZmVybnRUZXh0ID0gaWYgKCR0cmVmZmVyLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgeyBbc3RyaW5nXSR0cmVmZmVyLnRleHQgfSBlbHNlIHsg -JycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHRleHQgPSAkZW50ZmVybnRU -ZXh0IH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGVy -Zy5mZWhsZXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZXJnLmZlaGxlciAtZXEg -J2tvbW1lbnRhck5pY2h0R2VmdW5kZW4nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -U2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tvbW1lbnRhciBtaXQgZGllc2VyIElEIG5pY2h0IGdlZnVu -ZGVuJyA0MDQ7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGdlbG9lc2NodGVyVGV4dCA9ICRlcmcu -dGV4dA0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5k -LUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBSZWRhY3Rpb24gKFNwcmludCAxIOKAlCBT -aWNoZXJoZWl0cy1Ob3RicmVtc2UgMjAyNi0wNS0yOCk6DQogICAgICAgICAgICAgICAgIyBQSUkt -U2NodXR6LiBGcnVlaGVyIGxhbmRldGUgZGVyIHZvbGxzdGFlbmRpZ2UgS29tbWVudGFyLVRleHQg -aW0NCiAgICAgICAgICAgICAgICAjIExvZ2J1Y2gg4oCUIHdlbm4gZGVyIEtvbW1lbnRhciBLcmFu -a2hlaXRzLS9EaXN6aXBsaW5hci1JbmZvIGVudGhpZWx0LA0KICAgICAgICAgICAgICAgICMgbGVi -dGUgc2llIG5hY2ggJ0xvZXNjaGVuJyB3ZWl0ZXIgaW0gTG9nLiBKZXR6dCBudXIgTGFlbmdlICsg -a3VyemVyDQogICAgICAgICAgICAgICAgIyBBdXN6dWcgKDQwIFplaWNoZW4pLCBnZW51ZyBmdWVy -IE5hY2h2b2xsemllaGJhcmtlaXQgb2huZSBWb2xsdGV4dC4NCiAgICAgICAgICAgICAgICAkdGV4 -dFZvcnNjaGF1ID0gJycNCiAgICAgICAgICAgICAgICBpZiAoJGdlbG9lc2NodGVyVGV4dCkgew0K -ICAgICAgICAgICAgICAgICAgICAka3VyeiA9ICRnZWxvZXNjaHRlclRleHQNCiAgICAgICAgICAg -ICAgICAgICAgaWYgKCRrdXJ6Lkxlbmd0aCAtZ3QgNDApIHsgJGt1cnogPSAka3Vyei5TdWJzdHJp -bmcoMCwgNDApICsgJ+KApicgfQ0KICAgICAgICAgICAgICAgICAgICAkdGV4dFZvcnNjaGF1ID0g -JGt1cnoNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHRleHRMYWVuZ2UgPSBp -ZiAoJGdlbG9lc2NodGVyVGV4dCkgeyAkZ2Vsb2VzY2h0ZXJUZXh0Lkxlbmd0aCB9IGVsc2UgeyAw -IH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdrb21tZW50YXIuZ2Vsb2VzY2h0 -JyBAew0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICAgICAgID0gJGRhdHVtDQogICAgICAg -ICAgICAgICAgICAgIHBlcnNvbklkICAgICAgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAg -ICAga29tbWVudGFySWQgICA9ICRrb21tZW50YXJJZA0KICAgICAgICAgICAgICAgICAgICB0ZXh0 -Vm9yc2NoYXUgID0gJHRleHRWb3JzY2hhdQ0KICAgICAgICAgICAgICAgICAgICB0ZXh0TGFlbmdl -ICAgID0gJHRleHRMYWVuZ2UNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgQWRk -LUNoYW5nZUxvZ0VpbnRyYWcgJ2tvbW1lbnRhcicgQHsNCiAgICAgICAgICAgICAgICAgICAgZGF0 -dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgPSAkcGVyc29uSWQN -CiAgICAgICAgICAgICAgICAgICAga29tbWVudGFySWQgPSAka29tbWVudGFySWQNCiAgICAgICAg -ICAgICAgICAgICAgIyBMaXZlLVN5bmMtQ2hhbm5lbCBicmF1Y2h0IGRlbiBUZXh0IG5pY2h0IOKA -lCBCcm93c2VyIGxhZWR0DQogICAgICAgICAgICAgICAgICAgICMgYmVpIG5hZWNoc3RlbSBSZW5k -ZXIgZWggYXVzIHBsYW51bmcuanNvbiAod28gZGVyIEVpbnRyYWcNCiAgICAgICAgICAgICAgICAg -ICAgIyB3ZWcgaXN0KS4gSGllciBudXIgTWV0YWRhdGVuIGZ1ZXIgQWt0aXZpdGFldHMtQW56ZWln -ZS4NCiAgICAgICAgICAgICAgICAgICAgbmV1ICAgICAgPSAnJw0KICAgICAgICAgICAgICAgICAg -ICB6ZWl0c3RlbXBlbCA9IChHZXQtRGF0ZSkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9 -ICdnZWxvZXNjaHQnOyBrb21tZW50YXJJZCA9ICRrb21tZW50YXJJZCB9DQogICAgICAgICAgICAg -ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBQRVJTT05F -TiA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wZXJzb25lbicgLWFuZCAk -TWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RB -ZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5m -cmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJG5ldSA9ICRi -b2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICMgUmVhZC1Nb2RpZnktV3Jp -dGUgYXRvbWFyIGluIGRlciBEYXRlaS1TcGVycmUuIFdpY2h0aWcgbmljaHQgbnVyDQogICAgICAg -ICAgICAgICAgIyBnZWdlbiBMb3N0IFVwZGF0ZXMsIHNvbmRlcm4gZ2VnZW4gZGllIG1heElkLVJh -Y2U6IHp3ZWkgcGFyYWxsZWxlDQogICAgICAgICAgICAgICAgIyBQZXJzb25lbi1BbmxhZ2VuIHd1 -ZXJkZW4gc29uc3QgZGllc2VsYmUgbWF4SWQgbGVzZW4gdW5kIElERU5USVNDSEUNCiAgICAgICAg -ICAgICAgICAjIElEcyB2ZXJnZWJlbiAoZG9wcGVsdGUgUGVyc29uZW4tSURzID0ga29ycnVwdGVy -IFN0YXRlKS4NCiAgICAgICAgICAgICAgICAkcGVyc1JlcyA9ICRudWxsDQogICAgICAgICAgICAg -ICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkcGVyc1JlcyA9IEludm9rZS1XaXRoRmlsZUxvY2sg -J3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2Jq -ZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgJG1heElkID0gMA0KICAgICAgICAg -ICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7IGlmICgkcC5pZCAtZ3Qg -JG1heElkKSB7ICRtYXhJZCA9ICRwLmlkIH0gfQ0KICAgICAgICAgICAgICAgICRuZXVlSWQgPSAk -bWF4SWQgKyAxDQoNCiAgICAgICAgICAgICAgICAjIEVpbnJlaWh1bmdzLUxvZ2lrOiAidW50ZW4i -IChEZWZhdWx0KSwgInZvciIgb2RlciAibmFjaCIgZWluZXIgUmVmZXJlbnpwZXJzb24NCiAgICAg -ICAgICAgICAgICAkZWlucmVpaGVuID0gJ3VudGVuJw0KICAgICAgICAgICAgICAgIGlmICgkbmV1 -LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnJlaWhlbiddIC1hbmQgJG5ldS5laW5yZWloZW4pIHsg -JGVpbnJlaWhlbiA9IChbc3RyaW5nXSRuZXUuZWlucmVpaGVuKS5Ub0xvd2VyKCkgfQ0KICAgICAg -ICAgICAgICAgICRyZWZJZCA9ICRudWxsDQogICAgICAgICAgICAgICAgaWYgKCRuZXUuUFNPYmpl -Y3QuUHJvcGVydGllc1sncmVmZXJlbnpJZCddIC1hbmQgJG51bGwgLW5lICRuZXUucmVmZXJlbnpJ -ZCkgeyAkcmVmSWQgPSBbaW50XSRuZXUucmVmZXJlbnpJZCB9DQoNCiAgICAgICAgICAgICAgICAk -emllbFBvcyA9ICRudWxsDQogICAgICAgICAgICAgICAgaWYgKCgkZWlucmVpaGVuIC1lcSAndm9y -JyAtb3IgJGVpbnJlaWhlbiAtZXEgJ25hY2gnKSAtYW5kICRudWxsIC1uZSAkcmVmSWQpIHsNCiAg -ICAgICAgICAgICAgICAgICAgJHJlZlBvcyA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgIGZv -cmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoW2ludF0kcC5pZCAtZXEgJHJlZklkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJHJlZlBvcyA9IGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddIC1hbmQg -JHAucG9zaXRpb24pIHsgW2ludF0kcC5wb3NpdGlvbiB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHJlZlBv -cykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHppZWxQb3MgPSBpZiAoJGVpbnJlaWhlbiAt -ZXEgJ3ZvcicpIHsgJHJlZlBvcyB9IGVsc2UgeyAkcmVmUG9zICsgMSB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAjIFBvc2l0aW9uZW4gYWIgemllbFBvcyB1bSAxIG5hY2ggaGludGVuIHNjaGll -YmVuDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJz -b25lbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcCA9IGlmICgkcC5QU09iamVj -dC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddIC1hbmQgJHAucG9zaXRpb24pIHsgW2ludF0kcC5wb3Np -dGlvbiB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBwIC1n -ZSAkemllbFBvcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNP -YmplY3QuUHJvcGVydGllc1sncG9zaXRpb24nXSkgeyAkcC5wb3NpdGlvbiA9ICRwcCArIDEgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1O -b3RlUHJvcGVydHlOYW1lICdwb3NpdGlvbicgLU5vdGVQcm9wZXJ0eVZhbHVlICgkcHAgKyAxKSAt -Rm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICBpZiAoJG51bGwgLWVxICR6aWVsUG9zKSB7DQogICAgICAgICAgICAgICAgICAg -ICRtYXhQb3MgPSAwDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5n -LnBlcnNvbmVuKSB7ICRwb3MgPSBpZiAoJHAucG9zaXRpb24pIHsgW2ludF0kcC5wb3NpdGlvbiB9 -IGVsc2UgeyAwIH07IGlmICgkcG9zIC1ndCAkbWF4UG9zKSB7ICRtYXhQb3MgPSAkcG9zIH0gfQ0K -ICAgICAgICAgICAgICAgICAgICAkemllbFBvcyA9ICRtYXhQb3MgKyAxDQogICAgICAgICAgICAg -ICAgfQ0KDQogICAgICAgICAgICAgICAgJHBlcnNvbiA9IFtvcmRlcmVkXUB7DQogICAgICAgICAg -ICAgICAgICAgIGlkID0gJG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICBha3RpdiA9IGlmICgk -bmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2FrdGl2J10pIHsgJG5ldS5ha3RpdiB9IGVsc2UgeyAk -dHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIG5hbWUgPSAkbmV1Lm5hbWUNCiAgICAgICAgICAg -ICAgICAgICAgdm9ybmFtZSA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUn -XSkgeyAkbmV1LnZvcm5hbWUgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBkaWVu -c3RncmFkID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZGllbnN0Z3JhZCddKSB7ICRu -ZXUuZGllbnN0Z3JhZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGZ1bmt0aW9u -ID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZnVua3Rpb24nXSkgeyAkbmV1LmZ1bmt0 -aW9uIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgZ3J1cHBlID0gaWYgKCRuZXUu -UFNPYmplY3QuUHJvcGVydGllc1snZ3J1cHBlJ10pIHsgJG5ldS5ncnVwcGUgfSBlbHNlIHsgJycg -fQ0KICAgICAgICAgICAgICAgICAgICBvZSA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNb -J29lJ10pIHsgJG5ldS5vZSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGRpZW5z -dG51bW1lciA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2RpZW5zdG51bW1lciddKSB7 -ICRuZXUuZGllbnN0bnVtbWVyIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgdGVs -ZWZvbiA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RlbGVmb24nXSkgeyAkbmV1LnRl -bGVmb24gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICR6aWVs -UG9zDQogICAgICAgICAgICAgICAgICAgIGVtYWlsID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVy -dGllc1snZW1haWwnXSkgeyAkbmV1LmVtYWlsIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAg -ICAgICAgbndLZW5udW5nID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snbndLZW5udW5n -J10pIHsgJG5ldS5ud0tlbm51bmcgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBn -ZWJ1cnRzZGF0dW0gPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWJ1cnRzZGF0dW0n -XSkgeyAkbmV1LmdlYnVydHNkYXR1bSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAg -IGVsRGdsUXVhbGlmaXppZXJ0ID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZWxEZ2xR -dWFsaWZpemllcnQnXSkgeyBbYm9vbF0kbmV1LmVsRGdsUXVhbGlmaXppZXJ0IH0gZWxzZSB7ICRm -YWxzZSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgTWFya2VyIGZ1ZXIg -UGVyc29uZW4sIGRpZSBwZXIgRXhjZWwtSW1wb3J0IGZyaXNjaCBhbmdlbGVndA0KICAgICAgICAg -ICAgICAgICMgd3VyZGVuLiBQZXJzb25hbHZlcndhbHR1bmcgYmxlbmRldCBzaWUgaW0gTmV1aW1w -b3J0LUJsb2NrDQogICAgICAgICAgICAgICAgIyBvYmVuIGVpbiwgYmlzIGRhcyBGbGFnIG1hbnVl -bGwgd2VnZ2VzZXR6dCB3aXJkIChFcmxlZGlndC0NCiAgICAgICAgICAgICAgICAjIEJ1dHRvbikg -b2RlciBkYXMgbGV0enRlIFBmbGljaHRmZWxkIChEaWVuc3RncnVwcGUpIGdlcGZsZWd0DQogICAg -ICAgICAgICAgICAgIyBpc3QgdW5kIGRlciBVc2VyIGF1ZiAiQmxvY2sgbGVlcmVuIiBrbGlja3Qu -DQogICAgICAgICAgICAgICAgaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snaW1wb3J0TmV1 -QW0nXSAtYW5kICRuZXUuaW1wb3J0TmV1QW0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHBlcnNv -blsnaW1wb3J0TmV1QW0nXSA9IFtzdHJpbmddJG5ldS5pbXBvcnROZXVBbQ0KICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZy5wZXJzb25lbiArPSBbUFNDdXN0b21PYmpl -Y3RdJHBlcnNvbg0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNv -bicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIHJldHVybiBAeyBuZXVlSWQg -PSAkbmV1ZUlkOyB6aWVsUG9zID0gJHppZWxQb3M7IGVpbnJlaWhlbiA9ICRlaW5yZWloZW4gfQ0K -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAg -ICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNv -bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRy -YWcgJ3BlcnNvbi5hbmdlbGVndCcgQHsgcGVyc29uSWQgPSAkcGVyc1Jlcy5uZXVlSWQ7IG5hbWUg -PSAiJCgkbmV1LnZvcm5hbWUpICQoJG5ldS5uYW1lKSIuVHJpbSgpOyBlaW5yZWloZW4gPSAkcGVy -c1Jlcy5laW5yZWloZW47IHBvc2l0aW9uID0gJHBlcnNSZXMuemllbFBvcyB9DQogICAgICAgICAg -ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnYW5nZWxlZ3QnOyBp -ZCA9ICRwZXJzUmVzLm5ldWVJZDsgcG9zaXRpb24gPSAkcGVyc1Jlcy56aWVsUG9zIH0NCiAgICAg -ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRo -IC1tYXRjaCAnXi9hcGkvcGVyc29uZW4vKFxkKykkJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICRwZXJzb25JZCA9IFtpbnRdJE1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkYm9k -eSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7 -IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0N -CiAgICAgICAgICAgICAgICAkdXBkYXRlID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAg -ICAgICAgICAgICAgIyBBdWRpdC1QaGFzZSBBLjMgKDIwMjYtMDUtMjEpOiBQcml2aWxlZ2llbi1T -Y2h1dHouIFJlaW5lDQogICAgICAgICAgICAgICAgIyBGYWNoYXVmc2ljaHQtQWRtaW5zIChzZWhl -bi5hZG1pbmlzdHJhdGlvbj10cnVlLCBhYmVyIGtlaW4gU1UpDQogICAgICAgICAgICAgICAgIyBk -dWVyZmVuIFN0YW1tZGF0ZW4gZWRpdGllcmVuLCBhYmVyIEtFSU5FIFNpY2h0YmFya2VpdHMtDQog -ICAgICAgICAgICAgICAgIyBPdmVycmlkZXMgKGBzZWhlbmApIG9kZXIgZWRpdGllci1SZWNodGUg -KGBlZGl0UmVjaHRlYCkgc2V0emVuDQogICAgICAgICAgICAgICAgIyDigJQgc29uc3Qga29lbm50 -ZW4gc2llIHNpY2ggTG9nYnVjaC0vU3RhdGlzdGlrLVNpY2h0IHNlbGJzdA0KICAgICAgICAgICAg -ICAgICMgZnJlaXNjaGFsdGVuLiBQZXIgRGV2VG9vbHMtbWFuaXB1bGllcnRlcyBQYXlsb2FkIGFi -ZmFuZ2VuLg0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsN -CiAgICAgICAgICAgICAgICAgICAgaWYgKCR1cGRhdGUuUFNPYmplY3QuUHJvcGVydGllc1snc2Vo -ZW4nXSkgICAgICB7ICR1cGRhdGUuUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ3NlaGVuJykg -fQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWydl -ZGl0UmVjaHRlJ10pIHsgJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgnZWRpdFJl -Y2h0ZScpIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHB1dFJlcyA9ICRu -dWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkcHV0UmVzID0gSW52 -b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgJHBsYW51 -bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkZ2Vm -dW5kZW4gICA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICRhbHRlV2VydGUgID0gQHt9DQogICAg -ICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAnJw0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRw -IGluICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcC5pZCAt -ZXEgJHBlcnNvbklkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9ICgo -IiQoJHAudm9ybmFtZSkgJCgkcC5uYW1lKSIpLlRyaW0oKSkNCiAgICAgICAgICAgICAgICAgICAg -ICAgIGZvcmVhY2ggKCRwcm9wIGluICR1cGRhdGUuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcHJvcC5OYW1lIC1uZSAnaWQnKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbHRlV2VydGVbJHByb3AuTmFtZV0gPSBpZiAo -JHAuUFNPYmplY3QuUHJvcGVydGllc1skcHJvcC5OYW1lXSkgeyAkcC4oJHByb3AuTmFtZSkgfSBl -bHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNP -YmplY3QuUHJvcGVydGllc1skcHJvcC5OYW1lXSkgeyAkcC4oJHByb3AuTmFtZSkgPSAkcHJvcC5W -YWx1ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1N -ZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHByb3AuTmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJHBy -b3AuVmFsdWUgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gPSAk -dHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZ2VmdW5kZW4p -IHsgcmV0dXJuIEB7IGdlZnVuZGVuID0gJGZhbHNlIH0gfQ0KICAgICAgICAgICAgICAgIFdyaXRl -LUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAg -ICAgICAgIHJldHVybiBAeyBnZWZ1bmRlbiA9ICR0cnVlOyBhbHRlV2VydGUgPSAkYWx0ZVdlcnRl -OyBwZXJzb25OYW1lID0gJHBlcnNvbk5hbWUgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9u -c2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgIGlmICgtbm90ICRwdXRSZXMuZ2VmdW5kZW4pIHsgU2VuZC1FcnJvciAk -UmVzcG9uc2UgIlBlcnNvbiAkcGVyc29uSWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICRhbHRlV2VydGUgID0gJHB1dFJlcy5hbHRlV2VydGUNCiAgICAg -ICAgICAgICAgICAkcGVyc29uTmFtZSA9ICRwdXRSZXMucGVyc29uTmFtZQ0KDQogICAgICAgICAg -ICAgICAgIyBEaWZmLURpY3Qg4oCUIG51ciBGZWxkZXIsIGluIGRlbmVuIHNpY2ggZGVyIFdlcnQg -dGF0c2FlY2hsaWNoDQogICAgICAgICAgICAgICAgIyBnZWFlbmRlcnQgaGF0LiBKU09OLXN0YWJp -bGUgVmVyZ2xlaWNoc2Jhc2lzLg0KICAgICAgICAgICAgICAgICRnZWFlbmRlcnQgPSBbb3JkZXJl -ZF1Ae30NCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHJvcCBpbiAkdXBkYXRlLlBTT2JqZWN0 -LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwcm9wLk5hbWUgLWVxICdp -ZCcpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAkYWx0VmFsICA9ICRhbHRlV2Vy -dGVbJHByb3AuTmFtZV0NCiAgICAgICAgICAgICAgICAgICAgJG5ldVZhbCAgPSAkcHJvcC5WYWx1 -ZQ0KICAgICAgICAgICAgICAgICAgICAkYWx0SnNvbiA9ICgkYWx0VmFsIHwgQ29udmVydFRvLUpz -b24gLUNvbXByZXNzIC1EZXB0aCA4KQ0KICAgICAgICAgICAgICAgICAgICAkbmV1SnNvbiA9ICgk -bmV1VmFsIHwgQ29udmVydFRvLUpzb24gLUNvbXByZXNzIC1EZXB0aCA4KQ0KICAgICAgICAgICAg -ICAgICAgICBpZiAoJGFsdEpzb24gLW5lICRuZXVKc29uKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAkZ2VhZW5kZXJ0WyRwcm9wLk5hbWVdID0gW29yZGVyZWRdQHsgYWx0ID0gJGFsdFZhbDsg -bmV1ID0gJG5ldVZhbCB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9 -DQoNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdwZXJzb24uZ2VhZW5kZXJ0JyAo -W29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgID0gJHBlcnNvbklkDQog -ICAgICAgICAgICAgICAgICAgIG5hbWUgICAgICA9ICRwZXJzb25OYW1lDQogICAgICAgICAgICAg -ICAgICAgIGdlYWVuZGVydCA9ICRnZWFlbmRlcnQNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAg -ICAgICAgICAgICMgSGlud2Vpcy1UcmlnZ2VyOiBJZGVudGl0YWV0cy1BZW5kZXJ1bmcgKG53S2Vu -bnVuZyAvIGVtYWlsKSBiZWtvbW10DQogICAgICAgICAgICAgICAgIyBlaW5lbiBJbi1BcHAtSGlu -d2VpcyBmdWVyIFNVICsgR2VzYW10dmVyYW50d29ydGxpY2hlLiBQcm8gRmVsZCBlaW4NCiAgICAg -ICAgICAgICAgICAjIGVpZ2VuZXIgRWludHJhZywgZGFtaXQgZGFzIE1vZGFsIGxlc2JhciBibGVp -YnQuDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZlbGQgaW4gQCgnbndLZW5udW5nJywgJ2Vt -YWlsJykpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRnZWFlbmRlcnQuQ29udGFpbnMoJGZl -bGQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZGlmZiA9ICRnZWFlbmRlcnRbJGZlbGRd -DQogICAgICAgICAgICAgICAgICAgICAgICBOZXctSGlud2VpcyAnaWRlbnRpdGFldF9nZWFlbmRl -cnQnIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbl9pZCAg -ID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uX25hbWUgPSAk -cGVyc29uTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlbGQgICAgICAgID0gJGZl -bGQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcl93ZXJ0ICA9ICIkKCRkaWZmLmFs -dCkiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV1ZXJfd2VydCAgPSAiJCgkZGlmZi5u -ZXUpIg0KICAgICAgICAgICAgICAgICAgICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikg -fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2FrdHVh -bGlzaWVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAg -ICAgICAgICAjIERFTEVURSAvYXBpL3BlcnNvbmVuL3tpZH0gICAgICAgICAgICAtPiBTb2Z0LURl -bGV0ZSAoZ2Vsb2VzY2h0QW0gZ2VzZXR6dCwgUGVyc29uIGJsZWlidCBpbSBEYXRlbnNhdHogZnVl -ciBQYXBpZXJrb3JiLVJ1ZWNraG9sdW5nKQ0KICAgICAgICAgICAgIyBERUxFVEUgL2FwaS9wZXJz -b25lbi97aWR9P2VuZGd1ZWx0aWc9MSAtPiBIYXJkLURlbGV0ZSAoUGVyc29uIGtvbXBsZXR0IGVu -dGZlcm5lbiwgRWludHJhZWdlL0tvbW1lbnRhcmUgdmVyd2Fpc2VuKQ0KICAgICAgICAgICAgIyBW -b3IgZGVtIFNvZnQtRGVsZXRlIHdlcmRlbiBpbSBzZWxiZW4gWnVnIGJlcmVpdHMgUGFwaWVya29y -Yi1FaW50cmFlZ2UgYXVmZ2VyYWV1bXQsIGRpZSBhZWx0ZXIgYWxzDQogICAgICAgICAgICAjIGFk -bWluLnBhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nIChEZWZhdWx0IDMwIFRhZ2UpIHNpbmQuIFNv -IGJsZWlidCBkZXIgRGF0ZW5zYXR6IHNjaGxhbmssIG9obmUNCiAgICAgICAgICAgICMgZWluZW4g -c2VwYXJhdGVuIENyb24tSm9iIHp1IGJyYXVjaGVuLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1t -YXRjaCAnXi9hcGkvcGVyc29uZW4vKFxkKykkJyAtYW5kICRNZXRob2QgLWVxICdERUxFVEUnKSB7 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICRwZXJzb25JZCA9IFtpbnRdJE1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkZW5k -Z3VlbHRpZyA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgIGlmICgkUmVxdWVzdC5VcmwuUXVlcnkp -IHsNCiAgICAgICAgICAgICAgICAgICAgJHEgPSBbU3lzdGVtLldlYi5IdHRwVXRpbGl0eV06OlBh -cnNlUXVlcnlTdHJpbmcoJFJlcXVlc3QuVXJsLlF1ZXJ5KQ0KICAgICAgICAgICAgICAgICAgICAk -ZW5kZ3VlbHRpZyA9IChbc3RyaW5nXSRxWydlbmRndWVsdGlnJ10pIC1lcSAnMScNCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgJGRlbFJlcyA9ICRudWxsDQogICAgICAgICAgICAg -ICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkZGVsUmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAn -cGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmpl -Y3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkYWRtaW4gICA9IFJlYWQtSnNvbk9i -amVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAkYXVmYmV3YWhydW5nID0gMzANCiAg -ICAgICAgICAgICAgICBpZiAoJGFkbWluIC1hbmQgJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNb -J3BhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5 -IHsgJGF1ZmJld2FocnVuZyA9IFtpbnRdJGFkbWluLnBhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5n -IH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGpldHp0ID0g -KEdldC1EYXRlKS5Ub1N0cmluZygnbycpDQogICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAn -Jw0KICAgICAgICAgICAgICAgICRnZWZ1bmRlbiA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICRu -ZXVlUGVyc29uZW4gPSBAKCkNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVu -Zy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJHAuaWQgLWVxICRwZXJzb25J -ZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGdlZnVuZGVuID0gJHRydWUNCiAgICAgICAg -ICAgICAgICAgICAgICAgICRwZXJzb25OYW1lID0gKCgiJCgkcC52b3JuYW1lKSAkKCRwLm5hbWUp -IikuVHJpbSgpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlbmRndWVsdGlnKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIYXJkLURlbGV0ZTogdWViZXJzcHJpbmdlbiwg -UGVyc29uIGZsaWVndCByYXVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUN -CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlbG9lc2NodEFtJ10pIHsgJHAuZ2Vs -b2VzY2h0QW0gPSAkamV0enQgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAk -cCB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2dlbG9lc2NodEFtJyAtTm90ZVByb3Bl -cnR5VmFsdWUgJGpldHp0IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5l -dWVQZXJzb25lbiArPSAkcA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBBdXRvLVB1cmdlOiBT -b2Z0LURlbGV0ZWQtUGVyc29uZW4sIGRlcmVuIGdlbG9lc2NodEFtIGFlbHRlcg0KICAgICAgICAg -ICAgICAgICAgICAgICAgIyBhbHMgJGF1ZmJld2FocnVuZyBUYWdlIGlzdCwgd2VyZGVuIGhpZXIg -ZW5kZ3VlbHRpZyBlbnRmZXJudC4NCiAgICAgICAgICAgICAgICAgICAgICAgICRwdXJnZSA9ICRm -YWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNb -J2dlbG9lc2NodEFtJ10gLWFuZCAkcC5nZWxvZXNjaHRBbSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbHRlciA9 -IFtkYXRldGltZV0kcC5nZWxvZXNjaHRBbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoKE5ldy1UaW1lU3BhbiAtU3RhcnQgJGFsdGVyIC1FbmQgKEdldC1EYXRlKSkuVG90YWxE -YXlzIC1ndCAkYXVmYmV3YWhydW5nKSB7ICRwdXJnZSA9ICR0cnVlIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcHVyZ2UpIHsgJG5ldWVQZXJzb25lbiArPSAk -cCB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgJGdlZnVuZGVuKSB7IHJldHVybiBAeyBnZWZ1bmRlbiA9ICRmYWxzZSB9 -IH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZy5wZXJzb25lbiA9IFtvYmplY3RbXV1AKCRuZXVl -UGVyc29uZW4pDQogICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u -JyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgcmV0dXJuIEB7IGdlZnVuZGVu -ID0gJHRydWU7IHBlcnNvbk5hbWUgPSAkcGVyc29uTmFtZTsgamV0enQgPSAkamV0enQgfQ0KICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAg -ICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRp -bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRkZWxSZXMu -Z2VmdW5kZW4pIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgIlBlcnNvbiAkcGVyc29uSWQgbmljaHQg -Z2VmdW5kZW4iIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwZXJzb25OYW1lID0g -JGRlbFJlcy5wZXJzb25OYW1lDQogICAgICAgICAgICAgICAgJGpldHp0ID0gJGRlbFJlcy5qZXR6 -dA0KICAgICAgICAgICAgICAgIGlmICgkZW5kZ3VlbHRpZykgew0KICAgICAgICAgICAgICAgICAg -ICBXcml0ZS1Mb2dFaW50cmFnICdwZXJzb24uZW5kZ3VlbHRpZy5nZWxvZXNjaHQnIEB7IHBlcnNv -bklkID0gJHBlcnNvbklkOyBuYW1lID0gJHBlcnNvbk5hbWUgfQ0KICAgICAgICAgICAgICAgIH0g -ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5pbi5w -YXBpZXJrb3JiJyBAeyBwZXJzb25JZCA9ICRwZXJzb25JZDsgbmFtZSA9ICRwZXJzb25OYW1lOyBn -ZWxvZXNjaHRBbSA9ICRqZXR6dCB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCc7IG1vZHVz -ID0gaWYgKCRlbmRndWVsdGlnKSB7ICdlbmRndWVsdGlnJyB9IGVsc2UgeyAncGFwaWVya29yYicg -fSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAg -IGlmICgkUGF0aCAtZXEgJy9hcGkvcGVyc29uZW4vcmVpaGVuZm9sZ2UnIC1hbmQgJE1ldGhvZCAt -ZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsg -U2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBn -cm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHJlaWhlbmZvbGdlID0gJGJv -ZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg -ICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0K -ICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHIgaW4gJHJlaWhlbmZvbGdlKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29u -ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLmlkIC1lcSAkci5p -ZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0 -LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10pIHsgJHAucG9zaXRpb24gPSAkci5wb3NpdGlvbiB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVy -IC1Ob3RlUHJvcGVydHlOYW1lICdwb3NpdGlvbicgLU5vdGVQcm9wZXJ0eVZhbHVlICRyLnBvc2l0 -aW9uIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQog -ICAgICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0gY2F0Y2gg -ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVy -OiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -V3JpdGUtTG9nRWludHJhZyAncGVyc29uZW4ucmVpaGVuZm9sZ2UuZ2VhZW5kZXJ0JyBAe30NCiAg -ICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdha3R1 -YWxpc2llcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAjID09PT09IEhJTldFSVNFIChJbi1BcHAtQmFubmVyL01vZGFsLVN5c3RlbSkg -PT09PT0NCiAgICAgICAgICAgICMgR0VUICAvYXBpL2hpbndlaXNlICAgICAgICAgICAgLT4gb2Zm -ZW5lIEhpbndlaXNlIGZ1ZXIgZGVuIGVpbmdlbG9nZ3RlbiBVc2VyDQogICAgICAgICAgICAjIFBP -U1QgL2FwaS9oaW53ZWlzZS97aWR9L2tlbm50bmlzIC0+IEtlbm50bmlzbmFobWUgc2V0emVuDQog -ICAgICAgICAgICAjIEdFVCAgL2FwaS9oaW53ZWlzZS91ZWJlcnNpY2h0IC0+IFNVLW9ubHksIHZv -bGxzdGFlbmRpZ2UgU2ljaHQgaW5rbC4gTGVzZS1TdGF0dXMNCiAgICAgICAgICAgIGlmICgkUGF0 -aCAtZXEgJy9hcGkvaGlud2Vpc2UnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAg -ICAgICAgICAjIEdhdGVkOiBudXIgRW1wZmFlbmdlciAoU1Ugb2RlciBHZXNhbXR2ZXJhbnR3b3J0 -bGljaCkgZHVlcmZlbiB1ZWJlcmhhdXB0IGZyYWdlbg0KICAgICAgICAgICAgICAgICRyID0gR2V0 -LVJlY2h0ZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkci5pc3RTdXBlclVzZXIgLW9yICRy -LmlzdEdlc2FtdHZlcmFudHdvcnRsaWNoKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpz -b25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNlID0gQCgpIH0NCiAgICAgICAgICAgICAgICAg -ICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgSW52b2tlLUhp -bndlaXNQcnVuaW5nDQogICAgICAgICAgICAgICAgJGggPSBSZWFkLUpzb25PYmplY3QgJ2hpbndl -aXNlLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkaCAtb3IgLW5vdCAkaC5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydoaW53ZWlzZSddKSB7DQogICAgICAgICAgICAgICAgICAgIFNl -bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgaGlud2Vpc2UgPSBAKCkgfQ0KICAgICAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkb2Zm -ZW4gPSBAKCkNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZWludHJhZyBpbiBAKCRoLmhpbndl -aXNlKSkgew0KICAgICAgICAgICAgICAgICAgICAkaXN0RW1wZmFlbmdlciA9ICRmYWxzZQ0KICAg -ICAgICAgICAgICAgICAgICAkaXN0R2VsZXNlbiAgICA9ICRmYWxzZQ0KICAgICAgICAgICAgICAg -ICAgICBmb3JlYWNoICgkcCBpbiAkZWludHJhZy5rZW5udG5pc25haG1lbi5QU09iamVjdC5Qcm9w -ZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1NYXRjaEtlbm51bmcg -KFtzdHJpbmddJHAuTmFtZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXN0RW1w -ZmFlbmdlciA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1u -ZSAkcC5WYWx1ZSkgeyAkaXN0R2VsZXNlbiA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkaXN0RW1wZmFlbmdlciAtYW5kIC1ub3Qg -JGlzdEdlbGVzZW4pIHsgJG9mZmVuICs9ICRlaW50cmFnIH0NCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9IFtv -YmplY3RbXV0kb2ZmZW4gfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9 -DQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2FwaS9oaW53ZWlzZS8oXGQrKS9rZW5u -dG5pcyQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGhpbndl -aXNJZCA9IFtpbnRdJE1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUN -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJHIuaXN0U3VwZXJVc2VyIC1vciAkci5pc3RHZXNh -bXR2ZXJhbnR3b3J0bGljaCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz -cG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0OmhpbndlaXNLZW5udG5pc0dlc2V0enQgPSAkZmFs -c2UNCiAgICAgICAgICAgICAgICAkc2NyaXB0OmhpbndlaXNLZW5udG5pc1R5cCA9ICRudWxsDQog -ICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAnaGlud2Vpc2UuanNvbicgew0KICAg -ICAgICAgICAgICAgICAgICAkaCA9IFJlYWQtSnNvbk9iamVjdCAnaGlud2Vpc2UuanNvbicNCiAg -ICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkaCAtb3IgLW5vdCAkaC5QU09iamVjdC5Q -cm9wZXJ0aWVzWydoaW53ZWlzZSddKSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgIGZv -cmVhY2ggKCRlaW50cmFnIGluIEAoJGguaGlud2Vpc2UpKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoW2ludF0kZWludHJhZy5pZCAtbmUgJGhpbndlaXNJZCkgeyBjb250aW51ZSB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAjIEVyc3QgZGVuIE1hdGNoLVNsb3QgZXJtaXR0ZWxuLCBk -YW5uIGF1c3NlcmhhbGIgZGVyDQogICAgICAgICAgICAgICAgICAgICAgICAjIFByb3BlcnR5LUVu -dW1lcmF0aW9uIGluLXBsYWNlIHNldHplbiAoUFMgNS4xIG1hZyBkYXMNCiAgICAgICAgICAgICAg -ICAgICAgICAgICMgTW9kaWZpemllcmVuIHdhZWhyZW5kIGZvcmVhY2ggbmljaHQgaW1tZXIpLg0K -ICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoTmFtZSA9ICRudWxsDQogICAgICAgICAgICAg -ICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkZWludHJhZy5rZW5udG5pc25haG1lbi5QU09iamVj -dC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtTWF0 -Y2hLZW5udW5nIChbc3RyaW5nXSRwLk5hbWUpKSB7ICRtYXRjaE5hbWUgPSAkcC5OYW1lOyBicmVh -ayB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoJG1hdGNoTmFtZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cyA9IChHZXQt -RGF0ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ3l5eXktTU0tZGRUSEg6bW06c3NaJykN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWludHJhZy5rZW5udG5pc25haG1lbiB8IEFk -ZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJG1hdGNoTmFtZSAtTm90ZVByb3BlcnR5VmFsdWUg -JHRzIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6aGlud2Vpc0tl -bm50bmlzR2VzZXR6dCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRl -aW50cmFnLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3R5cCddKSB7ICRzY3JpcHQ6aGlud2Vpc0tlbm50 -bmlzVHlwID0gW3N0cmluZ10kZWludHJhZy50eXAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICBpZiAoJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNHZXNldHp0KSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdoaW53ZWlzZS5qc29u -JyAkaCB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9 -IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAkZ2VzZXR6dCA9IFtib29sXSRzY3JpcHQ6aGlu -d2Vpc0tlbm50bmlzR2VzZXR6dA0KICAgICAgICAgICAgICAgICRrZW5udG5pc1R5cCA9ICRzY3Jp -cHQ6aGlud2Vpc0tlbm50bmlzVHlwDQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2Vu -bnRuaXNHZXNldHp0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2Vu -bnRuaXNUeXAgPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRnZXNldHp0KSB7DQog -ICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICJIaW53ZWlzICRoaW53ZWlz -SWQgbmljaHQgZ2VmdW5kZW4gb2RlciBuaWNodCBmdWVyIFNpZSBiZXN0aW1tdCIgNDA0OyBjb250 -aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkbG9nRmVsZGVyID0gQHsg -aGlud2Vpc0lkID0gJGhpbndlaXNJZCB9DQogICAgICAgICAgICAgICAgaWYgKCRrZW5udG5pc1R5 -cCkgeyAkbG9nRmVsZGVyWyd0eXAnXSA9ICRrZW5udG5pc1R5cCB9DQogICAgICAgICAgICAgICAg -V3JpdGUtTG9nRWludHJhZyAnaGlud2Vpcy5rZW5udG5pcycgJGxvZ0ZlbGRlcg0KICAgICAgICAg -ICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2tlbm50bmlzX2dl -c2V0enQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9oaW53ZWlzZS91ZWJlcnNpY2h0JyAtYW5kICRNZXRo -b2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJV -c2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlcicgNDAzOyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgSW52b2tlLUhpbndlaXNQcnVuaW5nDQogICAgICAgICAgICAg -ICAgJGggPSBSZWFkLUpzb25PYmplY3QgJ2hpbndlaXNlLmpzb24nDQogICAgICAgICAgICAgICAg -aWYgKCRudWxsIC1lcSAkaCAtb3IgLW5vdCAkaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydoaW53ZWlz -ZSddKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg -aGlud2Vpc2UgPSBAKCkgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhp -bndlaXNlID0gW29iamVjdFtdXUAoJGguaGlud2Vpc2UpIH0NCiAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IE1JVFRFSUxVTkdFTiAo -U3ByaW50IEQtM2IsIDIwMjYtMDUtMjkpID09PT09DQogICAgICAgICAgICAjIFZvbSBTVSBtYW51 -ZWxsIGdlcGZsZWd0ZXMgSGlud2Vpcy1Nb2RhbC1TeXN0ZW0gKHNlcGFyYXQgdm9uDQogICAgICAg -ICAgICAjIC9hcGkvaGlud2Vpc2UsIGRhcyBpc3QgbnVyIGZ1ZXIgU3lzdGVtLUVyZWlnbmlzc2Ug -U1UvR1YpLg0KICAgICAgICAgICAgIyBTY2hlbWEgKyBGaWx0ZXJ1bmctTG9naWsgZ2VzcGllZ2Vs -dCBhdXMgZGV2L3NlcnZlci5weToNCiAgICAgICAgICAgICMgICBfbWl0dGVpbHVuZ2VuX2Z1ZXJf -YWt0dWVsbGVuX3VzZXIoKSBiencuIF9wZXJzb25fYXVzX3BpZCgpLg0KICAgICAgICAgICAgaWYg -KCRQYXRoIC1lcSAnL2FwaS9taXR0ZWlsdW5nZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsN -CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG1pdHRlaWx1bmdl -biA9IChHZXQtTWl0dGVpbHVuZ2VuRnVlckFrdHVlbGxlblVzZXIpIH0NCiAgICAgICAgICAgICAg -ICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw -aS9taXR0ZWlsdW5nZW4vYWxsZScgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAg -ICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJ051ciBTdXBlclVzZXInIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRtID0g -UmVhZC1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAkbGlz -dGUgPSBAKCkNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRtIC1hbmQgJG0uUFNPYmpl -Y3QuUHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJGxp -c3RlID0gQCgkbS5taXR0ZWlsdW5nZW4pDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgbWl0dGVpbHVuZ2VuID0gW29iamVjdFtd -XSRsaXN0ZSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbWl0dGVpbHVuZ2VuJyAtYW5kICRNZXRob2QgLWVx -ICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikp -IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBNaXR0ZWlsdW5n -ZW4gYW5sZWdlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHJhdyA9IFJlYWQt -Qm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRyYXcpIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ0JvZHkgZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -IHRyeSB7ICRib2R5ID0gJHJhdyB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJy -b3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAjIFNlcnZlci1zZWl0aWdlIFNhbml0aXNpZXJ1bmcgKFN0b3JlZC1YU1MpOiB0aXRl -bCArIHRleHQgd2VyZGVuDQogICAgICAgICAgICAgICAgIyBpbSBDbGllbnQgdmlhIGlubmVySFRN -TCBnZXJlbmRlcnQuDQogICAgICAgICAgICAgICAgJHRpdGVsID0gQ29udmVydFRvLVNhZmVSaWNo -SHRtbCAoKFtzdHJpbmddKCRib2R5LnRpdGVsKSkuVHJpbSgpKQ0KICAgICAgICAgICAgICAgICR0 -ZXh0ICA9IENvbnZlcnRUby1TYWZlUmljaEh0bWwgKChbc3RyaW5nXSgkYm9keS50ZXh0KSkuVHJp -bSgpKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICR0aXRlbCkgeyBTZW5kLUVycm9yICRSZXNw -b25zZSAnVGl0ZWwgaXN0IFBmbGljaHRmZWxkJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAkdGV4dCkgIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1RleHQgaXN0IFBm -bGljaHRmZWxkJyAgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHJhbmQgPSAtam9p -biAoKDQ4Li41NykgKyAoOTcuLjEyMikgfCBHZXQtUmFuZG9tIC1Db3VudCA2IHwgRm9yRWFjaC1P -YmplY3QgeyBbY2hhcl0kXyB9KQ0KICAgICAgICAgICAgICAgICRtcyA9IFtpbnQ2NF0oW0RhdGVU -aW1lT2Zmc2V0XTo6VXRjTm93LlRvVW5peFRpbWVNaWxsaXNlY29uZHMoKSkNCiAgICAgICAgICAg -ICAgICAkbmV1ZUlkID0gIm1fJHttc31fJHtyYW5kfSINCiAgICAgICAgICAgICAgICAkZW1wZkRl -ZmF1bHQgPSBbcHNjdXN0b21vYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgYWxsZSA9ICR0 -cnVlOyBwZXJzb25lbiA9IEAoKTsgZ3J1cHBlbiA9IEAoKTsgcm9sbGVuID0gQCgpDQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRlbXBmID0gaWYgKCRib2R5LlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ2VtcGZhZW5nZXInXSkgeyAkYm9keS5lbXBmYWVuZ2VyIH0gZWxzZSB7ICRlbXBm -RGVmYXVsdCB9DQogICAgICAgICAgICAgICAgJG5ldSA9IFtwc2N1c3RvbW9iamVjdF1Aew0KICAg -ICAgICAgICAgICAgICAgICBpZCAgICAgICAgICAgPSAkbmV1ZUlkDQogICAgICAgICAgICAgICAg -ICAgIHRpdGVsICAgICAgICA9ICR0aXRlbA0KICAgICAgICAgICAgICAgICAgICB0ZXh0ICAgICAg -ICAgPSAkdGV4dA0KICAgICAgICAgICAgICAgICAgICB0aHVtYm5haWwgICAgPSBpZiAoJGJvZHku -UFNPYmplY3QuUHJvcGVydGllc1sndGh1bWJuYWlsJ10pIHsgJGJvZHkudGh1bWJuYWlsIH0gZWxz -ZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgcGRmICAgICAgICAgID0gaWYgKCRib2R5 -LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BkZiddKSAgICAgICB7ICRib2R5LnBkZiB9ICAgICAgIGVs -c2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgICAgICA9IGlmICgkYm9k -eS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0cmlnZ2VyJ10gLWFuZCAkYm9keS50cmlnZ2VyKSB7IFtz -dHJpbmddJGJvZHkudHJpZ2dlciB9IGVsc2UgeyAnZWlubWFsJyB9DQogICAgICAgICAgICAgICAg -ICAgIGJpc0RhdHVtICAgICA9IGlmICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWydiaXNEYXR1 -bSddKSAgeyAkYm9keS5iaXNEYXR1bSB9ICBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAg -ICAgICBlbXBmYWVuZ2VyICAgPSAkZW1wZg0KICAgICAgICAgICAgICAgICAgICBlcnN0ZWxsdEFt -ICAgPSAoR2V0LURhdGUpLlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5nKCd5eXl5LU1NLWRkVEhI -Om1tOnNzWicpDQogICAgICAgICAgICAgICAgICAgIGVyc3RlbGx0Vm9uICA9IChHZXQtQWt0dWVs -bGVyQmVudXR6ZXIpDQogICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydEFtICA9ICRudWxsDQog -ICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9ICRudWxsDQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ21pdHRlaWx1bmdlbi5qc29u -JyB7DQogICAgICAgICAgICAgICAgICAgICRtID0gUmVhZC1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5n -ZW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkbSkgeyAkbSA9IFtw -c2N1c3RvbW9iamVjdF1AeyBtaXR0ZWlsdW5nZW4gPSBAKCk7IGdlbGVzZW4gPSBbcHNjdXN0b21v -YmplY3RdQHt9IH0gfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Q -cm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG0g -fCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lIG1pdHRlaWx1bmdlbiAtTm90ZVByb3BlcnR5 -VmFsdWUgQCgpIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -ICAgIGlmICgtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlbGVzZW4nXSkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgJG0gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lIGdlbGVz -ZW4gLU5vdGVQcm9wZXJ0eVZhbHVlIChbcHNjdXN0b21vYmplY3RdQHt9KSAtRm9yY2UNCiAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAjIG5ldWVzdGUgb2Jlbg0KICAg -ICAgICAgICAgICAgICAgICAkbS5taXR0ZWlsdW5nZW4gPSBAKCRuZXUpICsgQCgkbS5taXR0ZWls -dW5nZW4pDQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ21pdHRlaWx1bmdl -bi5qc29uJyAkbSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAg -ICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnbWl0dGVpbHVuZy5hbmdlbGVndCcgQHsgaWQg -PSAkbmV1ZUlkOyB0aXRlbCA9ICR0aXRlbCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2Jq -ZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnYW5nZWxlZ3QnOyBtaXR0ZWlsdW5nID0gJG5ldSB9 -DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlm -ICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21pdHRlaWx1bmdlbi8oW1x3LV0rKSQnIC1hbmQgJE1ldGhv -ZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVz -ZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyJyA0MDM7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICAkbWlkID0gJE1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAk -cmF3ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHJhdykg -eyBTZW5kLUVycm9yICRSZXNwb25zZSAnQm9keSBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgdHJ5IHsgJGJvZHkgPSAkcmF3IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNo -IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuID0gJGZhbHNlDQog -ICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nWmllbCA9ICRudWxsDQogICAgICAgICAg -ICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAnbWl0dGVpbHVuZ2VuLmpzb24nIHsNCiAgICAgICAg -ICAgICAgICAgICAgJG0gPSBSZWFkLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAg -ICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRtIC1vciAtbm90ICRtLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ21pdHRlaWx1bmdlbiddKSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAg -IGZvcmVhY2ggKCRlaW50cmFnIGluIEAoJG0ubWl0dGVpbHVuZ2VuKSkgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgaWYgKFtzdHJpbmddJGVpbnRyYWcuaWQgLW5lICRtaWQpIHsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZlbGQgaW4gJ3RpdGVsJywndGV4 -dCcsJ3RodW1ibmFpbCcsJ3BkZicsJ3RyaWdnZXInLCdiaXNEYXR1bScsJ2VtcGZhZW5nZXInKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRp -ZXNbJGZlbGRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3ZXJ0ID0gJGJv -ZHkuJGZlbGQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZmVsZCAtZXEg -J3RpdGVsJyAtb3IgJGZlbGQgLWVxICd0ZXh0JykgLWFuZCAoJHdlcnQgLWlzIFtzdHJpbmddKSkg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdlcnQgPSBDb252ZXJ0VG8t -U2FmZVJpY2hIdG1sICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVpbnRyYWcgfCBBZGQtTWVtYmVyIC1Ob3Rl -UHJvcGVydHlOYW1lICRmZWxkIC1Ob3RlUHJvcGVydHlWYWx1ZSAkd2VydCAtRm9yY2UNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAkZWludHJhZyB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5h -bWUgZ2VhZW5kZXJ0QW0gIC1Ob3RlUHJvcGVydHlWYWx1ZSAoKEdldC1EYXRlKS5Ub1VuaXZlcnNh -bFRpbWUoKS5Ub1N0cmluZygneXl5eS1NTS1kZFRISDptbTpzc1onKSkgLUZvcmNlDQogICAgICAg -ICAgICAgICAgICAgICAgICAkZWludHJhZyB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUg -Z2VhZW5kZXJ0Vm9uIC1Ob3RlUHJvcGVydHlWYWx1ZSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKSAt -Rm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVu -ID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ1ppZWwg -PSAkZWludHJhZw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5k -ZW4pIHsgV3JpdGUtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nICRtIHwgT3V0LU51bGwg -fQ0KICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIGlmICgtbm90 -ICRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQt -RXJyb3IgJFJlc3BvbnNlICJNaXR0ZWlsdW5nICRtaWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29u -dGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHppZWwgPSAkc2NyaXB0 -Om1pdHRlaWx1bmdaaWVsDQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5k -ZW4gPSAkZmFsc2U7ICRzY3JpcHQ6bWl0dGVpbHVuZ1ppZWwgPSAkbnVsbA0KICAgICAgICAgICAg -ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21pdHRlaWx1bmcuZ2VhZW5kZXJ0JyBAeyBpZCA9ICRtaWQg -fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0g -J2dlYWVuZGVydCc7IG1pdHRlaWx1bmcgPSAkemllbCB9DQogICAgICAgICAgICAgICAgY29udGlu -dWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21p -dHRlaWx1bmdlbi8oW1x3LV0rKSQnIC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScpIHsNCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJl -c3BvbnNlICdOdXIgU3VwZXJVc2VyJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk -bWlkID0gJE1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdHZWxv -ZXNjaHQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdtaXR0 -ZWlsdW5nZW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVj -dCAnbWl0dGVpbHVuZ2VuLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg -JG0gLW9yIC1ub3QgJG0uUFNPYmplY3QuUHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10pIHsgcmV0 -dXJuIH0NCiAgICAgICAgICAgICAgICAgICAgJHZvcmhlciA9IEAoJG0ubWl0dGVpbHVuZ2VuKQ0K -ICAgICAgICAgICAgICAgICAgICAkbmFjaGhlciA9IEAoJHZvcmhlciB8IFdoZXJlLU9iamVjdCB7 -IFtzdHJpbmddJF8uaWQgLW5lICRtaWQgfSkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCR2b3Jo -ZXIuQ291bnQgLWVxICRuYWNoaGVyLkNvdW50KSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAg -ICAgICRtLm1pdHRlaWx1bmdlbiA9ICRuYWNoaGVyDQogICAgICAgICAgICAgICAgICAgICMgZ2Vs -ZXNlbi1FaW50cmFlZ2UgZnVlciBkaWVzZSBNaXR0ZWlsdW5nIGF1ZnJhZXVtZW4NCiAgICAgICAg -ICAgICAgICAgICAgaWYgKCRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlbGVzZW4nXSkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gQCgkbS5nZWxlc2VuLlBTT2JqZWN0 -LlByb3BlcnRpZXMpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlZhbHVl -LlBTT2JqZWN0LlByb3BlcnRpZXNbJG1pZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJHAuVmFsdWUuUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJG1pZCkNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnbWl0 -dGVpbHVuZ2VuLmpzb24nICRtIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlw -dDptaXR0ZWlsdW5nR2Vsb2VzY2h0ID0gJHRydWUNCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51 -bGwNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkc2NyaXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQp -IHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgIk1pdHRlaWx1bmcg -JG1pZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQgPSAkZmFsc2UNCiAgICAg -ICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdtaXR0ZWlsdW5nLmdlbG9lc2NodCcgQHsgaWQg -PSAkbWlkIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 -YXR1cyA9ICdnZWxvZXNjaHQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvbWl0dGVpbHVuZ2VuL3VwbG9hZCDigJQgU1Ut -b25seSwgQmlsZCAoMiBNQikgb2RlciBQREYgKDEwIE1CKQ0KICAgICAgICAgICAgIyBCb2R5OiB7 -ImFydCI6ICJiaWxkInwicGRmIiwgImRhdGVpbmFtZSI6ICJ4LnBuZyIsICJkYXRhVXJsIjogImRh -dGE6Li4uIn0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbWl0dGVpbHVuZ2VuL3Vw -bG9hZCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJV -c2VyIGR1ZXJmZW4gTWl0dGVpbHVuZ3MtQW5oYWVuZ2UgaG9jaGxhZGVuJyA0MDM7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICAjIDE0IE1CIE1heFNpemUsIHdlaWwgMTBNQiBQREYgYmFzZTY0 -LWNvZGllcnQgfjEzLjQgTUIgUGF5bG9hZCB3aXJkDQogICAgICAgICAgICAgICAgJHJhdyA9IFJl -YWQtQm9keSAkUmVxdWVzdCAtTWF4U2l6ZSAxNE1CDQogICAgICAgICAgICAgICAgaWYgKC1ub3Qg -JHJhdykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcyAobWF4IDE0IE1C -KScgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsgJGJvZHkgPSAkcmF3IHwg -Q29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRp -Z2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRhcnQgPSAoW3N0cmlu -Z10kYm9keS5hcnQpLlRvTG93ZXIoKQ0KICAgICAgICAgICAgICAgICRkYXRhVXJsID0gW3N0cmlu -Z10kYm9keS5kYXRhVXJsDQogICAgICAgICAgICAgICAgaWYgKCRhcnQgLW5lICdiaWxkJyAtYW5k -ICRhcnQgLW5lICdwZGYnKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdhcnQgbXVzcyAiYmlsZCIgb2RlciAicGRmIiBzZWluJyA0MDA7IGNvbnRpbnVlDQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRleHQgPSAkbnVsbDsgJG1heEJ5dGVzID0g -MA0KICAgICAgICAgICAgICAgIGlmICgkYXJ0IC1lcSAnYmlsZCcpIHsNCiAgICAgICAgICAgICAg -ICAgICAgaWYgKCRkYXRhVXJsIC1tYXRjaCAnXmRhdGE6aW1hZ2UvKGpwZWd8anBnfHBuZ3x3ZWJw -KTtiYXNlNjQsJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGV4dCA9ICgkTWF0Y2hlc1sx -XSAtcmVwbGFjZSAnanBlZycsJ2pwZycpDQogICAgICAgICAgICAgICAgICAgICAgICAkbWF4Qnl0 -ZXMgPSAyICogMTAyNCAqIDEwMjQNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCaWxkOiBlcndhcnRldCBk -YXRhOmltYWdlLyhqcGVnfHBuZ3x3ZWJwKTtiYXNlNjQsLi4uJyA0MDA7IGNvbnRpbnVlDQogICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg -ICAgICAgICBpZiAoJGRhdGFVcmwgLWxpa2UgJ2RhdGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwq -Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGV4dCA9ICdwZGYnDQogICAgICAgICAgICAg -ICAgICAgICAgICAkbWF4Qnl0ZXMgPSAxMCAqIDEwMjQgKiAxMDI0DQogICAgICAgICAgICAgICAg -ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25z -ZSAnUERGOiBlcndhcnRldCBkYXRhOmFwcGxpY2F0aW9uL3BkZjtiYXNlNjQsLi4uJyA0MDA7IGNv -bnRpbnVlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgJGJhc2U2NCA9ICRkYXRhVXJsIC1yZXBsYWNlICdeZGF0YTpbXjtdKztiYXNlNjQs -JywgJycNCiAgICAgICAgICAgICAgICB0cnkgeyAkYnl0ZXMgPSBbU3lzdGVtLkNvbnZlcnRdOjpG -cm9tQmFzZTY0U3RyaW5nKCRiYXNlNjQpIH0NCiAgICAgICAgICAgICAgICBjYXRjaCB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlIGJhc2U2NC1EYXRlbicgNDAwOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgaWYgKCRieXRlcy5MZW5ndGggLWd0ICRtYXhCeXRlcykgew0KICAg -ICAgICAgICAgICAgICAgICAkbGltaXRLYiA9IFtpbnRdKCRtYXhCeXRlcyAvIDEwMjQpDQogICAg -ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICIkYXJ0IHp1IGdyb3NzIChtYXgg -JGxpbWl0S2IgS0IpIiA0MTM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICR1cGxvYWREaXIgPSBKb2luLVBhdGggJERhdGFEaXIgJ3VwbG9hZHMnIHwgSm9pbi1Q -YXRoIC1DaGlsZFBhdGggJ21pdHRlaWx1bmdlbicNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo -VGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkdXBsb2FkRGlyKSkgew0KICAgICAgICAgICAgICAgICAg -ICB0cnkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1QYXRoICR1cGxvYWREaXIgLUZv -cmNlIHwgT3V0LU51bGwgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAkcmFuZCA9IC1qb2luICgoNDguLjU3KSArICg5Ny4uMTIyKSB8IEdldC1SYW5kb20gLUNv -dW50IDYgfCBGb3JFYWNoLU9iamVjdCB7IFtjaGFyXSRfIH0pDQogICAgICAgICAgICAgICAgJG1z -ID0gW2ludDY0XShbRGF0ZVRpbWVPZmZzZXRdOjpVdGNOb3cuVG9Vbml4VGltZU1pbGxpc2Vjb25k -cygpKQ0KICAgICAgICAgICAgICAgICRmaWxlbmFtZSA9ICJtXyR7bXN9XyR7cmFuZH0uJGV4dCIN -CiAgICAgICAgICAgICAgICAkemllbFBmYWQgPSBKb2luLVBhdGggJHVwbG9hZERpciAkZmlsZW5h -bWUNCiAgICAgICAgICAgICAgICBbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbEJ5dGVzKCR6aWVs -UGZhZCwgJGJ5dGVzKQ0KICAgICAgICAgICAgICAgICMgS2VpbmUgQUNMLVJlc3RyaWN0aW9uOiBV -cGxvYWRzIHNpbmQgZnVlciBkaWUgRW1wZmFlbmdlci0NCiAgICAgICAgICAgICAgICAjIEdydXBw -ZSAobWFudWVsbCB2b20gU1UgdmVydGVpbHQpIGdlZGFjaHQsIG5pY2h0IGdlaGVpbS4NCiAgICAg -ICAgICAgICAgICAkcmVsUGZhZCA9ICIvZGF0YS91cGxvYWRzL21pdHRlaWx1bmdlbi8kZmlsZW5h -bWUiDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnbWl0dGVpbHVuZy51cGxvYWQn -IEB7IGFydCA9ICRhcnQ7IGRhdGVpID0gJGZpbGVuYW1lOyBieXRlcyA9ICRieXRlcy5MZW5ndGgg -fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0g -J29rJzsgcGZhZCA9ICRyZWxQZmFkOyBieXRlcyA9ICRieXRlcy5MZW5ndGggfQ0KICAgICAgICAg -ICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgkUGF0aCAt -bWF0Y2ggJ14vYXBpL21pdHRlaWx1bmdlbi8oW1x3LV0rKS9rZW5udG5pcyQnIC1hbmQgJE1ldGhv -ZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJG1pZCA9ICRNYXRjaGVzWzFdDQogICAg -ICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgJHBpZCA9ICRyLm1l -aW5lUGVyc29uSWQNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRwaWQpIHsgU2VuZC1F -cnJvciAkUmVzcG9uc2UgJ0tlaW5lIFBlcnNvbiB6dWdlb3JkbmV0JyA0MDM7IGNvbnRpbnVlIH0N -CiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdLZW5udG5pc09LID0gJGZhbHNlDQog -ICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAnbWl0dGVpbHVuZ2VuLmpzb24nIHsN -CiAgICAgICAgICAgICAgICAgICAgJG0gPSBSZWFkLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5q -c29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRtIC1vciAtbm90ICRtLlBT -T2JqZWN0LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdlbiddKSB7IHJldHVybiB9DQogICAgICAgICAg -ICAgICAgICAgICRleGlzdGllcnQgPSBAKCRtLm1pdHRlaWx1bmdlbiB8IFdoZXJlLU9iamVjdCB7 -IFtzdHJpbmddJF8uaWQgLWVxICRtaWQgfSkuQ291bnQgLWd0IDANCiAgICAgICAgICAgICAgICAg -ICAgaWYgKC1ub3QgJGV4aXN0aWVydCkgeyByZXR1cm4gfQ0KICAgICAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWxlc2VuJ10pIHsNCiAgICAgICAgICAg -ICAgICAgICAgICAgICRtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSBnZWxlc2VuIC1O -b3RlUHJvcGVydHlWYWx1ZSAoW3BzY3VzdG9tb2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHBpZFN0ciA9IFtzdHJpbmddJHBpZA0K -ICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbS5nZWxlc2VuLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJHBpZFN0cl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtLmdlbGVzZW4gfCBBZGQt -TWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRwaWRTdHIgLU5vdGVQcm9wZXJ0eVZhbHVlIChbcHNj -dXN0b21vYmplY3RdQHt9KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAkaGV1dGUgPSAoR2V0LURhdGUpLlRvU3RyaW5nKCd5eXl5LU1NLWRkJykNCiAg -ICAgICAgICAgICAgICAgICAgJG0uZ2VsZXNlbi4kcGlkU3RyIHwgQWRkLU1lbWJlciAtTm90ZVBy -b3BlcnR5TmFtZSAkbWlkIC1Ob3RlUHJvcGVydHlWYWx1ZSAkaGV1dGUgLUZvcmNlDQogICAgICAg -ICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91 -dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0tlbm50bmlzT0sg -PSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIGlm -ICgtbm90ICRzY3JpcHQ6bWl0dGVpbHVuZ0tlbm50bmlzT0spIHsNCiAgICAgICAgICAgICAgICAg -ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgIk1pdHRlaWx1bmcgJG1pZCBuaWNodCBnZWZ1bmRlbiIg -NDA0OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0 -Om1pdHRlaWx1bmdLZW5udG5pc09LID0gJGZhbHNlDQogICAgICAgICAgICAgICAgU2VuZC1Kc29u -T2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAna2VubnRuaXNfZ2VzZXR6dCcgfQ0KICAgICAg -ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0g -QkFDS1VQUyA9PT09PQ0KICAgICAgICAgICAgIyBCYWNrdXAtTmFtaW5nIChnZXRhcm50LCBpbiBk -YXRhL2NhY2hlLyk6DQogICAgICAgICAgICAjIC0gc25hcF88dHM+LmJhayAgPSBCdW5kbGUgKHBs -YW51bmcrYWRtaW4pIC0tIG1hbnVlbGxlIEJhY2t1cHMgKyBTaWNoZXJ1bmdlbg0KICAgICAgICAg -ICAgIyAgICAgICAgICAgICAgICAgICAgdm9yIFdpZWRlcmhlcnN0ZWxsdW5nDQogICAgICAgICAg -ICAjIC0gbGVnXzx0cz4uYmFrICAgPSBOdXIgUGxhbnVuZyAtLSBMZWdhY3ktQmFja3VwcyArIEF1 -dG8tU2ljaGVydW5nZW4NCiAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgIHZvciBSZXNl -dC9EdW1teWRhdGVuDQogICAgICAgICAgICAjIC0gY2ZnXzx0cz5fPGhpbndlaXM+LmJhayA9IGFk -bWluLmpzb24tQXV0by1CYWNrdXBzIChCYWNrdXAtQWRtaW5Kc29uKQ0KICAgICAgICAgICAgaWYg -KCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcp -IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnYmFja3Vwcycp -KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKEJhY2t1cHMpJyA0 -MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZ1BhdGggPSBKb2luLVBhdGgg -JERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Q -YXRoIC1MaXRlcmFsUGF0aCAkcGxhbnVuZ1BhdGgpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdQ -bGFudW5nIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk -cGxhbnVuZ09iaiA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAg -ICAgICRhZG1pbk9iaiAgID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAg -ICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluT2JqKSB7ICRhZG1pbk9iaiA9IE5ldy1PYmplY3Qg -UFNPYmplY3QgfQ0KICAgICAgICAgICAgICAgICR0cyA9IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXlN -TWRkX0hIbW1zcycNCiAgICAgICAgICAgICAgICAkYm5hbWUgPSAic25hcF8kdHMuYmFrIg0KICAg -ICAgICAgICAgICAgICRidW5kbGUgPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBm -b3JtYXQgID0gJ3ZpMy1iYWNrdXAtdjEnDQogICAgICAgICAgICAgICAgICAgIHRzICAgICAgPSAk -dHMNCiAgICAgICAgICAgICAgICAgICAgcGxhbnVuZyA9ICRwbGFudW5nT2JqDQogICAgICAgICAg -ICAgICAgICAgIGFkbWluICAgPSAkYWRtaW5PYmoNCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgJGpzb24gPSAkYnVuZGxlIHwgQ29udmVydFRvLUpzb24gLURlcHRoIDMwDQogICAg +YXJlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsgcmV0dXJuIEB7IHRl +eHQgPSAkbnVsbCB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICR2b3JoID0gJHBsYW51bmcu +a29tbWVudGFyZS4kZGF0dW0uJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAjIENv +bXBhdCBmdWVyIEFsdC1Gb3JtYXRlIChTcHJpbnQgMyDigJQgRHJpZnQvUm9idXN0aGVpdA0KICAg +ICAgICAgICAgICAgICAgICAgICAgIyAyMDI2LTA1LTI4KTogQ2xpZW50IGtlbm56ZWljaG5ldCBT +dHJpbmctIG9kZXIgU2luZ2xlLQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBPYmplY3Qtb2hu +ZS1JRCBFaW50cmFlZ2UgaW4ga29tbWVudGFyTGlzdGUoKSBtaXQNCiAgICAgICAgICAgICAgICAg +ICAgICAgICMgU2VudGluZWwtSUQgJ2tfbGVnYWN5Jy4gREVMRVRFIG1pdCBkaWVzZXIgSUQgZ2Vn +ZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgZWluZW4gQWx0LUVpbnRyYWcgPSBrb21wbGV0 +dGVyIEVpbnRyYWcgd2lyZCBlbnRmZXJudA0KICAgICAgICAgICAgICAgICAgICAgICAgIyAoTWln +cmF0aW9uICsgTG9lc2NodW5nIGluIGVpbmVtIFNjaHJpdHQpLg0KICAgICAgICAgICAgICAgICAg +ICAgICAgJHRyZWZmZXIgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgJG5ldWVMaXN0 +ZSA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdFtvYmplY3RdDQog +ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZvcmggLWlzIFtzdHJpbmddIC1hbmQgJHZvcmgp +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGtvbW1lbnRhcklkIC1lcSAna19s +ZWdhY3knKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cmVmZmVyID0gW1BT +Q3VzdG9tT2JqZWN0XUB7IHRleHQgPSAkdm9yaCB9DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHRl +eHQgPSAkbnVsbDsgZmVobGVyID0gJ2tvbW1lbnRhck5pY2h0R2VmdW5kZW4nIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZSA9IEAoKQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkdm9yaCAtaXMgW2FycmF5XSAtb3IgKCR2b3JoIC1pcyBbU3lzdGVt +LkNvbGxlY3Rpb25zLklFbnVtZXJhYmxlXSAtYW5kIC1ub3QgKCR2b3JoIC1pcyBbc3RyaW5nXSkp +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZSA9IEAoJHZvcmgpDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR2b3JoIC1hbmQgJHZvcmguUFNP +YmplY3QuUHJvcGVydGllc1sndGV4dCddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICRhbHRJZCA9IGlmICgkdm9yaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydpZCddKSB7IFtzdHJp +bmddJHZvcmguaWQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAkYWx0SWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgka29tbWVudGFySWQgLWVxICdrX2xlZ2FjeScpIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkdHJlZmZlciA9ICR2b3JoDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIHJldHVybiBAeyB0ZXh0ID0gJG51bGw7IGZlaGxlciA9ICdrb21tZW50YXJOaWNo +dEdlZnVuZGVuJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkbGlzdGUgPSBAKCR2b3JoKQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIGlmICgtbm90ICR0cmVmZmVyKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGZvcmVhY2ggKCRlIGluICRsaXN0ZSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJGVpZCA9IGlmICgkZSAtYW5kICRlLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ2lkJ10pIHsgW3N0cmluZ10kZS5pZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJGVpZCAtZXEgJGtvbW1lbnRhcklkKSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyZWZmZXIgPSAkZQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkbmV1ZUxpc3RlLkFkZCgkZSkgfCBPdXQtTnVsbA0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRyZWZmZXIpIHsg +cmV0dXJuIEB7IHRleHQgPSAkbnVsbDsgZmVobGVyID0gJ2tvbW1lbnRhck5pY2h0R2VmdW5kZW4n +IH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRuZXVlTGlzdGUuQ291bnQgLWVxIDAp +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIExldHp0ZXIgS29tbWVudGFyIGVudGZl +cm50IC0+IFByb3BlcnR5IGtvbXBsZXR0IHJhdXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgk +cGVyc29uSWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBMZWVyZXIgVGFnZXMtQnVj +a2V0IGF1ZnJhZXVtZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFnUHJvcHMgPSBA +KCRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMpDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKCR0YWdQcm9wcy5Db3VudCAtZXEgMCkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0LlBy +b3BlcnRpZXMuUmVtb3ZlKCRkYXR1bSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLiRwZXJzb25JZCA9IEAoJG5ldWVMaXN0ZS5U +b0FycmF5KCkpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg +ICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwN +CiAgICAgICAgICAgICAgICAgICAgICAgICRlbnRmZXJudFRleHQgPSBpZiAoJHRyZWZmZXIuUFNP +YmplY3QuUHJvcGVydGllc1sndGV4dCddKSB7IFtzdHJpbmddJHRyZWZmZXIudGV4dCB9IGVsc2Ug +eyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdGV4dCA9ICRlbnRmZXJu +dFRleHQgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgk +ZXJnLmZlaGxlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlcmcuZmVobGVyIC1l +cSAna29tbWVudGFyTmljaHRHZWZ1bmRlbicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBTZW5kLUVycm9yICRSZXNwb25zZSAnS29tbWVudGFyIG1pdCBkaWVzZXIgSUQgbmljaHQgZ2Vm +dW5kZW4nIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkZ2Vsb2VzY2h0ZXJUZXh0ID0gJGVy +Zy50ZXh0DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNl +bmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIFJlZGFjdGlvbiAoU3ByaW50IDEg4oCU +IFNpY2hlcmhlaXRzLU5vdGJyZW1zZSAyMDI2LTA1LTI4KToNCiAgICAgICAgICAgICAgICAjIFBJ +SS1TY2h1dHouIEZydWVoZXIgbGFuZGV0ZSBkZXIgdm9sbHN0YWVuZGlnZSBLb21tZW50YXItVGV4 +dCBpbQ0KICAgICAgICAgICAgICAgICMgTG9nYnVjaCDigJQgd2VubiBkZXIgS29tbWVudGFyIEty +YW5raGVpdHMtL0Rpc3ppcGxpbmFyLUluZm8gZW50aGllbHQsDQogICAgICAgICAgICAgICAgIyBs +ZWJ0ZSBzaWUgbmFjaCAnTG9lc2NoZW4nIHdlaXRlciBpbSBMb2cuIEpldHp0IG51ciBMYWVuZ2Ug +KyBrdXJ6ZXINCiAgICAgICAgICAgICAgICAjIEF1c3p1ZyAoNDAgWmVpY2hlbiksIGdlbnVnIGZ1 +ZXIgTmFjaHZvbGx6aWVoYmFya2VpdCBvaG5lIFZvbGx0ZXh0Lg0KICAgICAgICAgICAgICAgICR0 +ZXh0Vm9yc2NoYXUgPSAnJw0KICAgICAgICAgICAgICAgIGlmICgkZ2Vsb2VzY2h0ZXJUZXh0KSB7 +DQogICAgICAgICAgICAgICAgICAgICRrdXJ6ID0gJGdlbG9lc2NodGVyVGV4dA0KICAgICAgICAg +ICAgICAgICAgICBpZiAoJGt1cnouTGVuZ3RoIC1ndCA0MCkgeyAka3VyeiA9ICRrdXJ6LlN1YnN0 +cmluZygwLCA0MCkgKyAn4oCmJyB9DQogICAgICAgICAgICAgICAgICAgICR0ZXh0Vm9yc2NoYXUg +PSAka3Vyeg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGV4dExhZW5nZSA9 +IGlmICgkZ2Vsb2VzY2h0ZXJUZXh0KSB7ICRnZWxvZXNjaHRlclRleHQuTGVuZ3RoIH0gZWxzZSB7 +IDAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2tvbW1lbnRhci5nZWxvZXNj +aHQnIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAgICAgPSAkZGF0dW0NCiAgICAg +ICAgICAgICAgICAgICAgcGVyc29uSWQgICAgICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAg +ICAgICBrb21tZW50YXJJZCAgID0gJGtvbW1lbnRhcklkDQogICAgICAgICAgICAgICAgICAgIHRl +eHRWb3JzY2hhdSAgPSAkdGV4dFZvcnNjaGF1DQogICAgICAgICAgICAgICAgICAgIHRleHRMYWVu +Z2UgICAgPSAkdGV4dExhZW5nZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBB +ZGQtQ2hhbmdlTG9nRWludHJhZyAna29tbWVudGFyJyBAew0KICAgICAgICAgICAgICAgICAgICBk +YXR1bSAgICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25J +ZA0KICAgICAgICAgICAgICAgICAgICBrb21tZW50YXJJZCA9ICRrb21tZW50YXJJZA0KICAgICAg +ICAgICAgICAgICAgICAjIExpdmUtU3luYy1DaGFubmVsIGJyYXVjaHQgZGVuIFRleHQgbmljaHQg +4oCUIEJyb3dzZXIgbGFlZHQNCiAgICAgICAgICAgICAgICAgICAgIyBiZWkgbmFlY2hzdGVtIFJl +bmRlciBlaCBhdXMgcGxhbnVuZy5qc29uICh3byBkZXIgRWludHJhZw0KICAgICAgICAgICAgICAg +ICAgICAjIHdlZyBpc3QpLiBIaWVyIG51ciBNZXRhZGF0ZW4gZnVlciBBa3Rpdml0YWV0cy1Bbnpl +aWdlLg0KICAgICAgICAgICAgICAgICAgICBuZXUgICAgICA9ICcnDQogICAgICAgICAgICAgICAg +ICAgIHplaXRzdGVtcGVsID0gKEdldC1EYXRlKS5Ub1N0cmluZygnbycpDQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVz +ID0gJ2dlbG9lc2NodCc7IGtvbW1lbnRhcklkID0gJGtvbW1lbnRhcklkIH0NCiAgICAgICAgICAg +ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFBFUlNP +TkVOID09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BlcnNvbmVuJyAtYW5k +ICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlz +dEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7 +IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0K +ICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdB +bmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkbmV1ID0g +JGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgIyBSZWFkLU1vZGlmeS1X +cml0ZSBhdG9tYXIgaW4gZGVyIERhdGVpLVNwZXJyZS4gV2ljaHRpZyBuaWNodCBudXINCiAgICAg +ICAgICAgICAgICAjIGdlZ2VuIExvc3QgVXBkYXRlcywgc29uZGVybiBnZWdlbiBkaWUgbWF4SWQt +UmFjZTogendlaSBwYXJhbGxlbGUNCiAgICAgICAgICAgICAgICAjIFBlcnNvbmVuLUFubGFnZW4g +d3VlcmRlbiBzb25zdCBkaWVzZWxiZSBtYXhJZCBsZXNlbiB1bmQgSURFTlRJU0NIRQ0KICAgICAg +ICAgICAgICAgICMgSURzIHZlcmdlYmVuIChkb3BwZWx0ZSBQZXJzb25lbi1JRHMgPSBrb3JydXB0 +ZXIgU3RhdGUpLg0KICAgICAgICAgICAgICAgICRwZXJzUmVzID0gJG51bGwNCiAgICAgICAgICAg +ICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRwZXJzUmVzID0gSW52b2tlLVdpdGhGaWxlTG9j +ayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25P +YmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkbWF4SWQgPSAwDQogICAgICAg +ICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsgaWYgKCRwLmlkIC1n +dCAkbWF4SWQpIHsgJG1heElkID0gJHAuaWQgfSB9DQogICAgICAgICAgICAgICAgJG5ldWVJZCA9 +ICRtYXhJZCArIDENCg0KICAgICAgICAgICAgICAgICMgRWlucmVpaHVuZ3MtTG9naWs6ICJ1bnRl +biIgKERlZmF1bHQpLCAidm9yIiBvZGVyICJuYWNoIiBlaW5lciBSZWZlcmVuenBlcnNvbg0KICAg +ICAgICAgICAgICAgICRlaW5yZWloZW4gPSAndW50ZW4nDQogICAgICAgICAgICAgICAgaWYgKCRu +ZXUuUFNPYmplY3QuUHJvcGVydGllc1snZWlucmVpaGVuJ10gLWFuZCAkbmV1LmVpbnJlaWhlbikg +eyAkZWlucmVpaGVuID0gKFtzdHJpbmddJG5ldS5laW5yZWloZW4pLlRvTG93ZXIoKSB9DQogICAg +ICAgICAgICAgICAgJHJlZklkID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoJG5ldS5QU09i +amVjdC5Qcm9wZXJ0aWVzWydyZWZlcmVueklkJ10gLWFuZCAkbnVsbCAtbmUgJG5ldS5yZWZlcmVu +eklkKSB7ICRyZWZJZCA9IFtpbnRdJG5ldS5yZWZlcmVueklkIH0NCg0KICAgICAgICAgICAgICAg +ICR6aWVsUG9zID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoKCRlaW5yZWloZW4gLWVxICd2 +b3InIC1vciAkZWlucmVpaGVuIC1lcSAnbmFjaCcpIC1hbmQgJG51bGwgLW5lICRyZWZJZCkgew0K +ICAgICAgICAgICAgICAgICAgICAkcmVmUG9zID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAg +Zm9yZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgIGlmIChbaW50XSRwLmlkIC1lcSAkcmVmSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkcmVmUG9zID0gaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10gLWFu +ZCAkcC5wb3NpdGlvbikgeyBbaW50XSRwLnBvc2l0aW9uIH0gZWxzZSB7IDAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkcmVm +UG9zKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkemllbFBvcyA9IGlmICgkZWlucmVpaGVu +IC1lcSAndm9yJykgeyAkcmVmUG9zIH0gZWxzZSB7ICRyZWZQb3MgKyAxIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICMgUG9zaXRpb25lbiBhYiB6aWVsUG9zIHVtIDEgbmFjaCBoaW50ZW4gc2No +aWViZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBl +cnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBwID0gaWYgKCRwLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10gLWFuZCAkcC5wb3NpdGlvbikgeyBbaW50XSRwLnBv +c2l0aW9uIH0gZWxzZSB7IDAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcHAg +LWdlICR6aWVsUG9zKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddKSB7ICRwLnBvc2l0aW9uID0gJHBwICsgMSB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIg +LU5vdGVQcm9wZXJ0eU5hbWUgJ3Bvc2l0aW9uJyAtTm90ZVByb3BlcnR5VmFsdWUgKCRwcCArIDEp +IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHppZWxQb3MpIHsNCiAgICAgICAgICAgICAgICAg +ICAgJG1heFBvcyA9IDANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51 +bmcucGVyc29uZW4pIHsgJHBvcyA9IGlmICgkcC5wb3NpdGlvbikgeyBbaW50XSRwLnBvc2l0aW9u +IH0gZWxzZSB7IDAgfTsgaWYgKCRwb3MgLWd0ICRtYXhQb3MpIHsgJG1heFBvcyA9ICRwb3MgfSB9 +DQogICAgICAgICAgICAgICAgICAgICR6aWVsUG9zID0gJG1heFBvcyArIDENCiAgICAgICAgICAg +ICAgICB9DQoNCiAgICAgICAgICAgICAgICAkcGVyc29uID0gW29yZGVyZWRdQHsNCiAgICAgICAg +ICAgICAgICAgICAgaWQgPSAkbmV1ZUlkDQogICAgICAgICAgICAgICAgICAgIGFrdGl2ID0gaWYg +KCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snYWt0aXYnXSkgeyAkbmV1LmFrdGl2IH0gZWxzZSB7 +ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICRuZXUubmFtZQ0KICAgICAgICAg +ICAgICAgICAgICB2b3JuYW1lID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1sndm9ybmFt +ZSddKSB7ICRuZXUudm9ybmFtZSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGRp +ZW5zdGdyYWQgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydkaWVuc3RncmFkJ10pIHsg +JG5ldS5kaWVuc3RncmFkIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgZnVua3Rp +b24gPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydmdW5rdGlvbiddKSB7ICRuZXUuZnVu +a3Rpb24gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBncnVwcGUgPSBpZiAoJG5l +dS5QU09iamVjdC5Qcm9wZXJ0aWVzWydncnVwcGUnXSkgeyAkbmV1LmdydXBwZSB9IGVsc2UgeyAn +JyB9DQogICAgICAgICAgICAgICAgICAgIG9lID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGll +c1snb2UnXSkgeyAkbmV1Lm9lIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgZGll +bnN0bnVtbWVyID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZGllbnN0bnVtbWVyJ10p +IHsgJG5ldS5kaWVuc3RudW1tZXIgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICB0 +ZWxlZm9uID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1sndGVsZWZvbiddKSB7ICRuZXUu +dGVsZWZvbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gJHpp +ZWxQb3MNCiAgICAgICAgICAgICAgICAgICAgZW1haWwgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9w +ZXJ0aWVzWydlbWFpbCddKSB7ICRuZXUuZW1haWwgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAg +ICAgICAgICBud0tlbm51bmcgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydud0tlbm51 +bmcnXSkgeyAkbmV1Lm53S2VubnVuZyB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAg +IGdlYnVydHNkYXR1bSA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlYnVydHNkYXR1 +bSddKSB7ICRuZXUuZ2VidXJ0c2RhdHVtIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAg +ICAgZWxEZ2xRdWFsaWZpemllcnQgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlbERn +bFF1YWxpZml6aWVydCddKSB7IFtib29sXSRuZXUuZWxEZ2xRdWFsaWZpemllcnQgfSBlbHNlIHsg +JGZhbHNlIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBNYXJrZXIgZnVl +ciBQZXJzb25lbiwgZGllIHBlciBFeGNlbC1JbXBvcnQgZnJpc2NoIGFuZ2VsZWd0DQogICAgICAg +ICAgICAgICAgIyB3dXJkZW4uIFBlcnNvbmFsdmVyd2FsdHVuZyBibGVuZGV0IHNpZSBpbSBOZXVp +bXBvcnQtQmxvY2sNCiAgICAgICAgICAgICAgICAjIG9iZW4gZWluLCBiaXMgZGFzIEZsYWcgbWFu +dWVsbCB3ZWdnZXNldHp0IHdpcmQgKEVybGVkaWd0LQ0KICAgICAgICAgICAgICAgICMgQnV0dG9u +KSBvZGVyIGRhcyBsZXR6dGUgUGZsaWNodGZlbGQgKERpZW5zdGdydXBwZSkgZ2VwZmxlZ3QNCiAg +ICAgICAgICAgICAgICAjIGlzdCB1bmQgZGVyIFVzZXIgYXVmICJCbG9jayBsZWVyZW4iIGtsaWNr +dC4NCiAgICAgICAgICAgICAgICBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydpbXBvcnRO +ZXVBbSddIC1hbmQgJG5ldS5pbXBvcnROZXVBbSkgew0KICAgICAgICAgICAgICAgICAgICAkcGVy +c29uWydpbXBvcnROZXVBbSddID0gW3N0cmluZ10kbmV1LmltcG9ydE5ldUFtDQogICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICRwbGFudW5nLnBlcnNvbmVuICs9IFtQU0N1c3RvbU9i +amVjdF0kcGVyc29uDQogICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5q +c29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgcmV0dXJuIEB7IG5ldWVJ +ZCA9ICRuZXVlSWQ7IHppZWxQb3MgPSAkemllbFBvczsgZWlucmVpaGVuID0gJGVpbnJlaWhlbiB9 +DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAg +ICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsg +Y29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWlu +dHJhZyAncGVyc29uLmFuZ2VsZWd0JyBAeyBwZXJzb25JZCA9ICRwZXJzUmVzLm5ldWVJZDsgbmFt +ZSA9ICIkKCRuZXUudm9ybmFtZSkgJCgkbmV1Lm5hbWUpIi5UcmltKCk7IGVpbnJlaWhlbiA9ICRw +ZXJzUmVzLmVpbnJlaWhlbjsgcG9zaXRpb24gPSAkcGVyc1Jlcy56aWVsUG9zIH0NCiAgICAgICAg +ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdhbmdlbGVndCc7 +IGlkID0gJHBlcnNSZXMubmV1ZUlkOyBwb3NpdGlvbiA9ICRwZXJzUmVzLnppZWxQb3MgfQ0KICAg +ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBh +dGggLW1hdGNoICdeL2FwaS9wZXJzb25lbi8oXGQrKSQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcp +IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgJHBlcnNvbklkID0gW2ludF0kTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgICRi +b2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkp +IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUg +fQ0KICAgICAgICAgICAgICAgICR1cGRhdGUgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAg +ICAgICAgICAgICAgICAjIEF1ZGl0LVBoYXNlIEEuMyAoMjAyNi0wNS0yMSk6IFByaXZpbGVnaWVu +LVNjaHV0ei4gUmVpbmUNCiAgICAgICAgICAgICAgICAjIEZhY2hhdWZzaWNodC1BZG1pbnMgKHNl +aGVuLmFkbWluaXN0cmF0aW9uPXRydWUsIGFiZXIga2VpbiBTVSkNCiAgICAgICAgICAgICAgICAj +IGR1ZXJmZW4gU3RhbW1kYXRlbiBlZGl0aWVyZW4sIGFiZXIgS0VJTkUgU2ljaHRiYXJrZWl0cy0N +CiAgICAgICAgICAgICAgICAjIE92ZXJyaWRlcyAoYHNlaGVuYCkgb2RlciBlZGl0aWVyLVJlY2h0 +ZSAoYGVkaXRSZWNodGVgKSBzZXR6ZW4NCiAgICAgICAgICAgICAgICAjIOKAlCBzb25zdCBrb2Vu +bnRlbiBzaWUgc2ljaCBMb2didWNoLS9TdGF0aXN0aWstU2ljaHQgc2VsYnN0DQogICAgICAgICAg +ICAgICAgIyBmcmVpc2NoYWx0ZW4uIFBlciBEZXZUb29scy1tYW5pcHVsaWVydGVzIFBheWxvYWQg +YWJmYW5nZW4uDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkg +ew0KICAgICAgICAgICAgICAgICAgICBpZiAoJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWydz +ZWhlbiddKSAgICAgIHsgJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgnc2VoZW4n +KSB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkdXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXNb +J2VkaXRSZWNodGUnXSkgeyAkdXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCdlZGl0 +UmVjaHRlJykgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcHV0UmVzID0g +JG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRwdXRSZXMgPSBJ +bnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAkcGxh +bnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRn +ZWZ1bmRlbiAgID0gJGZhbHNlDQogICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZSAgPSBAe30NCiAg +ICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9ICcnDQogICAgICAgICAgICAgICAgZm9yZWFjaCAo +JHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwLmlk +IC1lcSAkcGVyc29uSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwZXJzb25OYW1lID0g +KCgiJCgkcC52b3JuYW1lKSAkKCRwLm5hbWUpIikuVHJpbSgpKQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgZm9yZWFjaCAoJHByb3AgaW4gJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwcm9wLk5hbWUgLW5lICdpZCcpIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZVskcHJvcC5OYW1lXSA9IGlm +ICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwcm9wLk5hbWVdKSB7ICRwLigkcHJvcC5OYW1lKSB9 +IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5Q +U09iamVjdC5Qcm9wZXJ0aWVzWyRwcm9wLk5hbWVdKSB7ICRwLigkcHJvcC5OYW1lKSA9ICRwcm9w +LlZhbHVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRwIHwgQWRk +LU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcHJvcC5OYW1lIC1Ob3RlUHJvcGVydHlWYWx1ZSAk +cHJvcC5WYWx1ZSAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRnZWZ1bmRlbiA9 +ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRnZWZ1bmRl +bikgeyByZXR1cm4gQHsgZ2VmdW5kZW4gPSAkZmFsc2UgfSB9DQogICAgICAgICAgICAgICAgV3Jp +dGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAg +ICAgICAgICAgcmV0dXJuIEB7IGdlZnVuZGVuID0gJHRydWU7IGFsdGVXZXJ0ZSA9ICRhbHRlV2Vy +dGU7IHBlcnNvbk5hbWUgPSAkcGVyc29uTmFtZSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNw +b25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHB1dFJlcy5nZWZ1bmRlbikgeyBTZW5kLUVycm9y +ICRSZXNwb25zZSAiUGVyc29uICRwZXJzb25JZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZSAgPSAkcHV0UmVzLmFsdGVXZXJ0ZQ0KICAg +ICAgICAgICAgICAgICRwZXJzb25OYW1lID0gJHB1dFJlcy5wZXJzb25OYW1lDQoNCiAgICAgICAg +ICAgICAgICAjIERpZmYtRGljdCDigJQgbnVyIEZlbGRlciwgaW4gZGVuZW4gc2ljaCBkZXIgV2Vy +dCB0YXRzYWVjaGxpY2gNCiAgICAgICAgICAgICAgICAjIGdlYWVuZGVydCBoYXQuIEpTT04tc3Rh +YmlsZSBWZXJnbGVpY2hzYmFzaXMuDQogICAgICAgICAgICAgICAgJGdlYWVuZGVydCA9IFtvcmRl +cmVkXUB7fQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcm9wIGluICR1cGRhdGUuUFNPYmpl +Y3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJHByb3AuTmFtZSAtZXEg +J2lkJykgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICRhbHRWYWwgID0gJGFsdGVX +ZXJ0ZVskcHJvcC5OYW1lXQ0KICAgICAgICAgICAgICAgICAgICAkbmV1VmFsICA9ICRwcm9wLlZh +bHVlDQogICAgICAgICAgICAgICAgICAgICRhbHRKc29uID0gKCRhbHRWYWwgfCBDb252ZXJ0VG8t +SnNvbiAtQ29tcHJlc3MgLURlcHRoIDgpDQogICAgICAgICAgICAgICAgICAgICRuZXVKc29uID0g +KCRuZXVWYWwgfCBDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MgLURlcHRoIDgpDQogICAgICAgICAg +ICAgICAgICAgIGlmICgkYWx0SnNvbiAtbmUgJG5ldUpzb24pIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICRnZWFlbmRlcnRbJHByb3AuTmFtZV0gPSBbb3JkZXJlZF1AeyBhbHQgPSAkYWx0VmFs +OyBuZXUgPSAkbmV1VmFsIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IH0NCg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5nZWFlbmRlcnQn +IChbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgPSAkcGVyc29uSWQN +CiAgICAgICAgICAgICAgICAgICAgbmFtZSAgICAgID0gJHBlcnNvbk5hbWUNCiAgICAgICAgICAg +ICAgICAgICAgZ2VhZW5kZXJ0ID0gJGdlYWVuZGVydA0KICAgICAgICAgICAgICAgIH0pDQogICAg +ICAgICAgICAgICAgIyBIaW53ZWlzLVRyaWdnZXI6IElkZW50aXRhZXRzLUFlbmRlcnVuZyAobndL +ZW5udW5nIC8gZW1haWwpIGJla29tbXQNCiAgICAgICAgICAgICAgICAjIGVpbmVuIEluLUFwcC1I +aW53ZWlzIGZ1ZXIgU1UgKyBHZXNhbXR2ZXJhbnR3b3J0bGljaGUuIFBybyBGZWxkIGVpbg0KICAg +ICAgICAgICAgICAgICMgZWlnZW5lciBFaW50cmFnLCBkYW1pdCBkYXMgTW9kYWwgbGVzYmFyIGJs +ZWlidC4NCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmVsZCBpbiBAKCdud0tlbm51bmcnLCAn +ZW1haWwnKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGdlYWVuZGVydC5Db250YWlucygk +ZmVsZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRkaWZmID0gJGdlYWVuZGVydFskZmVs +ZF0NCiAgICAgICAgICAgICAgICAgICAgICAgIE5ldy1IaW53ZWlzICdpZGVudGl0YWV0X2dlYWVu +ZGVydCcgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uX2lk +ICAgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25fbmFtZSA9 +ICRwZXJzb25OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVsZCAgICAgICAgPSAk +ZmVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyX3dlcnQgID0gIiQoJGRpZmYu +YWx0KSINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXVlcl93ZXJ0ICA9ICIkKCRkaWZm +Lm5ldSkiDQogICAgICAgICAgICAgICAgICAgICAgICB9KSAoR2V0LUFrdHVlbGxlckJlbnV0emVy +KSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnYWt0 +dWFsaXNpZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICMgREVMRVRFIC9hcGkvcGVyc29uZW4ve2lkfSAgICAgICAgICAgIC0+IFNvZnQt +RGVsZXRlIChnZWxvZXNjaHRBbSBnZXNldHp0LCBQZXJzb24gYmxlaWJ0IGltIERhdGVuc2F0eiBm +dWVyIFBhcGllcmtvcmItUnVlY2tob2x1bmcpDQogICAgICAgICAgICAjIERFTEVURSAvYXBpL3Bl +cnNvbmVuL3tpZH0/ZW5kZ3VlbHRpZz0xIC0+IEhhcmQtRGVsZXRlIChQZXJzb24ga29tcGxldHQg +ZW50ZmVybmVuLCBFaW50cmFlZ2UvS29tbWVudGFyZSB2ZXJ3YWlzZW4pDQogICAgICAgICAgICAj +IFZvciBkZW0gU29mdC1EZWxldGUgd2VyZGVuIGltIHNlbGJlbiBadWcgYmVyZWl0cyBQYXBpZXJr +b3JiLUVpbnRyYWVnZSBhdWZnZXJhZXVtdCwgZGllIGFlbHRlciBhbHMNCiAgICAgICAgICAgICMg +YWRtaW4ucGFwaWVya29yYlRhZ2VBdWZiZXdhaHJ1bmcgKERlZmF1bHQgMzAgVGFnZSkgc2luZC4g +U28gYmxlaWJ0IGRlciBEYXRlbnNhdHogc2NobGFuaywgb2huZQ0KICAgICAgICAgICAgIyBlaW5l +biBzZXBhcmF0ZW4gQ3Jvbi1Kb2IgenUgYnJhdWNoZW4uDQogICAgICAgICAgICBpZiAoJFBhdGgg +LW1hdGNoICdeL2FwaS9wZXJzb25lbi8oXGQrKSQnIC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScp +IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgJHBlcnNvbklkID0gW2ludF0kTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgICRl +bmRndWVsdGlnID0gJGZhbHNlDQogICAgICAgICAgICAgICAgaWYgKCRSZXF1ZXN0LlVybC5RdWVy +eSkgew0KICAgICAgICAgICAgICAgICAgICAkcSA9IFtTeXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6 +UGFyc2VRdWVyeVN0cmluZygkUmVxdWVzdC5VcmwuUXVlcnkpDQogICAgICAgICAgICAgICAgICAg +ICRlbmRndWVsdGlnID0gKFtzdHJpbmddJHFbJ2VuZGd1ZWx0aWcnXSkgLWVxICcxJw0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZGVsUmVzID0gJG51bGwNCiAgICAgICAgICAg +ICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRkZWxSZXMgPSBJbnZva2UtV2l0aEZpbGVMb2Nr +ICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9i +amVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRhZG1pbiAgID0gUmVhZC1Kc29u +T2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICRhdWZiZXdhaHJ1bmcgPSAzMA0K +ICAgICAgICAgICAgICAgIGlmICgkYWRtaW4gLWFuZCAkYWRtaW4uUFNPYmplY3QuUHJvcGVydGll +c1sncGFwaWVya29yYlRhZ2VBdWZiZXdhaHJ1bmcnXSkgew0KICAgICAgICAgICAgICAgICAgICB0 +cnkgeyAkYXVmYmV3YWhydW5nID0gW2ludF0kYWRtaW4ucGFwaWVya29yYlRhZ2VBdWZiZXdhaHJ1 +bmcgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkamV0enQg +PSAoR2V0LURhdGUpLlRvU3RyaW5nKCdvJykNCiAgICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9 +ICcnDQogICAgICAgICAgICAgICAgJGdlZnVuZGVuID0gJGZhbHNlDQogICAgICAgICAgICAgICAg +JG5ldWVQZXJzb25lbiA9IEAoKQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFu +dW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcC5pZCAtZXEgJHBlcnNv +bklkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gPSAkdHJ1ZQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAoKCIkKCRwLnZvcm5hbWUpICQoJHAubmFt +ZSkiKS5UcmltKCkpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGVuZGd1ZWx0aWcpIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhhcmQtRGVsZXRlOiB1ZWJlcnNwcmluZ2Vu +LCBQZXJzb24gZmxpZWd0IHJhdXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 +ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1snZ2Vsb2VzY2h0QW0nXSkgeyAkcC5n +ZWxvZXNjaHRBbSA9ICRqZXR6dCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7 +ICRwIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZ2Vsb2VzY2h0QW0nIC1Ob3RlUHJv +cGVydHlWYWx1ZSAkamV0enQgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +bmV1ZVBlcnNvbmVuICs9ICRwDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAjIEF1dG8tUHVyZ2U6 +IFNvZnQtRGVsZXRlZC1QZXJzb25lbiwgZGVyZW4gZ2Vsb2VzY2h0QW0gYWVsdGVyDQogICAgICAg +ICAgICAgICAgICAgICAgICAjIGFscyAkYXVmYmV3YWhydW5nIFRhZ2UgaXN0LCB3ZXJkZW4gaGll +ciBlbmRndWVsdGlnIGVudGZlcm50Lg0KICAgICAgICAgICAgICAgICAgICAgICAgJHB1cmdlID0g +JGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGll +c1snZ2Vsb2VzY2h0QW0nXSAtYW5kICRwLmdlbG9lc2NodEFtKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVy +ID0gW2RhdGV0aW1lXSRwLmdlbG9lc2NodEFtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgoTmV3LVRpbWVTcGFuIC1TdGFydCAkYWx0ZXIgLUVuZCAoR2V0LURhdGUpKS5Ub3Rh +bERheXMgLWd0ICRhdWZiZXdhaHJ1bmcpIHsgJHB1cmdlID0gJHRydWUgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwdXJnZSkgeyAkbmV1ZVBlcnNvbmVuICs9 +ICRwIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAkZ2VmdW5kZW4pIHsgcmV0dXJuIEB7IGdlZnVuZGVuID0gJGZhbHNl +IH0gfQ0KICAgICAgICAgICAgICAgICRwbGFudW5nLnBlcnNvbmVuID0gW29iamVjdFtdXUAoJG5l +dWVQZXJzb25lbikNCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpz +b24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICByZXR1cm4gQHsgZ2VmdW5k +ZW4gPSAkdHJ1ZTsgcGVyc29uTmFtZSA9ICRwZXJzb25OYW1lOyBqZXR6dCA9ICRqZXR6dCB9DQog +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAg +ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29u +dGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGRlbFJl +cy5nZWZ1bmRlbikgeyBTZW5kLUVycm9yICRSZXNwb25zZSAiUGVyc29uICRwZXJzb25JZCBuaWNo +dCBnZWZ1bmRlbiIgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUg +PSAkZGVsUmVzLnBlcnNvbk5hbWUNCiAgICAgICAgICAgICAgICAkamV0enQgPSAkZGVsUmVzLmpl +dHp0DQogICAgICAgICAgICAgICAgaWYgKCRlbmRndWVsdGlnKSB7DQogICAgICAgICAgICAgICAg +ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5lbmRndWVsdGlnLmdlbG9lc2NodCcgQHsgcGVy +c29uSWQgPSAkcGVyc29uSWQ7IG5hbWUgPSAkcGVyc29uTmFtZSB9DQogICAgICAgICAgICAgICAg +fSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGVyc29uLmlu +LnBhcGllcmtvcmInIEB7IHBlcnNvbklkID0gJHBlcnNvbklkOyBuYW1lID0gJHBlcnNvbk5hbWU7 +IGdlbG9lc2NodEFtID0gJGpldHp0IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0JzsgbW9k +dXMgPSBpZiAoJGVuZGd1ZWx0aWcpIHsgJ2VuZGd1ZWx0aWcnIH0gZWxzZSB7ICdwYXBpZXJrb3Ji +JyB9IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wZXJzb25lbi9yZWloZW5mb2xnZScgLWFuZCAkTWV0aG9k +IC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkg +eyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAg +ICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1 +IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcmVpaGVuZm9sZ2UgPSAk +Ym9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAg +ICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24n +DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkciBpbiAkcmVpaGVuZm9sZ2UpIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJz +b25lbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuaWQgLWVxICRy +LmlkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmpl +Y3QuUHJvcGVydGllc1sncG9zaXRpb24nXSkgeyAkcC5wb3NpdGlvbiA9ICRyLnBvc2l0aW9uIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1i +ZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3Bvc2l0aW9uJyAtTm90ZVByb3BlcnR5VmFsdWUgJHIucG9z +aXRpb24gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg +ICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwN +CiAgICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfSBjYXRj +aCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhs +ZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICBXcml0ZS1Mb2dFaW50cmFnICdwZXJzb25lbi5yZWloZW5mb2xnZS5nZWFlbmRlcnQnIEB7fQ0K +ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2Fr +dHVhbGlzaWVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN +CiAgICAgICAgICAgICMgPT09PT0gSElOV0VJU0UgKEluLUFwcC1CYW5uZXIvTW9kYWwtU3lzdGVt +KSA9PT09PQ0KICAgICAgICAgICAgIyBHRVQgIC9hcGkvaGlud2Vpc2UgICAgICAgICAgICAtPiBv +ZmZlbmUgSGlud2Vpc2UgZnVlciBkZW4gZWluZ2Vsb2dndGVuIFVzZXINCiAgICAgICAgICAgICMg +UE9TVCAvYXBpL2hpbndlaXNlL3tpZH0va2VubnRuaXMgLT4gS2VubnRuaXNuYWhtZSBzZXR6ZW4N +CiAgICAgICAgICAgICMgR0VUICAvYXBpL2hpbndlaXNlL3VlYmVyc2ljaHQgLT4gU1Utb25seSwg +dm9sbHN0YWVuZGlnZSBTaWNodCBpbmtsLiBMZXNlLVN0YXR1cw0KICAgICAgICAgICAgaWYgKCRQ +YXRoIC1lcSAnL2FwaS9oaW53ZWlzZScgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAg +ICAgICAgICAgICMgR2F0ZWQ6IG51ciBFbXBmYWVuZ2VyIChTVSBvZGVyIEdlc2FtdHZlcmFudHdv +cnRsaWNoKSBkdWVyZmVuIHVlYmVyaGF1cHQgZnJhZ2VuDQogICAgICAgICAgICAgICAgJHIgPSBH +ZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKCRyLmlzdFN1cGVyVXNlciAtb3Ig +JHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQt +SnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgaGlud2Vpc2UgPSBAKCkgfQ0KICAgICAgICAgICAgICAg +ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBJbnZva2Ut +SGlud2Vpc1BydW5pbmcNCiAgICAgICAgICAgICAgICAkaCA9IFJlYWQtSnNvbk9iamVjdCAnaGlu +d2Vpc2UuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRoIC1vciAtbm90ICRo +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2hpbndlaXNlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAg +U2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9IEAoKSB9DQogICAgICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRv +ZmZlbiA9IEAoKQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlaW50cmFnIGluIEAoJGguaGlu +d2Vpc2UpKSB7DQogICAgICAgICAgICAgICAgICAgICRpc3RFbXBmYWVuZ2VyID0gJGZhbHNlDQog +ICAgICAgICAgICAgICAgICAgICRpc3RHZWxlc2VuICAgID0gJGZhbHNlDQogICAgICAgICAgICAg +ICAgICAgIGZvcmVhY2ggKCRwIGluICRlaW50cmFnLmtlbm50bmlzbmFobWVuLlBTT2JqZWN0LlBy +b3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LU1hdGNoS2VubnVu +ZyAoW3N0cmluZ10kcC5OYW1lKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc3RF +bXBmYWVuZ2VyID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwg +LW5lICRwLlZhbHVlKSB7ICRpc3RHZWxlc2VuID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpc3RFbXBmYWVuZ2VyIC1hbmQgLW5v +dCAkaXN0R2VsZXNlbikgeyAkb2ZmZW4gKz0gJGVpbnRyYWcgfQ0KICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNlID0g +W29iamVjdFtdXSRvZmZlbiB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAg +IH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL2hpbndlaXNlLyhcZCspL2tl +bm50bmlzJCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkaGlu +d2Vpc0lkID0gW2ludF0kTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0 +ZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkci5pc3RTdXBlclVzZXIgLW9yICRyLmlzdEdl +c2FtdHZlcmFudHdvcnRsaWNoKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS +ZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dCA9ICRm +YWxzZQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlwID0gJG51bGwN +CiAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdoaW53ZWlzZS5qc29uJyB7DQog +ICAgICAgICAgICAgICAgICAgICRoID0gUmVhZC1Kc29uT2JqZWN0ICdoaW53ZWlzZS5qc29uJw0K +ICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRoIC1vciAtbm90ICRoLlBTT2JqZWN0 +LlByb3BlcnRpZXNbJ2hpbndlaXNlJ10pIHsgcmV0dXJuIH0NCiAgICAgICAgICAgICAgICAgICAg +Zm9yZWFjaCAoJGVpbnRyYWcgaW4gQCgkaC5oaW53ZWlzZSkpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmIChbaW50XSRlaW50cmFnLmlkIC1uZSAkaGlud2Vpc0lkKSB7IGNvbnRpbnVlIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICMgRXJzdCBkZW4gTWF0Y2gtU2xvdCBlcm1pdHRlbG4s +IGRhbm4gYXVzc2VyaGFsYiBkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICMgUHJvcGVydHkt +RW51bWVyYXRpb24gaW4tcGxhY2Ugc2V0emVuIChQUyA1LjEgbWFnIGRhcw0KICAgICAgICAgICAg +ICAgICAgICAgICAgIyBNb2RpZml6aWVyZW4gd2FlaHJlbmQgZm9yZWFjaCBuaWNodCBpbW1lciku +DQogICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hOYW1lID0gJG51bGwNCiAgICAgICAgICAg +ICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRlaW50cmFnLmtlbm50bmlzbmFobWVuLlBTT2Jq +ZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1N +YXRjaEtlbm51bmcgKFtzdHJpbmddJHAuTmFtZSkpIHsgJG1hdGNoTmFtZSA9ICRwLk5hbWU7IGJy +ZWFrIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgkbWF0Y2hOYW1lKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRzID0gKEdl +dC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygneXl5eS1NTS1kZFRISDptbTpzc1on +KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlaW50cmFnLmtlbm50bmlzbmFobWVuIHwg +QWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkbWF0Y2hOYW1lIC1Ob3RlUHJvcGVydHlWYWx1 +ZSAkdHMgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53ZWlz +S2VubnRuaXNHZXNldHp0ID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JGVpbnRyYWcuUFNPYmplY3QuUHJvcGVydGllc1sndHlwJ10pIHsgJHNjcmlwdDpoaW53ZWlzS2Vu +bnRuaXNUeXAgPSBbc3RyaW5nXSRlaW50cmFnLnR5cCB9DQogICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgIGlmICgkc2NyaXB0OmhpbndlaXNLZW5udG5pc0dlc2V0enQp +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2hpbndlaXNlLmpz +b24nICRoIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICRnZXNldHp0ID0gW2Jvb2xdJHNjcmlwdDpo +aW53ZWlzS2VubnRuaXNHZXNldHp0DQogICAgICAgICAgICAgICAgJGtlbm50bmlzVHlwID0gJHNj +cmlwdDpoaW53ZWlzS2VubnRuaXNUeXANCiAgICAgICAgICAgICAgICAkc2NyaXB0OmhpbndlaXNL +ZW5udG5pc0dlc2V0enQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAkc2NyaXB0OmhpbndlaXNL +ZW5udG5pc1R5cCA9ICRudWxsDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGdlc2V0enQpIHsN +CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgIkhpbndlaXMgJGhpbndl +aXNJZCBuaWNodCBnZWZ1bmRlbiBvZGVyIG5pY2h0IGZ1ZXIgU2llIGJlc3RpbW10IiA0MDQ7IGNv +bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRsb2dGZWxkZXIgPSBA +eyBoaW53ZWlzSWQgPSAkaGlud2Vpc0lkIH0NCiAgICAgICAgICAgICAgICBpZiAoJGtlbm50bmlz +VHlwKSB7ICRsb2dGZWxkZXJbJ3R5cCddID0gJGtlbm50bmlzVHlwIH0NCiAgICAgICAgICAgICAg +ICBXcml0ZS1Mb2dFaW50cmFnICdoaW53ZWlzLmtlbm50bmlzJyAkbG9nRmVsZGVyDQogICAgICAg +ICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAna2VubnRuaXNf +Z2VzZXR6dCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAg +ICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2hpbndlaXNlL3VlYmVyc2ljaHQnIC1hbmQgJE1l +dGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBl +clVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyJyA0MDM7IGNvbnRp +bnVlIH0NCiAgICAgICAgICAgICAgICBJbnZva2UtSGlud2Vpc1BydW5pbmcNCiAgICAgICAgICAg +ICAgICAkaCA9IFJlYWQtSnNvbk9iamVjdCAnaGlud2Vpc2UuanNvbicNCiAgICAgICAgICAgICAg +ICBpZiAoJG51bGwgLWVxICRoIC1vciAtbm90ICRoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2hpbndl +aXNlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA +eyBoaW53ZWlzZSA9IEAoKSB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg +aGlud2Vpc2UgPSBbb2JqZWN0W11dQCgkaC5oaW53ZWlzZSkgfQ0KICAgICAgICAgICAgICAgIGNv +bnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gTUlUVEVJTFVOR0VO +IChTcHJpbnQgRC0zYiwgMjAyNi0wNS0yOSkgPT09PT0NCiAgICAgICAgICAgICMgVm9tIFNVIG1h +bnVlbGwgZ2VwZmxlZ3RlcyBIaW53ZWlzLU1vZGFsLVN5c3RlbSAoc2VwYXJhdCB2b24NCiAgICAg +ICAgICAgICMgL2FwaS9oaW53ZWlzZSwgZGFzIGlzdCBudXIgZnVlciBTeXN0ZW0tRXJlaWduaXNz +ZSBTVS9HVikuDQogICAgICAgICAgICAjIFNjaGVtYSArIEZpbHRlcnVuZy1Mb2dpayBnZXNwaWVn +ZWx0IGF1cyBkZXYvc2VydmVyLnB5Og0KICAgICAgICAgICAgIyAgIF9taXR0ZWlsdW5nZW5fZnVl +cl9ha3R1ZWxsZW5fdXNlcigpIGJ6dy4gX3BlcnNvbl9hdXNfcGlkKCkuDQogICAgICAgICAgICBp +ZiAoJFBhdGggLWVxICcvYXBpL21pdHRlaWx1bmdlbicgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykg +ew0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgbWl0dGVpbHVu +Z2VuID0gKEdldC1NaXR0ZWlsdW5nZW5GdWVyQWt0dWVsbGVuVXNlcikgfQ0KICAgICAgICAgICAg +ICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcv +YXBpL21pdHRlaWx1bmdlbi9hbGxlJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAg +ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNw +b25zZSAnTnVyIFN1cGVyVXNlcicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJG0g +PSBSZWFkLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAgICAgICAgICRs +aXN0ZSA9IEAoKQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJG0gLWFuZCAkbS5QU09i +amVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAk +bGlzdGUgPSBAKCRtLm1pdHRlaWx1bmdlbikNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBtaXR0ZWlsdW5nZW4gPSBbb2JqZWN0 +W11dJGxpc3RlIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0ZWlsdW5nZW4nIC1hbmQgJE1ldGhvZCAt +ZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2Vy +KSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIE1pdHRlaWx1 +bmdlbiBhbmxlZ2VuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcmF3ID0gUmVh +ZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHJhdykgeyBTZW5kLUVy +cm9yICRSZXNwb25zZSAnQm9keSBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgdHJ5IHsgJGJvZHkgPSAkcmF3IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1F +cnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAg +ICAgICAgICAgICMgU2VydmVyLXNlaXRpZ2UgU2FuaXRpc2llcnVuZyAoU3RvcmVkLVhTUyk6IHRp +dGVsICsgdGV4dCB3ZXJkZW4NCiAgICAgICAgICAgICAgICAjIGltIENsaWVudCB2aWEgaW5uZXJI +VE1MIGdlcmVuZGVydC4NCiAgICAgICAgICAgICAgICAkdGl0ZWwgPSBDb252ZXJ0VG8tU2FmZVJp +Y2hIdG1sICgoW3N0cmluZ10oJGJvZHkudGl0ZWwpKS5UcmltKCkpDQogICAgICAgICAgICAgICAg +JHRleHQgID0gQ29udmVydFRvLVNhZmVSaWNoSHRtbCAoKFtzdHJpbmddKCRib2R5LnRleHQpKS5U +cmltKCkpDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRpdGVsKSB7IFNlbmQtRXJyb3IgJFJl +c3BvbnNlICdUaXRlbCBpc3QgUGZsaWNodGZlbGQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAg +ICAgICAgIGlmICgtbm90ICR0ZXh0KSAgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVGV4dCBpc3Qg +UGZsaWNodGZlbGQnICA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcmFuZCA9IC1q +b2luICgoNDguLjU3KSArICg5Ny4uMTIyKSB8IEdldC1SYW5kb20gLUNvdW50IDYgfCBGb3JFYWNo +LU9iamVjdCB7IFtjaGFyXSRfIH0pDQogICAgICAgICAgICAgICAgJG1zID0gW2ludDY0XShbRGF0 +ZVRpbWVPZmZzZXRdOjpVdGNOb3cuVG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKQ0KICAgICAgICAg +ICAgICAgICRuZXVlSWQgPSAibV8ke21zfV8ke3JhbmR9Ig0KICAgICAgICAgICAgICAgICRlbXBm +RGVmYXVsdCA9IFtwc2N1c3RvbW9iamVjdF1Aew0KICAgICAgICAgICAgICAgICAgICBhbGxlID0g +JHRydWU7IHBlcnNvbmVuID0gQCgpOyBncnVwcGVuID0gQCgpOyByb2xsZW4gPSBAKCkNCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGVtcGYgPSBpZiAoJGJvZHkuUFNPYmplY3Qu +UHJvcGVydGllc1snZW1wZmFlbmdlciddKSB7ICRib2R5LmVtcGZhZW5nZXIgfSBlbHNlIHsgJGVt +cGZEZWZhdWx0IH0NCiAgICAgICAgICAgICAgICAkbmV1ID0gW3BzY3VzdG9tb2JqZWN0XUB7DQog +ICAgICAgICAgICAgICAgICAgIGlkICAgICAgICAgICA9ICRuZXVlSWQNCiAgICAgICAgICAgICAg +ICAgICAgdGl0ZWwgICAgICAgID0gJHRpdGVsDQogICAgICAgICAgICAgICAgICAgIHRleHQgICAg +ICAgICA9ICR0ZXh0DQogICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbCAgICA9IGlmICgkYm9k +eS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0aHVtYm5haWwnXSkgeyAkYm9keS50aHVtYm5haWwgfSBl +bHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICBwZGYgICAgICAgICAgPSBpZiAoJGJv +ZHkuUFNPYmplY3QuUHJvcGVydGllc1sncGRmJ10pICAgICAgIHsgJGJvZHkucGRmIH0gICAgICAg +ZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciAgICAgID0gaWYgKCRi +b2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RyaWdnZXInXSAtYW5kICRib2R5LnRyaWdnZXIpIHsg +W3N0cmluZ10kYm9keS50cmlnZ2VyIH0gZWxzZSB7ICdlaW5tYWwnIH0NCiAgICAgICAgICAgICAg +ICAgICAgYmlzRGF0dW0gICAgID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2Jpc0Rh +dHVtJ10pICB7ICRib2R5LmJpc0RhdHVtIH0gIGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAg +ICAgICAgIGVtcGZhZW5nZXIgICA9ICRlbXBmDQogICAgICAgICAgICAgICAgICAgIGVyc3RlbGx0 +QW0gICA9IChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ3l5eXktTU0tZGRU +SEg6bW06c3NaJykNCiAgICAgICAgICAgICAgICAgICAgZXJzdGVsbHRWb24gID0gKEdldC1Ba3R1 +ZWxsZXJCZW51dHplcikNCiAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gJG51bGwN +CiAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0Vm9uID0gJG51bGwNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAnbWl0dGVpbHVuZ2VuLmpz +b24nIHsNCiAgICAgICAgICAgICAgICAgICAgJG0gPSBSZWFkLUpzb25PYmplY3QgJ21pdHRlaWx1 +bmdlbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRtKSB7ICRtID0g +W3BzY3VzdG9tb2JqZWN0XUB7IG1pdHRlaWx1bmdlbiA9IEAoKTsgZ2VsZXNlbiA9IFtwc2N1c3Rv +bW9iamVjdF1Ae30gfSB9DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRtLlBTT2JqZWN0 +LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdlbiddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAk +bSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgbWl0dGVpbHVuZ2VuIC1Ob3RlUHJvcGVy +dHlWYWx1ZSBAKCkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgaWYgKC1ub3QgJG0uUFNPYmplY3QuUHJvcGVydGllc1snZ2VsZXNlbiddKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAkbSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgZ2Vs +ZXNlbiAtTm90ZVByb3BlcnR5VmFsdWUgKFtwc2N1c3RvbW9iamVjdF1Ae30pIC1Gb3JjZQ0KICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICMgbmV1ZXN0ZSBvYmVuDQog +ICAgICAgICAgICAgICAgICAgICRtLm1pdHRlaWx1bmdlbiA9IEAoJG5ldSkgKyBAKCRtLm1pdHRl +aWx1bmdlbikNCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnbWl0dGVpbHVu +Z2VuLmpzb24nICRtIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAg +ICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdtaXR0ZWlsdW5nLmFuZ2VsZWd0JyBAeyBp +ZCA9ICRuZXVlSWQ7IHRpdGVsID0gJHRpdGVsIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25P +YmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdhbmdlbGVndCc7IG1pdHRlaWx1bmcgPSAkbmV1 +IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +aWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvbWl0dGVpbHVuZ2VuLyhbXHctXSspJCcgLWFuZCAkTWV0 +aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVy +VXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXInIDQwMzsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgICRtaWQgPSAkTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAg +ICRyYXcgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcmF3 +KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCb2R5IGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICB0cnkgeyAkYm9keSA9ICRyYXcgfCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0 +Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZXMgSlNPTicgNDAwOyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4gPSAkZmFsc2UN +CiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdaaWVsID0gJG51bGwNCiAgICAgICAg +ICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdtaXR0ZWlsdW5nZW4uanNvbicgew0KICAgICAg +ICAgICAgICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nDQog +ICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJG0gLW9yIC1ub3QgJG0uUFNPYmplY3Qu +UHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10pIHsgcmV0dXJuIH0NCiAgICAgICAgICAgICAgICAg +ICAgZm9yZWFjaCAoJGVpbnRyYWcgaW4gQCgkbS5taXR0ZWlsdW5nZW4pKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICBpZiAoW3N0cmluZ10kZWludHJhZy5pZCAtbmUgJG1pZCkgeyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmVsZCBpbiAndGl0ZWwnLCd0 +ZXh0JywndGh1bWJuYWlsJywncGRmJywndHJpZ2dlcicsJ2Jpc0RhdHVtJywnZW1wZmFlbmdlcicp +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGJvZHkuUFNPYmplY3QuUHJvcGVy +dGllc1skZmVsZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdlcnQgPSAk +Ym9keS4kZmVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCRmZWxkIC1l +cSAndGl0ZWwnIC1vciAkZmVsZCAtZXEgJ3RleHQnKSAtYW5kICgkd2VydCAtaXMgW3N0cmluZ10p +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2VydCA9IENvbnZlcnRU +by1TYWZlUmljaEh0bWwgJHdlcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWludHJhZyB8IEFkZC1NZW1iZXIgLU5v +dGVQcm9wZXJ0eU5hbWUgJGZlbGQgLU5vdGVQcm9wZXJ0eVZhbHVlICR3ZXJ0IC1Gb3JjZQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICRlaW50cmFnIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5 +TmFtZSBnZWFlbmRlcnRBbSAgLU5vdGVQcm9wZXJ0eVZhbHVlICgoR2V0LURhdGUpLlRvVW5pdmVy +c2FsVGltZSgpLlRvU3RyaW5nKCd5eXl5LU1NLWRkVEhIOm1tOnNzWicpKSAtRm9yY2UNCiAgICAg +ICAgICAgICAgICAgICAgICAgICRlaW50cmFnIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFt +ZSBnZWFlbmRlcnRWb24gLU5vdGVQcm9wZXJ0eVZhbHVlIChHZXQtQWt0dWVsbGVyQmVudXR6ZXIp +IC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5k +ZW4gPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nWmll +bCA9ICRlaW50cmFnDQogICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkc2NyaXB0Om1pdHRlaWx1bmdHZWZ1 +bmRlbikgeyBXcml0ZS1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicgJG0gfCBPdXQtTnVs +bCB9DQogICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgaWYgKC1u +b3QgJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgIk1pdHRlaWx1bmcgJG1pZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBj +b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkemllbCA9ICRzY3Jp +cHQ6bWl0dGVpbHVuZ1ppZWwNCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdHZWZ1 +bmRlbiA9ICRmYWxzZTsgJHNjcmlwdDptaXR0ZWlsdW5nWmllbCA9ICRudWxsDQogICAgICAgICAg +ICAgICAgV3JpdGUtTG9nRWludHJhZyAnbWl0dGVpbHVuZy5nZWFlbmRlcnQnIEB7IGlkID0gJG1p +ZCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg +PSAnZ2VhZW5kZXJ0JzsgbWl0dGVpbHVuZyA9ICR6aWVsIH0NCiAgICAgICAgICAgICAgICBjb250 +aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkv +bWl0dGVpbHVuZ2VuLyhbXHctXSspJCcgLWFuZCAkTWV0aG9kIC1lcSAnREVMRVRFJykgew0KICAg +ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ051ciBTdXBlclVzZXInIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRtaWQgPSAkTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0dl +bG9lc2NodCA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ21p +dHRlaWx1bmdlbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICRtID0gUmVhZC1Kc29uT2Jq +ZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l +cSAkbSAtb3IgLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4nXSkgeyBy +ZXR1cm4gfQ0KICAgICAgICAgICAgICAgICAgICAkdm9yaGVyID0gQCgkbS5taXR0ZWlsdW5nZW4p +DQogICAgICAgICAgICAgICAgICAgICRuYWNoaGVyID0gQCgkdm9yaGVyIHwgV2hlcmUtT2JqZWN0 +IHsgW3N0cmluZ10kXy5pZCAtbmUgJG1pZCB9KQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHZv +cmhlci5Db3VudCAtZXEgJG5hY2hoZXIuQ291bnQpIHsgcmV0dXJuIH0NCiAgICAgICAgICAgICAg +ICAgICAgJG0ubWl0dGVpbHVuZ2VuID0gJG5hY2hoZXINCiAgICAgICAgICAgICAgICAgICAgIyBn +ZWxlc2VuLUVpbnRyYWVnZSBmdWVyIGRpZXNlIE1pdHRlaWx1bmcgYXVmcmFldW1lbg0KICAgICAg +ICAgICAgICAgICAgICBpZiAoJG0uUFNPYmplY3QuUHJvcGVydGllc1snZ2VsZXNlbiddKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiBAKCRtLmdlbGVzZW4uUFNPYmpl +Y3QuUHJvcGVydGllcykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuVmFs +dWUuUFNPYmplY3QuUHJvcGVydGllc1skbWlkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkcC5WYWx1ZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkbWlkKQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdt +aXR0ZWlsdW5nZW4uanNvbicgJG0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAkc2Ny +aXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIH0gfCBPdXQt +TnVsbA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6bWl0dGVpbHVuZ0dlbG9lc2No +dCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAiTWl0dGVpbHVu +ZyAkbWlkIG5pY2h0IGdlZnVuZGVuIiA0MDQ7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0dlbG9lc2NodCA9ICRmYWxzZQ0KICAg +ICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21pdHRlaWx1bmcuZ2Vsb2VzY2h0JyBAeyBp +ZCA9ICRtaWQgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg +c3RhdHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg +ICAgICB9DQogICAgICAgICAgICAjIFBPU1QgL2FwaS9taXR0ZWlsdW5nZW4vdXBsb2FkIOKAlCBT +VS1vbmx5LCBCaWxkICgyIE1CKSBvZGVyIFBERiAoMTAgTUIpDQogICAgICAgICAgICAjIEJvZHk6 +IHsiYXJ0IjogImJpbGQifCJwZGYiLCAiZGF0ZWluYW1lIjogIngucG5nIiwgImRhdGFVcmwiOiAi +ZGF0YTouLi4ifQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0ZWlsdW5nZW4v +dXBsb2FkJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgt +bm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBl +clVzZXIgZHVlcmZlbiBNaXR0ZWlsdW5ncy1BbmhhZW5nZSBob2NobGFkZW4nIDQwMzsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgICMgMTQgTUIgTWF4U2l6ZSwgd2VpbCAxME1CIFBERiBiYXNl +NjQtY29kaWVydCB+MTMuNCBNQiBQYXlsb2FkIHdpcmQNCiAgICAgICAgICAgICAgICAkcmF3ID0g +UmVhZC1Cb2R5ICRSZXF1ZXN0IC1NYXhTaXplIDE0TUINCiAgICAgICAgICAgICAgICBpZiAoLW5v +dCAkcmF3KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzIChtYXggMTQg +TUIpJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkYm9keSA9ICRyYXcg +fCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVs +dGlnZXMgSlNPTicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGFydCA9IChbc3Ry +aW5nXSRib2R5LmFydCkuVG9Mb3dlcigpDQogICAgICAgICAgICAgICAgJGRhdGFVcmwgPSBbc3Ry +aW5nXSRib2R5LmRhdGFVcmwNCiAgICAgICAgICAgICAgICBpZiAoJGFydCAtbmUgJ2JpbGQnIC1h +bmQgJGFydCAtbmUgJ3BkZicpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz +cG9uc2UgJ2FydCBtdXNzICJiaWxkIiBvZGVyICJwZGYiIHNlaW4nIDQwMDsgY29udGludWUNCiAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGV4dCA9ICRudWxsOyAkbWF4Qnl0ZXMg +PSAwDQogICAgICAgICAgICAgICAgaWYgKCRhcnQgLWVxICdiaWxkJykgew0KICAgICAgICAgICAg +ICAgICAgICBpZiAoJGRhdGFVcmwgLW1hdGNoICdeZGF0YTppbWFnZS8oanBlZ3xqcGd8cG5nfHdl +YnApO2Jhc2U2NCwnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZXh0ID0gKCRNYXRjaGVz +WzFdIC1yZXBsYWNlICdqcGVnJywnanBnJykNCiAgICAgICAgICAgICAgICAgICAgICAgICRtYXhC +eXRlcyA9IDIgKiAxMDI0ICogMTAyNA0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAg +ICAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JpbGQ6IGVyd2FydGV0 +IGRhdGE6aW1hZ2UvKGpwZWd8cG5nfHdlYnApO2Jhc2U2NCwuLi4nIDQwMDsgY29udGludWUNCiAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg +ICAgICAgICAgIGlmICgkZGF0YVVybCAtbGlrZSAnZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0 +LConKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZXh0ID0gJ3BkZicNCiAgICAgICAgICAg +ICAgICAgICAgICAgICRtYXhCeXRlcyA9IDEwICogMTAyNCAqIDEwMjQNCiAgICAgICAgICAgICAg +ICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdQREY6IGVyd2FydGV0IGRhdGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwuLi4nIDQwMDsg +Y29udGludWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAkYmFzZTY0ID0gJGRhdGFVcmwgLXJlcGxhY2UgJ15kYXRhOlteO10rO2Jhc2U2 +NCwnLCAnJw0KICAgICAgICAgICAgICAgIHRyeSB7ICRieXRlcyA9IFtTeXN0ZW0uQ29udmVydF06 +OkZyb21CYXNlNjRTdHJpbmcoJGJhc2U2NCkgfQ0KICAgICAgICAgICAgICAgIGNhdGNoIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2UgYmFzZTY0LURhdGVuJyA0MDA7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICBpZiAoJGJ5dGVzLkxlbmd0aCAtZ3QgJG1heEJ5dGVzKSB7DQog +ICAgICAgICAgICAgICAgICAgICRsaW1pdEtiID0gW2ludF0oJG1heEJ5dGVzIC8gMTAyNCkNCiAg +ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgIiRhcnQgenUgZ3Jvc3MgKG1h +eCAkbGltaXRLYiBLQikiIDQxMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgJHVwbG9hZERpciA9IEpvaW4tUGF0aCAkRGF0YURpciAndXBsb2FkcycgfCBKb2lu +LVBhdGggLUNoaWxkUGF0aCAnbWl0dGVpbHVuZ2VuJw0KICAgICAgICAgICAgICAgIGlmICgtbm90 +IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICR1cGxvYWREaXIpKSB7DQogICAgICAgICAgICAgICAg +ICAgIHRyeSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggJHVwbG9hZERpciAt +Rm9yY2UgfCBPdXQtTnVsbCB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICRyYW5kID0gLWpvaW4gKCg0OC4uNTcpICsgKDk3Li4xMjIpIHwgR2V0LVJhbmRvbSAt +Q291bnQgNiB8IEZvckVhY2gtT2JqZWN0IHsgW2NoYXJdJF8gfSkNCiAgICAgICAgICAgICAgICAk +bXMgPSBbaW50NjRdKFtEYXRlVGltZU9mZnNldF06OlV0Y05vdy5Ub1VuaXhUaW1lTWlsbGlzZWNv +bmRzKCkpDQogICAgICAgICAgICAgICAgJGZpbGVuYW1lID0gIm1fJHttc31fJHtyYW5kfS4kZXh0 +Ig0KICAgICAgICAgICAgICAgICR6aWVsUGZhZCA9IEpvaW4tUGF0aCAkdXBsb2FkRGlyICRmaWxl +bmFtZQ0KICAgICAgICAgICAgICAgIFtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsQnl0ZXMoJHpp +ZWxQZmFkLCAkYnl0ZXMpDQogICAgICAgICAgICAgICAgIyBLZWluZSBBQ0wtUmVzdHJpY3Rpb246 +IFVwbG9hZHMgc2luZCBmdWVyIGRpZSBFbXBmYWVuZ2VyLQ0KICAgICAgICAgICAgICAgICMgR3J1 +cHBlIChtYW51ZWxsIHZvbSBTVSB2ZXJ0ZWlsdCkgZ2VkYWNodCwgbmljaHQgZ2VoZWltLg0KICAg +ICAgICAgICAgICAgICRyZWxQZmFkID0gIi9kYXRhL3VwbG9hZHMvbWl0dGVpbHVuZ2VuLyRmaWxl +bmFtZSINCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdtaXR0ZWlsdW5nLnVwbG9h +ZCcgQHsgYXJ0ID0gJGFydDsgZGF0ZWkgPSAkZmlsZW5hbWU7IGJ5dGVzID0gJGJ5dGVzLkxlbmd0 +aCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg +PSAnb2snOyBwZmFkID0gJHJlbFBmYWQ7IGJ5dGVzID0gJGJ5dGVzLkxlbmd0aCB9DQogICAgICAg +ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKCRQYXRo +IC1tYXRjaCAnXi9hcGkvbWl0dGVpbHVuZ2VuLyhbXHctXSspL2tlbm50bmlzJCcgLWFuZCAkTWV0 +aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkbWlkID0gJE1hdGNoZXNbMV0NCiAg +ICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICAkcGlkID0gJHIu +bWVpbmVQZXJzb25JZA0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHBpZCkgeyBTZW5k +LUVycm9yICRSZXNwb25zZSAnS2VpbmUgUGVyc29uIHp1Z2VvcmRuZXQnIDQwMzsgY29udGludWUg +fQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0tlbm50bmlzT0sgPSAkZmFsc2UN +CiAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdtaXR0ZWlsdW5nZW4uanNvbicg +ew0KICAgICAgICAgICAgICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2Vu +Lmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJG0gLW9yIC1ub3QgJG0u +UFNPYmplY3QuUHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10pIHsgcmV0dXJuIH0NCiAgICAgICAg +ICAgICAgICAgICAgJGV4aXN0aWVydCA9IEAoJG0ubWl0dGVpbHVuZ2VuIHwgV2hlcmUtT2JqZWN0 +IHsgW3N0cmluZ10kXy5pZCAtZXEgJG1pZCB9KS5Db3VudCAtZ3QgMA0KICAgICAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAkZXhpc3RpZXJ0KSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAg +IGlmICgtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlbGVzZW4nXSkgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgJG0gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lIGdlbGVzZW4g +LU5vdGVQcm9wZXJ0eVZhbHVlIChbcHNjdXN0b21vYmplY3RdQHt9KSAtRm9yY2UNCiAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkcGlkU3RyID0gW3N0cmluZ10kcGlk +DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRtLmdlbGVzZW4uUFNPYmplY3QuUHJvcGVy +dGllc1skcGlkU3RyXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG0uZ2VsZXNlbiB8IEFk +ZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHBpZFN0ciAtTm90ZVByb3BlcnR5VmFsdWUgKFtw +c2N1c3RvbW9iamVjdF1Ae30pIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICRoZXV0ZSA9IChHZXQtRGF0ZSkuVG9TdHJpbmcoJ3l5eXktTU0tZGQnKQ0K +ICAgICAgICAgICAgICAgICAgICAkbS5nZWxlc2VuLiRwaWRTdHIgfCBBZGQtTWVtYmVyIC1Ob3Rl +UHJvcGVydHlOYW1lICRtaWQgLU5vdGVQcm9wZXJ0eVZhbHVlICRoZXV0ZSAtRm9yY2UNCiAgICAg +ICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nICRtIHwg +T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nS2VubnRuaXNP +SyA9ICR0cnVlDQogICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgJHNjcmlwdDptaXR0ZWlsdW5nS2VubnRuaXNPSykgew0KICAgICAgICAgICAgICAg +ICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAiTWl0dGVpbHVuZyAkbWlkIG5pY2h0IGdlZnVuZGVu +IiA0MDQ7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRzY3Jp +cHQ6bWl0dGVpbHVuZ0tlbm50bmlzT0sgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICBTZW5kLUpz +b25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdrZW5udG5pc19nZXNldHp0JyB9DQogICAg +ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09 +PSBCQUNLVVBTID09PT09DQogICAgICAgICAgICAjIEJhY2t1cC1OYW1pbmcgKGdldGFybnQsIGlu +IGRhdGEvY2FjaGUvKToNCiAgICAgICAgICAgICMgLSBzbmFwXzx0cz4uYmFrICA9IEJ1bmRsZSAo +cGxhbnVuZythZG1pbikgLS0gbWFudWVsbGUgQmFja3VwcyArIFNpY2hlcnVuZ2VuDQogICAgICAg +ICAgICAjICAgICAgICAgICAgICAgICAgICB2b3IgV2llZGVyaGVyc3RlbGx1bmcNCiAgICAgICAg +ICAgICMgLSBsZWdfPHRzPi5iYWsgICA9IE51ciBQbGFudW5nIC0tIExlZ2FjeS1CYWNrdXBzICsg +QXV0by1TaWNoZXJ1bmdlbg0KICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgdm9yIFJl +c2V0L0R1bW15ZGF0ZW4NCiAgICAgICAgICAgICMgLSBjZmdfPHRzPl88aGlud2Vpcz4uYmFrID0g +YWRtaW4uanNvbi1BdXRvLUJhY2t1cHMgKEJhY2t1cC1BZG1pbkpzb24pDQogICAgICAgICAgICBp +ZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwJyAtYW5kICRNZXRob2QgLWVxICdQT1NU +Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdiYWNrdXBz +JykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoQmFja3Vwcykn +IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwbGFudW5nUGF0aCA9IEpvaW4tUGF0 +aCAkRGF0YURpciAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0 +LVBhdGggLUxpdGVyYWxQYXRoICRwbGFudW5nUGF0aCkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug +J1BsYW51bmcgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRwbGFudW5nT2JqID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAg +ICAgICAgJGFkbWluT2JqICAgPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAg +ICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW5PYmopIHsgJGFkbWluT2JqID0gTmV3LU9iamVj +dCBQU09iamVjdCB9DQogICAgICAgICAgICAgICAgJHRzID0gR2V0LURhdGUgLUZvcm1hdCAneXl5 +eU1NZGRfSEhtbXNzJw0KICAgICAgICAgICAgICAgICRibmFtZSA9ICJzbmFwXyR0cy5iYWsiDQog +ICAgICAgICAgICAgICAgJGJ1bmRsZSA9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAg +IGZvcm1hdCAgPSAndmkzLWJhY2t1cC12MScNCiAgICAgICAgICAgICAgICAgICAgdHMgICAgICA9 +ICR0cw0KICAgICAgICAgICAgICAgICAgICBwbGFudW5nID0gJHBsYW51bmdPYmoNCiAgICAgICAg +ICAgICAgICAgICAgYWRtaW4gICA9ICRhZG1pbk9iag0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAkanNvbiA9ICRidW5kbGUgfCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggMzANCiAg +ICAgICAgICAgICAgICAkY2FjaGVEaXIgPSBKb2luLVBhdGggJERhdGFEaXIgJ2NhY2hlJw0KICAg +ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRjYWNoZURpcikp +IHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkY2FjaGVEaXIgLUZvcmNlIHwg +T3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUJhY2t1cEJ5dGVzIChKb2luLVBhdGgg +JGNhY2hlRGlyICRibmFtZSkgJGpzb24NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFn +ICdiYWNrdXAuZXJzdGVsbHQnIEB7IGRhdGVpbmFtZSA9ICRibmFtZTsgaW5oYWx0ID0gJ3BsYW51 +bmcrYWRtaW4nIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 +IHN0YXR1cyA9ICdlcnN0ZWxsdCc7IGRhdGVpbmFtZSA9ICRibmFtZSB9DQogICAgICAgICAgICAg +ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h +cGkvcGxhbnVuZy9iYWNrdXBzJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9y +ICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9 +DQogICAgICAgICAgICAgICAgJGVpbnRyYWVnZSA9IEAoKQ0KICAgICAgICAgICAgICAgICRjYWNo +ZURpciA9IEpvaW4tUGF0aCAkRGF0YURpciAnY2FjaGUnDQogICAgICAgICAgICAgICAgaWYgKFRl +c3QtUGF0aCAtTGl0ZXJhbFBhdGggJGNhY2hlRGlyKSB7DQogICAgICAgICAgICAgICAgICAgIGZv +cmVhY2ggKCRtdXN0ZXIgaW4gJ3NuYXBfKi5iYWsnLCdsZWdfKi5iYWsnKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICBHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIgLUZpbHRl +ciAkbXVzdGVyIC1GaWxlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlIHwgRm9yRWFjaC1P +YmplY3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lID0gJF8uTmFtZQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICR0eXAgPSBpZiAoJG5hbWUgLW1hdGNoICdfdm9yX2R1 +bW15XycpIHsgJ3ZvciBEdW1teWRhdGVuJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBlbHNlaWYgKCRuYW1lIC1tYXRjaCAnX3Zvcl9yZXNldF8nKSB7ICd2b3IgUmVzZXQnIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoJG5hbWUgLW1hdGNoICdf +dm9yX3dpZWRlcmhlcnN0ZWxsdW5nXycpIHsgJ3ZvciBXaWVkZXJoZXJzdGVsbHVuZycgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICdtYW51ZWxsJyB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJGJ1bmRsZSA9ICRuYW1lLlN0YXJ0c1dpdGgoJ3NuYXBfJykN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWludHJhZWdlICs9IFtvcmRlcmVkXUB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVpbmFtZSAgID0gJG5hbWUNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvZXNzZSAgICAgPSAkXy5MZW5ndGgNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJzdGVsbHRBbSAgPSAkXy5MYXN0V3JpdGVUaW1l +LlRvU3RyaW5nKCdzJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwICAgICAg +ICAgPSAkdHlwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGFsdCAgICAgID0g +aWYgKCRidW5kbGUpIHsgJ0tvbXBsZXR0IChQbGFudW5nICsgQWRtaW4pJyB9IGVsc2UgeyAnTnVy +IFBsYW51bmcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXN0QnVuZGxlICAg +PSAkYnVuZGxlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICRlaW50cmFlZ2UgPSBAKCRlaW50cmFlZ2UgfCBTb3J0LU9iamVjdCAtUHJv +cGVydHkgZXJzdGVsbHRBbSAtRGVzY2VuZGluZykNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25P +YmplY3QgJFJlc3BvbnNlICRlaW50cmFlZ2UNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGxhbnVuZy9i +YWNrdXAvZG93bmxvYWQvKC4rKSQnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnYmFja3VwcycpKSB7IFNlbmQtRXJy +b3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKEJhY2t1cHMpJyA0MDM7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICAkbmFtZSA9ICRNYXRjaGVzWzFdDQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgKCRuYW1lIC1tYXRjaCAnXihzbmFwX3xsZWdfKVswLTlfYS16QS1aXStcLmJhayQn +KSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZXIgRGF0ZWluYW1lJyA0MDA7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkZnAgPSBKb2luLVBhdGggJERhdGFEaXIgKCdjYWNo +ZS8nICsgJG5hbWUpDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJh +bFBhdGggJGZwKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmFja3VwIG5pY2h0IGdlZnVuZGVu +JyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAka2xhcnRleHQgPSBSZWFkLUJhY2t1 +cFRleHQgJGZwDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAka2xhcnRleHQpIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cC1EYXRlaSBrb25udGUgbmljaHQgZ2VsZXNlbiB3ZXJk +ZW4nIDUwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRieXRlcyA9IFtTeXN0ZW0uVGV4 +dC5FbmNvZGluZ106OlVURjguR2V0Qnl0ZXMoJGtsYXJ0ZXh0KQ0KICAgICAgICAgICAgICAgICRS +ZXNwb25zZS5TdGF0dXNDb2RlID0gMjAwDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLkNvbnRl +bnRUeXBlID0gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnDQogICAgICAgICAgICAg +ICAgQWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9uc2UNCiAgICAgICAgICAgICAgICAkUmVzcG9u +c2UuSGVhZGVycy5BZGQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAiYXR0YWNobWVudDsgZmlsZW5h +bWU9YCIkbmFtZWAiIikNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0 +ID0gJGJ5dGVzLkxlbmd0aA0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0u +V3JpdGUoJGJ5dGVzLCAwLCAkYnl0ZXMuTGVuZ3RoKQ0KICAgICAgICAgICAgICAgICRSZXNwb25z +ZS5PdXRwdXRTdHJlYW0uQ2xvc2UoKQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg +ICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwL3dp +ZWRlcmhlcnN0ZWxsZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAg +ICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9yICRS +ZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAg +ICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkbmFt +ZSA9ICIkKCRkYXRlbi5kYXRlaW5hbWUpIg0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkbmFt +ZSAtbWF0Y2ggJ14oc25hcF98bGVnXylbMC05X2EtekEtWl0rXC5iYWskJykpIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250aW51ZSB9DQogICAg ICAgICAgICAgICAgJGNhY2hlRGlyID0gSm9pbi1QYXRoICREYXRhRGlyICdjYWNoZScNCiAgICAg ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIpKSB7 IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggJGNhY2hlRGlyIC1Gb3JjZSB8IE91 -dC1OdWxsIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1CYWNrdXBCeXRlcyAoSm9pbi1QYXRoICRj -YWNoZURpciAkYm5hbWUpICRqc29uDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAn -YmFja3VwLmVyc3RlbGx0JyBAeyBkYXRlaW5hbWUgPSAkYm5hbWU7IGluaGFsdCA9ICdwbGFudW5n -K2FkbWluJyB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBz -dGF0dXMgPSAnZXJzdGVsbHQnOyBkYXRlaW5hbWUgPSAkYm5hbWUgfQ0KICAgICAgICAgICAgICAg -IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp -L3BsYW51bmcvYmFja3VwcycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAg -ICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdiYWNrdXBzJykpIHsgU2VuZC1FcnJvciAk -UmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoQmFja3VwcyknIDQwMzsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgICRlaW50cmFlZ2UgPSBAKCkNCiAgICAgICAgICAgICAgICAkY2FjaGVE -aXIgPSBKb2luLVBhdGggJERhdGFEaXIgJ2NhY2hlJw0KICAgICAgICAgICAgICAgIGlmIChUZXN0 -LVBhdGggLUxpdGVyYWxQYXRoICRjYWNoZURpcikgew0KICAgICAgICAgICAgICAgICAgICBmb3Jl -YWNoICgkbXVzdGVyIGluICdzbmFwXyouYmFrJywnbGVnXyouYmFrJykgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJGNhY2hlRGlyIC1GaWx0ZXIg -JG11c3RlciAtRmlsZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSB8IEZvckVhY2gtT2Jq -ZWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmFtZSA9ICRfLk5hbWUNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAkdHlwID0gaWYgKCRuYW1lIC1tYXRjaCAnX3Zvcl9kdW1t -eV8nKSB7ICd2b3IgRHVtbXlkYXRlbicgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgZWxzZWlmICgkbmFtZSAtbWF0Y2ggJ192b3JfcmVzZXRfJykgeyAndm9yIFJlc2V0JyB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCRuYW1lIC1tYXRjaCAnX3Zv -cl93aWVkZXJoZXJzdGVsbHVuZ18nKSB7ICd2b3IgV2llZGVyaGVyc3RlbGx1bmcnIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAnbWFudWVsbCcgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRidW5kbGUgPSAkbmFtZS5TdGFydHNXaXRoKCdzbmFwXycpDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVpbnRyYWVnZSArPSBbb3JkZXJlZF1Aew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlaW5hbWUgICA9ICRuYW1lDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIGdyb2Vzc2UgICAgID0gJF8uTGVuZ3RoDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIGVyc3RlbGx0QW0gID0gJF8uTGFzdFdyaXRlVGltZS5U -b1N0cmluZygncycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cCAgICAgICAg -ID0gJHR5cA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhhbHQgICAgICA9IGlm -ICgkYnVuZGxlKSB7ICdLb21wbGV0dCAoUGxhbnVuZyArIEFkbWluKScgfSBlbHNlIHsgJ051ciBQ -bGFudW5nJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzdEJ1bmRsZSAgID0g -JGJ1bmRsZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAkZWludHJhZWdlID0gQCgkZWludHJhZWdlIHwgU29ydC1PYmplY3QgLVByb3Bl -cnR5IGVyc3RlbGx0QW0gLURlc2NlbmRpbmcpDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2Jq -ZWN0ICRSZXNwb25zZSAkZWludHJhZWdlDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL3BsYW51bmcvYmFj -a3VwL2Rvd25sb2FkLyguKykkJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9y -ICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJG5hbWUgPSAkTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgIGlm -ICgtbm90ICgkbmFtZSAtbWF0Y2ggJ14oc25hcF98bGVnXylbMC05X2EtekEtWl0rXC5iYWskJykp -IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJGZwID0gSm9pbi1QYXRoICREYXRhRGlyICgnY2FjaGUv -JyArICRuYW1lKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQ -YXRoICRmcCkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicg -NDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGtsYXJ0ZXh0ID0gUmVhZC1CYWNrdXBU -ZXh0ICRmcA0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGtsYXJ0ZXh0KSB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICdCYWNrdXAtRGF0ZWkga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVu -JyA1MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYnl0ZXMgPSBbU3lzdGVtLlRleHQu -RW5jb2RpbmddOjpVVEY4LkdldEJ5dGVzKCRrbGFydGV4dCkNCiAgICAgICAgICAgICAgICAkUmVz -cG9uc2UuU3RhdHVzQ29kZSA9IDIwMA0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5Db250ZW50 -VHlwZSA9ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jw0KICAgICAgICAgICAgICAg -IEFkZC1TZWN1cml0eUhlYWRlcnMgJFJlc3BvbnNlDQogICAgICAgICAgICAgICAgJFJlc3BvbnNl -LkhlYWRlcnMuQWRkKCdDb250ZW50LURpc3Bvc2l0aW9uJywgImF0dGFjaG1lbnQ7IGZpbGVuYW1l -PWAiJG5hbWVgIiIpDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLkNvbnRlbnRMZW5ndGg2NCA9 -ICRieXRlcy5MZW5ndGgNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLldy -aXRlKCRieXRlcywgMCwgJGJ5dGVzLkxlbmd0aCkNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2Uu -T3V0cHV0U3RyZWFtLkNsb3NlKCkNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cC93aWVk -ZXJoZXJzdGVsbGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAg -IGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdiYWNrdXBzJykpIHsgU2VuZC1FcnJvciAkUmVz -cG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoQmFja3VwcyknIDQwMzsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAg -JGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJG5hbWUg -PSAiJCgkZGF0ZW4uZGF0ZWluYW1lKSINCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJG5hbWUg -LW1hdGNoICdeKHNuYXBffGxlZ18pWzAtOV9hLXpBLVpdK1wuYmFrJCcpKSB7IFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICdVbmd1ZWx0aWdlciBEYXRlaW5hbWUnIDQwMDsgY29udGludWUgfQ0KICAgICAg -ICAgICAgICAgICRjYWNoZURpciA9IEpvaW4tUGF0aCAkRGF0YURpciAnY2FjaGUnDQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGNhY2hlRGlyKSkgeyBO -ZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1QYXRoICRjYWNoZURpciAtRm9yY2UgfCBPdXQt -TnVsbCB9DQogICAgICAgICAgICAgICAgJHF1ZWxsID0gSm9pbi1QYXRoICRjYWNoZURpciAkbmFt -ZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRxdWVs -bCkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgJHRzID0gR2V0LURhdGUgLUZvcm1hdCAneXl5eU1N -ZGRfSEhtbXNzJw0KICAgICAgICAgICAgICAgICRzaWNoZXIgPSAic25hcF92b3Jfd2llZGVyaGVy -c3RlbGx1bmdfJHRzLmJhayINCiAgICAgICAgICAgICAgICAjIFNpY2hlcmhlaXRzLUJ1bmRsZSBk -ZXIgYWt0dWVsbGVuIERhdGVuIHZvciBVZWJlcnNjaHJlaWJlbi4NCiAgICAgICAgICAgICAgICAk -c2ljaGVyQnVuZGxlID0gW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ICA9 -ICd2aTMtYmFja3VwLXYxJw0KICAgICAgICAgICAgICAgICAgICB0cyAgICAgID0gJHRzDQogICAg -ICAgICAgICAgICAgICAgIHBsYW51bmcgPSAoUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24n -KQ0KICAgICAgICAgICAgICAgICAgICBhZG1pbiAgID0gKFJlYWQtSnNvbk9iamVjdCAnYWRtaW4u -anNvbicpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUJhY2t1cEJ5 -dGVzIChKb2luLVBhdGggJGNhY2hlRGlyICRzaWNoZXIpICgkc2ljaGVyQnVuZGxlIHwgQ29udmVy -dFRvLUpzb24gLURlcHRoIDMwKQ0KDQogICAgICAgICAgICAgICAgJHF1ZWxsSW5oYWx0ID0gUmVh -ZC1CYWNrdXBUZXh0ICRxdWVsbA0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHF1ZWxs -SW5oYWx0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNrdXAtRGF0ZWkga29ubnRlIG5pY2h0 -IGdlbGVzZW4gd2VyZGVuJyA1MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAk -cXVlbGxEYXRlbiA9ICRxdWVsbEluaGFsdCB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNl -bmQtRXJyb3IgJFJlc3BvbnNlICdCYWNrdXAtRGF0ZWkgbmljaHQgcGFyc2llcmJhcicgNDAwOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ID0gQCgpDQogICAg -ICAgICAgICAgICAgaWYgKCRxdWVsbERhdGVuIC1hbmQgJHF1ZWxsRGF0ZW4uUFNPYmplY3QuUHJv -cGVydGllc1snZm9ybWF0J10gLWFuZCAiJCgkcXVlbGxEYXRlbi5mb3JtYXQpIi5TdGFydHNXaXRo -KCd2aTMtYmFja3VwJykpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRxdWVsbERhdGVuLlBT -T2JqZWN0LlByb3BlcnRpZXNbJ3BsYW51bmcnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -V3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcXVlbGxEYXRlbi5wbGFudW5nIHwgT3V0 -LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICR3aWVkZXJoZXJnZXN0ZWxsdCArPSAncGxh -bnVuZycNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHF1 -ZWxsRGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snYWRtaW4nXSkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJHF1ZWxsRGF0ZW4uYWRtaW4g -fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ICs9 -ICdhZG1pbicNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7 -DQogICAgICAgICAgICAgICAgICAgICMgTGVnYWN5LUZvcm1hdCAobnVyIHBsYW51bmcuanNvbi1J -bmhhbHQpLg0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpz -b24nICRxdWVsbERhdGVuIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgJHdpZWRlcmhl -cmdlc3RlbGx0ICs9ICdwbGFudW5nJw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICBXcml0ZS1Mb2dFaW50cmFnICdiYWNrdXAud2llZGVyaGVyZ2VzdGVsbHQnIEB7IHF1ZWxsZSA9 -ICRuYW1lOyBzaWNoZXJ1bmcgPSAkc2ljaGVyOyBpbmhhbHQgPSAoJHdpZWRlcmhlcmdlc3RlbGx0 -IC1qb2luICcrJykgfQ0KICAgICAgICAgICAgICAgIE5ldy1IaW53ZWlzICdiYWNrdXBfd2llZGVy -aGVyZ2VzdGVsbHQnIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBiYWNrdXAgICAg -PSAkbmFtZQ0KICAgICAgICAgICAgICAgICAgICBzaWNoZXJ1bmcgPSAkc2ljaGVyDQogICAgICAg -ICAgICAgICAgICAgIGluaGFsdCAgICA9ICgkd2llZGVyaGVyZ2VzdGVsbHQgLWpvaW4gJysnKQ0K -ICAgICAgICAgICAgICAgIH0pIChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAg -ICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICd3aWVk -ZXJoZXJnZXN0ZWxsdCc7IHNpY2hlcnVuZyA9ICRzaWNoZXI7IGluaGFsdCA9ICR3aWVkZXJoZXJn -ZXN0ZWxsdCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9iYWNrdXAvbG9lc2NoZW4nIC1hbmQg +dC1OdWxsIH0NCiAgICAgICAgICAgICAgICAkcXVlbGwgPSBKb2luLVBhdGggJGNhY2hlRGlyICRu +YW1lDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHF1 +ZWxsKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmFja3VwIG5pY2h0IGdlZnVuZGVuJyA0MDQ7 +IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkdHMgPSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5 +TU1kZF9ISG1tc3MnDQogICAgICAgICAgICAgICAgJHNpY2hlciA9ICJzbmFwX3Zvcl93aWVkZXJo +ZXJzdGVsbHVuZ18kdHMuYmFrIg0KICAgICAgICAgICAgICAgICMgU2ljaGVyaGVpdHMtQnVuZGxl +IGRlciBha3R1ZWxsZW4gRGF0ZW4gdm9yIFVlYmVyc2NocmVpYmVuLg0KICAgICAgICAgICAgICAg +ICRzaWNoZXJCdW5kbGUgPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBmb3JtYXQg +ID0gJ3ZpMy1iYWNrdXAtdjEnDQogICAgICAgICAgICAgICAgICAgIHRzICAgICAgPSAkdHMNCiAg +ICAgICAgICAgICAgICAgICAgcGxhbnVuZyA9IChSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNv +bicpDQogICAgICAgICAgICAgICAgICAgIGFkbWluICAgPSAoUmVhZC1Kc29uT2JqZWN0ICdhZG1p +bi5qc29uJykNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtQmFja3Vw +Qnl0ZXMgKEpvaW4tUGF0aCAkY2FjaGVEaXIgJHNpY2hlcikgKCRzaWNoZXJCdW5kbGUgfCBDb252 +ZXJ0VG8tSnNvbiAtRGVwdGggMzApDQoNCiAgICAgICAgICAgICAgICAkcXVlbGxJbmhhbHQgPSBS +ZWFkLUJhY2t1cFRleHQgJHF1ZWxsDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcXVl +bGxJbmhhbHQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cC1EYXRlaSBrb25udGUgbmlj +aHQgZ2VsZXNlbiB3ZXJkZW4nIDUwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7 +ICRxdWVsbERhdGVuID0gJHF1ZWxsSW5oYWx0IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsg +U2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cC1EYXRlaSBuaWNodCBwYXJzaWVyYmFyJyA0MDA7 +IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkd2llZGVyaGVyZ2VzdGVsbHQgPSBAKCkNCiAg +ICAgICAgICAgICAgICBpZiAoJHF1ZWxsRGF0ZW4gLWFuZCAkcXVlbGxEYXRlbi5QU09iamVjdC5Q +cm9wZXJ0aWVzWydmb3JtYXQnXSAtYW5kICIkKCRxdWVsbERhdGVuLmZvcm1hdCkiLlN0YXJ0c1dp +dGgoJ3ZpMy1iYWNrdXAnKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJHF1ZWxsRGF0ZW4u +UFNPYmplY3QuUHJvcGVydGllc1sncGxhbnVuZyddKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRxdWVsbERhdGVuLnBsYW51bmcgfCBP +dXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ICs9ICdw +bGFudW5nJw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgk +cXVlbGxEYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydhZG1pbiddKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkcXVlbGxEYXRlbi5hZG1p +biB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkd2llZGVyaGVyZ2VzdGVsbHQg +Kz0gJ2FkbWluJw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNl +IHsNCiAgICAgICAgICAgICAgICAgICAgIyBMZWdhY3ktRm9ybWF0IChudXIgcGxhbnVuZy5qc29u +LUluaGFsdCkuDQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcu +anNvbicgJHF1ZWxsRGF0ZW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAkd2llZGVy +aGVyZ2VzdGVsbHQgKz0gJ3BsYW51bmcnDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2JhY2t1cC53aWVkZXJoZXJnZXN0ZWxsdCcgQHsgcXVlbGxl +ID0gJG5hbWU7IHNpY2hlcnVuZyA9ICRzaWNoZXI7IGluaGFsdCA9ICgkd2llZGVyaGVyZ2VzdGVs +bHQgLWpvaW4gJysnKSB9DQogICAgICAgICAgICAgICAgTmV3LUhpbndlaXMgJ2JhY2t1cF93aWVk +ZXJoZXJnZXN0ZWxsdCcgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIGJhY2t1cCAg +ICA9ICRuYW1lDQogICAgICAgICAgICAgICAgICAgIHNpY2hlcnVuZyA9ICRzaWNoZXINCiAgICAg +ICAgICAgICAgICAgICAgaW5oYWx0ICAgID0gKCR3aWVkZXJoZXJnZXN0ZWxsdCAtam9pbiAnKycp +DQogICAgICAgICAgICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0K +ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ3dp +ZWRlcmhlcmdlc3RlbGx0Jzsgc2ljaGVydW5nID0gJHNpY2hlcjsgaW5oYWx0ID0gJHdpZWRlcmhl +cmdlc3RlbGx0IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cC9sb2VzY2hlbicgLWFu +ZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1E +YXJmQmVyZWljaCAnYmFja3VwcycpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJl +Y2h0aWd1bmcgKEJhY2t1cHMpJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9k +eSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwg +Q29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRuYW1lID0gIiQoJGRhdGVuLmRhdGVp +bmFtZSkiDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKCRuYW1lIC1tYXRjaCAnXihzbmFwX3xs +ZWdfKVswLTlfYS16QS1aXStcLmJhayQnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVs +dGlnZXIgRGF0ZWluYW1lJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkZnAgPSBK +b2luLVBhdGggJERhdGFEaXIgKCdjYWNoZS8nICsgJG5hbWUpDQogICAgICAgICAgICAgICAgaWYg +KC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGZwKSkgeyBTZW5kLUVycm9yICRSZXNwb25z +ZSAnQmFja3VwIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJGZwIC1Gb3JjZQ0KICAgICAgICAgICAgICAgIFdy +aXRlLUxvZ0VpbnRyYWcgJ2JhY2t1cC5nZWxvZXNjaHQnIEB7IGRhdGVpbmFtZSA9ICRuYW1lIH0N +CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdn +ZWxvZXNjaHQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog +ICAgICAgICAgICAjID09PT09IFJFU0VUIC8gRFVNTVlEQVRFTiA9PT09PQ0KICAgICAgICAgICAg +aWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL3Jlc2V0JyAtYW5kICRNZXRob2QgLWVxICdQT1NU +Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBkaWUgUGxhbnVuZyB6dXJ1 +ZWNrc2V0emVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZ1BhdGgg +PSBKb2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkYmFj +a3VwTmFtZSA9ICRudWxsDQogICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBh +dGggJHBsYW51bmdQYXRoKSB7DQogICAgICAgICAgICAgICAgICAgICR0cyA9IEdldC1EYXRlIC1G +b3JtYXQgJ3l5eXlNTWRkX0hIbW1zcycNCiAgICAgICAgICAgICAgICAgICAgJGNhY2hlRGlyID0g +Sm9pbi1QYXRoICREYXRhRGlyICdjYWNoZScNCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3Qg +KFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGNhY2hlRGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUg +RGlyZWN0b3J5IC1QYXRoICRjYWNoZURpciAtRm9yY2UgfCBPdXQtTnVsbCB9DQogICAgICAgICAg +ICAgICAgICAgICMgUmVzdGF1cmllcmJhcmVyIE5hbWUgKHBsYW51bmdfYmFja3VwX3Zvcl9yZXNl +dF8qLmpzb24pIHN0YXR0DQogICAgICAgICAgICAgICAgICAgICMgLmJhayAtPiB3aXJkIHZvbSBC +YWNrdXBzLVRhYiBnZWxpc3RldCB1bmQga2FubiB3aWVkZXJoZXJnZXN0ZWxsdA0KICAgICAgICAg +ICAgICAgICAgICAjIHdlcmRlbi4gRnJ1ZWhlciB6dWRlbSBuaWNodCBhbiBkZW4gQ2xpZW50IHp1 +cnVlY2tnZWdlYmVuDQogICAgICAgICAgICAgICAgICAgICMgLT4gIkJhY2t1cDogdW5kZWZpbmVk +IiBpbiBkZXIgVUkuDQogICAgICAgICAgICAgICAgICAgICRiYWNrdXBOYW1lID0gInBsYW51bmdf +YmFja3VwX3Zvcl9yZXNldF8kdHMuanNvbiINCiAgICAgICAgICAgICAgICAgICAgQ29weS1JdGVt +IC1MaXRlcmFsUGF0aCAkcGxhbnVuZ1BhdGggLURlc3RpbmF0aW9uIChKb2luLVBhdGggJGNhY2hl +RGlyICRiYWNrdXBOYW1lKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcGxh +bnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgIGlm +ICgkbnVsbCAtbmUgJHBsYW51bmcpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5n +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVnZSddKSB7ICRwbGFudW5nLmVpbnRyYWVnZSA9 +IE5ldy1PYmplY3QgUFNPYmplY3QgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcu +UFNPYmplY3QuUHJvcGVydGllc1sna29tbWVudGFyZSddKSB7ICRwbGFudW5nLmtvbW1lbnRhcmUg +PSBOZXctT2JqZWN0IFBTT2JqZWN0IH0NCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9i +amVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BsYW51bmcucmVzZXQnIEB7fQ0K +ICAgICAgICAgICAgICAgIE5ldy1IaW53ZWlzICdwbGFudW5nX3Jlc2V0JyAoW29yZGVyZWRdQHsN +CiAgICAgICAgICAgICAgICAgICAgaGlud2VpcyA9ICdFaW50cmFlZ2UgdW5kIEtvbW1lbnRhcmUg +d3VyZGVuIGdlbG9lc2NodDsgU2ljaGVydW5nIGxpZWd0IGluIGRhdGEvY2FjaGUvLicNCiAgICAg +ICAgICAgICAgICB9KSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKSB8IE91dC1OdWxsDQogICAgICAg +ICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnenVydWVja2dl +c2V0enQnOyBiYWNrdXAgPSAkYmFja3VwTmFtZSB9DQogICAgICAgICAgICAgICAgY29udGludWUN +CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9k +dW1teWRhdGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlm +ICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBT +dXBlclVzZXIgZHVlcmZlbiBEdW1teWRhdGVuIGVpbnNwaWVsZW4nIDQwMzsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdEdW1teWRhdGVuIG51ciBpbSBE +ZWJ1Zy1TZXJ2ZXIgKGRldi9zZXJ2ZXIucHkpIGltcGxlbWVudGllcnQuJyA1MDENCiAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2Fw +aS9hZG1pbi9wcm90b2tvbGwtbG9lc2NoZW4NCiAgICAgICAgICAgICMgRWlubWFsLVJlc2V0IGZ1 +ZXIgTG9nYnVjaCArIEFQSS1Mb2cuIFNldHp0IGxvZ2J1Y2guanNvbiBhdWYgW10sDQogICAgICAg +ICAgICAjIGxvZXNjaHQgZGllIEFQSS1Mb2ctRGF0ZWkgYXVzICVURU1QJSwgdW5kIHNjaHJlaWJ0 +IGVpbmVuIGVpbnppZ2VuDQogICAgICAgICAgICAjIG5ldWVuIExvZ2J1Y2gtRWludHJhZyAocHJv +dG9rb2xsLmdlbG9lc2NodCksIGRhbWl0IGRhcyBFcmVpZ25pcw0KICAgICAgICAgICAgIyBzZWxi +c3QgbmFjaHZvbGx6aWVoYmFyIGJsZWlidC4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h +cGkvYWRtaW4vcHJvdG9rb2xsLWxvZXNjaGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0K +ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBkYXMgUHJvdG9rb2xsIGxvZXNjaGVu +JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkdm9yaGVyID0gUmVhZC1Kc29uT2Jq +ZWN0ICdsb2didWNoLmpzb24nDQogICAgICAgICAgICAgICAgJGFuemFobFZvcmhlciA9IDANCiAg +ICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICR2b3JoZXIpIHsNCiAgICAgICAgICAgICAgICAg +ICAgJGFuemFobFZvcmhlciA9IEAoJHZvcmhlcikuQ291bnQNCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnbG9nYnVjaC5qc29uJyBAKCkgfCBPdXQt +TnVsbA0KDQogICAgICAgICAgICAgICAgJGFwaUxvZ0J5dGVzID0gMA0KICAgICAgICAgICAgICAg +IGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRzY3JpcHQ6QXBpTG9nKSB7DQogICAgICAgICAg +ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYXBpTG9nQnl0ZXMgPSAo +R2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRzY3JpcHQ6QXBpTG9nKS5MZW5ndGgNCiAgICAgICAgICAg +ICAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0OkFwaUxvZyAtRm9y +Y2UgLUVycm9yQWN0aW9uIFN0b3ANCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAjIERhdGVpIGV2dGwuIG5vY2ggb2ZmZW47IGlnbm9yaWVyZW4s +IExvZ2J1Y2ggaXN0IGRpZSB3aWNodGlnZXJlIFNwdXINCiAgICAgICAgICAgICAgICAgICAgICAg +ICRhcGlMb2dCeXRlcyA9IC0xDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICB9DQoNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdwcm90b2tvbGwuZ2Vsb2Vz +Y2h0JyBAew0KICAgICAgICAgICAgICAgICAgICBsb2didWNoRWludHJhZWdlVm9yaGVyID0gJGFu +emFobFZvcmhlcg0KICAgICAgICAgICAgICAgICAgICBhcGlMb2dCeXRlcyAgICAgICAgICAgID0g +JGFwaUxvZ0J5dGVzDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv +bk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAg +ICAgICAgICA9ICdnZWxvZXNjaHQnDQogICAgICAgICAgICAgICAgICAgIGxvZ2J1Y2hFaW50cmFl +Z2VWb3JoZXIgPSAkYW56YWhsVm9yaGVyDQogICAgICAgICAgICAgICAgICAgIGFwaUxvZ0J5dGVz +ICAgICAgICAgICAgPSAkYXBpTG9nQnl0ZXMNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBTVEFU +SVNUSUsgLyBMT0dCVUNIID09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3N0 +YXRpc3RpaycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgt +bm90IChUZXN0LURhcmZCZXJlaWNoICdzdGF0aXN0aWsnKSkgew0KICAgICAgICAgICAgICAgICAg +ICBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChTdGF0aXN0aWspJyA0 +MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRwbGFudW5n +ID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgJGFkbWlu +ICAgPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgU2VuZC1K +c29uT2JqZWN0ICRSZXNwb25zZSAoR2V0LVN0YXRpc3Rpa0RhdGEgJHBsYW51bmcgJGFkbWluKQ0K +ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAo +JFBhdGggLWVxICcvYXBpL2xvZ2J1Y2gnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnbG9nYnVjaCcpKSB7DQogICAg +ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcg +KExvZ2J1Y2gpJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgIFNlbmQtSnNvblRleHQgJFJlc3BvbnNlIChHZXQtTG9nYnVjaFRleHQpDQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09 +PT09PT09PT09PT0gWkVMTC1MT0NLICsgQ0hBTkdFUyAoTGl2ZS1TeW5jKSA9PT09PT09PT09PT09 +PT09PT09PT0NCiAgICAgICAgICAgICMgUE9TVCAvYXBpL2xvY2svemVsbGUgIHsgZGF0dW0sIHBl +cnNvbklkIH0gLT4geyBvaywgdG9rZW4sIC4uLiB9IG9kZXIgNDIzIHsgc3BlcnJlciwgLi4uIH0N +CiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZScgLWFuZCAkTWV0aG9k +IC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVz +dA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYSA9 +ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXR1bSA9IFtzdHJp +bmddJGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbc3RyaW5nXSRhLnBlcnNv +bklkDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtTG9ja1NhZmVEYXR1bSAkZGF0dW0p +IC1vciAtbm90IChUZXN0LUxvY2tTYWZlSWQgJHBlcnNvbklkKSkgew0KICAgICAgICAgICAgICAg +ICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZSBkYXR1bS9wZXJzb25JZCcgNDAw +OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdXNlciA9IEdl +dC1Ba3R1ZWxsZXJCZW51dHplcg0KICAgICAgICAgICAgICAgICRyb2xsZSA9IChHZXQtUmVjaHRl +KS5yb2xsZQ0KICAgICAgICAgICAgICAgICRyZXMgPSBBY3F1aXJlLUNlbGxMb2NrICRkYXR1bSAk +cGVyc29uSWQgJHVzZXIgJHJvbGxlICRmYWxzZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRy +ZXMub2spIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA +ew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgID0gJ2dlc3BlcnJ0Jw0KICAgICAg +ICAgICAgICAgICAgICAgICAgbWVsZHVuZyAgID0gIldpcmQgYmVhcmJlaXRldCB2b24gJCgkcmVz +LmV4aXN0aW5nLnVzZXJuYW1lKSINCiAgICAgICAgICAgICAgICAgICAgICAgIHNwZXJyZXIgICA9 +ICRyZXMuZXhpc3RpbmcudXNlcm5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGxlICAg +ICA9ICRyZXMuZXhpc3Rpbmcucm9sbGUNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlaXQgICAg +ICA9ICRyZXMuZXhpc3RpbmcubG9ja2VkQXQNCiAgICAgICAgICAgICAgICAgICAgICAgIGthbm5G +b3JjZSA9IChUZXN0LURhcmZMb2NrVWViZXJzY2hyZWliZW4pDQogICAgICAgICAgICAgICAgICAg +IH0gNDIzDQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAg +ICAgICAgICAgb2sgICAgICAgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB0b2tlbiAgICA9 +ICRyZXMubG9jay50b2tlbg0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICA9ICRkYXR1bQ0K +ICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAg +ICAgICByb2xsZSAgICA9ICRyb2xsZQ0KICAgICAgICAgICAgICAgICAgICBsb2NrZWRBdCA9ICRy +ZXMubG9jay5sb2NrZWRBdA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250 +aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2FwaS9sb2NrL3plbGxl +L2ZvcmNlICB7IGRhdHVtLCBwZXJzb25JZCB9IC0+IHVlYmVyc2NocmVpYnQgZnJlbWRlbiBMb2Nr +DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2xvY2svemVsbGUvZm9yY2UnIC1hbmQg JE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFy -ZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNo -dGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkg -PSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENv -bnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkbmFtZSA9ICIkKCRkYXRlbi5kYXRlaW5h -bWUpIg0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkbmFtZSAtbWF0Y2ggJ14oc25hcF98bGVn -XylbMC05X2EtekEtWl0rXC5iYWskJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRp -Z2VyIERhdGVpbmFtZScgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGZwID0gSm9p -bi1QYXRoICREYXRhRGlyICgnY2FjaGUvJyArICRuYW1lKQ0KICAgICAgICAgICAgICAgIGlmICgt -bm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRmcCkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -J0JhY2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg -UmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRmcCAtRm9yY2UNCiAgICAgICAgICAgICAgICBXcml0 -ZS1Mb2dFaW50cmFnICdiYWNrdXAuZ2Vsb2VzY2h0JyBAeyBkYXRlaW5hbWUgPSAkbmFtZSB9DQog -ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vs -b2VzY2h0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAg -ICAgICAgICAgIyA9PT09PSBSRVNFVCAvIERVTU1ZREFURU4gPT09PT0NCiAgICAgICAgICAgIGlm -ICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9yZXNldCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcp -IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gZGllIFBsYW51bmcgenVydWVj -a3NldHplbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHBsYW51bmdQYXRoID0g -Sm9pbi1QYXRoICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgJGJhY2t1 -cE5hbWUgPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRo -ICRwbGFudW5nUGF0aCkgew0KICAgICAgICAgICAgICAgICAgICAkdHMgPSBHZXQtRGF0ZSAtRm9y -bWF0ICd5eXl5TU1kZF9ISG1tc3MnDQogICAgICAgICAgICAgICAgICAgICRjYWNoZURpciA9IEpv -aW4tUGF0aCAkRGF0YURpciAnY2FjaGUnDQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90IChU -ZXN0LVBhdGggLUxpdGVyYWxQYXRoICRjYWNoZURpcikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERp -cmVjdG9yeSAtUGF0aCAkY2FjaGVEaXIgLUZvcmNlIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAg -ICAgICAgICAjIFJlc3RhdXJpZXJiYXJlciBOYW1lIChwbGFudW5nX2JhY2t1cF92b3JfcmVzZXRf -Ki5qc29uKSBzdGF0dA0KICAgICAgICAgICAgICAgICAgICAjIC5iYWsgLT4gd2lyZCB2b20gQmFj -a3Vwcy1UYWIgZ2VsaXN0ZXQgdW5kIGthbm4gd2llZGVyaGVyZ2VzdGVsbHQNCiAgICAgICAgICAg -ICAgICAgICAgIyB3ZXJkZW4uIEZydWVoZXIgenVkZW0gbmljaHQgYW4gZGVuIENsaWVudCB6dXJ1 -ZWNrZ2VnZWJlbg0KICAgICAgICAgICAgICAgICAgICAjIC0+ICJCYWNrdXA6IHVuZGVmaW5lZCIg -aW4gZGVyIFVJLg0KICAgICAgICAgICAgICAgICAgICAkYmFja3VwTmFtZSA9ICJwbGFudW5nX2Jh -Y2t1cF92b3JfcmVzZXRfJHRzLmpzb24iDQogICAgICAgICAgICAgICAgICAgIENvcHktSXRlbSAt -TGl0ZXJhbFBhdGggJHBsYW51bmdQYXRoIC1EZXN0aW5hdGlvbiAoSm9pbi1QYXRoICRjYWNoZURp -ciAkYmFja3VwTmFtZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHBsYW51 -bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAo -JG51bGwgLW5lICRwbGFudW5nKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSkgeyAkcGxhbnVuZy5laW50cmFlZ2UgPSBO -ZXctT2JqZWN0IFBTT2JqZWN0IH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLlBT -T2JqZWN0LlByb3BlcnRpZXNbJ2tvbW1lbnRhcmUnXSkgeyAkcGxhbnVuZy5rb21tZW50YXJlID0g -TmV3LU9iamVjdCBQU09iamVjdCB9DQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmpl -Y3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdwbGFudW5nLnJlc2V0JyBAe30NCiAg -ICAgICAgICAgICAgICBOZXctSGlud2VpcyAncGxhbnVuZ19yZXNldCcgKFtvcmRlcmVkXUB7DQog -ICAgICAgICAgICAgICAgICAgIGhpbndlaXMgPSAnRWludHJhZWdlIHVuZCBLb21tZW50YXJlIHd1 -cmRlbiBnZWxvZXNjaHQ7IFNpY2hlcnVuZyBsaWVndCBpbiBkYXRhL2NhY2hlLy4nDQogICAgICAg -ICAgICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAg -ICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ3p1cnVlY2tnZXNl -dHp0JzsgYmFja3VwID0gJGJhY2t1cE5hbWUgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog -ICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvZHVt -bXlkYXRlbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAo -LW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3Vw -ZXJVc2VyIGR1ZXJmZW4gRHVtbXlkYXRlbiBlaW5zcGllbGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAg -ICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnRHVtbXlkYXRlbiBudXIgaW0gRGVi -dWctU2VydmVyIChkZXYvc2VydmVyLnB5KSBpbXBsZW1lbnRpZXJ0LicgNTAxDQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkv -YWRtaW4vcHJvdG9rb2xsLWxvZXNjaGVuDQogICAgICAgICAgICAjIEVpbm1hbC1SZXNldCBmdWVy -IExvZ2J1Y2ggKyBBUEktTG9nLiBTZXR6dCBsb2didWNoLmpzb24gYXVmIFtdLA0KICAgICAgICAg -ICAgIyBsb2VzY2h0IGRpZSBBUEktTG9nLURhdGVpIGF1cyAlVEVNUCUsIHVuZCBzY2hyZWlidCBl -aW5lbiBlaW56aWdlbg0KICAgICAgICAgICAgIyBuZXVlbiBMb2didWNoLUVpbnRyYWcgKHByb3Rv -a29sbC5nZWxvZXNjaHQpLCBkYW1pdCBkYXMgRXJlaWduaXMNCiAgICAgICAgICAgICMgc2VsYnN0 -IG5hY2h2b2xsemllaGJhciBibGVpYnQuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp -L2FkbWluL3Byb3Rva29sbC1sb2VzY2hlbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gZGFzIFByb3Rva29sbCBsb2VzY2hlbicg -NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHZvcmhlciA9IFJlYWQtSnNvbk9iamVj -dCAnbG9nYnVjaC5qc29uJw0KICAgICAgICAgICAgICAgICRhbnphaGxWb3JoZXIgPSAwDQogICAg -ICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkdm9yaGVyKSB7DQogICAgICAgICAgICAgICAgICAg -ICRhbnphaGxWb3JoZXIgPSBAKCR2b3JoZXIpLkNvdW50DQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2xvZ2J1Y2guanNvbicgQCgpIHwgT3V0LU51 -bGwNCg0KICAgICAgICAgICAgICAgICRhcGlMb2dCeXRlcyA9IDANCiAgICAgICAgICAgICAgICBp -ZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkc2NyaXB0OkFwaUxvZykgew0KICAgICAgICAgICAg -ICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFwaUxvZ0J5dGVzID0gKEdl -dC1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0OkFwaUxvZykuTGVuZ3RoDQogICAgICAgICAgICAg -ICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdDpBcGlMb2cgLUZvcmNl -IC1FcnJvckFjdGlvbiBTdG9wDQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAg -ICAgICAgICAgICAgICAgICAgIyBEYXRlaSBldnRsLiBub2NoIG9mZmVuOyBpZ25vcmllcmVuLCBM -b2didWNoIGlzdCBkaWUgd2ljaHRpZ2VyZSBTcHVyDQogICAgICAgICAgICAgICAgICAgICAgICAk -YXBpTG9nQnl0ZXMgPSAtMQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -fQ0KDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncHJvdG9rb2xsLmdlbG9lc2No -dCcgQHsNCiAgICAgICAgICAgICAgICAgICAgbG9nYnVjaEVpbnRyYWVnZVZvcmhlciA9ICRhbnph -aGxWb3JoZXINCiAgICAgICAgICAgICAgICAgICAgYXBpTG9nQnl0ZXMgICAgICAgICAgICA9ICRh -cGlMb2dCeXRlcw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25P -YmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgICAgICAg -ICAgICAgPSAnZ2Vsb2VzY2h0Jw0KICAgICAgICAgICAgICAgICAgICBsb2didWNoRWludHJhZWdl -Vm9yaGVyID0gJGFuemFobFZvcmhlcg0KICAgICAgICAgICAgICAgICAgICBhcGlMb2dCeXRlcyAg -ICAgICAgICAgID0gJGFwaUxvZ0J5dGVzDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gU1RBVElT -VElLIC8gTE9HQlVDSCA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zdGF0 -aXN0aWsnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAoVGVzdC1EYXJmQmVyZWljaCAnc3RhdGlzdGlrJykpIHsNCiAgICAgICAgICAgICAgICAgICAg -U2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoU3RhdGlzdGlrKScgNDAz -OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZyA9 -IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRhZG1pbiAg -ID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIFNlbmQtSnNv -bk9iamVjdCAkUmVzcG9uc2UgKEdldC1TdGF0aXN0aWtEYXRhICRwbGFudW5nICRhZG1pbikNCiAg -ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQ -YXRoIC1lcSAnL2FwaS9sb2didWNoJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2xvZ2J1Y2gnKSkgew0KICAgICAg -ICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChM -b2didWNoKScgNDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICBTZW5kLUpzb25UZXh0ICRSZXNwb25zZSAoR2V0LUxvZ2J1Y2hUZXh0KQ0KICAgICAgICAgICAg -ICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09 -PT09PT09PT09IFpFTEwtTE9DSyArIENIQU5HRVMgKExpdmUtU3luYykgPT09PT09PT09PT09PT09 -PT09PT09DQogICAgICAgICAgICAjIFBPU1QgL2FwaS9sb2NrL3plbGxlICB7IGRhdHVtLCBwZXJz -b25JZCB9IC0+IHsgb2ssIHRva2VuLCAuLi4gfSBvZGVyIDQyMyB7IHNwZXJyZXIsIC4uLiB9DQog -ICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2xvY2svemVsbGUnIC1hbmQgJE1ldGhvZCAt -ZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QN -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn -QW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAk -Ym9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSBbc3RyaW5n -XSRhLmRhdHVtDQogICAgICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25J -ZA0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUxvY2tTYWZlRGF0dW0gJGRhdHVtKSAt -b3IgLW5vdCAoVGVzdC1Mb2NrU2FmZUlkICRwZXJzb25JZCkpIHsNCiAgICAgICAgICAgICAgICAg -ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsg -Y29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHVzZXIgPSBHZXQt -QWt0dWVsbGVyQmVudXR6ZXINCiAgICAgICAgICAgICAgICAkcm9sbGUgPSAoR2V0LVJlY2h0ZSku -cm9sbGUNCiAgICAgICAgICAgICAgICAkcmVzID0gQWNxdWlyZS1DZWxsTG9jayAkZGF0dW0gJHBl -cnNvbklkICR1c2VyICRyb2xsZSAkZmFsc2UNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcmVz -Lm9rKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsN -CiAgICAgICAgICAgICAgICAgICAgICAgIGZlaGxlciAgICA9ICdnZXNwZXJydCcNCiAgICAgICAg -ICAgICAgICAgICAgICAgIG1lbGR1bmcgICA9ICJXaXJkIGJlYXJiZWl0ZXQgdm9uICQoJHJlcy5l -eGlzdGluZy51c2VybmFtZSkiDQogICAgICAgICAgICAgICAgICAgICAgICBzcGVycmVyICAgPSAk -cmVzLmV4aXN0aW5nLnVzZXJuYW1lDQogICAgICAgICAgICAgICAgICAgICAgICByb2xsZSAgICAg -PSAkcmVzLmV4aXN0aW5nLnJvbGxlDQogICAgICAgICAgICAgICAgICAgICAgICBzZWl0ICAgICAg -PSAkcmVzLmV4aXN0aW5nLmxvY2tlZEF0DQogICAgICAgICAgICAgICAgICAgICAgICBrYW5uRm9y -Y2UgPSAoVGVzdC1EYXJmTG9ja1VlYmVyc2NocmVpYmVuKQ0KICAgICAgICAgICAgICAgICAgICB9 -IDQyMw0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAg -ICAgICAgIG9rICAgICAgID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gICAgPSAk -cmVzLmxvY2sudG9rZW4NCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAg -ICAgICAgICAgICAgICAgICAgcGVyc29uSWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAg -ICAgcm9sbGUgICAgPSAkcm9sbGUNCiAgICAgICAgICAgICAgICAgICAgbG9ja2VkQXQgPSAkcmVz -LmxvY2subG9ja2VkQXQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGlu -dWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvbG9jay96ZWxsZS9m -b3JjZSAgeyBkYXR1bSwgcGVyc29uSWQgfSAtPiB1ZWJlcnNjaHJlaWJ0IGZyZW1kZW4gTG9jaw0K -ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlL2ZvcmNlJyAtYW5kICRN -ZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZM -b2NrVWViZXJzY2hyZWliZW4pKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJl -c3BvbnNlICdGb3JjZS1Mb2NrIG51ciBmdWVyIEZhY2hhdWZzaWNodC9TdXBlclVzZXInIDQwMzsg -Y29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFk -LUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVy -cm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAk -ZGF0dW0gPSBbc3RyaW5nXSRhLmRhdHVtDQogICAgICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0 -cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUxvY2tTYWZl -RGF0dW0gJGRhdHVtKSAtb3IgLW5vdCAoVGVzdC1Mb2NrU2FmZUlkICRwZXJzb25JZCkpIHsNCiAg -ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2UgZGF0dW0v -cGVyc29uSWQnIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgJHVzZXIgPSBHZXQtQWt0dWVsbGVyQmVudXR6ZXINCiAgICAgICAgICAgICAgICAkcm9sbGUg -PSAoR2V0LVJlY2h0ZSkucm9sbGUNCiAgICAgICAgICAgICAgICAkcmVzID0gQWNxdWlyZS1DZWxs -TG9jayAkZGF0dW0gJHBlcnNvbklkICR1c2VyICRyb2xsZSAkdHJ1ZQ0KICAgICAgICAgICAgICAg -IFdyaXRlLUxvZ0VpbnRyYWcgJ2xvY2suZm9yY2UnIEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25J -ZCA9ICRwZXJzb25JZDsgcm9sbGUgPSAkcm9sbGUgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv -bk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgb2sgICAgICAgPSAkdHJ1 -ZQ0KICAgICAgICAgICAgICAgICAgICB0b2tlbiAgICA9ICRyZXMubG9jay50b2tlbg0KICAgICAg -ICAgICAgICAgICAgICBkYXR1bSAgICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJz -b25JZCA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICByb2xsZSAgICA9ICRyb2xsZQ0K -ICAgICAgICAgICAgICAgICAgICBsb2NrZWRBdCA9ICRyZXMubG9jay5sb2NrZWRBdA0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAjIFBPU1QgL2FwaS9sb2NrL3plbGxlL2hlYXJ0YmVhdCAgeyB0b2tlbiB9IC0+ -IGFrdHVhbGlzaWVydCBsYXN0QmVhdA0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9s -b2NrL3plbGxlL2hlYXJ0YmVhdCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAg -ICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgt -bm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7 -IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNv -bg0KICAgICAgICAgICAgICAgICR0b2tlbiA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0 -b2tlbiddKSB7IFtzdHJpbmddJGEudG9rZW4gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAg -IGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCR0b2tlbikpIHsgU2VuZC1FcnJvciAk -UmVzcG9uc2UgJ1Rva2VuIGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk -cmVzID0gUmVmcmVzaC1DZWxsTG9jayAkdG9rZW4NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -cmVzLm9rKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug -QHsgZmVobGVyID0gJ3VuYmVrYW5udGVyX2xvY2snOyBtZWxkdW5nID0gJ0xvY2sgZXhpc3RpZXJ0 -IG5pY2h0IChtZWhyKS4nIH0gNDA0DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug -QHsgb2sgPSAkdHJ1ZTsgbGFzdEJlYXQgPSAkcmVzLmxvY2subGFzdEJlYXQgfQ0KICAgICAgICAg -ICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgREVMRVRFIC9h -cGkvbG9jay96ZWxsZSAgeyB0b2tlbiB9IC0+IExvY2sgZnJlaWdlYmVuIChhdWNoIHZpYSBRdWVy -eS1TdHJpbmcgZnVlciBzZW5kQmVhY29uKQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw -aS9sb2NrL3plbGxlJyAtYW5kICRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAg -ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICAkdG9rZW4gPSAk -bnVsbA0KICAgICAgICAgICAgICAgIGlmICgkYm9keSkgew0KICAgICAgICAgICAgICAgICAgICB0 -cnkgeyAkYSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbjsgaWYgKCRhLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ3Rva2VuJ10pIHsgJHRva2VuID0gW3N0cmluZ10kYS50b2tlbiB9IH0gY2F0Y2gge30N -CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxP -cldoaXRlU3BhY2UoJHRva2VuKSAtYW5kICRSZXF1ZXN0LlVybC5RdWVyeSkgew0KICAgICAgICAg -ICAgICAgICAgICAkcSA9IFtTeXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6UGFyc2VRdWVyeVN0cmlu -ZygkUmVxdWVzdC5VcmwuUXVlcnkpDQogICAgICAgICAgICAgICAgICAgICR0b2tlbiA9IFtzdHJp -bmddJHFbJ3Rva2VuJ10NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKFtz -dHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJHRva2VuKSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnVG9rZW4gZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRyZXMgPSBS -ZWxlYXNlLUNlbGxMb2NrICR0b2tlbg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk -UmVzcG9uc2UgQHsgb2sgPSAkcmVzLm9rIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg -ICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIEdFVCAvYXBpL2xvY2svemVsbGVuIC0+IExpc3Rl -IGFsbGVyIGFrdGl2ZW4gTG9ja3MgKGZ1ZXIgTGl2ZS1JbmRpY2F0b3IpDQogICAgICAgICAgICBp -ZiAoJFBhdGggLWVxICcvYXBpL2xvY2svemVsbGVuJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7 -DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBsb2NrcyA9IChH -ZXQtQWxsQWN0aXZlQ2VsbExvY2tzKSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg -ICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvdmVyYW50d29ydHVuZy9hdWZnZXJ1 -ZWNrdCDigJQgU3RhdGlzdGlrLUNhcHR1cmUgZnVlciBkZW4NCiAgICAgICAgICAgICMgIkVpbmdl -c3BydW5nZW4iLUJhbGtlbiBpbiBkZXIgU2NoaWNodHZlcnRlaWx1bmcuIFdpcmQgdm9tIENsaWVu -dA0KICAgICAgICAgICAgIyBnZWZldWVydCwgc29iYWxkIGplbWFuZCBpbm5lcmhhbGIgZGVyIDE0 -LVRhZ2UtVmVyYmluZGxpY2hrZWl0IG5ldQ0KICAgICAgICAgICAgIyBpbiBkaWUgVG9wLTIgKDEu -LzIuIFZJMy1ER0wpIGVpbmVyIFNjaGljaHQgYXVmcnVlY2t0IOKAlCBhbHNvDQogICAgICAgICAg -ICAjIGF1c3NlcnBsYW5tYWVzc2lnIFZlcmFudHdvcnR1bmcgdWViZXJuaW1tdC4NCiAgICAgICAg -ICAgICMgQm9keTogeyBwZXJzb25JZCwgZGF0dW0sIHNjaGljaHQsIHN0dWZlLCB2b3JoZXJXZXJ0 -LCBhdXNsb2VzZXJQZXJzb25JZCB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3Zl -cmFudHdvcnR1bmcvYXVmZ2VydWVja3QnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAg -ICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycg -NDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsgJGEgPSAkYm9keSB8IENvbnZl -cnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBK -U09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGlkID0gaWYgKCRhLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ3BlcnNvbklkJ10pIHsgW3N0cmluZ10kYS5wZXJzb25JZCB9IGVsc2Ug -eyAnJyB9DQogICAgICAgICAgICAgICAgJGRhdCA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVz -WydkYXR1bSddKSB7IFtzdHJpbmddJGEuZGF0dW0gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAg -ICAgIGlmICgtbm90ICRwaWQgLW9yIC1ub3QgJGRhdCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn -cGVyc29uSWQvZGF0dW0gZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRm -ZWxkZXIgPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgID0gJHBp -ZA0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICAgID0gJGRhdA0KICAgICAgICAgICAgICAg -ICAgICBzY2hpY2h0ICAgID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NjaGljaHQnXSkg -eyBbc3RyaW5nXSRhLnNjaGljaHQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBz -dHVmZSAgICAgID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0dWZlJ10pIHsgW2ludF0k -YS5zdHVmZSB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICAgICAgdm9yaGVyV2VydCA9IGlm -ICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2b3JoZXJXZXJ0J10pIHsgW3N0cmluZ10kYS52b3Jo -ZXJXZXJ0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -aWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2F1c2xvZXNlclBlcnNvbklkJ10pIHsNCiAgICAg -ICAgICAgICAgICAgICAgJGZlbGRlclsnYXVzbG9lc2VyUGVyc29uSWQnXSA9IFtzdHJpbmddJGEu -YXVzbG9lc2VyUGVyc29uSWQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3Jp -dGUtTG9nRWludHJhZyAndmVyYW50d29ydHVuZy5laW5nZXNwcnVuZ2VuJyAkZmVsZGVyDQogICAg -ICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBvayA9ICR0cnVlIH0NCiAg -ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICMg -R0VUIC9hcGkvcGxhbnVuZy9jaGFuZ2VzP3NlaXQ9PGlzby10cz4gLT4gRGVsdGEtTGlzdGUgZnVl -ciBMaXZlLVN5bmMNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9jaGFu -Z2VzJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJHEgPSBbU3lz -dGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVlcnlTdHJpbmcoJFJlcXVlc3QuVXJsLlF1ZXJ5 -KQ0KICAgICAgICAgICAgICAgICRsb2cgPSBSZWFkLUpzb25PYmplY3QgJ2NoYW5nZXMuanNvbicN -CiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRsb2cgLW9yIC1ub3QgKCRsb2cgLWlzIFth -cnJheV0pKSB7ICRsb2cgPSBAKCkgfQ0KICAgICAgICAgICAgICAgICRtYXhTZXEgPSBHZXQtTWF4 -Q2hhbmdlU2VxICRsb2cNCiAgICAgICAgICAgICAgICBpZiAoJHEuQWxsS2V5cyAtY29udGFpbnMg -J3NlaXRfc2VxJykgew0KICAgICAgICAgICAgICAgICAgICAjIE5ldWVyIHJhY2UtZnJlaWVyIHNl -cS1DdXJzb3IgKENoYW5nZXMgKyBzZXJ2ZXJTZXEgYXVzDQogICAgICAgICAgICAgICAgICAgICMg -REVNU0VMQkVOIFJlYWQpLiBMZWVyZXIgc2VpdF9zZXEgPSBFcnN0LVN5bmMgLT4gbnVyIEN1cnNv -ci4NCiAgICAgICAgICAgICAgICAgICAgJHJhdyA9IFtzdHJpbmddJHFbJ3NlaXRfc2VxJ10NCiAg -ICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPckVtcHR5KCRyYXcpKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAkY2hhbmdlcyA9IEAoKQ0KICAgICAgICAgICAgICAgICAg -ICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNxID0gMDsgW3ZvaWRdW2ludF06 -OlRyeVBhcnNlKCRyYXcsIFtyZWZdJHNxKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoYW5n -ZXMgPSBAKCRsb2cgfCBXaGVyZS1PYmplY3QgeyAkbnVsbCAtbmUgJF8uc2VxIC1hbmQgW2ludF0k -Xy5zZXEgLWd0ICRzcSB9KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -ICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAg -IHNlcnZlclRzICA9IChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyU2VxID0gJG1heFNlcQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgY2hhbmdlcyAgID0gW29iamVjdFtdXSRjaGFuZ2VzDQogICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAj -IEJhY2t3YXJkLWNvbXBhdDogYWx0ZXIgV2FsbC1DbG9jay1DdXJzb3IgKGFsdGUgQ2xpZW50cyku -DQogICAgICAgICAgICAgICAgICAgICRzZWl0ID0gW3N0cmluZ10kcVsnc2VpdCddDQogICAgICAg -ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgIHNlcnZlclRzICA9IChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJp -bmcoJ28nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyU2VxID0gJG1heFNlcQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyAgID0gKEdldC1DaGFuZ2VzU2luY2UgJHNlaXQp -DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBQcm9maWxi -aWxkZXIgKEF2YXRhcmUpID09PT09DQogICAgICAgICAgICAjIERhdGVpOiAkRGF0YURpci9hdmF0 -YXJzLzxpZD4uanBnICAgKEpQRUcsIHZvbSBDbGllbnQgYXVmIDIwMHgyMDANCiAgICAgICAgICAg -ICMgaGVydW50ZXJnZXJlY2huZXQsIHVlYmxpY2ggNS0yNSBLQikuDQogICAgICAgICAgICAjDQog -ICAgICAgICAgICAjIEJlcmVjaHRpZ3VuZzoNCiAgICAgICAgICAgICMgICBQT1NUL0RFTEVURTog -U1UvRkEgT0RFUiBlaWdlbmUgUGVyc29uSWQgKFNlbGYtU2VydmljZSkuDQogICAgICAgICAgICAj -ICAgR0VUOiAgICAgICAgIGFsbGUgZWluZ2Vsb2dndGVuIFVzZXIgKGltIEdyaWQgc2ljaHRiYXIp -Lg0KICAgICAgICAgICAgIw0KICAgICAgICAgICAgIyBQT1NULUJvZHk6IHsgImRhdGFVcmwiOiAi -ZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCw8Li4uPiIgfQ0KICAgICAgICAgICAgIyAyNTAgS0IgaGFy -dGVyIENhcCAoZGVmZW5zaXYg4oCUIENsaWVudCBzY2hpY2t0IHR5cGlzY2ggPDMwIEtCKS4NCiAg -ICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL3BlcnNvbmVuLyhcZCspL2F2YXRhciQn -KSB7DQogICAgICAgICAgICAgICAgJHBlcnNvbklkID0gJG1hdGNoZXNbMV0NCiAgICAgICAgICAg -ICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICAkaXN0RWlnZW4gPSAoJG51bGwg -LW5lICRyLm1laW5lUGVyc29uSWQgLWFuZCBbaW50XSRwZXJzb25JZCAtZXEgW2ludF0kci5tZWlu -ZVBlcnNvbklkKQ0KICAgICAgICAgICAgICAgICRpc3RCZXJlY2h0aWd0ID0gKFRlc3QtSXN0QWRt -aW4pIC1vciAkaXN0RWlnZW4NCiAgICAgICAgICAgICAgICAkYXZhdGFyRGlyID0gSm9pbi1QYXRo -ICREYXRhRGlyICdhdmF0YXJzJw0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGgg -LUxpdGVyYWxQYXRoICRhdmF0YXJEaXIpKSB7DQogICAgICAgICAgICAgICAgICAgIHRyeSB7IE5l -dy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggJGF2YXRhckRpciAtRm9yY2UgfCBPdXQt -TnVsbCB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRhdmF0 -YXJGaWxlID0gSm9pbi1QYXRoICRhdmF0YXJEaXIgKCRwZXJzb25JZCArICcuanBnJykNCiAgICAg -ICAgICAgICAgICBpZiAoJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgICAg -IGlmICgtbm90ICRpc3RCZXJlY2h0aWd0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBC -ZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAkYm9keSA9 -IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkg -eyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb2Jq -ID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgICAgICAgICAkZGF0 -YVVybCA9IFtzdHJpbmddJG9iai5kYXRhVXJsDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -LW5vdCAkZGF0YVVybCAtb3IgLW5vdCAkZGF0YVVybC5TdGFydHNXaXRoKCdkYXRhOmltYWdlLycp -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1Vu -Z3VlbHRpZ2VzIEJpbGRmb3JtYXQgKGVyd2FydGUgZGF0YTppbWFnZS8uLi47YmFzZTY0LC4uLikn -IDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICRiYXNlNjQgPSAkZGF0YVVybCAtcmVwbGFjZSAnXmRhdGE6aW1hZ2UvW2EtekEt -Wl0rO2Jhc2U2NCwnLCAnJw0KICAgICAgICAgICAgICAgICAgICAgICAgJGJ5dGVzID0gW1N5c3Rl -bS5Db252ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygkYmFzZTY0KQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRieXRlcy5MZW5ndGggLWd0IDI2MjE0NCkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnQmlsZCB6dSBncm9zcyAobWF4IDI1MCBLQiknIDQxMzsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxCeXRlcygkYXZhdGFyRmls -ZSwgJGJ5dGVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBhdmF0YXJUcyBpbiBwbGFudW5n -Lmpzb24gc2V0emVuLCBkYW1pdCBkZXIgQ2FjaGUtQnVzdGVyDQogICAgICAgICAgICAgICAgICAg -ICAgICAjIG5hY2ggUmVsb2FkIGJla2FubnQgaXN0IChDbGllbnQgaGFlbmd0ID90cz08YXZhdGFy -VHM+DQogICAgICAgICAgICAgICAgICAgICAgICAjIGFuIGRpZSBCaWxkLVVSTCkuDQogICAgICAg -ICAgICAgICAgICAgICAgICAkdHMgPSBbbG9uZ10oW0RhdGVUaW1lT2Zmc2V0XTo6VXRjTm93LlRv -VW5peFRpbWVNaWxsaXNlY29uZHMoKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZS1X +ZkxvY2tVZWJlcnNjaHJlaWJlbikpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ0ZvcmNlLUxvY2sgbnVyIGZ1ZXIgRmFjaGF1ZnNpY2h0L1N1cGVyVXNlcicgNDAz +OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJl +YWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAg +ICAgICAgICAgICAkYSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAg +ICRkYXR1bSA9IFtzdHJpbmddJGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBb +c3RyaW5nXSRhLnBlcnNvbklkDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtTG9ja1Nh +ZmVEYXR1bSAkZGF0dW0pIC1vciAtbm90IChUZXN0LUxvY2tTYWZlSWQgJHBlcnNvbklkKSkgew0K +ICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZSBkYXR1 +bS9wZXJzb25JZCcgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAkdXNlciA9IEdldC1Ba3R1ZWxsZXJCZW51dHplcg0KICAgICAgICAgICAgICAgICRyb2xs +ZSA9IChHZXQtUmVjaHRlKS5yb2xsZQ0KICAgICAgICAgICAgICAgICRyZXMgPSBBY3F1aXJlLUNl +bGxMb2NrICRkYXR1bSAkcGVyc29uSWQgJHVzZXIgJHJvbGxlICR0cnVlDQogICAgICAgICAgICAg +ICAgV3JpdGUtTG9nRWludHJhZyAnbG9jay5mb3JjZScgQHsgZGF0dW0gPSAkZGF0dW07IHBlcnNv +bklkID0gJHBlcnNvbklkOyByb2xsZSA9ICRyb2xsZSB9DQogICAgICAgICAgICAgICAgU2VuZC1K +c29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICBvayAgICAgICA9ICR0 +cnVlDQogICAgICAgICAgICAgICAgICAgIHRva2VuICAgID0gJHJlcy5sb2NrLnRva2VuDQogICAg +ICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBl +cnNvbklkID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIHJvbGxlICAgID0gJHJvbGxl +DQogICAgICAgICAgICAgICAgICAgIGxvY2tlZEF0ID0gJHJlcy5sb2NrLmxvY2tlZEF0DQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN +CiAgICAgICAgICAgICMgUE9TVCAvYXBpL2xvY2svemVsbGUvaGVhcnRiZWF0ICB7IHRva2VuIH0g +LT4gYWt0dWFsaXNpZXJ0IGxhc3RCZWF0DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp +L2xvY2svemVsbGUvaGVhcnRiZWF0JyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAg +ICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYg +KC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQx +MzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1K +c29uDQogICAgICAgICAgICAgICAgJHRva2VuID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNb +J3Rva2VuJ10pIHsgW3N0cmluZ10kYS50b2tlbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAg +ICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJHRva2VuKSkgeyBTZW5kLUVycm9y +ICRSZXNwb25zZSAnVG9rZW4gZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRyZXMgPSBSZWZyZXNoLUNlbGxMb2NrICR0b2tlbg0KICAgICAgICAgICAgICAgIGlmICgtbm90 +ICRyZXMub2spIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z +ZSBAeyBmZWhsZXIgPSAndW5iZWthbm50ZXJfbG9jayc7IG1lbGR1bmcgPSAnTG9jayBleGlzdGll +cnQgbmljaHQgKG1laHIpLicgfSA0MDQNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z +ZSBAeyBvayA9ICR0cnVlOyBsYXN0QmVhdCA9ICRyZXMubG9jay5sYXN0QmVhdCB9DQogICAgICAg +ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBERUxFVEUg +L2FwaS9sb2NrL3plbGxlICB7IHRva2VuIH0gLT4gTG9jayBmcmVpZ2ViZW4gKGF1Y2ggdmlhIFF1 +ZXJ5LVN0cmluZyBmdWVyIHNlbmRCZWFjb24pDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcv +YXBpL2xvY2svemVsbGUnIC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScpIHsNCiAgICAgICAgICAg +ICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgICR0b2tlbiA9 +ICRudWxsDQogICAgICAgICAgICAgICAgaWYgKCRib2R5KSB7DQogICAgICAgICAgICAgICAgICAg +IHRyeSB7ICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uOyBpZiAoJGEuUFNPYmplY3QuUHJv +cGVydGllc1sndG9rZW4nXSkgeyAkdG9rZW4gPSBbc3RyaW5nXSRhLnRva2VuIH0gfSBjYXRjaCB7 +fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106OklzTnVs +bE9yV2hpdGVTcGFjZSgkdG9rZW4pIC1hbmQgJFJlcXVlc3QuVXJsLlF1ZXJ5KSB7DQogICAgICAg +ICAgICAgICAgICAgICRxID0gW1N5c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpQYXJzZVF1ZXJ5U3Ry +aW5nKCRSZXF1ZXN0LlVybC5RdWVyeSkNCiAgICAgICAgICAgICAgICAgICAgJHRva2VuID0gW3N0 +cmluZ10kcVsndG9rZW4nXQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAo +W3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkdG9rZW4pKSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdUb2tlbiBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHJlcyA9 +IFJlbGVhc2UtQ2VsbExvY2sgJHRva2VuDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 +ICRSZXNwb25zZSBAeyBvayA9ICRyZXMub2sgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog +ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgR0VUIC9hcGkvbG9jay96ZWxsZW4gLT4gTGlz +dGUgYWxsZXIgYWt0aXZlbiBMb2NrcyAoZnVlciBMaXZlLUluZGljYXRvcikNCiAgICAgICAgICAg +IGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcp +IHsNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGxvY2tzID0g +KEdldC1BbGxBY3RpdmVDZWxsTG9ja3MpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg +ICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2FwaS92ZXJhbnR3b3J0dW5nL2F1Zmdl +cnVlY2t0IOKAlCBTdGF0aXN0aWstQ2FwdHVyZSBmdWVyIGRlbg0KICAgICAgICAgICAgIyAiRWlu +Z2VzcHJ1bmdlbiItQmFsa2VuIGluIGRlciBTY2hpY2h0dmVydGVpbHVuZy4gV2lyZCB2b20gQ2xp +ZW50DQogICAgICAgICAgICAjIGdlZmV1ZXJ0LCBzb2JhbGQgamVtYW5kIGlubmVyaGFsYiBkZXIg +MTQtVGFnZS1WZXJiaW5kbGljaGtlaXQgbmV1DQogICAgICAgICAgICAjIGluIGRpZSBUb3AtMiAo +MS4vMi4gVkkzLURHTCkgZWluZXIgU2NoaWNodCBhdWZydWVja3Qg4oCUIGFsc28NCiAgICAgICAg +ICAgICMgYXVzc2VycGxhbm1hZXNzaWcgVmVyYW50d29ydHVuZyB1ZWJlcm5pbW10Lg0KICAgICAg +ICAgICAgIyBCb2R5OiB7IHBlcnNvbklkLCBkYXR1bSwgc2NoaWNodCwgc3R1ZmUsIHZvcmhlcldl +cnQsIGF1c2xvZXNlclBlcnNvbklkIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv +dmVyYW50d29ydHVuZy9hdWZnZXJ1ZWNrdCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAg +ICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAg +IGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3Nz +JyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkYSA9ICRib2R5IHwgQ29u +dmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2Vz +IEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwaWQgPSBpZiAoJGEuUFNP +YmplY3QuUHJvcGVydGllc1sncGVyc29uSWQnXSkgeyBbc3RyaW5nXSRhLnBlcnNvbklkIH0gZWxz +ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAkZGF0ID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ2RhdHVtJ10pIHsgW3N0cmluZ10kYS5kYXR1bSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgJHBpZCAtb3IgLW5vdCAkZGF0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICdwZXJzb25JZC9kYXR1bSBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg +JGZlbGRlciA9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkICAgPSAk +cGlkDQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAgPSAkZGF0DQogICAgICAgICAgICAg +ICAgICAgIHNjaGljaHQgICAgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snc2NoaWNodCdd +KSB7IFtzdHJpbmddJGEuc2NoaWNodCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAg +IHN0dWZlICAgICAgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snc3R1ZmUnXSkgeyBbaW50 +XSRhLnN0dWZlIH0gZWxzZSB7IDAgfQ0KICAgICAgICAgICAgICAgICAgICB2b3JoZXJXZXJ0ID0g +aWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3ZvcmhlcldlcnQnXSkgeyBbc3RyaW5nXSRhLnZv +cmhlcldlcnQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snYXVzbG9lc2VyUGVyc29uSWQnXSkgew0KICAg +ICAgICAgICAgICAgICAgICAkZmVsZGVyWydhdXNsb2VzZXJQZXJzb25JZCddID0gW3N0cmluZ10k +YS5hdXNsb2VzZXJQZXJzb25JZA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBX +cml0ZS1Mb2dFaW50cmFnICd2ZXJhbnR3b3J0dW5nLmVpbmdlc3BydW5nZW4nICRmZWxkZXINCiAg +ICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG9rID0gJHRydWUgfQ0K +ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCg0KICAgICAgICAgICAg +IyBHRVQgL2FwaS9wbGFudW5nL2NoYW5nZXM/c2VpdD08aXNvLXRzPiAtPiBEZWx0YS1MaXN0ZSBm +dWVyIExpdmUtU3luYw0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2No +YW5nZXMnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkcSA9IFtT +eXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6UGFyc2VRdWVyeVN0cmluZygkUmVxdWVzdC5VcmwuUXVl +cnkpDQogICAgICAgICAgICAgICAgJGxvZyA9IFJlYWQtSnNvbk9iamVjdCAnY2hhbmdlcy5qc29u +Jw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGxvZyAtb3IgLW5vdCAoJGxvZyAtaXMg +W2FycmF5XSkpIHsgJGxvZyA9IEAoKSB9DQogICAgICAgICAgICAgICAgJG1heFNlcSA9IEdldC1N +YXhDaGFuZ2VTZXEgJGxvZw0KICAgICAgICAgICAgICAgIGlmICgkcS5BbGxLZXlzIC1jb250YWlu +cyAnc2VpdF9zZXEnKSB7DQogICAgICAgICAgICAgICAgICAgICMgTmV1ZXIgcmFjZS1mcmVpZXIg +c2VxLUN1cnNvciAoQ2hhbmdlcyArIHNlcnZlclNlcSBhdXMNCiAgICAgICAgICAgICAgICAgICAg +IyBERU1TRUxCRU4gUmVhZCkuIExlZXJlciBzZWl0X3NlcSA9IEVyc3QtU3luYyAtPiBudXIgQ3Vy +c29yLg0KICAgICAgICAgICAgICAgICAgICAkcmF3ID0gW3N0cmluZ10kcVsnc2VpdF9zZXEnXQ0K +ICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106OklzTnVsbE9yRW1wdHkoJHJhdykpIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICRjaGFuZ2VzID0gQCgpDQogICAgICAgICAgICAgICAg +ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3EgPSAwOyBbdm9pZF1baW50 +XTo6VHJ5UGFyc2UoJHJhdywgW3JlZl0kc3EpDQogICAgICAgICAgICAgICAgICAgICAgICAkY2hh +bmdlcyA9IEAoJGxvZyB8IFdoZXJlLU9iamVjdCB7ICRudWxsIC1uZSAkXy5zZXEgLWFuZCBbaW50 +XSRfLnNlcSAtZ3QgJHNxIH0pDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICAg +ICAgc2VydmVyVHMgID0gKEdldC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygnbycp +DQogICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJTZXEgPSAkbWF4U2VxDQogICAgICAgICAg +ICAgICAgICAgICAgICBjaGFuZ2VzICAgPSBbb2JqZWN0W11dJGNoYW5nZXMNCiAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg +ICMgQmFja3dhcmQtY29tcGF0OiBhbHRlciBXYWxsLUNsb2NrLUN1cnNvciAoYWx0ZSBDbGllbnRz +KS4NCiAgICAgICAgICAgICAgICAgICAgJHNlaXQgPSBbc3RyaW5nXSRxWydzZWl0J10NCiAgICAg +ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAg +ICAgICAgICAgICAgc2VydmVyVHMgID0gKEdldC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0 +cmluZygnbycpDQogICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJTZXEgPSAkbWF4U2VxDQog +ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzICAgPSAoR2V0LUNoYW5nZXNTaW5jZSAkc2Vp +dCkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFByb2Zp +bGJpbGRlciAoQXZhdGFyZSkgPT09PT0NCiAgICAgICAgICAgICMgRGF0ZWk6ICREYXRhRGlyL2F2 +YXRhcnMvPGlkPi5qcGcgICAoSlBFRywgdm9tIENsaWVudCBhdWYgMjAweDIwMA0KICAgICAgICAg +ICAgIyBoZXJ1bnRlcmdlcmVjaG5ldCwgdWVibGljaCA1LTI1IEtCKS4NCiAgICAgICAgICAgICMN +CiAgICAgICAgICAgICMgQmVyZWNodGlndW5nOg0KICAgICAgICAgICAgIyAgIFBPU1QvREVMRVRF +OiBTVS9GQSBPREVSIGVpZ2VuZSBQZXJzb25JZCAoU2VsZi1TZXJ2aWNlKS4NCiAgICAgICAgICAg +ICMgICBHRVQ6ICAgICAgICAgYWxsZSBlaW5nZWxvZ2d0ZW4gVXNlciAoaW0gR3JpZCBzaWNodGJh +cikuDQogICAgICAgICAgICAjDQogICAgICAgICAgICAjIFBPU1QtQm9keTogeyAiZGF0YVVybCI6 +ICJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LDwuLi4+IiB9DQogICAgICAgICAgICAjIDI1MCBLQiBo +YXJ0ZXIgQ2FwIChkZWZlbnNpdiDigJQgQ2xpZW50IHNjaGlja3QgdHlwaXNjaCA8MzAgS0IpLg0K +ICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGVyc29uZW4vKFxkKykvYXZhdGFy +JCcpIHsNCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSAkbWF0Y2hlc1sxXQ0KICAgICAgICAg +ICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAgICAgICRpc3RFaWdlbiA9ICgkbnVs +bCAtbmUgJHIubWVpbmVQZXJzb25JZCAtYW5kIFtpbnRdJHBlcnNvbklkIC1lcSBbaW50XSRyLm1l +aW5lUGVyc29uSWQpDQogICAgICAgICAgICAgICAgJGlzdEJlcmVjaHRpZ3QgPSAoVGVzdC1Jc3RB +ZG1pbikgLW9yICRpc3RFaWdlbg0KICAgICAgICAgICAgICAgICRhdmF0YXJEaXIgPSBKb2luLVBh +dGggJERhdGFEaXIgJ2F2YXRhcnMnDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0 +aCAtTGl0ZXJhbFBhdGggJGF2YXRhckRpcikpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsg +TmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkYXZhdGFyRGlyIC1Gb3JjZSB8IE91 +dC1OdWxsIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGF2 +YXRhckZpbGUgPSBKb2luLVBhdGggJGF2YXRhckRpciAoJHBlcnNvbklkICsgJy5qcGcnKQ0KICAg +ICAgICAgICAgICAgIGlmICgkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAg +ICAgaWYgKC1ub3QgJGlzdEJlcmVjaHRpZ3QpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5l +IEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICRib2R5 +ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5 +KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRv +YmogPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAgICAgICAgICRk +YXRhVXJsID0gW3N0cmluZ10kb2JqLmRhdGFVcmwNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgtbm90ICRkYXRhVXJsIC1vciAtbm90ICRkYXRhVXJsLlN0YXJ0c1dpdGgoJ2RhdGE6aW1hZ2Uv +JykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAn +VW5ndWVsdGlnZXMgQmlsZGZvcm1hdCAoZXJ3YXJ0ZSBkYXRhOmltYWdlLy4uLjtiYXNlNjQsLi4u +KScgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgJGJhc2U2NCA9ICRkYXRhVXJsIC1yZXBsYWNlICdeZGF0YTppbWFnZS9bYS16 +QS1aXSs7YmFzZTY0LCcsICcnDQogICAgICAgICAgICAgICAgICAgICAgICAkYnl0ZXMgPSBbU3lz +dGVtLkNvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCRiYXNlNjQpDQogICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJGJ5dGVzLkxlbmd0aCAtZ3QgMjYyMTQ0KSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdCaWxkIHp1IGdyb3NzIChtYXggMjUwIEtCKScgNDEzOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgICAgICAgICBbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbEJ5dGVzKCRhdmF0YXJG +aWxlLCAkYnl0ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAjIGF2YXRhclRzIGluIHBsYW51 +bmcuanNvbiBzZXR6ZW4sIGRhbWl0IGRlciBDYWNoZS1CdXN0ZXINCiAgICAgICAgICAgICAgICAg +ICAgICAgICMgbmFjaCBSZWxvYWQgYmVrYW5udCBpc3QgKENsaWVudCBoYWVuZ3QgP3RzPTxhdmF0 +YXJUcz4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgYW4gZGllIEJpbGQtVVJMKS4NCiAgICAg +ICAgICAgICAgICAgICAgICAgICR0cyA9IFtsb25nXShbRGF0ZVRpbWVPZmZzZXRdOjpVdGNOb3cu +VG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tl +LVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRwbGFudW5nIC1hbmQgJHBsYW51bmcucGVy +c29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4g +JHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGlmIChbc3RyaW5nXSRwLmlkIC1lcSBbc3RyaW5nXSRwZXJzb25JZCkgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydh +dmF0YXJUcyddKSB7ICRwLmF2YXRhclRzID0gJHRzIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1l +ICdhdmF0YXJUcycgLU5vdGVQcm9wZXJ0eVZhbHVlICR0cyAtRm9yY2UgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u +JyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAg +ICBXcml0ZS1Mb2dFaW50cmFnICdhdmF0YXIuZ2VzZXR6dCcgQHsgcGVyc29uSWQgPSAkcGVyc29u +SWQ7IGJ5dGVzID0gJGJ5dGVzLkxlbmd0aCB9DQogICAgICAgICAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCc7IGJ5dGVzID0g +JGJ5dGVzLkxlbmd0aDsgYXZhdGFyVHMgPSAkdHMgfQ0KICAgICAgICAgICAgICAgICAgICB9IGNh +dGNoIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiQXZh +dGFyLVVwbG9hZCBmZWhsZ2VzY2hsYWdlbjogIiArICRfLkV4Y2VwdGlvbi5NZXNzYWdlKSA1MDAN +CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJE1ldGhvZCAtZXEgJ0RFTEVURScp +IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGlzdEJlcmVjaHRpZ3QpIHsgU2VuZC1F +cnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1Q +YXRoIC1MaXRlcmFsUGF0aCAkYXZhdGFyRmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkYXZhdGFyRmlsZSAtRm9yY2UgLUVycm9yQWN0 +aW9uIFNpbGVudGx5Q29udGludWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1M +b2dFaW50cmFnICdhdmF0YXIuZW50ZmVybnQnIEB7IHBlcnNvbklkID0gJHBlcnNvbklkIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZS1X aXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkcGxhbnVuZyAtYW5kICRwbGFudW5nLnBlcnNv bmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRw bGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoW3N0cmluZ10kcC5pZCAtZXEgW3N0cmluZ10kcGVyc29uSWQpIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1snYXZh -dGFyVHMnXSkgeyAkcC5hdmF0YXJUcyA9ICR0cyB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgZWxzZSB7ICRwIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAn -YXZhdGFyVHMnIC1Ob3RlUHJvcGVydHlWYWx1ZSAkdHMgLUZvcmNlIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicg -JHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAg -V3JpdGUtTG9nRWludHJhZyAnYXZhdGFyLmdlc2V0enQnIEB7IHBlcnNvbklkID0gJHBlcnNvbklk -OyBieXRlcyA9ICRieXRlcy5MZW5ndGggfQ0KICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnOyBieXRlcyA9ICRi -eXRlcy5MZW5ndGg7IGF2YXRhclRzID0gJHRzIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRj -aCB7DQogICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkF2YXRh -ci1VcGxvYWQgZmVobGdlc2NobGFnZW46ICIgKyAkXy5FeGNlcHRpb24uTWVzc2FnZSkgNTAwDQog -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRNZXRob2QgLWVxICdERUxFVEUnKSB7 -DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRpc3RCZXJlY2h0aWd0KSB7IFNlbmQtRXJy -b3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAg -ICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0 -aCAtTGl0ZXJhbFBhdGggJGF2YXRhckZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJGF2YXRhckZpbGUgLUZvcmNlIC1FcnJvckFjdGlv -biBTaWxlbnRseUNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9n -RWludHJhZyAnYXZhdGFyLmVudGZlcm50JyBAeyBwZXJzb25JZCA9ICRwZXJzb25JZCB9DQogICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBJbnZva2UtV2l0 -aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk -cGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHBsYW51bmcgLWFuZCAkcGxhbnVuZy5wZXJzb25l -bikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxh -bnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KFtzdHJpbmddJHAuaWQgLWVxIFtzdHJpbmddJHBlcnNvbklkIC1hbmQgJHAuUFNPYmplY3QuUHJv -cGVydGllc1snYXZhdGFyVHMnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRwLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCdhdmF0YXJUcycpDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5n -Lmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAg -ICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCcg -fQ0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -IFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiQXZhdGFyLUxvZXNjaGVuIGZlaGxnZXNjaGxhZ2VuOiAi -ICsgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpIDUwMA0KICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgIyBBdmF0YXItU3RhdGljLVNlcnZpbmc6IC9kYXRhL2F2YXRhcnMvPGlk -Pi5qcGcgbGllc3QgZGlyZWt0IGF1cw0KICAgICAgICAgICAgIyAkRGF0YURpci9hdmF0YXJzLy4g -QmV3dXNzdCBlaWdlbmVyIFBmYWQgc3RhdHQgdWViZXIgUmVzb2x2ZS0NCiAgICAgICAgICAgICMg -U2FmZVBhdGgsIHdlaWwgZG9ydCBkZXIgQXNzZXQtQ2FjaGUtUm9vdCBnZW51dHp0IHdpcmQgKEF2 -YXRhcmUNCiAgICAgICAgICAgICMgbGllZ2VuIGFiZXIgdW50ZXIgRGF0YURpcikuDQogICAgICAg -ICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2RhdGEvYXZhdGFycy8oXGQrKVwuanBnJCcgLWFuZCAk -TWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgICRhdmF0YXJGaWxlID0gSm9pbi1Q -YXRoIChKb2luLVBhdGggJERhdGFEaXIgJ2F2YXRhcnMnKSAoJG1hdGNoZXNbMV0gKyAnLmpwZycp -DQogICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGF2YXRhckZpbGUg -LVBhdGhUeXBlIExlYWYpIHsNCiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSBbU3lzdGVt -LklPLkZpbGVdOjpSZWFkQWxsQnl0ZXMoJGF2YXRhckZpbGUpDQogICAgICAgICAgICAgICAgICAg -ICRSZXNwb25zZS5TdGF0dXNDb2RlID0gMjAwDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25z -ZS5Db250ZW50VHlwZSA9ICdpbWFnZS9qcGVnJw0KICAgICAgICAgICAgICAgICAgICBBZGQtU2Vj -dXJpdHlIZWFkZXJzICRSZXNwb25zZQ0KICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29u -dGVudExlbmd0aDY0ID0gJGNvbnRlbnQuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICRSZXNw -b25zZS5PdXRwdXRTdHJlYW0uV3JpdGUoJGNvbnRlbnQsIDAsICRjb250ZW50Lkxlbmd0aCkNCiAg -ICAgICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAg -ICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9u -c2UgKCJBdmF0YXIgbmljaHQgZ2VmdW5kZW46ICIgKyAkUGF0aCkgNDA0DQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAg -ICAgICMgPT09PT0gU3RhdGlzY2hlIERhdGVpZW4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0 -aCAtZXEgJy8nIC1vciAkUGF0aCAtZXEgJycpIHsgJFBhdGggPSAnL2luZGV4Lmh0bWwnIH0NCiAg -ICAgICAgICAgICRSZWxQYXRoID0gJFBhdGguVHJpbVN0YXJ0KCcvJykNCiAgICAgICAgICAgICMg -ZGF0YS8tRGlyZWt0enVncmlmZi1HYXRlIChTcHJpbnQgMSDigJQgU2ljaGVyaGVpdHMtTm90YnJl -bXNlIDIwMjYtMDUtMjgpOg0KICAgICAgICAgICAgIyBHRVQgL2RhdGEvYWRtaW4uanNvbiAodW5k -IHBsYW51bmcuanNvbiwgbG9nYnVjaC5qc29uLCBoaW53ZWlzZS5qc29uLA0KICAgICAgICAgICAg -IyBjaGFuZ2VzLmpzb24sIHNvd2llIGFsbGUgQmFja3VwLURhdGVpZW4pIGxpZWZlcnRlIHZvcmhl -ciBSb2gtSlNPTiBPSE5FDQogICAgICAgICAgICAjIEF1dGgtQ2hlY2suIEF2YXRhci1TdWJwZmFk -IHdpcmQgb2JlbiBzZXBhcmF0IGdlcm91dGV0LiBBbGxlcyBhbmRlcmUNCiAgICAgICAgICAgICMg -dW50ZXIgL2RhdGEvIGRhcmYgTlVSIGR1cmNoIGVpbmUgZXhwbGl6aXRlIFdoaXRlbGlzdCAoU3Rh -dGlzdGlrLSB1bmQNCiAgICAgICAgICAgICMgTG9nYnVjaC1UYXJuLU1hcmt1cHMsIHdlaXRlciB1 -bnRlbiBnZWdhdGVkKS4gU29uc3QgNDA0Lg0KICAgICAgICAgICAgIyBNaXR0ZWlsdW5ncy1VcGxv -YWRzIChTcHJpbnQgRC0zYiwgMjAyNi0wNS0yOSk6IHZvbSBTVSBob2NoZ2VsYWRlbmUNCiAgICAg -ICAgICAgICMgQmlsZGVyICsgUERGcyB1bnRlciBkYXRhL3VwbG9hZHMvbWl0dGVpbHVuZ2VuL21f -PHRzPl88cmFuZD4uPGV4dD4uDQogICAgICAgICAgICAjIEVuZHVuZ3MtV2hpdGVsaXN0IHZlcmhp -bmRlcnQgQ29kZS1TbXVnZ2xpbmcgdWViZXIgZGVuIFBmYWQuDQogICAgICAgICAgICAkaXN0TWl0 -dGVpbHVuZ1VwbG9hZCA9ICgkUmVsUGF0aCAtbWF0Y2ggJ15kYXRhL3VwbG9hZHMvbWl0dGVpbHVu -Z2VuL21fXGQrX1thLXowLTldK1wuKGpwZ3xwbmd8d2VicHxwZGYpJCcpDQogICAgICAgICAgICBp -ZiAoJFJlbFBhdGggLWxpa2UgJ2RhdGEvKicgLWFuZA0KICAgICAgICAgICAgICAgICRSZWxQYXRo -IC1uZSAnZGF0YS9tYWluZnJhbWUuaHRtbCcgLWFuZA0KICAgICAgICAgICAgICAgICRSZWxQYXRo -IC1uZSAnZGF0YS9zYW5pdGl6ZXIuaHRtbCcgLWFuZA0KICAgICAgICAgICAgICAgIC1ub3QgJGlz -dE1pdHRlaWx1bmdVcGxvYWQpIHsNCiAgICAgICAgICAgICAgICBMb2ctQXBpICgnR0FURSA0MDQg -ezB9IChkYXRhLy1EaXJla3R6dWdyaWZmIGJsb2NraWVydCknIC1mICRSZWxQYXRoKQ0KICAgICAg -ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiVW5iZWthbm50ZXIgRW5kcHVua3Q6ICRN -ZXRob2QgJFBhdGgiKSA0MDQNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgIyBWZXJzY2hsZWllcnVuZ3MtRmlsdGVyOiBkYXMgU3RhdGlzdGlrLSB1 -bmQgTG9nYnVjaC1Nb2R1bCBzYW10DQogICAgICAgICAgICAjIE1hcmt1cC1GcmFnbWVudCB3ZXJk -ZW4gbnVyIGFuIEJlcmVjaHRpZ3RlIGF1c2dlbGllZmVydC4NCiAgICAgICAgICAgICMgRGlyZWt0 -ZXIgWnVncmlmZiBkdXJjaCBVbmJlcmVjaHRpZ3RlIChCcm93c2VyLVVSTC1FaW5nYWJlLA0KICAg -ICAgICAgICAgIyBTb3VyY2UtU3RvZWJlcm4pIGJla29tbXQgNDA0IOKAlCB3aWUgYmVpIGplZGVt -IG5pY2h0IGV4aXN0aWVyZW5kZW4NCiAgICAgICAgICAgICMgUGZhZCwga2VpbiBTdGF0dXNjb2Rl -LVZlcnJhdC4NCiAgICAgICAgICAgIGlmICgkUmVsUGF0aCAtZXEgJ2pzL3N0YXRpc3Rpay5qcycg -LW9yICRSZWxQYXRoIC1lcSAnZGF0YS9tYWluZnJhbWUuaHRtbCcpIHsNCiAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnc3RhdGlzdGlrJykpIHsNCiAgICAgICAgICAg -ICAgICAgICAgTG9nLUFwaSAoJ0dBVEUgNDA0IHswfSAoa2VpbiBTdGF0aXN0aWstUmVjaHQpJyAt -ZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJV -bmJla2FubnRlciBFbmRwdW5rdDogJE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAgICAgICAgICAg -ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZWlmICgk -UmVsUGF0aCAtZXEgJ2pzL2xvZ2J1Y2guanMnIC1vciAkUmVsUGF0aCAtZXEgJ2RhdGEvc2FuaXRp -emVyLmh0bWwnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2gg -J2xvZ2J1Y2gnKSkgew0KICAgICAgICAgICAgICAgICAgICBMb2ctQXBpICgnR0FURSA0MDQgezB9 -IChrZWluIExvZ2J1Y2gtUmVjaHQpJyAtZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICAgICAg -U2VuZC1FcnJvciAkUmVzcG9uc2UgKCJVbmJla2FubnRlciBFbmRwdW5rdDogJE1ldGhvZCAkUGF0 -aCIpIDQwNA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRGaWxlUGF0aCA9IFJlc29sdmUtU2FmZVBhdGgg -JFJlbFBhdGgNCiAgICAgICAgICAgICR2b25GYWxsYmFjayA9ICRmYWxzZQ0KICAgICAgICAgICAg -IyBTaGFyZS1GYWxsYmFjazogd2VubiBkaWUgRGF0ZWkgbG9rYWwgZmVobHQgKHouQi4geGxzeC5m -dWxsLm1pbi5qcw0KICAgICAgICAgICAgIyB3aXJkIGJld3Vzc3QgbmljaHQgaW4gZGVuIENsaWVu -dC1DYWNoZSBrb3BpZXJ0KSwgdmVyc3VjaGUgc2llDQogICAgICAgICAgICAjIHZvbSBrb25maWd1 -cmllcnRlbiBBc3NldEZhbGxiYWNrLVBmYWQgbmFjaHp1bGFkZW4uDQogICAgICAgICAgICBpZiAo -KC1ub3QgJEZpbGVQYXRoIC1vciAtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRGaWxlUGF0 -aCAtUGF0aFR5cGUgTGVhZikpIC1hbmQgJHNjcmlwdDpBc3NldEZhbGxiYWNrKSB7DQogICAgICAg -ICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGZhbGxiYWNrVHJ5ID0gSm9pbi1Q -YXRoICRzY3JpcHQ6QXNzZXRGYWxsYmFjayAkUmVsUGF0aA0KICAgICAgICAgICAgICAgICAgICAk -ZmFsbGJhY2tOb3JtID0gW1N5c3RlbS5JTy5QYXRoXTo6R2V0RnVsbFBhdGgoJGZhbGxiYWNrVHJ5 -KQ0KICAgICAgICAgICAgICAgICAgICAkZmFsbGJhY2tSb290Tm9ybSA9IFtTeXN0ZW0uSU8uUGF0 -aF06OkdldEZ1bGxQYXRoKCRzY3JpcHQ6QXNzZXRGYWxsYmFjaykNCiAgICAgICAgICAgICAgICAg -ICAgaWYgKCRmYWxsYmFja05vcm0uU3RhcnRzV2l0aCgkZmFsbGJhY2tSb290Tm9ybSwgW1N5c3Rl -bS5TdHJpbmdDb21wYXJpc29uXTo6T3JkaW5hbElnbm9yZUNhc2UpIC1hbmQNCiAgICAgICAgICAg -ICAgICAgICAgICAgIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRmYWxsYmFja05vcm0gLVBhdGhU -eXBlIExlYWYpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkRmlsZVBhdGggPSAkZmFsbGJh -Y2tOb3JtDQogICAgICAgICAgICAgICAgICAgICAgICAkdm9uRmFsbGJhY2sgPSAkdHJ1ZQ0KICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAg -ICAgICAgICAgIExvZy1BcGkgKCdGQUxMQkFDSy1GRUhMRVIgezB9OiB7MX0nIC1mICRSZWxQYXRo -LCAkXy5FeGNlcHRpb24uTWVzc2FnZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9 -DQogICAgICAgICAgICBpZiAoJEZpbGVQYXRoIC1hbmQgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGgg -JEZpbGVQYXRoIC1QYXRoVHlwZSBMZWFmKSkgew0KICAgICAgICAgICAgICAgICRleHQgPSBbU3lz -dGVtLklPLlBhdGhdOjpHZXRFeHRlbnNpb24oJEZpbGVQYXRoKS5Ub0xvd2VyKCkNCiAgICAgICAg -ICAgICAgICAkbWltZSA9IGlmICgkTWltZVR5cGVzLkNvbnRhaW5zS2V5KCRleHQpKSB7ICRNaW1l -VHlwZXNbJGV4dF0gfSBlbHNlIHsgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfQ0KICAgICAg -ICAgICAgICAgICRjb250ZW50ID0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRGaWxl -UGF0aCkNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9IDIwMA0KICAgICAg -ICAgICAgICAgICRSZXNwb25zZS5Db250ZW50VHlwZSA9ICRtaW1lDQogICAgICAgICAgICAgICAg -QWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9uc2UNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2Uu -Q29udGVudExlbmd0aDY0ID0gJGNvbnRlbnQuTGVuZ3RoDQogICAgICAgICAgICAgICAgJFJlc3Bv -bnNlLk91dHB1dFN0cmVhbS5Xcml0ZSgkY29udGVudCwgMCwgJGNvbnRlbnQuTGVuZ3RoKQ0KICAg -ICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uQ2xvc2UoKQ0KICAgICAgICAgICAg -ICAgIGlmICgkdm9uRmFsbGJhY2spIHsgTG9nLUFwaSAoJ0ZJTEUgMjAwIHswfSAoRmFsbGJhY2ss -IHsxfSBCeXRlcyknIC1mICRSZWxQYXRoLCAkY29udGVudC5MZW5ndGgpIH0NCiAgICAgICAgICAg -IH0gZWxzZSB7DQogICAgICAgICAgICAgICAgTG9nLUFwaSAoJ0ZJTEUgNDA0IHswfSAod2VkZXIg -aW0gUm9vdCBub2NoIHVlYmVyIEFzc2V0RmFsbGJhY2sgZ2VmdW5kZW4pJyAtZiAkUmVsUGF0aCkN -CiAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIlVuYmVrYW5udGVyIEVuZHB1 -bmt0OiAkTWV0aG9kICRQYXRoIikgNDA0DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg -ICAgY2F0Y2ggew0KICAgICAgICAgICAgTG9nLUFwaSAoJ0VYQ0VQVElPTiB7MH0gezF9OiB7Mn0n -IC1mICRNZXRob2QsICRQYXRoLCAkXy5FeGNlcHRpb24uTWVzc2FnZSkNCiAgICAgICAgICAgIHRy -eSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRfLkV4Y2VwdGlvbi5NZXNzYWdlIDUwMCB9IGNhdGNo -IHt9DQogICAgICAgIH0NCiAgICB9DQp9DQpjYXRjaCB7DQogICAgV3JpdGUtSG9zdCAoJ1NlcnZl -ci1GZWhsZXI6IHswfScgLWYgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpDQogICAgTG9nLUFwaSAoJ01B -SU4tTE9PUCBFWENFUFRJT046IHswfScgLWYgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpDQp9DQpmaW5h -bGx5IHsNCiAgICAkV2F0Y2hkb2dUaW1lci5TdG9wKCkNCiAgICBpZiAoJExpc3RlbmVyLklzTGlz -dGVuaW5nKSB7ICRMaXN0ZW5lci5TdG9wKCkgfQ0KICAgIExvZy1BcGkgJ1NIVVRET1dOJw0KICAg -IFdyaXRlLUhvc3QgJ1NlcnZlciBiZWVuZGV0LicNCn0NCg== +ZiAoW3N0cmluZ10kcC5pZCAtZXEgW3N0cmluZ10kcGVyc29uSWQgLWFuZCAkcC5QU09iamVjdC5Q +cm9wZXJ0aWVzWydhdmF0YXJUcyddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJHAuUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ2F2YXRhclRzJykNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51 +bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAg +ICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0 +JyB9DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICAg +ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJBdmF0YXItTG9lc2NoZW4gZmVobGdlc2NobGFnZW46 +ICIgKyAkXy5FeGNlcHRpb24uTWVzc2FnZSkgNTAwDQogICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICB9DQogICAgICAgICAgICAjIEF2YXRhci1TdGF0aWMtU2VydmluZzogL2RhdGEvYXZhdGFycy88 +aWQ+LmpwZyBsaWVzdCBkaXJla3QgYXVzDQogICAgICAgICAgICAjICREYXRhRGlyL2F2YXRhcnMv +LiBCZXd1c3N0IGVpZ2VuZXIgUGZhZCBzdGF0dCB1ZWJlciBSZXNvbHZlLQ0KICAgICAgICAgICAg +IyBTYWZlUGF0aCwgd2VpbCBkb3J0IGRlciBBc3NldC1DYWNoZS1Sb290IGdlbnV0enQgd2lyZCAo +QXZhdGFyZQ0KICAgICAgICAgICAgIyBsaWVnZW4gYWJlciB1bnRlciBEYXRhRGlyKS4NCiAgICAg +ICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vZGF0YS9hdmF0YXJzLyhcZCspXC5qcGckJyAtYW5k +ICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJGF2YXRhckZpbGUgPSBKb2lu +LVBhdGggKEpvaW4tUGF0aCAkRGF0YURpciAnYXZhdGFycycpICgkbWF0Y2hlc1sxXSArICcuanBn +JykNCiAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkYXZhdGFyRmls +ZSAtUGF0aFR5cGUgTGVhZikgew0KICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IFtTeXN0 +ZW0uSU8uRmlsZV06OlJlYWRBbGxCeXRlcygkYXZhdGFyRmlsZSkNCiAgICAgICAgICAgICAgICAg +ICAgJFJlc3BvbnNlLlN0YXR1c0NvZGUgPSAyMDANCiAgICAgICAgICAgICAgICAgICAgJFJlc3Bv +bnNlLkNvbnRlbnRUeXBlID0gJ2ltYWdlL2pwZWcnDQogICAgICAgICAgICAgICAgICAgIEFkZC1T +ZWN1cml0eUhlYWRlcnMgJFJlc3BvbnNlDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5D +b250ZW50TGVuZ3RoNjQgPSAkY29udGVudC5MZW5ndGgNCiAgICAgICAgICAgICAgICAgICAgJFJl +c3BvbnNlLk91dHB1dFN0cmVhbS5Xcml0ZSgkY29udGVudCwgMCwgJGNvbnRlbnQuTGVuZ3RoKQ0K +ICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLkNsb3NlKCkNCiAgICAg +ICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNw +b25zZSAoIkF2YXRhciBuaWNodCBnZWZ1bmRlbjogIiArICRQYXRoKSA0MDQNCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAg +ICAgICAgIyA9PT09PSBTdGF0aXNjaGUgRGF0ZWllbiA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQ +YXRoIC1lcSAnLycgLW9yICRQYXRoIC1lcSAnJykgeyAkUGF0aCA9ICcvaW5kZXguaHRtbCcgfQ0K +ICAgICAgICAgICAgJFJlbFBhdGggPSAkUGF0aC5UcmltU3RhcnQoJy8nKQ0KICAgICAgICAgICAg +IyBkYXRhLy1EaXJla3R6dWdyaWZmLUdhdGUgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1Ob3Ri +cmVtc2UgMjAyNi0wNS0yOCk6DQogICAgICAgICAgICAjIEdFVCAvZGF0YS9hZG1pbi5qc29uICh1 +bmQgcGxhbnVuZy5qc29uLCBsb2didWNoLmpzb24sIGhpbndlaXNlLmpzb24sDQogICAgICAgICAg +ICAjIGNoYW5nZXMuanNvbiwgc293aWUgYWxsZSBCYWNrdXAtRGF0ZWllbikgbGllZmVydGUgdm9y +aGVyIFJvaC1KU09OIE9ITkUNCiAgICAgICAgICAgICMgQXV0aC1DaGVjay4gQXZhdGFyLVN1YnBm +YWQgd2lyZCBvYmVuIHNlcGFyYXQgZ2Vyb3V0ZXQuIEFsbGVzIGFuZGVyZQ0KICAgICAgICAgICAg +IyB1bnRlciAvZGF0YS8gZGFyZiBOVVIgZHVyY2ggZWluZSBleHBsaXppdGUgV2hpdGVsaXN0IChT +dGF0aXN0aWstIHVuZA0KICAgICAgICAgICAgIyBMb2didWNoLVRhcm4tTWFya3Vwcywgd2VpdGVy +IHVudGVuIGdlZ2F0ZWQpLiBTb25zdCA0MDQuDQogICAgICAgICAgICAjIE1pdHRlaWx1bmdzLVVw +bG9hZHMgKFNwcmludCBELTNiLCAyMDI2LTA1LTI5KTogdm9tIFNVIGhvY2hnZWxhZGVuZQ0KICAg +ICAgICAgICAgIyBCaWxkZXIgKyBQREZzIHVudGVyIGRhdGEvdXBsb2Fkcy9taXR0ZWlsdW5nZW4v +bV88dHM+XzxyYW5kPi48ZXh0Pi4NCiAgICAgICAgICAgICMgRW5kdW5ncy1XaGl0ZWxpc3QgdmVy +aGluZGVydCBDb2RlLVNtdWdnbGluZyB1ZWJlciBkZW4gUGZhZC4NCiAgICAgICAgICAgICRpc3RN +aXR0ZWlsdW5nVXBsb2FkID0gKCRSZWxQYXRoIC1tYXRjaCAnXmRhdGEvdXBsb2Fkcy9taXR0ZWls +dW5nZW4vbV9cZCtfW2EtejAtOV0rXC4oanBnfHBuZ3x3ZWJwfHBkZikkJykNCiAgICAgICAgICAg +IGlmICgkUmVsUGF0aCAtbGlrZSAnZGF0YS8qJyAtYW5kDQogICAgICAgICAgICAgICAgJFJlbFBh +dGggLW5lICdkYXRhL21haW5mcmFtZS5odG1sJyAtYW5kDQogICAgICAgICAgICAgICAgJFJlbFBh +dGggLW5lICdkYXRhL3Nhbml0aXplci5odG1sJyAtYW5kDQogICAgICAgICAgICAgICAgLW5vdCAk +aXN0TWl0dGVpbHVuZ1VwbG9hZCkgew0KICAgICAgICAgICAgICAgIExvZy1BcGkgKCdHQVRFIDQw +NCB7MH0gKGRhdGEvLURpcmVrdHp1Z3JpZmYgYmxvY2tpZXJ0KScgLWYgJFJlbFBhdGgpDQogICAg +ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJVbmJla2FubnRlciBFbmRwdW5rdDog +JE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg +ICB9DQogICAgICAgICAgICAjIFZlcnNjaGxlaWVydW5ncy1GaWx0ZXI6IGRhcyBTdGF0aXN0aWst +IHVuZCBMb2didWNoLU1vZHVsIHNhbXQNCiAgICAgICAgICAgICMgTWFya3VwLUZyYWdtZW50IHdl +cmRlbiBudXIgYW4gQmVyZWNodGlndGUgYXVzZ2VsaWVmZXJ0Lg0KICAgICAgICAgICAgIyBEaXJl +a3RlciBadWdyaWZmIGR1cmNoIFVuYmVyZWNodGlndGUgKEJyb3dzZXItVVJMLUVpbmdhYmUsDQog +ICAgICAgICAgICAjIFNvdXJjZS1TdG9lYmVybikgYmVrb21tdCA0MDQg4oCUIHdpZSBiZWkgamVk +ZW0gbmljaHQgZXhpc3RpZXJlbmRlbg0KICAgICAgICAgICAgIyBQZmFkLCBrZWluIFN0YXR1c2Nv +ZGUtVmVycmF0Lg0KICAgICAgICAgICAgaWYgKCRSZWxQYXRoIC1lcSAnanMvc3RhdGlzdGlrLmpz +JyAtb3IgJFJlbFBhdGggLWVxICdkYXRhL21haW5mcmFtZS5odG1sJykgew0KICAgICAgICAgICAg +ICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdzdGF0aXN0aWsnKSkgew0KICAgICAgICAg +ICAgICAgICAgICBMb2ctQXBpICgnR0FURSA0MDQgezB9IChrZWluIFN0YXRpc3Rpay1SZWNodCkn +IC1mICRSZWxQYXRoKQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAo +IlVuYmVrYW5udGVyIEVuZHB1bmt0OiAkTWV0aG9kICRQYXRoIikgNDA0DQogICAgICAgICAgICAg +ICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlaWYg +KCRSZWxQYXRoIC1lcSAnanMvbG9nYnVjaC5qcycgLW9yICRSZWxQYXRoIC1lcSAnZGF0YS9zYW5p +dGl6ZXIuaHRtbCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWlj +aCAnbG9nYnVjaCcpKSB7DQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdHQVRFIDQwNCB7 +MH0gKGtlaW4gTG9nYnVjaC1SZWNodCknIC1mICRSZWxQYXRoKQ0KICAgICAgICAgICAgICAgICAg +ICBTZW5kLUVycm9yICRSZXNwb25zZSAoIlVuYmVrYW5udGVyIEVuZHB1bmt0OiAkTWV0aG9kICRQ +YXRoIikgNDA0DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJEZpbGVQYXRoID0gUmVzb2x2ZS1TYWZlUGF0 +aCAkUmVsUGF0aA0KICAgICAgICAgICAgJHZvbkZhbGxiYWNrID0gJGZhbHNlDQogICAgICAgICAg +ICAjIFNoYXJlLUZhbGxiYWNrOiB3ZW5uIGRpZSBEYXRlaSBsb2thbCBmZWhsdCAoei5CLiB4bHN4 +LmZ1bGwubWluLmpzDQogICAgICAgICAgICAjIHdpcmQgYmV3dXNzdCBuaWNodCBpbiBkZW4gQ2xp +ZW50LUNhY2hlIGtvcGllcnQpLCB2ZXJzdWNoZSBzaWUNCiAgICAgICAgICAgICMgdm9tIGtvbmZp +Z3VyaWVydGVuIEFzc2V0RmFsbGJhY2stUGZhZCBuYWNoenVsYWRlbi4NCiAgICAgICAgICAgIGlm +ICgoLW5vdCAkRmlsZVBhdGggLW9yIC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJEZpbGVQ +YXRoIC1QYXRoVHlwZSBMZWFmKSkgLWFuZCAkc2NyaXB0OkFzc2V0RmFsbGJhY2spIHsNCiAgICAg +ICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkZmFsbGJhY2tUcnkgPSBKb2lu +LVBhdGggJHNjcmlwdDpBc3NldEZhbGxiYWNrICRSZWxQYXRoDQogICAgICAgICAgICAgICAgICAg +ICRmYWxsYmFja05vcm0gPSBbU3lzdGVtLklPLlBhdGhdOjpHZXRGdWxsUGF0aCgkZmFsbGJhY2tU +cnkpDQogICAgICAgICAgICAgICAgICAgICRmYWxsYmFja1Jvb3ROb3JtID0gW1N5c3RlbS5JTy5Q +YXRoXTo6R2V0RnVsbFBhdGgoJHNjcmlwdDpBc3NldEZhbGxiYWNrKQ0KICAgICAgICAgICAgICAg +ICAgICBpZiAoJGZhbGxiYWNrTm9ybS5TdGFydHNXaXRoKCRmYWxsYmFja1Jvb3ROb3JtLCBbU3lz +dGVtLlN0cmluZ0NvbXBhcmlzb25dOjpPcmRpbmFsSWdub3JlQ2FzZSkgLWFuZA0KICAgICAgICAg +ICAgICAgICAgICAgICAgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGZhbGxiYWNrTm9ybSAtUGF0 +aFR5cGUgTGVhZikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRGaWxlUGF0aCA9ICRmYWxs +YmFja05vcm0NCiAgICAgICAgICAgICAgICAgICAgICAgICR2b25GYWxsYmFjayA9ICR0cnVlDQog +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAg +ICAgICAgICAgICAgTG9nLUFwaSAoJ0ZBTExCQUNLLUZFSExFUiB7MH06IHsxfScgLWYgJFJlbFBh +dGgsICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +IH0NCiAgICAgICAgICAgIGlmICgkRmlsZVBhdGggLWFuZCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0 +aCAkRmlsZVBhdGggLVBhdGhUeXBlIExlYWYpKSB7DQogICAgICAgICAgICAgICAgJGV4dCA9IFtT +eXN0ZW0uSU8uUGF0aF06OkdldEV4dGVuc2lvbigkRmlsZVBhdGgpLlRvTG93ZXIoKQ0KICAgICAg +ICAgICAgICAgICRtaW1lID0gaWYgKCRNaW1lVHlwZXMuQ29udGFpbnNLZXkoJGV4dCkpIHsgJE1p +bWVUeXBlc1skZXh0XSB9IGVsc2UgeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB9DQogICAg +ICAgICAgICAgICAgJGNvbnRlbnQgPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsQnl0ZXMoJEZp +bGVQYXRoKQ0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5TdGF0dXNDb2RlID0gMjAwDQogICAg +ICAgICAgICAgICAgJFJlc3BvbnNlLkNvbnRlbnRUeXBlID0gJG1pbWUNCiAgICAgICAgICAgICAg +ICBBZGQtU2VjdXJpdHlIZWFkZXJzICRSZXNwb25zZQ0KICAgICAgICAgICAgICAgICRSZXNwb25z +ZS5Db250ZW50TGVuZ3RoNjQgPSAkY29udGVudC5MZW5ndGgNCiAgICAgICAgICAgICAgICAkUmVz +cG9uc2UuT3V0cHV0U3RyZWFtLldyaXRlKCRjb250ZW50LCAwLCAkY29udGVudC5MZW5ndGgpDQog +ICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAgICAg +ICAgICAgaWYgKCR2b25GYWxsYmFjaykgeyBMb2ctQXBpICgnRklMRSAyMDAgezB9IChGYWxsYmFj +aywgezF9IEJ5dGVzKScgLWYgJFJlbFBhdGgsICRjb250ZW50Lkxlbmd0aCkgfQ0KICAgICAgICAg +ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBMb2ctQXBpICgnRklMRSA0MDQgezB9ICh3ZWRl +ciBpbSBSb290IG5vY2ggdWViZXIgQXNzZXRGYWxsYmFjayBnZWZ1bmRlbiknIC1mICRSZWxQYXRo +KQ0KICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiVW5iZWthbm50ZXIgRW5k +cHVua3Q6ICRNZXRob2QgJFBhdGgiKSA0MDQNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAg +ICAgICBjYXRjaCB7DQogICAgICAgICAgICBMb2ctQXBpICgnRVhDRVBUSU9OIHswfSB7MX06IHsy +fScgLWYgJE1ldGhvZCwgJFBhdGgsICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgICAgICAgICAg +dHJ5IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJF8uRXhjZXB0aW9uLk1lc3NhZ2UgNTAwIH0gY2F0 +Y2gge30NCiAgICAgICAgfQ0KICAgIH0NCn0NCmNhdGNoIHsNCiAgICBXcml0ZS1Ib3N0ICgnU2Vy +dmVyLUZlaGxlcjogezB9JyAtZiAkXy5FeGNlcHRpb24uTWVzc2FnZSkNCiAgICBMb2ctQXBpICgn +TUFJTi1MT09QIEVYQ0VQVElPTjogezB9JyAtZiAkXy5FeGNlcHRpb24uTWVzc2FnZSkNCn0NCmZp +bmFsbHkgew0KICAgICRXYXRjaGRvZ1RpbWVyLlN0b3AoKQ0KICAgIGlmICgkTGlzdGVuZXIuSXNM +aXN0ZW5pbmcpIHsgJExpc3RlbmVyLlN0b3AoKSB9DQogICAgTG9nLUFwaSAnU0hVVERPV04nDQog +ICAgV3JpdGUtSG9zdCAnU2VydmVyIGJlZW5kZXQuJw0KfQ0K ### FILE: stop.bat | 1307 QGVjaG8gb2ZmDQpzZXRsb2NhbCBlbmFibGVkZWxheWVkZXhwYW5zaW9uDQpjaGNwIDY1MDAxID5u dWwgMj4mMQ0KdGl0bGUgVkkzIERHTC1QbGFudW5nIC0gU3RvcA0KDQo6OiA9PT09PT09PT09PT09