NFT Smart Contract

Words
1
Reading
1 min
Listen
Play
5y

{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntpZighMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cygibmZ0cyIpKXthd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoIm5mdHMiLFsic3ltYm9sIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicGFyYW1zIiksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsWyJzeW1ib2wiLCJjb21wbGV0ZVRpbWVzdGFtcCJdKTtjb25zdCBwYXJhbXM9e25mdENyZWF0aW9uRmVlOiIxMDAiLG5mdElzc3VhbmNlRmVlOnsiQkVFIjoiMC4wMDEiLFBBTDoiMC4wMDEifSxkYXRhUHJvcGVydHlDcmVhdGlvbkZlZToiMTAwIixlbmFibGVEZWxlZ2F0aW9uRmVlOiIxMDAwIn07YXdhaXQgYXBpLmRiLmluc2VydCgicGFyYW1zIixwYXJhbXMpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgcGF5bG9hZD0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2NvbnN0e25mdENyZWF0aW9uRmVlOm5mdENyZWF0aW9uRmVlLG5mdElzc3VhbmNlRmVlOm5mdElzc3VhbmNlRmVlLGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlLGVuYWJsZURlbGVnYXRpb25GZWU6ZW5hYmxlRGVsZWdhdGlvbkZlZX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO25mdENyZWF0aW9uRmVlJiYic3RyaW5nIj09dHlwZW9mIG5mdENyZWF0aW9uRmVlJiYhYXBpLkJpZ051bWJlcihuZnRDcmVhdGlvbkZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihuZnRDcmVhdGlvbkZlZSkuZ3RlKDApJiYocGFyYW1zLm5mdENyZWF0aW9uRmVlPW5mdENyZWF0aW9uRmVlKSxuZnRJc3N1YW5jZUZlZSYmIm9iamVjdCI9PXR5cGVvZiBuZnRJc3N1YW5jZUZlZSYmKHBhcmFtcy5uZnRJc3N1YW5jZUZlZT1uZnRJc3N1YW5jZUZlZSksZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUmJiJzdHJpbmciPT10eXBlb2YgZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUmJiFhcGkuQmlnTnVtYmVyKGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlKS5ndGUoMCkmJihwYXJhbXMuZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU9ZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUpLGVuYWJsZURlbGVnYXRpb25GZWUmJiJzdHJpbmciPT10eXBlb2YgZW5hYmxlRGVsZWdhdGlvbkZlZSYmIWFwaS5CaWdOdW1iZXIoZW5hYmxlRGVsZWdhdGlvbkZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihlbmFibGVEZWxlZ2F0aW9uRmVlKS5ndGUoMCkmJihwYXJhbXMuZW5hYmxlRGVsZWdhdGlvbkZlZT1lbmFibGVEZWxlZ2F0aW9uRmVlKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwYXJhbXMiLHBhcmFtcyl9O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShyZXN1bHQsZnJvbSx0byxzeW1ib2wscXVhbnRpdHksZXZlbnRTdHIpPT4hKHZvaWQgMCE9PXJlc3VsdC5lcnJvcnN8fCFyZXN1bHQuZXZlbnRzfHx2b2lkIDA9PT1yZXN1bHQuZXZlbnRzLmZpbmQoZWw9PiJ0b2tlbnMiPT09ZWwuY29udHJhY3QmJmVsLmV2ZW50PT09ZXZlbnRTdHImJmVsLmRhdGEuZnJvbT09PWZyb20mJmVsLmRhdGEudG89PT10byYmZWwuZGF0YS5xdWFudGl0eT09PXF1YW50aXR5JiZlbC5kYXRhLnN5bWJvbD09PXN5bWJvbCkpLGNhbGN1bGF0ZUJhbGFuY2U9KGJhbGFuY2UscXVhbnRpdHkscHJlY2lzaW9uLGFkZCk9PmFkZD9hcGkuQmlnTnVtYmVyKGJhbGFuY2UpLnBsdXMocXVhbnRpdHkpLnRvRml4ZWQocHJlY2lzaW9uKTphcGkuQmlnTnVtYmVyKGJhbGFuY2UpLm1pbnVzKHF1YW50aXR5KS50b0ZpeGVkKHByZWNpc2lvbiksY291bnREZWNpbWFscz12YWx1ZT0+YXBpLkJpZ051bWJlcih2YWx1ZSkuZHAoKSxjb250YWluc0R1cGxpY2F0ZXM9YXJyPT5uZXcgU2V0KGFycikuc2l6ZSE9PWFyci5sZW5ndGgsaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoPWFjY291bnQ9PmFjY291bnQubGVuZ3RoPj0zJiZhY2NvdW50Lmxlbmd0aDw9MTYsaXNWYWxpZENvbnRyYWN0TGVuZ3RoPWNvbnRyYWN0PT5jb250cmFjdC5sZW5ndGg+PTMmJmNvbnRyYWN0Lmxlbmd0aDw9NTAsaXNWYWxpZEFjY291bnRzQXJyYXk9YXJyPT57bGV0IHZhbGlkQ29udGVudHM9ITA7cmV0dXJuIGFyci5mb3JFYWNoKGFjY291bnQ9Pnsic3RyaW5nIj09dHlwZW9mIGFjY291bnQmJmlzVmFsaWRIaXZlQWNjb3VudExlbmd0aChhY2NvdW50KXx8KHZhbGlkQ29udGVudHM9ITEpfSksdmFsaWRDb250ZW50c30saXNWYWxpZENvbnRyYWN0c0FycmF5PWFycj0+e2xldCB2YWxpZENvbnRlbnRzPSEwO3JldHVybiBhcnIuZm9yRWFjaChjb250cmFjdD0+eyJzdHJpbmciPT10eXBlb2YgY29udHJhY3QmJmlzVmFsaWRDb250cmFjdExlbmd0aChjb250cmFjdCl8fCh2YWxpZENvbnRlbnRzPSExKX0pLHZhbGlkQ29udGVudHN9LGlzVmFsaWREYXRhUHJvcGVydGllcz0oZnJvbSxmcm9tVHlwZSxuZnQscHJvcGVydGllcyk9Pntjb25zdCBwcm9wZXJ0eUNvdW50PU9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmxlbmd0aCxuZnRQcm9wZXJ0eUNvdW50PU9iamVjdC5rZXlzKG5mdC5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQocHJvcGVydHlDb3VudDw9bmZ0UHJvcGVydHlDb3VudCwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IoY29uc3RbbmFtZSxkYXRhXW9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpKXtsZXQgdmFsaWRDb250ZW50cz0hMTtpZihhcGkuYXNzZXJ0KG5hbWUmJiJzdHJpbmciPT10eXBlb2YgbmFtZSYmYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhuYW1lKSYmbmFtZS5sZW5ndGg+MCYmbmFtZS5sZW5ndGg8PTI1LCJpbnZhbGlkIGRhdGEgcHJvcGVydHkgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsImRhdGEgcHJvcGVydHkgbXVzdCBleGlzdCIpKXtjb25zdCBwcm9wZXJ0eVNjaGVtYT1uZnQucHJvcGVydGllc1tuYW1lXTthcGkuYXNzZXJ0KG51bGwhPWRhdGEmJih0eXBlb2YgZGF0YT09PXByb3BlcnR5U2NoZW1hLnR5cGV8fCJudW1iZXIiPT09cHJvcGVydHlTY2hlbWEudHlwZSYmInN0cmluZyI9PXR5cGVvZiBkYXRhJiYhYXBpLkJpZ051bWJlcihkYXRhKS5pc05hTigpKSxgZGF0YSBwcm9wZXJ0eSB0eXBlIG1pc21hdGNoOiBleHBlY3RlZCAke3Byb3BlcnR5U2NoZW1hLnR5cGV9IGJ1dCBnb3QgJHt0eXBlb2YgZGF0YX0gZm9yIHByb3BlcnR5ICR7bmFtZX1gKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIGRhdGF8fGRhdGEubGVuZ3RoPD0xMDAsInN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzIDEwMCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PWZyb21UeXBlJiZwcm9wZXJ0eVNjaGVtYS5hdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cy5pbmNsdWRlcyhmcm9tKXx8InVzZXIiPT09ZnJvbVR5cGUmJnByb3BlcnR5U2NoZW1hLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMuaW5jbHVkZXMoZnJvbSksIm5vdCBhbGxvd2VkIHRvIHNldCBkYXRhIHByb3BlcnRpZXMiKSYmKHZhbGlkQ29udGVudHM9ITAsIm51bWJlciI9PT1wcm9wZXJ0eVNjaGVtYS50eXBlJiYic3RyaW5nIj09dHlwZW9mIGRhdGEmJihwcm9wZXJ0aWVzW25hbWVdPWFwaS5CaWdOdW1iZXIoZGF0YSkudG9OdW1iZXIoKSkpfWlmKCF2YWxpZENvbnRlbnRzKXJldHVybiExfXJldHVybiEwfSxpc1ZhbGlkRGF0YVByb3BlcnRpZXNBcnJheT0oZnJvbSxmcm9tVHlwZSxuZnQsYXJyKT0+e3RyeXtmb3IobGV0IGk9MDtpPGFyci5sZW5ndGg7aSs9MSl7bGV0IHZhbGlkQ29udGVudHM9ITE7Y29uc3R7aWQ6aWQscHJvcGVydGllczpwcm9wZXJ0aWVzfT1hcnJbaV07aWYoYXBpLmFzc2VydChpZCYmInN0cmluZyI9PXR5cGVvZiBpZCYmIWFwaS5CaWdOdW1iZXIoaWQpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoaWQpLmd0KDApJiZwcm9wZXJ0aWVzJiYib2JqZWN0Ij09dHlwZW9mIHByb3BlcnRpZXMsImludmFsaWQgZGF0YSBwcm9wZXJ0aWVzIikmJmlzVmFsaWREYXRhUHJvcGVydGllcyhmcm9tLGZyb21UeXBlLG5mdCxwcm9wZXJ0aWVzKSYmKHZhbGlkQ29udGVudHM9ITApLCF2YWxpZENvbnRlbnRzKXJldHVybiExfX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZE5mdElkQXJyYXk9YXJyPT57dHJ5e2xldCBpbnN0YW5jZUNvdW50PTA7Zm9yKGxldCBpPTA7aTxhcnIubGVuZ3RoO2krPTEpe2xldCB2YWxpZENvbnRlbnRzPSExO2NvbnN0e3N5bWJvbDpzeW1ib2wsaWRzOmlkc309YXJyW2ldO2lmKGFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmYXBpLnZhbGlkYXRvci5pc0FscGhhKHN5bWJvbCkmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2Uoc3ltYm9sKSYmc3ltYm9sLmxlbmd0aD4wJiZzeW1ib2wubGVuZ3RoPD0xMCYmaWRzJiYib2JqZWN0Ij09dHlwZW9mIGlkcyYmQXJyYXkuaXNBcnJheShpZHMpLCJpbnZhbGlkIG5mdCBsaXN0IikmJihpbnN0YW5jZUNvdW50Kz1pZHMubGVuZ3RoLGFwaS5hc3NlcnQoaW5zdGFuY2VDb3VudDw9NTAsImNhbm5vdCBvcGVyYXRlIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSkpe2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXtjb25zdCBpZD1pZHNbal07aWYoIWFwaS5hc3NlcnQoaWQmJiJzdHJpbmciPT10eXBlb2YgaWQmJiFhcGkuQmlnTnVtYmVyKGlkKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGlkKS5ndCgwKSwiaW52YWxpZCBuZnQgbGlzdCIpKXJldHVybiExfXZhbGlkQ29udGVudHM9ITB9aWYoIXZhbGlkQ29udGVudHMpcmV0dXJuITF9fWNhdGNoKGUpe3JldHVybiExfXJldHVybiEwfSxpc1ZhbGlkVG9rZW5CYXNrZXQ9YXN5bmMoYmFza2V0LGJhbGFuY2VUYWJsZU5hbWUsYWNjb3VudE5hbWUsZmVlU3ltYm9sLGZlZVF1YW50aXR5KT0+e3RyeXtpZihPYmplY3Qua2V5cyhiYXNrZXQpLmxlbmd0aD4xMClyZXR1cm4hMTtmb3IoY29uc3Rbc3ltYm9sLHF1YW50aXR5XW9mIE9iamVjdC5lbnRyaWVzKGJhc2tldCkpe2xldCB2YWxpZENvbnRlbnRzPSExO2lmKCJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZhcGkudmFsaWRhdG9yLmlzQWxwaGEoc3ltYm9sKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShzeW1ib2wpJiZzeW1ib2wubGVuZ3RoPjAmJnN5bWJvbC5sZW5ndGg8PTEwKXtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpzeW1ib2x9KTtpZih0b2tlbiYmcXVhbnRpdHkmJiJzdHJpbmciPT10eXBlb2YgcXVhbnRpdHkmJiFhcGkuQmlnTnVtYmVyKHF1YW50aXR5KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHF1YW50aXR5KS5ndCgwKSYmKHZhbHVlPXF1YW50aXR5LGFwaS5CaWdOdW1iZXIodmFsdWUpLmRwKCk8PXRva2VuLnByZWNpc2lvbikpe2NvbnN0IGZpbmFsUXVhbnRpdHk9c3ltYm9sPT09ZmVlU3ltYm9sP2NhbGN1bGF0ZUJhbGFuY2UocXVhbnRpdHksZmVlUXVhbnRpdHksdG9rZW4ucHJlY2lzaW9uLCEwKTpxdWFudGl0eSxiYXNrZXRUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLGJhbGFuY2VUYWJsZU5hbWUse2FjY291bnQ6YWNjb3VudE5hbWUsc3ltYm9sOnN5bWJvbH0pO2Jhc2tldFRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcihiYXNrZXRUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKGZpbmFsUXVhbnRpdHkpJiYodmFsaWRDb250ZW50cz0hMCl9fWlmKCF2YWxpZENvbnRlbnRzKXJldHVybiExfX1jYXRjaChlKXtyZXR1cm4hMX12YXIgdmFsdWU7cmV0dXJuITB9LHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cz1hc3luYyhmcm9tLGZyb21UeXBlLHRvLHRvVHlwZSxuZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvKT0+e2NvbnN0IHJlc3VsdHM9e3N1Y2Nlc3M6W10sZmFpbDpbXX0sZmluYWxGcm9tVHlwZT0idXNlciI9PT1mcm9tVHlwZT8idSI6ImMiLGZpbmFsVG9UeXBlPSJ1c2VyIj09PXRvVHlwZT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOmZyb21UeXBlLHRvOnRvLHRvVHlwZTp0b1R5cGUsbmZ0czpuZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfSk7Y29uc3QgbG9ncz1hcGkubG9ncygpLHRva2VuTWFwPXt9LGNvdW50ZWRNYXA9e307aWYobG9ncy5ldmVudHMpZm9yKGxldCBpPTA7aTxsb2dzLmV2ZW50cy5sZW5ndGg7aSs9MSl7Y29uc3QgZXY9bG9ncy5ldmVudHNbaV07aWYoZXYuY29udHJhY3QmJmV2LmV2ZW50JiZldi5kYXRhJiYibmZ0Ij09PWV2LmNvbnRyYWN0JiYidHJhbnNmZXIiPT09ZXYuZXZlbnQmJmV2LmRhdGEuZnJvbT09PWZyb20mJmV2LmRhdGEuZnJvbVR5cGU9PT1maW5hbEZyb21UeXBlJiZldi5kYXRhLnRvPT09dG8mJmV2LmRhdGEudG9UeXBlPT09ZmluYWxUb1R5cGUpe3Rva2VuTWFwW2V2LmRhdGEuc3ltYm9sKyItIitldi5kYXRhLmlkXT0xfX1mb3IobGV0IGluZGV4PTA7aW5kZXg8bmZ0cy5sZW5ndGg7aW5kZXgrPTEpe2NvbnN0e3N5bWJvbDpzeW1ib2wsaWRzOmlkc309bmZ0c1tpbmRleF0sc3VjY2Vzcz1bXSxmYWlsPVtdO2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXtjb25zdCBpbnB1dEtleT1zeW1ib2wrIi0iK2lkc1tqXTtpbnB1dEtleSBpbiBjb3VudGVkTWFwfHwoaW5wdXRLZXkgaW4gdG9rZW5NYXA/c3VjY2Vzcy5wdXNoKGlkc1tqXS50b1N0cmluZygpKTpmYWlsLnB1c2goaWRzW2pdLnRvU3RyaW5nKCkpLGNvdW50ZWRNYXBbaW5wdXRLZXldPTEpfXN1Y2Nlc3MubGVuZ3RoPjAmJnJlc3VsdHMuc3VjY2Vzcy5wdXNoKHtzeW1ib2w6c3ltYm9sLGlkczpzdWNjZXNzfSksZmFpbC5sZW5ndGg+MCYmcmVzdWx0cy5mYWlsLnB1c2goe3N5bWJvbDpzeW1ib2wsaWRzOmZhaWx9KX1yZXR1cm4gcmVzdWx0c307YWN0aW9ucy51cGRhdGVVcmw9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3VybDp1cmwsc3ltYm9sOnN5bWJvbH09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJnVybCYmInN0cmluZyI9PXR5cGVvZiB1cmwsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodXJsLmxlbmd0aDw9MjU1LCJpbnZhbGlkIHVybDogbWF4IGxlbmd0aCBvZiAyNTUiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2NvbnN0IG1ldGFkYXRhPUpTT04ucGFyc2UobmZ0Lm1ldGFkYXRhKTthcGkuYXNzZXJ0KG1ldGFkYXRhJiZtZXRhZGF0YS51cmwsImFuIGVycm9yIG9jY3VyZWQgd2hlbiB0cnlpbmcgdG8gdXBkYXRlIHRoZSB1cmwiKSYmKG1ldGFkYXRhLnVybD11cmwsbmZ0Lm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG1ldGFkYXRhKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX1jYXRjaChlKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBwYXlsb2FkPT57Y29uc3R7bWV0YWRhdGE6bWV0YWRhdGEsc3ltYm9sOnN5bWJvbH09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm1ldGFkYXRhJiYib2JqZWN0Ij09dHlwZW9mIG1ldGFkYXRhLCJpbnZhbGlkIHBhcmFtcyIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7Y29uc3QgZmluYWxNZXRhZGF0YT1KU09OLnN0cmluZ2lmeShtZXRhZGF0YSk7YXBpLmFzc2VydChmaW5hbE1ldGFkYXRhLmxlbmd0aDw9MWUzLCJpbnZhbGlkIG1ldGFkYXRhOiBtYXggbGVuZ3RoIG9mIDEwMDAiKSYmKG5mdC5tZXRhZGF0YT1maW5hbE1ldGFkYXRhLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfWNhdGNoKGUpe319fSxhY3Rpb25zLnVwZGF0ZU5hbWU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e25hbWU6bmFtZSxzeW1ib2w6c3ltYm9sfT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmbmFtZSYmInN0cmluZyI9PXR5cGVvZiBuYW1lLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QobmFtZSwiICIpKSYmbmFtZS5sZW5ndGg+MCYmbmFtZS5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO25mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihuZnQubmFtZT1uYW1lLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfX0sYWN0aW9ucy51cGRhdGVPcmdOYW1lPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtvcmdOYW1lOm9yZ05hbWUsc3ltYm9sOnN5bWJvbH09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm9yZ05hbWUmJiJzdHJpbmciPT10eXBlb2Ygb3JnTmFtZSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KG9yZ05hbWUsIiAiKSkmJm9yZ05hbWUubGVuZ3RoPjAmJm9yZ05hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7bmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKG5mdC5vcmdOYW1lPW9yZ05hbWUsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtwcm9kdWN0TmFtZTpwcm9kdWN0TmFtZSxzeW1ib2w6c3ltYm9sfT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmcHJvZHVjdE5hbWUmJiJzdHJpbmciPT10eXBlb2YgcHJvZHVjdE5hbWUsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhcGkudmFsaWRhdG9yLmJsYWNrbGlzdChwcm9kdWN0TmFtZSwiICIpKSYmcHJvZHVjdE5hbWUubGVuZ3RoPjAmJnByb2R1Y3ROYW1lLmxlbmd0aDw9NTAsImludmFsaWQgcHJvZHVjdCBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtuZnQmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYobmZ0LnByb2R1Y3ROYW1lPXByb2R1Y3ROYW1lLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIHBheWxvYWQ9Pntjb25zdHthY2NvdW50czphY2NvdW50cyxzeW1ib2w6c3ltYm9sLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmYWNjb3VudHMmJiJvYmplY3QiPT10eXBlb2YgYWNjb3VudHMmJkFycmF5LmlzQXJyYXkoYWNjb3VudHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFjY291bnRzLmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgYWNjb3VudHMiKSl7Y29uc3QgdmFsaWRDb250ZW50cz1pc1ZhbGlkQWNjb3VudHNBcnJheShhY2NvdW50cyk7aWYoYXBpLmFzc2VydCh2YWxpZENvbnRlbnRzLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0KXtjb25zdCBzYW5pdGl6ZWRMaXN0PVtdO2lmKGFjY291bnRzLmZvckVhY2goYWNjb3VudD0+e2NvbnN0IGZpbmFsQWNjb3VudD1hY2NvdW50LnRyaW0oKS50b0xvd2VyQ2FzZSgpO2xldCBpc0R1cGxpY2F0ZT0hMTtmb3IobGV0IGk9MDtpPG5mdC5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzLmxlbmd0aDtpKz0xKWlmKGZpbmFsQWNjb3VudD09PW5mdC5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzW2ldKXtpc0R1cGxpY2F0ZT0hMDticmVha31pc0R1cGxpY2F0ZXx8c2FuaXRpemVkTGlzdC5wdXNoKGZpbmFsQWNjb3VudCl9KSxhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHNhbml0aXplZExpc3QpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydChuZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGgrc2FuaXRpemVkTGlzdC5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBpc3N1aW5nIGFjY291bnRzIikpe2NvbnN0IGZpbmFsQWNjb3VudExpc3Q9bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuY29uY2F0KHNhbml0aXplZExpc3QpO25mdC5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWZpbmFsQWNjb3VudExpc3QsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KX19fX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2NvbnRyYWN0czpjb250cmFjdHMsc3ltYm9sOnN5bWJvbCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJmNvbnRyYWN0cyYmIm9iamVjdCI9PXR5cGVvZiBjb250cmFjdHMmJkFycmF5LmlzQXJyYXkoY29udHJhY3RzKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChjb250cmFjdHMubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7Y29uc3QgdmFsaWRDb250ZW50cz1pc1ZhbGlkQ29udHJhY3RzQXJyYXkoY29udHJhY3RzKTtpZihhcGkuYXNzZXJ0KHZhbGlkQ29udGVudHMsImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0KXtjb25zdCBzYW5pdGl6ZWRMaXN0PVtdO2lmKGNvbnRyYWN0cy5mb3JFYWNoKGNvbnRyYWN0PT57Y29uc3QgZmluYWxDb250cmFjdD1jb250cmFjdC50cmltKCk7bGV0IGlzRHVwbGljYXRlPSExO2ZvcihsZXQgaT0wO2k8bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmxlbmd0aDtpKz0xKWlmKGZpbmFsQ29udHJhY3Q9PT1uZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHNbaV0pe2lzRHVwbGljYXRlPSEwO2JyZWFrfWlzRHVwbGljYXRlfHxzYW5pdGl6ZWRMaXN0LnB1c2goZmluYWxDb250cmFjdCl9KSxhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHNhbml0aXplZExpc3QpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGNvbnRyYWN0IHR3aWNlIikmJmFwaS5hc3NlcnQobmZ0LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmxlbmd0aCtzYW5pdGl6ZWRMaXN0Lmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2NvbnN0IGZpbmFsQ29udHJhY3RMaXN0PW5mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQoc2FuaXRpemVkTGlzdCk7bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzPWZpbmFsQ29udHJhY3RMaXN0LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCl9fX19fSxhY3Rpb25zLnJlbW92ZUF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2FjY291bnRzOmFjY291bnRzLHN5bWJvbDpzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZhY2NvdW50cyYmIm9iamVjdCI9PXR5cGVvZiBhY2NvdW50cyYmQXJyYXkuaXNBcnJheShhY2NvdW50cyksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYWNjb3VudHMubGVuZ3RoPD0xMCwiY2Fubm90IHJlbW92ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBpc3N1aW5nIGFjY291bnRzIikpe2NvbnN0IHZhbGlkQ29udGVudHM9aXNWYWxpZEFjY291bnRzQXJyYXkoYWNjb3VudHMpO2lmKGFwaS5hc3NlcnQodmFsaWRDb250ZW50cywiaW52YWxpZCBhY2NvdW50IGxpc3QiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2NvbnN0IGZpbmFsQWNjb3VudExpc3Q9bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGN1cnJlbnRWYWx1ZT0+e2ZvcihsZXQgaT0wO2k8YWNjb3VudHMubGVuZ3RoO2krPTEpe2lmKGN1cnJlbnRWYWx1ZT09PWFjY291bnRzW2ldLnRyaW0oKS50b0xvd2VyQ2FzZSgpKXJldHVybiExfXJldHVybiEwfSk7bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9ZmluYWxBY2NvdW50TGlzdCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpfX19fSxhY3Rpb25zLnJlbW92ZUF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtjb250cmFjdHM6Y29udHJhY3RzLHN5bWJvbDpzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZjb250cmFjdHMmJiJvYmplY3QiPT10eXBlb2YgY29udHJhY3RzJiZBcnJheS5pc0FycmF5KGNvbnRyYWN0cyksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoY29udHJhY3RzLmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7Y29uc3QgdmFsaWRDb250ZW50cz1pc1ZhbGlkQ29udHJhY3RzQXJyYXkoY29udHJhY3RzKTtpZihhcGkuYXNzZXJ0KHZhbGlkQ29udGVudHMsImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl7Y29uc3QgZmluYWxDb250cmFjdExpc3Q9bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmZpbHRlcihjdXJyZW50VmFsdWU9Pntmb3IobGV0IGk9MDtpPGNvbnRyYWN0cy5sZW5ndGg7aSs9MSl7aWYoY3VycmVudFZhbHVlPT09Y29udHJhY3RzW2ldLnRyaW0oKSlyZXR1cm4hMX1yZXR1cm4hMH0pO25mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1maW5hbENvbnRyYWN0TGlzdCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpfX19fSxhY3Rpb25zLnRyYW5zZmVyT3duZXJzaGlwPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLHRvOnRvLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmdG8mJiJzdHJpbmciPT10eXBlb2YgdG8sImludmFsaWQgcGFyYW1zIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtjb25zdCBmaW5hbFRvPXRvLnRyaW0oKS50b0xvd2VyQ2FzZSgpO2FwaS5hc3NlcnQoaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGZpbmFsVG8pLCJpbnZhbGlkIHRvIikmJihuZnQuaXNzdWVyPWZpbmFsVG8sYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSl9fX0sYWN0aW9ucy5lbmFibGVEZWxlZ2F0aW9uPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLHVuZGVsZWdhdGlvbkNvb2xkb3duOnVuZGVsZWdhdGlvbkNvb2xkb3duLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7ZW5hYmxlRGVsZWdhdGlvbkZlZTplbmFibGVEZWxlZ2F0aW9uRmVlfT1wYXJhbXMsdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDpVVElMSVRZX1RPS0VOX1NZTUJPTH0pLGF1dGhvcml6ZWQ9ISFhcGkuQmlnTnVtYmVyKGVuYWJsZURlbGVnYXRpb25GZWUpLmx0ZSgwKXx8dXRpbGl0eVRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcih1dGlsaXR5VG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZShlbmFibGVEZWxlZ2F0aW9uRmVlKTtpZihhcGkuYXNzZXJ0KGF1dGhvcml6ZWQsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wsImludmFsaWQgc3ltYm9sIikmJmFwaS5hc3NlcnQodW5kZWxlZ2F0aW9uQ29vbGRvd24mJk51bWJlci5pc0ludGVnZXIodW5kZWxlZ2F0aW9uQ29vbGRvd24pJiZ1bmRlbGVnYXRpb25Db29sZG93bj4wJiZ1bmRlbGVnYXRpb25Db29sZG93bjw9MTgyNTAsInVuZGVsZWdhdGlvbkNvb2xkb3duIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDE4MjUwIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1uZnQsInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1uZnQuZGVsZWdhdGlvbkVuYWJsZWR8fCExPT09bmZ0LmRlbGVnYXRpb25FbmFibGVkLCJkZWxlZ2F0aW9uIGFscmVhZHkgZW5hYmxlZCIpKXtpZihhcGkuQmlnTnVtYmVyKGVuYWJsZURlbGVnYXRpb25GZWUpLmd0KDApKXtjb25zdCByZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0wscXVhbnRpdHk6ZW5hYmxlRGVsZWdhdGlvbkZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSk7aWYoIWlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHJlcyxhcGkuc2VuZGVyLCJudWxsIixVVElMSVRZX1RPS0VOX1NZTUJPTCxlbmFibGVEZWxlZ2F0aW9uRmVlLCJ0cmFuc2ZlciIpKXJldHVybiExfXJldHVybiBuZnQuZGVsZWdhdGlvbkVuYWJsZWQ9ITAsbmZ0LnVuZGVsZWdhdGlvbkNvb2xkb3duPXVuZGVsZWdhdGlvbkNvb2xkb3duLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCksITB9fXJldHVybiExfSxhY3Rpb25zLnVwZGF0ZVByb3BlcnR5RGVmaW5pdGlvbj1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxuYW1lOm5hbWUsbmV3TmFtZTpuZXdOYW1lLHR5cGU6dHlwZSxpc1JlYWRPbmx5OmlzUmVhZE9ubHksaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhuYW1lKSYmbmFtZS5sZW5ndGg+MCYmbmFtZS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1uZXdOYW1lfHwic3RyaW5nIj09dHlwZW9mIG5ld05hbWUmJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMobmV3TmFtZSkmJm5ld05hbWUubGVuZ3RoPjAmJm5ld05hbWUubGVuZ3RoPD0yNSwiaW52YWxpZCBuZXcgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXR5cGV8fCJzdHJpbmciPT10eXBlb2YgdHlwZSYmKCJudW1iZXIiPT09dHlwZXx8InN0cmluZyI9PT10eXBlfHwiYm9vbGVhbiI9PT10eXBlKSwiaW52YWxpZCB0eXBlOiBtdXN0IGJlIG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuIikmJmFwaS5hc3NlcnQodm9pZCAwPT09aXNSZWFkT25seXx8ImJvb2xlYW4iPT10eXBlb2YgaXNSZWFkT25seSwiaW52YWxpZCBpc1JlYWRPbmx5OiBtdXN0IGJlIHRydWUgb3IgZmFsc2UiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydCgwPT09bmZ0LnN1cHBseSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IGRlZmluaXRpb247IHRva2VucyBhbHJlYWR5IGlzc3VlZCIpJiZhcGkuYXNzZXJ0KG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PW5ld05hbWUpe2lmKHZvaWQgMCE9PW5mdC5ncm91cEJ5JiZuZnQuZ3JvdXBCeS5sZW5ndGg+MCYmIWFwaS5hc3NlcnQoIW5mdC5ncm91cEJ5LmluY2x1ZGVzKG5hbWUpLCJjYW5ub3QgY2hhbmdlIGRhdGEgcHJvcGVydHkgbmFtZTsgcHJvcGVydHkgaXMgcGFydCBvZiBncm91cEJ5IikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQobmV3TmFtZSE9PW5hbWUsIm5ldyBuYW1lIG11c3QgYmUgZGlmZmVyZW50IGZyb20gb2xkIG5hbWUiKXx8IWFwaS5hc3NlcnQoIShuZXdOYW1lIGluIG5mdC5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSlyZXR1cm4hMX1sZXQgc2hvdWxkVXBkYXRlPSExO2NvbnN0IG9yaWdpbmFsVHlwZT1uZnQucHJvcGVydGllc1tuYW1lXS50eXBlLG9yaWdpbmFsSXNSZWFkT25seT1uZnQucHJvcGVydGllc1tuYW1lXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT10eXBlJiZ0eXBlIT09b3JpZ2luYWxUeXBlJiYobmZ0LnByb3BlcnRpZXNbbmFtZV0udHlwZT10eXBlLHNob3VsZFVwZGF0ZT0hMCksdm9pZCAwIT09aXNSZWFkT25seSYmaXNSZWFkT25seSE9PW9yaWdpbmFsSXNSZWFkT25seSYmKG5mdC5wcm9wZXJ0aWVzW25hbWVdLmlzUmVhZE9ubHk9aXNSZWFkT25seSxzaG91bGRVcGRhdGU9ITApLHZvaWQgMCE9PW5ld05hbWUmJm5ld05hbWUhPT1uYW1lJiYobmZ0LnByb3BlcnRpZXNbbmV3TmFtZV09bmZ0LnByb3BlcnRpZXNbbmFtZV0sZGVsZXRlIG5mdC5wcm9wZXJ0aWVzW25hbWVdLHNob3VsZFVwZGF0ZT0hMCksc2hvdWxkVXBkYXRlJiYoYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnN5bWJvbCxvcmlnaW5hbE5hbWU6bmFtZSxvcmlnaW5hbFR5cGU6b3JpZ2luYWxUeXBlLG9yaWdpbmFsSXNSZWFkT25seTpvcmlnaW5hbElzUmVhZE9ubHksbmV3TmFtZTpuZXdOYW1lLG5ld1R5cGU6dHlwZSxuZXdJc1JlYWRPbmx5OmlzUmVhZE9ubHl9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLG5hbWU6bmFtZSx0eXBlOnR5cGUsaXNSZWFkT25seTppc1JlYWRPbmx5LGF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM6YXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cyxhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0czphdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2RhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlfT1wYXJhbXM7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmbmFtZSYmInN0cmluZyI9PXR5cGVvZiBuYW1lJiYodm9pZCAwPT09aXNSZWFkT25seXx8ImJvb2xlYW4iPT10eXBlb2YgaXNSZWFkT25seSkmJih2b2lkIDA9PT1hdXRob3JpemVkRWRpdGluZ0FjY291bnRzfHxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzJiYib2JqZWN0Ij09dHlwZW9mIGF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMmJkFycmF5LmlzQXJyYXkoYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cykpJiYodm9pZCAwPT09YXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHN8fGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzJiYib2JqZWN0Ij09dHlwZW9mIGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzJiZBcnJheS5pc0FycmF5KGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzKSkmJnR5cGUmJiJzdHJpbmciPT10eXBlb2YgdHlwZSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKG5hbWUpJiZuYW1lLmxlbmd0aD4wJiZuYW1lLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KCJudW1iZXIiPT09dHlwZXx8InN0cmluZyI9PT10eXBlfHwiYm9vbGVhbiI9PT10eXBlLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydCghKG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIHByb3BlcnR5IHR3aWNlIikmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtpZihPYmplY3Qua2V5cyhuZnQucHJvcGVydGllcykubGVuZ3RoPj0zKXtjb25zdCB1dGlsaXR5VG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOlVUSUxJVFlfVE9LRU5fU1lNQk9MfSksYXV0aG9yaXplZENyZWF0aW9uPSEhYXBpLkJpZ051bWJlcihkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSkubHRlKDApfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlKTtpZighYXBpLmFzc2VydChhdXRob3JpemVkQ3JlYXRpb24sInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpKXJldHVybiExO2lmKGFwaS5CaWdOdW1iZXIoZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUpLmd0KDApKXtjb25zdCByZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0wscXVhbnRpdHk6ZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsYXBpLnNlbmRlciwibnVsbCIsVVRJTElUWV9UT0tFTl9TWU1CT0wsZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUsInRyYW5zZmVyIikpcmV0dXJuITF9fWNvbnN0IG5ld1Byb3BlcnR5PXt0eXBlOnR5cGUsaXNSZWFkT25seTp2b2lkIDAhPT1pc1JlYWRPbmx5JiZpc1JlYWRPbmx5LGF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM6dm9pZCAwPT09YXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cz9bYXBpLnNlbmRlcl06W10sYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6W119O3JldHVybiBuZnQucHJvcGVydGllc1tuYW1lXT1uZXdQcm9wZXJ0eSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpLChhdXRob3JpemVkRWRpdGluZ0FjY291bnRzfHxhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cykmJmF3YWl0IGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucyh7c3ltYm9sOnN5bWJvbCxuYW1lOm5hbWUsYWNjb3VudHM6YXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cyxjb250cmFjdHM6YXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5zZXRQcm9wZXJ0eVBlcm1pc3Npb25zPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLG5hbWU6bmFtZSxhY2NvdW50czphY2NvdW50cyxjb250cmFjdHM6Y29udHJhY3RzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmbmFtZSYmInN0cmluZyI9PXR5cGVvZiBuYW1lJiYodm9pZCAwPT09YWNjb3VudHN8fGFjY291bnRzJiYib2JqZWN0Ij09dHlwZW9mIGFjY291bnRzJiZBcnJheS5pc0FycmF5KGFjY291bnRzKSkmJih2b2lkIDA9PT1jb250cmFjdHN8fGNvbnRyYWN0cyYmIm9iamVjdCI9PXR5cGVvZiBjb250cmFjdHMmJkFycmF5LmlzQXJyYXkoY29udHJhY3RzKSksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhuYW1lKSYmbmFtZS5sZW5ndGg+MCYmbmFtZS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1hY2NvdW50c3x8YWNjb3VudHMubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgYWNjb3VudHMiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1jb250cmFjdHN8fGNvbnRyYWN0cy5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBjb250cmFjdHMiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1hY2NvdW50c3x8aXNWYWxpZEFjY291bnRzQXJyYXkoYWNjb3VudHMpLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWNvbnRyYWN0c3x8aXNWYWxpZENvbnRyYWN0c0FycmF5KGNvbnRyYWN0cyksImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0JiZhcGkuYXNzZXJ0KG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBzYW5pdGl6ZWRBY2NvdW50TGlzdD1bXSxzYW5pdGl6ZWRDb250cmFjdExpc3Q9W107aWYoYWNjb3VudHMmJihzYW5pdGl6ZWRBY2NvdW50TGlzdD1hY2NvdW50cy5tYXAoYWNjb3VudD0+YWNjb3VudC50cmltKCkudG9Mb3dlckNhc2UoKSkpLGNvbnRyYWN0cyYmKHNhbml0aXplZENvbnRyYWN0TGlzdD1jb250cmFjdHMubWFwKGNvbnRyYWN0PT5jb250cmFjdC50cmltKCkpKSxhcGkuYXNzZXJ0KHZvaWQgMD09PWFjY291bnRzfHwhY29udGFpbnNEdXBsaWNhdGVzKHNhbml0aXplZEFjY291bnRMaXN0KSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09Y29udHJhY3RzfHwhY29udGFpbnNEdXBsaWNhdGVzKHNhbml0aXplZENvbnRyYWN0TGlzdCksImNhbm5vdCBhZGQgdGhlIHNhbWUgY29udHJhY3QgdHdpY2UiKSl7bGV0IHNob3VsZFVwZGF0ZT0hMTthY2NvdW50cyYmKG5mdC5wcm9wZXJ0aWVzW25hbWVdLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM9c2FuaXRpemVkQWNjb3VudExpc3Qsc2hvdWxkVXBkYXRlPSEwKSxjb250cmFjdHMmJihuZnQucHJvcGVydGllc1tuYW1lXS5hdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cz1zYW5pdGl6ZWRDb250cmFjdExpc3Qsc2hvdWxkVXBkYXRlPSEwKSxzaG91bGRVcGRhdGUmJmF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCl9fX19LGFjdGlvbnMuc2V0R3JvdXBCeT1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZwcm9wZXJ0aWVzJiYib2JqZWN0Ij09dHlwZW9mIHByb3BlcnRpZXMmJkFycmF5LmlzQXJyYXkocHJvcGVydGllcyksImludmFsaWQgcGFyYW1zIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQpe2NvbnN0IG5mdFByb3BlcnR5Q291bnQ9T2JqZWN0LmtleXMobmZ0LnByb3BlcnRpZXMpLmxlbmd0aDtpZihhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1uZnQuZ3JvdXBCeXx8MD09PW5mdC5ncm91cEJ5Lmxlbmd0aCwibGlzdCBpcyBhbHJlYWR5IHNldCIpJiZhcGkuYXNzZXJ0KHByb3BlcnRpZXMubGVuZ3RoPD1uZnRQcm9wZXJ0eUNvdW50LCJjYW5ub3Qgc2V0IG1vcmUgZGF0YSBwcm9wZXJ0aWVzIHRoYW4gTkZUIGhhcyIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMocHJvcGVydGllcyksImxpc3QgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyIpKXtmb3IobGV0IGk9MDtpPHByb3BlcnRpZXMubGVuZ3RoO2krPTEpe2NvbnN0IG5hbWU9cHJvcGVydGllc1tpXTtpZighYXBpLmFzc2VydChuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUmJm5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsImRhdGEgcHJvcGVydHkgbXVzdCBleGlzdCIpKXJldHVybiExfXJldHVybiBuZnQuZ3JvdXBCeT1wcm9wZXJ0aWVzLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCksITB9fX1yZXR1cm4hMX0sYWN0aW9ucy5zZXRQcm9wZXJ0aWVzPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLGZyb21UeXBlOmZyb21UeXBlLG5mdHM6bmZ0cyxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGU7aWYoYXBpLmFzc2VydChuZnRzJiYib2JqZWN0Ij09dHlwZW9mIG5mdHMmJkFycmF5LmlzQXJyYXkobmZ0cykmJmZpbmFsRnJvbVR5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxGcm9tVHlwZSYmWyJ1c2VyIiwiY29udHJhY3QiXS5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmKGNhbGxpbmdDb250cmFjdEluZm98fHZvaWQgMD09PWNhbGxpbmdDb250cmFjdEluZm8mJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGUpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KG5mdHMubGVuZ3RoPD01MCwiY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7Y29uc3QgZmluYWxGcm9tPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/YXBpLnNlbmRlcjpjYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKGFwaS5hc3NlcnQobnVsbCE9PW5mdCwic3ltYm9sIGRvZXMgbm90IGV4aXN0Iikpe2lmKCFpc1ZhbGlkRGF0YVByb3BlcnRpZXNBcnJheShmaW5hbEZyb20sZmluYWxGcm9tVHlwZSxuZnQsbmZ0cykpcmV0dXJuITE7Y29uc3QgaW5zdGFuY2VUYWJsZU5hbWU9c3ltYm9sKyJpbnN0YW5jZXMiO2ZvcihsZXQgaT0wO2k8bmZ0cy5sZW5ndGg7aSs9MSl7Y29uc3R7aWQ6aWQscHJvcGVydGllczpwcm9wZXJ0aWVzfT1uZnRzW2ldO2lmKDA9PT1PYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5sZW5ndGgpY29udGludWU7Y29uc3QgbmZ0SW5zdGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmUoaW5zdGFuY2VUYWJsZU5hbWUse19pZDphcGkuQmlnTnVtYmVyKGlkKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChudWxsIT09bmZ0SW5zdGFuY2UsIm5mdCBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdCIpKXtsZXQgc2hvdWxkVXBkYXRlPSExO2Zvcihjb25zdFtuYW1lLGRhdGFdb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpe2xldCBvbGRQcm9wZXJ0eT1udWxsO25mdC5wcm9wZXJ0aWVzW25hbWVdLmlzUmVhZE9ubHk/YXBpLmFzc2VydCghKG5hbWUgaW4gbmZ0SW5zdGFuY2UucHJvcGVydGllcyksImNhbm5vdCBlZGl0IHJlYWQtb25seSBwcm9wZXJ0aWVzIikmJihuZnRJbnN0YW5jZS5wcm9wZXJ0aWVzW25hbWVdPWRhdGEsc2hvdWxkVXBkYXRlPSEwKToob2xkUHJvcGVydHk9bmZ0SW5zdGFuY2UucHJvcGVydGllc1tuYW1lXSxuZnRJbnN0YW5jZS5wcm9wZXJ0aWVzW25hbWVdPWRhdGEsc2hvdWxkVXBkYXRlPSEwKSxzaG91bGRVcGRhdGUmJm9sZFByb3BlcnR5IT09ZGF0YSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnRTZXRQcm9wZXJ0eSIse3N5bWJvbDpzeW1ib2wsbmZ0Om5mdEluc3RhbmNlLHByb3BlcnR5TmFtZTpuYW1lLG9sZFZhbHVlOm9sZFByb3BlcnR5fSl9c2hvdWxkVXBkYXRlJiZhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKX19cmV0dXJuITB9fXJldHVybiExfSxhY3Rpb25zLmJ1cm49YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2Zyb21UeXBlOmZyb21UeXBlLG5mdHM6bmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZCxmaW5hbEZyb21UeXBlPXZvaWQgMD09PWZyb21UeXBlPyJ1c2VyIjpmcm9tVHlwZTtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChmaW5hbEZyb21UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsRnJvbVR5cGUmJlsidXNlciIsImNvbnRyYWN0Il0uaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmbmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZpc1ZhbGlkTmZ0SWRBcnJheShuZnRzKSl7Y29uc3QgZmluYWxGcm9tPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/YXBpLnNlbmRlcjpjYWxsaW5nQ29udHJhY3RJbmZvLm5hbWU7bGV0IGNvbnRhaW5lckNvdW50PTAsdG9rZW5Db3VudD0wLGlzRmlyc3RJbnN0YW5jZUNvbnRhaW5lcj0hMTtmb3IobGV0IGk9MDtpPG5mdHMubGVuZ3RoO2krPTEpe2NvbnN0e3N5bWJvbDpzeW1ib2wsaWRzOmlkc309bmZ0c1tpXSxuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0KXtjb25zdCBpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyI7Zm9yKGxldCBqPTA7ajxpZHMubGVuZ3RoO2orPTEpe2NvbnN0IGlkPWlkc1tqXSxuZnRJbnN0YW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZShpbnN0YW5jZVRhYmxlTmFtZSx7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtpZihuZnRJbnN0YW5jZSl7bGV0IGlzQnVybkF1dGhvcml6ZWQ9ITA7aWYobmZ0SW5zdGFuY2UubG9ja2VkTmZ0cyYmbmZ0SW5zdGFuY2UubG9ja2VkTmZ0cy5sZW5ndGg+MD8oMD09PXRva2VuQ291bnQmJihpc0ZpcnN0SW5zdGFuY2VDb250YWluZXI9ITApLGNvbnRhaW5lckNvdW50Kz0xLChjb250YWluZXJDb3VudD4xfHwhaXNGaXJzdEluc3RhbmNlQ29udGFpbmVyKSYmKGlzQnVybkF1dGhvcml6ZWQ9ITEpKTppc0ZpcnN0SW5zdGFuY2VDb250YWluZXImJihpc0J1cm5BdXRob3JpemVkPSExKSx0b2tlbkNvdW50Kz0xLG5mdEluc3RhbmNlLmFjY291bnQ9PT1maW5hbEZyb20mJigidSI9PT1uZnRJbnN0YW5jZS5vd25lZEJ5JiYidXNlciI9PT1maW5hbEZyb21UeXBlfHwiYyI9PT1uZnRJbnN0YW5jZS5vd25lZEJ5JiYiY29udHJhY3QiPT09ZmluYWxGcm9tVHlwZSkmJnZvaWQgMD09PW5mdEluc3RhbmNlLmRlbGVnYXRlZFRvJiZpc0J1cm5BdXRob3JpemVkKXtjb25zdCBmaW5hbExvY2tUb2tlbnM9e307bGV0IGlzVHJhbnNmZXJTdWNjZXNzPSEwO2Zvcihjb25zdFtsb2Nrc3ltYm9sLHF1YW50aXR5XW9mIE9iamVjdC5lbnRyaWVzKG5mdEluc3RhbmNlLmxvY2tlZFRva2Vucykpe2NvbnN0IHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnMoZmluYWxGcm9tLGxvY2tzeW1ib2wscXVhbnRpdHksZmluYWxGcm9tVHlwZSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLCJuZnQiLGZpbmFsRnJvbSxsb2Nrc3ltYm9sLHF1YW50aXR5LCJ0cmFuc2ZlckZyb21Db250cmFjdCIpfHwoZmluYWxMb2NrVG9rZW5zW2xvY2tzeW1ib2xdPXF1YW50aXR5LGlzVHJhbnNmZXJTdWNjZXNzPSExKX1hcGkuYXNzZXJ0KGlzVHJhbnNmZXJTdWNjZXNzLGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgdG9rZW5zIGluOiAke3N5bWJvbH0sIGlkICR7aWR9YCk7Y29uc3Qgb3JpZ0xvY2tOZnRzPW5mdEluc3RhbmNlLmxvY2tlZE5mdHMmJm5mdEluc3RhbmNlLmxvY2tlZE5mdHMubGVuZ3RoPjA/bmZ0SW5zdGFuY2UubG9ja2VkTmZ0czpbXTtpZihpc1RyYW5zZmVyU3VjY2VzcyYmbmZ0SW5zdGFuY2UubG9ja2VkTmZ0cyYmbmZ0SW5zdGFuY2UubG9ja2VkTmZ0cy5sZW5ndGg+MCl7Y29uc3QgcmVzPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cygibmZ0IiwiY29udHJhY3QiLGZpbmFsRnJvbSxmaW5hbEZyb21UeXBlLG5mdEluc3RhbmNlLmxvY2tlZE5mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LHtuYW1lOiJuZnQifSk7bmZ0SW5zdGFuY2UubG9ja2VkTmZ0cz1yZXMuZmFpbCxuZnRJbnN0YW5jZS5sb2NrZWROZnRzLmxlbmd0aD4wJiYoaXNUcmFuc2ZlclN1Y2Nlc3M9ITEpLGFwaS5hc3NlcnQoaXNUcmFuc2ZlclN1Y2Nlc3MsYHVuYWJsZSB0byByZWxlYXNlIGxvY2tlZCBORlQgaW5zdGFuY2VzIGluOiAke3N5bWJvbH0sIGlkICR7aWR9YCl9Y29uc3Qgb3JpZ093bmVkQnk9bmZ0SW5zdGFuY2Uub3duZWRCeSxvcmlnTG9ja1Rva2Vucz1uZnRJbnN0YW5jZS5sb2NrZWRUb2tlbnM7bmZ0SW5zdGFuY2UubG9ja2VkVG9rZW5zPWZpbmFsTG9ja1Rva2Vucyxpc1RyYW5zZmVyU3VjY2VzcyYmKG5mdEluc3RhbmNlLnByZXZpb3VzQWNjb3VudD1uZnRJbnN0YW5jZS5hY2NvdW50LG5mdEluc3RhbmNlLnByZXZpb3VzT3duZWRCeT1uZnRJbnN0YW5jZS5vd25lZEJ5LG5mdEluc3RhbmNlLmFjY291bnQ9Im51bGwiLG5mdEluc3RhbmNlLm93bmVkQnk9InUiLG5mdC5jaXJjdWxhdGluZ1N1cHBseS09MSksYXdhaXQgYXBpLmRiLnVwZGF0ZShpbnN0YW5jZVRhYmxlTmFtZSxuZnRJbnN0YW5jZSksaXNUcmFuc2ZlclN1Y2Nlc3MmJmFwaS5lbWl0KCJidXJuIix7YWNjb3VudDpmaW5hbEZyb20sb3duZWRCeTpvcmlnT3duZWRCeSx1bmxvY2tlZFRva2VuczpvcmlnTG9ja1Rva2Vucyx1bmxvY2tlZE5mdHM6b3JpZ0xvY2tOZnRzLHN5bWJvbDpzeW1ib2wsaWQ6aWR9KX19fWF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCl9fX19LGFjdGlvbnMudHJhbnNmZXI9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2Zyb21UeXBlOmZyb21UeXBlLHRvOnRvLHRvVHlwZTp0b1R5cGUsbmZ0czpuZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkLHR5cGVzPVsidXNlciIsImNvbnRyYWN0Il0sZmluYWxUb1R5cGU9dm9pZCAwPT09dG9UeXBlPyJ1c2VyIjp0b1R5cGUsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGU7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZmluYWxGcm9tVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbEZyb21UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmdG8mJiJzdHJpbmciPT10eXBlb2YgdG8mJmZpbmFsVG9UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsVG9UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbFRvVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmbmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZpc1ZhbGlkTmZ0SWRBcnJheShuZnRzKSl7Y29uc3QgZmluYWxUbz0idXNlciI9PT1maW5hbFRvVHlwZT90by50cmltKCkudG9Mb3dlckNhc2UoKTp0by50cmltKCksdG9WYWxpZD0idXNlciI9PT1maW5hbFRvVHlwZT9pc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoZmluYWxUbyk6aXNWYWxpZENvbnRyYWN0TGVuZ3RoKGZpbmFsVG8pLGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lO2lmKGFwaS5hc3NlcnQodG9WYWxpZCwiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEoZmluYWxUb1R5cGU9PT1maW5hbEZyb21UeXBlJiZmaW5hbFRvPT09ZmluYWxGcm9tKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWZpbmFsVG9UeXBlJiYibnVsbCI9PT1maW5hbFRvKSwiY2Fubm90IHRyYW5zZmVyIHRvIG51bGw7IHVzZSBidXJuIGFjdGlvbiBpbnN0ZWFkIikpZm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXtjb25zdHtzeW1ib2w6c3ltYm9sLGlkczppZHN9PW5mdHNbaV07aWYoYXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSkpe2NvbnN0IGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtmb3IobGV0IGo9MDtqPGlkcy5sZW5ndGg7ais9MSl7Y29uc3QgaWQ9aWRzW2pdLG5mdEluc3RhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO2lmKG5mdEluc3RhbmNlJiZuZnRJbnN0YW5jZS5hY2NvdW50PT09ZmluYWxGcm9tJiYoInUiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmInVzZXIiPT09ZmluYWxGcm9tVHlwZXx8ImMiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpJiZ2b2lkIDA9PT1uZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbyl7Y29uc3Qgb3JpZ093bmVkQnk9bmZ0SW5zdGFuY2Uub3duZWRCeSxuZXdPd25lZEJ5PSJ1c2VyIj09PWZpbmFsVG9UeXBlPyJ1IjoiYyI7bmZ0SW5zdGFuY2UucHJldmlvdXNBY2NvdW50PW5mdEluc3RhbmNlLmFjY291bnQsbmZ0SW5zdGFuY2UucHJldmlvdXNPd25lZEJ5PW5mdEluc3RhbmNlLm93bmVkQnksbmZ0SW5zdGFuY2UuYWNjb3VudD1maW5hbFRvLG5mdEluc3RhbmNlLm93bmVkQnk9bmV3T3duZWRCeSxhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKSxhcGkuZW1pdCgidHJhbnNmZXIiLHtmcm9tOmZpbmFsRnJvbSxmcm9tVHlwZTpvcmlnT3duZWRCeSx0bzpmaW5hbFRvLHRvVHlwZTpuZXdPd25lZEJ5LHN5bWJvbDpzeW1ib2wsaWQ6aWR9KX19fX19fSxhY3Rpb25zLmRlbGVnYXRlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtmcm9tVHlwZTpmcm9tVHlwZSx0bzp0byx0b1R5cGU6dG9UeXBlLG5mdHM6bmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZCx0eXBlcz1bInVzZXIiLCJjb250cmFjdCJdLGZpbmFsVG9UeXBlPXZvaWQgMD09PXRvVHlwZT8idXNlciI6dG9UeXBlLGZpbmFsRnJvbVR5cGU9dm9pZCAwPT09ZnJvbVR5cGU/InVzZXIiOmZyb21UeXBlO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGZpbmFsRnJvbVR5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxGcm9tVHlwZSYmdHlwZXMuaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJnRvJiYic3RyaW5nIj09dHlwZW9mIHRvJiZmaW5hbFRvVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbFRvVHlwZSYmdHlwZXMuaW5jbHVkZXMoZmluYWxUb1R5cGUpJiYoY2FsbGluZ0NvbnRyYWN0SW5mb3x8dm9pZCAwPT09Y2FsbGluZ0NvbnRyYWN0SW5mbyYmInVzZXIiPT09ZmluYWxGcm9tVHlwZSkmJm5mdHMmJiJvYmplY3QiPT10eXBlb2YgbmZ0cyYmQXJyYXkuaXNBcnJheShuZnRzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobmZ0cykpe2NvbnN0IGZpbmFsVG89InVzZXIiPT09ZmluYWxUb1R5cGU/dG8udHJpbSgpLnRvTG93ZXJDYXNlKCk6dG8udHJpbSgpLHRvVmFsaWQ9InVzZXIiPT09ZmluYWxUb1R5cGU/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGZpbmFsVG8pOmlzVmFsaWRDb250cmFjdExlbmd0aChmaW5hbFRvKSxmaW5hbEZyb209InVzZXIiPT09ZmluYWxGcm9tVHlwZT9hcGkuc2VuZGVyOmNhbGxpbmdDb250cmFjdEluZm8ubmFtZTtpZihhcGkuYXNzZXJ0KHRvVmFsaWQsImludmFsaWQgdG8iKSYmYXBpLmFzc2VydCghKGZpbmFsVG9UeXBlPT09ZmluYWxGcm9tVHlwZSYmZmluYWxUbz09PWZpbmFsRnJvbSksImNhbm5vdCBkZWxlZ2F0ZSB0byBzZWxmIikmJmFwaS5hc3NlcnQoISgidXNlciI9PT1maW5hbFRvVHlwZSYmIm51bGwiPT09ZmluYWxUbyksImNhbm5vdCBkZWxlZ2F0ZSB0byBudWxsIikpZm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXtjb25zdHtzeW1ib2w6c3ltYm9sLGlkczppZHN9PW5mdHNbaV0sbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydCghMD09PW5mdC5kZWxlZ2F0aW9uRW5hYmxlZCwiZGVsZWdhdGlvbiBub3QgZW5hYmxlZCBmb3IgIitzeW1ib2wpKXtjb25zdCBpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyI7Zm9yKGxldCBqPTA7ajxpZHMubGVuZ3RoO2orPTEpe2NvbnN0IGlkPWlkc1tqXSxuZnRJbnN0YW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZShpbnN0YW5jZVRhYmxlTmFtZSx7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtpZihuZnRJbnN0YW5jZSYmbmZ0SW5zdGFuY2UuYWNjb3VudD09PWZpbmFsRnJvbSYmKCJ1Ij09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGV8fCJjIj09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlKSYmdm9pZCAwPT09bmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8pe2NvbnN0IG5ld093bmVkQnk9InVzZXIiPT09ZmluYWxUb1R5cGU/InUiOiJjIixuZXdEZWxlZ2F0aW9uPXthY2NvdW50OmZpbmFsVG8sb3duZWRCeTpuZXdPd25lZEJ5fTtuZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbz1uZXdEZWxlZ2F0aW9uLGF3YWl0IGFwaS5kYi51cGRhdGUoaW5zdGFuY2VUYWJsZU5hbWUsbmZ0SW5zdGFuY2UpLGFwaS5lbWl0KCJkZWxlZ2F0ZSIse2Zyb206ZmluYWxGcm9tLGZyb21UeXBlOm5mdEluc3RhbmNlLm93bmVkQnksdG86ZmluYWxUbyx0b1R5cGU6bmV3T3duZWRCeSxzeW1ib2w6c3ltYm9sLGlkOmlkfSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnREZWxlZ2F0aW9uQ2hhbmdlIix7c3ltYm9sOnN5bWJvbCxuZnQ6bmZ0SW5zdGFuY2UsYWRkOiEwfSl9fX19fX0sYWN0aW9ucy51bmRlbGVnYXRlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtmcm9tVHlwZTpmcm9tVHlwZSxuZnRzOm5mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGU7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZmluYWxGcm9tVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbEZyb21UeXBlJiZbInVzZXIiLCJjb250cmFjdCJdLmluY2x1ZGVzKGZpbmFsRnJvbVR5cGUpJiYoY2FsbGluZ0NvbnRyYWN0SW5mb3x8dm9pZCAwPT09Y2FsbGluZ0NvbnRyYWN0SW5mbyYmInVzZXIiPT09ZmluYWxGcm9tVHlwZSkmJm5mdHMmJiJvYmplY3QiPT10eXBlb2YgbmZ0cyYmQXJyYXkuaXNBcnJheShuZnRzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobmZ0cykpe2NvbnN0IGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLGJsb2NrRGF0ZT1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpO2ZvcihsZXQgaT0wO2k8bmZ0cy5sZW5ndGg7aSs9MSl7Y29uc3R7c3ltYm9sOnN5bWJvbCxpZHM6aWRzfT1uZnRzW2ldLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQoITA9PT1uZnQuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICIrc3ltYm9sKSl7Y29uc3QgY29vbGRvd25QZXJpb2RNaWxsaXNlYz0yNCpuZnQudW5kZWxlZ2F0aW9uQ29vbGRvd24qMzYwMCoxZTMsY29tcGxldGVUaW1lc3RhbXA9YmxvY2tEYXRlLmdldFRpbWUoKStjb29sZG93blBlcmlvZE1pbGxpc2VjLGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIix1bmRlbGVnYXRpb249e3N5bWJvbDpzeW1ib2wsaWRzOltdLGNvbXBsZXRlVGltZXN0YW1wOmNvbXBsZXRlVGltZXN0YW1wfTtmb3IobGV0IGo9MDtqPGlkcy5sZW5ndGg7ais9MSl7Y29uc3QgaWQ9aWRzW2pdLG5mdEluc3RhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO25mdEluc3RhbmNlJiZuZnRJbnN0YW5jZS5hY2NvdW50PT09ZmluYWxGcm9tJiYoInUiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmInVzZXIiPT09ZmluYWxGcm9tVHlwZXx8ImMiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpJiZuZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbyYmdm9pZCAwPT09bmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0JiYobmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0PWNvbXBsZXRlVGltZXN0YW1wLHVuZGVsZWdhdGlvbi5pZHMucHVzaChuZnRJbnN0YW5jZS5faWQpLGF3YWl0IGFwaS5kYi51cGRhdGUoaW5zdGFuY2VUYWJsZU5hbWUsbmZ0SW5zdGFuY2UpLGFwaS5lbWl0KCJ1bmRlbGVnYXRlU3RhcnQiLHtmcm9tOm5mdEluc3RhbmNlLmRlbGVnYXRlZFRvLmFjY291bnQsZnJvbVR5cGU6bmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8ub3duZWRCeSxzeW1ib2w6c3ltYm9sLGlkOmlkfSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnREZWxlZ2F0aW9uQ2hhbmdlIix7c3ltYm9sOnN5bWJvbCxuZnQ6bmZ0SW5zdGFuY2UsYWRkOiExfSkpfXVuZGVsZWdhdGlvbi5pZHMubGVuZ3RoPjAmJmF3YWl0IGFwaS5kYi5pbnNlcnQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix1bmRlbGVnYXRpb24pfX19fTtjb25zdCBwcm9jZXNzVW5kZWxlZ2F0aW9uPWFzeW5jIHVuZGVsZWdhdGlvbj0+e2NvbnN0e3N5bWJvbDpzeW1ib2wsaWRzOmlkc309dW5kZWxlZ2F0aW9uLGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIixpbnN0YW5jZXM9YXdhaXQgYXBpLmRiLmZpbmQoaW5zdGFuY2VUYWJsZU5hbWUse19pZDp7JGluOmlkc319LDUwLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8aW5zdGFuY2VzLmxlbmd0aDtpKz0xKWRlbGV0ZSBpbnN0YW5jZXNbaV0uZGVsZWdhdGVkVG8sYXdhaXQgYXBpLmRiLnVwZGF0ZShpbnN0YW5jZVRhYmxlTmFtZSxpbnN0YW5jZXNbaV0se2RlbGVnYXRlZFRvOiIifSk7YXdhaXQgYXBpLmRiLnJlbW92ZSgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLHVuZGVsZWdhdGlvbiksYXBpLmVtaXQoInVuZGVsZWdhdGVEb25lIix7c3ltYm9sOnN5bWJvbCxpZHM6aWRzfSl9O2FjdGlvbnMuY2hlY2tQZW5kaW5nVW5kZWxlZ2F0aW9ucz1hc3luYygpPT57aWYoYXBpLmFzc2VydCgibnVsbCI9PT1hcGkuc2VuZGVyLCJub3QgYXV0aG9yaXplZCIpKXtjb25zdCB0aW1lc3RhbXA9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKS5nZXRUaW1lKCk7bGV0IHBlbmRpbmdVbmRlbGVnYXRpb25zPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIse2NvbXBsZXRlVGltZXN0YW1wOnskbHRlOnRpbWVzdGFtcH19KSxuYlBlbmRpbmdVbmRlbGVnYXRpb25zPXBlbmRpbmdVbmRlbGVnYXRpb25zLmxlbmd0aDtmb3IoO25iUGVuZGluZ1VuZGVsZWdhdGlvbnM+MDspe2ZvcihsZXQgaW5kZXg9MDtpbmRleDxuYlBlbmRpbmdVbmRlbGVnYXRpb25zO2luZGV4Kz0xKXtjb25zdCBwZW5kaW5nVW5kZWxlZ2F0aW9uPXBlbmRpbmdVbmRlbGVnYXRpb25zW2luZGV4XTthd2FpdCBwcm9jZXNzVW5kZWxlZ2F0aW9uKHBlbmRpbmdVbmRlbGVnYXRpb24pfXBlbmRpbmdVbmRlbGVnYXRpb25zPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIse2NvbXBsZXRlVGltZXN0YW1wOnskbHRlOnRpbWVzdGFtcH19KSxuYlBlbmRpbmdVbmRlbGVnYXRpb25zPXBlbmRpbmdVbmRlbGVnYXRpb25zLmxlbmd0aH19fSxhY3Rpb25zLmNyZWF0ZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7bmFtZTpuYW1lLG9yZ05hbWU6b3JnTmFtZSxwcm9kdWN0TmFtZTpwcm9kdWN0TmFtZSxzeW1ib2w6c3ltYm9sLHVybDp1cmwsbWF4U3VwcGx5Om1heFN1cHBseSxhdXRob3JpemVkSXNzdWluZ0FjY291bnRzOmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMsYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6YXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtuZnRDcmVhdGlvbkZlZTpuZnRDcmVhdGlvbkZlZX09cGFyYW1zLHV0aWxpdHlUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0x9KSxhdXRob3JpemVkQ3JlYXRpb249ISFhcGkuQmlnTnVtYmVyKG5mdENyZWF0aW9uRmVlKS5sdGUoMCl8fHV0aWxpdHlUb2tlbkJhbGFuY2UmJmFwaS5CaWdOdW1iZXIodXRpbGl0eVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUobmZ0Q3JlYXRpb25GZWUpO2lmKGFwaS5hc3NlcnQoYXV0aG9yaXplZENyZWF0aW9uLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGNyZWF0aW9uIGZlZXMiKSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQobmFtZSYmInN0cmluZyI9PXR5cGVvZiBuYW1lJiZzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiYodm9pZCAwPT09dXJsfHx1cmwmJiJzdHJpbmciPT10eXBlb2YgdXJsKSYmKHZvaWQgMD09PW9yZ05hbWV8fG9yZ05hbWUmJiJzdHJpbmciPT10eXBlb2Ygb3JnTmFtZSkmJih2b2lkIDA9PT1wcm9kdWN0TmFtZXx8cHJvZHVjdE5hbWUmJiJzdHJpbmciPT10eXBlb2YgcHJvZHVjdE5hbWUpJiYodm9pZCAwPT09YXV0aG9yaXplZElzc3VpbmdBY2NvdW50c3x8YXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyYmIm9iamVjdCI9PXR5cGVvZiBhdXRob3JpemVkSXNzdWluZ0FjY291bnRzJiZBcnJheS5pc0FycmF5KGF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMpKSYmKHZvaWQgMD09PWF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzfHxhdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cyYmIm9iamVjdCI9PXR5cGVvZiBhdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cyYmQXJyYXkuaXNBcnJheShhdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cykpJiYodm9pZCAwPT09bWF4U3VwcGx5fHxtYXhTdXBwbHkmJiJzdHJpbmciPT10eXBlb2YgbWF4U3VwcGx5JiYhYXBpLkJpZ051bWJlcihtYXhTdXBwbHkpLmlzTmFOKCkpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYShzeW1ib2wpJiZhcGkudmFsaWRhdG9yLmlzVXBwZXJjYXNlKHN5bWJvbCkmJnN5bWJvbC5sZW5ndGg+MCYmc3ltYm9sLmxlbmd0aDw9MTAsImludmFsaWQgc3ltYm9sOiB1cHBlcmNhc2UgbGV0dGVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDEwIikmJmFwaS5hc3NlcnQodm9pZCAwPT09UkVTRVJWRURfU1lNQk9MU1tzeW1ib2xdfHxhcGkuc2VuZGVyPT09UkVTRVJWRURfU1lNQk9MU1tzeW1ib2xdLCJjYW5ub3QgdXNlIHRoaXMgc3ltYm9sIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhcGkudmFsaWRhdG9yLmJsYWNrbGlzdChuYW1lLCIgIikpJiZuYW1lLmxlbmd0aD4wJiZuYW1lLmxlbmd0aDw9NTAsImludmFsaWQgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW9yZ05hbWV8fGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3Qob3JnTmFtZSwiICIpKSYmb3JnTmFtZS5sZW5ndGg+MCYmb3JnTmFtZS5sZW5ndGg8PTUwLCJpbnZhbGlkIG9yZyBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikmJmFwaS5hc3NlcnQodm9pZCAwPT09cHJvZHVjdE5hbWV8fGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QocHJvZHVjdE5hbWUsIiAiKSkmJnByb2R1Y3ROYW1lLmxlbmd0aD4wJiZwcm9kdWN0TmFtZS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXVybHx8dXJsLmxlbmd0aDw9MjU1LCJpbnZhbGlkIHVybDogbWF4IGxlbmd0aCBvZiAyNTUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1tYXhTdXBwbHl8fGFwaS5CaWdOdW1iZXIobWF4U3VwcGx5KS5ndCgwKSwibWF4U3VwcGx5IG11c3QgYmUgcG9zaXRpdmUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1tYXhTdXBwbHl8fGFwaS5CaWdOdW1iZXIobWF4U3VwcGx5KS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLCJtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICIrTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoYXBpLmFzc2VydChudWxsPT09bmZ0LCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihuZnRDcmVhdGlvbkZlZSkuZ3QoMCkpe2NvbnN0IHJlcz1hd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDpVVElMSVRZX1RPS0VOX1NZTUJPTCxxdWFudGl0eTpuZnRDcmVhdGlvbkZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSk7aWYoIWlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHJlcyxhcGkuc2VuZGVyLCJudWxsIixVVElMSVRZX1RPS0VOX1NZTUJPTCxuZnRDcmVhdGlvbkZlZSwidHJhbnNmZXIiKSlyZXR1cm4hMX1jb25zdCBmaW5hbE1heFN1cHBseT12b2lkIDA9PT1tYXhTdXBwbHk/MDphcGkuQmlnTnVtYmVyKG1heFN1cHBseSkuaW50ZWdlclZhbHVlKGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikudG9OdW1iZXIoKSxmaW5hbE9yZ05hbWU9dm9pZCAwPT09b3JnTmFtZT8iIjpvcmdOYW1lLGZpbmFsUHJvZHVjdE5hbWU9dm9pZCAwPT09cHJvZHVjdE5hbWU/IiI6cHJvZHVjdE5hbWU7bGV0IG1ldGFkYXRhPXt1cmw6dm9pZCAwPT09dXJsPyIiOnVybH07bWV0YWRhdGE9SlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpO2NvbnN0IGluaXRpYWxBY2NvdW50TGlzdD12b2lkIDA9PT1hdXRob3JpemVkSXNzdWluZ0FjY291bnRzP1thcGkuc2VuZGVyXTpbXSxuZXdOZnQ9e2lzc3VlcjphcGkuc2VuZGVyLHN5bWJvbDpzeW1ib2wsbmFtZTpuYW1lLG9yZ05hbWU6ZmluYWxPcmdOYW1lLHByb2R1Y3ROYW1lOmZpbmFsUHJvZHVjdE5hbWUsbWV0YWRhdGE6bWV0YWRhdGEsbWF4U3VwcGx5OmZpbmFsTWF4U3VwcGx5LHN1cHBseTowLGNpcmN1bGF0aW5nU3VwcGx5OjAsZGVsZWdhdGlvbkVuYWJsZWQ6ITEsdW5kZWxlZ2F0aW9uQ29vbGRvd246MCxhdXRob3JpemVkSXNzdWluZ0FjY291bnRzOmluaXRpYWxBY2NvdW50TGlzdCxhdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0czpbXSxwcm9wZXJ0aWVzOnt9LGdyb3VwQnk6W119LGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtyZXR1cm4hMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cyhpbnN0YW5jZVRhYmxlTmFtZSkmJmF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZShpbnN0YW5jZVRhYmxlTmFtZSxbImFjY291bnQiLCJvd25lZEJ5Il0pLGF3YWl0IGFwaS5kYi5pbnNlcnQoIm5mdHMiLG5ld05mdCksdm9pZCAwIT09YXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyYmYXdhaXQgYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0FjY291bnRzKHthY2NvdW50czphdXRob3JpemVkSXNzdWluZ0FjY291bnRzLHN5bWJvbDpzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLHZvaWQgMCE9PWF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6YXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMsc3ltYm9sOnN5bWJvbCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSksITB9fXJldHVybiExfSxhY3Rpb25zLmlzc3VlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLGZyb21UeXBlOmZyb21UeXBlLHRvOnRvLHRvVHlwZTp0b1R5cGUsZmVlU3ltYm9sOmZlZVN5bWJvbCxsb2NrVG9rZW5zOmxvY2tUb2tlbnMsbG9ja05mdHM6bG9ja05mdHMscHJvcGVydGllczpwcm9wZXJ0aWVzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkLHR5cGVzPVsidXNlciIsImNvbnRyYWN0Il0sZmluYWxUb1R5cGU9dm9pZCAwPT09dG9UeXBlPyJ1c2VyIjp0b1R5cGUsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGUscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0SXNzdWFuY2VGZWU6bmZ0SXNzdWFuY2VGZWV9PXBhcmFtcztpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZmaW5hbEZyb21UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsRnJvbVR5cGUmJnR5cGVzLmluY2x1ZGVzKGZpbmFsRnJvbVR5cGUpJiYoY2FsbGluZ0NvbnRyYWN0SW5mb3x8dm9pZCAwPT09Y2FsbGluZ0NvbnRyYWN0SW5mbyYmInVzZXIiPT09ZmluYWxGcm9tVHlwZSkmJnRvJiYic3RyaW5nIj09dHlwZW9mIHRvJiZmaW5hbFRvVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbFRvVHlwZSYmdHlwZXMuaW5jbHVkZXMoZmluYWxUb1R5cGUpJiZmZWVTeW1ib2wmJiJzdHJpbmciPT10eXBlb2YgZmVlU3ltYm9sJiZmZWVTeW1ib2wgaW4gbmZ0SXNzdWFuY2VGZWUmJih2b2lkIDA9PT1wcm9wZXJ0aWVzfHxwcm9wZXJ0aWVzJiYib2JqZWN0Ij09dHlwZW9mIHByb3BlcnRpZXMpJiYodm9pZCAwPT09bG9ja1Rva2Vuc3x8bG9ja1Rva2VucyYmIm9iamVjdCI9PXR5cGVvZiBsb2NrVG9rZW5zKSYmKHZvaWQgMD09PWxvY2tOZnRzfHxsb2NrTmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBsb2NrTmZ0cyYmQXJyYXkuaXNBcnJheShsb2NrTmZ0cykpLCJpbnZhbGlkIHBhcmFtcyIpJiYodm9pZCAwPT09bG9ja05mdHN8fGlzVmFsaWROZnRJZEFycmF5KGxvY2tOZnRzKSkpe2NvbnN0IGZpbmFsVG89InVzZXIiPT09ZmluYWxUb1R5cGU/dG8udHJpbSgpLnRvTG93ZXJDYXNlKCk6dG8udHJpbSgpLHRvVmFsaWQ9InVzZXIiPT09ZmluYWxUb1R5cGU/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGZpbmFsVG8pOmlzVmFsaWRDb250cmFjdExlbmd0aChmaW5hbFRvKSxmaW5hbEZyb209InVzZXIiPT09ZmluYWxGcm9tVHlwZT9hcGkuc2VuZGVyOmNhbGxpbmdDb250cmFjdEluZm8ubmFtZSxiYWxhbmNlVGFibGVOYW1lPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQodG9WYWxpZCwiaW52YWxpZCB0byIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSksZmVlVG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6ZmVlU3ltYm9sfSk7aWYoYXBpLmFzc2VydChudWxsIT09bmZ0LCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChudWxsIT09ZmVlVG9rZW4sImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7Y29uc3QgaW5zdGFuY2VUYWJsZU5hbWU9c3ltYm9sKyJpbnN0YW5jZXMiO2lmKGFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUmJm5mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5pbmNsdWRlcyhmaW5hbEZyb20pfHwidXNlciI9PT1maW5hbEZyb21UeXBlJiZuZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5pbmNsdWRlcyhmaW5hbEZyb20pLCJub3QgYWxsb3dlZCB0byBpc3N1ZSB0b2tlbnMiKSYmYXBpLmFzc2VydCgwPT09bmZ0Lm1heFN1cHBseXx8bmZ0LnN1cHBseTxuZnQubWF4U3VwcGx5LCJtYXggc3VwcGx5IGxpbWl0IHJlYWNoZWQiKSl7Y29uc3QgcHJvcGVydHlDb3VudD1PYmplY3Qua2V5cyhuZnQucHJvcGVydGllcykubGVuZ3RoLHByb3BlcnR5RmVlPWFwaS5CaWdOdW1iZXIobmZ0SXNzdWFuY2VGZWVbZmVlU3ltYm9sXSkubXVsdGlwbGllZEJ5KHByb3BlcnR5Q291bnQpLGlzc3VhbmNlRmVlPWNhbGN1bGF0ZUJhbGFuY2UobmZ0SXNzdWFuY2VGZWVbZmVlU3ltYm9sXSxwcm9wZXJ0eUZlZSxmZWVUb2tlbi5wcmVjaXNpb24sITApLGZlZVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsYmFsYW5jZVRhYmxlTmFtZSx7YWNjb3VudDpmaW5hbEZyb20sc3ltYm9sOmZlZVN5bWJvbH0pLGF1dGhvcml6ZWRDcmVhdGlvbj0hIWFwaS5CaWdOdW1iZXIoaXNzdWFuY2VGZWUpLmx0ZSgwKXx8ZmVlVG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKGZlZVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUoaXNzdWFuY2VGZWUpO2lmKGxvY2tUb2tlbnMpe2NvbnN0IGlzTG9ja1ZhbGlkPWF3YWl0IGlzVmFsaWRUb2tlbkJhc2tldChsb2NrVG9rZW5zLGJhbGFuY2VUYWJsZU5hbWUsZmluYWxGcm9tLGZlZVN5bWJvbCxpc3N1YW5jZUZlZSk7aWYoIWFwaS5hc3NlcnQoaXNMb2NrVmFsaWQsImludmFsaWQgYmFza2V0IG9mIHRva2VucyB0byBsb2NrIChjYW5ub3QgbG9jayBtb3JlIHRoYW4gMTAgdG9rZW4gdHlwZXM7IGlzc3VpbmcgYWNjb3VudCBtdXN0IGhhdmUgZW5vdWdoIGJhbGFuY2UpIikpcmV0dXJuITF9bGV0IGZpbmFsUHJvcGVydGllcz17fTtpZih2b2lkIDAhPT1wcm9wZXJ0aWVzKXt0cnl7aWYoIWlzVmFsaWREYXRhUHJvcGVydGllcyhmaW5hbEZyb20sZmluYWxGcm9tVHlwZSxuZnQscHJvcGVydGllcykpcmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxQcm9wZXJ0aWVzPXByb3BlcnRpZXN9aWYoYXBpLmFzc2VydChhdXRob3JpemVkQ3JlYXRpb24sInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgaXNzdWFuY2UgZmVlcyIpKXtpZihhcGkuQmlnTnVtYmVyKGlzc3VhbmNlRmVlKS5ndCgwKSlpZigiY29udHJhY3QiPT09ZmluYWxGcm9tVHlwZSl7Y29uc3QgcmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm51bGwiLGZlZVN5bWJvbCxpc3N1YW5jZUZlZSwidXNlciIpO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHJlcyxmaW5hbEZyb20sIm51bGwiLGZlZVN5bWJvbCxpc3N1YW5jZUZlZSwidHJhbnNmZXJGcm9tQ29udHJhY3QiKSwidW5hYmxlIHRvIHRyYW5zZmVyIGlzc3VhbmNlIGZlZSIpKXJldHVybiExfWVsc2V7Y29uc3QgcmVzPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmZlZVN5bWJvbCxxdWFudGl0eTppc3N1YW5jZUZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSk7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGZpbmFsRnJvbSwibnVsbCIsZmVlU3ltYm9sLGlzc3VhbmNlRmVlLCJ0cmFuc2ZlciIpLCJ1bmFibGUgdG8gdHJhbnNmZXIgaXNzdWFuY2UgZmVlIikpcmV0dXJuITF9Y29uc3QgZmluYWxMb2NrVG9rZW5zPXt9O2lmKGxvY2tUb2tlbnMpZm9yKGNvbnN0W2xvY2tzeW1ib2wscXVhbnRpdHldb2YgT2JqZWN0LmVudHJpZXMobG9ja1Rva2VucykpaWYoImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpe2NvbnN0IHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnNGcm9tQ2FsbGluZ0NvbnRyYWN0KCJuZnQiLGxvY2tzeW1ib2wscXVhbnRpdHksImNvbnRyYWN0Iik7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGZpbmFsRnJvbSwibmZ0Iixsb2Nrc3ltYm9sLHF1YW50aXR5LCJ0cmFuc2ZlckZyb21Db250cmFjdCIpJiYoZmluYWxMb2NrVG9rZW5zW2xvY2tzeW1ib2xdPXF1YW50aXR5KX1lbHNle2NvbnN0IHJlcz1hd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyVG9Db250cmFjdCIse3RvOiJuZnQiLHN5bWJvbDpsb2Nrc3ltYm9sLHF1YW50aXR5OnF1YW50aXR5LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KTtpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsZmluYWxGcm9tLCJuZnQiLGxvY2tzeW1ib2wscXVhbnRpdHksInRyYW5zZmVyVG9Db250cmFjdCIpJiYoZmluYWxMb2NrVG9rZW5zW2xvY2tzeW1ib2xdPXF1YW50aXR5KX1sZXQgZmluYWxMb2NrTmZ0cz1bXTtpZihsb2NrTmZ0cyYmbG9ja05mdHMubGVuZ3RoPjApe2ZpbmFsTG9ja05mdHM9KGF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhmaW5hbEZyb20sZmluYWxGcm9tVHlwZSwibmZ0IiwiY29udHJhY3QiLGxvY2tOZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvKSkuc3VjY2Vzc31jb25zdCBvd25lZEJ5PSJ1c2VyIj09PWZpbmFsVG9UeXBlPyJ1IjoiYyI7bGV0IG5ld0luc3RhbmNlPXt9O25ld0luc3RhbmNlPWZpbmFsTG9ja05mdHMubGVuZ3RoPjA/e2FjY291bnQ6ZmluYWxUbyxvd25lZEJ5Om93bmVkQnksbG9ja2VkVG9rZW5zOmZpbmFsTG9ja1Rva2Vucyxsb2NrZWROZnRzOmZpbmFsTG9ja05mdHMscHJvcGVydGllczpmaW5hbFByb3BlcnRpZXN9OnthY2NvdW50OmZpbmFsVG8sb3duZWRCeTpvd25lZEJ5LGxvY2tlZFRva2VuczpmaW5hbExvY2tUb2tlbnMscHJvcGVydGllczpmaW5hbFByb3BlcnRpZXN9O2NvbnN0IHJlc3VsdD1hd2FpdCBhcGkuZGIuaW5zZXJ0KGluc3RhbmNlVGFibGVOYW1lLG5ld0luc3RhbmNlKTtyZXR1cm4gbmZ0LnN1cHBseSs9MSwibnVsbCI9PT1maW5hbFRvJiYiY29udHJhY3QiIT09ZmluYWxUb1R5cGV8fChuZnQuY2lyY3VsYXRpbmdTdXBwbHkrPTEpLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCksYXBpLmVtaXQoImlzc3VlIix7ZnJvbTpmaW5hbEZyb20sZnJvbVR5cGU6ZmluYWxGcm9tVHlwZSx0bzpmaW5hbFRvLHRvVHlwZTpmaW5hbFRvVHlwZSxzeW1ib2w6c3ltYm9sLGxvY2tlZFRva2VuczpmaW5hbExvY2tUb2tlbnMsbG9ja2VkTmZ0czpmaW5hbExvY2tOZnRzLHByb3BlcnRpZXM6ZmluYWxQcm9wZXJ0aWVzLGlkOnJlc3VsdC5faWR9KSwhMH19fX19cmV0dXJuITF9LGFjdGlvbnMuaXNzdWVNdWx0aXBsZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7aW5zdGFuY2VzOmluc3RhbmNlcyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChpbnN0YW5jZXMmJiJvYmplY3QiPT10eXBlb2YgaW5zdGFuY2VzJiZBcnJheS5pc0FycmF5KGluc3RhbmNlcyksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoaW5zdGFuY2VzLmxlbmd0aDw9MTAsImNhbm5vdCBpc3N1ZSBtb3JlIHRoYW4gMTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpe2xldCBjb250YWluZXJDb3VudD0wO2lmKGluc3RhbmNlcy5mb3JFYWNoKGluc3RhbmNlPT57aW5zdGFuY2UubG9ja05mdHMmJihjb250YWluZXJDb3VudCs9MSl9KSxhcGkuYXNzZXJ0KGNvbnRhaW5lckNvdW50PD0xLCJjYW5ub3QgaXNzdWUgbW9yZSB0aGFuIDEgY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgYXQgb25jZSIpJiZhcGkuYXNzZXJ0KDA9PT1jb250YWluZXJDb3VudHx8Y29udGFpbmVyQ291bnQ9PT1pbnN0YW5jZXMubGVuZ3RoLCJjYW5ub3QgaXNzdWUgYSBtaXggb2YgY29udGFpbmVyIGFuZCBub24tY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgc2ltdWx0YW5lb3VzbHkiKSlmb3IobGV0IGk9MDtpPGluc3RhbmNlcy5sZW5ndGg7aSs9MSl7Y29uc3R7c3ltYm9sOnN5bWJvbCxmcm9tVHlwZTpmcm9tVHlwZSx0bzp0byx0b1R5cGU6dG9UeXBlLGZlZVN5bWJvbDpmZWVTeW1ib2wsbG9ja1Rva2Vuczpsb2NrVG9rZW5zLGxvY2tOZnRzOmxvY2tOZnRzLHByb3BlcnRpZXM6cHJvcGVydGllc309aW5zdGFuY2VzW2ldO2F3YWl0IGFjdGlvbnMuaXNzdWUoe3N5bWJvbDpzeW1ib2wsZnJvbVR5cGU6ZnJvbVR5cGUsdG86dG8sdG9UeXBlOnRvVHlwZSxmZWVTeW1ib2w6ZmVlU3ltYm9sLGxvY2tUb2tlbnM6bG9ja1Rva2Vucyxsb2NrTmZ0czpsb2NrTmZ0cyxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99KX19fTs="}}}

NFT Smart Contract | Ecency