xiaomianao666

插件名:global_GitHub中文化插件

Feb 3rd, 2025
447
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_GitHub中文化插件@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBHaXRIdWIg5Lit5paH5YyW5o+S5Lu2Ci8vIEBuYW1lc3BhY2UgICAgaHR0cHM6Ly9naXRodWIuY29tL21hYm9sb3NoaS9naXRodWItY2hpbmVzZQovLyBAZGVzY3JpcHRpb24gIOS4reaWh+WMliBHaXRIdWIg55WM6Z2i55qE6YOo5YiG6I+c5Y2V5Y+K5YaF5a6544CC5Y6f5L2c6ICF5Li65qW85pWZ5Li7KGh0dHA6Ly93d3cuNTJjaWsuY29tLynjgIIKLy8gQGNvcHlyaWdodCAgICAyMDIxLCDmspnmvKDkuYvlrZAgKGh0dHBzOi8vbWFib2xvc2hpLmdpdGh1Yi5pby9CbG9nKQovLyBAaWNvbiAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vcGlubmVkLW9jdG9jYXQuc3ZnCi8vIEB2ZXJzaW9uICAgICAgMS45LjItMjAyNS0wMS0yNgovLyBAYXV0aG9yICAgICAgIOaymea8oOS5i+WtkAovLyBAbGljZW5zZSAgICAgIEdQTC0zLjAKLy8gQG1hdGNoICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vKgovLyBAbWF0Y2ggICAgICAgIGh0dHBzOi8vc2tpbGxzLmdpdGh1Yi5jb20vKgovLyBAbWF0Y2ggICAgICAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLyoKLy8gQG1hdGNoICAgICAgICBodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tLyoKLy8gQHJlcXVpcmUgICAgICBodHRwczovL2dyZWFzeWZvcmsub3JnL3NjcmlwdHMvNDM1MjA3LWdpdGh1Yi0lRTQlQjglQUQlRTYlOTYlODclRTUlOEMlOTYlRTYlOEYlOTIlRTQlQkIlQjYtJUU0JUI4JUFEJUU2JTk2JTg3JUU4JUFGJThEJUU1JUJBJTkzJUU4JUE3JTg0JUU1JTg4JTk5L2NvZGUvR2l0SHViJTIwJUU0JUI4JUFEJUU2JTk2JTg3JUU1JThDJTk2JUU2JThGJTkyJUU0JUJCJUI2JTIwLSUyMCVFNCVCOCVBRCVFNiU5NiU4NyVFOCVBRiU4RCVFNSVCQSU5MyVFOCVBNyU4NCVFNSU4OCU5OS5qcz92MS45LjItMjAyNS0wMS0yNgovLyBAcnVuLWF0ICAgICAgIGRvY3VtZW50LWVuZAovLyBAZ3JhbnQgICAgICAgIEdNX3htbGh0dHBSZXF1ZXN0Ci8vIEBncmFudCAgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICBHTV9zZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQKLy8gQGdyYW50ICAgICAgICBHTV91bnJlZ2lzdGVyTWVudUNvbW1hbmQKLy8gQGdyYW50ICAgICAgICBHTV9ub3RpZmljYXRpb24KLy8gQGNvbm5lY3QgICAgICB3d3cuaWZseXJlYy5jb20KLy8gQHN1cHBvcnRVUkwgICBodHRwczovL2dpdGh1Yi5jb20vbWFib2xvc2hpL2dpdGh1Yi1jaGluZXNlL2lzc3VlcwovLyBAZG93bmxvYWRVUkwgaHR0cHM6Ly91cGRhdGUuZ3JlYXN5Zm9yay5vcmcvc2NyaXB0cy80MzUyMDgvR2l0SHViJTIwJUU0JUI4JUFEJUU2JTk2JTg3JUU1JThDJTk2JUU2JThGJTkyJUU0JUJCJUI2LnVzZXIuanMKLy8gQHVwZGF0ZVVSTCBodHRwczovL3VwZGF0ZS5ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzQzNTIwOC9HaXRIdWIlMjAlRTQlQjglQUQlRTYlOTYlODclRTUlOEMlOTYlRTYlOEYlOTIlRTQlQkIlQjYubWV0YS5qcwovLyA9PS9Vc2VyU2NyaXB0PT0KCihmdW5jdGlvbiAod2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgY29uc3QgbGFuZyA9IEkxOE4uemggPyAnemgnIDogJ3poLUNOJzsgLy8g6K6+572u6buY6K6k6K+t6KiACiAgICBsZXQgcGFnZTsKICAgIGxldCBlbmFibGVfUmVnRXhwID0gR01fZ2V0VmFsdWUoImVuYWJsZV9SZWdFeHAiLCAxKTsKCiAgICAvKioKICAgICAqIHdhdGNoVXBkYXRlIOWHveaVsO+8muebkeinhumhtemdouWPmOWMlu+8jOagueaNruWPmOWMlueahOiKgueCuei/m+ihjOe/u+ivkQogICAgICovCiAgICBmdW5jdGlvbiB3YXRjaFVwZGF0ZSgpIHsKICAgICAgICAvLyDmo4DmtYvmtY/op4jlmajmmK/lkKbmlK/mjIEgTXV0YXRpb25PYnNlcnZlcgogICAgICAgIGNvbnN0IE11dGF0aW9uT2JzZXJ2ZXIgPQogICAgICAgICAgICB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciB8fAogICAgICAgICAgICB3aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlciB8fAogICAgICAgICAgICB3aW5kb3cuTW96TXV0YXRpb25PYnNlcnZlcjsKCiAgICAgICAgLy8g6I635Y+W5b2T5YmN6aG16Z2i55qEIFVSTAogICAgICAgIGNvbnN0IGdldEN1cnJlbnRVUkwgPSAoKSA9PiBsb2NhdGlvbi5ocmVmOwogICAgICAgIGdldEN1cnJlbnRVUkwucHJldmlvdXNVUkwgPSBnZXRDdXJyZW50VVJMKCk7CgogICAgICAgIC8vIOWIm+W7uiBNdXRhdGlvbk9ic2VydmVyIOWunuS+i++8jOebkeWQrCBET00g5Y+Y5YyWCiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zLCBvYnNlcnZlcikgPT4gewogICAgICAgICAgICBjb25zdCBjdXJyZW50VVJMID0gZ2V0Q3VycmVudFVSTCgpOwoKICAgICAgICAgICAgLy8g5aaC5p6c6aG16Z2i55qEIFVSTCDlj5HnlJ/lj5jljJYKICAgICAgICAgICAgaWYgKGN1cnJlbnRVUkwgIT09IGdldEN1cnJlbnRVUkwucHJldmlvdXNVUkwpIHsKICAgICAgICAgICAgICAgIGdldEN1cnJlbnRVUkwucHJldmlvdXNVUkwgPSBjdXJyZW50VVJMOwogICAgICAgICAgICAgICAgcGFnZSA9IGdldFBhZ2UoKTsgLy8g5b2T6aG16Z2i5Zyw5Z2A5Y+R55Sf5Y+Y5YyW5pe277yM5pu05paw5YWo5bGA5Y+Y6YePIHBhZ2UKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGDpk77mjqXlj5jljJYgcGFnZT0gJHtwYWdlfWApOwoKICAgICAgICAgICAgICAgIHRyYW5zVGl0bGUoKTsgLy8g57+76K+R6aG16Z2i5qCH6aKYCgogICAgICAgICAgICAgICAgaWYgKHBhZ2UpIHsKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L2/55SoIENTUyDpgInmi6nlmajmib7liLDpobXpnaLkuIrnmoTlhYPntKDvvIzlubblsIblhbbmlofmnKzlhoXlrrnmm7/mjaLkuLrpooTlrprkuYnnmoTnv7vor5EKICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNCeVNlbGVjdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWdlID09PSAicmVwb3NpdG9yeSIpIHsgLy/ku5PlupPnroDku4vnv7vor5EKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zRGVzYygiLmY0Lm15LTMiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWdlID09PSAiZ2lzdCIpIHsgLy8gR2lzdCDnroDku4vnv7vor5EKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zRGVzYygiLmdpc3QtY29udGVudCBbaXRlbXByb3A9J2Fib3V0J10iKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChwYWdlKSB7CiAgICAgICAgICAgICAgICAvLyDkvb/nlKggZmlsdGVyIOaWueazleWvuSBtdXRhdGlvbnMg5pWw57uE6L+b6KGM562b6YCJ77yMCiAgICAgICAgICAgICAgICAvLyDov5Tlm54gYOiKgueCueWinuWKoOOAgeaWh+acrOabtOaWsCDmiJYg5bGe5oCn5pu05pS555qEIG11dGF0aW9uYCDnu4TmiJDnmoTmlrDmlbDnu4QgZmlsdGVyZWRNdXRhdGlvbnPjgIIKICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkTXV0YXRpb25zID0gbXV0YXRpb25zLmZpbHRlcihtdXRhdGlvbiA9PiBtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgfHwgbXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnIHx8IG11dGF0aW9uLnR5cGUgPT09ICdjaGFyYWN0ZXJEYXRhJyk7CgogICAgICAgICAgICAgICAgLy8g5aSE55CG5q+P5Liq5Y+Y5YyWCiAgICAgICAgICAgICAgICBmaWx0ZXJlZE11dGF0aW9ucy5mb3JFYWNoKG11dGF0aW9uID0+IHRyYXZlcnNlTm9kZShtdXRhdGlvbi50YXJnZXQpKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyDphY3nva4gTXV0YXRpb25PYnNlcnZlcgogICAgICAgIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSwKICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSwKICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLAogICAgICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsndmFsdWUnLCAncGxhY2Vob2xkZXInLCAnYXJpYS1sYWJlbCcsICdkYXRhLWNvbmZpcm0nXSwgLy8g5LuF6KeC5a+f54m55a6a5bGe5oCn5Y+Y5YyWCiAgICAgICAgfTsKCiAgICAgICAgLy8g5byA5aeL6KeC5a+fIGRvY3VtZW50LmJvZHkg55qE5Y+Y5YyWCiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCBjb25maWcpOwogICAgfQoKICAgIC8qKgogICAgICogdHJhdmVyc2VOb2RlIOWHveaVsO+8mumBjeWOhuaMh+WumueahOiKgueCue+8jOW5tuWvueiKgueCuei/m+ihjOe/u+ivkeOAggogICAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0g6ZyA6KaB6YGN5Y6G55qE6IqC54K544CCCiAgICAgKi8KICAgIGZ1bmN0aW9uIHRyYXZlcnNlTm9kZShub2RlKSB7CiAgICAgICAgLy8g6Lez6L+H5b+955WlCiAgICAgICAgaWYgKEkxOE4uY29uZi5yZUlnbm9yZUlkLnRlc3Qobm9kZS5pZCkgfHwKICAgICAgICAgICAgSTE4Ti5jb25mLnJlSWdub3JlQ2xhc3MudGVzdChub2RlLmNsYXNzTmFtZSkgfHwKICAgICAgICAgICAgSTE4Ti5jb25mLnJlSWdub3JlVGFnLmluY2x1ZGVzKG5vZGUudGFnTmFtZSkgfHwKICAgICAgICAgICAgKG5vZGUuZ2V0QXR0cmlidXRlICYmIEkxOE4uY29uZi5yZUlnbm9yZUl0ZW1wcm9wLnRlc3Qobm9kZS5nZXRBdHRyaWJ1dGUoIml0ZW1wcm9wIikpKQogICAgICAgICkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsgLy8g5YWD57Sg6IqC54K55aSE55CGCgogICAgICAgICAgICAvLyDnv7vor5Hml7bpl7TlhYPntKAKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgWyJSRUxBVElWRS1USU1FIiwgIlRJTUUtQUdPIiwgIlRJTUUiLCAiTE9DQUwtVElNRSJdLmluY2x1ZGVzKG5vZGUudGFnTmFtZSkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBpZiAobm9kZS5zaGFkb3dSb290KSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNUaW1lRWxlbWVudChub2RlLnNoYWRvd1Jvb3QpOwogICAgICAgICAgICAgICAgICAgIHdhdGNoVGltZUVsZW1lbnQobm9kZS5zaGFkb3dSb290KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNUaW1lRWxlbWVudChub2RlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8g5YWD57Sg6IqC54K55bGe5oCn57+76K+RCiAgICAgICAgICAgIGlmIChbIklOUFVUIiwgIlRFWFRBUkVBIl0uaW5jbHVkZXMobm9kZS50YWdOYW1lKSkgeyAvLyDovpPlhaXmoYYg5oyJ6ZKuIOaWh+acrOWfnwogICAgICAgICAgICAgICAgaWYgKFsiYnV0dG9uIiwgInN1Ym1pdCIsICJyZXNldCJdLmluY2x1ZGVzKG5vZGUudHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtY29uZmlybScpKSB7IC8vIOe/u+ivkSDmtY/op4jlmagg5o+Q56S65a+56K+d5qGGCiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zRWxlbWVudChub2RlLCAnZGF0YS1jb25maXJtJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRyYW5zRWxlbWVudChub2RlLCAndmFsdWUnKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNFbGVtZW50KG5vZGUsICdwbGFjZWhvbGRlcicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ0JVVFRPTicpIHsKICAgICAgICAgICAgICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpICYmIC90b29sdGlwcGVkLy50ZXN0KG5vZGUuY2xhc3NOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIHRyYW5zRWxlbWVudChub2RlLCAnYXJpYS1sYWJlbCcsIHRydWUpOyAvLyDnv7vor5Eg5rWP6KeI5ZmoIOaPkOekuuWvueivneahhgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKCd0aXRsZScpKSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNFbGVtZW50KG5vZGUsICd0aXRsZScsIHRydWUpOyAvLyDnv7vor5Eg5rWP6KeI5ZmoIOaPkOekuuWvueivneahhgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLWNvbmZpcm0nKSkgewogICAgICAgICAgICAgICAgICAgIHRyYW5zRWxlbWVudChub2RlLCAnZGF0YS1jb25maXJtJywgdHJ1ZSk7IC8vIOe/u+ivkSDmtY/op4jlmagg5o+Q56S65a+56K+d5qGGIG9rCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtY29uZmlybS10ZXh0JykpIHsKICAgICAgICAgICAgICAgICAgICB0cmFuc0VsZW1lbnQobm9kZSwgJ2RhdGEtY29uZmlybS10ZXh0JywgdHJ1ZSk7IC8vIOe/u+ivkSDmtY/op4jlmagg5o+Q56S65a+56K+d5qGGIG9rCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtY29uZmlybS1jYW5jZWwtdGV4dCcpKSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNFbGVtZW50KG5vZGUsICdkYXRhLWNvbmZpcm0tY2FuY2VsLXRleHQnLCB0cnVlKTsgLy8g5Y+W5raI5oyJ6ZKuIOaPkOmGkgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKCdjYW5jZWwtY29uZmlybS10ZXh0JykpIHsKICAgICAgICAgICAgICAgICAgICB0cmFuc0VsZW1lbnQobm9kZSwgJ2NhbmNlbC1jb25maXJtLXRleHQnLCB0cnVlKTsgLy8g5Y+W5raI5oyJ6ZKuIOaPkOmGkgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLWRpc2FibGUtd2l0aCcpKSB7IC8vIOaMiemSruetieW+heaPkOekugogICAgICAgICAgICAgICAgICAgIHRyYW5zRWxlbWVudChub2RlLCAnZGF0YS1kaXNhYmxlLXdpdGgnLCB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLnRhZ05hbWUgPT09ICdPUFRHUk9VUCcpIHsgLy8g57+76K+RIDxvcHRncm91cD4g55qEIGxhYmVsIOWxnuaApwogICAgICAgICAgICAgICAgdHJhbnNFbGVtZW50KG5vZGUsICdsYWJlbCcpOwogICAgICAgICAgICB9IGVsc2UgaWYgKC90b29sdGlwcGVkLy50ZXN0KG5vZGUuY2xhc3NOYW1lKSkgeyAvLyDku4XlvZMg5YWD57Sg5a2Y5ZyoJ3Rvb2x0aXBwZWQn5qC35byPIGFyaWEtbGFiZWwg5omN6LW35pWI5p6cCiAgICAgICAgICAgICAgICB0cmFuc0VsZW1lbnQobm9kZSwgJ2FyaWEtbGFiZWwnLCB0cnVlKTsgLy8g5bim5o+Q56S655qE5YWD57Sg77yM57G75Ly8IHRvb2x0aXAg5pWI5p6c55qECiAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS50YWdOYW1lID09PSAnQScpIHsKICAgICAgICAgICAgICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZSgndGl0bGUnKSkgewogICAgICAgICAgICAgICAgICAgIHRyYW5zRWxlbWVudChub2RlLCAndGl0bGUnLCB0cnVlKTsgLy8g57+76K+RIOa1j+iniOWZqCDmj5DnpLrlr7nor53moYYKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZSgnZGF0YS1ob3ZlcmNhcmQtdHlwZScpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyDkuI3nv7vor5EKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGV0IGNoaWxkTm9kZXMgPSBub2RlLmNoaWxkTm9kZXM7CiAgICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCh0cmF2ZXJzZU5vZGUpOyAvLyDpgY3ljoblrZDoioLngrkKCiAgICAgICAgfSBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgeyAvLyDmlofmnKzoioLngrnnv7vor5EKICAgICAgICAgICAgaWYgKG5vZGUubGVuZ3RoIDw9IDUwMCkgeyAvLyDkv67lpI0g6K645Y+v6K+B57yW6L6R5qGG5Yid5aeL5YyW6L295YWl5YaF5a656KKr57+76K+RCiAgICAgICAgICAgICAgICB0cmFuc0VsZW1lbnQobm9kZSwgJ2RhdGEnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIGdldFBhZ2Ug5Ye95pWw77ya6I635Y+W5b2T5YmN6aG16Z2i55qE57G75Z6L44CCCiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfGJvb2xlYW59IOW9k+WJjemhtemdoueahOexu+Wei++8jOWmguaenOaXoOazleehruWumuexu+Wei++8jOmCo+S5iOi/lOWbniBmYWxzZeOAggogICAgICovCiAgICBmdW5jdGlvbiBnZXRQYWdlKCkgewoKICAgICAgICAvLyDnq5nngrnvvIzlpoIgZ2lzdCwgZGV2ZWxvcGVyLCBoZWxwIOetie+8jOm7mOiupOS4u+ermeaYryBnaXRodWIKICAgICAgICBjb25zdCBzaXRlTWFwcGluZyA9IHsKICAgICAgICAgICAgJ2dpc3QuZ2l0aHViLmNvbSc6ICdnaXN0JywKICAgICAgICAgICAgJ3d3dy5naXRodWJzdGF0dXMuY29tJzogJ3N0YXR1cycsCiAgICAgICAgICAgICdza2lsbHMuZ2l0aHViLmNvbSc6ICdza2lsbHMnCiAgICAgICAgfTsKICAgICAgICBjb25zdCBzaXRlID0gc2l0ZU1hcHBpbmdbbG9jYXRpb24uaG9zdG5hbWVdIHx8ICdnaXRodWInOyAvLyDnq5nngrkKICAgICAgICBjb25zdCBwYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lOyAvLyDlvZPliY3ot6/lvoQKCiAgICAgICAgLy8g5piv5ZCm55m75b2VCiAgICAgICAgY29uc3QgaXNMb2dpbiA9IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJsb2dnZWQtaW4iKTsKCiAgICAgICAgLy8g55So5LqO56Gu5a6aIOS4quS6uummlumhte+8jOe7hOe7h+mmlumhte+8jOS7k+W6k+mhtSDnhLblkI7lgZrliKTmlq0KICAgICAgICBjb25zdCBhbmFseXRpY3NMb2NhdGlvbiA9IChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnYW5hbHl0aWNzLWxvY2F0aW9uJylbMF0gfHwge30pLmNvbnRlbnQgfHwgJyc7CiAgICAgICAgLy8g57uE57uH6aG1CiAgICAgICAgY29uc3QgaXNPcmdhbml6YXRpb24gPSAvXC88b3JnLWxvZ2luPi8udGVzdChhbmFseXRpY3NMb2NhdGlvbikgfHwgL15cLyg/Om9yZ3N8b3JnYW5pemF0aW9ucykvLnRlc3QocGF0aG5hbWUpOwogICAgICAgIC8vIOS7k+W6k+mhtQogICAgICAgIGNvbnN0IGlzUmVwb3NpdG9yeSA9IC9cLzx1c2VyLW5hbWU+XC88cmVwby1uYW1lPi8udGVzdChhbmFseXRpY3NMb2NhdGlvbik7CgogICAgICAgIC8vIOS8mOWFiOWMuemFjSBib2R5IOeahCBjbGFzcwogICAgICAgIGxldCBwYWdlLCB0ID0gZG9jdW1lbnQuYm9keS5jbGFzc05hbWUubWF0Y2goSTE4Ti5jb25mLnJlUGFnZUNsYXNzKTsKICAgICAgICBpZiAodCkgewogICAgICAgICAgICBpZiAodFsxXSA9PT0gJ3BhZ2UtcHJvZmlsZScpIHsKICAgICAgICAgICAgICAgIGxldCBtYXRjaFJlc3VsdCA9IGxvY2F0aW9uLnNlYXJjaC5tYXRjaCgvdGFiPShcdyspLyk7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICBwYWdlID0gJ3BhZ2UtcHJvZmlsZS8nICsgbWF0Y2hSZXN1bHRbMV07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHBhZ2UgPSBwYXRobmFtZS5tYXRjaCgvXC8oc3RhcnMpLykgPyAncGFnZS1wcm9maWxlL3N0YXJzJyA6ICdwYWdlLXByb2ZpbGUnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGFnZSA9IHRbMV07CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHNpdGUgPT09ICdnaXN0JykgeyAvLyBHaXN0IOermeeCuQogICAgICAgICAgICBwYWdlID0gJ2dpc3QnOwogICAgICAgIH0gZWxzZSBpZiAoc2l0ZSA9PT0gJ3N0YXR1cycpIHsgIC8vIEdpdEh1YiBTdGF0dXMg6aG16Z2iCiAgICAgICAgICAgIHBhZ2UgPSAnc3RhdHVzJzsKICAgICAgICB9IGVsc2UgaWYgKHNpdGUgPT09ICdza2lsbHMnKSB7ICAvLyBHaXRIdWIgU2tpbGxzIOmhtemdogogICAgICAgICAgICBwYWdlID0gJ3NraWxscyc7CiAgICAgICAgfSBlbHNlIGlmIChwYXRobmFtZSA9PT0gJy8nICYmIHNpdGUgPT09ICdnaXRodWInKSB7IC8vIGdpdGh1Yi5jb20g6aaW6aG1CiAgICAgICAgICAgIHBhZ2UgPSBpc0xvZ2luID8gJ3BhZ2UtZGFzaGJvYXJkJyA6ICdob21lcGFnZSc7CiAgICAgICAgfSBlbHNlIGlmIChpc1JlcG9zaXRvcnkpIHsgLy8g5LuT5bqT6aG1CiAgICAgICAgICAgIHQgPSBwYXRobmFtZS5tYXRjaChJMThOLmNvbmYucmVQYWdlUGF0aFJlcG8pOwogICAgICAgICAgICBwYWdlID0gdCA/ICdyZXBvc2l0b3J5LycgKyB0WzFdIDogJ3JlcG9zaXRvcnknOwogICAgICAgIH0gZWxzZSBpZiAoaXNPcmdhbml6YXRpb24pIHsgLy8g57uE57uH6aG1CiAgICAgICAgICAgIHQgPSBwYXRobmFtZS5tYXRjaChJMThOLmNvbmYucmVQYWdlUGF0aE9yZyk7CiAgICAgICAgICAgIHBhZ2UgPSB0ID8gJ29yZ3MvJyArICh0WzFdIHx8IHQuc2xpY2UoLTEpWzBdKSA6ICdvcmdzJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0ID0gcGF0aG5hbWUubWF0Y2goSTE4Ti5jb25mLnJlUGFnZVBhdGgpOwogICAgICAgICAgICBwYWdlID0gdCA/ICh0WzFdIHx8IHQuc2xpY2UoLTEpWzBdKSA6IGZhbHNlOyAvLyDlj5bpobXpnaIga2V5CiAgICAgICAgfQoKICAgICAgICBpZiAoIXBhZ2UgfHwgIUkxOE5bbGFuZ11bcGFnZV0pIHsKICAgICAgICAgICAgY29uc29sZS5sb2coYOivt+azqOaEj+WvueW6lCBwYWdlICR7cGFnZX0g6K+N5bqT6IqC54K55LiN5a2Y5ZyoYCk7CiAgICAgICAgICAgIHBhZ2UgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBhZ2U7CiAgICB9CgogICAgLyoqCiAgICAgKiB0cmFuc1RpdGxlIOWHveaVsO+8mue/u+ivkemhtemdouagh+mimAogICAgICovCiAgICBmdW5jdGlvbiB0cmFuc1RpdGxlKCkgewogICAgICAgIGxldCBrZXkgPSBkb2N1bWVudC50aXRsZTsgLy8g5qCH6aKY5paH5pys5YaF5a65CiAgICAgICAgbGV0IHN0ciA9IEkxOE5bbGFuZ11bJ3RpdGxlJ11bJ3N0YXRpYyddW2tleV0gfHwgJyc7CiAgICAgICAgaWYgKCFzdHIpIHsKICAgICAgICAgICAgbGV0IHJlcyA9IEkxOE5bbGFuZ11bJ3RpdGxlJ10ucmVnZXhwIHx8IFtdOwogICAgICAgICAgICBmb3IgKGxldCBbYSwgYl0gb2YgcmVzKSB7CiAgICAgICAgICAgICAgICBzdHIgPSBrZXkucmVwbGFjZShhLCBiKTsKICAgICAgICAgICAgICAgIGlmIChzdHIgIT09IGtleSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRvY3VtZW50LnRpdGxlID0gc3RyOwogICAgfQoKICAgIC8qKgogICAgICogdHJhbnNUaW1lRWxlbWVudCDlh73mlbDvvJrnv7vor5Hml7bpl7TlhYPntKDmlofmnKzlhoXlrrnjgIIKICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWwgLSDpnIDopoHnv7vor5HnmoTlhYPntKDjgIIKICAgICAqLwogICAgZnVuY3Rpb24gdHJhbnNUaW1lRWxlbWVudChlbCkgewogICAgICAgIGxldCBrZXkgPSBlbC5jaGlsZE5vZGVzLmxlbmd0aCA+IDAgPyBlbC5sYXN0Q2hpbGQudGV4dENvbnRlbnQgOiBlbC50ZXh0Q29udGVudDsKICAgICAgICBsZXQgcmVzID0gSTE4TltsYW5nXVsncHVibGljJ11bJ3RpbWUtcmVnZXhwJ107IC8vIOaXtumXtOato+WImeinhOWImQoKICAgICAgICBmb3IgKGxldCBbYSwgYl0gb2YgcmVzKSB7CiAgICAgICAgICAgIGxldCBzdHIgPSBrZXkucmVwbGFjZShhLCBiKTsKICAgICAgICAgICAgaWYgKHN0ciAhPT0ga2V5KSB7CiAgICAgICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9IHN0cjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogd2F0Y2hUaW1lRWxlbWVudCDlh73mlbDvvJrnm5Hop4bml7bpl7TlhYPntKDlj5jljJYsIOinpuWPkeWSjOiwg+eUqOaXtumXtOWFg+e0oOe/u+ivkQogICAgICogQHBhcmFtIHtFbGVtZW50fSBlbCAtIOmcgOimgeebkeinhueahOWFg+e0oOOAggogICAgICovCiAgICBmdW5jdGlvbiB3YXRjaFRpbWVFbGVtZW50KGVsKSB7CiAgICAgICAgY29uc3QgTXV0YXRpb25PYnNlcnZlciA9CiAgICAgICAgICAgIHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8CiAgICAgICAgICAgIHdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyIHx8CiAgICAgICAgICAgIHdpbmRvdy5Nb3pNdXRhdGlvbk9ic2VydmVyOwoKICAgICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbnMgPT4gewogICAgICAgICAgICB0cmFuc1RpbWVFbGVtZW50KG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdKTsKICAgICAgICB9KS5vYnNlcnZlKGVsLCB7CiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZQogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogdHJhbnNFbGVtZW50IOWHveaVsO+8mue/u+ivkeaMh+WumuWFg+e0oOeahOaWh+acrOWGheWuueaIluWxnuaAp+OAggogICAgICogQHBhcmFtIHtFbGVtZW50fSBlbCAtIOmcgOimgee/u+ivkeeahOWFg+e0oOOAggogICAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIC0g6ZyA6KaB57+76K+R55qE5paH5pys5YaF5a655oiW5bGe5oCn55qE5ZCN56ew44CCCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzQXR0ciAtIOaYr+WQpumcgOimgee/u+ivkeWxnuaAp+OAggogICAgICovCiAgICBmdW5jdGlvbiB0cmFuc0VsZW1lbnQoZWwsIGZpZWxkLCBpc0F0dHIgPSBmYWxzZSkgewogICAgICAgIGxldCB0ZXh0ID0gaXNBdHRyID8gZWwuZ2V0QXR0cmlidXRlKGZpZWxkKSA6IGVsW2ZpZWxkXTsgLy8g6ZyA6KaB57+76K+R55qE5paH5pysCiAgICAgICAgbGV0IHN0ciA9IHRyYW5zbGF0ZVRleHQodGV4dCk7IC8vIOe/u+ivkeWQjueahOaWh+acrAoKICAgICAgICAvLyDmm7/mjaLnv7vor5HlkI7nmoTlhoXlrrkKICAgICAgICBpZiAoc3RyKSB7CiAgICAgICAgICAgIGlmICghaXNBdHRyKSB7CiAgICAgICAgICAgICAgICBlbFtmaWVsZF0gPSBzdHI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoZmllbGQsIHN0cik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiB0cmFuc2xhdGVUZXh0IOWHveaVsO+8mue/u+ivkeaWh+acrOWGheWuueOAggogICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSDpnIDopoHnv7vor5HnmoTmlofmnKzlhoXlrrnjgIIKICAgICAqIEByZXR1cm5zIHtzdHJpbmd8Ym9vbGVhbn0g57+76K+R5ZCO55qE5paH5pys5YaF5a6577yM5aaC5p6c5rKh5pyJ5om+5Yiw5a+55bqU55qE57+76K+R77yM6YKj5LmI6L+U5ZueIGZhbHNl44CCCiAgICAgKi8KICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZVRleHQodGV4dCkgeyAvLyDnv7vor5EKCiAgICAgICAgLy8g5YaF5a655Li656m6LCDnqbrnmb3lrZfnrKblkozmiJbmlbDlrZcsIOS4jeWtmOWcqOiLseaWh+Wtl+avjeWSjOespuWPtywuIOi3s+i/hwogICAgICAgIGlmICghaXNOYU4odGV4dCkgfHwgIS9bYS16QS1aLC5dKy8udGVzdCh0ZXh0KSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBsZXQgX2tleSA9IHRleHQudHJpbSgpOyAvLyDljrvpmaTpppblsL7nqbrmoLznmoQga2V5CiAgICAgICAgbGV0IF9rZXlfbmVhdCA9IF9rZXkucmVwbGFjZSgvXHhhMHxbXHNdKy9nLCAnICcpIC8vIOWOu+mZpOWkmuS9meepuueZveWtl+espigmbmJzcDsg56m65qC8IOaNouihjOespikKCiAgICAgICAgbGV0IHN0ciA9IGZldGNoVHJhbnNsYXRlZFRleHQoX2tleV9uZWF0KTsgLy8g57+76K+R5bey55+l6aG16Z2iICjlsYDpg6jkvJjlhYgpCgogICAgICAgIGlmIChzdHIgJiYgc3RyICE9PSBfa2V5X25lYXQpIHsgLy8g5bey55+l6aG16Z2i57+76K+R5a6M5oiQCiAgICAgICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoX2tleSwgc3RyKTsgLy8g5pu/5o2i5Y6f5a2X56ym77yM5L+d55WZ6aaW5bC+56m655m96YOo5YiGCiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBmZXRjaFRyYW5zbGF0ZWRUZXh0IOWHveaVsO+8muS7jueJueWumumhtemdoueahOivjeW6k+S4reiOt+W+l+e/u+ivkeaWh+acrOWGheWuueOAggogICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIOmcgOimgee/u+ivkeeahOaWh+acrOWGheWuueOAggogICAgICogQHJldHVybnMge3N0cmluZ3xib29sZWFufSDnv7vor5HlkI7nmoTmlofmnKzlhoXlrrnvvIzlpoLmnpzmsqHmnInmib7liLDlr7nlupTnmoTnv7vor5HvvIzpgqPkuYjov5Tlm54gZmFsc2XjgIIKICAgICAqLwogICAgZnVuY3Rpb24gZmV0Y2hUcmFuc2xhdGVkVGV4dChrZXkpIHsKCiAgICAgICAgLy8g6Z2Z5oCB57+76K+RCiAgICAgICAgbGV0IHN0ciA9IEkxOE5bbGFuZ11bcGFnZV1bJ3N0YXRpYyddW2tleV0gfHwgSTE4TltsYW5nXVsncHVibGljJ11bJ3N0YXRpYyddW2tleV07IC8vIOm7mOiupOe/u+ivkSDlhazlhbHpg6jliIYKCiAgICAgICAgaWYgKHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgfQoKICAgICAgICAvLyDmraPliJnnv7vor5EKICAgICAgICBpZiAoZW5hYmxlX1JlZ0V4cCkgewogICAgICAgICAgICBsZXQgcmVzID0gKEkxOE5bbGFuZ11bcGFnZV0ucmVnZXhwIHx8IFtdKS5jb25jYXQoSTE4TltsYW5nXVsncHVibGljJ10ucmVnZXhwIHx8IFtdKTsgLy8g5q2j5YiZ5pWw57uECgogICAgICAgICAgICBmb3IgKGxldCBbYSwgYl0gb2YgcmVzKSB7CiAgICAgICAgICAgICAgICBzdHIgPSBrZXkucmVwbGFjZShhLCBiKTsKICAgICAgICAgICAgICAgIGlmIChzdHIgIT09IGtleSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsgLy8g5rKh5pyJ57+76K+R5p2h55uuCiAgICB9CgogICAgLyoqCiAgICAgKiB0cmFuc0Rlc2Mg5Ye95pWw77ya5Li65oyH5a6a55qE5YWD57Sg5re75Yqg5LiA5Liq57+76K+R5oyJ6ZKu77yM5bm25Li66K+l5oyJ6ZKu5re75Yqg54K55Ye75LqL5Lu244CCCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZWwgLSBDU1PpgInmi6nlmajvvIznlKjkuo7pgInmi6npnIDopoHmt7vliqDnv7vor5HmjInpkq7nmoTlhYPntKDjgIIKICAgICAqLwogICAgZnVuY3Rpb24gdHJhbnNEZXNjKGVsKSB7CiAgICAgICAgLy8g5L2/55SoIENTUyDpgInmi6nlmajpgInmi6nlhYPntKAKICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpOwoKICAgICAgICAvLyDlpoLmnpzlhYPntKDkuI3lrZjlnKgg5oiW6ICFIHRyYW5zbGF0ZS1tZSDlhYPntKDlt7LlrZjlnKjvvIzpgqPkuYjnm7TmjqXov5Tlm54KICAgICAgICBpZiAoIWVsZW1lbnQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyYW5zbGF0ZS1tZScpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIOWcqOWFg+e0oOWQjumdouaPkuWFpeS4gOS4que/u+ivkeaMiemSrgogICAgICAgIGNvbnN0IGJ1dHRvbkhUTUwgPSBgPGRpdiBpZD0ndHJhbnNsYXRlLW1lJyBzdHlsZT0nY29sb3I6IHJnYigyNywgMTQ5LCAyMjQpOyBmb250LXNpemU6IHNtYWxsOyBjdXJzb3I6IHBvaW50ZXInPue/u+ivkTwvZGl2PmA7CiAgICAgICAgZWxlbWVudC5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyZW5kJywgYnV0dG9uSFRNTCk7CiAgICAgICAgbGV0IGJ1dHRvbiA9IGVsZW1lbnQubmV4dFNpYmxpbmc7CgogICAgICAgIC8vIOS4uue/u+ivkeaMiemSrua3u+WKoOeCueWHu+S6i+S7tgogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgICAgICAgICAgLy8g6I635Y+W5YWD57Sg55qE5paH5pys5YaF5a65CiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBlbGVtZW50LnRleHRDb250ZW50LnRyaW0oKTsKCiAgICAgICAgICAgIC8vIOWmguaenOaWh+acrOWGheWuueS4uuepuu+8jOmCo+S5iOebtOaOpei/lOWbngogICAgICAgICAgICBpZiAoIWRlc2MpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8g6LCD55SoIHRyYW5zbGF0ZURlc2NUZXh0IOWHveaVsOi/m+ihjOe/u+ivkQogICAgICAgICAgICB0cmFuc2xhdGVEZXNjVGV4dChkZXNjLCB0ZXh0ID0+IHsKICAgICAgICAgICAgICAgIC8vIOe/u+ivkeWujOaIkOWQju+8jOmakOiXj+e/u+ivkeaMiemSru+8jOW5tuWcqOWFg+e0oOWQjumdouaPkuWFpee/u+ivkee7k+aenAogICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbkhUTUwgPSBgPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZTogc21hbGwnPueUsSA8YSB0YXJnZXQ9J19ibGFuaycgc3R5bGU9J2NvbG9yOnJnYigyNywgMTQ5LCAyMjQpOycgaHJlZj0naHR0cHM6Ly93d3cuaWZseXJlYy5jb20vaHRtbC90cmFuc2xhdGUuaHRtbCc+6K6v6aOe5ZCs6KeBPC9hPiDnv7vor5Hwn5GHPC9zcGFuPjxici8+JHt0ZXh0fWA7CiAgICAgICAgICAgICAgICBlbGVtZW50Lmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJlbmQnLCB0cmFuc2xhdGlvbkhUTUwpOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIHRyYW5zbGF0ZURlc2NUZXh0IOWHveaVsO+8muWwhuaMh+WumueahOaWh+acrOWPkemAgeWIsOiur+mjnueahOe/u+ivkeacjeWKoei/m+ihjOe/u+ivkeOAggogICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSDpnIDopoHnv7vor5HnmoTmlofmnKzjgIIKICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0g57+76K+R5a6M5oiQ5ZCO55qE5Zue6LCD5Ye95pWw77yM6K+l5Ye95pWw5o6l5Y+X5LiA5Liq5Y+C5pWw77yM5Y2z57+76K+R5ZCO55qE5paH5pys44CCCiAgICAgKi8KICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZURlc2NUZXh0KHRleHQsIGNhbGxiYWNrKSB7CiAgICAgICAgLy8g5L2/55SoIEdNX3htbGh0dHBSZXF1ZXN0IOWHveaVsOWPkemAgSBIVFRQIOivt+axggogICAgICAgIEdNX3htbGh0dHBSZXF1ZXN0KHsKICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIsIC8vIOivt+axguaWueazleS4uiBQT1NUCiAgICAgICAgICAgIHVybDogImh0dHBzOi8vd3d3LmlmbHlyZWMuY29tL1RyYW5zbGF0aW9uU2VydmljZS92MS90ZXh0VHJhbnNsYXRpb24iLCAvLyDor7fmsYLnmoQgVVJMCiAgICAgICAgICAgIGhlYWRlcnM6IHsgLy8g6K+35rGC5aS0CiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwczovL3d3dy5pZmx5cmVjLmNvbScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgICAgICJmcm9tIjogIjIiLAogICAgICAgICAgICAgICAgInRvIjogIjEiLAogICAgICAgICAgICAgICAgImNvbnRlbnRzIjogW3sKICAgICAgICAgICAgICAgICAgICAidGV4dCI6IHRleHQsCiAgICAgICAgICAgICAgICAgICAgImZyb250QmxhbmtMaW5lIjogMAogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSksIC8vIOivt+axgueahOaVsOaNrgogICAgICAgICAgICByZXNwb25zZVR5cGU6ICJqc29uIiwgLy8g5ZON5bqU55qE5pWw5o2u57G75Z6L5Li6IEpTT04KICAgICAgICAgICAgb25sb2FkOiAocmVzKSA9PiB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhdHVzLCByZXNwb25zZSB9ID0gcmVzOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRUZXh0ID0gKHN0YXR1cyA9PT0gMjAwKSA/IHJlc3BvbnNlLmJpelswXS50cmFuc2xhdGVSZXN1bHQgOiAi57+76K+R5aSx6LSlIjsKICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh0cmFuc2xhdGVkVGV4dCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+e/u+ivkeWksei0pScsIGVycm9yKTsKICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygi57+76K+R5aSx6LSlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uZXJyb3I6IChlcnJvcikgPT4gewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign572R57uc6K+35rGC5aSx6LSlJywgZXJyb3IpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soIue9kee7nOivt+axguWksei0pSIpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB0cmFuc0J5U2VsZWN0b3Ig5Ye95pWw77ya6YCa6L+HIENTUyDpgInmi6nlmajmib7liLDpobXpnaLkuIrnmoTlhYPntKDvvIzlubblsIblhbbmlofmnKzlhoXlrrnmm7/mjaLkuLrpooTlrprkuYnnmoTnv7vor5HjgIIKICAgICAqLwogICAgZnVuY3Rpb24gdHJhbnNCeVNlbGVjdG9yKCkgewogICAgICAgIC8vIOiOt+WPluW9k+WJjemhtemdoueahOe/u+ivkeinhOWIme+8jOWmguaenOayoeacieaJvuWIsO+8jOmCo+S5iOS9v+eUqOWFrOWFseeahOe/u+ivkeinhOWImQogICAgICAgIGxldCByZXMgPSAoSTE4TltsYW5nXVtwYWdlXT8uc2VsZWN0b3IgfHwgW10pLmNvbmNhdChJMThOW2xhbmddWydwdWJsaWMnXS5zZWxlY3RvciB8fCBbXSk7IC8vIOaVsOe7hAoKICAgICAgICAvLyDlpoLmnpzmib7liLDkuobnv7vor5Hop4TliJkKICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgLy8g6YGN5Y6G5q+P5Liq57+76K+R6KeE5YiZCiAgICAgICAgICAgIGZvciAobGV0IFtzZWxlY3RvciwgdHJhbnNsYXRpb25dIG9mIHJlcykgewogICAgICAgICAgICAgICAgLy8g5L2/55SoIENTUyDpgInmi6nlmajmib7liLDlr7nlupTnmoTlhYPntKAKICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikKICAgICAgICAgICAgICAgIC8vIOWmguaenOaJvuWIsOS6huWFg+e0oO+8jOmCo+S5iOWwhuWFtuaWh+acrOWGheWuueabv+aNouS4uue/u+ivkeWQjueahOaWh+acrAogICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdHJhbnNsYXRpb247CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcmVnaXN0ZXJNZW51Q29tbWFuZCgpIHsKICAgICAgICBjb25zdCB0b2dnbGVSZWdFeHAgPSAoKSA9PiB7CiAgICAgICAgICAgIGVuYWJsZV9SZWdFeHAgPSAhZW5hYmxlX1JlZ0V4cDsKICAgICAgICAgICAgR01fc2V0VmFsdWUoImVuYWJsZV9SZWdFeHAiLCBlbmFibGVfUmVnRXhwKTsKICAgICAgICAgICAgR01fbm90aWZpY2F0aW9uKGDlt7Ike2VuYWJsZV9SZWdFeHAgPyAn5byA5ZCvJyA6ICflhbPpl60nfeato+WImeWKn+iDvWApOwogICAgICAgICAgICBpZiAoZW5hYmxlX1JlZ0V4cCkgewogICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgR01fdW5yZWdpc3Rlck1lbnVDb21tYW5kKGlkKTsKICAgICAgICAgICAgaWQgPSBHTV9yZWdpc3Rlck1lbnVDb21tYW5kKGAke2VuYWJsZV9SZWdFeHAgPyAn5YWz6ZetJyA6ICflvIDlkK8nfeato+WImeWKn+iDvWAsIHRvZ2dsZVJlZ0V4cCk7CiAgICAgICAgfTsKCiAgICAgICAgbGV0IGlkID0gR01fcmVnaXN0ZXJNZW51Q29tbWFuZChgJHtlbmFibGVfUmVnRXhwID8gJ+WFs+mXrScgOiAn5byA5ZCvJ33mraPliJnlip/og71gLCB0b2dnbGVSZWdFeHApOwogICAgfQoKICAgIC8qKgogICAgICogaW5pdCDlh73mlbDvvJrliJ3lp4vljJbnv7vor5Hlip/og73jgIIKICAgICAqLwogICAgZnVuY3Rpb24gaW5pdCgpIHsKICAgICAgICAvLyDojrflj5blvZPliY3pobXpnaLnmoTnv7vor5Hop4TliJkKICAgICAgICBwYWdlID0gZ2V0UGFnZSgpOwogICAgICAgIGNvbnNvbGUubG9nKGDlvIDlp4twYWdlPSAke3BhZ2V9YCk7CgogICAgICAgIC8vIOe/u+ivkemhtemdouagh+mimAogICAgICAgIHRyYW5zVGl0bGUoKTsKCiAgICAgICAgaWYgKHBhZ2UpIHsKICAgICAgICAgICAgLy8g56uL5Y2z57+76K+R6aG16Z2iCiAgICAgICAgICAgIHRyYXZlcnNlTm9kZShkb2N1bWVudC5ib2R5KTsKCiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgLy8g5L2/55SoIENTUyDpgInmi6nlmajmib7liLDpobXpnaLkuIrnmoTlhYPntKDvvIzlubblsIblhbbmlofmnKzlhoXlrrnmm7/mjaLkuLrpooTlrprkuYnnmoTnv7vor5EKICAgICAgICAgICAgICAgIHRyYW5zQnlTZWxlY3RvcigpOwogICAgICAgICAgICAgICAgaWYgKHBhZ2UgPT09ICJyZXBvc2l0b3J5IikgeyAvL+S7k+W6k+eugOS7i+e/u+ivkQogICAgICAgICAgICAgICAgICAgIHRyYW5zRGVzYygiLmY0Lm15LTMiKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFnZSA9PT0gImdpc3QiKSB7IC8vIEdpc3Qg566A5LuL57+76K+RCiAgICAgICAgICAgICAgICAgICAgdHJhbnNEZXNjKCIuZ2lzdC1jb250ZW50IFtpdGVtcHJvcD0nYWJvdXQnXSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCAxMDApOwogICAgICAgIH0KICAgICAgICAvLyDnm5Hop4bpobXpnaLlj5jljJYKICAgICAgICB3YXRjaFVwZGF0ZSgpOwogICAgfQoKICAgIC8vIOaJp+ihjOWIneWni+WMlgogICAgcmVnaXN0ZXJNZW51Q29tbWFuZCgpOwogICAgaW5pdCgpOwoKfSkod2luZG93LCBkb2N1bWVudCk7Cg==
Add Comment
Please, Sign In to add comment