Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_解除网站不允许复制的限制(优化版)🔥🔥🔥@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIOino+mZpOe9keermeS4jeWFgeiuuOWkjeWItueahOmZkOWItu+8iOS8mOWMlueJiO+8ifCflKXwn5Sl8J+UpQovLyBAbmFtZTp6aC1UVyAg6Kej6Zmk57ay56uZ5LiN5YWB6Kix6KSH6KO955qE6ZmQ5Yi277yI5YSq5YyW54mI77yJ8J+UpfCflKXwn5SlCi8vIEBuYW1lOmVuICAgICBSZW1vdmUgdGhlIHJlc3RyaWN0aW9uIG9uIHdlYnNpdGVzIG5vdCBhbGxvd2luZyBjb3B5aW5nIPCflKXwn5Sl8J+UpQovLyBAZGVzY3JpcHRpb24g6Kej6Zmk6YOo5YiG572R56uZ5LiN5YWB6K645aSN5Yi255qE6ZmQ5Yi277yM5paH5pys6YCJ5Lit5ZCO54K55Ye75aSN5Yi25oyJ6ZKu5Y2z5Y+v5aSN5Yi277yM5Li76KaB55So5LqO77ya55m+5bqm5paH5bqTfOmBk+WuouW3tOW3tHzohb7orq/mlofmoaN86LGG5LiB572RfOaXoOW/p+iAg+e9kXzlrabkuaDllaZ86JOs5YuD6IyD5paHfOaAneWQpuekvuWMunzlipvmiaN855+l5LmOfOivrembgHxRUeaWh+aho3wzNjBkb2N8MTdrfENTRE7nrYnvvIzlnKjljp/ohJrmnKznmoTln7rnoYDkuIrvvIzkvJjljJbkuobpg6jliIblip/og73vvIzlpoLmnInooaXlhYXor7fnlZnoqIDlj43ppoh+Ci8vIEBkZXNjcmlwdGlvbjp6aC1UVyDop6PpmaTpg6jliIbntrLnq5nkuI3lhYHoqLHopIfoo73nmoTpmZDliLbvvIzmlofmnKzpgbjkuK3lvozpu57mk4ropIfoo73mjInpiJXljbPlj6/opIfoo73vvIzkuLvopoHnlKjmlrzvvJrnmb7luqbmlofluqt86YGT5a6i5be05be0fOmosOioiuaWh+aqlHzosYbkuIHntrJ854Sh5oaC6ICD57ayfOWtuOe/kuWVpnzok6zli4Pnr4Tmlod85oCd5ZCm56S+5Y2AfOWKm+aJo3znn6XkuY586Kqe6ZuAfFFR5paH5qqUfDM2MGRvY3wxN2t8Q1NETuetie+8jOWcqOWOn+aMh+S7pOeivOaIluebtOitr+W8j+eoi+W8j+eahOWfuuekjuS4iu+8jOWEquWMluS6humDqOWIhuWKn+iDve+8jOWmguacieijnOWFheiri+eVmeiogOWPjemli34KLy8gQGRlc2NyaXB0aW9uOmVuICAgIFJlbW92ZSB0aGUgcmVzdHJpY3Rpb24gb24gY29weWluZyBmcm9tIHRoZSB3ZWJzaXRlLiBJZiB0aGVyZSBhcmUgYW55IHN1cHBsZW1lbnRzLCBwbGVhc2UgbGVhdmUgYSBtZXNzYWdlIGZvciBmZWVkYmFja34KLy8gQG5hbWVzcGFjZSAgIHBpY2Fzc29UWF9saWZ0aW5nX3Jlc3RyaWN0aW9ucwovLyBAdmVyc2lvbiAgICAgMS4wLjMKLy8gQGF1dGhvciAgICAgIFdpbmRydW5uZXJNYXjvvIxwaWNhc3NvVFgKLy8gQGljb24gICAgICAgIGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBWUFBQUJYQXZtSEFBQUFBWE5TUjBJQXJzNGM2UUFBQVd0SlJFRlVhRVB0bWVFUndpQU1oWXV1bzg3UXpxQXI2TG1GN1JaZVhjSE8wTTZncnFQeGFxMkhuQzBCQThJWi93b2gzM3NKZWtFa2tYOUU1UGtuL3dNd1cyMVRBZGRkNTVoSTNUZ0h6Yms2WkNheDBRN01seHN3Q1d5LzFnd0NCYkJZYlhLQTVLbStmV3I0blhpSW9BQ0VTQXBaS0JDVDdITGNOMlBnUVFHMENUODZERzUxbjdRT0lqaUFWdkh1d3NCQnZBSElqU3FUKytvQlZlMzVjbDMzTjE1YlhxZGptYXZsRkRSQW02d09JbmdBSFVSUUFOaHI5bHlWcjd3WkFLc2E1VHAyZ0ZKTm0xanNnS3lhcklhTm1rTjd4bjQ4U1IxZ2dBRUx2RGxBV1RiWVdLUWxoRDJVY2gwRDhDMkVxQ2R2VFJ6OU5Zb1FrM3dKTnpHNXBJWUJTUjJJdmdjWWdQOExTUXI4ZXJDRjdXWFNKc1llU3JuT0dFQ2RWVkltWXhQTEdLQ2Jqdmw2NEJoSFVtZWtxTUZXSDlMWGtQY3pBalFncG9YNlhtQUVZR08zNnowTTRGcGhYZnhCQjNRYlhYOC85S0NobnNzQXJweXdjc0JWTWk3am9sNHBYU2J3YmV6b0FlNjAveFJQVGRLTThBQUFBQUJKUlU1RXJrSmdnZz09Ci8vIEBtYXRjaCAgICAgICAqOi8vd2Vua3UuYmFpZHUuY29tL3ZpZXcvKgovLyBAbWF0Y2ggICAgICAgKjovL3dlbmt1LmJhaWR1LmNvbS9zaGFyZS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd2Vua3UuYmFpZHUuY29tL2xpbmsqCi8vIEBtYXRjaCAgICAgICAqOi8vd2Vua3UuYmFpZHUuY29tL2FnZ3MvKgovLyBAbWF0Y2ggICAgICAgKjovL3dlbmt1LmJhaWR1LmNvbS9uZFB1cmVWaWV3LyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cuNTF0ZXN0Lm5ldC9zaG93LyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cueHVleGkubGEvKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy54dWV4aWxhLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LmNzcGVuZ2JvLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5kb2M4OC5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3NlZ21lbnRmYXVsdC5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3drLmJhaWR1LmNvbS92aWV3LyoKLy8gQG1hdGNoICAgICAgICo6Ly9sZWV0Y29kZS1jbi5jb20vcHJvYmxlbXMvKgovLyBAbWF0Y2ggICAgICAgKjovLyouemhpaHUuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly96LjMwZWR1LmNvbS5jbi8qCi8vIEBtYXRjaCAgICAgICAqOi8vZG9jcy5xcS5jb20vZG9jLyoKLy8gQG1hdGNoICAgICAgICo6Ly9kb2NzLnFxLmNvbS9zaGVldC8qCi8vIEBtYXRjaCAgICAgICAqOi8vYm9rZTExMi5jb20vcG9zdC8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi55dXF1ZS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy5jb21tYW5kbGludXguY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmRpeWlmYW53ZW4uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLm1iYWxpYi5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouY25pdHBtLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vYmJzLm1paG95by5jb20veXMvKgovLyBAbWF0Y2ggICAgICAgKjovLyoucnVpd2VuLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LnVlbWVkcy5jbi8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3Lm9oMTAwLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LmFpeXVrZS5jb20vbmV3cy8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LmZ3c2lyLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LndlbnhtLmNuLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cudW5qcy5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy5haHNyc3QuY24vKgovLyBAbWF0Y2ggICAgICAgKjovLyoueWpieXMuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnFpZGlhbi5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouem9uZ2hlbmcuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLjE3ay5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouY2l3ZWltYW8uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly9ib29rLnFxLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi4zNjBkb2MuY29tL2NvbnRlbnQvKgovLyBAbWF0Y2ggICAgICAgKjovLyouODUwNTAwLmNvbS9uZXdzLyoKLy8gQG1hdGNoICAgICAgICo6Ly91dGF0ZW4uY29tL2x5cmljLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmppYW5iaWFva3UuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmt0MjUwLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LmtlanVkYXRpLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi54aWFvaG9uZ3NodS5jb20vZGlzY292ZXJ5LyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmJhaWJlaWtlLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5ibG9nLmNzZG4ubmV0LyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmJpbGliaWxpLmNvbS9yZWFkLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmNua2kubmV0L0tYUmVhZGVyLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmNucmVuY2FpLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5rb2RpcGxheWVyLmNuLyoKLy8gQG1hdGNoICAgICAgICo6Ly90b25neGllaHVpLm5ldC8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5qaWFuc2h1LmNvbS9wLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmxpbm92ZWxpYi5jb20vbm92ZWwvKgovLyBAbWF0Y2ggICAgICAgKjovLyoud2p4LmNuLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLndqeC50b3AvKgovLyBAbWF0Y2ggICAgICAgKjovLyouY2hhemlkaWFuLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5qdWVqaW4uY24vcG9zdC8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi56Z2JrLmNvbS9lY3BoLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLndlbm1pLmNvbS9hcnRpY2xlLyoKLy8gQG1hdGNoICAgICAgICo6Ly95dWVkdS5iYWlkdS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy5pbnJycC5jb20uY24vKgovLyBAbWF0Y2ggICAgICAgKjovL2ZhbnlpLmJhaWR1LmNvbS9tdHBlLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cuc2h1YmFvYy5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL2Jsb2cuNTFjdG8uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cueGltYWxheWEuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnRpYW5xaS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoueGlleGllYmFuZy5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouZG9jaW4uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmRkd2s4LmNuLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnBocC5jbi8qCi8vIEBtYXRjaCAgICAgICAqOi8vY29vY28ubmV0LmNuLyoKLy8gQG1hdGNoICAgICAgICo6Ly9mYW5xaWVub3ZlbC5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoubW9iaWxldHJhaW4ub3JnLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmV4YW1jb28uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnJyZHluYi5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouZnV3dTcuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnhpYW5ncWlxaXB1LmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vbm90ZS55b3VkYW8uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLjE2My5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouYWlwaWF4aS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3dlbmt1LmNzZG4ubmV0LyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cua2RvY3MuY24vKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy54aWFveXV6aG91Zm0uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLm1jbW9kLmNuLyoKLy8gQHN1cHBvcnRVUkwgIGh0dHBzOi8vZ2l0aHViLmNvbS9XaW5kcnVubmVyTWF4L1RLU2NyaXB0L2lzc3VlcwovLyBAbGljZW5zZSAgICAgTUlUCi8vIEBvcmlnbi1saWNlbnNlIE1JVAovLyBAcnVuLWF0ICAgICAgZG9jdW1lbnQtc3RhcnQKLy8gQGNvbm5lY3QgICAgIHJlczMuZG9jODguY29tCi8vIEBncmFudCAgICAgICB1bnNhZmVXaW5kb3cKLy8gQGdyYW50ICAgICAgIEdNX3htbGh0dHBSZXF1ZXN0Ci8vIEBkb3dubG9hZFVSTCBodHRwczovL3VwZGF0ZS5ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzQ5NzAwOS8lRTglQTclQTMlRTklOTklQTQlRTclQkQlOTElRTclQUIlOTklRTQlQjglOEQlRTUlODUlODElRTglQUUlQjglRTUlQTQlOEQlRTUlODglQjYlRTclOUElODQlRTklOTklOTAlRTUlODglQjYlRUYlQkMlODglRTQlQkMlOTglRTUlOEMlOTYlRTclODklODglRUYlQkMlODklRjAlOUYlOTQlQTUlRjAlOUYlOTQlQTUlRjAlOUYlOTQlQTUudXNlci5qcwovLyBAdXBkYXRlVVJMIGh0dHBzOi8vdXBkYXRlLmdyZWFzeWZvcmsub3JnL3NjcmlwdHMvNDk3MDA5LyVFOCVBNyVBMyVFOSU5OSVBNCVFNyVCRCU5MSVFNyVBQiU5OSVFNCVCOCU4RCVFNSU4NSU4MSVFOCVBRSVCOCVFNSVBNCU4RCVFNSU4OCVCNiVFNyU5QSU4NCVFOSU5OSU5MCVFNSU4OCVCNiVFRiVCQyU4OCVFNCVCQyU5OCVFNSU4QyU5NiVFNyU4OSU4OCVFRiVCQyU4OSVGMCU5RiU5NCVBNSVGMCU5RiU5NCVBNSVGMCU5RiU5NCVBNS5tZXRhLmpzCi8vID09L1VzZXJTY3JpcHQ9PQooZnVuY3Rpb24oKSB7CgkKCS8qKgoJICog54mI5p2D6K+05piO77ya5Y6f6ISa5pysaHR0cHM6Ly9naXRodWIuY29tL1dpbmRydW5uZXJNYXgvVEtTY3JpcHQvIOmHh+eUqE1JVOW8gOa6kOWNj+iurgoJICogCgkgKiBNSVTljY/orq7mmK/kuIDnp43lvIDmlL7mupDku6PnoIHova/ku7bmjojmnYPljY/orq7vvIzlhajnp7DkuLpNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IExpY2Vuc2XjgIIKCSAqIOivpeWNj+iuruWFgeiuuOiHqueUseWcsOS9v+eUqOOAgeWkjeWItuOAgeS/ruaUueOAgeWQiOW5tuOAgeWPkeW4g+OAgeWIhuWPkeOAgeWGjeaOiOadg+WSjOmUgOWUrui9r+S7tuWPiuWFtuWJr+acrOeahOS7u+S9lemDqOWIhuOAggoJICogTUlU5Y2P6K6u6KaB5rGC5Zyo6L2v5Lu255qE5omA5pyJ5Ymv5pys5Lit5YyF5ZCr54mI5p2D5aOw5piO5ZKM6K645Y+v5aOw5piOCgkgKiAKCSAqIOeJueatpOWjsOaYju+8gQoJICovCgoJY29uc3QgRE9NX1NUQUdFID0gewoJCVNUQVJUOiAiZG9jdW1lbnQtc3RhcnQiLAoJCUVORDogImRvY3VtZW50LWVuZCIKCX07Cgljb25zdCBET01fUkVBRFkgPSAiRE9NQ29udGVudExvYWRlZCI7Cgljb25zdCBQQUdFX0xPQURFRCA9ICJsb2FkIjsKCWNvbnN0IE1PVVNFX1VQID0gIm1vdXNldXAiOwoJY29uc3QgTU9VU0VfRE9XTiA9ICJtb3VzZWRvd24iOwoJY29uc3QgTU9VU0VfTU9WRSA9ICJtb3VzZW1vdmUiOwoJY29uc3QgQ09QWSA9ICJjb3B5IjsKCWNvbnN0IFNFTEVDVF9TVEFSVCA9ICJzZWxlY3RzdGFydCI7Cgljb25zdCBDT05URVhUX01FTlUgPSAiY29udGV4dG1lbnUiOwoJY29uc3QgS0VZX0RPV04gPSAia2V5ZG93biI7CgoJY29uc3QgY29tbW9uVXRpbHMgPSB7CgkJaXNTdHJpbmc6IGZ1bmN0aW9uKHZhbHVlKSB7CgkJCXJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAiW29iamVjdCBTdHJpbmddIjsKCQl9Cgl9CgoJY29uc3QgZG9tVXRpbHMgPSB7CgkJcXVlcnk6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7CgkJCXJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKCQl9LAoJCWF0dHI6IGZ1bmN0aW9uKHNlbGVjdG9yLCBhdHRyLCB2YWx1ZSkgewoJCQljb25zdCBkb20yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CgkJCWRvbTIgJiYgZG9tMi5zZXRBdHRyaWJ1dGUoYXR0ciwgdmFsdWUpOwoJCX0sCgkJYXBwZW5kOiBmdW5jdGlvbihzZWxlY3RvciwgY29udGVudCkgewoJCQljb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQkJaWYgKGNvbW1vblV0aWxzLmlzU3RyaW5nKGNvbnRlbnQpKSB7CgkJCQljb250YWluZXIuaW5uZXJIVE1MID0gY29udGVudDsKCQkJfSBlbHNlIHsKCQkJCWNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250ZW50KTsKCQkJfQoJCQljb25zdCB0YXJnZXRET00gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKCQkJdGFyZ2V0RE9NICYmIHRhcmdldERPTS5hcHBlbmQoY29udGFpbmVyKTsKCQkJcmV0dXJuIGNvbnRhaW5lcjsKCQl9LAoJCXJlbW92ZTogZnVuY3Rpb24oc2VsZWN0b3IpIHsKCQkJY29uc3QgdGFyZ2V0RE9NID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CgkJCXRhcmdldERPTSAmJiB0YXJnZXRET00ucmVtb3ZlKCk7CgkJfQoJfTsKCgljb25zdCBpbml0QmFzZUV2ZW50ID0gKHdlYnNpdGVDb25maWcpID0+IHsKCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihET01fUkVBRFksICgpID0+IHsKCQkJaWYgKHdlYnNpdGVDb25maWcuaW5pdENvcHlFdmVudCkgewoJCQkJZG9jdW1lbnQub25jb3B5ID0gKGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCk7CgkJCQlkb2N1bWVudC5ib2R5Lm9uY29weSA9IChlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpOwoJCQkJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihDT1BZLCAoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSk7CgkJCQlkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoQ09QWSwgKGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCkpOwoJCQl9CgkJfSk7Cgl9OwoKCWNvbnN0IGluaXRCYXNlU3R5bGUgPSAoKSA9PiB7CgkJdmFyIGNvcHlfYnRuX2NzcyA9IGAKCQkJLl9fY29waWVkLWJ1dHRvbiB7CgkJCQlhbGlnbi1pdGVtczpjZW50ZXI7CgkJCQliYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDApOwoJCQkJYm9yZGVyLXJhZGl1czozcHg7CgkJCQljb2xvcjojZmZmOwoJCQkJY3Vyc29yOnBvaW50ZXI7CgkJCQlkaXNwbGF5OmZsZXg7CgkJCQlmb250LXNpemU6MTJweDsKCQkJCXBhZGRpbmc6NHB4IDEwcHg7CgkJCQlqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwoJCQkJb3BhY2l0eTowOwoJCQkJcG9zaXRpb246YWJzb2x1dGU7CgkJCQl0cmFuc2l0aW9uOm9wYWNpdHkgLjNzOwoJCQkJei1pbmRleDotMTAwMDsKCQkJfQoJCWA7CgkJdmFyIG90bmVyX2NzcyA9IGAKCQkJI3NlbGVjdC10b29sdGlwLCAjc2ZNb2RhbCwgLm1vZGFsLWJhY2tkcm9wLCBkaXZbaWRePXJlYWRlci1oZWxwZXJdIHsKCQkJCWRpc3BsYXk6bm9uZSFpbXBvcnRhbnQKCQkJfQoJCQkubW9kYWwtb3BlbiB7CgkJCQlvdmVyZmxvdzphdXRvIWltcG9ydGFudAoJCQl9CgkJCS5fc2ZfYWRqdXN0X2JvZHkgewoJCQkJcGFkZGluZy1yaWdodDowIWltcG9ydGFudAoJCQl9CgkJYDsKCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihET01fUkVBRFksICgpID0+IHsKCQkJZG9tVXRpbHMuYXBwZW5kKCJoZWFkIiwgYDxzdHlsZT4ke2NvcHlfYnRuX2Nzc308L3N0eWxlPmApOwoJCQlkb21VdGlscy5hcHBlbmQoImhlYWQiLCBgPHN0eWxlPiR7b3RuZXJfY3NzfTwvc3R5bGU+YCk7CgkJfSk7Cgl9OwoKCS8qIQoJICog5aSW6YOo5byV55SoYHN0YXRpYy5kb2M4OC5jb21g5aOw5piOCgkgKiDmraTpg6jliIbmmK/lnKjlpITnkIZgZG9jODguY29tYOaJjeS8muWKoOi9veeahOi1hOa6kOaWh+S7tu+8jOatpOi1hOa6kOaWh+S7tueUseivpee9keermeWKoOi9veaXtuaPkOS+mwoJICovCglsZXQgcGF0aCA9ICIiOwoJY29uc3Qgd2Vic2l0ZV9ydWxlX2RvYzg4ID0gewoJCXJlZ2V4cDogLy4qZG9jODhcLmNvbVwvLisvLAoJCWluaXQ6ICgpID0+IHsKCQkJZG9tVXRpbHMuYXBwZW5kKAoJCQkJImJvZHkiLAoJCQkJYDxzdHlsZSBpZD0iY29weS1lbGVtZW50LWhpZGUiPiNsZWZ0LW1lbnV7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O308L3N0eWxlPmAKCQkJKTsKCQkJR01feG1saHR0cFJlcXVlc3QoewoJCQkJbWV0aG9kOiAiR0VUIiwKCQkJCXVybDogImh0dHBzOi8vcmVzMy5kb2M4OC5jb20vcmVzb3VyY2VzL2pzL21vZHVsZXMvbWFpbi12Mi5taW4uanM/dj0yLjU2IiwKCQkJCW9ubG9hZDogZnVuY3Rpb24ocmVzcG9uc2UpIHsKCQkJCQljb25zdCByZXN1bHQgPSAvXCgiI2NwX3RleHRhcmVhIlwpLnZhbFwoKFtcU10qPylcKTsvLmV4ZWMocmVzcG9uc2UucmVzcG9uc2VUZXh0KTsKCQkJCQlpZiAocmVzdWx0KSB7CgkJCQkJCXBhdGggPSByZXN1bHRbMV07CgkJCQkJfQoJCQkJfQoJCQl9KTsKCQkJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCAoKSA9PiB7CgkJCQljb25zdCBjcEZuID0gdW5zYWZlV2luZG93LmNvcHlUZXh0LnRvU3RyaW5nKCk7CgkJCQljb25zdCBmblJlc3VsdCA9IC88dGV4dGFyZWFbXHNcU10qPz4nXCsoW1xTXSo/KVwrIjxcL3RleHRhcmVhPi8uZXhlYyhjcEZuKTsKCQkJCWlmIChmblJlc3VsdCkgewoJCQkJCXBhdGggPSBmblJlc3VsdFsxXTsKCQkJCX0KCQkJfSk7CgkJfSwKCQlnZXRTZWxlY3RlZFRleHQ6ICgpID0+IHsKCQkJbGV0IHNlbGVjdCA9IHVuc2FmZVdpbmRvdzsKCQkJcGF0aC5zcGxpdCgiLiIpCgkJCQkuZm9yRWFjaCgodikgPT4gewoJCQkJCXNlbGVjdCA9IHNlbGVjdFt2XTsKCQkJCX0pOwoJCQlpZiAoIXNlbGVjdCkgewoJCQkJdW5zYWZlV2luZG93LkNvbmZpZy52aXAgPSAxOwoJCQkJdW5zYWZlV2luZG93LkNvbmZpZy5sb2dpbmVkID0gMTsKCQkJCWRvbVV0aWxzLnJlbW92ZSgiI2NvcHktZWxlbWVudC1oaWRlIik7CgkJCX0KCQkJcmV0dXJuIHNlbGVjdDsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV9zZWdtZW50ZmF1bHQgPSB7CgkJcmVnZXhwOiAvLipzZWdtZW50ZmF1bHRcLmNvbVwvLisvLAoJCWluaXQ6IGZ1bmN0aW9uKCkgewoJCQljb25zdCBib2R5ID0gZG9tVXRpbHMucXVlcnkoImJvZHkiKTsKCQkJaWYgKGJvZHkpIHsKCQkJCWJvZHkuY2xhc3NMaXN0LmFkZCgiX3NmX2FkanVzdF9ib2R5Iik7CgkJCQlib2R5Lm9uY2xpY2sgPSAoKSA9PiB7CgkJCQkJYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSAiMCI7CgkJCQl9OwoJCQl9CgkJfQoJfTsKCgljb25zdCBURVhUX1BMQUlOID0gInRleHQvcGxhaW4iOwoJY29uc3QgVEVYVF9IVE1MID0gInRleHQvaHRtbCI7Cgljb25zdCBkb3duZ3JhZGVDb3B5ID0gKGRhdGEpID0+IHsKCQljb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CgkJdGV4dGFyZWEuYWRkRXZlbnRMaXN0ZW5lcigKCQkJQ09QWSwKCQkJKGV2ZW50KSA9PiB7CgkJCQlmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkgewoJCQkJCWV2ZW50LmNsaXBib2FyZERhdGEgJiYgZXZlbnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKGtleSwgdmFsdWUpOwoJCQkJfQoJCQkJZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CgkJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJCQl9LAoJCQl0cnVlCgkJKTsKCQl0ZXh0YXJlYS5zdHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7CgkJdGV4dGFyZWEuc3R5bGUubGVmdCA9ICItOTk5cHgiOwoJCXRleHRhcmVhLnN0eWxlLnRvcCA9ICItOTk5cHgiOwoJCXRleHRhcmVhLnZhbHVlID0gZGF0YVtURVhUX1BMQUlOXTsKCQlkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRhcmVhKTsKCQl0ZXh0YXJlYS5zZWxlY3QoKTsKCQlkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpOwoJCWRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dGFyZWEpOwoJfTsKCWNvbnN0IGlzRW1wdHlDb250ZW50ID0gKGRhdGEpID0+IHsKCQlpZiAoIWRhdGEpewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJcmV0dXJuIGNvbW1vblV0aWxzLmlzU3RyaW5nKGRhdGEpID8gIWRhdGEgOiAhZGF0YVtURVhUX1BMQUlOXTsKCX07Cgljb25zdCBjb3B5ID0gKGRhdGEpID0+IHsKCQljb25zdCBwYXJhbXMgPSBjb21tb25VdGlscy5pc1N0cmluZyhkYXRhKSA/IHsKCQkJW1RFWFRfUExBSU5dOiBkYXRhCgkJfSA6IGRhdGE7CgkJY29uc3QgcGxhaW5UZXh0ID0gcGFyYW1zW1RFWFRfUExBSU5dOwoJCWlmICghcGxhaW5UZXh0KXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiB3aW5kb3cuQ2xpcGJvYXJkSXRlbSkgewoJCQljb25zdCBkYXRhSXRlbXMgPSB7fTsKCQkJZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkgewoJCQkJY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt2YWx1ZV0sIHsKCQkJCQl0eXBlOiBrZXkKCQkJCX0pOwoJCQkJZGF0YUl0ZW1zW2tleV0gPSBibG9iOwoJCQl9CgkJCW5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGUoW25ldyBDbGlwYm9hcmRJdGVtKGRhdGFJdGVtcyldKQoJCQkJLmNhdGNoKCgpID0+IHsKCQkJCQlkb3duZ3JhZGVDb3B5KHBhcmFtcyk7CgkJCQl9KTsKCQl9IGVsc2UgewoJCQlkb3duZ3JhZGVDb3B5KHBhcmFtcyk7CgkJfQoJCXJldHVybiB0cnVlOwoJfTsKCglsZXQgZG9tID0gbnVsbDsKCWxldCBpc1JlYWR5VG9IaWRkZW4gPSBmYWxzZTsKCWNvbnN0IGluc3RhbmNlID0gewoJCWlkOiAiX19jb3BpZWQiLAoJCWNsYXNzTmFtZTogIl9fY29waWVkLWJ1dHRvbiIsCgkJaW5pdDogZnVuY3Rpb24obmFtZSkgewoJCQljb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQkJY29udGFpbmVyLmlkID0gdGhpcy5pZDsKCQkJY29udGFpbmVyLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lOwoJCQljb250YWluZXIuaW5uZXJUZXh0ID0gbmFtZSB8fCAi5aSN5Yi2IjsKCQkJY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCAoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSwgdHJ1ZSk7CgkJCWNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCAoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSwgdHJ1ZSk7CgkJCWRvbSA9IGNvbnRhaW5lcjsKCQkJZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb20pOwoJCX0sCgkJZ2V0SW5zdGFuY2U6IGZ1bmN0aW9uKCkgewoJCQlpZiAoZG9tID09PSBudWxsKSB7CgkJCQl0aGlzLmluaXQoKTsKCQkJfQoJCQlyZXR1cm4gZG9tOwoJCX0sCgkJc2hvdzogZnVuY3Rpb24oZXZlbnQpIHsKCQkJaWYgKGlzUmVhZHlUb0hpZGRlbil7CgkJCQlyZXR1cm4gdm9pZCAwOwoJCQl9CgkJCWNvbnN0IGRvbTIgPSB0aGlzLmdldEluc3RhbmNlKCk7CgkJCWRvbTIuc3R5bGUubGVmdCA9IGAke2V2ZW50LnBhZ2VYICsgMTB9cHhgOwoJCQlkb20yLnN0eWxlLnRvcCA9IGAke2V2ZW50LnBhZ2VZICsgMTB9cHhgOwoJCQlkb20yLnN0eWxlLm9wYWNpdHkgPSAiMC44IjsKCQkJZG9tMi5zdHlsZS56SW5kZXggPSAiOTk5OTkiOwoJCX0sCgkJaGlkZTogZnVuY3Rpb24oa2VlcCA9IDM1MCkgewoJCQljb25zdCBkb20yID0gdGhpcy5nZXRJbnN0YW5jZSgpOwoJCQlkb20yLnN0eWxlLm9wYWNpdHkgPSAiMCI7CgkJCWlmIChrZWVwKSB7CgkJCQlpc1JlYWR5VG9IaWRkZW4gPSB0cnVlOwoJCQkJc2V0VGltZW91dCgoKSA9PiB7CgkJCQkJZG9tMi5zdHlsZS56SW5kZXggPSAiLTEwMDAwIjsKCQkJCQlpc1JlYWR5VG9IaWRkZW4gPSBmYWxzZTsKCQkJCX0sIGtlZXApOwoJCQl9CgkJfSwKCQlvbkNvcHk6IGZ1bmN0aW9uKGNvbnRlbnQsIGV2ZW50KSB7CgkJCWNvbnN0IGRvbTIgPSB0aGlzLmdldEluc3RhbmNlKCk7CgkJCXRoaXMuc2hvdyhldmVudCk7CgkJCWRvbTIub25jbGljayA9ICgpID0+IHsKCQkJCWNvcHkoY29udGVudCk7CgkJCQl0aGlzLmhpZGUoKTsKCQkJfTsKCQl9LAoJCWVuYWJsZTogZnVuY3Rpb24oKSB7CgkJCWNvbnN0IGRvbTIgPSB0aGlzLmdldEluc3RhbmNlKCk7CgkJCWRvbTIuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKCQl9LAoJCWRpc2FibGU6IGZ1bmN0aW9uKCkgewoJCQljb25zdCBkb20yID0gdGhpcy5nZXRJbnN0YW5jZSgpOwoJCQlkb20yLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CgkJfSwKCQlkZXN0cm95OiBmdW5jdGlvbigpIHsKCQkJY29uc3QgZWwgPSB0aGlzLmdldEluc3RhbmNlKCk7CgkJCWVsLnJlbW92ZSgpOwoJCQlkb20gPSBudWxsOwoJCX0KCX07CgoJY29uc3Qgc3RvcE5hdGl2ZVByb3BhZ2F0aW9uID0gKGV2ZW50KSA9PiB7CgkJZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Cgl9OwoJY29uc3QgdXRpbHMgPSB7CgkJaGlkZUJ1dHRvbjogKCkgPT4gewoJCQlpbnN0YW5jZS5kaXNhYmxlKCk7CgkJfSwKCQlzaG93QnV0dG9uOiAoKSA9PiB7CgkJCWluc3RhbmNlLmVuYWJsZSgpOwoJCX0sCgkJcmVtb3ZlQXR0cmlidXRlczogKHNlbGVjdG9yLCBhdHRyID0gW10pID0+IHsKCQkJY29uc3QgZG9tID0gaXNTdHJpbmcoc2VsZWN0b3IpID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgOiBzZWxlY3RvcjsKCQkJZG9tICYmIGF0dHIuZm9yRWFjaCgoaXRlbSkgPT4gZG9tLnJlbW92ZUF0dHJpYnV0ZShpdGVtKSk7CgkJfSwKCQllbmFibGVVc2VyU2VsZWN0QnlDU1M6ICgpID0+IHsKCQkJY29uc3QgY3NzID0gIip7dXNlci1zZWxlY3Q6IGF1dG8gIWltcG9ydGFudDstd2Via2l0LXVzZXItc2VsZWN0OiBhdXRvICFpbXBvcnRhbnQ7fSI7CgkJCWNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKCQkJc3R5bGUuaW5uZXJUZXh0ID0gY3NzOwoJCQljb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKCQkJaWYgKGhlYWQpIHsKCQkJCWhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpOwoJCQl9IGVsc2UgewoJCQkJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoCgkJCQkJUEFHRV9MT0FERUQsCgkJCQkJKCkgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChzdHlsZSkKCQkJCSk7CgkJCX0KCQl9LAoJCWVuYWJsZU9uU2VsZWN0U3RhcnQ6IChzZWxlY3RvcikgPT4gewoJCQljb25zdCBkb20gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKCQkJZG9tICYmIGRvbS5hZGRFdmVudExpc3RlbmVyKFNFTEVDVF9TVEFSVCwgc3RvcE5hdGl2ZVByb3BhZ2F0aW9uKTsKCQl9LAoJCWVuYWJsZU9uQ29udGV4dE1lbnU6IChzZWxlY3RvcikgPT4gewoJCQljb25zdCBkb20gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKCQkJZG9tICYmIGRvbS5hZGRFdmVudExpc3RlbmVyKENPTlRFWFRfTUVOVSwgc3RvcE5hdGl2ZVByb3BhZ2F0aW9uKTsKCQl9LAoJCWVuYWJsZU9uQ29weTogKHNlbGVjdG9yKSA9PiB7CgkJCWNvbnN0IGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwoJCQlkb20gJiYgZG9tLmFkZEV2ZW50TGlzdGVuZXIoQ09QWSwgc3RvcE5hdGl2ZVByb3BhZ2F0aW9uKTsKCQl9LAoJCWVuYWJsZU9uS2V5RG93bjogKHNlbGVjdG9yKSA9PiB7CgkJCWNvbnN0IGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwoJCQlkb20gJiYgZG9tLmFkZEV2ZW50TGlzdGVuZXIoS0VZX0RPV04sIChlKSA9PiB7CgkJCQlpZiAoZS5rZXkgPT09ICJjIiAmJiBlLmN0cmxLZXkpCgkJCQkJcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7CgkJCX0pOwoJCX0sCgkJZW5hYmxlT25TZWxlY3RTdGFydEJ5Q2FwdHVyZTogKCkgPT4gewoJCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihTRUxFQ1RfU1RBUlQsIHN0b3BOYXRpdmVQcm9wYWdhdGlvbiwgdHJ1ZSk7CgkJCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0VMRUNUX1NUQVJULCBzdG9wTmF0aXZlUHJvcGFnYXRpb24sIHRydWUpOwoJCX0sCgkJZW5hYmxlT25Db250ZXh0TWVudUJ5Q2FwdHVyZTogKCkgPT4gewoJCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihDT05URVhUX01FTlUsIHN0b3BOYXRpdmVQcm9wYWdhdGlvbiwgdHJ1ZSk7CgkJCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoQ09OVEVYVF9NRU5VLCBzdG9wTmF0aXZlUHJvcGFnYXRpb24sIHRydWUpOwoJCX0sCgkJZW5hYmxlT25Db3B5QnlDYXB0dXJlOiAoKSA9PiB7CgkJCXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKENPUFksIHN0b3BOYXRpdmVQcm9wYWdhdGlvbiwgdHJ1ZSk7CgkJCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoQ09QWSwgc3RvcE5hdGl2ZVByb3BhZ2F0aW9uLCB0cnVlKTsKCQl9LAoJCWVuYWJsZU9uS2V5RG93bkJ5Q2FwdHVyZTogKCkgPT4gewoJCQlkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKAoJCQkJS0VZX0RPV04sCgkJCQkoZSkgPT4gZS5jdHJsS2V5ICYmIGUua2V5LnRvTG9jYWxlVXBwZXJDYXNlKCkgPT09ICJDIiAmJiBlLnN0b3BQcm9wYWdhdGlvbigpLAoJCQkJdHJ1ZQoJCQkpOwoJCX0KCX07CgoJY29uc3Qgd2Vic2l0ZV9ydWxlX3dlbmt1JGJhaWR1ID0gewoJCXJlZ2V4cDogLy4qd2tcLmJhaWR1XC5jb21cL3ZpZXdcLy4rLywKCQlpbml0OiBmdW5jdGlvbigpIHsKCQkJdXRpbHMuaGlkZUJ1dHRvbigpOwoJCQl1dGlscy5lbmFibGVPblNlbGVjdFN0YXJ0QnlDYXB0dXJlKCk7CgkJCXdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CgkJCQlkb21VdGlscy5hdHRyKCIuc2YtZWR1LXdlbmt1LXZ3LWNvbnRhaW5lciIsICJzdHlsZSIsICIiKTsKCQkJfTsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV96aGlodSA9IHsKCQlyZWdleHA6IC8uKnpoaWh1XC5jb21cLy4qLywKCQlpbml0OiBmdW5jdGlvbigpIHsKCQkJdXRpbHMuaGlkZUJ1dHRvbigpOwoJCQl1dGlscy5lbmFibGVVc2VyU2VsZWN0QnlDU1MoKTsKCQkJdXRpbHMuZW5hYmxlT25Db3B5QnlDYXB0dXJlKCk7CgkJCWlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gInpodWFubGFuLnpoaWh1LmNvbSIpIHsKCQkJCWNvbnN0IHJlbW92ZUZvY2FsUG9pbnRNb2RhbCA9IChtdXRhdGlvbnNMaXN0KSA9PiB7CgkJCQkJZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7CgkJCQkJCWNvbnN0IGFkZGVkTm9kZXMgPSBtdXRhdGlvbi5hZGRlZE5vZGVzOwoJCQkJCQlmb3IgKGxldCBpID0gMDsgaSA8IGFkZGVkTm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCQkJCWNvbnN0IHRhcmdldCA9IGFkZGVkTm9kZXNbaV07CgkJCQkJCQlpZiAodGFyZ2V0Lm5vZGVUeXBlICE9IDEpCgkJCQkJCQkJcmV0dXJuIHZvaWQgMDsKCQkJCQkJCWlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRGl2RWxlbWVudCAmJiB0YXJnZXQucXVlcnlTZWxlY3RvcigiW2RhdGEtZm9jdXMtc2NvcGUtc3RhcnRdIikpIHsKCQkJCQkJCQljb25zdCBlbGVtZW50ID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoIltkYXRhLWZvY3VzLXNjb3BlLXN0YXJ0XSIpOwoJCQkJCQkJCWVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC50ZXh0Q29udGVudCAmJiBlbGVtZW50LnBhcmVudEVsZW1lbnQudGV4dENvbnRlbnQuaW5kZXhPZigi56uL5Y2z55m75b2VL+azqOWGjCIpID4gLTEgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX07CgkJCQljb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHJlbW92ZUZvY2FsUG9pbnRNb2RhbCk7CgkJCQlvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7CgkJCQkJY2hpbGRMaXN0OiB0cnVlLAoJCQkJCXN1YnRyZWU6IHRydWUKCQkJCX0pOwoJCQl9CgkJfQoJfTsKCgljb25zdCB3ZWJzaXRlX3J1bGVfMzBlZHUgPSB7CgkJcmVnZXhwOiAvLiozMGVkdVwuY29tXC5jblwvLisvLAoJCWluaXQ6IGZ1bmN0aW9uKCkgewoJCQl3aW5kb3cub25sb2FkID0gKCkgPT4gewoJCQkJdmFyIF9hOwoJCQkJY29uc3QgaWZyYW1lcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpZnJhbWUiKTsKCQkJCWlmIChpZnJhbWVzLmxlbmd0aCA9PT0gMikgewoJCQkJCWNvbnN0IGJvZHkgPSAoX2EgPSBpZnJhbWVzWzFdLmNvbnRlbnRXaW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfYS5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik7CgkJCQkJYm9keSAmJiB1dGlscy5yZW1vdmVBdHRyaWJ1dGVzKGJvZHksIFsib25jb3B5IiwgIm9uY29udGV4dG1lbnUiLCAib25zZWxlY3RzdGFydCJdKTsKCQkJCX0KCQkJfTsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV9kb2NzJHFxID0gewoJCXJlZ2V4cDogLy4qZG9jc1wucXFcLmNvbVwvLisvLAoJCWNvbmZpZzogewoJCQlpbml0Q29weUV2ZW50OiBmYWxzZSwKCQkJY2FwdHVyZUluc3RhbmNlOiB0cnVlLAoJCQlkZWxheTogMTAwCgkJfSwKCQlpbml0OiBmdW5jdGlvbigpIHsKCQkJd2luZG93Lm9ubG9hZCA9ICgpID0+IHsKCQkJCXV0aWxzLmhpZGVCdXR0b24oKTsKCQkJfTsKCQl9LAoJCWdldFNlbGVjdGVkVGV4dDogZnVuY3Rpb24oKSB7CgkJCXZhciBfYTsKCQkJaWYgKHVuc2FmZVdpbmRvdy5wYWQgJiYgdW5zYWZlV2luZG93LnBhZC5lZGl0b3IgJiYgIXVuc2FmZVdpbmRvdy5wYWQuZWRpdG9yLmlzQ29weWFibGUoKSkgewoJCQkJdXRpbHMuc2hvd0J1dHRvbigpOwoJCQkJY29uc3QgZWRpdG9yID0gdW5zYWZlV2luZG93LnBhZC5lZGl0b3I7CgkJCQlpZiAoZWRpdG9yLmdldENvcHlDb250ZW50KSB7CgkJCQkJY29uc3QgY29udGVudCA9IGVkaXRvci5nZXRDb3B5Q29udGVudCgpIHx8IHt9OwoJCQkJCWNvbnN0IHBsYWluVGV4dCA9IGNvbnRlbnQucGxhaW4gfHwgIiI7CgkJCQkJY29uc3QgaHRtbFRleHQgPSBjb250ZW50Lmh0bWwgfHwgIiI7CgkJCQkJcmV0dXJuIHsKCQkJCQkJW1RFWFRfUExBSU5dOiBwbGFpblRleHQsCgkJCQkJCVtURVhUX0hUTUxdOiBodG1sVGV4dAoJCQkJCX07CgkJCQl9IGVsc2UgewoJCQkJCWVkaXRvci5fZG9jRW52LmNvcHlhYmxlID0gdHJ1ZTsKCQkJCQllZGl0b3IuY2xpcGJvYXJkTWFuYWdlci5jb3B5KCk7CgkJCQkJY29uc3QgcGxhaW5UZXh0ID0gZWRpdG9yLmNsaXBib2FyZE1hbmFnZXIuY3VzdG9tQ2xpcGJvYXJkLnBsYWluIHx8ICIiOwoJCQkJCWNvbnN0IGh0bWxUZXh0ID0gZWRpdG9yLmNsaXBib2FyZE1hbmFnZXIuY3VzdG9tQ2xpcGJvYXJkLmh0bWwgfHwgIiI7CgkJCQkJZWRpdG9yLl9kb2NFbnYuY29weWFibGUgPSBmYWxzZTsKCQkJCQlyZXR1cm4gewoJCQkJCQlbVEVYVF9QTEFJTl06IHBsYWluVGV4dCwKCQkJCQkJW1RFWFRfSFRNTF06IGh0bWxUZXh0CgkJCQkJfTsKCQkJCX0KCQkJfSBlbHNlIGlmICh1bnNhZmVXaW5kb3cuU3ByZWFkc2hlZXRBcHAgJiYgdW5zYWZlV2luZG93LlNwcmVhZHNoZWV0QXBwLnBlcm1pc3Npb25zICYmIHVuc2FmZVdpbmRvdy5TcHJlYWRzaGVldEFwcC5wZXJtaXNzaW9ucy5zaGVldFN0YXR1cyAmJiB1bnNhZmVXaW5kb3cuU3ByZWFkc2hlZXRBcHAucGVybWlzc2lvbnMuc2hlZXRTdGF0dXMuY2FuQ29weSA9PT0gZmFsc2UgJiYgdW5zYWZlV2luZG93LlNwcmVhZHNoZWV0QXBwLnBlcm1pc3Npb25zLnNoZWV0U3RhdHVzLmNhbkVkaXQgJiYgdW5zYWZlV2luZG93LlNwcmVhZHNoZWV0QXBwLnBlcm1pc3Npb25zLnNoZWV0U3RhdHVzLmNhbkVkaXQoKSA9PT0gZmFsc2UpIHsKCQkJCXV0aWxzLnNob3dCdXR0b24oKTsKCQkJCWNvbnN0IFNwcmVhZHNoZWV0QXBwID0gdW5zYWZlV2luZG93LlNwcmVhZHNoZWV0QXBwOwoJCQkJY29uc3QgW3NlbGVjdGlvbl0gPSBTcHJlYWRzaGVldEFwcC52aWV3LmdldFNlbGVjdGlvblJhbmdlcygpOwoJCQkJaWYgKHNlbGVjdGlvbikgewoJCQkJCWNvbnN0IHRleHQgPSBbXTsKCQkJCQljb25zdCB7CgkJCQkJCXN0YXJ0Q29sSW5kZXgsCgkJCQkJCXN0YXJ0Um93SW5kZXgsCgkJCQkJCWVuZENvbEluZGV4LAoJCQkJCQllbmRSb3dJbmRleAoJCQkJCX0gPSBzZWxlY3Rpb247CgkJCQkJZm9yIChsZXQgaSA9IHN0YXJ0Um93SW5kZXg7IGkgPD0gZW5kUm93SW5kZXg7IGkrKykgewoJCQkJCQlmb3IgKGxldCBrID0gc3RhcnRDb2xJbmRleDsgayA8PSBlbmRDb2xJbmRleDsgaysrKSB7CgkJCQkJCQljb25zdCBjZWxsID0gU3ByZWFkc2hlZXRBcHAud29ya2Jvb2suYWN0aXZlU2hlZXQuZ2V0Q2VsbERhdGFBdFBvc2l0aW9uKGksIGspOwoJCQkJCQkJaWYgKCFjZWxsKQoJCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQkJdGV4dC5wdXNoKCIgIiwgKChfYSA9IGNlbGwuZm9ybWF0dGVkVmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS52YWx1ZSkgfHwgY2VsbC52YWx1ZSB8fCAiIik7CgkJCQkJCX0KCQkJCQkJaSAhPT0gZW5kUm93SW5kZXggJiYgdGV4dC5wdXNoKCJcbiIpOwoJCQkJCX0KCQkJCQljb25zdCBzdHIgPSB0ZXh0LmpvaW4oIiIpOwoJCQkJCXJldHVybiAvXlxzKiQvLnRlc3Qoc3RyKSA/ICIiIDogc3RyOwoJCQkJfQoJCQkJcmV0dXJuICIiOwoJCQl9CgkJCXJldHVybiAiIjsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV9ib2tlMTEyID0gewoJCXJlZ2V4cDogbmV3IFJlZ0V4cCgiLis6Ly9ib2tlMTEyLmNvbS9wb3N0Ly4rIiksCgkJaW5pdDogZnVuY3Rpb24oKSB7CgkJCXV0aWxzLmVuYWJsZU9uQ29weUJ5Q2FwdHVyZSgpOwoJCQljb25zdCB0ZW1wbGF0ZSA9IGAKCSAgICAgICAgPHN0eWxlPgoJICAgICAgICAgICAgOm5vdChpbnB1dCk6bm90KHRleHRhcmVhKTo6c2VsZWN0aW9uIHsKCSAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQ0MEIzICFpbXBvcnRhbnQ7CgkgICAgICAgICAgICAgICAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKCSAgICAgICAgICAgIH0KCSAKCSAgICAgICAgICAgIDpub3QoaW5wdXQpOm5vdCh0ZXh0YXJlYSk6Oi1tb3otc2VsZWN0aW9uIHsKCSAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQ0MEIzICFpbXBvcnRhbnQ7CgkgICAgICAgICAgICAgICAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKCSAgICAgICAgICAgIH0KCSAgICAgICAgPC9zdHlsZT4KCSAgICBgOwoJCQlkb21VdGlscy5hcHBlbmQoImhlYWQiLCB0ZW1wbGF0ZSk7CgkJfQoJfTsKCgljb25zdCB3ZWJzaXRlX3J1bGVfZGl5aWZhbndlbiA9IHsKCQlyZWdleHA6IC9kaXlpZmFud2VuLywKCQlpbml0OiBmdW5jdGlvbigpIHsKCQkJdXRpbHMuaGlkZUJ1dHRvbigpOwoJCQl1dGlscy5lbmFibGVPbkNvcHlCeUNhcHR1cmUoKTsKCQkJdXRpbHMuZW5hYmxlT25LZXlEb3duQnlDYXB0dXJlKCk7CgkJfQoJfTsKCgljb25zdCB3ZWJzaXRlX3J1bGVfbWJhbGliID0gewoJCXJlZ2V4cDogL21iYWxpYi8sCgkJaW5pdDogZnVuY3Rpb24oKSB7CgkJCXdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CgkJCQl1dGlscy5yZW1vdmVBdHRyaWJ1dGVzKCJmdWxsU2NyZWVuQ29udGFpbmVyIiwgWyJvbmNvcHkiLCAib25jb250ZXh0bWVudSIsICJvbnNlbGVjdHN0YXJ0Il0pOwoJCQl9OwoJCX0KCX07CgoJY29uc3Qgd2Vic2l0ZV9ydWxlX2NuaXRwbSA9IHsKCQlyZWdleHA6IC9jbml0cG0vLAoJCWluaXQ6IGZ1bmN0aW9uKCkgewoJCQl1dGlscy5oaWRlQnV0dG9uKCk7CgkJCXdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CgkJCQl1dGlscy5yZW1vdmVBdHRyaWJ1dGVzKCJib2R5IiwgWyJvbmNvcHkiLCAib25jb250ZXh0bWVudSIsICJvbnNlbGVjdHN0YXJ0Il0pOwoJCQl9OwoJCX0KCX07CgoJY29uc3Qgd2Vic2l0ZV9ydWxlX21paG95byA9IHsKCQlyZWdleHA6IG5ldyBSZWdFeHAoIi4rYmJzLm1paG95by5jb20vLisiKSwKCQlpbml0OiBmdW5jdGlvbigpIHsKCQkJdXRpbHMuaGlkZUJ1dHRvbigpOwoJCQl1dGlscy5lbmFibGVPbkNvcHlCeUNhcHR1cmUoKTsKCQkJdXRpbHMuZW5hYmxlT25TZWxlY3RTdGFydEJ5Q2FwdHVyZSgpOwoJCQl1dGlscy5lbmFibGVVc2VyU2VsZWN0QnlDU1MoKTsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV91ZW1lZHMgPSB7CgkJcmVnZXhwOiBuZXcgUmVnRXhwKCIuK3d3dy51ZW1lZHMuY24vLisiKSwKCQlpbml0OiBmdW5jdGlvbigpIHsKCQkJdXRpbHMuaGlkZUJ1dHRvbigpOwoJCQl1dGlscy5lbmFibGVVc2VyU2VsZWN0QnlDU1MoKTsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV9haXl1a2UgPSB7CgkJcmVnZXhwOiBuZXcgUmVnRXhwKCIuK2FpeXVrZS5jb20vbmV3cy8uKyIpLAoJCWluaXQ6IGZ1bmN0aW9uKCkgewoJCQl1dGlscy5oaWRlQnV0dG9uKCk7CgkJCXV0aWxzLmVuYWJsZVVzZXJTZWxlY3RCeUNTUygpOwoJCX0KCX07CgoJY29uc3Qgd2Vic2l0ZV9ydWxlX3FpZGlhbiA9IHsKCQlyZWdleHA6IG5ldyBSZWdFeHAoInFpZGlhbiIpLAoJCWluaXQ6IGZ1bmN0aW9uKCkgewoJCQl1dGlscy5oaWRlQnV0dG9uKCk7CgkJCXV0aWxzLmVuYWJsZVVzZXJTZWxlY3RCeUNTUygpOwoJCQl1dGlscy5lbmFibGVPbkNvcHkoIi5tYWluLXJlYWQtY29udGFpbmVyIik7CgkJCXV0aWxzLmVuYWJsZU9uQ29udGV4dE1lbnUoIi5tYWluLXJlYWQtY29udGFpbmVyIik7CgkJfQoJfTsKCgljb25zdCB3ZWJzaXRlX3J1bGVfem9uZ2hlbmcgPSB7CgkJcmVnZXhwOiBuZXcgUmVnRXhwKCJ6b25naGVuZyIpLAoJCWluaXQ6IGZ1bmN0aW9uKCkgewoJCQl1dGlscy5yZW1vdmVBdHRyaWJ1dGVzKCIucmVhZGVyX2JveCIsIFsic3R5bGUiLCAidW5zZWxlY3RhYmxlIiwgIm9uc2VsZWN0c3RhcnQiXSk7CgkJCXV0aWxzLnJlbW92ZUF0dHJpYnV0ZXMoIi5yZWFkZXJfbWFpbiIsIFsic3R5bGUiLCAidW5zZWxlY3RhYmxlIiwgIm9uc2VsZWN0c3RhcnQiXSk7CgkJCXV0aWxzLmhpZGVCdXR0b24oKTsKCQkJdXRpbHMuZW5hYmxlT25LZXlEb3duKCJib2R5Iik7CgkJCXV0aWxzLmVuYWJsZVVzZXJTZWxlY3RCeUNTUygpOwoJCQl1dGlscy5lbmFibGVPbkNvcHkoIi5jb250ZW50Iik7CgkJCXV0aWxzLmVuYWJsZU9uQ29udGV4dE1lbnUoImJvZHkiKTsKCQkJdXRpbHMuZW5hYmxlT25TZWxlY3RTdGFydCgiLmNvbnRlbnQiKTsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV8xN2sgPSB7CgkJcmVnZXhwOiBuZXcgUmVnRXhwKCIxN2siKSwKCQlpbml0OiAoKSA9PiB7CgkJCXV0aWxzLmhpZGVCdXR0b24oKTsKCQkJdXRpbHMuZW5hYmxlT25Db3B5KCIucmVhZEFyZWFCb3ggLnAiKTsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV9jaXdlaW1hbyA9IHsKCQlyZWdleHA6IG5ldyBSZWdFeHAoImNpd2VpbWFvIiksCgkJaW5pdDogZnVuY3Rpb24oKSB7CgkJCXV0aWxzLmhpZGVCdXR0b24oKTsKCQkJdXRpbHMuZW5hYmxlVXNlclNlbGVjdEJ5Q1NTKCk7CgkJCXV0aWxzLmVuYWJsZU9uQ29weSgiI0pfQm9va0NudCIpOwoJCQl1dGlscy5lbmFibGVPbkNvbnRleHRNZW51KCJib2R5Iik7CgkJCXV0aWxzLmVuYWJsZU9uU2VsZWN0U3RhcnQoIiNKX0Jvb2tDbnQiKTsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV9ib29rJHFxID0gewoJCXJlZ2V4cDogbmV3IFJlZ0V4cCgiYm9va1xcLnFxIiksCgkJaW5pdDogZnVuY3Rpb24oKSB7CgkJCXV0aWxzLmhpZGVCdXR0b24oKTsKCQkJdXRpbHMuZW5hYmxlT25Db3B5KCJib2R5Iik7CgkJCXV0aWxzLmVuYWJsZVVzZXJTZWxlY3RCeUNTUygpOwoJCQl1dGlscy5lbmFibGVPbkNvbnRleHRNZW51KCJib2R5Iik7CgkJCXV0aWxzLmVuYWJsZU9uU2VsZWN0U3RhcnQoImJvZHkiKTsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV91dGF0ZW4gPSB7CgkJcmVnZXhwOiBuZXcgUmVnRXhwKCJ1dGF0ZW4iKSwKCQlpbml0OiBmdW5jdGlvbigpIHsKCQkJdXRpbHMuaGlkZUJ1dHRvbigpOwoJCQl1dGlscy5lbmFibGVVc2VyU2VsZWN0QnlDU1MoKTsKCQkJdXRpbHMuZW5hYmxlT25TZWxlY3RTdGFydEJ5Q2FwdHVyZSgpOwoJCX0KCX07CgoJY29uc3Qgd2Vic2l0ZV9ydWxlX3dlbmt1JGJhaWR1XzIgPSB7CgkJY29uZmlnOiB7CgkJCXJ1bkF0OiAiZG9jdW1lbnQtc3RhcnQiCgkJfSwKCQlyZWdleHA6IG5ldyBSZWdFeHAoIndlbmt1LmJhaWR1LmNvbS8odmlld3xsaW5rfGFnZ3MpLioiKSwKCQlpbml0OiBmdW5jdGlvbigpIHsKCQkJZG9tVXRpbHMuYXBwZW5kKCJoZWFkIiwgYDxzdHlsZT5AbWVkaWEgcHJpbnQgeyBib2R5eyBkaXNwbGF5OmJsb2NrOyB9IH08L3N0eWxlPmApOwoJCQlsZXQgY2FudmFzRGF0YUdyb3VwID0gW107CgkJCWNvbnN0IG9yaWdpbk9iamVjdCA9IHsKCQkJCWNvbnRleHQyRFByb3RvdHlwZTogdW5zYWZlV2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpCgkJCQkJLmdldENvbnRleHQoIjJkIikKCQkJCQkuX19wcm90b19fCgkJCX07CgkJCWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgPSBuZXcgUHJveHkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCwgewoJCQkJYXBwbHk6IGZ1bmN0aW9uKHRhcmdldCwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCkgewoJCQkJCWNvbnN0IGVsZW1lbnQgPSBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCk7CgkJCQkJaWYgKGFyZ3VtZW50c0xpc3RbMF0gPT09ICJjYW52YXMiKSB7CgkJCQkJCWNvbnN0IHRtcERhdGEgPSB7CgkJCQkJCQljYW52YXM6IGVsZW1lbnQsCgkJCQkJCQlkYXRhOiBbXQoJCQkJCQl9OwoJCQkJCQllbGVtZW50LmdldENvbnRleHQoIjJkIikKCQkJCQkJCS5maWxsVGV4dCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHsKCQkJCQkJCQl0bXBEYXRhLmRhdGEucHVzaChhcmdzKTsKCQkJCQkJCQlvcmlnaW5PYmplY3QuY29udGV4dDJEUHJvdG90eXBlLmZpbGxUZXh0LmFwcGx5KHRoaXMsIGFyZ3MpOwoJCQkJCQkJfTsKCQkJCQkJY2FudmFzRGF0YUdyb3VwLnB1c2godG1wRGF0YSk7CgkJCQkJfQoJCQkJCXJldHVybiBlbGVtZW50OwoJCQkJfQoJCQl9KTsKCQkJbGV0IHBhZ2VEYXRhID0ge307CgkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bnNhZmVXaW5kb3csICJwYWdlRGF0YSIsIHsKCQkJCXNldDogKHYpID0+IHBhZ2VEYXRhID0gdiwKCQkJCWdldDogZnVuY3Rpb24oKSB7CgkJCQkJaWYgKCFwYWdlRGF0YS52aXBJbmZvKQoJCQkJCQlyZXR1cm4gcGFnZURhdGEudmlwSW5mbyA9IHt9OwoJCQkJCXBhZ2VEYXRhLnZpcEluZm8uZ2xvYmFsX3N2aXBfc3RhdHVzID0gMTsKCQkJCQlwYWdlRGF0YS52aXBJbmZvLmdsb2JhbF92aXBfc3RhdHVzID0gMTsKCQkJCQlwYWdlRGF0YS52aXBJbmZvLmlzVmlwID0gMTsKCQkJCQlwYWdlRGF0YS52aXBJbmZvLmlzV2Vua3VWaXAgPSAxOwoJCQkJCXJldHVybiBwYWdlRGF0YTsKCQkJCX0KCQkJfSk7CgkJCWNvbnN0IHRlbXBsYXRlQ1NTID0gWwoJCQkJIjxzdHlsZSBpZD0nY29weS10ZW1wbGF0ZS1jc3MnPiIsCgkJCQkiYm9keXtvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnR9IiwKCQkJCSIjY29weS10ZW1wbGF0ZS1odG1se3Bvc2l0aW9uOiBmaXhlZDsgdG9wOiAwOyByaWdodDogMDsgYm90dG9tOiAwOyBsZWZ0OiAwOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjt6LWluZGV4OiA5OTk5OTk7IGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC41KTt9IiwKCQkJCSIjY29weS10ZW1wbGF0ZS1odG1sID4gLnRlbXBsYXRlLWNvbnRhaW5lcntoZWlnaHQ6IDgwJTsgd2lkdGg6IDgwJTsgYmFja2dyb3VuZDogI2ZmZjsgfSIsCgkJCQkiLnRlbXBsYXRlLWNvbnRhaW5lciA+IC50aXRsZS1jb250YWluZXJ7ZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6IDEwcHg7Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7fSIsCgkJCQkiI2NvcHktdGVtcGxhdGUtdGV4dHtoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlO3Bvc2l0aW9uOiByZWxhdGl2ZTsgb3ZlcmZsb3c6IGF1dG87YmFja2dyb3VuZDogI2ZmZjt9IiwKCQkJCSIjY29weS10ZW1wbGF0ZS1odG1sICN0ZW1wbGF0ZS1jbG9zZXtjdXJzb3I6IHBvaW50ZXI7fSIsCgkJCQkiPC9zdHlsZT4iCgkJCV0uam9pbigiIik7CgkJCWNvbnN0IHJlbmRlciA9ICgpID0+IHsKCQkJCWNhbnZhc0RhdGFHcm91cCA9IGNhbnZhc0RhdGFHcm91cC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2FudmFzLmlkKTsKCQkJCXZhciB0ZW1wbGF0ZVRleHQgPSBjYW52YXNEYXRhR3JvdXAubWFwKChjYW52YXNEYXRhLCBpbmRleCkgPT4gewoJCQkJCWNvbnN0IGNvbXB1dGVkVG9wID0gaW5kZXggKiBOdW1iZXIoY2FudmFzRGF0YS5jYW52YXMuY2xpZW50SGVpZ2h0KTsKCQkJCQljb25zdCB0ZXh0SXRlbSA9IGNhbnZhc0RhdGEuZGF0YS5tYXAoCgkJCQkJCShpdGVtKSA9PiBgPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAke2l0ZW1bMV19cHg7IHRvcDogJHtpdGVtWzJdICsgY29tcHV0ZWRUb3B9cHgiPiR7aXRlbVswXX08L2Rpdj5gCgkJCQkJKTsKCQkJCQlyZXR1cm4gdGV4dEl0ZW0uam9pbigiIik7CgkJCQl9KTsKCQkJCQoJCQkJY29uc3QgZWRpdG9yVmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItdmlldyIpOwoJCQkJaWYoZWRpdG9yVmlldyl7CgkJCQkJdGVtcGxhdGVUZXh0ID0gW2VkaXRvclZpZXcuaW5uZXJIVE1MXTsKCQkJCX0KCQkKCQkJCWNvbnN0IHRlbXBsYXRlSFRNTCA9IFsKCQkJCQkiPGRpdiBpZD0nY29weS10ZW1wbGF0ZS1odG1sJz4iLAoJCQkJCSI8ZGl2IGNsYXNzPSd0ZW1wbGF0ZS1jb250YWluZXInPiIsCgkJCQkJIjxkaXYgY2xhc3M9J3RpdGxlLWNvbnRhaW5lcic+IiwKCQkJCQkiPGRpdj7or7foh6rooYzlpI3liLY8L2Rpdj4iLAoJCQkJCSI8ZGl2IGlkPSd0ZW1wbGF0ZS1jbG9zZSc+5YWz6ZetPC9kaXY+IiwKCQkJCQkiPC9kaXY+IiwKCQkJCQkiPGRpdiBpZD0nY29weS10ZW1wbGF0ZS10ZXh0Jz4iLAoJCQkJCXRlbXBsYXRlVGV4dC5qb2luKCIiKSwKCQkJCQkiPC9kaXY+IiwKCQkJCQkiPC9kaXY+IiwKCQkJCQkiPC9kaXY+IgoJCQkJXS5qb2luKCIiKTsKCQkJCWRvbVV0aWxzLmFwcGVuZCgiYm9keSIsIHRlbXBsYXRlSFRNTCk7CgkJCQlkb21VdGlscy5hcHBlbmQoImJvZHkiLCB0ZW1wbGF0ZUNTUyk7CgkJCQljb25zdCBjbG9zZUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNjb3B5LXRlbXBsYXRlLWh0bWwgI3RlbXBsYXRlLWNsb3NlIik7CgkJCQljb25zdCBjbG9zZSA9ICgpID0+IHsKCQkJCQlkb21VdGlscy5yZW1vdmUoIiNjb3B5LXRlbXBsYXRlLWh0bWwiKTsKCQkJCQlkb21VdGlscy5yZW1vdmUoIiNjb3B5LXRlbXBsYXRlLWNzcyIpOwoJCQkJCWNsb3NlQnV0dG9uICYmIGNsb3NlQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY2xvc2UpOwoJCQkJfTsKCQkJCWNsb3NlQnV0dG9uICYmIGNsb3NlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY2xvc2UpOwoJCQl9OwoJCQlkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgKCkgPT4gewoJCQkJZG9tVXRpbHMuYXBwZW5kKAoJCQkJCSJoZWFkIiwKCQkJCQlgPHN0eWxlPiNjb3B5LWJ0bi13a3twYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuNSk7cG9zaXRpb246IGZpeGVkOyBsZWZ0OjA7IHRvcDogNDAlO2N1cnNvcjogcG9pbnRlcjtjb2xvcjogI2ZmZjsgei1pbmRleDogOTk5OTk7fTwvc3R5bGU+YAoJCQkJKTsKCQkJCWRvbVV0aWxzLmFwcGVuZCgiYm9keSIsICI8ZGl2IGlkPSdjb3B5LWJ0bi13ayc+5aSN5Yi2PC9kaXY+Iik7CgkJCQljb25zdCBidG4gPSBkb21VdGlscy5xdWVyeSgiI2NvcHktYnRuLXdrIik7CgkJCQlidG4gJiYgKGJ0bi5vbmNsaWNrID0gcmVuZGVyKTsKCQkJfSk7CgkJfSwKCQlnZXRTZWxlY3RlZFRleHQ6ICgpID0+IHsKCQkJaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgKHdpbmRvdy5nZXRTZWxlY3Rpb24oKSB8fCAiIikKCQkJCS50b1N0cmluZygpKSB7CgkJCQlyZXR1cm4gKHdpbmRvdy5nZXRTZWxlY3Rpb24oKSB8fCAiIikKCQkJCQkudG9TdHJpbmcoKTsKCQkJfQoJCQljb25zdCByZXN1bHQgPSAv5p+l55yL5YWo6YOo5YyF5ZCr4oCcKFtcc1xTXSo/KeKAneeahOaWh+ahoy8uZXhlYyhkb2N1bWVudC5ib2R5LmlubmVySFRNTCk7CgkJCWlmIChyZXN1bHQpCgkJCQlyZXR1cm4gcmVzdWx0WzFdOwoJCQlyZXR1cm4gIiI7CgkJfQoJfTsKCgljb25zdCB3ZWJzaXRlX3J1bGVfeGlhb2hvbmdzaHUgPSB7CgkJcmVnZXhwOiBuZXcgUmVnRXhwKCJ4aWFvaG9uZ3NodSIpLAoJCWluaXQ6IGZ1bmN0aW9uKCkgewoJCQl1dGlscy5oaWRlQnV0dG9uKCk7CgkJCXV0aWxzLmVuYWJsZVVzZXJTZWxlY3RCeUNTUygpOwoJCQl1dGlscy5lbmFibGVPbktleURvd25CeUNhcHR1cmUoKTsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV9sZWV0Y29kZSA9IHsKCQlyZWdleHA6IG5ldyBSZWdFeHAoImxlZXRjb2RlIiksCgkJaW5pdDogZnVuY3Rpb24oKSB7CgkJCXV0aWxzLmhpZGVCdXR0b24oKTsKCQkJdXRpbHMuZW5hYmxlT25Db3B5KCIjbGMtaG9tZSIpOwoJCX0KCX07CgoJY29uc3Qgd2Vic2l0ZV9ydWxlX2NzZG4gPSB7CgkJcmVnZXhwOiAvY3Nkbi8sCgkJaW5pdDogZnVuY3Rpb24oKSB7CgkJCXV0aWxzLmhpZGVCdXR0b24oKTsKCQkJdXRpbHMuZW5hYmxlT25Db3B5QnlDYXB0dXJlKCk7CgkJCXV0aWxzLmVuYWJsZVVzZXJTZWxlY3RCeUNTUygpOwoJCX0KCX07CgoJY29uc3Qgd2Vic2l0ZV9ydWxlX2JpbGliaWxpID0gewoJCXJlZ2V4cDogbmV3IFJlZ0V4cCgiYmlsaWJpbGkiKSwKCQlpbml0OiBmdW5jdGlvbigpIHsKCQkJdXRpbHMuaGlkZUJ1dHRvbigpOwoJCQl1dGlscy5lbmFibGVPbkNvcHlCeUNhcHR1cmUoKTsKCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVfcnVsZV9jbmtpID0gewoJCXJlZ2V4cDogbmV3IFJlZ0V4cCgiY25raSIpLAoJCWluaXQ6IGZ1bmN0aW9uKCkgewoJCQl1dGlscy5oaWRlQnV0dG9uKCk7CgkJCXV0aWxzLmVuYWJsZU9uQ29udGV4dE1lbnVCeUNhcHR1cmUoKTsKCQkJdXRpbHMuZW5hYmxlT25LZXlEb3duQnlDYXB0dXJlKCk7CgkJCXV0aWxzLmVuYWJsZU9uQ29weUJ5Q2FwdHVyZSgpOwoJCX0KCX07CgoJY29uc3Qgd2Vic2l0ZV9ydWxlX2RvY2luID0gewoJCXJlZ2V4cDogbmV3IFJlZ0V4cCgiZG9jaW4uY29tLy4qIiksCgkJY29uZmlnOiB7CgkJCWluaXRDb3B5RXZlbnQ6IGZhbHNlLAoJCQljYXB0dXJlSW5zdGFuY2U6IHRydWUsCgkJCWRlbGF5OiAxMDAKCQl9LAoJCWluaXQ6IGZ1bmN0aW9uKCkgewoJCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihQQUdFX0xPQURFRCwgKCkgPT4gewoJCQkJdmFyIF9hOwoJCQkJcmV0dXJuIChfYSA9IGRvbVV0aWxzLnF1ZXJ5KCIjal9zZWxlY3QiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNsaWNrKCk7CgkJCX0pOwoJCQlkb21VdGlscy5hcHBlbmQoImhlYWQiLCAiPHN0eWxlPiNyZWFkZXItY29weS1lbHtkaXNwbGF5OiBub25lO308L3N0eWxlPiIpOwoJCX0sCgkJZ2V0U2VsZWN0ZWRUZXh0OiBmdW5jdGlvbigpIHsKCQkJaWYgKHVuc2FmZVdpbmRvdy5kb2NpblJlYWRlciAmJiB1bnNhZmVXaW5kb3cuZG9jaW5SZWFkZXIuc3QpIHsKCQkJCXJldHVybiB1bnNhZmVXaW5kb3cuZG9jaW5SZWFkZXIuc3Q7CgkJCX0KCQkJcmV0dXJuICIiOwoJCX0KCX07CgkKCWNvbnN0IHdlYnNpdGVfcnVsZV95b3VkYW8gPSB7CgkJY29uZmlnOiB7CgkJCWluaXRDb3B5RXZlbnQ6IGZhbHNlCgkJfSwKCQlyZWdleHA6IC9ub3RlXC55b3VkYW9cLmNvbVwvbmV3RWRpdG9yVjFcL2J1bGJcLmh0bWwuKi8sCgkJaW5pdDogZnVuY3Rpb24oKSB7CgkJCXV0aWxzLmhpZGVCdXR0b24oKTsKCQkJaWYgKHdpbmRvdy5wYXJlbnQgJiYgd2luZG93LnBhcmVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoInlub3Rlc2hhcmUiKSA+IC0xKSB7CgkJCQl1dGlscy5lbmFibGVVc2VyU2VsZWN0QnlDU1MoKTsKCQkJCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoTU9VU0VfRE9XTiwgc3RvcE5hdGl2ZVByb3BhZ2F0aW9uLCB0cnVlKTsKCQkJCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoTU9VU0VfTU9WRSwgc3RvcE5hdGl2ZVByb3BhZ2F0aW9uLCB0cnVlKTsKCQkJfQoJCX0KCX07CgkKCWNvbnN0IHdlYnNpdGVfcnVsZV91bmlvbiA9IHsKCQlyZWdleHA6IG5ldyBSZWdFeHAoCgkJCVsKCQkJCSJjb21tYW5kbGludXgiLAoJCQkJImNua2kiLAoJCQkJInJ1aXdlbiIsCgkJCQkib2gxMDAiLAoJCQkJImZ3c2lyIiwKCQkJCSJ3ZW54bSIsCgkJCQkidW5qcyIsCgkJCQkiYWhzcnN0IiwKCQkJCSJ5amJ5cyIsCgkJCQkiMzYwZG9jIiwKCQkJCSI4NTA1MDAiLAoJCQkJImppYW5iaWFva3UiLAoJCQkJImt0MjUwIiwKCQkJCSJrZWp1ZGF0aSIsCgkJCQkiYmFpYmVpa2UiLAoJCQkJInl1cXVlIiwKCQkJCSJjbnJlbmNhaSIsCgkJCQkia29kaXBsYXllciIsCgkJCQkidG9uZ3hpZWh1aSIsCgkJCQkibmRQdXJlVmlldyIsCgkJCQkiamlhbnNodSIsCgkJCQkibGlub3ZlbGliIiwKCQkJCSJjaGF6aWRpYW4iLAoJCQkJImp1ZWppbiIsCgkJCQkiemdiayIsCgkJCQkid2VubWkiLAoJCQkJInl1ZWR1XFwuYmFpZHUiLAoJCQkJImlucnJwIiwKCQkJCSJzaHViYW9jIiwKCQkJCSI1MWN0byIsCgkJCQkieGltYWxheWEiLAoJCQkJInhpZXhpZWJhbmciLAoJCQkJImRkd2s4IiwKCQkJCSJwaHBcXC5jbiIsCgkJCQkiZmFucWllbm92ZWxcXC5jb20vcmVhZGVyIiwKCQkJCSJjb29jb1xcLm5ldFxcLmNuIiwKCQkJCSJtb2JpbGV0cmFpbiIsCgkJCQkieGlhbmdxaXFpcHUiLAoJCQkJIm1cXC4xNjNcXC5jb20iLAoJCQkJImFpcGlheGkiLAoJCQkJIndlbmt1XFwuY3NkblxcLm5ldCIsCgkJCQkieGlhb3l1emhvdWZtXFwuY29tIiwKCQkJCSJtY21vZFxcLmNuIgoJCQldLmpvaW4oInwiKQoJCSksCgkJaW5pdDogZnVuY3Rpb24oKSB7CgkJCXV0aWxzLmhpZGVCdXR0b24oKTsKCQkJdXRpbHMuZW5hYmxlVXNlclNlbGVjdEJ5Q1NTKCk7CgkJCXV0aWxzLmVuYWJsZU9uQ29weUJ5Q2FwdHVyZSgpOwoJCX0KCX07CgoJY29uc3Qgd2Vic2l0ZV9ydWxlX3VuaW9uXzEgPSB7CgkJcmVnZXhwOiBuZXcgUmVnRXhwKFsid2p4IiwgImZhbnlpXFwuYmFpZHUiLCAidGlhbnFpIiwgInJyZHluYiIsICJmdXd1NyJdLmpvaW4oInwiKSksCgkJaW5pdDogZnVuY3Rpb24oKSB7CgkJCXV0aWxzLmhpZGVCdXR0b24oKTsKCQkJdXRpbHMuZW5hYmxlVXNlclNlbGVjdEJ5Q1NTKCk7CgkJCXV0aWxzLmVuYWJsZU9uQ29weUJ5Q2FwdHVyZSgpOwoJCQl1dGlscy5lbmFibGVPbktleURvd25CeUNhcHR1cmUoKTsKCQkJdXRpbHMuZW5hYmxlT25TZWxlY3RTdGFydEJ5Q2FwdHVyZSgpOwoJCQl1dGlscy5lbmFibGVPbkNvbnRleHRNZW51QnlDYXB0dXJlKCk7CgkJfQoJfTsKCgljb25zdCB3ZWJzaXRlX3J1bGVfZXhhbWNvbyA9IHsKCQljb25maWc6IHsKCQkJcnVuQXQ6IERPTV9TVEFHRS5TVEFSVAoJCX0sCgkJcmVnZXhwOiBuZXcgUmVnRXhwKFsiZXhhbWNvbyJdLmpvaW4oInwiKSksCgkJaW5pdDogZnVuY3Rpb24oKSB7CgkJCXV0aWxzLmhpZGVCdXR0b24oKTsKCQkJdXRpbHMuZW5hYmxlVXNlclNlbGVjdEJ5Q1NTKCk7CgkJCXV0aWxzLmVuYWJsZU9uQ29weUJ5Q2FwdHVyZSgpOwoJCQl1dGlscy5lbmFibGVPbktleURvd25CeUNhcHR1cmUoKTsKCQkJdXRpbHMuZW5hYmxlT25TZWxlY3RTdGFydEJ5Q2FwdHVyZSgpOwoJCQl1dGlscy5lbmFibGVPbkNvbnRleHRNZW51QnlDYXB0dXJlKCk7CgkJfQoJfTsKCgljb25zdCB3ZWJzaXRlX3J1bGVfa2RvYyA9IHsKCQljb25maWc6IHsKCQkJcnVuQXQ6IERPTV9TVEFHRS5TVEFSVAoJCX0sCgkJcmVnZXhwOiBuZXcgUmVnRXhwKCJrZG9jcyIpLAoJCWluaXQ6IGZ1bmN0aW9uKCkgewoJCQljb25zdCBwYXRjaCA9ICgpID0+IHsKCQkJCXVuc2FmZVdpbmRvdy5BUFAgJiYgKHVuc2FmZVdpbmRvdy5BUFAuY2FuQ29weSA9ICgpID0+IHRydWUpOwoJCQl9OwoJCQlpZiAodW5zYWZlV2luZG93LkFQUCkgewoJCQkJcGF0Y2goKTsKCQkJfSBlbHNlIHsKCQkJCWxldCBBUFAgPSB2b2lkIDA7CgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkodW5zYWZlV2luZG93LCAiQVBQIiwgewoJCQkJCWNvbmZpZ3VyYWJsZTogZmFsc2UsCgkJCQkJc2V0OiAodmFsdWUpID0+IHsKCQkJCQkJQVBQID0gdmFsdWU7CgkJCQkJCXZhbHVlICYmIHBhdGNoKCk7CgkJCQkJfSwKCQkJCQlnZXQ6ICgpID0+IEFQUAoJCQkJfSk7CgkJCX0KCQl9Cgl9OwoKCWNvbnN0IHdlYnNpdGVzID0gWwoJCXdlYnNpdGVfcnVsZV9zZWdtZW50ZmF1bHQsCgkJd2Vic2l0ZV9ydWxlX3dlbmt1JGJhaWR1LAoJCXdlYnNpdGVfcnVsZV96aGlodSwKCQl3ZWJzaXRlX3J1bGVfMzBlZHUsCgkJd2Vic2l0ZV9ydWxlX2RvY3MkcXEsCgkJd2Vic2l0ZV9ydWxlX2Jva2UxMTIsCgkJd2Vic2l0ZV9ydWxlX2RpeWlmYW53ZW4sCgkJd2Vic2l0ZV9ydWxlX21iYWxpYiwKCQl3ZWJzaXRlX3J1bGVfY25pdHBtLAoJCXdlYnNpdGVfcnVsZV9taWhveW8sCgkJd2Vic2l0ZV9ydWxlX3VlbWVkcywKCQl3ZWJzaXRlX3J1bGVfYWl5dWtlLAoJCXdlYnNpdGVfcnVsZV9xaWRpYW4sCgkJd2Vic2l0ZV9ydWxlX3pvbmdoZW5nLAoJCXdlYnNpdGVfcnVsZV8xN2ssCgkJd2Vic2l0ZV9ydWxlX2Npd2VpbWFvLAoJCXdlYnNpdGVfcnVsZV9ib29rJHFxLAoJCXdlYnNpdGVfcnVsZV91dGF0ZW4sCgkJd2Vic2l0ZV9ydWxlX3dlbmt1JGJhaWR1XzIsCgkJd2Vic2l0ZV9ydWxlX3hpYW9ob25nc2h1LAoJCXdlYnNpdGVfcnVsZV9kb2M4OCwKCQl3ZWJzaXRlX3J1bGVfbGVldGNvZGUsCgkJd2Vic2l0ZV9ydWxlX2NzZG4sCgkJd2Vic2l0ZV9ydWxlX2JpbGliaWxpLAoJCXdlYnNpdGVfcnVsZV9jbmtpLAoJCXdlYnNpdGVfcnVsZV9kb2NpbiwKCQl3ZWJzaXRlX3J1bGVfeW91ZGFvLAoJCXdlYnNpdGVfcnVsZV9rZG9jLAoJCXdlYnNpdGVfcnVsZV91bmlvbiwKCQl3ZWJzaXRlX3J1bGVfdW5pb25fMSwKCQl3ZWJzaXRlX3J1bGVfZXhhbWNvbwoJXTsKCglsZXQgc2l0ZUdldFNlbGVjdGVkVGV4dCA9IG51bGw7Cgljb25zdCBpbml0V2Vic2l0ZSA9ICgpID0+IHsKCQlsZXQgd2Vic2l0ZUNvbmZpZyA9IHsKCQkJaW5pdENvcHlFdmVudDogdHJ1ZSwKCQkJcnVuQXQ6IERPTV9TVEFHRS5FTkQsCgkJCWNhcHR1cmVJbnN0YW5jZTogZmFsc2UsCgkJCWRlbGF5OiAwCgkJfTsKCQljb25zdCBtYXRoZXIgPSAocmVnZXgsIHdlYnNpdGUpID0+IHsKCQkJaWYgKHJlZ2V4LnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWYpKSB7CgkJCQlpZiAod2Vic2l0ZS5jb25maWcpCgkJCQkJd2Vic2l0ZUNvbmZpZyA9IE9iamVjdC5hc3NpZ24od2Vic2l0ZUNvbmZpZywgd2Vic2l0ZS5jb25maWcpOwoJCQkJaWYgKHdlYnNpdGVDb25maWcucnVuQXQgPT09IERPTV9TVEFHRS5FTkQpIHsKCQkJCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihET01fUkVBRFksICgpID0+IHdlYnNpdGUuaW5pdCgpKTsKCQkJCX0gZWxzZSB7CgkJCQkJd2Vic2l0ZS5pbml0KCk7CgkJCQl9CgkJCQlpZiAod2Vic2l0ZS5nZXRTZWxlY3RlZFRleHQpewoJCQkJCXNpdGVHZXRTZWxlY3RlZFRleHQgPSB3ZWJzaXRlLmdldFNlbGVjdGVkVGV4dDsKCQkJCX0KCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9OwoJCXdlYnNpdGVzLnNvbWUoKHdlYnNpdGUpID0+IG1hdGhlcih3ZWJzaXRlLnJlZ2V4cCwgd2Vic2l0ZSkpOwoJCXJldHVybiB3ZWJzaXRlQ29uZmlnOwoJfTsKCWNvbnN0IGdldFNlbGVjdGVkVGV4dCA9ICgpID0+IHsKCQlpZiAoc2l0ZUdldFNlbGVjdGVkVGV4dCl7CgkJCXJldHVybiBzaXRlR2V0U2VsZWN0ZWRUZXh0KCk7CgkJfQoJCWlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKXsKCQkJcmV0dXJuICh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkgfHwgIiIpLnRvU3RyaW5nKCk7CgkJfQoJCWlmIChkb2N1bWVudC5nZXRTZWxlY3Rpb24pewoJCQlyZXR1cm4gKGRvY3VtZW50LmdldFNlbGVjdGlvbigpIHx8ICIiKS50b1N0cmluZygpOwoJCX0KCQlpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKXsKCQkJcmV0dXJuIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQ7CgkJfQkKCQlyZXR1cm4gIiI7Cgl9OwoKCShmdW5jdGlvbigpIHsKCQljb25zdCB3ZWJzaXRlQ29uZmlnID0gaW5pdFdlYnNpdGUoKTsKCQlpbml0QmFzZUV2ZW50KHdlYnNpdGVDb25maWcpOwoJCWluaXRCYXNlU3R5bGUoKTsKCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihNT1VTRV9VUCwgKGUpID0+IHsKCQkJCWNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7CgkJCQkJY29uc3QgY29udGVudCA9IGdldFNlbGVjdGVkVGV4dCgpOwoJCQkJCWlmIChpc0VtcHR5Q29udGVudChjb250ZW50KSB8fCBjb250ZW50PT0iICIpIHsKCQkJCQkJaW5zdGFuY2UuaGlkZSgpOwoJCQkJCQlyZXR1cm4gIiI7CgkJCQkJfQoJCQkJCWluc3RhbmNlLm9uQ29weShjb250ZW50LCBlKTsKCQkJCX07CgkJCQl3ZWJzaXRlQ29uZmlnLmRlbGF5ID8gc2V0VGltZW91dChoYW5kbGVyLCB3ZWJzaXRlQ29uZmlnLmRlbGF5KSA6IGhhbmRsZXIoKTsKCQkJfSwKCQkJd2Vic2l0ZUNvbmZpZy5jYXB0dXJlSW5zdGFuY2UKCQkpOwoJfSkoKTsKCQp9KSgpOw==
Add Comment
Please, Sign In to add comment