From c9816af9b4c7b7d257ec86171caa85dbd68c3527 Mon Sep 17 00:00:00 2001 From: Gitea Action Date: Sun, 21 Jun 2026 18:11:46 +0000 Subject: [PATCH] VI3DGL: v1.4.3 (2026-06-21T18:11) --- VI3DGL/sync-bundle-03.txt | 5310 +++++++++++++++++++------------------ 1 file changed, 2722 insertions(+), 2588 deletions(-) diff --git a/VI3DGL/sync-bundle-03.txt b/VI3DGL/sync-bundle-03.txt index 81ff7d7..b6a37e9 100644 --- a/VI3DGL/sync-bundle-03.txt +++ b/VI3DGL/sync-bundle-03.txt @@ -6676,7 +6676,7 @@ U2VydmVyIG1hbnVlbGwgc3RhcnRlbi4iIC1Gb3JlZ3JvdW5kQ29sb3IgWWVsbG93Cn0KCldyaXRl LUhvc3QgIiIKV3JpdGUtSG9zdCAiPT09IFJvbGxiYWNrIGFiZ2VzY2hsb3NzZW4gPT09IiAtRm9y ZWdyb3VuZENvbG9yIEdyZWVuCldyaXRlLUhvc3QgIiAgICBXaWVkZXJoZXJnZXN0ZWxsdDogJCgk Y2hvc2VuLk5hbWUpIiAtRm9yZWdyb3VuZENvbG9yIEN5YW4K -### FILE: server.ps1 | 242309 +### FILE: server.ps1 | 249949 IyBTdGFuZDogMjAyNi0wNS0xNA0KcGFyYW0oDQogICAgW2ludF0kUG9ydCA9IDgwODAsDQogICAg W3N0cmluZ10kUm9vdFBhdGggPSAnJywNCiAgICAjIE9wdGlvbmFsZXMgendlaXRlcyBSb290IGZ1 ZXIgZ2VtZWluc2FtZSBEYXRlbiAoYWRtaW4uanNvbiBldGMuKS4gV2Vubg0KICAgICMgZ2VzZXR6 @@ -8315,2620 +8315,2754 @@ anNvbicgfCBPdXQtTnVsbDsgTG9nLUFwaSAnUFJFV0FSTSBwbGFudW5nLmpzb24gb2snIH0gY2F0 Y2ggeyBMb2ctQXBpICgnUFJFV0FSTSBwbGFudW5nLmpzb24gRkVITEVSOiB7MH0nIC1mICRfLkV4 Y2VwdGlvbi5NZXNzYWdlKSB9DQoNCiMgPT09IFVwZGF0ZS1DaGVjayA9PT0NCiRzY3JpcHQ6VXBk YXRlQXZhaWxhYmxlICAgPSAkZmFsc2UNCiRzY3JpcHQ6UmVtb3RlVmVyc2lvbiAgICAgPSAnJw0K -JHNjcmlwdDpVcGRhdGVMYXN0Q2hlY2tVdGMgPSBbZGF0ZXRpbWVdOjpNaW5WYWx1ZQ0KDQojIEJl -aG9lcmRlbi1Qcm94eSB2ZXJsYW5ndCBBdXRoZW50aWZpemllcnVuZyAtPiBvaG5lIG1pdGdlc2No -aWNrdGUgV2luZG93cy0NCiMgQ3JlZGVudGlhbHMgYW50d29ydGV0IGVyIG1pdCAoNDA3KSBQcm94 -eWF1dGhlbnRpZml6aWVydW5nIGVyZm9yZGVybGljaCwgdW5kDQojIEpFREVSIGF1c2dlaGVuZGUg -SFRUUFMtUmVxdWVzdCAoVXBkYXRlLUNoZWNrLCBzcGFldGVyIFVwZGF0ZS1Eb3dubG9hZCkNCiMg -c2NoZWl0ZXJ0LiBEZW0gU3lzdGVtLVByb3h5IGVpbm1hbGlnIGRpZSBhbmdlbWVsZGV0ZW4gRG9t -YWVuZW4tQ3JlZGVudGlhbHMNCiMgKE5lZ290aWF0ZS9OVExNIGRlcyBsYXVmZW5kZW4gQmVudXR6 -ZXJzKSBtaXRnZWJlbi4gV2lya3QgZ2xvYmFsIGZ1ZXINCiMgSW52b2tlLVdlYlJlcXVlc3QvV2Vi -Q2xpZW50IHVlYmVyIERlZmF1bHRXZWJQcm94eS4NCnRyeSB7DQogICAgJHN5c1Byb3h5ID0gW1N5 -c3RlbS5OZXQuV2ViUmVxdWVzdF06OkdldFN5c3RlbVdlYlByb3h5KCkNCiAgICBpZiAoJHN5c1By -b3h5KSB7DQogICAgICAgICRzeXNQcm94eS5DcmVkZW50aWFscyA9IFtTeXN0ZW0uTmV0LkNyZWRl -bnRpYWxDYWNoZV06OkRlZmF1bHROZXR3b3JrQ3JlZGVudGlhbHMNCiAgICAgICAgW1N5c3RlbS5O -ZXQuV2ViUmVxdWVzdF06OkRlZmF1bHRXZWJQcm94eSA9ICRzeXNQcm94eQ0KICAgICAgICBMb2ct -QXBpICdQUk9YWTogU3lzdGVtLVByb3h5IG1pdCBhbmdlbWVsZGV0ZW4gV2luZG93cy1DcmVkZW50 -aWFscyBrb25maWd1cmllcnQuJw0KICAgIH0NCn0gY2F0Y2ggew0KICAgIExvZy1BcGkgKCdQUk9Y -WS1TRVRVUCBGRUhMRVIgKFVwZGF0ZS1DaGVjayBldnRsLiBvaG5lIFByb3h5LUF1dGgpOiB7MH0n -IC1mICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KfQ0KDQpmdW5jdGlvbiBSZWZyZXNoLVVwZGF0ZUNo -ZWNrIHsNCiAgICBpZiAoKFtkYXRldGltZV06OlV0Y05vdyAtICRzY3JpcHQ6VXBkYXRlTGFzdENo -ZWNrVXRjKS5Ub3RhbE1pbnV0ZXMgLWx0IDYwKSB7IHJldHVybiB9DQogICAgJHNjcmlwdDpVcGRh -dGVMYXN0Q2hlY2tVdGMgPSBbZGF0ZXRpbWVdOjpVdGNOb3cNCiAgICAkbG9jYWxWZXIgPSAnMC4w -LjAnDQogICAgJF92ZiA9IEpvaW4tUGF0aCAkUm9vdCAnVkVSU0lPTicNCiAgICBpZiAoVGVzdC1Q -YXRoIC1MaXRlcmFsUGF0aCAkX3ZmKSB7ICRsb2NhbFZlciA9IChHZXQtQ29udGVudCAtTGl0ZXJh -bFBhdGggJF92ZiAtUmF3KS5UcmltKCkgfQ0KICAgIHRyeSB7DQogICAgICAgICMgUHJveHktQXV0 -aCBsYWV1ZnQgdWViZXIgZGllIG9iZW4gZ2xvYmFsIGdlc2V0enRlbiBEZWZhdWx0V2ViUHJveHkt -DQogICAgICAgICMgQ3JlZGVudGlhbHMuIFRpbWVvdXRTZWMgZ3Jvc3N6dWVnaWdlciAoOCBzdGF0 -dCAzIHMpLCB3ZWlsIGRlciBOVExNLQ0KICAgICAgICAjIEhhbmRzaGFrZSBkdXJjaCBkZW4gUHJv -eHkgbGFlbmdlciBkYXVlcm4ga2Fubi4NCiAgICAgICAgJHJ2ID0gKEludm9rZS1XZWJSZXF1ZXN0 -IC1VcmkgJ2h0dHBzOi8vdXBkYXRlcy5yaGluby5ucncvcmhpbm8vU3RhdHVzUXVvX1VwZGF0ZXMv -cmF3L2JyYW5jaC9tYWluL1ZJM0RHTC9WRVJTSU9OJyBgDQogICAgICAgICAgICAgICAtVXNlQmFz -aWNQYXJzaW5nIC1UaW1lb3V0U2VjIDggLUVycm9yQWN0aW9uIFN0b3ApLkNvbnRlbnQuVHJpbSgp -DQogICAgICAgICRzY3JpcHQ6UmVtb3RlVmVyc2lvbiAgID0gJHJ2DQogICAgICAgICRzY3JpcHQ6 -VXBkYXRlQXZhaWxhYmxlID0gKFtTeXN0ZW0uVmVyc2lvbl0kcnYgLWd0IFtTeXN0ZW0uVmVyc2lv -bl0kbG9jYWxWZXIpDQogICAgICAgIExvZy1BcGkgKCJVUERBVEUtQ0hFQ0s6IGxva2FsPSRsb2Nh -bFZlciByZW1vdGU9JHJ2IGF2YWlsYWJsZT0kKCRzY3JpcHQ6VXBkYXRlQXZhaWxhYmxlKSIpDQog -ICAgfSBjYXRjaCB7DQogICAgICAgIExvZy1BcGkgKCJVUERBVEUtQ0hFQ0s6IG5pY2h0IGVycmVp -Y2hiYXIgKCQoJF8uRXhjZXB0aW9uLk1lc3NhZ2UpKSIpDQogICAgfQ0KfQ0KUmVmcmVzaC1VcGRh -dGVDaGVjaw0KDQojIEluaXRpYWwtU25hcHNob3QgZGVyIE9mZmxpbmUtV29jaGVucGxhbi5odG1s -IGJlaW0gU3RhcnQgcmVnZW5lcmllcmVuDQojIChhdWNoIHdlbm4gc2VpdCBkZW0gbGV0enRlbiBM -YXVmIG5pY2h0cyBnZWFlbmRlcnQgd3VyZGUsIGhhdCBzaWNoIHouQi4NCiMgZGFzIERhdHVtIHZl -cnNjaG9iZW4gdW5kIGRlciBIZXV0ZS1NYXJrZXIgemVpZ3Qgc29uc3QgZGllIGFsdGUgV29jaGUp -Lg0KdHJ5IHsgR2VuZXJhdGUtV29jaGVucGxhblNuYXBzaG90IHwgT3V0LU51bGwgfSBjYXRjaCB7 -IExvZy1BcGkgKCdTTkFQU0hPVCAoaW5pdGlhbCkgRkVITEVSOiB7MH0nIC1mICRfLkV4Y2VwdGlv -bi5NZXNzYWdlKSB9DQoNCiMgLS0tIFNlcnZlciBzdGFydGVuIC0tLQ0KJExpc3RlbmVyID0gTmV3 -LU9iamVjdCBTeXN0ZW0uTmV0Lkh0dHBMaXN0ZW5lcg0KJExpc3RlbmVyLlByZWZpeGVzLkFkZCgi -aHR0cDovL2xvY2FsaG9zdDokUG9ydC8iKQ0KdHJ5IHsNCiAgICAkTGlzdGVuZXIuU3RhcnQoKQ0K -fSBjYXRjaCB7DQogICAgV3JpdGUtSG9zdCAoJ0ZFSExFUjogTGlzdGVuZXIgYXVmIFBvcnQgezB9 -IGthbm4gbmljaHQgc3RhcnRlbi4nIC1mICRQb3J0KSAtRm9yZWdyb3VuZENvbG9yIFJlZA0KICAg -IFdyaXRlLUhvc3QgJF8NCiAgICBMb2ctQXBpICgnTElTVEVORVIgRkVITEVSOiB7MH0nIC1mICRf -LkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgIFN0YXJ0LVNsZWVwIC1TZWNvbmRzIDUNCiAgICBleGl0 -IDENCn0NCg0KV3JpdGUtSG9zdCAoJ1ZJMyBER0wtUGxhbnVuZyBhdWYgaHR0cDovL2xvY2FsaG9z -dDp7MH0nIC1mICRQb3J0KQ0KV3JpdGUtSG9zdCAoJ1Jvb3Q6ICAgIHswfScgLWYgJFJvb3QpDQpX -cml0ZS1Ib3N0ICgnRGF0YURpcjogezB9JyAtZiAkRGF0YURpcikNCldyaXRlLUhvc3QgKCdMb2c6 -ICAgICB7MH0nIC1mICRzY3JpcHQ6QXBpTG9nKQ0KDQojIC0tLSBIZWFydGJlYXQtV2F0Y2hkb2cg -LS0tDQokV2F0Y2hkb2dUaW1lciA9IE5ldy1PYmplY3QgU3lzdGVtLlRpbWVycy5UaW1lcg0KJFdh -dGNoZG9nVGltZXIuSW50ZXJ2YWwgPSA1MDAwDQokV2F0Y2hkb2dUaW1lci5BdXRvUmVzZXQgPSAk -dHJ1ZQ0KUmVnaXN0ZXItT2JqZWN0RXZlbnQgLUlucHV0T2JqZWN0ICRXYXRjaGRvZ1RpbWVyIC1F -dmVudE5hbWUgRWxhcHNlZCAtQWN0aW9uIHsNCiAgICAkZWxhcHNlZCA9IChHZXQtRGF0ZSkgLSAk -c2NyaXB0Okxhc3RIZWFydGJlYXQNCiAgICBpZiAoJGVsYXBzZWQuVG90YWxTZWNvbmRzIC1ndCAz -MCkgew0KICAgICAgICBpZiAoLW5vdCAkc2NyaXB0OlNodXRkb3duUGVuZGluZykgew0KICAgICAg -ICAgICAgJHNjcmlwdDpTaHV0ZG93blBlbmRpbmcgPSAkdHJ1ZQ0KICAgICAgICB9IGVsc2VpZiAo -JGVsYXBzZWQuVG90YWxTZWNvbmRzIC1ndCAzNSkgew0KICAgICAgICAgICAgJExpc3RlbmVyLlN0 -b3AoKQ0KICAgICAgICAgICAgW0Vudmlyb25tZW50XTo6RXhpdCgwKQ0KICAgICAgICB9DQogICAg -fQ0KfSB8IE91dC1OdWxsDQokV2F0Y2hkb2dUaW1lci5TdGFydCgpDQoNCiMgLS0tIFJlcXVlc3Qt -TG9vcCAtLS0NCnRyeSB7DQogICAgd2hpbGUgKCRMaXN0ZW5lci5Jc0xpc3RlbmluZykgew0KICAg -ICAgICAkQXN5bmNSZXN1bHQgPSAkTGlzdGVuZXIuQmVnaW5HZXRDb250ZXh0KCRudWxsLCAkbnVs -bCkNCiAgICAgICAgd2hpbGUgKC1ub3QgJEFzeW5jUmVzdWx0LkFzeW5jV2FpdEhhbmRsZS5XYWl0 -T25lKDEwMDApKSB7IH0NCiAgICAgICAgJENvbnRleHQgPSAkTGlzdGVuZXIuRW5kR2V0Q29udGV4 -dCgkQXN5bmNSZXN1bHQpDQogICAgICAgICRSZXF1ZXN0ID0gJENvbnRleHQuUmVxdWVzdA0KICAg -ICAgICAkUmVzcG9uc2UgPSAkQ29udGV4dC5SZXNwb25zZQ0KICAgICAgICAkTWV0aG9kID0gJFJl -cXVlc3QuSHR0cE1ldGhvZA0KICAgICAgICAkUGF0aCA9ICRSZXF1ZXN0LlVybC5BYnNvbHV0ZVBh -dGgNCiAgICAgICAgTG9nLUFwaSAoJ1JFUSB7MH0gezF9JyAtZiAkTWV0aG9kLCAkUGF0aCkNCg0K -ICAgICAgICB0cnkgew0KICAgICAgICAgICAgIyA9PT09PSBDT1JTIFByZWZsaWdodCA9PT09PQ0K -ICAgICAgICAgICAgaWYgKCRNZXRob2QgLWVxICdPUFRJT05TJykgew0KICAgICAgICAgICAgICAg -ICRSZXNwb25zZS5TdGF0dXNDb2RlID0gMjA0DQogICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5 -SGVhZGVycyAkUmVzcG9uc2UNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFt -LkNsb3NlKCkNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAg -ICAgICAgICAjID09PT09IFNZU1RFTSA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn -L2FwaS9oZWFydGJlYXQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAg -ICAgIyBPcmlnaW4tQ2hlY2sgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1Ob3RicmVtc2UgMjAy -Ni0wNS0yOCk6DQogICAgICAgICAgICAgICAgIyBIZWFydGJlYXQgYWt6ZXB0aWVydCBudXIgUmVx -dWVzdHMgdm9uIGRlciBlaWdlbmVuIEFwcC4gQW5kZXJlDQogICAgICAgICAgICAgICAgIyBsb2th -bGUgUHJvemVzc2Uga29lbm50ZW4gc29uc3QgcGVyIExvb3AgZGllIEF1dG8tU2h1dGRvd24tTG9n -aWsNCiAgICAgICAgICAgICAgICAjIHVtZ2VoZW4gb2RlciBkZW4gU2VydmVyIGJld3Vzc3QgYW0g -TGViZW4gaGFsdGVuLiBCcm93c2VyIHNlbmRldA0KICAgICAgICAgICAgICAgICMgT3JpZ2luIGF1 -dG9tYXRpc2NoOyBmZWhsZW5kZXIgSGVhZGVyIHdpcmQgdG9sZXJpZXJlbiAoc2VuZEJlYWNvbg0K -ICAgICAgICAgICAgICAgICMgaW4gbWFuY2hlbiBCcm93c2VybiksIGFiZXIgRkFMU0NIRVIgT3Jp -Z2luIHdpcmQgYWJnZWxlaG50Lg0KICAgICAgICAgICAgICAgICRvcmlnaW4gPSAkUmVxdWVzdC5I -ZWFkZXJzWydPcmlnaW4nXQ0KICAgICAgICAgICAgICAgIGlmICgkb3JpZ2luIC1hbmQgJG9yaWdp -biAtbmUgJHNjcmlwdDpDb3JzT3JpZ2luKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy -b3IgJFJlc3BvbnNlICdPcmlnaW4gbmljaHQgZXJsYXVidCcgNDAzDQogICAgICAgICAgICAgICAg -ICAgIExvZy1BcGkgKCdIRUFSVEJFQVQgNDAzIE9yaWdpbj17MH0nIC1mICRvcmlnaW4pDQogICAg -ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICRzY3JpcHQ6TGFzdEhlYXJ0YmVhdCA9IEdldC1EYXRlDQogICAgICAgICAgICAgICAgJHNj -cmlwdDpTaHV0ZG93blBlbmRpbmcgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAjIGFkbWluVmVy -c2lvbiAvIHBsYW51bmdWZXJzaW9uOiBtdGltZSBhbHMgVGlja3MuIEVybGF1YnQgZGVtDQogICAg -ICAgICAgICAgICAgIyBDbGllbnQsIFJlY2h0ZS0gYnp3LiBQZXJzb25lbi1BZW5kZXJ1bmdlbiBp -bSBIaW50ZXJncnVuZCB6dQ0KICAgICAgICAgICAgICAgICMgZXJrZW5uZW4gdW5kIFoucmVjaHRl -L1oucGxhbnVuZyBuZXUgenUgbGFkZW4sIG9obmUgZGFzcyBkZXINCiAgICAgICAgICAgICAgICAj -IFVzZXIgRjUgZHJ1ZWNrZW4gbXVzcy4gcGxhbnVuZ1ZlcnNpb24gZGVja3QgaW5zYmVzb25kZXJl -DQogICAgICAgICAgICAgICAgIyBlZGl0UmVjaHRlL3NlaGVuLVVwZGF0ZXMgYWIsIGRpZSBkZXIg -TGl2ZS1TeW5jLURlbHRhIG5pY2h0DQogICAgICAgICAgICAgICAgIyBsaWVmZXJ0IChDaGVycnkt -UGljayAxYWVmZTI2IEJ1ZyAjMykuDQogICAgICAgICAgICAgICAgJGFkbWluVmVyICAgPSAwDQog -ICAgICAgICAgICAgICAgJHBsYW51bmdWZXIgPSAwDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAg -ICAgICAgICAgICAgICAgICAgJGFkbWluRmlsZSA9IEpvaW4tUGF0aCAkRGF0YURpciAnYWRtaW4u -anNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGFk -bWluRmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluVmVyID0gKEdldC1JdGVt -IC1MaXRlcmFsUGF0aCAkYWRtaW5GaWxlKS5MYXN0V3JpdGVUaW1lVXRjLlRpY2tzDQogICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHBsYW51bmdGaWxlID0gSm9pbi1Q -YXRoICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmIChUZXN0 -LVBhdGggLUxpdGVyYWxQYXRoICRwbGFudW5nRmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgJHBsYW51bmdWZXIgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRwbGFudW5nRmlsZSkuTGFz -dFdyaXRlVGltZVV0Yy5UaWNrcw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug -QHsgc3RhdHVzID0gJ29rJzsgYWRtaW5WZXJzaW9uID0gJGFkbWluVmVyOyBwbGFudW5nVmVyc2lv -biA9ICRwbGFudW5nVmVyIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zaHV0ZG93bicgLWFuZCAkTWV0aG9k -IC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl -IEB7IHN0YXR1cyA9ICdzaHV0ZG93bicgfQ0KICAgICAgICAgICAgICAgIFN0YXJ0LVNsZWVwIC1N -aWxsaXNlY29uZHMgMzAwDQogICAgICAgICAgICAgICAgJExpc3RlbmVyLlN0b3AoKQ0KICAgICAg -ICAgICAgICAgIFtFbnZpcm9ubWVudF06OkV4aXQoMCkNCiAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaW5mbycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0K -ICAgICAgICAgICAgICAgIFJlZnJlc2gtVXBkYXRlQ2hlY2sNCiAgICAgICAgICAgICAgICAkciA9 -IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICAkaW5mb09iaiA9IEB7DQogICAgICAgICAgICAg -ICAgICAgIGJlbnV0emVyICAgICAgICAgICAgICAgID0gIiREb21haW5cJFVzZXJuYW1lIg0KICAg -ICAgICAgICAgICAgICAgICByb2xsZSAgICAgICAgICAgICAgICAgICA9ICRyLnJvbGxlDQogICAg -ICAgICAgICAgICAgICAgIGlzdFN1cGVyVXNlciAgICAgICAgICAgID0gJHIuaXN0U3VwZXJVc2Vy -DQogICAgICAgICAgICAgICAgICAgIGlzdEZhY2hhdWZzaWNodCAgICAgICAgID0gJHIuaXN0RmFj -aGF1ZnNpY2h0DQogICAgICAgICAgICAgICAgICAgIGlzdEdlc2FtdHZlcmFudHdvcnRsaWNoID0g -JHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gNCiAgICAgICAgICAgICAgICAgICAgc2VoZW4gICAg -ICAgICAgICAgICAgICAgPSAkci5zZWhlbg0KICAgICAgICAgICAgICAgICAgICBhZG1pblN1YnRh -YnMgICAgICAgICAgICA9ICRyLmFkbWluU3VidGFicw0KICAgICAgICAgICAgICAgICAgICBzdGF0 -aXN0aWtCZXJlaWNoZSAgICAgICA9ICRyLnN0YXRpc3Rpa0JlcmVpY2hlDQogICAgICAgICAgICAg -ICAgICAgIGVkaXRpZXJlbiAgICAgICAgICAgICAgID0gJHIuZWRpdGllcmVuICAgIyBudWxsIGJl -aSBTdXBlclVzZXIgPSAiYWxsZXMgZXJsYXVidCINCiAgICAgICAgICAgICAgICAgICAgbWVpbmVQ -ZXJzb25JZCAgICAgICAgICAgPSAkci5tZWluZVBlcnNvbklkDQogICAgICAgICAgICAgICAgICAg -IHNlcnZlciAgICAgICAgICAgICAgICAgID0gJHNjcmlwdDpDb3JzT3JpZ2luDQogICAgICAgICAg -ICAgICAgICAgIHVwZGF0ZUF2YWlsYWJsZSAgICAgICAgID0gJHNjcmlwdDpVcGRhdGVBdmFpbGFi -bGUNCiAgICAgICAgICAgICAgICAgICAgcmVtb3RlVmVyc2lvbiAgICAgICAgICAgPSAkc2NyaXB0 -OlJlbW90ZVZlcnNpb24NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSAkaW5mb09iag0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog -ICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2RlYnVnJyAtYW5k -ICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJGRhdCA9IEB7IFJvb3QgPSAk -Um9vdDsgRGF0YURpciA9ICREYXRhRGlyOyBGaWxlcyA9IEB7fSB9DQogICAgICAgICAgICAgICAg -Zm9yZWFjaCAoJGYgaW4gJ2FkbWluLmpzb24nLCdwbGFudW5nLmpzb24nLCdsb2didWNoLmpzb24n -KSB7DQogICAgICAgICAgICAgICAgICAgICRmcCA9IEpvaW4tUGF0aCAkRGF0YURpciAkZg0KICAg -ICAgICAgICAgICAgICAgICAkaW5mbyA9IEB7IGV4aXN0cyA9IChUZXN0LVBhdGggLUxpdGVyYWxQ -YXRoICRmcCkgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGluZm8uZXhpc3RzKSB7ICRpbmZv -LnNpemUgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmcCkuTGVuZ3RoIH0NCiAgICAgICAgICAg -ICAgICAgICAgJGRhdC5GaWxlc1skZl0gPSAkaW5mbw0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAjIFJlY2h0ZS1JbmZvICh3aWNodGlnIGZ1ZXIgQWRtaW4tVGFiLVNpY2h0YmFy -a2VpdCkNCiAgICAgICAgICAgICAgICAkZGF0LkJlbnV0emVyID0gIiREb21haW5cJFVzZXJuYW1l -Ig0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRyID0gR2V0LVJl -Y2h0ZQ0KICAgICAgICAgICAgICAgICAgICAkZGF0LlJlY2h0ZSA9IEB7DQogICAgICAgICAgICAg -ICAgICAgICAgICByb2xsZSAgICAgICAgICAgPSAkci5yb2xsZQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgaXN0U3VwZXJVc2VyICAgID0gJHIuaXN0U3VwZXJVc2VyDQogICAgICAgICAgICAgICAg -ICAgICAgICBpc3RGYWNoYXVmc2ljaHQgPSAkci5pc3RGYWNoYXVmc2ljaHQNCiAgICAgICAgICAg -ICAgICAgICAgICAgIHNlaGVuICAgICAgICAgICA9ICRyLnNlaGVuDQogICAgICAgICAgICAgICAg -ICAgICAgICBtZWluZVBlcnNvbklkICAgPSAkci5tZWluZVBlcnNvbklkDQogICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAg -JGRhdC5SZWNodGUgPSBAeyBmZWhsZXIgPSAkXy5FeGNlcHRpb24uTWVzc2FnZSB9DQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgQWRtaW4uanNvbiBLdXJ6Y2hlY2sNCiAgICAg -ICAgICAgICAgICAkYWRtaW5PYmogPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAg -ICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW5PYmopIHsNCiAgICAgICAgICAgICAgICAg -ICAgJGRhdC5BZG1pbkpzb25MZXNiYXIgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICB9IGVsc2Ug -ew0KICAgICAgICAgICAgICAgICAgICAkYW56U1UgPSAwDQogICAgICAgICAgICAgICAgICAgIGlm -ICgkYWRtaW5PYmouc3VwZXJVc2VyKSB7ICRhbnpTVSA9IEAoJGFkbWluT2JqLnN1cGVyVXNlciku -Q291bnQgfQ0KICAgICAgICAgICAgICAgICAgICAkc3VLZW5udW5nZW4gPSBAKCkNCiAgICAgICAg -ICAgICAgICAgICAgaWYgKCRhZG1pbk9iai5zdXBlclVzZXIpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgIGZvcmVhY2ggKCRzIGluIEAoJGFkbWluT2JqLnN1cGVyVXNlcikpIHsgJHN1S2VubnVu -Z2VuICs9IFtzdHJpbmddJHMubndLZW5udW5nIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICAgICAkZGF0LkFkbWluSnNvbkxlc2JhciA9ICR0cnVlDQogICAgICAgICAg -ICAgICAgICAgICRkYXQuU3VwZXJVc2VyQW56YWhsID0gJGFuelNVDQogICAgICAgICAgICAgICAg -ICAgICRkYXQuU3VwZXJVc2VyS2VubnVuZ2VuID0gJHN1S2VubnVuZ2VuDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgJGRhdA0KICAg -ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09 -PT0gU1lOQy1DSEVDSyA9PT09PQ0KICAgICAgICAgICAgIyBWZXJnbGVpY2h0IHBybyBXZWItQXNz -ZXQgZGllIERhdGVpLUdyb2Vzc2UgaW4gZGVyIFNvdXJjZSAoZ2VwdWxsdGVzDQogICAgICAgICAg -ICAjIFJlcG8sICRzY3JpcHQ6QXNzZXRGYWxsYmFjaykgZ2VnZW4gZGllIERhdGVpLUdyb2Vzc2Ug -aW0gQXNzZXQtQ2FjaGUNCiAgICAgICAgICAgICMgKCRSb290LCBSb2JvY29weS1aaWVsKS4gRXJr -ZW5udCB1bnZvbGxzdGFlbmRpZ2UgUm9ib2NvcHktVWViZXItDQogICAgICAgICAgICAjIHRyYWd1 -bmdlbiwgdmVyYWx0ZXRlIEFzc2V0LUNhY2hlcyB1bmQgZmVobGVuZGUgRGF0ZWllbi4NCiAgICAg -ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvc3luYy1jaGVjay9kYXRlaWVuJyAtYW5kICRNZXRo -b2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4p -KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6QXNzZXRGYWxsYmFjaykgew0K -ICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAg -ICAgICAgICAgICAgICAgICBvayA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZmVo -bGVyID0gJ0Fzc2V0RmFsbGJhY2sgbmljaHQga29uZmlndXJpZXJ0IOKAlCBTb3VyY2UtUGZhZCB1 -bmJla2FubnQsIFZlcmdsZWljaCBuaWNodCBtb2VnbGljaC4gKFNlcnZlciB3dXJkZSBvaG5lIC1B -c3NldEZhbGxiYWNrIGdlc3RhcnRldC4pJw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICR3ZWJFeHQgPSAnLmpzJywnLmNzcycsJy5odG1sJywnLmljbycsJy5wbmcnLCcuanBnJywnLmpw -ZWcnLCcuc3ZnJw0KICAgICAgICAgICAgICAgICRpZ25vcmllcmVUb3AgPSBAKCcuZ2l0JywnZG9j -cycsJ2RldicsJ3Rlc3RzJywnZGF0YScsJ2NhY2hlJykNCiAgICAgICAgICAgICAgICAkZGF0ZWll -biA9IEAoKQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRhbGxl -ID0gR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdDpBc3NldEZhbGxiYWNrIC1SZWN1 -cnNlIC1GaWxlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlDQogICAgICAgICAgICAgICAg -ICAgIGZvcmVhY2ggKCRmIGluICRhbGxlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcmVs -ID0gJGYuRnVsbE5hbWUuU3Vic3RyaW5nKCRzY3JpcHQ6QXNzZXRGYWxsYmFjay5MZW5ndGggKyAx -KSAtcmVwbGFjZSAnXFwnLCAnLycNCiAgICAgICAgICAgICAgICAgICAgICAgICR0b3AgPSAoJHJl -bCAtc3BsaXQgJy8nKVswXQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpZ25vcmllcmVU -b3AgLWNvbnRhaW5zICR0b3ApIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -JGV4dCA9ICRmLkV4dGVuc2lvbi5Ub0xvd2VyKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkd2ViRXh0IC1ub3Rjb250YWlucyAkZXh0KSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICRkYXRlaWVuICs9ICRyZWwNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAjIGRhdGEvLVNvbmRlcmZhZWxsZTogbnVyIGRpZSB6d2VpIFRhcm4tTWFy -a3VwcywgYWxsZXMgYW5kZXJlDQogICAgICAgICAgICAgICAgICAgICMgbGllZ3QgaW0gRGF0YURp -ciAoYWRtaW4uanNvbi9wbGFudW5nLmpzb24vLi4uKSB1bmQgd2lyZCBuaWNodA0KICAgICAgICAg -ICAgICAgICAgICAjIGluIGRlbiBBc3NldC1DYWNoZSBrb3BpZXJ0Lg0KICAgICAgICAgICAgICAg -ICAgICBmb3JlYWNoICgkZXh0cmEgaW4gJ2RhdGEvbWFpbmZyYW1lLmh0bWwnLCdkYXRhL3Nhbml0 -aXplci5odG1sJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNyY0V4dHJhID0gSm9pbi1Q -YXRoICRzY3JpcHQ6QXNzZXRGYWxsYmFjayAkZXh0cmENCiAgICAgICAgICAgICAgICAgICAgICAg -IGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRzcmNFeHRyYSkgeyAkZGF0ZWllbiArPSAkZXh0 -cmEgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQog -ICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkZmFs -c2U7IGZlaGxlciA9ICgnU291cmNlLVZlcnplaWNobmlzIG5pY2h0IGxlc2JhcjogJyArICRfLkV4 -Y2VwdGlvbi5NZXNzYWdlKSB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRkYXRlaWVuID0gJGRhdGVpZW4gfCBTb3J0LU9i -amVjdCAtVW5pcXVlDQogICAgICAgICAgICAgICAgJGVpbnRyYWVnZSA9IEAoKQ0KICAgICAgICAg -ICAgICAgICRhbnpPayA9IDA7ICRhbnpEaWZmID0gMDsgJGFuekZlaGx0QXNzZXQgPSAwOyAkYW56 -RmVobHRTb3VyY2UgPSAwDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHJlbCBpbiAkZGF0ZWll -bikgew0KICAgICAgICAgICAgICAgICAgICAkYXNzZXRQZmFkICA9IEpvaW4tUGF0aCAkUm9vdCAk -cmVsDQogICAgICAgICAgICAgICAgICAgICRzb3VyY2VQZmFkID0gSm9pbi1QYXRoICRzY3JpcHQ6 -QXNzZXRGYWxsYmFjayAkcmVsDQogICAgICAgICAgICAgICAgICAgICRhc3NldEJ5dGVzICA9ICRu -dWxsDQogICAgICAgICAgICAgICAgICAgICRzb3VyY2VCeXRlcyA9ICRudWxsDQogICAgICAgICAg -ICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhc3NldFBmYWQpICB7ICRhc3Nl -dEJ5dGVzICA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGFzc2V0UGZhZCkuTGVuZ3RoIH0NCiAg -ICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNvdXJjZVBmYWQp -IHsgJHNvdXJjZUJ5dGVzID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkc291cmNlUGZhZCkuTGVu -Z3RoIH0NCiAgICAgICAgICAgICAgICAgICAgJHN0YXR1cyA9ICd1bmJla2FubnQnDQogICAgICAg -ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHNvdXJjZUJ5dGVzIC1hbmQgJG51bGwgLWVxICRh -c3NldEJ5dGVzKSB7ICRzdGF0dXMgPSAnYmVpZGVfZmVobGVuJyB9DQogICAgICAgICAgICAgICAg -ICAgIGVsc2VpZiAoJG51bGwgLWVxICRhc3NldEJ5dGVzKSAgeyAkc3RhdHVzID0gJ2Fzc2V0X2Zl -aGx0JzsgICRhbnpGZWhsdEFzc2V0KysgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCRu -dWxsIC1lcSAkc291cmNlQnl0ZXMpIHsgJHN0YXR1cyA9ICdzb3VyY2VfZmVobHQnOyAkYW56RmVo -bHRTb3VyY2UrKyB9DQogICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoJGFzc2V0Qnl0ZXMgLWVx -ICRzb3VyY2VCeXRlcykgeyAkc3RhdHVzID0gJ29rJzsgJGFuek9rKysgfQ0KICAgICAgICAgICAg -ICAgICAgICBlbHNlIHsgJHN0YXR1cyA9ICdncm9lc3NlX2RpZmYnOyAkYW56RGlmZisrIH0NCiAg -ICAgICAgICAgICAgICAgICAgJGVpbnRyYWVnZSArPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAg -ICAgICAgICAgICAgcGZhZCAgICAgICAgPSAkcmVsDQogICAgICAgICAgICAgICAgICAgICAgICBz -b3VyY2VCeXRlcyA9ICRzb3VyY2VCeXRlcw0KICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXRC -eXRlcyAgPSAkYXNzZXRCeXRlcw0KICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkJ5dGVzICAg -PSBpZiAoJG51bGwgLW5lICRzb3VyY2VCeXRlcyAtYW5kICRudWxsIC1uZSAkYXNzZXRCeXRlcykg -eyAkYXNzZXRCeXRlcyAtICRzb3VyY2VCeXRlcyB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAg -ICAgICAgICAgICAgICBzdGF0dXMgICAgICA9ICRzdGF0dXMNCiAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl -c3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIG9rICAgICAgICAgID0gJHRydWUNCiAgICAg -ICAgICAgICAgICAgICAgc291cmNlUm9vdCAgPSAkc2NyaXB0OkFzc2V0RmFsbGJhY2sNCiAgICAg -ICAgICAgICAgICAgICAgYXNzZXRSb290ICAgPSAkUm9vdA0KICAgICAgICAgICAgICAgICAgICBh -bnphaGwgICAgICA9ICRlaW50cmFlZ2UuQ291bnQNCiAgICAgICAgICAgICAgICAgICAgYW56T2sg -ICAgICAgPSAkYW56T2sNCiAgICAgICAgICAgICAgICAgICAgYW56RGlmZiAgICAgPSAkYW56RGlm -Zg0KICAgICAgICAgICAgICAgICAgICBhbnpGZWhsdEFzc2V0ICA9ICRhbnpGZWhsdEFzc2V0DQog -ICAgICAgICAgICAgICAgICAgIGFuekZlaGx0U291cmNlID0gJGFuekZlaGx0U291cmNlDQogICAg -ICAgICAgICAgICAgICAgIGRhdGVpZW4gICAgID0gJGVpbnRyYWVnZQ0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAg -ICAjID09PT09IEFETUlOID09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2Fk -bWluJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJHR4dCA9IFJl -YWQtVGV4dEZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk -dHh0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdhZG1pbi5qc29uIG5pY2h0IGdlZnVuZGVuJyA0 -MDQgfQ0KICAgICAgICAgICAgICAgIGVsc2UgeyBTZW5kLUpzb25UZXh0ICRSZXNwb25zZSAkdHh0 +JHNjcmlwdDpVcGRhdGVMYXN0Q2hlY2tVdGMgPSBbZGF0ZXRpbWVdOjpNaW5WYWx1ZQ0KIyBCYXNp +cy1VUkwgZGVzIERpc3QtUmVwb3MgKG9lZmZlbnRsaWNoZXMgR2l0ZWEgaGludGVyIGRlbSBQcm94 +eSkuDQokc2NyaXB0OlVwZGF0ZUJhc2UgPSAnaHR0cHM6Ly91cGRhdGVzLnJoaW5vLm5ydy9yaGlu +by9TdGF0dXNRdW9fVXBkYXRlcy9yYXcvYnJhbmNoL21haW4vVkkzREdMJw0KIyBJbi1BcHAtVXBk +YXRlLUpvYiAoSHlicmlkKTogL2FwaS91cGRhdGUvc3RhcnQgc3RhcnRldCBkZW4gZXh0ZXJuZW4g +dXBkYXRlLmJhdC0NCiMgTGF1ZiBhdXMgZGVyIEtBTk9OSVNDSEVOIFF1ZWxsZSAoQXNzZXRGYWxs +YmFjay9TaGFyZSkuIERlciBsYXVmZW5kZSBTZXJ2ZXINCiMgYmVkaWVudCB3ZWl0ZXJoaW4gZGVu +IGFsdGVuIGxva2FsZW4gQ29kZS1DYWNoZSAoUm9vdCA9IGFzc2V0c188dHM+KSAtPiBuYWNoDQoj +IGVyZm9sZ3JlaWNoZW0gdXBkYXRlLmJhdCBpc3QgZWluIFNlcnZlci1ORVVTVEFSVCBub2V0aWcu +IERlc2hhbGIgc3BpZWdlbG4gd2lyDQojIGhpZXIga2VpbmVuIEluLVByb2Nlc3MtQXBwbHktRm9y +dHNjaHJpdHQsIHNvbmRlcm4gZGVuIFN0YXJ0LVp1c3RhbmQuDQokc2NyaXB0OlVwZGF0ZUpvYiA9 +IFtvcmRlcmVkXUB7DQogICAgc3RhdGUgPSAnaWRsZSc7IHBlcmNlbnQgPSAwOyBzdGVwID0gJ2lk +bGUnOyBtZXNzYWdlID0gJyc7IGVycm9yID0gJycNCiAgICBmcm9tVmVyc2lvbiA9ICcnOyB0b1Zl +cnNpb24gPSAnJzsgc2VsZnRlc3QgPSBAKCk7IGxvZyA9IEAoKQ0KfQ0KDQojIEJlaG9lcmRlbi1Q +cm94eSB2ZXJsYW5ndCBBdXRoZW50aWZpemllcnVuZyAtPiBvaG5lIG1pdGdlc2NoaWNrdGUgV2lu +ZG93cy0NCiMgQ3JlZGVudGlhbHMgYW50d29ydGV0IGVyIG1pdCAoNDA3KSBQcm94eWF1dGhlbnRp +Zml6aWVydW5nIGVyZm9yZGVybGljaCwgdW5kDQojIEpFREVSIGF1c2dlaGVuZGUgSFRUUFMtUmVx +dWVzdCAoVXBkYXRlLUNoZWNrLCBzcGFldGVyIFVwZGF0ZS1Eb3dubG9hZCkNCiMgc2NoZWl0ZXJ0 +LiBEZW0gU3lzdGVtLVByb3h5IGVpbm1hbGlnIGRpZSBhbmdlbWVsZGV0ZW4gRG9tYWVuZW4tQ3Jl +ZGVudGlhbHMNCiMgKE5lZ290aWF0ZS9OVExNIGRlcyBsYXVmZW5kZW4gQmVudXR6ZXJzKSBtaXRn +ZWJlbi4gV2lya3QgZ2xvYmFsIGZ1ZXINCiMgSW52b2tlLVdlYlJlcXVlc3QvV2ViQ2xpZW50IHVl +YmVyIERlZmF1bHRXZWJQcm94eS4NCnRyeSB7DQogICAgJHN5c1Byb3h5ID0gW1N5c3RlbS5OZXQu +V2ViUmVxdWVzdF06OkdldFN5c3RlbVdlYlByb3h5KCkNCiAgICBpZiAoJHN5c1Byb3h5KSB7DQog +ICAgICAgICRzeXNQcm94eS5DcmVkZW50aWFscyA9IFtTeXN0ZW0uTmV0LkNyZWRlbnRpYWxDYWNo +ZV06OkRlZmF1bHROZXR3b3JrQ3JlZGVudGlhbHMNCiAgICAgICAgW1N5c3RlbS5OZXQuV2ViUmVx +dWVzdF06OkRlZmF1bHRXZWJQcm94eSA9ICRzeXNQcm94eQ0KICAgICAgICBMb2ctQXBpICdQUk9Y +WTogU3lzdGVtLVByb3h5IG1pdCBhbmdlbWVsZGV0ZW4gV2luZG93cy1DcmVkZW50aWFscyBrb25m +aWd1cmllcnQuJw0KICAgIH0NCn0gY2F0Y2ggew0KICAgIExvZy1BcGkgKCdQUk9YWS1TRVRVUCBG +RUhMRVIgKFVwZGF0ZS1DaGVjayBldnRsLiBvaG5lIFByb3h5LUF1dGgpOiB7MH0nIC1mICRfLkV4 +Y2VwdGlvbi5NZXNzYWdlKQ0KfQ0KDQpmdW5jdGlvbiBSZWZyZXNoLVVwZGF0ZUNoZWNrIHsNCiAg +ICBpZiAoKFtkYXRldGltZV06OlV0Y05vdyAtICRzY3JpcHQ6VXBkYXRlTGFzdENoZWNrVXRjKS5U +b3RhbE1pbnV0ZXMgLWx0IDYwKSB7IHJldHVybiB9DQogICAgJHNjcmlwdDpVcGRhdGVMYXN0Q2hl +Y2tVdGMgPSBbZGF0ZXRpbWVdOjpVdGNOb3cNCiAgICAkbG9jYWxWZXIgPSAnMC4wLjAnDQogICAg +JF92ZiA9IEpvaW4tUGF0aCAkUm9vdCAnVkVSU0lPTicNCiAgICBpZiAoVGVzdC1QYXRoIC1MaXRl +cmFsUGF0aCAkX3ZmKSB7ICRsb2NhbFZlciA9IChHZXQtQ29udGVudCAtTGl0ZXJhbFBhdGggJF92 +ZiAtUmF3KS5UcmltKCkgfQ0KICAgIHRyeSB7DQogICAgICAgICMgUHJveHktQXV0aCBsYWV1ZnQg +dWViZXIgZGllIG9iZW4gZ2xvYmFsIGdlc2V0enRlbiBEZWZhdWx0V2ViUHJveHktDQogICAgICAg +ICMgQ3JlZGVudGlhbHMuIFRpbWVvdXRTZWMgZ3Jvc3N6dWVnaWdlciAoOCBzdGF0dCAzIHMpLCB3 +ZWlsIGRlciBOVExNLQ0KICAgICAgICAjIEhhbmRzaGFrZSBkdXJjaCBkZW4gUHJveHkgbGFlbmdl +ciBkYXVlcm4ga2Fubi4NCiAgICAgICAgJHJ2ID0gKEludm9rZS1XZWJSZXF1ZXN0IC1VcmkgKCRz +Y3JpcHQ6VXBkYXRlQmFzZSArICcvVkVSU0lPTicpIGANCiAgICAgICAgICAgICAgIC1Vc2VCYXNp +Y1BhcnNpbmcgLVRpbWVvdXRTZWMgOCAtRXJyb3JBY3Rpb24gU3RvcCkuQ29udGVudC5UcmltKCkN +CiAgICAgICAgJHNjcmlwdDpSZW1vdGVWZXJzaW9uICAgPSAkcnYNCiAgICAgICAgJHNjcmlwdDpV +cGRhdGVBdmFpbGFibGUgPSAoW1N5c3RlbS5WZXJzaW9uXSRydiAtZ3QgW1N5c3RlbS5WZXJzaW9u +XSRsb2NhbFZlcikNCiAgICAgICAgTG9nLUFwaSAoIlVQREFURS1DSEVDSzogbG9rYWw9JGxvY2Fs +VmVyIHJlbW90ZT0kcnYgYXZhaWxhYmxlPSQoJHNjcmlwdDpVcGRhdGVBdmFpbGFibGUpIikNCiAg +ICB9IGNhdGNoIHsNCiAgICAgICAgTG9nLUFwaSAoIlVQREFURS1DSEVDSzogbmljaHQgZXJyZWlj +aGJhciAoJCgkXy5FeGNlcHRpb24uTWVzc2FnZSkpIikNCiAgICB9DQp9DQpSZWZyZXNoLVVwZGF0 +ZUNoZWNrDQoNCiMgTG9rYWxlIFZFUlNJT04gbGVzZW4gKGF1cyBkZW0gbGF1ZmVuZGVuIENvZGUt +Q2FjaGUgPSAkUm9vdCkuDQpmdW5jdGlvbiBHZXQtTG9rYWxlVmVyc2lvbiB7DQogICAgJHZmID0g +Sm9pbi1QYXRoICRSb290ICdWRVJTSU9OJw0KICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRo +ICR2ZikgeyByZXR1cm4gKEdldC1Db250ZW50IC1MaXRlcmFsUGF0aCAkdmYgLVJhdykuVHJpbSgp +IH0NCiAgICByZXR1cm4gJzAuMC4wJw0KfQ0KDQojIENoYW5nZWxvZyBmdWVyIGRlbiBVcGRhdGUt +QmVyZWljaDogYmV2b3J6dWd0IENIQU5HRUxPRy5tZCBhdXMgZGVtIERpc3QtUmVwbywNCiMgc29u +c3QgZGllIERhdGVpbGlzdGUgYXVzIE1BTklGRVNULnR4dC4gU3BpZWdlbHQgX3VfZmV0Y2hfY2hh +bmdlbG9nIChQeXRob24pLg0KZnVuY3Rpb24gR2V0LVVwZGF0ZUNoYW5nZWxvZygkbG9jYWxWLCAk +cmVtb3RlVikgew0KICAgIHRyeSB7DQogICAgICAgICRtZCA9IChJbnZva2UtV2ViUmVxdWVzdCAt +VXJpICgkc2NyaXB0OlVwZGF0ZUJhc2UgKyAnL0NIQU5HRUxPRy5tZCcpIGANCiAgICAgICAgICAg +ICAgIC1Vc2VCYXNpY1BhcnNpbmcgLVRpbWVvdXRTZWMgOCAtRXJyb3JBY3Rpb24gU3RvcCkuQ29u +dGVudA0KICAgICAgICBpZiAoJG1kIC1hbmQgJG1kLlRyaW0oKS5MZW5ndGggLWd0IDApIHsNCiAg +ICAgICAgICAgIHJldHVybiBAeyBmb3JtYXQgPSAnbWFya2Rvd24nOyB0ZXh0ID0gJG1kIH0NCiAg +ICAgICAgfQ0KICAgIH0gY2F0Y2gge30NCiAgICB0cnkgew0KICAgICAgICAkbWFuID0gKEludm9r +ZS1XZWJSZXF1ZXN0IC1VcmkgKCRzY3JpcHQ6VXBkYXRlQmFzZSArICcvTUFOSUZFU1QudHh0Jykg +YA0KICAgICAgICAgICAgICAgIC1Vc2VCYXNpY1BhcnNpbmcgLVRpbWVvdXRTZWMgOCAtRXJyb3JB +Y3Rpb24gU3RvcCkuQ29udGVudA0KICAgICAgICAkZmlsZXMgPSBAKCRtYW4gLXNwbGl0ICJgbiIg +fCBGb3JFYWNoLU9iamVjdCB7DQogICAgICAgICAgICAkcGFydHMgPSAkXyAtc3BsaXQgImB0Ig0K +ICAgICAgICAgICAgaWYgKCRwYXJ0cy5Db3VudCAtZ2UgMikgeyAkcGFydHNbMV0uVHJpbSgpIH0N +CiAgICAgICAgfSB8IFdoZXJlLU9iamVjdCB7ICRfIH0gfCBTb3J0LU9iamVjdCAtVW5pcXVlKQ0K +ICAgICAgICByZXR1cm4gQHsgZm9ybWF0ID0gJ2ZpbGVzJzsgZmlsZXMgPSAkZmlsZXMNCiAgICAg +ICAgICAgICAgICAgIHRleHQgPSAoJ1ZlcnNpb24gezB9IC0+IHsxfSAtIHsyfSBEYXRlaWVuIHdl +cmRlbiBha3R1YWxpc2llcnQuJyAtZiAkbG9jYWxWLCAkcmVtb3RlViwgJGZpbGVzLkNvdW50KSB9 +DQogICAgfSBjYXRjaCB7DQogICAgICAgIHJldHVybiBAeyBmb3JtYXQgPSAndGV4dCc7IHRleHQg +PSAoJ1ZlcnNpb24gezB9IC0+IHsxfScgLWYgJGxvY2FsViwgJHJlbW90ZVYpIH0NCiAgICB9DQp9 +DQoNCiMgS2Fub25pc2NoZSBDb2RlLVF1ZWxsZSAod28gdXBkYXRlLmJhdCBsaWVndCB1bmQgcGVy +c2lzdGVudCBha3R1YWxpc2llcnQgd2lyZCk6DQojIEFzc2V0RmFsbGJhY2sgKFNoYXJlKSB3ZW5u +IGdlc2V0enQsIHNvbnN0IFJvb3QuIERlciBsYXVmZW5kZSBTZXJ2ZXItQ29kZSBpbQ0KIyBsb2th +bGVuIENhY2hlICgkUm9vdCkgaXN0IE5JQ0hUIGRpZSByaWNodGlnZSBTdGVsbGUgLT4gd3VlcmRl +IGJlaW0gbmFlY2hzdGVuDQojIGRnbC5iYXQtU3RhcnQgdWViZXJzY2hyaWViZW4uDQpmdW5jdGlv +biBHZXQtVXBkYXRlUXVlbGxlIHsNCiAgICBpZiAoJHNjcmlwdDpBc3NldEZhbGxiYWNrKSB7IHJl +dHVybiAkc2NyaXB0OkFzc2V0RmFsbGJhY2sgfQ0KICAgIHJldHVybiAkUm9vdA0KfQ0KDQojIElu +aXRpYWwtU25hcHNob3QgZGVyIE9mZmxpbmUtV29jaGVucGxhbi5odG1sIGJlaW0gU3RhcnQgcmVn +ZW5lcmllcmVuDQojIChhdWNoIHdlbm4gc2VpdCBkZW0gbGV0enRlbiBMYXVmIG5pY2h0cyBnZWFl +bmRlcnQgd3VyZGUsIGhhdCBzaWNoIHouQi4NCiMgZGFzIERhdHVtIHZlcnNjaG9iZW4gdW5kIGRl +ciBIZXV0ZS1NYXJrZXIgemVpZ3Qgc29uc3QgZGllIGFsdGUgV29jaGUpLg0KdHJ5IHsgR2VuZXJh +dGUtV29jaGVucGxhblNuYXBzaG90IHwgT3V0LU51bGwgfSBjYXRjaCB7IExvZy1BcGkgKCdTTkFQ +U0hPVCAoaW5pdGlhbCkgRkVITEVSOiB7MH0nIC1mICRfLkV4Y2VwdGlvbi5NZXNzYWdlKSB9DQoN +CiMgLS0tIFNlcnZlciBzdGFydGVuIC0tLQ0KJExpc3RlbmVyID0gTmV3LU9iamVjdCBTeXN0ZW0u +TmV0Lkh0dHBMaXN0ZW5lcg0KJExpc3RlbmVyLlByZWZpeGVzLkFkZCgiaHR0cDovL2xvY2FsaG9z +dDokUG9ydC8iKQ0KdHJ5IHsNCiAgICAkTGlzdGVuZXIuU3RhcnQoKQ0KfSBjYXRjaCB7DQogICAg +V3JpdGUtSG9zdCAoJ0ZFSExFUjogTGlzdGVuZXIgYXVmIFBvcnQgezB9IGthbm4gbmljaHQgc3Rh +cnRlbi4nIC1mICRQb3J0KSAtRm9yZWdyb3VuZENvbG9yIFJlZA0KICAgIFdyaXRlLUhvc3QgJF8N +CiAgICBMb2ctQXBpICgnTElTVEVORVIgRkVITEVSOiB7MH0nIC1mICRfLkV4Y2VwdGlvbi5NZXNz +YWdlKQ0KICAgIFN0YXJ0LVNsZWVwIC1TZWNvbmRzIDUNCiAgICBleGl0IDENCn0NCg0KV3JpdGUt +SG9zdCAoJ1ZJMyBER0wtUGxhbnVuZyBhdWYgaHR0cDovL2xvY2FsaG9zdDp7MH0nIC1mICRQb3J0 +KQ0KV3JpdGUtSG9zdCAoJ1Jvb3Q6ICAgIHswfScgLWYgJFJvb3QpDQpXcml0ZS1Ib3N0ICgnRGF0 +YURpcjogezB9JyAtZiAkRGF0YURpcikNCldyaXRlLUhvc3QgKCdMb2c6ICAgICB7MH0nIC1mICRz +Y3JpcHQ6QXBpTG9nKQ0KDQojIC0tLSBIZWFydGJlYXQtV2F0Y2hkb2cgLS0tDQokV2F0Y2hkb2dU +aW1lciA9IE5ldy1PYmplY3QgU3lzdGVtLlRpbWVycy5UaW1lcg0KJFdhdGNoZG9nVGltZXIuSW50 +ZXJ2YWwgPSA1MDAwDQokV2F0Y2hkb2dUaW1lci5BdXRvUmVzZXQgPSAkdHJ1ZQ0KUmVnaXN0ZXIt +T2JqZWN0RXZlbnQgLUlucHV0T2JqZWN0ICRXYXRjaGRvZ1RpbWVyIC1FdmVudE5hbWUgRWxhcHNl +ZCAtQWN0aW9uIHsNCiAgICAkZWxhcHNlZCA9IChHZXQtRGF0ZSkgLSAkc2NyaXB0Okxhc3RIZWFy +dGJlYXQNCiAgICBpZiAoJGVsYXBzZWQuVG90YWxTZWNvbmRzIC1ndCAzMCkgew0KICAgICAgICBp +ZiAoLW5vdCAkc2NyaXB0OlNodXRkb3duUGVuZGluZykgew0KICAgICAgICAgICAgJHNjcmlwdDpT +aHV0ZG93blBlbmRpbmcgPSAkdHJ1ZQ0KICAgICAgICB9IGVsc2VpZiAoJGVsYXBzZWQuVG90YWxT +ZWNvbmRzIC1ndCAzNSkgew0KICAgICAgICAgICAgJExpc3RlbmVyLlN0b3AoKQ0KICAgICAgICAg +ICAgW0Vudmlyb25tZW50XTo6RXhpdCgwKQ0KICAgICAgICB9DQogICAgfQ0KfSB8IE91dC1OdWxs +DQokV2F0Y2hkb2dUaW1lci5TdGFydCgpDQoNCiMgLS0tIFJlcXVlc3QtTG9vcCAtLS0NCnRyeSB7 +DQogICAgd2hpbGUgKCRMaXN0ZW5lci5Jc0xpc3RlbmluZykgew0KICAgICAgICAkQXN5bmNSZXN1 +bHQgPSAkTGlzdGVuZXIuQmVnaW5HZXRDb250ZXh0KCRudWxsLCAkbnVsbCkNCiAgICAgICAgd2hp +bGUgKC1ub3QgJEFzeW5jUmVzdWx0LkFzeW5jV2FpdEhhbmRsZS5XYWl0T25lKDEwMDApKSB7IH0N +CiAgICAgICAgJENvbnRleHQgPSAkTGlzdGVuZXIuRW5kR2V0Q29udGV4dCgkQXN5bmNSZXN1bHQp +DQogICAgICAgICRSZXF1ZXN0ID0gJENvbnRleHQuUmVxdWVzdA0KICAgICAgICAkUmVzcG9uc2Ug +PSAkQ29udGV4dC5SZXNwb25zZQ0KICAgICAgICAkTWV0aG9kID0gJFJlcXVlc3QuSHR0cE1ldGhv +ZA0KICAgICAgICAkUGF0aCA9ICRSZXF1ZXN0LlVybC5BYnNvbHV0ZVBhdGgNCiAgICAgICAgTG9n +LUFwaSAoJ1JFUSB7MH0gezF9JyAtZiAkTWV0aG9kLCAkUGF0aCkNCg0KICAgICAgICB0cnkgew0K +ICAgICAgICAgICAgIyA9PT09PSBDT1JTIFByZWZsaWdodCA9PT09PQ0KICAgICAgICAgICAgaWYg +KCRNZXRob2QgLWVxICdPUFRJT05TJykgew0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5TdGF0 +dXNDb2RlID0gMjA0DQogICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9u +c2UNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLkNsb3NlKCkNCiAgICAg +ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09 +IFNZU1RFTSA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9oZWFydGJlYXQn +IC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgIyBPcmlnaW4tQ2hl +Y2sgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1Ob3RicmVtc2UgMjAyNi0wNS0yOCk6DQogICAg +ICAgICAgICAgICAgIyBIZWFydGJlYXQgYWt6ZXB0aWVydCBudXIgUmVxdWVzdHMgdm9uIGRlciBl +aWdlbmVuIEFwcC4gQW5kZXJlDQogICAgICAgICAgICAgICAgIyBsb2thbGUgUHJvemVzc2Uga29l +bm50ZW4gc29uc3QgcGVyIExvb3AgZGllIEF1dG8tU2h1dGRvd24tTG9naWsNCiAgICAgICAgICAg +ICAgICAjIHVtZ2VoZW4gb2RlciBkZW4gU2VydmVyIGJld3Vzc3QgYW0gTGViZW4gaGFsdGVuLiBC +cm93c2VyIHNlbmRldA0KICAgICAgICAgICAgICAgICMgT3JpZ2luIGF1dG9tYXRpc2NoOyBmZWhs +ZW5kZXIgSGVhZGVyIHdpcmQgdG9sZXJpZXJlbiAoc2VuZEJlYWNvbg0KICAgICAgICAgICAgICAg +ICMgaW4gbWFuY2hlbiBCcm93c2VybiksIGFiZXIgRkFMU0NIRVIgT3JpZ2luIHdpcmQgYWJnZWxl +aG50Lg0KICAgICAgICAgICAgICAgICRvcmlnaW4gPSAkUmVxdWVzdC5IZWFkZXJzWydPcmlnaW4n +XQ0KICAgICAgICAgICAgICAgIGlmICgkb3JpZ2luIC1hbmQgJG9yaWdpbiAtbmUgJHNjcmlwdDpD +b3JzT3JpZ2luKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdP +cmlnaW4gbmljaHQgZXJsYXVidCcgNDAzDQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdI +RUFSVEJFQVQgNDAzIE9yaWdpbj17MH0nIC1mICRvcmlnaW4pDQogICAgICAgICAgICAgICAgICAg +IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6TGFz +dEhlYXJ0YmVhdCA9IEdldC1EYXRlDQogICAgICAgICAgICAgICAgJHNjcmlwdDpTaHV0ZG93blBl +bmRpbmcgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAjIGFkbWluVmVyc2lvbiAvIHBsYW51bmdW +ZXJzaW9uOiBtdGltZSBhbHMgVGlja3MuIEVybGF1YnQgZGVtDQogICAgICAgICAgICAgICAgIyBD +bGllbnQsIFJlY2h0ZS0gYnp3LiBQZXJzb25lbi1BZW5kZXJ1bmdlbiBpbSBIaW50ZXJncnVuZCB6 +dQ0KICAgICAgICAgICAgICAgICMgZXJrZW5uZW4gdW5kIFoucmVjaHRlL1oucGxhbnVuZyBuZXUg +enUgbGFkZW4sIG9obmUgZGFzcyBkZXINCiAgICAgICAgICAgICAgICAjIFVzZXIgRjUgZHJ1ZWNr +ZW4gbXVzcy4gcGxhbnVuZ1ZlcnNpb24gZGVja3QgaW5zYmVzb25kZXJlDQogICAgICAgICAgICAg +ICAgIyBlZGl0UmVjaHRlL3NlaGVuLVVwZGF0ZXMgYWIsIGRpZSBkZXIgTGl2ZS1TeW5jLURlbHRh +IG5pY2h0DQogICAgICAgICAgICAgICAgIyBsaWVmZXJ0IChDaGVycnktUGljayAxYWVmZTI2IEJ1 +ZyAjMykuDQogICAgICAgICAgICAgICAgJGFkbWluVmVyICAgPSAwDQogICAgICAgICAgICAgICAg +JHBsYW51bmdWZXIgPSAwDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAg +ICAgJGFkbWluRmlsZSA9IEpvaW4tUGF0aCAkRGF0YURpciAnYWRtaW4uanNvbicNCiAgICAgICAg +ICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGFkbWluRmlsZSkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgJGFkbWluVmVyID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAk +YWRtaW5GaWxlKS5MYXN0V3JpdGVUaW1lVXRjLlRpY2tzDQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgJHBsYW51bmdGaWxlID0gSm9pbi1QYXRoICREYXRhRGlyICdw +bGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQ +YXRoICRwbGFudW5nRmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmdWZXIg +PSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRwbGFudW5nRmlsZSkuTGFzdFdyaXRlVGltZVV0Yy5U +aWNrcw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7fQ0K +ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ29r +JzsgYWRtaW5WZXJzaW9uID0gJGFkbWluVmVyOyBwbGFudW5nVmVyc2lvbiA9ICRwbGFudW5nVmVy IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -aWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAg -ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdhZG1pbmlzdHJhdGlvbicp -KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2Ug -enUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5 -IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgIGlmICgkZGF0ZW4uUFNPYmplY3Qu -UHJvcGVydGllc1snYWRtaW5LZW5udW5nZW4nXSkgeyAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGll -cy5SZW1vdmUoJ2FkbWluS2VubnVuZ2VuJykgfQ0KICAgICAgICAgICAgICAgICMgUFMtNS4xLVVu -d3JhcC1TY2h1dHo6IGFsbGUgTGlzdGVuLUZlbGRlciwgZGllIGRlciBDbGllbnQgdW50ZXINCiAg -ICAgICAgICAgICAgICAjIEFETUlOX0xJU1RfRkVMREVSIGZ1ZWhydCwgc2VydmVyLXNlaXRpZyBh -bHMgQXJyYXlzIGVyendpbmdlbi4NCiAgICAgICAgICAgICAgICAjIFNvbnN0IHdlcmRlbiBMaXN0 -ZW4gbWl0IG51ciBlaW5lbSBFbGVtZW50IHZvbSBQb3dlclNoZWxsLUpTT04tDQogICAgICAgICAg -ICAgICAgIyBSb3VuZHRyaXAgenVtIEVpbnplbC1PYmpla3QgZW50cGFja3QgdW5kIGNsaWVudC1z -ZWl0aWcga29tbXQNCiAgICAgICAgICAgICAgICAjIGFkbWluTGlzdGVuTm9ybWFsaXNpZXJlbiBn -Z2YuIHp1IHNwYWV0ICh6LkIuIG5hY2ggSG90LVJlbG9hZCkuDQogICAgICAgICAgICAgICAgTm9y -bWFsaXNpZXJlLUFkbWluTGlzdGVuICRkYXRlbg0KICAgICAgICAgICAgICAgICMgU2VydmVyLXNl -aXRpZ2UgUmljaC1UZXh0LVNhbml0aXNpZXJ1bmcgKFN0b3JlZC1YU1MtU2NodXR6KS4NCiAgICAg -ICAgICAgICAgICBJbnZva2UtQWRtaW5SaWNodGV4dFNhbml0aXplICRkYXRlbg0KICAgICAgICAg -ICAgICAgICRpc3RTVSA9IFRlc3QtSXN0U3VwZXJVc2VyDQogICAgICAgICAgICAgICAgJGxvY2tF -cmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAg -ICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICMgTnVyIFN1cGVyVXNlciBkYXJmIGRpZSBSb2xsZW4tTGlz -dGVuIHN1cGVyVXNlci9mYWNoYXVmc2ljaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICMgdWVi -ZXIgL2FwaS9hZG1pbiBhZW5kZXJuIOKAlCBzb25zdCBrb2VubnRlIGplbWFuZCBzaWNoIHNlbGJz -dA0KICAgICAgICAgICAgICAgICAgICAgICAgIyB6dW0gU3VwZXJVc2VyIGJlZm9lcmRlcm4gdW5k -IGRhbWl0IGRpZSBzZXBhcmF0ZW4gR3VhcmRzIGF1Zg0KICAgICAgICAgICAgICAgICAgICAgICAg -IyAvYXBpL2FkbWluL3N1cGVydXNlciBiencuIC9hcGkvYWRtaW4vZmFjaGF1ZnNpY2h0IHVtZ2Vo -ZW4uDQogICAgICAgICAgICAgICAgICAgICAgICAjIGFkbWluS2VubnVuZ2VuIGlzdCBnZW5lcmVs -bCBhYmdlc2NoYWZmdCB1bmQgd2lyZCBlbnRmZXJudC4NCiAgICAgICAgICAgICAgICAgICAgICAg -ICMgUmVhZCBkZXIgYWx0ZW4gV2VydGUgbXVzcyBJTk5FUkhBTEIgZGVzIExvY2tzIHBhc3NpZXJl -biwNCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGFtaXQgZGllIFNVL0ZhY2hhdWZzaWNodC1M -aXN0ZW4gYXRvbWFyIGVyaGFsdGVuIGJsZWliZW4uDQogICAgICAgICAgICAgICAgICAgICAgICAk -YWx0ID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKC1ub3QgJGlzdFNVKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFj -aCAoJGZlbGQgaW4gJ3N1cGVyVXNlcicsJ2ZhY2hhdWZzaWNodCcsJ2RpcmVrdGlvbnNsZWl0dW5n -JywnZnVlaHJ1bmdzc3RlbGxlJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoJGFsdCAtYW5kICRhbHQuUFNPYmplY3QuUHJvcGVydGllc1skZmVsZF0pIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGll -c1skZmVsZF0pIHsgJGRhdGVuLiRmZWxkID0gJGFsdC4kZmVsZCB9DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGRhdGVuIHwgQWRkLU1lbWJlciAtTm90ZVByb3Bl -cnR5TmFtZSAkZmVsZCAtTm90ZVByb3BlcnR5VmFsdWUgJGFsdC4kZmVsZCAtRm9yY2UgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGRhdGVuLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJGZlbGRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk -ZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJGZlbGQpDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIEtleS1Vbmlvbjog -bmljaHQgbWl0Z2VzZW5kZXRlIFRvcC1MZXZlbC1LZXlzIGVyaGFsdGVuLg0KICAgICAgICAgICAg -ICAgICAgICAgICAgW3ZvaWRdKE1lcmdlLUFkbWluS2V5cyAkYWx0ICRkYXRlbikNCiAgICAgICAg -ICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRkYXRlbiB8IE91 -dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQog -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAg -ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7 -IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRs -b2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cg -JGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1M -b2dFaW50cmFnICdhZG1pbi5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv -bk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBTdXBlci1Vc2Vy -LUxpc3RlOiBudXIgU3VwZXJVc2VyIGRhcmYgU3VwZXJVc2VyIHZlcndhbHRlbg0KICAgICAgICAg -ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9zdXBlcnVzZXInIC1hbmQgJE1ldGhvZCAtZXEg -J1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7 -IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gU3VwZXJVc2VyIHZl -cndhbHRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJv -ZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9y -ICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgIyBAKC4uLikgZXJ6d2luZ3QgQXJyYXkgYXVjaCBiZWkgMSBFbGVtZW50IChQUyA1LjEg -ZW50cGFja3Qgc29uc3QgenUgRWluemVsLU9iamVrdCwNCiAgICAgICAgICAgICAgICAjIGRhbm4g -d2lyZCBkaWUgTGlzdGUgaW4gYWRtaW4uanNvbiB6dW0gT2JqZWt0IGRlZ2VuZXJpZXJ0IC0+IENs -aWVudC1GZWhsZXIpLg0KICAgICAgICAgICAgICAgICRib2R5T2JqID0gJGJvZHkgfCBDb252ZXJ0 -RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdGVuID0gW29iamVjdFtdXUAoJGJvZHlPYmop -DQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAg -dHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmls -ZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJl -YWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -bnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBt -c2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgJHdpcGVNc2cgPSBUZXN0LVdpcGVTY2h1dHogJ3N1cGVyVXNlcicgJGRhdGVuICRhZG1pbiAk -UmVxdWVzdCAkYm9keU9iag0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR3aXBlTXNnKSB7 -IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNDA5OyBtc2cgPSAkd2lwZU1zZyB9IH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZSBMaXN0ZSB2b3IgZGVtIE92ZXJ3cml0ZSBz -bmFwc2hvdHRlbiDigJQgd2lyIGJyYXVjaGVuDQogICAgICAgICAgICAgICAgICAgICAgICAjIHNp -ZSBuYWNoIGRlbSBMb2NrIGZ1ZXIgZGllIERpZmYtQmVyZWNobnVuZyAobWFpbHRvIGJlaQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgIyBTVSByZWluL3JhdXMpLg0KICAgICAgICAgICAgICAgICAg -ICAgICAgJGFsdFNVID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBT -T2JqZWN0LlByb3BlcnRpZXNbJ3N1cGVyVXNlciddKSB7ICRhbHRTVSA9IFtvYmplY3RbXV1AKCRh -ZG1pbi5zdXBlclVzZXIpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShCYWNrdXAt -QWRtaW5Kc29uICdzdXBlclVzZXInKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1p -bi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdXBlclVzZXInXSkgeyAkYWRtaW4uc3VwZXJVc2VyID0g -JGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVt -YmVyIC1Ob3RlUHJvcGVydHlOYW1lICdzdXBlclVzZXInIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0 -ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2Fk -bWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1 -cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0ID0gJGFsdFNVIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9y -ICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5k -LUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsg -Y29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgRGlmZiBhbHQvbmV1IG5hY2ggbndLZW5udW5n -LiBTVS1SZWluL1JhdXMgbG9lc3QgbWFpbHRvIHZpYSBDbGllbnQgYXVzDQogICAgICAgICAgICAg -ICAgIyAoVmVyYW50d29ydHVuZ3MtVWViZXJnYW5nIFZvcmxhZ2UgJ3JvbGxlX3ZlcmFudHdvcnR1 -bmcnKS4NCiAgICAgICAgICAgICAgICAkbWFpbHRvRGlmZnMgPSBHZXQtUm9sbGVEaWZmcyAkbG9j -a0VyZ2VibmlzLmFsdCAkZGF0ZW4gJ1N1cGVyVXNlcicgJGZhbHNlDQogICAgICAgICAgICAgICAg -IyBhbnphaGwgbWl0Z2ViZW4g4oCUIGRlciBMb2didWNoLUNsaWVudCBsaWVzdCBlLmFuemFobDsg -b2huZSBkYXMNCiAgICAgICAgICAgICAgICAjIEZlbGQgYmxpZWIgZGllIERldGFpbC1TcGFsdGUg -YmVpIFNVLUxpc3RlbmFlbmRlcnVuZ2VuIGxlZXINCiAgICAgICAgICAgICAgICAjIChmYWNoYXVm -c2ljaHQuZ2VhZW5kZXJ0IHVudGVuIG1hY2h0IGVzIGdlbmF1c28pLg0KICAgICAgICAgICAgICAg -IFdyaXRlLUxvZ0VpbnRyYWcgJ3N1cGVyVXNlci5nZWFlbmRlcnQnIEB7IGFuemFobCA9ICRkYXRl -bi5Db3VudDsgZGlmZnMgPSAkbWFpbHRvRGlmZnMuQ291bnQgfQ0KICAgICAgICAgICAgICAgICRy -ZXNwID0gQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgaWYgKCRt -YWlsdG9EaWZmcy5Db3VudCAtZ3QgMCkgew0KICAgICAgICAgICAgICAgICAgICAjIFBTLTUuMS1V -bndyYXAtU2NodXR6OiBAKCR4KSBlcnp3aW5ndCBBcnJheSBhdWNoIGJlaSAxIEVsZW1lbnQuDQog -ICAgICAgICAgICAgICAgICAgICRyZXNwWydfYnJhdWNodF9tYWlsdG8nXSA9IFtvcmRlcmVkXUB7 -IHRyaWdnZXIgPSAncm9sbGVfdmVyYW50d29ydHVuZyc7IGRpZmZzID0gW29iamVjdFtdXUAoJG1h -aWx0b0RpZmZzKSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv -bk9iamVjdCAkUmVzcG9uc2UgJHJlc3ANCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg -ICAgICAgfQ0KDQogICAgICAgICAgICAjIEZhY2hhdWZzaWNodC1MaXN0ZTogbnVyIFN1cGVyVXNl -ciBkYXJmIEZhY2hhdWZzaWNodCB2ZXJ3YWx0ZW4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvYWRtaW4vZmFjaGF1ZnNpY2h0JyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAg -ICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRS -ZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIEZhY2hhdWZzaWNodCB2ZXJ3YWx0ZW4nIDQw -MzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -J0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5 -T2JqID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdGVuID0g -W29iamVjdFtdXUAoJGJvZHlPYmopDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRu -dWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdl -Ym5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRm -YWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgJHdpcGVNc2cgPSBUZXN0LVdpcGVTY2h1dHogJ2ZhY2hh -dWZzaWNodCcgJGRhdGVuICRhZG1pbiAkUmVxdWVzdCAkYm9keU9iag0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCR3aXBlTXNnKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0g -NDA5OyBtc2cgPSAkd2lwZU1zZyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRhbHRGQSA9 -IEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0 -aWVzWydmYWNoYXVmc2ljaHQnXSkgeyAkYWx0RkEgPSBbb2JqZWN0W11dQCgkYWRtaW4uZmFjaGF1 -ZnNpY2h0KSB9DQogICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0oQmFja3VwLUFkbWluSnNv -biAnZmFjaGF1ZnNpY2h0JykNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNP -YmplY3QuUHJvcGVydGllc1snZmFjaGF1ZnNpY2h0J10pIHsgJGFkbWluLmZhY2hhdWZzaWNodCA9 -ICRkYXRlbiB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1l -bWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZmFjaGF1ZnNpY2h0JyAtTm90ZVByb3BlcnR5VmFsdWUg -JGRhdGVuIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0 -ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAg -cmV0dXJuIEB7IG9rID0gJHRydWU7IGFsdCA9ICRhbHRGQSB9DQogICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F -cnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsg -U2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0 -dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIEZhY2hhdWZzaWNodC1EaWZmOiB0cmVu -bnQgbWFpbHRvLXd1ZXJkaWdlIFZlcmFudHdvcnR1bmdzLQ0KICAgICAgICAgICAgICAgICMgVWVi -ZXJnYWVuZ2UgKEdlc2FtdHZlcmFudHdvcnRsaWNoIHJlaW4vcmF1cykgdm9tIHJlc3RsaWNoZW4N -CiAgICAgICAgICAgICAgICAjIFJvbGxlbi1VcGRhdGVzIChGQSBoaW56dS9yYXVzIG9obmUgR2Vz -YW10LCBvZGVyIFNlaGVuLUZsYWctDQogICAgICAgICAgICAgICAgIyBXZWNoc2VsKS4gRXJzdGUg -ZmxpZcOfZW4gaW4gZGVuIG1haWx0by1UcmlnZ2VyLCBkZXIgUmVzdCB3aXJkDQogICAgICAgICAg -ICAgICAgIyB6dSBJbi1BcHAtSGlud2Vpc2VuLg0KICAgICAgICAgICAgICAgICRmYUF1c3dlcnR1 -bmcgPSBHZXQtRmFjaGF1ZnNpY2h0RGlmZnMgJGxvY2tFcmdlYm5pcy5hbHQgJGRhdGVuDQogICAg -ICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZmFjaGF1ZnNpY2h0LmdlYWVuZGVydCcgQHsg -YW56YWhsID0gJGRhdGVuLkNvdW50OyBtYWlsdG8gPSAkZmFBdXN3ZXJ0dW5nLm1haWx0b0RpZmZz -LkNvdW50OyBoaW53ZWlzZSA9ICRmYUF1c3dlcnR1bmcuaGlud2Vpc0RpZmZzLkNvdW50IH0NCiAg -ICAgICAgICAgICAgICBmb3JlYWNoICgkaCBpbiAkZmFBdXN3ZXJ0dW5nLmhpbndlaXNEaWZmcykg -ew0KICAgICAgICAgICAgICAgICAgICBOZXctSGlud2VpcyAncm9sbGVfZ2VhZW5kZXJ0JyAkaCAo -R2V0LUFrdHVlbGxlckJlbnV0emVyKSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICRyZXNwID0gQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAg -ICAgICAgICAgaWYgKCRmYUF1c3dlcnR1bmcubWFpbHRvRGlmZnMuQ291bnQgLWd0IDApIHsNCiAg -ICAgICAgICAgICAgICAgICAgIyBQUy01LjEtVW53cmFwLVNjaHV0ejogQCgkeCkgZXJ6d2luZ3Qg -QXJyYXkgYXVjaCBiZWkgMSBFbGVtZW50Lg0KICAgICAgICAgICAgICAgICAgICAkcmVzcFsnX2Jy -YXVjaHRfbWFpbHRvJ10gPSBbb3JkZXJlZF1AeyB0cmlnZ2VyID0gJ3JvbGxlX3ZlcmFudHdvcnR1 -bmcnOyBkaWZmcyA9IFtvYmplY3RbXV1AKCRmYUF1c3dlcnR1bmcubWFpbHRvRGlmZnMpIH0NCiAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z -ZSAkcmVzcA0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAg -ICAgICAgICMgRGlyZWt0aW9uc2xlaXR1bmcgKyBGdWVocnVuZ3NzdGVsbGUgKGdsZWljaGVzIFNj -aGVtYSB3aWUNCiAgICAgICAgICAgICMgRmFjaGF1ZnNpY2h0LCBudXIgc2VwYXJhdGUgTGlzdGVu -KS4gQmVpZGUgUm91dGVuIHRlaWxlbiBkaWUNCiAgICAgICAgICAgICMgZ2xlaWNoZSBMb2dpazog -U1Utb25seSBQVVQsIEJhY2t1cCwgU2NocmVpYmVuLCBEaWZmcyB6dQ0KICAgICAgICAgICAgIyBJ -bi1BcHAtSGlud2Vpc2VuIHVtc2V0emVuLg0KICAgICAgICAgICAgaWYgKCgkUGF0aCAtZXEgJy9h -cGkvYWRtaW4vZGlyZWt0aW9uc2xlaXR1bmcnIC1vciAkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZnVl -aHJ1bmdzc3RlbGxlJykgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAg -IGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051 -ciBTdXBlclVzZXIgZHVlcmZlbiBSb2xsZW4gdmVyd2FsdGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAg -ICAgICAgICAgICAgICAkZmVsZE5hbWUgPSBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2RpcmVr -dGlvbnNsZWl0dW5nJykgeyAnZGlyZWt0aW9uc2xlaXR1bmcnIH0gZWxzZSB7ICdmdWVocnVuZ3Nz -dGVsbGUnIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAg -ICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZy -YWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keU9iaiA9 -ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXRlbiA9IFtvYmpl -Y3RbXV1AKCRib2R5T2JqKQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0K -ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMg -PSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7 -IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICRhbHQgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1skZmVsZE5hbWVdKSB7ICRhbHQgPSBbb2JqZWN0 -W11dQCgkYWRtaW4uJGZlbGROYW1lKSB9DQogICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0o -QmFja3VwLUFkbWluSnNvbiAkZmVsZE5hbWUpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -JGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJGZlbGROYW1lXSkgeyAkYWRtaW4uJGZlbGROYW1l -ID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQt -TWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRmZWxkTmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJGRh -dGVuIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdh -ZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0 -dXJuIEB7IG9rID0gJHRydWU7IGFsdCA9ICRhbHQgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAoJGZlbGROYW1lICsg -Jy5nZWFlbmRlcnQnKSBAeyBhbnphaGwgPSAkZGF0ZW4uQ291bnQgfQ0KICAgICAgICAgICAgICAg -IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQog -ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBC -ZXplaWNobnVuZ2VuOiBPYmpla3QgKE1hcCBrZXktPmxhYmVsKS4gTGVlcmVzIE9iamVrdCA9IFJl -c2V0Lg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9iZXplaWNobnVuZ2Vu -JyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl -c3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUn -IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1 -ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRk -YXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRsb2NrRXJn -ZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAg -ICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24n -DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4g -QHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVz -YmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJv -cGVydGllc1snYmV6ZWljaG51bmdlbiddKSB7ICRhZG1pbi5iZXplaWNobnVuZ2VuID0gJGRhdGVu -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1O -b3RlUHJvcGVydHlOYW1lICdiZXplaWNobnVuZ2VuJyAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVu -IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1p -bi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu -IEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -fSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9j -ay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmV6ZWljaG51bmdlbi5nZWFlbmRlcnQnIEB7 -fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0g -J2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0N -Cg0KICAgICAgICAgICAgIyBTdGF0aXN0aWstQmF1a2FzdGVuIChzZWxic3RnZWJhdXRlIEthY2hl -bG4pICsgU3VwZXJVc2VyLUxheW91dC1SYXN0ZXIuDQogICAgICAgICAgICAjIEdhdGUgYmV3dXNz -dCBTVSBPREVSIEdlc2FtdHZlcmFudHdvcnRsaWNoIChuaWNodCBUZXN0LUlzdEFkbWluKSDigJQg -ZGVyDQogICAgICAgICAgICAjIEJ1aWxkZXIgbGVidCBpbSBTdGF0aXN0aWstVGFiIHVuZCBtdXNz -IGF1Y2ggZnVlciBHZXNhbXR2ZXJhbnR3b3J0bGljaGUNCiAgICAgICAgICAgICMgb2huZSBhZG1p -bmlzdHJhdGlvbi1adWdhbmcgc3BlaWNoZXJiYXIgc2Vpbi4gUGFydGlhbC1NZXJnZSBudXIgZGVy -DQogICAgICAgICAgICAjIGJlaWRlbiBiZWthbm50ZW4gS2V5czsgYmVpZGUgYWxzIFtvYmplY3Rb -XV0gendpbmdlbiAoUFMtNS4xLVVud3JhcCkuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcv -YXBpL2FkbWluL3N0YXRpc3RpaycgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAg -ICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgoVGVzdC1J -c3RBZG1pbikgLW9yICRyLmlzdEdlc2FtdHZlcmFudHdvcnRsaWNoKSkgew0KICAgICAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIEFkbWlucyB1bmQgR2VzYW10dmVyYW50 -d29ydGxpY2hlIGR1ZXJmZW4gU3RhdGlzdGlrLUthY2hlbG4gYWVuZGVybicgNDAzOyBjb250aW51 -ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAk -UmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJl -c3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkaGF0 -S2FjaGVsbiA9ICgkbnVsbCAtbmUgJGRhdGVuIC1hbmQgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ3N0YXRpc3Rpa0thY2hlbG4nXSkNCiAgICAgICAgICAgICAgICAkaGF0TGF5b3V0ICA9ICgk -bnVsbCAtbmUgJGRhdGVuIC1hbmQgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXRpc3Rp -a0xheW91dCddKQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAg -ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZv -a2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAk -YWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1 -cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkaGF0S2FjaGVsbikgew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICRrID0gW29iamVjdFtdXUAoJGRhdGVuLnN0YXRpc3Rpa0thY2hlbG4pDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGF0aXN0 -aWtLYWNoZWxuJ10pIHsgJGFkbWluLnN0YXRpc3Rpa0thY2hlbG4gPSAkayB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0 -eU5hbWUgJ3N0YXRpc3Rpa0thY2hlbG4nIC1Ob3RlUHJvcGVydHlWYWx1ZSAkayAtRm9yY2UgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRo -YXRMYXlvdXQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbCA9IFtvYmplY3RbXV1A -KCRkYXRlbi5zdGF0aXN0aWtMYXlvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGF0aXN0aWtMYXlvdXQnXSkgeyAkYWRtaW4u -c3RhdGlzdGlrTGF5b3V0ID0gJGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug -eyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdzdGF0aXN0aWtMYXlvdXQn -IC1Ob3RlUHJvcGVydHlWYWx1ZSAkbCAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicg -JGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9 -ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2gg -ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVy -OiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -aWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0Vy -Z2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAg -ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3N0YXRpc3Rpay5jb25maWcuZ2VhZW5kZXJ0JyBAe30NCiAg -ICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNw -ZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAg -ICAgICAgICAgICMgU3RhbmRhcmRyZWNodGUgKHJlZ3VsYWVyZSBVc2VyKTogZ2VnZW5zZWl0aWdl -IFBsYW51bmcgamUgRGllbnN0Z3J1cHBlLw0KICAgICAgICAgICAgIyBTdGFuZG9ydC4gU1Utb25s -eS4gV2lyZCBpbiBHZXQtUmVjaHRlIGFkZGl0aXYgaW4gZWRpdGllcmVuIGVpbmdld29iZW4uDQog -ICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3N0YW5kYXJkcmVjaHRlJyAtYW5k -ICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0 -U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVu -IFN0YW5kYXJkcmVjaHRlIGFlbmRlcm4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJv -ZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0K -ICAgICAgICAgICAgICAgICRnZyA9IEAoKTsgaWYgKCRkYXRlbiAtYW5kICRkYXRlbi5QU09iamVj -dC5Qcm9wZXJ0aWVzWydnZWdlbnNlaXRpZ0dydXBwZW4nXSkgICB7ICRnZyA9IFtzdHJpbmdbXV1A -KCRkYXRlbi5nZWdlbnNlaXRpZ0dydXBwZW4gICB8IEZvckVhY2gtT2JqZWN0IHsgW3N0cmluZ10k -XyB9KSB9DQogICAgICAgICAgICAgICAgJGdzID0gQCgpOyBpZiAoJGRhdGVuIC1hbmQgJGRhdGVu -LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlZ2Vuc2VpdGlnU3RhbmRvcnRlJ10pIHsgJGdzID0gW3N0 -cmluZ1tdXUAoJGRhdGVuLmdlZ2Vuc2VpdGlnU3RhbmRvcnRlIHwgRm9yRWFjaC1PYmplY3QgeyBb -c3RyaW5nXSRfIH0pIH0NCiAgICAgICAgICAgICAgICAkc3IgPSBAeyBnZWdlbnNlaXRpZ0dydXBw -ZW4gPSAkZ2c7IGdlZ2Vuc2VpdGlnU3RhbmRvcnRlID0gJGdzIH0NCiAgICAgICAgICAgICAgICAk -bG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAg -ICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1p -bi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsg -cmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5p -Y2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ3N0YW5kYXJkUmVjaHRlJ10pIHsgJGFkbWluLnN0YW5kYXJkUmVjaHRl -ID0gJHNyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVt -YmVyIC1Ob3RlUHJvcGVydHlOYW1lICdzdGFuZGFyZFJlY2h0ZScgLU5vdGVQcm9wZXJ0eVZhbHVl -ICRzciAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAn -YWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJl -dHVybiBAeyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAo -IkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNw -b25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3N0YW5kYXJkcmVjaHRlLmdlYWVuZGVy -dCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0 -dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg -ICAgfQ0KDQogICAgICAgICAgICAjIEUtTWFpbC1Wb3JsYWdlbjogT2JqZWt0IChuaWNodCBBcnJh -eSkg4oCUIGVpZ2VuZXIgSGFuZGxlci4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -YWRtaW4vZW1haWx2b3JsYWdlbicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAg -ICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn -S2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9k -eSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7 -IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0N -CiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAg -ICAgICAgICAgICAjIFJpY2gtVGV4dC1Cb2R5IGplIFZvcmxhZ2Ugc2VydmVyc2VpdGlnIGJlcmVp -bmlnZW4gKFN0b3JlZC1YU1MpLg0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJGRhdGVu -KSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRkYXRlbi5QU09iamVjdC5Q -cm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdiA9ICRwLlZhbHVlDQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICR2IC1hbmQgJHYuUFNPYmplY3QuUHJv -cGVydGllc1sndGV4dCddIC1hbmQgKCR2LnRleHQgLWlzIFtzdHJpbmddKSkgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICR2LnRleHQgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICR2LnRl -eHQNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAg -ICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0g -SW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBz -dGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VtYWlsVm9y -bGFnZW4nXSkgeyAkYWRtaW4uZW1haWxWb3JsYWdlbiA9ICRkYXRlbiB9DQogICAgICAgICAgICAg -ICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAn -ZW1haWxWb3JsYWdlbicgLU5vdGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwg +aWYgKCRQYXRoIC1lcSAnL2FwaS9zaHV0ZG93bicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsN +CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdz +aHV0ZG93bicgfQ0KICAgICAgICAgICAgICAgIFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMzAw +DQogICAgICAgICAgICAgICAgJExpc3RlbmVyLlN0b3AoKQ0KICAgICAgICAgICAgICAgIFtFbnZp +cm9ubWVudF06OkV4aXQoMCkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAt +ZXEgJy9hcGkvaW5mbycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAg +IFJlZnJlc2gtVXBkYXRlQ2hlY2sNCiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAg +ICAgICAgICAgICAgICAkaW5mb09iaiA9IEB7DQogICAgICAgICAgICAgICAgICAgIGJlbnV0emVy +ICAgICAgICAgICAgICAgID0gIiREb21haW5cJFVzZXJuYW1lIg0KICAgICAgICAgICAgICAgICAg +ICByb2xsZSAgICAgICAgICAgICAgICAgICA9ICRyLnJvbGxlDQogICAgICAgICAgICAgICAgICAg +IGlzdFN1cGVyVXNlciAgICAgICAgICAgID0gJHIuaXN0U3VwZXJVc2VyDQogICAgICAgICAgICAg +ICAgICAgIGlzdEZhY2hhdWZzaWNodCAgICAgICAgID0gJHIuaXN0RmFjaGF1ZnNpY2h0DQogICAg +ICAgICAgICAgICAgICAgIGlzdEdlc2FtdHZlcmFudHdvcnRsaWNoID0gJHIuaXN0R2VzYW10dmVy +YW50d29ydGxpY2gNCiAgICAgICAgICAgICAgICAgICAgc2VoZW4gICAgICAgICAgICAgICAgICAg +PSAkci5zZWhlbg0KICAgICAgICAgICAgICAgICAgICBhZG1pblN1YnRhYnMgICAgICAgICAgICA9 +ICRyLmFkbWluU3VidGFicw0KICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWtCZXJlaWNoZSAg +ICAgICA9ICRyLnN0YXRpc3Rpa0JlcmVpY2hlDQogICAgICAgICAgICAgICAgICAgIGVkaXRpZXJl +biAgICAgICAgICAgICAgID0gJHIuZWRpdGllcmVuICAgIyBudWxsIGJlaSBTdXBlclVzZXIgPSAi +YWxsZXMgZXJsYXVidCINCiAgICAgICAgICAgICAgICAgICAgbWVpbmVQZXJzb25JZCAgICAgICAg +ICAgPSAkci5tZWluZVBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIHNlcnZlciAgICAgICAg +ICAgICAgICAgID0gJHNjcmlwdDpDb3JzT3JpZ2luDQogICAgICAgICAgICAgICAgICAgIHVwZGF0 +ZUF2YWlsYWJsZSAgICAgICAgID0gJHNjcmlwdDpVcGRhdGVBdmFpbGFibGUNCiAgICAgICAgICAg +ICAgICAgICAgcmVtb3RlVmVyc2lvbiAgICAgICAgICAgPSAkc2NyaXB0OlJlbW90ZVZlcnNpb24N +CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNw +b25zZSAkaW5mb09iag0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQog +ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBVUERBVEU6IFNUQVRVUyAobnVyIFN1 +cGVyVXNlcikgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAjIEJlaGVidCBkZW4g +NDA0IGF1ZiAvYXBpL3VwZGF0ZS9zdGF0dXMuIExpZXN0IFZlcnNpb24gKyBDaGFuZ2Vsb2cNCiAg +ICAgICAgICAgICMgdWViZXIgZGVuIChqZXR6dCBwcm94eS1hdXRoZW50aWZpemllcnRlbikgRGlz +dC1SZXBvLVp1Z2FuZy4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvdXBkYXRlL3N0 +YXR1cycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90 +IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVz +ZXIuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0OlVwZGF0ZUxhc3RD +aGVja1V0YyA9IFtkYXRldGltZV06Ok1pblZhbHVlICAjIEZvcmNlLVJlZnJlc2gNCiAgICAgICAg +ICAgICAgICBSZWZyZXNoLVVwZGF0ZUNoZWNrDQogICAgICAgICAgICAgICAgJGx2ID0gR2V0LUxv +a2FsZVZlcnNpb24NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 +DQogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF2YWlsYWJsZSA9ICRzY3JpcHQ6VXBkYXRlQXZh +aWxhYmxlDQogICAgICAgICAgICAgICAgICAgIGxvY2FsVmVyc2lvbiAgICA9ICRsdg0KICAgICAg +ICAgICAgICAgICAgICByZW1vdGVWZXJzaW9uICAgPSAkc2NyaXB0OlJlbW90ZVZlcnNpb24NCiAg +ICAgICAgICAgICAgICAgICAgY2hhbmdlbG9nICAgICAgID0gKEdldC1VcGRhdGVDaGFuZ2Vsb2cg +JGx2ICRzY3JpcHQ6UmVtb3RlVmVyc2lvbikNCiAgICAgICAgICAgICAgICAgICAgbWFpbnRlbmFu +Y2UgICAgID0gQHsgbG9ja2VkID0gJGZhbHNlOyByZWFzb24gPSAnJyB9DQogICAgICAgICAgICAg +ICAgICAgIGpvYiAgICAgICAgICAgICA9IEB7DQogICAgICAgICAgICAgICAgICAgICAgICBzdGF0 +ZSA9ICRzY3JpcHQ6VXBkYXRlSm9iLnN0YXRlOyBwZXJjZW50ID0gJHNjcmlwdDpVcGRhdGVKb2Iu +cGVyY2VudA0KICAgICAgICAgICAgICAgICAgICAgICAgc3RlcCA9ICRzY3JpcHQ6VXBkYXRlSm9i +LnN0ZXA7IG1lc3NhZ2UgPSAkc2NyaXB0OlVwZGF0ZUpvYi5tZXNzYWdlDQogICAgICAgICAgICAg +ICAgICAgICAgICBlcnJvciA9ICRzY3JpcHQ6VXBkYXRlSm9iLmVycm9yOyBmcm9tVmVyc2lvbiA9 +ICRzY3JpcHQ6VXBkYXRlSm9iLmZyb21WZXJzaW9uDQogICAgICAgICAgICAgICAgICAgICAgICB0 +b1ZlcnNpb24gPSAkc2NyaXB0OlVwZGF0ZUpvYi50b1ZlcnNpb24NCiAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gVVBEQVRFOiBQUk9H +UkVTUyAobnVyIFN1cGVyVXNlcikgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBp +ZiAoJFBhdGggLWVxICcvYXBpL3VwZGF0ZS9wcm9ncmVzcycgLWFuZCAkTWV0aG9kIC1lcSAnR0VU +Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAg +ICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAg +ICAgIHN0YXRlID0gJHNjcmlwdDpVcGRhdGVKb2Iuc3RhdGU7IHBlcmNlbnQgPSAkc2NyaXB0OlVw +ZGF0ZUpvYi5wZXJjZW50DQogICAgICAgICAgICAgICAgICAgIHN0ZXAgPSAkc2NyaXB0OlVwZGF0 +ZUpvYi5zdGVwOyBtZXNzYWdlID0gJHNjcmlwdDpVcGRhdGVKb2IubWVzc2FnZQ0KICAgICAgICAg +ICAgICAgICAgICBlcnJvciA9ICRzY3JpcHQ6VXBkYXRlSm9iLmVycm9yOyBmcm9tVmVyc2lvbiA9 +ICRzY3JpcHQ6VXBkYXRlSm9iLmZyb21WZXJzaW9uDQogICAgICAgICAgICAgICAgICAgIHRvVmVy +c2lvbiA9ICRzY3JpcHQ6VXBkYXRlSm9iLnRvVmVyc2lvbjsgc2VsZnRlc3QgPSBAKCRzY3JpcHQ6 +VXBkYXRlSm9iLnNlbGZ0ZXN0KQ0KICAgICAgICAgICAgICAgICAgICBsb2cgPSBAKCRzY3JpcHQ6 +VXBkYXRlSm9iLmxvZyB8IFNlbGVjdC1PYmplY3QgLUxhc3QgNjApDQogICAgICAgICAgICAgICAg +ICAgIG1haW50ZW5hbmNlID0gQHsgbG9ja2VkID0gJGZhbHNlOyByZWFzb24gPSAnJyB9DQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQog +ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBVUERBVEU6IFNUQVJUIChudXIgU3Vw +ZXJVc2VyKSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgICMgSHlicmlkOiBzdGFy +dGV0IGRpZSBnZXRlc3RldGUsIHNoYXJlLXppZWxlbmRlIHVwZGF0ZS5iYXQgYWxzIGVpZ2VuZW4N +CiAgICAgICAgICAgICMgUHJvemVzcyBhdXMgZGVyIEtBTk9OSVNDSEVOIFF1ZWxsZS4gdXBkYXRl +LmJhdCBzdG9wcHQrc3RhcnRldCBkZW4NCiAgICAgICAgICAgICMgU2VydmVyIHNlbGJzdCAoc3Rv +cC5iYXQvZGdsLmJhdCkuIFdpciBrb2VubmVuIGRlbiBleHRlcm5lbiBMYXVmIG5pY2h0DQogICAg +ICAgICAgICAjIGluIEVjaHR6ZWl0IHZlcmZvbGdlbiAtPiBKb2IgbWVsZGV0ICdleHRlcm4gZ2Vz +dGFydGV0JywgZGVyIENsaWVudA0KICAgICAgICAgICAgIyB6ZWlndCBkZW4gSGlud2VpcyB1bmQg +bGFlZHQgbmFjaCBkZW0gTmV1c3RhcnQgbmV1Lg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn +L2FwaS91cGRhdGUvc3RhcnQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25z +ZSAnTnVyIFN1cGVyVXNlciBkYXJmIFVwZGF0ZXMgc3RhcnRlbi4nIDQwMzsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICRxdWVsbGUgPSBHZXQtVXBkYXRlUXVlbGxlDQogICAgICAgICAgICAg +ICAgJGJhdCA9IEpvaW4tUGF0aCAkcXVlbGxlICd1cGRhdGUuYmF0Jw0KICAgICAgICAgICAgICAg +IGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRiYXQpKSB7DQogICAgICAgICAgICAg +ICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgndXBkYXRlLmJhdCBuaWNodCBnZWZ1bmRlbiBp +biBkZXIgUXVlbGxlOiAnICsgJHF1ZWxsZSkgNTAwDQogICAgICAgICAgICAgICAgICAgIGNvbnRp +bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAg +ICAgICAgICAgICR0cyA9IChHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1NLWRkVEhIOm1tOnNzJykN +CiAgICAgICAgICAgICAgICAgICAgIyBzdGRpbiBhdXMgbnVsIChlaW4gQXJndW1lbnRMaXN0LVN0 +cmluZywgdm9uIFN0YXJ0LVByb2Nlc3MNCiAgICAgICAgICAgICAgICAgICAgIyB2ZXJiYXRpbSBh +biBjbWQpIC0+IGRhcyBhYnNjaGxpZXNzZW5kZSAncGF1c2UnIGluIHVwZGF0ZS5iYXQNCiAgICAg +ICAgICAgICAgICAgICAgIyBsaWVzdCBFT0YgdW5kIGtlaHJ0IHNvZm9ydCB6dXJ1ZWNrLCBrZWlu +IGhhZW5nZW5kZXIgUHJvemVzcy4NCiAgICAgICAgICAgICAgICAgICAgU3RhcnQtUHJvY2VzcyAt +RmlsZVBhdGggJ2NtZC5leGUnIC1Bcmd1bWVudExpc3QgKCcvYyAiJyArICRiYXQgKyAnIiA8bnVs +JykgYA0KICAgICAgICAgICAgICAgICAgICAgICAgLVdvcmtpbmdEaXJlY3RvcnkgJHF1ZWxsZSAt +V2luZG93U3R5bGUgSGlkZGVuDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9i +LnN0YXRlICAgICAgID0gJ3J1bm5pbmcnDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBk +YXRlSm9iLnN0ZXAgICAgICAgID0gJ2V4dGVybicNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlw +dDpVcGRhdGVKb2IucGVyY2VudCAgICAgPSA1DQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6 +VXBkYXRlSm9iLmVycm9yICAgICAgID0gJycNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpV +cGRhdGVKb2IuZnJvbVZlcnNpb24gPSAoR2V0LUxva2FsZVZlcnNpb24pDQogICAgICAgICAgICAg +ICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnRvVmVyc2lvbiAgID0gJHNjcmlwdDpSZW1vdGVWZXJz +aW9uDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnNlbGZ0ZXN0ICAgID0g +QCgpDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLm1lc3NhZ2UgICAgID0g +J0V4dGVybmVyIFVwZGF0ZXIgKHVwZGF0ZS5iYXQpIGdlc3RhcnRldC4gRGVyIFNlcnZlciB3aXJk +IGdsZWljaCBnZXN0b3BwdCB1bmQgbmV1IGdlc3RhcnRldCAtIGJpdHRlIGRhbmFjaCBkaWUgU2Vp +dGUgbmV1IGxhZGVuLicNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpVcGRhdGVKb2IubG9n +ICAgICAgICAgPSBAKEB7IHQgPSAkdHM7IG1zZyA9ICd1cGRhdGUuYmF0IGF1cyAnICsgJHF1ZWxs +ZSArICcgZ2VzdGFydGV0LicgfSkNCiAgICAgICAgICAgICAgICAgICAgTG9nLUFwaSAoJ1VQREFU +RS1TVEFSVDogdXBkYXRlLmJhdCBhdXMgezB9IGdlc3RhcnRldCAoU3VwZXJVc2VyKS4nIC1mICRx +dWVsbGUpDQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg +c3RhcnRlZCA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAg +ICAgICAgICAgJHNjcmlwdDpVcGRhdGVKb2Iuc3RhdGUgPSAnZmFpbGVkJw0KICAgICAgICAgICAg +ICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5lcnJvciA9ICRfLkV4Y2VwdGlvbi5NZXNzYWdlDQog +ICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdVUERBVEUtU1RBUlQgRkVITEVSOiB7MH0nIC1m +ICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS +ZXNwb25zZSAoJ1VwZGF0ZS1TdGFydCBmZWhsZ2VzY2hsYWdlbjogJyArICRfLkV4Y2VwdGlvbi5N +ZXNzYWdlKSA1MDANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUN +CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvZGVidWcnIC1h +bmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkZGF0ID0gQHsgUm9vdCA9 +ICRSb290OyBEYXRhRGlyID0gJERhdGFEaXI7IEZpbGVzID0gQHt9IH0NCiAgICAgICAgICAgICAg +ICBmb3JlYWNoICgkZiBpbiAnYWRtaW4uanNvbicsJ3BsYW51bmcuanNvbicsJ2xvZ2J1Y2guanNv +bicpIHsNCiAgICAgICAgICAgICAgICAgICAgJGZwID0gSm9pbi1QYXRoICREYXRhRGlyICRmDQog +ICAgICAgICAgICAgICAgICAgICRpbmZvID0gQHsgZXhpc3RzID0gKFRlc3QtUGF0aCAtTGl0ZXJh +bFBhdGggJGZwKSB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkaW5mby5leGlzdHMpIHsgJGlu +Zm8uc2l6ZSA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZwKS5MZW5ndGggfQ0KICAgICAgICAg +ICAgICAgICAgICAkZGF0LkZpbGVzWyRmXSA9ICRpbmZvDQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICMgUmVjaHRlLUluZm8gKHdpY2h0aWcgZnVlciBBZG1pbi1UYWItU2ljaHRi +YXJrZWl0KQ0KICAgICAgICAgICAgICAgICRkYXQuQmVudXR6ZXIgPSAiJERvbWFpblwkVXNlcm5h +bWUiDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJHIgPSBHZXQt +UmVjaHRlDQogICAgICAgICAgICAgICAgICAgICRkYXQuUmVjaHRlID0gQHsNCiAgICAgICAgICAg +ICAgICAgICAgICAgIHJvbGxlICAgICAgICAgICA9ICRyLnJvbGxlDQogICAgICAgICAgICAgICAg +ICAgICAgICBpc3RTdXBlclVzZXIgICAgPSAkci5pc3RTdXBlclVzZXINCiAgICAgICAgICAgICAg +ICAgICAgICAgIGlzdEZhY2hhdWZzaWNodCA9ICRyLmlzdEZhY2hhdWZzaWNodA0KICAgICAgICAg +ICAgICAgICAgICAgICAgc2VoZW4gICAgICAgICAgID0gJHIuc2VoZW4NCiAgICAgICAgICAgICAg +ICAgICAgICAgIG1laW5lUGVyc29uSWQgICA9ICRyLm1laW5lUGVyc29uSWQNCiAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAg +ICAkZGF0LlJlY2h0ZSA9IEB7IGZlaGxlciA9ICRfLkV4Y2VwdGlvbi5NZXNzYWdlIH0NCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBBZG1pbi5qc29uIEt1cnpjaGVjaw0KICAg +ICAgICAgICAgICAgICRhZG1pbk9iaiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAg +ICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbk9iaikgew0KICAgICAgICAgICAgICAg +ICAgICAkZGF0LkFkbWluSnNvbkxlc2JhciA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgIH0gZWxz +ZSB7DQogICAgICAgICAgICAgICAgICAgICRhbnpTVSA9IDANCiAgICAgICAgICAgICAgICAgICAg +aWYgKCRhZG1pbk9iai5zdXBlclVzZXIpIHsgJGFuelNVID0gQCgkYWRtaW5PYmouc3VwZXJVc2Vy +KS5Db3VudCB9DQogICAgICAgICAgICAgICAgICAgICRzdUtlbm51bmdlbiA9IEAoKQ0KICAgICAg +ICAgICAgICAgICAgICBpZiAoJGFkbWluT2JqLnN1cGVyVXNlcikgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgZm9yZWFjaCAoJHMgaW4gQCgkYWRtaW5PYmouc3VwZXJVc2VyKSkgeyAkc3VLZW5u +dW5nZW4gKz0gW3N0cmluZ10kcy5ud0tlbm51bmcgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgICAgICRkYXQuQWRtaW5Kc29uTGVzYmFyID0gJHRydWUNCiAgICAgICAg +ICAgICAgICAgICAgJGRhdC5TdXBlclVzZXJBbnphaGwgPSAkYW56U1UNCiAgICAgICAgICAgICAg +ICAgICAgJGRhdC5TdXBlclVzZXJLZW5udW5nZW4gPSAkc3VLZW5udW5nZW4NCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkZGF0DQog +ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9 +PT09PSBTWU5DLUNIRUNLID09PT09DQogICAgICAgICAgICAjIFZlcmdsZWljaHQgcHJvIFdlYi1B +c3NldCBkaWUgRGF0ZWktR3JvZXNzZSBpbiBkZXIgU291cmNlIChnZXB1bGx0ZXMNCiAgICAgICAg +ICAgICMgUmVwbywgJHNjcmlwdDpBc3NldEZhbGxiYWNrKSBnZWdlbiBkaWUgRGF0ZWktR3JvZXNz +ZSBpbSBBc3NldC1DYWNoZQ0KICAgICAgICAgICAgIyAoJFJvb3QsIFJvYm9jb3B5LVppZWwpLiBF +cmtlbm50IHVudm9sbHN0YWVuZGlnZSBSb2JvY29weS1VZWJlci0NCiAgICAgICAgICAgICMgdHJh +Z3VuZ2VuLCB2ZXJhbHRldGUgQXNzZXQtQ2FjaGVzIHVuZCBmZWhsZW5kZSBEYXRlaWVuLg0KICAg +ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zeW5jLWNoZWNrL2RhdGVpZW4nIC1hbmQgJE1l +dGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1p +bikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNjcmlwdDpBc3NldEZhbGxiYWNrKSB7 +DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgIG9rID0gJGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAgICBm +ZWhsZXIgPSAnQXNzZXRGYWxsYmFjayBuaWNodCBrb25maWd1cmllcnQg4oCUIFNvdXJjZS1QZmFk +IHVuYmVrYW5udCwgVmVyZ2xlaWNoIG5pY2h0IG1vZWdsaWNoLiAoU2VydmVyIHd1cmRlIG9obmUg +LUFzc2V0RmFsbGJhY2sgZ2VzdGFydGV0LiknDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgJHdlYkV4dCA9ICcuanMnLCcuY3NzJywnLmh0bWwnLCcuaWNvJywnLnBuZycsJy5qcGcnLCcu +anBlZycsJy5zdmcnDQogICAgICAgICAgICAgICAgJGlnbm9yaWVyZVRvcCA9IEAoJy5naXQnLCdk +b2NzJywnZGV2JywndGVzdHMnLCdkYXRhJywnY2FjaGUnKQ0KICAgICAgICAgICAgICAgICRkYXRl +aWVuID0gQCgpDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGFs +bGUgPSBHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0OkFzc2V0RmFsbGJhY2sgLVJl +Y3Vyc2UgLUZpbGUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUNCiAgICAgICAgICAgICAg +ICAgICAgZm9yZWFjaCAoJGYgaW4gJGFsbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRy +ZWwgPSAkZi5GdWxsTmFtZS5TdWJzdHJpbmcoJHNjcmlwdDpBc3NldEZhbGxiYWNrLkxlbmd0aCAr +IDEpIC1yZXBsYWNlICdcXCcsICcvJw0KICAgICAgICAgICAgICAgICAgICAgICAgJHRvcCA9ICgk +cmVsIC1zcGxpdCAnLycpWzBdDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlnbm9yaWVy +ZVRvcCAtY29udGFpbnMgJHRvcCkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAkZXh0ID0gJGYuRXh0ZW5zaW9uLlRvTG93ZXIoKQ0KICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCR3ZWJFeHQgLW5vdGNvbnRhaW5zICRleHQpIHsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgJGRhdGVpZW4gKz0gJHJlbA0KICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICMgZGF0YS8tU29uZGVyZmFlbGxlOiBudXIgZGllIHp3ZWkgVGFybi1N +YXJrdXBzLCBhbGxlcyBhbmRlcmUNCiAgICAgICAgICAgICAgICAgICAgIyBsaWVndCBpbSBEYXRh +RGlyIChhZG1pbi5qc29uL3BsYW51bmcuanNvbi8uLi4pIHVuZCB3aXJkIG5pY2h0DQogICAgICAg +ICAgICAgICAgICAgICMgaW4gZGVuIEFzc2V0LUNhY2hlIGtvcGllcnQuDQogICAgICAgICAgICAg +ICAgICAgIGZvcmVhY2ggKCRleHRyYSBpbiAnZGF0YS9tYWluZnJhbWUuaHRtbCcsJ2RhdGEvc2Fu +aXRpemVyLmh0bWwnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3JjRXh0cmEgPSBKb2lu +LVBhdGggJHNjcmlwdDpBc3NldEZhbGxiYWNrICRleHRyYQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNyY0V4dHJhKSB7ICRkYXRlaWVuICs9ICRl +eHRyYSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsN +CiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBvayA9ICRm +YWxzZTsgZmVobGVyID0gKCdTb3VyY2UtVmVyemVpY2huaXMgbmljaHQgbGVzYmFyOiAnICsgJF8u +RXhjZXB0aW9uLk1lc3NhZ2UpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGRhdGVpZW4gPSAkZGF0ZWllbiB8IFNvcnQt +T2JqZWN0IC1VbmlxdWUNCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0gQCgpDQogICAgICAg +ICAgICAgICAgJGFuek9rID0gMDsgJGFuekRpZmYgPSAwOyAkYW56RmVobHRBc3NldCA9IDA7ICRh +bnpGZWhsdFNvdXJjZSA9IDANCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcmVsIGluICRkYXRl +aWVuKSB7DQogICAgICAgICAgICAgICAgICAgICRhc3NldFBmYWQgID0gSm9pbi1QYXRoICRSb290 +ICRyZWwNCiAgICAgICAgICAgICAgICAgICAgJHNvdXJjZVBmYWQgPSBKb2luLVBhdGggJHNjcmlw +dDpBc3NldEZhbGxiYWNrICRyZWwNCiAgICAgICAgICAgICAgICAgICAgJGFzc2V0Qnl0ZXMgID0g +JG51bGwNCiAgICAgICAgICAgICAgICAgICAgJHNvdXJjZUJ5dGVzID0gJG51bGwNCiAgICAgICAg +ICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGFzc2V0UGZhZCkgIHsgJGFz +c2V0Qnl0ZXMgID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkYXNzZXRQZmFkKS5MZW5ndGggfQ0K +ICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkc291cmNlUGZh +ZCkgeyAkc291cmNlQnl0ZXMgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRzb3VyY2VQZmFkKS5M +ZW5ndGggfQ0KICAgICAgICAgICAgICAgICAgICAkc3RhdHVzID0gJ3VuYmVrYW5udCcNCiAgICAg +ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkc291cmNlQnl0ZXMgLWFuZCAkbnVsbCAtZXEg +JGFzc2V0Qnl0ZXMpIHsgJHN0YXR1cyA9ICdiZWlkZV9mZWhsZW4nIH0NCiAgICAgICAgICAgICAg +ICAgICAgZWxzZWlmICgkbnVsbCAtZXEgJGFzc2V0Qnl0ZXMpICB7ICRzdGF0dXMgPSAnYXNzZXRf +ZmVobHQnOyAgJGFuekZlaGx0QXNzZXQrKyB9DQogICAgICAgICAgICAgICAgICAgIGVsc2VpZiAo +JG51bGwgLWVxICRzb3VyY2VCeXRlcykgeyAkc3RhdHVzID0gJ3NvdXJjZV9mZWhsdCc7ICRhbnpG +ZWhsdFNvdXJjZSsrIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkYXNzZXRCeXRlcyAt +ZXEgJHNvdXJjZUJ5dGVzKSB7ICRzdGF0dXMgPSAnb2snOyAkYW56T2srKyB9DQogICAgICAgICAg +ICAgICAgICAgIGVsc2UgeyAkc3RhdHVzID0gJ2dyb2Vzc2VfZGlmZic7ICRhbnpEaWZmKysgfQ0K +ICAgICAgICAgICAgICAgICAgICAkZWludHJhZWdlICs9IFtvcmRlcmVkXUB7DQogICAgICAgICAg +ICAgICAgICAgICAgICBwZmFkICAgICAgICA9ICRyZWwNCiAgICAgICAgICAgICAgICAgICAgICAg +IHNvdXJjZUJ5dGVzID0gJHNvdXJjZUJ5dGVzDQogICAgICAgICAgICAgICAgICAgICAgICBhc3Nl +dEJ5dGVzICA9ICRhc3NldEJ5dGVzDQogICAgICAgICAgICAgICAgICAgICAgICBkaWZmQnl0ZXMg +ICA9IGlmICgkbnVsbCAtbmUgJHNvdXJjZUJ5dGVzIC1hbmQgJG51bGwgLW5lICRhc3NldEJ5dGVz +KSB7ICRhc3NldEJ5dGVzIC0gJHNvdXJjZUJ5dGVzIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgID0gJHN0YXR1cw0KICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk +UmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgb2sgICAgICAgICAgPSAkdHJ1ZQ0KICAg +ICAgICAgICAgICAgICAgICBzb3VyY2VSb290ICA9ICRzY3JpcHQ6QXNzZXRGYWxsYmFjaw0KICAg +ICAgICAgICAgICAgICAgICBhc3NldFJvb3QgICA9ICRSb290DQogICAgICAgICAgICAgICAgICAg +IGFuemFobCAgICAgID0gJGVpbnRyYWVnZS5Db3VudA0KICAgICAgICAgICAgICAgICAgICBhbnpP +ayAgICAgICA9ICRhbnpPaw0KICAgICAgICAgICAgICAgICAgICBhbnpEaWZmICAgICA9ICRhbnpE +aWZmDQogICAgICAgICAgICAgICAgICAgIGFuekZlaGx0QXNzZXQgID0gJGFuekZlaGx0QXNzZXQN +CiAgICAgICAgICAgICAgICAgICAgYW56RmVobHRTb3VyY2UgPSAkYW56RmVobHRTb3VyY2UNCiAg +ICAgICAgICAgICAgICAgICAgZGF0ZWllbiAgICAgPSAkZWludHJhZWdlDQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAg +ICAgICMgPT09PT0gQURNSU4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv +YWRtaW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkdHh0ID0g +UmVhZC1UZXh0RmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx +ICR0eHQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ2FkbWluLmpzb24gbmljaHQgZ2VmdW5kZW4n +IDQwNCB9DQogICAgICAgICAgICAgICAgZWxzZSB7IFNlbmQtSnNvblRleHQgJFJlc3BvbnNlICR0 +eHQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAg +ICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQog +ICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2FkbWluaXN0cmF0aW9u +JykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFn +ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJv +ZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgaWYgKCRkYXRlbi5QU09iamVj +dC5Qcm9wZXJ0aWVzWydhZG1pbktlbm51bmdlbiddKSB7ICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0 +aWVzLlJlbW92ZSgnYWRtaW5LZW5udW5nZW4nKSB9DQogICAgICAgICAgICAgICAgIyBQUy01LjEt +VW53cmFwLVNjaHV0ejogYWxsZSBMaXN0ZW4tRmVsZGVyLCBkaWUgZGVyIENsaWVudCB1bnRlcg0K +ICAgICAgICAgICAgICAgICMgQURNSU5fTElTVF9GRUxERVIgZnVlaHJ0LCBzZXJ2ZXItc2VpdGln +IGFscyBBcnJheXMgZXJ6d2luZ2VuLg0KICAgICAgICAgICAgICAgICMgU29uc3Qgd2VyZGVuIExp +c3RlbiBtaXQgbnVyIGVpbmVtIEVsZW1lbnQgdm9tIFBvd2VyU2hlbGwtSlNPTi0NCiAgICAgICAg +ICAgICAgICAjIFJvdW5kdHJpcCB6dW0gRWluemVsLU9iamVrdCBlbnRwYWNrdCB1bmQgY2xpZW50 +LXNlaXRpZyBrb21tdA0KICAgICAgICAgICAgICAgICMgYWRtaW5MaXN0ZW5Ob3JtYWxpc2llcmVu +IGdnZi4genUgc3BhZXQgKHouQi4gbmFjaCBIb3QtUmVsb2FkKS4NCiAgICAgICAgICAgICAgICBO +b3JtYWxpc2llcmUtQWRtaW5MaXN0ZW4gJGRhdGVuDQogICAgICAgICAgICAgICAgIyBTZXJ2ZXIt +c2VpdGlnZSBSaWNoLVRleHQtU2FuaXRpc2llcnVuZyAoU3RvcmVkLVhTUy1TY2h1dHopLg0KICAg +ICAgICAgICAgICAgIEludm9rZS1BZG1pblJpY2h0ZXh0U2FuaXRpemUgJGRhdGVuDQogICAgICAg +ICAgICAgICAgJGlzdFNVID0gVGVzdC1Jc3RTdXBlclVzZXINCiAgICAgICAgICAgICAgICAkbG9j +a0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAg +ICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgIyBOdXIgU3VwZXJVc2VyIGRhcmYgZGllIFJvbGxlbi1M +aXN0ZW4gc3VwZXJVc2VyL2ZhY2hhdWZzaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgIyB1 +ZWJlciAvYXBpL2FkbWluIGFlbmRlcm4g4oCUIHNvbnN0IGtvZW5udGUgamVtYW5kIHNpY2ggc2Vs +YnN0DQogICAgICAgICAgICAgICAgICAgICAgICAjIHp1bSBTdXBlclVzZXIgYmVmb2VyZGVybiB1 +bmQgZGFtaXQgZGllIHNlcGFyYXRlbiBHdWFyZHMgYXVmDQogICAgICAgICAgICAgICAgICAgICAg +ICAjIC9hcGkvYWRtaW4vc3VwZXJ1c2VyIGJ6dy4gL2FwaS9hZG1pbi9mYWNoYXVmc2ljaHQgdW1n +ZWhlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgYWRtaW5LZW5udW5nZW4gaXN0IGdlbmVy +ZWxsIGFiZ2VzY2hhZmZ0IHVuZCB3aXJkIGVudGZlcm50Lg0KICAgICAgICAgICAgICAgICAgICAg +ICAgIyBSZWFkIGRlciBhbHRlbiBXZXJ0ZSBtdXNzIElOTkVSSEFMQiBkZXMgTG9ja3MgcGFzc2ll +cmVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBkYW1pdCBkaWUgU1UvRmFjaGF1ZnNpY2h0 +LUxpc3RlbiBhdG9tYXIgZXJoYWx0ZW4gYmxlaWJlbi4NCiAgICAgICAgICAgICAgICAgICAgICAg +ICRhbHQgPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAkaXN0U1UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jl +YWNoICgkZmVsZCBpbiAnc3VwZXJVc2VyJywnZmFjaGF1ZnNpY2h0JywnZGlyZWt0aW9uc2xlaXR1 +bmcnLCdmdWVocnVuZ3NzdGVsbGUnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgkYWx0IC1hbmQgJGFsdC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkXSkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0 +aWVzWyRmZWxkXSkgeyAkZGF0ZW4uJGZlbGQgPSAkYWx0LiRmZWxkIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkZGF0ZW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJv +cGVydHlOYW1lICRmZWxkIC1Ob3RlUHJvcGVydHlWYWx1ZSAkYWx0LiRmZWxkIC1Gb3JjZSB9DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkZGF0ZW4uUFNPYmplY3Qu +UHJvcGVydGllc1skZmVsZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkZmVsZCkNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgS2V5LVVuaW9u +OiBuaWNodCBtaXRnZXNlbmRldGUgVG9wLUxldmVsLUtleXMgZXJoYWx0ZW4uDQogICAgICAgICAg +ICAgICAgICAgICAgICBbdm9pZF0oTWVyZ2UtQWRtaW5LZXlzICRhbHQgJGRhdGVuKQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGRhdGVuIHwg T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlIH0N CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAg ICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUw MzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3Qg JGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1z ZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRl -LUxvZ0VpbnRyYWcgJ2VtYWlsdm9ybGFnZW4uZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAg -ICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0K -ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMg -RS1NYWlsLVRyaWdnZXItS29uZmlnIChwcm8gVHJpZ2dlcjogYWt0aXYgKyBFbXBmYWVuZ2VyLVRh -Z3MpIOKAlA0KICAgICAgICAgICAgIyBhdXNzY2hsaWVzc2xpY2ggU3RldWVydW5nIGZ1ZXIgZGVu -IEZyb250ZW5kLW1haWx0bzotRGlzcGF0Y2hlci4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvYWRtaW4vZW1haWx0cmlnZ2VyJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAg +LUxvZ0VpbnRyYWcgJ2FkbWluLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1K +c29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFN1cGVyLVVz +ZXItTGlzdGU6IG51ciBTdXBlclVzZXIgZGFyZiBTdXBlclVzZXIgdmVyd2FsdGVuDQogICAgICAg +ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3N1cGVydXNlcicgLWFuZCAkTWV0aG9kIC1l +cSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikp +IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBTdXBlclVzZXIg +dmVyd2FsdGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQt +Qm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJy +b3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAg +ICAgICAgICAjIEAoLi4uKSBlcnp3aW5ndCBBcnJheSBhdWNoIGJlaSAxIEVsZW1lbnQgKFBTIDUu +MSBlbnRwYWNrdCBzb25zdCB6dSBFaW56ZWwtT2JqZWt0LA0KICAgICAgICAgICAgICAgICMgZGFu +biB3aXJkIGRpZSBMaXN0ZSBpbiBhZG1pbi5qc29uIHp1bSBPYmpla3QgZGVnZW5lcmllcnQgLT4g +Q2xpZW50LUZlaGxlcikuDQogICAgICAgICAgICAgICAgJGJvZHlPYmogPSAkYm9keSB8IENvbnZl +cnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSBbb2JqZWN0W11dQCgkYm9keU9i +aikNCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAg +ICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhG +aWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0g +UmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7 +IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAg +ICAgICAkd2lwZU1zZyA9IFRlc3QtV2lwZVNjaHV0eiAnc3VwZXJVc2VyJyAkZGF0ZW4gJGFkbWlu +ICRSZXF1ZXN0ICRib2R5T2JqDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHdpcGVNc2cp +IHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA0MDk7IG1zZyA9ICR3aXBlTXNnIH0g +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRlIExpc3RlIHZvciBkZW0gT3ZlcndyaXRl +IHNuYXBzaG90dGVuIOKAlCB3aXIgYnJhdWNoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICMg +c2llIG5hY2ggZGVtIExvY2sgZnVlciBkaWUgRGlmZi1CZXJlY2hudW5nIChtYWlsdG8gYmVpDQog +ICAgICAgICAgICAgICAgICAgICAgICAjIFNVIHJlaW4vcmF1cykuDQogICAgICAgICAgICAgICAg +ICAgICAgICAkYWx0U1UgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4u +UFNPYmplY3QuUHJvcGVydGllc1snc3VwZXJVc2VyJ10pIHsgJGFsdFNVID0gW29iamVjdFtdXUAo +JGFkbWluLnN1cGVyVXNlcikgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdKEJhY2t1 +cC1BZG1pbkpzb24gJ3N1cGVyVXNlcicpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFk +bWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N1cGVyVXNlciddKSB7ICRhZG1pbi5zdXBlclVzZXIg +PSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1N +ZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N1cGVyVXNlcicgLU5vdGVQcm9wZXJ0eVZhbHVlICRk +YXRlbiAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAn +YWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJl +dHVybiBAeyBvayA9ICR0cnVlOyBhbHQgPSAkYWx0U1UgfQ0KICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy +b3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNl +bmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVz +OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBEaWZmIGFsdC9uZXUgbmFjaCBud0tlbm51 +bmcuIFNVLVJlaW4vUmF1cyBsb2VzdCBtYWlsdG8gdmlhIENsaWVudCBhdXMNCiAgICAgICAgICAg +ICAgICAjIChWZXJhbnR3b3J0dW5ncy1VZWJlcmdhbmcgVm9ybGFnZSAncm9sbGVfdmVyYW50d29y +dHVuZycpLg0KICAgICAgICAgICAgICAgICRtYWlsdG9EaWZmcyA9IEdldC1Sb2xsZURpZmZzICRs +b2NrRXJnZWJuaXMuYWx0ICRkYXRlbiAnU3VwZXJVc2VyJyAkZmFsc2UNCiAgICAgICAgICAgICAg +ICAjIGFuemFobCBtaXRnZWJlbiDigJQgZGVyIExvZ2J1Y2gtQ2xpZW50IGxpZXN0IGUuYW56YWhs +OyBvaG5lIGRhcw0KICAgICAgICAgICAgICAgICMgRmVsZCBibGllYiBkaWUgRGV0YWlsLVNwYWx0 +ZSBiZWkgU1UtTGlzdGVuYWVuZGVydW5nZW4gbGVlcg0KICAgICAgICAgICAgICAgICMgKGZhY2hh +dWZzaWNodC5nZWFlbmRlcnQgdW50ZW4gbWFjaHQgZXMgZ2VuYXVzbykuDQogICAgICAgICAgICAg +ICAgV3JpdGUtTG9nRWludHJhZyAnc3VwZXJVc2VyLmdlYWVuZGVydCcgQHsgYW56YWhsID0gJGRh +dGVuLkNvdW50OyBkaWZmcyA9ICRtYWlsdG9EaWZmcy5Db3VudCB9DQogICAgICAgICAgICAgICAg +JHJlc3AgPSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBpZiAo +JG1haWx0b0RpZmZzLkNvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgICMgUFMtNS4x +LVVud3JhcC1TY2h1dHo6IEAoJHgpIGVyendpbmd0IEFycmF5IGF1Y2ggYmVpIDEgRWxlbWVudC4N +CiAgICAgICAgICAgICAgICAgICAgJHJlc3BbJ19icmF1Y2h0X21haWx0byddID0gW29yZGVyZWRd +QHsgdHJpZ2dlciA9ICdyb2xsZV92ZXJhbnR3b3J0dW5nJzsgZGlmZnMgPSBbb2JqZWN0W11dQCgk +bWFpbHRvRGlmZnMpIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1K +c29uT2JqZWN0ICRSZXNwb25zZSAkcmVzcA0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg +ICAgICAgICB9DQoNCiAgICAgICAgICAgICMgRmFjaGF1ZnNpY2h0LUxpc3RlOiBudXIgU3VwZXJV +c2VyIGRhcmYgRmFjaGF1ZnNpY2h0IHZlcndhbHRlbg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l +cSAnL2FwaS9hZG1pbi9mYWNoYXVmc2ljaHQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAg +ICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gRmFjaGF1ZnNpY2h0IHZlcndhbHRlbicg +NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVl +c3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z +ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJv +ZHlPYmogPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0ZW4g +PSBbb2JqZWN0W11dQCgkYm9keU9iaikNCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0g +JG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0Vy +Z2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAg +ICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0g +JGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAkd2lwZU1zZyA9IFRlc3QtV2lwZVNjaHV0eiAnZmFj +aGF1ZnNpY2h0JyAkZGF0ZW4gJGFkbWluICRSZXF1ZXN0ICRib2R5T2JqDQogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJHdpcGVNc2cpIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMg +PSA0MDk7IG1zZyA9ICR3aXBlTXNnIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdEZB +ID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ2ZhY2hhdWZzaWNodCddKSB7ICRhbHRGQSA9IFtvYmplY3RbXV1AKCRhZG1pbi5mYWNo +YXVmc2ljaHQpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShCYWNrdXAtQWRtaW5K +c29uICdmYWNoYXVmc2ljaHQnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydmYWNoYXVmc2ljaHQnXSkgeyAkYWRtaW4uZmFjaGF1ZnNpY2h0 +ID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQt +TWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdmYWNoYXVmc2ljaHQnIC1Ob3RlUHJvcGVydHlWYWx1 +ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmpl +Y3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAg +ICByZXR1cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0ID0gJGFsdEZBIH0NCiAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5k +LUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykg +eyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0 +YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgRmFjaGF1ZnNpY2h0LURpZmY6IHRy +ZW5udCBtYWlsdG8td3VlcmRpZ2UgVmVyYW50d29ydHVuZ3MtDQogICAgICAgICAgICAgICAgIyBV +ZWJlcmdhZW5nZSAoR2VzYW10dmVyYW50d29ydGxpY2ggcmVpbi9yYXVzKSB2b20gcmVzdGxpY2hl +bg0KICAgICAgICAgICAgICAgICMgUm9sbGVuLVVwZGF0ZXMgKEZBIGhpbnp1L3JhdXMgb2huZSBH +ZXNhbXQsIG9kZXIgU2VoZW4tRmxhZy0NCiAgICAgICAgICAgICAgICAjIFdlY2hzZWwpLiBFcnN0 +ZSBmbGllw59lbiBpbiBkZW4gbWFpbHRvLVRyaWdnZXIsIGRlciBSZXN0IHdpcmQNCiAgICAgICAg +ICAgICAgICAjIHp1IEluLUFwcC1IaW53ZWlzZW4uDQogICAgICAgICAgICAgICAgJGZhQXVzd2Vy +dHVuZyA9IEdldC1GYWNoYXVmc2ljaHREaWZmcyAkbG9ja0VyZ2VibmlzLmFsdCAkZGF0ZW4NCiAg +ICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdmYWNoYXVmc2ljaHQuZ2VhZW5kZXJ0JyBA +eyBhbnphaGwgPSAkZGF0ZW4uQ291bnQ7IG1haWx0byA9ICRmYUF1c3dlcnR1bmcubWFpbHRvRGlm +ZnMuQ291bnQ7IGhpbndlaXNlID0gJGZhQXVzd2VydHVuZy5oaW53ZWlzRGlmZnMuQ291bnQgfQ0K +ICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRoIGluICRmYUF1c3dlcnR1bmcuaGlud2Vpc0RpZmZz +KSB7DQogICAgICAgICAgICAgICAgICAgIE5ldy1IaW53ZWlzICdyb2xsZV9nZWFlbmRlcnQnICRo +IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgJHJlc3AgPSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAg +ICAgICAgICAgICBpZiAoJGZhQXVzd2VydHVuZy5tYWlsdG9EaWZmcy5Db3VudCAtZ3QgMCkgew0K +ICAgICAgICAgICAgICAgICAgICAjIFBTLTUuMS1VbndyYXAtU2NodXR6OiBAKCR4KSBlcnp3aW5n +dCBBcnJheSBhdWNoIGJlaSAxIEVsZW1lbnQuDQogICAgICAgICAgICAgICAgICAgICRyZXNwWydf +YnJhdWNodF9tYWlsdG8nXSA9IFtvcmRlcmVkXUB7IHRyaWdnZXIgPSAncm9sbGVfdmVyYW50d29y +dHVuZyc7IGRpZmZzID0gW29iamVjdFtdXUAoJGZhQXVzd2VydHVuZy5tYWlsdG9EaWZmcykgfQ0K +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3Bv +bnNlICRyZXNwDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAg +ICAgICAgICAgIyBEaXJla3Rpb25zbGVpdHVuZyArIEZ1ZWhydW5nc3N0ZWxsZSAoZ2xlaWNoZXMg +U2NoZW1hIHdpZQ0KICAgICAgICAgICAgIyBGYWNoYXVmc2ljaHQsIG51ciBzZXBhcmF0ZSBMaXN0 +ZW4pLiBCZWlkZSBSb3V0ZW4gdGVpbGVuIGRpZQ0KICAgICAgICAgICAgIyBnbGVpY2hlIExvZ2lr +OiBTVS1vbmx5IFBVVCwgQmFja3VwLCBTY2hyZWliZW4sIERpZmZzIHp1DQogICAgICAgICAgICAj +IEluLUFwcC1IaW53ZWlzZW4gdW1zZXR6ZW4uDQogICAgICAgICAgICBpZiAoKCRQYXRoIC1lcSAn +L2FwaS9hZG1pbi9kaXJla3Rpb25zbGVpdHVuZycgLW9yICRQYXRoIC1lcSAnL2FwaS9hZG1pbi9m +dWVocnVuZ3NzdGVsbGUnKSAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAg +ICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn +TnVyIFN1cGVyVXNlciBkdWVyZmVuIFJvbGxlbiB2ZXJ3YWx0ZW4nIDQwMzsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICRmZWxkTmFtZSA9IGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZGly +ZWt0aW9uc2xlaXR1bmcnKSB7ICdkaXJla3Rpb25zbGVpdHVuZycgfSBlbHNlIHsgJ2Z1ZWhydW5n +c3N0ZWxsZScgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQog +ICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0Fu +ZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5T2Jq +ID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdGVuID0gW29i +amVjdFtdXUAoJGJvZHlPYmopDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxs +DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5p +cyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxz +ZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgJGFsdCA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkTmFtZV0pIHsgJGFsdCA9IFtvYmpl +Y3RbXV1AKCRhZG1pbi4kZmVsZE5hbWUpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lk +XShCYWNrdXAtQWRtaW5Kc29uICRmZWxkTmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1skZmVsZE5hbWVdKSB7ICRhZG1pbi4kZmVsZE5h +bWUgPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFk +ZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGZlbGROYW1lIC1Ob3RlUHJvcGVydHlWYWx1ZSAk +ZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3Qg +J2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICBy +ZXR1cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0ID0gJGFsdCB9DQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7 +IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICgkZmVsZE5hbWUg +KyAnLmdlYWVuZGVydCcpIEB7IGFuemFobCA9ICRkYXRlbi5Db3VudCB9DQogICAgICAgICAgICAg +ICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0N +CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj +IEJlemVpY2hudW5nZW46IE9iamVrdCAoTWFwIGtleS0+bGFiZWwpLiBMZWVyZXMgT2JqZWt0ID0g +UmVzZXQuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2JlemVpY2hudW5n +ZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo +VGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0 +ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJl +cXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNw +b25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg +JGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGxvY2tF +cmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAg +ICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNv +bicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVy +biBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBs +ZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Q +cm9wZXJ0aWVzWydiZXplaWNobnVuZ2VuJ10pIHsgJGFkbWluLmJlemVpY2hudW5nZW4gPSAkZGF0 +ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIg +LU5vdGVQcm9wZXJ0eU5hbWUgJ2JlemVpY2hudW5nZW4nIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0 +ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2Fk +bWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1 +cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJM +b2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiZXplaWNobnVuZ2VuLmdlYWVuZGVydCcg +QHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg +PSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg +fQ0KDQogICAgICAgICAgICAjIFN0YXRpc3Rpay1CYXVrYXN0ZW4gKHNlbGJzdGdlYmF1dGUgS2Fj +aGVsbikgKyBTdXBlclVzZXItTGF5b3V0LVJhc3Rlci4NCiAgICAgICAgICAgICMgR2F0ZSBiZXd1 +c3N0IFNVIE9ERVIgR2VzYW10dmVyYW50d29ydGxpY2ggKG5pY2h0IFRlc3QtSXN0QWRtaW4pIOKA +lCBkZXINCiAgICAgICAgICAgICMgQnVpbGRlciBsZWJ0IGltIFN0YXRpc3Rpay1UYWIgdW5kIG11 +c3MgYXVjaCBmdWVyIEdlc2FtdHZlcmFudHdvcnRsaWNoZQ0KICAgICAgICAgICAgIyBvaG5lIGFk +bWluaXN0cmF0aW9uLVp1Z2FuZyBzcGVpY2hlcmJhciBzZWluLiBQYXJ0aWFsLU1lcmdlIG51ciBk +ZXINCiAgICAgICAgICAgICMgYmVpZGVuIGJla2FubnRlbiBLZXlzOyBiZWlkZSBhbHMgW29iamVj +dFtdXSB6d2luZ2VuIChQUy01LjEtVW53cmFwKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg +Jy9hcGkvYWRtaW4vc3RhdGlzdGlrJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAg +ICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKChUZXN0 +LUlzdEFkbWluKSAtb3IgJHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgQWRtaW5zIHVuZCBHZXNhbXR2ZXJh +bnR3b3J0bGljaGUgZHVlcmZlbiBTdGF0aXN0aWstS2FjaGVsbiBhZW5kZXJuJyA0MDM7IGNvbnRp +bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5 +ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRo +YXRLYWNoZWxuID0gKCRudWxsIC1uZSAkZGF0ZW4gLWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVy +dGllc1snc3RhdGlzdGlrS2FjaGVsbiddKQ0KICAgICAgICAgICAgICAgICRoYXRMYXlvdXQgID0g +KCRudWxsIC1uZSAkZGF0ZW4gLWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snc3RhdGlz +dGlrTGF5b3V0J10pDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAg +ICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IElu +dm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3Rh +dHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRoYXRLYWNoZWxuKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJGsgPSBbb2JqZWN0W11dQCgkZGF0ZW4uc3RhdGlzdGlrS2FjaGVsbikNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXRp +c3Rpa0thY2hlbG4nXSkgeyAkYWRtaW4uc3RhdGlzdGlrS2FjaGVsbiA9ICRrIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3Bl +cnR5TmFtZSAnc3RhdGlzdGlrS2FjaGVsbicgLU5vdGVQcm9wZXJ0eVZhbHVlICRrIC1Gb3JjZSB9 +DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JGhhdExheW91dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsID0gW29iamVjdFtd +XUAoJGRhdGVuLnN0YXRpc3Rpa0xheW91dCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXRpc3Rpa0xheW91dCddKSB7ICRhZG1p +bi5zdGF0aXN0aWtMYXlvdXQgPSAkbCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz +ZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N0YXRpc3Rpa0xheW91 +dCcgLU5vdGVQcm9wZXJ0eVZhbHVlICRsIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29u +JyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9r +ID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRj +aCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhs +ZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2Nr +RXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3RhdGlzdGlrLmNvbmZpZy5nZWFlbmRlcnQnIEB7fQ0K +ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dl +c3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0K +ICAgICAgICAgICAgIyBTdGFuZGFyZHJlY2h0ZSAocmVndWxhZXJlIFVzZXIpOiBnZWdlbnNlaXRp +Z2UgUGxhbnVuZyBqZSBEaWVuc3RncnVwcGUvDQogICAgICAgICAgICAjIFN0YW5kb3J0LiBTVS1v +bmx5LiBXaXJkIGluIEdldC1SZWNodGUgYWRkaXRpdiBpbiBlZGl0aWVyZW4gZWluZ2V3b2Jlbi4N +CiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vc3RhbmRhcmRyZWNodGUnIC1h +bmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1J +c3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJm +ZW4gU3RhbmRhcmRyZWNodGUgYWVuZGVybicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +Ym9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29u +DQogICAgICAgICAgICAgICAgJGdnID0gQCgpOyBpZiAoJGRhdGVuIC1hbmQgJGRhdGVuLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2dlZ2Vuc2VpdGlnR3J1cHBlbiddKSAgIHsgJGdnID0gW3N0cmluZ1td +XUAoJGRhdGVuLmdlZ2Vuc2VpdGlnR3J1cHBlbiAgIHwgRm9yRWFjaC1PYmplY3QgeyBbc3RyaW5n +XSRfIH0pIH0NCiAgICAgICAgICAgICAgICAkZ3MgPSBAKCk7IGlmICgkZGF0ZW4gLWFuZCAkZGF0 +ZW4uUFNPYmplY3QuUHJvcGVydGllc1snZ2VnZW5zZWl0aWdTdGFuZG9ydGUnXSkgeyAkZ3MgPSBb +c3RyaW5nW11dQCgkZGF0ZW4uZ2VnZW5zZWl0aWdTdGFuZG9ydGUgfCBGb3JFYWNoLU9iamVjdCB7 +IFtzdHJpbmddJF8gfSkgfQ0KICAgICAgICAgICAgICAgICRzciA9IEB7IGdlZ2Vuc2VpdGlnR3J1 +cHBlbiA9ICRnZzsgZ2VnZW5zZWl0aWdTdGFuZG9ydGUgPSAkZ3MgfQ0KICAgICAgICAgICAgICAg +ICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAg +ICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29u +JyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2Fk +bWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikg +eyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24g +bmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNP +YmplY3QuUHJvcGVydGllc1snc3RhbmRhcmRSZWNodGUnXSkgeyAkYWRtaW4uc3RhbmRhcmRSZWNo +dGUgPSAkc3IgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1N +ZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N0YW5kYXJkUmVjaHRlJyAtTm90ZVByb3BlcnR5VmFs +dWUgJHNyIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0 +ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAg +cmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJl +c3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9 +DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3RhbmRhcmRyZWNodGUuZ2VhZW5k +ZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 +YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg +ICAgICB9DQoNCiAgICAgICAgICAgICMgRS1NYWlsLVZvcmxhZ2VuOiBPYmpla3QgKG5pY2h0IEFy +cmF5KSDigJQgZWlnZW5lciBIYW5kbGVyLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw +aS9hZG1pbi9lbWFpbHZvcmxhZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAg +ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRi +b2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkp +IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUg +fQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAg +ICAgICAgICAgICAgICMgUmljaC1UZXh0LUJvZHkgamUgVm9ybGFnZSBzZXJ2ZXJzZWl0aWcgYmVy +ZWluaWdlbiAoU3RvcmVkLVhTUykuDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkZGF0 +ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJGRhdGVuLlBTT2JqZWN0 +LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR2ID0gJHAuVmFsdWUNCiAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHYgLWFuZCAkdi5QU09iamVjdC5Q +cm9wZXJ0aWVzWyd0ZXh0J10gLWFuZCAoJHYudGV4dCAtaXMgW3N0cmluZ10pKSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJHYudGV4dCA9IENvbnZlcnRUby1TYWZlUmljaEh0bWwgJHYu +dGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0K +ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMg +PSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7 +IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZW1haWxW +b3JsYWdlbiddKSB7ICRhZG1pbi5lbWFpbFZvcmxhZ2VuID0gJGRhdGVuIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1l +ICdlbWFpbFZvcmxhZ2VuJyAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAg +ICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4g +fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUg +fQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAg +ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikg +NTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5v +dCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMu +bXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3Jp +dGUtTG9nRWludHJhZyAnZW1haWx2b3JsYWdlbi5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAg +ICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9 +DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg +IyBFLU1haWwtVHJpZ2dlci1Lb25maWcgKHBybyBUcmlnZ2VyOiBha3RpdiArIEVtcGZhZW5nZXIt +VGFncykg4oCUDQogICAgICAgICAgICAjIGF1c3NjaGxpZXNzbGljaCBTdGV1ZXJ1bmcgZnVlciBk +ZW4gRnJvbnRlbmQtbWFpbHRvOi1EaXNwYXRjaGVyLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l +cSAnL2FwaS9hZG1pbi9lbWFpbHRyaWdnZXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAg +ICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVz +cG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +Ym9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29u +DQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAg +dHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmls +ZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJl +YWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +bnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBt +c2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydlbWFpbFRyaWdnZXInXSkgeyAkYWRt +aW4uZW1haWxUcmlnZ2VyID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug +eyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdlbWFpbFRyaWdnZXInIC1O +b3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +IFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAg +ICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2sp +IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5z +dGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYW56ID0gaWYgKCRkYXRlbikgeyAo +JGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMgfCBNZWFzdXJlLU9iamVjdCkuQ291bnQgfSBlbHNl +IHsgMCB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZW1haWx0cmlnZ2VyLmdl +YWVuZGVydCcgQHsgYW56YWhsX3RyaWdnZXIgPSAkYW56IH0NCiAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRhZG1pbktl +eXMgPSBAew0KICAgICAgICAgICAgICAgICcvYXBpL2FkbWluL2ZlaWVydGFnZScgICAgICA9ICdm +ZWllcnRhZ2UnDQogICAgICAgICAgICAgICAgJy9hcGkvYWRtaW4vZmVyaWVuJyAgICAgICAgID0g +J2ZlcmllbicNCiAgICAgICAgICAgICAgICAnL2FwaS9hZG1pbi9zb25kZXJ0ZXJtaW5lJyAgPSAn +c29uZGVydGVybWluZScNCiAgICAgICAgICAgICAgICAnL2FwaS9hZG1pbi9zdGFuZG9ydGUnICAg +ICAgPSAnc3RhbmRvcnRlJw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRhZG1pbktl +eXMuQ29udGFpbnNLZXkoJFBhdGgpIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug +J0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJv +ZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkg +eyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9 +DQogICAgICAgICAgICAgICAgJGtleSA9ICRhZG1pbktleXNbJFBhdGhdDQogICAgICAgICAgICAg +ICAgIyBAKC4uLikgZXJ6d2luZ3QgQXJyYXkgYXVjaCBiZWkgMSBFbGVtZW50IChQUyA1LjEgZW50 +cGFja3Qgc29uc3QpLg0KICAgICAgICAgICAgICAgICRib2R5T2JqID0gJGJvZHkgfCBDb252ZXJ0 +RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdGVuID0gW29iamVjdFtdXUAoJGJvZHlPYmop +DQogICAgICAgICAgICAgICAgIyBzb25kZXJ0ZXJtaW5lIHRyYWdlbiBSaWNoLVRleHQgKHRleHQp +IOKAlCBzZXJ2ZXJzZWl0aWcgYmVyZWluaWdlbi4NCiAgICAgICAgICAgICAgICBpZiAoJGtleSAt +ZXEgJ3NvbmRlcnRlcm1pbmUnKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlIGlu +ICRkYXRlbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkZSAtYW5k +ICRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSAtYW5kICgkZS50ZXh0IC1pcyBbc3RyaW5n +XSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZS50ZXh0ID0gQ29udmVydFRvLVNh +ZmVSaWNoSHRtbCAkZS50ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGxvY2tFcmdl +Ym5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAg +JGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicN +CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBA +eyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNi +YXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHdpcGVNc2cgPSBUZXN0LVdpcGVTY2h1 +dHogJGtleSAkZGF0ZW4gJGFkbWluICRSZXF1ZXN0ICRib2R5T2JqDQogICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJHdpcGVNc2cpIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA0 +MDk7IG1zZyA9ICR3aXBlTXNnIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdKEJh +Y2t1cC1BZG1pbkpzb24gJGtleSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4u +UFNPYmplY3QuUHJvcGVydGllc1ska2V5XSkgeyAkYWRtaW4uJGtleSA9ICRkYXRlbiB9DQogICAg +ICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3Bl +cnR5TmFtZSAka2V5IC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91 +dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQog +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAg +ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7 +IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRs +b2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cg +JGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1M +b2dFaW50cmFnICIka2V5LmdlYWVuZGVydCIgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29u +T2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAg +ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn +L2FwaS9hZG1pbi9laW5zdGVsbHVuZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAg ICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3Bv bnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg ICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJv ZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGlu dWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0K -ICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRy -eSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVM -b2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFk -LUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51 -bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNn -ID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAg -IGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZW1haWxUcmlnZ2VyJ10pIHsgJGFkbWlu -LmVtYWlsVHJpZ2dlciA9ICRkYXRlbiB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsg -JGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZW1haWxUcmlnZ2VyJyAtTm90 -ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBX -cml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAg -ICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQt -RXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7 -IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3Rh -dHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGFueiA9IGlmICgkZGF0ZW4pIHsgKCRk -YXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzIHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IH0gZWxzZSB7 -IDAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2VtYWlsdHJpZ2dlci5nZWFl -bmRlcnQnIEB7IGFuemFobF90cmlnZ2VyID0gJGFueiB9DQogICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkYWRtaW5LZXlz -ID0gQHsNCiAgICAgICAgICAgICAgICAnL2FwaS9hZG1pbi9mZWllcnRhZ2UnICAgICAgPSAnZmVp -ZXJ0YWdlJw0KICAgICAgICAgICAgICAgICcvYXBpL2FkbWluL2ZlcmllbicgICAgICAgICA9ICdm -ZXJpZW4nDQogICAgICAgICAgICAgICAgJy9hcGkvYWRtaW4vc29uZGVydGVybWluZScgID0gJ3Nv -bmRlcnRlcm1pbmUnDQogICAgICAgICAgICAgICAgJy9hcGkvYWRtaW4vc3RhbmRvcnRlJyAgICAg -ID0gJ3N0YW5kb3J0ZScNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkYWRtaW5LZXlz -LkNvbnRhaW5zS2V5KCRQYXRoKSAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdL -ZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5 -ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsg -U2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgICRrZXkgPSAkYWRtaW5LZXlzWyRQYXRoXQ0KICAgICAgICAgICAgICAg -ICMgQCguLi4pIGVyendpbmd0IEFycmF5IGF1Y2ggYmVpIDEgRWxlbWVudCAoUFMgNS4xIGVudHBh -Y2t0IHNvbnN0KS4NCiAgICAgICAgICAgICAgICAkYm9keU9iaiA9ICRib2R5IHwgQ29udmVydEZy -b20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXRlbiA9IFtvYmplY3RbXV1AKCRib2R5T2JqKQ0K -ICAgICAgICAgICAgICAgICMgc29uZGVydGVybWluZSB0cmFnZW4gUmljaC1UZXh0ICh0ZXh0KSDi -gJQgc2VydmVyc2VpdGlnIGJlcmVpbmlnZW4uDQogICAgICAgICAgICAgICAgaWYgKCRrZXkgLWVx -ICdzb25kZXJ0ZXJtaW5lJykgew0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZSBpbiAk -ZGF0ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJGUgLWFuZCAk -ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10gLWFuZCAoJGUudGV4dCAtaXMgW3N0cmluZ10p -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUudGV4dCA9IENvbnZlcnRUby1TYWZl -UmljaEh0bWwgJGUudGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJu -aXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRs -b2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQog -ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsg -b2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFy -JyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICR3aXBlTXNnID0gVGVzdC1XaXBlU2NodXR6 -ICRrZXkgJGRhdGVuICRhZG1pbiAkUmVxdWVzdCAkYm9keU9iag0KICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCR3aXBlTXNnKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNDA5 -OyBtc2cgPSAkd2lwZU1zZyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShCYWNr -dXAtQWRtaW5Kc29uICRrZXkpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBT -T2JqZWN0LlByb3BlcnRpZXNbJGtleV0pIHsgJGFkbWluLiRrZXkgPSAkZGF0ZW4gfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0 -eU5hbWUgJGtleSAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAgICAgICAg -ICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQt -TnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAg -ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBj -b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9j -a0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRs -b2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9n -RWludHJhZyAiJGtleS5nZWFlbmRlcnQiIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9i -amVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAg -ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h -cGkvYWRtaW4vZWluc3RlbGx1bmdlbicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAg -ICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk -Ym9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5 -KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAg -ICAgICAgICAgICAgICAjIFJpY2gtVGV4dCBzZXJ2ZXJzZWl0aWcgc2FuaXRpc2llcmVuIOKAlCBk -aWVzZXIgUGZhZCBzcGVpY2hlcnQNCiAgICAgICAgICAgICAgICAjIGluZm90ZXh0L2hpbGZldGV4 -dC9iZWRpZW51bmdzdGV4dGUvaW1wcmVzc3VtL3N1cHBvcnRpbmZvLw0KICAgICAgICAgICAgICAg -ICMgc2NobGllc3NpbmZvLCB3YXIgYWJlciBiaXNoZXIgYW0gU2VydmVyLVNhbml0aXplciB2b3Ji -ZWkgKGRlcg0KICAgICAgICAgICAgICAgICMgbnVyIGFtIFZvbGwtUFVUIC9hcGkvYWRtaW4gaGlu -ZykuIFNjaHV0eiBnZWdlbiBtYW5pcHVsaWVydGVuDQogICAgICAgICAgICAgICAgIyBDbGllbnQg -LyBEaXJla3QtQVBJLUNhbGwuDQogICAgICAgICAgICAgICAgSW52b2tlLUFkbWluUmljaHRleHRT -YW5pdGl6ZSAkZGF0ZW4NCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAg -ICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0g -SW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBz -dGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAg -ICAgICAgICAgICAgICAgICBmb3JlYWNoICgkayBpbiAnamFocicsJ2luZm90ZXh0Jywnc3VwcG9y -dGluZm8nLCdzY2hsaWVzc2luZm8nLCdoaWxmZXRleHQnLCdiZWRpZW51bmdzdGV4dGUnLCdwYXBp -ZXJrb3JiVGFnZUF1ZmJld2FocnVuZycsJ2VtYWlsQXV0b0RvbWFpbicsJ2F2YXRhckdyb2Vzc2Un -LCdpbXByZXNzdW0nLCdzdXBwb3J0TWFpbFRleHQnLCdlZGl0b3JUcmlnZ2VyJykgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1ska10p -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Q -cm9wZXJ0aWVzWyRrXSkgeyAkYWRtaW4uJGsgPSAkZGF0ZW4uJGsgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5 -TmFtZSAkayAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuLiRrIC1Gb3JjZSB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgIyBlZGl0b3JUcmlnZ2VyIGlzdCBlaW4gRW51bSDigJQgZnJlbWRlIFdl -cnRlIChEaXJla3QtQVBJKSBhdWYNCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGVuIERlZmF1 -bHQga2xlbW1lbiwgZGFtaXQgbmllIE11ZWxsIGluIGFkbWluLmpzb24gbGFuZGV0Lg0KICAgICAg -ICAgICAgICAgICAgICAgICAgJGV0VmFsID0gaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVz -WydlZGl0b3JUcmlnZ2VyJ10pIHsgW3N0cmluZ10kYWRtaW4uZWRpdG9yVHJpZ2dlciB9IGVsc2Ug -eyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoQCgncmVjaHRzJywnbGlua3MnLCdt -aXR0ZScsJ2RvcHBlbCcpIC1ub3Rjb250YWlucyAkZXRWYWwpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VkaXRvclRyaWdnZXIn -XSkgeyAkYWRtaW4uZWRpdG9yVHJpZ2dlciA9ICdyZWNodHMnIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAn -ZWRpdG9yVHJpZ2dlcicgLU5vdGVQcm9wZXJ0eVZhbHVlICdyZWNodHMnIC1Gb3JjZSB9DQogICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29u -T2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAg -ICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJl -c3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJy -b3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZWluc3RlbGx1bmdlbi5n -ZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug -QHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAg -ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBQTEFOVU5HID09PT09DQogICAgICAg -ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcp -IHsNCiAgICAgICAgICAgICAgICAkdHh0ID0gUmVhZC1UZXh0RmlsZSAncGxhbnVuZy5qc29uJw0K -ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHR4dCkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyA0MDQgfQ0KICAgICAgICAgICAgICAgIGVs -c2Ugew0KICAgICAgICAgICAgICAgICAgICAjIFZlcnNpb25zLVN0ZW1wZWwgKG10aW1lLVRpY2tz -KSBmdWVyIG9wdGltaXN0aXNjaGUgU3BlcnJlIGRlcw0KICAgICAgICAgICAgICAgICAgICAjIEV4 -Y2VsLUltcG9ydHMuIERlciBDbGllbnQgc2NoaWNrdCBpaG4gYmVpbSBQVVQgenVydWVjay4NCiAg -ICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwcFYgPSBK +ICAgICAgICAgICAgICAgICMgUmljaC1UZXh0IHNlcnZlcnNlaXRpZyBzYW5pdGlzaWVyZW4g4oCU +IGRpZXNlciBQZmFkIHNwZWljaGVydA0KICAgICAgICAgICAgICAgICMgaW5mb3RleHQvaGlsZmV0 +ZXh0L2JlZGllbnVuZ3N0ZXh0ZS9pbXByZXNzdW0vc3VwcG9ydGluZm8vDQogICAgICAgICAgICAg +ICAgIyBzY2hsaWVzc2luZm8sIHdhciBhYmVyIGJpc2hlciBhbSBTZXJ2ZXItU2FuaXRpemVyIHZv +cmJlaSAoZGVyDQogICAgICAgICAgICAgICAgIyBudXIgYW0gVm9sbC1QVVQgL2FwaS9hZG1pbiBo +aW5nKS4gU2NodXR6IGdlZ2VuIG1hbmlwdWxpZXJ0ZW4NCiAgICAgICAgICAgICAgICAjIENsaWVu +dCAvIERpcmVrdC1BUEktQ2FsbC4NCiAgICAgICAgICAgICAgICBJbnZva2UtQWRtaW5SaWNodGV4 +dFNhbml0aXplICRkYXRlbg0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0K +ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMg +PSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7 +IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRrIGluICdqYWhyJywnaW5mb3RleHQnLCdzdXBw +b3J0aW5mbycsJ3NjaGxpZXNzaW5mbycsJ2hpbGZldGV4dCcsJ2JlZGllbnVuZ3N0ZXh0ZScsJ3Bh +cGllcmtvcmJUYWdlQXVmYmV3YWhydW5nJywnZW1haWxBdXRvRG9tYWluJywnYXZhdGFyR3JvZXNz +ZScsJ2ltcHJlc3N1bScsJ3N1cHBvcnRNYWlsVGV4dCcsJ2VkaXRvclRyaWdnZXInKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRr +XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0 +LlByb3BlcnRpZXNbJGtdKSB7ICRhZG1pbi4kayA9ICRkYXRlbi4kayB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVy +dHlOYW1lICRrIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4uJGsgLUZvcmNlIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAjIGVkaXRvclRyaWdnZXIgaXN0IGVpbiBFbnVtIOKAlCBmcmVtZGUg +V2VydGUgKERpcmVrdC1BUEkpIGF1Zg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBkZW4gRGVm +YXVsdCBrbGVtbWVuLCBkYW1pdCBuaWUgTXVlbGwgaW4gYWRtaW4uanNvbiBsYW5kZXQuDQogICAg +ICAgICAgICAgICAgICAgICAgICAkZXRWYWwgPSBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ2VkaXRvclRyaWdnZXInXSkgeyBbc3RyaW5nXSRhZG1pbi5lZGl0b3JUcmlnZ2VyIH0gZWxz +ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAKCdyZWNodHMnLCdsaW5rcycs +J21pdHRlJywnZG9wcGVsJykgLW5vdGNvbnRhaW5zICRldFZhbCkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZWRpdG9yVHJpZ2dl +ciddKSB7ICRhZG1pbi5lZGl0b3JUcmlnZ2VyID0gJ3JlY2h0cycgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1l +ICdlZGl0b3JUcmlnZ2VyJyAtTm90ZVByb3BlcnR5VmFsdWUgJ3JlY2h0cycgLUZvcmNlIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpz +b25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAg +ICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAk +UmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1F +cnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdlaW5zdGVsbHVuZ2Vu +LmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z +ZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K +ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFBMQU5VTkcgPT09PT0NCiAgICAg +ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZycgLWFuZCAkTWV0aG9kIC1lcSAnR0VU +Jykgew0KICAgICAgICAgICAgICAgICR0eHQgPSBSZWFkLVRleHRGaWxlICdwbGFudW5nLmpzb24n +DQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkdHh0KSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIDQwNCB9DQogICAgICAgICAgICAgICAg +ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICMgVmVyc2lvbnMtU3RlbXBlbCAobXRpbWUtVGlj +a3MpIGZ1ZXIgb3B0aW1pc3Rpc2NoZSBTcGVycmUgZGVzDQogICAgICAgICAgICAgICAgICAgICMg +RXhjZWwtSW1wb3J0cy4gRGVyIENsaWVudCBzY2hpY2t0IGlobiBiZWltIFBVVCB6dXJ1ZWNrLg0K +ICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBwViA9 +IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHBwVikgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRSZXNwb25zZS5IZWFkZXJzLkFkZCgnWC1QbGFudW5nLVZlcnNpb24nLCBbc3Ry +aW5nXShHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHBwVikuTGFzdFdyaXRlVGltZVV0Yy5UaWNrcykN +CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7 +fQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25UZXh0ICRSZXNwb25zZSAkdHh0DQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQog +ICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcnIC1hbmQgJE1ldGhvZCAtZXEg +J1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9z +cycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBSZWFkLU1vZGlmeS1Xcml0ZSBh +dG9tYXIgaW4gZGVyIGdsZWljaGVuIFNwZXJyZSB3aWUgZGllIEVpbnplbC0NCiAgICAgICAgICAg +ICAgICAjIHplbGwtRW5kcG9pbnRzLCBkYW1pdCBkZXIgVm9sbC1JbXBvcnQgbmljaHQgbWl0IHBh +cmFsbGVsZW4NCiAgICAgICAgICAgICAgICAjIFplbGwtU2NocmVpYnZvcmdhZW5nZW4gdmVyemFo +bnQuIE9wdGlvbmFsZXIgVmVyc2lvbnMtQ2hlY2sNCiAgICAgICAgICAgICAgICAjIChvcHRpbWlz +dGlzY2hlIE5lYmVubGFldWZpZ2tlaXQpOiBoYXQgZGVyIENsaWVudCBlaW5lbg0KICAgICAgICAg +ICAgICAgICMgSWYtUGxhbnVuZy1WZXJzaW9uLUhlYWRlciBnZXNjaGlja3QgdW5kIHN0aW1tdCBk +ZXIgbmljaHQgbWVocg0KICAgICAgICAgICAgICAgICMgbWl0IGRlbSBha3R1ZWxsZW4gU3RhbmQg +dWViZXJlaW4sIHd1cmRlIHp3aXNjaGVuemVpdGxpY2gNCiAgICAgICAgICAgICAgICAjIGdlc2No +cmllYmVuIC0+IDQwOSwgTklDSFRTIHdpcmQgdWViZXJzY2hyaWViZW4uDQogICAgICAgICAgICAg +ICAgJGVyd2FydGV0ZVZlcnNpb24gPSAkUmVxdWVzdC5IZWFkZXJzWydJZi1QbGFudW5nLVZlcnNp +b24nXQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAg +ICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0 +aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +ZXJ3YXJ0ZXRlVmVyc2lvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcFYgPSBK b2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAg -IGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRwcFYpIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkUmVzcG9uc2UuSGVhZGVycy5BZGQoJ1gtUGxhbnVuZy1WZXJzaW9uJywgW3N0cmlu -Z10oR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRwcFYpLkxhc3RXcml0ZVRpbWVVdGMuVGlja3MpDQog -ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge30N -CiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uVGV4dCAkUmVzcG9uc2UgJHR4dA0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nJyAtYW5kICRNZXRob2QgLWVxICdQ -VVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAg -aWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3Mn -IDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgUmVhZC1Nb2RpZnktV3JpdGUgYXRv -bWFyIGluIGRlciBnbGVpY2hlbiBTcGVycmUgd2llIGRpZSBFaW56ZWwtDQogICAgICAgICAgICAg -ICAgIyB6ZWxsLUVuZHBvaW50cywgZGFtaXQgZGVyIFZvbGwtSW1wb3J0IG5pY2h0IG1pdCBwYXJh -bGxlbGVuDQogICAgICAgICAgICAgICAgIyBaZWxsLVNjaHJlaWJ2b3JnYWVuZ2VuIHZlcnphaG50 -LiBPcHRpb25hbGVyIFZlcnNpb25zLUNoZWNrDQogICAgICAgICAgICAgICAgIyAob3B0aW1pc3Rp -c2NoZSBOZWJlbmxhZXVmaWdrZWl0KTogaGF0IGRlciBDbGllbnQgZWluZW4NCiAgICAgICAgICAg -ICAgICAjIElmLVBsYW51bmctVmVyc2lvbi1IZWFkZXIgZ2VzY2hpY2t0IHVuZCBzdGltbXQgZGVy -IG5pY2h0IG1laHINCiAgICAgICAgICAgICAgICAjIG1pdCBkZW0gYWt0dWVsbGVuIFN0YW5kIHVl -YmVyZWluLCB3dXJkZSB6d2lzY2hlbnplaXRsaWNoDQogICAgICAgICAgICAgICAgIyBnZXNjaHJp -ZWJlbiAtPiA0MDksIE5JQ0hUUyB3aXJkIHVlYmVyc2NocmllYmVuLg0KICAgICAgICAgICAgICAg -ICRlcndhcnRldGVWZXJzaW9uID0gJFJlcXVlc3QuSGVhZGVyc1snSWYtUGxhbnVuZy1WZXJzaW9u -J10NCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAg -ICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhG -aWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGVy -d2FydGV0ZVZlcnNpb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHBWID0gSm9p -bi1QYXRoICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJGFrdHVlbGxlVmVyc2lvbiA9ICcnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHBwVikgeyAkYWt0dWVsbGVWZXJzaW9uID0gW3N0cmlu -Z10oR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRwcFYpLkxhc3RXcml0ZVRpbWVVdGMuVGlja3MgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWt0dWVsbGVWZXJzaW9uIC1uZSAkZXJ3 -YXJ0ZXRlVmVyc2lvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g -QHsgdHlwID0gJ2tvbmZsaWt0JzsgYWt0dWVsbCA9ICRha3R1ZWxsZVZlcnNpb24gfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIFdyaXRlLVRleHRGaWxlICdwbGFudW5nLmpzb24nICRib2R5IHwg -T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAnb2snIH0N -CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAg -ICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUw -MzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRsb2Nr -RXJnZWJuaXMudHlwIC1lcSAna29uZmxpa3QnKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQt -SnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZlaGxlciAg -ICAgICAgICA9ICdrb25mbGlrdCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICAg -ICAgICA9ICdEaWUgUGxhbnVuZyB3dXJkZSB6d2lzY2hlbnplaXRsaWNoIHZvbiBlaW5lciBhbmRl -cmVuIFBlcnNvbiBnZWFlbmRlcnQuJw0KICAgICAgICAgICAgICAgICAgICAgICAgYWt0dWVsbGVW -ZXJzaW9uID0gJGxvY2tFcmdlYm5pcy5ha3R1ZWxsDQogICAgICAgICAgICAgICAgICAgIH0gNDA5 -DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNo -ZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy96ZWxsZScgLWFuZCAkTWV0aG9kIC1lcSAn -UE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAg -ICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZy -YWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYSA9ICRib2R5 -IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXR1bSA9ICRhLmRhdHVtDQog -ICAgICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAg -ICAgICAgICR3ZXJ0ID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3dlcnQnXSkgeyAkYS53 -ZXJ0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAjIE9wdGltaXN0aWMtQ29uY3VycmVu -Y3k6IFdlbm4gZGVyIENsaWVudCBzZWluZW4genVsZXR6dCBnZXNlaGVuZW4NCiAgICAgICAgICAg -ICAgICAjIFdlcnQgbWl0bGllZmVydCwgcHJ1ZWZlbiB3aXIgdm9yIGRlbSBTY2hyZWliZW4gb2Ig -ZGVyIFNlcnZlcg0KICAgICAgICAgICAgICAgICMgbm9jaCBkZW5zZWxiZW4gU3RhbmQgaGF0LiBN -aXNtYXRjaCAtPiA0MDkgbWl0IGFrdHVlbGxlcldlcnQuDQogICAgICAgICAgICAgICAgJGhhdEVy -d2FydGV0ID0gJGEuUFNPYmplY3QuUHJvcGVydGllc1snZXJ3YXJ0ZXRlckFsdGVyV2VydCddDQog -ICAgICAgICAgICAgICAgJGVyd2FydGV0ID0gaWYgKCRoYXRFcndhcnRldCkgeyBbc3RyaW5nXSRh -LmVyd2FydGV0ZXJBbHRlcldlcnQgfSBlbHNlIHsgJG51bGwgfQ0KDQogICAgICAgICAgICAgICAg -IyBFZGl0LVJlY2h0IGdlZ2VuIGFrdHVlbGxlbiBTdGFuZCBwcnVlZmVuIChub2NoIG9obmUgTG9j -ayDigJQgbnVyIExvb2t1cCkNCiAgICAgICAgICAgICAgICAkcGxhbnVuZ0NoZWNrID0gUmVhZC1K -c29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk -cGxhbnVuZ0NoZWNrKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdwbGFudW5nLmpzb24gbmljaHQg -Z2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICR6aWVsUGVyc29uID0g -JG51bGwNCiAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmdDaGVjay5wZXJzb25lbikgew0KICAg -ICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHAgaW4gQCgkcGxhbnVuZ0NoZWNrLnBlcnNvbmVu -KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddJHBwLmlkIC1lcSAkcGVy -c29uSWQpIHsgJHppZWxQZXJzb24gPSAkcHA7IGJyZWFrIH0NCiAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJm -WmVsbGVFZGl0aWVyZW4gJHppZWxQZXJzb24pKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQt -RXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgZnVlciBkaWVzZSBaZWxsZScgNDAz -OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICMgUmVhZC1N -b2RpZnktV3JpdGUgYXRvbWFyIGluIExvY2s6DQogICAgICAgICAgICAgICAgJGNsaWVudFF1aXR0 -aWVydCA9ICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd1bnRlcmJlc2V0enVuZ1NjaGljaHQnXSAt -YW5kICRhLnVudGVyYmVzZXR6dW5nU2NoaWNodCkNCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2Vi -bmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAk -bG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5q -c29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVuZykgeyBy -ZXR1cm4gQHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0gJ3BsYW51bmcuanNvbiBu -aWNodCBnZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxh -bnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRwbGFudW5nIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZWlu -dHJhZWdlJyAtTm90ZVByb3BlcnR5VmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIC1Gb3JjZQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1u -b3QgJHBsYW51bmcuZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJGRhdHVtXSkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRyYWVnZSB8IEFkZC1NZW1iZXIg -LU5vdGVQcm9wZXJ0eU5hbWUgJGRhdHVtIC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3LU9iamVjdCBQ -U09iamVjdCkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAkYWx0ZXIgPSAnJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFu -dW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7ICRh -bHRlciA9IFtzdHJpbmddJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS4kcGVyc29uSWQgfQ0KDQog -ICAgICAgICAgICAgICAgICAgICAgICAjIE9wdGltaXN0aWMtQ29uY3VycmVuY3ktQ2hlY2sNCiAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgkaGF0RXJ3YXJ0ZXQgLWFuZCAkZXJ3YXJ0ZXQgLW5l -ICRhbHRlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAn -a29uZmxpa3QnOyBha3R1ZWxsID0gJGFsdGVyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0N -Cg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBGdWVocnVuZ3MtVW50ZXJiZXNldHp1bmcgKFZl -cmJpbmRsaWNoa2VpdHNmZW5zdGVyKSAtIGdsZWljaGVzIFByaW56aXAgd2llIHZvcmhlciwNCiAg -ICAgICAgICAgICAgICAgICAgICAgICMgamV0enQgYWJlciBnZWdlbiBkZW4gZ2Vsb2NrdGVuIFN0 -YW5kLg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGNsaWVudFF1aXR0aWVydCAt -YW5kIChUZXN0LUluVmVyYmluZGxpY2hrZWl0ICRkYXR1bSkpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkYWx0ZVNjaGljaHQgPSBHZXQtRnVlaHJ1bmdzU2NoaWNodExldHRlciAkYWx0 -ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV1ZVNjaGljaHQgPSBHZXQtRnVlaHJ1 -bmdzU2NoaWNodExldHRlciAkd2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -YWx0ZVNjaGljaHQgLWFuZCAkYWx0ZVNjaGljaHQgLW5lICRuZXVlU2NoaWNodCkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkYWt0dWVsbENvdW50ID0gR2V0LUZ1ZWhydW5nc0Nv -dW50ICRwbGFudW5nICRkYXR1bSAkYWx0ZVNjaGljaHQNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCgkYWt0dWVsbENvdW50IC0gMSkgLWx0IDIpIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAndW50ZXJiZXNldHp1bmcnOyBz -Y2hpY2h0ID0gJGFsdGVTY2hpY2h0OyBha3R1ZWxsQ291bnQgPSAkYWt0dWVsbENvdW50OyBhbHRl -ciA9ICRhbHRlciB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICR3ZXJ0IC1vciBbc3RyaW5nXTo6SXNOdWxsT3JX -aGl0ZVNwYWNlKCR3ZXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGxh -bnVuZy5laW50cmFlZ2UuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgew0K +ICAgICAkYWt0dWVsbGVWZXJzaW9uID0gJycNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcHBWKSB7ICRha3R1ZWxsZVZlcnNpb24gPSBbc3Ry +aW5nXShHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHBwVikuTGFzdFdyaXRlVGltZVV0Yy5UaWNrcyB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRha3R1ZWxsZVZlcnNpb24gLW5lICRl +cndhcnRldGVWZXJzaW9uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy +biBAeyB0eXAgPSAna29uZmxpa3QnOyBha3R1ZWxsID0gJGFrdHVlbGxlVmVyc2lvbiB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgV3JpdGUtVGV4dEZpbGUgJ3BsYW51bmcuanNvbicgJGJvZHkg +fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdvaycg +fQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAg +ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikg +NTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJGxv +Y2tFcmdlYm5pcy50eXAgLWVxICdrb25mbGlrdCcpIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu +ZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVy +ICAgICAgICAgID0gJ2tvbmZsaWt0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgbWVsZHVuZyAg +ICAgICAgID0gJ0RpZSBQbGFudW5nIHd1cmRlIHp3aXNjaGVuemVpdGxpY2ggdm9uIGVpbmVyIGFu +ZGVyZW4gUGVyc29uIGdlYWVuZGVydC4nDQogICAgICAgICAgICAgICAgICAgICAgICBha3R1ZWxs +ZVZlcnNpb24gPSAkbG9ja0VyZ2VibmlzLmFrdHVlbGwNCiAgICAgICAgICAgICAgICAgICAgfSA0 +MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVp +Y2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL3plbGxlJyAtYW5kICRNZXRob2QgLWVx +ICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQog +ICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0Fu +ZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJv +ZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdHVtID0gJGEuZGF0dW0N +CiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbc3RyaW5nXSRhLnBlcnNvbklkDQogICAgICAg +ICAgICAgICAgJHdlcnQgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snd2VydCddKSB7ICRh +LndlcnQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICMgT3B0aW1pc3RpYy1Db25jdXJy +ZW5jeTogV2VubiBkZXIgQ2xpZW50IHNlaW5lbiB6dWxldHp0IGdlc2VoZW5lbg0KICAgICAgICAg +ICAgICAgICMgV2VydCBtaXRsaWVmZXJ0LCBwcnVlZmVuIHdpciB2b3IgZGVtIFNjaHJlaWJlbiBv +YiBkZXIgU2VydmVyDQogICAgICAgICAgICAgICAgIyBub2NoIGRlbnNlbGJlbiBTdGFuZCBoYXQu +IE1pc21hdGNoIC0+IDQwOSBtaXQgYWt0dWVsbGVyV2VydC4NCiAgICAgICAgICAgICAgICAkaGF0 +RXJ3YXJ0ZXQgPSAkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlcndhcnRldGVyQWx0ZXJXZXJ0J10N +CiAgICAgICAgICAgICAgICAkZXJ3YXJ0ZXQgPSBpZiAoJGhhdEVyd2FydGV0KSB7IFtzdHJpbmdd +JGEuZXJ3YXJ0ZXRlckFsdGVyV2VydCB9IGVsc2UgeyAkbnVsbCB9DQoNCiAgICAgICAgICAgICAg +ICAjIEVkaXQtUmVjaHQgZ2VnZW4gYWt0dWVsbGVuIFN0YW5kIHBydWVmZW4gKG5vY2ggb2huZSBM +b2NrIOKAlCBudXIgTG9va3VwKQ0KICAgICAgICAgICAgICAgICRwbGFudW5nQ2hlY2sgPSBSZWFk +LUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx +ICRwbGFudW5nQ2hlY2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ3BsYW51bmcuanNvbiBuaWNo +dCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHppZWxQZXJzb24g +PSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZ0NoZWNrLnBlcnNvbmVuKSB7DQog +ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcCBpbiBAKCRwbGFudW5nQ2hlY2sucGVyc29u +ZW4pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ10kcHAuaWQgLWVxICRw +ZXJzb25JZCkgeyAkemllbFBlcnNvbiA9ICRwcDsgYnJlYWsgfQ0KICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURh +cmZaZWxsZUVkaXRpZXJlbiAkemllbFBlcnNvbikpIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyBmdWVyIGRpZXNlIFplbGxlJyA0 +MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIyBSZWFk +LU1vZGlmeS1Xcml0ZSBhdG9tYXIgaW4gTG9jazoNCiAgICAgICAgICAgICAgICAkY2xpZW50UXVp +dHRpZXJ0ID0gKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3VudGVyYmVzZXR6dW5nU2NoaWNodCdd +IC1hbmQgJGEudW50ZXJiZXNldHp1bmdTY2hpY2h0KQ0KICAgICAgICAgICAgICAgICRsb2NrRXJn +ZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAg +ICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5n +Lmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRwbGFudW5nKSB7 +IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cgPSAncGxhbnVuZy5qc29u +IG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRw +bGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVnZSddKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJHBsYW51bmcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdl +aW50cmFlZ2UnIC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkgLUZvcmNl +DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +LW5vdCAkcGxhbnVuZy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlIHwgQWRkLU1lbWJl +ciAtTm90ZVByb3BlcnR5TmFtZSAkZGF0dW0gLU5vdGVQcm9wZXJ0eVZhbHVlIChOZXctT2JqZWN0 +IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICRhbHRlciA9ICcnDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBs +YW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsg +JGFsdGVyID0gW3N0cmluZ10kcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLiRwZXJzb25JZCB9DQoN +CiAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW1pc3RpYy1Db25jdXJyZW5jeS1DaGVjaw0K +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRoYXRFcndhcnRldCAtYW5kICRlcndhcnRldCAt +bmUgJGFsdGVyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9 +ICdrb25mbGlrdCc7IGFrdHVlbGwgPSAkYWx0ZXIgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAjIEZ1ZWhydW5ncy1VbnRlcmJlc2V0enVuZyAo +VmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXIpIC0gZ2xlaWNoZXMgUHJpbnppcCB3aWUgdm9yaGVyLA0K +ICAgICAgICAgICAgICAgICAgICAgICAgIyBqZXR6dCBhYmVyIGdlZ2VuIGRlbiBnZWxvY2t0ZW4g +U3RhbmQuDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkY2xpZW50UXVpdHRpZXJ0 +IC1hbmQgKFRlc3QtSW5WZXJiaW5kbGljaGtlaXQgJGRhdHVtKSkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRhbHRlU2NoaWNodCA9IEdldC1GdWVocnVuZ3NTY2hpY2h0TGV0dGVyICRh +bHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXVlU2NoaWNodCA9IEdldC1GdWVo +cnVuZ3NTY2hpY2h0TGV0dGVyICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRhbHRlU2NoaWNodCAtYW5kICRhbHRlU2NoaWNodCAtbmUgJG5ldWVTY2hpY2h0KSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRha3R1ZWxsQ291bnQgPSBHZXQtRnVlaHJ1bmdz +Q291bnQgJHBsYW51bmcgJGRhdHVtICRhbHRlU2NoaWNodA0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoKCRha3R1ZWxsQ291bnQgLSAxKSAtbHQgMikgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICd1bnRlcmJlc2V0enVuZyc7 +IHNjaGljaHQgPSAkYWx0ZVNjaGljaHQ7IGFrdHVlbGxDb3VudCA9ICRha3R1ZWxsQ291bnQ7IGFs +dGVyID0gJGFsdGVyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHdlcnQgLW9yIFtzdHJpbmddOjpJc051bGxP +cldoaXRlU3BhY2UoJHdlcnQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRw +bGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0 +dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNvbklkKQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmpl +Y3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7ICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uJHBl +cnNvbklkID0gJHdlcnQgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcGxh +bnVuZy5laW50cmFlZ2UuJGRhdHVtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGVy +c29uSWQgLU5vdGVQcm9wZXJ0eVZhbHVlICR3ZXJ0IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFu +dW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJl +dHVybiBAeyB0eXAgPSAnb2snOyBhbHRlciA9ICRhbHRlciB9DQogICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F +cnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAg +ICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKCRsb2NrRXJnZWJuaXMudHlwIC1lcSAn +ZXJyb3InKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJn +ZWJuaXMuY29kZTsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgkbG9ja0VyZ2Vibmlz +LnR5cCAtZXEgJ2tvbmZsaWt0Jykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl +Y3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAgICAgID0g +J2tvbmZsaWt0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgbWVsZHVuZyAgICAgICA9ICdEaWVz +ZSBaZWxsZSB3dXJkZSBpbnp3aXNjaGVuIGdlYWVuZGVydC4nDQogICAgICAgICAgICAgICAgICAg +ICAgICBha3R1ZWxsZXJXZXJ0ID0gJGxvY2tFcmdlYm5pcy5ha3R1ZWxsDQogICAgICAgICAgICAg +ICAgICAgIH0gNDA5DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbG9ja0VyZ2VibmlzLnR5cCAtZXEgJ3VudGVyYmVz +ZXR6dW5nJykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl +IEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAgICAgICA9ICdGdWVocnVuZ3Mt +VW50ZXJiZXNldHp1bmcnDQogICAgICAgICAgICAgICAgICAgICAgICBrb25mbGlrdFR5cCAgICA9 +ICd1bnRlcmJlc2V0enVuZycNCiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGljaHQgICAgICAg +ID0gJGxvY2tFcmdlYm5pcy5zY2hpY2h0DQogICAgICAgICAgICAgICAgICAgICAgICBha3R1ZWxs +Q291bnQgICA9ICRsb2NrRXJnZWJuaXMuYWt0dWVsbENvdW50DQogICAgICAgICAgICAgICAgICAg +ICAgICBhbHRlcldlcnQgICAgICA9ICRsb2NrRXJnZWJuaXMuYWx0ZXINCiAgICAgICAgICAgICAg +ICAgICAgICAgIG5ldWVyV2VydCAgICAgID0gJHdlcnQNCiAgICAgICAgICAgICAgICAgICAgfSA0 +MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAg +ICAgICAgICAgICAgICAkYWx0ZXIgPSAkbG9ja0VyZ2VibmlzLmFsdGVyDQogICAgICAgICAgICAg +ICAgV3JpdGUtTG9nRWludHJhZyAnemVsbGUuZ2VhZW5kZXJ0JyBAeyBkYXR1bSA9ICRkYXR1bTsg +cGVyc29uSWQgPSAkcGVyc29uSWQ7IGFsdGVyV2VydCA9ICIkYWx0ZXIiOyBuZXVlcldlcnQgPSAi +JHdlcnQiIH0NCiAgICAgICAgICAgICAgICAjIExpdmUtU3luYzogQ2hhbmdlLUxvZyBmdWVyIGRl +biBzeW5jLXdvcmtlci4NCiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRWludHJhZyAnemVs +bGUnIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJGRhdHVtDQogICAgICAgICAg +ICAgICAgICAgIHBlcnNvbklkID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIGFsdCAg +ICAgID0gIiRhbHRlciINCiAgICAgICAgICAgICAgICAgICAgbmV1ICAgICAgPSAiJHdlcnQiDQog +ICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIyBVbnRlcmJlc2V0enVuZ3MtUXVp +dHR1bmc6IGV4dHJhIExvZ2J1Y2gtRWludHJhZywgZGVuIEZhY2hhdWZzaWNodC9XTCBzZWhlbiBz +b2xsDQogICAgICAgICAgICAgICAgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3VudGVyYmVz +ZXR6dW5nU2NoaWNodCddIC1hbmQgJGEudW50ZXJiZXNldHp1bmdTY2hpY2h0KSB7DQogICAgICAg +ICAgICAgICAgICAgICRzY2hpY2h0TGV0dGVyID0gW3N0cmluZ10kYS51bnRlcmJlc2V0enVuZ1Nj +aGljaHQNCiAgICAgICAgICAgICAgICAgICAgJHNjaGljaHRUZXh0ID0gc3dpdGNoICgkc2NoaWNo +dExldHRlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJ0YnIHsgJ0ZydWVoc2NoaWNodCcg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgJ1MnIHsgJ1NwYWV0c2NoaWNodCcgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgJ04nIHsgJ05hY2h0c2NoaWNodCcgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgZGVmYXVsdCB7ICRzY2hpY2h0TGV0dGVyIH0NCiAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAkb2VUeHQgPSAnJw0KICAgICAgICAgICAgICAgICAgICBp +ZiAoJHppZWxQZXJzb24gLWFuZCAkemllbFBlcnNvbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydvZSdd +KSB7ICRvZVR4dCA9IFtzdHJpbmddJHppZWxQZXJzb24ub2UgfQ0KICAgICAgICAgICAgICAgICAg +ICAkbmFtZVR4dCA9ICcnDQogICAgICAgICAgICAgICAgICAgIGlmICgkemllbFBlcnNvbikgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgJHZuID0gJyc7IGlmICgkemllbFBlcnNvbi5QU09iamVj +dC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsgJHZuID0gW3N0cmluZ10kemllbFBlcnNvbi52b3Ju +YW1lIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lVHh0ID0gKCIkdm4gJCgkemllbFBl +cnNvbi5uYW1lKSIpLlRyaW0oKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3VudGVyYmVzZXR6dW5nLnF1aXR0aWVydCcgQHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgcGVyc29uSWQgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICBw +ZXJzb24gICAgPSAkbmFtZVR4dA0KICAgICAgICAgICAgICAgICAgICAgICAgb2UgICAgICAgID0g +JG9lVHh0DQogICAgICAgICAgICAgICAgICAgICAgICBzY2hpY2h0ICAgPSAkc2NoaWNodFRleHQN +CiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyV2VydCA9ICIkYWx0ZXIiDQogICAgICAgICAg +ICAgICAgICAgICAgICBuZXVlcldlcnQgPSAiJHdlcnQiDQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBQaGFzZSBELjMgKDIwMjYtMDUt +MjEpOiB3ZW5uIGRpZSBLcmFua21lbGR1bmcgenVydWVja2dlbm9tbWVuDQogICAgICAgICAgICAg +ICAgIyB3aXJkIChhbHRlciBXZXJ0IHdhciBrci9LdXIsIG5ldWVyIFdlcnQgaXN0IGVzIG5pY2h0 +IG1laHIpLA0KICAgICAgICAgICAgICAgICMgZW50ZmVybmVuIHdpciBkZW4gb2ZmZW5lbiBIaW53 +ZWlzIOKAlCBzb25zdCBpc3QgZXIgYmlzIHp1DQogICAgICAgICAgICAgICAgIyAzMCBUYWdlIHBy +YWVzZW50LCBvYndvaGwgZGFzIEVyZWlnbmlzIGVybGVkaWd0IGlzdC4NCiAgICAgICAgICAgICAg +ICBpZiAoKCRhbHRlciAtZXEgJ2tyJyAtb3IgJGFsdGVyIC1lcSAnS3VyJykgLWFuZCAoJHdlcnQg +LW5lICdrcicgLWFuZCAkd2VydCAtbmUgJ0t1cicpKSB7DQogICAgICAgICAgICAgICAgICAgIFJl +bW92ZS1PZmZlbmVLcmFua21lbGR1bmdzSGlud2Vpc2UgJHBlcnNvbklkICRkYXR1bQ0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIEhpbndlaXMtVHJpZ2dlcjogS3JhbmttZWxk +dW5nIGVyemV1Z3QgZWluZW4gSW4tQXBwLUhpbndlaXMNCiAgICAgICAgICAgICAgICAjIGZ1ZXIg +U1UgKyBHZXNhbXR2ZXJhbnR3b3J0bGljaGUgKFNjaGljaHRsb2NoIGltIE1vZGFsIGRpcmVrdA0K +ICAgICAgICAgICAgICAgICMgYWRyZXNzaWVyYmFyIHZpYSAiS2FuZGlkYXRlbiBhbnNjaHJlaWJl +biItQnV0dG9uKS4NCiAgICAgICAgICAgICAgICBpZiAoJHdlcnQgLWVxICdrcicgLW9yICR3ZXJ0 +IC1lcSAnS3VyJykgew0KICAgICAgICAgICAgICAgICAgICAka21OYW1lID0gJycNCiAgICAgICAg +ICAgICAgICAgICAgaWYgKCR6aWVsUGVyc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAk +a3ZuID0gJyc7IGlmICgkemllbFBlcnNvbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10p +IHsgJGt2biA9IFtzdHJpbmddJHppZWxQZXJzb24udm9ybmFtZSB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAka21OYW1lID0gKCIka3ZuICQoJHppZWxQZXJzb24ubmFtZSkiKS5UcmltKCkNCiAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAka21HcnVwcGUgPSAnJw0K +ICAgICAgICAgICAgICAgICAgICBpZiAoJHppZWxQZXJzb24gLWFuZCAkemllbFBlcnNvbi5QU09i +amVjdC5Qcm9wZXJ0aWVzWydncnVwcGUnXSkgeyAka21HcnVwcGUgPSBbc3RyaW5nXSR6aWVsUGVy +c29uLmdydXBwZSB9DQogICAgICAgICAgICAgICAgICAgICRrbVNjaGljaHRMZXR0ZXIgPSAnJw0K +ICAgICAgICAgICAgICAgICAgICBpZiAoIiRhbHRlciIgLW1hdGNoICdeKFtGU05dKS0nKSB7ICRr +bVNjaGljaHRMZXR0ZXIgPSAkTWF0Y2hlc1sxXSB9DQogICAgICAgICAgICAgICAgICAgIE5ldy1I +aW53ZWlzICdrcmFua21lbGR1bmcnIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAg +ICAgcGVyc29uX2lkICAgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICBwZXJz +b25fbmFtZSAgPSAka21OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICBncnVwcGUgICAgICAg +PSAka21HcnVwcGUNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAgICA9ICRkYXR1 +bQ0KICAgICAgICAgICAgICAgICAgICAgICAgc2NoaWNodENvZGUgID0gIiRhbHRlciINCiAgICAg +ICAgICAgICAgICAgICAgICAgIHNjaGljaHRLdXJ6ICA9ICRrbVNjaGljaHRMZXR0ZXINCiAgICAg +ICAgICAgICAgICAgICAgICAgIGNvZGUgICAgICAgICA9ICIkd2VydCINCiAgICAgICAgICAgICAg +ICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1 +cyA9ICdnZXNwZWljaGVydCc7IGFsdGVyV2VydCA9ICRhbHRlciB9DQogICAgICAgICAgICAgICAg +Y29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgQnVsay1TY2hyZWliZW4gbWVo +cmVyZXIgWmVsbGVuIGluIGVpbmVtIFNjaHJpdHQg4oCUIGF1ZmdlcnVmZW4NCiAgICAgICAgICAg +ICMgdm9tIEV4Y2VsLUZ1ZWxsLUdyaWZmLiBTcGFydCBwcm8gRHJhZyBiaXMgenUgMTAwKyBIVFRQ +LVJvdW5kdHJpcHMNCiAgICAgICAgICAgICMgdW5kIERhdGVpLVNjaHJlaWJ2b3JnYWVuZ2UuIFBl +cm1pc3Npb24tQ2hlY2sgcHJvIFplbGxlLCBlaW4NCiAgICAgICAgICAgICMgZWluemlnZXIgTG9n +YnVjaC1FaW50cmFnIGZhc3N0IGRpZSBBa3Rpb24genVzYW1tZW4uDQogICAgICAgICAgICBpZiAo +JFBhdGggLWVxICcvYXBpL3BsYW51bmcvemVsbGVuLWJ1bGsnIC1hbmQgJE1ldGhvZCAtZXEgJ1BP +U1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFn +ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8 +IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0gQCgkYS5laW50 +cmFlZ2UpDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGVpbnRyYWVnZSAtb3IgJGVpbnRyYWVn +ZS5Db3VudCAtZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl +c3BvbnNlIEB7IHN0YXR1cyA9ICdvayc7IG9rID0gMDsgYWJnZWxlaG50ID0gQCgpIH0NCiAgICAg +ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgIyBSZWFkLU1vZGlmeS1Xcml0ZSBhdG9tYXIgaW4gZGVyIERhdGVpLVNwZXJyZSDigJQgd2ll +IGRlciBFaW56ZWwtDQogICAgICAgICAgICAgICAgIyB6ZWxsLUVuZHBvaW50LiBPaG5lIExvY2sg +a2FubiBlaW4gcGFyYWxsZWxlciBFZGl0L0J1bGsgKGF1Y2gNCiAgICAgICAgICAgICAgICAjIGF1 +cyBlaW5lbSBhbmRlcmVuIFNlcnZlci1Qcm96ZXNzIGF1ZiBkZW1zZWxiZW4gU2hhcmUpIGRlbg0K +ICAgICAgICAgICAgICAgICMgZ2VyYWRlIGdlbGVzZW5lbiBHZXNhbXRzdGFuZCB1ZWJlcnNjaHJl +aWJlbiAoTG9zdCBVcGRhdGUgdWViZXINCiAgICAgICAgICAgICAgICAjIGRpZSBHQU5aRSBEYXRl +aSkuIExvZ2J1Y2ggKyBMaXZlLVN5bmMgbGF1ZmVuIE5BQ0ggZGVyIFNwZXJyZSwNCiAgICAgICAg +ICAgICAgICAjIHVtIGdlc2NoYWNodGVsdGUgTG9ja3MgKGxvZ2J1Y2gvY2hhbmdlcykgenUgdmVy +bWVpZGVuLg0KICAgICAgICAgICAgICAgICRyZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRy +eSB7DQogICAgICAgICAgICAgICAgICAgICRyZXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFu +dW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29u +T2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwg +LWVxICRwbGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cg +PSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgtbm90ICRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVnZSddKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgfCBBZGQtTWVtYmVyIC1Ob3Rl +UHJvcGVydHlOYW1lICdlaW50cmFlZ2UnIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW1BTQ3VzdG9tT2Jq +ZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAjIFBlcnNvbmVuLU1hcCBlaW5tYWwgYXVmYmF1ZW4g4oCUIFBlcm1pc3Npb24t +Q2hlY2sgcHJvDQogICAgICAgICAgICAgICAgICAgICAgICAjIEVpbnRyYWcgb2huZSBSZXNjYW4g +ZGVyIFBlcnNvbmVubGlzdGUuDQogICAgICAgICAgICAgICAgICAgICAgICAkcGVyc29uTWFwID0g +QHt9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcucGVyc29uZW4pIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHAgaW4gQCgkcGxhbnVuZy5wZXJz +b25lbikpIHsgJHBlcnNvbk1hcFtbc3RyaW5nXSRwcC5pZF0gPSAkcHAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJG9rQ291bnQgPSAwDQogICAg +ICAgICAgICAgICAgICAgICAgICAkYWJnZWxlaG50ID0gQCgpDQogICAgICAgICAgICAgICAgICAg +ICAgICAkZXJzdGVzUGlkID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICRlcnN0ZXNX +ZXJ0ID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICRlcnN0ZXNEYXR1bSA9ICRudWxs +DQogICAgICAgICAgICAgICAgICAgICAgICAkbGV0enRlc0RhdHVtID0gJG51bGwNCiAgICAgICAg +ICAgICAgICAgICAgICAgICMgYWx0ZVdlcnRlLU1hcCBmdWVyIExvZ2J1Y2gtUmVzdG9yZTogS2V5 +ID0gIjxkYXR1bT58PHBlcnNvbklkPiIuDQogICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZVdl +cnRlID0gQHt9DQogICAgICAgICAgICAgICAgICAgICAgICAjIHN5bmNFaW50cmFlZ2U6IHBybyBn +ZW11dGllcnRlciBaZWxsZSBlaW4gRWludHJhZyBmdWVyDQogICAgICAgICAgICAgICAgICAgICAg +ICAjIGRlbiBMaXZlLVN5bmMtQ2hhbmdlLUxvZyAoRm9ybWF0IHdpZSBTaW5nbGUtQ2VsbCkuDQog +ICAgICAgICAgICAgICAgICAgICAgICAkc3luY0VpbnRyYWVnZSA9IE5ldy1PYmplY3QgU3lzdGVt +LkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAo +JGUgaW4gJGVpbnRyYWVnZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXR1bSA9 +IFtzdHJpbmddJGUuZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGVyc29uSWQg +PSBbc3RyaW5nXSRlLnBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdlcnQg +PSBpZiAoJGUuUFNPYmplY3QuUHJvcGVydGllc1snd2VydCddIC1hbmQgJG51bGwgLW5lICRlLndl +cnQpIHsgW3N0cmluZ10kZS53ZXJ0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAkZGF0dW0gLW9yIC1ub3QgJHBlcnNvbklkKSB7ICRhYmdlbGVobnQg +Kz0gQHsgZGF0dW0gPSAkZGF0dW07IHBlcnNvbklkID0gJHBlcnNvbklkOyBncnVuZCA9ICd1bnZv +bGxzdGFlbmRpZycgfTsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6 +aWVsUGVyc29uID0gJHBlcnNvbk1hcFskcGVyc29uSWRdDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlplbGxlRWRpdGllcmVuICR6aWVsUGVyc29uKSkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWJnZWxlaG50ICs9IEB7IGRhdHVtID0g +JGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgZ3J1bmQgPSAna2Vpbi1yZWNodCcgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVu +Zy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRyYWVnZSB8IEFkZC1NZW1iZXIgLU5vdGVQ +cm9wZXJ0eU5hbWUgJGRhdHVtIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW1BTQ3VzdG9tT2JqZWN0XUB7 +fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICMgQWx0ZW4gV2VydCBtZXJrZW4gQkVWT1Igd2lyIGRpZSBaZWxsZSB1ZWJl +cnNjaHJlaWJlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZXJXZXJ0ID0gJycN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1 +bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJGFsdGVyV2VydCA9IFtzdHJpbmddJHBsYW51bmcuZWludHJhZWdlLiRkYXR1 +bS4kcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZVsoInswfXx7MX0iIC1mICRkYXR1bSwgJHBlcnNvbklk +KV0gPSAkYWx0ZXJXZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmdd +OjpJc051bGxPckVtcHR5KCR3ZXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJz +b25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVp +bnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNvbklkKQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5n +LmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVt -LlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRwZXJzb25JZCkNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLlBTT2JqZWN0 -LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgeyAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLiRwZXJz -b25JZCA9ICR3ZXJ0IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJHBsYW51 -bmcuZWludHJhZWdlLiRkYXR1bSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHBlcnNv -bklkIC1Ob3RlUHJvcGVydHlWYWx1ZSAkd2VydCAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVu -Zy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1 -cm4gQHsgdHlwID0gJ29rJzsgYWx0ZXIgPSAkYWx0ZXIgfQ0KICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy -b3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAg -ICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmICgkbG9ja0VyZ2VibmlzLnR5cCAtZXEgJ2Vy -cm9yJykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2Vi -bmlzLmNvZGU7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBpZiAoJGxvY2tFcmdlYm5pcy50 -eXAgLWVxICdrb25mbGlrdCcpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 -ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgICAgICA9ICdr -b25mbGlrdCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICAgICAgPSAnRGllc2Ug -WmVsbGUgd3VyZGUgaW56d2lzY2hlbiBnZWFlbmRlcnQuJw0KICAgICAgICAgICAgICAgICAgICAg -ICAgYWt0dWVsbGVyV2VydCA9ICRsb2NrRXJnZWJuaXMuYWt0dWVsbA0KICAgICAgICAgICAgICAg -ICAgICB9IDQwOQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICBpZiAoJGxvY2tFcmdlYm5pcy50eXAgLWVxICd1bnRlcmJlc2V0 -enVuZycpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA -ew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgICAgICAgPSAnRnVlaHJ1bmdzLVVu -dGVyYmVzZXR6dW5nJw0KICAgICAgICAgICAgICAgICAgICAgICAga29uZmxpa3RUeXAgICAgPSAn -dW50ZXJiZXNldHp1bmcnDQogICAgICAgICAgICAgICAgICAgICAgICBzY2hpY2h0ICAgICAgICA9 -ICRsb2NrRXJnZWJuaXMuc2NoaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgYWt0dWVsbENv -dW50ICAgPSAkbG9ja0VyZ2VibmlzLmFrdHVlbGxDb3VudA0KICAgICAgICAgICAgICAgICAgICAg -ICAgYWx0ZXJXZXJ0ICAgICAgPSAkbG9ja0VyZ2VibmlzLmFsdGVyDQogICAgICAgICAgICAgICAg -ICAgICAgICBuZXVlcldlcnQgICAgICA9ICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgIH0gNDA5 -DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAg -ICAgICAgICAgICAgJGFsdGVyID0gJGxvY2tFcmdlYm5pcy5hbHRlcg0KICAgICAgICAgICAgICAg -IFdyaXRlLUxvZ0VpbnRyYWcgJ3plbGxlLmdlYWVuZGVydCcgQHsgZGF0dW0gPSAkZGF0dW07IHBl -cnNvbklkID0gJHBlcnNvbklkOyBhbHRlcldlcnQgPSAiJGFsdGVyIjsgbmV1ZXJXZXJ0ID0gIiR3 -ZXJ0IiB9DQogICAgICAgICAgICAgICAgIyBMaXZlLVN5bmM6IENoYW5nZS1Mb2cgZnVlciBkZW4g -c3luYy13b3JrZXIuDQogICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VpbnRyYWcgJ3plbGxl -JyBAew0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICA9ICRkYXR1bQ0KICAgICAgICAgICAg -ICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBhbHQgICAg -ICA9ICIkYWx0ZXIiDQogICAgICAgICAgICAgICAgICAgIG5ldSAgICAgID0gIiR3ZXJ0Ig0KICAg -ICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICMgVW50ZXJiZXNldHp1bmdzLVF1aXR0 -dW5nOiBleHRyYSBMb2didWNoLUVpbnRyYWcsIGRlbiBGYWNoYXVmc2ljaHQvV0wgc2VoZW4gc29s -bA0KICAgICAgICAgICAgICAgIGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd1bnRlcmJlc2V0 -enVuZ1NjaGljaHQnXSAtYW5kICRhLnVudGVyYmVzZXR6dW5nU2NoaWNodCkgew0KICAgICAgICAg -ICAgICAgICAgICAkc2NoaWNodExldHRlciA9IFtzdHJpbmddJGEudW50ZXJiZXNldHp1bmdTY2hp -Y2h0DQogICAgICAgICAgICAgICAgICAgICRzY2hpY2h0VGV4dCA9IHN3aXRjaCAoJHNjaGljaHRM -ZXR0ZXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICdGJyB7ICdGcnVlaHNjaGljaHQnIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICdTJyB7ICdTcGFldHNjaGljaHQnIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICdOJyB7ICdOYWNodHNjaGljaHQnIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgIGRlZmF1bHQgeyAkc2NoaWNodExldHRlciB9DQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgJG9lVHh0ID0gJycNCiAgICAgICAgICAgICAgICAgICAgaWYg -KCR6aWVsUGVyc29uIC1hbmQgJHppZWxQZXJzb24uUFNPYmplY3QuUHJvcGVydGllc1snb2UnXSkg -eyAkb2VUeHQgPSBbc3RyaW5nXSR6aWVsUGVyc29uLm9lIH0NCiAgICAgICAgICAgICAgICAgICAg -JG5hbWVUeHQgPSAnJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHppZWxQZXJzb24pIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICR2biA9ICcnOyBpZiAoJHppZWxQZXJzb24uUFNPYmplY3Qu -UHJvcGVydGllc1sndm9ybmFtZSddKSB7ICR2biA9IFtzdHJpbmddJHppZWxQZXJzb24udm9ybmFt -ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkbmFtZVR4dCA9ICgiJHZuICQoJHppZWxQZXJz -b24ubmFtZSkiKS5UcmltKCkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICBXcml0ZS1Mb2dFaW50cmFnICd1bnRlcmJlc2V0enVuZy5xdWl0dGllcnQnIEB7DQogICAg -ICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAg -ICAgICAgIHBlcnNvbklkICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgcGVy -c29uICAgID0gJG5hbWVUeHQNCiAgICAgICAgICAgICAgICAgICAgICAgIG9lICAgICAgICA9ICRv -ZVR4dA0KICAgICAgICAgICAgICAgICAgICAgICAgc2NoaWNodCAgID0gJHNjaGljaHRUZXh0DQog -ICAgICAgICAgICAgICAgICAgICAgICBhbHRlcldlcnQgPSAiJGFsdGVyIg0KICAgICAgICAgICAg -ICAgICAgICAgICAgbmV1ZXJXZXJ0ID0gIiR3ZXJ0Ig0KICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgUGhhc2UgRC4zICgyMDI2LTA1LTIx -KTogd2VubiBkaWUgS3JhbmttZWxkdW5nIHp1cnVlY2tnZW5vbW1lbg0KICAgICAgICAgICAgICAg -ICMgd2lyZCAoYWx0ZXIgV2VydCB3YXIga3IvS3VyLCBuZXVlciBXZXJ0IGlzdCBlcyBuaWNodCBt -ZWhyKSwNCiAgICAgICAgICAgICAgICAjIGVudGZlcm5lbiB3aXIgZGVuIG9mZmVuZW4gSGlud2Vp -cyDigJQgc29uc3QgaXN0IGVyIGJpcyB6dQ0KICAgICAgICAgICAgICAgICMgMzAgVGFnZSBwcmFl -c2VudCwgb2J3b2hsIGRhcyBFcmVpZ25pcyBlcmxlZGlndCBpc3QuDQogICAgICAgICAgICAgICAg -aWYgKCgkYWx0ZXIgLWVxICdrcicgLW9yICRhbHRlciAtZXEgJ0t1cicpIC1hbmQgKCR3ZXJ0IC1u -ZSAna3InIC1hbmQgJHdlcnQgLW5lICdLdXInKSkgew0KICAgICAgICAgICAgICAgICAgICBSZW1v -dmUtT2ZmZW5lS3JhbmttZWxkdW5nc0hpbndlaXNlICRwZXJzb25JZCAkZGF0dW0NCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBIaW53ZWlzLVRyaWdnZXI6IEtyYW5rbWVsZHVu -ZyBlcnpldWd0IGVpbmVuIEluLUFwcC1IaW53ZWlzDQogICAgICAgICAgICAgICAgIyBmdWVyIFNV -ICsgR2VzYW10dmVyYW50d29ydGxpY2hlIChTY2hpY2h0bG9jaCBpbSBNb2RhbCBkaXJla3QNCiAg -ICAgICAgICAgICAgICAjIGFkcmVzc2llcmJhciB2aWEgIkthbmRpZGF0ZW4gYW5zY2hyZWliZW4i -LUJ1dHRvbikuDQogICAgICAgICAgICAgICAgaWYgKCR3ZXJ0IC1lcSAna3InIC1vciAkd2VydCAt -ZXEgJ0t1cicpIHsNCiAgICAgICAgICAgICAgICAgICAgJGttTmFtZSA9ICcnDQogICAgICAgICAg -ICAgICAgICAgIGlmICgkemllbFBlcnNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGt2 -biA9ICcnOyBpZiAoJHppZWxQZXJzb24uUFNPYmplY3QuUHJvcGVydGllc1sndm9ybmFtZSddKSB7 -ICRrdm4gPSBbc3RyaW5nXSR6aWVsUGVyc29uLnZvcm5hbWUgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgJGttTmFtZSA9ICgiJGt2biAkKCR6aWVsUGVyc29uLm5hbWUpIikuVHJpbSgpDQogICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGttR3J1cHBlID0gJycNCiAg -ICAgICAgICAgICAgICAgICAgaWYgKCR6aWVsUGVyc29uIC1hbmQgJHppZWxQZXJzb24uUFNPYmpl -Y3QuUHJvcGVydGllc1snZ3J1cHBlJ10pIHsgJGttR3J1cHBlID0gW3N0cmluZ10kemllbFBlcnNv -bi5ncnVwcGUgfQ0KICAgICAgICAgICAgICAgICAgICAka21TY2hpY2h0TGV0dGVyID0gJycNCiAg -ICAgICAgICAgICAgICAgICAgaWYgKCIkYWx0ZXIiIC1tYXRjaCAnXihbRlNOXSktJykgeyAka21T -Y2hpY2h0TGV0dGVyID0gJE1hdGNoZXNbMV0gfQ0KICAgICAgICAgICAgICAgICAgICBOZXctSGlu -d2VpcyAna3JhbmttZWxkdW5nJyAoW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgICAg -IHBlcnNvbl9pZCAgICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29u -X25hbWUgID0gJGttTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZ3J1cHBlICAgICAgID0g -JGttR3J1cHBlDQogICAgICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICAgICAgPSAkZGF0dW0N -CiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGljaHRDb2RlICA9ICIkYWx0ZXIiDQogICAgICAg -ICAgICAgICAgICAgICAgICBzY2hpY2h0S3VyeiAgPSAka21TY2hpY2h0TGV0dGVyDQogICAgICAg -ICAgICAgICAgICAgICAgICBjb2RlICAgICAgICAgPSAiJHdlcnQiDQogICAgICAgICAgICAgICAg -ICAgIH0pIChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg -PSAnZ2VzcGVpY2hlcnQnOyBhbHRlcldlcnQgPSAkYWx0ZXIgfQ0KICAgICAgICAgICAgICAgIGNv -bnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjIEJ1bGstU2NocmVpYmVuIG1laHJl -cmVyIFplbGxlbiBpbiBlaW5lbSBTY2hyaXR0IOKAlCBhdWZnZXJ1ZmVuDQogICAgICAgICAgICAj -IHZvbSBFeGNlbC1GdWVsbC1HcmlmZi4gU3BhcnQgcHJvIERyYWcgYmlzIHp1IDEwMCsgSFRUUC1S -b3VuZHRyaXBzDQogICAgICAgICAgICAjIHVuZCBEYXRlaS1TY2hyZWlidm9yZ2FlbmdlLiBQZXJt -aXNzaW9uLUNoZWNrIHBybyBaZWxsZSwgZWluDQogICAgICAgICAgICAjIGVpbnppZ2VyIExvZ2J1 -Y2gtRWludHJhZyBmYXNzdCBkaWUgQWt0aW9uIHp1c2FtbWVuLg0KICAgICAgICAgICAgaWYgKCRQ -YXRoIC1lcSAnL2FwaS9wbGFudW5nL3plbGxlbi1idWxrJyAtYW5kICRNZXRob2QgLWVxICdQT1NU -Jykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2Ug -enUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBD -b252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGVpbnRyYWVnZSA9IEAoJGEuZWludHJh -ZWdlKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRlaW50cmFlZ2UgLW9yICRlaW50cmFlZ2Uu -Q291bnQgLWVxIDApIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNw -b25zZSBAeyBzdGF0dXMgPSAnb2snOyBvayA9IDA7IGFiZ2VsZWhudCA9IEAoKSB9DQogICAgICAg -ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICMgUmVhZC1Nb2RpZnktV3JpdGUgYXRvbWFyIGluIGRlciBEYXRlaS1TcGVycmUg4oCUIHdpZSBk -ZXIgRWluemVsLQ0KICAgICAgICAgICAgICAgICMgemVsbC1FbmRwb2ludC4gT2huZSBMb2NrIGth -bm4gZWluIHBhcmFsbGVsZXIgRWRpdC9CdWxrIChhdWNoDQogICAgICAgICAgICAgICAgIyBhdXMg -ZWluZW0gYW5kZXJlbiBTZXJ2ZXItUHJvemVzcyBhdWYgZGVtc2VsYmVuIFNoYXJlKSBkZW4NCiAg -ICAgICAgICAgICAgICAjIGdlcmFkZSBnZWxlc2VuZW4gR2VzYW10c3RhbmQgdWViZXJzY2hyZWli -ZW4gKExvc3QgVXBkYXRlIHVlYmVyDQogICAgICAgICAgICAgICAgIyBkaWUgR0FOWkUgRGF0ZWkp -LiBMb2didWNoICsgTGl2ZS1TeW5jIGxhdWZlbiBOQUNIIGRlciBTcGVycmUsDQogICAgICAgICAg -ICAgICAgIyB1bSBnZXNjaGFjaHRlbHRlIExvY2tzIChsb2didWNoL2NoYW5nZXMpIHp1IHZlcm1l -aWRlbi4NCiAgICAgICAgICAgICAgICAkcmVzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkg -ew0KICAgICAgICAgICAgICAgICAgICAkcmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVu -Zy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9i -amVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l -cSAkcGxhbnVuZykgeyByZXR1cm4gQHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0g -J3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAkcGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nIHwgQWRkLU1lbWJlciAtTm90ZVBy -b3BlcnR5TmFtZSAnZWludHJhZWdlJyAtTm90ZVByb3BlcnR5VmFsdWUgKFtQU0N1c3RvbU9iamVj -dF1Ae30pIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgIyBQZXJzb25lbi1NYXAgZWlubWFsIGF1ZmJhdWVuIOKAlCBQZXJtaXNzaW9uLUNo -ZWNrIHBybw0KICAgICAgICAgICAgICAgICAgICAgICAgIyBFaW50cmFnIG9obmUgUmVzY2FuIGRl -ciBQZXJzb25lbmxpc3RlLg0KICAgICAgICAgICAgICAgICAgICAgICAgJHBlcnNvbk1hcCA9IEB7 -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBwIGluIEAoJHBsYW51bmcucGVyc29u -ZW4pKSB7ICRwZXJzb25NYXBbW3N0cmluZ10kcHAuaWRdID0gJHBwIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRva0NvdW50ID0gMA0KICAgICAg -ICAgICAgICAgICAgICAgICAgJGFiZ2VsZWhudCA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgJGVyc3Rlc1BpZCA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkZXJzdGVzV2Vy -dCA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkZXJzdGVzRGF0dW0gPSAkbnVsbA0K -ICAgICAgICAgICAgICAgICAgICAgICAgJGxldHp0ZXNEYXR1bSA9ICRudWxsDQogICAgICAgICAg -ICAgICAgICAgICAgICAjIGFsdGVXZXJ0ZS1NYXAgZnVlciBMb2didWNoLVJlc3RvcmU6IEtleSA9 -ICI8ZGF0dW0+fDxwZXJzb25JZD4iLg0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVXZXJ0 -ZSA9IEB7fQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBzeW5jRWludHJhZWdlOiBwcm8gZ2Vt -dXRpZXJ0ZXIgWmVsbGUgZWluIEVpbnRyYWcgZnVlcg0KICAgICAgICAgICAgICAgICAgICAgICAg -IyBkZW4gTGl2ZS1TeW5jLUNoYW5nZS1Mb2cgKEZvcm1hdCB3aWUgU2luZ2xlLUNlbGwpLg0KICAg -ICAgICAgICAgICAgICAgICAgICAgJHN5bmNFaW50cmFlZ2UgPSBOZXctT2JqZWN0IFN5c3RlbS5D -b2xsZWN0aW9ucy5BcnJheUxpc3QNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRl -IGluICRlaW50cmFlZ2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0dW0gPSBb -c3RyaW5nXSRlLmRhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBlcnNvbklkID0g -W3N0cmluZ10kZS5wZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3ZXJ0ID0g -aWYgKCRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3dlcnQnXSAtYW5kICRudWxsIC1uZSAkZS53ZXJ0 -KSB7IFtzdHJpbmddJGUud2VydCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKC1ub3QgJGRhdHVtIC1vciAtbm90ICRwZXJzb25JZCkgeyAkYWJnZWxlaG50ICs9 -IEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgZ3J1bmQgPSAndW52b2xs -c3RhZW5kaWcnIH07IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemll -bFBlcnNvbiA9ICRwZXJzb25NYXBbJHBlcnNvbklkXQ0KICAgICAgICAgICAgICAgICAgICAgICAg +LiRwZXJzb25JZCA9ICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz +ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFl +Z2UuJGRhdHVtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGVyc29uSWQgLU5vdGVQ +cm9wZXJ0eVZhbHVlICR3ZXJ0IC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRva0NvdW50KysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwg +LWVxICRlcnN0ZXNQaWQpIHsgJGVyc3Rlc1BpZCA9ICRwZXJzb25JZDsgJGVyc3Rlc1dlcnQgPSAk +d2VydDsgJGVyc3Rlc0RhdHVtID0gJGRhdHVtIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkbGV0enRlc0RhdHVtID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Zv +aWRdJHN5bmNFaW50cmFlZ2UuQWRkKEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJz +b25JZDsgYWx0ID0gIiRhbHRlcldlcnQiOyBuZXUgPSAiJHdlcnQiIH0pDQogICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIERhdGVpIG51ciBzY2hyZWli +ZW4sIHdlbm4gdGF0c2FlY2hsaWNoIHdhcyBnZWFlbmRlcnQgd3VyZGUuDQogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJG9rQ291bnQgLWd0IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwN +CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy +biBAeyB0eXAgPSAnb2snOyBva0NvdW50ID0gJG9rQ291bnQ7IGFiZ2VsZWhudCA9ICRhYmdlbGVo +bnQ7IGVyc3Rlc1BpZCA9ICRlcnN0ZXNQaWQ7IGVyc3Rlc1dlcnQgPSAkZXJzdGVzV2VydDsgZXJz +dGVzRGF0dW0gPSAkZXJzdGVzRGF0dW07IGxldHp0ZXNEYXR1bSA9ICRsZXR6dGVzRGF0dW07IGFs +dGVXZXJ0ZSA9ICRhbHRlV2VydGU7IHN5bmNFaW50cmFlZ2UgPSAkc3luY0VpbnRyYWVnZSB9DQog +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAg +ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7 +IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkcmVzLnR5 +cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkcmVzLm1zZyAkcmVzLmNvZGU7 +IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIExvZ2J1Y2ggKyBMaXZlLVN5bmMgTkFDSCBk +ZW0gTG9jayAoa2VpbiBnZXNjaGFjaHRlbHRlcyBMb2NrKS4NCiAgICAgICAgICAgICAgICBpZiAo +JHJlcy5va0NvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRy +YWcgJ3plbGxlbi5idWxrLmdlYWVuZGVydCcgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBl +cnNvbklkICAgID0gJHJlcy5lcnN0ZXNQaWQNCiAgICAgICAgICAgICAgICAgICAgICAgIHdlcnQg +ICAgICAgID0gJHJlcy5lcnN0ZXNXZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICBhbnphaGwg +ICAgICA9ICRyZXMub2tDb3VudA0KICAgICAgICAgICAgICAgICAgICAgICAgZXJzdGVyVGFnICAg +PSAkcmVzLmVyc3Rlc0RhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICBsZXR6dGVyVGFnICA9 +ICRyZXMubGV0enRlc0RhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICBhYmdlbGVobnQgICA9 +ICRyZXMuYWJnZWxlaG50LkNvdW50DQogICAgICAgICAgICAgICAgICAgICAgICAjIFJlc3RvcmUt +UGF5bG9hZDogcHJvIFplbGxlIGRlciBXZXJ0IHZvciBkZXIgQWVuZGVydW5nLg0KICAgICAgICAg +ICAgICAgICAgICAgICAgYWx0ZVdlcnRlICAgPSAkcmVzLmFsdGVXZXJ0ZQ0KICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICMgTGl2ZS1TeW5jOiBwcm8gWmVsbGUgZWlu +ICd6ZWxsZSctRWludHJhZyBpbnMgY2hhbmdlcy5qc29uLg0KICAgICAgICAgICAgICAgICAgICBB +ZGQtQ2hhbmdlTG9nRWludHJhZWdlICd6ZWxsZScgJHJlcy5zeW5jRWludHJhZWdlDQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg +c3RhdHVzID0gJ29rJzsgb2sgPSAkcmVzLm9rQ291bnQ7IGFiZ2VsZWhudCA9IEAoJHJlcy5hYmdl +bGVobnQpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgIyBQT1NUIC9hcGkvcGxhbnVuZy9rb21tZW50YXINCiAgICAgICAgICAgICMgSGFlbmd0 +IGVpbmVuIG5ldWVuIEtvbW1lbnRhciBhbiBkaWUgTGlzdGUgZnVlciAoZGF0dW0scGVyc29uSWQp +IGFuLg0KICAgICAgICAgICAgIyBTY2hlbWEtTWlncmF0aW9uIChsYXp5KTogdm9yaGFuZGVuZXIg +U3RyaW5nIG9kZXIgT2JqZWt0LUVpbnRyYWcgd2lyZA0KICAgICAgICAgICAgIyBiZWltIGVyc3Rl +biBTY2hyZWliZW4gaW4gZWluZSBMaXN0ZSBrb252ZXJ0aWVydC4gTGVlcmVyIFRleHQgd2lyZA0K +ICAgICAgICAgICAgIyBhYmdlbGVobnQg4oCUIExvZXNjaGVuIGVpbnplbG5lciBLb21tZW50YXJl +IGxhZXVmdCB1ZWJlciBkZW4gREVMRVRFLQ0KICAgICAgICAgICAgIyBFbmRwdW5rdCAobWl0IEtv +bW1lbnRhci1JRCksIGRhcyBMb2VzY2hlbiBnYW56ZXIgTGlzdGVuIGlzdCB1ZWJlcg0KICAgICAg +ICAgICAgIyBkaWUgQVBJIG5pY2h0IG1laHIgbW9lZ2xpY2ggKHZlcnNlaGVudGxpY2hlciBWZXJs +dXN0IGF1c2dlc2NobG9zc2VuKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxh +bnVuZy9rb21tZW50YXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAg +ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +Ym9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAg +ICAgICAgICAgICAgICAkZGF0dW0gPSAkYS5kYXR1bQ0KICAgICAgICAgICAgICAgICRwZXJzb25J +ZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICAkdGV4dCA9IGlmICgkYS5Q +U09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsgKCIkKCRhLnRleHQpIikuVHJpbSgpIH0gZWxz +ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdGV4dCkgew0KICAgICAgICAgICAg +ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnTGVlcmVyIEtvbW1lbnRhciDigJQgYml0dGUg +REVMRVRFIC9hcGkvcGxhbnVuZy9rb21tZW50YXIgZnVlciBMb2VzY2hlbiB2ZXJ3ZW5kZW4nIDQw +MA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAjIEVkaXQtUmVjaHQgdm9yIExvY2sgcHJ1ZWZlbg0KICAgICAgICAgICAgICAg +ICRwbGFudW5nQ2hlY2sgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAg +ICAgICAgICBpZiAoJG51bGwgLWVxICRwbGFudW5nQ2hlY2spIHsgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgJHppZWxQZXJzb24gPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgkcGxhbnVu +Z0NoZWNrLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcCBpbiBA +KCRwbGFudW5nQ2hlY2sucGVyc29uZW4pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +W3N0cmluZ10kcHAuaWQgLWVxICRwZXJzb25JZCkgeyAkemllbFBlcnNvbiA9ICRwcDsgYnJlYWsg +fQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgIGlmICgtbm90IChUZXN0LURhcmZaZWxsZUVkaXRpZXJlbiAkemllbFBlcnNvbikpIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFiZ2VsZWhudCArPSBAeyBkYXR1bSA9ICRk -YXR1bTsgcGVyc29uSWQgPSAkcGVyc29uSWQ7IGdydW5kID0gJ2tlaW4tcmVjaHQnIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcu -ZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJGRhdHVtXSkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFlZ2UgfCBBZGQtTWVtYmVyIC1Ob3RlUHJv -cGVydHlOYW1lICRkYXR1bSAtTm90ZVByb3BlcnR5VmFsdWUgKFtQU0N1c3RvbU9iamVjdF1Ae30p -IC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAjIEFsdGVuIFdlcnQgbWVya2VuIEJFVk9SIHdpciBkaWUgWmVsbGUgdWViZXJz -Y2hyZWliZW4uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVyV2VydCA9ICcnDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0u -UFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRhbHRlcldlcnQgPSBbc3RyaW5nXSRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0u -JHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRhbHRlV2VydGVbKCJ7MH18ezF9IiAtZiAkZGF0dW0sICRwZXJzb25JZCld -ID0gJGFsdGVyV2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6 -SXNOdWxsT3JFbXB0eSgkd2VydCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29u -SWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50 -cmFlZ2UuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRwZXJzb25JZCkNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5l -aW50cmFlZ2UuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS4k -cGVyc29uSWQgPSAkd2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdl -LiRkYXR1bSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHBlcnNvbklkIC1Ob3RlUHJv -cGVydHlWYWx1ZSAkd2VydCAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkb2tDb3VudCsrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l -cSAkZXJzdGVzUGlkKSB7ICRlcnN0ZXNQaWQgPSAkcGVyc29uSWQ7ICRlcnN0ZXNXZXJ0ID0gJHdl -cnQ7ICRlcnN0ZXNEYXR1bSA9ICRkYXR1bSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -JGxldHp0ZXNEYXR1bSA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lk -XSRzeW5jRWludHJhZWdlLkFkZChAeyBkYXR1bSA9ICRkYXR1bTsgcGVyc29uSWQgPSAkcGVyc29u -SWQ7IGFsdCA9ICIkYWx0ZXJXZXJ0IjsgbmV1ID0gIiR3ZXJ0IiB9KQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBEYXRlaSBudXIgc2NocmVpYmVu -LCB3ZW5uIHRhdHNhZWNobGljaCB3YXMgZ2VhZW5kZXJ0IHd1cmRlLg0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRva0NvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQog -ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g -QHsgdHlwID0gJ29rJzsgb2tDb3VudCA9ICRva0NvdW50OyBhYmdlbGVobnQgPSAkYWJnZWxlaG50 -OyBlcnN0ZXNQaWQgPSAkZXJzdGVzUGlkOyBlcnN0ZXNXZXJ0ID0gJGVyc3Rlc1dlcnQ7IGVyc3Rl -c0RhdHVtID0gJGVyc3Rlc0RhdHVtOyBsZXR6dGVzRGF0dW0gPSAkbGV0enRlc0RhdHVtOyBhbHRl -V2VydGUgPSAkYWx0ZVdlcnRlOyBzeW5jRWludHJhZWdlID0gJHN5bmNFaW50cmFlZ2UgfQ0KICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAg -ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBj -b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJHJlcy50eXAg -LWVxICdlcnJvcicpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJHJlcy5tc2cgJHJlcy5jb2RlOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBMb2didWNoICsgTGl2ZS1TeW5jIE5BQ0ggZGVt -IExvY2sgKGtlaW4gZ2VzY2hhY2h0ZWx0ZXMgTG9jaykuDQogICAgICAgICAgICAgICAgaWYgKCRy -ZXMub2tDb3VudCAtZ3QgMCkgew0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFn -ICd6ZWxsZW4uYnVsay5nZWFlbmRlcnQnIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBwZXJz -b25JZCAgICA9ICRyZXMuZXJzdGVzUGlkDQogICAgICAgICAgICAgICAgICAgICAgICB3ZXJ0ICAg -ICAgICA9ICRyZXMuZXJzdGVzV2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgYW56YWhsICAg -ICAgPSAkcmVzLm9rQ291bnQNCiAgICAgICAgICAgICAgICAgICAgICAgIGVyc3RlclRhZyAgID0g -JHJlcy5lcnN0ZXNEYXR1bQ0KICAgICAgICAgICAgICAgICAgICAgICAgbGV0enRlclRhZyAgPSAk -cmVzLmxldHp0ZXNEYXR1bQ0KICAgICAgICAgICAgICAgICAgICAgICAgYWJnZWxlaG50ICAgPSAk -cmVzLmFiZ2VsZWhudC5Db3VudA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBSZXN0b3JlLVBh -eWxvYWQ6IHBybyBaZWxsZSBkZXIgV2VydCB2b3IgZGVyIEFlbmRlcnVuZy4NCiAgICAgICAgICAg -ICAgICAgICAgICAgIGFsdGVXZXJ0ZSAgID0gJHJlcy5hbHRlV2VydGUNCiAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAjIExpdmUtU3luYzogcHJvIFplbGxlIGVpbiAn -emVsbGUnLUVpbnRyYWcgaW5zIGNoYW5nZXMuanNvbi4NCiAgICAgICAgICAgICAgICAgICAgQWRk -LUNoYW5nZUxvZ0VpbnRyYWVnZSAnemVsbGUnICRyZXMuc3luY0VpbnRyYWVnZQ0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 -YXR1cyA9ICdvayc7IG9rID0gJHJlcy5va0NvdW50OyBhYmdlbGVobnQgPSBAKCRyZXMuYWJnZWxl -aG50KSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICMgUE9TVCAvYXBpL3BsYW51bmcva29tbWVudGFyDQogICAgICAgICAgICAjIEhhZW5ndCBl -aW5lbiBuZXVlbiBLb21tZW50YXIgYW4gZGllIExpc3RlIGZ1ZXIgKGRhdHVtLHBlcnNvbklkKSBh -bi4NCiAgICAgICAgICAgICMgU2NoZW1hLU1pZ3JhdGlvbiAobGF6eSk6IHZvcmhhbmRlbmVyIFN0 -cmluZyBvZGVyIE9iamVrdC1FaW50cmFnIHdpcmQNCiAgICAgICAgICAgICMgYmVpbSBlcnN0ZW4g -U2NocmVpYmVuIGluIGVpbmUgTGlzdGUga29udmVydGllcnQuIExlZXJlciBUZXh0IHdpcmQNCiAg -ICAgICAgICAgICMgYWJnZWxlaG50IOKAlCBMb2VzY2hlbiBlaW56ZWxuZXIgS29tbWVudGFyZSBs -YWV1ZnQgdWViZXIgZGVuIERFTEVURS0NCiAgICAgICAgICAgICMgRW5kcHVua3QgKG1pdCBLb21t -ZW50YXItSUQpLCBkYXMgTG9lc2NoZW4gZ2FuemVyIExpc3RlbiBpc3QgdWViZXINCiAgICAgICAg -ICAgICMgZGllIEFQSSBuaWNodCBtZWhyIG1vZWdsaWNoICh2ZXJzZWhlbnRsaWNoZXIgVmVybHVz -dCBhdXNnZXNjaGxvc3NlbikuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51 -bmcva29tbWVudGFyJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAg -ICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJv -ZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAg -ICAgICAgICAgICAgJGRhdHVtID0gJGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQg -PSBbc3RyaW5nXSRhLnBlcnNvbklkDQogICAgICAgICAgICAgICAgJHRleHQgPSBpZiAoJGEuUFNP -YmplY3QuUHJvcGVydGllc1sndGV4dCddKSB7ICgiJCgkYS50ZXh0KSIpLlRyaW0oKSB9IGVsc2Ug -eyAnJyB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRleHQpIHsNCiAgICAgICAgICAgICAg -ICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0xlZXJlciBLb21tZW50YXIg4oCUIGJpdHRlIERF -TEVURSAvYXBpL3BsYW51bmcva29tbWVudGFyIGZ1ZXIgTG9lc2NoZW4gdmVyd2VuZGVuJyA0MDAN +ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3Vu +ZyBmdWVyIGRpZXNlbiBLb21tZW50YXInIDQwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgJGpldHp0ID0gKEdldC1EYXRlKS5Ub1N0cmluZygnbycpICAjIElT +TyA4NjAxIG1pdCBaZWl0em9uZQ0KICAgICAgICAgICAgICAgICRiZW51dHplciA9ICIkRG9tYWlu +XCRVc2VybmFtZSINCiAgICAgICAgICAgICAgICAkbmV1ZUlkID0gJ2tfJyArIChbRGF0ZVRpbWVP +ZmZzZXRdOjpOb3cuVG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKSArICdfJyArIChHZXQtUmFuZG9t +IC1NYXhpbXVtIDk5OTk5KQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAg +ICAgICRudWxsID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u +Jw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVuZykgeyByZXR1 +cm4gJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcuUFNP +YmplY3QuUHJvcGVydGllc1sna29tbWVudGFyZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJHBsYW51bmcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdrb21tZW50YXJl +JyAtTm90ZVByb3BlcnR5VmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIC1Gb3JjZQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBs +YW51bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRkYXR1bV0pIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlIHwgQWRkLU1lbWJlciAtTm90 +ZVByb3BlcnR5TmFtZSAkZGF0dW0gLU5vdGVQcm9wZXJ0eVZhbHVlIChOZXctT2JqZWN0IFBTT2Jq +ZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICMgQWt0dWVsbGUgTGlzdGUgaGVyYXVzemllaGVuICsgZ2dmLiBhdXMgQWx0c2NoZW1h +IG1pZ3JpZXJlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgTGlzdGUgaXN0IGNocm9ub2xv +Z2lzY2ggKGFlbHRlc3RlIHp1ZXJzdCksIGRlciBuZXVlDQogICAgICAgICAgICAgICAgICAgICAg +ICAjIEVpbnRyYWcgd2lyZCBoaW50ZW4gYW5nZWhhZW5ndC4NCiAgICAgICAgICAgICAgICAgICAg +ICAgICRsaXN0ZSA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdFtv +YmplY3RdDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcua29tbWVudGFyZS4k +ZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJHZvcmggPSAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS4kcGVyc29uSWQN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZvcmggLWlzIFtzdHJpbmddIC1hbmQg +JHZvcmgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRlciBTdHJpbmct +RWludHJhZyDigJQgZWluIEVsZW1lbnQgb2huZSBNZXRhDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRsaXN0ZS5BZGQoW1BTQ3VzdG9tT2JqZWN0XUB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBpZCAgICAgICAgICAgPSAna19sZWdhY3lfJyArIChHZXQtUmFu +ZG9tIC1NYXhpbXVtIDk5OTk5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +dGV4dCAgICAgICAgID0gJHZvcmgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGdlYWVuZGVydEFtICA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBnZWFlbmRlcnRWb24gPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +KSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR2b3Jo +IC1pcyBbYXJyYXldIC1vciAoJHZvcmggLWlzIFtTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmFi +bGVdIC1hbmQgLW5vdCAoJHZvcmggLWlzIFtzdHJpbmddKSkpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIyBTY2hvbiBlaW4gQXJyYXkgKG5ldWVzIFNjaGVtYSkNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGUgaW4gQCgkdm9yaCkpIHsgJGxpc3Rl +LkFkZCgkZSkgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl +aWYgKCR2b3JoIC1hbmQgJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1sndGV4dCddKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZXMgT2JqZWt0LVNjaGVtYSB7IHRleHQs +IGdlYWVuZGVydEFtLCBnZWFlbmRlcnRWb24gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkbWlnSWQgPSBpZiAoJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1snaWQnXSkgeyBbc3Ry +aW5nXSR2b3JoLmlkIH0gZWxzZSB7ICdrX2xlZ2FjeV8nICsgKEdldC1SYW5kb20gLU1heGltdW0g +OTk5OTkpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlLkFkZChbUFND +dXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICAg +ICAgICAgICA9ICRtaWdJZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4 +dCAgICAgICAgID0gW3N0cmluZ10kdm9yaC50ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBnZWFlbmRlcnRBbSAgPSBpZiAoJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1sn +Z2VhZW5kZXJ0QW0nXSkgIHsgJHZvcmguZ2VhZW5kZXJ0QW0gfSAgZWxzZSB7ICRudWxsIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9IGlmICgkdm9y +aC5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWFlbmRlcnRWb24nXSkgeyAkdm9yaC5nZWFlbmRlcnRW +b24gfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB8 +IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlLkFkZChbUFNDdXN0b21P +YmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAgICAgICAgPSAkbmV1 +ZUlkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAgICAgICAgID0gJHRleHQNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRBbSAgPSAkamV0enQNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRWb24gPSAkYmVudXR6ZXINCiAgICAgICAgICAg +ICAgICAgICAgICAgIH0pIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICMgWnVy +dWVjayBhbHMgQXJyYXkgKFBTLVNlcmlhbGlzaWVydW5nKQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgJGFyciA9IEAoJGxpc3RlLlRvQXJyYXkoKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25J +ZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlLiRk +YXR1bS4kcGVyc29uSWQgPSAkYXJyDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtIHwg +QWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGVyc29uSWQgLU5vdGVQcm9wZXJ0eVZhbHVl +ICRhcnIgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +ICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51 +bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkbnVsbA0KICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNl +bmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIFJlZGFjdGlvbiB3aWUgYmVpIGtvbW1l +bnRhci5nZWxvZXNjaHQgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy0NCiAgICAgICAgICAgICAg +ICAjIE5vdGJyZW1zZSAyMDI2LTA1LTI4KTogVm9sbHRleHQgYmxlaWJ0IGluIHBsYW51bmcuanNv +biAoZG9ydA0KICAgICAgICAgICAgICAgICMgZWRpdGllcmJhci9sb2VzY2hiYXIpLCBkYXMgTG9n +YnVjaCBiZWtvbW10IG51ciBWb3JzY2hhdSArIExhZW5nZS4NCiAgICAgICAgICAgICAgICAjIFZl +cm1laWRldCBQSUktRWNobywgd2VubiBlaW4gS29tbWVudGFyIHNwYWV0ZXIgZ2Vsb2VzY2h0IHdp +cmQNCiAgICAgICAgICAgICAgICAjIGFiZXIgaW0gTG9nIGltbWVyIG5vY2gga29tcGxldHQgbGll +c3Qgc3RlaHQuDQogICAgICAgICAgICAgICAgJHRleHRWb3JzY2hhdSA9ICR0ZXh0DQogICAgICAg +ICAgICAgICAgaWYgKCR0ZXh0Vm9yc2NoYXUuTGVuZ3RoIC1ndCA0MCkgeyAkdGV4dFZvcnNjaGF1 +ID0gJHRleHRWb3JzY2hhdS5TdWJzdHJpbmcoMCwgNDApICsgJ+KApicgfQ0KICAgICAgICAgICAg +ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2tvbW1lbnRhci5oaW56dWdlZnVlZ3QnIEB7DQogICAgICAg +ICAgICAgICAgICAgIGRhdHVtICAgICAgICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAg +cGVyc29uSWQgICAgICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBrb21tZW50YXJJ +ZCAgID0gJG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICB0ZXh0Vm9yc2NoYXUgID0gJHRleHRW +b3JzY2hhdQ0KICAgICAgICAgICAgICAgICAgICB0ZXh0TGFlbmdlICAgID0gJHRleHQuTGVuZ3Ro +DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFaW50cmFn +ICdrb21tZW50YXInIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJGRhdHVtDQog +ICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAg +ICAgIGtvbW1lbnRhcklkID0gJG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICAjIExpdmUtU3lu +YyBicmF1Y2h0IGRlbiBUZXh0IG5pY2h0IOKAlCBuYWVjaHN0ZXIgUmVuZGVyIGxhZWR0DQogICAg +ICAgICAgICAgICAgICAgICMgaWhuIGF1cyBwbGFudW5nLmpzb24uIE51ciBNZXRhZGF0ZW4gZnVl +ciBBa3Rpdml0YWV0cy1BbnplaWdlLg0KICAgICAgICAgICAgICAgICAgICB6ZWl0c3RlbXBlbCA9 +ICRqZXR6dA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl +Y3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgICA9ICdoaW56 +dWdlZnVlZ3QnDQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklkICA9ICRuZXVlSWQNCiAg +ICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gJGpldHp0DQogICAgICAgICAgICAgICAg +ICAgIGdlYWVuZGVydFZvbiA9ICRiZW51dHplcg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIERFTEVURSAv +YXBpL3BsYW51bmcva29tbWVudGFyDQogICAgICAgICAgICAjIEJvZHk6IHsgZGF0dW0sIHBlcnNv +bklkLCBrb21tZW50YXJJZCB9DQogICAgICAgICAgICAjIEJlcmVjaHRpZ3VuZzogU3VwZXJVc2Vy +IG9kZXIgR2VzYW10dmVyYW50d29ydGxpY2hlLiBBbmRlcmUgUm9sbGVuDQogICAgICAgICAgICAj +IGJla29tbWVuIDQwMyDigJQgYXVjaCBkZXIgVmVyZmFzc2VyIHNlbGJzdCBkYXJmIG5pY2h0IGxv +ZXNjaGVuDQogICAgICAgICAgICAjIChiZXd1c3N0ZSBEZXNpZ25lbnRzY2hlaWR1bmc6IEtvbW1l +bnRhci1WZXJsYXVmIGlzdCBDaHJvbmlrKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h +cGkvcGxhbnVuZy9rb21tZW50YXInIC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScpIHsNCiAgICAg +ICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlm +ICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0 +MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYSA9ICRib2R5IHwgQ29udmVydEZyb20t +SnNvbg0KICAgICAgICAgICAgICAgICRkYXR1bSA9ICRhLmRhdHVtDQogICAgICAgICAgICAgICAg +JHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAgICAgICRrb21tZW50 +YXJJZCA9IFtzdHJpbmddJGEua29tbWVudGFySWQNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +ZGF0dW0gLW9yIC1ub3QgJHBlcnNvbklkIC1vciAtbm90ICRrb21tZW50YXJJZCkgew0KICAgICAg +ICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnZGF0dW0sIHBlcnNvbklkIHVuZCBr +b21tZW50YXJJZCBzaW5kIFBmbGljaHQnIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1u +b3QgKCRyLmlzdFN1cGVyVXNlciAtb3IgJHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQog +ICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIHVu +ZCBHZXNhbXR2ZXJhbnR3b3J0bGljaGUgZHVlcmZlbiBLb21tZW50YXJlIGxvZXNjaGVuJyA0MDMN CiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgIyBFZGl0LVJlY2h0IHZvciBMb2NrIHBydWVmZW4NCiAgICAgICAgICAgICAgICAk -cGxhbnVuZ0NoZWNrID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAg -ICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVuZ0NoZWNrKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICR6aWVsUGVyc29uID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmdD -aGVjay5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHAgaW4gQCgk -cGxhbnVuZ0NoZWNrLnBlcnNvbmVuKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtz -dHJpbmddJHBwLmlkIC1lcSAkcGVyc29uSWQpIHsgJHppZWxQZXJzb24gPSAkcHA7IGJyZWFrIH0N -CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAoVGVzdC1EYXJmWmVsbGVFZGl0aWVyZW4gJHppZWxQZXJzb24pKSB7DQogICAg -ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcg -ZnVlciBkaWVzZW4gS29tbWVudGFyJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICRqZXR6dCA9IChHZXQtRGF0ZSkuVG9TdHJpbmcoJ28nKSAgIyBJU08g -ODYwMSBtaXQgWmVpdHpvbmUNCiAgICAgICAgICAgICAgICAkYmVudXR6ZXIgPSAiJERvbWFpblwk -VXNlcm5hbWUiDQogICAgICAgICAgICAgICAgJG5ldWVJZCA9ICdrXycgKyAoW0RhdGVUaW1lT2Zm -c2V0XTo6Tm93LlRvVW5peFRpbWVNaWxsaXNlY29uZHMoKSkgKyAnXycgKyAoR2V0LVJhbmRvbSAt -TWF4aW11bSA5OTk5OSkNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAg -ICAkbnVsbCA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicN -CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHBsYW51bmcpIHsgcmV0dXJu -ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ2tvbW1lbnRhcmUnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICRwbGFudW5nIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAna29tbWVudGFyZScg -LU5vdGVQcm9wZXJ0eVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFu -dW5nLmtvbW1lbnRhcmUuUFNPYmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZSB8IEFkZC1NZW1iZXIgLU5vdGVQ -cm9wZXJ0eU5hbWUgJGRhdHVtIC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3LU9iamVjdCBQU09iamVj -dCkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg -ICAgICAjIEFrdHVlbGxlIExpc3RlIGhlcmF1c3ppZWhlbiArIGdnZi4gYXVzIEFsdHNjaGVtYSBt -aWdyaWVyZW4uDQogICAgICAgICAgICAgICAgICAgICAgICAjIExpc3RlIGlzdCBjaHJvbm9sb2dp -c2NoIChhZWx0ZXN0ZSB6dWVyc3QpLCBkZXIgbmV1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAg -IyBFaW50cmFnIHdpcmQgaGludGVuIGFuZ2VoYWVuZ3QuDQogICAgICAgICAgICAgICAgICAgICAg -ICAkbGlzdGUgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3Rbb2Jq -ZWN0XQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmtvbW1lbnRhcmUuJGRh -dHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICR2b3JoID0gJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uJHBlcnNvbklkDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2b3JoIC1pcyBbc3RyaW5nXSAtYW5kICR2 -b3JoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZXIgU3RyaW5nLUVp -bnRyYWcg4oCUIGVpbiBFbGVtZW50IG9obmUgTWV0YQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkbGlzdGUuQWRkKFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgID0gJ2tfbGVnYWN5XycgKyAoR2V0LVJhbmRv -bSAtTWF4aW11bSA5OTk5OSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl -eHQgICAgICAgICA9ICR2b3JoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn -ZWFlbmRlcnRBbSAgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -Z2VhZW5kZXJ0Vm9uID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkg -fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkdm9yaCAt -aXMgW2FycmF5XSAtb3IgKCR2b3JoIC1pcyBbU3lzdGVtLkNvbGxlY3Rpb25zLklFbnVtZXJhYmxl -XSAtYW5kIC1ub3QgKCR2b3JoIC1pcyBbc3RyaW5nXSkpKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICMgU2Nob24gZWluIEFycmF5IChuZXVlcyBTY2hlbWEpDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlIGluIEAoJHZvcmgpKSB7ICRsaXN0ZS5B -ZGQoJGUpIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlm -ICgkdm9yaCAtYW5kICR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFsdGVzIE9iamVrdC1TY2hlbWEgeyB0ZXh0LCBn -ZWFlbmRlcnRBbSwgZ2VhZW5kZXJ0Vm9uIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJG1pZ0lkID0gaWYgKCR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lkJ10pIHsgW3N0cmlu -Z10kdm9yaC5pZCB9IGVsc2UgeyAna19sZWdhY3lfJyArIChHZXQtUmFuZG9tIC1NYXhpbXVtIDk5 -OTk5KSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZS5BZGQoW1BTQ3Vz -dG9tT2JqZWN0XUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAg -ICAgICAgPSAkbWlnSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQg -ICAgICAgICA9IFtzdHJpbmddJHZvcmgudGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gaWYgKCR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dl -YWVuZGVydEFtJ10pICB7ICR2b3JoLmdlYWVuZGVydEFtIH0gIGVsc2UgeyAkbnVsbCB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRWb24gPSBpZiAoJHZvcmgu -UFNPYmplY3QuUHJvcGVydGllc1snZ2VhZW5kZXJ0Vm9uJ10pIHsgJHZvcmguZ2VhZW5kZXJ0Vm9u -IH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfCBP -dXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZS5BZGQoW1BTQ3VzdG9tT2Jq -ZWN0XUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgID0gJG5ldWVJ -ZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgICAgICAgICA9ICR0ZXh0DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gJGpldHp0DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0Vm9uID0gJGJlbnV0emVyDQogICAgICAgICAgICAg -ICAgICAgICAgICB9KSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAjIFp1cnVl -Y2sgYWxzIEFycmF5IChQUy1TZXJpYWxpc2llcnVuZykNCiAgICAgICAgICAgICAgICAgICAgICAg -ICRhcnIgPSBAKCRsaXN0ZS5Ub0FycmF5KCkpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -JHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRd -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZS4kZGF0 -dW0uJHBlcnNvbklkID0gJGFycg0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bSB8IEFk -ZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHBlcnNvbklkIC1Ob3RlUHJvcGVydHlWYWx1ZSAk -YXJyIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxs -DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG51bGwNCiAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5k -LUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBSZWRhY3Rpb24gd2llIGJlaSBrb21tZW50 -YXIuZ2Vsb2VzY2h0IChTcHJpbnQgMSDigJQgU2ljaGVyaGVpdHMtDQogICAgICAgICAgICAgICAg -IyBOb3RicmVtc2UgMjAyNi0wNS0yOCk6IFZvbGx0ZXh0IGJsZWlidCBpbiBwbGFudW5nLmpzb24g -KGRvcnQNCiAgICAgICAgICAgICAgICAjIGVkaXRpZXJiYXIvbG9lc2NoYmFyKSwgZGFzIExvZ2J1 -Y2ggYmVrb21tdCBudXIgVm9yc2NoYXUgKyBMYWVuZ2UuDQogICAgICAgICAgICAgICAgIyBWZXJt -ZWlkZXQgUElJLUVjaG8sIHdlbm4gZWluIEtvbW1lbnRhciBzcGFldGVyIGdlbG9lc2NodCB3aXJk -DQogICAgICAgICAgICAgICAgIyBhYmVyIGltIExvZyBpbW1lciBub2NoIGtvbXBsZXR0IGxpZXN0 -IHN0ZWh0Lg0KICAgICAgICAgICAgICAgICR0ZXh0Vm9yc2NoYXUgPSAkdGV4dA0KICAgICAgICAg -ICAgICAgIGlmICgkdGV4dFZvcnNjaGF1Lkxlbmd0aCAtZ3QgNDApIHsgJHRleHRWb3JzY2hhdSA9 -ICR0ZXh0Vm9yc2NoYXUuU3Vic3RyaW5nKDAsIDQwKSArICfigKYnIH0NCiAgICAgICAgICAgICAg -ICBXcml0ZS1Mb2dFaW50cmFnICdrb21tZW50YXIuaGluenVnZWZ1ZWd0JyBAew0KICAgICAgICAg -ICAgICAgICAgICBkYXR1bSAgICAgICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBl -cnNvbklkICAgICAgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAga29tbWVudGFySWQg -ICA9ICRuZXVlSWQNCiAgICAgICAgICAgICAgICAgICAgdGV4dFZvcnNjaGF1ICA9ICR0ZXh0Vm9y -c2NoYXUNCiAgICAgICAgICAgICAgICAgICAgdGV4dExhZW5nZSAgICA9ICR0ZXh0Lkxlbmd0aA0K -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRWludHJhZyAn -a29tbWVudGFyJyBAew0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICA9ICRkYXR1bQ0KICAg -ICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAg -ICBrb21tZW50YXJJZCA9ICRuZXVlSWQNCiAgICAgICAgICAgICAgICAgICAgIyBMaXZlLVN5bmMg -YnJhdWNodCBkZW4gVGV4dCBuaWNodCDigJQgbmFlY2hzdGVyIFJlbmRlciBsYWVkdA0KICAgICAg -ICAgICAgICAgICAgICAjIGlobiBhdXMgcGxhbnVuZy5qc29uLiBOdXIgTWV0YWRhdGVuIGZ1ZXIg -QWt0aXZpdGFldHMtQW56ZWlnZS4NCiAgICAgICAgICAgICAgICAgICAgemVpdHN0ZW1wZWwgPSAk -amV0enQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 -ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICBzdGF0dXMgICAgICAgPSAnaGluenVn -ZWZ1ZWd0Jw0KICAgICAgICAgICAgICAgICAgICBrb21tZW50YXJJZCAgPSAkbmV1ZUlkDQogICAg -ICAgICAgICAgICAgICAgIGdlYWVuZGVydEFtICA9ICRqZXR6dA0KICAgICAgICAgICAgICAgICAg -ICBnZWFlbmRlcnRWb24gPSAkYmVudXR6ZXINCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBERUxFVEUgL2Fw -aS9wbGFudW5nL2tvbW1lbnRhcg0KICAgICAgICAgICAgIyBCb2R5OiB7IGRhdHVtLCBwZXJzb25J -ZCwga29tbWVudGFySWQgfQ0KICAgICAgICAgICAgIyBCZXJlY2h0aWd1bmc6IFN1cGVyVXNlciBv -ZGVyIEdlc2FtdHZlcmFudHdvcnRsaWNoZS4gQW5kZXJlIFJvbGxlbg0KICAgICAgICAgICAgIyBi -ZWtvbW1lbiA0MDMg4oCUIGF1Y2ggZGVyIFZlcmZhc3NlciBzZWxic3QgZGFyZiBuaWNodCBsb2Vz -Y2hlbg0KICAgICAgICAgICAgIyAoYmV3dXNzdGUgRGVzaWduZW50c2NoZWlkdW5nOiBLb21tZW50 -YXItVmVybGF1ZiBpc3QgQ2hyb25paykuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp -L3BsYW51bmcva29tbWVudGFyJyAtYW5kICRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAg -ICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAo -LW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEz -OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpz -b24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSAkYS5kYXR1bQ0KICAgICAgICAgICAgICAgICRw -ZXJzb25JZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICAka29tbWVudGFy -SWQgPSBbc3RyaW5nXSRhLmtvbW1lbnRhcklkDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGRh -dHVtIC1vciAtbm90ICRwZXJzb25JZCAtb3IgLW5vdCAka29tbWVudGFySWQpIHsNCiAgICAgICAg -ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ2RhdHVtLCBwZXJzb25JZCB1bmQga29t -bWVudGFySWQgc2luZCBQZmxpY2h0JyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90 -ICgkci5pc3RTdXBlclVzZXIgLW9yICRyLmlzdEdlc2FtdHZlcmFudHdvcnRsaWNoKSkgew0KICAg -ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciB1bmQg -R2VzYW10dmVyYW50d29ydGxpY2hlIGR1ZXJmZW4gS29tbWVudGFyZSBsb2VzY2hlbicgNDAzDQog -ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICRnZWxvZXNjaHRlclRleHQgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQog -ICAgICAgICAgICAgICAgICAgICRlcmcgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpz -b24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0 -ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRw -bGFudW5nIC1vciAtbm90ICRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2tvbW1lbnRhcmUn +ICAgICAgICAgJGdlbG9lc2NodGVyVGV4dCA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsN +CiAgICAgICAgICAgICAgICAgICAgJGVyZyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcu +anNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmpl +Y3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg +JHBsYW51bmcgLW9yIC1ub3QgJHBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sna29tbWVudGFy +ZSddKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGwgfSB9DQogICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAkcGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0LlByb3BlcnRpZXNbJGRhdHVt XSkgeyByZXR1cm4gQHsgdGV4dCA9ICRudWxsIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKC1ub3QgJHBsYW51bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRkYXR1bV0p -IHsgcmV0dXJuIEB7IHRleHQgPSAkbnVsbCB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgtbm90ICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBl -cnNvbklkXSkgeyByZXR1cm4gQHsgdGV4dCA9ICRudWxsIH0gfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgJHZvcmggPSAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS4kcGVyc29uSWQNCiAgICAg -ICAgICAgICAgICAgICAgICAgICMgQ29tcGF0IGZ1ZXIgQWx0LUZvcm1hdGUgKFNwcmludCAzIOKA -lCBEcmlmdC9Sb2J1c3RoZWl0DQogICAgICAgICAgICAgICAgICAgICAgICAjIDIwMjYtMDUtMjgp -OiBDbGllbnQga2VubnplaWNobmV0IFN0cmluZy0gb2RlciBTaW5nbGUtDQogICAgICAgICAgICAg -ICAgICAgICAgICAjIE9iamVjdC1vaG5lLUlEIEVpbnRyYWVnZSBpbiBrb21tZW50YXJMaXN0ZSgp -IG1pdA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBTZW50aW5lbC1JRCAna19sZWdhY3knLiBE -RUxFVEUgbWl0IGRpZXNlciBJRCBnZWdlbg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBlaW5l -biBBbHQtRWludHJhZyA9IGtvbXBsZXR0ZXIgRWludHJhZyB3aXJkIGVudGZlcm50DQogICAgICAg -ICAgICAgICAgICAgICAgICAjIChNaWdyYXRpb24gKyBMb2VzY2h1bmcgaW4gZWluZW0gU2Nocml0 -dCkuDQogICAgICAgICAgICAgICAgICAgICAgICAkdHJlZmZlciA9ICRudWxsDQogICAgICAgICAg -ICAgICAgICAgICAgICAkbmV1ZUxpc3RlID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMu -R2VuZXJpYy5MaXN0W29iamVjdF0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdm9yaCAt -aXMgW3N0cmluZ10gLWFuZCAkdm9yaCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgka29tbWVudGFySWQgLWVxICdrX2xlZ2FjeScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJHRyZWZmZXIgPSBbUFNDdXN0b21PYmplY3RdQHsgdGV4dCA9ICR2b3JoIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICByZXR1cm4gQHsgdGV4dCA9ICRudWxsOyBmZWhsZXIgPSAna29tbWVudGFyTmlj -aHRHZWZ1bmRlbicgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3Rl -ID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2b3JoIC1pcyBbYXJyYXld -IC1vciAoJHZvcmggLWlzIFtTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmFibGVdIC1hbmQgLW5v -dCAoJHZvcmggLWlzIFtzdHJpbmddKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJGxpc3RlID0gQCgkdm9yaCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Vp -ZiAoJHZvcmggLWFuZCAkdm9yaC5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdElkID0gaWYgKCR2b3JoLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ2lkJ10pIHsgW3N0cmluZ10kdm9yaC5pZCB9IGVsc2UgeyAnJyB9DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRhbHRJZCkgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRrb21tZW50YXJJZCAtZXEgJ2tfbGVnYWN5Jykg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cmVmZmVyID0gJHZv -cmgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHRleHQgPSAkbnVsbDsg -ZmVobGVyID0gJ2tvbW1lbnRhck5pY2h0R2VmdW5kZW4nIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZSA9IEAoJHZvcmgp -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRyZWZmZXIp -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGUgaW4gJGxpc3Rl -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWlkID0gaWYgKCRlIC1h -bmQgJGUuUFNPYmplY3QuUHJvcGVydGllc1snaWQnXSkgeyBbc3RyaW5nXSRlLmlkIH0gZWxzZSB7 -ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZWlkIC1lcSAk -a29tbWVudGFySWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk -dHJlZmZlciA9ICRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXVlTGlzdGUuQWRk -KCRlKSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAkdHJlZmZlcikgeyByZXR1cm4gQHsgdGV4dCA9ICRudWxsOyBmZWhsZXIgPSAn -a29tbWVudGFyTmljaHRHZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -JG5ldWVMaXN0ZS5Db3VudCAtZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg -TGV0enRlciBLb21tZW50YXIgZW50ZmVybnQgLT4gUHJvcGVydHkga29tcGxldHQgcmF1cw0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLlBTT2Jq -ZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRwZXJzb25JZCkNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAjIExlZXJlciBUYWdlcy1CdWNrZXQgYXVmcmFldW1lbg0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICR0YWdQcm9wcyA9IEAoJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNPYmpl -Y3QuUHJvcGVydGllcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRhZ1Byb3Bz -LkNvdW50IC1lcSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5n -LmtvbW1lbnRhcmUuUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJGRhdHVtKQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uJHBl -cnNvbklkID0gQCgkbmV1ZUxpc3RlLlRvQXJyYXkoKSkNCiAgICAgICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNv -bicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgJGVudGZlcm50 -VGV4dCA9IGlmICgkdHJlZmZlci5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsgW3N0cmlu -Z10kdHJlZmZlci50ZXh0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHJl -dHVybiBAeyB0ZXh0ID0gJGVudGZlcm50VGV4dCB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgaWYgKCRlcmcuZmVobGVyKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoJGVyZy5mZWhsZXIgLWVxICdrb21tZW50YXJOaWNodEdlZnVuZGVuJykgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLb21tZW50YXIg -bWl0IGRpZXNlciBJRCBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg -ICRnZWxvZXNjaHRlclRleHQgPSAkZXJnLnRleHQNCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsN -CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjog -JF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMg -UmVkYWN0aW9uIChTcHJpbnQgMSDigJQgU2ljaGVyaGVpdHMtTm90YnJlbXNlIDIwMjYtMDUtMjgp -Og0KICAgICAgICAgICAgICAgICMgUElJLVNjaHV0ei4gRnJ1ZWhlciBsYW5kZXRlIGRlciB2b2xs -c3RhZW5kaWdlIEtvbW1lbnRhci1UZXh0IGltDQogICAgICAgICAgICAgICAgIyBMb2didWNoIOKA -lCB3ZW5uIGRlciBLb21tZW50YXIgS3JhbmtoZWl0cy0vRGlzemlwbGluYXItSW5mbyBlbnRoaWVs -dCwNCiAgICAgICAgICAgICAgICAjIGxlYnRlIHNpZSBuYWNoICdMb2VzY2hlbicgd2VpdGVyIGlt -IExvZy4gSmV0enQgbnVyIExhZW5nZSArIGt1cnplcg0KICAgICAgICAgICAgICAgICMgQXVzenVn -ICg0MCBaZWljaGVuKSwgZ2VudWcgZnVlciBOYWNodm9sbHppZWhiYXJrZWl0IG9obmUgVm9sbHRl -eHQuDQogICAgICAgICAgICAgICAgJHRleHRWb3JzY2hhdSA9ICcnDQogICAgICAgICAgICAgICAg -aWYgKCRnZWxvZXNjaHRlclRleHQpIHsNCiAgICAgICAgICAgICAgICAgICAgJGt1cnogPSAkZ2Vs -b2VzY2h0ZXJUZXh0DQogICAgICAgICAgICAgICAgICAgIGlmICgka3Vyei5MZW5ndGggLWd0IDQw -KSB7ICRrdXJ6ID0gJGt1cnouU3Vic3RyaW5nKDAsIDQwKSArICfigKYnIH0NCiAgICAgICAgICAg -ICAgICAgICAgJHRleHRWb3JzY2hhdSA9ICRrdXJ6DQogICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICR0ZXh0TGFlbmdlID0gaWYgKCRnZWxvZXNjaHRlclRleHQpIHsgJGdlbG9lc2No -dGVyVGV4dC5MZW5ndGggfSBlbHNlIHsgMCB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWlu -dHJhZyAna29tbWVudGFyLmdlbG9lc2NodCcgQHsNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0g -ICAgICAgICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgICAgID0gJHBl -cnNvbklkDQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklkICAgPSAka29tbWVudGFySWQN -CiAgICAgICAgICAgICAgICAgICAgdGV4dFZvcnNjaGF1ICA9ICR0ZXh0Vm9yc2NoYXUNCiAgICAg -ICAgICAgICAgICAgICAgdGV4dExhZW5nZSAgICA9ICR0ZXh0TGFlbmdlDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFaW50cmFnICdrb21tZW50YXInIEB7 -DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAg -ICAgIHBlcnNvbklkID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklk -ID0gJGtvbW1lbnRhcklkDQogICAgICAgICAgICAgICAgICAgICMgTGl2ZS1TeW5jLUNoYW5uZWwg -YnJhdWNodCBkZW4gVGV4dCBuaWNodCDigJQgQnJvd3NlciBsYWVkdA0KICAgICAgICAgICAgICAg -ICAgICAjIGJlaSBuYWVjaHN0ZW0gUmVuZGVyIGVoIGF1cyBwbGFudW5nLmpzb24gKHdvIGRlciBF -aW50cmFnDQogICAgICAgICAgICAgICAgICAgICMgd2VnIGlzdCkuIEhpZXIgbnVyIE1ldGFkYXRl -biBmdWVyIEFrdGl2aXRhZXRzLUFuemVpZ2UuDQogICAgICAgICAgICAgICAgICAgIG5ldSAgICAg -ID0gJycNCiAgICAgICAgICAgICAgICAgICAgemVpdHN0ZW1wZWwgPSAoR2V0LURhdGUpLlRvU3Ry -aW5nKCdvJykNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2Jq -ZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0Jzsga29tbWVudGFySWQgPSAka29t -bWVudGFySWQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAg -ICAgICAgICAgICMgPT09PT0gUEVSU09ORU4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAt -ZXEgJy9hcGkvcGVyc29uZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdL -ZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5 -ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsg -U2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgICRuZXUgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAg -ICAgICAgICAjIFJlYWQtTW9kaWZ5LVdyaXRlIGF0b21hciBpbiBkZXIgRGF0ZWktU3BlcnJlLiBX -aWNodGlnIG5pY2h0IG51cg0KICAgICAgICAgICAgICAgICMgZ2VnZW4gTG9zdCBVcGRhdGVzLCBz -b25kZXJuIGdlZ2VuIGRpZSBtYXhJZC1SYWNlOiB6d2VpIHBhcmFsbGVsZQ0KICAgICAgICAgICAg -ICAgICMgUGVyc29uZW4tQW5sYWdlbiB3dWVyZGVuIHNvbnN0IGRpZXNlbGJlIG1heElkIGxlc2Vu -IHVuZCBJREVOVElTQ0hFDQogICAgICAgICAgICAgICAgIyBJRHMgdmVyZ2ViZW4gKGRvcHBlbHRl -IFBlcnNvbmVuLUlEcyA9IGtvcnJ1cHRlciBTdGF0ZSkuDQogICAgICAgICAgICAgICAgJHBlcnNS -ZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgJHBlcnNS -ZXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAg -ICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAg -ICAgICRtYXhJZCA9IDANCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5w -ZXJzb25lbikgeyBpZiAoJHAuaWQgLWd0ICRtYXhJZCkgeyAkbWF4SWQgPSAkcC5pZCB9IH0NCiAg -ICAgICAgICAgICAgICAkbmV1ZUlkID0gJG1heElkICsgMQ0KDQogICAgICAgICAgICAgICAgIyBF -aW5yZWlodW5ncy1Mb2dpazogInVudGVuIiAoRGVmYXVsdCksICJ2b3IiIG9kZXIgIm5hY2giIGVp -bmVyIFJlZmVyZW56cGVyc29uDQogICAgICAgICAgICAgICAgJGVpbnJlaWhlbiA9ICd1bnRlbicN -CiAgICAgICAgICAgICAgICBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW5yZWloZW4n -XSAtYW5kICRuZXUuZWlucmVpaGVuKSB7ICRlaW5yZWloZW4gPSAoW3N0cmluZ10kbmV1LmVpbnJl -aWhlbikuVG9Mb3dlcigpIH0NCiAgICAgICAgICAgICAgICAkcmVmSWQgPSAkbnVsbA0KICAgICAg -ICAgICAgICAgIGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3JlZmVyZW56SWQnXSAtYW5k -ICRudWxsIC1uZSAkbmV1LnJlZmVyZW56SWQpIHsgJHJlZklkID0gW2ludF0kbmV1LnJlZmVyZW56 -SWQgfQ0KDQogICAgICAgICAgICAgICAgJHppZWxQb3MgPSAkbnVsbA0KICAgICAgICAgICAgICAg -IGlmICgoJGVpbnJlaWhlbiAtZXEgJ3ZvcicgLW9yICRlaW5yZWloZW4gLWVxICduYWNoJykgLWFu -ZCAkbnVsbCAtbmUgJHJlZklkKSB7DQogICAgICAgICAgICAgICAgICAgICRyZWZQb3MgPSAkbnVs -bA0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtpbnRdJHAuaWQgLWVxICRyZWZJZCkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWZQb3MgPSBpZiAoJHAuUFNPYmplY3QuUHJv -cGVydGllc1sncG9zaXRpb24nXSAtYW5kICRwLnBvc2l0aW9uKSB7IFtpbnRdJHAucG9zaXRpb24g -fSBlbHNlIHsgMCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICBpZiAoJG51bGwgLW5lICRyZWZQb3MpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR6 -aWVsUG9zID0gaWYgKCRlaW5yZWloZW4gLWVxICd2b3InKSB7ICRyZWZQb3MgfSBlbHNlIHsgJHJl -ZlBvcyArIDEgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBQb3NpdGlvbmVuIGFiIHppZWxQ -b3MgdW0gMSBuYWNoIGhpbnRlbiBzY2hpZWJlbg0KICAgICAgICAgICAgICAgICAgICAgICAgZm9y +aWYgKC1ub3QgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1sk +cGVyc29uSWRdKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGwgfSB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAkdm9yaCA9ICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLiRwZXJzb25JZA0KICAg +ICAgICAgICAgICAgICAgICAgICAgIyBDb21wYXQgZnVlciBBbHQtRm9ybWF0ZSAoU3ByaW50IDMg +4oCUIERyaWZ0L1JvYnVzdGhlaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICMgMjAyNi0wNS0y +OCk6IENsaWVudCBrZW5uemVpY2huZXQgU3RyaW5nLSBvZGVyIFNpbmdsZS0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICMgT2JqZWN0LW9obmUtSUQgRWludHJhZWdlIGluIGtvbW1lbnRhckxpc3Rl +KCkgbWl0DQogICAgICAgICAgICAgICAgICAgICAgICAjIFNlbnRpbmVsLUlEICdrX2xlZ2FjeScu +IERFTEVURSBtaXQgZGllc2VyIElEIGdlZ2VuDQogICAgICAgICAgICAgICAgICAgICAgICAjIGVp +bmVuIEFsdC1FaW50cmFnID0ga29tcGxldHRlciBFaW50cmFnIHdpcmQgZW50ZmVybnQNCiAgICAg +ICAgICAgICAgICAgICAgICAgICMgKE1pZ3JhdGlvbiArIExvZXNjaHVuZyBpbiBlaW5lbSBTY2hy +aXR0KS4NCiAgICAgICAgICAgICAgICAgICAgICAgICR0cmVmZmVyID0gJG51bGwNCiAgICAgICAg +ICAgICAgICAgICAgICAgICRuZXVlTGlzdGUgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9u +cy5HZW5lcmljLkxpc3Rbb2JqZWN0XQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2b3Jo +IC1pcyBbc3RyaW5nXSAtYW5kICR2b3JoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRrb21tZW50YXJJZCAtZXEgJ2tfbGVnYWN5Jykgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkdHJlZmZlciA9IFtQU0N1c3RvbU9iamVjdF1AeyB0ZXh0ID0gJHZvcmggfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIHJldHVybiBAeyB0ZXh0ID0gJG51bGw7IGZlaGxlciA9ICdrb21tZW50YXJO +aWNodEdlZnVuZGVuJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGlz +dGUgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZvcmggLWlzIFthcnJh +eV0gLW9yICgkdm9yaCAtaXMgW1N5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYWJsZV0gLWFuZCAt +bm90ICgkdm9yaCAtaXMgW3N0cmluZ10pKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkbGlzdGUgPSBAKCR2b3JoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz +ZWlmICgkdm9yaCAtYW5kICR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0SWQgPSBpZiAoJHZvcmguUFNPYmplY3Qu +UHJvcGVydGllc1snaWQnXSkgeyBbc3RyaW5nXSR2b3JoLmlkIH0gZWxzZSB7ICcnIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGFsdElkKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGtvbW1lbnRhcklkIC1lcSAna19sZWdhY3kn +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyZWZmZXIgPSAk +dm9yaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdGV4dCA9ICRudWxs +OyBmZWhsZXIgPSAna29tbWVudGFyTmljaHRHZWZ1bmRlbicgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs +c2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlID0gQCgkdm9y +aCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdHJlZmZl +cikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZSBpbiAkbGlz +dGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlaWQgPSBpZiAoJGUg +LWFuZCAkZS5QU09iamVjdC5Qcm9wZXJ0aWVzWydpZCddKSB7IFtzdHJpbmddJGUuaWQgfSBlbHNl +IHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlaWQgLWVx +ICRrb21tZW50YXJJZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICR0cmVmZmVyID0gJGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz +ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ldWVMaXN0ZS5B +ZGQoJGUpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgtbm90ICR0cmVmZmVyKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGw7IGZlaGxlciA9 +ICdrb21tZW50YXJOaWNodEdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkbmV1ZUxpc3RlLkNvdW50IC1lcSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +IyBMZXR6dGVyIEtvbW1lbnRhciBlbnRmZXJudCAtPiBQcm9wZXJ0eSBrb21wbGV0dCByYXVzDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNP +YmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNvbklkKQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICMgTGVlcmVyIFRhZ2VzLUJ1Y2tldCBhdWZyYWV1bWVuDQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJHRhZ1Byb3BzID0gQCgkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS5QU09i +amVjdC5Qcm9wZXJ0aWVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGFnUHJv +cHMuQ291bnQgLWVxIDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51 +bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkZGF0dW0pDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS4k +cGVyc29uSWQgPSBAKCRuZXVlTGlzdGUuVG9BcnJheSgpKQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5q +c29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkZW50ZmVy +bnRUZXh0ID0gaWYgKCR0cmVmZmVyLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgeyBbc3Ry +aW5nXSR0cmVmZmVyLnRleHQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +cmV0dXJuIEB7IHRleHQgPSAkZW50ZmVybnRUZXh0IH0NCiAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICBpZiAoJGVyZy5mZWhsZXIpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgkZXJnLmZlaGxlciAtZXEgJ2tvbW1lbnRhck5pY2h0R2VmdW5kZW4nKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tvbW1lbnRh +ciBtaXQgZGllc2VyIElEIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVlDQogICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg +ICAgJGdlbG9lc2NodGVyVGV4dCA9ICRlcmcudGV4dA0KICAgICAgICAgICAgICAgIH0gY2F0Y2gg +ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVy +OiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +IyBSZWRhY3Rpb24gKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1Ob3RicmVtc2UgMjAyNi0wNS0y +OCk6DQogICAgICAgICAgICAgICAgIyBQSUktU2NodXR6LiBGcnVlaGVyIGxhbmRldGUgZGVyIHZv +bGxzdGFlbmRpZ2UgS29tbWVudGFyLVRleHQgaW0NCiAgICAgICAgICAgICAgICAjIExvZ2J1Y2gg +4oCUIHdlbm4gZGVyIEtvbW1lbnRhciBLcmFua2hlaXRzLS9EaXN6aXBsaW5hci1JbmZvIGVudGhp +ZWx0LA0KICAgICAgICAgICAgICAgICMgbGVidGUgc2llIG5hY2ggJ0xvZXNjaGVuJyB3ZWl0ZXIg +aW0gTG9nLiBKZXR6dCBudXIgTGFlbmdlICsga3VyemVyDQogICAgICAgICAgICAgICAgIyBBdXN6 +dWcgKDQwIFplaWNoZW4pLCBnZW51ZyBmdWVyIE5hY2h2b2xsemllaGJhcmtlaXQgb2huZSBWb2xs +dGV4dC4NCiAgICAgICAgICAgICAgICAkdGV4dFZvcnNjaGF1ID0gJycNCiAgICAgICAgICAgICAg +ICBpZiAoJGdlbG9lc2NodGVyVGV4dCkgew0KICAgICAgICAgICAgICAgICAgICAka3VyeiA9ICRn +ZWxvZXNjaHRlclRleHQNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRrdXJ6Lkxlbmd0aCAtZ3Qg +NDApIHsgJGt1cnogPSAka3Vyei5TdWJzdHJpbmcoMCwgNDApICsgJ+KApicgfQ0KICAgICAgICAg +ICAgICAgICAgICAkdGV4dFZvcnNjaGF1ID0gJGt1cnoNCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgJHRleHRMYWVuZ2UgPSBpZiAoJGdlbG9lc2NodGVyVGV4dCkgeyAkZ2Vsb2Vz +Y2h0ZXJUZXh0Lkxlbmd0aCB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dF +aW50cmFnICdrb21tZW50YXIuZ2Vsb2VzY2h0JyBAew0KICAgICAgICAgICAgICAgICAgICBkYXR1 +bSAgICAgICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkICAgICAgPSAk +cGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAga29tbWVudGFySWQgICA9ICRrb21tZW50YXJJ +ZA0KICAgICAgICAgICAgICAgICAgICB0ZXh0Vm9yc2NoYXUgID0gJHRleHRWb3JzY2hhdQ0KICAg +ICAgICAgICAgICAgICAgICB0ZXh0TGFlbmdlICAgID0gJHRleHRMYWVuZ2UNCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VpbnRyYWcgJ2tvbW1lbnRhcicg +QHsNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAg +ICAgICAgcGVyc29uSWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAga29tbWVudGFy +SWQgPSAka29tbWVudGFySWQNCiAgICAgICAgICAgICAgICAgICAgIyBMaXZlLVN5bmMtQ2hhbm5l +bCBicmF1Y2h0IGRlbiBUZXh0IG5pY2h0IOKAlCBCcm93c2VyIGxhZWR0DQogICAgICAgICAgICAg +ICAgICAgICMgYmVpIG5hZWNoc3RlbSBSZW5kZXIgZWggYXVzIHBsYW51bmcuanNvbiAod28gZGVy +IEVpbnRyYWcNCiAgICAgICAgICAgICAgICAgICAgIyB3ZWcgaXN0KS4gSGllciBudXIgTWV0YWRh +dGVuIGZ1ZXIgQWt0aXZpdGFldHMtQW56ZWlnZS4NCiAgICAgICAgICAgICAgICAgICAgbmV1ICAg +ICAgPSAnJw0KICAgICAgICAgICAgICAgICAgICB6ZWl0c3RlbXBlbCA9IChHZXQtRGF0ZSkuVG9T +dHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25P +YmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQnOyBrb21tZW50YXJJZCA9ICRr +b21tZW50YXJJZCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0K +ICAgICAgICAgICAgIyA9PT09PSBQRVJTT05FTiA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRo +IC1lcSAnL2FwaS9wZXJzb25lbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug +J0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJv +ZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkg +eyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9 +DQogICAgICAgICAgICAgICAgJG5ldSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAg +ICAgICAgICAgICMgUmVhZC1Nb2RpZnktV3JpdGUgYXRvbWFyIGluIGRlciBEYXRlaS1TcGVycmUu +IFdpY2h0aWcgbmljaHQgbnVyDQogICAgICAgICAgICAgICAgIyBnZWdlbiBMb3N0IFVwZGF0ZXMs +IHNvbmRlcm4gZ2VnZW4gZGllIG1heElkLVJhY2U6IHp3ZWkgcGFyYWxsZWxlDQogICAgICAgICAg +ICAgICAgIyBQZXJzb25lbi1BbmxhZ2VuIHd1ZXJkZW4gc29uc3QgZGllc2VsYmUgbWF4SWQgbGVz +ZW4gdW5kIElERU5USVNDSEUNCiAgICAgICAgICAgICAgICAjIElEcyB2ZXJnZWJlbiAoZG9wcGVs +dGUgUGVyc29uZW4tSURzID0ga29ycnVwdGVyIFN0YXRlKS4NCiAgICAgICAgICAgICAgICAkcGVy +c1JlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkcGVy +c1JlcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAg +ICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAg +ICAgICAgJG1heElkID0gMA0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5n +LnBlcnNvbmVuKSB7IGlmICgkcC5pZCAtZ3QgJG1heElkKSB7ICRtYXhJZCA9ICRwLmlkIH0gfQ0K +ICAgICAgICAgICAgICAgICRuZXVlSWQgPSAkbWF4SWQgKyAxDQoNCiAgICAgICAgICAgICAgICAj +IEVpbnJlaWh1bmdzLUxvZ2lrOiAidW50ZW4iIChEZWZhdWx0KSwgInZvciIgb2RlciAibmFjaCIg +ZWluZXIgUmVmZXJlbnpwZXJzb24NCiAgICAgICAgICAgICAgICAkZWlucmVpaGVuID0gJ3VudGVu +Jw0KICAgICAgICAgICAgICAgIGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnJlaWhl +biddIC1hbmQgJG5ldS5laW5yZWloZW4pIHsgJGVpbnJlaWhlbiA9IChbc3RyaW5nXSRuZXUuZWlu +cmVpaGVuKS5Ub0xvd2VyKCkgfQ0KICAgICAgICAgICAgICAgICRyZWZJZCA9ICRudWxsDQogICAg +ICAgICAgICAgICAgaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1sncmVmZXJlbnpJZCddIC1h +bmQgJG51bGwgLW5lICRuZXUucmVmZXJlbnpJZCkgeyAkcmVmSWQgPSBbaW50XSRuZXUucmVmZXJl +bnpJZCB9DQoNCiAgICAgICAgICAgICAgICAkemllbFBvcyA9ICRudWxsDQogICAgICAgICAgICAg +ICAgaWYgKCgkZWlucmVpaGVuIC1lcSAndm9yJyAtb3IgJGVpbnJlaWhlbiAtZXEgJ25hY2gnKSAt +YW5kICRudWxsIC1uZSAkcmVmSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlZlBvcyA9ICRu +dWxsDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVu +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW2ludF0kcC5pZCAtZXEgJHJlZklkKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlZlBvcyA9IGlmICgkcC5QU09iamVjdC5Q +cm9wZXJ0aWVzWydwb3NpdGlvbiddIC1hbmQgJHAucG9zaXRpb24pIHsgW2ludF0kcC5wb3NpdGlv +biB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgIGlmICgkbnVsbCAtbmUgJHJlZlBvcykgew0KICAgICAgICAgICAgICAgICAgICAgICAg +JHppZWxQb3MgPSBpZiAoJGVpbnJlaWhlbiAtZXEgJ3ZvcicpIHsgJHJlZlBvcyB9IGVsc2UgeyAk +cmVmUG9zICsgMSB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIFBvc2l0aW9uZW4gYWIgemll +bFBvcyB1bSAxIG5hY2ggaGludGVuIHNjaGllYmVuDQogICAgICAgICAgICAgICAgICAgICAgICBm +b3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRwcCA9IGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddIC1hbmQg +JHAucG9zaXRpb24pIHsgW2ludF0kcC5wb3NpdGlvbiB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJHBwIC1nZSAkemllbFBvcykgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sncG9zaXRpb24nXSkg +eyAkcC5wb3NpdGlvbiA9ICRwcCArIDEgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdwb3NpdGlvbicgLU5v +dGVQcm9wZXJ0eVZhbHVlICgkcHAgKyAxKSAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICR6aWVs +UG9zKSB7DQogICAgICAgICAgICAgICAgICAgICRtYXhQb3MgPSAwDQogICAgICAgICAgICAgICAg +ICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7ICRwb3MgPSBpZiAoJHAucG9z +aXRpb24pIHsgW2ludF0kcC5wb3NpdGlvbiB9IGVsc2UgeyAwIH07IGlmICgkcG9zIC1ndCAkbWF4 +UG9zKSB7ICRtYXhQb3MgPSAkcG9zIH0gfQ0KICAgICAgICAgICAgICAgICAgICAkemllbFBvcyA9 +ICRtYXhQb3MgKyAxDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJHBlcnNv +biA9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIGlkID0gJG5ldWVJZA0KICAgICAg +ICAgICAgICAgICAgICBha3RpdiA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2FrdGl2 +J10pIHsgJG5ldS5ha3RpdiB9IGVsc2UgeyAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIG5h +bWUgPSAkbmV1Lm5hbWUNCiAgICAgICAgICAgICAgICAgICAgdm9ybmFtZSA9IGlmICgkbmV1LlBT +T2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUnXSkgeyAkbmV1LnZvcm5hbWUgfSBlbHNlIHsgJycg +fQ0KICAgICAgICAgICAgICAgICAgICBkaWVuc3RncmFkID0gaWYgKCRuZXUuUFNPYmplY3QuUHJv +cGVydGllc1snZGllbnN0Z3JhZCddKSB7ICRuZXUuZGllbnN0Z3JhZCB9IGVsc2UgeyAnJyB9DQog +ICAgICAgICAgICAgICAgICAgIGZ1bmt0aW9uID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGll +c1snZnVua3Rpb24nXSkgeyAkbmV1LmZ1bmt0aW9uIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg +ICAgICAgICAgZ3J1cHBlID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZ3J1cHBlJ10p +IHsgJG5ldS5ncnVwcGUgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBvZSA9IGlm +ICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ29lJ10pIHsgJG5ldS5vZSB9IGVsc2UgeyAnJyB9 +DQogICAgICAgICAgICAgICAgICAgIGRpZW5zdG51bW1lciA9IGlmICgkbmV1LlBTT2JqZWN0LlBy +b3BlcnRpZXNbJ2RpZW5zdG51bW1lciddKSB7ICRuZXUuZGllbnN0bnVtbWVyIH0gZWxzZSB7ICcn +IH0NCiAgICAgICAgICAgICAgICAgICAgdGVsZWZvbiA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ3RlbGVmb24nXSkgeyAkbmV1LnRlbGVmb24gfSBlbHNlIHsgJycgfQ0KICAgICAgICAg +ICAgICAgICAgICBwb3NpdGlvbiA9ICR6aWVsUG9zDQogICAgICAgICAgICAgICAgICAgIGVtYWls +ID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZW1haWwnXSkgeyAkbmV1LmVtYWlsIH0g +ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgbndLZW5udW5nID0gaWYgKCRuZXUuUFNP +YmplY3QuUHJvcGVydGllc1snbndLZW5udW5nJ10pIHsgJG5ldS5ud0tlbm51bmcgfSBlbHNlIHsg +JycgfQ0KICAgICAgICAgICAgICAgICAgICBnZWJ1cnRzZGF0dW0gPSBpZiAoJG5ldS5QU09iamVj +dC5Qcm9wZXJ0aWVzWydnZWJ1cnRzZGF0dW0nXSkgeyAkbmV1LmdlYnVydHNkYXR1bSB9IGVsc2Ug +eyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGVsRGdsUXVhbGlmaXppZXJ0ID0gaWYgKCRuZXUu +UFNPYmplY3QuUHJvcGVydGllc1snZWxEZ2xRdWFsaWZpemllcnQnXSkgeyBbYm9vbF0kbmV1LmVs +RGdsUXVhbGlmaXppZXJ0IH0gZWxzZSB7ICRmYWxzZSB9DQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICMgTWFya2VyIGZ1ZXIgUGVyc29uZW4sIGRpZSBwZXIgRXhjZWwtSW1wb3J0 +IGZyaXNjaCBhbmdlbGVndA0KICAgICAgICAgICAgICAgICMgd3VyZGVuLiBQZXJzb25hbHZlcndh +bHR1bmcgYmxlbmRldCBzaWUgaW0gTmV1aW1wb3J0LUJsb2NrDQogICAgICAgICAgICAgICAgIyBv +YmVuIGVpbiwgYmlzIGRhcyBGbGFnIG1hbnVlbGwgd2VnZ2VzZXR6dCB3aXJkIChFcmxlZGlndC0N +CiAgICAgICAgICAgICAgICAjIEJ1dHRvbikgb2RlciBkYXMgbGV0enRlIFBmbGljaHRmZWxkIChE +aWVuc3RncnVwcGUpIGdlcGZsZWd0DQogICAgICAgICAgICAgICAgIyBpc3QgdW5kIGRlciBVc2Vy +IGF1ZiAiQmxvY2sgbGVlcmVuIiBrbGlja3QuDQogICAgICAgICAgICAgICAgaWYgKCRuZXUuUFNP +YmplY3QuUHJvcGVydGllc1snaW1wb3J0TmV1QW0nXSAtYW5kICRuZXUuaW1wb3J0TmV1QW0pIHsN +CiAgICAgICAgICAgICAgICAgICAgJHBlcnNvblsnaW1wb3J0TmV1QW0nXSA9IFtzdHJpbmddJG5l +dS5pbXBvcnROZXVBbQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVu +Zy5wZXJzb25lbiArPSBbUFNDdXN0b21PYmplY3RdJHBlcnNvbg0KICAgICAgICAgICAgICAgIFdy +aXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAg +ICAgICAgICAgIHJldHVybiBAeyBuZXVlSWQgPSAkbmV1ZUlkOyB6aWVsUG9zID0gJHppZWxQb3M7 +IGVpbnJlaWhlbiA9ICRlaW5yZWloZW4gfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2Ug +KCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5hbmdlbGVndCcgQHsgcGVyc29u +SWQgPSAkcGVyc1Jlcy5uZXVlSWQ7IG5hbWUgPSAiJCgkbmV1LnZvcm5hbWUpICQoJG5ldS5uYW1l +KSIuVHJpbSgpOyBlaW5yZWloZW4gPSAkcGVyc1Jlcy5laW5yZWloZW47IHBvc2l0aW9uID0gJHBl +cnNSZXMuemllbFBvcyB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z +ZSBAeyBzdGF0dXMgPSAnYW5nZWxlZ3QnOyBpZCA9ICRwZXJzUmVzLm5ldWVJZDsgcG9zaXRpb24g +PSAkcGVyc1Jlcy56aWVsUG9zIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGVyc29uZW4vKFxkKykk +JyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl +c3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUn +IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtpbnRdJE1hdGNo +ZXNbMV0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAg +ICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdl +IHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkdXBkYXRlID0gJGJv +ZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgIyBBdWRpdC1QaGFzZSBBLjMg +KDIwMjYtMDUtMjEpOiBQcml2aWxlZ2llbi1TY2h1dHouIFJlaW5lDQogICAgICAgICAgICAgICAg +IyBGYWNoYXVmc2ljaHQtQWRtaW5zIChzZWhlbi5hZG1pbmlzdHJhdGlvbj10cnVlLCBhYmVyIGtl +aW4gU1UpDQogICAgICAgICAgICAgICAgIyBkdWVyZmVuIFN0YW1tZGF0ZW4gZWRpdGllcmVuLCBh +YmVyIEtFSU5FIFNpY2h0YmFya2VpdHMtDQogICAgICAgICAgICAgICAgIyBPdmVycmlkZXMgKGBz +ZWhlbmApIG9kZXIgZWRpdGllci1SZWNodGUgKGBlZGl0UmVjaHRlYCkgc2V0emVuDQogICAgICAg +ICAgICAgICAgIyDigJQgc29uc3Qga29lbm50ZW4gc2llIHNpY2ggTG9nYnVjaC0vU3RhdGlzdGlr +LVNpY2h0IHNlbGJzdA0KICAgICAgICAgICAgICAgICMgZnJlaXNjaGFsdGVuLiBQZXIgRGV2VG9v +bHMtbWFuaXB1bGllcnRlcyBQYXlsb2FkIGFiZmFuZ2VuLg0KICAgICAgICAgICAgICAgIGlmICgt +bm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCR1cGRh +dGUuUFNPYmplY3QuUHJvcGVydGllc1snc2VoZW4nXSkgICAgICB7ICR1cGRhdGUuUFNPYmplY3Qu +UHJvcGVydGllcy5SZW1vdmUoJ3NlaGVuJykgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHVw +ZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlZGl0UmVjaHRlJ10pIHsgJHVwZGF0ZS5QU09iamVj +dC5Qcm9wZXJ0aWVzLlJlbW92ZSgnZWRpdFJlY2h0ZScpIH0NCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgJHB1dFJlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAg +ICAgICAgICAgICAgICAkcHV0UmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29u +JyB7DQogICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcu +anNvbicNCiAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gICA9ICRmYWxzZQ0KICAgICAgICAgICAg +ICAgICRhbHRlV2VydGUgID0gQHt9DQogICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAnJw0K +ICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAg +ICAgICAgICAgICAgICAgIGlmICgkcC5pZCAtZXEgJHBlcnNvbklkKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAkcGVyc29uTmFtZSA9ICgoIiQoJHAudm9ybmFtZSkgJCgkcC5uYW1lKSIpLlRy +aW0oKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcm9wIGluICR1cGRhdGUu +UFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +cHJvcC5OYW1lIC1uZSAnaWQnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRh +bHRlV2VydGVbJHByb3AuTmFtZV0gPSBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1skcHJvcC5O +YW1lXSkgeyAkcC4oJHByb3AuTmFtZSkgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1skcHJvcC5OYW1lXSkg +eyAkcC4oJHByb3AuTmFtZSkgPSAkcHJvcC5WYWx1ZSB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHByb3Au +TmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJHByb3AuVmFsdWUgLUZvcmNlIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAkZ2VmdW5kZW4gPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAg +YnJlYWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAkZ2VmdW5kZW4pIHsgcmV0dXJuIEB7IGdlZnVuZGVuID0gJGZhbHNl +IH0gfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBs +YW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIHJldHVybiBAeyBnZWZ1bmRlbiA9ICR0 +cnVlOyBhbHRlV2VydGUgPSAkYWx0ZVdlcnRlOyBwZXJzb25OYW1lID0gJHBlcnNvbk5hbWUgfQ0K +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAg +ICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNv +bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRwdXRS +ZXMuZ2VmdW5kZW4pIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgIlBlcnNvbiAkcGVyc29uSWQgbmlj +aHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRhbHRlV2VydGUg +ID0gJHB1dFJlcy5hbHRlV2VydGUNCiAgICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9ICRwdXRS +ZXMucGVyc29uTmFtZQ0KDQogICAgICAgICAgICAgICAgIyBEaWZmLURpY3Qg4oCUIG51ciBGZWxk +ZXIsIGluIGRlbmVuIHNpY2ggZGVyIFdlcnQgdGF0c2FlY2hsaWNoDQogICAgICAgICAgICAgICAg +IyBnZWFlbmRlcnQgaGF0LiBKU09OLXN0YWJpbGUgVmVyZ2xlaWNoc2Jhc2lzLg0KICAgICAgICAg +ICAgICAgICRnZWFlbmRlcnQgPSBbb3JkZXJlZF1Ae30NCiAgICAgICAgICAgICAgICBmb3JlYWNo +ICgkcHJvcCBpbiAkdXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAg +ICAgICAgaWYgKCRwcm9wLk5hbWUgLWVxICdpZCcpIHsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICAgICAkYWx0VmFsICA9ICRhbHRlV2VydGVbJHByb3AuTmFtZV0NCiAgICAgICAgICAgICAg +ICAgICAgJG5ldVZhbCAgPSAkcHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAgICAkYWx0SnNv +biA9ICgkYWx0VmFsIHwgQ29udmVydFRvLUpzb24gLUNvbXByZXNzIC1EZXB0aCA4KQ0KICAgICAg +ICAgICAgICAgICAgICAkbmV1SnNvbiA9ICgkbmV1VmFsIHwgQ29udmVydFRvLUpzb24gLUNvbXBy +ZXNzIC1EZXB0aCA4KQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGFsdEpzb24gLW5lICRuZXVK +c29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZ2VhZW5kZXJ0WyRwcm9wLk5hbWVdID0g +W29yZGVyZWRdQHsgYWx0ID0gJGFsdFZhbDsgbmV1ID0gJG5ldVZhbCB9DQogICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dF +aW50cmFnICdwZXJzb24uZ2VhZW5kZXJ0JyAoW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAg +ICAgcGVyc29uSWQgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIG5hbWUgICAgICA9 +ICRwZXJzb25OYW1lDQogICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydCA9ICRnZWFlbmRlcnQN +CiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgICMgSGlud2Vpcy1UcmlnZ2VyOiBJ +ZGVudGl0YWV0cy1BZW5kZXJ1bmcgKG53S2VubnVuZyAvIGVtYWlsKSBiZWtvbW10DQogICAgICAg +ICAgICAgICAgIyBlaW5lbiBJbi1BcHAtSGlud2VpcyBmdWVyIFNVICsgR2VzYW10dmVyYW50d29y +dGxpY2hlLiBQcm8gRmVsZCBlaW4NCiAgICAgICAgICAgICAgICAjIGVpZ2VuZXIgRWludHJhZywg +ZGFtaXQgZGFzIE1vZGFsIGxlc2JhciBibGVpYnQuDQogICAgICAgICAgICAgICAgZm9yZWFjaCAo +JGZlbGQgaW4gQCgnbndLZW5udW5nJywgJ2VtYWlsJykpIHsNCiAgICAgICAgICAgICAgICAgICAg +aWYgKCRnZWFlbmRlcnQuQ29udGFpbnMoJGZlbGQpKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAkZGlmZiA9ICRnZWFlbmRlcnRbJGZlbGRdDQogICAgICAgICAgICAgICAgICAgICAgICBOZXct +SGlud2VpcyAnaWRlbnRpdGFldF9nZWFlbmRlcnQnIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIHBlcnNvbl9pZCAgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgcGVyc29uX25hbWUgPSAkcGVyc29uTmFtZQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGZlbGQgICAgICAgID0gJGZlbGQNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBhbHRlcl93ZXJ0ICA9ICIkKCRkaWZmLmFsdCkiDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgbmV1ZXJfd2VydCAgPSAiJCgkZGlmZi5uZXUpIg0KICAgICAgICAgICAgICAgICAgICAgICAg +fSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk +UmVzcG9uc2UgQHsgc3RhdHVzID0gJ2FrdHVhbGlzaWVydCcgfQ0KICAgICAgICAgICAgICAgIGNv +bnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjIERFTEVURSAvYXBpL3BlcnNvbmVu +L3tpZH0gICAgICAgICAgICAtPiBTb2Z0LURlbGV0ZSAoZ2Vsb2VzY2h0QW0gZ2VzZXR6dCwgUGVy +c29uIGJsZWlidCBpbSBEYXRlbnNhdHogZnVlciBQYXBpZXJrb3JiLVJ1ZWNraG9sdW5nKQ0KICAg +ICAgICAgICAgIyBERUxFVEUgL2FwaS9wZXJzb25lbi97aWR9P2VuZGd1ZWx0aWc9MSAtPiBIYXJk +LURlbGV0ZSAoUGVyc29uIGtvbXBsZXR0IGVudGZlcm5lbiwgRWludHJhZWdlL0tvbW1lbnRhcmUg +dmVyd2Fpc2VuKQ0KICAgICAgICAgICAgIyBWb3IgZGVtIFNvZnQtRGVsZXRlIHdlcmRlbiBpbSBz +ZWxiZW4gWnVnIGJlcmVpdHMgUGFwaWVya29yYi1FaW50cmFlZ2UgYXVmZ2VyYWV1bXQsIGRpZSBh +ZWx0ZXIgYWxzDQogICAgICAgICAgICAjIGFkbWluLnBhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5n +IChEZWZhdWx0IDMwIFRhZ2UpIHNpbmQuIFNvIGJsZWlidCBkZXIgRGF0ZW5zYXR6IHNjaGxhbmss +IG9obmUNCiAgICAgICAgICAgICMgZWluZW4gc2VwYXJhdGVuIENyb24tSm9iIHp1IGJyYXVjaGVu +Lg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGVyc29uZW4vKFxkKykkJyAt +YW5kICRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl +c3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUn +IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtpbnRdJE1hdGNo +ZXNbMV0NCiAgICAgICAgICAgICAgICAkZW5kZ3VlbHRpZyA9ICRmYWxzZQ0KICAgICAgICAgICAg +ICAgIGlmICgkUmVxdWVzdC5VcmwuUXVlcnkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHEgPSBb +U3lzdGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVlcnlTdHJpbmcoJFJlcXVlc3QuVXJsLlF1 +ZXJ5KQ0KICAgICAgICAgICAgICAgICAgICAkZW5kZ3VlbHRpZyA9IChbc3RyaW5nXSRxWydlbmRn +dWVsdGlnJ10pIC1lcSAnMScNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGRl +bFJlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkZGVs +UmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAg +ICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAg +ICAgICAkYWRtaW4gICA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAg +ICAgICAkYXVmYmV3YWhydW5nID0gMzANCiAgICAgICAgICAgICAgICBpZiAoJGFkbWluIC1hbmQg +JGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nJ10p +IHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgJGF1ZmJld2FocnVuZyA9IFtpbnRdJGFkbWlu +LnBhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgJGpldHp0ID0gKEdldC1EYXRlKS5Ub1N0cmluZygnbycpDQogICAg +ICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAnJw0KICAgICAgICAgICAgICAgICRnZWZ1bmRlbiA9 +ICRmYWxzZQ0KICAgICAgICAgICAgICAgICRuZXVlUGVyc29uZW4gPSBAKCkNCiAgICAgICAgICAg +ICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAg +ICAgICBpZiAoJHAuaWQgLWVxICRwZXJzb25JZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAg +JGdlZnVuZGVuID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICRwZXJzb25OYW1lID0g +KCgiJCgkcC52b3JuYW1lKSAkKCRwLm5hbWUpIikuVHJpbSgpKQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRlbmRndWVsdGlnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBI +YXJkLURlbGV0ZTogdWViZXJzcHJpbmdlbiwgUGVyc29uIGZsaWVndCByYXVzDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz +ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ2dlbG9lc2NodEFtJ10pIHsgJHAuZ2Vsb2VzY2h0QW0gPSAkamV0enQgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5h +bWUgJ2dlbG9lc2NodEFtJyAtTm90ZVByb3BlcnR5VmFsdWUgJGpldHp0IC1Gb3JjZSB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJG5ldWVQZXJzb25lbiArPSAkcA0KICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg +ICAgICAgICAgICAgIyBBdXRvLVB1cmdlOiBTb2Z0LURlbGV0ZWQtUGVyc29uZW4sIGRlcmVuIGdl +bG9lc2NodEFtIGFlbHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHMgJGF1ZmJld2Fo +cnVuZyBUYWdlIGlzdCwgd2VyZGVuIGhpZXIgZW5kZ3VlbHRpZyBlbnRmZXJudC4NCiAgICAgICAg +ICAgICAgICAgICAgICAgICRwdXJnZSA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlbG9lc2NodEFtJ10gLWFuZCAkcC5nZWxvZXNj +aHRBbSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRhbHRlciA9IFtkYXRldGltZV0kcC5nZWxvZXNjaHRBbQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKE5ldy1UaW1lU3BhbiAtU3RhcnQgJGFs +dGVyIC1FbmQgKEdldC1EYXRlKSkuVG90YWxEYXlzIC1ndCAkYXVmYmV3YWhydW5nKSB7ICRwdXJn +ZSA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHt9DQogICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +cHVyZ2UpIHsgJG5ldWVQZXJzb25lbiArPSAkcCB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGdlZnVuZGVuKSB7IHJl +dHVybiBAeyBnZWZ1bmRlbiA9ICRmYWxzZSB9IH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZy5w +ZXJzb25lbiA9IFtvYmplY3RbXV1AKCRuZXVlUGVyc29uZW4pDQogICAgICAgICAgICAgICAgV3Jp +dGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAg +ICAgICAgICAgcmV0dXJuIEB7IGdlZnVuZGVuID0gJHRydWU7IHBlcnNvbk5hbWUgPSAkcGVyc29u +TmFtZTsgamV0enQgPSAkamV0enQgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJM +b2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgIGlmICgtbm90ICRkZWxSZXMuZ2VmdW5kZW4pIHsgU2VuZC1FcnJvciAkUmVzcG9u +c2UgIlBlcnNvbiAkcGVyc29uSWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICRwZXJzb25OYW1lID0gJGRlbFJlcy5wZXJzb25OYW1lDQogICAgICAgICAg +ICAgICAgJGpldHp0ID0gJGRlbFJlcy5qZXR6dA0KICAgICAgICAgICAgICAgIGlmICgkZW5kZ3Vl +bHRpZykgew0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdwZXJzb24uZW5k +Z3VlbHRpZy5nZWxvZXNjaHQnIEB7IHBlcnNvbklkID0gJHBlcnNvbklkOyBuYW1lID0gJHBlcnNv +bk5hbWUgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIFdy +aXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5pbi5wYXBpZXJrb3JiJyBAeyBwZXJzb25JZCA9ICRwZXJz +b25JZDsgbmFtZSA9ICRwZXJzb25OYW1lOyBnZWxvZXNjaHRBbSA9ICRqZXR6dCB9DQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg +c3RhdHVzID0gJ2dlbG9lc2NodCc7IG1vZHVzID0gaWYgKCRlbmRndWVsdGlnKSB7ICdlbmRndWVs +dGlnJyB9IGVsc2UgeyAncGFwaWVya29yYicgfSB9DQogICAgICAgICAgICAgICAgY29udGludWUN +CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGVyc29uZW4v +cmVpaGVuZm9sZ2UnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFk +bWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFk +LUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVy +cm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgJHJlaWhlbmZvbGdlID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAg +ICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAn +cGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQt +SnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFj +aCAoJHIgaW4gJHJlaWhlbmZvbGdlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y ZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkcHAgPSBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sncG9zaXRpb24nXSAtYW5kICRw -LnBvc2l0aW9uKSB7IFtpbnRdJHAucG9zaXRpb24gfSBlbHNlIHsgMCB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRwcCAtZ2UgJHppZWxQb3MpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10pIHsg -JHAucG9zaXRpb24gPSAkcHAgKyAxIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ZWxzZSB7ICRwIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAncG9zaXRpb24nIC1Ob3Rl -UHJvcGVydHlWYWx1ZSAoJHBwICsgMSkgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkemllbFBv -cykgew0KICAgICAgICAgICAgICAgICAgICAkbWF4UG9zID0gMA0KICAgICAgICAgICAgICAgICAg -ICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgeyAkcG9zID0gaWYgKCRwLnBvc2l0 -aW9uKSB7IFtpbnRdJHAucG9zaXRpb24gfSBlbHNlIHsgMCB9OyBpZiAoJHBvcyAtZ3QgJG1heFBv -cykgeyAkbWF4UG9zID0gJHBvcyB9IH0NCiAgICAgICAgICAgICAgICAgICAgJHppZWxQb3MgPSAk -bWF4UG9zICsgMQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRwZXJzb24g -PSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBpZCA9ICRuZXVlSWQNCiAgICAgICAg -ICAgICAgICAgICAgYWt0aXYgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydha3Rpdidd -KSB7ICRuZXUuYWt0aXYgfSBlbHNlIHsgJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICBuYW1l -ID0gJG5ldS5uYW1lDQogICAgICAgICAgICAgICAgICAgIHZvcm5hbWUgPSBpZiAoJG5ldS5QU09i -amVjdC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsgJG5ldS52b3JuYW1lIH0gZWxzZSB7ICcnIH0N -CiAgICAgICAgICAgICAgICAgICAgZGllbnN0Z3JhZCA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ2RpZW5zdGdyYWQnXSkgeyAkbmV1LmRpZW5zdGdyYWQgfSBlbHNlIHsgJycgfQ0KICAg -ICAgICAgICAgICAgICAgICBmdW5rdGlvbiA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNb -J2Z1bmt0aW9uJ10pIHsgJG5ldS5mdW5rdGlvbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAg -ICAgICAgIGdydXBwZSA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dydXBwZSddKSB7 -ICRuZXUuZ3J1cHBlIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgb2UgPSBpZiAo -JG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydvZSddKSB7ICRuZXUub2UgfSBlbHNlIHsgJycgfQ0K -ICAgICAgICAgICAgICAgICAgICBkaWVuc3RudW1tZXIgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9w -ZXJ0aWVzWydkaWVuc3RudW1tZXInXSkgeyAkbmV1LmRpZW5zdG51bW1lciB9IGVsc2UgeyAnJyB9 -DQogICAgICAgICAgICAgICAgICAgIHRlbGVmb24gPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyd0ZWxlZm9uJ10pIHsgJG5ldS50ZWxlZm9uIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg -ICAgICAgICAgcG9zaXRpb24gPSAkemllbFBvcw0KICAgICAgICAgICAgICAgICAgICBlbWFpbCA9 -IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VtYWlsJ10pIHsgJG5ldS5lbWFpbCB9IGVs -c2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIG53S2VubnVuZyA9IGlmICgkbmV1LlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ253S2VubnVuZyddKSB7ICRuZXUubndLZW5udW5nIH0gZWxzZSB7ICcn -IH0NCiAgICAgICAgICAgICAgICAgICAgZ2VidXJ0c2RhdHVtID0gaWYgKCRuZXUuUFNPYmplY3Qu -UHJvcGVydGllc1snZ2VidXJ0c2RhdHVtJ10pIHsgJG5ldS5nZWJ1cnRzZGF0dW0gfSBlbHNlIHsg -JycgfQ0KICAgICAgICAgICAgICAgICAgICBlbERnbFF1YWxpZml6aWVydCA9IGlmICgkbmV1LlBT -T2JqZWN0LlByb3BlcnRpZXNbJ2VsRGdsUXVhbGlmaXppZXJ0J10pIHsgW2Jvb2xdJG5ldS5lbERn -bFF1YWxpZml6aWVydCB9IGVsc2UgeyAkZmFsc2UgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAjIE1hcmtlciBmdWVyIFBlcnNvbmVuLCBkaWUgcGVyIEV4Y2VsLUltcG9ydCBm -cmlzY2ggYW5nZWxlZ3QNCiAgICAgICAgICAgICAgICAjIHd1cmRlbi4gUGVyc29uYWx2ZXJ3YWx0 -dW5nIGJsZW5kZXQgc2llIGltIE5ldWltcG9ydC1CbG9jaw0KICAgICAgICAgICAgICAgICMgb2Jl -biBlaW4sIGJpcyBkYXMgRmxhZyBtYW51ZWxsIHdlZ2dlc2V0enQgd2lyZCAoRXJsZWRpZ3QtDQog -ICAgICAgICAgICAgICAgIyBCdXR0b24pIG9kZXIgZGFzIGxldHp0ZSBQZmxpY2h0ZmVsZCAoRGll -bnN0Z3J1cHBlKSBnZXBmbGVndA0KICAgICAgICAgICAgICAgICMgaXN0IHVuZCBkZXIgVXNlciBh -dWYgIkJsb2NrIGxlZXJlbiIga2xpY2t0Lg0KICAgICAgICAgICAgICAgIGlmICgkbmV1LlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ2ltcG9ydE5ldUFtJ10gLWFuZCAkbmV1LmltcG9ydE5ldUFtKSB7DQog -ICAgICAgICAgICAgICAgICAgICRwZXJzb25bJ2ltcG9ydE5ldUFtJ10gPSBbc3RyaW5nXSRuZXUu -aW1wb3J0TmV1QW0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHBsYW51bmcu -cGVyc29uZW4gKz0gW1BTQ3VzdG9tT2JqZWN0XSRwZXJzb24NCiAgICAgICAgICAgICAgICBXcml0 -ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAg -ICAgICAgICByZXR1cm4gQHsgbmV1ZUlkID0gJG5ldWVJZDsgemllbFBvcyA9ICR6aWVsUG9zOyBl -aW5yZWloZW4gPSAkZWlucmVpaGVuIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgi -TG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdwZXJzb24uYW5nZWxlZ3QnIEB7IHBlcnNvbklk -ID0gJHBlcnNSZXMubmV1ZUlkOyBuYW1lID0gIiQoJG5ldS52b3JuYW1lKSAkKCRuZXUubmFtZSki -LlRyaW0oKTsgZWlucmVpaGVuID0gJHBlcnNSZXMuZWlucmVpaGVuOyBwb3NpdGlvbiA9ICRwZXJz -UmVzLnppZWxQb3MgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug -QHsgc3RhdHVzID0gJ2FuZ2VsZWd0JzsgaWQgPSAkcGVyc1Jlcy5uZXVlSWQ7IHBvc2l0aW9uID0g -JHBlcnNSZXMuemllbFBvcyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAg -IH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL3BlcnNvbmVuLyhcZCspJCcg -LWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0 -LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0 -MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbaW50XSRNYXRjaGVz -WzFdDQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6 -dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHVwZGF0ZSA9ICRib2R5 -IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICMgQXVkaXQtUGhhc2UgQS4zICgy -MDI2LTA1LTIxKTogUHJpdmlsZWdpZW4tU2NodXR6LiBSZWluZQ0KICAgICAgICAgICAgICAgICMg -RmFjaGF1ZnNpY2h0LUFkbWlucyAoc2VoZW4uYWRtaW5pc3RyYXRpb249dHJ1ZSwgYWJlciBrZWlu -IFNVKQ0KICAgICAgICAgICAgICAgICMgZHVlcmZlbiBTdGFtbWRhdGVuIGVkaXRpZXJlbiwgYWJl -ciBLRUlORSBTaWNodGJhcmtlaXRzLQ0KICAgICAgICAgICAgICAgICMgT3ZlcnJpZGVzIChgc2Vo -ZW5gKSBvZGVyIGVkaXRpZXItUmVjaHRlIChgZWRpdFJlY2h0ZWApIHNldHplbg0KICAgICAgICAg -ICAgICAgICMg4oCUIHNvbnN0IGtvZW5udGVuIHNpZSBzaWNoIExvZ2J1Y2gtL1N0YXRpc3Rpay1T -aWNodCBzZWxic3QNCiAgICAgICAgICAgICAgICAjIGZyZWlzY2hhbHRlbi4gUGVyIERldlRvb2xz -LW1hbmlwdWxpZXJ0ZXMgUGF5bG9hZCBhYmZhbmdlbi4NCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkdXBkYXRl -LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NlaGVuJ10pICAgICAgeyAkdXBkYXRlLlBTT2JqZWN0LlBy -b3BlcnRpZXMuUmVtb3ZlKCdzZWhlbicpIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCR1cGRh -dGUuUFNPYmplY3QuUHJvcGVydGllc1snZWRpdFJlY2h0ZSddKSB7ICR1cGRhdGUuUFNPYmplY3Qu -UHJvcGVydGllcy5SZW1vdmUoJ2VkaXRSZWNodGUnKSB9DQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICRwdXRSZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAg -ICAgICAgICAgICAgJHB1dFJlcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicg -ew0KICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpz -b24nDQogICAgICAgICAgICAgICAgJGdlZnVuZGVuICAgPSAkZmFsc2UNCiAgICAgICAgICAgICAg -ICAkYWx0ZVdlcnRlICA9IEB7fQ0KICAgICAgICAgICAgICAgICRwZXJzb25OYW1lID0gJycNCiAg -ICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAg -ICAgICAgICAgICAgICBpZiAoJHAuaWQgLWVxICRwZXJzb25JZCkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgJHBlcnNvbk5hbWUgPSAoKCIkKCRwLnZvcm5hbWUpICQoJHAubmFtZSkiKS5Ucmlt -KCkpDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHJvcCBpbiAkdXBkYXRlLlBT -T2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBy -b3AuTmFtZSAtbmUgJ2lkJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0 -ZVdlcnRlWyRwcm9wLk5hbWVdID0gaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJHByb3AuTmFt -ZV0pIHsgJHAuKCRwcm9wLk5hbWUpIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJHByb3AuTmFtZV0pIHsg -JHAuKCRwcm9wLk5hbWUpID0gJHByb3AuVmFsdWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRwcm9wLk5h -bWUgLU5vdGVQcm9wZXJ0eVZhbHVlICRwcm9wLlZhbHVlIC1Gb3JjZSB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgJGdlZnVuZGVuID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGJy -ZWFrDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgJGdlZnVuZGVuKSB7IHJldHVybiBAeyBnZWZ1bmRlbiA9ICRmYWxzZSB9 -IH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFu -dW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICByZXR1cm4gQHsgZ2VmdW5kZW4gPSAkdHJ1 -ZTsgYWx0ZVdlcnRlID0gJGFsdGVXZXJ0ZTsgcGVyc29uTmFtZSA9ICRwZXJzb25OYW1lIH0NCiAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAg -ICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250 -aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcHV0UmVz -LmdlZnVuZGVuKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICJQZXJzb24gJHBlcnNvbklkIG5pY2h0 -IGdlZnVuZGVuIiA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYWx0ZVdlcnRlICA9 -ICRwdXRSZXMuYWx0ZVdlcnRlDQogICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAkcHV0UmVz -LnBlcnNvbk5hbWUNCg0KICAgICAgICAgICAgICAgICMgRGlmZi1EaWN0IOKAlCBudXIgRmVsZGVy -LCBpbiBkZW5lbiBzaWNoIGRlciBXZXJ0IHRhdHNhZWNobGljaA0KICAgICAgICAgICAgICAgICMg -Z2VhZW5kZXJ0IGhhdC4gSlNPTi1zdGFiaWxlIFZlcmdsZWljaHNiYXNpcy4NCiAgICAgICAgICAg -ICAgICAkZ2VhZW5kZXJ0ID0gW29yZGVyZWRdQHt9DQogICAgICAgICAgICAgICAgZm9yZWFjaCAo -JHByb3AgaW4gJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAg -ICAgIGlmICgkcHJvcC5OYW1lIC1lcSAnaWQnKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICAgICAgJGFsdFZhbCAgPSAkYWx0ZVdlcnRlWyRwcm9wLk5hbWVdDQogICAgICAgICAgICAgICAg -ICAgICRuZXVWYWwgID0gJHByb3AuVmFsdWUNCiAgICAgICAgICAgICAgICAgICAgJGFsdEpzb24g -PSAoJGFsdFZhbCB8IENvbnZlcnRUby1Kc29uIC1Db21wcmVzcyAtRGVwdGggOCkNCiAgICAgICAg -ICAgICAgICAgICAgJG5ldUpzb24gPSAoJG5ldVZhbCB8IENvbnZlcnRUby1Kc29uIC1Db21wcmVz -cyAtRGVwdGggOCkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRhbHRKc29uIC1uZSAkbmV1SnNv -bikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGdlYWVuZGVydFskcHJvcC5OYW1lXSA9IFtv -cmRlcmVkXUB7IGFsdCA9ICRhbHRWYWw7IG5ldSA9ICRuZXVWYWwgfQ0KICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWlu -dHJhZyAncGVyc29uLmdlYWVuZGVydCcgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAg -IHBlcnNvbklkICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBuYW1lICAgICAgPSAk -cGVyc29uTmFtZQ0KICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnQgPSAkZ2VhZW5kZXJ0DQog -ICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAjIEhpbndlaXMtVHJpZ2dlcjogSWRl -bnRpdGFldHMtQWVuZGVydW5nIChud0tlbm51bmcgLyBlbWFpbCkgYmVrb21tdA0KICAgICAgICAg -ICAgICAgICMgZWluZW4gSW4tQXBwLUhpbndlaXMgZnVlciBTVSArIEdlc2FtdHZlcmFudHdvcnRs -aWNoZS4gUHJvIEZlbGQgZWluDQogICAgICAgICAgICAgICAgIyBlaWdlbmVyIEVpbnRyYWcsIGRh -bWl0IGRhcyBNb2RhbCBsZXNiYXIgYmxlaWJ0Lg0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRm -ZWxkIGluIEAoJ253S2VubnVuZycsICdlbWFpbCcpKSB7DQogICAgICAgICAgICAgICAgICAgIGlm -ICgkZ2VhZW5kZXJ0LkNvbnRhaW5zKCRmZWxkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -JGRpZmYgPSAkZ2VhZW5kZXJ0WyRmZWxkXQ0KICAgICAgICAgICAgICAgICAgICAgICAgTmV3LUhp -bndlaXMgJ2lkZW50aXRhZXRfZ2VhZW5kZXJ0JyAoW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBwZXJzb25faWQgICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIHBlcnNvbl9uYW1lID0gJHBlcnNvbk5hbWUNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBmZWxkICAgICAgICA9ICRmZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -YWx0ZXJfd2VydCAgPSAiJCgkZGlmZi5hbHQpIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IG5ldWVyX3dlcnQgID0gIiQoJGRpZmYubmV1KSINCiAgICAgICAgICAgICAgICAgICAgICAgIH0p -IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl -c3BvbnNlIEB7IHN0YXR1cyA9ICdha3R1YWxpc2llcnQnIH0NCiAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBERUxFVEUgL2FwaS9wZXJzb25lbi97 -aWR9ICAgICAgICAgICAgLT4gU29mdC1EZWxldGUgKGdlbG9lc2NodEFtIGdlc2V0enQsIFBlcnNv -biBibGVpYnQgaW0gRGF0ZW5zYXR6IGZ1ZXIgUGFwaWVya29yYi1SdWVja2hvbHVuZykNCiAgICAg -ICAgICAgICMgREVMRVRFIC9hcGkvcGVyc29uZW4ve2lkfT9lbmRndWVsdGlnPTEgLT4gSGFyZC1E -ZWxldGUgKFBlcnNvbiBrb21wbGV0dCBlbnRmZXJuZW4sIEVpbnRyYWVnZS9Lb21tZW50YXJlIHZl -cndhaXNlbikNCiAgICAgICAgICAgICMgVm9yIGRlbSBTb2Z0LURlbGV0ZSB3ZXJkZW4gaW0gc2Vs -YmVuIFp1ZyBiZXJlaXRzIFBhcGllcmtvcmItRWludHJhZWdlIGF1ZmdlcmFldW10LCBkaWUgYWVs -dGVyIGFscw0KICAgICAgICAgICAgIyBhZG1pbi5wYXBpZXJrb3JiVGFnZUF1ZmJld2FocnVuZyAo -RGVmYXVsdCAzMCBUYWdlKSBzaW5kLiBTbyBibGVpYnQgZGVyIERhdGVuc2F0eiBzY2hsYW5rLCBv -aG5lDQogICAgICAgICAgICAjIGVpbmVuIHNlcGFyYXRlbiBDcm9uLUpvYiB6dSBicmF1Y2hlbi4N -CiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL3BlcnNvbmVuLyhcZCspJCcgLWFu -ZCAkTWV0aG9kIC1lcSAnREVMRVRFJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0 -LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0 -MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbaW50XSRNYXRjaGVz -WzFdDQogICAgICAgICAgICAgICAgJGVuZGd1ZWx0aWcgPSAkZmFsc2UNCiAgICAgICAgICAgICAg -ICBpZiAoJFJlcXVlc3QuVXJsLlF1ZXJ5KSB7DQogICAgICAgICAgICAgICAgICAgICRxID0gW1N5 -c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpQYXJzZVF1ZXJ5U3RyaW5nKCRSZXF1ZXN0LlVybC5RdWVy -eSkNCiAgICAgICAgICAgICAgICAgICAgJGVuZGd1ZWx0aWcgPSAoW3N0cmluZ10kcVsnZW5kZ3Vl -bHRpZyddKSAtZXEgJzEnDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRkZWxS -ZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgJGRlbFJl -cyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAg -ICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAg -ICAgJGFkbWluICAgPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAg -ICAgJGF1ZmJld2FocnVuZyA9IDMwDQogICAgICAgICAgICAgICAgaWYgKCRhZG1pbiAtYW5kICRh -ZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydwYXBpZXJrb3JiVGFnZUF1ZmJld2FocnVuZyddKSB7 -DQogICAgICAgICAgICAgICAgICAgIHRyeSB7ICRhdWZiZXdhaHJ1bmcgPSBbaW50XSRhZG1pbi5w -YXBpZXJrb3JiVGFnZUF1ZmJld2FocnVuZyB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICRqZXR6dCA9IChHZXQtRGF0ZSkuVG9TdHJpbmcoJ28nKQ0KICAgICAg -ICAgICAgICAgICRwZXJzb25OYW1lID0gJycNCiAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gPSAk -ZmFsc2UNCiAgICAgICAgICAgICAgICAkbmV1ZVBlcnNvbmVuID0gQCgpDQogICAgICAgICAgICAg -ICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAg -ICAgaWYgKCRwLmlkIC1lcSAkcGVyc29uSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRn -ZWZ1bmRlbiA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9ICgo -IiQoJHAudm9ybmFtZSkgJCgkcC5uYW1lKSIpLlRyaW0oKSkNCiAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkZW5kZ3VlbHRpZykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGFy -ZC1EZWxldGU6IHVlYmVyc3ByaW5nZW4sIFBlcnNvbiBmbGllZ3QgcmF1cw0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVz -WydnZWxvZXNjaHRBbSddKSB7ICRwLmdlbG9lc2NodEFtID0gJGpldHp0IH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1l -ICdnZWxvZXNjaHRBbScgLU5vdGVQcm9wZXJ0eVZhbHVlICRqZXR6dCAtRm9yY2UgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICRuZXVlUGVyc29uZW4gKz0gJHANCiAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICMgQXV0by1QdXJnZTogU29mdC1EZWxldGVkLVBlcnNvbmVuLCBkZXJlbiBnZWxv -ZXNjaHRBbSBhZWx0ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICMgYWxzICRhdWZiZXdhaHJ1 -bmcgVGFnZSBpc3QsIHdlcmRlbiBoaWVyIGVuZGd1ZWx0aWcgZW50ZmVybnQuDQogICAgICAgICAg -ICAgICAgICAgICAgICAkcHVyZ2UgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWxvZXNjaHRBbSddIC1hbmQgJHAuZ2Vsb2VzY2h0 -QW0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAkYWx0ZXIgPSBbZGF0ZXRpbWVdJHAuZ2Vsb2VzY2h0QW0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChOZXctVGltZVNwYW4gLVN0YXJ0ICRhbHRl -ciAtRW5kIChHZXQtRGF0ZSkpLlRvdGFsRGF5cyAtZ3QgJGF1ZmJld2FocnVuZykgeyAkcHVyZ2Ug -PSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7fQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHB1 -cmdlKSB7ICRuZXVlUGVyc29uZW4gKz0gJHAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRnZWZ1bmRlbikgeyByZXR1 -cm4gQHsgZ2VmdW5kZW4gPSAkZmFsc2UgfSB9DQogICAgICAgICAgICAgICAgJHBsYW51bmcucGVy -c29uZW4gPSBbb2JqZWN0W11dQCgkbmV1ZVBlcnNvbmVuKQ0KICAgICAgICAgICAgICAgIFdyaXRl -LUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAg -ICAgICAgIHJldHVybiBAeyBnZWZ1bmRlbiA9ICR0cnVlOyBwZXJzb25OYW1lID0gJHBlcnNvbk5h -bWU7IGpldHp0ID0gJGpldHp0IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -fSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9j -ay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAkZGVsUmVzLmdlZnVuZGVuKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICJQZXJzb24gJHBlcnNvbklkIG5pY2h0IGdlZnVuZGVuIiA0MDQ7IGNvbnRpbnVlIH0NCiAgICAg -ICAgICAgICAgICAkcGVyc29uTmFtZSA9ICRkZWxSZXMucGVyc29uTmFtZQ0KICAgICAgICAgICAg -ICAgICRqZXR6dCA9ICRkZWxSZXMuamV0enQNCiAgICAgICAgICAgICAgICBpZiAoJGVuZGd1ZWx0 -aWcpIHsNCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGVyc29uLmVuZGd1 -ZWx0aWcuZ2Vsb2VzY2h0JyBAeyBwZXJzb25JZCA9ICRwZXJzb25JZDsgbmFtZSA9ICRwZXJzb25O -YW1lIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBXcml0 -ZS1Mb2dFaW50cmFnICdwZXJzb24uaW4ucGFwaWVya29yYicgQHsgcGVyc29uSWQgPSAkcGVyc29u -SWQ7IG5hbWUgPSAkcGVyc29uTmFtZTsgZ2Vsb2VzY2h0QW0gPSAkamV0enQgfQ0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 -YXR1cyA9ICdnZWxvZXNjaHQnOyBtb2R1cyA9IGlmICgkZW5kZ3VlbHRpZykgeyAnZW5kZ3VlbHRp -ZycgfSBlbHNlIHsgJ3BhcGllcmtvcmInIH0gfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog -ICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BlcnNvbmVuL3Jl -aWhlbmZvbGdlJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYg -KC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1p -bi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1C -b2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICRyZWloZW5mb2xnZSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAg -ICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ3Bs -YW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpz -b25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2gg -KCRyIGluICRyZWloZW5mb2xnZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVh -Y2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkcC5pZCAtZXEgJHIuaWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddKSB7ICRwLnBv -c2l0aW9uID0gJHIucG9zaXRpb24gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgZWxzZSB7ICRwIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAncG9zaXRpb24nIC1O -b3RlUHJvcGVydHlWYWx1ZSAkci5wb3NpdGlvbiAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNv -bicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwN -CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbmVuLnJlaWhl -bmZvbGdlLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRS -ZXNwb25zZSBAeyBzdGF0dXMgPSAnYWt0dWFsaXNpZXJ0JyB9DQogICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBISU5XRUlTRSAoSW4t -QXBwLUJhbm5lci9Nb2RhbC1TeXN0ZW0pID09PT09DQogICAgICAgICAgICAjIEdFVCAgL2FwaS9o -aW53ZWlzZSAgICAgICAgICAgIC0+IG9mZmVuZSBIaW53ZWlzZSBmdWVyIGRlbiBlaW5nZWxvZ2d0 -ZW4gVXNlcg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvaGlud2Vpc2Uve2lkfS9rZW5udG5pcyAt -PiBLZW5udG5pc25haG1lIHNldHplbg0KICAgICAgICAgICAgIyBHRVQgIC9hcGkvaGlud2Vpc2Uv -dWViZXJzaWNodCAtPiBTVS1vbmx5LCB2b2xsc3RhZW5kaWdlIFNpY2h0IGlua2wuIExlc2UtU3Rh -dHVzDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2hpbndlaXNlJyAtYW5kICRNZXRo -b2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgIyBHYXRlZDogbnVyIEVtcGZhZW5nZXIg -KFNVIG9kZXIgR2VzYW10dmVyYW50d29ydGxpY2gpIGR1ZXJmZW4gdWViZXJoYXVwdCBmcmFnZW4N -CiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAoJHIuaXN0U3VwZXJVc2VyIC1vciAkci5pc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCkpIHsNCiAg -ICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9 -IEAoKSB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgIEludm9rZS1IaW53ZWlzUHJ1bmluZw0KICAgICAgICAgICAgICAgICRo -ID0gUmVhZC1Kc29uT2JqZWN0ICdoaW53ZWlzZS5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgk -bnVsbCAtZXEgJGggLW9yIC1ub3QgJGguUFNPYmplY3QuUHJvcGVydGllc1snaGlud2Vpc2UnXSkg -ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndl -aXNlID0gQCgpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgJG9mZmVuID0gQCgpDQogICAgICAgICAgICAgICAgZm9yZWFj -aCAoJGVpbnRyYWcgaW4gQCgkaC5oaW53ZWlzZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlz -dEVtcGZhZW5nZXIgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgJGlzdEdlbGVzZW4gICAg -PSAkZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJGVpbnRyYWcua2Vu -bnRuaXNuYWhtZW4uUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKFRlc3QtTWF0Y2hLZW5udW5nIChbc3RyaW5nXSRwLk5hbWUpKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJGlzdEVtcGZhZW5nZXIgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHAuVmFsdWUpIHsgJGlzdEdlbGVzZW4gPSAkdHJ1 -ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAo -JGlzdEVtcGZhZW5nZXIgLWFuZCAtbm90ICRpc3RHZWxlc2VuKSB7ICRvZmZlbiArPSAkZWludHJh -ZyB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk -UmVzcG9uc2UgQHsgaGlud2Vpc2UgPSBbb2JqZWN0W11dJG9mZmVuIH0NCiAgICAgICAgICAgICAg -ICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAn -Xi9hcGkvaGlud2Vpc2UvKFxkKykva2VubnRuaXMkJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykg -ew0KICAgICAgICAgICAgICAgICRoaW53ZWlzSWQgPSBbaW50XSRNYXRjaGVzWzFdDQogICAgICAg -ICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKCRyLmlz -dFN1cGVyVXNlciAtb3IgJHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQogICAgICAgICAg -ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsg -Y29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53 -ZWlzS2VubnRuaXNHZXNldHp0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53 -ZWlzS2VubnRuaXNUeXAgPSAkbnVsbA0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxv -Y2sgJ2hpbndlaXNlLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgJGggPSBSZWFkLUpzb25P -YmplY3QgJ2hpbndlaXNlLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg -JGggLW9yIC1ub3QgJGguUFNPYmplY3QuUHJvcGVydGllc1snaGlud2Vpc2UnXSkgeyByZXR1cm4g -fQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZWludHJhZyBpbiBAKCRoLmhpbndlaXNl -KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtpbnRdJGVpbnRyYWcuaWQgLW5lICRo -aW53ZWlzSWQpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBFcnN0IGRl -biBNYXRjaC1TbG90IGVybWl0dGVsbiwgZGFubiBhdXNzZXJoYWxiIGRlcg0KICAgICAgICAgICAg -ICAgICAgICAgICAgIyBQcm9wZXJ0eS1FbnVtZXJhdGlvbiBpbi1wbGFjZSBzZXR6ZW4gKFBTIDUu -MSBtYWcgZGFzDQogICAgICAgICAgICAgICAgICAgICAgICAjIE1vZGlmaXppZXJlbiB3YWVocmVu -ZCBmb3JlYWNoIG5pY2h0IGltbWVyKS4NCiAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaE5h -bWUgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJGVpbnRy -YWcua2VubnRuaXNuYWhtZW4uUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmIChUZXN0LU1hdGNoS2VubnVuZyAoW3N0cmluZ10kcC5OYW1lKSkgeyAk -bWF0Y2hOYW1lID0gJHAuTmFtZTsgYnJlYWsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRtYXRjaE5hbWUpIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkdHMgPSAoR2V0LURhdGUpLlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5n -KCd5eXl5LU1NLWRkVEhIOm1tOnNzWicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVp -bnRyYWcua2VubnRuaXNuYWhtZW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRtYXRj -aE5hbWUgLU5vdGVQcm9wZXJ0eVZhbHVlICR0cyAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkc2NyaXB0OmhpbndlaXNLZW5udG5pc0dlc2V0enQgPSAkdHJ1ZQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgkZWludHJhZy5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0eXAn -XSkgeyAkc2NyaXB0OmhpbndlaXNLZW5udG5pc1R5cCA9IFtzdHJpbmddJGVpbnRyYWcudHlwIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr -DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRzY3JpcHQ6 -aGlud2Vpc0tlbm50bmlzR2VzZXR6dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUt -SnNvbk9iamVjdCAnaGlud2Vpc2UuanNvbicgJGggfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgJGdl -c2V0enQgPSBbYm9vbF0kc2NyaXB0OmhpbndlaXNLZW5udG5pc0dlc2V0enQNCiAgICAgICAgICAg -ICAgICAka2VubnRuaXNUeXAgPSAkc2NyaXB0OmhpbndlaXNLZW5udG5pc1R5cA0KICAgICAgICAg -ICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dCA9ICRmYWxzZQ0KICAgICAgICAg -ICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlwID0gJG51bGwNCiAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAkZ2VzZXR6dCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXNwb25zZSAiSGlud2VpcyAkaGlud2Vpc0lkIG5pY2h0IGdlZnVuZGVuIG9kZXIgbmljaHQgZnVl -ciBTaWUgYmVzdGltbXQiIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgJGxvZ0ZlbGRlciA9IEB7IGhpbndlaXNJZCA9ICRoaW53ZWlzSWQgfQ0KICAgICAg -ICAgICAgICAgIGlmICgka2VubnRuaXNUeXApIHsgJGxvZ0ZlbGRlclsndHlwJ10gPSAka2VubnRu -aXNUeXAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2hpbndlaXMua2VubnRu -aXMnICRsb2dGZWxkZXINCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl -IEB7IHN0YXR1cyA9ICdrZW5udG5pc19nZXNldHp0JyB9DQogICAgICAgICAgICAgICAgY29udGlu -dWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGlud2Vp -c2UvdWViZXJzaWNodCcgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAg -IGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051 -ciBTdXBlclVzZXInIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIEludm9rZS1IaW53 -ZWlzUHJ1bmluZw0KICAgICAgICAgICAgICAgICRoID0gUmVhZC1Kc29uT2JqZWN0ICdoaW53ZWlz -ZS5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGggLW9yIC1ub3QgJGguUFNP -YmplY3QuUHJvcGVydGllc1snaGlud2Vpc2UnXSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNlID0gQCgpIH0NCiAgICAgICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9IFtvYmplY3RbXV1AKCRoLmhpbndlaXNl -KSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAg -ICAgIyA9PT09PSBNSVRURUlMVU5HRU4gKFNwcmludCBELTNiLCAyMDI2LTA1LTI5KSA9PT09PQ0K -ICAgICAgICAgICAgIyBWb20gU1UgbWFudWVsbCBnZXBmbGVndGVzIEhpbndlaXMtTW9kYWwtU3lz -dGVtIChzZXBhcmF0IHZvbg0KICAgICAgICAgICAgIyAvYXBpL2hpbndlaXNlLCBkYXMgaXN0IG51 -ciBmdWVyIFN5c3RlbS1FcmVpZ25pc3NlIFNVL0dWKS4NCiAgICAgICAgICAgICMgU2NoZW1hICsg -RmlsdGVydW5nLUxvZ2lrIGdlc3BpZWdlbHQgYXVzIGRldi9zZXJ2ZXIucHk6DQogICAgICAgICAg -ICAjICAgX21pdHRlaWx1bmdlbl9mdWVyX2FrdHVlbGxlbl91c2VyKCkgYnp3LiBfcGVyc29uX2F1 -c19waWQoKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbWl0dGVpbHVuZ2VuJyAt -YW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 -ICRSZXNwb25zZSBAeyBtaXR0ZWlsdW5nZW4gPSAoR2V0LU1pdHRlaWx1bmdlbkZ1ZXJBa3R1ZWxs -ZW5Vc2VyKSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbWl0dGVpbHVuZ2VuL2FsbGUnIC1hbmQgJE1ldGhv -ZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVz -ZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyJyA0MDM7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpz -b24nDQogICAgICAgICAgICAgICAgJGxpc3RlID0gQCgpDQogICAgICAgICAgICAgICAgaWYgKCRu -dWxsIC1uZSAkbSAtYW5kICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdlbiddKSB7 -DQogICAgICAgICAgICAgICAgICAgICRsaXN0ZSA9IEAoJG0ubWl0dGVpbHVuZ2VuKQ0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 -IG1pdHRlaWx1bmdlbiA9IFtvYmplY3RbXV0kbGlzdGUgfQ0KICAgICAgICAgICAgICAgIGNvbnRp -bnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL21pdHRl -aWx1bmdlbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAo -LW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3Vw -ZXJVc2VyIGR1ZXJmZW4gTWl0dGVpbHVuZ2VuIGFubGVnZW4nIDQwMzsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgICRyYXcgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkcmF3KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCb2R5IGZlaGx0JyA0MDA7IGNv -bnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkYm9keSA9ICRyYXcgfCBDb252ZXJ0RnJv -bS1Kc29uIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZXMgSlNPTicg -NDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBTZXJ2ZXItc2VpdGlnZSBTYW5pdGlz -aWVydW5nIChTdG9yZWQtWFNTKTogdGl0ZWwgKyB0ZXh0IHdlcmRlbg0KICAgICAgICAgICAgICAg -ICMgaW0gQ2xpZW50IHZpYSBpbm5lckhUTUwgZ2VyZW5kZXJ0Lg0KICAgICAgICAgICAgICAgICR0 -aXRlbCA9IENvbnZlcnRUby1TYWZlUmljaEh0bWwgKChbc3RyaW5nXSgkYm9keS50aXRlbCkpLlRy -aW0oKSkNCiAgICAgICAgICAgICAgICAkdGV4dCAgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICgo -W3N0cmluZ10oJGJvZHkudGV4dCkpLlRyaW0oKSkNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -dGl0ZWwpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1RpdGVsIGlzdCBQZmxpY2h0ZmVsZCcgNDAw -OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRleHQpICB7IFNlbmQtRXJy -b3IgJFJlc3BvbnNlICdUZXh0IGlzdCBQZmxpY2h0ZmVsZCcgIDQwMDsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgICRyYW5kID0gLWpvaW4gKCg0OC4uNTcpICsgKDk3Li4xMjIpIHwgR2V0LVJh -bmRvbSAtQ291bnQgNiB8IEZvckVhY2gtT2JqZWN0IHsgW2NoYXJdJF8gfSkNCiAgICAgICAgICAg -ICAgICAkbXMgPSBbaW50NjRdKFtEYXRlVGltZU9mZnNldF06OlV0Y05vdy5Ub1VuaXhUaW1lTWls -bGlzZWNvbmRzKCkpDQogICAgICAgICAgICAgICAgJG5ldWVJZCA9ICJtXyR7bXN9XyR7cmFuZH0i -DQogICAgICAgICAgICAgICAgJGVtcGZEZWZhdWx0ID0gW3BzY3VzdG9tb2JqZWN0XUB7DQogICAg -ICAgICAgICAgICAgICAgIGFsbGUgPSAkdHJ1ZTsgcGVyc29uZW4gPSBAKCk7IGdydXBwZW4gPSBA -KCk7IHJvbGxlbiA9IEAoKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZW1w -ZiA9IGlmICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlbXBmYWVuZ2VyJ10pIHsgJGJvZHku -ZW1wZmFlbmdlciB9IGVsc2UgeyAkZW1wZkRlZmF1bHQgfQ0KICAgICAgICAgICAgICAgICRuZXUg -PSBbcHNjdXN0b21vYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgID0g -JG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICB0aXRlbCAgICAgICAgPSAkdGl0ZWwNCiAgICAg -ICAgICAgICAgICAgICAgdGV4dCAgICAgICAgID0gJHRleHQNCiAgICAgICAgICAgICAgICAgICAg -dGh1bWJuYWlsICAgID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RodW1ibmFpbCdd -KSB7ICRib2R5LnRodW1ibmFpbCB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAg -IHBkZiAgICAgICAgICA9IGlmICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZGYnXSkgICAg -ICAgeyAkYm9keS5wZGYgfSAgICAgICBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAg -ICB0cmlnZ2VyICAgICAgPSBpZiAoJGJvZHkuUFNPYmplY3QuUHJvcGVydGllc1sndHJpZ2dlcidd -IC1hbmQgJGJvZHkudHJpZ2dlcikgeyBbc3RyaW5nXSRib2R5LnRyaWdnZXIgfSBlbHNlIHsgJ2Vp -bm1hbCcgfQ0KICAgICAgICAgICAgICAgICAgICBiaXNEYXR1bSAgICAgPSBpZiAoJGJvZHkuUFNP -YmplY3QuUHJvcGVydGllc1snYmlzRGF0dW0nXSkgIHsgJGJvZHkuYmlzRGF0dW0gfSAgZWxzZSB7 -ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgZW1wZmFlbmdlciAgID0gJGVtcGYNCiAgICAg -ICAgICAgICAgICAgICAgZXJzdGVsbHRBbSAgID0gKEdldC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUo -KS5Ub1N0cmluZygneXl5eS1NTS1kZFRISDptbTpzc1onKQ0KICAgICAgICAgICAgICAgICAgICBl -cnN0ZWxsdFZvbiAgPSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKQ0KICAgICAgICAgICAgICAgICAg -ICBnZWFlbmRlcnRBbSAgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRWb24g -PSAkbnVsbA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZp -bGVMb2NrICdtaXR0ZWlsdW5nZW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAkbSA9IFJl -YWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlm -ICgkbnVsbCAtZXEgJG0pIHsgJG0gPSBbcHNjdXN0b21vYmplY3RdQHsgbWl0dGVpbHVuZ2VuID0g -QCgpOyBnZWxlc2VuID0gW3BzY3VzdG9tb2JqZWN0XUB7fSB9IH0NCiAgICAgICAgICAgICAgICAg -ICAgaWYgKC1ub3QgJG0uUFNPYmplY3QuUHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10pIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICRtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSBt -aXR0ZWlsdW5nZW4gLU5vdGVQcm9wZXJ0eVZhbHVlIEAoKSAtRm9yY2UNCiAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0 -aWVzWydnZWxlc2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtIHwgQWRkLU1lbWJl -ciAtTm90ZVByb3BlcnR5TmFtZSBnZWxlc2VuIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW3BzY3VzdG9t -b2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgIyBuZXVlc3RlIG9iZW4NCiAgICAgICAgICAgICAgICAgICAgJG0ubWl0dGVpbHVuZ2Vu -ID0gQCgkbmV1KSArIEAoJG0ubWl0dGVpbHVuZ2VuKQ0KICAgICAgICAgICAgICAgICAgICBXcml0 -ZS1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicgJG0gfCBPdXQtTnVsbA0KICAgICAgICAg -ICAgICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21p -dHRlaWx1bmcuYW5nZWxlZ3QnIEB7IGlkID0gJG5ldWVJZDsgdGl0ZWwgPSAkdGl0ZWwgfQ0KICAg -ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2FuZ2Vs -ZWd0JzsgbWl0dGVpbHVuZyA9ICRuZXUgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg -ICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2FwaS9taXR0ZWlsdW5n -ZW4vKFtcdy1dKykkJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAg -aWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVy -IFN1cGVyVXNlcicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJG1pZCA9ICRNYXRj -aGVzWzFdDQogICAgICAgICAgICAgICAgJHJhdyA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAg -ICAgICAgICAgIGlmICgtbm90ICRyYXcpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JvZHkgZmVo -bHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRib2R5ID0gJHJhdyB8 -IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0 -aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRl -aWx1bmdHZWZ1bmRlbiA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVu -Z1ppZWwgPSAkbnVsbA0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ21pdHRl -aWx1bmdlbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICRtID0gUmVhZC1Kc29uT2JqZWN0 -ICdtaXR0ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk -bSAtb3IgLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4nXSkgeyByZXR1 -cm4gfQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZWludHJhZyBpbiBAKCRtLm1pdHRl -aWx1bmdlbikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXSRlaW50cmFn -LmlkIC1uZSAkbWlkKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVh -Y2ggKCRmZWxkIGluICd0aXRlbCcsJ3RleHQnLCd0aHVtYm5haWwnLCdwZGYnLCd0cmlnZ2VyJywn -YmlzRGF0dW0nLCdlbXBmYWVuZ2VyJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkXSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkd2VydCA9ICRib2R5LiRmZWxkDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgoJGZlbGQgLWVxICd0aXRlbCcgLW9yICRmZWxkIC1lcSAndGV4dCcpIC1h -bmQgKCR3ZXJ0IC1pcyBbc3RyaW5nXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICR3ZXJ0ID0gQ29udmVydFRvLVNhZmVSaWNoSHRtbCAkd2VydA0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRl -aW50cmFnIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkZmVsZCAtTm90ZVByb3BlcnR5 -VmFsdWUgJHdlcnQgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGVpbnRyYWcgfCBB -ZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lIGdlYWVuZGVydEFtICAtTm90ZVByb3BlcnR5VmFs -dWUgKChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ3l5eXktTU0tZGRUSEg6 -bW06c3NaJykpIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGVpbnRyYWcgfCBBZGQt -TWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lIGdlYWVuZGVydFZvbiAtTm90ZVByb3BlcnR5VmFsdWUg -KEdldC1Ba3R1ZWxsZXJCZW51dHplcikgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAk -c2NyaXB0Om1pdHRlaWx1bmdHZWZ1bmRlbiA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAg -ICAkc2NyaXB0Om1pdHRlaWx1bmdaaWVsID0gJGVpbnRyYWcNCiAgICAgICAgICAgICAgICAgICAg -ICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYg -KCRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuKSB7IFdyaXRlLUpzb25PYmplY3QgJ21pdHRlaWx1 -bmdlbi5qc29uJyAkbSB8IE91dC1OdWxsIH0NCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwN -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkc2NyaXB0Om1pdHRlaWx1bmdHZWZ1bmRlbikgew0K -ICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAiTWl0dGVpbHVuZyAkbWlk -IG5pY2h0IGdlZnVuZGVuIiA0MDQ7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICR6aWVsID0gJHNjcmlwdDptaXR0ZWlsdW5nWmllbA0KICAgICAgICAgICAgICAg -ICRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuID0gJGZhbHNlOyAkc2NyaXB0Om1pdHRlaWx1bmda -aWVsID0gJG51bGwNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdtaXR0ZWlsdW5n -LmdlYWVuZGVydCcgQHsgaWQgPSAkbWlkIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl -Y3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWFlbmRlcnQnOyBtaXR0ZWlsdW5nID0gJHppZWwg -fQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBp -ZiAoJFBhdGggLW1hdGNoICdeL2FwaS9taXR0ZWlsdW5nZW4vKFtcdy1dKykkJyAtYW5kICRNZXRo -b2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3Vw -ZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlcicgNDAzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJG1pZCA9ICRNYXRjaGVzWzFdDQogICAgICAgICAgICAg -ICAgJHNjcmlwdDptaXR0ZWlsdW5nR2Vsb2VzY2h0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAg -SW52b2tlLVdpdGhGaWxlTG9jayAnbWl0dGVpbHVuZ2VuLmpzb24nIHsNCiAgICAgICAgICAgICAg -ICAgICAgJG0gPSBSZWFkLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAg -ICAgICAgICAgICBpZiAoJG51bGwgLWVxICRtIC1vciAtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ21pdHRlaWx1bmdlbiddKSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgICR2b3Jo -ZXIgPSBAKCRtLm1pdHRlaWx1bmdlbikNCiAgICAgICAgICAgICAgICAgICAgJG5hY2hoZXIgPSBA -KCR2b3JoZXIgfCBXaGVyZS1PYmplY3QgeyBbc3RyaW5nXSRfLmlkIC1uZSAkbWlkIH0pDQogICAg -ICAgICAgICAgICAgICAgIGlmICgkdm9yaGVyLkNvdW50IC1lcSAkbmFjaGhlci5Db3VudCkgeyBy -ZXR1cm4gfQ0KICAgICAgICAgICAgICAgICAgICAkbS5taXR0ZWlsdW5nZW4gPSAkbmFjaGhlcg0K -ICAgICAgICAgICAgICAgICAgICAjIGdlbGVzZW4tRWludHJhZWdlIGZ1ZXIgZGllc2UgTWl0dGVp -bHVuZyBhdWZyYWV1bWVuDQogICAgICAgICAgICAgICAgICAgIGlmICgkbS5QU09iamVjdC5Qcm9w -ZXJ0aWVzWydnZWxlc2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRw -IGluIEAoJG0uZ2VsZXNlbi5QU09iamVjdC5Qcm9wZXJ0aWVzKSkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkcC5WYWx1ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRtaWRdKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwLlZhbHVlLlBTT2JqZWN0LlByb3BlcnRp -ZXMuUmVtb3ZlKCRtaWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -ICAgIFdyaXRlLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91dC1OdWxsDQog -ICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0dlbG9lc2NodCA9ICR0cnVlDQog -ICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNj -cmlwdDptaXR0ZWlsdW5nR2Vsb2VzY2h0KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy -b3IgJFJlc3BvbnNlICJNaXR0ZWlsdW5nICRtaWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGlu -dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5n -R2Vsb2VzY2h0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnbWl0 -dGVpbHVuZy5nZWxvZXNjaHQnIEB7IGlkID0gJG1pZCB9DQogICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0JyB9DQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgUE9TVCAvYXBpL21p -dHRlaWx1bmdlbi91cGxvYWQg4oCUIFNVLW9ubHksIEJpbGQgKDIgTUIpIG9kZXIgUERGICgxMCBN -QikNCiAgICAgICAgICAgICMgQm9keTogeyJhcnQiOiAiYmlsZCJ8InBkZiIsICJkYXRlaW5hbWUi -OiAieC5wbmciLCAiZGF0YVVybCI6ICJkYXRhOi4uLiJ9DQogICAgICAgICAgICBpZiAoJFBhdGgg -LWVxICcvYXBpL21pdHRlaWx1bmdlbi91cGxvYWQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVy -cm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIE1pdHRlaWx1bmdzLUFuaGFlbmdl -IGhvY2hsYWRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyAxNCBNQiBNYXhT -aXplLCB3ZWlsIDEwTUIgUERGIGJhc2U2NC1jb2RpZXJ0IH4xMy40IE1CIFBheWxvYWQgd2lyZA0K -ICAgICAgICAgICAgICAgICRyYXcgPSBSZWFkLUJvZHkgJFJlcXVlc3QgLU1heFNpemUgMTRNQg0K -ICAgICAgICAgICAgICAgIGlmICgtbm90ICRyYXcpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0Fu -ZnJhZ2UgenUgZ3Jvc3MgKG1heCAxNCBNQiknIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAg -ICAgIHRyeSB7ICRib2R5ID0gJHJhdyB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAg -ICAgICAgICAgICAkYXJ0ID0gKFtzdHJpbmddJGJvZHkuYXJ0KS5Ub0xvd2VyKCkNCiAgICAgICAg -ICAgICAgICAkZGF0YVVybCA9IFtzdHJpbmddJGJvZHkuZGF0YVVybA0KICAgICAgICAgICAgICAg -IGlmICgkYXJ0IC1uZSAnYmlsZCcgLWFuZCAkYXJ0IC1uZSAncGRmJykgew0KICAgICAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnYXJ0IG11c3MgImJpbGQiIG9kZXIgInBkZiIg -c2VpbicgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAk -ZXh0ID0gJG51bGw7ICRtYXhCeXRlcyA9IDANCiAgICAgICAgICAgICAgICBpZiAoJGFydCAtZXEg -J2JpbGQnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkZGF0YVVybCAtbWF0Y2ggJ15kYXRh -OmltYWdlLyhqcGVnfGpwZ3xwbmd8d2VicCk7YmFzZTY0LCcpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICRleHQgPSAoJE1hdGNoZXNbMV0gLXJlcGxhY2UgJ2pwZWcnLCdqcGcnKQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgJG1heEJ5dGVzID0gMiAqIDEwMjQgKiAxMDI0DQogICAgICAgICAg -ICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXNwb25zZSAnQmlsZDogZXJ3YXJ0ZXQgZGF0YTppbWFnZS8oanBlZ3xwbmd8d2VicCk7YmFzZTY0 -LC4uLicgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRhVXJsIC1saWtlICdkYXRh -OmFwcGxpY2F0aW9uL3BkZjtiYXNlNjQsKicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRl -eHQgPSAncGRmJw0KICAgICAgICAgICAgICAgICAgICAgICAgJG1heEJ5dGVzID0gMTAgKiAxMDI0 -ICogMTAyNA0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAg -ICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1BERjogZXJ3YXJ0ZXQgZGF0YTphcHBsaWNhdGlv -bi9wZGY7YmFzZTY0LC4uLicgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRiYXNlNjQgPSAkZGF0YVVybCAtcmVw -bGFjZSAnXmRhdGE6W147XSs7YmFzZTY0LCcsICcnDQogICAgICAgICAgICAgICAgdHJ5IHsgJGJ5 -dGVzID0gW1N5c3RlbS5Db252ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygkYmFzZTY0KSB9DQogICAg -ICAgICAgICAgICAgY2F0Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZSBiYXNl -NjQtRGF0ZW4nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgkYnl0ZXMuTGVu -Z3RoIC1ndCAkbWF4Qnl0ZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJGxpbWl0S2IgPSBbaW50 -XSgkbWF4Qnl0ZXMgLyAxMDI0KQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNw -b25zZSAiJGFydCB6dSBncm9zcyAobWF4ICRsaW1pdEtiIEtCKSIgNDEzOyBjb250aW51ZQ0KICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdXBsb2FkRGlyID0gSm9pbi1QYXRoICRE -YXRhRGlyICd1cGxvYWRzJyB8IEpvaW4tUGF0aCAtQ2hpbGRQYXRoICdtaXR0ZWlsdW5nZW4nDQog -ICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHVwbG9hZERp -cikpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVj -dG9yeSAtUGF0aCAkdXBsb2FkRGlyIC1Gb3JjZSB8IE91dC1OdWxsIH0gY2F0Y2gge30NCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHJhbmQgPSAtam9pbiAoKDQ4Li41NykgKyAo -OTcuLjEyMikgfCBHZXQtUmFuZG9tIC1Db3VudCA2IHwgRm9yRWFjaC1PYmplY3QgeyBbY2hhcl0k -XyB9KQ0KICAgICAgICAgICAgICAgICRtcyA9IFtpbnQ2NF0oW0RhdGVUaW1lT2Zmc2V0XTo6VXRj -Tm93LlRvVW5peFRpbWVNaWxsaXNlY29uZHMoKSkNCiAgICAgICAgICAgICAgICAkZmlsZW5hbWUg -PSAibV8ke21zfV8ke3JhbmR9LiRleHQiDQogICAgICAgICAgICAgICAgJHppZWxQZmFkID0gSm9p -bi1QYXRoICR1cGxvYWREaXIgJGZpbGVuYW1lDQogICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5G -aWxlXTo6V3JpdGVBbGxCeXRlcygkemllbFBmYWQsICRieXRlcykNCiAgICAgICAgICAgICAgICAj -IEtlaW5lIEFDTC1SZXN0cmljdGlvbjogVXBsb2FkcyBzaW5kIGZ1ZXIgZGllIEVtcGZhZW5nZXIt -DQogICAgICAgICAgICAgICAgIyBHcnVwcGUgKG1hbnVlbGwgdm9tIFNVIHZlcnRlaWx0KSBnZWRh -Y2h0LCBuaWNodCBnZWhlaW0uDQogICAgICAgICAgICAgICAgJHJlbFBmYWQgPSAiL2RhdGEvdXBs -b2Fkcy9taXR0ZWlsdW5nZW4vJGZpbGVuYW1lIg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp -bnRyYWcgJ21pdHRlaWx1bmcudXBsb2FkJyBAeyBhcnQgPSAkYXJ0OyBkYXRlaSA9ICRmaWxlbmFt -ZTsgYnl0ZXMgPSAkYnl0ZXMuTGVuZ3RoIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl -Y3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdvayc7IHBmYWQgPSAkcmVsUGZhZDsgYnl0ZXMgPSAk -Ynl0ZXMuTGVuZ3RoIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K -DQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2FwaS9taXR0ZWlsdW5nZW4vKFtcdy1d -Kykva2VubnRuaXMkJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAg -ICRtaWQgPSAkTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAg -ICAgICAgICAgICAgICRwaWQgPSAkci5tZWluZVBlcnNvbklkDQogICAgICAgICAgICAgICAgaWYg -KCRudWxsIC1lcSAkcGlkKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBQZXJzb24genVn -ZW9yZG5ldCcgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWls -dW5nS2VubnRuaXNPSyA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxv -Y2sgJ21pdHRlaWx1bmdlbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICRtID0gUmVhZC1K -c29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRu -dWxsIC1lcSAkbSAtb3IgLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4n -XSkgeyByZXR1cm4gfQ0KICAgICAgICAgICAgICAgICAgICAkZXhpc3RpZXJ0ID0gQCgkbS5taXR0 -ZWlsdW5nZW4gfCBXaGVyZS1PYmplY3QgeyBbc3RyaW5nXSRfLmlkIC1lcSAkbWlkIH0pLkNvdW50 -IC1ndCAwDQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRleGlzdGllcnQpIHsgcmV0dXJu -IH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJG0uUFNPYmplY3QuUHJvcGVydGllc1sn -Z2VsZXNlbiddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbSB8IEFkZC1NZW1iZXIgLU5v -dGVQcm9wZXJ0eU5hbWUgZ2VsZXNlbiAtTm90ZVByb3BlcnR5VmFsdWUgKFtwc2N1c3RvbW9iamVj -dF1Ae30pIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg -ICRwaWRTdHIgPSBbc3RyaW5nXSRwaWQNCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJG0u -Z2VsZXNlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwaWRTdHJdKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAkbS5nZWxlc2VuIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGlkU3Ry -IC1Ob3RlUHJvcGVydHlWYWx1ZSAoW3BzY3VzdG9tb2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGhldXRlID0gKEdldC1EYXRlKS5U -b1N0cmluZygneXl5eS1NTS1kZCcpDQogICAgICAgICAgICAgICAgICAgICRtLmdlbGVzZW4uJHBp -ZFN0ciB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJG1pZCAtTm90ZVByb3BlcnR5VmFs -dWUgJGhldXRlIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdt -aXR0ZWlsdW5nZW4uanNvbicgJG0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAkc2Ny -aXB0Om1pdHRlaWx1bmdLZW5udG5pc09LID0gJHRydWUNCiAgICAgICAgICAgICAgICB9IHwgT3V0 -LU51bGwNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkc2NyaXB0Om1pdHRlaWx1bmdLZW5udG5p -c09LKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICJNaXR0ZWls -dW5nICRtaWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nS2VubnRuaXNPSyA9ICRmYWxzZQ0K -ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2tl -bm50bmlzX2dlc2V0enQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg -fQ0KDQogICAgICAgICAgICAjID09PT09IEJBQ0tVUFMgPT09PT0NCiAgICAgICAgICAgICMgQmFj -a3VwLU5hbWluZyAoZ2V0YXJudCwgaW4gZGF0YS9jYWNoZS8pOg0KICAgICAgICAgICAgIyAtIHNu -YXBfPHRzPi5iYWsgID0gQnVuZGxlIChwbGFudW5nK2FkbWluKSAtLSBtYW51ZWxsZSBCYWNrdXBz -ICsgU2ljaGVydW5nZW4NCiAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgIHZvciBXaWVk -ZXJoZXJzdGVsbHVuZw0KICAgICAgICAgICAgIyAtIGxlZ188dHM+LmJhayAgID0gTnVyIFBsYW51 -bmcgLS0gTGVnYWN5LUJhY2t1cHMgKyBBdXRvLVNpY2hlcnVuZ2VuDQogICAgICAgICAgICAjICAg -ICAgICAgICAgICAgICAgICB2b3IgUmVzZXQvRHVtbXlkYXRlbg0KICAgICAgICAgICAgIyAtIGNm -Z188dHM+XzxoaW53ZWlzPi5iYWsgPSBhZG1pbi5qc29uLUF1dG8tQmFja3VwcyAoQmFja3VwLUFk -bWluSnNvbikNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9iYWNrdXAn -IC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl -c3QtRGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUg -QmVyZWNodGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg -JHBsYW51bmdQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHBsYW51bmdQYXRoKSkg -eyBTZW5kLUVycm9yICRSZXNwb25zZSAnUGxhbnVuZyBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJHBsYW51bmdPYmogPSBSZWFkLUpzb25PYmplY3QgJ3Bs -YW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkYWRtaW5PYmogICA9IFJlYWQtSnNvbk9iamVj -dCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbk9iaikg -eyAkYWRtaW5PYmogPSBOZXctT2JqZWN0IFBTT2JqZWN0IH0NCiAgICAgICAgICAgICAgICAkdHMg -PSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5TU1kZF9ISG1tc3MnDQogICAgICAgICAgICAgICAgJGJu -YW1lID0gInNuYXBfJHRzLmJhayINCiAgICAgICAgICAgICAgICAkYnVuZGxlID0gW29yZGVyZWRd -QHsNCiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ICA9ICd2aTMtYmFja3VwLXYxJw0KICAgICAg -ICAgICAgICAgICAgICB0cyAgICAgID0gJHRzDQogICAgICAgICAgICAgICAgICAgIHBsYW51bmcg -PSAkcGxhbnVuZ09iag0KICAgICAgICAgICAgICAgICAgICBhZG1pbiAgID0gJGFkbWluT2JqDQog -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRqc29uID0gJGJ1bmRsZSB8IENvbnZl -cnRUby1Kc29uIC1EZXB0aCAzMA0KICAgICAgICAgICAgICAgICRjYWNoZURpciA9IEpvaW4tUGF0 -aCAkRGF0YURpciAnY2FjaGUnDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAt -TGl0ZXJhbFBhdGggJGNhY2hlRGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1Q -YXRoICRjYWNoZURpciAtRm9yY2UgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAgICAgV3JpdGUt -QmFja3VwQnl0ZXMgKEpvaW4tUGF0aCAkY2FjaGVEaXIgJGJuYW1lKSAkanNvbg0KICAgICAgICAg -ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2JhY2t1cC5lcnN0ZWxsdCcgQHsgZGF0ZWluYW1lID0g -JGJuYW1lOyBpbmhhbHQgPSAncGxhbnVuZythZG1pbicgfQ0KICAgICAgICAgICAgICAgIFNlbmQt -SnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2Vyc3RlbGx0JzsgZGF0ZWluYW1lID0g -JGJuYW1lIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cHMnIC1hbmQgJE1ldGhvZCAt -ZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAn -YmFja3VwcycpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKEJh -Y2t1cHMpJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0gQCgp -DQogICAgICAgICAgICAgICAgJGNhY2hlRGlyID0gSm9pbi1QYXRoICREYXRhRGlyICdjYWNoZScN -CiAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIpIHsN -CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJG11c3RlciBpbiAnc25hcF8qLmJhaycsJ2xl -Z18qLmJhaycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIEdldC1DaGlsZEl0ZW0gLUxpdGVy -YWxQYXRoICRjYWNoZURpciAtRmlsdGVyICRtdXN0ZXIgLUZpbGUgLUVycm9yQWN0aW9uIFNpbGVu -dGx5Q29udGludWUgfCBGb3JFYWNoLU9iamVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJG5hbWUgPSAkXy5OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cCA9IGlm -ICgkbmFtZSAtbWF0Y2ggJ192b3JfZHVtbXlfJykgeyAndm9yIER1bW15ZGF0ZW4nIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoJG5hbWUgLW1hdGNoICdfdm9yX3Jl -c2V0XycpIHsgJ3ZvciBSZXNldCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ZWxzZWlmICgkbmFtZSAtbWF0Y2ggJ192b3Jfd2llZGVyaGVyc3RlbGx1bmdfJykgeyAndm9yIFdp -ZWRlcmhlcnN0ZWxsdW5nJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl -IHsgJ21hbnVlbGwnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYnVuZGxlID0gJG5h -bWUuU3RhcnRzV2l0aCgnc25hcF8nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlaW50 -cmFlZ2UgKz0gW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0 -ZWluYW1lICAgPSAkbmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm9lc3Nl -ICAgICA9ICRfLkxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnN0ZWxs -dEFtICA9ICRfLkxhc3RXcml0ZVRpbWUuVG9TdHJpbmcoJ3MnKQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICB0eXAgICAgICAgICA9ICR0eXANCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaW5oYWx0ICAgICAgPSBpZiAoJGJ1bmRsZSkgeyAnS29tcGxldHQgKFBsYW51bmcg -KyBBZG1pbiknIH0gZWxzZSB7ICdOdXIgUGxhbnVuZycgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpc3RCdW5kbGUgICA9ICRidW5kbGUNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGVpbnRyYWVnZSA9IEAoJGVpbnRy -YWVnZSB8IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSBlcnN0ZWxsdEFtIC1EZXNjZW5kaW5nKQ0KICAg -ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgJGVpbnRyYWVnZQ0KICAgICAg -ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGgg -LW1hdGNoICdeL2FwaS9wbGFudW5nL2JhY2t1cC9kb3dubG9hZC8oLispJCcgLWFuZCAkTWV0aG9k +ICAgICAgICAgaWYgKCRwLmlkIC1lcSAkci5pZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10pIHsgJHAu +cG9zaXRpb24gPSAkci5wb3NpdGlvbiB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdwb3NpdGlvbicg +LU5vdGVQcm9wZXJ0eVZhbHVlICRyLnBvc2l0aW9uIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5q +c29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVs +bA0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVy +cm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGVyc29uZW4ucmVp +aGVuZm9sZ2UuZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3Qg +JFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdha3R1YWxpc2llcnQnIH0NCiAgICAgICAgICAgICAgICBj +b250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IEhJTldFSVNFIChJ +bi1BcHAtQmFubmVyL01vZGFsLVN5c3RlbSkgPT09PT0NCiAgICAgICAgICAgICMgR0VUICAvYXBp +L2hpbndlaXNlICAgICAgICAgICAgLT4gb2ZmZW5lIEhpbndlaXNlIGZ1ZXIgZGVuIGVpbmdlbG9n +Z3RlbiBVc2VyDQogICAgICAgICAgICAjIFBPU1QgL2FwaS9oaW53ZWlzZS97aWR9L2tlbm50bmlz +IC0+IEtlbm50bmlzbmFobWUgc2V0emVuDQogICAgICAgICAgICAjIEdFVCAgL2FwaS9oaW53ZWlz +ZS91ZWJlcnNpY2h0IC0+IFNVLW9ubHksIHZvbGxzdGFlbmRpZ2UgU2ljaHQgaW5rbC4gTGVzZS1T +dGF0dXMNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGlud2Vpc2UnIC1hbmQgJE1l +dGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAjIEdhdGVkOiBudXIgRW1wZmFlbmdl +ciAoU1Ugb2RlciBHZXNhbXR2ZXJhbnR3b3J0bGljaCkgZHVlcmZlbiB1ZWJlcmhhdXB0IGZyYWdl +bg0KICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAgICAgIGlmICgt +bm90ICgkci5pc3RTdXBlclVzZXIgLW9yICRyLmlzdEdlc2FtdHZlcmFudHdvcnRsaWNoKSkgew0K +ICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNl +ID0gQCgpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgSW52b2tlLUhpbndlaXNQcnVuaW5nDQogICAgICAgICAgICAgICAg +JGggPSBSZWFkLUpzb25PYmplY3QgJ2hpbndlaXNlLmpzb24nDQogICAgICAgICAgICAgICAgaWYg +KCRudWxsIC1lcSAkaCAtb3IgLW5vdCAkaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydoaW53ZWlzZSdd +KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgaGlu +d2Vpc2UgPSBAKCkgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICAkb2ZmZW4gPSBAKCkNCiAgICAgICAgICAgICAgICBmb3Jl +YWNoICgkZWludHJhZyBpbiBAKCRoLmhpbndlaXNlKSkgew0KICAgICAgICAgICAgICAgICAgICAk +aXN0RW1wZmFlbmdlciA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAkaXN0R2VsZXNlbiAg +ICA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkZWludHJhZy5r +ZW5udG5pc25haG1lbi5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoVGVzdC1NYXRjaEtlbm51bmcgKFtzdHJpbmddJHAuTmFtZSkpIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkaXN0RW1wZmFlbmdlciA9ICR0cnVlDQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkcC5WYWx1ZSkgeyAkaXN0R2VsZXNlbiA9ICR0 +cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlm +ICgkaXN0RW1wZmFlbmdlciAtYW5kIC1ub3QgJGlzdEdlbGVzZW4pIHsgJG9mZmVuICs9ICRlaW50 +cmFnIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 +ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9IFtvYmplY3RbXV0kb2ZmZW4gfQ0KICAgICAgICAgICAg +ICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNo +ICdeL2FwaS9oaW53ZWlzZS8oXGQrKS9rZW5udG5pcyQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1Qn +KSB7DQogICAgICAgICAgICAgICAgJGhpbndlaXNJZCA9IFtpbnRdJE1hdGNoZXNbMV0NCiAgICAg +ICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJHIu +aXN0U3VwZXJVc2VyIC1vciAkci5pc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCkpIHsNCiAgICAgICAg +ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAz +OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Omhp +bndlaXNLZW5udG5pc0dlc2V0enQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAkc2NyaXB0Omhp +bndlaXNLZW5udG5pc1R5cCA9ICRudWxsDQogICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxl +TG9jayAnaGlud2Vpc2UuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAkaCA9IFJlYWQtSnNv +bk9iamVjdCAnaGlud2Vpc2UuanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l +cSAkaCAtb3IgLW5vdCAkaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydoaW53ZWlzZSddKSB7IHJldHVy +biB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlaW50cmFnIGluIEAoJGguaGlud2Vp +c2UpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW2ludF0kZWludHJhZy5pZCAtbmUg +JGhpbndlaXNJZCkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIEVyc3Qg +ZGVuIE1hdGNoLVNsb3QgZXJtaXR0ZWxuLCBkYW5uIGF1c3NlcmhhbGIgZGVyDQogICAgICAgICAg +ICAgICAgICAgICAgICAjIFByb3BlcnR5LUVudW1lcmF0aW9uIGluLXBsYWNlIHNldHplbiAoUFMg +NS4xIG1hZyBkYXMNCiAgICAgICAgICAgICAgICAgICAgICAgICMgTW9kaWZpemllcmVuIHdhZWhy +ZW5kIGZvcmVhY2ggbmljaHQgaW1tZXIpLg0KICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNo +TmFtZSA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkZWlu +dHJhZy5rZW5udG5pc25haG1lbi5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKFRlc3QtTWF0Y2hLZW5udW5nIChbc3RyaW5nXSRwLk5hbWUpKSB7 +ICRtYXRjaE5hbWUgPSAkcC5OYW1lOyBicmVhayB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG1hdGNoTmFtZSkgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICR0cyA9IChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJp +bmcoJ3l5eXktTU0tZGRUSEg6bW06c3NaJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +ZWludHJhZy5rZW5udG5pc25haG1lbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJG1h +dGNoTmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJHRzIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dCA9ICR0cnVlDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKCRlaW50cmFnLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3R5 +cCddKSB7ICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlwID0gW3N0cmluZ10kZWludHJhZy50eXAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJl +YWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHNjcmlw +dDpoaW53ZWlzS2VubnRuaXNHZXNldHp0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0 +ZS1Kc29uT2JqZWN0ICdoaW53ZWlzZS5qc29uJyAkaCB8IE91dC1OdWxsDQogICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAk +Z2VzZXR6dCA9IFtib29sXSRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dA0KICAgICAgICAg +ICAgICAgICRrZW5udG5pc1R5cCA9ICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlwDQogICAgICAg +ICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNHZXNldHp0ID0gJGZhbHNlDQogICAgICAg +ICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNUeXAgPSAkbnVsbA0KICAgICAgICAgICAg +ICAgIGlmICgtbm90ICRnZXNldHp0KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICJIaW53ZWlzICRoaW53ZWlzSWQgbmljaHQgZ2VmdW5kZW4gb2RlciBuaWNodCBm +dWVyIFNpZSBiZXN0aW1tdCIgNDA0OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAkbG9nRmVsZGVyID0gQHsgaGlud2Vpc0lkID0gJGhpbndlaXNJZCB9DQogICAg +ICAgICAgICAgICAgaWYgKCRrZW5udG5pc1R5cCkgeyAkbG9nRmVsZGVyWyd0eXAnXSA9ICRrZW5u +dG5pc1R5cCB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnaGlud2Vpcy5rZW5u +dG5pcycgJGxvZ0ZlbGRlcg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u +c2UgQHsgc3RhdHVzID0gJ2tlbm50bmlzX2dlc2V0enQnIH0NCiAgICAgICAgICAgICAgICBjb250 +aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9oaW53 +ZWlzZS91ZWJlcnNpY2h0JyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAg +ICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn +TnVyIFN1cGVyVXNlcicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgSW52b2tlLUhp +bndlaXNQcnVuaW5nDQogICAgICAgICAgICAgICAgJGggPSBSZWFkLUpzb25PYmplY3QgJ2hpbndl +aXNlLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkaCAtb3IgLW5vdCAkaC5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydoaW53ZWlzZSddKSB7DQogICAgICAgICAgICAgICAgICAgIFNl +bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgaGlud2Vpc2UgPSBAKCkgfQ0KICAgICAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNlID0gW29iamVjdFtdXUAoJGguaGlud2Vp +c2UpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAg +ICAgICAjID09PT09IE1JVFRFSUxVTkdFTiAoU3ByaW50IEQtM2IsIDIwMjYtMDUtMjkpID09PT09 +DQogICAgICAgICAgICAjIFZvbSBTVSBtYW51ZWxsIGdlcGZsZWd0ZXMgSGlud2Vpcy1Nb2RhbC1T +eXN0ZW0gKHNlcGFyYXQgdm9uDQogICAgICAgICAgICAjIC9hcGkvaGlud2Vpc2UsIGRhcyBpc3Qg +bnVyIGZ1ZXIgU3lzdGVtLUVyZWlnbmlzc2UgU1UvR1YpLg0KICAgICAgICAgICAgIyBTY2hlbWEg +KyBGaWx0ZXJ1bmctTG9naWsgZ2VzcGllZ2VsdCBhdXMgZGV2L3NlcnZlci5weToNCiAgICAgICAg +ICAgICMgICBfbWl0dGVpbHVuZ2VuX2Z1ZXJfYWt0dWVsbGVuX3VzZXIoKSBiencuIF9wZXJzb25f +YXVzX3BpZCgpLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0ZWlsdW5nZW4n +IC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl +Y3QgJFJlc3BvbnNlIEB7IG1pdHRlaWx1bmdlbiA9IChHZXQtTWl0dGVpbHVuZ2VuRnVlckFrdHVl +bGxlblVzZXIpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0ZWlsdW5nZW4vYWxsZScgLWFuZCAkTWV0 +aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVy +VXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXInIDQwMzsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgICRtID0gUmVhZC1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4u +anNvbicNCiAgICAgICAgICAgICAgICAkbGlzdGUgPSBAKCkNCiAgICAgICAgICAgICAgICBpZiAo +JG51bGwgLW5lICRtIC1hbmQgJG0uUFNPYmplY3QuUHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10p +IHsNCiAgICAgICAgICAgICAgICAgICAgJGxpc3RlID0gQCgkbS5taXR0ZWlsdW5nZW4pDQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug +QHsgbWl0dGVpbHVuZ2VuID0gW29iamVjdFtdXSRsaXN0ZSB9DQogICAgICAgICAgICAgICAgY29u +dGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbWl0 +dGVpbHVuZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlm +ICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBT +dXBlclVzZXIgZHVlcmZlbiBNaXR0ZWlsdW5nZW4gYW5sZWdlbicgNDAzOyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgJHJhdyA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAg +IGlmICgtbm90ICRyYXcpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JvZHkgZmVobHQnIDQwMDsg +Y29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRib2R5ID0gJHJhdyB8IENvbnZlcnRG +cm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBKU09O +JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIFNlcnZlci1zZWl0aWdlIFNhbml0 +aXNpZXJ1bmcgKFN0b3JlZC1YU1MpOiB0aXRlbCArIHRleHQgd2VyZGVuDQogICAgICAgICAgICAg +ICAgIyBpbSBDbGllbnQgdmlhIGlubmVySFRNTCBnZXJlbmRlcnQuDQogICAgICAgICAgICAgICAg +JHRpdGVsID0gQ29udmVydFRvLVNhZmVSaWNoSHRtbCAoKFtzdHJpbmddKCRib2R5LnRpdGVsKSku +VHJpbSgpKQ0KICAgICAgICAgICAgICAgICR0ZXh0ICA9IENvbnZlcnRUby1TYWZlUmljaEh0bWwg +KChbc3RyaW5nXSgkYm9keS50ZXh0KSkuVHJpbSgpKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90 +ICR0aXRlbCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVGl0ZWwgaXN0IFBmbGljaHRmZWxkJyA0 +MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdGV4dCkgIHsgU2VuZC1F +cnJvciAkUmVzcG9uc2UgJ1RleHQgaXN0IFBmbGljaHRmZWxkJyAgNDAwOyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgJHJhbmQgPSAtam9pbiAoKDQ4Li41NykgKyAoOTcuLjEyMikgfCBHZXQt +UmFuZG9tIC1Db3VudCA2IHwgRm9yRWFjaC1PYmplY3QgeyBbY2hhcl0kXyB9KQ0KICAgICAgICAg +ICAgICAgICRtcyA9IFtpbnQ2NF0oW0RhdGVUaW1lT2Zmc2V0XTo6VXRjTm93LlRvVW5peFRpbWVN +aWxsaXNlY29uZHMoKSkNCiAgICAgICAgICAgICAgICAkbmV1ZUlkID0gIm1fJHttc31fJHtyYW5k +fSINCiAgICAgICAgICAgICAgICAkZW1wZkRlZmF1bHQgPSBbcHNjdXN0b21vYmplY3RdQHsNCiAg +ICAgICAgICAgICAgICAgICAgYWxsZSA9ICR0cnVlOyBwZXJzb25lbiA9IEAoKTsgZ3J1cHBlbiA9 +IEAoKTsgcm9sbGVuID0gQCgpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRl +bXBmID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VtcGZhZW5nZXInXSkgeyAkYm9k +eS5lbXBmYWVuZ2VyIH0gZWxzZSB7ICRlbXBmRGVmYXVsdCB9DQogICAgICAgICAgICAgICAgJG5l +dSA9IFtwc2N1c3RvbW9iamVjdF1Aew0KICAgICAgICAgICAgICAgICAgICBpZCAgICAgICAgICAg +PSAkbmV1ZUlkDQogICAgICAgICAgICAgICAgICAgIHRpdGVsICAgICAgICA9ICR0aXRlbA0KICAg +ICAgICAgICAgICAgICAgICB0ZXh0ICAgICAgICAgPSAkdGV4dA0KICAgICAgICAgICAgICAgICAg +ICB0aHVtYm5haWwgICAgPSBpZiAoJGJvZHkuUFNPYmplY3QuUHJvcGVydGllc1sndGh1bWJuYWls +J10pIHsgJGJvZHkudGh1bWJuYWlsIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAg +ICAgcGRmICAgICAgICAgID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BkZiddKSAg +ICAgICB7ICRib2R5LnBkZiB9ICAgICAgIGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAg +ICAgIHRyaWdnZXIgICAgICA9IGlmICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0cmlnZ2Vy +J10gLWFuZCAkYm9keS50cmlnZ2VyKSB7IFtzdHJpbmddJGJvZHkudHJpZ2dlciB9IGVsc2UgeyAn +ZWlubWFsJyB9DQogICAgICAgICAgICAgICAgICAgIGJpc0RhdHVtICAgICA9IGlmICgkYm9keS5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydiaXNEYXR1bSddKSAgeyAkYm9keS5iaXNEYXR1bSB9ICBlbHNl +IHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICBlbXBmYWVuZ2VyICAgPSAkZW1wZg0KICAg +ICAgICAgICAgICAgICAgICBlcnN0ZWxsdEFtICAgPSAoR2V0LURhdGUpLlRvVW5pdmVyc2FsVGlt +ZSgpLlRvU3RyaW5nKCd5eXl5LU1NLWRkVEhIOm1tOnNzWicpDQogICAgICAgICAgICAgICAgICAg +IGVyc3RlbGx0Vm9uICA9IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpDQogICAgICAgICAgICAgICAg +ICAgIGdlYWVuZGVydEFtICA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZv +biA9ICRudWxsDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRo +RmlsZUxvY2sgJ21pdHRlaWx1bmdlbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICRtID0g +UmVhZC1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAg +aWYgKCRudWxsIC1lcSAkbSkgeyAkbSA9IFtwc2N1c3RvbW9iamVjdF1AeyBtaXR0ZWlsdW5nZW4g +PSBAKCk7IGdlbGVzZW4gPSBbcHNjdXN0b21vYmplY3RdQHt9IH0gfQ0KICAgICAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4nXSkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgJG0gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1l +IG1pdHRlaWx1bmdlbiAtTm90ZVByb3BlcnR5VmFsdWUgQCgpIC1Gb3JjZQ0KICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRtLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ2dlbGVzZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG0gfCBBZGQtTWVt +YmVyIC1Ob3RlUHJvcGVydHlOYW1lIGdlbGVzZW4gLU5vdGVQcm9wZXJ0eVZhbHVlIChbcHNjdXN0 +b21vYmplY3RdQHt9KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAjIG5ldWVzdGUgb2Jlbg0KICAgICAgICAgICAgICAgICAgICAkbS5taXR0ZWlsdW5n +ZW4gPSBAKCRuZXUpICsgQCgkbS5taXR0ZWlsdW5nZW4pDQogICAgICAgICAgICAgICAgICAgIFdy +aXRlLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91dC1OdWxsDQogICAgICAg +ICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAn +bWl0dGVpbHVuZy5hbmdlbGVndCcgQHsgaWQgPSAkbmV1ZUlkOyB0aXRlbCA9ICR0aXRlbCB9DQog +ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnYW5n +ZWxlZ3QnOyBtaXR0ZWlsdW5nID0gJG5ldSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21pdHRlaWx1 +bmdlbi8oW1x3LV0rKSQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdO +dXIgU3VwZXJVc2VyJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkbWlkID0gJE1h +dGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkcmF3ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAg +ICAgICAgICAgICAgaWYgKC1ub3QgJHJhdykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQm9keSBm +ZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsgJGJvZHkgPSAkcmF3 +IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3Vl +bHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0 +dGVpbHVuZ0dlZnVuZGVuID0gJGZhbHNlDQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWls +dW5nWmllbCA9ICRudWxsDQogICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAnbWl0 +dGVpbHVuZ2VuLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgJG0gPSBSZWFkLUpzb25PYmpl +Y3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx +ICRtIC1vciAtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdlbiddKSB7IHJl +dHVybiB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlaW50cmFnIGluIEAoJG0ubWl0 +dGVpbHVuZ2VuKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddJGVpbnRy +YWcuaWQgLW5lICRtaWQpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9y +ZWFjaCAoJGZlbGQgaW4gJ3RpdGVsJywndGV4dCcsJ3RodW1ibmFpbCcsJ3BkZicsJ3RyaWdnZXIn +LCdiaXNEYXR1bScsJ2VtcGZhZW5nZXInKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJGZlbGRdKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICR3ZXJ0ID0gJGJvZHkuJGZlbGQNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKCgkZmVsZCAtZXEgJ3RpdGVsJyAtb3IgJGZlbGQgLWVxICd0ZXh0Jykg +LWFuZCAoJHdlcnQgLWlzIFtzdHJpbmddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJHdlcnQgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICR3ZXJ0DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +JGVpbnRyYWcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRmZWxkIC1Ob3RlUHJvcGVy +dHlWYWx1ZSAkd2VydCAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkZWludHJhZyB8 +IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgZ2VhZW5kZXJ0QW0gIC1Ob3RlUHJvcGVydHlW +YWx1ZSAoKEdldC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygneXl5eS1NTS1kZFRI +SDptbTpzc1onKSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAkZWludHJhZyB8IEFk +ZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgZ2VhZW5kZXJ0Vm9uIC1Ob3RlUHJvcGVydHlWYWx1 +ZSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAg +ICRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAg +ICAgICRzY3JpcHQ6bWl0dGVpbHVuZ1ppZWwgPSAkZWludHJhZw0KICAgICAgICAgICAgICAgICAg +ICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBp +ZiAoJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4pIHsgV3JpdGUtSnNvbk9iamVjdCAnbWl0dGVp +bHVuZ2VuLmpzb24nICRtIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVs +bA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuKSB7 +DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICJNaXR0ZWlsdW5nICRt +aWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgJHppZWwgPSAkc2NyaXB0Om1pdHRlaWx1bmdaaWVsDQogICAgICAgICAgICAg +ICAgJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4gPSAkZmFsc2U7ICRzY3JpcHQ6bWl0dGVpbHVu +Z1ppZWwgPSAkbnVsbA0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21pdHRlaWx1 +bmcuZ2VhZW5kZXJ0JyBAeyBpZCA9ICRtaWQgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9i +amVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlYWVuZGVydCc7IG1pdHRlaWx1bmcgPSAkemll +bCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAg +IGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21pdHRlaWx1bmdlbi8oW1x3LV0rKSQnIC1hbmQgJE1l +dGhvZCAtZXEgJ0RFTEVURScpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RT +dXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyJyA0MDM7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkbWlkID0gJE1hdGNoZXNbMV0NCiAgICAgICAgICAg +ICAgICAkc2NyaXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQgPSAkZmFsc2UNCiAgICAgICAgICAgICAg +ICBJbnZva2UtV2l0aEZpbGVMb2NrICdtaXR0ZWlsdW5nZW4uanNvbicgew0KICAgICAgICAgICAg +ICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nDQogICAgICAg +ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJG0gLW9yIC1ub3QgJG0uUFNPYmplY3QuUHJvcGVy +dGllc1snbWl0dGVpbHVuZ2VuJ10pIHsgcmV0dXJuIH0NCiAgICAgICAgICAgICAgICAgICAgJHZv +cmhlciA9IEAoJG0ubWl0dGVpbHVuZ2VuKQ0KICAgICAgICAgICAgICAgICAgICAkbmFjaGhlciA9 +IEAoJHZvcmhlciB8IFdoZXJlLU9iamVjdCB7IFtzdHJpbmddJF8uaWQgLW5lICRtaWQgfSkNCiAg +ICAgICAgICAgICAgICAgICAgaWYgKCR2b3JoZXIuQ291bnQgLWVxICRuYWNoaGVyLkNvdW50KSB7 +IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgICRtLm1pdHRlaWx1bmdlbiA9ICRuYWNoaGVy +DQogICAgICAgICAgICAgICAgICAgICMgZ2VsZXNlbi1FaW50cmFlZ2UgZnVlciBkaWVzZSBNaXR0 +ZWlsdW5nIGF1ZnJhZXVtZW4NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRtLlBTT2JqZWN0LlBy +b3BlcnRpZXNbJ2dlbGVzZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAo +JHAgaW4gQCgkbS5nZWxlc2VuLlBTT2JqZWN0LlByb3BlcnRpZXMpKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRwLlZhbHVlLlBTT2JqZWN0LlByb3BlcnRpZXNbJG1pZF0pIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHAuVmFsdWUuUFNPYmplY3QuUHJvcGVy +dGllcy5SZW1vdmUoJG1pZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgV3JpdGUtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nICRtIHwgT3V0LU51bGwN +CiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2Vsb2VzY2h0ID0gJHRydWUN +CiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +c2NyaXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F +cnJvciAkUmVzcG9uc2UgIk1pdHRlaWx1bmcgJG1pZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBjb250 +aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1 +bmdHZWxvZXNjaHQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdt +aXR0ZWlsdW5nLmdlbG9lc2NodCcgQHsgaWQgPSAkbWlkIH0NCiAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQnIH0NCiAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkv +bWl0dGVpbHVuZ2VuL3VwbG9hZCDigJQgU1Utb25seSwgQmlsZCAoMiBNQikgb2RlciBQREYgKDEw +IE1CKQ0KICAgICAgICAgICAgIyBCb2R5OiB7ImFydCI6ICJiaWxkInwicGRmIiwgImRhdGVpbmFt +ZSI6ICJ4LnBuZyIsICJkYXRhVXJsIjogImRhdGE6Li4uIn0NCiAgICAgICAgICAgIGlmICgkUGF0 +aCAtZXEgJy9hcGkvbWl0dGVpbHVuZ2VuL3VwbG9hZCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcp +IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gTWl0dGVpbHVuZ3MtQW5oYWVu +Z2UgaG9jaGxhZGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIDE0IE1CIE1h +eFNpemUsIHdlaWwgMTBNQiBQREYgYmFzZTY0LWNvZGllcnQgfjEzLjQgTUIgUGF5bG9hZCB3aXJk +DQogICAgICAgICAgICAgICAgJHJhdyA9IFJlYWQtQm9keSAkUmVxdWVzdCAtTWF4U2l6ZSAxNE1C +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHJhdykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn +QW5mcmFnZSB6dSBncm9zcyAobWF4IDE0IE1CKScgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgdHJ5IHsgJGJvZHkgPSAkcmF3IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICRhcnQgPSAoW3N0cmluZ10kYm9keS5hcnQpLlRvTG93ZXIoKQ0KICAgICAg +ICAgICAgICAgICRkYXRhVXJsID0gW3N0cmluZ10kYm9keS5kYXRhVXJsDQogICAgICAgICAgICAg +ICAgaWYgKCRhcnQgLW5lICdiaWxkJyAtYW5kICRhcnQgLW5lICdwZGYnKSB7DQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdhcnQgbXVzcyAiYmlsZCIgb2RlciAicGRm +IiBzZWluJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICRleHQgPSAkbnVsbDsgJG1heEJ5dGVzID0gMA0KICAgICAgICAgICAgICAgIGlmICgkYXJ0IC1l +cSAnYmlsZCcpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRhVXJsIC1tYXRjaCAnXmRh +dGE6aW1hZ2UvKGpwZWd8anBnfHBuZ3x3ZWJwKTtiYXNlNjQsJykgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgJGV4dCA9ICgkTWF0Y2hlc1sxXSAtcmVwbGFjZSAnanBlZycsJ2pwZycpDQogICAg +ICAgICAgICAgICAgICAgICAgICAkbWF4Qnl0ZXMgPSAyICogMTAyNCAqIDEwMjQNCiAgICAgICAg +ICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICdCaWxkOiBlcndhcnRldCBkYXRhOmltYWdlLyhqcGVnfHBuZ3x3ZWJwKTtiYXNl +NjQsLi4uJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGRhdGFVcmwgLWxpa2UgJ2Rh +dGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwqJykgew0KICAgICAgICAgICAgICAgICAgICAgICAg +JGV4dCA9ICdwZGYnDQogICAgICAgICAgICAgICAgICAgICAgICAkbWF4Qnl0ZXMgPSAxMCAqIDEw +MjQgKiAxMDI0DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnUERGOiBlcndhcnRldCBkYXRhOmFwcGxpY2F0 +aW9uL3BkZjtiYXNlNjQsLi4uJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGJhc2U2NCA9ICRkYXRhVXJsIC1y +ZXBsYWNlICdeZGF0YTpbXjtdKztiYXNlNjQsJywgJycNCiAgICAgICAgICAgICAgICB0cnkgeyAk +Ynl0ZXMgPSBbU3lzdGVtLkNvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCRiYXNlNjQpIH0NCiAg +ICAgICAgICAgICAgICBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlIGJh +c2U2NC1EYXRlbicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYgKCRieXRlcy5M +ZW5ndGggLWd0ICRtYXhCeXRlcykgew0KICAgICAgICAgICAgICAgICAgICAkbGltaXRLYiA9IFtp +bnRdKCRtYXhCeXRlcyAvIDEwMjQpDQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJl +c3BvbnNlICIkYXJ0IHp1IGdyb3NzIChtYXggJGxpbWl0S2IgS0IpIiA0MTM7IGNvbnRpbnVlDQog +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR1cGxvYWREaXIgPSBKb2luLVBhdGgg +JERhdGFEaXIgJ3VwbG9hZHMnIHwgSm9pbi1QYXRoIC1DaGlsZFBhdGggJ21pdHRlaWx1bmdlbicN +CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkdXBsb2Fk +RGlyKSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGly +ZWN0b3J5IC1QYXRoICR1cGxvYWREaXIgLUZvcmNlIHwgT3V0LU51bGwgfSBjYXRjaCB7fQ0KICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcmFuZCA9IC1qb2luICgoNDguLjU3KSAr +ICg5Ny4uMTIyKSB8IEdldC1SYW5kb20gLUNvdW50IDYgfCBGb3JFYWNoLU9iamVjdCB7IFtjaGFy +XSRfIH0pDQogICAgICAgICAgICAgICAgJG1zID0gW2ludDY0XShbRGF0ZVRpbWVPZmZzZXRdOjpV +dGNOb3cuVG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKQ0KICAgICAgICAgICAgICAgICRmaWxlbmFt +ZSA9ICJtXyR7bXN9XyR7cmFuZH0uJGV4dCINCiAgICAgICAgICAgICAgICAkemllbFBmYWQgPSBK +b2luLVBhdGggJHVwbG9hZERpciAkZmlsZW5hbWUNCiAgICAgICAgICAgICAgICBbU3lzdGVtLklP +LkZpbGVdOjpXcml0ZUFsbEJ5dGVzKCR6aWVsUGZhZCwgJGJ5dGVzKQ0KICAgICAgICAgICAgICAg +ICMgS2VpbmUgQUNMLVJlc3RyaWN0aW9uOiBVcGxvYWRzIHNpbmQgZnVlciBkaWUgRW1wZmFlbmdl +ci0NCiAgICAgICAgICAgICAgICAjIEdydXBwZSAobWFudWVsbCB2b20gU1UgdmVydGVpbHQpIGdl +ZGFjaHQsIG5pY2h0IGdlaGVpbS4NCiAgICAgICAgICAgICAgICAkcmVsUGZhZCA9ICIvZGF0YS91 +cGxvYWRzL21pdHRlaWx1bmdlbi8kZmlsZW5hbWUiDQogICAgICAgICAgICAgICAgV3JpdGUtTG9n +RWludHJhZyAnbWl0dGVpbHVuZy51cGxvYWQnIEB7IGFydCA9ICRhcnQ7IGRhdGVpID0gJGZpbGVu +YW1lOyBieXRlcyA9ICRieXRlcy5MZW5ndGggfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9i +amVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ29rJzsgcGZhZCA9ICRyZWxQZmFkOyBieXRlcyA9 +ICRieXRlcy5MZW5ndGggfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9 +DQoNCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21pdHRlaWx1bmdlbi8oW1x3 +LV0rKS9rZW5udG5pcyQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAg +ICAgJG1pZCA9ICRNYXRjaGVzWzFdDQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQog +ICAgICAgICAgICAgICAgJHBpZCA9ICRyLm1laW5lUGVyc29uSWQNCiAgICAgICAgICAgICAgICBp +ZiAoJG51bGwgLWVxICRwaWQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIFBlcnNvbiB6 +dWdlb3JkbmV0JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRl +aWx1bmdLZW5udG5pc09LID0gJGZhbHNlDQogICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxl +TG9jayAnbWl0dGVpbHVuZ2VuLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgJG0gPSBSZWFk +LUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAo +JG51bGwgLWVxICRtIC1vciAtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdl +biddKSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgICRleGlzdGllcnQgPSBAKCRtLm1p +dHRlaWx1bmdlbiB8IFdoZXJlLU9iamVjdCB7IFtzdHJpbmddJF8uaWQgLWVxICRtaWQgfSkuQ291 +bnQgLWd0IDANCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGV4aXN0aWVydCkgeyByZXR1 +cm4gfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVz +WydnZWxlc2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtIHwgQWRkLU1lbWJlciAt +Tm90ZVByb3BlcnR5TmFtZSBnZWxlc2VuIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW3BzY3VzdG9tb2Jq +ZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg +ICAgJHBpZFN0ciA9IFtzdHJpbmddJHBpZA0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +bS5nZWxlc2VuLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBpZFN0cl0pIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICRtLmdlbGVzZW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRwaWRT +dHIgLU5vdGVQcm9wZXJ0eVZhbHVlIChbcHNjdXN0b21vYmplY3RdQHt9KSAtRm9yY2UNCiAgICAg +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkaGV1dGUgPSAoR2V0LURhdGUp +LlRvU3RyaW5nKCd5eXl5LU1NLWRkJykNCiAgICAgICAgICAgICAgICAgICAgJG0uZ2VsZXNlbi4k +cGlkU3RyIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkbWlkIC1Ob3RlUHJvcGVydHlW +YWx1ZSAkaGV1dGUgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3Qg +J21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICRz +Y3JpcHQ6bWl0dGVpbHVuZ0tlbm50bmlzT0sgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIH0gfCBP +dXQtTnVsbA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6bWl0dGVpbHVuZ0tlbm50 +bmlzT0spIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgIk1pdHRl +aWx1bmcgJG1pZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBjb250aW51ZQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdLZW5udG5pc09LID0gJGZhbHNl +DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAn +a2VubnRuaXNfZ2VzZXR6dCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg +ICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gQkFDS1VQUyA9PT09PQ0KICAgICAgICAgICAgIyBC +YWNrdXAtTmFtaW5nIChnZXRhcm50LCBpbiBkYXRhL2NhY2hlLyk6DQogICAgICAgICAgICAjIC0g +c25hcF88dHM+LmJhayAgPSBCdW5kbGUgKHBsYW51bmcrYWRtaW4pIC0tIG1hbnVlbGxlIEJhY2t1 +cHMgKyBTaWNoZXJ1bmdlbg0KICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgdm9yIFdp +ZWRlcmhlcnN0ZWxsdW5nDQogICAgICAgICAgICAjIC0gbGVnXzx0cz4uYmFrICAgPSBOdXIgUGxh +bnVuZyAtLSBMZWdhY3ktQmFja3VwcyArIEF1dG8tU2ljaGVydW5nZW4NCiAgICAgICAgICAgICMg +ICAgICAgICAgICAgICAgICAgIHZvciBSZXNldC9EdW1teWRhdGVuDQogICAgICAgICAgICAjIC0g +Y2ZnXzx0cz5fPGhpbndlaXM+LmJhayA9IGFkbWluLmpzb24tQXV0by1CYWNrdXBzIChCYWNrdXAt +QWRtaW5Kc29uKQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1 +cCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo +VGVzdC1EYXJmQmVyZWljaCAnYmFja3VwcycpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWlu +ZSBCZXJlY2h0aWd1bmcgKEJhY2t1cHMpJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICAkcGxhbnVuZ1BhdGggPSBKb2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcGxhbnVuZ1BhdGgp +KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdQbGFudW5nIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZ09iaiA9IFJlYWQtSnNvbk9iamVjdCAn +cGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRhZG1pbk9iaiAgID0gUmVhZC1Kc29uT2Jq +ZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluT2Jq +KSB7ICRhZG1pbk9iaiA9IE5ldy1PYmplY3QgUFNPYmplY3QgfQ0KICAgICAgICAgICAgICAgICR0 +cyA9IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXlNTWRkX0hIbW1zcycNCiAgICAgICAgICAgICAgICAk +Ym5hbWUgPSAic25hcF8kdHMuYmFrIg0KICAgICAgICAgICAgICAgICRidW5kbGUgPSBbb3JkZXJl +ZF1Aew0KICAgICAgICAgICAgICAgICAgICBmb3JtYXQgID0gJ3ZpMy1iYWNrdXAtdjEnDQogICAg +ICAgICAgICAgICAgICAgIHRzICAgICAgPSAkdHMNCiAgICAgICAgICAgICAgICAgICAgcGxhbnVu +ZyA9ICRwbGFudW5nT2JqDQogICAgICAgICAgICAgICAgICAgIGFkbWluICAgPSAkYWRtaW5PYmoN +CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGpzb24gPSAkYnVuZGxlIHwgQ29u +dmVydFRvLUpzb24gLURlcHRoIDMwDQogICAgICAgICAgICAgICAgJGNhY2hlRGlyID0gSm9pbi1Q +YXRoICREYXRhRGlyICdjYWNoZScNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRo +IC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIpKSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3Rvcnkg +LVBhdGggJGNhY2hlRGlyIC1Gb3JjZSB8IE91dC1OdWxsIH0NCiAgICAgICAgICAgICAgICBXcml0 +ZS1CYWNrdXBCeXRlcyAoSm9pbi1QYXRoICRjYWNoZURpciAkYm5hbWUpICRqc29uDQogICAgICAg +ICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLmVyc3RlbGx0JyBAeyBkYXRlaW5hbWUg +PSAkYm5hbWU7IGluaGFsdCA9ICdwbGFudW5nK2FkbWluJyB9DQogICAgICAgICAgICAgICAgU2Vu +ZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZXJzdGVsbHQnOyBkYXRlaW5hbWUg +PSAkYm5hbWUgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAg +ICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwcycgLWFuZCAkTWV0aG9k IC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNo ICdiYWNrdXBzJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAo -QmFja3VwcyknIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRuYW1lID0gJE1hdGNo -ZXNbMV0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJG5hbWUgLW1hdGNoICdeKHNuYXBffGxl -Z18pWzAtOV9hLXpBLVpdK1wuYmFrJCcpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0 -aWdlciBEYXRlaW5hbWUnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRmcCA9IEpv -aW4tUGF0aCAkRGF0YURpciAoJ2NhY2hlLycgKyAkbmFtZSkNCiAgICAgICAgICAgICAgICBpZiAo -LW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZnApKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICdCYWNrdXAgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICRrbGFydGV4dCA9IFJlYWQtQmFja3VwVGV4dCAkZnANCiAgICAgICAgICAgICAgICBpZiAoJG51 -bGwgLWVxICRrbGFydGV4dCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmFja3VwLURhdGVpIGtv -bm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbicgNTAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAg -ICAgJGJ5dGVzID0gW1N5c3RlbS5UZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRCeXRlcygka2xhcnRl -eHQpDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLlN0YXR1c0NvZGUgPSAyMDANCiAgICAgICAg -ICAgICAgICAkUmVzcG9uc2UuQ29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNl -dD11dGYtOCcNCiAgICAgICAgICAgICAgICBBZGQtU2VjdXJpdHlIZWFkZXJzICRSZXNwb25zZQ0K -ICAgICAgICAgICAgICAgICRSZXNwb25zZS5IZWFkZXJzLkFkZCgnQ29udGVudC1EaXNwb3NpdGlv -bicsICJhdHRhY2htZW50OyBmaWxlbmFtZT1gIiRuYW1lYCIiKQ0KICAgICAgICAgICAgICAgICRS -ZXNwb25zZS5Db250ZW50TGVuZ3RoNjQgPSAkYnl0ZXMuTGVuZ3RoDQogICAgICAgICAgICAgICAg -JFJlc3BvbnNlLk91dHB1dFN0cmVhbS5Xcml0ZSgkYnl0ZXMsIDAsICRieXRlcy5MZW5ndGgpDQog -ICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvcGxhbnVuZy9iYWNrdXAvd2llZGVyaGVyc3RlbGxlbicgLWFuZCAkTWV0aG9kIC1lcSAn -UE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnYmFj -a3VwcycpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKEJhY2t1 -cHMpJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAk -UmVxdWVzdA0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNv -bg0KICAgICAgICAgICAgICAgICRuYW1lID0gIiQoJGRhdGVuLmRhdGVpbmFtZSkiDQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgKCRuYW1lIC1tYXRjaCAnXihzbmFwX3xsZWdfKVswLTlfYS16QS1a -XStcLmJhayQnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZXIgRGF0ZWluYW1l -JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkY2FjaGVEaXIgPSBKb2luLVBhdGgg -JERhdGFEaXIgJ2NhY2hlJw0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxp -dGVyYWxQYXRoICRjYWNoZURpcikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0 -aCAkY2FjaGVEaXIgLUZvcmNlIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICRxdWVsbCA9 -IEpvaW4tUGF0aCAkY2FjaGVEaXIgJG5hbWUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz -dC1QYXRoIC1MaXRlcmFsUGF0aCAkcXVlbGwpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNr -dXAgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICR0cyA9 -IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXlNTWRkX0hIbW1zcycNCiAgICAgICAgICAgICAgICAkc2lj -aGVyID0gInNuYXBfdm9yX3dpZWRlcmhlcnN0ZWxsdW5nXyR0cy5iYWsiDQogICAgICAgICAgICAg -ICAgIyBTaWNoZXJoZWl0cy1CdW5kbGUgZGVyIGFrdHVlbGxlbiBEYXRlbiB2b3IgVWViZXJzY2hy -ZWliZW4uDQogICAgICAgICAgICAgICAgJHNpY2hlckJ1bmRsZSA9IFtvcmRlcmVkXUB7DQogICAg -ICAgICAgICAgICAgICAgIGZvcm1hdCAgPSAndmkzLWJhY2t1cC12MScNCiAgICAgICAgICAgICAg -ICAgICAgdHMgICAgICA9ICR0cw0KICAgICAgICAgICAgICAgICAgICBwbGFudW5nID0gKFJlYWQt -SnNvbk9iamVjdCAncGxhbnVuZy5qc29uJykNCiAgICAgICAgICAgICAgICAgICAgYWRtaW4gICA9 -IChSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICBXcml0ZS1CYWNrdXBCeXRlcyAoSm9pbi1QYXRoICRjYWNoZURpciAkc2ljaGVy -KSAoJHNpY2hlckJ1bmRsZSB8IENvbnZlcnRUby1Kc29uIC1EZXB0aCAzMCkNCg0KICAgICAgICAg -ICAgICAgICRxdWVsbEluaGFsdCA9IFJlYWQtQmFja3VwVGV4dCAkcXVlbGwNCiAgICAgICAgICAg -ICAgICBpZiAoJG51bGwgLWVxICRxdWVsbEluaGFsdCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn -QmFja3VwLURhdGVpIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbicgNTAwOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgdHJ5IHsgJHF1ZWxsRGF0ZW4gPSAkcXVlbGxJbmhhbHQgfCBDb252 -ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmFja3VwLURhdGVp -IG5pY2h0IHBhcnNpZXJiYXInIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICR3aWVk -ZXJoZXJnZXN0ZWxsdCA9IEAoKQ0KICAgICAgICAgICAgICAgIGlmICgkcXVlbGxEYXRlbiAtYW5k -ICRxdWVsbERhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2Zvcm1hdCddIC1hbmQgIiQoJHF1ZWxs -RGF0ZW4uZm9ybWF0KSIuU3RhcnRzV2l0aCgndmkzLWJhY2t1cCcpKSB7DQogICAgICAgICAgICAg -ICAgICAgIGlmICgkcXVlbGxEYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydwbGFudW5nJ10pIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicg -JHF1ZWxsRGF0ZW4ucGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAk -d2llZGVyaGVyZ2VzdGVsbHQgKz0gJ3BsYW51bmcnDQogICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgaWYgKCRxdWVsbERhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2Fk -bWluJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWlu -Lmpzb24nICRxdWVsbERhdGVuLmFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAg -ICAgICR3aWVkZXJoZXJnZXN0ZWxsdCArPSAnYWRtaW4nDQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAjIExlZ2FjeS1G -b3JtYXQgKG51ciBwbGFudW5nLmpzb24tSW5oYWx0KS4NCiAgICAgICAgICAgICAgICAgICAgV3Jp -dGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcXVlbGxEYXRlbiB8IE91dC1OdWxsDQogICAg -ICAgICAgICAgICAgICAgICR3aWVkZXJoZXJnZXN0ZWxsdCArPSAncGxhbnVuZycNCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLndpZWRl -cmhlcmdlc3RlbGx0JyBAeyBxdWVsbGUgPSAkbmFtZTsgc2ljaGVydW5nID0gJHNpY2hlcjsgaW5o -YWx0ID0gKCR3aWVkZXJoZXJnZXN0ZWxsdCAtam9pbiAnKycpIH0NCiAgICAgICAgICAgICAgICBO -ZXctSGlud2VpcyAnYmFja3VwX3dpZWRlcmhlcmdlc3RlbGx0JyAoW29yZGVyZWRdQHsNCiAgICAg -ICAgICAgICAgICAgICAgYmFja3VwICAgID0gJG5hbWUNCiAgICAgICAgICAgICAgICAgICAgc2lj -aGVydW5nID0gJHNpY2hlcg0KICAgICAgICAgICAgICAgICAgICBpbmhhbHQgICAgPSAoJHdpZWRl -cmhlcmdlc3RlbGx0IC1qb2luICcrJykNCiAgICAgICAgICAgICAgICB9KSAoR2V0LUFrdHVlbGxl -ckJlbnV0emVyKSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRS -ZXNwb25zZSBAeyBzdGF0dXMgPSAnd2llZGVyaGVyZ2VzdGVsbHQnOyBzaWNoZXJ1bmcgPSAkc2lj -aGVyOyBpbmhhbHQgPSAkd2llZGVyaGVyZ2VzdGVsbHQgfQ0KICAgICAgICAgICAgICAgIGNvbnRp -bnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51 -bmcvYmFja3VwL2xvZXNjaGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAg -ICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdiYWNrdXBzJykpIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoQmFja3VwcyknIDQwMzsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAg -ICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAg -JG5hbWUgPSAiJCgkZGF0ZW4uZGF0ZWluYW1lKSINCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo -JG5hbWUgLW1hdGNoICdeKHNuYXBffGxlZ18pWzAtOV9hLXpBLVpdK1wuYmFrJCcpKSB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlciBEYXRlaW5hbWUnIDQwMDsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgICRmcCA9IEpvaW4tUGF0aCAkRGF0YURpciAoJ2NhY2hlLycgKyAkbmFt -ZSkNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZnAp -KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNrdXAgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkZnAgLUZv -cmNlDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLmdlbG9lc2NodCcg -QHsgZGF0ZWluYW1lID0gJG5hbWUgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk -UmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRp -bnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gUkVTRVQgLyBEVU1NWURB -VEVOID09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvcmVzZXQn -IC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl -c3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBk -dWVyZmVuIGRpZSBQbGFudW5nIHp1cnVlY2tzZXR6ZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAg -ICAgICAgICAgICRwbGFudW5nUGF0aCA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVuZy5qc29u -Jw0KICAgICAgICAgICAgICAgICRiYWNrdXBOYW1lID0gJG51bGwNCiAgICAgICAgICAgICAgICBp -ZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcGxhbnVuZ1BhdGgpIHsNCiAgICAgICAgICAgICAg -ICAgICAgJHRzID0gR2V0LURhdGUgLUZvcm1hdCAneXl5eU1NZGRfSEhtbXNzJw0KICAgICAgICAg -ICAgICAgICAgICAkY2FjaGVEaXIgPSBKb2luLVBhdGggJERhdGFEaXIgJ2NhY2hlJw0KICAgICAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIp -KSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggJGNhY2hlRGlyIC1Gb3JjZSB8 -IE91dC1OdWxsIH0NCiAgICAgICAgICAgICAgICAgICAgIyBSZXN0YXVyaWVyYmFyZXIgTmFtZSAo -cGxhbnVuZ19iYWNrdXBfdm9yX3Jlc2V0XyouanNvbikgc3RhdHQNCiAgICAgICAgICAgICAgICAg -ICAgIyAuYmFrIC0+IHdpcmQgdm9tIEJhY2t1cHMtVGFiIGdlbGlzdGV0IHVuZCBrYW5uIHdpZWRl -cmhlcmdlc3RlbGx0DQogICAgICAgICAgICAgICAgICAgICMgd2VyZGVuLiBGcnVlaGVyIHp1ZGVt -IG5pY2h0IGFuIGRlbiBDbGllbnQgenVydWVja2dlZ2ViZW4NCiAgICAgICAgICAgICAgICAgICAg -IyAtPiAiQmFja3VwOiB1bmRlZmluZWQiIGluIGRlciBVSS4NCiAgICAgICAgICAgICAgICAgICAg -JGJhY2t1cE5hbWUgPSAicGxhbnVuZ19iYWNrdXBfdm9yX3Jlc2V0XyR0cy5qc29uIg0KICAgICAg -ICAgICAgICAgICAgICBDb3B5LUl0ZW0gLUxpdGVyYWxQYXRoICRwbGFudW5nUGF0aCAtRGVzdGlu -YXRpb24gKEpvaW4tUGF0aCAkY2FjaGVEaXIgJGJhY2t1cE5hbWUpDQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpz -b24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkcGxhbnVuZykgew0KICAgICAgICAg -ICAgICAgICAgICBpZiAoJHBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1snZWludHJhZWdlJ10p -IHsgJHBsYW51bmcuZWludHJhZWdlID0gTmV3LU9iamVjdCBQU09iamVjdCB9DQogICAgICAgICAg -ICAgICAgICAgIGlmICgkcGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50YXJlJ10p -IHsgJHBsYW51bmcua29tbWVudGFyZSA9IE5ldy1PYmplY3QgUFNPYmplY3QgfQ0KICAgICAgICAg -ICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0 -LU51bGwNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJh -ZyAncGxhbnVuZy5yZXNldCcgQHt9DQogICAgICAgICAgICAgICAgTmV3LUhpbndlaXMgJ3BsYW51 -bmdfcmVzZXQnIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBoaW53ZWlzID0gJ0Vp -bnRyYWVnZSB1bmQgS29tbWVudGFyZSB3dXJkZW4gZ2Vsb2VzY2h0OyBTaWNoZXJ1bmcgbGllZ3Qg -aW4gZGF0YS9jYWNoZS8uJw0KICAgICAgICAgICAgICAgIH0pIChHZXQtQWt0dWVsbGVyQmVudXR6 -ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl -IEB7IHN0YXR1cyA9ICd6dXJ1ZWNrZ2VzZXR6dCc7IGJhY2t1cCA9ICRiYWNrdXBOYW1lIH0NCiAg -ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQ -YXRoIC1lcSAnL2FwaS9wbGFudW5nL2R1bW15ZGF0ZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1Qn -KSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5k -LUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIER1bW15ZGF0ZW4gZWluc3Bp -ZWxlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJ0R1bW15ZGF0ZW4gbnVyIGltIERlYnVnLVNlcnZlciAoZGV2L3NlcnZlci5weSkgaW1wbGVt -ZW50aWVydC4nIDUwMQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN -CiAgICAgICAgICAgICMgUE9TVCAvYXBpL2FkbWluL3Byb3Rva29sbC1sb2VzY2hlbg0KICAgICAg -ICAgICAgIyBFaW5tYWwtUmVzZXQgZnVlciBMb2didWNoICsgQVBJLUxvZy4gU2V0enQgbG9nYnVj -aC5qc29uIGF1ZiBbXSwNCiAgICAgICAgICAgICMgbG9lc2NodCBkaWUgQVBJLUxvZy1EYXRlaSBh -dXMgJVRFTVAlLCB1bmQgc2NocmVpYnQgZWluZW4gZWluemlnZW4NCiAgICAgICAgICAgICMgbmV1 -ZW4gTG9nYnVjaC1FaW50cmFnIChwcm90b2tvbGwuZ2Vsb2VzY2h0KSwgZGFtaXQgZGFzIEVyZWln -bmlzDQogICAgICAgICAgICAjIHNlbGJzdCBuYWNodm9sbHppZWhiYXIgYmxlaWJ0Lg0KICAgICAg -ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9wcm90b2tvbGwtbG9lc2NoZW4nIC1hbmQg -JE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0 -U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVu -IGRhcyBQcm90b2tvbGwgbG9lc2NoZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICR2b3JoZXIgPSBSZWFkLUpzb25PYmplY3QgJ2xvZ2J1Y2guanNvbicNCiAgICAgICAgICAgICAg -ICAkYW56YWhsVm9yaGVyID0gMA0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHZvcmhl -cikgew0KICAgICAgICAgICAgICAgICAgICAkYW56YWhsVm9yaGVyID0gQCgkdm9yaGVyKS5Db3Vu -dA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICds -b2didWNoLmpzb24nIEAoKSB8IE91dC1OdWxsDQoNCiAgICAgICAgICAgICAgICAkYXBpTG9nQnl0 -ZXMgPSAwDQogICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNjcmlw -dDpBcGlMb2cpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICRhcGlMb2dCeXRlcyA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdDpBcGlM -b2cpLkxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQ -YXRoICRzY3JpcHQ6QXBpTG9nIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcA0KICAgICAgICAgICAg -ICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICMgRGF0ZWkgZXZ0bC4g -bm9jaCBvZmZlbjsgaWdub3JpZXJlbiwgTG9nYnVjaCBpc3QgZGllIHdpY2h0aWdlcmUgU3B1cg0K -ICAgICAgICAgICAgICAgICAgICAgICAgJGFwaUxvZ0J5dGVzID0gLTENCiAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp -bnRyYWcgJ3Byb3Rva29sbC5nZWxvZXNjaHQnIEB7DQogICAgICAgICAgICAgICAgICAgIGxvZ2J1 -Y2hFaW50cmFlZ2VWb3JoZXIgPSAkYW56YWhsVm9yaGVyDQogICAgICAgICAgICAgICAgICAgIGFw -aUxvZ0J5dGVzICAgICAgICAgICAgPSAkYXBpTG9nQnl0ZXMNCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAg -ICAgICAgICBzdGF0dXMgICAgICAgICAgICAgICAgID0gJ2dlbG9lc2NodCcNCiAgICAgICAgICAg -ICAgICAgICAgbG9nYnVjaEVpbnRyYWVnZVZvcmhlciA9ICRhbnphaGxWb3JoZXINCiAgICAgICAg -ICAgICAgICAgICAgYXBpTG9nQnl0ZXMgICAgICAgICAgICA9ICRhcGlMb2dCeXRlcw0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAjID09PT09IFNUQVRJU1RJSyAvIExPR0JVQ0ggPT09PT0NCiAgICAgICAgICAg -IGlmICgkUGF0aCAtZXEgJy9hcGkvc3RhdGlzdGlrJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ3N0YXRpc3Rpaycp -KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJl -Y2h0aWd1bmcgKFN0YXRpc3RpayknIDQwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicN -CiAgICAgICAgICAgICAgICAkYWRtaW4gICA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicN -CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIChHZXQtU3RhdGlzdGlr -RGF0YSAkcGxhbnVuZyAkYWRtaW4pDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9nYnVjaCcgLWFuZCAkTWV0 -aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJl -aWNoICdsb2didWNoJykpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoTG9nYnVjaCknIDQwMzsgY29udGludWUNCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uVGV4dCAkUmVzcG9uc2UgKEdldC1M -b2didWNoVGV4dCkNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBaRUxMLUxPQ0sgKyBDSEFOR0VTIChM -aXZlLVN5bmMpID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkv -bG9jay96ZWxsZSAgeyBkYXR1bSwgcGVyc29uSWQgfSAtPiB7IG9rLCB0b2tlbiwgLi4uIH0gb2Rl -ciA0MjMgeyBzcGVycmVyLCAuLi4gfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9s -b2NrL3plbGxlJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRi -b2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkp -IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAg -ICAgICAgICAgJGRhdHVtID0gW3N0cmluZ10kYS5kYXR1bQ0KICAgICAgICAgICAgICAgICRwZXJz -b25JZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz -dC1Mb2NrU2FmZURhdHVtICRkYXR1bSkgLW9yIC1ub3QgKFRlc3QtTG9ja1NhZmVJZCAkcGVyc29u -SWQpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0 -aWdlIGRhdHVtL3BlcnNvbklkJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICR1c2VyID0gR2V0LUFrdHVlbGxlckJlbnV0emVyDQogICAgICAgICAgICAg -ICAgJHJvbGxlID0gKEdldC1SZWNodGUpLnJvbGxlDQogICAgICAgICAgICAgICAgJHJlcyA9IEFj -cXVpcmUtQ2VsbExvY2sgJGRhdHVtICRwZXJzb25JZCAkdXNlciAkcm9sbGUgJGZhbHNlDQogICAg -ICAgICAgICAgICAgaWYgKC1ub3QgJHJlcy5vaykgew0KICAgICAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIg -ICAgPSAnZ2VzcGVycnQnDQogICAgICAgICAgICAgICAgICAgICAgICBtZWxkdW5nICAgPSAiV2ly -ZCBiZWFyYmVpdGV0IHZvbiAkKCRyZXMuZXhpc3RpbmcudXNlcm5hbWUpIg0KICAgICAgICAgICAg -ICAgICAgICAgICAgc3BlcnJlciAgID0gJHJlcy5leGlzdGluZy51c2VybmFtZQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgcm9sbGUgICAgID0gJHJlcy5leGlzdGluZy5yb2xsZQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgc2VpdCAgICAgID0gJHJlcy5leGlzdGluZy5sb2NrZWRBdA0KICAgICAg -ICAgICAgICAgICAgICAgICAga2FubkZvcmNlID0gKFRlc3QtRGFyZkxvY2tVZWJlcnNjaHJlaWJl -bikNCiAgICAgICAgICAgICAgICAgICAgfSA0MjMNCiAgICAgICAgICAgICAgICAgICAgY29udGlu -dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRS -ZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICBvayAgICAgICA9ICR0cnVlDQogICAgICAg -ICAgICAgICAgICAgIHRva2VuICAgID0gJHJlcy5sb2NrLnRva2VuDQogICAgICAgICAgICAgICAg -ICAgIGRhdHVtICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJHBl -cnNvbklkDQogICAgICAgICAgICAgICAgICAgIHJvbGxlICAgID0gJHJvbGxlDQogICAgICAgICAg -ICAgICAgICAgIGxvY2tlZEF0ID0gJHJlcy5sb2NrLmxvY2tlZEF0DQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAg -ICMgUE9TVCAvYXBpL2xvY2svemVsbGUvZm9yY2UgIHsgZGF0dW0sIHBlcnNvbklkIH0gLT4gdWVi -ZXJzY2hyZWlidCBmcmVtZGVuIExvY2sNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -bG9jay96ZWxsZS9mb3JjZScgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmTG9ja1VlYmVyc2NocmVpYmVuKSkgew0KICAgICAgICAg -ICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnRm9yY2UtTG9jayBudXIgZnVlciBGYWNo -YXVmc2ljaHQvU3VwZXJVc2VyJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAg -aWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3Mn -IDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJv -bS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdHVtID0gW3N0cmluZ10kYS5kYXR1bQ0KICAgICAg -ICAgICAgICAgICRwZXJzb25JZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAoVGVzdC1Mb2NrU2FmZURhdHVtICRkYXR1bSkgLW9yIC1ub3QgKFRlc3QtTG9j -a1NhZmVJZCAkcGVyc29uSWQpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJl -c3BvbnNlICdVbmd1ZWx0aWdlIGRhdHVtL3BlcnNvbklkJyA0MDA7IGNvbnRpbnVlDQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR1c2VyID0gR2V0LUFrdHVlbGxlckJlbnV0emVy -DQogICAgICAgICAgICAgICAgJHJvbGxlID0gKEdldC1SZWNodGUpLnJvbGxlDQogICAgICAgICAg -ICAgICAgJHJlcyA9IEFjcXVpcmUtQ2VsbExvY2sgJGRhdHVtICRwZXJzb25JZCAkdXNlciAkcm9s -bGUgJHRydWUNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdsb2NrLmZvcmNlJyBA -eyBkYXR1bSA9ICRkYXR1bTsgcGVyc29uSWQgPSAkcGVyc29uSWQ7IHJvbGxlID0gJHJvbGxlIH0N +QmFja3VwcyknIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRlaW50cmFlZ2UgPSBA +KCkNCiAgICAgICAgICAgICAgICAkY2FjaGVEaXIgPSBKb2luLVBhdGggJERhdGFEaXIgJ2NhY2hl +Jw0KICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRjYWNoZURpcikg +ew0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbXVzdGVyIGluICdzbmFwXyouYmFrJywn +bGVnXyouYmFrJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgR2V0LUNoaWxkSXRlbSAtTGl0 +ZXJhbFBhdGggJGNhY2hlRGlyIC1GaWx0ZXIgJG11c3RlciAtRmlsZSAtRXJyb3JBY3Rpb24gU2ls +ZW50bHlDb250aW51ZSB8IEZvckVhY2gtT2JqZWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkbmFtZSA9ICRfLk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwID0g +aWYgKCRuYW1lIC1tYXRjaCAnX3Zvcl9kdW1teV8nKSB7ICd2b3IgRHVtbXlkYXRlbicgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkbmFtZSAtbWF0Y2ggJ192b3Jf +cmVzZXRfJykgeyAndm9yIFJlc2V0JyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBlbHNlaWYgKCRuYW1lIC1tYXRjaCAnX3Zvcl93aWVkZXJoZXJzdGVsbHVuZ18nKSB7ICd2b3Ig +V2llZGVyaGVyc3RlbGx1bmcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs +c2UgeyAnbWFudWVsbCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidW5kbGUgPSAk +bmFtZS5TdGFydHNXaXRoKCdzbmFwXycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVp +bnRyYWVnZSArPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk +YXRlaW5hbWUgICA9ICRuYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb2Vz +c2UgICAgID0gJF8uTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyc3Rl +bGx0QW0gID0gJF8uTGFzdFdyaXRlVGltZS5Ub1N0cmluZygncycpDQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIHR5cCAgICAgICAgID0gJHR5cA0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpbmhhbHQgICAgICA9IGlmICgkYnVuZGxlKSB7ICdLb21wbGV0dCAoUGxhbnVu +ZyArIEFkbWluKScgfSBlbHNlIHsgJ051ciBQbGFudW5nJyB9DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlzdEJ1bmRsZSAgID0gJGJ1bmRsZQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0gQCgkZWlu +dHJhZWdlIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IGVyc3RlbGx0QW0gLURlc2NlbmRpbmcpDQog +ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkZWludHJhZWdlDQogICAg +ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0 +aCAtbWF0Y2ggJ14vYXBpL3BsYW51bmcvYmFja3VwL2Rvd25sb2FkLyguKykkJyAtYW5kICRNZXRo +b2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVp +Y2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5n +IChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJG5hbWUgPSAkTWF0 +Y2hlc1sxXQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkbmFtZSAtbWF0Y2ggJ14oc25hcF98 +bGVnXylbMC05X2EtekEtWl0rXC5iYWskJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3Vl +bHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGZwID0g +Sm9pbi1QYXRoICREYXRhRGlyICgnY2FjaGUvJyArICRuYW1lKQ0KICAgICAgICAgICAgICAgIGlm +ICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRmcCkpIHsgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgJGtsYXJ0ZXh0ID0gUmVhZC1CYWNrdXBUZXh0ICRmcA0KICAgICAgICAgICAgICAgIGlmICgk +bnVsbCAtZXEgJGtsYXJ0ZXh0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNrdXAtRGF0ZWkg +a29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuJyA1MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg +ICAgICAkYnl0ZXMgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4LkdldEJ5dGVzKCRrbGFy +dGV4dCkNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9IDIwMA0KICAgICAg +ICAgICAgICAgICRSZXNwb25zZS5Db250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFy +c2V0PXV0Zi04Jw0KICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0eUhlYWRlcnMgJFJlc3BvbnNl +DQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLkhlYWRlcnMuQWRkKCdDb250ZW50LURpc3Bvc2l0 +aW9uJywgImF0dGFjaG1lbnQ7IGZpbGVuYW1lPWAiJG5hbWVgIiIpDQogICAgICAgICAgICAgICAg +JFJlc3BvbnNlLkNvbnRlbnRMZW5ndGg2NCA9ICRieXRlcy5MZW5ndGgNCiAgICAgICAgICAgICAg +ICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLldyaXRlKCRieXRlcywgMCwgJGJ5dGVzLkxlbmd0aCkN +CiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLkNsb3NlKCkNCiAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l +cSAnL2FwaS9wbGFudW5nL2JhY2t1cC93aWVkZXJoZXJzdGVsbGVuJyAtYW5kICRNZXRob2QgLWVx +ICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdi +YWNrdXBzJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoQmFj +a3VwcyknIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5 +ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1K +c29uDQogICAgICAgICAgICAgICAgJG5hbWUgPSAiJCgkZGF0ZW4uZGF0ZWluYW1lKSINCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAoJG5hbWUgLW1hdGNoICdeKHNuYXBffGxlZ18pWzAtOV9hLXpB +LVpdK1wuYmFrJCcpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlciBEYXRlaW5h +bWUnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRjYWNoZURpciA9IEpvaW4tUGF0 +aCAkRGF0YURpciAnY2FjaGUnDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAt +TGl0ZXJhbFBhdGggJGNhY2hlRGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1Q +YXRoICRjYWNoZURpciAtRm9yY2UgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAgICAgJHF1ZWxs +ID0gSm9pbi1QYXRoICRjYWNoZURpciAkbmFtZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChU +ZXN0LVBhdGggLUxpdGVyYWxQYXRoICRxdWVsbCkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0Jh +Y2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHRz +ID0gR2V0LURhdGUgLUZvcm1hdCAneXl5eU1NZGRfSEhtbXNzJw0KICAgICAgICAgICAgICAgICRz +aWNoZXIgPSAic25hcF92b3Jfd2llZGVyaGVyc3RlbGx1bmdfJHRzLmJhayINCiAgICAgICAgICAg +ICAgICAjIFNpY2hlcmhlaXRzLUJ1bmRsZSBkZXIgYWt0dWVsbGVuIERhdGVuIHZvciBVZWJlcnNj +aHJlaWJlbi4NCiAgICAgICAgICAgICAgICAkc2ljaGVyQnVuZGxlID0gW29yZGVyZWRdQHsNCiAg +ICAgICAgICAgICAgICAgICAgZm9ybWF0ICA9ICd2aTMtYmFja3VwLXYxJw0KICAgICAgICAgICAg +ICAgICAgICB0cyAgICAgID0gJHRzDQogICAgICAgICAgICAgICAgICAgIHBsYW51bmcgPSAoUmVh +ZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nKQ0KICAgICAgICAgICAgICAgICAgICBhZG1pbiAg +ID0gKFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicpDQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIFdyaXRlLUJhY2t1cEJ5dGVzIChKb2luLVBhdGggJGNhY2hlRGlyICRzaWNo +ZXIpICgkc2ljaGVyQnVuZGxlIHwgQ29udmVydFRvLUpzb24gLURlcHRoIDMwKQ0KDQogICAgICAg +ICAgICAgICAgJHF1ZWxsSW5oYWx0ID0gUmVhZC1CYWNrdXBUZXh0ICRxdWVsbA0KICAgICAgICAg +ICAgICAgIGlmICgkbnVsbCAtZXEgJHF1ZWxsSW5oYWx0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICdCYWNrdXAtRGF0ZWkga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuJyA1MDA7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkcXVlbGxEYXRlbiA9ICRxdWVsbEluaGFsdCB8IENv +bnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNrdXAtRGF0 +ZWkgbmljaHQgcGFyc2llcmJhcicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHdp +ZWRlcmhlcmdlc3RlbGx0ID0gQCgpDQogICAgICAgICAgICAgICAgaWYgKCRxdWVsbERhdGVuIC1h +bmQgJHF1ZWxsRGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snZm9ybWF0J10gLWFuZCAiJCgkcXVl +bGxEYXRlbi5mb3JtYXQpIi5TdGFydHNXaXRoKCd2aTMtYmFja3VwJykpIHsNCiAgICAgICAgICAg +ICAgICAgICAgaWYgKCRxdWVsbERhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BsYW51bmcnXSkg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u +JyAkcXVlbGxEYXRlbi5wbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAg +ICR3aWVkZXJoZXJnZXN0ZWxsdCArPSAncGxhbnVuZycNCiAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICBpZiAoJHF1ZWxsRGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1sn +YWRtaW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRt +aW4uanNvbicgJHF1ZWxsRGF0ZW4uYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAg +ICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ICs9ICdhZG1pbicNCiAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICMgTGVnYWN5 +LUZvcm1hdCAobnVyIHBsYW51bmcuanNvbi1JbmhhbHQpLg0KICAgICAgICAgICAgICAgICAgICBX +cml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRxdWVsbERhdGVuIHwgT3V0LU51bGwNCiAg +ICAgICAgICAgICAgICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ICs9ICdwbGFudW5nJw0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiYWNrdXAud2ll +ZGVyaGVyZ2VzdGVsbHQnIEB7IHF1ZWxsZSA9ICRuYW1lOyBzaWNoZXJ1bmcgPSAkc2ljaGVyOyBp +bmhhbHQgPSAoJHdpZWRlcmhlcmdlc3RlbGx0IC1qb2luICcrJykgfQ0KICAgICAgICAgICAgICAg +IE5ldy1IaW53ZWlzICdiYWNrdXBfd2llZGVyaGVyZ2VzdGVsbHQnIChbb3JkZXJlZF1Aew0KICAg +ICAgICAgICAgICAgICAgICBiYWNrdXAgICAgPSAkbmFtZQ0KICAgICAgICAgICAgICAgICAgICBz +aWNoZXJ1bmcgPSAkc2ljaGVyDQogICAgICAgICAgICAgICAgICAgIGluaGFsdCAgICA9ICgkd2ll +ZGVyaGVyZ2VzdGVsbHQgLWpvaW4gJysnKQ0KICAgICAgICAgICAgICAgIH0pIChHZXQtQWt0dWVs +bGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3Qg +JFJlc3BvbnNlIEB7IHN0YXR1cyA9ICd3aWVkZXJoZXJnZXN0ZWxsdCc7IHNpY2hlcnVuZyA9ICRz +aWNoZXI7IGluaGFsdCA9ICR3aWVkZXJoZXJnZXN0ZWxsdCB9DQogICAgICAgICAgICAgICAgY29u +dGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxh +bnVuZy9iYWNrdXAvbG9lc2NoZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAg +ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVy +cm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAg +ICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAg +ICAkbmFtZSA9ICIkKCRkYXRlbi5kYXRlaW5hbWUpIg0KICAgICAgICAgICAgICAgIGlmICgtbm90 +ICgkbmFtZSAtbWF0Y2ggJ14oc25hcF98bGVnXylbMC05X2EtekEtWl0rXC5iYWskJykpIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250aW51ZSB9 +DQogICAgICAgICAgICAgICAgJGZwID0gSm9pbi1QYXRoICREYXRhRGlyICgnY2FjaGUvJyArICRu +YW1lKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRm +cCkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRmcCAt +Rm9yY2UNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiYWNrdXAuZ2Vsb2VzY2h0 +JyBAeyBkYXRlaW5hbWUgPSAkbmFtZSB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 +ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0JyB9DQogICAgICAgICAgICAgICAgY29u +dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBSRVNFVCAvIERVTU1Z +REFURU4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9yZXNl +dCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo +VGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2Vy +IGR1ZXJmZW4gZGllIFBsYW51bmcgenVydWVja3NldHplbicgNDAzOyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgJHBsYW51bmdQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICdwbGFudW5nLmpz +b24nDQogICAgICAgICAgICAgICAgJGJhY2t1cE5hbWUgPSAkbnVsbA0KICAgICAgICAgICAgICAg +IGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRwbGFudW5nUGF0aCkgew0KICAgICAgICAgICAg +ICAgICAgICAkdHMgPSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5TU1kZF9ISG1tc3MnDQogICAgICAg +ICAgICAgICAgICAgICRjYWNoZURpciA9IEpvaW4tUGF0aCAkRGF0YURpciAnY2FjaGUnDQogICAg +ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRjYWNoZURp +cikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkY2FjaGVEaXIgLUZvcmNl +IHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAjIFJlc3RhdXJpZXJiYXJlciBOYW1l +IChwbGFudW5nX2JhY2t1cF92b3JfcmVzZXRfKi5qc29uKSBzdGF0dA0KICAgICAgICAgICAgICAg +ICAgICAjIC5iYWsgLT4gd2lyZCB2b20gQmFja3Vwcy1UYWIgZ2VsaXN0ZXQgdW5kIGthbm4gd2ll +ZGVyaGVyZ2VzdGVsbHQNCiAgICAgICAgICAgICAgICAgICAgIyB3ZXJkZW4uIEZydWVoZXIgenVk +ZW0gbmljaHQgYW4gZGVuIENsaWVudCB6dXJ1ZWNrZ2VnZWJlbg0KICAgICAgICAgICAgICAgICAg +ICAjIC0+ICJCYWNrdXA6IHVuZGVmaW5lZCIgaW4gZGVyIFVJLg0KICAgICAgICAgICAgICAgICAg +ICAkYmFja3VwTmFtZSA9ICJwbGFudW5nX2JhY2t1cF92b3JfcmVzZXRfJHRzLmpzb24iDQogICAg +ICAgICAgICAgICAgICAgIENvcHktSXRlbSAtTGl0ZXJhbFBhdGggJHBsYW51bmdQYXRoIC1EZXN0 +aW5hdGlvbiAoSm9pbi1QYXRoICRjYWNoZURpciAkYmFja3VwTmFtZSkNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcu +anNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRwbGFudW5nKSB7DQogICAgICAg +ICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2Un +XSkgeyAkcGxhbnVuZy5laW50cmFlZ2UgPSBOZXctT2JqZWN0IFBTT2JqZWN0IH0NCiAgICAgICAg +ICAgICAgICAgICAgaWYgKCRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2tvbW1lbnRhcmUn +XSkgeyAkcGxhbnVuZy5rb21tZW50YXJlID0gTmV3LU9iamVjdCBQU09iamVjdCB9DQogICAgICAg +ICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBP +dXQtTnVsbA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50 +cmFnICdwbGFudW5nLnJlc2V0JyBAe30NCiAgICAgICAgICAgICAgICBOZXctSGlud2VpcyAncGxh +bnVuZ19yZXNldCcgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIGhpbndlaXMgPSAn +RWludHJhZWdlIHVuZCBLb21tZW50YXJlIHd1cmRlbiBnZWxvZXNjaHQ7IFNpY2hlcnVuZyBsaWVn +dCBpbiBkYXRhL2NhY2hlLy4nDQogICAgICAgICAgICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51 +dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u +c2UgQHsgc3RhdHVzID0gJ3p1cnVlY2tnZXNldHp0JzsgYmFja3VwID0gJGJhY2t1cE5hbWUgfQ0K +ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAo +JFBhdGggLWVxICcvYXBpL3BsYW51bmcvZHVtbXlkYXRlbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9T +VCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNl +bmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gRHVtbXlkYXRlbiBlaW5z +cGllbGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNw +b25zZSAnRHVtbXlkYXRlbiBudXIgaW0gRGVidWctU2VydmVyIChkZXYvc2VydmVyLnB5KSBpbXBs +ZW1lbnRpZXJ0LicgNTAxDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0N +Cg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvYWRtaW4vcHJvdG9rb2xsLWxvZXNjaGVuDQogICAg +ICAgICAgICAjIEVpbm1hbC1SZXNldCBmdWVyIExvZ2J1Y2ggKyBBUEktTG9nLiBTZXR6dCBsb2di +dWNoLmpzb24gYXVmIFtdLA0KICAgICAgICAgICAgIyBsb2VzY2h0IGRpZSBBUEktTG9nLURhdGVp +IGF1cyAlVEVNUCUsIHVuZCBzY2hyZWlidCBlaW5lbiBlaW56aWdlbg0KICAgICAgICAgICAgIyBu +ZXVlbiBMb2didWNoLUVpbnRyYWcgKHByb3Rva29sbC5nZWxvZXNjaHQpLCBkYW1pdCBkYXMgRXJl +aWduaXMNCiAgICAgICAgICAgICMgc2VsYnN0IG5hY2h2b2xsemllaGJhciBibGVpYnQuDQogICAg +ICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3Byb3Rva29sbC1sb2VzY2hlbicgLWFu +ZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1J +c3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJm +ZW4gZGFzIFByb3Rva29sbCBsb2VzY2hlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgJHZvcmhlciA9IFJlYWQtSnNvbk9iamVjdCAnbG9nYnVjaC5qc29uJw0KICAgICAgICAgICAg +ICAgICRhbnphaGxWb3JoZXIgPSAwDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkdm9y +aGVyKSB7DQogICAgICAgICAgICAgICAgICAgICRhbnphaGxWb3JoZXIgPSBAKCR2b3JoZXIpLkNv +dW50DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3Qg +J2xvZ2J1Y2guanNvbicgQCgpIHwgT3V0LU51bGwNCg0KICAgICAgICAgICAgICAgICRhcGlMb2dC +eXRlcyA9IDANCiAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkc2Ny +aXB0OkFwaUxvZykgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgJGFwaUxvZ0J5dGVzID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0OkFw +aUxvZykuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJh +bFBhdGggJHNjcmlwdDpBcGlMb2cgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wDQogICAgICAgICAg +ICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBEYXRlaSBldnRs +LiBub2NoIG9mZmVuOyBpZ25vcmllcmVuLCBMb2didWNoIGlzdCBkaWUgd2ljaHRpZ2VyZSBTcHVy +DQogICAgICAgICAgICAgICAgICAgICAgICAkYXBpTG9nQnl0ZXMgPSAtMQ0KICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgV3JpdGUtTG9n +RWludHJhZyAncHJvdG9rb2xsLmdlbG9lc2NodCcgQHsNCiAgICAgICAgICAgICAgICAgICAgbG9n +YnVjaEVpbnRyYWVnZVZvcmhlciA9ICRhbnphaGxWb3JoZXINCiAgICAgICAgICAgICAgICAgICAg +YXBpTG9nQnl0ZXMgICAgICAgICAgICA9ICRhcGlMb2dCeXRlcw0KICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAg -ICAgICAgICAgIG9rICAgICAgID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gICAg -PSAkcmVzLmxvY2sudG9rZW4NCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0N -CiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAg -ICAgICAgcm9sbGUgICAgPSAkcm9sbGUNCiAgICAgICAgICAgICAgICAgICAgbG9ja2VkQXQgPSAk -cmVzLmxvY2subG9ja2VkQXQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvbG9jay96ZWxs -ZS9oZWFydGJlYXQgIHsgdG9rZW4gfSAtPiBha3R1YWxpc2llcnQgbGFzdEJlYXQNCiAgICAgICAg -ICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZS9oZWFydGJlYXQnIC1hbmQgJE1ldGhv -ZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVl -c3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEg -PSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkdG9rZW4gPSBpZiAo -JGEuUFNPYmplY3QuUHJvcGVydGllc1sndG9rZW4nXSkgeyBbc3RyaW5nXSRhLnRva2VuIH0gZWxz -ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFj -ZSgkdG9rZW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdUb2tlbiBmZWhsdCcgNDAwOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJHJlcyA9IFJlZnJlc2gtQ2VsbExvY2sgJHRva2VuDQog -ICAgICAgICAgICAgICAgaWYgKC1ub3QgJHJlcy5vaykgew0KICAgICAgICAgICAgICAgICAgICBT -ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGZlaGxlciA9ICd1bmJla2FubnRlcl9sb2NrJzsg -bWVsZHVuZyA9ICdMb2NrIGV4aXN0aWVydCBuaWNodCAobWVocikuJyB9IDQwNA0KICAgICAgICAg -ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBT -ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG9rID0gJHRydWU7IGxhc3RCZWF0ID0gJHJlcy5s -b2NrLmxhc3RCZWF0IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K -DQogICAgICAgICAgICAjIERFTEVURSAvYXBpL2xvY2svemVsbGUgIHsgdG9rZW4gfSAtPiBMb2Nr -IGZyZWlnZWJlbiAoYXVjaCB2aWEgUXVlcnktU3RyaW5nIGZ1ZXIgc2VuZEJlYWNvbikNCiAgICAg -ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZScgLWFuZCAkTWV0aG9kIC1lcSAn -REVMRVRFJykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQog -ICAgICAgICAgICAgICAgJHRva2VuID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoJGJvZHkp -IHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpz -b247IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0b2tlbiddKSB7ICR0b2tlbiA9IFtzdHJp -bmddJGEudG9rZW4gfSB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCR0b2tlbikgLWFuZCAkUmVxdWVz -dC5VcmwuUXVlcnkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHEgPSBbU3lzdGVtLldlYi5IdHRw -VXRpbGl0eV06OlBhcnNlUXVlcnlTdHJpbmcoJFJlcXVlc3QuVXJsLlF1ZXJ5KQ0KICAgICAgICAg -ICAgICAgICAgICAkdG9rZW4gPSBbc3RyaW5nXSRxWyd0b2tlbiddDQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCR0b2tl -bikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1Rva2VuIGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0N -CiAgICAgICAgICAgICAgICAkcmVzID0gUmVsZWFzZS1DZWxsTG9jayAkdG9rZW4NCiAgICAgICAg -ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG9rID0gJHJlcy5vayB9DQogICAg -ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBHRVQg -L2FwaS9sb2NrL3plbGxlbiAtPiBMaXN0ZSBhbGxlciBha3RpdmVuIExvY2tzIChmdWVyIExpdmUt -SW5kaWNhdG9yKQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlbicg -LWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVj -dCAkUmVzcG9uc2UgQHsgbG9ja3MgPSAoR2V0LUFsbEFjdGl2ZUNlbGxMb2NrcykgfQ0KICAgICAg -ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgUE9TVCAv -YXBpL3ZlcmFudHdvcnR1bmcvYXVmZ2VydWVja3Qg4oCUIFN0YXRpc3Rpay1DYXB0dXJlIGZ1ZXIg -ZGVuDQogICAgICAgICAgICAjICJFaW5nZXNwcnVuZ2VuIi1CYWxrZW4gaW4gZGVyIFNjaGljaHR2 -ZXJ0ZWlsdW5nLiBXaXJkIHZvbSBDbGllbnQNCiAgICAgICAgICAgICMgZ2VmZXVlcnQsIHNvYmFs -ZCBqZW1hbmQgaW5uZXJoYWxiIGRlciAxNC1UYWdlLVZlcmJpbmRsaWNoa2VpdCBuZXUNCiAgICAg -ICAgICAgICMgaW4gZGllIFRvcC0yICgxLi8yLiBWSTMtREdMKSBlaW5lciBTY2hpY2h0IGF1ZnJ1 -ZWNrdCDigJQgYWxzbw0KICAgICAgICAgICAgIyBhdXNzZXJwbGFubWFlc3NpZyBWZXJhbnR3b3J0 -dW5nIHVlYmVybmltbXQuDQogICAgICAgICAgICAjIEJvZHk6IHsgcGVyc29uSWQsIGRhdHVtLCBz -Y2hpY2h0LCBzdHVmZSwgdm9yaGVyV2VydCwgYXVzbG9lc2VyUGVyc29uSWQgfQ0KICAgICAgICAg -ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS92ZXJhbnR3b3J0dW5nL2F1ZmdlcnVlY2t0JyAtYW5kICRN -ZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRS -ZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVz -cG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -IHRyeSB7ICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5kLUVycm9y -ICRSZXNwb25zZSAnVW5ndWVsdGlnZXMgSlNPTicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgJHBpZCA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZXJzb25JZCddKSB7IFtz -dHJpbmddJGEucGVyc29uSWQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICRkYXQgPSBp -ZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snZGF0dW0nXSkgeyBbc3RyaW5nXSRhLmRhdHVtIH0g -ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGlkIC1vciAtbm90ICRkYXQp -IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ3BlcnNvbklkL2RhdHVtIGZlaGx0JyA0MDA7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICAkZmVsZGVyID0gW29yZGVyZWRdQHsNCiAgICAgICAgICAg -ICAgICAgICAgcGVyc29uSWQgICA9ICRwaWQNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAg -ICA9ICRkYXQNCiAgICAgICAgICAgICAgICAgICAgc2NoaWNodCAgICA9IGlmICgkYS5QU09iamVj -dC5Qcm9wZXJ0aWVzWydzY2hpY2h0J10pIHsgW3N0cmluZ10kYS5zY2hpY2h0IH0gZWxzZSB7ICcn -IH0NCiAgICAgICAgICAgICAgICAgICAgc3R1ZmUgICAgICA9IGlmICgkYS5QU09iamVjdC5Qcm9w -ZXJ0aWVzWydzdHVmZSddKSB7IFtpbnRdJGEuc3R1ZmUgfSBlbHNlIHsgMCB9DQogICAgICAgICAg -ICAgICAgICAgIHZvcmhlcldlcnQgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1sndm9yaGVy -V2VydCddKSB7IFtzdHJpbmddJGEudm9yaGVyV2VydCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydhdXNs -b2VzZXJQZXJzb25JZCddKSB7DQogICAgICAgICAgICAgICAgICAgICRmZWxkZXJbJ2F1c2xvZXNl -clBlcnNvbklkJ10gPSBbc3RyaW5nXSRhLmF1c2xvZXNlclBlcnNvbklkDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3ZlcmFudHdvcnR1bmcuZWlu -Z2VzcHJ1bmdlbicgJGZlbGRlcg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVz -cG9uc2UgQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg -ICAgIH0NCg0KDQogICAgICAgICAgICAjIEdFVCAvYXBpL3BsYW51bmcvY2hhbmdlcz9zZWl0PTxp -c28tdHM+IC0+IERlbHRhLUxpc3RlIGZ1ZXIgTGl2ZS1TeW5jDQogICAgICAgICAgICBpZiAoJFBh -dGggLWVxICcvYXBpL3BsYW51bmcvY2hhbmdlcycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0K -ICAgICAgICAgICAgICAgICRxID0gW1N5c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpQYXJzZVF1ZXJ5 -U3RyaW5nKCRSZXF1ZXN0LlVybC5RdWVyeSkNCiAgICAgICAgICAgICAgICAkbG9nID0gUmVhZC1K -c29uT2JqZWN0ICdjaGFuZ2VzLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk -bG9nIC1vciAtbm90ICgkbG9nIC1pcyBbYXJyYXldKSkgeyAkbG9nID0gQCgpIH0NCiAgICAgICAg -ICAgICAgICAkbWF4U2VxID0gR2V0LU1heENoYW5nZVNlcSAkbG9nDQogICAgICAgICAgICAgICAg -aWYgKCRxLkFsbEtleXMgLWNvbnRhaW5zICdzZWl0X3NlcScpIHsNCiAgICAgICAgICAgICAgICAg -ICAgIyBOZXVlciByYWNlLWZyZWllciBzZXEtQ3Vyc29yIChDaGFuZ2VzICsgc2VydmVyU2VxIGF1 -cw0KICAgICAgICAgICAgICAgICAgICAjIERFTVNFTEJFTiBSZWFkKS4gTGVlcmVyIHNlaXRfc2Vx -ID0gRXJzdC1TeW5jIC0+IG51ciBDdXJzb3IuDQogICAgICAgICAgICAgICAgICAgICRyYXcgPSBb -c3RyaW5nXSRxWydzZWl0X3NlcSddDQogICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6 -SXNOdWxsT3JFbXB0eSgkcmF3KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoYW5nZXMg -PSBAKCkNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICRzcSA9IDA7IFt2b2lkXVtpbnRdOjpUcnlQYXJzZSgkcmF3LCBbcmVmXSRzcSkNCiAgICAg -ICAgICAgICAgICAgICAgICAgICRjaGFuZ2VzID0gQCgkbG9nIHwgV2hlcmUtT2JqZWN0IHsgJG51 -bGwgLW5lICRfLnNlcSAtYW5kIFtpbnRdJF8uc2VxIC1ndCAkc3EgfSkNCiAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 -DQogICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJUcyAgPSAoR2V0LURhdGUpLlRvVW5pdmVy -c2FsVGltZSgpLlRvU3RyaW5nKCdvJykNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclNl -cSA9ICRtYXhTZXENCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgICA9IFtvYmplY3Rb -XV0kY2hhbmdlcw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNl -IHsNCiAgICAgICAgICAgICAgICAgICAgIyBCYWNrd2FyZC1jb21wYXQ6IGFsdGVyIFdhbGwtQ2xv -Y2stQ3Vyc29yIChhbHRlIENsaWVudHMpLg0KICAgICAgICAgICAgICAgICAgICAkc2VpdCA9IFtz -dHJpbmddJHFbJ3NlaXQnXQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl -c3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJUcyAgPSAoR2V0LURhdGUp -LlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5nKCdvJykNCiAgICAgICAgICAgICAgICAgICAgICAg -IHNlcnZlclNlcSA9ICRtYXhTZXENCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgICA9 -IChHZXQtQ2hhbmdlc1NpbmNlICRzZWl0KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAg -ICAgICAgICAgICMgPT09PT0gUHJvZmlsYmlsZGVyIChBdmF0YXJlKSA9PT09PQ0KICAgICAgICAg -ICAgIyBEYXRlaTogJERhdGFEaXIvYXZhdGFycy88aWQ+LmpwZyAgIChKUEVHLCB2b20gQ2xpZW50 -IGF1ZiAyMDB4MjAwDQogICAgICAgICAgICAjIGhlcnVudGVyZ2VyZWNobmV0LCB1ZWJsaWNoIDUt -MjUgS0IpLg0KICAgICAgICAgICAgIw0KICAgICAgICAgICAgIyBCZXJlY2h0aWd1bmc6DQogICAg -ICAgICAgICAjICAgUE9TVC9ERUxFVEU6IFNVL0ZBIE9ERVIgZWlnZW5lIFBlcnNvbklkIChTZWxm -LVNlcnZpY2UpLg0KICAgICAgICAgICAgIyAgIEdFVDogICAgICAgICBhbGxlIGVpbmdlbG9nZ3Rl -biBVc2VyIChpbSBHcmlkIHNpY2h0YmFyKS4NCiAgICAgICAgICAgICMNCiAgICAgICAgICAgICMg -UE9TVC1Cb2R5OiB7ICJkYXRhVXJsIjogImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsPC4uLj4iIH0N -CiAgICAgICAgICAgICMgMjUwIEtCIGhhcnRlciBDYXAgKGRlZmVuc2l2IOKAlCBDbGllbnQgc2No -aWNrdCB0eXBpc2NoIDwzMCBLQikuDQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2Fw -aS9wZXJzb25lbi8oXGQrKS9hdmF0YXIkJykgew0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9 -ICRtYXRjaGVzWzFdDQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAg -ICAgICAgJGlzdEVpZ2VuID0gKCRudWxsIC1uZSAkci5tZWluZVBlcnNvbklkIC1hbmQgW2ludF0k -cGVyc29uSWQgLWVxIFtpbnRdJHIubWVpbmVQZXJzb25JZCkNCiAgICAgICAgICAgICAgICAkaXN0 -QmVyZWNodGlndCA9IChUZXN0LUlzdEFkbWluKSAtb3IgJGlzdEVpZ2VuDQogICAgICAgICAgICAg -ICAgJGF2YXRhckRpciA9IEpvaW4tUGF0aCAkRGF0YURpciAnYXZhdGFycycNCiAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkYXZhdGFyRGlyKSkgew0KICAg -ICAgICAgICAgICAgICAgICB0cnkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1QYXRo -ICRhdmF0YXJEaXIgLUZvcmNlIHwgT3V0LU51bGwgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAkYXZhdGFyRmlsZSA9IEpvaW4tUGF0aCAkYXZhdGFyRGlyICgk -cGVyc29uSWQgKyAnLmpwZycpDQogICAgICAgICAgICAgICAgaWYgKCRNZXRob2QgLWVxICdQT1NU -Jykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkaXN0QmVyZWNodGlndCkgeyBTZW5k -LUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAg -ICAgICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAg -ICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2Ug -enUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgJG9iaiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAg -ICAgICAgICAgICAgICAgICAgICAgJGRhdGFVcmwgPSBbc3RyaW5nXSRvYmouZGF0YVVybA0KICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGRhdGFVcmwgLW9yIC1ub3QgJGRhdGFVcmwu -U3RhcnRzV2l0aCgnZGF0YTppbWFnZS8nKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBCaWxkZm9ybWF0IChlcndhcnRlIGRh -dGE6aW1hZ2UvLi4uO2Jhc2U2NCwuLi4pJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkYmFzZTY0ID0gJGRhdGFVcmwgLXJl -cGxhY2UgJ15kYXRhOmltYWdlL1thLXpBLVpdKztiYXNlNjQsJywgJycNCiAgICAgICAgICAgICAg -ICAgICAgICAgICRieXRlcyA9IFtTeXN0ZW0uQ29udmVydF06OkZyb21CYXNlNjRTdHJpbmcoJGJh -c2U2NCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnl0ZXMuTGVuZ3RoIC1ndCAyNjIx -NDQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JpbGQgenUgZ3Jvc3MgKG1heCAyNTAgS0IpJyA0 -MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFtTeXN0ZW0uSU8uRmlsZV06 -OldyaXRlQWxsQnl0ZXMoJGF2YXRhckZpbGUsICRieXRlcykNCiAgICAgICAgICAgICAgICAgICAg -ICAgICMgYXZhdGFyVHMgaW4gcGxhbnVuZy5qc29uIHNldHplbiwgZGFtaXQgZGVyIENhY2hlLUJ1 -c3Rlcg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBuYWNoIFJlbG9hZCBiZWthbm50IGlzdCAo -Q2xpZW50IGhhZW5ndCA/dHM9PGF2YXRhclRzPg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBh -biBkaWUgQmlsZC1VUkwpLg0KICAgICAgICAgICAgICAgICAgICAgICAgJHRzID0gW2xvbmddKFtE -YXRlVGltZU9mZnNldF06OlV0Y05vdy5Ub1VuaXhUaW1lTWlsbGlzZWNvbmRzKCkpDQogICAgICAg +ICAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgPSAnZ2Vsb2VzY2h0Jw0KICAgICAgICAg +ICAgICAgICAgICBsb2didWNoRWludHJhZWdlVm9yaGVyID0gJGFuemFobFZvcmhlcg0KICAgICAg +ICAgICAgICAgICAgICBhcGlMb2dCeXRlcyAgICAgICAgICAgID0gJGFwaUxvZ0J5dGVzDQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN +CiAgICAgICAgICAgICMgPT09PT0gU1RBVElTVElLIC8gTE9HQlVDSCA9PT09PQ0KICAgICAgICAg +ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zdGF0aXN0aWsnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcp +IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnc3RhdGlzdGlr +JykpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJl +cmVjaHRpZ3VuZyAoU3RhdGlzdGlrKScgNDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u +Jw0KICAgICAgICAgICAgICAgICRhZG1pbiAgID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29u +Jw0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgKEdldC1TdGF0aXN0 +aWtEYXRhICRwbGFudW5nICRhZG1pbikNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2didWNoJyAtYW5kICRN +ZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJl +cmVpY2ggJ2xvZ2J1Y2gnKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNw +b25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChMb2didWNoKScgNDAzOyBjb250aW51ZQ0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25UZXh0ICRSZXNwb25zZSAoR2V0 +LUxvZ2J1Y2hUZXh0KQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN +CiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFpFTEwtTE9DSyArIENIQU5HRVMg +KExpdmUtU3luYykgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAjIFBPU1QgL2Fw +aS9sb2NrL3plbGxlICB7IGRhdHVtLCBwZXJzb25JZCB9IC0+IHsgb2ssIHRva2VuLCAuLi4gfSBv +ZGVyIDQyMyB7IHNwZXJyZXIsIC4uLiB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp +L2xvY2svemVsbGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAg +JGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9k +eSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAg +ICAgICAgICAgICAkZGF0dW0gPSBbc3RyaW5nXSRhLmRhdHVtDQogICAgICAgICAgICAgICAgJHBl +cnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAgICAgIGlmICgtbm90IChU +ZXN0LUxvY2tTYWZlRGF0dW0gJGRhdHVtKSAtb3IgLW5vdCAoVGVzdC1Mb2NrU2FmZUlkICRwZXJz +b25JZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3Vl +bHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgJHVzZXIgPSBHZXQtQWt0dWVsbGVyQmVudXR6ZXINCiAgICAgICAgICAg +ICAgICAkcm9sbGUgPSAoR2V0LVJlY2h0ZSkucm9sbGUNCiAgICAgICAgICAgICAgICAkcmVzID0g +QWNxdWlyZS1DZWxsTG9jayAkZGF0dW0gJHBlcnNvbklkICR1c2VyICRyb2xsZSAkZmFsc2UNCiAg +ICAgICAgICAgICAgICBpZiAoLW5vdCAkcmVzLm9rKSB7DQogICAgICAgICAgICAgICAgICAgIFNl +bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZlaGxl +ciAgICA9ICdnZXNwZXJydCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICA9ICJX +aXJkIGJlYXJiZWl0ZXQgdm9uICQoJHJlcy5leGlzdGluZy51c2VybmFtZSkiDQogICAgICAgICAg +ICAgICAgICAgICAgICBzcGVycmVyICAgPSAkcmVzLmV4aXN0aW5nLnVzZXJuYW1lDQogICAgICAg +ICAgICAgICAgICAgICAgICByb2xsZSAgICAgPSAkcmVzLmV4aXN0aW5nLnJvbGxlDQogICAgICAg +ICAgICAgICAgICAgICAgICBzZWl0ICAgICAgPSAkcmVzLmV4aXN0aW5nLmxvY2tlZEF0DQogICAg +ICAgICAgICAgICAgICAgICAgICBrYW5uRm9yY2UgPSAoVGVzdC1EYXJmTG9ja1VlYmVyc2NocmVp +YmVuKQ0KICAgICAgICAgICAgICAgICAgICB9IDQyMw0KICAgICAgICAgICAgICAgICAgICBjb250 +aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3Qg +JFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIG9rICAgICAgID0gJHRydWUNCiAgICAg +ICAgICAgICAgICAgICAgdG9rZW4gICAgPSAkcmVzLmxvY2sudG9rZW4NCiAgICAgICAgICAgICAg +ICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgPSAk +cGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgcm9sbGUgICAgPSAkcm9sbGUNCiAgICAgICAg +ICAgICAgICAgICAgbG9ja2VkQXQgPSAkcmVzLmxvY2subG9ja2VkQXQNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAg +ICAgIyBQT1NUIC9hcGkvbG9jay96ZWxsZS9mb3JjZSAgeyBkYXR1bSwgcGVyc29uSWQgfSAtPiB1 +ZWJlcnNjaHJlaWJ0IGZyZW1kZW4gTG9jaw0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw +aS9sb2NrL3plbGxlL2ZvcmNlJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAg +ICAgICAgIGlmICgtbm90IChUZXN0LURhcmZMb2NrVWViZXJzY2hyZWliZW4pKSB7DQogICAgICAg +ICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdGb3JjZS1Mb2NrIG51ciBmdWVyIEZh +Y2hhdWZzaWNodC9TdXBlclVzZXInIDQwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9z +cycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRG +cm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSBbc3RyaW5nXSRhLmRhdHVtDQogICAg +ICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAg +ICAgIGlmICgtbm90IChUZXN0LUxvY2tTYWZlRGF0dW0gJGRhdHVtKSAtb3IgLW5vdCAoVGVzdC1M +b2NrU2FmZUlkICRwZXJzb25JZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ1VuZ3VlbHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsgY29udGludWUNCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHVzZXIgPSBHZXQtQWt0dWVsbGVyQmVudXR6 +ZXINCiAgICAgICAgICAgICAgICAkcm9sbGUgPSAoR2V0LVJlY2h0ZSkucm9sbGUNCiAgICAgICAg +ICAgICAgICAkcmVzID0gQWNxdWlyZS1DZWxsTG9jayAkZGF0dW0gJHBlcnNvbklkICR1c2VyICRy +b2xsZSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2xvY2suZm9yY2Un +IEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgcm9sbGUgPSAkcm9sbGUg +fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAg +ICAgICAgICAgICAgb2sgICAgICAgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB0b2tlbiAg +ICA9ICRyZXMubG9jay50b2tlbg0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICA9ICRkYXR1 +bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25JZA0KICAgICAgICAgICAg +ICAgICAgICByb2xsZSAgICA9ICRyb2xsZQ0KICAgICAgICAgICAgICAgICAgICBsb2NrZWRBdCA9 +ICRyZXMubG9jay5sb2NrZWRBdA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBj +b250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2FwaS9sb2NrL3pl +bGxlL2hlYXJ0YmVhdCAgeyB0b2tlbiB9IC0+IGFrdHVhbGlzaWVydCBsYXN0QmVhdA0KICAgICAg +ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlL2hlYXJ0YmVhdCcgLWFuZCAkTWV0 +aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVx +dWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk +YSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICR0b2tlbiA9IGlm +ICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0b2tlbiddKSB7IFtzdHJpbmddJGEudG9rZW4gfSBl +bHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNw +YWNlKCR0b2tlbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1Rva2VuIGZlaGx0JyA0MDA7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcmVzID0gUmVmcmVzaC1DZWxsTG9jayAkdG9rZW4N +CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcmVzLm9rKSB7DQogICAgICAgICAgICAgICAgICAg +IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgZmVobGVyID0gJ3VuYmVrYW5udGVyX2xvY2sn +OyBtZWxkdW5nID0gJ0xvY2sgZXhpc3RpZXJ0IG5pY2h0IChtZWhyKS4nIH0gNDA0DQogICAgICAg +ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkdHJ1ZTsgbGFzdEJlYXQgPSAkcmVz +LmxvY2subGFzdEJlYXQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9 +DQoNCiAgICAgICAgICAgICMgREVMRVRFIC9hcGkvbG9jay96ZWxsZSAgeyB0b2tlbiB9IC0+IExv +Y2sgZnJlaWdlYmVuIChhdWNoIHZpYSBRdWVyeS1TdHJpbmcgZnVlciBzZW5kQmVhY29uKQ0KICAg +ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlJyAtYW5kICRNZXRob2QgLWVx +ICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QN +CiAgICAgICAgICAgICAgICAkdG9rZW4gPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgkYm9k +eSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgeyAkYSA9ICRib2R5IHwgQ29udmVydEZyb20t +SnNvbjsgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Rva2VuJ10pIHsgJHRva2VuID0gW3N0 +cmluZ10kYS50b2tlbiB9IH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJHRva2VuKSAtYW5kICRSZXF1 +ZXN0LlVybC5RdWVyeSkgew0KICAgICAgICAgICAgICAgICAgICAkcSA9IFtTeXN0ZW0uV2ViLkh0 +dHBVdGlsaXR5XTo6UGFyc2VRdWVyeVN0cmluZygkUmVxdWVzdC5VcmwuUXVlcnkpDQogICAgICAg +ICAgICAgICAgICAgICR0b2tlbiA9IFtzdHJpbmddJHFbJ3Rva2VuJ10NCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJHRv +a2VuKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVG9rZW4gZmVobHQnIDQwMDsgY29udGludWUg +fQ0KICAgICAgICAgICAgICAgICRyZXMgPSBSZWxlYXNlLUNlbGxMb2NrICR0b2tlbg0KICAgICAg +ICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkcmVzLm9rIH0NCiAg +ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIEdF +VCAvYXBpL2xvY2svemVsbGVuIC0+IExpc3RlIGFsbGVyIGFrdGl2ZW4gTG9ja3MgKGZ1ZXIgTGl2 +ZS1JbmRpY2F0b3IpDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2xvY2svemVsbGVu +JyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2Jq +ZWN0ICRSZXNwb25zZSBAeyBsb2NrcyA9IChHZXQtQWxsQWN0aXZlQ2VsbExvY2tzKSB9DQogICAg +ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQT1NU +IC9hcGkvdmVyYW50d29ydHVuZy9hdWZnZXJ1ZWNrdCDigJQgU3RhdGlzdGlrLUNhcHR1cmUgZnVl +ciBkZW4NCiAgICAgICAgICAgICMgIkVpbmdlc3BydW5nZW4iLUJhbGtlbiBpbiBkZXIgU2NoaWNo +dHZlcnRlaWx1bmcuIFdpcmQgdm9tIENsaWVudA0KICAgICAgICAgICAgIyBnZWZldWVydCwgc29i +YWxkIGplbWFuZCBpbm5lcmhhbGIgZGVyIDE0LVRhZ2UtVmVyYmluZGxpY2hrZWl0IG5ldQ0KICAg +ICAgICAgICAgIyBpbiBkaWUgVG9wLTIgKDEuLzIuIFZJMy1ER0wpIGVpbmVyIFNjaGljaHQgYXVm +cnVlY2t0IOKAlCBhbHNvDQogICAgICAgICAgICAjIGF1c3NlcnBsYW5tYWVzc2lnIFZlcmFudHdv +cnR1bmcgdWViZXJuaW1tdC4NCiAgICAgICAgICAgICMgQm9keTogeyBwZXJzb25JZCwgZGF0dW0s +IHNjaGljaHQsIHN0dWZlLCB2b3JoZXJXZXJ0LCBhdXNsb2VzZXJQZXJzb25JZCB9DQogICAgICAg +ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3ZlcmFudHdvcnR1bmcvYXVmZ2VydWVja3QnIC1hbmQg +JE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkg +JFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRS +ZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgdHJ5IHsgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJy +b3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAg +ICAgICAgICAkcGlkID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BlcnNvbklkJ10pIHsg +W3N0cmluZ10kYS5wZXJzb25JZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgJGRhdCA9 +IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydkYXR1bSddKSB7IFtzdHJpbmddJGEuZGF0dW0g +fSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRwaWQgLW9yIC1ub3QgJGRh +dCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAncGVyc29uSWQvZGF0dW0gZmVobHQnIDQwMDsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgICRmZWxkZXIgPSBbb3JkZXJlZF1Aew0KICAgICAgICAg +ICAgICAgICAgICBwZXJzb25JZCAgID0gJHBpZA0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAg +ICAgID0gJGRhdA0KICAgICAgICAgICAgICAgICAgICBzY2hpY2h0ICAgID0gaWYgKCRhLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ3NjaGljaHQnXSkgeyBbc3RyaW5nXSRhLnNjaGljaHQgfSBlbHNlIHsg +JycgfQ0KICAgICAgICAgICAgICAgICAgICBzdHVmZSAgICAgID0gaWYgKCRhLlBTT2JqZWN0LlBy +b3BlcnRpZXNbJ3N0dWZlJ10pIHsgW2ludF0kYS5zdHVmZSB9IGVsc2UgeyAwIH0NCiAgICAgICAg +ICAgICAgICAgICAgdm9yaGVyV2VydCA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2b3Jo +ZXJXZXJ0J10pIHsgW3N0cmluZ10kYS52b3JoZXJXZXJ0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2F1 +c2xvZXNlclBlcnNvbklkJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJGZlbGRlclsnYXVzbG9l +c2VyUGVyc29uSWQnXSA9IFtzdHJpbmddJGEuYXVzbG9lc2VyUGVyc29uSWQNCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAndmVyYW50d29ydHVuZy5l +aW5nZXNwcnVuZ2VuJyAkZmVsZGVyDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRS +ZXNwb25zZSBAeyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg +ICAgICAgfQ0KDQoNCiAgICAgICAgICAgICMgR0VUIC9hcGkvcGxhbnVuZy9jaGFuZ2VzP3NlaXQ9 +PGlzby10cz4gLT4gRGVsdGEtTGlzdGUgZnVlciBMaXZlLVN5bmMNCiAgICAgICAgICAgIGlmICgk +UGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9jaGFuZ2VzJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7 +DQogICAgICAgICAgICAgICAgJHEgPSBbU3lzdGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVl +cnlTdHJpbmcoJFJlcXVlc3QuVXJsLlF1ZXJ5KQ0KICAgICAgICAgICAgICAgICRsb2cgPSBSZWFk +LUpzb25PYmplY3QgJ2NoYW5nZXMuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx +ICRsb2cgLW9yIC1ub3QgKCRsb2cgLWlzIFthcnJheV0pKSB7ICRsb2cgPSBAKCkgfQ0KICAgICAg +ICAgICAgICAgICRtYXhTZXEgPSBHZXQtTWF4Q2hhbmdlU2VxICRsb2cNCiAgICAgICAgICAgICAg +ICBpZiAoJHEuQWxsS2V5cyAtY29udGFpbnMgJ3NlaXRfc2VxJykgew0KICAgICAgICAgICAgICAg +ICAgICAjIE5ldWVyIHJhY2UtZnJlaWVyIHNlcS1DdXJzb3IgKENoYW5nZXMgKyBzZXJ2ZXJTZXEg +YXVzDQogICAgICAgICAgICAgICAgICAgICMgREVNU0VMQkVOIFJlYWQpLiBMZWVyZXIgc2VpdF9z +ZXEgPSBFcnN0LVN5bmMgLT4gbnVyIEN1cnNvci4NCiAgICAgICAgICAgICAgICAgICAgJHJhdyA9 +IFtzdHJpbmddJHFbJ3NlaXRfc2VxJ10NCiAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmdd +OjpJc051bGxPckVtcHR5KCRyYXcpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2hhbmdl +cyA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAg +ICAgICAgJHNxID0gMDsgW3ZvaWRdW2ludF06OlRyeVBhcnNlKCRyYXcsIFtyZWZdJHNxKQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgJGNoYW5nZXMgPSBAKCRsb2cgfCBXaGVyZS1PYmplY3QgeyAk +bnVsbCAtbmUgJF8uc2VxIC1hbmQgW2ludF0kXy5zZXEgLWd0ICRzcSB9KQ0KICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug +QHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclRzICA9IChHZXQtRGF0ZSkuVG9Vbml2 +ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVy +U2VxID0gJG1heFNlcQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyAgID0gW29iamVj +dFtdXSRjaGFuZ2VzDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVs +c2Ugew0KICAgICAgICAgICAgICAgICAgICAjIEJhY2t3YXJkLWNvbXBhdDogYWx0ZXIgV2FsbC1D +bG9jay1DdXJzb3IgKGFsdGUgQ2xpZW50cykuDQogICAgICAgICAgICAgICAgICAgICRzZWl0ID0g +W3N0cmluZ10kcVsnc2VpdCddDQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk +UmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclRzICA9IChHZXQtRGF0 +ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgc2VydmVyU2VxID0gJG1heFNlcQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyAg +ID0gKEdldC1DaGFuZ2VzU2luY2UgJHNlaXQpDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0K +ICAgICAgICAgICAgIyA9PT09PSBQcm9maWxiaWxkZXIgKEF2YXRhcmUpID09PT09DQogICAgICAg +ICAgICAjIERhdGVpOiAkRGF0YURpci9hdmF0YXJzLzxpZD4uanBnICAgKEpQRUcsIHZvbSBDbGll +bnQgYXVmIDIwMHgyMDANCiAgICAgICAgICAgICMgaGVydW50ZXJnZXJlY2huZXQsIHVlYmxpY2gg +NS0yNSBLQikuDQogICAgICAgICAgICAjDQogICAgICAgICAgICAjIEJlcmVjaHRpZ3VuZzoNCiAg +ICAgICAgICAgICMgICBQT1NUL0RFTEVURTogU1UvRkEgT0RFUiBlaWdlbmUgUGVyc29uSWQgKFNl +bGYtU2VydmljZSkuDQogICAgICAgICAgICAjICAgR0VUOiAgICAgICAgIGFsbGUgZWluZ2Vsb2dn +dGVuIFVzZXIgKGltIEdyaWQgc2ljaHRiYXIpLg0KICAgICAgICAgICAgIw0KICAgICAgICAgICAg +IyBQT1NULUJvZHk6IHsgImRhdGFVcmwiOiAiZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCw8Li4uPiIg +fQ0KICAgICAgICAgICAgIyAyNTAgS0IgaGFydGVyIENhcCAoZGVmZW5zaXYg4oCUIENsaWVudCBz +Y2hpY2t0IHR5cGlzY2ggPDMwIEtCKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14v +YXBpL3BlcnNvbmVuLyhcZCspL2F2YXRhciQnKSB7DQogICAgICAgICAgICAgICAgJHBlcnNvbklk +ID0gJG1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAg +ICAgICAgICAkaXN0RWlnZW4gPSAoJG51bGwgLW5lICRyLm1laW5lUGVyc29uSWQgLWFuZCBbaW50 +XSRwZXJzb25JZCAtZXEgW2ludF0kci5tZWluZVBlcnNvbklkKQ0KICAgICAgICAgICAgICAgICRp +c3RCZXJlY2h0aWd0ID0gKFRlc3QtSXN0QWRtaW4pIC1vciAkaXN0RWlnZW4NCiAgICAgICAgICAg +ICAgICAkYXZhdGFyRGlyID0gSm9pbi1QYXRoICREYXRhRGlyICdhdmF0YXJzJw0KICAgICAgICAg +ICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhdmF0YXJEaXIpKSB7DQog +ICAgICAgICAgICAgICAgICAgIHRyeSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBh +dGggJGF2YXRhckRpciAtRm9yY2UgfCBPdXQtTnVsbCB9IGNhdGNoIHt9DQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgICRhdmF0YXJGaWxlID0gSm9pbi1QYXRoICRhdmF0YXJEaXIg +KCRwZXJzb25JZCArICcuanBnJykNCiAgICAgICAgICAgICAgICBpZiAoJE1ldGhvZCAtZXEgJ1BP +U1QnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRpc3RCZXJlY2h0aWd0KSB7IFNl +bmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFn +ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgIHRyeSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAkb2JqID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQog +ICAgICAgICAgICAgICAgICAgICAgICAkZGF0YVVybCA9IFtzdHJpbmddJG9iai5kYXRhVXJsDQog +ICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZGF0YVVybCAtb3IgLW5vdCAkZGF0YVVy +bC5TdGFydHNXaXRoKCdkYXRhOmltYWdlLycpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VzIEJpbGRmb3JtYXQgKGVyd2FydGUg +ZGF0YTppbWFnZS8uLi47YmFzZTY0LC4uLiknIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRiYXNlNjQgPSAkZGF0YVVybCAt +cmVwbGFjZSAnXmRhdGE6aW1hZ2UvW2EtekEtWl0rO2Jhc2U2NCwnLCAnJw0KICAgICAgICAgICAg +ICAgICAgICAgICAgJGJ5dGVzID0gW1N5c3RlbS5Db252ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygk +YmFzZTY0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRieXRlcy5MZW5ndGggLWd0IDI2 +MjE0NCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmlsZCB6dSBncm9zcyAobWF4IDI1MCBLQikn +IDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5GaWxl +XTo6V3JpdGVBbGxCeXRlcygkYXZhdGFyRmlsZSwgJGJ5dGVzKQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgIyBhdmF0YXJUcyBpbiBwbGFudW5nLmpzb24gc2V0emVuLCBkYW1pdCBkZXIgQ2FjaGUt +QnVzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAjIG5hY2ggUmVsb2FkIGJla2FubnQgaXN0 +IChDbGllbnQgaGFlbmd0ID90cz08YXZhdGFyVHM+DQogICAgICAgICAgICAgICAgICAgICAgICAj +IGFuIGRpZSBCaWxkLVVSTCkuDQogICAgICAgICAgICAgICAgICAgICAgICAkdHMgPSBbbG9uZ10o +W0RhdGVUaW1lT2Zmc2V0XTo6VXRjTm93LlRvVW5peFRpbWVNaWxsaXNlY29uZHMoKSkNCiAgICAg +ICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdw +bGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAk +cGxhbnVuZyAtYW5kICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ10kcC5pZCAtZXEgW3N0cmluZ10k +cGVyc29uSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JHAuUFNPYmplY3QuUHJvcGVydGllc1snYXZhdGFyVHMnXSkgeyAkcC5hdmF0YXJUcyA9ICR0cyB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRwIHwgQWRk +LU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnYXZhdGFyVHMnIC1Ob3RlUHJvcGVydHlWYWx1ZSAk +dHMgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh +aw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRl +LUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVs +bA0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYXZhdGFyLmdlc2V0 +enQnIEB7IHBlcnNvbklkID0gJHBlcnNvbklkOyBieXRlcyA9ICRieXRlcy5MZW5ndGggfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg +PSAnZ2VzcGVpY2hlcnQnOyBieXRlcyA9ICRieXRlcy5MZW5ndGg7IGF2YXRhclRzID0gJHRzIH0N +CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgICAgICBT +ZW5kLUVycm9yICRSZXNwb25zZSAoIkF2YXRhci1VcGxvYWQgZmVobGdlc2NobGFnZW46ICIgKyAk +Xy5FeGNlcHRpb24uTWVzc2FnZSkgNTAwDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +aWYgKCRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90 +ICRpc3RCZXJlY2h0aWd0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1 +bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGF2YXRhckZpbGUpIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJGF2 +YXRhckZpbGUgLUZvcmNlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYXZhdGFyLmVudGZlcm50JyBAeyBw +ZXJzb25JZCA9ICRwZXJzb25JZCB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxh bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHBs YW51bmcgLWFuZCAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddJHAuaWQgLWVxIFtzdHJpbmddJHBl -cnNvbklkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRw -LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2F2YXRhclRzJ10pIHsgJHAuYXZhdGFyVHMgPSAkdHMgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1N -ZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2F2YXRhclRzJyAtTm90ZVByb3BlcnR5VmFsdWUgJHRz -IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1K -c29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwN -CiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2F2YXRhci5nZXNldHp0 -JyBAeyBwZXJzb25JZCA9ICRwZXJzb25JZDsgYnl0ZXMgPSAkYnl0ZXMuTGVuZ3RoIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0g -J2dlc3BlaWNoZXJ0JzsgYnl0ZXMgPSAkYnl0ZXMuTGVuZ3RoOyBhdmF0YXJUcyA9ICR0cyB9DQog -ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICAgICAgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgKCJBdmF0YXItVXBsb2FkIGZlaGxnZXNjaGxhZ2VuOiAiICsgJF8u -RXhjZXB0aW9uLk1lc3NhZ2UpIDUwMA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlm -ICgkTWV0aG9kIC1lcSAnREVMRVRFJykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -aXN0QmVyZWNodGlndCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5n -JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg -ICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhdmF0YXJGaWxlKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRhdmF0 -YXJGaWxlIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2F2YXRhci5lbnRmZXJudCcgQHsgcGVy -c29uSWQgPSAkcGVyc29uSWQgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51 -bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRwbGFu -dW5nIC1hbmQgJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXSRwLmlkIC1lcSBbc3RyaW5nXSRwZXJz -b25JZCAtYW5kICRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2F2YXRhclRzJ10pIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcC5QU09iamVjdC5Qcm9wZXJ0aWVzLlJl -bW92ZSgnYXZhdGFyVHMnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -V3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSB8IE91 -dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl -IEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQnIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7 -DQogICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkF2YXRhci1M -b2VzY2hlbiBmZWhsZ2VzY2hsYWdlbjogIiArICRfLkV4Y2VwdGlvbi5NZXNzYWdlKSA1MDANCiAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgQXZhdGFyLVN0YXRpYy1T -ZXJ2aW5nOiAvZGF0YS9hdmF0YXJzLzxpZD4uanBnIGxpZXN0IGRpcmVrdCBhdXMNCiAgICAgICAg -ICAgICMgJERhdGFEaXIvYXZhdGFycy8uIEJld3Vzc3QgZWlnZW5lciBQZmFkIHN0YXR0IHVlYmVy -IFJlc29sdmUtDQogICAgICAgICAgICAjIFNhZmVQYXRoLCB3ZWlsIGRvcnQgZGVyIEFzc2V0LUNh -Y2hlLVJvb3QgZ2VudXR6dCB3aXJkIChBdmF0YXJlDQogICAgICAgICAgICAjIGxpZWdlbiBhYmVy -IHVudGVyIERhdGFEaXIpLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9kYXRhL2F2 -YXRhcnMvKFxkKylcLmpwZyQnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAg -ICAgICAkYXZhdGFyRmlsZSA9IEpvaW4tUGF0aCAoSm9pbi1QYXRoICREYXRhRGlyICdhdmF0YXJz -JykgKCRtYXRjaGVzWzFdICsgJy5qcGcnKQ0KICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGgg -LUxpdGVyYWxQYXRoICRhdmF0YXJGaWxlIC1QYXRoVHlwZSBMZWFmKSB7DQogICAgICAgICAgICAg -ICAgICAgICRjb250ZW50ID0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRhdmF0YXJG -aWxlKQ0KICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9IDIwMA0KICAg -ICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudFR5cGUgPSAnaW1hZ2UvanBlZycNCiAg -ICAgICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9uc2UNCiAgICAgICAg -ICAgICAgICAgICAgJFJlc3BvbnNlLkNvbnRlbnRMZW5ndGg2NCA9ICRjb250ZW50Lkxlbmd0aA0K -ICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLldyaXRlKCRjb250ZW50 -LCAwLCAkY29udGVudC5MZW5ndGgpDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRw -dXRTdHJlYW0uQ2xvc2UoKQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg -ICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiQXZhdGFyIG5pY2h0IGdlZnVuZGVuOiAiICsg -JFBhdGgpIDQwNA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K -ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFN0YXRpc2NoZSBEYXRlaWVuID09 -PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvJyAtb3IgJFBhdGggLWVxICcnKSB7ICRQ -YXRoID0gJy9pbmRleC5odG1sJyB9DQogICAgICAgICAgICAkUmVsUGF0aCA9ICRQYXRoLlRyaW1T -dGFydCgnLycpDQogICAgICAgICAgICAjIGRhdGEvLURpcmVrdHp1Z3JpZmYtR2F0ZSAoU3ByaW50 -IDEg4oCUIFNpY2hlcmhlaXRzLU5vdGJyZW1zZSAyMDI2LTA1LTI4KToNCiAgICAgICAgICAgICMg -R0VUIC9kYXRhL2FkbWluLmpzb24gKHVuZCBwbGFudW5nLmpzb24sIGxvZ2J1Y2guanNvbiwgaGlu -d2Vpc2UuanNvbiwNCiAgICAgICAgICAgICMgY2hhbmdlcy5qc29uLCBzb3dpZSBhbGxlIEJhY2t1 -cC1EYXRlaWVuKSBsaWVmZXJ0ZSB2b3JoZXIgUm9oLUpTT04gT0hORQ0KICAgICAgICAgICAgIyBB -dXRoLUNoZWNrLiBBdmF0YXItU3VicGZhZCB3aXJkIG9iZW4gc2VwYXJhdCBnZXJvdXRldC4gQWxs -ZXMgYW5kZXJlDQogICAgICAgICAgICAjIHVudGVyIC9kYXRhLyBkYXJmIE5VUiBkdXJjaCBlaW5l -IGV4cGxpeml0ZSBXaGl0ZWxpc3QgKFN0YXRpc3Rpay0gdW5kDQogICAgICAgICAgICAjIExvZ2J1 -Y2gtVGFybi1NYXJrdXBzLCB3ZWl0ZXIgdW50ZW4gZ2VnYXRlZCkuIFNvbnN0IDQwNC4NCiAgICAg -ICAgICAgICMgTWl0dGVpbHVuZ3MtVXBsb2FkcyAoU3ByaW50IEQtM2IsIDIwMjYtMDUtMjkpOiB2 -b20gU1UgaG9jaGdlbGFkZW5lDQogICAgICAgICAgICAjIEJpbGRlciArIFBERnMgdW50ZXIgZGF0 -YS91cGxvYWRzL21pdHRlaWx1bmdlbi9tXzx0cz5fPHJhbmQ+LjxleHQ+Lg0KICAgICAgICAgICAg -IyBFbmR1bmdzLVdoaXRlbGlzdCB2ZXJoaW5kZXJ0IENvZGUtU211Z2dsaW5nIHVlYmVyIGRlbiBQ -ZmFkLg0KICAgICAgICAgICAgJGlzdE1pdHRlaWx1bmdVcGxvYWQgPSAoJFJlbFBhdGggLW1hdGNo -ICdeZGF0YS91cGxvYWRzL21pdHRlaWx1bmdlbi9tX1xkK19bYS16MC05XStcLihqcGd8cG5nfHdl -YnB8cGRmKSQnKQ0KICAgICAgICAgICAgaWYgKCRSZWxQYXRoIC1saWtlICdkYXRhLyonIC1hbmQN -CiAgICAgICAgICAgICAgICAkUmVsUGF0aCAtbmUgJ2RhdGEvbWFpbmZyYW1lLmh0bWwnIC1hbmQN -CiAgICAgICAgICAgICAgICAkUmVsUGF0aCAtbmUgJ2RhdGEvc2FuaXRpemVyLmh0bWwnIC1hbmQN -CiAgICAgICAgICAgICAgICAtbm90ICRpc3RNaXR0ZWlsdW5nVXBsb2FkKSB7DQogICAgICAgICAg -ICAgICAgTG9nLUFwaSAoJ0dBVEUgNDA0IHswfSAoZGF0YS8tRGlyZWt0enVncmlmZiBibG9ja2ll -cnQpJyAtZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAo -IlVuYmVrYW5udGVyIEVuZHB1bmt0OiAkTWV0aG9kICRQYXRoIikgNDA0DQogICAgICAgICAgICAg -ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgVmVyc2NobGVpZXJ1bmdz -LUZpbHRlcjogZGFzIFN0YXRpc3Rpay0gdW5kIExvZ2J1Y2gtTW9kdWwgc2FtdA0KICAgICAgICAg -ICAgIyBNYXJrdXAtRnJhZ21lbnQgd2VyZGVuIG51ciBhbiBCZXJlY2h0aWd0ZSBhdXNnZWxpZWZl -cnQuDQogICAgICAgICAgICAjIERpcmVrdGVyIFp1Z3JpZmYgZHVyY2ggVW5iZXJlY2h0aWd0ZSAo -QnJvd3Nlci1VUkwtRWluZ2FiZSwNCiAgICAgICAgICAgICMgU291cmNlLVN0b2ViZXJuKSBiZWtv -bW10IDQwNCDigJQgd2llIGJlaSBqZWRlbSBuaWNodCBleGlzdGllcmVuZGVuDQogICAgICAgICAg -ICAjIFBmYWQsIGtlaW4gU3RhdHVzY29kZS1WZXJyYXQuDQogICAgICAgICAgICBpZiAoJFJlbFBh -dGggLWVxICdqcy9zdGF0aXN0aWsuanMnIC1vciAkUmVsUGF0aCAtZXEgJ2RhdGEvbWFpbmZyYW1l -Lmh0bWwnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ3N0 -YXRpc3RpaycpKSB7DQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdHQVRFIDQwNCB7MH0g -KGtlaW4gU3RhdGlzdGlrLVJlY2h0KScgLWYgJFJlbFBhdGgpDQogICAgICAgICAgICAgICAgICAg -IFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiVW5iZWthbm50ZXIgRW5kcHVua3Q6ICRNZXRob2QgJFBh -dGgiKSA0MDQNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICB9IGVsc2VpZiAoJFJlbFBhdGggLWVxICdqcy9sb2didWNoLmpzJyAtb3Ig -JFJlbFBhdGggLWVxICdkYXRhL3Nhbml0aXplci5odG1sJykgew0KICAgICAgICAgICAgICAgIGlm -ICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdsb2didWNoJykpIHsNCiAgICAgICAgICAgICAgICAg -ICAgTG9nLUFwaSAoJ0dBVEUgNDA0IHswfSAoa2VpbiBMb2didWNoLVJlY2h0KScgLWYgJFJlbFBh -dGgpDQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiVW5iZWthbm50 -ZXIgRW5kcHVua3Q6ICRNZXRob2QgJFBhdGgiKSA0MDQNCiAgICAgICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkRmls -ZVBhdGggPSBSZXNvbHZlLVNhZmVQYXRoICRSZWxQYXRoDQogICAgICAgICAgICAkdm9uRmFsbGJh -Y2sgPSAkZmFsc2UNCiAgICAgICAgICAgICMgU2hhcmUtRmFsbGJhY2s6IHdlbm4gZGllIERhdGVp -IGxva2FsIGZlaGx0ICh6LkIuIHhsc3guZnVsbC5taW4uanMNCiAgICAgICAgICAgICMgd2lyZCBi -ZXd1c3N0IG5pY2h0IGluIGRlbiBDbGllbnQtQ2FjaGUga29waWVydCksIHZlcnN1Y2hlIHNpZQ0K -ICAgICAgICAgICAgIyB2b20ga29uZmlndXJpZXJ0ZW4gQXNzZXRGYWxsYmFjay1QZmFkIG5hY2h6 -dWxhZGVuLg0KICAgICAgICAgICAgaWYgKCgtbm90ICRGaWxlUGF0aCAtb3IgLW5vdCAoVGVzdC1Q -YXRoIC1MaXRlcmFsUGF0aCAkRmlsZVBhdGggLVBhdGhUeXBlIExlYWYpKSAtYW5kICRzY3JpcHQ6 -QXNzZXRGYWxsYmFjaykgew0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAg -ICAgICRmYWxsYmFja1RyeSA9IEpvaW4tUGF0aCAkc2NyaXB0OkFzc2V0RmFsbGJhY2sgJFJlbFBh -dGgNCiAgICAgICAgICAgICAgICAgICAgJGZhbGxiYWNrTm9ybSA9IFtTeXN0ZW0uSU8uUGF0aF06 -OkdldEZ1bGxQYXRoKCRmYWxsYmFja1RyeSkNCiAgICAgICAgICAgICAgICAgICAgJGZhbGxiYWNr -Um9vdE5vcm0gPSBbU3lzdGVtLklPLlBhdGhdOjpHZXRGdWxsUGF0aCgkc2NyaXB0OkFzc2V0RmFs -bGJhY2spDQogICAgICAgICAgICAgICAgICAgIGlmICgkZmFsbGJhY2tOb3JtLlN0YXJ0c1dpdGgo -JGZhbGxiYWNrUm9vdE5vcm0sIFtTeXN0ZW0uU3RyaW5nQ29tcGFyaXNvbl06Ok9yZGluYWxJZ25v -cmVDYXNlKSAtYW5kDQogICAgICAgICAgICAgICAgICAgICAgICAoVGVzdC1QYXRoIC1MaXRlcmFs -UGF0aCAkZmFsbGJhY2tOb3JtIC1QYXRoVHlwZSBMZWFmKSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgJEZpbGVQYXRoID0gJGZhbGxiYWNrTm9ybQ0KICAgICAgICAgICAgICAgICAgICAgICAg -JHZvbkZhbGxiYWNrID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBMb2ctQXBpICgnRkFMTEJBQ0stRkVI -TEVSIHswfTogezF9JyAtZiAkUmVsUGF0aCwgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpDQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRGaWxlUGF0aCAtYW5k -IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRGaWxlUGF0aCAtUGF0aFR5cGUgTGVhZikpIHsNCiAg -ICAgICAgICAgICAgICAkZXh0ID0gW1N5c3RlbS5JTy5QYXRoXTo6R2V0RXh0ZW5zaW9uKCRGaWxl -UGF0aCkuVG9Mb3dlcigpDQogICAgICAgICAgICAgICAgJG1pbWUgPSBpZiAoJE1pbWVUeXBlcy5D -b250YWluc0tleSgkZXh0KSkgeyAkTWltZVR5cGVzWyRleHRdIH0gZWxzZSB7ICdhcHBsaWNhdGlv -bi9vY3RldC1zdHJlYW0nIH0NCiAgICAgICAgICAgICAgICAkY29udGVudCA9IFtTeXN0ZW0uSU8u -RmlsZV06OlJlYWRBbGxCeXRlcygkRmlsZVBhdGgpDQogICAgICAgICAgICAgICAgJFJlc3BvbnNl -LlN0YXR1c0NvZGUgPSAyMDANCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudFR5cGUg -PSAkbWltZQ0KICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0eUhlYWRlcnMgJFJlc3BvbnNlDQog -ICAgICAgICAgICAgICAgJFJlc3BvbnNlLkNvbnRlbnRMZW5ndGg2NCA9ICRjb250ZW50Lkxlbmd0 -aA0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uV3JpdGUoJGNvbnRlbnQs -IDAsICRjb250ZW50Lkxlbmd0aCkNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3Ry -ZWFtLkNsb3NlKCkNCiAgICAgICAgICAgICAgICBpZiAoJHZvbkZhbGxiYWNrKSB7IExvZy1BcGkg -KCdGSUxFIDIwMCB7MH0gKEZhbGxiYWNrLCB7MX0gQnl0ZXMpJyAtZiAkUmVsUGF0aCwgJGNvbnRl -bnQuTGVuZ3RoKSB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIExvZy1B -cGkgKCdGSUxFIDQwNCB7MH0gKHdlZGVyIGltIFJvb3Qgbm9jaCB1ZWJlciBBc3NldEZhbGxiYWNr -IGdlZnVuZGVuKScgLWYgJFJlbFBhdGgpDQogICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz -cG9uc2UgKCJVbmJla2FubnRlciBFbmRwdW5rdDogJE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAg -ICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGNhdGNoIHsNCiAgICAgICAgICAgIExvZy1BcGkg -KCdFWENFUFRJT04gezB9IHsxfTogezJ9JyAtZiAkTWV0aG9kLCAkUGF0aCwgJF8uRXhjZXB0aW9u -Lk1lc3NhZ2UpDQogICAgICAgICAgICB0cnkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkXy5FeGNl -cHRpb24uTWVzc2FnZSA1MDAgfSBjYXRjaCB7fQ0KICAgICAgICB9DQogICAgfQ0KfQ0KY2F0Y2gg -ew0KICAgIFdyaXRlLUhvc3QgKCdTZXJ2ZXItRmVobGVyOiB7MH0nIC1mICRfLkV4Y2VwdGlvbi5N -ZXNzYWdlKQ0KICAgIExvZy1BcGkgKCdNQUlOLUxPT1AgRVhDRVBUSU9OOiB7MH0nIC1mICRfLkV4 -Y2VwdGlvbi5NZXNzYWdlKQ0KfQ0KZmluYWxseSB7DQogICAgJFdhdGNoZG9nVGltZXIuU3RvcCgp -DQogICAgaWYgKCRMaXN0ZW5lci5Jc0xpc3RlbmluZykgeyAkTGlzdGVuZXIuU3RvcCgpIH0NCiAg -ICBMb2ctQXBpICdTSFVURE9XTicNCiAgICBXcml0ZS1Ib3N0ICdTZXJ2ZXIgYmVlbmRldC4nDQp9 -DQo= +cnNvbklkIC1hbmQgJHAuUFNPYmplY3QuUHJvcGVydGllc1snYXZhdGFyVHMnXSkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwLlBTT2JqZWN0LlByb3BlcnRpZXMu +UmVtb3ZlKCdhdmF0YXJUcycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IHwg +T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u +c2UgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNo +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiQXZhdGFy +LUxvZXNjaGVuIGZlaGxnZXNjaGxhZ2VuOiAiICsgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpIDUwMA0K +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBBdmF0YXItU3RhdGlj +LVNlcnZpbmc6IC9kYXRhL2F2YXRhcnMvPGlkPi5qcGcgbGllc3QgZGlyZWt0IGF1cw0KICAgICAg +ICAgICAgIyAkRGF0YURpci9hdmF0YXJzLy4gQmV3dXNzdCBlaWdlbmVyIFBmYWQgc3RhdHQgdWVi +ZXIgUmVzb2x2ZS0NCiAgICAgICAgICAgICMgU2FmZVBhdGgsIHdlaWwgZG9ydCBkZXIgQXNzZXQt +Q2FjaGUtUm9vdCBnZW51dHp0IHdpcmQgKEF2YXRhcmUNCiAgICAgICAgICAgICMgbGllZ2VuIGFi +ZXIgdW50ZXIgRGF0YURpcikuDQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2RhdGEv +YXZhdGFycy8oXGQrKVwuanBnJCcgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAg +ICAgICAgICRhdmF0YXJGaWxlID0gSm9pbi1QYXRoIChKb2luLVBhdGggJERhdGFEaXIgJ2F2YXRh +cnMnKSAoJG1hdGNoZXNbMV0gKyAnLmpwZycpDQogICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0 +aCAtTGl0ZXJhbFBhdGggJGF2YXRhckZpbGUgLVBhdGhUeXBlIExlYWYpIHsNCiAgICAgICAgICAg +ICAgICAgICAgJGNvbnRlbnQgPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsQnl0ZXMoJGF2YXRh +ckZpbGUpDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5TdGF0dXNDb2RlID0gMjAwDQog +ICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5Db250ZW50VHlwZSA9ICdpbWFnZS9qcGVnJw0K +ICAgICAgICAgICAgICAgICAgICBBZGQtU2VjdXJpdHlIZWFkZXJzICRSZXNwb25zZQ0KICAgICAg +ICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0ID0gJGNvbnRlbnQuTGVuZ3Ro +DQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uV3JpdGUoJGNvbnRl +bnQsIDAsICRjb250ZW50Lkxlbmd0aCkNCiAgICAgICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91 +dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAg +ICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJBdmF0YXIgbmljaHQgZ2VmdW5kZW46ICIg +KyAkUGF0aCkgNDA0DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVl +DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gU3RhdGlzY2hlIERhdGVpZW4g +PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy8nIC1vciAkUGF0aCAtZXEgJycpIHsg +JFBhdGggPSAnL2luZGV4Lmh0bWwnIH0NCiAgICAgICAgICAgICRSZWxQYXRoID0gJFBhdGguVHJp +bVN0YXJ0KCcvJykNCiAgICAgICAgICAgICMgZGF0YS8tRGlyZWt0enVncmlmZi1HYXRlIChTcHJp +bnQgMSDigJQgU2ljaGVyaGVpdHMtTm90YnJlbXNlIDIwMjYtMDUtMjgpOg0KICAgICAgICAgICAg +IyBHRVQgL2RhdGEvYWRtaW4uanNvbiAodW5kIHBsYW51bmcuanNvbiwgbG9nYnVjaC5qc29uLCBo +aW53ZWlzZS5qc29uLA0KICAgICAgICAgICAgIyBjaGFuZ2VzLmpzb24sIHNvd2llIGFsbGUgQmFj +a3VwLURhdGVpZW4pIGxpZWZlcnRlIHZvcmhlciBSb2gtSlNPTiBPSE5FDQogICAgICAgICAgICAj +IEF1dGgtQ2hlY2suIEF2YXRhci1TdWJwZmFkIHdpcmQgb2JlbiBzZXBhcmF0IGdlcm91dGV0LiBB +bGxlcyBhbmRlcmUNCiAgICAgICAgICAgICMgdW50ZXIgL2RhdGEvIGRhcmYgTlVSIGR1cmNoIGVp +bmUgZXhwbGl6aXRlIFdoaXRlbGlzdCAoU3RhdGlzdGlrLSB1bmQNCiAgICAgICAgICAgICMgTG9n +YnVjaC1UYXJuLU1hcmt1cHMsIHdlaXRlciB1bnRlbiBnZWdhdGVkKS4gU29uc3QgNDA0Lg0KICAg +ICAgICAgICAgIyBNaXR0ZWlsdW5ncy1VcGxvYWRzIChTcHJpbnQgRC0zYiwgMjAyNi0wNS0yOSk6 +IHZvbSBTVSBob2NoZ2VsYWRlbmUNCiAgICAgICAgICAgICMgQmlsZGVyICsgUERGcyB1bnRlciBk +YXRhL3VwbG9hZHMvbWl0dGVpbHVuZ2VuL21fPHRzPl88cmFuZD4uPGV4dD4uDQogICAgICAgICAg +ICAjIEVuZHVuZ3MtV2hpdGVsaXN0IHZlcmhpbmRlcnQgQ29kZS1TbXVnZ2xpbmcgdWViZXIgZGVu +IFBmYWQuDQogICAgICAgICAgICAkaXN0TWl0dGVpbHVuZ1VwbG9hZCA9ICgkUmVsUGF0aCAtbWF0 +Y2ggJ15kYXRhL3VwbG9hZHMvbWl0dGVpbHVuZ2VuL21fXGQrX1thLXowLTldK1wuKGpwZ3xwbmd8 +d2VicHxwZGYpJCcpDQogICAgICAgICAgICBpZiAoJFJlbFBhdGggLWxpa2UgJ2RhdGEvKicgLWFu +ZA0KICAgICAgICAgICAgICAgICRSZWxQYXRoIC1uZSAnZGF0YS9tYWluZnJhbWUuaHRtbCcgLWFu +ZA0KICAgICAgICAgICAgICAgICRSZWxQYXRoIC1uZSAnZGF0YS9zYW5pdGl6ZXIuaHRtbCcgLWFu +ZA0KICAgICAgICAgICAgICAgIC1ub3QgJGlzdE1pdHRlaWx1bmdVcGxvYWQpIHsNCiAgICAgICAg +ICAgICAgICBMb2ctQXBpICgnR0FURSA0MDQgezB9IChkYXRhLy1EaXJla3R6dWdyaWZmIGJsb2Nr +aWVydCknIC1mICRSZWxQYXRoKQ0KICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICgiVW5iZWthbm50ZXIgRW5kcHVua3Q6ICRNZXRob2QgJFBhdGgiKSA0MDQNCiAgICAgICAgICAg +ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBWZXJzY2hsZWllcnVu +Z3MtRmlsdGVyOiBkYXMgU3RhdGlzdGlrLSB1bmQgTG9nYnVjaC1Nb2R1bCBzYW10DQogICAgICAg +ICAgICAjIE1hcmt1cC1GcmFnbWVudCB3ZXJkZW4gbnVyIGFuIEJlcmVjaHRpZ3RlIGF1c2dlbGll +ZmVydC4NCiAgICAgICAgICAgICMgRGlyZWt0ZXIgWnVncmlmZiBkdXJjaCBVbmJlcmVjaHRpZ3Rl +IChCcm93c2VyLVVSTC1FaW5nYWJlLA0KICAgICAgICAgICAgIyBTb3VyY2UtU3RvZWJlcm4pIGJl +a29tbXQgNDA0IOKAlCB3aWUgYmVpIGplZGVtIG5pY2h0IGV4aXN0aWVyZW5kZW4NCiAgICAgICAg +ICAgICMgUGZhZCwga2VpbiBTdGF0dXNjb2RlLVZlcnJhdC4NCiAgICAgICAgICAgIGlmICgkUmVs +UGF0aCAtZXEgJ2pzL3N0YXRpc3Rpay5qcycgLW9yICRSZWxQYXRoIC1lcSAnZGF0YS9tYWluZnJh +bWUuaHRtbCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAn +c3RhdGlzdGlrJykpIHsNCiAgICAgICAgICAgICAgICAgICAgTG9nLUFwaSAoJ0dBVEUgNDA0IHsw +fSAoa2VpbiBTdGF0aXN0aWstUmVjaHQpJyAtZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICAg +ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJVbmJla2FubnRlciBFbmRwdW5rdDogJE1ldGhvZCAk +UGF0aCIpIDQwNA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgIH0gZWxzZWlmICgkUmVsUGF0aCAtZXEgJ2pzL2xvZ2J1Y2guanMnIC1v +ciAkUmVsUGF0aCAtZXEgJ2RhdGEvc2FuaXRpemVyLmh0bWwnKSB7DQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2xvZ2J1Y2gnKSkgew0KICAgICAgICAgICAgICAg +ICAgICBMb2ctQXBpICgnR0FURSA0MDQgezB9IChrZWluIExvZ2J1Y2gtUmVjaHQpJyAtZiAkUmVs +UGF0aCkNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJVbmJla2Fu +bnRlciBFbmRwdW5rdDogJE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAgICAgICAgICAgICAgICBj +b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRG +aWxlUGF0aCA9IFJlc29sdmUtU2FmZVBhdGggJFJlbFBhdGgNCiAgICAgICAgICAgICR2b25GYWxs +YmFjayA9ICRmYWxzZQ0KICAgICAgICAgICAgIyBTaGFyZS1GYWxsYmFjazogd2VubiBkaWUgRGF0 +ZWkgbG9rYWwgZmVobHQgKHouQi4geGxzeC5mdWxsLm1pbi5qcw0KICAgICAgICAgICAgIyB3aXJk +IGJld3Vzc3QgbmljaHQgaW4gZGVuIENsaWVudC1DYWNoZSBrb3BpZXJ0KSwgdmVyc3VjaGUgc2ll +DQogICAgICAgICAgICAjIHZvbSBrb25maWd1cmllcnRlbiBBc3NldEZhbGxiYWNrLVBmYWQgbmFj +aHp1bGFkZW4uDQogICAgICAgICAgICBpZiAoKC1ub3QgJEZpbGVQYXRoIC1vciAtbm90IChUZXN0 +LVBhdGggLUxpdGVyYWxQYXRoICRGaWxlUGF0aCAtUGF0aFR5cGUgTGVhZikpIC1hbmQgJHNjcmlw +dDpBc3NldEZhbGxiYWNrKSB7DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAg +ICAgICAgJGZhbGxiYWNrVHJ5ID0gSm9pbi1QYXRoICRzY3JpcHQ6QXNzZXRGYWxsYmFjayAkUmVs +UGF0aA0KICAgICAgICAgICAgICAgICAgICAkZmFsbGJhY2tOb3JtID0gW1N5c3RlbS5JTy5QYXRo +XTo6R2V0RnVsbFBhdGgoJGZhbGxiYWNrVHJ5KQ0KICAgICAgICAgICAgICAgICAgICAkZmFsbGJh +Y2tSb290Tm9ybSA9IFtTeXN0ZW0uSU8uUGF0aF06OkdldEZ1bGxQYXRoKCRzY3JpcHQ6QXNzZXRG +YWxsYmFjaykNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRmYWxsYmFja05vcm0uU3RhcnRzV2l0 +aCgkZmFsbGJhY2tSb290Tm9ybSwgW1N5c3RlbS5TdHJpbmdDb21wYXJpc29uXTo6T3JkaW5hbEln +bm9yZUNhc2UpIC1hbmQNCiAgICAgICAgICAgICAgICAgICAgICAgIChUZXN0LVBhdGggLUxpdGVy +YWxQYXRoICRmYWxsYmFja05vcm0gLVBhdGhUeXBlIExlYWYpKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAkRmlsZVBhdGggPSAkZmFsbGJhY2tOb3JtDQogICAgICAgICAgICAgICAgICAgICAg +ICAkdm9uRmFsbGJhY2sgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdGQUxMQkFDSy1G +RUhMRVIgezB9OiB7MX0nIC1mICRSZWxQYXRoLCAkXy5FeGNlcHRpb24uTWVzc2FnZSkNCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJEZpbGVQYXRoIC1h +bmQgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJEZpbGVQYXRoIC1QYXRoVHlwZSBMZWFmKSkgew0K +ICAgICAgICAgICAgICAgICRleHQgPSBbU3lzdGVtLklPLlBhdGhdOjpHZXRFeHRlbnNpb24oJEZp +bGVQYXRoKS5Ub0xvd2VyKCkNCiAgICAgICAgICAgICAgICAkbWltZSA9IGlmICgkTWltZVR5cGVz +LkNvbnRhaW5zS2V5KCRleHQpKSB7ICRNaW1lVHlwZXNbJGV4dF0gfSBlbHNlIHsgJ2FwcGxpY2F0 +aW9uL29jdGV0LXN0cmVhbScgfQ0KICAgICAgICAgICAgICAgICRjb250ZW50ID0gW1N5c3RlbS5J +Ty5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRGaWxlUGF0aCkNCiAgICAgICAgICAgICAgICAkUmVzcG9u +c2UuU3RhdHVzQ29kZSA9IDIwMA0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5Db250ZW50VHlw +ZSA9ICRtaW1lDQogICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9uc2UN +CiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0ID0gJGNvbnRlbnQuTGVu +Z3RoDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5Xcml0ZSgkY29udGVu +dCwgMCwgJGNvbnRlbnQuTGVuZ3RoKQ0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRT +dHJlYW0uQ2xvc2UoKQ0KICAgICAgICAgICAgICAgIGlmICgkdm9uRmFsbGJhY2spIHsgTG9nLUFw +aSAoJ0ZJTEUgMjAwIHswfSAoRmFsbGJhY2ssIHsxfSBCeXRlcyknIC1mICRSZWxQYXRoLCAkY29u +dGVudC5MZW5ndGgpIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgTG9n +LUFwaSAoJ0ZJTEUgNDA0IHswfSAod2VkZXIgaW0gUm9vdCBub2NoIHVlYmVyIEFzc2V0RmFsbGJh +Y2sgZ2VmdW5kZW4pJyAtZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS +ZXNwb25zZSAoIlVuYmVrYW5udGVyIEVuZHB1bmt0OiAkTWV0aG9kICRQYXRoIikgNDA0DQogICAg +ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggew0KICAgICAgICAgICAgTG9nLUFw +aSAoJ0VYQ0VQVElPTiB7MH0gezF9OiB7Mn0nIC1mICRNZXRob2QsICRQYXRoLCAkXy5FeGNlcHRp +b24uTWVzc2FnZSkNCiAgICAgICAgICAgIHRyeSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRfLkV4 +Y2VwdGlvbi5NZXNzYWdlIDUwMCB9IGNhdGNoIHt9DQogICAgICAgIH0NCiAgICB9DQp9DQpjYXRj +aCB7DQogICAgV3JpdGUtSG9zdCAoJ1NlcnZlci1GZWhsZXI6IHswfScgLWYgJF8uRXhjZXB0aW9u +Lk1lc3NhZ2UpDQogICAgTG9nLUFwaSAoJ01BSU4tTE9PUCBFWENFUFRJT046IHswfScgLWYgJF8u +RXhjZXB0aW9uLk1lc3NhZ2UpDQp9DQpmaW5hbGx5IHsNCiAgICAkV2F0Y2hkb2dUaW1lci5TdG9w +KCkNCiAgICBpZiAoJExpc3RlbmVyLklzTGlzdGVuaW5nKSB7ICRMaXN0ZW5lci5TdG9wKCkgfQ0K +ICAgIExvZy1BcGkgJ1NIVVRET1dOJw0KICAgIFdyaXRlLUhvc3QgJ1NlcnZlciBiZWVuZGV0LicN +Cn0NCg== ### FILE: stop.bat | 1307 QGVjaG8gb2ZmDQpzZXRsb2NhbCBlbmFibGVkZWxheWVkZXhwYW5zaW9uDQpjaGNwIDY1MDAxID5u dWwgMj4mMQ0KdGl0bGUgVkkzIERHTC1QbGFudW5nIC0gU3RvcA0KDQo6OiA9PT09PT09PT09PT09