xiaomianao666

插件名:global_6

Aug 20th, 2023
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_6@base64://Ci8vID09VXNlclNjcmlwdD09Ci8vIEBuYW1lICAgICAgICAgICAgICDjgJDkuJPms6jkuIDkuKrohJrmnKzlj6rlgZrkuIDku7bkuovku7bjgJEKLy8gQG5hbWVzcGFjZSAgICAgICAgIGh0dHA6Ly90YW1wZXJtb25rZXkubmV0LwovLyBAdmVyc2lvbiAgICAgICAgICAgMS42LjUKLy8gQGRlc2NyaXB0aW9uICAgICAg44CQ5LiT5rOo5LiA5Liq6ISa5pys5Y+q5YGa5LiA5Lu25LqL5Lu244CR44CC5pSv5oyB77ya6IW+6K6v44CB54ix5aWH6Im644CB5LyY6YW344CB6IqS5p6c44CBcHB0duOAgeS5kOinhuetieWFtuWug+e9keerme+8mwovLyBAaWNvbiAgICAgICAgICAgICAgZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQVFFQWtBQ1FBQUQvL2dBVVUyOW1kSGRoY21VNklGTnVhWEJoYzNSbC85c0FRd0FEQWdJREFnSURBd01EQkFNREJBVUlCUVVFQkFVS0J3Y0dDQXdLREF3TENnc0xEUTRTRUEwT0VRNExDeEFXRUJFVEZCVVZGUXdQRnhnV0ZCZ1NGQlVVLzlzQVF3RURCQVFGQkFVSkJRVUpGQTBMRFJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVUvOEFBRVFnQUdnQWVBd0VpQUFJUkFRTVJBZi9FQUI4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFBQkFnTUVCUVlIQ0FrS0MvL0VBTFVRQUFJQkF3TUNCQU1GQlFRRUFBQUJmUUVDQXdBRUVRVVNJVEZCQmhOUllRY2ljUlF5Z1pHaENDTkNzY0VWVXRId0pETmljb0lKQ2hZWEdCa2FKU1luS0NrcU5EVTJOemc1T2tORVJVWkhTRWxLVTFSVlZsZFlXVnBqWkdWbVoyaHBhbk4wZFhaM2VIbDZnNFNGaG9lSWlZcVNrNVNWbHBlWW1acWlvNlNscHFlb3FhcXlzN1MxdHJlNHVickN3OFRGeHNmSXljclMwOVRWMXRmWTJkcmg0dVBrNWVibjZPbnE4Zkx6OVBYMjkvajUrdi9FQUI4QkFBTUJBUUVCQVFFQkFRRUFBQUFBQUFBQkFnTUVCUVlIQ0FrS0MvL0VBTFVSQUFJQkFnUUVBd1FIQlFRRUFBRUNkd0FCQWdNUkJBVWhNUVlTUVZFSFlYRVRJaktCQ0JSQ2thR3h3UWtqTTFMd0ZXSnkwUW9XSkRUaEpmRVhHQmthSmljb0tTbzFOamM0T1RwRFJFVkdSMGhKU2xOVVZWWlhXRmxhWTJSbFptZG9hV3B6ZEhWMmQzaDVlb0tEaElXR2g0aUppcEtUbEpXV2w1aVptcUtqcEtXbXA2aXBxckt6dExXMnQ3aTV1c0xEeE1YR3g4akp5dExUMU5YVzE5aloydUxqNU9YbTUranA2dkx6OVBYMjkvajUrdi9hQUF3REFRQUNFUU1SQUQ4QTgvc3RUaXZaTGhGVjBlQnRyaHdCK1BYcFhjL0JqNGJYWHh5MU9iVGRFMVhUckRVRTNHTzMxUHprTXlxTXN5dEhFNjRHZjRpRDZBMTVUclV4MGZVcmlWUWNYY0JVWS92aml2cGI5aEd6K3cvR0xUb2NZSzZkY2J2cVFDYS9RNmVjNDZkV3RoMjF6VUZOemR0M3pmdXZTOGJ0bmc1cndua3VDeTNEWnJTaTNER3lvcWl1WjZKUWYxbS9mbHEyaEcreU1QVGYyZTlYMW5WUEVGbFphOW9seC9ZVG1POW5EWEt4bzRMQjFHNkFNeFVvY2tEQjdFMWkrSnZnL3JuaHp3L3BldVJTV3V0NlJxUCtwdTlNTWpnSEJJREs2S3dPQWUzYkJ3YStnL2hRRVBpUDQxQ1ZtU002bmRibVJkeEEzelpJR1JuOHhYa25pUDQyV2RyNEMwRHdwNFhodlBJMC93RGVUWDJvSXNieXZoc2hVUjJBR1dKNVk5aDcxK2NVdUt1SzhaeFZpc3J5NktxVXFGU2twSnhTaXFjNkRuS1VwN3FYUHlxS1Y3cHYzV3RWOE5XeXpMS0dBaFhyTnhsTlR0WjNmTkdka2t1M0xlLzVualUxdERjYmZOaVNYYWNydlVIQjlxMy9BQS80MzhSK0VvNW85RDEvVk5HU1locFYwKzhrZ0RrZEN3UmhuOGF4YUsvb2QwYWJiYml0ZDlON2JYUGgvck5mbGhEbmRvM3NydXl2dmJ0ZnJiYzZLZjRqK0xMcTR1SjV2RkdzelQzQ0NPYVNUVUptYVZCbkNzUzJTQms4SDFOYzdSUlVVOE5Sb3lsT2xCUmNyWGFTVGR0RmZ2WmJHVTZ0U3BibmszYnV6Ly9aCi8vIEBhdXRob3IgICAgICAgICAgICB3X195aQovLyBAbWF0Y2ggICAgICAgICAgICAgKjovLyoueW91a3UuY29tLyoKLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly8qLmlxaXlpLmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vKi5pcS5jb20vKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovLyoubGUuY29tLyoKLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly92LnFxLmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vbS52LnFxLmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vKi50dWRvdS5jb20vKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovLyoubWd0di5jb20vKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovL3R2LnNvaHUuY29tLyoKLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly9maWxtLnNvaHUuY29tLyoKLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly8qLjE5MDUuY29tLyoKLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly8qLmJpbGliaWxpLmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vKi5wcHR2LmNvbS8qCiAKLy8gQHJlcXVpcmUgICAgICAgICAgIGh0dHBzOi8vY2RuLmJvb3RjZG4ubmV0L2FqYXgvbGlicy9qcXVlcnkvMy4yLjEvanF1ZXJ5Lm1pbi5qcwovLyBAY29ubmVjdCAgICAgICAgICAgYXBpLmJpbGliaWxpLmNvbQovLyBAZ3JhbnQgICAgICAgICAgICAgdW5zYWZlV2luZG93Ci8vIEBncmFudCAgICAgICAgICAgICBHTV9hZGRTdHlsZQovLyBAZ3JhbnQgICAgICAgICAgICAgR01fb3BlbkluVGFiCi8vIEBncmFudCAgICAgICAgICAgICBHTV9nZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgICAgICAgR01fc2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICAgICAgIEdNX3htbGh0dHBSZXF1ZXN0Ci8vIEBncmFudCAgICAgICAgICAgICBHTV9sb2cKLy8gQGNoYXJzZXQJCSAgICAgIFVURi04Ci8vIEBsaWNlbnNlICAgICAgICAgICBHUEwgTGljZW5zZQovLyA9PS9Vc2VyU2NyaXB0PT0KIApjb25zdCB1dGlsID0gKGZ1bmN0aW9uICgpIHsKIAogICAgZnVuY3Rpb24gZmluZFRhcmdldEVsZW1lbnQodGFyZ2V0Q29udGFpbmVyKSB7CiAgICAgICAgY29uc3QgYm9keSA9IHdpbmRvdy5kb2N1bWVudDsKICAgICAgICBsZXQgdGFiQ29udGFpbmVyOwogICAgICAgIGxldCB0cnlUaW1lID0gMDsKICAgICAgICBjb25zdCBtYXhUcnlUaW1lID0gMTIwOwogICAgICAgIGxldCBzdGFydFRpbWVzdGFtcDsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgICBmdW5jdGlvbiB0cnlGaW5kRWxlbWVudCh0aW1lc3RhbXApIHsKICAgICAgICAgICAgICAgIGlmICghc3RhcnRUaW1lc3RhbXApIHsKICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lID0gdGltZXN0YW1wIC0gc3RhcnRUaW1lc3RhbXA7CiAKICAgICAgICAgICAgICAgIGlmIChlbGFwc2VkVGltZSA+PSA1MDApIHsKICAgICAgICAgICAgICAgICAgICBHTV9sb2coIuafpeaJvuWFg+e0oO+8miIgKyB0YXJnZXRDb250YWluZXIgKyAi77yM56ysIiArIHRyeVRpbWUgKyAi5qyhIik7CiAgICAgICAgICAgICAgICAgICAgdGFiQ29udGFpbmVyID0gYm9keS5xdWVyeVNlbGVjdG9yKHRhcmdldENvbnRhaW5lcik7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRhYkNvbnRhaW5lcikgewogICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRhYkNvbnRhaW5lcik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgrK3RyeVRpbWUgPT09IG1heFRyeVRpbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lc3RhbXAgPSB0aW1lc3RhbXA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCF0YWJDb250YWluZXIgJiYgdHJ5VGltZSA8IG1heFRyeVRpbWUpIHsKICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodHJ5RmluZEVsZW1lbnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAKICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRyeUZpbmRFbGVtZW50KTsKICAgICAgICB9KTsKICAgIH0KIAogICAgZnVuY3Rpb24gdXJsQ2hhbmdlUmVsb2FkKCkgewogICAgICAgIGNvbnN0IG9sZEhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKICAgICAgICBsZXQgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgICAgIGxldCBuZXdIcmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICAgICAgICAgIGlmIChvbGRIcmVmICE9PSBuZXdIcmVmKSB7CiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIDUwMCk7CiAgICB9CiAKICAgIGZ1bmN0aW9uIHJlb212ZVZpZGVvKCkgewogICAgICAgIHNldEludGVydmFsKCgpID0+IHsKICAgICAgICAgICAgZm9yIChsZXQgdmlkZW8gb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIikpIHsKICAgICAgICAgICAgICAgIGlmICh2aWRlby5zcmMpIHsKICAgICAgICAgICAgICAgICAgICB2aWRlby5yZW1vdmVBdHRyaWJ1dGUoInNyYyIpOwogICAgICAgICAgICAgICAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB2aWRlby5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgdmlkZW8ucGF1c2UoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sIDUwMCk7CiAgICB9CiAKICAgIGZ1bmN0aW9uIHN5bmNSZXF1ZXN0KG9wdGlvbikgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgICAgICAgIG9wdGlvbi5vbmxvYWQgPSAocmVzKSA9PiB7CiAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIG9wdGlvbi5vbmVycm9yID0gKGVycikgPT4gewogICAgICAgICAgICAgICAgcmVqZWN0KGVycik7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIEdNX3htbGh0dHBSZXF1ZXN0KG9wdGlvbik7CiAgICAgICAgfSk7CiAgICB9CiAKICAgIHJldHVybiB7CiAgICAgICAgcmVxOiAob3B0aW9uKSA9PiBzeW5jUmVxdWVzdChvcHRpb24pLAogICAgICAgIGZpbmRUYXJnZXRFbGU6ICh0YXJnZXRFbGUpID0+IGZpbmRUYXJnZXRFbGVtZW50KHRhcmdldEVsZSksCiAgICAgICAgdXJsQ2hhbmdlUmVsb2FkOiAoKSA9PiB1cmxDaGFuZ2VSZWxvYWQoKSwKICAgICAgICByZW9tdmVWaWRlbzogKCkgPT4gcmVvbXZlVmlkZW8oKQogICAgfQp9KSgpOwogCiAKY29uc3Qgc3VwZXJWaXAgPSAoZnVuY3Rpb24gKCkgewogCiAgICBjb25zdCBfQ09ORklHXyA9IHsKICAgICAgICBpc01vYmlsZTogbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvKEFuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkpL2kpLAogICAgICAgIGN1cnJlbnRQbGF5ZXJOb2RlOiBudWxsLAogICAgICAgIHZpcEJveElkOiAndmlwX2p4X2JveCcgKyBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCksCiAgICAgICAgZmxhZzogImZsYWdfdmlwIiwKICAgICAgICBhdXRvUGxheWVyS2V5OiAiYXV0b19wbGF5ZXJfa2V5IiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0LAogICAgICAgIGF1dG9QbGF5ZXJWYWw6ICJhdXRvX3BsYXllcl92YWx1ZV8iICsgd2luZG93LmxvY2F0aW9uLmhvc3QsCiAgICAgICAgdmlkZW9QYXJzZUxpc3Q6IFsKICAgICAgICAgICAgeyJuYW1lIjogIue7vOWQiC9C56uZIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2p4Lmpzb25wbGF5ZXIuY29tL3BsYXllci8/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAiWVQiLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vangueWFuZ3R1LnRvcC8/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAiUGxheWVyLUpZIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2p4LnBsYXllcmp5LmNvbS8/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAi6Jm+57GzIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2p4LnhtZmx2LmNvbS8/dXJsPSJ9LAogICAgICAgICAgICAvKnsibmFtZSI6ICJOTlhWIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2p4Lm5ueHYuY24vdHYucGhwP3VybD0ifSwqLwogICAgICAgICAgICAvKnsibmFtZSI6ICLlkKzkuZAiLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vanguZGo2dS5jb20vP3VybD0ifSwqLwogICAgICAgICAgICAvKnsibmFtZSI6ICJSREhLIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2p4LnJkaGsubmV0Lz92PSJ9LCovCiAgICAgICAgICAgIHsibmFtZSI6ICJ5cGFyc2UiLCAidHlwZSI6ICIxLDIiLCAidXJsIjogImh0dHBzOi8vangueXBhcnNlLmNvbS9pbmRleC5waHA/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAiT0siLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vYXBpLm9ranguY2M6MzM4OS9qeC5waHA/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAiT0tKWCIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly9va2p4LmNjLz91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICJtMTkwNyIsICJ0eXBlIjogIjEsMiIsICJ1cmwiOiAiaHR0cHM6Ly9pbTE5MDcudG9wLz9qeD0ifSwKIAogICAgICAgICAgICB7Im5hbWUiOiAi54ix6LGGIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2p4LmFpZG91ZXIubmV0Lz91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICLnjKrouYQiLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vanguaXp0eXkuY29tL0JlaS8/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAi5aSc5bmVIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL3d3dy55ZW11Lnh5ei8/dXJsPSJ9LAogCiAgICAgICAgICAgIHsibmFtZSI6ICJNQU8iLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vd3d3Lm10b3N6LmNvbS9tM3U4LnBocD91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICJNM1U4VFYiLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vangubTN1OC50di9qaWV4aS8/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAi6ZOt5Lq65LqRIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL3BhcnNlLjEyM21pbmdyZW4uY29tLz91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICI0a2R2IiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2p4LjRrZHYuY29tLz91cmw9In0sCiAKICAgICAgICAgICAgeyJuYW1lIjogIjE3MTciLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vY2ttb3YuY2N5ampkLmNvbS9ja21vdi8/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAiODA5MCIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly93d3cuODA5MGcuY24vP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogInFpYW5xaSIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly9hcGkucWlhbnFpLm5ldC92aXAvP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogImxhb2JhbmRxIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL3ZpcC5sYW9iYW5kcS5jb20vamlleGkucGhwP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogInBsYXltM3U4IiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL3d3dy5wbGF5bTN1OC5jbi9qaWV4aS5waHA/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAi5peg5ZCN5bCP56uZIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL3d3dy5hZG1pbmlzdHJhdG9ydy5jb20vdmlkZW8ucGhwP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogIkNLIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL3d3dy5ja3BsYXllci52aXAvamlleGkvP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogIuebmOWPpCIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly9nby55aDA1MjMuY24veS5jeT91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICJCbGJvIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2p4LmJsYm8uY2M6NDQzMy8/dXJsPSJ9LAogICAgICAgIF0sCiAgICAgICAgcGxheWVyQ29udGFpbmVyczogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBob3N0OiAidi5xcS5jb20iLAogICAgICAgICAgICAgICAgY29udGFpbmVyOiAiI21vZF9wbGF5ZXIsI3BsYXllci1jb250YWluZXIsLmNvbnRhaW5lci1wbGF5ZXIiLAogICAgICAgICAgICAgICAgbmFtZTogIkRlZmF1bHQiLAogICAgICAgICAgICAgICAgZGlzcGxheU5vZGVzOiBbIiNtYXNrX2xheWVyIiwgIi5tb2RfdmlwX3BvcHVwIiwgIiNtYXNrX2xheWVyIiwgIi5wYW5lbC10aXAtcGF5Il0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaG9zdDogIm0udi5xcS5jb20iLAogICAgICAgICAgICAgICAgY29udGFpbmVyOiAiLm1vZF9wbGF5ZXIsI3BsYXllciIsCiAgICAgICAgICAgICAgICBuYW1lOiAiRGVmYXVsdCIsCiAgICAgICAgICAgICAgICBkaXNwbGF5Tm9kZXM6IFsiLm1vZF92aXBfcG9wdXAiLCAiW2NsYXNzXj1hcHBfXSxbY2xhc3NePWFwcC1dLFtjbGFzcyo9X2FwcF9dLFtjbGFzcyo9LWFwcC1dLFtjbGFzcyQ9X2FwcF0sW2NsYXNzJD0tYXBwXSIsICJkaXZbZHQtZWlkPW9wZW5fYXBwX2JvdHRvbV0iLCAiZGl2LnZpZGVvX2Z1bmN0aW9uLnZpZGVvX2Z1bmN0aW9uX25ldyIsICJhW29wZW4tYXBwXSIsICJzZWN0aW9uLm1vZF9zb3VyY2UiLCAic2VjdGlvbi5tb2RfYm94Lm1vZF9zaWRlc2xpcF9oLm1vZF9tdWx0aV9maWd1cmVzX2gsc2VjdGlvbi5tb2Rfc2lkZXNsaXBfcHJpdmlsZWdlcyxzZWN0aW9uLm1vZF9nYW1lX3JlYyIsICIuYXQtYXBwLWJhbm5lciJdCiAgICAgICAgICAgIH0sCiAKICAgICAgICAgICAge2hvc3Q6ICJ3Lm1ndHYuY29tIiwgY29udGFpbmVyOiAiI21ndHYtcGxheWVyLXdyYXAiLCBuYW1lOiAiRGVmYXVsdCIsIGRpc3BsYXlOb2RlczogW119LAogICAgICAgICAgICB7aG9zdDogInd3dy5tZ3R2LmNvbSIsIGNvbnRhaW5lcjogIiNtZ3R2LXBsYXllci13cmFwIiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaG9zdDogIm0ubWd0di5jb20iLAogICAgICAgICAgICAgICAgY29udGFpbmVyOiAiLnZpZGVvLWFyZWEiLAogICAgICAgICAgICAgICAgbmFtZTogIkRlZmF1bHQiLAogICAgICAgICAgICAgICAgZGlzcGxheU5vZGVzOiBbImRpdltjbGFzc149bWctYXBwXSIsICIudmlkZW8tYXJlYS1iYXIiLCAiLm9wZW4tYXBwLXBvcHVwIl0KICAgICAgICAgICAgfSwKICAgICAgICAgICAge2hvc3Q6ICJ3d3cuYmlsaWJpbGkuY29tIiwgY29udGFpbmVyOiAiI3BsYXllcl9tb2R1bGUsI2JpbGliaWxpUGxheWVyLCNiaWxpYmlsaS1wbGF5ZXIiLCBuYW1lOiAiRGVmYXVsdCIsIGRpc3BsYXlOb2RlczogW119LAogICAgICAgICAgICB7aG9zdDogIm0uYmlsaWJpbGkuY29tIiwgY29udGFpbmVyOiAiLnBsYXllci13cmFwcGVyLC5wbGF5ZXItY29udGFpbmVyLC5tcGxheWVyIiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ3d3cuaXFpeWkuY29tIiwgY29udGFpbmVyOiAiI2ZsYXNoYm94IiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFsiI3BsYXllclBvcHVwIiwgImRpdltjbGFzc149cXktaGVhZGVyLWxvZ2luLXBvcF0iLCAic2VjdGlvbltjbGFzc149bW9kYWwtY292ZXJfXSIgLCIudG9hc3QiXX0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGhvc3Q6ICJtLmlxaXlpLmNvbSIsCiAgICAgICAgICAgICAgICBjb250YWluZXI6ICIubS12aWRlby1wbGF5ZXItd3JhcCIsCiAgICAgICAgICAgICAgICBuYW1lOiAiRGVmYXVsdCIsCiAgICAgICAgICAgICAgICBkaXNwbGF5Tm9kZXM6IFsiZGl2Lm0taXF5R3VpZGUtbGF5ZXIiLCAiYVtkb3duLWFwcC1hbmRyb2lkLXVybF0iLCAiW25hbWU9bS1leHRlbmRCYXJdIiwgIltjbGFzcyo9Q2hhbm5lbEhvbWVCYW5uZXJdIiwgInNlY3Rpb24ubS1ob3RXb3Jkcy1ib3R0b20iXQogICAgICAgICAgICB9LAogICAgICAgICAgICB7aG9zdDogInd3dy5pcS5jb20iLCBjb250YWluZXI6ICIuaW50bC12aWRlby13cmFwIiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ2LnlvdWt1LmNvbSIsIGNvbnRhaW5lcjogIiNwbGF5ZXIiLCBuYW1lOiAiRGVmYXVsdCIsIGRpc3BsYXlOb2RlczogWyIjaWZyYW1hV3JhcHBlciIsICIjY2hlY2tvdXRfY291bnRlcl9tYXNrIiwgIiNjaGVja291dF9jb3VudGVyX3BvcHVwIl19LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBob3N0OiAibS55b3VrdS5jb20iLAogICAgICAgICAgICAgICAgY29udGFpbmVyOiAiI3BsYXllciwuaDUtZGV0YWlsLXBsYXllciIsCiAgICAgICAgICAgICAgICBuYW1lOiAiRGVmYXVsdCIsCiAgICAgICAgICAgICAgICBkaXNwbGF5Tm9kZXM6IFsiLmNhbGxFbmRfYm94IiwgIi5oNS1kZXRhaWwtZ3VpZGUiLCAiLmg1LWRldGFpbC12aXAtZ3VpZGUiXQogICAgICAgICAgICB9LAogICAgICAgICAgICB7aG9zdDogInR2LnNvaHUuY29tIiwgY29udGFpbmVyOiAiI3BsYXllciIsIG5hbWU6ICJEZWZhdWx0IiwgZGlzcGxheU5vZGVzOiBbXX0sCiAgICAgICAgICAgIHtob3N0OiAiZmlsbS5zb2h1LmNvbSIsIGNvbnRhaW5lcjogIiNwbGF5ZXJXcmFwIiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ3d3cubGUuY29tIiwgY29udGFpbmVyOiAiI2xlX3BsYXlib3giLCBuYW1lOiAiRGVmYXVsdCIsIGRpc3BsYXlOb2RlczogW119LAogICAgICAgICAgICB7aG9zdDogInZpZGVvLnR1ZG91LmNvbSIsIGNvbnRhaW5lcjogIi50ZC1wbGF5Ym94IiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ2LnBwdHYuY29tIiwgY29udGFpbmVyOiAiI3BwdHZfcGxheXBhZ2VfYm94IiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ2aXAucHB0di5jb20iLCBjb250YWluZXI6ICIudy12aWRlbyIsIG5hbWU6ICJEZWZhdWx0IiwgZGlzcGxheU5vZGVzOiBbXX0sCiAgICAgICAgICAgIHtob3N0OiAid3d3Lndhc3UuY24iLCBjb250YWluZXI6ICIjZmxhc2hDb250ZW50IiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ3d3cuYWNmdW4uY24iLCBjb250YWluZXI6ICIjcGxheWVyIiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ2aXAuMTkwNS5jb20iLCBjb250YWluZXI6ICIjcGxheWVyLCN2b2RQbGF5ZXIiLCBuYW1lOiAiRGVmYXVsdCIsIGRpc3BsYXlOb2RlczogW119LAogICAgICAgICAgICB7aG9zdDogInd3dy4xOTA1LmNvbSIsIGNvbnRhaW5lcjogIiNwbGF5ZXIsI3ZvZFBsYXllciIsIG5hbWU6ICJEZWZhdWx0IiwgZGlzcGxheU5vZGVzOiBbXX0sCiAgICAgICAgXQogICAgfTsKIAogICAgY2xhc3MgQmFzZUNvbnN1bWVyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgICAgdGhpcy5wYXJzZSA9ICgpID0+IHsKICAgICAgICAgICAgICAgIHV0aWwuZmluZFRhcmdldEVsZSgnYm9keScpCiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGNvbnRhaW5lcikgPT4gdGhpcy5wcmVIYW5kbGUoY29udGFpbmVyKSkKICAgICAgICAgICAgICAgICAgICAudGhlbigoY29udGFpbmVyKSA9PiB0aGlzLmdlbmVyYXRlRWxlbWVudChjb250YWluZXIpKQogICAgICAgICAgICAgICAgICAgIC50aGVuKChjb250YWluZXIpID0+IHRoaXMuYmluZEV2ZW50KGNvbnRhaW5lcikpCiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGNvbnRhaW5lcikgPT4gdGhpcy5hdXRvUGxheShjb250YWluZXIpKQogICAgICAgICAgICAgICAgICAgIC50aGVuKChjb250YWluZXIpID0+IHRoaXMucG9zdEhhbmRsZShjb250YWluZXIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIHByZUhhbmRsZShjb250YWluZXIpIHsKICAgICAgICAgICAgX0NPTkZJR18uY3VycmVudFBsYXllck5vZGUuZGlzcGxheU5vZGVzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7CiAgICAgICAgICAgICAgICB1dGlsLmZpbmRUYXJnZXRFbGUoaXRlbSkKICAgICAgICAgICAgICAgICAgICAudGhlbigob2JqKSA9PiBvYmouc3R5bGUuZGlzcGxheSA9ICdub25lJykKICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiBjb25zb2xlLndhcm4oIuS4jeWtmOWcqOWFg+e0oCIsIGUpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZXNvbHZlKGNvbnRhaW5lcikpOwogICAgICAgIH0KIAogICAgICAgIGdlbmVyYXRlRWxlbWVudChjb250YWluZXIpIHsKICAgICAgICAgICAgR01fYWRkU3R5bGUoYAogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0ge2N1cnNvcjpwb2ludGVyOyBwb3NpdGlvbjpmaXhlZDsgdG9wOjEyMHB4OyBsZWZ0OjBweDsgei1pbmRleDo5OTk5OTk5OyB0ZXh0LWFsaWduOmxlZnQ7fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gLmltZ19ib3h7d2lkdGg6MzJweDsgaGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMxYzg0YzY7bWFyZ2luOjEwcHggMHB4O30KICAgICAgICAgICAgICAgICAgICAgICAgIyR7X0NPTkZJR18udmlwQm94SWR9IC52aXBfbGlzdCB7ZGlzcGxheTpub25lOyBwb3NpdGlvbjphYnNvbHV0ZTsgYm9yZGVyLXJhZGl1czo1cHg7IGxlZnQ6MzJweDsgdG9wOjA7IHRleHQtYWxpZ246Y2VudGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjM2Y0MTQ5OyBib3JkZXI6MXB4IHNvbGlkIHdoaXRlO3BhZGRpbmc6MTBweCAwcHg7IHdpZHRoOjM4MHB4OyBtYXgtaGVpZ2h0OjQwMHB4OyBvdmVyZmxvdy15OmF1dG87fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gLnZpcF9saXN0IGxpe2JvcmRlci1yYWRpdXM6MnB4OyBmb250LXNpemU6MTJweDsgY29sb3I6I0RDRENEQzsgdGV4dC1hbGlnbjpjZW50ZXI7IHdpZHRoOmNhbGMoMjUlIC0gMTRweCk7IGxpbmUtaGVpZ2h0OjIxcHg7IGZsb2F0OmxlZnQ7IGJvcmRlcjoxcHggc29saWQgZ3JheTsgcGFkZGluZzowIDRweDsgbWFyZ2luOjRweCAycHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOiBub3dyYXA7dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7LW8tdGV4dC1vdmVyZmxvdzplbGxpcHNpczt9CiAgICAgICAgICAgICAgICAgICAgICAgICMke19DT05GSUdfLnZpcEJveElkfSAudmlwX2xpc3QgbGk6aG92ZXJ7Y29sb3I6IzFjODRjNjsgYm9yZGVyOjFweCBzb2xpZCAjMWM4NGM2O30KICAgICAgICAgICAgICAgICAgICAgICAgIyR7X0NPTkZJR18udmlwQm94SWR9IC52aXBfbGlzdCB1bHtwYWRkaW5nLWxlZnQ6IDEwcHg7fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gLnZpcF9saXN0Ojotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo1cHg7IGhlaWdodDoxcHg7fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gLnZpcF9saXN0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYntib3gtc2hhZG93Omluc2V0IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAwLjIpOyBiYWNrZ3JvdW5kOiNBOEE4QTg7fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gLnZpcF9saXN0Ojotd2Via2l0LXNjcm9sbGJhci10cmFja3tib3gtc2hhZG93Omluc2V0IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAwLjIpOyBiYWNrZ3JvdW5kOiNGMUYxRjE7fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gbGkuc2VsZWN0ZWR7Y29sb3I6IzFjODRjNjsgYm9yZGVyOjFweCBzb2xpZCAjMWM4NGM2O30KCQkJCQkJYCk7CiAKICAgICAgICAgICAgaWYgKF9DT05GSUdfLmlzTW9iaWxlKSB7CiAgICAgICAgICAgICAgICBHTV9hZGRTdHlsZShgCiAgICAgICAgICAgICAgICAgICAgIyR7X0NPTkZJR18udmlwQm94SWR9IHt0b3A6MzAwcHg7fQogICAgICAgICAgICAgICAgICAgICMke19DT05GSUdfLnZpcEJveElkfSAudmlwX2xpc3Qge3dpZHRoOjMwMHB4O30KICAgICAgICAgICAgICAgICAgICBgKTsKICAgICAgICAgICAgfQogCiAgICAgICAgICAgIGxldCB0eXBlXzFfc3RyID0gIiI7CiAgICAgICAgICAgIGxldCB0eXBlXzJfc3RyID0gIiI7CiAgICAgICAgICAgIGxldCB0eXBlXzNfc3RyID0gIiI7CiAgICAgICAgICAgIF9DT05GSUdfLnZpZGVvUGFyc2VMaXN0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlLmluY2x1ZGVzKCIxIikpIHsKICAgICAgICAgICAgICAgICAgICB0eXBlXzFfc3RyICs9IGA8bGkgY2xhc3M9Im5xLWxpIiB0aXRsZT0iJHtpdGVtLm5hbWV9MSIgZGF0YS1pbmRleD0iJHtpbmRleH0iPiR7aXRlbS5uYW1lfTwvbGk+YDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUuaW5jbHVkZXMoIjIiKSkgewogICAgICAgICAgICAgICAgICAgIHR5cGVfMl9zdHIgKz0gYDxsaSBjbGFzcz0idGMtbGkiIHRpdGxlPSIke2l0ZW0ubmFtZX0iIGRhdGEtaW5kZXg9IiR7aW5kZXh9Ij4ke2l0ZW0ubmFtZX08L2xpPmA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlLmluY2x1ZGVzKCIzIikpIHsKICAgICAgICAgICAgICAgICAgICB0eXBlXzNfc3RyICs9IGA8bGkgY2xhc3M9InRjLWxpIiB0aXRsZT0iJHtpdGVtLm5hbWV9IiBkYXRhLWluZGV4PSIke2luZGV4fSI+JHtpdGVtLm5hbWV9PC9saT5gOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKIAogICAgICAgICAgICBsZXQgYXV0b1BsYXkgPSAhIUdNX2dldFZhbHVlKF9DT05GSUdfLmF1dG9QbGF5ZXJLZXksIG51bGwpID8gIuW8gCIgOiAi5YWzIjsKIAogICAgICAgICAgICAkKGNvbnRhaW5lcikuYXBwZW5kKGAKICAgICAgICAgICAgICAgIDxkaXYgaWQ9IiR7X0NPTkZJR18udmlwQm94SWR9Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aXBfaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltZ19ib3giIHRpdGxlPSLpgInmi6nop6PmnpDmupAiIHN0eWxlPSJjb2xvcjp3aGl0ZTtmb250LXNpemU6MTZweDtmb250LXdlaWdodDpib2xkO2JvcmRlci1yYWRpdXM6NXB4OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5WPC9zcGFuPkk8c3BhbiBzdHlsZT0iY29sb3I6IHllbGxvdzsiPlA8L3NwYW4+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpcF9saXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJjb2xvcjojMWM4NGM2OyBmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAxNnB4OyBwYWRkaW5nOjVweCAwcHg7Ij5b5YaF5bWM5pKt5pS+XTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3R5cGVfMV9zdHJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNsZWFyOmJvdGg7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0iY29sb3I6IzFjODRjNjsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZzo1cHggMHB4OyI+W+W8ueeql+aSreaUvuW4pumAiembhl08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0eXBlXzJfc3RyfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9ImNvbG9yOiMxYzg0YzY7IGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDE2cHg7IHBhZGRpbmc6NXB4IDBweDsiPlvlvLnnqpfmkq3mlL7kuI3luKbpgInpm4ZdPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dHlwZV8zX3N0cn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246bGVmdDtjb2xvcjojRkZGO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmc6MHB4IDEwcHg7bWFyZ2luLXRvcDoxMHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+6Ieq5Yqo6Kej5p6Q5Yqf6IO96K+05piO77yaPC9iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4mbmJzcDsmbmJzcDsx44CB6Ieq5Yqo6Kej5p6Q5Yqf6IO96buY6K6k5YWz6Zet77yI6Ieq5Yqo6Kej5p6Q5Y+q5pSv5oyB5YaF5bWM5pKt5pS+5rqQ77yJCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPiZuYnNwOyZuYnNwOzLjgIHlvIDlkK/oh6rliqjop6PmnpDvvIznvZHpobXmiZPlvIDlkI7ohJrmnKzlsIbmoLnmja7lvZPliY3pgInkuK3nmoTop6PmnpDmupDoh6rliqjop6PmnpDop4bpopHjgILlpoLop6PmnpDlpLHotKXvvIzor7fmiYvliqjpgInmi6nkuI3lkIznmoTop6PmnpDmupDlsJ3or5UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+Jm5ic3A7Jm5ic3A7M+OAgeayoeaciemAieS4reino+aekOa6kOWwhumaj+acuumAieWPluS4gOS4qgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4mbmJzcDsmbmJzcDs044CB5aaC5p+Q5Lqb572R56uZ5pyJ5Lya5ZGY5Y+v5Lul5YWz6Zet6Ieq5Yqo6Kej5p6Q5Yqf6IO9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW1nX2JveCIgaWQ9InZpcF9hdXRvIiBzdHlsZT0iY29sb3I6d2hpdGU7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6Ym9sZDtib3JkZXItcmFkaXVzOjVweDsiIHRpdGxlPSLmmK/lkKbmiZPlvIDoh6rliqjop6PmnpDjgILoi6Xoh6rliqjop6PmnpDlpLHotKXvvIzor7fmiYvliqjpgInmi6nlhbblroPmjqXlj6PlsJ3or5XvvIHvvIEiPiR7YXV0b1BsYXl9PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj5gKTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUoY29udGFpbmVyKSk7CiAgICAgICAgfQogCiAgICAgICAgYmluZEV2ZW50KGNvbnRhaW5lcikgewogICAgICAgICAgICBjb25zdCB2aXBCb3ggPSAkKGAjJHtfQ09ORklHXy52aXBCb3hJZH1gKTsKICAgICAgICAgICAgaWYgKF9DT05GSUdfLmlzTW9iaWxlKSB7CiAgICAgICAgICAgICAgICB2aXBCb3guZmluZCgiLnZpcF9pY29uIikub24oImNsaWNrIiwgKCkgPT4gdmlwQm94LmZpbmQoIi52aXBfbGlzdCIpLnRvZ2dsZSgpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZpcEJveC5maW5kKCIudmlwX2ljb24iKS5vbigibW91c2VvdmVyIiwgKCkgPT4gdmlwQm94LmZpbmQoIi52aXBfbGlzdCIpLnNob3coKSk7CiAgICAgICAgICAgICAgICB2aXBCb3guZmluZCgiLnZpcF9pY29uIikub24oIm1vdXNlb3V0IiwgKCkgPT4gdmlwQm94LmZpbmQoIi52aXBfbGlzdCIpLmhpZGUoKSk7CiAgICAgICAgICAgIH0KIAogICAgICAgICAgICBsZXQgX3RoaXMgPSB0aGlzOwogICAgICAgICAgICB2aXBCb3guZmluZCgiLnZpcF9saXN0IC5ucS1saSIpLmVhY2goKGxpSW5kZXgsIGl0ZW0pID0+IHsKICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludCgkKGl0ZW0pLmF0dHIoImRhdGEtaW5kZXgiKSk7CiAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoX0NPTkZJR18uYXV0b1BsYXllclZhbCwgaW5kZXgpOwogICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKF9DT05GSUdfLmZsYWcsICJ0cnVlIik7CiAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2hvd1BsYXllcldpbmRvdyhfQ09ORklHXy52aWRlb1BhcnNlTGlzdFtpbmRleF0pOwogICAgICAgICAgICAgICAgICAgIHZpcEJveC5maW5kKCIudmlwX2xpc3QgbGkiKS5yZW1vdmVDbGFzcygic2VsZWN0ZWQiKTsKICAgICAgICAgICAgICAgICAgICAkKGl0ZW0pLmFkZENsYXNzKCJzZWxlY3RlZCIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2aXBCb3guZmluZCgiLnZpcF9saXN0IC50Yy1saSIpLmVhY2goKGxpSW5kZXgsIGl0ZW0pID0+IHsKICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludCgkKGl0ZW0pLmF0dHIoImRhdGEtaW5kZXgiKSk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlkZW9PYmogPSBfQ09ORklHXy52aWRlb1BhcnNlTGlzdFtpbmRleF07CiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHZpZGVvT2JqLnVybCArIHdpbmRvdy5sb2NhdGlvbi5ocmVmOwogICAgICAgICAgICAgICAgICAgIEdNX29wZW5JblRhYih1cmwsIHthY3RpdmU6IHRydWUsIGluc2VydDogdHJ1ZSwgc2V0UGFyZW50OiB0cnVlfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgLy/lj7PplK7np7vliqjkvY3nva4KICAgICAgICAgICAgdmlwQm94Lm1vdXNlZG93bihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggIT09IDMpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCkKICAgICAgICAgICAgICAgIHZpcEJveC5jc3MoImN1cnNvciIsICJtb3ZlIik7CiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbkRpdiA9ICQodGhpcykub2Zmc2V0KCk7CiAgICAgICAgICAgICAgICBsZXQgZGlzdGVuY2VYID0gZS5wYWdlWCAtIHBvc2l0aW9uRGl2LmxlZnQ7CiAgICAgICAgICAgICAgICBsZXQgZGlzdGVuY2VZID0gZS5wYWdlWSAtIHBvc2l0aW9uRGl2LnRvcDsKIAogICAgICAgICAgICAgICAgJChkb2N1bWVudCkubW91c2Vtb3ZlKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBlLnBhZ2VYIC0gZGlzdGVuY2VYOwogICAgICAgICAgICAgICAgICAgIGxldCB5ID0gZS5wYWdlWSAtIGRpc3RlbmNlWTsKICAgICAgICAgICAgICAgICAgICBjb25zdCB3aW5kb3dXaWR0aCA9ICQod2luZG93KS53aWR0aCgpOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpbmRvd0hlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKTsKIAogICAgICAgICAgICAgICAgICAgIGlmICh4IDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICB4ID0gMDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHggPiB3aW5kb3dXaWR0aCAtIHZpcEJveC5vdXRlcldpZHRoKHRydWUpIC0gMTAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHggPSB3aW5kb3dXaWR0aCAtIHZpcEJveC5vdXRlcldpZHRoKHRydWUpIC0gMTAwOwogICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgIGlmICh5IDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICB5ID0gMDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHkgPiB3aW5kb3dIZWlnaHQgLSB2aXBCb3gub3V0ZXJIZWlnaHQodHJ1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHdpbmRvd0hlaWdodCAtIHZpcEJveC5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmlwQm94LmNzcygibGVmdCIsIHgpOwogICAgICAgICAgICAgICAgICAgIHZpcEJveC5jc3MoInRvcCIsIHkpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5tb3VzZXVwKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ21vdXNlbW92ZScpOwogICAgICAgICAgICAgICAgICAgIHZpcEJveC5jc3MoImN1cnNvciIsICJwb2ludGVyIik7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmNvbnRleHRtZW51KGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZXNvbHZlKGNvbnRhaW5lcikpOwogICAgICAgIH0KIAogICAgICAgIGF1dG9QbGF5KGNvbnRhaW5lcikgewogICAgICAgICAgICBjb25zdCB2aXBCb3ggPSAkKGAjJHtfQ09ORklHXy52aXBCb3hJZH1gKTsKICAgICAgICAgICAgdmlwQm94LmZpbmQoIiN2aXBfYXV0byIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICghIUdNX2dldFZhbHVlKF9DT05GSUdfLmF1dG9QbGF5ZXJLZXksIG51bGwpKSB7CiAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoX0NPTkZJR18uYXV0b1BsYXllcktleSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5odG1sKCLlhbMiKTsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoInRpdGxlIiwgIuaYr+WQpuaJk+W8gOiHquWKqOino+aekOOAguiLpeiHquWKqOino+aekOWksei0pe+8jOivt+aJi+WKqOmAieaLqeWFtuWug+aOpeWPo+Wwneivle+8ge+8gSIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZShfQ09ORklHXy5hdXRvUGxheWVyS2V5LCAidHJ1ZSIpOwogICAgICAgICAgICAgICAgICAgICQodGhpcykuaHRtbCgi5byAIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICB9LCAyMDApOwogICAgICAgICAgICB9KTsKIAogICAgICAgICAgICBpZiAoISFHTV9nZXRWYWx1ZShfQ09ORklHXy5hdXRvUGxheWVyS2V5LCBudWxsKSkgewogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQbGF5ZXIoY29udGFpbmVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVzb2x2ZShjb250YWluZXIpKTsKICAgICAgICB9CiAKICAgICAgICBzZWxlY3RQbGF5ZXIoY29udGFpbmVyKSB7CiAgICAgICAgICAgIGxldCBpbmRleCA9IEdNX2dldFZhbHVlKF9DT05GSUdfLmF1dG9QbGF5ZXJWYWwsIDIpOwogICAgICAgICAgICBsZXQgYXV0b09iaiA9IF9DT05GSUdfLnZpZGVvUGFyc2VMaXN0W2luZGV4XTsKICAgICAgICAgICAgbGV0IF90aCA9IHRoaXM7CiAgICAgICAgICAgIGlmIChhdXRvT2JqLnR5cGUuaW5jbHVkZXMoIjEiKSkgewogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgX3RoLnNob3dQbGF5ZXJXaW5kb3coYXV0b09iaik7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlwQm94ID0gJChgIyR7X0NPTkZJR18udmlwQm94SWR9YCk7CiAgICAgICAgICAgICAgICAgICAgdmlwQm94LmZpbmQoYC52aXBfbGlzdCBbdGl0bGU9IiR7YXV0b09iai5uYW1lfTEiXWApLmFkZENsYXNzKCJzZWxlY3RlZCIpOwogICAgICAgICAgICAgICAgICAgICQoY29udGFpbmVyKS5maW5kKCIjdmlwX2F1dG8iKS5hdHRyKCJ0aXRsZSIsIGDoh6rliqjop6PmnpDmupDvvJoke2F1dG9PYmoubmFtZX1gKTsKICAgICAgICAgICAgICAgIH0sIDI1MDApOwogICAgICAgICAgICB9CiAgICAgICAgfQogCiAgICAgICAgc2hvd1BsYXllcldpbmRvdyh2aWRlb09iaikgewogICAgICAgICAgICB1dGlsLmZpbmRUYXJnZXRFbGUoX0NPTkZJR18uY3VycmVudFBsYXllck5vZGUuY29udGFpbmVyKQogICAgICAgICAgICAgICAgLnRoZW4oKGNvbnRhaW5lcikgPT4gewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB2aWRlb09iai50eXBlOwogICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSB2aWRlb09iai51cmwgKyB3aW5kb3cubG9jYXRpb24uaHJlZjsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZS5pbmNsdWRlcygiMSIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVvbXZlVmlkZW8oKTsKICAgICAgICAgICAgICAgICAgICAgICAgJChjb250YWluZXIpLmVtcHR5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICQoY29udGFpbmVyKS5lbXB0eSgpOwogICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWZyYW1lRGl2Q3NzID0gIndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDo5OTk5OTk7IjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9DT05GSUdfLmlzTW9iaWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVEaXZDc3MgPSAid2lkdGg6MTAwJTtoZWlnaHQ6MjIwcHg7ei1pbmRleDo5OTk5OTk7IjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoX0NPTkZJR18uaXNNb2JpbGUgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiaXFpeWkuY29tIikgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVEaXZDc3MgPSAid2lkdGg6MTAwJTtoZWlnaHQ6MjIwcHg7ei1pbmRleDo5OTk5OTk7bWFyZ2luLXRvcDotNTYuMjUlOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJChjb250YWluZXIpLmFwcGVuZChgPGRpdiBzdHlsZT0iJHtpZnJhbWVEaXZDc3N9Ij48aWZyYW1lIGlkPSJpZnJhbWUtcGxheWVyLTRhNWI2YyIgc3JjPSIke3VybH0iIHN0eWxlPSJib3JkZXI6bm9uZTsiIGFsbG93ZnVsbHNjcmVlbj0idHJ1ZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+PC9pZnJhbWU+PC9kaXY+YCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQogCiAgICAgICAgcG9zdEhhbmRsZShjb250YWluZXIpIHsKICAgICAgICAgICAgaWYgKCEhR01fZ2V0VmFsdWUoX0NPTkZJR18uYXV0b1BsYXllcktleSwgbnVsbCkpIHsKICAgICAgICAgICAgICAgIHV0aWwudXJsQ2hhbmdlUmVsb2FkKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsZXQgb2xkSHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwogICAgICAgICAgICAgICAgbGV0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGxldCBuZXdIcmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZEhyZWYgIT09IG5ld0hyZWYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgb2xkSHJlZiA9IG5ld0hyZWY7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIUdNX2dldFZhbHVlKF9DT05GSUdfLmZsYWcsIG51bGwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfQogCiAgICB9CiAKICAgIGNsYXNzIERlZmF1bHRDb25zdW1lciBleHRlbmRzIEJhc2VDb25zdW1lciB7CiAgICB9CiAKICAgIHJldHVybiB7CiAgICAgICAgc3RhcnQ6ICgpID0+IHsKICAgICAgICAgICAgR01fc2V0VmFsdWUoX0NPTkZJR18uZmxhZywgbnVsbCk7CiAgICAgICAgICAgIGxldCBtYWxsQ2FzZSA9ICdEZWZhdWx0JzsKICAgICAgICAgICAgbGV0IHBsYXllck5vZGUgPSBfQ09ORklHXy5wbGF5ZXJDb250YWluZXJzLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5ob3N0ID09PSB3aW5kb3cubG9jYXRpb24uaG9zdCk7CiAgICAgICAgICAgIGlmIChwbGF5ZXJOb2RlID09PSBudWxsIHx8IHBsYXllck5vZGUubGVuZ3RoIDw9IDApIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybih3aW5kb3cubG9jYXRpb24uaG9zdCArICLor6XnvZHnq5nmmoLkuI3mlK/mjIHvvIzor7fogZTns7vkvZzogIXvvIzkvZzogIXlsIbkvJrnrKzkuIDml7bpl7TlpITnkIbvvIjms6jmhI/vvJror7forrDlvpfmj5DkvpvmnInpl67popjnmoTnvZHlnYDvvIkiKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQ09ORklHXy5jdXJyZW50UGxheWVyTm9kZSA9IHBsYXllck5vZGVbMF07CiAgICAgICAgICAgIG1hbGxDYXNlID0gX0NPTkZJR18uY3VycmVudFBsYXllck5vZGUubmFtZTsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q29uc3VtZXIgPSBldmFsKGBuZXcgJHttYWxsQ2FzZX1Db25zdW1lcmApOwogICAgICAgICAgICB0YXJnZXRDb25zdW1lci5wYXJzZSgpOwogICAgICAgIH0KICAgIH0KIAp9KSgpOwogCihmdW5jdGlvbiAoKSB7CiAgICBzdXBlclZpcC5zdGFydCgpOwp9KSgpOw==
Add Comment
Please, Sign In to add comment