Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_海角社区@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICAgICAgIOa1t+inkuekvuWMugovLyBAaG9tZXBhZ2UgICAgICAgICAgaHR0cDovL2pzeGwucHJvCi8vIEB2ZXJzaW9uICAgICAgICAgICAxLjkuNAovLyBAdXBkYXRlRGVzYyAgICAgICAg5L+u5aSN5LiN6IO956C06Kej6Zeu6aKYKOS/ruWkjeWIneeJiO+8jOebruWJjei/mOacieS6m+mXrumimO+8jOmDqOWIhuWFjei0ueinhumikeino+aekOWksei0pe+8jOW+heS/rikKLy8gQGRlc2NyaXB0aW9uICAgICAgIPCflKXlhY3otLnnnIvku5jotLnop4bpopHvvIzmn6XnnIvlsIHnpoHotKblj7fkuLvpobXluJblrZDvvIzkuIvovb3op4bpopHvvIzlpI3liLbmkq3mlL7pk77mjqXvvIzlhY3nmbvlvZUv5L+d5a2Y6LSm5Y+35a+G56CB5YWN6L6T5YWlL+aMgeS5heeZu+W9le+8jOW4luWtkOaYr+WQpuacieinhumikeWbvueJh+aPkOekuijmoIfpopjliY3nvIAp77yMdmlw5pKt5pS+6Lev57q/77yM6Ieq5Yqo5bGV5byA5biW5a2Q77yM5Y675bm/5ZGK77yMdmlw5qCH6K+GCi8vIEBpY29uICAgICAgICAgICAgICBodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nby9oYWlqaWFvLnBuZwovLyBAbmFtZXNwYWNlICAgICAgICAg5rW36KeS56S+5Yy6Ci8vIEBhdXRob3IgICAgICAgICAgICB3dAovLyBAaW5jbHVkZSAgICAgICAgICAgKjovLyouaGFpKi4qLyoKLy8gQGluY2x1ZGUgICAgICAgICAgICo6Ly9oYWkqLiovKgovLyBAaW5jbHVkZSAgICAgICAgICAgKjovL2hqKi4qLyoKLy8gQGluY2x1ZGUgICAgICAgICAgIC9wb3N0L2RldGFpbHMvCi8vIEBpbmNsdWRlCQkJICAqOi8vYmxvZy5sdWNrbHktbWp3LmNuLyoKLy8gQGluY2x1ZGUJCSAgICAgICo6Ly90b29scy50aGF0d2luZC5jb20vKgovLyBAaW5jbHVkZQkJCSAgKjovL3Rvb2xzLmJ1Z3NjYW5lci5jb20vKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovLyovcG9zdC9kZXRhaWxzKgovLyBAcmVxdWlyZSAgICAgICAgICAgaHR0cHM6Ly9jZG4uYm9vdGNkbi5uZXQvYWpheC9saWJzL2pxdWVyeS8zLjIuMS9qcXVlcnkubWluLmpzP2lkPTEKLy8gQHJlcXVpcmUJCQkgIGh0dHBzOi8vbGliLmJhb21pdHUuY29tL2hscy5qcy8wLjE1LjAtYWxwaGEuMi9obHMubWluLmpzP2lkPTEKLy8gQHJlcXVpcmUJCQkgIGh0dHBzOi8vbGliLmJhb21pdHUuY29tL2RwbGF5ZXIvMS4yNS4wL0RQbGF5ZXIubWluLmpzCi8vIEByZXF1aXJlCQkJICBodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zY3JpcHRzL3Rlc3QvY29kZS5qcz9pZD0xMTAKLy8gQGNvbm5lY3QJCQkgIHJlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20KLy8gQGNvbm5lY3QJCQkgIGZjLW1wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5uZXh0LmJzcGFwcC5jb20KLy8gQHJ1bi1hdCAJCQkgIGRvY3VtZW50LXN0YXJ0Ci8vIEBncmFudCAgICAgICAgICAgICB1bnNhZmVXaW5kb3cKLy8gQGdyYW50ICAgICAgICAgICAgIEdNX2FkZFN0eWxlCi8vIEBncmFudCAgICAgICAgICAgICBHTV9vcGVuSW5UYWIKLy8gQGdyYW50ICAgICAgICAgICAgIEdNX2dldFZhbHVlCi8vIEBncmFudCAgICAgICAgICAgICBHTV9zZXRWYWx1ZQovLyBAZ3JhbnQgCQkJICBHTV9nZXRSZXNvdXJjZVRleHQKLy8gQGdyYW50ICAgICAgICAgICAgIEdNX3htbGh0dHBSZXF1ZXN0Ci8vIEB1cGRhdGVVUkwJCSAgaHR0cHM6Ly9yZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tL2pzL3JlbGVhc2UvaGFpamlhby51c2VyLmpzCi8vIEBkb3dubG9hZFVSTAkJICBodHRwczovL3Jlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20vanMvcmVsZWFzZS9oYWlqaWFvLnVzZXIuanMKLy8gQGNoYXJzZXQJCSAgICAgIFVURi04Ci8vIEBsaWNlbnNlICAgICAgICAgICBNSVQKLy8gPT0vVXNlclNjcmlwdD09CmNvbnN0IHV0aWwgPSB7CQoJY29weVRleHQ6ICh0ZXh0KSA9PiB7CgkJaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgd2luZG93LmlzU2VjdXJlQ29udGV4dCkgewoJCQlyZXR1cm4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkKCQl9IGVsc2UgewoJCQlpZiAoIWRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykpIHJldHVybiBQcm9taXNlLnJlamVjdCgpCgkJCWNvbnN0IHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKQoJCQl0ZXh0QXJlYS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCcKCQkJdGV4dEFyZWEuc3R5bGUudG9wID0gdGV4dEFyZWEuc3R5bGUubGVmdCA9ICctMTAwdmgnCgkJCXRleHRBcmVhLnN0eWxlLm9wYWNpdHkgPSAnMCcKCQkJdGV4dEFyZWEudmFsdWUgPSB0ZXh0CgkJCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpCgkJCXRleHRBcmVhLmZvY3VzKCkKCQkJdGV4dEFyZWEuc2VsZWN0KCkKCQkJcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKCQkJCWRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykgPyByZXNvbHZlKCkgOiByZWplY3QoKQoJCQkJdGV4dEFyZWEucmVtb3ZlKCkKCQkJfSkKCQl9Cgl9LAoKCXNob3dBbmRIaWRUaXBzOiAobmFtZSwgb3AgPSAnc2V0JywgdmFsID0gdHJ1ZSkgPT4gewoJCWxldCB0aXBzID0gR01fZ2V0VmFsdWUoJ3d0X3RpcHMnLCB7fSkKCQlpZiAoIXRpcHMpIHRpcHMgPSB7fQoJCWlmIChvcCA9PSAnc2V0JykgewoJCQl0aXBzW25hbWVdID0gdmFsCgkJCUdNX3NldFZhbHVlKCd3dF90aXBzJywgdGlwcykKCQkJaWYgKHZhbCkgJCgnLicgKyBuYW1lKS5hZGRDbGFzcygndGlwcy15dWFuJykKCQkJZWxzZSAkKCcuJyArIG5hbWUpLnJlbW92ZUNsYXNzKCd0aXBzLXl1YW4nKQoJCQlyZXR1cm4gdHJ1ZQoJCX0gZWxzZSB7CgkJCXJldHVybiB0aXBzW25hbWVdID8gdHJ1ZSA6IGZhbHNlCgkJfQoJfSwKCglhZGRMb2dpbjogKCkgPT4gewoJCWlmICgkKCcjd3QtbG9naW4tYm94JykubGVuZ3RoID4gMCkgcmV0dXJuOwoJCSQoJ2JvZHknKS5hcHBlbmQoYAoJCQk8ZGl2IGlkPSJ3dC1sb2dpbi1tYXNrIj48L2Rpdj4KCQkJPGRpdiBpZD0id3QtbG9naW4tYm94Ij4KCQkJCTxkaXYgY2xhc3M9ImNsb3NlIj48L2Rpdj4KCQkJCTxkaXYgY2xhc3M9InRpdGxlIj7nmbvlvZXnoIE8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9ImlucHV0LWJveCI+CgkJCQkJPGlucHV0IHBsYWNlaG9sZGVyPSLnmbvlvZXlkI7ohJrmnKznlJ/mlYgiLz4KCQkJCQk8ZGl2IGNsYXNzPSJsb2dpbi1idG4iPgoJCQkJCQk8YnV0dG9uPueZu+W9lTwvYnV0dG9uPgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJ0by1pbmRleCIgc3R5bGU9ImNvbG9yOiAjOTIwMzM0O3RleHQtYWxpZ246IHJpZ2h0O21hcmdpbi1yaWdodDogNHB4OyBoZWlnaHQ6IDUwcHg7bGluZS1oZWlnaHQ6IDYwcHg7Zm9udC1zaXplOiAxMXB4OyI+5Y676I635Y+WIO+8nzwvZGl2PgoJCQk8L2Rpdj4KCQlgKQoJCUdNX2FkZFN0eWxlKGAKCQkJI3d0LWxvZ2luLW1hc2t7IGRpc3BsYXk6IG5vbmU7cG9zaXRpb246IGZpeGVkO3RvcDogMDtsZWZ0OiAwO3JpZ2h0OiAwO2JvdHRvbTogMDt6LWluZGV4OiAxMTAwMDtiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwNGQ7fQoJCQkjd3QtbG9naW4tYm94e3Bvc2l0aW9uOiBmaXhlZDttYXJnaW4tdG9wOiAzJTt0b3A6IDUwJTtsZWZ0OiA1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTtvdmVyZmxvdzogaGlkZGVuO2JhY2tncm91bmQtY29sb3I6IHdoaXRlO3BhZGRpbmc6IDMwcHggMTBweDtwYWRkaW5nLWJvdHRvbTogMDtib3JkZXItcmFkaXVzOiAxMHB4O3otaW5kZXg6IDExMDEwO30KCQkJI3d0LWxvZ2luLWJveDo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246IGFic29sdXRlO3dpZHRoOiAyNTBweDtoZWlnaHQ6IDI1MHB4O2JvcmRlci1yYWRpdXM6IDIwMHB4O2JhY2tncm91bmQtY29sb3I6ICNFOTFFNjM7ei1pbmRleDogLTE7b3BhY2l0eTogMC43O2JvdHRvbTogMTEwcHg7cmlnaHQ6IDEwMHB4O30KCQkJI3d0LWxvZ2luLWJveDo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDI1MHB4O2hlaWdodDogMjUwcHg7Ym9yZGVyLXJhZGl1czogMjAwcHg7YmFja2dyb3VuZC1jb2xvcjogIzIxOTZGMzt6LWluZGV4OiAtMTtvcGFjaXR5OiAwLjc7dG9wOiAxMTVweDtyaWdodDogLTExMnB4O30KCQkJI3d0LWxvZ2luLWJveCAuY2xvc2V7cG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAwcHg7dG9wOiAwcHg7d2lkdGg6IDQwcHg7aGVpZ2h0OiA0MHB4O30KCQkJI3d0LWxvZ2luLWJveCAuY2xvc2U6OmJlZm9yZSwjd3QtbG9naW4tYm94IC5jbG9zZTo6YWZ0ZXJ7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDUwJTt0b3A6IDUwJTtjb250ZW50OiAnJzt3aWR0aDogMTZweDtoZWlnaHQ6IDJweDtib3JkZXItcmFkaXVzOiAxcHg7YmFja2dyb3VuZC1jb2xvcjogIzIyMjt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHJvdGF0ZSg0NWRlZyk7fQoJCQkjd3QtbG9naW4tYm94IC5jbG9zZTo6YWZ0ZXIsI3d0LXNldC1ib3ggLmNsb3NlOjphZnRlcnt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHJvdGF0ZSgtNDVkZWcpO30KCQkJI3d0LWxvZ2luLWJveCAudGl0bGV7Zm9udC13ZWlnaHQ6IDYwMDtmb250LXNpemU6IDE2cHg7Y29sb3I6ICMzYTNhM2E7dGV4dC1hbGlnbjogY2VudGVyO21hcmdpbi1ib3R0b206IDIwcHg7fQoJCQkjd3QtbG9naW4tYm94IC5pbnB1dC1ib3h7ZGlzcGxheTogZmxleDtiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O3dpZHRoOiAyMzBweDtoZWlnaHQ6IDM1cHg7Ym9yZGVyLXJhZGl1czogMzBweDtvdmVyZmxvdzogaGlkZGVuO2ZvbnQtc2l6ZTogMTJweDt9CgkJCSN3dC1sb2dpbi1ib3ggLmlucHV0LWJveCBpbnB1dHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7cGFkZGluZy1sZWZ0OiAxNXB4O2JveC1zaXppbmc6IGJvcmRlci1ib3g7b3V0bGluZTogbm9uZTtib3JkZXI6IG5vbmU7YmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtmb250LXNpemU6IDEwcHg7Y29sb3I6IGJsYWNrO30KCQkJI3d0LWxvZ2luLWJveCAubG9naW4tYnRue3dpZHRoOiAxMDBweDtwYWRkaW5nOiAycHg7fQoJCQkjd3QtbG9naW4tYm94IC5sb2dpbi1idG4gYnV0dG9ue3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTtib3JkZXItcmFkaXVzOiAzMHB4O2JvcmRlcjogbm9uZTtjb2xvcjogd2hpdGU7dHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtiYWNrZ3JvdW5kLWNvbG9yOiAjZWM0MDdhO30KCQlgKQoJCSQoIiN3dC1sb2dpbi1tYXNrIikub24oImNsaWNrIiwgKCkgPT4gewoJCQkkKCcjd3QtbG9naW4tbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJJCgiI3d0LWxvZ2luLWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LXNldC1ib3gnKQoJCQkkKCIjd3QtbG9naW4tYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94JykKCQl9KQoJCSQoIiN3dC1sb2dpbi1ib3ggLmNsb3NlIikub24oImNsaWNrIiwgKCkgPT4gewoJCQkkKCcjd3QtbG9naW4tbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJJCgiI3d0LWxvZ2luLWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LXNldC1ib3gnKQoJCQkkKCIjd3QtbG9naW4tYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94JykKCQl9KQoJCSQoIiN3dC1sb2dpbi1ib3ggLnRvLWluZGV4Iikub24oImNsaWNrIiwgKCkgPT4gewoJCQl3aW5kb3cub3BlbihzdXBlclZpcC5fQ09ORklHXy5ob21lUGFnZSkKCQl9KQoJCSQoIiN3dC1sb2dpbi1ib3ggLmxvZ2luLWJ0biBidXR0b24iKS5vbigiY2xpY2siLCAoKSA9PiB7CgkJCWlmICghd3RfaW5pdF9jb2RlKSB7CgkJCQl1dGlsLnNob3dUaXBzKHsKCQkJCQl0aXRsZTogX0NPTkZJR18uaW5pdEZhaWxNc2cKCQkJCX0pOwoJCQkJcmV0dXJuCgkJCX0KCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykKCQkJJCgiI3d0LWxvZ2luLWJveCAubG9naW4tYnRuIGJ1dHRvbiIpLmFkZENsYXNzKCdidG4tYW5pbWEnKQoJCQlzZXRUaW1lb3V0KCgpID0+IHsKCQkJCSQoIiN3dC1sb2dpbi1ib3ggLmxvZ2luLWJ0biBidXR0b24iKS5yZW1vdmVDbGFzcygnYnRuLWFuaW1hJykKCQkJfSwgNTAwKQoJCQljb25zdCBwd2QgPSAkKCIjd3QtbG9naW4tYm94IGlucHV0IikudmFsKCkKCQkJY29uc3QgbWQ1YyA9IG1kNXgoKQoJCQljb25zdCBkbWQ1ID0gbWQ1eChtZDVjLCAnZGUnKQoJCQlpZiAoIXB3ZCB8fCBwd2QgIT0gZG1kNS5jb2RlKSB7CgkJCQlzZXRUaW1lb3V0KCgpID0+IHsKCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJCXRpdGxlOiAn55m75b2V56CB6ZSZ6K+vJwoJCQkJCX0pCgkJCQl9LCAyNTAwKQoJCQkJcmV0dXJuCgkJCX0KCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykKCQkJc2V0VGltZW91dCgoKSA9PiB7CgkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQl1dGlsLnNob3dUaXBzKHsgdGl0bGU6ICfor7fli7/lnKjmtbfop5LlubPlj7Dlj5Hooagg6ISa5pys44CB56C06Kej562J6KiA6K6677yM5piT5a+86Ie05Y2a5Li75LiN5pu05paw77yM5bmz5Y+w5L+u5aSN5ryP5rSe562J5b2x5ZONJyxzdWNjZXNzOiAoZSk9PnsKCQkJCQlpZihlKXsKCQkJCQkJY29uc3QgcmVzID0gewoJCQkJCQkJYXZhdGFyOiAnaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL2xvZ28vbG9nb193aGl0ZTEucG5nJywKCQkJCQkJCWxvZ2luX2RhdGU6IG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCksCgkJCQkJCQl0b2tlbjogbWQ1YwoJCQkJCQl9CgkJCQkJCSQoIiN3dC1teSBpbWciKS5hZGRDbGFzcygnbWFyZ2luLWxlZnQnKQoJCQkJCQkkKCcjd3QtbXkgaW1nJykuYXR0cignc3JjJywgcmVzLmF2YXRhcikKCQkJCQkJJCgnI3d0LWxvZ2luLW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQkJCSQoIiN3dC1sb2dpbi1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94JykKCQkJCQkJJCgiI3d0LWxvZ2luLWJveCIpLmFkZENsYXNzKCdoaWQtc2V0LWJveCcpCgkJCQkJCXN1cGVyVmlwLl9DT05GSUdfLnVzZXIgPSByZXMKCQkJCQkJR01fc2V0VmFsdWUoJ2pzeGxfdXNlcicsIHJlcykKCQkJCQkJd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpCgkJCQkJfQoJCQkJfX0pCgkJCX0sIDI1MDApCgkJfSkKCX0sDQoJDQoJamVuY29kZTogKHMsIHBsdXMpID0+IHsNCgkJcmV0dXJuIGVuY29kZShKU09OLnN0cmluZ2lmeShzLCBgdXRmLThgKSwgcGx1cyk7DQoJfSwKCglmaW5kVGFyZ2V0RWxlbWVudDogKHRhcmdldENvbnRhaW5lcixtYXhUcnlUaW1lPTMwKT0+IHsKCQljb25zdCBib2R5ID0gd2luZG93LmRvY3VtZW50OwoJCWxldCB0YWJDb250YWluZXI7CgkJbGV0IHRyeVRpbWUgPSAwOwoJCWxldCBzdGFydFRpbWVzdGFtcDsKCQlyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewoJCQlmdW5jdGlvbiB0cnlGaW5kRWxlbWVudCh0aW1lc3RhbXApIHsKCQkJCWlmICghc3RhcnRUaW1lc3RhbXApIHsKCQkJCQlzdGFydFRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKCQkJCX0KCQkJCWNvbnN0IGVsYXBzZWRUaW1lID0gdGltZXN0YW1wIC0gc3RhcnRUaW1lc3RhbXA7CgkJCQlpZiAoZWxhcHNlZFRpbWUgPj0gNTAwKSB7CgkJCQkJY29uc29sZS5sb2coImZpbmQgZWxlbWVudO+8miIgKyB0YXJnZXRDb250YWluZXIgKyAi77yMdGhpcyIgKyB0cnlUaW1lICsgIm51bSIpCgkJCQkJdGFiQ29udGFpbmVyID0gYm9keS5xdWVyeVNlbGVjdG9yKHRhcmdldENvbnRhaW5lcikKCQkJCQlpZiAodGFiQ29udGFpbmVyKSB7CgkJCQkJCXJlc29sdmUodGFiQ29udGFpbmVyKQoJCQkJCX0gZWxzZSBpZiAoKyt0cnlUaW1lID09PSBtYXhUcnlUaW1lKSB7CgkJCQkJCXJlamVjdCgpCgkJCQkJfSBlbHNlIHsKCQkJCQkJc3RhcnRUaW1lc3RhbXAgPSB0aW1lc3RhbXAKCQkJCQl9CgkJCQl9CgkJCQlpZiAoIXRhYkNvbnRhaW5lciAmJiB0cnlUaW1lIDwgbWF4VHJ5VGltZSkgewoJCQkJCXJlcXVlc3RBbmltYXRpb25GcmFtZSh0cnlGaW5kRWxlbWVudCk7CgkJCQl9CgkJCX0KCQkJcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRyeUZpbmRFbGVtZW50KTsKCQl9KTsKCX0sCgoJcmVwbGFjZUV4aXN0UmVzb3VyY2VzOiAoYm9keSkgPT4gewoJCWxldCBhdHRhY2htZW50cyA9IGJvZHkuYXR0YWNobWVudHM7CgkJbGV0IGFsbF9pbWcgPSB7fTsKCQlsZXQgaGFzX3ZpZGVvID0gLTE7CgkJbGV0IGhhc19hdWRpbyA9IC0xOwoJCWZvciAodmFyIGkgPSAwOyBpIDwgYXR0YWNobWVudHMubGVuZ3RoOyBpKyspIHsKCQkJdmFyIGF0dGEgPSBhdHRhY2htZW50c1tpXTsKCQkJaWYgKGF0dGEuY2F0ZWdvcnkgPT09ICdpbWFnZXMnKSB7CgkJCQlhbGxfaW1nW2F0dGEuaWRdID0gYXR0YS5yZW1vdGVVcmw7CgkJCX0KCQkJaWYgKGF0dGEuY2F0ZWdvcnkgPT09ICdhdWRpbycpIHsKCQkJCWhhc19hdWRpbyA9IGk7CgkJCQlyZXR1cm4gW2JvZHksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoYXNfYXVkaW9dOwoJCQl9CgkJCWlmIChhdHRhLmNhdGVnb3J5ID09PSAndmlkZW8nKSB7CgkJCQloYXNfdmlkZW8gPSBpOwoJCQkJcmV0dXJuIFtib2R5LCB1bmRlZmluZWQsIGhhc192aWRlbywgdW5kZWZpbmVkXTsKCQkJfQoJCX0KCQlyZXR1cm4gW2JvZHksIGFsbF9pbWcsIGhhc192aWRlb107Cgl9LAoKCXNsZWVwOiAodGltZSkgPT4gewoJCXJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHsKCQkJc2V0VGltZW91dCgoKSA9PiB7CgkJCQlyZXMoKQoJCQl9LCB0aW1lKQoJCX0pCgl9LA0KCQoJZ2V0VXNlckRpY3Q6IChpZCkgPT4gewoJCXZhciB1cmwgPSBgaHR0cHM6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZX0vYXBpL3RvcGljL25vZGUvdG9waWNzP3BhZ2U9MSZ1c2VySWQ9JHtpZH0mdHlwZT0wYDsKCQl2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoJCXJlcXVlc3Qub3BlbignR0VUJywgdXJsLCBmYWxzZSk7CgkJcmVxdWVzdC5zZW5kKG51bGwpOwoJCWlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7CgkJCXJldHVybiB7fTsKCQl9CgkJbGV0IHAgPSBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0LCBgdXRmLThgKS5kYXRhOwoJCXAgPSBKU09OLnBhcnNlKGRlY29kZShwLCBzdXBlclZpcCksIGB1dGYtOGApOwoJCWxldCB0b3RhbCA9IHAucGFnZS50b3RhbDsKCQlsZXQgdWlkID0gJyc7CgkJaWYgKGByZXN1bHRzYCBpbiBwKSB7CgkJCXVpZCA9IHAucmVzdWx0c1swXS51c2VyLm5pY2tuYW1lOwoJCX0KCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkIHRpdGxlJykuaW5uZXJIVE1MID0gJyh1Keiiq+Wwgeemgei0puWPtycKCQlyZXR1cm4gewoJCQknaXNGYXZvcml0ZSc6IGZhbHNlLAoJCQknbGlrZUNvdW50JzogMTIsCgkJCSd1c2VyJzogewoJCQkJJ2lkJzogcGFyc2VJbnQoaWQpLAoJCQkJJ25pY2tuYW1lJzogJ+iiq+Wwgeemgei0puWPtycsCgkJCQknYXZhdGFyJzogJzAnLAoJCQkJJ2Rlc2NyaXB0aW9uJzogYOivpei0puWPt+W3suiiq+WwgeemgWAsCgkJCQkndG9waWNDb3VudCc6IHRvdGFsLAoJCQkJJ3ZpZGVvQ291bnQnOiAwLAoJCQkJJ2NvbW1lbnRDb3VudCc6IDMwMywKCQkJCSdmYW5zQ291bnQnOiA1NywKCQkJCSdmYXZvcml0ZUNvdW50JzogMzksCgkJCQknc3RhdHVzJzogMCwKCQkJCSdzZXgnOiAxLAoJCQkJJ3ZpcCc6IDAsCgkJCQkndmlwRXhwaXJlc1RpbWUnOiAnMDAwMS0wMS0wMSAwMDowMDowMCcsCgkJCQknY2VydGlmaWVkJzogZmFsc2UsCgkJCQknY2VydFZpZGVvJzogZmFsc2UsCgkJCQknY2VydFByb2Zlc3Nvcic6IGZhbHNlLAoJCQkJJ2ZhbW91cyc6IGZhbHNlLAoJCQkJJ2ZvcmJpZGRlbic6IGZhbHNlLAoJCQkJJ3RhZ3MnOiBudWxsLAoJCQkJJ3JvbGUnOiAwLAoJCQkJJ3BvcHVsYXJpdHknOiAxMCwKCQkJCSdkaWFtb25kQ29uc3VtZSc6IDAsCgkJCQkndGl0bGUnOiB7CgkJCQkJJ2lkJzogMCwKCQkJCQknbmFtZSc6ICcnLAoJCQkJCSdjb25zdW1lJzogMCwKCQkJCQknY29uc3VtZUVuZCc6IDAsCgkJCQkJJ2ljb24nOiBwLnJlc3VsdHNbMF0udXNlci50aXRsZS5pY29uCgkJCQl9LAoJCQkJJ2ZyaWVuZFN0YXR1cyc6IGZhbHNlLAoJCQkJJ3ZvaWNlU3RhdHVzJzogZmFsc2UsCgkJCQkndmlkZW9TdGF0dXMnOiBmYWxzZSwKCQkJCSd2b2ljZU1vbmV5VHlwZSc6IDAsCgkJCQkndm9pY2VBbW91bnQnOiAwLAoJCQkJJ3ZpZGVvTW9uZXlUeXBlJzogMCwKCQkJCSd2aWRlb0Ftb3VudCc6IDAsCgkJCQknZGVwb3NpdE1vbmV5JzogMAoJCQl9CgkJfQoJfSwKCgltb2RpZnlVc2VyOiAoZGF0YSwgaWQpID0+IHsKCQlpZiAoZGF0YS5lcnJvckNvZGUgPT09IDApIHsKCQkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkIHx8IHR5cGVvZihkYXRhLmRhdGEpID09ICdvYmplY3QnKSB7CgkJCQlzdXBlclZpcC5fQ09ORklHXy5oamVkZCA9IHRydWUKCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgdGl0bGUnKS5pbm5lckhUTUwgPSAnKHUpJyArIGRhdGEuZGF0YS51c2VyLm5pY2tuYW1lCgkJCX0gZWxzZSB7CgkJCQlsZXQgYm9keSA9ICcnCgkJCQl0cnkgewoJCQkJCWJvZHkgPSBKU09OLnBhcnNlKGRlY29kZShkYXRhLmRhdGEsIHN1cGVyVmlwKSk7CgkJCQl9IGNhdGNoIChlKSB7CgkJCQkJYm9keSA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEuZGF0YSwgc3VwZXJWaXAsIHRydWUpKTsKCQkJCX0KCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgdGl0bGUnKS5pbm5lckhUTUwgPSAnKHUpJyArIGJvZHkudXNlci5uaWNrbmFtZQoJCQl9CgkJCXJldHVybiBkYXRhOwoJCX0KCQlkYXRhLmlzRW5jcnlwdGVkID0gdHJ1ZTsKCQlkYXRhLmVycm9yQ29kZSA9IDA7CgkJZGF0YS5zdWNjZXNzID0gdHJ1ZTsKCQlkYXRhLm1lc3NhZ2UgPSAiIjsKCQlsZXQgdWRpY3QgPSB1dGlsLmdldFVzZXJEaWN0KGlkKTsKCQlkYXRhLmRhdGEgPSB1dGlsLmplbmNvZGUodWRpY3QsICdwbHVzJykKCQlyZXR1cm4gZGF0YQoJfSwNCgkNCglkZWNvYXQ6IChzKSA9PnsNCgkJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChhdG9iKHMpKQ0KCX0sDQoJDQoJc2hvd1RpcHM6IChpdGVtID0ge30pID0+IHsNCgkJJCgnI3d0LW1heGluZGV4LW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsNCgkJJCgiI3d0LXRpcHMtYm94IikucmVtb3ZlQ2xhc3MoJ2hpZC1zZXQtYm94Jyk7DQoJCSQoIiN3dC10aXBzLWJveCIpLmFkZENsYXNzKCdzaG93LXNldC1ib3gnKTsNCgkJJCgnI3d0LXRpcHMtYm94IC5idG4tYm94JykuZW1wdHkoKQ0KCQkkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3gnKS5hcHBlbmQoYA0KCQkJPGJ1dHRvbiBjbGFzcz0nY2FuY2VsJz7lj5bmtog8L2J1dHRvbj4NCgkJCTxidXR0b24gY2xhc3M9J3N1Ym1pdCc+56Gu5a6aPC9idXR0b24+DQoJCWApDQoJCWlmIChpdGVtLnRpdGxlKSAkKCcjd3QtdGlwcy1ib3ggLmNvbnRlbnQnKS5odG1sKGl0ZW0udGl0bGUpOw0KCQlpZiAoaXRlbS5kb3VidCkgJCgnI3d0LXRpcHMtYm94IC5idG4tYm94IC5jYW5jZWwnKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsNCgkJaWYgKGl0ZW0uY29uZmlybSkgJCgnI3d0LXRpcHMtYm94IC5idG4tYm94IC5zdWJtaXQnKS5odG1sKGl0ZW0uY29uZmlybSk7DQoJCSQoJyN3dC10aXBzLWJveCAuYnRuLWJveCAuc3VibWl0Jykub24oJ2NsaWNrJywgKCkgPT4gew0KCQkJJCgnI3d0LW1heGluZGV4LW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOw0KCQkJJCgiI3d0LXRpcHMtYm94IikucmVtb3ZlQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOw0KCQkJJCgiI3d0LXRpcHMtYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94Jyk7DQoJCQlpZiAoaXRlbS5zdWNjZXNzKSBpdGVtLnN1Y2Nlc3ModHJ1ZSk7DQoJCX0pDQoJCSQoJyN3dC10aXBzLWJveCAuYnRuLWJveCAuY2FuY2VsJykub24oJ2NsaWNrJywgKCkgPT4gew0KCQkJJCgnI3d0LW1heGluZGV4LW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOw0KCQkJJCgiI3d0LXRpcHMtYm94IikucmVtb3ZlQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOw0KCQkJJCgiI3d0LXRpcHMtYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94Jyk7DQoJCQlpZiAoaXRlbS5zdWNjZXNzKSBpdGVtLnN1Y2Nlc3MoZmFsc2UpOw0KCQl9KQ0KCX0sDQoJCgltb2RpZnlEYXRhOiAoZGF0YSkgPT4gewoJCWxldCBib2R5ID0gJycKCQlsZXQgaXNQbHVzID0gZmFsc2UKCQlpZiAoc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgfHwgdHlwZW9mKGRhdGEpID09ICdvYmplY3QnKSB7CgkJCXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID0gdHJ1ZQoJCQlib2R5ID0gZGF0YQoJCX0gZWxzZSB7CgkJCXRyeSB7CgkJCQlib2R5ID0gSlNPTi5wYXJzZShkZWNvZGUoZGF0YSwgc3VwZXJWaXApKTsKCQkJfSBjYXRjaCAoZSkgewoJCQkJYm9keSA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEsIHN1cGVyVmlwLCB0cnVlKSk7CgkJCQlpc1BsdXMgPSB0cnVlCgkJCX0KCQl9CgkJaWYgKCFib2R5KSByZXR1cm4gc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPyAnbnVsbCcgOiAnV1cwMVYyTXlTa0pRVkRBOScKCQlpZiAoJC5pc0VtcHR5T2JqZWN0KGJvZHkpKSByZXR1cm4gc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPyAne30nIDogJ1dsUk5kMUJSUFQwPScKCQlzdXBlclZpcC5fQ09ORklHXy51c2VySWQgPSBib2R5LnVzZXIuaWQKCQlpZiAoYm9keS5hdHRhY2htZW50cyAmJiBib2R5LmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHsKCQkJbGV0IHR5cGVzID0gW10KCQkJYm9keS5hdHRhY2htZW50cy5mb3JFYWNoKGl0ZW0gPT4gewoJCQkJaWYgKGl0ZW0uY2F0ZWdvcnkgPT0gJ3ZpZGVvJyAmJiAoIXR5cGVzLmluY2x1ZGVzKCd2aWRlbycpKSkgewoJCQkJCXR5cGVzLnB1c2goJ3ZpZGVvJykKCQkJCX0KCQkJCWlmKGl0ZW0uY2F0ZWdvcnkgPT0gJ3ZpZGVvJyAmJiAhaXRlbS5yZW1vdGVVcmwpewoJCQkJCWxldCB1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1aWQnKQoJCQkJCWxldCB0b2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJykKCQkJCQlpZighdWlkIHx8ICF0b2tlbil7CgkJCQkJCXVpZCA9IDE3MDA4NzU1MzkwMQoJCQkJCQl0b2tlbiA9ICcwZTMyZjBkYTJkNGE0ODk3YjFkMDYzZThiOTZhNGRmZicKCQkJCQl9CgkJCQkJJC5wb3N0KHsKCQkJCQkJdXJsOiBsb2NhdGlvbi5vcmlnaW4gKyAnL2FwaS9hdHRhY2htZW50JywKCQkJCQkJaGVhZGVyczogewoJCQkJCQkJJ1gtVXNlci1JZCc6IHVpZCwKCQkJCQkJCSdYLVVzZXItVG9rZW4nOiB0b2tlbgoJCQkJCQl9LAoJCQkJCQlkYXRhOiBKU09OLnN0cmluZ2lmeSh7CgkJCQkJCQlpZDogaXRlbS5pZCwKCQkJCQkJCXJlc291cmNlX3R5cGU6ICd0b3BpYycsCgkJCQkJCQlyZXNvdXJjZV9pZDogYm9keS50b3BpY0lkLAoJCQkJCQkJbGluZTogJycKCQkJCQkJfSkKCQkJCQl9KQoJCQkJfQoJCQkJaWYgKGl0ZW0uY2F0ZWdvcnkgPT0gJ2F1ZGlvJyAmJiAoIXR5cGVzLmluY2x1ZGVzKCdhdWRpbycpKSkgdHlwZXMucHVzaCgnYXVkaW8nKQoJCQkJaWYgKGl0ZW0uY2F0ZWdvcnkgPT0gJ2ltYWdlcycgJiYgKCF0eXBlcy5pbmNsdWRlcygnaW1nJykpKSB0eXBlcy5wdXNoKCdpbWcnKQoJCQl9KQoJCQl0eXBlcyA9ICdbJyArIHR5cGVzLmpvaW4oJyArICcpICsgJ10nCgkJCWJvZHkudGl0bGUgPSAodHlwZXMgKyBib2R5LnRpdGxlKQ0KCQkJaWYoc3VwZXJWaXAuX0NPTkZJR18uaGplZGQpew0KCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgdGl0bGUnKS5pbm5lckhUTUwgPSBib2R5LnRpdGxlDQoJCQl9ZWxzZXsNCgkJCQl0cnl7DQoJCQkJCWNvbnN0IHRpdGxlID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShib2R5LnRpdGxlKSkNCgkJCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCB0aXRsZScpLmlubmVySFRNTCA9IHRpdGxlDQoJCQkJfWNhdGNoKGUpew0KCQkJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkIHRpdGxlJykuaW5uZXJIVE1MID0gYm9keS50aXRsZQ0KCQkJCX0NCgkJCX0NCgkJfQoJCWxldCBbbmJvZHksIHJlc3RfaW1nLCBoYXNfdmlkZW8sIGhhc19hdWRpb10gPSB1dGlsLnJlcGxhY2VFeGlzdFJlc291cmNlcyhib2R5KTsKCQlib2R5ID0gbmJvZHk7CgkJaWYgKCdzYWxlJyBpbiBib2R5ICYmIGJvZHkuc2FsZSAhPT0gbnVsbCkgewoJCQlib2R5LnNhbGUuaXNfYnV5ID0gdHJ1ZTsKCQkJYm9keS5zYWxlLmJ1eV9pbmRleCA9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkgKiAoNTAwMCAtIDEwMDAgKyAxKSArIDEwMDAsIDEwKTsKCQl9CgkJaWYgKGhhc192aWRlbyA+PSAwIHx8IGhhc19hdWRpbyA+PSAwKSB7CgkJCWxldCBpbnNlcnREb20gPSAnJwoJCQlpZiAoaGFzX3ZpZGVvID49IDApIHsKCQkJCWlmKGJvZHkuYXR0YWNobWVudHNbaGFzX3ZpZGVvXS5yZW1vdGVVcmwpew0KCQkJCQlpZighYm9keS5hdHRhY2htZW50c1toYXNfdmlkZW9dLnJlbW90ZVVybC5zdGFydHNXaXRoKCdodHRwJykgfHwgIWJvZHkuYXR0YWNobWVudHNbaGFzX3ZpZGVvXS5yZW1vdGVVcmwuZW5kc1dpdGgoJy5tM3U4Jykpew0KCQkJCQkJYm9keS5hdHRhY2htZW50c1toYXNfdmlkZW9dLnJlbW90ZVVybCA9IGdldE0zdThQYXRoKGJvZHkuYXR0YWNobWVudHNbaGFzX3ZpZGVvXSk7DQoJCQkJCX0NCgkJCQkJdHJ5eyBib2R5LmNvbnRlbnQgPSBib2R5LmNvbnRlbnQucmVwbGFjZShib2R5LmNvbnRlbnQubWF0Y2goLzx2aWRlbyBzcmM9IihbXiJdKykiLylbMV0sYm9keS5hdHRhY2htZW50c1toYXNfdmlkZW9dLnJlbW90ZVVybCl9Y2F0Y2goZSl7fQoJCQkJfQoJCQkJc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwgPSBib2R5LmF0dGFjaG1lbnRzW2hhc192aWRlb10ucmVtb3RlVXJsCgkJCQlpbnNlcnREb20gPQoJCQkJCWA8ZGl2Pjx2aWRlbyBzdHlsZT0iZGlzcGxheTpub25lIiBzcmM9IiR7Ym9keS5hdHRhY2htZW50c1toYXNfdmlkZW9dLnJlbW90ZVVybH0iIGRhdGEtaWQ9IiR7Ym9keS5hdHRhY2htZW50c1toYXNfdmlkZW9dLmlkfSI+PC92aWRlbz48L2Rpdj5gCgkJCX0gZWxzZSB7CgkJCQlpbnNlcnREb20gPQoJCQkJCWA8ZGl2IHN0eWxlPSJtYXJnaW46IDIwcHg7Ij48YXVkaW8gaWQ9InNob3dhdWRpbyIgc3JjPSIke2JvZHkuYXR0YWNobWVudHNbaGFzX2F1ZGlvXS5yZW1vdGVVcmx9IiBjb250cm9scyBjb250cm9sc2xpc3Q9Im5vZG93bmxvYWQiPjwvYXVkaW8+PC9kaXY+YAoJCQl9CgkJCXRyeSB7CgkJCQljb25zdCByZWdSZXAgPSAvY2xhc3M9InNlbGxfbGluZTIiXD5bXlw8XSs8XC9zcGFuPi8uZXhlYyhib2R5LmNvbnRlbnQpWzBdCgkJCQlib2R5LmNvbnRlbnQgPSBib2R5LmNvbnRlbnQucmVwbGFjZSgnPHNwYW4gY2xhc3M9InNlbGwtYnRuIicsCgkJCQkJJzxkaXYgaWQ9Ind0LXJlc291cmNlcy1ib3giPjxkaXYgY2xhc3M9InNlbGwtYnRuIicpLnJlcGxhY2UocmVnUmVwLCByZWdSZXAgKyBpbnNlcnREb20gKwoJCQkJCSc8L2Rpdj48L2Rpdj4nKTsKCQkJfSBjYXRjaCAoZSkgewoJCQkJYm9keS5jb250ZW50ICs9IGluc2VydERvbQoJCQl9CgkJCXJldHVybiBzdXBlclZpcC5fQ09ORklHXy5oamVkZCA/IGJvZHkgOiB1dGlsLmplbmNvZGUoYm9keSwgaXNQbHVzKTsKCQl9CgkJbGV0IGRvbV9lbGVtZW50cyA9IFtdCgkJZm9yIChjb25zdCBbaWQsIHNyY10gb2YgT2JqZWN0LmVudHJpZXMocmVzdF9pbWcpKSB7CgkJCWRvbV9lbGVtZW50cy5wdXNoKGA8aW1nIHNyYz0iJHtzcmN9IiBkYXRhLWlkPSIke2lkfSIvPmApOwoJCX0KCQlsZXQgc2VsbGVkX2ltZyA9IGBbc2VsbF1gICsgJzxwPicgKyBkb21fZWxlbWVudHMuam9pbignPC9wPjxwPicpICsgJzwvcD4nICsgYFsvc2VsbF1gOwoJCWxldCBuY29udGVudCA9IGJvZHkuY29udGVudC5yZXBsYWNlKC88c3BhbiBjbGFzcz1cInNlbGwtYnRuXCIuKjxcL3NwYW4+Lywgc2VsbGVkX2ltZyk7CgkJYm9keS5jb250ZW50ID0gbmNvbnRlbnQ7CgkJcmV0dXJuIHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID8gYm9keSA6IHV0aWwuamVuY29kZShib2R5LCBpc1BsdXMpOwoJfSwNCgkNCglzaG93RG93bkxvYWRXaW5kb3c6IChzaG93PXRydWUpID0+ew0KCQlpZighc2hvdyl7DQoJCQkkKCcjd3QtbWFzay1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOw0KCQkJJCgiI3d0LWRvd25sb2FkLWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LXNldC1ib3gnKTsNCgkJCSQoIiN3dC1kb3dubG9hZC1ib3giKS5hZGRDbGFzcygnaGlkLXNldC1ib3gnKTsNCgkJCXJldHVybg0KCQl9DQoJCSQoJyN3dC1tYXNrLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpOw0KCQlpZighZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3d0LWRvd25sb2FkLWJveCcpKXsNCgkJCWxldCBpdGVtcyA9ICcnDQoJCQlzdXBlclZpcC5fQ09ORklHXy5kb3duVXRpbHMuZm9yRWFjaCgoaXRlbSxpbmRleCkgPT57DQoJCQkJaXRlbXMgKz0gYA0KCQkJCQk8bGkgY2xhc3M9Iml0ZW0iIGRhdGEtdXJsPSIke2l0ZW0udXJsICsgKGl0ZW0uaXNBcHBlbmQ/Jyc6Jz9tM3U4PScpICsgKHN1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsP3N1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsOicnKX0iPiR7aXRlbS50aXRsZX08L2xpPg0KCQkJCWANCgkJCX0pDQoJCQkkKCdib2R5JykuYXBwZW5kKGANCgkJCQk8ZGl2IGlkPSJ3dC1kb3dubG9hZC1ib3giPg0KCQkJCQk8dmlldyBjbGFzcz0iY2xvc2UiPjwvdmlldz4NCgkJCQkJPHVsPiR7aXRlbXN9PC91bD4NCgkJCQk8L2Rpdj4NCgkJCWApDQoJCX1lbHNlew0KCQkJJCgnI3d0LWRvd25sb2FkLWJveCcpLmVtcHR5KCkNCgkJCWxldCBpdGVtcyA9ICcnDQoJCQlzdXBlclZpcC5fQ09ORklHXy5kb3duVXRpbHMuZm9yRWFjaCgoaXRlbSxpbmRleCkgPT57DQoJCQkJaXRlbXMgKz0gYA0KCQkJCQk8bGkgY2xhc3M9Iml0ZW0iIGRhdGEtdXJsPSIke2l0ZW0udXJsICsgKGl0ZW0uaXNBcHBlbmQ/Jyc6Jz9tM3U4PScpICsgKHN1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsP3N1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsOicnKX0iPiR7aXRlbS50aXRsZX08L2xpPg0KCQkJCWANCgkJCX0pDQoJCQkkKCcjd3QtZG93bmxvYWQtYm94JykuYXBwZW5kKGA8dmlldyBjbGFzcz0iY2xvc2UiPjwvdmlldz48dWw+JHtpdGVtc308L3VsPmApDQoJCX0NCgkJJCgiI3d0LWRvd25sb2FkLWJveCIpLnJlbW92ZUNsYXNzKCdoaWQtc2V0LWJveCcpOw0KCQkkKCIjd3QtZG93bmxvYWQtYm94IikuYWRkQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOw0KCQkkKCIjd3QtZG93bmxvYWQtYm94IC5pdGVtIikub24oJ2NsaWNrJyxmdW5jdGlvbihlKXsNCgkJCWNvbnN0IHVybCA9IGUudGFyZ2V0LmRhdGFzZXQudXJsDQoJCQlpZighdXJsIHx8ICF1cmwuaW5jbHVkZXMoJz1odHRwJykpew0KCQkJCXV0aWwuc2hvd1RpcHMoew0KCQkJCQl0aXRsZTogJ+aKseatie+8jOacquajgOa1i+WIsOinhumike+8jOi/mOe7p+e7reWJjeW+gOWQlz8nLA0KCQkJCQlkb3VidDogdHJ1ZSwNCgkJCQkJc3VjY2VzczogKHJlcyk9PnsNCgkJCQkJCWlmKHJlcyl7DQoJCQkJCQkJd2luZG93Lm9wZW4odXJsKQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfSkNCgkJCX1lbHNlew0KCQkJCXdpbmRvdy5vcGVuKHVybCkNCgkJCX0NCgkJfSkNCgkJJCgiI3d0LWRvd25sb2FkLWJveCAuY2xvc2UiKS5vbignY2xpY2snLGZ1bmN0aW9uKCl7DQoJCQkkKCIjd3QtbWFzay1ib3giKS5jbGljaygpDQoJCX0pDQoJfSwKCglmb3JtYXRUaXRsZTogKGRhdGEpID0+IHsKCQlpZiAoIWRhdGEpIHJldHVybiBkYXRhCgkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkIHx8IHR5cGVvZihkYXRhKSA9PSAnb2JqZWN0JykgewoJCQlzdXBlclZpcC5fQ09ORklHXy5oamVkZCA9IHRydWUKCQl9IGVsc2UgewoJCQlkYXRhID0gSlNPTi5wYXJzZShkZWNvZGUoZGF0YSwgc3VwZXJWaXApKQoJCX0KCQlpZiAoIWRhdGEgfHwgZGF0YSA9PSAnbnVsbCcpIHJldHVybiBzdXBlclZpcC5fQ09ORklHXy5oamVkZCA/ICdudWxsJyA6ICdXVzAxVjJNeVNrSlFWREE5JwoJCWlmICghZGF0YS5yZXN1bHRzKSB7CgkJCWRhdGEucmVzdWx0cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpCgkJCWRhdGEuaXNMaXN0ID0gdHJ1ZQoJCX0KCQlkYXRhLnJlc3VsdHMuZm9yRWFjaChpdGVtID0+IHsKCQkJaWYgKGl0ZW0uYXR0YWNobWVudHMgJiYgaXRlbS5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7CgkJCQlsZXQgdHlwZXMgPSBbXQoJCQkJaWYgKGl0ZW0uaGFzVmlkZW8gJiYgIXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkKSB0eXBlcy5wdXNoKCd2aWRlbycpCgkJCQlpZiAoaXRlbS5oYXNBdWRpbyAmJiAhc3VwZXJWaXAuX0NPTkZJR18uaGplZGQpIHR5cGVzLnB1c2goJ2F1ZGlvJykKCQkJCWlmIChpdGVtLmhhc1BpYyAmJiAhc3VwZXJWaXAuX0NPTkZJR18uaGplZGQpIHR5cGVzLnB1c2goJ2ltZycpCgkJCQlpZiAodHlwZXMubGVuZ3RoID4gMCkgewoJCQkJCXR5cGVzID0gJ1snICsgdHlwZXMuam9pbignICsgJykgKyAnXScKCQkJCQlpdGVtLnRpdGxlID0gKHR5cGVzICsgaXRlbS50aXRsZSkKCQkJCX0gZWxzZSB7CgkJCQkJbGV0IGltZ0NvdW50ID0gMAoJCQkJCWl0ZW0uYXR0YWNobWVudHMuZm9yRWFjaChpdGVtID0+IHsKCQkJCQkJaWYgKGl0ZW0uY2F0ZWdvcnkgPT0gJ3ZpZGVvJyAmJiAoIXR5cGVzLmluY2x1ZGVzKCd2aWRlbycpKSkgdHlwZXMucHVzaCgKCQkJCQkJCSd2aWRlbycpCgkJCQkJCWlmIChpdGVtLmNhdGVnb3J5ID09ICdhdWRpbycgJiYgKCF0eXBlcy5pbmNsdWRlcygnYXVkaW8nKSkpIHR5cGVzLnB1c2goCgkJCQkJCQknYXVkaW8nKQoJCQkJCQlpZiAoaXRlbS5jYXRlZ29yeSA9PSAnaW1hZ2VzJykgewoJCQkJCQkJaWYgKCF0eXBlcy5pbmNsdWRlcygnaW1nJykpIHR5cGVzLnB1c2goJ2ltZycpCgkJCQkJCQlpbWdDb3VudCsrCgkJCQkJCX0KCQkJCQl9KQoJCQkJCWlmIChzdXBlclZpcC5fQ09ORklHXy5oamVkZCAmJiAoaW1nQ291bnQgPiAyKSAmJiAhdHlwZXMuaW5jbHVkZXMoJ3ZpZGVvJykpIHR5cGVzCgkJCQkJCS5wdXNoKCc/JykKCQkJCQlpZiAodHlwZXMubGVuZ3RoID4gMCkgewoJCQkJCQl0eXBlcyA9ICdbJyArIHR5cGVzLmpvaW4oJyArICcpICsgJ10nCgkJCQkJCWl0ZW0udGl0bGUgPSAodHlwZXMgKyBpdGVtLnRpdGxlKQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0pCgkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkKSB7CgkJCXJldHVybiBkYXRhLmlzTGlzdCA/IGRhdGEuaXNMaXN0IDogZGF0YQoJCX0gZWxzZSB7CgkJCXJldHVybiBkYXRhLmlzTGlzdCA/IHV0aWwuamVuY29kZShkYXRhLnJlc3VsdHMpIDogdXRpbC5qZW5jb2RlKGRhdGEpCgkJfQoJfSwKCglsYXN0aW5nVG9rZW46IChkYXRhKSA9PiB7CgkJaWYgKCFkYXRhKSByZXR1cm4gZGF0YTsKCQlsZXQgaW5mbyA9ICcnCgkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkIHx8IHR5cGVvZihkYXRhKSA9PSAnb2JqZWN0JykgewoJCQlzdXBlclZpcC5fQ09ORklHXy5oamVkZCA9IHRydWUKCQkJaW5mbyA9IGRhdGEKCQl9IGVsc2UgewoJCQlpbmZvID0gSlNPTi5wYXJzZShkZWNvZGUoZGF0YSwgc3VwZXJWaXApKQoJCX0KCQljb25zdCB1c2VyID0gaW5mby51c2VyID8gaW5mby51c2VyIDogaW5mbwoJCXVzZXIudGl0bGUgPSB7CgkJCWlkOiA2LAoJCQluYW1lOiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoJ+elnuixqicpKSwKCQkJY29uc3VtZTogMTAwMDAwMDAsCgkJCWNvbnN1bWVFbmQ6IDAsCgkJCWljb246ICJodHRwczovL2hqcGljLmhqcGZlMS5jb20vaGpzdG9yZS9zeXN0ZW0vbm9kZS91c2VydGl0bGU2LnBuZz92ZXI9MTY1NDU5MDIzNSIKCQl9CgkJdXNlci52aXAgPSA0CgkJdXNlci5mYW1vdXMgPSB0cnVlCgkJcmV0dXJuIHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID8gaW5mbyA6IHV0aWwuamVuY29kZShpbmZvKQoJfSwKCglmb3JtYXRWaWRlbzogKGRhdGEpID0+IHsKCQlpZiAoIWRhdGEpIHJldHVybiBkYXRhCgkJbGV0IHZpZGVvID0gJycKCQlpZiAoc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgfHwgdHlwZW9mKGRhdGEpID09ICdvYmplY3QnKSB7CgkJCXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID0gdHJ1ZQoJCQl2aWRlbyA9IGRhdGEKCQl9IGVsc2UgewoJCQl2aWRlbyA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEsIHN1cGVyVmlwKSkKCQl9DQoJCXZpZGVvLnR5cGUgPSAxCgkJdmlkZW8uYW1vdW50ID0gMAoJCXZpZGVvLm1vbmV5X3R5cGUgPSAwCgkJdmlkZW8udmlwID0gMAoJCWlmICh2aWRlby5yZW1vdGVVcmwgJiYgIXZpZGVvLnJlbW90ZVVybC5zdGFydHNXaXRoKCdodHRwJykpIHsNCgkJCWlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygndmlkZW9wbGF5JykpIHsNCgkJCQl2aWRlby5yZW1vdGVVcmwgPSBnZXRNM3U4UGF0aCh2aWRlby5yZW1vdGVVcmwpDQoJCQkJc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwgPSB2aWRlby5yZW1vdGVVcmwKCQkJfSBlbHNlIHsNCgkJCQlpZiAoc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwpIHsNCgkJCQkJdmlkZW8ucmVtb3RlVXJsID0gc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwNCgkJCQl9CgkJCQllbHNlIHsNCgkJCQkJY29uc29sZS5sb2coJzcnLHZpZGVvLnJlbW90ZVVybCkKCQkJCQkvLyBzdXBlclZpcC5fQ09ORklHXy52aWRlb1VybCA9IGdldE0zdThQYXRoKHZpZGVvLnJlbW90ZVVybCkNCgkJCQkJc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwgPSBsb2NhdGlvbi5vcmlnaW4gKyB2aWRlby5yZW1vdGVVcmwNCgkJCQkJY29uc29sZS5sb2coJzgnLHN1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsKQoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiBzdXBlclZpcC5fQ09ORklHXy5oamVkZCA/IHZpZGUgOiB1dGlsLmplbmNvZGUodmlkZW8pCgl9LAoKCWNoZWNrVXBkYXRlOiAoY2hlY2spID0+IHsKCQljb25zdCBhdXRvVXBkYXRlZFZlcnNpb25EYXRlID0gR01fZ2V0VmFsdWUoJ2hhaWppYW9fYXV0b191cGRhdGVkX2RhdGUnLCAwKQoJCWlmIChhdXRvVXBkYXRlZFZlcnNpb25EYXRlID4gRGF0ZS5ub3coKSAmJiAhY2hlY2spIHJldHVybiB7CgkJCWNvZGU6IC0xMDAsCgkJCW1zZzogJ+ajgOa1i+abtOaWsOmikeeOh+mZkOWIticKCQl9CgkJaWYgKGNoZWNrICYmIEdNX2dldFZhbHVlKCdoYWlqaWFvX3VwZGF0ZWRfbmV4dF9kYXRlJywgMCkgPiBEYXRlLm5vdygpKSByZXR1cm4gewoJCQljb2RlOiAtMjAwLAoJCQltc2c6ICfor7flnKggJyArIG5ldyBEYXRlKEdNX2dldFZhbHVlKCdoYWlqaWFvX3VwZGF0ZWRfbmV4dF9kYXRlJywgMCkpLnRvTG9jYWxlU3RyaW5nKCkgKyAnIOWQjuWGjeajgOafpeabtOaWsCcKCQl9CgkJR01fc2V0VmFsdWUoJ2hhaWppYW9fdXBkYXRlZF9uZXh0X2RhdGUnLCBEYXRlLm5vdygpICsgNjAwMDAwKQoJCWNvbnN0IHNjcmlwdCA9IEdNX2luZm8KCQlpZiAoIXNjcmlwdCkgcmV0dXJuIHsKCQkJY29kZTogLTMwMCwKCQkJbXNnOiAn6I635Y+W54mI5pys5Y+35aSx6LSlJwoJCX0KCQlsZXQgcmVzdWx0ID0gewoJCQljb2RlOiAxLAoJCQltc2c6ICdvaycKCQl9CgkJdHJ5IHsKCQkJY29uc3Qgd3RfaGFpamlhb19maXJzdF91c2UgPSBHTV9nZXRWYWx1ZSgnd3RfaGFpamlhb19maXJzdF91c2UnLCAnJykKCQkJJC5hamF4U2V0dXAoewoJCQkJYXN5bmM6IGZhbHNlCgkJCX0pOwoJCQkkLmdldCgnaHR0cHM6Ly9mYy1tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIubmV4dC5ic3BhcHAuY29tL2NvbW1vbi91cGRhdGVDaGVjaycsIHsKCQkJCW5hbWU6ICdoYWlqaWFvJywKCQkJCXZlcnNpb246IHNjcmlwdC5zY3JpcHQudmVyc2lvbiwKCQkJCXVzZV9kYXRlOiAod3RfaGFpamlhb19maXJzdF91c2UgPyB3dF9oYWlqaWFvX2ZpcnN0X3VzZSA6IERhdGUubm93KCkgKyAoTWF0aC5yb3VuZChNYXRoCgkJCQkJLnJhbmRvbSgpICogODk5OTk5ICsgMTAwMDAwKSArICcnKSkKCQkJfSwgZnVuY3Rpb24ocmVzKSB7CgkJCQlHTV9zZXRWYWx1ZSgnaGFpamlhb19hdXRvX3VwZGF0ZWRfZGF0ZScsIERhdGUubm93KCkgKyAxODAwMDAwMCkKCQkJCWlmIChyZXMuY29kZSAhPSAwKSByZXN1bHQgPSB7CgkJCQkJY29kZTogLTQwMCwKCQkJCQltc2c6ICfojrflj5bniYjmnKzkv6Hmga/lpLHotKUnCgkJCQl9CgkJCQlpZiAoKHJlcy51cGRhdGVfbXNnICYmIHJlcy5pc191cGRhdGUpIHx8IHJlcy5tc2cgfHwgcmVzLm5vdGlmeV9hbGwpIHsKCQkJCQlsZXQgbXNnID0gJycKCQkJCQlpZiAocmVzLm5vdGlmeV9hbGwpIG1zZyArPSAnPHA+LSAgJyArIHJlcy5ub3RpZnlfYWxsICsgJzxwLz4nCgkJCQkJaWYgKHJlcy5tc2cpIG1zZyArPSAnPHA+LSAgJyArIHJlcy5tc2cgKyAnPHAvPicKCQkJCQlpZiAocmVzLmlzX3VwZGF0ZSAmJiByZXMudXBkYXRlX21zZykgbXNnICs9IHJlcy51cGRhdGVfbXNnCgkJCQkJY29uc3QgaGlzdG9yeU5vdGlmeSA9IEdNX2dldFZhbHVlKCdoYWlqaWFvX25vdGlmeScpCgkJCQkJaWYoY2hlY2sgfHwgIWhpc3RvcnlOb3RpZnkgfHwgaGlzdG9yeU5vdGlmeS5tc2cucmVwbGFjZSgvaWRcPVxkKy8sJycpICE9IG1zZy5yZXBsYWNlKC9pZFw9XGQrLywnJykpewoJCQkJCQl1dGlsLnNob3dOb3RpZnkoewoJCQkJCQkJdGl0bGU6IG1zZywKCQkJCQkJCXN1Y2Nlc3M6ICgpID0+IHsKCQkJCQkJCQlpZiAocmVzKSB7CgkJCQkJCQkJCXN1cGVyVmlwLl9DT05GSUdfLnNob3dOb3RpZnkgPSBmYWxzZQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfSkKCQkJCQkJdXRpbC5zaG93QW5kSGlkVGlwcygnd3RfbXlfbm90aWZ5X2hhaWppYW8nKQoJCQkJCX0KCQkJCQlpZiAobXNnICYmIG1zZy5yZXBsYWNlKC9ccyovZywgIiIpLmxlbmd0aCA+IDApIEdNX3NldFZhbHVlKCdoYWlqaWFvX25vdGlmeScsIHsKCQkJCQkJZGF0ZTogbmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLCAwKSwKCQkJCQkJbXNnCgkJCQkJfSkKCQkJCX0KCQkJCWlmICghcmVzLmlzX3VwZGF0ZSkgcmVzdWx0ID0gewoJCQkJCWNvZGU6IC01MDAsCgkJCQkJbXNnOiAn5b2T5YmN54mI5pysICcgKyBzY3JpcHQuc2NyaXB0LnZlcnNpb24gKyAnIOW3sue7j+aYr+acgOaWsOeJiOacrCcKCQkJCX0KCQkJfSkKCQkJJC5hamF4U2V0dXAoewoJCQkJYXN5bmM6IHRydWUKCQkJfSk7CgkJfSBjYXRjaCAoZSkge30KCQlyZXR1cm4gcmVzdWx0Cgl9LAoKCXNob3dOb3RpZnk6IChpdGVtID0ge30pID0+IHsKCQkkKCIjd3Qtbm90aWZ5LWJveCIpLnJlbW92ZUNsYXNzKCdoaWQtbm90aWZ5LWJveCcpCgkJJCgiI3d0LW5vdGlmeS1ib3giKS5hZGRDbGFzcygnc2hvdy1ub3RpZnktYm94JykKCQlsZXQgdmVyc2lvbiA9IEdNX2luZm8KCQl2ZXJzaW9uID0gdmVyc2lvbiA/IHZlcnNpb24uc2NyaXB0LnZlcnNpb24gOiAnJwoJCWNvbnN0IHYgPSAv5b2T5YmN6ISa5pys54mI5pysIChcZFwuXGRcLlxkXC57MCwxfVxkezAsMn0pLy5leGVjKGl0ZW0udGl0bGUpCgkJaWYgKHYpIGl0ZW0udGl0bGUgPSBpdGVtLnRpdGxlLnJlcGxhY2VBbGwodlsxXSwgdmVyc2lvbikKCQlpZiAoaXRlbS50aXRsZSkgJCgnI3d0LW5vdGlmeS1ib3ggLmNvbnRlbnQnKS5odG1sKGl0ZW0udGl0bGUgKyAodmVyc2lvbiA/CgkJCSc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDtjb2xvcjogI2NjYztmb250LXNpemU6IDEwcHg7bWFyZ2luLXRvcDogMTBweDsiPnYgJyArCgkJCXZlcnNpb24gKyAnPC9kaXY+JyA6ICcnKSkKCQlzdXBlclZpcC5fQ09ORklHXy5zaG93Tm90aWZ5ID0gdHJ1ZQoJCSQoJyN3dC1ub3RpZnktYm94IGEnKS5vbignY2xpY2snLCAoZSkgPT4gewoJCQllLnN0b3BQcm9wYWdhdGlvbigpCgkJfSkKCQkkKCcjd3Qtbm90aWZ5LWJveCcpLm9uKCdjbGljaycsICgpID0+IHsKCQkJJCgiI3d0LW5vdGlmeS1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1ub3RpZnktYm94JykKCQkJJCgiI3d0LW5vdGlmeS1ib3giKS5hZGRDbGFzcygnaGlkLW5vdGlmeS1ib3gnKQoJCQlzdXBlclZpcC5fQ09ORklHXy5zaG93Tm90aWZ5ID0gZmFsc2UKCQkJaWYgKGl0ZW0uc3VjY2VzcykgaXRlbS5zdWNjZXNzKHRydWUpCgkJfSkKCX0KfQoKY29uc3Qgc3VwZXJWaXAgPSAoZnVuY3Rpb24oKSB7Cgljb25zdCBfQ09ORklHXyA9IHsKCQlpc01vYmlsZTogbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgKCQkJLyhBbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pKS9pKSwKCQl2aXBCb3hJZDogJ3d0LXZpcC1qeC1ib3gnICsgTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApLAoJCWVuZE5hbWU6ICdhbk09JywKCQlpbml0RmFpbE1zZzogJ+aKseatie+8jOWIneWni+WMluWksei0pe+8jOivt+WwneivleWIt+aWsOmhtemdouaIluajgOafpeeJiOacrOaYr+WQpuaYr+acgOaWsOeJiOacrO+8jOeCueWHu+aOp+WItuadoeWWh+WPreafpeeci+W9k+WJjeeJiOacrOWPtycsCgkJaG9tZVBhZ2U6IGRlY29kZVVSSUNvbXBvbmVudChhdG9iKCdhSFIwY0NVelFTVXlSaVV5Um1wemVHd3VjSEp2JykpLAoJCXNjcmlwdHM6IFsKCQkJLy8gCXsKCQkJLy8gCWljb246ICdodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nby93YXRlcm1hcmtfbG9nby5wbmcnLAoJCQkvLyAJZGVzYzogJ+WQhOWkp+efreinhumikeW5s+WPsOinhumikS/lm77pm4blhY3otLnljrvmsLTljbDkuIvovb3vvIznpoHmraLkuIvovb3nmoTkuZ/og73kuIvovb0nCgkJCS8vIH0sCgkJCXsKCQkJCWljb246ICdodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nby92aWRlb19sb2dvLnBuZycsCgkJCQlkZXNjOiAn5ZCE5aSn6KeG6aKR5bmz5Y+wVklQ6KeG6aKR5YWN6LS555yLJywKCQkJCXVybDogJ2h0dHBzOi8vcmVzZXQtemZmLm9zcy1jbi1jaGVuZ2R1LmFsaXl1bmNzLmNvbS9qcy9yZWxlYXNlL3ZpZGVvLnVzZXInCgkJCX0sCgkJCXsKCQkJCWljb246ICdodHRwczovL2JlLnV4ZGtlbC5jb20vc3RhdGljL2ltYWdlcy9pbmRleC9kbWRsb2cyLnBuZycsCgkJCQlkZXNjOiAn5YWN6LS555yL5LuY6LS555+t6KeG6aKR77yM572R56uZ5YaF5a655Y+v6IO95byV6LW35LiN6YCC77yM6K+36LCo5oWO5L2/55So44CCJywKCQkJCXVybDogJ2h0dHBzOi8vcmVzZXQtemZmLm9zcy1jbi1jaGVuZ2R1LmFsaXl1bmNzLmNvbS9qcy9yZWxlYXNlLzkxdmlkZW8udXNlcicKCQkJfSwKCQkJewoJCQkJaWNvbjogJ2h0dHBzOi8vbXAtYWYzMDcyNjgtMWI4YS00ODJhLWI3NWEtYjZlOThiMTI1NzQyLmNkbi5ic3BhcHAuY29tL3N5c3RlbS9sb2dvL2hhaWppYW8ucG5nJywKCQkJCWRlc2M6ICflhY3otLnnnIvku5jotLnop4bpopHlj4rlm77pm4bvvIznvZHnq5nlhoXlrrnlj6/og73lvJXotbfkuI3pgILvvIzor7fosKjmhY7kvb/nlKjjgIInLAoJCQkJdXJsOiAnaHR0cHM6Ly9yZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tL2pzL3JlbGVhc2UvaGFpamlhby51c2VyJwoJCQl9LAoJCQl7CgkJCQlpY29uOiAnaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL2xvZ29fdHJhbnNwYXJlbnQucG5nJywKCQkJCWRlc2M6ICfliY3lvoDlj4rml7booYzkuZDojrflj5bmnIDmlrDohJrmnKzpk77mjqUnLAoJCQkJdXJsOiBkZWNvZGVVUklDb21wb25lbnQoYXRvYignYUhSMGNDVXpRU1V5UmlVeVJtcHplR3d1Y0hKdicpKQoJCQl9CgkJXSwKCQlkb3duVXRpbHM6WwoJCQl7dGl0bGU6ICfkuIvovb3mjqXlj6Plt6XlhbcgMScsdXJsOidodHRwOi8vdG9vbHMuYnVnc2NhbmVyLmNvbS9tM3U4Lmh0bWwnLGlzQXBwZW5kOiBmYWxzZX0sCgkJCXt0aXRsZTogJ+S4i+i9veaOpeWPo+W3peWFtyAyJyx1cmw6J2h0dHBzOi8vdG9vbHMudGhhdHdpbmQuY29tL3Rvb2wvbTN1OGRvd25sb2FkZXIjbTN1OD0nLGlzQXBwZW5kOiB0cnVlfSwKCQkJe3RpdGxlOiAn5LiL6L295o6l5Y+j5bel5YW3IDMnLHVybDonaHR0cHM6Ly9ibG9nLmx1Y2tseS1tancuY24vdG9vbC1zaG93L20zdTgtZG93bmxvYWRlci9pbmRleC5odG1sP3NvdXJjZT0nLGlzQXBwZW5kOiB0cnVlfQoJCV0KCX0KCWNsYXNzIEJhc2VDb25zdW1lciB7CgkJY29uc3RydWN0b3IoYm9keSkgewoJCQl0aGlzLnBhcnNlID0gKCkgPT4gewoJCQkJc2V0VGltZW91dCgoKSA9PiB7IHV0aWwuY2hlY2tVcGRhdGUoKX0sIDE1MDApCgkJCQl0aGlzLmludGVyY2VwdEh0dHAoKQoJCQkJdXRpbC5maW5kVGFyZ2V0RWxlbWVudCgnYm9keScpLnRoZW4oY29udGFpbmVyID0+ewoJCQkJCWNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1k9J2F1dG8gIWltcG9ydGFudCc7CgkJCQkJdGhpcy5nZW5lcmF0ZUVsZW1lbnQoY29udGFpbmVyKS50aGVuKAoJCQkJCQljb250YWluZXIgPT4gdGhpcy5iaW5kRXZlbnQoY29udGFpbmVyKSkKCQkJCX0pCgkJCX0KCQl9CgoJCWludGVyY2VwdEh0dHAoKSB7CgkJCWNvbnN0IG9yaWdpbk9wZW4gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbjsKCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihfLCB1cmwpIHsKCQkJCXRoaXMub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7CgkJCQkJd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpCgkJCQl9DQoJCQkJaWYoL1wvYXBpXC9jb21tZW50XC9yZXBseSQvLnRlc3QodXJsKSl7DQoJCQkJCXRoaXMuX3Njb3BlX3VybCA9IHVybA0KCQkJCX0NCgkJCQlpZihfQ09ORklHXy51c2VyKXsNCgkJCQkJaWYgKC9cL2FwaVwvYmFubmVyXC9iYW5uZXJfbGlzdC8udGVzdCh1cmwpKSB7DQoJCQkJCQl0aGlzLmFib3J0KCkNCgkJCQkJfQ0KCQkJCQlpZiAoL1wvYXBpXC90b3BpY1wvaG90XC90b3BpY3NcPy8udGVzdCh1cmwpKSB7DQoJCQkJCQljb25zdCB4aHIgPSB0aGlzOzsNCgkJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLA0KCQkJCQkJCSJyZXNwb25zZSINCgkJCQkJCSkuZ2V0Ow0KCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsNCgkJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJCXRyeSB7DQoJCQkJCQkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcubWhlYWRlci1zZWFjaCxpbnB1dFtwbGFjZWhvbGRlcj0i5pCc6LS077yM5pCc5Lq677yM5pCc5qCH562+Il0nKS50aGVuKHJlcyA9PnsNCgkJCQkJCQkJCQlyZXMub25jbGljayA9IGZ1bmN0aW9uKCl7DQoJCQkJCQkJCQkJCWlmKGxvY2F0aW9uLmhvc3QgPT0gJ2hqZWRkLnRvcCcpIHV0aWwuc2hvd1RpcHMoe3RpdGxlOiAn5b2T5YmN5rW36KeS5Zyw5Z2A5pCc57Si5Yqf6IO95peg5rOV5q2j5bi45L2/55So77yM6K+35pu05o2i5YW25LuW5rW36KeS5Zyw5Z2A5YaN6K+VJ30pDQoJCQkJCQkJCQkJCQllbHNlIGlmKF9DT05GSUdfLmlzTW9iaWxlKSBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24ub3JpZ2luICsgJy9zZWFyY2g/c2VhcmNoPSc7DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfSkNCgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7DQoJCQkJCQkJCQlyZXMuZGF0YSA9IHV0aWwuZm9ybWF0VGl0bGUocmVzLmRhdGEpOw0KCQkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcywgYHV0Zi04YCk7DQoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0sDQoJCQkJCQl9KTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYgKC9cL2FwaVwvdG9waWNcL3NlYXJjaC8udGVzdCh1cmwpKSB7DQoJCQkJCQk7DQoJCQkJCQljb25zdCB4aHIgPSB0aGlzOw0KCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkJInJlc3BvbnNlIg0KCQkJCQkJKS5nZXQ7DQoJCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJCWdldDogKCkgPT4gew0KCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsNCgkJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7DQoJCQkJCQkJCQlyZXMuZGF0YSA9IHV0aWwuZm9ybWF0VGl0bGUocmVzLmRhdGEpOw0KCQkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcywgYHV0Zi04YCk7DQoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTs7DQoJCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJCXJldHVybiByZXN1bHQ7DQoJCQkJCQkJCX0NCgkJCQkJCQl9LA0KCQkJCQkJfSk7DQoJCQkJCX0NCgkJCQkJDQoJCQkJCWlmICgvXC9hcGlcL3RvcGljXC9cZCsvLnRlc3QodXJsKSkgew0KCQkJCQkJY29uc3QgeGhyID0gdGhpczsNCgkJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLA0KCQkJCQkJCSJyZXNwb25zZSINCgkJCQkJCSkuZ2V0Ow0KCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsNCgkJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJCXRyeSB7DQoJCQkJCQkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcubWhlYWRlci1zZWFjaCxpbnB1dFtwbGFjZWhvbGRlcj0i5pCc6LS077yM5pCc5Lq677yM5pCc5qCH562+Il0nKS50aGVuKHJlcyA9PnsNCgkJCQkJCQkJCQlyZXMub25jbGljayA9IGZ1bmN0aW9uKCl7DQoJCQkJCQkJCQkJCWlmKGxvY2F0aW9uLmhvc3QgPT0gJ2hqZWRkLnRvcCcpIHV0aWwuc2hvd1RpcHMoe3RpdGxlOiAn5b2T5YmN5rW36KeS5Zyw5Z2A5pCc57Si5Yqf6IO95peg5rOV5q2j5bi45L2/55So77yM6K+35pu05o2i5YW25LuW5rW36KeS5Zyw5Z2A5YaN6K+VJ30pDQoJCQkJCQkJCQkJCQllbHNlIGlmKF9DT05GSUdfLmlzTW9iaWxlKSBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24ub3JpZ2luICsgJy9zZWFyY2g/c2VhcmNoPSc7DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfSkNCgkJCQkJCQkJCXV0aWwuZmluZFRhcmdldEVsZW1lbnQoJy51c2VyLWJveCcpLnRoZW4ocmVzPT57DQoJCQkJCQkJCQkJcmVzLm9uY2xpY2sgPSBmdW5jdGlvbigpe2xvY2F0aW9uLmhyZWY9bG9jYXRpb24ub3JpZ2luKycvdXNlci91c2VyaW5mbz91aWQ9JytzdXBlclZpcC5fQ09ORklHXy51c2VySWR9DQoJCQkJCQkJCQl9KQ0KCQkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsNCgkJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5tb2RpZnlEYXRhKHJlcy5kYXRhKQ0KCQkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcywgYHV0Zi04YCk7DQoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTs7DQoJCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJCXJldHVybiByZXN1bHQ7DQoJCQkJCQkJCX0NCgkJCQkJCQl9LA0KCQkJCQkJfSk7DQoJCQkJCX0NCgkJCQkJDQoJCQkJCWlmICgvXC9hcGlcL2F0dGFjaG1lbnQvLnRlc3QodXJsKSkgew0KCQkJCQkJY29uc3QgeGhyID0gdGhpczsNCgkJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLA0KCQkJCQkJCSJyZXNwb25zZSINCgkJCQkJCSkuZ2V0Ow0KCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsNCgkJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJCXRyeSB7DQoJCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOw0KCQkJCQkJCQkJaWYocmVzLmRhdGEpew0KCQkJCQkJCQkJCWNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRlY29kZShyZXMuZGF0YSwgc3VwZXJWaXApKQ0KCQkJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5mb3JtYXRWaWRlbyhyZXMuZGF0YSk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsNCgkJCQkJCQkJfSBjYXRjaCAoZSkgew0KCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOzsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0sDQoJCQkJCQl9KTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYgKC9cL2FwaVwvdG9waWNcL2F0dFwvXGQrLy50ZXN0KHVybCkpIHsNCgkJCQkJCWNvbnN0IHhociA9IHRoaXM7DQoJCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKA0KCQkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwNCgkJCQkJCQkicmVzcG9uc2UiDQoJCQkJCQkpLmdldDsNCgkJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7DQoJCQkJCQkJZ2V0OiAoKSA9PiB7DQoJCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOw0KCQkJCQkJCQl0cnkgew0KCQkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsNCgkJCQkJCQkJCXRyeSB7DQoJCQkJCQkJCQkJY29uc3Qgb2JqID0gSlNPTi5wYXJzZShkZWNvZGUocmVzLmRhdGEsIHN1cGVyVmlwKSkNCgkJCQkJCQkJCQlpZiAob2JqICYmIG9iai5sZW5ndGggPiAwICYmICd1cmwnIGluIG9ialswXSkgew0KCQkJCQkJCQkJCQlsZXQgdXJsID0gb2JqWzBdLnVybC5yZXBsYWNlKCcvYXBpL2FkZHJlc3MnLA0KCQkJCQkJCQkJCQkJJ2h0dHBzOi8vdHMyLmhqZjVlLmNvbS9oanN0b3JlJykNCgkJCQkJCQkJCQkJaWYodXJsKQlfQ09ORklHXy52aWRlb1VybCA9IHVybA0KCQkJCQkJCQkJCQkJZWxzZSB1cmwgPSBfQ09ORklHXy52aWRlb1VybA0KCQkJCQkJCQkJCQlmb3IobGV0IGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKXsNCgkJCQkJCQkJCQkJCW9ialtpXS51cmwgPSB1cmwNCgkJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQlyZXMuZGF0YSA9IHV0aWwuamVuY29kZShvYmopDQoJCQkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCQkJY29uc29sZS5sb2coZSkNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOw0KCQkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7DQoJCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJCXJldHVybiByZXN1bHQ7DQoJCQkJCQkJCX0NCgkJCQkJCQl9LA0KCQkJCQkJfSk7DQoJCQkJCX0NCgkJCQkJDQoJCQkJCWlmICgvXC9hcGlcL3RvcGljXC8obm9kZVwvKHRvcGljc3xuZXdzKXxpZG9sX2xpc3QpLy50ZXN0KHVybCkpIHsNCgkJCQkJCWNvbnN0IHhociA9IHRoaXM7DQoJCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKA0KCQkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwNCgkJCQkJCQkicmVzcG9uc2UiDQoJCQkJCQkpLmdldDsNCgkJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7DQoJCQkJCQkJZ2V0OiAoKSA9PiB7DQoJCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOw0KCQkJCQkJCQl0cnkgew0KCQkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsNCgkJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5mb3JtYXRUaXRsZShyZXMuZGF0YSkNCgkJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOw0KCQkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7DQoJCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJCXJldHVybiByZXN1bHQ7DQoJCQkJCQkJCX0NCgkJCQkJCQl9LA0KCQkJCQkJfSk7DQoJCQkJCX0NCgkJCQkJDQoJCQkJCWlmICgvXC9hcGlcL3VzZXJcLyhpbmZvXC8oXGQrKSl8Y3VycmVudC8uZXhlYyh1cmwpKSB7DQoJCQkJCQljb25zdCB4aHIgPSB0aGlzOw0KCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkJInJlc3BvbnNlIg0KCQkJCQkJKS5nZXQ7DQoJCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJCWdldDogKCkgPT4gew0KCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsNCgkJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7DQoJCQkJCQkJCQljb25zdCByZWdSZXMgPSAvXC9hcGlcL3VzZXJcLyhpbmZvXC8oXGQrKSl8Y3VycmVudC8uZXhlYygNCgkJCQkJCQkJCQl1cmwpOw0KCQkJCQkJCQkJY29uc3QgdWlkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndWlkJyk7DQoJCQkJCQkJCQlsZXQgZGF0YQ0KCQkJCQkJCQkJaWYgKHJlZ1Jlcy5sZW5ndGggPiAyICYmIChyZWdSZXNbMl0gJiYgcmVnUmVzWzJdICE9IHVpZCkpIHsNCgkJCQkJCQkJCQlsZXQgZnVybCA9IHhoci5yZXNwb25zZVVSTDsNCgkJCQkJCQkJCQlsZXQgciA9IGZ1cmwubWF0Y2goDQoJCQkJCQkJCQkJCS9cVyooXHcrKVwuKHRvcHxjb218cHJvKVwvYXBpXC91c2VyXC9pbmZvXC8oXGQrKS8pOw0KCQkJCQkJCQkJCWRhdGEgPSB1dGlsLm1vZGlmeVVzZXIocmVzLCByWzJdKTsNCgkJCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCQkJZGF0YSA9IHJlczsNCgkJCQkJCQkJCQlkYXRhLmRhdGEgPSB1dGlsLmxhc3RpbmdUb2tlbihyZXMuZGF0YSk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7DQoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0sDQoJCQkJCQl9KTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYgKC9cL2FwaVwvdXNlclwvbmV3cy8udGVzdCh1cmwpKSB7DQoJCQkJCQljb25zdCB4aHIgPSB0aGlzOw0KCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkJInJlc3BvbnNlIg0KCQkJCQkJKS5nZXQ7DQoJCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJCWdldDogKCkgPT4gew0KCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsNCgkJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeSh7DQoJCQkJCQkJCQkJImlzRW5jcnlwdGVkIjogdHJ1ZSwNCgkJCQkJCQkJCQkiZXJyb3JDb2RlIjogMCwNCgkJCQkJCQkJCQkibWVzc2FnZSI6ICIiLA0KCQkJCQkJCQkJCSJzdWNjZXNzIjogdHJ1ZSwNCgkJCQkJCQkJCQkiZGF0YSI6ICJXbGhzUzJReGJGaGFSM2hLWVc1Qk0xTlhOVU5oUm05NVZsZHNVR0ZyVm5wVFZ6RTBZMGRLV0dKRVFrcGhiVGsxVkZWT00yRlhVa2hQVkVKYVZqTmtjRlF5Y0VOUFZYaEVVMjVzWVZkRk5IaFphMmhUWld0c2NXTkVaRXBoTTJoM1dYcE9VbUZWT1hST1ZFWnBVak5uTlZwc1JUbFFVVDA5Ig0KCQkJCQkJCQkJfSk7DQoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0sDQoJCQkJCQl9KTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYoL2FwaVwvdmlkZW9cL3VzZXJfbGlzdFw/Ly50ZXN0KHVybCkpew0KCQkJCQkJO2NvbnN0IHhociA9IHRoaXM7DQoJCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKA0KCQkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwNCgkJCQkJCQkicmVzcG9uc2UiDQoJCQkJCQkpLmdldDsNCgkJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7DQoJCQkJCQkJZ2V0OiAoKSA9PiB7CQkNCgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJCXRyeSB7DQoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoew0KCQkJCQkJCQkJCSJpc0VuY3J5cHRlZCI6IHRydWUsDQoJCQkJCQkJCQkJImVycm9yQ29kZSI6IDAsDQoJCQkJCQkJCQkJIm1lc3NhZ2UiOiAiIiwNCgkJCQkJCQkJCQkic3VjY2VzcyI6IHRydWUsDQoJCQkJCQkJCQkJImRhdGEiOiAiV1cwMVYyTXlTa0pRVkRBOSINCgkJCQkJCQkJCX0pOw0KCQkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7DQoJCQkJCQkJCQk7Y29uc29sZS5sb2coZSk7DQoJCQkJCQkJCQk7cmV0dXJuIHJlc3VsdDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0sDQoJCQkJCQl9KTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYgKC9hcGlcL2xvZ2luXC9zaWduaW4vLnRlc3QodXJsKSkgew0KCQkJCQkJY29uc3QgeGhyID0gdGhpczsNCgkJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLA0KCQkJCQkJCSJyZXNwb25zZSINCgkJCQkJCSkuZ2V0Ow0KCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsNCgkJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJCXRyeSB7DQoJCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOw0KCQkJCQkJCQkJaWYocmVzLnN1Y2Nlc3Mpew0KCQkJCQkJCQkJCWNvbnN0IHVzZXJuYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbcGxhY2Vob2xkZXI9Iuivt+i+k+WFpeeUqOaIt+WQjS/pgq7nrrEiXSxpbnB1dFtwbGFjZWhvbGRlcj0i6K+36L6T5YWl55So5oi35ZCNIl0nKS52YWx1ZQ0KCQkJCQkJCQkJCWNvbnN0IHB3ZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9InBhc3N3b3JkIl0nKS52YWx1ZQ0KCQkJCQkJCQkJCWlmKHVzZXJuYW1lICYmIHB3ZCl7DQoJCQkJCQkJCQkJCUdNX3NldFZhbHVlKCdoYWlqaWFvX3VzZXJwd2QnLHt1c2VybmFtZSxwd2R9KQ0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcudmFuLWRpYWxvZ19fY2FuY2VsLC5lbC1idXR0b24tLXNtYWxsJyw3KS50aGVuKHJlcyA9PnsNCgkJCQkJCQkJCQkJcmVzLmNsaWNrKCkNCgkJCQkJCQkJCQl9KQ0KCQkJCQkJCQkJfWVsc2V7DQoJCQkJCQkJCQkJdXRpbC5zaG93VGlwcyh7dGl0bGU6IHJlcy5tZXNzYWdlfSkNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5sYXN0aW5nVG9rZW4ocmVzLmRhdGEpOw0KCQkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcywgYHV0Zi04YCk7DQoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0sDQoJCQkJCQl9KTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYgKC9hcGlcL3ZpZGVvXC9jaGVja1ZpZGVvQ2FuUGxheS8udGVzdCh1cmwpKSB7DQoJCQkJCQljb25zdCB4aHIgPSB0aGlzOw0KCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkJInJlc3BvbnNlIg0KCQkJCQkJKS5nZXQ7DQoJCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJCWdldDogKCkgPT4gew0KCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsNCgkJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7DQoJCQkJCQkJCQlyZXMuZGF0YSA9IHV0aWwuZm9ybWF0VmlkZW8ocmVzLmRhdGEpOw0KCQkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcywgYHV0Zi04YCk7DQoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsNCgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0sDQoJCQkJCQl9KQ0KCQkJCQl9DQoJCQkJCQ0KCQkJCQlpZigvYXBpXC9sb2dpblwvc2lnbnVwLy50ZXN0KHVybCkpew0KCQkJCQkJY29uc3QgeGhyID0gdGhpczsNCgkJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLA0KCQkJCQkJCSJyZXNwb25zZSINCgkJCQkJCSkuZ2V0Ow0KCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsNCgkJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJCXRyeSB7DQoJCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOw0KCQkJCQkJCQkJaWYoIXJlcy5zdWNjZXNzKXsNCgkJCQkJCQkJCQl1dGlsLnNob3dUaXBzKHsgdGl0bGU6IHJlcy5tZXNzYWdlfSkNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCXJldHVybiByZXN1bHQNCgkJCQkJCQkJfSBjYXRjaCAoZSkgew0KCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOw0KCQkJCQkJCQkJY29uc29sZS5sb2coZSk7DQoJCQkJCQkJCQlyZXR1cm4gcmVzdWx0Ow0KCQkJCQkJCQl9DQoJCQkJCQkJfSwNCgkJCQkJCX0pDQoJCQkJCX0NCgkJCQl9DQoJCQkJb3JpZ2luT3Blbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoJCQl9Ow0KCQkJDQoJCQljb25zdCBvbGRTZW5kID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLnNlbmQ7DQoJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7DQoJCQkJaWYodGhpcy5fc2NvcGVfdXJsICYmIGFyZ3MubGVuZ3RoID4gMCl7DQoJCQkJCXRyeXsNCgkJCQkJCWFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoYXJnc1swXS5tYXRjaCgvImNvbnRlbnQiOiI8cD4oLispPFwvcD4iLC8pWzFdLHV0aWwuZGVjb2F0KCdKVVUySlRnMEpUbEdKVVU0SlVJd0pVRXlKVVUxSlRoRUpUbEJKVVUwSlVJNEpVSkNKVVUxSlRnNEpUZzJKVVUwSlVKQkpVRkNKVVZHSlVKREpUaERKVVUxSlVFMUpVSXpKVVUwSlVJNEpVSkNKVVUzSlRsREpUbEdKVVUySlRrNEpVRkdKVVUySlRsRkpUZ3hKVVUxSlRrekpUZ3hKVVUxSlVJd0pVRTBKVVUzSlRnNUpVRTVKVVZHSlVKREpUaERKVVUySlRsREpUbENKVVUxSlRoRUpUbEJKVVUwSlVJNEpVSkNKVVUySlRoREpUZ3hKVVUzSlVKQ0pVRkVKVVUySlRsQ0pVSTBKVVUySlRrMkpVSXcnKSkNCgkJCQkJfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfQ0KCQkJCX0NCgkJCQlyZXR1cm4gb2xkU2VuZC5jYWxsKHRoaXMsIC4uLmFyZ3MpDQoJCQl9OwoJCX0KCgkJZ2VuZXJhdGVFbGVtZW50KGNvbnRhaW5lcikgewoJCQlHTV9hZGRTdHlsZShgCgkJCQlAZm9udC1mYWNlIHsKCQkJCSAgZm9udC1mYW1pbHk6ICdpY29uZm9udCc7ICAvKiBQcm9qZWN0IGlkIDM5MTM1NjEgKi8KCQkJCSAgc3JjOiB1cmwoJy8vYXQuYWxpY2RuLmNvbS90L2MvZm9udF8zOTEzNTYxX2NwZTEzZndjYTgud29mZjI/dD0xNjk2MjEwNDkzNjcyJykgZm9ybWF0KCd3b2ZmMicpLAoJCQkJICAgICAgIHVybCgnLy9hdC5hbGljZG4uY29tL3QvYy9mb250XzM5MTM1NjFfY3BlMTNmd2NhOC53b2ZmP3Q9MTY5NjIxMDQ5MzY3MicpIGZvcm1hdCgnd29mZicpLAoJCQkJICAgICAgIHVybCgnLy9hdC5hbGljZG4uY29tL3QvYy9mb250XzM5MTM1NjFfY3BlMTNmd2NhOC50dGY/dD0xNjk2MjEwNDkzNjcyJykgZm9ybWF0KCd0cnVldHlwZScpOwoJCQkJfQoJCQkJLmljb25mb250IHsKCQkJCSAgICBmb250LWZhbWlseTogImljb25mb250IiAhaW1wb3J0YW50OwoJCQkJICAgIGZvbnQtc2l6ZTogMTZweDsKCQkJCSAgICBmb250LXN0eWxlOiBub3JtYWw7CgkJICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMCAhaW1wb3J0YW50OwoJCQkJICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwoJCQkJICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CgkJCQl9CgkJCQlAa2V5ZnJhbWVzIHNob3dTZXRCb3ggewoJCQkJCTAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTsKCQkJCQl9CgkJCQkJODAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxLjEpOwoJCQkJCX0KCQkJCQkxMDAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxKTsKCQkJCQl9CgkJCQl9CgkJCQlAa2V5ZnJhbWVzIGhpZFNldEJveCB7CgkJCQkJMCUgewoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEpOwoJCQkJCX0KCQkJCQk4MCUgewoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEuMSk7CgkJCQkJfQoJCQkJCTEwMCUgewoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApOwoJCQkJCX0KCQkJCX0KCQkJCUBrZXlmcmFtZXMgY29sb3JBbmltYSB7CgkJCQkJMCV7CgkJCQkJCWJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7CgkJCQkJCWNvbG9yOiAjNWQ1ZDVkOwoJCQkJCQl0cmFuc2Zvcm06IHNjYWxlKDEpOwoJCQkJCX0KCQkJCQk1MCV7CgkJCQkJCXRyYW5zZm9ybTogc2NhbGUoMS4xKTsKCQkJCQl9CgkJCQkJMTAwJXsKCQkJCQkJYmFja2dyb3VuZC1jb2xvcjogI2ZmNjAyMjs7CgkJCQkJCWNvbG9yOiB3aGl0ZTsKCQkJCQkJdHJhbnNmb3JtOiBzY2FsZSgxKTsKCQkJCQl9CgkJCQl9CgkJCQlAa2V5ZnJhbWVzIHNob3dOb3RpZnlCb3ggewoJCQkJCTAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtMTAwJSkgc2NhbGUoMCk7CgkJCQkJfQoJCQkJCTgwJSB7CgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsMzVweCkgc2NhbGUoMS4xKTsKCQkJCQl9CgkJCQkJMTAwJSB7CgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsMzVweCkgc2NhbGUoMSk7CgkJCQkJfQoJCQkJfQoJCQkJQGtleWZyYW1lcyBoaWROb3RpZnlCb3ggewoJCQkJCTAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwzNXB4KSBzY2FsZSgxLjEpOwoJCQkJCX0KCQkJCQk4MCUgewoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDM1cHgpIHNjYWxlKDEpOwoJCQkJCX0KCQkJCQkxMDAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtMTAwJSkgc2NhbGUoMCk7CgkJCQkJfQoJCQkJfQoJCQkJQGtleWZyYW1lcyBzY2FsZSB7CgkJCQkJMCV7CgkJCQkJCXRyYW5zZm9ybTogc2NhbGUoMSk7CgkJCQkJfQoJCQkJCTUwJXsKCQkJCQkJdHJhbnNmb3JtOiBzY2FsZSgxLjEpOwoJCQkJCX0KCQkJCQkxMDAlewoJCQkJCQl0cmFuc2Zvcm06IHNjYWxlKDEpOwoJCQkJCX0KCQkJCX0KCQkJCUBrZXlmcmFtZXMgY2lyY2xldG9rTGVmdCB7CgkJCQkgICAgMCUsMTAwJSB7CgkJCQkgICAgICAgIGxlZnQ6IDBweDsKCQkJCSAgICAgICAgd2lkdGg6IDEycHg7CgkJCQkgICAgICAgIGhlaWdodDogMTJweDsKCQkJCSAgICAgICAgei1pbmRleDogMDsKCQkJCSAgICB9CgkJCQkgICAgMjUlIHsKCQkJCSAgICAgICAgaGVpZ2h0OiAxNXB4OwoJCQkJICAgICAgICB3aWR0aDogMTVweDsKCQkJCSAgICAgICAgei1pbmRleDogMTsKCQkJCSAgICAgICAgbGVmdDogOHB4OwoJCQkJICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpCgkJCQkgICAgfQoJCQkJICAgIDUwJSB7CgkJCQkgICAgICAgIHdpZHRoOiAxMnB4OwoJCQkJICAgICAgICBoZWlnaHQ6IDEycHg7CgkJCQkgICAgICAgIGxlZnQ6IDIycHg7CgkJCQkgICAgfQoJCQkJICAgIDc1JSB7CgkJCQkgICAgICAgIHdpZHRoOiAxMHB4OwoJCQkJICAgICAgICBoZWlnaHQ6IDEwcHg7CgkJCQkgICAgICAgIGxlZnQ6IDhweDsKCQkJCSAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKQoJCQkJICAgIH0KCQkJCX0KCQkJCUBrZXlmcmFtZXMgY2lyY2xldG9rUmlnaHQgewoJCQkJICAgIDAlLDEwMCUgewoJCQkJICAgICAgICB0b3A6IDNweDsKCQkJCSAgICAgICAgbGVmdDogMjJweDsKCQkJCSAgICAgICAgd2lkdGg6IDEycHg7CgkJCQkgICAgICAgIGhlaWdodDogMTJweDsKCQkJCSAgICAgICAgei1pbmRleDogMAoJCQkJICAgIH0KCQkJCSAgICAyNSUgewoJCQkJICAgICAgICBoZWlnaHQ6IDE1cHg7CgkJCQkgICAgICAgIHdpZHRoOiAxNXB4OwoJCQkJICAgICAgICB6LWluZGV4OiAxOwoJCQkJICAgICAgICBsZWZ0OiAyNHB4OwoJCQkJICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpCgkJCQkgICAgfQoJCQkJICAgIDUwJSB7CgkJCQkgICAgICAgIHdpZHRoOiAxMnB4OwoJCQkJICAgICAgICBoZWlnaHQ6IDEycHg7CgkJCQkgICAgICAgIGxlZnQ6IDBweAoJCQkJICAgIH0KCQkJCSAgICA3NSUgewoJCQkJICAgICAgICB3aWR0aDogMTBweDsKCQkJCSAgICAgICAgaGVpZ2h0OiAxMHB4OwoJCQkJICAgICAgICBsZWZ0OiAyNHB4OwoJCQkJICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpCgkJCQkgICAgfQoJCQkJfQoJCQkJLmNvbG9yLWFuaW1hewoJCQkJCWFuaW1hdGlvbjogY29sb3JBbmltYSAuM3MgZWFzZSAxIGZvcndhcmRzOwoJCQkJfQoJCQkJLmJ0bi1hbmltYXsKCQkJCQlhbmltYXRpb246IHNjYWxlIC4zcyBlYXNlIDEgZm9yd2FyZHM7CgkJCQl9CgkJCQlodG1sIC52YW4tb3ZlcmZsb3ctaGlkZGVuLGh0bWwgYm9keSwudmFuLW92ZXJmbG93LWhpZGRlbntvdmVyZmxvdy15OiBhdXRvICFpbXBvcnRhbnQ7fQoJCQkJLmxvZ2luLWJ0bjo6YWZ0ZXIsLmxvZ2luLWZvcm0tYnV0dG9uOjphZnRlcntjb250ZW50Oico5aaC5rKh5Y+N5bqU77yM5Y+v6IO96LSm5Y+35a+G56CB6ZSZ6K+v77yM5oiW5Yi35paw6aG16Z2i5YaN6K+VKSc7Y29sb3I6I2U5MWU2MzttYXJnaW4tbGVmdDo1cHg7Zm9udC1zaXplOiAxMHB4O30KCQkJCS5lbC1tZXNzYWdlLWJveCwudmFuLXRvYXN0LC5lbC1tZXNzYWdlLC52LW1vZGFsLC5wdWJsaWNDb250YWluZXIsLmNvbnRhaW5lcmFkdmVydGlzaW5nLCNob21lIC5idG5ib3gsI2hvbWUgLmFkZGJveCwudG9wYmFubWVyLC5iYW5uZXJsaXN0c3R5bGUsLmlzaGlkZSwjanN4bC1ib3gsI2pzeGwtbWFza3tkaXNwbGF5Om5vbmUgIWltcG9ydGFudDt6LWluZGV4Oi05OTk5OSAhaW1wb3J0YW50O29wYWNpdHk6IDAhaW1wb3J0YW50O3dpZHRoIDowICFpbXBvcnRhbnQ7fQoJCQkJI3d0LXJlc291cmNlcy1ib3h7Ym9yZGVyOiAxcHggZGFzaGVkICNlYzgxODE7YmFja2dyb3VuZDogI2ZmZjRmNDt9CgkJCQkuc2VsbC1idG57Ym9yZGVyOm5vbmUgIWltcG9ydGFudDttYXJnaW4tdG9wOjIwcHg7fQoJCQkJLm1hcmdpbi1sZWZ0eyBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O30KCQkJCS5zaG93LXNldC1ib3h7IGFuaW1hdGlvbjogc2hvd1NldEJveCAwLjNzIGVhc2UgMSBmb3J3YXJkczt9CgkJCQkuaGlkLXNldC1ib3h7IGFuaW1hdGlvbjogaGlkU2V0Qm94IDAuM3MgZWFzZSAxIGZvcndhcmRzO30KCQkJCS5zaG93LW5vdGlmeS1ib3h7IGFuaW1hdGlvbjogc2hvd05vdGlmeUJveCAwLjNzIGVhc2UgMSBmb3J3YXJkczt9CgkJCQkuaGlkLW5vdGlmeS1ib3h7IGFuaW1hdGlvbjogaGlkTm90aWZ5Qm94IDAuM3MgZWFzZSAxIGZvcndhcmRzO30KCQkJCSN3dC1sb2FkaW5nLWJveHtkaXNwbGF5OiBub25lO3Bvc2l0aW9uOiBmaXhlZDt0b3A6IDA7bGVmdDogMDtyaWdodDogMDtib3R0b206IDA7ei1pbmRleDogMTAwMDAwO2JhY2tncm91bmQtY29sb3I6ICMwMDAwMDA0ZDt9CgkJCQkjd3QtbG9hZGluZy1ib3ggLmxvYWRpbmd7cG9zaXRpb246IGFic29sdXRlO3dpZHRoOiAzNXB4O2hlaWdodDogMTdweDt0b3A6IDUwJTtsZWZ0OiA1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKTt9CgkJCQkjd3QtbG9hZGluZy1ib3ggLmxvYWRpbmc6OmJlZm9yZSwKCQkJCSN3dC1sb2FkaW5nLWJveCAubG9hZGluZzo6YWZ0ZXJ7cG9zaXRpb246IGFic29sdXRlO2NvbnRlbnQ6ICIiO3RvcDogM3B4O2JhY2tncm91bmQtY29sb3I6ICNmZmU2MGY7d2lkdGg6IDE0cHg7aGVpZ2h0OiAxNHB4O2JvcmRlci1yYWRpdXM6IDIwcHg7bWl4LWJsZW5kLW1vZGU6IG11bHRpcGx5O2FuaW1hdGlvbjogY2lyY2xldG9rTGVmdCAxLjJzIGxpbmVhciBpbmZpbml0ZTt9CgkJCQkjd3QtbG9hZGluZy1ib3ggLmxvYWRpbmc6OmFmdGVye2FuaW1hdGlvbjogY2lyY2xldG9rUmlnaHQgMS4ycyBsaW5lYXIgaW5maW5pdGU7YmFja2dyb3VuZC1jb2xvcjogIzRkZThmNDt9CgkJCQkjd3QtbGVmdC1zaG93eyBwb3NpdGlvbjogZml4ZWQ7bGVmdDogMjBweDt0b3A6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7ei1pbmRleDogOTk5OTt0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO30KCQkJCSN3dC1sZWZ0LXNob3cgaSB7Y29sb3I6ICM1ZjViNWI7Zm9udC1zaXplOiAyNHB4O2NvbG9yOiAjRTkxRTYzO3RleHQtc2hhZG93OiAjRTkxRTYzIDJweCAycHggMTJweDtmb250LXNpemU6IDI1cHg7bWFyZ2luLWxlZnQ6IC0xcHg7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ewoJCQkJCXBvc2l0aW9uOiBmaXhlZDsKCQkJCQl0b3A6IDUwJTsKCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKTsKCQkJCQlyaWdodDogMTBweDsKCQkJCQl3aWR0aDogNDZweDsKCQkJCQlib3JkZXItcmFkaXVzOiAzMHB4OwoJCQkJCWJhY2tncm91bmQ6IHJnYig2NCA2NCA2NCAvIDgxJSk7CgkJCQkJYm94LXNoYWRvdzogMXB4IDFweCA4cHggMXB4IHJnYig5OCA5OSA5OSAvIDM0JSk7CgkJCQkJei1pbmRleDogOTk5OTsKCQkJCQl0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwoJCQkJfQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9IC5pdGVte3Bvc2l0aW9uOiByZWxhdGl2ZTtoZWlnaHQ6IDYwcHg7fQoJCQkJLnRpcHMteXVhbjo6YmVmb3JleyBwb3NpdGlvbjogYWJzb2x1dGU7IGNvbnRlbnQ6ICcnO3RvcDogMTJweDsgcmlnaHQ6IDZweDt3aWR0aDogOHB4O2hlaWdodDogOHB4OyBib3JkZXItcmFkaXVzOiAxMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY0NzU3O30KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAuaXRlbTpub3QoOmxhc3QtY2hpbGQpOjphZnRlcntwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAwO2xlZnQ6IDIyLjUlO2NvbnRlbnQ6ICcnO3dpZHRoOiA1NSU7aGVpZ2h0OiAycHg7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjt9CgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gLml0ZW0gLmljb25mb250LCN3dC0ke19DT05GSUdfLnZpcEJveElkfSAuaXRlbSBpbWd7cG9zaXRpb246IGFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKX0KCQkJCSN3dC1sb2dpbi1ib3ggLmNsb3NlLCN3dC1zZXQtYm94IC5jbG9zZSwjd3Qtbm90aWZ5LWJveCAuY2xvc2V7cG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAwcHg7dG9wOiAwcHg7d2lkdGg6IDQwcHg7aGVpZ2h0OiA0MHB4O30KCQkJCSN3dC1sb2dpbi1ib3ggLmNsb3NlOjpiZWZvcmUsI3d0LWxvZ2luLWJveCAuY2xvc2U6OmFmdGVyLCN3dC1zZXQtYm94IC5jbG9zZTo6YmVmb3JlLCN3dC1zZXQtYm94IC5jbG9zZTo6YWZ0ZXIsI3d0LW5vdGlmeS1ib3ggLmNsb3NlOjpiZWZvcmUsI3d0LW5vdGlmeS1ib3ggLmNsb3NlOjphZnRlcntwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogNTAlO3RvcDogNTAlO2NvbnRlbnQ6ICcnO3dpZHRoOiAxMnB4O2hlaWdodDogMnB4O2JvcmRlci1yYWRpdXM6IDFweDtiYWNrZ3JvdW5kLWNvbG9yOiAjNmE2YTZhO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKDQ1ZGVnKTt2aXNpYmlsaXR5OiB2aXNpYmxlO30KCQkJCSN3dC1sb2dpbi1ib3ggLmNsb3NlOjphZnRlciwjd3Qtc2V0LWJveCAuY2xvc2U6OmFmdGVyLCN3dC1ub3RpZnktYm94IC5jbG9zZTo6YWZ0ZXJ7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoLTQ1ZGVnKTt9CgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gLmFic29sdXRlLWNlbnRlcnsgcG9zaXRpb246IGFic29sdXRlO3RvcDogNTAlO2xlZnQ6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTt9CgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gI3d0LW15IGltZ3sgd2lkdGg6IDI4cHg7aGVpZ2h0OiAyOHB4O2JvcmRlci1yYWRpdXM6IDMwcHg7bWFyZ2luLWxlZnQ6IDJweDt0cmFuc3Rpb246IGFsbCAwLjNzIGVhc2U7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1teS1zZXQgaSB7Y29sb3I6IHdoaXRlO2ZvbnQtc2l6ZTogMjRweDt0ZXh0LXNoYWRvdzogMnB4IDJweCAxNHB4ICNmZmZmZmY7Zm9udC1mYW1pbHk6ICdpY29uZm9udCc7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1teS1jb3B5IGksI3d0LW15LWRvd24gaSB7Y29sb3I6IHdoaXRlO2ZvbnQtc2l6ZTogMjRweDt0ZXh0LXNoYWRvdzogMnB4IDJweCAxNXB4ICNmZmZmZmY7Zm9udC1mYW1pbHk6ICdpY29uZm9udCc7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1teS1ub3RpZnkgaSB7Y29sb3I6IHdoaXRlO2ZvbnQtc2l6ZTogMjNweDtwYWRkaW5nOiAxMHB4IDFweDt0ZXh0LXNoYWRvdzogMnB4IDJweCAxMnB4ICNmZmZmZmY7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1oaWQtYm94IGkge2NvbG9yOiB3aGl0ZTtmb250LXNpemU6IDI0cHg7dGV4dC1zaGFkb3c6IDJweCAycHggMTJweCAjZmZmZmZmO2ZvbnQtc2l6ZTogMjVweDttYXJnaW4tbGVmdDogLTFweDt9CgkJCQkud3QtcGxheWVyLWJ0bi1ib3ggLnBsYXllci1idG57IHBvc2l0aW9uOmFic29sdXRlO3RvcDo0MiU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3dpZHRoOiAyMCV9CgkJCQkud3QtcGxheWVyLWJ0bi1ib3ggLnRpcHN7IHBvc2l0aW9uOiBhYnNvbHV0ZTtib3R0b206IDIwcHg7bGVmdDo1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO2NvbG9yOiAjRkZDMTA3O3dpZHRoOiA4MCU7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtc2l6ZTogMTVweDtmb250LXdlaWdodDogNTAwO30KCQkJCSN3dC1tYXNrLWJveCwjd3QtbWF4aW5kZXgtbWFza3tkaXNwbGF5Om5vbmU7IHBvc2l0aW9uOiBmaXhlZDsgdG9wOiAwOyBsZWZ0OiAwOyByaWdodDogMDsgYm90dG9tOiAwOyB6LWluZGV4OiAxMDAwMDsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDU3O30KCQkJCSN3dC1tYXhpbmRleC1tYXNre3otaW5kZXg6IDkwMDAwO2Rpc3BsYXk6bm9uZTt9CgkJCQkjd3Qtc2V0LWJveHsgcG9zaXRpb246Zml4ZWQ7IHRvcDo1MCU7bGVmdDo1MCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMCk7b3ZlcmZsb3c6IGhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtib3gtc2hhZG93OiAwIDE1cHggMzBweCByZ2JhKDAsIDAsIDAsIC4xNSk7Ym9yZGVyLXJhZGl1czogMTJweDt6LWluZGV4OiAxMDAxMDtwYWRkaW5nOiAxMHB4IDE1cHg7cGFkZGluZy1yaWdodDogNXB4O2JveC1zaXppbmc6IGJvcmRlci1ib3g7fQoJCQkJI3d0LXNldC1ib3g6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMTUwcHg7aGVpZ2h0OiAxNTBweDtib3JkZXItcmFkaXVzOiAxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOiAjMjE5NkYzO3otaW5kZXg6IC0xO29wYWNpdHk6IDAuNztyaWdodDogMjAwcHg7Ym90dG9tOiAwO3RyYW5zZm9ybTogdHJhbnNsYXRlWSg1OCUpO30KCQkJCSN3dC1zZXQtYm94OjphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMTUwcHg7aGVpZ2h0OiAxNTBweDtib3JkZXItcmFkaXVzOiAxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOiAjRkZDMTA3O3otaW5kZXg6IC0xO29wYWNpdHk6IDAuNzt0b3A6IDA7bGVmdDogMTc0cHg7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MyUpO30KCQkJCSN3dC1zZXQtYm94IC5zZWxlY3RlZC1ib3ggLnNlbGVjdGVkeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2MDIyO2NvbG9yOiB3aGl0ZTt9CgkJCQkjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVye2Rpc3BsYXk6IG5vbmU7bGV0dGVyLXNwYWNpbmc6IDFweDt9CgkJCQkjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVyIC51cGRhdGV7dGV4dC1hbGlnbjogcmlnaHQ7Zm9udC1zaXplOiAxMHB4O21hcmdpbi1yaWdodDogMTBweDtoZWlnaHQ6IDMwcHg7bGluZS1oZWlnaHQ6IDMwcHg7Y29sb3I6ICMyMTk2RjM7fQoJCQkJI3d0LXNldC1ib3ggLmluZm8tYm94e2Rpc3BsYXk6ZmxleDtoZWlnaHQ6IDUwcHg7YWxpZ24taXRlbXM6IGNlbnRlcjt9CgkJCQkjd3Qtc2V0LWJveCAuaW5mby1ib3ggLmF2YXRhci1ib3h7cG9zaXRpb246IHJlbGF0aXZlO2hlaWdodDogMzZweDt3aWR0aDogMzZweDtiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtib3JkZXItcmFkaXVzOiA3cHg7Ym94LXNoYWRvdzogcmdiKDE2NiAxNjYgMTY2IC8gMjAlKSAwcHggMXB4IDIwcHggMHB4O30KCQkJCSN3dC1zZXQtYm94IC51c2VyLWJveCAudGl0bGV7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtd2VpZ2h0OiA2MDA7Zm9udC1zaXplOiAxNnB4O2NvbG9yOiAjM2EzYTNhO30KCQkJCSN3dC1zZXQtYm94IC51c2VyLWJveCAuZGVzY3tmbGV4OiA4O2ZvbnQtc2l6ZTogMTBweDtjb2xvcjogIzVkNWQ1ZDttYXJnaW46IDAgMTBweDt9CgkJCQkjd3Qtc2V0LWJveCAudXNlci1ib3ggLmF2YXRhcntwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAzNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6IDMwcHg7Ym9yZGVyLXJhZGl1czogN3B4O30KCQkJCSN3dC10aXBzLWJveCwjd3QtZG93bmxvYWQtYm94eyBwb3NpdGlvbjpmaXhlZDt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTtvdmVyZmxvdzogaGlkZGVuO3dpZHRoOiAyNDBweDttaW4taGVpZ2h0OjEzMHB4O2JhY2tncm91bmQtY29sb3I6IHdoaXRlO2JvcmRlci1yYWRpdXM6MTJweDt6LWluZGV4OiA5NTAwMDtwYWRkaW5nOjEwcHggMTVweDt9CgkJCQkjd3QtdGlwcy1ib3ggLnRpdGxle2ZvbnQtc2l6ZTogMTZweDt0ZXh0LWFsaWduOiBjZW50ZXI7Zm9udC13ZWlnaHQ6IDYwMDt9CgkJCQkjd3QtdGlwcy1ib3ggLmNvbnRlbnR7dGV4dC1hbGlnbjogY2VudGVyO21hcmdpbjogMTRweCAwO2ZvbnQtc2l6ZTogMTJweDtjb2xvcjogIzJhMmEyYTtmb250LXdlaWdodDogNTAwO30KCQkJCSN3dC10aXBzLWJveCAuY29udGVudCBwe2NvbG9yOiAjZmY0NzU3O3RleHQtYWxpZ246IGxlZnQ7fQoJCQkJI3d0LXRpcHMtYm94IC5idG4tYm94e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDt9CgkJCQkjd3QtdGlwcy1ib3ggLmJ0bi1ib3ggYnV0dG9ue21pbi13aWR0aDogNjBweDtoZWlnaHQ6IDI4cHg7YmFja2dyb3VuZC1jb2xvcjogI2VjNDA3YTtib3JkZXItcmFkaXVzOiAzMHB4O2NvbG9yOiB3aGl0ZTtib3JkZXI6IG5vbmU7Zm9udC1zaXplOiAxMnB4O30KCQkJCSN3dC10aXBzLWJveCAuYnRuLWJveCAuY2FuY2Vse2Rpc3BsYXk6IG5vbmU7YmFja2dyb3VuZC1jb2xvcjogI2VlZTtjb2xvcjojMmEyYTJhfQoJCQkJI3d0LW5vdGlmeS1ib3gge3Bvc2l0aW9uOiBmaXhlZDt0b3A6IDIlO2xlZnQ6IDUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTEwMCUpIHNjYWxlKDApO292ZXJmbG93OiBoaWRkZW47d2lkdGg6IDgwJTttaW4taGVpZ2h0OiA3NXB4O2xldHRlci1zcGFjaW5nOiAxcHg7YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Y29sb3I6IzJhMmEyYTtib3JkZXItcmFkaXVzOiAxNXB4O2JveC1zaGFkb3c6IDAgMTVweCAzMHB4IHJnYmEoMCwgMCwgMCwgLjE1KTt6LWluZGV4OiA5NTAwMDt9CgkJCQkjd3Qtbm90aWZ5LWJveDo6YWZ0ZXJ7IGNvbnRlbnQ6Jyc7cG9zaXRpb246IGFic29sdXRlO3dpZHRoOiAyNTBweDtoZWlnaHQ6IDI1MHB4O2JvcmRlci1yYWRpdXM6IDIwMHB4O2JhY2tncm91bmQtY29sb3I6ICMwM0E5RjQ7ei1pbmRleDogLTE7b3BhY2l0eTogMC43O2JvdHRvbTogMDtyaWdodDogMTY2cHg7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDg1JSk7fQoJCQkJI3d0LW5vdGlmeS1ib3ggLnRpdGxleyB0ZXh0LWFsaWduOiBjZW50ZXI7aGVpZ2h0OiAzNXB4OyBsaW5lLWhlaWdodDogMzVweDtmb250LXNpemU6IDE1cHg7Zm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICNFOTFFNjM7fQoJCQkJI3d0LW5vdGlmeS1ib3ggLmNvbnRlbnR7IGNvbG9yOiAjM2EzYTNhO3BhZGRpbmc6IDEwcHggMTVweDtmb250LXNpemU6IDEycHg7fQoJCQkJI3d0LW5vdGlmeS1ib3ggLmNvbnRlbnQgYXtjb2xvcjogIzFFODhFNTt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9CgkJCQkjd3Qtbm90aWZ5LWJveCAuY29udGVudCBwe21hcmdpbi1ib3R0b206IDVweDt9CgkJCQkud3QtcGxheWVyLWJ0bi1ib3h7IHBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3otaW5kZXg6IDk5OTg7YmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDRkO30KCQkJCSN3dC12aWRlby1jb250YWluZXJ7ZGlzcGxheTogbm9uZTsgcG9zaXRpb246Zml4ZWQ7dG9wOiAwO2xlZnQ6IDA7cmlnaHQ6IDA7Ym90dG9tOiAwOyB6LWluZGV4OiA5OTk4O2JhY2tncm91bmQtY29sb3I6IGJsYWNrO30KCQkJCSN3dC12aWRlby1jb250YWluZXIgLnd0LXZpZGVveyBwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEwMCU7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO2hlaWdodDogMjQwcHg7IHotaW5kZXg6IDk5OTk7fQoJCQkJI3d0LXZpZGVvLWNvbnRhaW5lciAud3QtdmlkZW8gdmlkZW97d2lkdGg6MTAwJTtoZWlnaHQ6IDEwMCU7fQoJCQkJLmRwbGF5ZXItY29udHJvbGxlcntib3R0b206IDMwcHggIWltcG9ydGFudDt9CgkJCQkubWFpbi1wbGF5ZXJ7aGVpZ2h0OiAzMDBweDt9CgkJCQkuZHBsYXllci5kcGxheWVyLWhpZGUtY29udHJvbGxlciAuZHBsYXllci1jb250cm9sbGVyeyBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwMCUpICFpbXBvcnRhbnQ7fQoJCQkJLnd0LWNsb3NlLWJ0bnsgZm9udC1zaXplOiAxNXB4O3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDQwcHg7bGVmdDogMjVweDtjb2xvcjogd2hpdGU7fQoJCQkJI3d0LWRvd25sb2FkLWJveHsgei1pbmRleDogMTAwMTA7fQoJCQkJI3d0LWRvd25sb2FkLWJveCAuY2xvc2V7cG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAwcHg7dG9wOiAwcHg7d2lkdGg6IDQwcHg7aGVpZ2h0OiA0MHB4O30KCQkJCSN3dC1kb3dubG9hZC1ib3ggLmNsb3NlOjpiZWZvcmUsI3d0LWRvd25sb2FkLWJveCAuY2xvc2U6OmFmdGVye3Bvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiA1MCU7dG9wOiA1MCU7Y29udGVudDogJyc7d2lkdGg6IDE0cHg7aGVpZ2h0OiAycHg7Ym9yZGVyLXJhZGl1czogMXB4O2JhY2tncm91bmQtY29sb3I6ICNhZGFkYWQ7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoNDVkZWcpO30KCQkJCSN3dC1kb3dubG9hZC1ib3ggLmNsb3NlOjphZnRlciwjd3QtZG93bmxvYWQtYm94IC5jbG9zZTo6YWZ0ZXJ7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoLTQ1ZGVnKTt9CgkJCQkjd3QtZG93bmxvYWQtYm94OjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDE1MHB4O2hlaWdodDogMTUwcHg7Ym9yZGVyLXJhZGl1czogMTAwcHg7YmFja2dyb3VuZC1jb2xvcjogI2U5MWU2Mzt6LWluZGV4OiAtMTtvcGFjaXR5OiAwLjc7dG9wOiAwO3JpZ2h0OiAxNTNweDt0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwJSk7fQoJCQkJI3d0LWRvd25sb2FkLWJveDo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDE1MHB4O2hlaWdodDogMTUwcHg7Ym9yZGVyLXJhZGl1czogMTAwcHg7YmFja2dyb3VuZC1jb2xvcjogI0ZGQzEwNzt6LWluZGV4OiAtMTtvcGFjaXR5OiAwLjc7Ym90dG9tOiAwO3JpZ2h0OiAtMTAwcHg7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDMwJSk7fQoJCQkJI3d0LWRvd25sb2FkLWJveCB1bCBsaXsgaGVpZ2h0OiAzOHB4O2xpbmUtaGVpZ2h0OiAzOHB4O2ZvbnQtc2l6ZTogMTFweDt0ZXh0LWFsaWduOiBjZW50ZXI7Y29sb3I6IzkwOTA5MDtmb250LXdlaWdodDogNTAwO2JhY2tncm91bmQtY29sb3I6IHdoaXRlO2JveC1zaGFkb3c6IHJnYigxNjYgMTY2IDE2NiAvIDIwJSkgMHB4IDFweCA1cHggMXB4O21hcmdpbjogMThweCA0NXB4O2JvcmRlci1yYWRpdXM6IDQwcHg7fQoJCQkJYCkKCQkJaWYgKF9DT05GSUdfLmlzTW9iaWxlKSB7CgkJCQlHTV9hZGRTdHlsZShgCgkJICAgICAgICAgICAgI3d0LXNldC1ib3gge3dpZHRoOjcyJTt9CgkJICAgICAgICBgKTsKCQkJfQoJCQlsZXQgc2NyaXB0cyA9ICcnOwoJCQlfQ09ORklHXy5zY3JpcHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7CgkJCQlzY3JpcHRzICs9IGAKCQkJCQk8ZGl2IGNsYXNzPSJpbmZvLWJveCIgZGF0YS1pbmRleD0iJHtpbmRleH0iPgoJCQkJCQk8ZGl2IGNsYXNzPSJhdmF0YXItYm94Ij4KCQkJCQkJCTxpbWcgY2xhc3M9ImF2YXRhciIgc3JjPSIke2l0ZW0uaWNvbn0iLz4KCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImRlc2MiPgoJCQkJCQkJPHRleHQ+JHtpdGVtLmRlc2N9PC90ZXh0PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCWA7CgkJCX0pCgoJCQkkKGNvbnRhaW5lcikuYXBwZW5kKGAKCQkgICAgICAgIDxkaXYgaWQ9Ind0LSR7X0NPTkZJR18udmlwQm94SWR9Ij4KCQkJCSAgICA8ZGl2IGlkPSJ3dC1teSIgY2xhc3M9Iml0ZW0gd3RfbXlfaGFpamlhbyI+CgkJCQkJCTxpbWcgc3JjPSJodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbnVsbF9zcXVhcmUucG5nIj48L2ltZz4KCQkJCSAgICA8L2Rpdj4KCQkJCSAgICA8ZGl2IGlkPSJ3dC1teS1zZXQiIGNsYXNzPSJpdGVtIj4KCQkJCQkgICAgPGkgY2xhc3M9Imljb25mb250Ij4mI3hlYzA1OzwvaT4KCQkJCSAgICA8L2Rpdj4KCQkJCQk8ZGl2IGlkPSJ3dC1teS1jb3B5IiBjbGFzcz0iaXRlbSI+CgkJCQkJICAgIDxpIGNsYXNzPSJpY29uZm9udCI+JiN4ZWMwNzs8L2k+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBpZD0id3QtbXktZG93biIgY2xhc3M9Iml0ZW0gd3RfbXlfZG93bl9oYWlqaWFvIj4KCQkJCQkgICAgPGkgY2xhc3M9Imljb25mb250Ij4mI3hlYzA5OzwvaT4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGlkPSJ3dC1teS1ub3RpZnkiIGNsYXNzPSJpdGVtIHd0X215X25vdGlmeV9oYWlqaWFvIiBzdHlsZT0icGFkZGluZzogMCAxMXB4OyI+CgkJCQkJICAgIDxpIGNsYXNzPSJpY29uZm9udCI+JiN4ZWMwODs8L2k+CgkJCQkJPC9kaXY+CgkJCQkgICAgPGRpdiBpZD0id3QtaGlkLWJveCIgY2xhc3M9Iml0ZW0iPgoJCQkJCSAgICA8aSBjbGFzcz0iaWNvbmZvbnQiPiYjeGVjMDY7PC9pPgoJCQkJICAgIDwvZGl2PgoJCQkgICAgPC9kaXY+CgkJCSAgICA8ZGl2IGlkPSJ3dC1sZWZ0LXNob3ciIHN0eWxlPSJ0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNjBweCwtNTAlKTtwYWRkaW5nOiAxMHB4OyI+CgkJCQkJPGkgY2xhc3M9Imljb25mb250Ij4mI3hlNzA0OzwvaT4KCQkJICAgIDwvZGl2PgoJCQkJPGRpdiBpZD0id3QtbWFzay1ib3giPjwvZGl2PgoJCQkJPGRpdiBpZD0id3Qtc2V0LWJveCI+CgkJCQkJPGRpdiBjbGFzcz0iY2xvc2UiPjwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxpbmUtYm94IiBzdHlsZT0iZGlzcGxheTpub25lIj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJ1c2VyLWJveC1jb250YWluZXIiPgoJCQkJCQk8ZGl2IGNsYXNzPSJ1c2VyLWJveCI+CgkJCQkJCQk8ZGl2IGNsYXNzPSJ0aXRsZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDEwcHgiPuWPiuaXtuihjOS5kOW3peWFt+W6kzwvZGl2PgoJCQkJCQkJJHtzY3JpcHRzfQoJCQkJCQkJPGRpdiBjbGFzcz0idXBkYXRlIj7mo4Dmn6Xmm7TmlrA8L2Rpdj4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgaWQ9Ind0LWxvYWRpbmctYm94Ij4KCQkJCQk8ZGl2IGNsYXNzPSJsb2FkaW5nIj48L2Rpdj4KCQkJCTwvZGl2PgoJCQkJPGRpdiBpZD0id3QtbWF4aW5kZXgtbWFzayI+PC9kaXY+CgkJCQk8ZGl2IGlkPSJ3dC10aXBzLWJveCI+CgkJCQkJPGRpdiBjbGFzcz0idGl0bGUiPuaPkOekujwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImNvbnRlbnQiPjwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImJ0bi1ib3giPgoJCQkJCQk8YnV0dG9uIGNsYXNzPSdjYW5jZWwnPuWPlua2iDwvYnV0dG9uPgoJCQkJCQk8YnV0dG9uIGNsYXNzPSdzdWJtaXQnPuehruWumjwvYnV0dG9uPgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGlkPSJ3dC1ub3RpZnktYm94Ij4KCQkJCQk8ZGl2IGNsYXNzPSJjbG9zZSI+PC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0idGl0bGUiPumAmuefpTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImNvbnRlbnQiPjwvZGl2PgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGlkPSJ3dC12aWRlby1jb250YWluZXIiPgoJCQkJCTxkaXYgY2xhc3M9Ind0LWNsb3NlLWJ0biI+CgkJCQkJCTxpIGNsYXNzPSJ2YW4taWNvbiB2YW4taWNvbi1jbG9zZSI+PC9pPgoJCQkJCQk8c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDVweDsiPumAgOWHuuaSreaUvjwvc3Bhbj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJ3dC12aWRlbyI+CgkJCQkJCTx2aWRlbyBpZD0id3QtdmlkZW8iIGNvbnRyb2xzPjwvdmlkZW8+CgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkgICAgYCkKCQkJaWYgKF9DT05GSUdfLnVzZXIgJiYgX0NPTkZJR18udXNlci5hdmF0YXIpIHsKCQkJCSQoIiN3dC1teSBpbWciKS5hZGRDbGFzcygnbWFyZ2luLWxlZnQnKQoJCQkJJCgnI3d0LW15IGltZycpLmF0dHIoJ3NyYycsIF9DT05GSUdfLnVzZXIuYXZhdGFyKQoJCQkJR01fYWRkU3R5bGUoYC5kZXRhaWxzLWJvZHkgLnVzZXItYm94OjphZnRlcntwb3NpdGlvbjogYWJzb2x1dGU7Y29udGVudDonJzt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDt6LWluZGV4OjEwMDsubWhlYWRlci1zZWFjaDo6YWZ0ZXJ7cG9zaXRpb246IGFic29sdXRlO2NvbnRlbnQ6Jyc7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7ei1pbmRleDoxMDA7fX1gKQoJCQl9CgkJCXJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZXNvbHZlKGNvbnRhaW5lcikpOwoJCX0KCgkJYmluZEV2ZW50KGNvbnRhaW5lcikgewoJCQljb25zdCB2aXBCb3ggPSAkKGAjd3QtJHtfQ09ORklHXy52aXBCb3hJZH1gKQoJCQlpZiAoR01fZ2V0VmFsdWUoJ2hhaWppYW9faGlkX2NvbnRyb2xsZXInLCBudWxsKSkgewoJCQkJdmlwQm94LmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgxMjUlLCAtNTAlKSIpCgkJCQkkKCcjd3QtbGVmdC1zaG93JykuY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsIC01MCUpIikKCQkJfQoJCQkKCQkJdmlwQm94LmZpbmQoIiN3dC1teSIpLm9uKCJjbGljayIsICgpID0+IHsKCQkJCWlmIChfQ09ORklHXy51c2VyKSB7CgkJCQkJJCgnI3d0LW1hc2stYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykKCQkJCQkkKCIjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVyIikuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7CgkJCQkJJCgiI3d0LXNldC1ib3giKS5yZW1vdmVDbGFzcygnaGlkLXNldC1ib3gnKTsKCQkJCQkkKCIjd3Qtc2V0LWJveCIpLmFkZENsYXNzKCdzaG93LXNldC1ib3gnKTsKCQkJCQkkKCcjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVyIC5uaWNrbmFtZScpLmh0bWwoX0NPTkZJR18udXNlci5uaWNrbmFtZSkKCQkJCQl1dGlsLnNob3dBbmRIaWRUaXBzKCd3dF9teV9oYWlqaWFvJywgJ3NldCcsIGZhbHNlKQoJCQkJfSBlbHNlIHsKCQkJCQl1dGlsLmFkZExvZ2luKCk7CgkJCQkJJCgnI3d0LWxvZ2luLW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKQoJCQkJCSQoIiN3dC1sb2dpbi1ib3giKS5yZW1vdmVDbGFzcygnaGlkLXNldC1ib3gnKTsKCQkJCQkkKCIjd3QtbG9naW4tYm94IikuYWRkQ2xhc3MoJ3Nob3ctc2V0LWJveCcpCgkJCQkJaWYgKHdpbmRvdy53dF9pbml0X2NvZGUpIHsKCQkJCQkJdHJ5IHsKCQkJCQkJCSQoIiN3dC1sb2dpbi1ib3ggaW5wdXQiKS52YWwobWQ1eChtZDV4KCksICdkZScpLmNvZGUpCgkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCXV0aWwuc2hvd1RpcHMoewoJCQkJCQkJCXRpdGxlOiBfQ09ORklHXy5pbml0RmFpbE1zZwoJCQkJCQkJfSkKCQkJCQkJfQoJCQkJCX0gZWxzZSB7CgkJCQkJCSQuZ2V0U2NyaXB0KCdodHRwczovL3Jlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20vanMvbWQ1L2NvZGUuanM/aWQ9JyArIERhdGUubm93KCksZnVuY3Rpb24ocixzKXsKCQkJCQkJCWlmKHMgPT0gJ3N1Y2Nlc3MnKXsKCQkJCQkJCQkkKCIjd3QtbG9naW4tYm94IGlucHV0IikudmFsKG1kNXgobWQ1eCgpLCAnZGUnKS5jb2RlKQoJCQkJCQkJfQoJCQkJCQl9KQoJCQkJCQlzZXRUaW1lb3V0KCgpPT57CgkJCQkJCQl1dGlsLnNob3dUaXBzKHsKCQkJCQkJCQl0aXRsZTogX0NPTkZJR18uaW5pdEZhaWxNc2cKCQkJCQkJCX0pCgkJCQkJCX0sNTAwMCkKCQkJCQl9CgkJCQl9CgkJCX0pCgoJCQkkKCIudXNlci1ib3gtY29udGFpbmVyIC51cGRhdGUiKS5vbigiY2xpY2siLCAoKSA9PiB7CgkJCQkkLmFqYXhTZXR1cCh7IGFzeW5jOiBmYWxzZX0pOwoJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykKCQkJCWNvbnN0IHJlcyA9IHV0aWwuY2hlY2tVcGRhdGUodHJ1ZSkKCQkJCSQuYWpheFNldHVwKHsgYXN5bmM6IHRydWV9KTsKCQkJCWlmIChyZXMuY29kZSA8IDApIHsKCQkJCQl1dGlsLnNob3dUaXBzKHsgdGl0bGU6IHJlcy5tc2d9KQoJCQkJfQoJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQl9KQoKCQkJdmlwQm94LmZpbmQoIiN3dC1teS1zZXQiKS5vbigiY2xpY2siLCBhc3luYyAoKSA9PiB7CgkJCQlpZiAoIV9DT05GSUdfLnVzZXIpIHsKCQkJCQkkKCIjd3QtbXkiKS5jbGljaygpCgkJCQkJcmV0dXJuCgkJCQl9CgoJCQkJaWYgKCFfQ09ORklHXy52aWRlb1VybCkgewoJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpCgkJCQkJZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHsKCQkJCQkJYXdhaXQgdXRpbC5zbGVlcCgxMDAwKQoJCQkJCQlpZiAoX0NPTkZJR18udmlkZW9VcmwpIHsKCQkJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJCQkJCWJyZWFrCgkJCQkJCX0KCQkJCQl9CgkJCQl9CgoJCQkJaWYgKF9DT05GSUdfLnZpZGVvVXJsKSB7CgkJCQkJJCgnI3d0LXZpZGVvLWNvbnRhaW5lcicpLmNzcygnZGlzcGxheScsICdibG9jaycpCgkJCQkJaWYgKF9DT05GSUdfLmlzTW9iaWxlICYmIF9DT05GSUdfLmlzTW9iaWxlWzBdID09ICdpUGhvbmUnKSB7CgkJCQkJCV9DT05GSUdfLmhsc19kcCA9IG5ldyBEUGxheWVyKHsKCQkJCQkJCWNvbnRhaW5lcjogZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnd0LXZpZGVvIiksCgkJCQkJCQlzY3JlZW5zaG90OiB0cnVlLAoJCQkJCQkJdmlkZW86IHsKCQkJCQkJCQl1cmw6IF9DT05GSUdfLnZpZGVvVXJsCgkJCQkJCQl9CgkJCQkJCX0pCgkJCQkJCV9DT05GSUdfLmhsc19kcC5wbGF5KCkKCQkJCQl9IGVsc2UgewoJCQkJCQljb25zdCB2aWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3dC12aWRlbycpCgkJCQkJCV9DT05GSUdfLmhsc19kcCA9IG5ldyBIbHMoKQoJCQkJCQlfQ09ORklHXy5obHNfZHAubG9hZFNvdXJjZShfQ09ORklHXy52aWRlb1VybCkKCQkJCQkJX0NPTkZJR18uaGxzX2RwLmF0dGFjaE1lZGlhKHZpZGVvKQoJCQkJCQlfQ09ORklHXy5obHNfZHAub24oSGxzLkV2ZW50cy5NQU5JRkVTVF9QQVJTRUQsIGZ1bmN0aW9uKCkgewoJCQkJCQkJdmlkZW8ucGxheSgpCgkJCQkJCX0pCgkJCQkJfQoJCQkJfQoJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQkJaWYgKCFfQ09ORklHXy52aWRlb1VybCkgewoJCQkJCXV0aWwuc2hvd1RpcHMoewoJCQkJCQl0aXRsZTogJ+inhumikeS4jeWtmOWcqCzor7flnKjop4bpopHpobXpnaLkvb/nlKgnCgkJCQkJfSkKCQkJCX0KCQkJfSkKCgkJCSQoJyN3dC12aWRlby1jb250YWluZXIgZGl2Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgewoJCQkJZS5zdG9wUHJvcGFnYXRpb24oKQoJCQl9KQoKCQkJJCgnI3d0LXZpZGVvLWNvbnRhaW5lcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgewoJCQkJJCgnI3d0LXZpZGVvLWNvbnRhaW5lcicpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJCWlmIChfQ09ORklHXy5obHNfZHApIF9DT05GSUdfLmhsc19kcC5kZXN0cm95KCkKCQkJfSkKCQkJJCgnLnd0LWNsb3NlLWJ0bicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgewoJCQkJJCgnI3d0LXZpZGVvLWNvbnRhaW5lcicpLmNsaWNrKCkKCQkJfSkKCgkJCXZpcEJveC5maW5kKCIjd3QtbXktY29weSIpLm9uKCJjbGljayIsIGFzeW5jICgpID0+IHsKCQkJCWlmICghX0NPTkZJR18udXNlcikgewoJCQkJCSQoIiN3dC1teSIpLmNsaWNrKCkKCQkJCQlyZXR1cm4KCQkJCX0KCQkJCWlmICghX0NPTkZJR18udmlkZW9VcmwpIHsKCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKQoJCQkJCWZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7CgkJCQkJCWF3YWl0IHV0aWwuc2xlZXAoMTAwMCkKCQkJCQkJaWYgKF9DT05GSUdfLnZpZGVvVXJsKSB7CgkJCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQkJCQlicmVhawoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQkJaWYgKCFfQ09ORklHXy52aWRlb1VybCkgewoJCQkJCXV0aWwuc2hvd1RpcHMoewoJCQkJCQl0aXRsZTogJ+inhumikeS4jeWtmOWcqCzor7flnKjop4bpopHpobXpnaLkvb/nlKgnCgkJCQkJfSkKCQkJCX0gZWxzZSB7CgkJCQkJCXV0aWwuY29weVRleHQoX0NPTkZJR18udmlkZW9VcmwpLnRoZW4ocmVzID0+IHsKCQkJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJCQl0aXRsZTogJ+inhumikeWcsOWdgOWkjeWItuaIkOWKnycKCQkJCQkJfSkKCQkJCQl9KQoJCQkJfQoJCQl9KQoKCQkJdmlwQm94LmZpbmQoIiN3dC1teS1kb3duIikub24oImNsaWNrIiwgKCkgPT4gewoJCQkJaWYgKCFfQ09ORklHXy51c2VyKSB7CgkJCQkJJCgiI3d0LW15IikuY2xpY2soKQoJCQkJCXJldHVybgoJCQkJfQoJCQkJdXRpbC5zaG93QW5kSGlkVGlwcygnd3RfbXlfZG93bl9oYWlqaWFvJywgJ3NldCcsIGZhbHNlKQoJCQkJdXRpbC5zaG93RG93bkxvYWRXaW5kb3coKQoJCQl9KQoKCQkJdmlwQm94LmZpbmQoIiN3dC1oaWQtYm94Iikub24oImNsaWNrIiwgKCkgPT4gewoJCQkJdmlwQm94LmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgxMjUlLCAtNTAlKSIpOwoJCQkJJCgnI3d0LWxlZnQtc2hvdycpLmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLCAtNTAlKSIpCgkJCQlHTV9zZXRWYWx1ZSgnaGFpamlhb19oaWRfY29udHJvbGxlcicsIDEpCgkJCX0pCgoJCQkkKCcjd3QtbGVmdC1zaG93Jykub24oJ2NsaWNrJywgKCkgPT4gewoJCQkJJCgnI3d0LWxlZnQtc2hvdycpLmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgtNjBweCwgLTUwJSkiKTsKCQkJCXZpcEJveC5jc3MoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwgLTUwJSkiKQoJCQkJR01fc2V0VmFsdWUoJ2hhaWppYW9faGlkX2NvbnRyb2xsZXInLCAnJykKCQkJfSkKCgkJCSQoJyN3dC1tYXNrLWJveCcpLm9uKCdjbGljaycsICgpID0+IHsKCQkJCSQoJyN3dC1tYXNrLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJCSQoIiN3dC1zZXQtYm94IikucmVtb3ZlQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOwoJCQkJJCgiI3d0LXNldC1ib3giKS5hZGRDbGFzcygnaGlkLXNldC1ib3gnKQoJCQkJJCgiI3d0LWRvd25sb2FkLWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LXNldC1ib3gnKTsKCQkJCSQoIiN3dC1kb3dubG9hZC1ib3giKS5hZGRDbGFzcygnaGlkLXNldC1ib3gnKQoJCQkJc2V0VGltZW91dCgoKSA9PiB7CgkJCQkJJCgiI3d0LXNldC1ib3ggLmxpbmUtYm94IikuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsKCQkJCQkkKCIjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVyIikuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQkJfSwgNTAwKQoJCQl9KQoKCQkJJCgnI3d0LXNldC1ib3ggLnVzZXItYm94LWNvbnRhaW5lciAudXNlci1ib3ggLmluZm8tYm94Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgewoJCQkJbGV0IGluZGV4ID0gJycKCQkJCXRyeSB7CgkJCQkJaW5kZXggPSBOdW1iZXIoZS5jdXJyZW50VGFyZ2V0LmF0dHJpYnV0ZXNbJ2RhdGEtaW5kZXgnXS52YWx1ZSkKCQkJCX0gY2F0Y2ggKGUpIHt9CgkJCQlpZiAoX0NPTkZJR18uc2NyaXB0c1tpbmRleF0ubXNnKSB7CgkJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJCXRpdGxlOiBfQ09ORklHXy5zY3JpcHRzW2luZGV4XS5tc2cKCQkJCQl9KQoJCQkJCXJldHVybgoJCQkJfTsKCQkJCWlmIChpbmRleCAhPSAoX0NPTkZJR18uc2NyaXB0cy5sZW5ndGggLSAxKSkgewoJCQkJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gX0NPTkZJR18uc2NyaXB0c1tpbmRleF0udXJsICsgJy4nICsgYXRvYihfQ09ORklHXwoJCQkJCQkuZW5kTmFtZSkKCQkJCX0gZWxzZSB7CgkJCQkJd2luZG93LmxvY2F0aW9uLmhyZWYgPSBfQ09ORklHXy5zY3JpcHRzW2luZGV4XS51cmwKCQkJCX0KCQkJfSkKCgkJCSQoIiN3dC1zZXQtYm94IC5jbG9zZSIpLm9uKCJjbGljayIsICgpID0+IHsKCQkJCSQoJyN3dC1tYXNrLWJveCcpLmNsaWNrKCkKCQkJfSkKCgkJCXZpcEJveC5maW5kKCIjd3QtbXktbm90aWZ5Iikub24oImNsaWNrIiwgKCkgPT4gewoJCQkJaWYgKF9DT05GSUdfLnNob3dOb3RpZnkpIHsKCQkJCQkkKCcjd3Qtbm90aWZ5LWJveCcpLmNsaWNrKCkKCQkJCX0gZWxzZSB7CgkJCQkJY29uc3Qgbm90aWZ5ID0gR01fZ2V0VmFsdWUoJ2hhaWppYW9fbm90aWZ5JywgJycpOwoJCQkJCWlmIChub3RpZnkgJiYgKG5vdGlmeS5kYXRlID09IG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCkpKSB7CgkJCQkJCXV0aWwuc2hvd05vdGlmeSh7CgkJCQkJCQl0aXRsZTogbm90aWZ5Lm1zZwoJCQkJCQl9KQoJCQkJCX0gZWxzZSB7CgkJCQkJCXV0aWwuc2hvd05vdGlmeSh7CgkJCQkJCQl0aXRsZTogJ+i/mOayoeaciemAmuefpeS/oeaBrycKCQkJCQkJfSkKCQkJCQl9OwoJCQkJCXV0aWwuc2hvd0FuZEhpZFRpcHMoJ3d0X215X25vdGlmeV9oYWlqaWFvJywgJ3NldCcsIGZhbHNlKQoJCQkJfQoJCQl9KQoKCQkJbGV0IHRpcHMgPSBHTV9nZXRWYWx1ZSgnd3RfdGlwcycpCgkJCWlmICghdGlwcykgdGlwcyA9IHt9CgkJCWZvciAobGV0IGkgaW4gdGlwcykgewoJCQkJaWYgKHRpcHNbaV0pICQoJy4nICsgaSkuYWRkQ2xhc3MoJ3RpcHMteXVhbicpCgkJCX0KCQkJaWYgKCEoJ3d0X215X2hhaWppYW8nIGluIHRpcHMpKSB1dGlsLnNob3dBbmRIaWRUaXBzKCd3dF9teV9oYWlqaWFvJykKCQkJaWYgKCEoJ3d0X215X2Rvd25faGFpamlhbycgaW4gdGlwcykpIHV0aWwuc2hvd0FuZEhpZFRpcHMoJ3d0X215X2Rvd25faGFpamlhbycpCgkJCWlmICghX0NPTkZJR18udXNlcikgewoJCQkJdXRpbC5hZGRMb2dpbigpCgkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcjd3QtbXknKS50aGVuKHJlcyA9PnsKCQkJCQlzZXRUaW1lb3V0KCgpPT57CgkJCQkJCXJlcy5jbGljaygpCgkJCQkJfSwyNTAwKQoJCQkJfSkKCQkJfQoJCX0KCX0KCglyZXR1cm4gewoJCXN0YXJ0OiAoKSA9PiB7CgkJCWlmKGxvY2F0aW9uLmhvc3QgPT0gJ2hqZWRkLmNvbScpIGxvY2F0aW9uLmhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKCdoamVkZC5jb20nLCdoamVkZC50b3AnKQoJCQlpZiAod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09ICdoamVkZC50b3AnKSBfQ09ORklHXy5oamVkZCA9IHRydWUKCQkJY29uc3Qgd3RfaGFpamlhb19maXJzdF91c2UgPSBHTV9nZXRWYWx1ZSgnd3RfaGFpamlhb19maXJzdF91c2UnLCAnJykKCQkJaWYgKCF3dF9oYWlqaWFvX2ZpcnN0X3VzZSkgR01fc2V0VmFsdWUoJ3d0X2hhaWppYW9fZmlyc3RfdXNlJywgRGF0ZS5ub3coKSArIChNYXRoLnJvdW5kKE1hdGgKCQkJCS5yYW5kb20oKSAqIDg5OTk5OSArIDEwMDAwMCkgKyAnJykpCgkJCV9DT05GSUdfLnVzZXIgPSBHTV9nZXRWYWx1ZSgnanN4bF91c2VyJywgJycpCgkJCWlmIChfQ09ORklHXy51c2VyKSB7CgkJCQlpZiAoX0NPTkZJR18udXNlci5sb2dpbl9kYXRlICYmIChfQ09ORklHXy51c2VyLmxvZ2luX2RhdGUgIT0gbmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLAoJCQkJCQkwKSkpIHsKCQkJCQlfQ09ORklHXy51c2VyID0gJycKCQkJCQlHTV9zZXRWYWx1ZSgnanN4bF91c2VyJywgJycpCgkJCQl9CgkJCX0KCQkJY29uc3QgdG9rZW5zID0gZG9jdW1lbnQuY29va2llCgkJCWlmKHRva2Vucyl7CgkJCQl0b2tlbnMuc3BsaXQoJzsnKS5mb3JFYWNoKGl0ZW0gPT57CgkJCQkJY29uc3QgYXJyID0gaXRlbS5zcGxpdCgnPScpCgkJCQkJaWYoYXJyLmxlbmd0aCA+IDEgJiYgKGFyclswXS5yZXBsYWNlKC9ccyovZywiIikgPT0gJ3VpZCcgfHwgYXJyWzBdLnJlcGxhY2UoL1xzKi9nLCIiKSA9PSAndG9rZW4nKSl7CgkJCQkJCWRvY3VtZW50LmNvb2tpZSA9IGFyclswXS5yZXBsYWNlKC9ccyovZywiIikgKyAnPScgKyBhcnJbMV0ucmVwbGFjZSgvXHMqL2csIiIpICsnO3BhdGg9LztleHBpcmVzPScgKyBuZXcgRGF0ZShEYXRlLm5vdygpICsgMTI5NjAwMDAwMCkudG9HTVRTdHJpbmcoKQoJCQkJCQlzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGFyclswXS5yZXBsYWNlKC9ccyovZywiIiksYXJyWzFdLnJlcGxhY2UoL1xzKi9nLCIiKSkKCQkJCQl9CgkJCQl9KQoJCQl9CgkJCW5ldyBCYXNlQ29uc3VtZXIoKS5wYXJzZSgpCgkJfSwKCQlfQ09ORklHXwoJfQp9KSgpOwoKKGZ1bmN0aW9uKCl7Cgl1bnNhZmVXaW5kb3cud3RfaGFpamlhb19zY3JpcHQgPSB0cnVlCglpZihsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCd0b29scy5idWdzY2FuZXIuY29tJykpewoJCXV0aWwuZmluZFRhcmdldEVsZW1lbnQoJy5pbnB1dC1ncm91cCBpbnB1dCcpLnRoZW4ocmVzID0+ewoJCQljb25zdCB1cmwgPSBsb2NhdGlvbi5zZWFyY2gucmVwbGFjZSgnP20zdTg9JywnJykucmVwbGFjZSgvXHMqL2csIiIpCgkJCWlmKHVybCAmJiB1cmwuc3RhcnRzV2l0aCgnaHR0cCcpKXsKCQkJCSQocmVzKS52YWwodXJsKQoJCQl9CgkJfSkKCQlyZXR1cm4KCX0KCWlmKGxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ3Rvb2xzLnRoYXR3aW5kLmNvbScpKXsKCQlHTV9hZGRTdHlsZShgLnRvcC1hZHtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fWApCgkJdXRpbC5maW5kVGFyZ2V0RWxlbWVudCgnLmJ4LS10ZXh0LWlucHV0X19maWVsZC1vdXRlci13cmFwcGVyIGlucHV0JywxMCkudGhlbihyZXMgPT57CgkJCSQocmVzKS52YWwoRGF0ZS5ub3coKSkKCQkJcmVzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJpbnB1dCIpKQoJCX0pCgkJcmV0dXJuCgl9CglpZihsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdibG9nLmx1Y2tseS1tancuY24nKSl7CgkJR01fYWRkU3R5bGUoYAoJCQkjbS1hcHAgYSwubS1wLXRlbXAtdXJsLC5tLXAtY3Jvc3MsLm0tcC1pbnB1dC1jb250YWluZXIgZGl2Om50aC1vZi10eXBlKDEpe2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt9CgkJCS5tLXAtaW5wdXQtY29udGFpbmVyeyBkaXNwbGF5OiBibG9jazt9CgkJCS5tLXAtaW5wdXQtY29udGFpbmVyIGlucHV0eyB3aWR0aDogMTAwJTtmb250LXNpemU6IDEycHg7bWFyZ2luLWJvdHRvbTogNXB4O30KCQkJLm0tcC1pbnB1dC1jb250YWluZXIgZGl2eyBoZWlnaHQ6IDQ1cHg7bGluZS1oZWlnaHQ6IDQ1cHg7Zm9udC1zaXplOiAxNXB4O21hcmdpbi10b3A6IDNweDt9CgkJCS5tLXAtc3RyZWFte2xpbmUtaGVpZ2h0OiBub3JtYWw7Zm9udC1zaXplOiAxMnB4O30KCQlgKQoJCXJldHVybgoJfQoJY29uc3Qgb2xkYWRkID0gRXZlbnRUYXJnZXQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIKCWNvbnN0IHBsYXllckNsaWNrcyA9IFsnc2hvdy12aWRlby1ib3gnLCd2aWRlby11cmwtbGlzdC1idG4nLCdub3ZkZWRpbyddCgljb25zdCBwbGF5ZXJPYmogPSB7IHBjVXJsQ29udGFpbmVyOiAnLnZpZGVvLWRpdi1idG4nLG1vVXJsQ29udGFpbmVyOiAnLnNob3ctdmlkZW8tYm94JyxwY1BsYXllckNvbnRhaW5lcjogJy5ub3ZkZWRpbycsbW9QbGF5ZXJDb250YWluZXI6ICcuc2hvdy12aWRlby1ib3gnfQoJRXZlbnRUYXJnZXQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24gKC4uLmFyZ3MpewoJCWlmKGFyZ3NbMF0gPT0gJ2NsaWNrJyl7CgkJCWlmKHBsYXllckNsaWNrcy5pbmNsdWRlcyh0aGlzLmNsYXNzTmFtZSkpewoJCQkJdHJ5ewoJCQkJCWxldCB1cmwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBsYXllck9iai5tb1VybENvbnRhaW5lcisnLCcrcGxheWVyT2JqLnBjVXJsQ29udGFpbmVyKS5kYXRhc2V0LnVybAoJCQkJCWlmKCF1cmwgJiYgc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwpIHVybCA9IHN1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsCgkJCQkJaWYodXJsICYmICFzdXBlclZpcC5fQ09ORklHXy52aWRlb1VybCkgc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwgPSB1cmwKCQkJCQljb25zdCBwbGF5ZXIgPSBmdW5jdGlvbihlKXsKCQkJCQkJaWYoc3VwZXJWaXAuX0NPTkZJR18uaXNNb2JpbGUgJiYgc3VwZXJWaXAuX0NPTkZJR18uaXNNb2JpbGVbMF0gPT0gJ2lQaG9uZScpewoJCQkJCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcihwbGF5ZXJPYmoubW9VcmxDb250YWluZXIrJywnK3BsYXllck9iai5wY1VybENvbnRhaW5lcikub3V0ZXJIVE1MID0gYDxkaXY+PGRpdiBjbGFzcz0iJHtwbGF5ZXJPYmoubW9VcmxDb250YWluZXIucmVwbGFjZSgnLicsJycpICsgJyAnICsgcGxheWVyT2JqLnBjVXJsQ29udGFpbmVyLnJlcGxhY2UoJy4nLCcnKX0iPjwvZGl2PjwvZGl2PmAKCQkJCQkJCUdNX2FkZFN0eWxlKGAKCQkJCQkJCQkke3BsYXllck9iai5tb1BsYXllckNvbnRhaW5lcn0gLmRwbGF5ZXItYmFyLXdyYXB7Ym90dG9tOiA2MHB4ICFpbXBvcnRhbnQ7fQoJCQkJCQkJCSR7cGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyfSAuZHBsYXllci1iYXJ7cG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7dG9wOiAwcHggIWltcG9ydGFudDt9CgkJCQkJCQkJJHtwbGF5ZXJPYmoubW9QbGF5ZXJDb250YWluZXJ9IHN2Z3twb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA1MCU7IGxlZnQ6IDUwJTsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7IHdpZHRoOiAyNXB4OyBoZWlnaHQ6IDI1cHg7fQoJCQkJCQkJCSR7cGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyfSAuZHBsYXllci1jb250cm9sbGVye3BhZGRpbmc6IDAgMTBweCAhaW1wb3J0YW50O2JvdHRvbTogMTBweCAhaW1wb3J0YW50O30KCQkJCQkJCQkke3BsYXllck9iai5tb1BsYXllckNvbnRhaW5lcn0gLmRwbGF5ZXItaWNvbnMtbGVmdHtkaXNwbGF5OiBmbGV4O2hlaWdodDogMTAwJSAhaW1wb3J0YW50O30KCQkJCQkJCQkke3BsYXllck9iai5tb1BsYXllckNvbnRhaW5lcn0gLmRwbGF5ZXItaWNvbnMtbGVmdCAuZHBsYXllci1wbGF5LWljb257cG9zaXRpb246IHJlbGF0aXZlO30KCQkJCQkJCQkke3BsYXllck9iai5tb1BsYXllckNvbnRhaW5lcn0gLmRwbGF5ZXItaWNvbnMtbGVmdCAuZHBsYXllci10aW1le3doaXRlLXNwYWNlOiBpbml0aWFsICFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6IDIwcHg7fQoJCQkJCQkJCSR7cGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyfSAuZHBsYXllci1pY29ucy1yaWdodHtkaXNwbGF5OiBmbGV4O2hlaWdodDogMTAwJSAhaW1wb3J0YW50O3JpZ2h0OiA2MHB4ICFpbXBvcnRhbnQ7fQoJCQkJCQkJCSR7cGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyfSAuZHBsYXllci1pY29ucy1yaWdodCAuZHBsYXllci1zZXR0aW5ne3Bvc2l0aW9uOiByZWxhdGl2ZTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi1yaWdodDogMTVweDt9CgkJCQkJCQkJJHtwbGF5ZXJPYmoubW9QbGF5ZXJDb250YWluZXJ9IC5kcGxheWVyLWljb25zLXJpZ2h0IC5kcGxheWVyLXNldHRpbmcgLmRwbGF5ZXItc2V0dGluZy1pY29ue3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDA7bGVmdDogMDt9CgkJCQkJCQkJJHtwbGF5ZXJPYmoubW9QbGF5ZXJDb250YWluZXJ9IC5kcGxheWVyLWljb25zLXJpZ2h0IC5kcGxheWVyLWZ1bGx7cG9zaXRpb246IHJlbGF0aXZlO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7fQoJCQkJCQkJCSR7cGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyfSAuZHBsYXllci1pY29ucy1yaWdodCAuZHBsYXllci1mdWxsIC5kcGxheWVyLWZ1bGwtaW4taWNvbntwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDt0b3A6IDAgIWltcG9ydGFudDtsZWZ0OiAwICFpbXBvcnRhbnQ7fQoJCQkJCQkJCSR7cGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyfSAuZHBsYXllci1pY29ucy1yaWdodCAuZHBsYXllci1mdWxsIC5kcGxheWVyLWZ1bGwtaWNvbntwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiAwO2xlZnQ6IDU1cHg7fQoJCQkJCQkJCSR7cGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyfSAuZHBsYXllci1wbGF5ZWR7YmFja2dyb3VuZDogcmdiKDEwNywgMTcwLCAyMzcpICFpbXBvcnRhbnQ7fQoJCQkJCQkJYCkKCQkJCQkJCWNvbnN0IGhsc19kcCA9IG5ldyBEUGxheWVyKHsKCQkJCQkJCQljb250YWluZXI6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyKycsJytwbGF5ZXJPYmoucGNQbGF5ZXJDb250YWluZXIpLAoJCQkJCQkJCXNjcmVlbnNob3Q6IHRydWUsCgkJCQkJCQkJdmlkZW86IHsKCQkJCQkJCQkJdXJsCgkJCQkJCQkJfQoJCQkJCQkJfSkKCQkJCQkJCWhsc19kcC5wbGF5KCkKCQkJCQkJfWVsc2V7CgkJCQkJCQlpZihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHBsYXllci12aWRlbycpKSByZXR1cm4KCQkJCQkJCWNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihwbGF5ZXJPYmoubW9QbGF5ZXJDb250YWluZXIrJywnK3BsYXllck9iai5wY1BsYXllckNvbnRhaW5lcikub3V0ZXJIVE1MCgkJCQkJCQljb25zdCByZWdzID0gZWwubWF0Y2goLzwoW14gXSspLykKCQkJCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyKycsJytwbGF5ZXJPYmoucGNQbGF5ZXJDb250YWluZXIpLm91dGVySFRNTCA9IGVsLnJlcGxhY2UoZWwubWF0Y2goLzxbXiBdKy8pLCc8dmlkZW8nKS5yZXBsYWNlKGVsLnN1YnN0cmluZyhlbC5sZW5ndGgtKHJlZ3NbMV0ubGVuZ3RoKzEpKSwndmlkZW8+JykKCQkJCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGxheWVyT2JqLm1vUGxheWVyQ29udGFpbmVyKycsJytwbGF5ZXJPYmoucGNQbGF5ZXJDb250YWluZXIpLnNldEF0dHJpYnV0ZSgnY29udHJvbHMnLHRydWUpCgkJCQkJCQljb25zdCBwYWdlX3BsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBsYXllck9iai5tb1BsYXllckNvbnRhaW5lcisnLCcrcGxheWVyT2JqLnBjUGxheWVyQ29udGFpbmVyKQoJCQkJCQkJY29uc3QgaGxzX2RwID0gbmV3IEhscygpCgkJCQkJCQlobHNfZHAubG9hZFNvdXJjZSh1cmwpCgkJCQkJCQlobHNfZHAuYXR0YWNoTWVkaWEocGFnZV9wbGF5KQoJCQkJCQkJaGxzX2RwLm9uKEhscy5FdmVudHMuTUFOSUZFU1RfUEFSU0VELCBmdW5jdGlvbigpIHsKCQkJCQkJCQlwYWdlX3BsYXkucGxheSgpCgkJCQkJCQl9KQoJCQkJCQl9CgkJCQkJCWUuc3RvcFByb3BhZ2F0aW9uKCkKCQkJCQl9CgkJCQkJaWYodXJsKXsKCQkJCQkJdXRpbC5maW5kVGFyZ2V0RWxlbWVudChwbGF5ZXJPYmoubW9VcmxDb250YWluZXIpLnRoZW4ocmVzID0+ewoJCQkJCQkJJChyZXMpLmFwcGVuZChgPGRpdiBjbGFzcz0icGxheWVyX21hc2tfd3QiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDt6LWluZGV4OjEiPjwvZGl2PmApCgkJCQkJCQkkKCcucGxheWVyX21hc2tfd3QnKS5vbignY2xpY2snLHBsYXllcikKCQkJCQkJfSkKCQkJCQkJYXJnc1sxXSA9IHBsYXllcgoJCQkJCX0KCQkJCX1jYXRjaChlKXsKCQkJCQlhcmdzWzFdID0gZnVuY3Rpb24oKXsKCQkJCQkJdXRpbC5zaG93VGlwcyh7IHRpdGxlOiAn5Yqg6L295aSx6LSl77yM6K+35Yi35paw5YaN6K+VJ30pCgkJCQkJfQoJCQkJfQoJCQl9CgkJCWlmKHRoaXMuY2xhc3NOYW1lID09ICdsb2dpbi1idG4nIHx8IHRoaXMuY2xhc3NOYW1lID09ICdlbC1idXR0b24gbG9naW4tZm9ybS1idXR0b24gZWwtYnV0dG9uLS1wcmltYXJ5Jyl7CgkJCQljb25zdCB1c2VyID0gR01fZ2V0VmFsdWUoJ2hhaWppYW9fdXNlcnB3ZCcsJycpCgkJCQlpZih1c2VyKXsKCQkJCQljb25zdCBlID0gbmV3IEV2ZW50KCJpbnB1dCIpCgkJCQkJdXRpbC5maW5kVGFyZ2V0RWxlbWVudCgnaW5wdXRbcGxhY2Vob2xkZXI9Iuivt+i+k+WFpeeUqOaIt+WQjS/pgq7nrrEiXSxpbnB1dFtwbGFjZWhvbGRlcj0i6K+36L6T5YWl55So5oi35ZCNIl0nKS50aGVuKHJlcyA9PnsKCQkJCQkJJChyZXMpLnZhbCh1c2VyLnVzZXJuYW1lKQoJCQkJCQlyZXMuZGlzcGF0Y2hFdmVudChlKQoJCQkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCdpbnB1dFt0eXBlPSJwYXNzd29yZCJdJykudGhlbihyZXMgPT57CgkJCQkJCQkkKHJlcykudmFsKHVzZXIucHdkKQoJCQkJCQkJcmVzLmRpc3BhdGNoRXZlbnQoZSkKCQkJCQkJfSkKCQkJCQl9KQoJCQkJfQoJCQl9CgkJfQoJCW9sZGFkZC5jYWxsKHRoaXMsLi4uYXJncykKCX0KCXN1cGVyVmlwLnN0YXJ0KCk7Cn0pKCk7
Add Comment
Please, Sign In to add comment