xiaomianao666

插件名:global_666

Dec 27th, 2023
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_666@base64://Ly89PVVzZXJTY3JpcHQ9PQovLyBAbmFtZSAgICAgICAgICAgICAg5rW36KeS56S+5Yy6Ci8vIEBob21lcGFnZSAgICAgICAgICBodHRwOi8vanN4bC5wcm8KLy8gQHZlcnNpb24gICAgICAgICAgIDIuMi4xCi8vIEB1cGRhdGVEZXNjICAgICAgICDmlK/mjIHlhY3nmbvlvZXop6PmnpDmkq3mlL7op4bpopEo5peg6ZyA5rGC5Y+v5LiN5pu05pawKQovLyBAZGVzY3JpcHRpb24gICAgICAg8J+UpeWFjei0ueeci+S7mOi0ueinhumike+8jOafpeeci+Wwgeemgei0puWPt+S4u+mhteW4luWtkO+8jOS4i+i9veinhumike+8jOWkjeWItuaSreaUvumTvuaOpe+8jOS/neWtmOi0puWPt+WvhueggeWFjei+k+WFpe+8jOW4luWtkOaYr+WQpuacieinhumikeWbvueJh+aPkOekuijmoIfpopjliY3nvIAp77yM6Ieq5Yqo5bGV5byA5biW5a2Q77yM5Y675bm/5ZGK77yM5qCH6K+GCi8vIEBpY29uICAgICAgICAgICAgICBodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nby9oYWlqaWFvLnBuZwovLyBAbmFtZXNwYWNlICAgICAgICAg5rW36KeS56S+5Yy6Ci8vIEBhdXRob3IgICAgICAgICAgICB3dAovLyBAaW5jbHVkZSAgICAgICAgICAgKjovLyouaGFpKi4qLyoKLy8gQGluY2x1ZGUgICAgICAgICAgICo6Ly9oYWkqLiovKgovLyBAaW5jbHVkZSAgICAgICAgICAgKjovL2hqKi4qLyoKLy8gQGluY2x1ZGUgICAgICAgICAgIC9wb3N0L2RldGFpbHMvCi8vIEBpbmNsdWRlCQkJICAqOi8vYmxvZy5sdWNrbHktbWp3LmNuLyoKLy8gQGluY2x1ZGUJCSAgICAgICo6Ly90b29scy50aGF0d2luZC5jb20vKgovLyBAaW5jbHVkZQkJCSAgKjovL3Rvb2xzLmJ1Z3NjYW5lci5jb20vKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovLyovcG9zdC9kZXRhaWxzKgovLyBAcmVxdWlyZSAgICAgICAgICAgaHR0cHM6Ly9jZG4uYm9vdGNkbi5uZXQvYWpheC9saWJzL2pxdWVyeS8zLjIuMS9qcXVlcnkubWluLmpzP2lkPTEKLy8gQHJlcXVpcmUJCQkgIGh0dHBzOi8vcmVzZXQtemZmLm9zcy1jbi1jaGVuZ2R1LmFsaXl1bmNzLmNvbS9qcy9tZDUvY29kZS5qcz9pZD1vaXVoa3Voa3V4eHNyZXdyeHMKLy8gQHJlcXVpcmUJCQkgIGh0dHBzOi8vbGliLmJhb21pdHUuY29tL2hscy5qcy8wLjE1LjAtYWxwaGEuMi9obHMubWluLmpzP2lkPTEKLy8gQHJlcXVpcmUJCQkgIGh0dHBzOi8vbGliLmJhb21pdHUuY29tL2RwbGF5ZXIvMS4yNS4wL0RQbGF5ZXIubWluLmpzCi8vIEBjb25uZWN0CQkJICByZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tCi8vIEBjb25uZWN0CQkJICBmYy1tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIubmV4dC5ic3BhcHAuY29tCi8vIEBydW4tYXQgCQkJICBkb2N1bWVudC1zdGFydAovLyBAZ3JhbnQgICAgICAgICAgICAgdW5zYWZlV2luZG93Ci8vIEBncmFudCAgICAgICAgICAgICBHTV9hZGRTdHlsZQovLyBAZ3JhbnQgICAgICAgICAgICAgR01fb3BlbkluVGFiCi8vIEBncmFudCAgICAgICAgICAgICBHTV9nZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgICAgICAgR01fc2V0VmFsdWUKLy8gQGdyYW50IAkJCSAgR01fZ2V0UmVzb3VyY2VUZXh0Ci8vIEBncmFudCAgICAgICAgICAgICBHTV94bWxodHRwUmVxdWVzdAovLyBAY2hhcnNldAkJICAgICAgVVRGLTgKLy8gQGxpY2Vuc2UgICAgICAgICAgIE1JVAovLyA9PS9Vc2VyU2NyaXB0PT0JCQkJCgkJCQkKY29uc3QgdXRpbCA9IHsJCgljb3B5VGV4dDogKHRleHQpID0+IHsKCQlpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiB3aW5kb3cuaXNTZWN1cmVDb250ZXh0KSB7CgkJCXJldHVybiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KQoJCX0gZWxzZSB7CgkJCWlmICghZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKSkgcmV0dXJuIFByb21pc2UucmVqZWN0KCkKCQkJY29uc3QgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpCgkJCXRleHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJwoJCQl0ZXh0QXJlYS5zdHlsZS50b3AgPSB0ZXh0QXJlYS5zdHlsZS5sZWZ0ID0gJy0xMDB2aCcKCQkJdGV4dEFyZWEuc3R5bGUub3BhY2l0eSA9ICcwJwoJCQl0ZXh0QXJlYS52YWx1ZSA9IHRleHQKCQkJZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSkKCQkJdGV4dEFyZWEuZm9jdXMoKQoJCQl0ZXh0QXJlYS5zZWxlY3QoKQoJCQlyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewoJCQkJZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKSA/IHJlc29sdmUoKSA6IHJlamVjdCgpCgkJCQl0ZXh0QXJlYS5yZW1vdmUoKQoJCQl9KQoJCX0KCX0sCgoJc2hvd0FuZEhpZFRpcHM6IChuYW1lLCBvcCA9ICdzZXQnLCB2YWwgPSB0cnVlKSA9PiB7CgkJbGV0IHRpcHMgPSBHTV9nZXRWYWx1ZSgnd3RfdGlwcycsIHt9KQoJCWlmICghdGlwcykgdGlwcyA9IHt9CgkJaWYgKG9wID09ICdzZXQnKSB7CgkJCXRpcHNbbmFtZV0gPSB2YWwKCQkJR01fc2V0VmFsdWUoJ3d0X3RpcHMnLCB0aXBzKQoJCQlpZiAodmFsKSAkKCcuJyArIG5hbWUpLmFkZENsYXNzKCd0aXBzLXl1YW4nKQoJCQllbHNlICQoJy4nICsgbmFtZSkucmVtb3ZlQ2xhc3MoJ3RpcHMteXVhbicpCgkJCXJldHVybiB0cnVlCgkJfSBlbHNlIHsKCQkJcmV0dXJuIHRpcHNbbmFtZV0gPyB0cnVlIDogZmFsc2UKCQl9Cgl9LAoKCWFkZExvZ2luOiAoKSA9PiB7CgkJaWYgKCQoJyN3dC1sb2dpbi1ib3gnKS5sZW5ndGggPiAwKSByZXR1cm47CgkJJCgnYm9keScpLmFwcGVuZChgCgkJCTxkaXYgaWQ9Ind0LWxvZ2luLW1hc2siPjwvZGl2PgoJCQk8ZGl2IGlkPSJ3dC1sb2dpbi1ib3giPgoJCQkJPGRpdiBjbGFzcz0ibG9nbyI+CgkJCQkJPHA+JHt1dGlsLmRlY29hdCgnSlRRd2FIUjBjSE1sTTBFbE1rWWxNa1pxYzNoc0xuQnlidz09Jyl9PC9wPgoJCQkJCTxwPnYgJHtzdXBlclZpcC5fQ09ORklHXy52ZXJzaW9ufTwvcD4KCQkJCTwvZGl2PgoJCQkJPGRpdiBjbGFzcz0iY2xvc2UiPjwvZGl2PgoJCQkJPGRpdiBjbGFzcz0idGl0bGUiPueZu+W9leeggTwvZGl2PgoJCQkJPGRpdiBjbGFzcz0iaW5wdXQtYm94Ij4KCQkJCQk8aW5wdXQgcGxhY2Vob2xkZXI9IueZu+W9leWQjuiEmuacrOeUn+aViCIvPgoJCQkJCTxkaXYgY2xhc3M9ImxvZ2luLWJ0biI+CgkJCQkJCTxidXR0b24+55m75b2VPC9idXR0b24+CgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9InRvLWluZGV4IiBzdHlsZT0iY29sb3I6ICM5MjAzMzQ7dGV4dC1hbGlnbjogcmlnaHQ7bWFyZ2luLXJpZ2h0OiA0cHg7IGhlaWdodDogNTBweDtsaW5lLWhlaWdodDogNjBweDtmb250LXNpemU6IDExcHg7Ij7ljrvojrflj5Yg77yfPC9kaXY+CgkJCTwvZGl2PgoJCWApCgkJR01fYWRkU3R5bGUoYAoJCQkjd3QtbG9naW4tbWFza3sgZGlzcGxheTogbm9uZTtwb3NpdGlvbjogZml4ZWQ7dG9wOiAwO2xlZnQ6IDA7cmlnaHQ6IDA7Ym90dG9tOiAwO3otaW5kZXg6IDExMDAwO2JhY2tncm91bmQtY29sb3I6ICMwMDAwMDA0ZDt9CgkJCSN3dC1sb2dpbi1ib3h7cG9zaXRpb246IGZpeGVkO21hcmdpbi10b3A6IDMlO3RvcDogNTAlO2xlZnQ6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApO292ZXJmbG93OiBoaWRkZW47YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7cGFkZGluZzogMzBweCAxMHB4O3BhZGRpbmctYm90dG9tOiAwO2JvcmRlci1yYWRpdXM6IDEwcHg7ei1pbmRleDogMTEwMTA7fQoJCQkjd3QtbG9naW4tYm94OjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDI1MHB4O2hlaWdodDogMjUwcHg7Ym9yZGVyLXJhZGl1czogMjAwcHg7YmFja2dyb3VuZC1jb2xvcjogI0U5MUU2Mzt6LWluZGV4OiAtMTtvcGFjaXR5OiAwLjc7Ym90dG9tOiAxMTBweDtyaWdodDogMTAwcHg7fQoJCQkjd3QtbG9naW4tYm94OjphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMjUwcHg7aGVpZ2h0OiAyNTBweDtib3JkZXItcmFkaXVzOiAyMDBweDtiYWNrZ3JvdW5kLWNvbG9yOiAjMjE5NkYzO3otaW5kZXg6IC0xO29wYWNpdHk6IDAuNzt0b3A6IDExNXB4O3JpZ2h0OiAtMTEycHg7fQoJCQkjd3QtbG9naW4tYm94IC5jbG9zZXtwb3NpdGlvbjogYWJzb2x1dGU7cmlnaHQ6IDBweDt0b3A6IDBweDt3aWR0aDogNDBweDtoZWlnaHQ6IDQwcHg7fQoJCQkjd3QtbG9naW4tYm94IC5jbG9zZTo6YmVmb3JlLCN3dC1sb2dpbi1ib3ggLmNsb3NlOjphZnRlcntwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogNTAlO3RvcDogNTAlO2NvbnRlbnQ6ICcnO3dpZHRoOiAxNnB4O2hlaWdodDogMnB4O2JvcmRlci1yYWRpdXM6IDFweDtiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKDQ1ZGVnKTt9CgkJCSN3dC1sb2dpbi1ib3ggLmNsb3NlOjphZnRlciwjd3Qtc2V0LWJveCAuY2xvc2U6OmFmdGVye3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKC00NWRlZyk7fQoJCQkjd3QtbG9naW4tYm94IC50aXRsZXtmb250LXdlaWdodDogNjAwO2ZvbnQtc2l6ZTogMTZweDtjb2xvcjogIzNhM2EzYTt0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luLWJvdHRvbTogMjBweDt9CgkJCSN3dC1sb2dpbi1ib3ggLmlucHV0LWJveHtkaXNwbGF5OiBmbGV4O2JhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7d2lkdGg6IDIzMHB4O2hlaWdodDogMzVweDtib3JkZXItcmFkaXVzOiAzMHB4O292ZXJmbG93OiBoaWRkZW47Zm9udC1zaXplOiAxMnB4O30KCQkJI3d0LWxvZ2luLWJveCAuaW5wdXQtYm94IGlucHV0e3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTtwYWRkaW5nLWxlZnQ6IDE1cHg7Ym94LXNpemluZzogYm9yZGVyLWJveDtvdXRsaW5lOiBub25lO2JvcmRlcjogbm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O2ZvbnQtc2l6ZTogMTBweDtjb2xvcjogYmxhY2s7fQoJCQkjd3QtbG9naW4tYm94IC5sb2dpbi1idG57d2lkdGg6IDEwMHB4O3BhZGRpbmc6IDJweDt9CgkJCSN3dC1sb2dpbi1ib3ggLmxvZ2luLWJ0biBidXR0b257d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO2JvcmRlci1yYWRpdXM6IDMwcHg7Ym9yZGVyOiBub25lO2NvbG9yOiB3aGl0ZTt0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO2JhY2tncm91bmQtY29sb3I6ICNlYzQwN2E7fQoJCQkjd3QtbG9naW4tYm94IC5sb2dve3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDklO2xlZnQ6IDElOyBjb2xvcjogI2RiZGJkYjsgZm9udC1zaXplOiAxMXB4O3RyYW5zZm9ybTogcm90YXRlKC0xNWRlZyk7dGV4dC1hbGlnbjogY2VudGVyO30KCQlgKQoJCSQoIiN3dC1sb2dpbi1tYXNrIikub24oImNsaWNrIiwgKCkgPT4gewoJCQkkKCcjd3QtbG9naW4tbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJJCgiI3d0LWxvZ2luLWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LXNldC1ib3gnKQoJCQkkKCIjd3QtbG9naW4tYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94JykKCQl9KQoJCSQoIiN3dC1sb2dpbi1ib3ggLmNsb3NlIikub24oImNsaWNrIiwgKCkgPT4gewoJCQkkKCcjd3QtbG9naW4tbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJJCgiI3d0LWxvZ2luLWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LXNldC1ib3gnKQoJCQkkKCIjd3QtbG9naW4tYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94JykKCQl9KQoJCSQoIiN3dC1sb2dpbi1ib3ggLnRvLWluZGV4Iikub24oImNsaWNrIiwgKCkgPT4gewoJCQl3aW5kb3cub3BlbihzdXBlclZpcC5fQ09ORklHXy5ob21lUGFnZSkKCQl9KQoJCSQoIiN3dC1sb2dpbi1ib3ggLmxvZ2luLWJ0biBidXR0b24iKS5vbigiY2xpY2siLCAoKSA9PiB7CgkJCWlmICghd3RfaW5pdF9jb2RlKSB7CgkJCQl1dGlsLnNob3dUaXBzKHsKCQkJCQl0aXRsZTogX0NPTkZJR18uaW5pdEZhaWxNc2cKCQkJCX0pOwoJCQkJcmV0dXJuCgkJCX0KCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykKCQkJJCgiI3d0LWxvZ2luLWJveCAubG9naW4tYnRuIGJ1dHRvbiIpLmFkZENsYXNzKCdidG4tYW5pbWEnKQoJCQlzZXRUaW1lb3V0KCgpID0+IHsKCQkJCSQoIiN3dC1sb2dpbi1ib3ggLmxvZ2luLWJ0biBidXR0b24iKS5yZW1vdmVDbGFzcygnYnRuLWFuaW1hJykKCQkJfSwgNTAwKQoJCQljb25zdCBwd2QgPSAkKCIjd3QtbG9naW4tYm94IGlucHV0IikudmFsKCkKCQkJY29uc3QgbWQ1YyA9IG1kNXgoKQoJCQljb25zdCBkbWQ1ID0gbWQ1eChtZDVjLCAnZGUnKQoJCQlpZiAoIXB3ZCB8fCBwd2QgIT0gZG1kNS5jb2RlKSB7CgkJCQlzZXRUaW1lb3V0KCgpID0+IHsKCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJCXRpdGxlOiB1dGlsLmRlY29hdCgnSlVVMycgKyAnSlRrNUpVSkNKVVUxSlVKRUpUazFKVVUzSlVFd0pUZ3hKVVU1SlRrMEpUazVKVVU0SlVGR0pVRkcnKQoJCQkJCX0pCgkJCQl9LCAyNTAwKQoJCQkJcmV0dXJuCgkJCX0KCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykKCQkJc2V0VGltZW91dCgoKSA9PiB7CgkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQl1dGlsLnNob3dUaXBzKHsgdGl0bGU6IHV0aWwuZGVjb2F0KCdKVVU0SlRnMEpUJyArICdsQkpVVTJKVGxESlVGREpVVTRKVUV5SlVGQ0pVVTFKVGd3SlRreUpVVTFKVGhFSlRrMkpVVTBKVUk0SlVFMUpVVTVKVGczSlRoRUpVVkdKVUpESlRoREpVVTFKVGswSlVGR0pVVTBKVUk0SlRnd0pVVTRKVGhGSlVJM0pVVTFKVGhHSlRrMkpVVTRKVGcwSlRsQkpVVTJKVGxESlVGREpVVTNKVUpFSlRreEpVVTNKVUZDSlRrNWFIUjBjSE1sTTBFbE1rWWxNa1pxYzNoc0xuQnlieVZGUmlWQ1F5VTRReVZGTlNVNE5TVkNOaVZGTlNWQlJTVTRNeVZGTnlWQ1JDVTVNU1ZGTnlWQlFpVTVPU1ZGTlNVNVJDVTROeVZGTkNWQ09DVkNRU1ZGTlNVNE1DVTVNaVZGTlNVNFJDVTVOaVZGUmlWQ1F5VTRReVZGTlNVNU1DVTRSU1ZGT1NVNVJDVkJNaVZGTkNWQ1F5VTVRU1ZGTlNVNE55VkNRU1ZGT0NVNE5DVTVRU1ZGTmlVNVF5VkJReVZGTnlVNU9TVkNRaVZGTlNWQ1JDVTVOU1ZGTnlWQ015VkNRaVZGTnlWQ1FpVTVSaWhxYzNoc0pVVTRKVGhGSlVJM0pVVTFKVGhHSlRrMkpVVTRKVGcwSlRsQkpVVTJKVGxESlVGREpVVTFKVUl3SlRnMkpVVTJKVGxESlRnNUpVVTNKVGs1SlVKQ0pVVTFKVUpFSlRrMUpVVTNKVUV3SlRneEpVVTRKVUkxSlRnMEpVVTJKVUV3SlVKREtTVkZSaVZDUXlVNFF5VkZPU1U1UkNVNVJTVkZOaVZCUkNWQk5DVkZOeVZDUkNVNU1TVkZOeVZCUWlVNU9TVkZOU1U0UmlVNFFTVkZOeVZDUkNVNU1TVkZOeVZCUWlVNU9TVkZPQ1U0TVNVNU5DVkZOeVZDTXlWQ1FpVkZOaVU1TmlWQ09TVkZOU1ZDUXlVNFJpVkZPQ1U0UlNWQ055VkZOU1U0UmlVNU5pVkZPU1U0TXlWQ1JDVkZOQ1ZDT0NVNFJTVkZOaVU0T0NVNU1TVkZOaVU1TnlWQk1DVkZOU1U0TlNWQ015VkZSaVZDUXlVNFF5VkZOaVU0TkNVNVJpVkZPQ1ZDTUNWQk1pVkZOaVU1TkNWQlJpVkZOaVU0UXlVNE1TVkZNJyArICd5VTRNQ1U0TWc9PScpLHN1Y2Nlc3M6IChlKT0+ewoJCQkJaWYoZSl7CgkJCQkJCWNvbnN0IHJlcyA9IHsKCQkJCQkJCWF2YXRhcjogJ2h0dHBzOi8vbXAtYWYzMDcyNjgtMWI4YS00ODJhLWI3NWEtYjZlOThiMTI1NzQyLmNkbi5ic3BhcHAuY29tL3N5c3RlbS9sb2dvL2xvZ29fd2hpdGUxLnBuZycsCgkJCQkJCQlsb2dpbl9kYXRlOiBuZXcgRGF0ZSgpLnNldEhvdXJzKDAsIDAsIDAsIDApLAoJCQkJCQkJdG9rZW46IG1kNWMKCQkJCQkJfQoJCQkJCQkkKCIjd3QtbXkgaW1nIikuYWRkQ2xhc3MoJ21hcmdpbi1sZWZ0JykKCQkJCQkJJCgnI3d0LW15IGltZycpLmF0dHIoJ3NyYycsIHJlcy5hdmF0YXIpCgkJCQkJCSQoJyN3dC1sb2dpbi1tYXNrJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQkJCQkkKCIjd3QtbG9naW4tYm94IikucmVtb3ZlQ2xhc3MoJ3Nob3ctc2V0LWJveCcpCgkJCQkJCSQoIiN3dC1sb2dpbi1ib3giKS5hZGRDbGFzcygnaGlkLXNldC1ib3gnKQoJCQkJCQlzdXBlclZpcC5fQ09ORklHXy51c2VyID0gcmVzCgkJCQkJCUdNX3NldFZhbHVlKCdqc3hsX3VzZXInLCByZXMpCgkJCQkJCXdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKQoJCQkJCX0KCQkJCX19KQoJCQl9LCAyNTAwKQoJCX0pCgl9LAoKCWplbmNvZGU6IChzLCBwbHVzKSA9PiB7CgkJcmV0dXJuIGVuY29kZShKU09OLnN0cmluZ2lmeShzLCBgdXRmLThgKSwgcGx1cyk7Cgl9LAoKCWFzeW5jSHR0cDogYXN5bmModXJsLCB0aW1lb3V0ID0gNjAwMCkgPT4gewoJICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CgkgICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgkgICAgICAgIHJlcXVlc3Qub3BlbignR0VUJywgdXJsLCB0cnVlKTsKCQkJcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKCdzaWduJywgbXlfbWQ1LmVuY29kZWUoRGF0ZS5ub3coKSkpOwoJICAgICAgICByZXF1ZXN0LnRpbWVvdXQgPSB0aW1lb3V0OwoJICAgICAgICByZXF1ZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKCSAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgPT0gNCkgewoJICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwKSB7CgkgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe21zZzogJ3N1Y2Nlc3MnLCBkYXRhOiByZXF1ZXN0LnJlc3BvbnNlVGV4dH0pOwoJICAgICAgICAgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgICAgICAgICAgIHJlamVjdCh7IG1zZzogJ2VycicsIHJlc3BvbnNlVGV4dDogJycgfSk7CgkgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgfQoJICAgICAgICB9OwoJICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CgkgICAgICAgICAgICByZWplY3QoeyBtc2c6ICdlcnInLCByZXNwb25zZVRleHQ6ICcnIH0pOwoJICAgICAgICB9OwoJICAgICAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uICgpIHsKCSAgICAgICAgICAgIHJlamVjdCh7IG1zZzogJ3RpbWVvdXQnLCByZXNwb25zZVRleHQ6ICcnIH0pOwoJICAgICAgICB9OwoJICAgICAgICByZXF1ZXN0LnNlbmQoKTsKCSAgICB9KTsKCX0sCgoJZmluZENvbW1vblN0YXJ0OiAoc3RyMSwgc3RyMikgPT57CgkgIGxldCBjb21tb24gPSAnJzsKCSAgY29uc3QgbWluTGVuZ3RoID0gTWF0aC5taW4oc3RyMS5sZW5ndGgsIHN0cjIubGVuZ3RoKTsKCSAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW5MZW5ndGg7IGkrKykgewoJICAgIGlmIChzdHIxW2ldID09PSBzdHIyW2ldKSB7CgkgICAgICBjb21tb24gKz0gc3RyMVtpXTsKCSAgICB9IGVsc2UgewoJICAgICAgYnJlYWs7CgkgICAgfQoJICB9CgkgIHJldHVybiBjb21tb247Cgl9LAoKCWZpbmRUYXJnZXRFbGVtZW50OiAodGFyZ2V0Q29udGFpbmVyLG1heFRyeVRpbWU9MzApPT4gewoJCWNvbnN0IGJvZHkgPSB3aW5kb3cuZG9jdW1lbnQ7CgkJbGV0IHRhYkNvbnRhaW5lcjsKCQlsZXQgdHJ5VGltZSA9IDA7CgkJbGV0IHN0YXJ0VGltZXN0YW1wOwoJCXJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CgkJCWZ1bmN0aW9uIHRyeUZpbmRFbGVtZW50KHRpbWVzdGFtcCkgewoJCQkJaWYgKCFzdGFydFRpbWVzdGFtcCkgewoJCQkJCXN0YXJ0VGltZXN0YW1wID0gdGltZXN0YW1wOwoJCQkJfQoJCQkJY29uc3QgZWxhcHNlZFRpbWUgPSB0aW1lc3RhbXAgLSBzdGFydFRpbWVzdGFtcDsKCQkJCWlmIChlbGFwc2VkVGltZSA+PSA1MDApIHsKCQkJCQljb25zb2xlLmxvZygiZmluZCBlbGVtZW5077yaIiArIHRhcmdldENvbnRhaW5lciArICLvvIx0aGlzIiArIHRyeVRpbWUgKyAibnVtIikKCQkJCQl0YWJDb250YWluZXIgPSBib2R5LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0Q29udGFpbmVyKQoJCQkJCWlmICh0YWJDb250YWluZXIpIHsKCQkJCQkJcmVzb2x2ZSh0YWJDb250YWluZXIpCgkJCQkJfSBlbHNlIGlmICgrK3RyeVRpbWUgPT09IG1heFRyeVRpbWUpIHsKCQkJCQkJcmVqZWN0KCkKCQkJCQl9IGVsc2UgewoJCQkJCQlzdGFydFRpbWVzdGFtcCA9IHRpbWVzdGFtcAoJCQkJCX0KCQkJCX0KCQkJCWlmICghdGFiQ29udGFpbmVyICYmIHRyeVRpbWUgPCBtYXhUcnlUaW1lKSB7CgkJCQkJcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRyeUZpbmRFbGVtZW50KTsKCQkJCX0KCQkJfQoJCQlyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodHJ5RmluZEVsZW1lbnQpOwoJCX0pOwoJfSwKCglyZXBsYWNlRXhpc3RSZXNvdXJjZXM6IChib2R5KSA9PiB7CgkJbGV0IGF0dGFjaG1lbnRzID0gYm9keS5hdHRhY2htZW50czsKCQlsZXQgYWxsX2ltZyA9IHt9OwoJCWxldCBoYXNfdmlkZW8gPSAtMTsKCQlsZXQgaGFzX2F1ZGlvID0gLTE7CgkJZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRhY2htZW50cy5sZW5ndGg7IGkrKykgewoJCQl2YXIgYXR0YSA9IGF0dGFjaG1lbnRzW2ldOwoJCQlpZiAoYXR0YS5jYXRlZ29yeSA9PT0gJ2ltYWdlcycpIHsKCQkJCWFsbF9pbWdbYXR0YS5pZF0gPSBhdHRhLnJlbW90ZVVybDsKCQkJfQoJCQlpZiAoYXR0YS5jYXRlZ29yeSA9PT0gJ2F1ZGlvJykgewoJCQkJaGFzX2F1ZGlvID0gaTsKCQkJCXJldHVybiBbYm9keSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGhhc19hdWRpb107CgkJCX0KCQkJaWYgKGF0dGEuY2F0ZWdvcnkgPT09ICd2aWRlbycpIHsKCQkJCWhhc192aWRlbyA9IGk7CgkJCQlyZXR1cm4gW2JvZHksIHVuZGVmaW5lZCwgaGFzX3ZpZGVvLCB1bmRlZmluZWRdOwoJCQl9CgkJfQoJCXJldHVybiBbYm9keSwgYWxsX2ltZywgaGFzX3ZpZGVvXTsKCX0sCgoJc2xlZXA6ICh0aW1lKSA9PiB7CgkJcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4gewoJCQlzZXRUaW1lb3V0KCgpID0+IHsKCQkJCXJlcygpCgkJCX0sIHRpbWUpCgkJfSkKCX0sCgoJZ2V0VXNlckRpY3Q6IChpZCkgPT4gewoJCXZhciB1cmwgPSBgaHR0cHM6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZX0vYXBpL3RvcGljL25vZGUvdG9waWNzP3BhZ2U9MSZ1c2VySWQ9JHtpZH0mdHlwZT0wYDsKCQl2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoJCXJlcXVlc3Qub3BlbignR0VUJywgdXJsLCBmYWxzZSk7CgkJcmVxdWVzdC5zZW5kKG51bGwpOwoJCWlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7CgkJCXJldHVybiB7fTsKCQl9CgkJbGV0IHAgPSBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0LCBgdXRmLThgKS5kYXRhOwoJCXAgPSBKU09OLnBhcnNlKGRlY29kZShwLCBzdXBlclZpcCksIGB1dGYtOGApOwoJCWxldCB0b3RhbCA9IHAucGFnZS50b3RhbDsKCQlsZXQgdWlkID0gJyc7CgkJaWYgKGByZXN1bHRzYCBpbiBwKSB7CgkJCXVpZCA9IHAucmVzdWx0c1swXS51c2VyLm5pY2tuYW1lOwoJCX0KCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkIHRpdGxlJykuaW5uZXJIVE1MID0gJyh1Keiiq+Wwgeemgei0puWPtycKCQlyZXR1cm4gewoJCQknaXNGYXZvcml0ZSc6IGZhbHNlLAoJCQknbGlrZUNvdW50JzogMTIsCgkJCSd1c2VyJzogewoJCQkJJ2lkJzogcGFyc2VJbnQoaWQpLAoJCQkJJ25pY2tuYW1lJzogJ+iiq+Wwgeemgei0puWPtycsCgkJCQknYXZhdGFyJzogJzAnLAoJCQkJJ2Rlc2NyaXB0aW9uJzogYOivpei0puWPt+W3suiiq+WwgeemgWAsCgkJCQkndG9waWNDb3VudCc6IHRvdGFsLAoJCQkJJ3ZpZGVvQ291bnQnOiAwLAoJCQkJJ2NvbW1lbnRDb3VudCc6IDMwMywKCQkJCSdmYW5zQ291bnQnOiA1NywKCQkJCSdmYXZvcml0ZUNvdW50JzogMzksCgkJCQknc3RhdHVzJzogMCwKCQkJCSdzZXgnOiAxLAoJCQkJJ3ZpcCc6IDAsCgkJCQkndmlwRXhwaXJlc1RpbWUnOiAnMDAwMS0wMS0wMSAwMDowMDowMCcsCgkJCQknY2VydGlmaWVkJzogZmFsc2UsCgkJCQknY2VydFZpZGVvJzogZmFsc2UsCgkJCQknY2VydFByb2Zlc3Nvcic6IGZhbHNlLAoJCQkJJ2ZhbW91cyc6IGZhbHNlLAoJCQkJJ2ZvcmJpZGRlbic6IGZhbHNlLAoJCQkJJ3RhZ3MnOiBudWxsLAoJCQkJJ3JvbGUnOiAwLAoJCQkJJ3BvcHVsYXJpdHknOiAxMCwKCQkJCSdkaWFtb25kQ29uc3VtZSc6IDAsCgkJCQkndGl0bGUnOiB7CgkJCQkJJ2lkJzogMCwKCQkJCQknbmFtZSc6ICcnLAoJCQkJCSdjb25zdW1lJzogMCwKCQkJCQknY29uc3VtZUVuZCc6IDAsCgkJCQkJJ2ljb24nOiBwLnJlc3VsdHNbMF0udXNlci50aXRsZS5pY29uCgkJCQl9LAoJCQkJJ2ZyaWVuZFN0YXR1cyc6IGZhbHNlLAoJCQkJJ3ZvaWNlU3RhdHVzJzogZmFsc2UsCgkJCQkndmlkZW9TdGF0dXMnOiBmYWxzZSwKCQkJCSd2b2ljZU1vbmV5VHlwZSc6IDAsCgkJCQkndm9pY2VBbW91bnQnOiAwLAoJCQkJJ3ZpZGVvTW9uZXlUeXBlJzogMCwKCQkJCSd2aWRlb0Ftb3VudCc6IDAsCgkJCQknZGVwb3NpdE1vbmV5JzogMAoJCQl9CgkJfQoJfSwKCgltb2RpZnlVc2VyOiAoZGF0YSwgaWQpID0+IHsKCQlpZiAoZGF0YS5lcnJvckNvZGUgPT09IDApIHsKCQkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkIHx8IHR5cGVvZihkYXRhLmRhdGEpID09ICdvYmplY3QnKSB7CgkJCQlzdXBlclZpcC5fQ09ORklHXy5oamVkZCA9IHRydWUKCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgdGl0bGUnKS5pbm5lckhUTUwgPSAnKHUpJyArIGRhdGEuZGF0YS51c2VyLm5pY2tuYW1lCgkJCX0gZWxzZSB7CgkJCQlsZXQgYm9keSA9ICcnCgkJCQl0cnkgewoJCQkJCWJvZHkgPSBKU09OLnBhcnNlKGRlY29kZShkYXRhLmRhdGEsIHN1cGVyVmlwKSk7CgkJCQl9IGNhdGNoIChlKSB7CgkJCQkJYm9keSA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEuZGF0YSwgc3VwZXJWaXAsIHRydWUpKTsKCQkJCX0KCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgdGl0bGUnKS5pbm5lckhUTUwgPSAnKHUpJyArIGJvZHkudXNlci5uaWNrbmFtZQoJCQl9CgkJCXJldHVybiBkYXRhOwoJCX0KCQlkYXRhLmlzRW5jcnlwdGVkID0gdHJ1ZTsKCQlkYXRhLmVycm9yQ29kZSA9IDA7CgkJZGF0YS5zdWNjZXNzID0gdHJ1ZTsKCQlkYXRhLm1lc3NhZ2UgPSAiIjsKCQlsZXQgdWRpY3QgPSB1dGlsLmdldFVzZXJEaWN0KGlkKTsKCQlkYXRhLmRhdGEgPSB1dGlsLmplbmNvZGUodWRpY3QsICdwbHVzJykKCQlyZXR1cm4gZGF0YQoJfSwKCglkZWNvYXQ6IChzKSA9PnsKCQlyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IocykpCgl9LAoKCXNob3dUaXBzOiAoaXRlbSA9IHt9KSA9PiB7CgkJJCgnI3d0LW1heGluZGV4LW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsKCQkkKCIjd3QtdGlwcy1ib3giKS5yZW1vdmVDbGFzcygnaGlkLXNldC1ib3gnKTsKCQkkKCIjd3QtdGlwcy1ib3giKS5hZGRDbGFzcygnc2hvdy1zZXQtYm94Jyk7CgkJJCgnI3d0LXRpcHMtYm94IC5idG4tYm94JykuZW1wdHkoKQoJCSQoJyN3dC10aXBzLWJveCAuYnRuLWJveCcpLmFwcGVuZChgCgkJCTxidXR0b24gY2xhc3M9J2NhbmNlbCc+5Y+W5raIPC9idXR0b24+CgkJCTxidXR0b24gY2xhc3M9J3N1Ym1pdCc+56Gu5a6aPC9idXR0b24+CgkJYCkKCQlpZiAoaXRlbS50aXRsZSkgJCgnI3d0LXRpcHMtYm94IC5jb250ZW50JykuaHRtbChpdGVtLnRpdGxlKTsKCQlpZiAoaXRlbS5kb3VidCkgJCgnI3d0LXRpcHMtYm94IC5idG4tYm94IC5jYW5jZWwnKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsKCQlpZiAoaXRlbS5jb25maXJtKSAkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3ggLnN1Ym1pdCcpLmh0bWwoaXRlbS5jb25maXJtKTsKCQlpZihpdGVtLmhpZENvbmZpcm0pewoJCQkkKCcjd3QtdGlwcy1ib3ggLnN1Ym1pdCcpLmNzcygnZGlzcGxheScsICdub25lJyk7CgkJfWVsc2V7CgkJCSQoJyN3dC10aXBzLWJveCAuc3VibWl0JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7CgkJfQoJCSQoJyN3dC10aXBzLWJveCAuYnRuLWJveCAuc3VibWl0Jykub24oJ2NsaWNrJywgKCkgPT4gewoJCQkkKCcjd3QtbWF4aW5kZXgtbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJyk7CgkJCSQoIiN3dC10aXBzLWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LXNldC1ib3gnKTsKCQkJJCgiI3d0LXRpcHMtYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94Jyk7CgkJCWlmIChpdGVtLnN1Y2Nlc3MpIGl0ZW0uc3VjY2Vzcyh0cnVlKTsKCQl9KQoJCSQoJyN3dC10aXBzLWJveCAuYnRuLWJveCAuY2FuY2VsJykub24oJ2NsaWNrJywgKCkgPT4gewoJCQkkKCcjd3QtbWF4aW5kZXgtbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJyk7CgkJCSQoIiN3dC10aXBzLWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LXNldC1ib3gnKTsKCQkJJCgiI3d0LXRpcHMtYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94Jyk7CgkJCWlmIChpdGVtLnN1Y2Nlc3MpIGl0ZW0uc3VjY2VzcyhmYWxzZSk7CgkJfSkKCX0sCgoJc2hvd0Rvd25Mb2FkV2luZG93OiAoc2hvdz10cnVlKSA9PnsKCQlpZighc2hvdyl7CgkJCSQoJyN3dC1tYXNrLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJyk7CgkJCSQoIiN3dC1kb3dubG9hZC1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94Jyk7CgkJCSQoIiN3dC1kb3dubG9hZC1ib3giKS5hZGRDbGFzcygnaGlkLXNldC1ib3gnKTsKCQkJcmV0dXJuCgkJfQoJCSQoJyN3dC1tYXNrLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpOwoJCWlmKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjd3QtZG93bmxvYWQtYm94JykpewoJCQlsZXQgaXRlbXMgPSAnJwoJCQlzdXBlclZpcC5fQ09ORklHXy5kb3duVXRpbHMuZm9yRWFjaCgoaXRlbSxpbmRleCkgPT57CgkJCQlpdGVtcyArPSBgCgkJCQkJPGxpIGNsYXNzPSJpdGVtIiBkYXRhLXVybD0iJHtpdGVtLnVybCArIChpdGVtLmlzQXBwZW5kPycnOic/bTN1OD0nKSArIChzdXBlclZpcC5fQ09ORklHXy52aWRlb1VybC51cmw/c3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwudXJsIDonJyl9Ij4ke2l0ZW0udGl0bGV9PC9saT4KCQkJCWAKCQkJfSkKCQkJJCgnYm9keScpLmFwcGVuZChgCgkJCQk8ZGl2IGlkPSJ3dC1kb3dubG9hZC1ib3giPgoJCQkJCTx2aWV3IGNsYXNzPSJjbG9zZSI+PC92aWV3PgoJCQkJCTx1bD4ke2l0ZW1zfTwvdWw+CgkJCQk8L2Rpdj4KCQkJYCkKCQl9ZWxzZXsKCQkJJCgnI3d0LWRvd25sb2FkLWJveCcpLmVtcHR5KCkKCQkJbGV0IGl0ZW1zID0gJycKCQkJc3VwZXJWaXAuX0NPTkZJR18uZG93blV0aWxzLmZvckVhY2goKGl0ZW0saW5kZXgpID0+ewoJCQkJaXRlbXMgKz0gYAoJCQkJCTxsaSBjbGFzcz0iaXRlbSIgZGF0YS11cmw9IiR7aXRlbS51cmwgKyAoaXRlbS5pc0FwcGVuZD8nJzonP20zdTg9JykgKyAoc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwudXJsP3N1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsLnVybCA6JycpfSI+JHtpdGVtLnRpdGxlfTwvbGk+CgkJCQlgCgkJCX0pCgkJCSQoJyN3dC1kb3dubG9hZC1ib3gnKS5hcHBlbmQoYDx2aWV3IGNsYXNzPSJjbG9zZSI+PC92aWV3Pjx1bD4ke2l0ZW1zfTwvdWw+YCkKCQl9CgkJJCgiI3d0LWRvd25sb2FkLWJveCIpLnJlbW92ZUNsYXNzKCdoaWQtc2V0LWJveCcpOwoJCSQoIiN3dC1kb3dubG9hZC1ib3giKS5hZGRDbGFzcygnc2hvdy1zZXQtYm94Jyk7CgkJJCgiI3d0LWRvd25sb2FkLWJveCAuaXRlbSIpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7CgkJCWNvbnN0IHVybCA9IGUudGFyZ2V0LmRhdGFzZXQudXJsCgkJCWlmKCF1cmwgfHwgIXVybC5pbmNsdWRlcygnPWh0dHAnKSl7CgkJCQl1dGlsLnNob3dUaXBzKHsKCQkJCQl0aXRsZTogJ+aKseatie+8jOacquajgOa1i+WIsOinhumike+8jOi/mOe7p+e7reWJjeW+gOWQlz8nLAoJCQkJCWRvdWJ0OiB0cnVlLAoJCQkJCXN1Y2Nlc3M6IChyZXMpPT57CgkJCQkJCWlmKHJlcyl7CgkJCQkJCQl3aW5kb3cub3Blbih1cmwpCgkJCQkJCX0KCQkJCQl9CgkJCQl9KQoJCQl9ZWxzZXsKCQkJCXdpbmRvdy5vcGVuKHVybCkKCQkJfQoJCX0pCgkJJCgiI3d0LWRvd25sb2FkLWJveCAuY2xvc2UiKS5vbignY2xpY2snLGZ1bmN0aW9uKCl7CgkJCSQoIiN3dC1tYXNrLWJveCIpLmNsaWNrKCkKCQl9KQoJfSwKCglmb3JtYXRUaXRsZTogKGRhdGEpID0+IHsKCQlpZiAoIWRhdGEpIHJldHVybiBkYXRhCgkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkIHx8IHR5cGVvZihkYXRhKSA9PSAnb2JqZWN0JykgewoJCQlzdXBlclZpcC5fQ09ORklHXy5oamVkZCA9IHRydWUKCQl9IGVsc2UgewoJCQlkYXRhID0gSlNPTi5wYXJzZShkZWNvZGUoZGF0YSwgc3VwZXJWaXApKQoJCX0KCQlpZiAoIWRhdGEgfHwgZGF0YSA9PSAnbnVsbCcpIHJldHVybiBzdXBlclZpcC5fQ09ORklHXy5oamVkZCA/ICdudWxsJyA6ICdXVzAxVjJNeVNrSlFWREE5JwoJCWlmICghZGF0YS5yZXN1bHRzKSB7CgkJCWRhdGEucmVzdWx0cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpCgkJCWRhdGEuaXNMaXN0ID0gdHJ1ZQoJCX0KCQlkYXRhLnJlc3VsdHMuZm9yRWFjaChpdGVtID0+IHsKCQkJbGV0IHR5cGVzID0gW10KCQkJaWYgKGl0ZW0uaGFzVmlkZW8gJiYgIXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkKSB0eXBlcy5wdXNoKCd2aWRlbycpCgkJCWlmIChpdGVtLmhhc0F1ZGlvICYmICFzdXBlclZpcC5fQ09ORklHXy5oamVkZCkgdHlwZXMucHVzaCgnYXVkaW8nKQoJCQlpZiAoaXRlbS5oYXNQaWMgJiYgIXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkKSB0eXBlcy5wdXNoKCdpbWcnKQoJCQlpZiAoaXRlbS5hdHRhY2htZW50cyAmJiBpdGVtLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHsKCQkJCWxldCBpbWdDb3VudCA9IDAKCQkJCWl0ZW0uYXR0YWNobWVudHMuZm9yRWFjaChpdGVtID0+IHsKCQkJCQlpZiAoaXRlbS5jYXRlZ29yeSA9PSAndmlkZW8nICYmICghdHlwZXMuaW5jbHVkZXMoJ3ZpZGVvJykpKSB0eXBlcy5wdXNoKAoJCQkJCQkndmlkZW8nKQoJCQkJCWlmIChpdGVtLmNhdGVnb3J5ID09ICdhdWRpbycgJiYgKCF0eXBlcy5pbmNsdWRlcygnYXVkaW8nKSkpIHR5cGVzLnB1c2goCgkJCQkJCSdhdWRpbycpCgkJCQkJaWYgKGl0ZW0uY2F0ZWdvcnkgPT0gJ2ltYWdlcycpIHsKCQkJCQkJaWYgKCF0eXBlcy5pbmNsdWRlcygnaW1nJykpIHR5cGVzLnB1c2goJ2ltZycpCgkJCQkJCWltZ0NvdW50KysKCQkJCQl9CgkJCQl9KQoJCQkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkICYmIChpbWdDb3VudCA+IDIpICYmICF0eXBlcy5pbmNsdWRlcygndmlkZW8nKSkgdHlwZXMKCQkJCQkucHVzaCgnPycpCgkJCX0KCQkJCgkJCXR5cGVzID0gdHlwZXMubGVuZ3RoID4gMD8gJ1snICsgdHlwZXMuam9pbignLScpIDogJ1snOwoJCQlpZignbW9uZXlfdHlwZScgaW4gaXRlbSl7CgkJCQl0eXBlcyArPSAoJy0nICsgaXRlbS5tb25leV90eXBlKTsKCQkJfWVsc2V7CgkJCQl0eXBlcyArPSAoJy0wJyk7CgkJCX0KCQkJdHlwZXMgKz0gJ10nOwoJCQlpdGVtLnRpdGxlID0gKHR5cGVzICsgaXRlbS50aXRsZSk7CgkJCQoJCX0pCgkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkKSB7CgkJCXJldHVybiBkYXRhLmlzTGlzdCA/IGRhdGEuaXNMaXN0IDogZGF0YQoJCX0gZWxzZSB7CgkJCXJldHVybiBkYXRhLmlzTGlzdCA/IHV0aWwuamVuY29kZShkYXRhLnJlc3VsdHMpIDogdXRpbC5qZW5jb2RlKGRhdGEpCgkJfQoJfSwKCglsYXN0aW5nVG9rZW46IChkYXRhKSA9PiB7CgkJaWYgKCFkYXRhKSByZXR1cm4gZGF0YTsKCQlsZXQgaW5mbyA9ICcnCgkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkIHx8IHR5cGVvZihkYXRhKSA9PSAnb2JqZWN0JykgewoJCQlzdXBlclZpcC5fQ09ORklHXy5oamVkZCA9IHRydWUKCQkJaW5mbyA9IGRhdGEKCQl9IGVsc2UgewoJCQlpbmZvID0gSlNPTi5wYXJzZShkZWNvZGUoZGF0YSwgc3VwZXJWaXApKQoJCX0KCQljb25zdCB1c2VyID0gaW5mby51c2VyID8gaW5mby51c2VyIDogaW5mbwoJCXVzZXIudGl0bGUgPSB7CgkJCWlkOiA2LAoJCQluYW1lOiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoJ+elnuixqicpKSwKCQkJY29uc3VtZTogMTAwMDAwMDAsCgkJCWNvbnN1bWVFbmQ6IDAsCgkJCWljb246ICJodHRwczovL2hqcGljLmhqcGZlMS5jb20vaGpzdG9yZS9zeXN0ZW0vbm9kZS91c2VydGl0bGU2LnBuZz92ZXI9MTY1NDU5MDIzNSIKCQl9CgkJdXNlci52aXAgPSA0CgkJdXNlci5mYW1vdXMgPSB0cnVlCgkJcmV0dXJuIHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID8gaW5mbyA6IHV0aWwuamVuY29kZShpbmZvKQoJfSwKCglmb3JtYXRWaWRlbzogKGRhdGEpID0+IHsKCQlpZiAoIWRhdGEpIHJldHVybiBkYXRhCgkJbGV0IHZpZGVvID0gJycKCQlpZiAoc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgfHwgdHlwZW9mKGRhdGEpID09ICdvYmplY3QnKSB7CgkJCXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID0gdHJ1ZQoJCQl2aWRlbyA9IGRhdGEKCQl9IGVsc2UgewoJCQl2aWRlbyA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEsIHN1cGVyVmlwKSkKCQl9CgkJdmlkZW8udHlwZSA9IDEKCQl2aWRlby5hbW91bnQgPSAwCgkJdmlkZW8ubW9uZXlfdHlwZSA9IDAKCQl2aWRlby52aXAgPSAwCgkJaWYgKHZpZGVvLnJlbW90ZVVybCAmJiAhdmlkZW8ucmVtb3RlVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkgewoJCQlpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ3ZpZGVvcGxheScpKSB7CgkJCQkvL+efreinhumikeW+heS/rgoJCQkJLy8gdmlkZW8ucmVtb3RlVXJsID0gdXRpbC5nZXRNM3U4UGF0aCh2aWRlby5yZW1vdGVVcmwpCgkJCQkvLyBzdXBlclZpcC5fQ09ORklHXy52aWRlb1VybCA9IHZpZGVvLnJlbW90ZVVybAoJCQl9IGVsc2UgewoJCQkJc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwudXJsID0gdmlkZW8ucmVtb3RlVXJsCgkJCX0KCQl9CgkJcmV0dXJuIHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID8gdmlkZW8gOiB1dGlsLmplbmNvZGUodmlkZW8pCgl9LAoKCWNoZWNrVXBkYXRlOiAoY2hlY2spID0+IHsKCQljb25zdCBhdXRvVXBkYXRlZFZlcnNpb25EYXRlID0gR01fZ2V0VmFsdWUoJ2hhaWppYW9fYXV0b191cGRhdGVkX2RhdGUnLCAwKQoJCWlmIChhdXRvVXBkYXRlZFZlcnNpb25EYXRlID4gRGF0ZS5ub3coKSAmJiAhY2hlY2spIHJldHVybiB7CgkJCWNvZGU6IC0xMDAsCgkJCW1zZzogJ+ajgOa1i+abtOaWsOmikeeOh+mZkOWIticKCQl9CgkJaWYgKGNoZWNrICYmIEdNX2dldFZhbHVlKCdoYWlqaWFvX3VwZGF0ZWRfbmV4dF9kYXRlJywgMCkgPiBEYXRlLm5vdygpKSByZXR1cm4gewoJCQljb2RlOiAtMjAwLAoJCQltc2c6ICfor7flnKggJyArIG5ldyBEYXRlKEdNX2dldFZhbHVlKCdoYWlqaWFvX3VwZGF0ZWRfbmV4dF9kYXRlJywgMCkpLnRvTG9jYWxlU3RyaW5nKCkgKyAnIOWQjuWGjeajgOafpeabtOaWsCcKCQl9CgkJR01fc2V0VmFsdWUoJ2hhaWppYW9fdXBkYXRlZF9uZXh0X2RhdGUnLCBEYXRlLm5vdygpICsgNjAwMDAwKQoJCWxldCByZXN1bHQgPSB7CgkJCWNvZGU6IDEsCgkJCW1zZzogJ29rJwoJCX0KCQl0cnkgewoJCQljb25zdCB3dF9oYWlqaWFvX2ZpcnN0X3VzZSA9IEdNX2dldFZhbHVlKCd3dF9oYWlqaWFvX2ZpcnN0X3VzZScsICcnKQoJCQkkLmFqYXhTZXR1cCh7CgkJCQlhc3luYzogZmFsc2UKCQkJfSk7CgkJCSQuZ2V0KCdodHRwczovL2ZjLW1wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5uZXh0LmJzcGFwcC5jb20vY29tbW9uL3VwZGF0ZUNoZWNrJywgewoJCQkJbmFtZTogJ2hhaWppYW8nLAoJCQkJdmVyc2lvbjogc3VwZXJWaXAuX0NPTkZJR18udmVyc2lvbiwKCQkJCXVzZV9kYXRlOiAod3RfaGFpamlhb19maXJzdF91c2UgPyB3dF9oYWlqaWFvX2ZpcnN0X3VzZSA6IERhdGUubm93KCkgKyAoTWF0aC5yb3VuZChNYXRoCgkJCQkJLnJhbmRvbSgpICogODk5OTk5ICsgMTAwMDAwKSArICcnKSkKCQkJfSwgZnVuY3Rpb24ocmVzKSB7CgkJCQlHTV9zZXRWYWx1ZSgnaGFpamlhb19hdXRvX3VwZGF0ZWRfZGF0ZScsIERhdGUubm93KCkgKyAxODAwMDAwMCkKCQkJCWlmIChyZXMuY29kZSAhPSAwKSByZXN1bHQgPSB7CgkJCQkJY29kZTogLTQwMCwKCQkJCQltc2c6ICfojrflj5bniYjmnKzkv6Hmga/lpLHotKUnCgkJCQl9CgkJCQlpZiAoKHJlcy51cGRhdGVfbXNnICYmIHJlcy5pc191cGRhdGUpIHx8IHJlcy5tc2cgfHwgcmVzLm5vdGlmeV9hbGwpIHsKCQkJCQlsZXQgbXNnID0gJycKCQkJCQlpZiAocmVzLm5vdGlmeV9hbGwpIG1zZyArPSAnPHA+LSAgJyArIHJlcy5ub3RpZnlfYWxsICsgJzxwLz4nCgkJCQkJaWYgKHJlcy5tc2cpIG1zZyArPSAnPHA+LSAgJyArIHJlcy5tc2cgKyAnPHAvPicKCQkJCQlpZiAocmVzLmlzX3VwZGF0ZSAmJiByZXMudXBkYXRlX21zZykgbXNnICs9IHJlcy51cGRhdGVfbXNnCgkJCQkJY29uc3QgaGlzdG9yeU5vdGlmeSA9IEdNX2dldFZhbHVlKCdoYWlqaWFvX25vdGlmeScpCgkJCQkJaWYoY2hlY2sgfHwgIWhpc3RvcnlOb3RpZnkgfHwgaGlzdG9yeU5vdGlmeS5tc2cucmVwbGFjZSgvaWRcPVxkKy8sJycpICE9IG1zZy5yZXBsYWNlKC9pZFw9XGQrLywnJykpewoJCQkJCQl1dGlsLnNob3dOb3RpZnkoewoJCQkJCQkJdGl0bGU6IG1zZywKCQkJCQkJCXN1Y2Nlc3M6ICgpID0+IHsKCQkJCQkJCQlpZiAocmVzKSB7CgkJCQkJCQkJCXN1cGVyVmlwLl9DT05GSUdfLnNob3dOb3RpZnkgPSBmYWxzZQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfSkKCQkJCQkJdXRpbC5zaG93QW5kSGlkVGlwcygnd3RfbXlfbm90aWZ5X2hhaWppYW8nKQoJCQkJCX0KCQkJCQlpZiAobXNnICYmIG1zZy5yZXBsYWNlKC9ccyovZywgIiIpLmxlbmd0aCA+IDApIEdNX3NldFZhbHVlKCdoYWlqaWFvX25vdGlmeScsIHsKCQkJCQkJZGF0ZTogbmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLCAwKSwKCQkJCQkJbXNnCgkJCQkJfSkKCQkJCX0KCQkJCWlmICghcmVzLmlzX3VwZGF0ZSkgcmVzdWx0ID0gewoJCQkJCWNvZGU6IC01MDAsCgkJCQkJbXNnOiAn5b2T5YmN54mI5pysICcgKyBzdXBlclZpcC5fQ09ORklHXy52ZXJzaW9uICsgJyDlt7Lnu4/mmK/mnIDmlrDniYjmnKwnCgkJCQl9CgkJCX0pCgkJCSQuYWpheFNldHVwKHsKCQkJCWFzeW5jOiB0cnVlCgkJCX0pOwoJCX0gY2F0Y2ggKGUpIHt9CgkJcmV0dXJuIHJlc3VsdAoJfSwKCglzaG93Tm90aWZ5OiAoaXRlbSA9IHt9KSA9PiB7CgkJJCgiI3d0LW5vdGlmeS1ib3giKS5yZW1vdmVDbGFzcygnaGlkLW5vdGlmeS1ib3gnKQoJCSQoIiN3dC1ub3RpZnktYm94IikuYWRkQ2xhc3MoJ3Nob3ctbm90aWZ5LWJveCcpCgkJbGV0IHZlcnNpb24gPSBzdXBlclZpcC5fQ09ORklHXy52ZXJzaW9uCgkJY29uc3QgdiA9IC/lvZPliY3ohJrmnKzniYjmnKwgKFxkXC5cZFwuXGRcLnswLDF9XGR7MCwyfSkvLmV4ZWMoaXRlbS50aXRsZSkKCQlpZiAodikgaXRlbS50aXRsZSA9IGl0ZW0udGl0bGUucmVwbGFjZSh2WzFdLCB2ZXJzaW9uKQoJCWlmIChpdGVtLnRpdGxlKSAkKCcjd3Qtbm90aWZ5LWJveCAuY29udGVudCcpLmh0bWwoaXRlbS50aXRsZSArICh2ZXJzaW9uID8KCQkJJzxkaXYgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0O2NvbG9yOiAjY2NjO2ZvbnQtc2l6ZTogMTBweDttYXJnaW4tdG9wOiAxMHB4OyI+diAnICsKCQkJdmVyc2lvbiArICc8L2Rpdj4nIDogJycpKQoJCXN1cGVyVmlwLl9DT05GSUdfLnNob3dOb3RpZnkgPSB0cnVlCgkJJCgnI3d0LW5vdGlmeS1ib3ggYScpLm9uKCdjbGljaycsIChlKSA9PiB7CgkJCWUuc3RvcFByb3BhZ2F0aW9uKCkKCQl9KQoJCSQoJyN3dC1ub3RpZnktYm94Jykub24oJ2NsaWNrJywgKCkgPT4gewoJCQkkKCIjd3Qtbm90aWZ5LWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LW5vdGlmeS1ib3gnKQoJCQkkKCIjd3Qtbm90aWZ5LWJveCIpLmFkZENsYXNzKCdoaWQtbm90aWZ5LWJveCcpCgkJCXN1cGVyVmlwLl9DT05GSUdfLnNob3dOb3RpZnkgPSBmYWxzZQoJCQlpZiAoaXRlbS5zdWNjZXNzKSBpdGVtLnN1Y2Nlc3ModHJ1ZSkKCQl9KQoJfQp9Cgpjb25zdCBzdXBlclZpcCA9IChmdW5jdGlvbigpIHsKCWNvbnN0IF9DT05GSUdfID0gewoJCWlzTW9iaWxlOiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKAoJCQkvKEFuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkpL2kpLAoJCXZpcEJveElkOiAnd3QtdmlwLWp4LWJveCcgKyBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCksCgkJdmVyc2lvbjogJzIuMi4xJywKCQl2aWRlb1VybDoge30sCgkJZW5kTmFtZTogJ2FuTT0nLAoJCWluaXRGYWlsTXNnOiAn5oqx5q2J77yM5Yid5aeL5YyW5aSx6LSl77yM6K+35bCd6K+V5Yi35paw6aG16Z2i5oiW5qOA5p+l54mI5pys5piv5ZCm5piv5pyA5paw54mI5pys77yM54K55Ye75o6n5Yi25p2h5ZaH5Y+t5p+l55yL5b2T5YmN54mI5pys5Y+3JywKCQlob21lUGFnZTogZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IoJ2FIUjBjQ1V6UVNVeVJpVXlSbXB6ZUd3dWNISnYnKSksCgkJc2NyaXB0czogWwoJCQkvLyAJewoJCQkvLyAJaWNvbjogJ2h0dHBzOi8vbXAtYWYzMDcyNjgtMWI4YS00ODJhLWI3NWEtYjZlOThiMTI1NzQyLmNkbi5ic3BhcHAuY29tL3N5c3RlbS9sb2dvL3dhdGVybWFya19sb2dvLnBuZycsCgkJCS8vIAlkZXNjOiAn5ZCE5aSn55+t6KeG6aKR5bmz5Y+w6KeG6aKRL+WbvumbhuWFjei0ueWOu+awtOWNsOS4i+i9ve+8jOemgeatouS4i+i9veeahOS5n+iDveS4i+i9vScKCQkJLy8gfSwKCQkJewoJCQkJaWNvbjogJ2h0dHBzOi8vbXAtYWYzMDcyNjgtMWI4YS00ODJhLWI3NWEtYjZlOThiMTI1NzQyLmNkbi5ic3BhcHAuY29tL3N5c3RlbS9sb2dvL3ZpZGVvX2xvZ28ucG5nJywKCQkJCWRlc2M6ICflkITlpKfop4ZQ6KeG6aKR5YWN6LS555yLJywKCQkJCXVybDogJycKCQkJfSwKCQkJewoJCQkJaWNvbjogJ2h0dHBzOi8vYmUudXhka2VsLmNvbS9zdGF0aWMvaW1hZ2VzL2luZGV4L2RtZGxvZzIucG5nJywKCQkJCWRlc2M6ICflhY3otLnnnIvku5jotLnnn63op4bpopHvvIznvZHnq5nlhoXlrrnlj6/og73lvJXotbfkuI3pgILvvIzor7fosKjmhY7kvb/nlKjjgIInLAoJCQkJdXJsOiAnJwoJCQl9LAoJCQl7CgkJCQlpY29uOiAnaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL2xvZ28vaGFpamlhby5wbmcnLAoJCQkJZGVzYzogJ+WFjei0ueeci+S7mOi0ueinhumikeWPiuWbvumbhu+8jOe9keermeWGheWuueWPr+iDveW8lei1t+S4jemAgu+8jOivt+iwqOaFjuS9v+eUqOOAgicsCgkJCQl1cmw6ICcnCgkJCX0sCgkJCXsKCQkJCWljb246ICdodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nb190cmFuc3BhcmVudC5wbmcnLAoJCQkJZGVzYzogJ+WJjeW+gOWPiuaXtuihjOS5kOiOt+WPluacgOaWsOiEmuacrOmTvuaOpScsCgkJCQl1cmw6ICcnCgkJCX0KCQldLAoJCWRvd25VdGlsczpbCgkJCXt0aXRsZTogJ+S4i+i9veaOpeWPo+W3peWFtyAxJyx1cmw6J2h0dHA6Ly90b29scy5idWdzY2FuZXIuY29tL20zdTguaHRtbCcsaXNBcHBlbmQ6IGZhbHNlfSwKCQkJe3RpdGxlOiAn5LiL6L295o6l5Y+j5bel5YW3IDInLHVybDonaHR0cHM6Ly90b29scy50aGF0d2luZC5jb20vdG9vbC9tM3U4ZG93bmxvYWRlciNtM3U4PScsaXNBcHBlbmQ6IHRydWV9LAoJCQl7dGl0bGU6ICfkuIvovb3mjqXlj6Plt6XlhbcgMycsdXJsOidodHRwczovL2Jsb2cubHVja2x5LW1qdy5jbi90b29sLXNob3cvbTN1OC1kb3dubG9hZGVyL2luZGV4Lmh0bWw/c291cmNlPScsaXNBcHBlbmQ6IHRydWV9CgkJXQoJfQoJY2xhc3MgQmFzZUNvbnN1bWVyIHsKCQljb25zdHJ1Y3Rvcihib2R5KSB7CgkJCXRoaXMucGFyc2UgPSAoKSA9PiB7CgkJCQlzZXRUaW1lb3V0KCgpID0+IHsgdXRpbC5jaGVja1VwZGF0ZSgpfSwgMTUwMCkKCQkJCXRoaXMuaW50ZXJjZXB0SHR0cCgpCgkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCdib2R5JykudGhlbihjb250YWluZXIgPT57CgkJCQkJY29udGFpbmVyLnN0eWxlLm92ZXJmbG93WT0nYXV0byAhaW1wb3J0YW50JzsKCQkJCQl0aGlzLmdlbmVyYXRlRWxlbWVudChjb250YWluZXIpLnRoZW4oCgkJCQkJCWNvbnRhaW5lciA9PiB0aGlzLmJpbmRFdmVudChjb250YWluZXIpKQoJCQkJfSkKCQkJfQoJCX0KCgkJaW50ZXJjZXB0SHR0cCgpIHsKCQkJY29uc3Qgb3JpZ2luT3BlbiA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuOwoJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKF8sIHVybCkgewoJCQkJdGhpcy5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHsKCQkJCQl3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkKCQkJCX0KCQkJCWlmKC9cL2FwaVwvY29tbWVudFwvcmVwbHkkLy50ZXN0KHVybCkpewoJCQkJCXRoaXMuX3Njb3BlX3VybCA9IHVybAoJCQkJfQoJCQkJaWYoX0NPTkZJR18udXNlcil7CgkJCQkJaWYgKC9cL2FwaVwvYmFubmVyXC9iYW5uZXJfbGlzdC8udGVzdCh1cmwpKSB7CgkJCQkJCXRoaXMuYWJvcnQoKQoJCQkJCX0KCQkJCQlpZiAoL1wvYXBpXC90b3BpY1wvaG90XC90b3BpY3NcPy8udGVzdCh1cmwpKSB7CgkJCQkJCWNvbnN0IHhociA9IHRoaXM7OwoJCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLAoJCQkJCQkJInJlc3BvbnNlIgoJCQkJCQkpLmdldDsKCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsKCQkJCQkJCWdldDogKCkgPT4gewoJCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOwoJCQkJCQkJCXRyeSB7CgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7CgkJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5mb3JtYXRUaXRsZShyZXMuZGF0YSk7CgkJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOwoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOwoJCQkJCQkJCQljb25zb2xlLmxvZyhlKTsKCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsKCQkJCQkJCQl9CgkJCQkJCQl9LAoJCQkJCQl9KTsKCQkJCQl9CgkJCgkJCQkJaWYgKC9cL2FwaVwvdG9waWNcL3NlYXJjaC8udGVzdCh1cmwpKSB7CgkJCQkJCTsKCQkJCQkJY29uc3QgeGhyID0gdGhpczsKCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKCQkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwKCQkJCQkJCSJyZXNwb25zZSIKCQkJCQkJKS5nZXQ7CgkJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7CgkJCQkJCQlnZXQ6ICgpID0+IHsKCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsKCQkJCQkJCQl0cnkgewoJCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOwoJCQkJCQkJCQlyZXMuZGF0YSA9IHV0aWwuZm9ybWF0VGl0bGUocmVzLmRhdGEpOwoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsKCQkJCQkJCQl9IGNhdGNoIChlKSB7CgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTs7CgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOwoJCQkJCQkJCQlyZXR1cm4gcmVzdWx0OwoJCQkJCQkJCX0KCQkJCQkJCX0sCgkJCQkJCX0pOwoJCQkJCX0KCQkKCQkJCQlpZiAoL1wvYXBpXC90b3BpY1wvXGQrLy50ZXN0KHVybCkpIHsKCQkJCQkJY29uc3QgeGhyID0gdGhpczsKCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKCQkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwKCQkJCQkJCSJyZXNwb25zZSIKCQkJCQkJKS5nZXQ7CgkJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7CgkJCQkJCQlnZXQ6ICgpID0+IHsKCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsKCQkJCQkJCQl0cnkgewoJCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOwoJCQkJCQkJCQlyZXMuZGF0YSA9IG1vZGlmeURhdGEocmVzLmRhdGEpCgkJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOwoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOzsKCQkJCQkJCQkJY29uc29sZS5sb2coZSk7CgkJCQkJCQkJCXJldHVybiByZXN1bHQ7CgkJCQkJCQkJfQoJCQkJCQkJfSwKCQkJCQkJfSk7CgkJCQkJfQoJCQoJCQkJCWlmICgvXC9hcGlcL2F0dGFjaG1lbnQvLnRlc3QodXJsKSkgewoJCQkJCQljb25zdCB4aHIgPSB0aGlzOwoJCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLAoJCQkJCQkJInJlc3BvbnNlIgoJCQkJCQkpLmdldDsKCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsKCQkJCQkJCWdldDogKCkgPT4gewoJCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOwoJCQkJCQkJCXRyeSB7CgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7CgkJCQkJCQkJCWlmKHJlcy5kYXRhKXsKCQkJCQkJCQkJCWNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRlY29kZShyZXMuZGF0YSwgc3VwZXJWaXApKQoJCQkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmZvcm1hdFZpZGVvKHJlcy5kYXRhKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsKCQkJCQkJCQl9IGNhdGNoIChlKSB7CgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTs7CgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOwoJCQkJCQkJCQlyZXR1cm4gcmVzdWx0OwoJCQkJCQkJCX0KCQkJCQkJCX0sCgkJCQkJCX0pOwoJCQkJCX0KCQkKCQkJCQlpZiAoL1wvYXBpXC90b3BpY1wvKG5vZGVcLyh0b3BpY3N8bmV3cyl8aWRvbF9saXN0KS8udGVzdCh1cmwpKSB7CgkJCQkJCWNvbnN0IHhociA9IHRoaXM7CgkJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCgkJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsCgkJCQkJCQkicmVzcG9uc2UiCgkJCQkJCSkuZ2V0OwoJCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0IiwgewoJCQkJCQkJZ2V0OiAoKSA9PiB7CgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7CgkJCQkJCQkJdHJ5IHsKCQkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsKCQkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmZvcm1hdFRpdGxlKHJlcy5kYXRhKQoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsKCQkJCQkJCQl9IGNhdGNoIChlKSB7CgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsKCQkJCQkJCQkJY29uc29sZS5sb2coZSk7CgkJCQkJCQkJCXJldHVybiByZXN1bHQ7CgkJCQkJCQkJfQoJCQkJCQkJfSwKCQkJCQkJfSk7CgkJCQkJfQoJCQoJCQkJCWlmICgvXC9hcGlcL3VzZXJcLyhpbmZvXC8oXGQrKSl8Y3VycmVudC8uZXhlYyh1cmwpKSB7CgkJCQkJCWNvbnN0IHhociA9IHRoaXM7CgkJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCgkJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsCgkJCQkJCQkicmVzcG9uc2UiCgkJCQkJCSkuZ2V0OwoJCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0IiwgewoJCQkJCQkJZ2V0OiAoKSA9PiB7CgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7CgkJCQkJCQkJdHJ5IHsKCQkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsKCQkJCQkJCQkJY29uc3QgcmVnUmVzID0gL1wvYXBpXC91c2VyXC8oaW5mb1wvKFxkKykpfGN1cnJlbnQvLmV4ZWMoCgkJCQkJCQkJCQl1cmwpOwoJCQkJCQkJCQljb25zdCB1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1aWQnKTsKCQkJCQkJCQkJbGV0IGRhdGEKCQkJCQkJCQkJaWYgKHJlZ1Jlcy5sZW5ndGggPiAyICYmIChyZWdSZXNbMl0gJiYgcmVnUmVzWzJdICE9IHVpZCkpIHsKCQkJCQkJCQkJCWxldCBmdXJsID0geGhyLnJlc3BvbnNlVVJMOwoJCQkJCQkJCQkJbGV0IHIgPSBmdXJsLm1hdGNoKAoJCQkJCQkJCQkJCS9cVyooXHcrKVwuKHRvcHxjb218cHJvKVwvYXBpXC91c2VyXC9pbmZvXC8oXGQrKS8pOwoJCQkJCQkJCQkJZGF0YSA9IHV0aWwubW9kaWZ5VXNlcihyZXMsIHJbMl0pOwoJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJZGF0YSA9IHJlczsKCQkJCQkJCQkJCWRhdGEuZGF0YSA9IHV0aWwubGFzdGluZ1Rva2VuKHJlcy5kYXRhKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7CgkJCQkJCQkJfSBjYXRjaCAoZSkgewoJCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7CgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOwoJCQkJCQkJCQlyZXR1cm4gcmVzdWx0OwoJCQkJCQkJCX0KCQkJCQkJCX0sCgkJCQkJCX0pOwoJCQkJCX0KCQkKCQkJCQlpZiAoL1wvYXBpXC91c2VyXC9uZXdzLy50ZXN0KHVybCkpIHsKCQkJCQkJY29uc3QgeGhyID0gdGhpczsKCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKCQkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwKCQkJCQkJCSJyZXNwb25zZSIKCQkJCQkJKS5nZXQ7CgkJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7CgkJCQkJCQlnZXQ6ICgpID0+IHsKCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsKCQkJCQkJCQl0cnkgewoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoewoJCQkJCQkJCQkJImlzRW5jcnlwdGVkIjogdHJ1ZSwKCQkJCQkJCQkJCSJlcnJvckNvZGUiOiAwLAoJCQkJCQkJCQkJIm1lc3NhZ2UiOiAiIiwKCQkJCQkJCQkJCSJzdWNjZXNzIjogdHJ1ZSwKCQkJCQkJCQkJCSJkYXRhIjogIldsaHNTMlF4YkZoYVIzaEtZVzVCTTFOWE5VTmhSbTk1Vmxkc1VHRnJWbnBUVnpFMFkwZEtXR0pFUWtwaGJUazFWRlZPTTJGWFVraFBWRUphVmpOa2NGUXljRU5QVlhoRVUyNXNZVmRGTkhoWmEyaFRaV3RzY1dORVpFcGhNMmgzV1hwT1VtRlZPWFJPVkVacFVqTm5OVnBzUlRsUVVUMDkiCgkJCQkJCQkJCX0pOwoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOwoJCQkJCQkJCQljb25zb2xlLmxvZyhlKTsKCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsKCQkJCQkJCQl9CgkJCQkJCQl9LAoJCQkJCQl9KTsKCQkJCQl9CgkJCgkJCQkJaWYoL2FwaVwvdmlkZW9cL3VzZXJfbGlzdFw/Ly50ZXN0KHVybCkpewoJCQkJCQk7Y29uc3QgeGhyID0gdGhpczsKCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKCQkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwKCQkJCQkJCSJyZXNwb25zZSIKCQkJCQkJKS5nZXQ7CgkJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7CgkJCQkJCQlnZXQ6ICgpID0+IHsKCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsKCQkJCQkJCQl0cnkgewoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoewoJCQkJCQkJCQkJImlzRW5jcnlwdGVkIjogdHJ1ZSwKCQkJCQkJCQkJCSJlcnJvckNvZGUiOiAwLAoJCQkJCQkJCQkJIm1lc3NhZ2UiOiAiIiwKCQkJCQkJCQkJCSJzdWNjZXNzIjogdHJ1ZSwKCQkJCQkJCQkJCSJkYXRhIjogIldXMDFWMk15U2tKUVZEQTkiCgkJCQkJCQkJCX0pOwoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOwoJCQkJCQkJCQk7Y29uc29sZS5sb2coZSk7CgkJCQkJCQkJCTtyZXR1cm4gcmVzdWx0OwoJCQkJCQkJCX0KCQkJCQkJCX0sCgkJCQkJCX0pOwoJCQkJCX0KCQkKCQkJCQlpZiAoL2FwaVwvbG9naW5cL3NpZ25pbi8udGVzdCh1cmwpKSB7CgkJCQkJCWNvbnN0IHhociA9IHRoaXM7CgkJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCgkJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsCgkJCQkJCQkicmVzcG9uc2UiCgkJCQkJCSkuZ2V0OwoJCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0IiwgewoJCQkJCQkJZ2V0OiAoKSA9PiB7CgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7CgkJCQkJCQkJdHJ5IHsKCQkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsKCQkJCQkJCQkJaWYocmVzLnN1Y2Nlc3MpewoJCQkJCQkJCQkJY29uc3QgdXNlcm5hbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtwbGFjZWhvbGRlcj0i6K+36L6T5YWl55So5oi35ZCNL+mCrueusSJdLGlucHV0W3BsYWNlaG9sZGVyPSLor7fovpPlhaXnlKjmiLflkI0iXScpLnZhbHVlCgkJCQkJCQkJCQljb25zdCBwd2QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJwYXNzd29yZCJdJykudmFsdWUKCQkJCQkJCQkJCWlmKHVzZXJuYW1lICYmIHB3ZCl7CgkJCQkJCQkJCQkJR01fc2V0VmFsdWUoJ2hhaWppYW9fdXNlcnB3ZCcse3VzZXJuYW1lLHB3ZH0pCgkJCQkJCQkJCQl9CgkJCQkJCQkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcudmFuLWRpYWxvZ19fY2FuY2VsLC5lbC1idXR0b24tLXNtYWxsJyw3KS50aGVuKHJlcyA9PnsKCQkJCQkJCQkJCQlyZXMuY2xpY2soKQoJCQkJCQkJCQkJfSkKCQkJCQkJCQkJfWVsc2V7CgkJCQkJCQkJCQl1dGlsLnNob3dUaXBzKHt0aXRsZTogcmVzLm1lc3NhZ2V9KQoJCQkJCQkJCQl9CgkJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5sYXN0aW5nVG9rZW4ocmVzLmRhdGEpOwoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsKCQkJCQkJCQl9IGNhdGNoIChlKSB7CgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsKCQkJCQkJCQkJY29uc29sZS5sb2coZSk7CgkJCQkJCQkJCXJldHVybiByZXN1bHQ7CgkJCQkJCQkJfQoJCQkJCQkJfSwKCQkJCQkJfSk7CgkJCQkJfQoJCQoJCQkJCWlmICgvYXBpXC92aWRlb1wvY2hlY2tWaWRlb0NhblBsYXkvLnRlc3QodXJsKSkgewoJCQkJCQljb25zdCB4aHIgPSB0aGlzOwoJCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLAoJCQkJCQkJInJlc3BvbnNlIgoJCQkJCQkpLmdldDsKCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsKCQkJCQkJCWdldDogKCkgPT4gewoJCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOwoJCQkJCQkJCXRyeSB7CgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7CgkJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5mb3JtYXRWaWRlbyhyZXMuZGF0YSk7CgkJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOwoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOwoJCQkJCQkJCQljb25zb2xlLmxvZyhlKTsKCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsKCQkJCQkJCQl9CgkJCQkJCQl9LAoJCQkJCQl9KQoJCQkJCX0KCQkKCQkJCQlpZigvYXBpXC9sb2dpblwvc2lnbnVwLy50ZXN0KHVybCkpewoJCQkJCQljb25zdCB4aHIgPSB0aGlzOwoJCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLAoJCQkJCQkJInJlc3BvbnNlIgoJCQkJCQkpLmdldDsKCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsKCQkJCQkJCWdldDogKCkgPT4gewoJCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOwoJCQkJCQkJCXRyeSB7CgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7CgkJCQkJCQkJCWlmKCFyZXMuc3VjY2Vzcyl7CgkJCQkJCQkJCQl1dGlsLnNob3dUaXBzKHsgdGl0bGU6IHJlcy5tZXNzYWdlfSkKCQkJCQkJCQkJfQoJCQkJCQkJCQlyZXR1cm4gcmVzdWx0CgkJCQkJCQkJfSBjYXRjaCAoZSkgewoJCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7CgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOwoJCQkJCQkJCQlyZXR1cm4gcmVzdWx0OwoJCQkJCQkJCX0KCQkJCQkJCX0sCgkJCQkJCX0pCgkJCQkJfQoJCQkJfQoJCQkJb3JpZ2luT3Blbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoJCQl9OwoJCQoJCQljb25zdCBvbGRTZW5kID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLnNlbmQ7CgkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHsKCQkJCWlmKHRoaXMuX3Njb3BlX3VybCAmJiBhcmdzLmxlbmd0aCA+IDApewoJCQkJCXRyeXsKCQkJCQkJYXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZShhcmdzWzBdLm1hdGNoKC8iY29udGVudCI6IjxwPiguKyk8XC9wPiIsLylbMV0sdXRpbC5kZWNvYXQoJ0pVVTJKVGcwSlRsR0pVVTRKVUl3SlVFeUpVVTFKVGhFSlRsQkpVVTBKVUk0SlVKQ0pVVTFKVGc0SlRnMkpVVTBKVUpCSlVGQ0pVVkdKVUpESlRoREpVVTFKVUUxSlVJekpVVTBKVUk0SlVKQ0pVVTNKVGxESlRsR0pVVTJKVGs0SlVGR0pVVTJKVGxGSlRneEpVVTFKVGt6SlRneEpVVTFKVUl3SlVFMEpVVTNKVGc1SlVFNUpVVkdKVUpESlRoREpVVTJKVGxESlRsQ0pVVTFKVGhFSlRsQkpVVTBKVUk0SlVKQ0pVVTJKVGhESlRneEpVVTNKVUpDSlVGRUpVVTJKVGxDSlVJMEpVVTJKVGsySlVJdycpKQoJCQkJCX1jYXRjaChlKXtjb25zb2xlLmxvZyhlKX0KCQkJCX0KCQkJCXJldHVybiBvbGRTZW5kLmNhbGwodGhpcywgLi4uYXJncykKCQkJfTsKCQl9CgoJCWdlbmVyYXRlRWxlbWVudChjb250YWluZXIpIHsKCQkJR01fYWRkU3R5bGUoYAoJCQkJQGZvbnQtZmFjZSB7CgkJCQkgIGZvbnQtZmFtaWx5OiAnaWNvbmZvbnQnOyAgLyogUHJvamVjdCBpZCAzOTEzNTYxICovCgkJCQkgIHNyYzogdXJsKCcvL2F0LmFsaWNkbi5jb20vdC9jL2ZvbnRfMzkxMzU2MV9jcGUxM2Z3Y2E4LndvZmYyP3Q9MTY5NjIxMDQ5MzY3MicpIGZvcm1hdCgnd29mZjInKSwKCQkJCSAgICAgICB1cmwoJy8vYXQuYWxpY2RuLmNvbS90L2MvZm9udF8zOTEzNTYxX2NwZTEzZndjYTgud29mZj90PTE2OTYyMTA0OTM2NzInKSBmb3JtYXQoJ3dvZmYnKSwKCQkJCSAgICAgICB1cmwoJy8vYXQuYWxpY2RuLmNvbS90L2MvZm9udF8zOTEzNTYxX2NwZTEzZndjYTgudHRmP3Q9MTY5NjIxMDQ5MzY3MicpIGZvcm1hdCgndHJ1ZXR5cGUnKTsKCQkJCX0KCQkJCS5pY29uZm9udCB7CgkJCQkgICAgZm9udC1mYW1pbHk6ICJpY29uZm9udCIgIWltcG9ydGFudDsKCQkJCSAgICBmb250LXNpemU6IDE2cHg7CgkJCQkgICAgZm9udC1zdHlsZTogbm9ybWFsOwoJCSAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDAgIWltcG9ydGFudDsKCQkJCSAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKCQkJCSAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwoJCQkJfQoJCQkJQGtleWZyYW1lcyBzaG93U2V0Qm94IHsKCQkJCQkwJSB7CgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMCk7CgkJCQkJfQoJCQkJCTgwJSB7CgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMS4xKTsKCQkJCQl9CgkJCQkJMTAwJSB7CgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMSk7CgkJCQkJfQoJCQkJfQoJCQkJQGtleWZyYW1lcyBoaWRTZXRCb3ggewoJCQkJCTAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxKTsKCQkJCQl9CgkJCQkJODAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxLjEpOwoJCQkJCX0KCQkJCQkxMDAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTsKCQkJCQl9CgkJCQl9CgkJCQlAa2V5ZnJhbWVzIGNvbG9yQW5pbWEgewoJCQkJCTAlewoJCQkJCQliYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwOwoJCQkJCQljb2xvcjogIzVkNWQ1ZDsKCQkJCQkJdHJhbnNmb3JtOiBzY2FsZSgxKTsKCQkJCQl9CgkJCQkJNTAlewoJCQkJCQl0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CgkJCQkJfQoJCQkJCTEwMCV7CgkJCQkJCWJhY2tncm91bmQtY29sb3I6ICNmZjYwMjI7OwoJCQkJCQljb2xvcjogd2hpdGU7CgkJCQkJCXRyYW5zZm9ybTogc2NhbGUoMSk7CgkJCQkJfQoJCQkJfQoJCQkJQGtleWZyYW1lcyBzaG93Tm90aWZ5Qm94IHsKCQkJCQkwJSB7CgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTEwMCUpIHNjYWxlKDApOwoJCQkJCX0KCQkJCQk4MCUgewoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDM1cHgpIHNjYWxlKDEuMSk7CgkJCQkJfQoJCQkJCTEwMCUgewoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDM1cHgpIHNjYWxlKDEpOwoJCQkJCX0KCQkJCX0KCQkJCUBrZXlmcmFtZXMgaGlkTm90aWZ5Qm94IHsKCQkJCQkwJSB7CgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsMzVweCkgc2NhbGUoMS4xKTsKCQkJCQl9CgkJCQkJODAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwzNXB4KSBzY2FsZSgxKTsKCQkJCQl9CgkJCQkJMTAwJSB7CgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTEwMCUpIHNjYWxlKDApOwoJCQkJCX0KCQkJCX0KCQkJCUBrZXlmcmFtZXMgc2NhbGUgewoJCQkJCTAlewoJCQkJCQl0cmFuc2Zvcm06IHNjYWxlKDEpOwoJCQkJCX0KCQkJCQk1MCV7CgkJCQkJCXRyYW5zZm9ybTogc2NhbGUoMS4xKTsKCQkJCQl9CgkJCQkJMTAwJXsKCQkJCQkJdHJhbnNmb3JtOiBzY2FsZSgxKTsKCQkJCQl9CgkJCQl9CgkJCQlAa2V5ZnJhbWVzIGNpcmNsZXRva0xlZnQgewoJCQkJICAgIDAlLDEwMCUgewoJCQkJICAgICAgICBsZWZ0OiAwcHg7CgkJCQkgICAgICAgIHdpZHRoOiAxMnB4OwoJCQkJICAgICAgICBoZWlnaHQ6IDEycHg7CgkJCQkgICAgICAgIHotaW5kZXg6IDA7CgkJCQkgICAgfQoJCQkJICAgIDI1JSB7CgkJCQkgICAgICAgIGhlaWdodDogMTVweDsKCQkJCSAgICAgICAgd2lkdGg6IDE1cHg7CgkJCQkgICAgICAgIHotaW5kZXg6IDE7CgkJCQkgICAgICAgIGxlZnQ6IDhweDsKCQkJCSAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKQoJCQkJICAgIH0KCQkJCSAgICA1MCUgewoJCQkJICAgICAgICB3aWR0aDogMTJweDsKCQkJCSAgICAgICAgaGVpZ2h0OiAxMnB4OwoJCQkJICAgICAgICBsZWZ0OiAyMnB4OwoJCQkJICAgIH0KCQkJCSAgICA3NSUgewoJCQkJICAgICAgICB3aWR0aDogMTBweDsKCQkJCSAgICAgICAgaGVpZ2h0OiAxMHB4OwoJCQkJICAgICAgICBsZWZ0OiA4cHg7CgkJCQkgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkKCQkJCSAgICB9CgkJCQl9CgkJCQlAa2V5ZnJhbWVzIGNpcmNsZXRva1JpZ2h0IHsKCQkJCSAgICAwJSwxMDAlIHsKCQkJCSAgICAgICAgdG9wOiAzcHg7CgkJCQkgICAgICAgIGxlZnQ6IDIycHg7CgkJCQkgICAgICAgIHdpZHRoOiAxMnB4OwoJCQkJICAgICAgICBoZWlnaHQ6IDEycHg7CgkJCQkgICAgICAgIHotaW5kZXg6IDAKCQkJCSAgICB9CgkJCQkgICAgMjUlIHsKCQkJCSAgICAgICAgaGVpZ2h0OiAxNXB4OwoJCQkJICAgICAgICB3aWR0aDogMTVweDsKCQkJCSAgICAgICAgei1pbmRleDogMTsKCQkJCSAgICAgICAgbGVmdDogMjRweDsKCQkJCSAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKQoJCQkJICAgIH0KCQkJCSAgICA1MCUgewoJCQkJICAgICAgICB3aWR0aDogMTJweDsKCQkJCSAgICAgICAgaGVpZ2h0OiAxMnB4OwoJCQkJICAgICAgICBsZWZ0OiAwcHgKCQkJCSAgICB9CgkJCQkgICAgNzUlIHsKCQkJCSAgICAgICAgd2lkdGg6IDEwcHg7CgkJCQkgICAgICAgIGhlaWdodDogMTBweDsKCQkJCSAgICAgICAgbGVmdDogMjRweDsKCQkJCSAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKQoJCQkJICAgIH0KCQkJCX0KCQkJCS5jb2xvci1hbmltYXsKCQkJCQlhbmltYXRpb246IGNvbG9yQW5pbWEgLjNzIGVhc2UgMSBmb3J3YXJkczsKCQkJCX0KCQkJCS5idG4tYW5pbWF7CgkJCQkJYW5pbWF0aW9uOiBzY2FsZSAuM3MgZWFzZSAxIGZvcndhcmRzOwoJCQkJfQoJCQkJLmxvZ2luLWJ0bjo6YWZ0ZXIsLmxvZ2luLWZvcm0tYnV0dG9uOjphZnRlcntjb250ZW50Oico5aaC5rKh5Y+N5bqU77yM5Y+v6IO96LSm5Y+35a+G56CB6ZSZ6K+v77yM5oiW5Yi35paw6aG16Z2i5YaN6K+VKSc7Y29sb3I6I2U5MWU2MzttYXJnaW4tbGVmdDo1cHg7Zm9udC1zaXplOiAxMHB4O30KCQkJCS5lbC1tZXNzYWdlLWJveCwudmFuLXRvYXN0LC5lbC1tZXNzYWdlLC52LW1vZGFsLC5wdWJsaWNDb250YWluZXIsLmNvbnRhaW5lcmFkdmVydGlzaW5nLCNob21lIC5idG5ib3gsI2hvbWUgLmFkZGJveCwudG9wYmFubWVyLC5iYW5uZXJsaXN0c3R5bGUsLmlzaGlkZSwjanN4bC1ib3gsI2pzeGwtbWFza3tkaXNwbGF5Om5vbmUgIWltcG9ydGFudDt6LWluZGV4Oi05OTk5OSAhaW1wb3J0YW50O29wYWNpdHk6IDAhaW1wb3J0YW50O3dpZHRoIDowICFpbXBvcnRhbnQ7fQoJCQkJI3d0LXJlc291cmNlcy1ib3h7cG9zaXRpb246IHJlbGF0aXZlOyBib3JkZXI6IDFweCBkYXNoZWQgI2VjODE4MTtiYWNrZ3JvdW5kOiAjZmZmNGY0O30KCQkJCS5zZWxsLWJ0bntib3JkZXI6bm9uZSAhaW1wb3J0YW50O21hcmdpbi10b3A6MjBweDt9CgkJCQkubWFyZ2luLWxlZnR7IG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7fQoJCQkJLnNob3ctc2V0LWJveHsgYW5pbWF0aW9uOiBzaG93U2V0Qm94IDAuM3MgZWFzZSAxIGZvcndhcmRzO30KCQkJCS5oaWQtc2V0LWJveHsgYW5pbWF0aW9uOiBoaWRTZXRCb3ggMC4zcyBlYXNlIDEgZm9yd2FyZHM7fQoJCQkJLnNob3ctbm90aWZ5LWJveHsgYW5pbWF0aW9uOiBzaG93Tm90aWZ5Qm94IDAuM3MgZWFzZSAxIGZvcndhcmRzO30KCQkJCS5oaWQtbm90aWZ5LWJveHsgYW5pbWF0aW9uOiBoaWROb3RpZnlCb3ggMC4zcyBlYXNlIDEgZm9yd2FyZHM7fQoJCQkJI3d0LWxvYWRpbmctYm94e2Rpc3BsYXk6IG5vbmU7cG9zaXRpb246IGZpeGVkO3RvcDogMDtsZWZ0OiAwO3JpZ2h0OiAwO2JvdHRvbTogMDt6LWluZGV4OiAxMDAwMDA7YmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDRkO30KCQkJCSN3dC1sb2FkaW5nLWJveCAubG9hZGluZ3twb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDM1cHg7aGVpZ2h0OiAxN3B4O3RvcDogNTAlO2xlZnQ6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpO30KCQkJCSN3dC1sb2FkaW5nLWJveCAubG9hZGluZzo6YmVmb3JlLAoJCQkJI3d0LWxvYWRpbmctYm94IC5sb2FkaW5nOjphZnRlcntwb3NpdGlvbjogYWJzb2x1dGU7Y29udGVudDogIiI7dG9wOiAzcHg7YmFja2dyb3VuZC1jb2xvcjogI2ZmZTYwZjt3aWR0aDogMTRweDtoZWlnaHQ6IDE0cHg7Ym9yZGVyLXJhZGl1czogMjBweDttaXgtYmxlbmQtbW9kZTogbXVsdGlwbHk7YW5pbWF0aW9uOiBjaXJjbGV0b2tMZWZ0IDEuMnMgbGluZWFyIGluZmluaXRlO30KCQkJCSN3dC1sb2FkaW5nLWJveCAubG9hZGluZzo6YWZ0ZXJ7YW5pbWF0aW9uOiBjaXJjbGV0b2tSaWdodCAxLjJzIGxpbmVhciBpbmZpbml0ZTtiYWNrZ3JvdW5kLWNvbG9yOiAjNGRlOGY0O30KCQkJCSN3dC1sZWZ0LXNob3d7IHBvc2l0aW9uOiBmaXhlZDtsZWZ0OiAyMHB4O3RvcDogNTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTt6LWluZGV4OiA5OTk5O3RyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7fQoJCQkJI3d0LWxlZnQtc2hvdyBpIHtjb2xvcjogIzVmNWI1Yjtmb250LXNpemU6IDI0cHg7Y29sb3I6ICNFOTFFNjM7dGV4dC1zaGFkb3c6ICNFOTFFNjMgMnB4IDJweCAxMnB4O2ZvbnQtc2l6ZTogMjVweDttYXJnaW4tbGVmdDogLTFweDt9CgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH17CgkJCQkJcG9zaXRpb246IGZpeGVkOwoJCQkJCXRvcDogNTAlOwoJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC01MCUpOwoJCQkJCXJpZ2h0OiAxMHB4OwoJCQkJCXdpZHRoOiA0NnB4OwoJCQkJCWJvcmRlci1yYWRpdXM6IDMwcHg7CgkJCQkJYmFja2dyb3VuZDogcmdiKDY0IDY0IDY0IC8gODElKTsKCQkJCQlib3gtc2hhZG93OiAxcHggMXB4IDhweCAxcHggcmdiKDk4IDk5IDk5IC8gMzQlKTsKCQkJCQl6LWluZGV4OiA5OTk5OwoJCQkJCXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CgkJCQl9CgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gLml0ZW17cG9zaXRpb246IHJlbGF0aXZlO2hlaWdodDogNjBweDt9CgkJCQkudGlwcy15dWFuOjpiZWZvcmV7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgY29udGVudDogJyc7dG9wOiAxMnB4OyByaWdodDogNnB4O3dpZHRoOiA4cHg7aGVpZ2h0OiA4cHg7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGJhY2tncm91bmQtY29sb3I6ICM1ZWY0NjQ7fQoJCQkJLnRpcHMteXVhbi1lcnI6OmJlZm9yZXsgcG9zaXRpb246IGFic29sdXRlOyBjb250ZW50OiAnJzt0b3A6IDEycHg7IHJpZ2h0OiA2cHg7d2lkdGg6IDhweDtoZWlnaHQ6IDhweDsgYm9yZGVyLXJhZGl1czogMTBweDsgYmFja2dyb3VuZC1jb2xvcjogI2Y4M2YzMjt9CgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gLml0ZW06bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXJ7cG9zaXRpb246IGFic29sdXRlO2JvdHRvbTogMDtsZWZ0OiAyMi41JTtjb250ZW50OiAnJzt3aWR0aDogNTUlO2hlaWdodDogMnB4O2JhY2tncm91bmQtY29sb3I6ICNmZmY7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9IC5pdGVtIC5pY29uZm9udCwjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gLml0ZW0gaW1ne3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSl9CgkJCQkjd3QtbG9naW4tYm94IC5jbG9zZSwjd3Qtc2V0LWJveCAuY2xvc2UsI3d0LW5vdGlmeS1ib3ggLmNsb3Nle3Bvc2l0aW9uOiBhYnNvbHV0ZTtyaWdodDogMHB4O3RvcDogMHB4O3dpZHRoOiA0MHB4O2hlaWdodDogNDBweDt9CgkJCQkjd3QtbG9naW4tYm94IC5jbG9zZTo6YmVmb3JlLCN3dC1sb2dpbi1ib3ggLmNsb3NlOjphZnRlciwjd3Qtc2V0LWJveCAuY2xvc2U6OmJlZm9yZSwjd3Qtc2V0LWJveCAuY2xvc2U6OmFmdGVyLCN3dC1ub3RpZnktYm94IC5jbG9zZTo6YmVmb3JlLCN3dC1ub3RpZnktYm94IC5jbG9zZTo6YWZ0ZXJ7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDUwJTt0b3A6IDUwJTtjb250ZW50OiAnJzt3aWR0aDogMTJweDtoZWlnaHQ6IDJweDtib3JkZXItcmFkaXVzOiAxcHg7YmFja2dyb3VuZC1jb2xvcjogIzZhNmE2YTt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHJvdGF0ZSg0NWRlZyk7dmlzaWJpbGl0eTogdmlzaWJsZTt9CgkJCQkjd3QtbG9naW4tYm94IC5jbG9zZTo6YWZ0ZXIsI3d0LXNldC1ib3ggLmNsb3NlOjphZnRlciwjd3Qtbm90aWZ5LWJveCAuY2xvc2U6OmFmdGVye3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKC00NWRlZyk7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9IC5hYnNvbHV0ZS1jZW50ZXJ7IHBvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDUwJTtsZWZ0OiA1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1teSBpbWd7IHdpZHRoOiAyOHB4O2hlaWdodDogMjhweDtib3JkZXItcmFkaXVzOiAzMHB4O21hcmdpbi1sZWZ0OiAycHg7dHJhbnN0aW9uOiBhbGwgMC4zcyBlYXNlO30KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAjd3QtbXktc2V0IGkge2NvbG9yOiB3aGl0ZTtmb250LXNpemU6IDI0cHg7dGV4dC1zaGFkb3c6IDJweCAycHggMTRweCAjZmZmZmZmO2ZvbnQtZmFtaWx5OiAnaWNvbmZvbnQnO30KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAjd3QtbXktY29weSBpLCN3dC1teS1kb3duIGkge2NvbG9yOiB3aGl0ZTtmb250LXNpemU6IDI0cHg7dGV4dC1zaGFkb3c6IDJweCAycHggMTVweCAjZmZmZmZmO2ZvbnQtZmFtaWx5OiAnaWNvbmZvbnQnO30KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAjd3QtbXktbm90aWZ5IGkge2NvbG9yOiB3aGl0ZTtmb250LXNpemU6IDIzcHg7cGFkZGluZzogMTBweCAxcHg7dGV4dC1zaGFkb3c6IDJweCAycHggMTJweCAjZmZmZmZmO30KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAjd3QtaGlkLWJveCBpIHtjb2xvcjogd2hpdGU7Zm9udC1zaXplOiAyNHB4O3RleHQtc2hhZG93OiAycHggMnB4IDEycHggI2ZmZmZmZjtmb250LXNpemU6IDI1cHg7bWFyZ2luLWxlZnQ6IC0xcHg7fQoJCQkJLnd0LXBsYXllci1idG4tYm94IC5wbGF5ZXItYnRueyBwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDIlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt3aWR0aDogMjAlfQoJCQkJLnd0LXBsYXllci1idG4tYm94IC50aXBzeyBwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAyMHB4O2xlZnQ6NTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtjb2xvcjogI0ZGQzEwNzt3aWR0aDogODAlO3RleHQtYWxpZ246IGNlbnRlcjtmb250LXNpemU6IDE1cHg7Zm9udC13ZWlnaHQ6IDUwMDt9CgkJCQkjd3QtbWFzay1ib3gsI3d0LW1heGluZGV4LW1hc2t7ZGlzcGxheTpub25lOyBwb3NpdGlvbjogZml4ZWQ7IHRvcDogMDsgbGVmdDogMDsgcmlnaHQ6IDA7IGJvdHRvbTogMDsgei1pbmRleDogMTAwMDA7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA1Nzt9CgkJCQkjd3QtbWF4aW5kZXgtbWFza3t6LWluZGV4OiA5MDAwMDtkaXNwbGF5Om5vbmU7fQoJCQkJI3d0LXNldC1ib3h7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NTAlO2xlZnQ6NTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApO292ZXJmbG93OiBoaWRkZW47YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ym94LXNoYWRvdzogMCAxNXB4IDMwcHggcmdiYSgwLCAwLCAwLCAuMTUpO2JvcmRlci1yYWRpdXM6IDEycHg7ei1pbmRleDogMTAwMTA7cGFkZGluZzogMTBweCAxNXB4O3BhZGRpbmctcmlnaHQ6IDVweDtib3gtc2l6aW5nOiBib3JkZXItYm94O30KCQkJCSN3dC1zZXQtYm94OjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDE1MHB4O2hlaWdodDogMTUwcHg7Ym9yZGVyLXJhZGl1czogMTAwcHg7YmFja2dyb3VuZC1jb2xvcjogIzIxOTZGMzt6LWluZGV4OiAtMTtvcGFjaXR5OiAwLjc7cmlnaHQ6IDIwMHB4O2JvdHRvbTogMDt0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNTglKTt9CgkJCQkjd3Qtc2V0LWJveDo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDE1MHB4O2hlaWdodDogMTUwcHg7Ym9yZGVyLXJhZGl1czogMTAwcHg7YmFja2dyb3VuZC1jb2xvcjogI0ZGQzEwNzt6LWluZGV4OiAtMTtvcGFjaXR5OiAwLjc7dG9wOiAwO2xlZnQ6IDE3NHB4O3RyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTMlKTt9CgkJCQkjd3Qtc2V0LWJveCAuc2VsZWN0ZWQtYm94IC5zZWxlY3RlZHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmNjAyMjtjb2xvcjogd2hpdGU7fQoJCQkJI3d0LXNldC1ib3ggLnVzZXItYm94LWNvbnRhaW5lcntkaXNwbGF5OiBub25lO2xldHRlci1zcGFjaW5nOiAxcHg7fQoJCQkJI3d0LXNldC1ib3ggLmluZm8tYm94e2Rpc3BsYXk6ZmxleDtoZWlnaHQ6IDUwcHg7YWxpZ24taXRlbXM6IGNlbnRlcjt9CgkJCQkjd3Qtc2V0LWJveCAuaW5mby1ib3ggLmF2YXRhci1ib3h7cG9zaXRpb246IHJlbGF0aXZlO2hlaWdodDogMzZweDt3aWR0aDogMzZweDtiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtib3JkZXItcmFkaXVzOiA3cHg7Ym94LXNoYWRvdzogcmdiKDE2NiAxNjYgMTY2IC8gMjAlKSAwcHggMXB4IDIwcHggMHB4O30KCQkJCSN3dC1zZXQtYm94IC51c2VyLWJveCAudGl0bGV7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtd2VpZ2h0OiA2MDA7Zm9udC1zaXplOiAxNnB4O2NvbG9yOiAjM2EzYTNhO30KCQkJCSN3dC1zZXQtYm94IC51c2VyLWJveCAuZGVzY3tmbGV4OiA4O2ZvbnQtc2l6ZTogMTBweDtjb2xvcjogIzVkNWQ1ZDttYXJnaW46IDAgMTBweDt9CgkJCQkjd3Qtc2V0LWJveCAudXNlci1ib3ggLmF2YXRhcntwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAzNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6IDMwcHg7Ym9yZGVyLXJhZGl1czogN3B4O30KCQkJCSN3dC10aXBzLWJveCwjd3QtZG93bmxvYWQtYm94eyBwb3NpdGlvbjpmaXhlZDt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTtvdmVyZmxvdzogaGlkZGVuO3dpZHRoOiAyNDBweDttaW4taGVpZ2h0OjEzMHB4O2JhY2tncm91bmQtY29sb3I6IHdoaXRlO2JvcmRlci1yYWRpdXM6MTJweDt6LWluZGV4OiA5NTAwMDtwYWRkaW5nOjEwcHggMTVweDt9CgkJCQkjd3QtdGlwcy1ib3ggLnRpdGxle2ZvbnQtc2l6ZTogMTZweDt0ZXh0LWFsaWduOiBjZW50ZXI7Zm9udC13ZWlnaHQ6IDYwMDt9CgkJCQkjd3QtdGlwcy1ib3ggLmNvbnRlbnR7dGV4dC1hbGlnbjogY2VudGVyO21hcmdpbjogMTRweCAwO2ZvbnQtc2l6ZTogMTJweDtjb2xvcjogIzJhMmEyYTtmb250LXdlaWdodDogNTAwO30KCQkJCSN3dC10aXBzLWJveCAuY29udGVudCBwe2NvbG9yOiAjZmY0NzU3O3RleHQtYWxpZ246IGxlZnQ7fQoJCQkJI3d0LXRpcHMtYm94IC5idG4tYm94e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDt9CgkJCQkjd3QtdGlwcy1ib3ggLmJ0bi1ib3ggYnV0dG9ue21pbi13aWR0aDogNjBweDtoZWlnaHQ6IDI4cHg7YmFja2dyb3VuZC1jb2xvcjogI2VjNDA3YTtib3JkZXItcmFkaXVzOiAzMHB4O2NvbG9yOiB3aGl0ZTtib3JkZXI6IG5vbmU7Zm9udC1zaXplOiAxMnB4O30KCQkJCSN3dC10aXBzLWJveCAuYnRuLWJveCAuY2FuY2Vse2Rpc3BsYXk6IG5vbmU7YmFja2dyb3VuZC1jb2xvcjogI2VlZTtjb2xvcjojMmEyYTJhfQoJCQkJI3d0LXRpcHMtYm94IC5sb2dve3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDklO2xlZnQ6IDElOyBjb2xvcjogI2RiZGJkYjsgZm9udC1zaXplOiAxMXB4O3RyYW5zZm9ybTogcm90YXRlKC0xNWRlZyk7dGV4dC1hbGlnbjogY2VudGVyO30KCQkJCSN3dC1ub3RpZnktYm94IHtwb3NpdGlvbjogZml4ZWQ7dG9wOiAyJTtsZWZ0OiA1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC0xMDAlKSBzY2FsZSgwKTtvdmVyZmxvdzogaGlkZGVuO3dpZHRoOiA4MCU7bWluLWhlaWdodDogNzVweDtsZXR0ZXItc3BhY2luZzogMXB4O2JhY2tncm91bmQtY29sb3I6IHdoaXRlO2NvbG9yOiMyYTJhMmE7Ym9yZGVyLXJhZGl1czogMTVweDtib3gtc2hhZG93OiAwIDE1cHggMzBweCByZ2JhKDAsIDAsIDAsIC4xNSk7ei1pbmRleDogOTUwMDA7fQoJCQkJI3d0LW5vdGlmeS1ib3g6OmFmdGVyeyBjb250ZW50OicnO3Bvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMjUwcHg7aGVpZ2h0OiAyNTBweDtib3JkZXItcmFkaXVzOiAyMDBweDtiYWNrZ3JvdW5kLWNvbG9yOiAjMDNBOUY0O3otaW5kZXg6IC0xO29wYWNpdHk6IDAuNztib3R0b206IDA7cmlnaHQ6IDE2NnB4O3RyYW5zZm9ybTogdHJhbnNsYXRlWSg4NSUpO30KCQkJCSN3dC1ub3RpZnktYm94IC50aXRsZXsgdGV4dC1hbGlnbjogY2VudGVyO2hlaWdodDogMzVweDsgbGluZS1oZWlnaHQ6IDM1cHg7Zm9udC1zaXplOiAxNXB4O2ZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjRTkxRTYzO30KCQkJCSN3dC1ub3RpZnktYm94IC5jb250ZW50eyBjb2xvcjogIzNhM2EzYTtwYWRkaW5nOiAxMHB4IDE1cHg7Zm9udC1zaXplOiAxMnB4O30KCQkJCSN3dC1ub3RpZnktYm94IC5jb250ZW50IGF7Y29sb3I6ICMxRTg4RTU7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fQoJCQkJI3d0LW5vdGlmeS1ib3ggLmNvbnRlbnQgcHttYXJnaW4tYm90dG9tOiA1cHg7fQoJCQkJLnd0LXBsYXllci1idG4tYm94eyBwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDt6LWluZGV4OiA5OTk4O2JhY2tncm91bmQtY29sb3I6ICMwMDAwMDA0ZDt9CgkJCQkjd3QtdmlkZW8tY29udGFpbmVye2Rpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOmZpeGVkO3RvcDogMDtsZWZ0OiAwO3JpZ2h0OiAwO2JvdHRvbTogMDsgei1pbmRleDogOTk5ODtiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazt9CgkJCQkjd3QtdmlkZW8tY29udGFpbmVyIC53dC12aWRlb3sgcG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMDAlO3RyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtoZWlnaHQ6IDI0MHB4OyB6LWluZGV4OiA5OTk5O30KCQkJCSN3dC12aWRlby1jb250YWluZXIgLnd0LXZpZGVvIHZpZGVve3dpZHRoOjEwMCU7aGVpZ2h0OiAxMDAlO30KCQkJCS5kcGxheWVyLWNvbnRyb2xsZXJ7Ym90dG9tOiAzMHB4ICFpbXBvcnRhbnQ7fQoJCQkJLm1haW4tcGxheWVye2hlaWdodDogMzAwcHg7fQoJCQkJLmRwbGF5ZXIuZHBsYXllci1oaWRlLWNvbnRyb2xsZXIgLmRwbGF5ZXItY29udHJvbGxlcnsgb3BhY2l0eTogMCAhaW1wb3J0YW50O3RyYW5zZm9ybTogdHJhbnNsYXRlWSgyMDAlKSAhaW1wb3J0YW50O30KCQkJCS53dC1jbG9zZS1idG57IGZvbnQtc2l6ZTogMTVweDtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA0MHB4O2xlZnQ6IDI1cHg7Y29sb3I6IHdoaXRlO30KCQkJCSN3dC1kb3dubG9hZC1ib3h7IHotaW5kZXg6IDEwMDEwO30KCQkJCSN3dC1kb3dubG9hZC1ib3ggLmNsb3Nle3Bvc2l0aW9uOiBhYnNvbHV0ZTtyaWdodDogMHB4O3RvcDogMHB4O3dpZHRoOiA0MHB4O2hlaWdodDogNDBweDt9CgkJCQkjd3QtZG93bmxvYWQtYm94IC5jbG9zZTo6YmVmb3JlLCN3dC1kb3dubG9hZC1ib3ggLmNsb3NlOjphZnRlcntwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogNTAlO3RvcDogNTAlO2NvbnRlbnQ6ICcnO3dpZHRoOiAxNHB4O2hlaWdodDogMnB4O2JvcmRlci1yYWRpdXM6IDFweDtiYWNrZ3JvdW5kLWNvbG9yOiAjYWRhZGFkO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKDQ1ZGVnKTt9CgkJCQkjd3QtZG93bmxvYWQtYm94IC5jbG9zZTo6YWZ0ZXIsI3d0LWRvd25sb2FkLWJveCAuY2xvc2U6OmFmdGVye3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKC00NWRlZyk7fQoJCQkJI3d0LWRvd25sb2FkLWJveDo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246IGFic29sdXRlO3dpZHRoOiAxNTBweDtoZWlnaHQ6IDE1MHB4O2JvcmRlci1yYWRpdXM6IDEwMHB4O2JhY2tncm91bmQtY29sb3I6ICNlOTFlNjM7ei1pbmRleDogLTE7b3BhY2l0eTogMC43O3RvcDogMDtyaWdodDogMTUzcHg7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MCUpO30KCQkJCSN3dC1kb3dubG9hZC1ib3g6OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246IGFic29sdXRlO3dpZHRoOiAxNTBweDtoZWlnaHQ6IDE1MHB4O2JvcmRlci1yYWRpdXM6IDEwMHB4O2JhY2tncm91bmQtY29sb3I6ICNGRkMxMDc7ei1pbmRleDogLTE7b3BhY2l0eTogMC43O2JvdHRvbTogMDtyaWdodDogLTEwMHB4O3RyYW5zZm9ybTogdHJhbnNsYXRlWSgzMCUpO30KCQkJCSN3dC1kb3dubG9hZC1ib3ggdWwgbGl7IGhlaWdodDogMzhweDtsaW5lLWhlaWdodDogMzhweDtmb250LXNpemU6IDExcHg7dGV4dC1hbGlnbjogY2VudGVyO2NvbG9yOiM5MDkwOTA7Zm9udC13ZWlnaHQ6IDUwMDtiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtib3gtc2hhZG93OiByZ2IoMTY2IDE2NiAxNjYgLyAyMCUpIDBweCAxcHggNXB4IDFweDttYXJnaW46IDE4cHggNDVweDtib3JkZXItcmFkaXVzOiA0MHB4O30KCQkJCWApCgkJCWlmIChfQ09ORklHXy5pc01vYmlsZSkgewoJCQkJR01fYWRkU3R5bGUoYAoJCSAgICAgICAgICAgICN3dC1zZXQtYm94IHt3aWR0aDo3MiU7fQoJCSAgICAgICAgYCk7CgkJCX0KCQkJbGV0IHNjcmlwdHMgPSAnJzsKCQkJX0NPTkZJR18uc2NyaXB0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4gewoJCQkJc2NyaXB0cyArPSBgCgkJCQkJPGRpdiBjbGFzcz0iaW5mby1ib3giIGRhdGEtaW5kZXg9IiR7aW5kZXh9Ij4KCQkJCQkJPGRpdiBjbGFzcz0iYXZhdGFyLWJveCI+CgkJCQkJCQk8aW1nIGNsYXNzPSJhdmF0YXIiIHNyYz0iJHtpdGVtLmljb259Ii8+CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJkZXNjIj4KCQkJCQkJCTx0ZXh0PiR7aXRlbS5kZXNjfTwvdGV4dD4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQlgOwoJCQl9KQoKCQkJJChjb250YWluZXIpLmFwcGVuZChgCgkJICAgICAgICA8ZGl2IGlkPSJ3dC0ke19DT05GSUdfLnZpcEJveElkfSI+CgkJCQkgICAgPGRpdiBpZD0id3QtbXkiIGNsYXNzPSJpdGVtIHd0X215X2hhaWppYW8iPgoJCQkJCQk8aW1nIHNyYz0iaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL251bGxfc3F1YXJlLnBuZyI+PC9pbWc+CgkJCQkgICAgPC9kaXY+CgkJCQkgICAgPGRpdiBpZD0id3QtbXktc2V0IiBjbGFzcz0iaXRlbSB3dF9wbGF5ZXJfaGFpamlhbyI+CgkJCQkJICAgIDxpIGNsYXNzPSJpY29uZm9udCI+JiN4ZWMwNTs8L2k+CgkJCQkgICAgPC9kaXY+CgkJCQkJPGRpdiBpZD0id3QtbXktY29weSIgY2xhc3M9Iml0ZW0iPgoJCQkJCSAgICA8aSBjbGFzcz0iaWNvbmZvbnQiPiYjeGVjMDc7PC9pPgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgaWQ9Ind0LW15LWRvd24iIGNsYXNzPSJpdGVtIHd0X215X2Rvd25faGFpamlhbyI+CgkJCQkJICAgIDxpIGNsYXNzPSJpY29uZm9udCI+JiN4ZWMwOTs8L2k+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBpZD0id3QtbXktbm90aWZ5IiBjbGFzcz0iaXRlbSB3dF9teV9ub3RpZnlfaGFpamlhbyIgc3R5bGU9InBhZGRpbmc6IDAgMTFweDsiPgoJCQkJCSAgICA8aSBjbGFzcz0iaWNvbmZvbnQiPiYjeGVjMDg7PC9pPgoJCQkJCTwvZGl2PgoJCQkJICAgIDxkaXYgaWQ9Ind0LWhpZC1ib3giIGNsYXNzPSJpdGVtIj4KCQkJCQkgICAgPGkgY2xhc3M9Imljb25mb250Ij4mI3hlYzA2OzwvaT4KCQkJCSAgICA8L2Rpdj4KCQkJICAgIDwvZGl2PgoJCQkgICAgPGRpdiBpZD0id3QtbGVmdC1zaG93IiBzdHlsZT0idHJhbnNmb3JtOiB0cmFuc2xhdGUoLTYwcHgsLTUwJSk7cGFkZGluZzogMTBweDsiPgoJCQkJCTxpIGNsYXNzPSJpY29uZm9udCI+JiN4ZTcwNDs8L2k+CgkJCSAgICA8L2Rpdj4KCQkJCTxkaXYgaWQ9Ind0LW1hc2stYm94Ij48L2Rpdj4KCQkJCTxkaXYgaWQ9Ind0LXNldC1ib3giPgoJCQkJCTxkaXYgY2xhc3M9ImNsb3NlIj48L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsaW5lLWJveCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0idXNlci1ib3gtY29udGFpbmVyIj4KCQkJCQkJPGRpdiBjbGFzcz0idXNlci1ib3giPgoJCQkJCQkJPGRpdiBjbGFzcz0idGl0bGUiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4Ij7lj4rml7booYzkuZDlt6XlhbflupM8L2Rpdj4KCQkJCQkJCSR7c2NyaXB0c30KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgaWQ9Ind0LWxvYWRpbmctYm94Ij4KCQkJCQk8ZGl2IGNsYXNzPSJsb2FkaW5nIj48L2Rpdj4KCQkJCTwvZGl2PgoJCQkJPGRpdiBpZD0id3QtbWF4aW5kZXgtbWFzayI+PC9kaXY+CgkJCQk8ZGl2IGlkPSJ3dC10aXBzLWJveCI+CgkJCQkJPGRpdiBjbGFzcz0idGl0bGUiPuaPkOekujwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImNvbnRlbnQiPjwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImJ0bi1ib3giPgoJCQkJCQk8YnV0dG9uIGNsYXNzPSdjYW5jZWwnPuWPlua2iDwvYnV0dG9uPgoJCQkJCQk8YnV0dG9uIGNsYXNzPSdzdWJtaXQnPuehruWumjwvYnV0dG9uPgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxvZ28iPgoJCQkJCQk8cD4ke3V0aWwuZGVjb2F0KCdKVFF3YUhSMGNITWxNMEVsTWtZbE1rWnFjM2hzTG5CeWJ3PT0nKX08L3A+CgkJCQkJCTxwPnYgJHtzdXBlclZpcC5fQ09ORklHXy52ZXJzaW9ufTwvcD4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQkJPGRpdiBpZD0id3Qtbm90aWZ5LWJveCI+CgkJCQkJPGRpdiBjbGFzcz0iY2xvc2UiPjwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9InRpdGxlIj7pgJrnn6U8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJjb250ZW50Ij48L2Rpdj4KCQkJCTwvZGl2PgoJCQkJPGRpdiBpZD0id3QtdmlkZW8tY29udGFpbmVyIj4KCQkJCQk8ZGl2IGNsYXNzPSJ3dC1jbG9zZS1idG4iPgoJCQkJCQk8aSBjbGFzcz0idmFuLWljb24gdmFuLWljb24tY2xvc2UiPjwvaT4KCQkJCQkJPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OiA1cHg7Ij7pgIDlh7rmkq3mlL48L3NwYW4+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0id3QtdmlkZW8iPgoJCQkJCQk8dmlkZW8gaWQ9Ind0LXZpZGVvIiBjb250cm9scz48L3ZpZGVvPgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJICAgIGApCgkJCWlmIChfQ09ORklHXy51c2VyICYmIF9DT05GSUdfLnVzZXIuYXZhdGFyKSB7CgkJCQkkKCIjd3QtbXkgaW1nIikuYWRkQ2xhc3MoJ21hcmdpbi1sZWZ0JykKCQkJCSQoJyN3dC1teSBpbWcnKS5hdHRyKCdzcmMnLCBfQ09ORklHXy51c2VyLmF2YXRhcikKCQkJfQoJCQlyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVzb2x2ZShjb250YWluZXIpKTsKCQl9CgoJCWJpbmRFdmVudChjb250YWluZXIpIHsKCQkJY29uc3QgdmlwQm94ID0gJChgI3d0LSR7X0NPTkZJR18udmlwQm94SWR9YCkKCQkJaWYgKEdNX2dldFZhbHVlKCdoYWlqaWFvX2hpZF9jb250cm9sbGVyJywgbnVsbCkpIHsKCQkJCXZpcEJveC5jc3MoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMTI1JSwgLTUwJSkiKQoJCQkJJCgnI3d0LWxlZnQtc2hvdycpLmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLCAtNTAlKSIpCgkJCX0KCgkJCXZpcEJveC5maW5kKCIjd3QtbXkiKS5vbigiY2xpY2siLCAoKSA9PiB7CgkJCSAgICBpZihfQ09ORklHXy51c2VyKXsKCQkJCQlpZihfQ09ORklHXy5teUJ0bk9wZW4pIHJldHVybgoJCQkJCV9DT05GSUdfLm15QnRuT3BlbiA9IHRydWUKCQkJCQkkKCcjd3QtbWFzay1ib3gnKS5jc3MoJ2Rpc3BsYXknLCdibG9jaycpCgkJCQkJJCgiI3d0LXNldC1ib3ggLnVzZXItYm94LWNvbnRhaW5lciIpLmNzcygnZGlzcGxheScsJ2Jsb2NrJykKCQkJCQkkKCIjd3Qtc2V0LWJveCIpLnJlbW92ZUNsYXNzKCdoaWQtc2V0LWJveCcpCgkJCQkJJCgiI3d0LXNldC1ib3giKS5hZGRDbGFzcygnc2hvdy1zZXQtYm94JykKCQkJCQkkKCcjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVyIC5uaWNrbmFtZScpLmh0bWwoX0NPTkZJR18udXNlci5uaWNrbmFtZSkKCQkJCX1lbHNlewoJCQkJCWlmKHVuc2FmZVdpbmRvdy53dF9pbml0X2NvZGUpewoJCQkJCQl1dGlsLmFkZExvZ2luKCkKCQkJCQkJJCgnI3d0LWxvZ2luLW1hc2snKS5jc3MoJ2Rpc3BsYXknLCdibG9jaycpCgkJCQkJCSQoIiN3dC1sb2dpbi1ib3giKS5yZW1vdmVDbGFzcygnaGlkLXNldC1ib3gnKQoJCQkJCQkkKCIjd3QtbG9naW4tYm94IikuYWRkQ2xhc3MoJ3Nob3ctc2V0LWJveCcpCgkJCQkJCXRyeXsKCQkJCQkJCSQoIiN3dC1sb2dpbi1ib3ggaW5wdXQiKS52YWwobWQ1eChtZDV4KCksJ2RlJykuY29kZSkKCQkJCQkJfWNhdGNoKGUpe3V0aWwuc2hvd1RpcHMoeyB0aXRsZTogX0NPTkZJR18uaW5pdEZhaWxNc2d9KX0KCQkJCQkJCgkJCQkJfWVsc2V7CgkJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpCgkJCQkJCSQuZ2V0U2NyaXB0KCdodHRwczovL3Jlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20vanMvbWQ1L2NvZGUuanM/aWQ9JyArIERhdGUubm93KCksZnVuY3Rpb24ocixzKXsKCQkJCQkJCWlmKHMgPT0gJ3N1Y2Nlc3MnKXsKCQkJCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQkJCQkJdXRpbC5hZGRMb2dpbigpCgkJCQkJCQkJJCgnI3d0LWxvZ2luLW1hc2snKS5jc3MoJ2Rpc3BsYXknLCdibG9jaycpCgkJCQkJCQkJJCgiI3d0LWxvZ2luLWJveCIpLnJlbW92ZUNsYXNzKCdoaWQtc2V0LWJveCcpCgkJCQkJCQkJJCgiI3d0LWxvZ2luLWJveCIpLmFkZENsYXNzKCdzaG93LXNldC1ib3gnKQoJCQkJCQkJCXRyeXsKCQkJCQkJCQkJJCgiI3d0LWxvZ2luLWJveCBpbnB1dCIpLnZhbChtZDV4KG1kNXgoKSwnZGUnKS5jb2RlKQoJCQkJCQkJCX1jYXRjaChlKXsKCQkJCQkJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQkJCQkJCQl1dGlsLnNob3dUaXBzKHsgdGl0bGU6IF9DT05GSUdfLmluaXRGYWlsTXNnfSkKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0pCgkJCQkJfQoJCQkJfQoJCQl9KQoKCQkJdmlwQm94LmZpbmQoIiN3dC1teS1zZXQiKS5vbigiY2xpY2siLCBhc3luYyAoKSA9PiB7CgkJCQlpZiAoIV9DT05GSUdfLnVzZXIpIHsKCQkJCQkkKCIjd3QtbXkiKS5jbGljaygpCgkJCQkJcmV0dXJuCgkJCQl9CgkJCQlpZiAoIV9DT05GSUdfLnZpZGVvVXJsLnVybCkgewoJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpCgkJCQkJZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHsKCQkJCQkJYXdhaXQgdXRpbC5zbGVlcCgxMDAwKQoJCQkJCQlpZiAoX0NPTkZJR18udmlkZW9VcmwudXJsKSB7CgkJCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQkJCQlicmVhawoJCQkJCQl9CgkJCQkJfQoJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJCX0KCgkJCQlpZiAoX0NPTkZJR18udmlkZW9VcmwudXJsKSB7CgkJCQkJJCgnI3d0LXZpZGVvLWNvbnRhaW5lcicpLmNzcygnZGlzcGxheScsICdibG9jaycpCgkJCQkJJCgiI3d0LWhpZC1ib3giKS5jbGljaygpCgkJCQkJaWYoX0NPTkZJR18udmlkZW9VcmwudHlwZSAhPSAwKXsKCQkJCQkJaWYoIV9DT05GSUdfLnZpZGVvVXJsLnVybC5zdGFydHNXaXRoKCdibG9iOmh0dHAnKSl7CgkJCQkJCQl1dGlsLnNob3dUaXBzKHsKCQkJCQkJCQl0aXRsZTogbG9jYXRpb24uaHJlZiArICc8L2JyPicgKyB1dGlsLmRlY29hdCgnSlVVNEpVRTNKVGcySlVVNUpVRXlKVGt4SlVVNEpVRTNKVUV6SlVVMkpUbEZKVGt3SlVVMEpVSTRKVUZFSlVVNEpVRkdKVUkzSlVVMUpUaENKVUpHSlVVMkpUa3pKVGhFSlVVMEpVSkVKVGxESlVVekpUZ3dKVGd5SlVVekpUZ3dKVGd5SlVVekpUZ3dKVGd5SlROREpUSkdZbklsTTBVbFJUVWxPRVlsT0VFbFJUWWxPVGNsUWpZbFJUZ2xRVEVsT0VNbFJUUWxRamtsT1RBbFJUZ2xPRFFsT1VFbFJUWWxPVU1sUVVNbFJUVWxPVFFsUVVZbFJUUWxRamdsT0RBbFJUY2xRa1FsT1RFbFJUY2xRVUlsT1Rsb2RIUndjeVV6UVNVeVJpVXlSbXB6ZUd3dWNISnYnKSwKCQkJCQkJCQloaWRDb25maXJtOiB0cnVlCgkJCQkJCQl9KQoJCQkJCQkJYXdhaXQgdXRpbC5zbGVlcCg1MDApCgkJCQkJCX0KCQkJCQkJX0NPTkZJR18udmlkZW9VcmwudXJsID0gYXdhaXQgZ2V0X20zdThfdXJsX2hhaWppYW8oKQoJCQkJCQlpZighX0NPTkZJR18udmlkZW9VcmwudXJsIHx8ICFfQ09ORklHXy52aWRlb1VybC51cmwuaW5jbHVkZXMoJ2h0dHAnKSl7CgkJCQkJCQl1dGlsLnNob3dUaXBzKHsKCQkJCQkJCQl0aXRsZTogbG9jYXRpb24uaHJlZiArICc8L2JyPicgKyB1dGlsLmRlY29hdCgnSlVVMkpUaEJKVUl4SlVVMkpVRkVKVGc1SlVWR0pVSkRKVGhESlVVNEpVRTNKVUV6SlVVMkpUbEZKVGt3SlVVMUpVRTBKVUl4SlVVNEpVSTBKVUUxSlVWR0pVSkRKVGhESlVVNEpVRkdKVUkzSlVVMUpUZzRKVUkzSlVVMkpUazJKVUl3SlVVNUpVRXhKVUkxSlVVNUpUbEVKVUV5SlVVMUpUZzJKVGhFSlVVMUpVSXdKVGxFSlVVNEpVRkdKVGsxSlVVMkpUZzRKVGsySlVVMkpVRXpKVGd3SlVVMkpUbEdKVUUxSlVVMkpVSTFKVUkzSlVVNEpVRTNKVGt5SlVVMUpUbERKVUl3SlVVMUpUbEVKVGd3SlVVMkpUazRKVUZHSlVVMUpUa3dKVUUySlVVMEpVSTRKVUpCSlVVMkpVRkVKVUV6SlVVM0pUZzVKVGc0SlVVMkpVSTFKVUkzSlVVNEpVRTNKVGt5SlVVMUpUbERKVUl3SlVVMUpUbEVKVGd3S0NWRk5pVkJSQ1ZCTkNWRk55VTRPU1U0T0NWRk5pVTVReVZCUXlWRk5TVTRSaVZCUVNWRk5pVTVOQ1ZCUmlWRk5pVTRReVU0TVNWRk5pVkJSQ1ZCTXlWRk55VTRPU1U0T0NWRk5pVkNOU1ZDTnlWRk9DVkJOeVU1TWlWRk5TVTVReVZDTUNWRk5TVTVSQ1U0TUdoaGFXcHBZVzhsUlRjbE9ESWxRamxqYjIwcEpVVkdKVUpESlRoREpVVTFKVUUySlRneUpVVTJKVGxESlRnNUpVVTVKVGszSlVGRkpVVTVKVUV5SlRrNEpVVTJKVGc0SlRrMkpVVTVKVGxESlRnd0pVVTJKVUV5SlVGR0pVVTFKVUZFSlRrd0pVVTJKVGhGSlVFNEpVVTRKVGhFSlRrd0pVVTRKVUZHSlVJM0pVVTRKVGd4SlRrMEpVVTNKVUl6SlVKQ0pVVTFKVGhHSlRreEpVVTNKVGswSlVJMUpVVTNKVUpFSlRreEpVVTNKVUZDSlRrNWFIUjBjSE1sTTBFbE1rWWxNa1pxYzNoc0xuQnlieVZGTkNWQ09DVkJSQ1ZGTlNVNU5DVkJSU1ZGTlNVNU1DVTRSU1ZGT0NVNE1TVTVOQ1ZGTnlWQ015VkNRaVZGTmlVNU5pVkNPU1ZGTlNWQ1F5VTRSZz09JykKCQkJCQkJCX0pCgkJCQkJCQlyZXR1cm4KCQkJCQkJfQoJCQkJCQkkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3ggLnN1Ym1pdCcpLmNsaWNrKCkKCQkJCQl9CgkJCQkJaWYgKF9DT05GSUdfLmlzTW9iaWxlICYmIF9DT05GSUdfLmlzTW9iaWxlWzBdID09ICdpUGhvbmUnKSB7CgkJCQkJCSQoJy53dC12aWRlbycpLmVtcHR5KCkKCQkJCQkJJCgnLnd0LXZpZGVvJykuYXBwZW5kKGAKCQkJCQkJCTx2aWRlbyBjb250cm9scyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj4KCQkJCQkJCSAgICA8c291cmNlIHNyYz0iJHtfQ09ORklHXy52aWRlb1VybC51cmx9IiB0eXBlPSJhcHBsaWNhdGlvbi94LW1wZWdVUkwiPgoJCQkJCQkJPC92aWRlbz4KCQkJCQkJYCkKCQkJCQkJLy8gX0NPTkZJR18uaGxzX2RwID0gbmV3IERQbGF5ZXIoewoJCQkJCQkvLyAJY29udGFpbmVyOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIud3QtdmlkZW8iKSwKCQkJCQkJLy8gCXNjcmVlbnNob3Q6IHRydWUsCgkJCQkJCS8vIAl2aWRlbzogewoJCQkJCQkvLyAJCXVybDogX0NPTkZJR18udmlkZW9VcmwudXJsCgkJCQkJCS8vIAl9CgkJCQkJCS8vIH0pCgkJCQkJCS8vIF9DT05GSUdfLmhsc19kcC5wbGF5KCkKCQkJCQl9IGVsc2UgewoJCQkJCQljb25zdCB2aWRlbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53dC12aWRlbyAjd3QtdmlkZW8nKQoJCQkJCQlfQ09ORklHXy5obHNfZHAgPSBuZXcgSGxzKCkKCQkJCQkJX0NPTkZJR18uaGxzX2RwLmxvYWRTb3VyY2UoX0NPTkZJR18udmlkZW9VcmwudXJsKQoJCQkJCQlfQ09ORklHXy5obHNfZHAuYXR0YWNoTWVkaWEodmlkZW8pCgkJCQkJCV9DT05GSUdfLmhsc19kcC5vbihIbHMuRXZlbnRzLk1BTklGRVNUX1BBUlNFRCwgZnVuY3Rpb24oKSB7CgkJCQkJCQl2aWRlby5wbGF5KCkKCQkJCQkJfSkKCQkJCQl9CgkJCQl9CgkJCQlpZiAoIV9DT05GSUdfLnZpZGVvVXJsLnVybCkgewoJCQkJCXV0aWwuc2hvd1RpcHMoewoJCQkJCQl0aXRsZTogbG9jYXRpb24uaHJlZiArICc8L2JyPuaKseatieacquajgOa1i+WIsOW4luWtkOinhumike+8jOWPr+iDveatpOa1j+iniOWZqOS4jeWFvOWuuShpb3Pkvb/nlKhzYWZhcmkrc3RheeaIluiAhXZpYea1j+iniOWZqO+8jOWuieWNk+eUqHZpYea1j+iniOWZqCknCgkJCQkJfSkKCQkJCX0KCQkJfSkKCgkJCSQoJyN3dC12aWRlby1jb250YWluZXIgZGl2Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgewoJCQkJZS5zdG9wUHJvcGFnYXRpb24oKQoJCQl9KQoKCQkJJCgnLnd0LWNsb3NlLWJ0bicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgewoJCQkJJCgnI3d0LXZpZGVvLWNvbnRhaW5lcicpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJCWlmIChfQ09ORklHXy5obHNfZHApIF9DT05GSUdfLmhsc19kcC5kZXN0cm95KCkKCQkJCSQoIiN3dC1sZWZ0LXNob3ciKS5jbGljaygpOwoJCQl9KQoKCQkJdmlwQm94LmZpbmQoIiN3dC1teS1jb3B5Iikub24oImNsaWNrIiwgYXN5bmMgKCkgPT4gewoJCQkJaWYgKCFfQ09ORklHXy51c2VyKSB7CgkJCQkJJCgiI3d0LW15IikuY2xpY2soKQoJCQkJCXJldHVybgoJCQkJfQoJCQkJaWYgKCFfQ09ORklHXy52aWRlb1VybC51cmwpIHsKCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKQoJCQkJCWZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7CgkJCQkJCWF3YWl0IHV0aWwuc2xlZXAoMTAwMCkKCQkJCQkJaWYgKF9DT05GSUdfLnZpZGVvVXJsLnVybCkgewoJCQkJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQkJCQkJYnJlYWsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJCWlmICghX0NPTkZJR18udmlkZW9VcmwudXJsKSB7CgkJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJCXRpdGxlOiBsb2NhdGlvbi5ocmVmICsgJzwvYnI+5oqx5q2J5pyq5qOA5rWL5Yiw5biW5a2Q6KeG6aKR77yM5Y+v6IO95q2k5rWP6KeI5Zmo5LiN5YW85a65KGlvc+S9v+eUqHNhZmFyaStzdGF55oiW6ICFdmlh5rWP6KeI5Zmo77yM5a6J5Y2T55Sodmlh5rWP6KeI5ZmoKScKCQkJCQl9KQoJCQkJfWVsc2V7CgkJCQkJaWYoIV9DT05GSUdfLnZpZGVvVXJsLnVybC5pbmNsdWRlcygnLm0zdTgnKSl7CgkJCQkJCXV0aWwuY29weVRleHQoX0NPTkZJR18udmlkZW9VcmwudXJsKS50aGVuKHJlcyA9PiB7CgkJCQkJCQl1dGlsLnNob3dUaXBzKHsKCQkJCQkJCQl0aXRsZTogX0NPTkZJR18udmlkZW9VcmwudXJsKyAn5pqC5LiN5pSv5oyB5L2/55So77yM6K+3562J5b6F5L+u5aSNJwoJCQkJCQkJfSkKCQkJCQkJfSkKCQkJCQl9ZWxzZXsKCQkJCQkJdXRpbC5jb3B5VGV4dChfQ09ORklHXy52aWRlb1VybC51cmwpLnRoZW4ocmVzID0+IHsKCQkJCQkJCXV0aWwuc2hvd1RpcHMoewoJCQkJCQkJCXRpdGxlOiAn6KeG6aKR5Zyw5Z2A5aSN5Yi25oiQ5YqfJwoJCQkJCQkJfSkKCQkJCQkJfSkKCQkJCQl9CgkJCQl9CgkJCX0pCgoJCQl2aXBCb3guZmluZCgiI3d0LW15LWRvd24iKS5vbigiY2xpY2siLCAoKSA9PiB7CgkJCQlpZiAoIV9DT05GSUdfLnVzZXIpIHsKCQkJCQkkKCIjd3QtbXkiKS5jbGljaygpCgkJCQkJcmV0dXJuCgkJCQl9CgkJCQlpZihfQ09ORklHXy52aWRlb1VybC51cmwgJiYgIV9DT05GSUdfLnZpZGVvVXJsLnVybC5pbmNsdWRlcygnLm0zdTgnKSl7CgkJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJCXRpdGxlOiAn5pqC5LiN5pSv5oyB5LiL6L2977yM6K+3562J5b6F5L+u5aSNJwoJCQkJCX0pCgkJCQkJcmV0dXJuCgkJCQl9CgkJCQl1dGlsLnNob3dEb3duTG9hZFdpbmRvdygpCgkJCX0pCgoJCQl2aXBCb3guZmluZCgiI3d0LWhpZC1ib3giKS5vbigiY2xpY2siLCAoKSA9PiB7CgkJCQl2aXBCb3guY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDEyNSUsIC01MCUpIik7CgkJCQkkKCcjd3QtbGVmdC1zaG93JykuY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsIC01MCUpIikKCQkJCUdNX3NldFZhbHVlKCdoYWlqaWFvX2hpZF9jb250cm9sbGVyJywgMSkKCQkJfSkKCgkJCSQoJyN3dC1sZWZ0LXNob3cnKS5vbignY2xpY2snLCAoKSA9PiB7CgkJCQkkKCcjd3QtbGVmdC1zaG93JykuY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKC02MHB4LCAtNTAlKSIpOwoJCQkJdmlwQm94LmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLCAtNTAlKSIpCgkJCQlHTV9zZXRWYWx1ZSgnaGFpamlhb19oaWRfY29udHJvbGxlcicsICcnKQoJCQl9KQoKCQkJJCgnI3d0LW1hc2stYm94Jykub24oJ2NsaWNrJywgKCkgPT4gewoJCQkJJCgnI3d0LW1hc2stYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQkJJCgiI3d0LXNldC1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94Jyk7CgkJCQkkKCIjd3Qtc2V0LWJveCIpLmFkZENsYXNzKCdoaWQtc2V0LWJveCcpCgkJCQkkKCIjd3QtZG93bmxvYWQtYm94IikucmVtb3ZlQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOwoJCQkJJCgiI3d0LWRvd25sb2FkLWJveCIpLmFkZENsYXNzKCdoaWQtc2V0LWJveCcpCgkJCQlzZXRUaW1lb3V0KCgpID0+IHsKCQkJCQkkKCIjd3Qtc2V0LWJveCAubGluZS1ib3giKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwoJCQkJCSQoIiN3dC1zZXQtYm94IC51c2VyLWJveC1jb250YWluZXIiKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQl9LCA1MDApCgkJCX0pCgoJCQkkKCcjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVyIC51c2VyLWJveCAuaW5mby1ib3gnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7CgkJCQlsZXQgaW5kZXggPSAnJwoJCQkJdHJ5IHsKCQkJCQlpbmRleCA9IE51bWJlcihlLmN1cnJlbnRUYXJnZXQuYXR0cmlidXRlc1snZGF0YS1pbmRleCddLnZhbHVlKQoJCQkJfSBjYXRjaCAoZSkge30KCQkJCWlmIChfQ09ORklHXy5zY3JpcHRzW2luZGV4XS5tc2cpIHsKCQkJCQl1dGlsLnNob3dUaXBzKHsKCQkJCQkJdGl0bGU6IF9DT05GSUdfLnNjcmlwdHNbaW5kZXhdLm1zZwoJCQkJCX0pCgkJCQkJcmV0dXJuCgkJCQl9OwoJCQkJaWYgKGluZGV4ICE9IChfQ09ORklHXy5zY3JpcHRzLmxlbmd0aCAtIDEpKSB7CgkJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJCXRpdGxlOiB1dGlsLmRlY29hdCgnSlVVNEpVRkdKVUkzSlVVMUpUbERKVUU0SlVVM0pVSkVKVGt4SlVVM0pVRkNKVGs1YUhSMGNITWxNMEVsTWtZbE1rWnFjM2hzTG5CeWJ5VkZOQ1ZDT0NWQlJDVkZPQ1U0UlNWQ055VkZOU1U0UmlVNU5nPT0nKQoJCQkJCX0pCgkJCQl9IGVsc2UgewoJCQkJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gX0NPTkZJR18uc2NyaXB0c1tpbmRleF0udXJsCgkJCQl9CgkJCX0pCgoJCQkkKCIjd3Qtc2V0LWJveCAuY2xvc2UiKS5vbigiY2xpY2siLCAoKSA9PiB7CgkJCQkkKCcjd3QtbWFzay1ib3gnKS5jbGljaygpCgkJCX0pCgoJCQl2aXBCb3guZmluZCgiI3d0LW15LW5vdGlmeSIpLm9uKCJjbGljayIsICgpID0+IHsKCQkJCWlmIChfQ09ORklHXy5zaG93Tm90aWZ5KSB7CgkJCQkJJCgnI3d0LW5vdGlmeS1ib3gnKS5jbGljaygpCgkJCQl9IGVsc2UgewoJCQkJCWNvbnN0IG5vdGlmeSA9IEdNX2dldFZhbHVlKCdoYWlqaWFvX25vdGlmeScsICcnKTsKCQkJCQlpZiAobm90aWZ5ICYmIChub3RpZnkuZGF0ZSA9PSBuZXcgRGF0ZSgpLnNldEhvdXJzKDAsIDAsIDAsIDApKSkgewoJCQkJCQl1dGlsLnNob3dOb3RpZnkoewoJCQkJCQkJdGl0bGU6IG5vdGlmeS5tc2cKCQkJCQkJfSkKCQkJCQl9IGVsc2UgewoJCQkJCQl1dGlsLnNob3dOb3RpZnkoewoJCQkJCQkJdGl0bGU6ICfov5jmsqHmnInpgJrnn6Xkv6Hmga8nCgkJCQkJCX0pCgkJCQkJfTsKCQkJCQl1dGlsLnNob3dBbmRIaWRUaXBzKCd3dF9teV9ub3RpZnlfaGFpamlhbycsICdzZXQnLCBmYWxzZSkKCQkJCX0KCQkJfSkKCgkJCWlmICghX0NPTkZJR18udXNlcikgewoJCQkJdXRpbC5hZGRMb2dpbigpCgkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcjd3QtbXknKS50aGVuKHJlcyA9PnsKCQkJCQlzZXRUaW1lb3V0KCgpPT57CgkJCQkJCXJlcy5jbGljaygpCgkJCQkJfSwyNTAwKQoJCQkJfSkKCQkJfQoJCQlpZih1bnNhZmVXaW5kb3cud3RfaGFpamlhb19zY3JpcHQgPiAxKXsKCQkJCWNvbnN0IGNvbnRyb2xsZXJCb3hJZCA9ICcjd3QtJyArIF9DT05GSUdfLnZpcEJveElkCgkJCQkkKGNvbnRyb2xsZXJCb3hJZCkuYXBwZW5kKGAKCQkJCQk8ZGl2IGNsYXNzPSJudW0tZXJyb3IiIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA0cHg7IGxlZnQ6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Zm9udC1zaXplOiAxMHB4O2NvbG9yOiByZWQ7ei1pbmRleDogLTE7Ij4KCQkJCQkJJHt1bnNhZmVXaW5kb3cud3RfaGFpamlhb19zY3JpcHR9CgkJCQkJPC9kaXY+CgkJCQlgKQoJCQl9CgkJfQoJfQoKCXJldHVybiB7CgkJc3RhcnQ6ICgpID0+IHsKCQkJdW5zYWZlV2luZG93Lnd0X2hhaWppYW9fc2NyaXB0ID0gdW5zYWZlV2luZG93Lnd0X2hhaWppYW9fc2NyaXB0PyB1bnNhZmVXaW5kb3cud3RfaGFpamlhb19zY3JpcHQgKys6IDEKCQkJY29uc3Qgd3RfaGFpamlhb19maXJzdF91c2UgPSBHTV9nZXRWYWx1ZSgnd3RfaGFpamlhb19maXJzdF91c2UnLCAnJykKCQkJaWYgKCF3dF9oYWlqaWFvX2ZpcnN0X3VzZSkgR01fc2V0VmFsdWUoJ3d0X2hhaWppYW9fZmlyc3RfdXNlJywgRGF0ZS5ub3coKSArIChNYXRoLnJvdW5kKE1hdGgKCQkJCS5yYW5kb20oKSAqIDg5OTk5OSArIDEwMDAwMCkgKyAnJykpCgkJCV9DT05GSUdfLnVzZXIgPSBHTV9nZXRWYWx1ZSgnanN4bF91c2VyJywgJycpCgkJCWlmIChfQ09ORklHXy51c2VyKSB7CgkJCQlpZiAoX0NPTkZJR18udXNlci5sb2dpbl9kYXRlICYmIChfQ09ORklHXy51c2VyLmxvZ2luX2RhdGUgIT0gbmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLAoJCQkJCQkwKSkpIHsKCQkJCQlfQ09ORklHXy51c2VyID0gJycKCQkJCQlHTV9zZXRWYWx1ZSgnanN4bF91c2VyJywgJycpCgkJCQl9CgkJCX0KCQkJbmV3IEJhc2VDb25zdW1lcigpLnBhcnNlKCkKCQl9LAoJCV9DT05GSUdfCgl9Cn0pKCk7CgooZnVuY3Rpb24oKXsJCglpZihsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCd0b29scy5idWdzY2FuZXIuY29tJykpewoJCXV0aWwuZmluZFRhcmdldEVsZW1lbnQoJy5pbnB1dC1ncm91cCBpbnB1dCcpLnRoZW4ocmVzID0+ewoJCQljb25zdCB1cmwgPSBsb2NhdGlvbi5zZWFyY2gucmVwbGFjZSgnP20zdTg9JywnJykucmVwbGFjZSgvXHMqL2csIiIpCgkJCWlmKHVybCAmJiB1cmwuc3RhcnRzV2l0aCgnaHR0cCcpKXsKCQkJCSQocmVzKS52YWwodXJsKQoJCQl9CgkJfSkKCQlyZXR1cm4KCX0KCWlmKGxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ3Rvb2xzLnRoYXR3aW5kLmNvbScpKXsKCQlHTV9hZGRTdHlsZShgLnRvcC1hZHtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fWApCgkJdXRpbC5maW5kVGFyZ2V0RWxlbWVudCgnLmJ4LS10ZXh0LWlucHV0X19maWVsZC1vdXRlci13cmFwcGVyIGlucHV0JywxMCkudGhlbihyZXMgPT57CgkJCSQocmVzKS52YWwoRGF0ZS5ub3coKSkKCQkJcmVzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJpbnB1dCIpKQoJCX0pCgkJcmV0dXJuCgl9CglpZihsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdibG9nLmx1Y2tseS1tancuY24nKSl7CgkJR01fYWRkU3R5bGUoYAoJCQkjbS1hcHAgYSwubS1wLXRlbXAtdXJsLC5tLXAtY3Jvc3MsLm0tcC1pbnB1dC1jb250YWluZXIgZGl2Om50aC1vZi10eXBlKDEpe2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt9CgkJCS5tLXAtaW5wdXQtY29udGFpbmVyeyBkaXNwbGF5OiBibG9jazt9CgkJCS5tLXAtaW5wdXQtY29udGFpbmVyIGlucHV0eyB3aWR0aDogMTAwJTtmb250LXNpemU6IDEycHg7bWFyZ2luLWJvdHRvbTogNXB4O30KCQkJLm0tcC1pbnB1dC1jb250YWluZXIgZGl2eyBoZWlnaHQ6IDQ1cHg7bGluZS1oZWlnaHQ6IDQ1cHg7Zm9udC1zaXplOiAxNXB4O21hcmdpbi10b3A6IDNweDt9CgkJCS5tLXAtc3RyZWFte2xpbmUtaGVpZ2h0OiBub3JtYWw7Zm9udC1zaXplOiAxMnB4O30KCQlgKQoJCXJldHVybgoJfQoKCWNvbnN0IG9sZGFkZCA9IEV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyCglFdmVudFRhcmdldC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzKXsKCQlpZihhcmdzWzBdID09ICdjbGljaycpewoJCQlpZih0aGlzLmNsYXNzTmFtZSA9PSAnbG9naW4tYnRuJyB8fCB0aGlzLmNsYXNzTmFtZSA9PSAnZWwtYnV0dG9uIGxvZ2luLWZvcm0tYnV0dG9uIGVsLWJ1dHRvbi0tcHJpbWFyeScpewoJCQkJY29uc3QgdXNlciA9IEdNX2dldFZhbHVlKCdoYWlqaWFvX3VzZXJwd2QnLCcnKQoJCQkJaWYodXNlcil7CgkJCQkJY29uc3QgZSA9IG5ldyBFdmVudCgiaW5wdXQiKQoJCQkJCXV0aWwuZmluZFRhcmdldEVsZW1lbnQoJ2lucHV0W3BsYWNlaG9sZGVyPSLor7fovpPlhaXnlKjmiLflkI0v6YKu566xIl0saW5wdXRbcGxhY2Vob2xkZXI9Iuivt+i+k+WFpeeUqOaIt+WQjSJdJykudGhlbihyZXMgPT57CgkJCQkJCSQocmVzKS52YWwodXNlci51c2VybmFtZSkKCQkJCQkJcmVzLmRpc3BhdGNoRXZlbnQoZSkKCQkJCQkJdXRpbC5maW5kVGFyZ2V0RWxlbWVudCgnaW5wdXRbdHlwZT0icGFzc3dvcmQiXScpLnRoZW4ocmVzID0+ewoJCQkJCQkJJChyZXMpLnZhbCh1c2VyLnB3ZCkKCQkJCQkJCXJlcy5kaXNwYXRjaEV2ZW50KGUpCgkJCQkJCX0pCgkJCQkJfSkKCQkJCX0KCQkJfQoJCX0KCQlvbGRhZGQuY2FsbCh0aGlzLC4uLmFyZ3MpCgl9CgoJc3VwZXJWaXAuc3RhcnQoKTsKfSkoKTs=
Add Comment
Please, Sign In to add comment