murano-deployment/ExecutionPlan/SqlServerAlwaysOnAvailabili.../ConfigureEnvironmentForAOAG...

27 lines
23 KiB
JSON

{
"Commands": [
{
"Name": "Install-SqlServerPowerShellModule",
"Arguments": {}
},
{
"Name": "Disable-Firewall",
"Arguments": {}
},
{
"Name": "Enable-TrustedHosts",
"Arguments": {}
},
{
"Name": "New-SharedFolderForAOAG",
"Arguments": {
"PrimaryNode": "$primaryNode"
}
}
],
"Scripts": [
"SW1wb3J0LU1vZHVsZSBDb3JlRnVuY3Rpb25zIC1Gb3JjZQoKCmZ1bmN0aW9uIFNob3ctSW52b2NhdGlvbkluZm8gewogICAgcGFyYW0gKAogICAgICAgICRJbnZvY2F0aW9uLAogICAgICAgIFtTd2l0Y2hdICRFbmQKICAgICkKCiAgICBpZiAoJEVuZCkgewogICAgICAgIFdyaXRlLUxvZ0RlYnVnICI8L2Z1bmN0aW9uIG5hbWU9JyQoJEludm9jYXRpb24uTXlDb21tYW5kLk5hbWUpJz4iCiAgICB9CiAgICBlbHNlIHsKICAgICAgICBXcml0ZS1Mb2dEZWJ1ZyAiPGZ1bmN0aW9uIG5hbWU9JyQoJEludm9jYXRpb24uTXlDb21tYW5kLk5hbWUpJz4iCiAgICAgICAgV3JpdGUtTG9nRGVidWcgIjxwYXJhbT4iCiAgICAgICAgZm9yZWFjaCAoJFBhcmFtZXRlciBpbiAkSW52b2NhdGlvbi5NeUNvbW1hbmQuUGFyYW1ldGVycykgewogICAgICAgICAgICBmb3JlYWNoICgkS2V5IGluICRQYXJhbWV0ZXIuS2V5cykgewogICAgICAgICAgICAgICAgJFR5cGUgPSAkUGFyYW1ldGVyWyRLZXldLlBhcmFtZXRlclR5cGUuRnVsbE5hbWUKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRWYWx1ZSBpbiAkSW52b2NhdGlvbi5Cb3VuZFBhcmFtZXRlcnNbJEtleV0pIHsKICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2dEZWJ1ZyAiWyRUeXBlXSAkS2V5ID0gJyRWYWx1ZSciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgV3JpdGUtTG9nRGVidWcgIjwvcGFyYW0+IgogICAgfQp9CgoKJFRyYXBIYW5kbGVyID0gewogICAgV3JpdGUtTG9nRXJyb3IgQCgiPGV4Y2VwdGlvbj4iLCAkXykgLUVudGlyZU9iamVjdAogICAgV3JpdGUtTG9nRXJyb3IgIjwvZXhjZXB0aW9uPiIKICAgIGJyZWFrCn0KCgp0cmFwIHsKICAgICYkVHJhcEhhbmRsZXIKfQoKJEVycm9yQWN0aW9uUHJlZmVyZW5jZSA9ICdTdG9wJwoKCjwjCiMgVXNhZ2UgZXhhbXBsZSBmb3IgU2hvdy1JbnZvY2F0aW9uSW5mbwoKZnVuY3Rpb24gTXlGdW5jdGlvbiB7CiAgICBwYXJhbSAoCiAgICAgICAgW1N0cmluZ10gJFZhbHVlMSwKICAgICAgICBbU3RyaW5nXSAkVmFsdWUyLAogICAgICAgIFtJbnRdICRJbnQxCiAgICApCiAgICBiZWdpbiB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uCiAgICB9CiAgICBlbmQgewogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbiAtRW5kCiAgICB9CiAgICBwcm9jZXNzIHsKICAgICAgICB0cmFwIHsKICAgICAgICAgICAgJiRUcmFwSGFuZGxlcgogICAgICAgIH0KICAgICAgICAjIE1haW4gY29kZSBoZXJlCiAgICB9Cn0KIz4K",
"CmZ1bmN0aW9uIEluc3RhbGwtU3FsU2VydmVyUG93ZXJTaGVsbE1vZHVsZSB7CiAgICBwYXJhbSAoCiAgICAgICAgW1N0cmluZ10gJFNldHVwUm9vdCA9ICcnCiAgICApCiAgICBiZWdpbiB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uCiAgICB9CiAgICBlbmQgewogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbiAtRW5kCiAgICB9CiAgICBwcm9jZXNzIHsKICAgICAgICB0cmFwIHsKICAgICAgICAgICAgJiRUcmFwSGFuZGxlcgogICAgICAgIH0KCiAgICAgICAgaWYgKChHZXQtTW9kdWxlIFNRTFBTIC1MaXN0QXZhaWxhYmxlKSAtbmUgJG51bGwpIHsKICAgICAgICAgICAgV3JpdGUtTG9nICJNb2R1bGUgU1FMU1AgYWxyZWFkeSBpbnN0YWxsZWQuIgogICAgICAgICAgICByZXR1cm4KICAgICAgICB9CgogICAgICAgIGlmICgkTXVyYW5vRmlsZVNoYXJlIC1lcSAnJykgewogICAgICAgICAgICAkTXVyYW5vRmlsZVNoYXJlID0gW0Vudmlyb25tZW50XTo6R2V0RW52aXJvbm1lbnRWYXJpYWJsZSgnTXVyYW5vRmlsZVNoYXJlJykKICAgICAgICAgICAgaWYgKCRNdXJhbm9GaWxlU2hhcmUgLWVxICcnKSB7CiAgICAgICAgICAgICAgICB0aHJvdygiVW5hYmxlIHRvIGZpbmQgTXVyYW5vRmlsZVNoYXJlIHBhdGguIikKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRTZXR1cFJvb3QgLWVxICcnKSB7CiAgICAgICAgICAgICRTZXR1cFJvb3QgPSBbSU8uUGF0aF06OkNvbWJpbmUoJE11cmFub0ZpbGVTaGFyZSwgJ1ByZXJlcXVpc2l0ZXNcU1FMIFNlcnZlclxUb29scycpCiAgICAgICAgfQogICAgICAgIAogICAgICAgICRGaWxlTGlzdCA9IEAoCiAgICAgICAgICAgICdTUUxTeXNDbHJUeXBlcy5tc2knLAogICAgICAgICAgICAnU2hhcmVkTWFuYWdlbWVudE9iamVjdHMubXNpJywKICAgICAgICAgICAgJ1Bvd2VyU2hlbGxUb29scy5tc2knCiAgICAgICAgKQoKICAgICAgICBmb3JlYWNoICgkTXNpRmlsZSBpbiAkRmlsZUxpc3QpIHsKICAgICAgICAgICAgV3JpdGUtTG9nICJUcnlpbmcgdG8gaW5zdGFsbCAnJE1zaUZpbGUnIC4uLiIKICAgICAgICAgICAgJE1zaVBhdGggPSBKb2luLVBhdGggJFNldHVwUm9vdCAkTXNpRmlsZQogICAgICAgICAgICBpZiAoW0lPLkZpbGVdOjpFeGlzdHMoJE1zaVBhdGgpKSB7CiAgICAgICAgICAgICAgICBXcml0ZS1Mb2cgIlN0YXJ0aW5nIG1zaWV4ZSAuLi4iCiAgICAgICAgICAgICAgICAkUmVzdWx0ID0gRXhlYyAtRmlsZVBhdGggIm1zaWV4ZWMuZXhlIiAtQXJndW1lbnRMaXN0IEAoJy9pJywgImAiJE1zaVBhdGhgIiIsICcvcXVpZXQnKSAtUGFzc1RocnUKICAgICAgICAgICAgICAgIGlmICgkUmVzdWx0LkV4aXRDb2RlIC1uZSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgKCJJbnN0YWxsYXRpb24gb2YgTVNJIHBhY2thZ2UgJyRNc2lQYXRoJyBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICckKCRSZXN1bHQuRXhpdENvZGUpJyIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBXcml0ZS1Mb2cgIkZpbGUgJyRNc2lQYXRoJyBub3QgZm91bmQuIgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgoKCmZ1bmN0aW9uIEluc3RhbGwtU3FsU2VydmVyRm9yQU9BRyB7CiAgICBwYXJhbSAoCiAgICAgICAgIyBQYXRoIHRvIGZvbGRlciB3aGVyZSBtc2kgZmlsZXMgZm9yIGFkZGl0aW9uYWwgU1FMIGZlYXR1cmVzIGFyZSBsb2NhdGVkCiAgICAgICAgW1N0cmluZ10gJFNldHVwUm9vdCA9ICcnLAoKICAgICAgICAjIFBhdGggdG8gZm9sZGVyIHdoZXJlIG1zaSBmaWxlcyBmb3IgYWRkaXRpb25hbCBTUUxQUyBtb2R1bGUgYXJlIGxvY2F0ZWQKICAgICAgICBbU3RyaW5nXSAkU3FscHNTZXR1cFJvb3QgPSAnJywKCiAgICAgICAgW1N0cmluZ10gJE11cmFub0ZpbGVTaGFyZSA9ICcnLAoKICAgICAgICAjIChSRVFVSVJFRCkgRG9tYWluIG5hbWUKICAgICAgICBbU3RyaW5nXSAkU1FMU2VydmljZVVzZXJEb21haW4gPSAnZmMtYWNtZS5sb2NhbCcsCgogICAgICAgICMgKFJFUVVJUkVEKSBVc2VyIG5hbWUgZm9yIHRoZSBhY2NvdW50IHdoaWNoIHdpbGwgYmUgdXNlZCBieSBTUUwgc2VydmljZQogICAgICAgIFtTdHJpbmddICRTUUxTZXJ2aWNlVXNlck5hbWUgPSAnQWRtaW5pc3RyYXRvcicsCgogICAgICAgICMgKFJFUVVJUkVEKSBQYXNzd29yZCBmb3IgdGhhdCB1c2VyCiAgICAgICAgW1N0cmluZ10gJFNRTFNlcnZpY2VVc2VyUGFzc3dvcmQgPSAnUEBzc3cwcmQnLAoKICAgICAgICBbU3dpdGNoXSAkVXBkYXRlRW5hYmxlZAogICAgKQogICAgYmVnaW4gewogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbgogICAgfQogICAgZW5kIHsKICAgICAgICBTaG93LUludm9jYXRpb25JbmZvICRNeUludm9jYXRpb24gLUVuZAogICAgfQogICAgcHJvY2VzcyB7CiAgICAgICAgdHJhcCB7CiAgICAgICAgICAgICYkVHJhcEhhbmRsZXIKICAgICAgICB9CgogICAgICAgIGlmICgkTXVyYW5vRmlsZVNoYXJlIC1lcSAnJykgewogICAgICAgICAgICAkTXVyYW5vRmlsZVNoYXJlID0gW0Vudmlyb25tZW50XTo6R2V0RW52aXJvbm1lbnRWYXJpYWJsZSgnTXVyYW5vRmlsZVNoYXJlJykKICAgICAgICAgICAgaWYgKCRNdXJhbm9GaWxlU2hhcmUgLWVxICcnKSB7CiAgICAgICAgICAgICAgICB0aHJvdygiVW5hYmxlIHRvIGZpbmQgTXVyYW5vRmlsZVNoYXJlIHBhdGguIikKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRTZXR1cFJvb3QgLWVxICcnKSB7CiAgICAgICAgICAgICRTZXR1cFJvb3QgPSBbSU8uUGF0aF06OkNvbWJpbmUoJE11cmFub0ZpbGVTaGFyZSwgJ1ByZXJlcXVpc2l0ZXNcU1FMIFNlcnZlclwyMDEyJykKICAgICAgICB9CgogICAgICAgICRFeHRyYU9wdGlvbnMgPSBAe30KCiAgICAgICAgaWYgKCRVcGRhdGVFbmFibGVkKSB7CiAgICAgICAgICAgICRFeHRyYU9wdGlvbnMgKz0gQHsnVXBkYXRlRW5hYmxlZCcgPSAkdHJ1ZX0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRFeHRyYU9wdGlvbnMgKz0gQHsnVXBkYXRlRW5hYmxlZCcgPSAkZmFsc2V9CiAgICAgICAgfQoKICAgICAgICBOZXctU1FMU2VydmVyRm9yQU9BRyBgCiAgICAgICAgICAgIC1TZXR1cFJvb3QgJFNldHVwUm9vdCBgCiAgICAgICAgICAgIC1TUUxTdmNVc3JEb21haW4gJFNRTFNlcnZpY2VVc2VyRG9tYWluIGAKICAgICAgICAgICAgLVNRTFN2Y1Vzck5hbWUgJFNRTFNlcnZpY2VVc2VyTmFtZSBgCiAgICAgICAgICAgIC1TUUxTdmNVc3JQYXNzd29yZCAkU1FMU2VydmljZVVzZXJQYXNzd29yZCBgCiAgICAgICAgICAgIC1FeHRyYU9wdGlvbnMgJEV4dHJhT3B0aW9ucwogICAgfQp9CgoKCmZ1bmN0aW9uIEluaXRpYWxpemUtQWx3YXlzT25BdmFpbGFiaWxpdHlHcm91cCB7CiAgICBwYXJhbSAoCiAgICAgICAgW1N0cmluZ10gJERvbWFpbk5hbWUsCiAgICAgICAgW1N0cmluZ10gJERvbWFpbkFkbWluQWNjb3VudE5hbWUsCiAgICAgICAgW1N0cmluZ10gJERvbWFpbkFkbWluQWNjb3VudFBhc3N3b3JkLAogICAgICAgIFtTdHJpbmddICRTcWxTZXJ2aWNlQWNjb3VudE5hbWUsCiAgICAgICAgW1N0cmluZ10gJFByaW1hcnlOb2RlLAogICAgICAgIFtTdHJpbmddICRTaGFyZU5hbWUgPSAnU2hhcmVkV29ya0RpcicKICAgICkKICAgIGJlZ2luIHsKICAgICAgICBTaG93LUludm9jYXRpb25JbmZvICRNeUludm9jYXRpb24KICAgIH0KICAgIGVuZCB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uIC1FbmQKICAgIH0KICAgIHByb2Nlc3MgewogICAgICAgIHRyYXAgewogICAgICAgICAgICAmJFRyYXBIYW5kbGVyCiAgICAgICAgfQoKICAgICAgICAkU2hhcmVOZXR3b3JrUGF0aCA9ICdcXCcgKyAkUHJpbWFyeU5vZGUgKyAnXCcgKyAkU2hhcmVOYW1lCgogICAgICAgICREb21haW5BZG1pbkFjY291bnRDcmVkcyA9IE5ldy1DcmVkZW50aWFsIGAKICAgICAgICAgICAgLVVzZXJOYW1lICIkRG9tYWluTmFtZVwkRG9tYWluQWRtaW5BY2NvdW50TmFtZSIgYAogICAgICAgICAgICAtUGFzc3dvcmQgIiREb21haW5BZG1pbkFjY291bnRQYXNzd29yZCIKCiAgICAgICAgJEZ1bmN0aW9uc0ZpbGUgPSBFeHBvcnQtRnVuY3Rpb24gJ0dldC1OZXh0RnJlZVBvcnQnLCAnSW5pdGlhbGl6ZS1BbHdheXNPbicKCiAgICAgICAgU3RhcnQtUG93ZXJTaGVsbFByb2Nlc3MgQCIKdHJhcCB7CiAgICBgJF8KICAgIGV4aXQgMQp9CgpJbXBvcnQtTW9kdWxlIENvcmVGdW5jdGlvbnMKCldyaXRlLUxvZyAiSW1wb3J0aW5nIGZ1bmN0aW9ucyBmaWxlICckRnVuY3Rpb25zRmlsZScgLi4uIgouICIkRnVuY3Rpb25zRmlsZSIKCldyaXRlLUxvZyAiU3RhcnRpbmcgJ0luaXRpYWxpemUtQWx3YXlzT24nIC4uLiIKYCRYbWxGaWxlID0gW0lPLlBhdGhdOjpDb21iaW5lKCIkU2hhcmVOZXR3b3JrUGF0aCIsICJgJChgJEVudjpDb21wdXRlck5hbWUpLnhtbCIpCldyaXRlLUxvZyAiT3V0cHV0IFhNTCBmaWxlIGlzICdgJFhtbEZpbGUnIgpJbml0aWFsaXplLUFsd2F5c09uIHwgRXhwb3J0LUNsaVhtbCAtUGF0aCBgJFhtbEZpbGUKIkAgLUNyZWRlbnRpYWwgJERvbWFpbkFkbWluQWNjb3VudENyZWRzIC1Ob0Jhc2U2NAogICAgfQp9CgoKZnVuY3Rpb24gTmV3LVNoYXJlZEZvbGRlckZvckFPQUcgewogICAgcGFyYW0gKAogICAgICAgICMgKE9QVElPTkFMKQogICAgICAgIFtTdHJpbmddICRTaGFyZVBhdGggPSBbSU8uUGF0aF06OkNvbWJpbmUoJEVudjpTeXN0ZW1Ecml2ZSArICdcJywgJ1NoYXJlZFdvcmtEaXInKSwKCiAgICAgICAgIyAoT1BUSU9OQUwpCiAgICAgICAgW1N0cmluZ10gJFNoYXJlTmFtZSA9ICdTaGFyZWRXb3JrRGlyJywKCiAgICAgICAgW1N0cmluZ10gJFByaW1hcnlOb2RlID0gJyAnCiAgICApCiAgICBiZWdpbiB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uCiAgICB9CiAgICBlbmQgewogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbiAtRW5kCiAgICB9CiAgICBwcm9jZXNzIHsKICAgICAgICB0cmFwIHsKICAgICAgICAgICAgJiRUcmFwSGFuZGxlcgogICAgICAgIH0KCiAgICAgICAgaWYgKCRQcmltYXJ5Tm9kZS5Ub0xvd2VyKCkgLW5lICgkRW52OkNvbXB1dGVyTmFtZSkuVG9Mb3dlcigpKSB7CiAgICAgICAgICAgIFdyaXRlLUxvZyAiVGhpcyBzY3JpcHQgcnVucyBvbiBwcmltYXJ5IG5vZGUgb25seS4iCiAgICAgICAgICAgIFdyaXRlLUxvZyAiRXhpdGluZyBzY3JpcHQuIgogICAgICAgICAgICByZXR1cm4KICAgICAgICB9CgogICAgICAgIGlmICgkU2hhcmVOYW1lIC1lcSAnJykgewogICAgICAgICAgICAkU2hhcmVOYW1lID0gW0lPLlBhdGhdOjpHZXRGaWxlTmFtZVdpdGhvdXRFeHRlbnNpb24oJFNoYXJlUGF0aCkKICAgICAgICB9CgogICAgICAgIFdyaXRlLUxvZ0RlYnVnICJTaGFyZVBhdGggPSAnJFNoYXJlUGF0aCciCiAgICAgICAgV3JpdGUtTG9nRGVidWcgIlNoYXJlTmFtZSA9ICckU2hhcmVOYW1lJyIKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgV3JpdGUtTG9nRGVidWcgIlRyeWluZyB0byByZW1vdmUgc2hhcmUgJyRTaGFyZU5hbWUnIgogICAgICAgICAgICAkbnVsbCA9IEdldC1TbWJTaGFyZSAtTmFtZSAkU2hhcmVOYW1lIC1FcnJvckFjdGlvbiAnU3RvcCcKICAgICAgICAgICAgUmVtb3ZlLVNtYlNoYXJlIC1OYW1lICRTaGFyZU5hbWUgLUZvcmNlCiAgICAgICAgICAgIHdyaXRlLUxvZyAiU2hhcmUgJyRTaGFyZU5hbWUnIHJlbW92ZWQuIgogICAgICAgIH0KICAgICAgICBjYXRjaCB7CiAgICAgICAgICAgIFdyaXRlLUxvZ1dhcm5pbmcgIlNoYXJlICckU2hhcmVOYW1lJyBub3QgZXhpc3RzIG9yIGNhbm5vdCBiZSBkZWxldGVkLiIKICAgICAgICB9CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFdyaXRlLUxvZ0RlYnVnICJUcnlpbmcgdG8gcmVtb3ZlIGZvbGRlciAnJFNoYXJlUGF0aCIKICAgICAgICAgICAgJG51bGwgPSBHZXQtSXRlbSAtUGF0aCAkU2hhcmVQYXRoIC1FcnJvckFjdGlvbiAnU3RvcCcKICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLVBhdGggJFNoYXJlUGF0aCAtUmVjdXJzZSAtRm9yY2UKICAgICAgICAgICAgV3JpdGUtTG9nICJGb2xkZXIgJyRTaGFyZVBhdGgnIHJlbW92ZWQuIgogICAgICAgIH0KICAgICAgICBjYXRjaCB7CiAgICAgICAgICAgIFdyaXRlLUxvZ1dhcm5pbmcgIkZvbGRlciAnJFNoYXJlUGF0aCcgbm90IGV4aXN0cyBvciBjYW5ub3QgYmUgZGVsZXRlZC4iCiAgICAgICAgfQoKICAgICAgICAkbnVsbCA9IE5ldy1JdGVtIC1QYXRoICRTaGFyZVBhdGggLUl0ZW1UeXBlIENvbnRhaW5lciAtRm9yY2UKICAgICAgICAgICAgICAgIAogICAgICAgICRudWxsID0gTmV3LVNtYlNoYXJlIC1QYXRoICRTaGFyZVBhdGggYAogICAgICAgICAgICAtTmFtZSAkU2hhcmVOYW1lIGAKICAgICAgICAgICAgLUZ1bGxBY2Nlc3MgIkV2ZXJ5b25lIiBgCiAgICAgICAgICAgIC1EZXNjcmlwdGlvbiAiU2hhcmVkIGZvbGRlciBmb3IgQWx3YXlzT24gQXZhaWxhYmlsaXR5IEdyb3VwIHNldHVwLiIKCiAgICAgICAgcmV0dXJuICdcXCcgKyAkRW52OkNvbXB1dGVyTmFtZSArICdcJyArICRTaGFyZU5hbWUKICAgIH0KfQoKCgpmdW5jdGlvbiBOZXctRGF0YWJhc2VGb3JBT0FHIHsKICAgIHBhcmFtICgKICAgICAgICBbU3RyaW5nXSAkRGF0YWJhc2VOYW1lLAogICAgICAgIFtTdHJpbmddICREb21haW5OYW1lLAogICAgICAgIFtTdHJpbmddICRVc2VyTmFtZSwKICAgICAgICBbU3RyaW5nXSAkVXNlclBhc3N3b3JkCiAgICApCgogICAgJENyZWRzID0gTmV3LUNyZWRlbnRpYWwgLVVzZXJOYW1lICIkRG9tYWluTmFtZVwkVXNlck5hbWUiIC1QYXNzd29yZCAiJFVzZXJQYXNzd29yZCIKCiAgICAkRnVuY3Rpb25zRmlsZSA9IEV4cG9ydC1GdW5jdGlvbiAnSW52b2tlLVNRTFRleHQnLCAnQ29udmVydFRvLVNRTE5hbWUnLCAnQ29udmVydFRvLVNRTFN0cmluZycsICdOZXctU1FMRGF0YWJhc2UnCgogICAgU3RhcnQtUG93ZXJTaGVsbFByb2Nlc3MgQCIKdHJhcCB7CiAgICBgJF8KICAgIGV4aXQgMQp9CgpJbXBvcnQtTW9kdWxlIENvcmVGdW5jdGlvbnMKCldyaXRlLUxvZyAiSW1wb3J0aW5nIGZ1bmN0aW9ucyBmcm9tIGZpbGUgJyRGdW5jdGlvbnNGaWxlJyAuLi4iCi4gIiRGdW5jdGlvbnNGaWxlIgoKV3JpdGUtTG9nICJTdGFydGluZyAnTmV3LVNRTERhdGFiYXNlJyAuLi4iCk5ldy1TUUxEYXRhYmFzZSAkRGF0YWJhc2VOYW1lCiJAIC1DcmVkZW50aWFsICRDcmVkcyAtTm9CYXNlNjQKfQoKCgpmdW5jdGlvbiBJbml0aWFsaXplLUFPQUdQcmltYXJ5UmVwbGljYSB7CiAgICBwYXJhbSAoCiAgICAgICAgIyAoT1BUSU9OQUwpIE5hbWUgb2YgdGhlIG5ldyBBdmFpbGFiaWxpdHkgR3JvdXAuIElmIG5vdCBzcGVjaWZpZWQgdGhlbiBkZWZhdWx0IG5hbWUgd2lsbCBiZSB1c2VkLgogICAgICAgIFtTdHJpbmddICRHcm91cE5hbWUgPSAnTXVyYW5vQUcnLAoKICAgICAgICAjIChSRVFVSVJFRCkgTm9kZXMgdGhhdCB3aWxsIGJlIGNvbmZpZ3VyZWQgYXMgcmVwbGljYSBwYXJ0bmVycy4KICAgICAgICAjW1BhcmFtZXRlcihNYW5kYXRvcnk9JHRydWUpXQogICAgICAgIFtTdHJpbmdbXV0gJE5vZGVMaXN0LAoKICAgICAgICAjIChSRVFVSVJFRCkgTm9kZSBuYW1lIHRoYXQgd2lsbCBiZSBwcmltYXJ5IGZvciBzZWxlY3RlZCBBdmFpbGFiaWxpdHkgR3JvdXAKICAgICAgICAjW1BhcmFtZXRlcihNYW5kYXRvcnk9JHRydWUpXQogICAgICAgIFtTdHJpbmddICRQcmltYXJ5Tm9kZSwKCiAgICAgICAgIyAoUkVRVUlSRUQpIERhdGFiYXNlIGxpc3QgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBBdmFpbGFiaWxpdHkgR3JvdXAKICAgICAgICAjW1BhcmFtZXRlcihNYW5kYXRvcnk9JHRydWUpXQogICAgICAgIFtTdHJpbmdbXV0gJERhdGFiYXNlTGlzdCwKCiAgICAgICAgIyAoUkVRVUlSRUQpIExpc3RlbmVyIG5hbWUgdGhhdCB3aWxsIGJlIHVzZWQgYnkgY2xpZW50cyB0byBjb25uZWN0IHRvIGRhdGFiYXNlcyBpbiB0aGF0IEFHCiAgICAgICAgI1tQYXJhbWV0ZXIoTWFuZGF0b3J5PSR0cnVlKV0KICAgICAgICBbU3RyaW5nXSAkTGlzdGVuZXJOYW1lID0gJ011cmFub0FHX0xpc3RlbmVyJywKCiAgICAgICAgIyAoUkVRVUlSRUQpIElQIGFkZHJlc3Mgb2YgdGhlIGxpc3RlbmVyCiAgICAgICAgI1tQYXJhbWV0ZXIoTWFuZGF0b3J5PSR0cnVlKV0KICAgICAgICBbU3RyaW5nXSAkTGlzdGVuZXJJUCwKCiAgICAgICAgW1N0cmluZ10gJExpc3RlbmVySVBNYXNrID0gJzI1NS4yNTUuMjU1LjAnLAoKICAgICAgICBbU3RyaW5nXSAkTGlzdGVuZXJQb3J0ID0gJzUwMjMnLAoKICAgICAgICAjIFN5bmMgTW9kZSBOb2RlIExpc3QKICAgICAgICBbU3RyaW5nW11dICRTeW5jTW9kZU5vZGVMaXN0LAoKICAgICAgICBbU3RyaW5nXSAkU2hhcmVkV29ya0RpciA9ICdTaGFyZWRXb3JrRGlyJywKCiAgICAgICAgW1N0cmluZ10gJENsaVhtbEZpbGUgPSAnJywKCiAgICAgICAgW1N0cmluZ10gJERvbWFpbk5hbWUsCiAgICAgICAgW1N0cmluZ10gJFVzZXJOYW1lLAogICAgICAgIFtTdHJpbmddICRVc2VyUGFzc3dvcmQKICAgICkKICAgIGJlZ2luIHsKICAgICAgICBTaG93LUludm9jYXRpb25JbmZvICRNeUludm9jYXRpb24KICAgIH0KICAgIGVuZCB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uIC1FbmQKICAgIH0KICAgIHByb2Nlc3MgewogICAgICAgIHRyYXAgewogICAgICAgICAgICAmJFRyYXBIYW5kbGVyCiAgICAgICAgfQoKICAgICAgICBXcml0ZS1Mb2cgIlByaW1hcnkgbm9kZTogJyQoJFByaW1hcnlOb2RlLlRvTG93ZXIoKSknIgogICAgICAgIFdyaXRlLUxvZyAiQ3VycmVudCBub2RlOiAnJCgoJEVudjpDb21wdXRlck5hbWUpLlRvTG93ZXIoKSknIgoKICAgICAgICBpZiAoJFByaW1hcnlOb2RlLlRvTG93ZXIoKSAtbmUgJCgkRW52OkNvbXB1dGVyTmFtZSkuVG9Mb3dlcigpKSB7CiAgICAgICAgICAgIFdyaXRlLUxvZyAiVGhpcyBmdW5jdGlvbiB3b3JrcyBvbiBQcmltYXJ5Tm9kZSBvbmx5LiIKICAgICAgICAgICAgV3JpdGUtTG9nICJFeGl0aW5nLiIKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgfQoKICAgICAgICBpZiAoJENsaVhtbEZpbGUgLWVxICcnKSB7CiAgICAgICAgICAgICRSZXBsaWNhRGVmaW5pdGlvbkxpc3QgPSBAKCkKICAgICAgICAgICAgZm9yZWFjaCAoJE5vZGUgaW4gJE5vZGVMaXN0KSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICROb2RlRW5kcG9pbnRQb3J0ID0gSW1wb3J0LUNsaVhtbCAtUGF0aCAiXFwkUHJpbWFyeU5vZGVcU2hhcmVkV29ya0RpclwkTm9kZS54bWwiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaCB7CiAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nICJVc2luZyBkZWZhdWx0IGVuZHBvaW50IHBvcnQgNTAyMiIKICAgICAgICAgICAgICAgICAgICAkTm9kZUVuZHBvaW50UG9ydCA9IDUwMjIKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkUmVwbGljYURlZmluaXRpb24gPSBAewogICAgICAgICAgICAgICAgICAgICJTRVJWRVJfSU5TVEFOQ0UiID0gIiROb2RlIjsKICAgICAgICAgICAgICAgICAgICAiRU5EUE9JTlRfVVJMIiA9ICJUQ1A6Ly8ke05vZGV9OiR7Tm9kZUVuZHBvaW50UG9ydH0iOwogICAgICAgICAgICAgICAgICAgICJBVkFJTEFCSUxJVFlfTU9ERSIgPSAiQVNZTkNIUk9OT1VTX0NPTU1JVCI7CiAgICAgICAgICAgICAgICAgICAgIkZBSUxPVkVSX01PREUiPSJNQU5VQUwiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkU3luY01vZGVOb2RlTGlzdCAtY29udGFpbnMgJE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2cgIiROb2RlIGlzIGluIFN5bmNNb2RlTm9kZUxpc3QiCiAgICAgICAgICAgICAgICAgICAgJFJlcGxpY2FEZWZpbml0aW9uWydBVkFJTEFCSUxJVFlfTU9ERSddID0gIlNZTkNIUk9OT1VTX0NPTU1JVCIKICAgICAgICAgICAgICAgICAgICAkUmVwbGljYURlZmluaXRpb25bJ0ZBSUxPVkVSX01PREUnXSA9ICJBVVRPTUFUSUMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2cgIiROb2RlIGlzIE5PVCBpbiBTeW5jTW9kZU5vZGVMaXN0IgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRSZXBsaWNhRGVmaW5pdGlvbkxpc3QgKz0gQCgkUmVwbGljYURlZmluaXRpb24pCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRQcmVmZXJlbmNlcyA9IEB7fQoKICAgICAgICAgICAgJExpc3RlbmVyRGVmaW5pdGlvbiA9IEB7CiAgICAgICAgICAgICAgICAiTkFNRSI9JExpc3RlbmVyTmFtZTsKICAgICAgICAgICAgICAgICJQT1JUIiA9ICIkTGlzdGVuZXJQb3J0IjsKICAgICAgICAgICAgICAgICJTVEFUSUMiID0gIiRMaXN0ZW5lcklQLyRMaXN0ZW5lcklQTWFzayIKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFBhcmFtZXRlcnMgPSBAewogICAgICAgICAgICAgICAgJ1dvcmtEaXInID0gIlxcJFByaW1hcnlOb2RlXCRTaGFyZWRXb3JrRGlyIjsKICAgICAgICAgICAgICAgICdOYW1lJyA9ICRHcm91cE5hbWU7CiAgICAgICAgICAgICAgICAnRGF0YWJhc2VOYW1lcycgPSAkRGF0YWJhc2VMaXN0OwogICAgICAgICAgICAgICAgJ1JlcGxpY2FEZWZzJyA9ICRSZXBsaWNhRGVmaW5pdGlvbkxpc3Q7CiAgICAgICAgICAgICAgICAnUHJlZmVyZW5jZXMnID0gJFByZWZlcmVuY2VzOwogICAgICAgICAgICAgICAgJ0xpc3RlbmVyRGVmJyA9ICRMaXN0ZW5lckRlZmluaXRpb247CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1QYXRoICJcXCRQcmltYXJ5Tm9kZVxTaGFyZWRXb3JrRGlyXCoiIC1Gb3JjZQoKICAgICAgICAgICAgJENsaVhtbEZpbGUgPSBbSU8uUGF0aF06OkdldFRlbXBGaWxlTmFtZSgpCgogICAgICAgICAgICBXcml0ZS1Mb2dEZWJ1ZyAiQ2xpWG1sIGZpbGU6ICckQ2xpWG1sRmlsZSciCgogICAgICAgICAgICBFeHBvcnQtQ2xpWG1sIC1QYXRoICRDbGlYbWxGaWxlIC1JbnB1dE9iamVjdCAkUGFyYW1ldGVycyAtRGVwdGggMTAKCiAgICAgICAgICAgIEluaXRpYWxpemUtQU9BR1ByaW1hcnlSZXBsaWNhIGAKICAgICAgICAgICAgICAgIC1DbGlYbWxGaWxlICRDbGlYbWxGaWxlIGAKICAgICAgICAgICAgICAgIC1Eb21haW5OYW1lICREb21haW5OYW1lIGAKICAgICAgICAgICAgICAgIC1Vc2VyTmFtZSAkVXNlck5hbWUgYAogICAgICAgICAgICAgICAgLVVzZXJQYXNzd29yZCAkVXNlclBhc3N3b3JkIGAKICAgICAgICAgICAgICAgIC1QcmltYXJ5Tm9kZSAkUHJpbWFyeU5vZGUKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRDcmVkcyA9IE5ldy1DcmVkZW50aWFsIC1Vc2VyTmFtZSAiJERvbWFpbk5hbWVcJFVzZXJOYW1lIiAtUGFzc3dvcmQgIiRVc2VyUGFzc3dvcmQiCgogICAgICAgICAgICAkRnVuY3Rpb25zRmlsZSA9IEV4cG9ydC1GdW5jdGlvbiAtQWxsCgogICAgICAgICAgICBTdGFydC1Qb3dlclNoZWxsUHJvY2VzcyBAIgp0cmFwIHsKICAgIGAkXwogICAgZXhpdCAxCn0KCkltcG9ydC1Nb2R1bGUgQ29yZUZ1bmN0aW9ucwoKV3JpdGUtTG9nICJJbXBvcnRpbmcgZnVuY3Rpb25zIGZyb20gJyRGdW5jdGlvbnNGaWxlJyAuLi4iCi4gIiRGdW5jdGlvbnNGaWxlIgoKV3JpdGUtTG9nICJJbXBvcnRpbmcgQ2xpWG1sIHBhcmFtZXRlcnMgZmlsZSAuLi4iCmAkUGFyYW1ldGVycyA9IEltcG9ydC1DbGlYbWwgLVBhdGggJENsaVhtbEZpbGUKCldyaXRlLUxvZyAiU3RhcnRpbmcgJ05ldy1BbHdheXNPbkF2YWlsYWJpbGl0eUdyb3VwJyAuLi4iCk5ldy1BbHdheXNPbkF2YWlsYWJpbGl0eUdyb3VwIGBgCiAgICAtV29ya0RpciBgJFBhcmFtZXRlcnNbJ1dvcmtEaXInXSBgYAogICAgLU5hbWUgYCRQYXJhbWV0ZXJzWydOYW1lJ10gYGAKICAgIC1EYXRhYmFzZU5hbWVzIGAkUGFyYW1ldGVyc1snRGF0YWJhc2VOYW1lcyddIGBgCiAgICAtUmVwbGljYURlZnMgYCRQYXJhbWV0ZXJzWydSZXBsaWNhRGVmcyddIGBgCiAgICAtUHJlZmVyZW5jZXMgYCRQYXJhbWV0ZXJzWydQcmVmZXJlbmNlcyddIGBgCiAgICAtTGlzdGVuZXJEZWYgYCRQYXJhbWV0ZXJzWydMaXN0ZW5lckRlZiddCiJAIC1DcmVkZW50aWFsICRDcmVkcyAtTm9CYXNlNjQKICAgICAgICB9CiAgICB9Cn0KCgoKZnVuY3Rpb24gSW5pdGlhbGl6ZS1BT0FHU2Vjb25kYXJ5UmVwbGljYSB7CiAgICBwYXJhbSAoCiAgICAgICAgIyAoUkVRVUlSRUQpIE5vZGVzIHRoYXQgd2lsbCBiZSBjb25maWd1cmVkIGFzIHJlcGxpY2EgcGFydG5lcnMuCiAgICAgICAgW1BhcmFtZXRlcihNYW5kYXRvcnk9JHRydWUpXQogICAgICAgIFtTdHJpbmdbXV0gJE5vZGVMaXN0LAoKICAgICAgICAjIChSRVFVSVJFRCkgTm9kZSBuYW1lIHRoYXQgd2lsbCBiZSBwcmltYXJ5IGZvciBzZWxlY3RlZCBBdmFpbGFiaWxpdHkgR3JvdXAKICAgICAgICBbUGFyYW1ldGVyKE1hbmRhdG9yeT0kdHJ1ZSldCiAgICAgICAgW1N0cmluZ10gJFByaW1hcnlOb2RlLAoKICAgICAgICBbU3RyaW5nXSAkU2hhcmVkV29ya0RpciA9ICdTaGFyZWRXb3JrRGlyJywKCiAgICAgICAgW1N0cmluZ10gJERvbWFpbk5hbWUsCiAgICAgICAgW1N0cmluZ10gJFVzZXJOYW1lLAogICAgICAgIFtTdHJpbmddICRVc2VyUGFzc3dvcmQKICAgICkgCiAgICBiZWdpbiB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uCiAgICB9CiAgICBlbmQgewogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbiAtRW5kCiAgICB9CiAgICBwcm9jZXNzIHsKICAgICAgICB0cmFwIHsKICAgICAgICAgICAgJiRUcmFwSGFuZGxlcgogICAgICAgIH0KCiAgICAgICAgaWYgKCRQcmltYXJ5Tm9kZS5Ub0xvd2VyKCkgLWVxICgkRW52OkNvbXB1dGVyTmFtZSkuVG9Mb3dlcigpKSB7CiAgICAgICAgICAgIFdyaXRlLUxvZyAiVGhpcyBmdW5jdGlvbiB3b3JrcyBvbiBhbnkgU2Vjb25kYXJ5Tm9kZSBvbmx5LiIKICAgICAgICAgICAgV3JpdGUtTG9nICJFeGl0aW5nLiIKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgfQoKICAgICAgICAkQ3JlZHMgPSBOZXctQ3JlZGVudGlhbCAtVXNlck5hbWUgIiREb21haW5OYW1lXCRVc2VyTmFtZSIgLVBhc3N3b3JkICIkVXNlclBhc3N3b3JkIgoKICAgICAgICAkRnVuY3Rpb25zRmlsZSA9IEV4cG9ydC1GdW5jdGlvbiAtQWxsCgogICAgICAgIFN0YXJ0LVBvd2VyU2hlbGxQcm9jZXNzIEAiCnRyYXAgewogICAgJF8KICAgIGV4aXQgMQp9CgpJbXBvcnQtTW9kdWxlIENvcmVGdW5jdGlvbnMKCldyaXRlLUxvZyAiSW1wb3J0aW5nIGZ1bmN0aW9ucyBmcm9tICckRnVuY3Rpb25zRmlsZScgLi4uIgouICIkRnVuY3Rpb25zRmlsZSIKCldyaXRlLUxvZyAiU3RhcnRpbmcgJ05ldy1BbHdheXNPbkF2YWlsYWJpbGl0eUdyb3VwUmVwbGljYScgLi4uIgpOZXctQWx3YXlzT25BdmFpbGFiaWxpdHlHcm91cFJlcGxpY2EgLVdvcmtEaXIgIlxcJFByaW1hcnlOb2RlXCRTaGFyZWRXb3JrRGlyIgoiQCAtQ3JlZGVudGlhbCAkQ3JlZHMgLU5vQmFzZTY0CiAgICB9Cn0KCgoKZnVuY3Rpb24gRGlzYWJsZS1GaXJld2FsbCB7CiAgICBiZWdpbiB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uCiAgICB9CiAgICBlbmQgewogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbiAtRW5kCiAgICB9CiAgICBwcm9jZXNzIHsKICAgICAgICB0cmFwIHsKICAgICAgICAgICAgJiRUcmFwSGFuZGxlcgogICAgICAgIH0KCiAgICAgICAgbmV0c2ggYWR2ZmlyZXdhbGwgc2V0IGFsbHByb2ZpbGVzIHN0YXRlIG9mZgogICAgfQp9CgoKCmZ1bmN0aW9uIEVuYWJsZS1GaXJld2FsbCB7CiAgICBiZWdpbiB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uCiAgICB9CiAgICBlbmQgewogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbiAtRW5kCiAgICB9CiAgICBwcm9jZXNzIHsKICAgICAgICB0cmFwIHsKICAgICAgICAgICAgJiRUcmFwSGFuZGxlcgogICAgICAgIH0KCiAgICAgICAgbmV0c2ggYWR2ZmlyZXdhbGwgc2V0IGFsbHByb2ZpbGVzIHN0YXRlIG9uCiAgICB9Cn0KCgoKZnVuY3Rpb24gRW5hYmxlLVRydXN0ZWRIb3N0cyB7CiAgICBiZWdpbiB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uCiAgICB9CiAgICBlbmQgewogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbiAtRW5kCiAgICB9CiAgICBwcm9jZXNzIHsKICAgICAgICB0cmFwIHsKICAgICAgICAgICAgJiRUcmFwSGFuZGxlcgogICAgICAgIH0KCiAgICAgICAgU2V0LUl0ZW0gV1NNYW46XGxvY2FsaG9zdFxDbGllbnRcVHJ1c3RlZEhvc3RzIC1WYWx1ZSAnKicgLUZvcmNlCiAgICB9Cn0K",
"CmZ1bmN0aW9uIE5ldy1TcWxTZXJ2ZXJTeXN0ZW1BY2NvdW50IHsKICAgIHBhcmFtICgKICAgICAgICAjIChSRVFVSVJFRCkgRG9tYWluIE5hbWUKICAgICAgICBbUGFyYW1ldGVyKE1hbmRhdG9yeT0kdHJ1ZSldCiAgICAgICAgW1N0cmluZ10gJERvbWFpbk5hbWUsCgogICAgICAgICMgKFJFUVVJUkVEKSBVc2VyIG5hbWUgd2hvIGhhcyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIG1vZGlmeSB1c2VyUGFzc3dvcmQKICAgICAgICAjIFVzdWFsbHkgdGhpcyBpcyB0aGUgZG9tYWluIGFkbWluaXN0cmF0b3IgJyRkb21haW5OYW1lXEFkbWluaXN0cmF0b3InIGFjY291bnQKICAgICAgICBbUGFyYW1ldGVyKE1hbmRhdG9yeT0kdHJ1ZSldCiAgICAgICAgW1N0cmluZ10gJFVzZXJOYW1lLAoKICAgICAgICAjIChSRVFVSVJFRCkgUGFzc3dvcmQgZm9yIHRoYXQgdXNlcgogICAgICAgIFtQYXJhbWV0ZXIoTWFuZGF0b3J5PSR0cnVlKV0KICAgICAgICBbU3RyaW5nXSAkVXNlclBhc3N3b3JkLAoKICAgICAgICAjIChSRVFVSVJFRCkgVXNlciBuYW1lIGZvciBhIG5ldyBhY2NvdW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJ1biBTUUwgU2VydmVyCiAgICAgICAgW1BhcmFtZXRlcihNYW5kYXRvcnk9JHRydWUpXQogICAgICAgIFtTdHJpbmddICRTUUxTZXJ2aWNlVXNlck5hbWUsCgogICAgICAgICMgKFJFUVVJUkVEKSBQYXNzd29yZCBmb3IgdGhhdCB1c2VyCiAgICAgICAgW1BhcmFtZXRlcihNYW5kYXRvcnk9JHRydWUpXQogICAgICAgIFtTdHJpbmddICRTUUxTZXJ2aWNlVXNlclBhc3N3b3JkLAoKICAgICAgICBbU3RyaW5nXSAkUHJpbWFyeU5vZGUgPSAnICcKICAgICkKICAgIGJlZ2luIHsKICAgICAgICBTaG93LUludm9jYXRpb25JbmZvICRNeUludm9jYXRpb24KICAgIH0KICAgIGVuZCB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uIC1FbmQKICAgIH0KICAgIHByb2Nlc3MgewogICAgICAgIHRyYXAgewogICAgICAgICAgICAmJFRyYXBIYW5kbGVyCiAgICAgICAgfQoKICAgICAgICBpZiAoJFByaW1hcnlOb2RlLlRvTG93ZXIoKSAtbmUgKCRFbnY6Q29tcHV0ZXJOYW1lKS5Ub0xvd2VyKCkpIHsKICAgICAgICAgICAgV3JpdGUtTG9nICJUSGlzIGZ1bmN0aW9uIHJ1bnMgb24gQU9BRyBwcmltYXJ5IG5vZGUgb25seS4iCiAgICAgICAgICAgIFdyaXRlLUxvZyAiRXhpdGluZy4iCiAgICAgICAgICAgIHJldHVybgogICAgICAgIH0KCiAgICAgICAgV3JpdGUtTG9nICJJbnN0YWxsaW5nICdSU0FULUFELVBvd2VyU2hlbGwnIC4uLiAiCiAgICAgICAgQWRkLVdpbmRvd3NGZWF0dXJlIFJTQVQtQUQtUG93ZXJTaGVsbAoKICAgICAgICBJbXBvcnQtTW9kdWxlIEFjdGl2ZURpcmVjdG9yeQoKICAgICAgICAkQ3JlZHMgPSBOZXctQ3JlZGVudGlhbCAtVXNlck5hbWUgIiREb21haW5OYW1lXCRVc2VyTmFtZSIgLVBhc3N3b3JkICIkVXNlclBhc3N3b3JkIgoKICAgICAgICBXcml0ZS1Mb2cgIkFkZGluZyBuZXcgdXNlciAuLi4iCiAgICAgICAgJG51bGwgPSBOZXctQURVc2VyIGAKICAgICAgICAgICAgLU5hbWUgJFNRTFNlcnZpY2VVc2VyTmFtZSBgCiAgICAgICAgICAgIC1BY2NvdW50UGFzc3dvcmQgJChDb252ZXJ0VG8tU2VjdXJlU3RyaW5nIC1TdHJpbmcgJFNRTFNlcnZpY2VVc2VyUGFzc3dvcmQgLUFzUGxhaW5UZXh0IC1Gb3JjZSkgYAogICAgICAgICAgICAtQ3JlZGVudGlhbCAkQ3JlZHMgYAogICAgICAgICAgICAtRXJyb3JBY3Rpb24gJ1N0b3AnCiAgICB9Cn0K"
]
}