{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-eslint\\node_modules\\eslint-loader\\index.js??ref--13-0!D:\\jenkins\\workspace\\dataShare-fvue\\src\\directive.js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\directive.js","mtime":1733309212391},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\babel.config.js","mtime":1733906004399},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-eslint\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50ZXN0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3Iuc29tZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIjsKaW1wb3J0IFZ1ZSBmcm9tICJ2dWUiOwppbXBvcnQgdXRpbHMgZnJvbSAiQC9ob3RlbnQtdWktdXRpbC5qcyI7CmltcG9ydCBGb3JtTWF0aCBmcm9tICJAL21hdGguanMiOwppbXBvcnQgZGlhbG9nIGZyb20gIkAvYXBpL2RpYWxvZ0FwaS5qcyI7CmltcG9ydCBDdXN0b21RdWVyeSBmcm9tICJAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9idXMvQ3VzdG9tUXVlcnkuanMiOwppbXBvcnQgXyBmcm9tICJsb2Rhc2giOwppbXBvcnQgcmVxIGZyb20gIkAvcmVxdWVzdC5qcyI7CmltcG9ydCBhcHAgZnJvbSAiQC9tYWluLmpzIjsKCi8vIOihqOWNlXRy5Lit5qC55o2u6ZqQ6JeP5a2X5q615Yqo5oCB5ZCI5bm25Y2V5YWD5qC855qE5oyH5LukClZ1ZS5kaXJlY3RpdmUoJ3BpbnlpbicsIHsKICAvLyDmjIfku6TnmoTlrprkuYkKICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiBjb21wb25lbnRVcGRhdGVkKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIGNvbnRleHQgPSB2bm9kZS5jb250ZXh0OwogICAgLy8g6Ziy5oqWCiAgICB2YXIgZGVib3VuY2VHZXRQaW55aW4gPSBfLmRlYm91bmNlKGZ1bmN0aW9uIChuZXdWYWwpIHsKICAgICAgLy8gZGlzYWJsZWQg5oiW6ICFIHJlYWRvbmx5IOaXtiDkuI3pnIDopoHor7fmsYIKICAgICAgaWYgKGVsLl9fdnVlX18uZGlzYWJsZWQgfHwgZWwuX192dWVfXy5yZWFkb25seSkgcmV0dXJuOwogICAgICByZXEucmVxdWVzdCh7CiAgICAgICAgdXJsOiAiIi5jb25jYXQod2luZG93LmNvbnRleHQudWMsICIvYmFzZS90b29scy92MS9nZXRQaW55aW4iKSwKICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgIHBhcmFtczogewogICAgICAgICAgY2hpbmVzZTogbmV3VmFsLAogICAgICAgICAgdHlwZTogIiIuY29uY2F0KGJpbmRpbmcubW9kaWZpZXJzLmZ1bGwgPyAxIDogMCkKICAgICAgICB9CiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIGlmIChyZXMuZGF0YS5zdGF0ZSkgewogICAgICAgICAgdmFyIG1vZGVsRXhwID0gdm5vZGUuZGF0YS5tb2RlbC5leHByZXNzaW9uLnJlcGxhY2UoL1xbXHcrLj9cJFx3K1xdL2csICJbIiArIGJpbmRpbmcuYXJnICsgIl0iKTsKICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKGNvbnRleHQsIG1vZGVsRXhwLCByZXMuZGF0YS52YWx1ZSk7CiAgICAgICAgICBhcHAuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgYXBwLiR2YWxpZGF0b3IudmFsaWRhdGUoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSkuZmluYWxseShmdW5jdGlvbiAoKSB7fSk7CiAgICB9LCAzMDApOwogICAgaWYgKGJpbmRpbmcudmFsdWUgJiYgYmluZGluZy52YWx1ZSAhPSBiaW5kaW5nLm9sZFZhbHVlKSB7CiAgICAgIGRlYm91bmNlR2V0UGlueWluKGJpbmRpbmcudmFsdWUpOwogICAgfQoKICAgIC8vIGNvbnRleHQuJHdhdGNoKHdhdGNoRXhwKCksIGZ1bmN0aW9uIChuZXdWYWwsIG9sZFZhbCkgewogICAgLy8gCWlmIChuZXdWYWwgJiYgbmV3VmFsICE9IG9sZFZhbCkgewogICAgLy8gCQlkZWJvdW5jZUdldFBpbnlpbihuZXdWYWwpOwogICAgLy8gCX0KICAgIC8vIH0sIHsKICAgIC8vIAlkZWVwOiB0cnVlLAogICAgLy8gCWltbWVkaWF0ZTogZmFsc2UKICAgIC8vIH0pOwogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoJ3Blcm1pdCcsIHsKICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiBjb21wb25lbnRVcGRhdGVkKGVsLCBiaW5kaW5nKSB7CiAgICBpZiAoZWwudGFnTmFtZSAhPT0gIlRSIikgewogICAgICB0aHJvdyAidi1wZXJtaXTmjIfku6Tlj6rog73nlKjlnKh0cuWFg+e0oOS4ii4iOwogICAgfQogICAgaWYgKCFiaW5kaW5nLnZhbHVlIHx8IGJpbmRpbmcudmFsdWUuY29uc3RydWN0b3IgIT09IE51bWJlcikgewogICAgICB0aHJvdyAidi1wZXJtaXTmjIfku6TnmoTlgLzlj6rog73mmK/lpKfkuo4w55qE5pWw5a2XLiI7CiAgICB9CiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoImhpZGRlbiIpOwoKICAgIC8vIHRy5Lit5rKh5pyJ5a2Q5YWD57Sg5pe277yM5Yig6ZmkdHLoh6rouqsKICAgIGlmIChlbC5jZWxscy5sZW5ndGggPT0gMCkgewogICAgICBlbC5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsICJoaWRkZW4iKTsKICAgIH0gZWxzZSBpZiAoZWwuY2VsbHMubGVuZ3RoIDwgYmluZGluZy52YWx1ZSkgewogICAgICB2YXIgY29sc3BhbiA9IGJpbmRpbmcudmFsdWUgLSBlbC5jZWxscy5sZW5ndGggKyAxOwogICAgICAvLyDorr7nva5jb2xzcGFu5a6e546w5Y2V5YWD5qC85ZCI5bm2CiAgICAgIGVsLmNlbGxzW2VsLmNlbGxzLmxlbmd0aCAtIDFdLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsIGNvbHNwYW4pOwogICAgfSBlbHNlIGlmIChlbC5jZWxscy5sZW5ndGggPT09IGJpbmRpbmcudmFsdWUpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGM7IGMgPSBlbC5jZWxsc1tpKytdOykgewogICAgICAgIGMucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIik7CiAgICAgIH0KICAgIH0KICB9Cn0pOwoKLy8g6KGo5Y2V5oyH5Luk77yM5Lya5Zyo6KGo5Y2V55qEdnVl5a6e5L6L5LiK5re75Yqg5LiA5LiqbWFw77yM55So5Lul5a2Y5pS+5pWw5a2m6L+Q566X55qE6KGo6L6+5byPClZ1ZS5kaXJlY3RpdmUoJ2Zvcm0nLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgIGlmIChpbnN0ICYmICFpbnN0Lmhhc093blByb3BlcnR5KCJ3YXRjaE1hcCIpKSB7CiAgICAgIGluc3RbIndhdGNoTWFwIl0gPSBuZXcgTWFwKCk7CiAgICB9CiAgfQp9KTsKCi8vIOWIpOaWrei+k+WFpeahhuaYr+WQpuS9nOS4uuiuoeeul+Wtl+aute+8jOaYr+WImea3u+WKoOebkeWQrApWdWUuZGlyZWN0aXZlKCdleHByZXNzJywgewogIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIGNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICB2YXIgaW5zdCA9IHZub2RlLmNvbnRleHQ7CiAgICBpZiAoIWluc3QuJHZub2RlLmRhdGEubW9kZWwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIGVsQXR0ciA9IGluc3QuJHZub2RlLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhLm1vZGVsRXhwcmVzc2lvbjsKICAgIGlmIChlbEF0dHIgJiYgIWluc3QuX2V4cHJlc3NJbml0KSB7CiAgICAgIGluc3QuX2V4cHJlc3NJbml0ID0gdHJ1ZTsKICAgICAgLy8g5a2Q6KGo5q+P5LiA6KGM5pWw5o2u5L2c55So5Z+f5omA5Zyo55qEZG9t5YWD57SgCiAgICAgIHZhciBfdXRpbHMkZ2V0U3ViU2NvcGVFbEEgPSB1dGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoZWwpLAogICAgICAgIHN1YlNjb3BlRWwgPSBfdXRpbHMkZ2V0U3ViU2NvcGVFbEEuc3ViU2NvcGVFbDsKICAgICAgdmFyIHN1Ym5hbWUgPSBudWxsOwogICAgICB2YXIgYWxpYXNFbEF0dHIgPSBudWxsOwogICAgICAvLyDlrZDooajmlbDmja7vvIzpnIDopoHmib7liLDphY3nva7kuoZkYXRhLXN1Ym5hbWXnmoTlhYPntKAKICAgICAgaWYgKHN1YlNjb3BlRWwpIHsKICAgICAgICBzdWJuYW1lID0gc3ViU2NvcGVFbC5kYXRhc2V0WyJzdWJuYW1lIl07CiAgICAgICAgaWYgKCFzdWJuYW1lKSB7CiAgICAgICAgICB0aHJvdyAi5peg5rOV6I635Y+W5Yiw5b2T5YmN5a2Q6KGo5YmN57yAIjsKICAgICAgICB9CiAgICAgICAgdmFyIGVsQXR0ckFyeSA9IGVsQXR0ci5zcGxpdCgiLiIpLAogICAgICAgICAgZWxBdHRyQXJ5U2l6ZSA9IGVsQXR0ckFyeS5sZW5ndGg7CiAgICAgICAgaWYgKGVsQXR0ckFyeVNpemUgPCAxKSB7CiAgICAgICAgICB0aHJvdyAiXHU1QjUwXHU4ODY4XHU0RTJEXHU3Njg0XHU2NTcwXHU2MzZFXHU3RUQxXHU1QjlBXHU4ODY4XHU4RkJFXHU1RjBGIi5jb25jYXQoZWxBdHRyLCAiXHU5NTE5XHU4QkVGIik7CiAgICAgICAgfQogICAgICAgIGFsaWFzRWxBdHRyID0gIiIuY29uY2F0KHN1Ym5hbWUsICIuIikuY29uY2F0KGVsQXR0ckFyeVtlbEF0dHJBcnlTaXplIC0gMV0pOwogICAgICB9CiAgICAgIHZhciBwID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKGluc3QpOwogICAgICBpZiAocC53YXRjaE1hcCAmJiAocC53YXRjaE1hcC5oYXMoZWxBdHRyKSB8fCBwLndhdGNoTWFwLmhhcyhhbGlhc0VsQXR0cikpKSB7CiAgICAgICAgaWYgKCFpbnN0Ll93YXRjaGVycy5zb21lKGZ1bmN0aW9uIChtKSB7CiAgICAgICAgICByZXR1cm4gbS5leHByZXNzaW9uID09PSAnaW5wdXRWYWwnOwogICAgICAgIH0pKSB7CiAgICAgICAgICBpbnN0LiR3YXRjaCgiaW5wdXRWYWwiLCBmdW5jdGlvbiAobmV3VmFsLCBvbGRWYWwsIGZhcmV3ZWxsKSB7CiAgICAgICAgICAgIGlmIChuZXdWYWwgIT09IG9sZFZhbCkgewogICAgICAgICAgICAgIHZhciBleHBMaXN0ID0gcC53YXRjaE1hcC5nZXQoZWxBdHRyKSB8fCBwLndhdGNoTWFwLmdldChhbGlhc0VsQXR0cik7CiAgICAgICAgICAgICAgZXhwTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gMDsKICAgICAgICAgICAgICAgIHZhciB0ID0gaXRlbS50YXJnZXQ7CiAgICAgICAgICAgICAgICAvLyDlvZPlnKjlrZDooajljZXooYzkuK3ml7bvvIzogIzkuJTkuI3mmK/lr7nlrZDooajov5vooYzliJfov5Dnrpfml7bvvIzliKTlrprkuLrlrZDooajlvZPliY3ooYzlhoXov5DnrpcKICAgICAgICAgICAgICAgIGlmIChzdWJTY29wZUVsICYmICEvLio/XFtcey4qP1x9XF0uKj8vLnRlc3QoaXRlbS5leHApKSB7CiAgICAgICAgICAgICAgICAgIC8vIOe7hOS7tumUgOavgeaXtu+8jOS4jeWGjeiuoeeul+WtkOihqOWNleihjOeahOWFrOW8jwogICAgICAgICAgICAgICAgICBpZiAoZmFyZXdlbGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc3ViU2NvcGVFbC5kYXRhc2V0WyJpbmRleCJdOwogICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIHRocm93ICLojrflj5bkuI3liLDlvZPliY3lrZDooajooYznmoTntKLlvJXvvIzml6Dms5XlrozmiJDorqHnrpcuIjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICByZXN1bHQgPSBGb3JtTWF0aC5jYWxjU3ViRXhwVmFsdWUoaXRlbS5leHAsIHAsIHN1Ym5hbWUsIGluZGV4KTsKICAgICAgICAgICAgICAgICAgcC4kZW1pdCh0LCB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRm9ybU1hdGguY2FsY0V4cFZhbHVlKGl0ZW0uZXhwLCBwKTsKICAgICAgICAgICAgICAgICAgcC4kZW1pdCh0LCB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIHsKICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0pOwoKLy8g6Ieq5a6a5LmJ5a+56K+d5qGGIHYtYXV0aC1zZXQtZXZlbnQKVnVlLmRpcmVjdGl2ZSgnYXV0aC1zZXQtZXZlbnQnLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZ3MsIHZub2RlKSB7CiAgICB2YXIgaHRBdXRoU2V0RXZlbnQgPSBlbC5nZXRBdHRyaWJ1dGUoImF0dHIiKTsKICAgIGlmICghaHRBdXRoU2V0RXZlbnQpIHJldHVybjsKICAgIHZhciBkZWZhdWx0UGVybWlzc2lvbkxpc3QgPSBbXTsKICAgIGRpYWxvZy5nZXRQZXJtaXNzaW9uTGlzdChmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgIGRlZmF1bHRQZXJtaXNzaW9uTGlzdCA9IHJlc3VsdDsKICAgIH0pOwogICAgLyoqDQogICAgICog6K6+572u6K6+572u5p2D6ZmQ44CCDQogICAgICogb3duZXJOYW1lSnNvbiDmoLzlvI/jgIINCiAgICAgKiBbe3R5cGU6ImV2ZXJ5b25lIix0aXRsZToi5omA5pyJ5Lq6In0se3R5cGU6InVzZXIiLHRpdGxlOiLnlKjmiLciLGlkOiIxLDIiLG5hbWU6InJheSx0b20ifV0NCiAgICAgKi8KICAgIHZhciBzZXRBdXRoID0gZnVuY3Rpb24gc2V0QXV0aCgpIHsKICAgICAgdmFyIGNvbmYgPSB7CiAgICAgICAgcmlnaHQ6IG93bmVyTmFtZUpzb24sCiAgICAgICAgcGVybWlzc2lvbkxpc3Q6IGRlZmF1bHRQZXJtaXNzaW9uTGlzdAogICAgICB9OwogICAgICAvL+aOiOadg+mAieaLqeWZqAogICAgICB2bm9kZS5jaGlsZC5BdXRoU2V0dGluZ1Nob3coY29uZik7CiAgICB9OwogICAgdmFyIG93bmVyTmFtZUpzb24gPSBbXTsKICAgIHZhciBpbml0RGF0YSA9IGJpbmRpbmdzLnZhbHVlOwogICAgaWYgKGluaXREYXRhKSB7CiAgICAgIG93bmVyTmFtZUpzb24gPSBKU09OLnBhcnNlKGluaXREYXRhKTsKICAgICAgOwogICAgICAvLyBzaG93TGFibGUob3duZXJOYW1lSnNvbik7CiAgICB9CiAgICAvL+WvueivneahhuWIneWni+WMluebkeWQrAogICAgZWwuY2hpbGROb2Rlc1syXS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICBzZXRBdXRoKCk7CiAgICB9OwogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoJ3BhcnNlVGVtcGxldGUnLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIHZhciBzID0gSlNPTi5zdHJpbmdpZnk7CiAgICBlbC5pbm5lckhUTUwgPSAnbmFtZTogJyArIHMoYmluZGluZy5uYW1lKSArICc8YnI+JyArICd2YWx1ZTogJyArIHMoYmluZGluZy52YWx1ZSkgKyAnPGJyPicgKyAnZXhwcmVzc2lvbjogJyArIHMoYmluZGluZy5leHByZXNzaW9uKSArICc8YnI+JyArICdhcmd1bWVudDogJyArIHMoYmluZGluZy5hcmcpICsgJzxicj4nICsgJ21vZGlmaWVyczogJyArIHMoYmluZGluZy5tb2RpZmllcnMpICsgJzxicj4nICsgJ3Zub2RlIGtleXM6ICcgKyBPYmplY3Qua2V5cyh2bm9kZSkuam9pbignLCAnKTsKICB9Cn0pOwpWdWUuZGlyZWN0aXZlKCdhbHNDaGFydHMnLCB7CiAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIGluc3QgPSBiaW5kaW5nLmNvbnRleHQ7CiAgICBmdW5jdGlvbiBpbml0KGRhdGEpIHsKICAgICAgaWYgKCEoZGF0YS52YWx1ZSAmJiBkYXRhLnZhbHVlICE9PSB0cnVlICYmIGRhdGEudmFsdWUuY29uc3RydWN0b3IgPT0gQXJyYXkgJiYgZGF0YS52YWx1ZVswXS5sZWdlbmQpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBvcHRpb25zID0gZGF0YS52YWx1ZVswXTsKICAgICAgdmFyIGhlaWdodCA9IGdldERpdkhlaWdodChlbCkgLSAzNTsKICAgICAgdmFyIHdyYXAgPSAkKCc8ZGl2PjwvZGl2PicpLmNzcyh7CiAgICAgICAgd2lkdGg6ICcxMDAlJywKICAgICAgICBoZWlnaHQ6IGhlaWdodAogICAgICB9KTsKICAgICAgJChlbCkuY3NzKHsKICAgICAgICBkaXNwbGF5OiAnYmxvY2snLAogICAgICAgIHdpZHRoOiAnMTAwJScsCiAgICAgICAgaGVpZ2h0OiBoZWlnaHQKICAgICAgfSk7CiAgICAgIC8vIGNvbnN0IGVjaGFydHMgPSByZXF1aXJlKCdlY2hhcnRzJyk7CiAgICAgIC8vIHZhciBteUNoYXJ0ID0gZWNoYXJ0cy5pbml0KGVsKTsKICAgICAgLy8gaW5zdC4kcm9vdC4kb24oInJlc2l6ZSIsICgpID0+IHsKICAgICAgLy8gICAgIG15Q2hhcnQucmVzaXplKCk7Ly/nm5HmtYvlm77ooajoh6rpgILlupQKICAgICAgLy8gfSk7CiAgICAgIHZhciBvcHRpb24gPSBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHsKICAgICAgICB0aXRsZTogewogICAgICAgICAgdGV4dDogb3B0aW9ucy5uYW1lLAogICAgICAgICAgc3VidGV4dDogb3B0aW9ucy5zdWJ0ZXh0LAogICAgICAgICAgdG9wOiAxMgogICAgICAgIH0sCiAgICAgICAgdG9vbHRpcDogewogICAgICAgICAgdHJpZ2dlcjogJ2F4aXMnLAogICAgICAgICAgYXhpc1BvaW50ZXI6IHsKICAgICAgICAgICAgdHlwZTogJ3NoYWRvdycKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNhbGN1bGFibGU6IHRydWUsCiAgICAgICAgbGVnZW5kOiB7CiAgICAgICAgICB4OiAncmlnaHQnLAogICAgICAgICAgZGF0YTogb3B0aW9ucy5sZWdlbmQKICAgICAgICB9LAogICAgICAgIHRvb2xib3g6IHsKICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgICAgICBvcmllbnQ6ICd2ZXJ0aWNhbCcsCiAgICAgICAgICB5OiAnY2VudGVyJywKICAgICAgICAgIHJpZ2h0OiAyMCwKICAgICAgICAgIGl0ZW1HYXA6IDEzLAogICAgICAgICAgZmVhdHVyZTogX2RlZmluZVByb3BlcnR5KHsKICAgICAgICAgICAgbWFyazogewogICAgICAgICAgICAgIHNob3c6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGF0YVZpZXc6IHsKICAgICAgICAgICAgICBzaG93OiB0cnVlLAogICAgICAgICAgICAgIHJlYWRPbmx5OiBmYWxzZQogICAgICAgICAgICB9LAogICAgICAgICAgICBtYWdpY1R5cGU6IHsKICAgICAgICAgICAgICBzaG93OiB0cnVlLAogICAgICAgICAgICAgIHR5cGU6IFsnbGluZScsICdiYXInLCAnc3RhY2snLCAndGlsZWQnXQogICAgICAgICAgICB9LAogICAgICAgICAgICByZXN0b3JlOiB7CiAgICAgICAgICAgICAgc2hvdzogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICBzYXZlQXNJbWFnZTogewogICAgICAgICAgICAgIHNob3c6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGF0YVpvb206IHsKICAgICAgICAgICAgICB5QXhpc0luZGV4OiAnbm9uZScKICAgICAgICAgICAgfQogICAgICAgICAgfSwgImRhdGFWaWV3IiwgewogICAgICAgICAgICBzaG93OiB0cnVlLAogICAgICAgICAgICByZWFkT25seTogdHJ1ZSwKICAgICAgICAgICAgb3B0aW9uVG9Db250ZW50OiBmdW5jdGlvbiBvcHRpb25Ub0NvbnRlbnQob3B0KSB7CiAgICAgICAgICAgICAgLy9jb25zb2xlLmluZm8ob3B0KTsKICAgICAgICAgICAgICB2YXIgYXhpc0RhdGEgPSBvcHQueEF4aXNbMF0uZGF0YTsKICAgICAgICAgICAgICB2YXIgc2VyaWVzID0gb3B0LnNlcmllczsKICAgICAgICAgICAgICB2YXIgdGRIZWFkZXJzID0gJzx0aD48L3RoPic7IC8v6KGo5aS0CiAgICAgICAgICAgICAgc2VyaWVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHRkSGVhZGVycyArPSAnPHRoIHN0eWxlPSJwYWRkaW5nOiA4cHggMTBweDtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY1RjU7Ij4nICsgaXRlbS5uYW1lICsgJzwvdGg+JzsgLy/nu4Too4XooajlpLQKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB2YXIgdGFibGUgPSAnPGRpdj48dGFibGUgY2VsbHNwYWNpbmc9IjIwIiBjZWxsc3BhY2luZz0iMCIgIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIGJsYWNrO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiIHJ1bGVzPSJhbGwiPjx0Ym9keT48dHI+JyArIHRkSGVhZGVycyArICc8L3RyPic7CiAgICAgICAgICAgICAgdmFyIHRkQm9keXMgPSAnJzsgLy/mlbDmja4KICAgICAgICAgICAgICB2YXIgY29sb3JzID0gWycjRkZGRkZGJywgJyNGNUY1RjUnXTsKICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF4aXNEYXRhLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZXJpZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgdGRCb2R5cyArPSAnPHRkPicgKyBzZXJpZXNbal0uZGF0YVtpXSArICc8L3RkPic7IC8v57uE6KOF6KGo5pWw5o2uCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgY3VyQ29sb3IgPSBjb2xvcnNbaSAlIDJdOwogICAgICAgICAgICAgICAgdGFibGUgKz0gJzx0ciBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonICsgY3VyQ29sb3IgKyAnIj48dGQgc3R5bGU9InBhZGRpbmc6IDhweCAxMHB4OyI+JyArIGF4aXNEYXRhW2ldICsgJzwvdGQ+JyArIHRkQm9keXMgKyAnPC90cj4nOwogICAgICAgICAgICAgICAgdGRCb2R5cyA9ICcnOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0YWJsZSArPSAnPC90Ym9keT48L3RhYmxlPjwvZGl2Pic7CiAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlOwogICAgICAgICAgICB9CiAgICAgICAgICB9KQogICAgICAgIH0KICAgICAgfSwgImNhbGN1bGFibGUiLCB0cnVlKSwgImdyaWQiLCB7CiAgICAgICAgeTogODAsCiAgICAgICAgeTI6IDQwLAogICAgICAgIHgyOiA0MAogICAgICB9KSwgInhBeGlzIiwgW3sKICAgICAgICB0eXBlOiAnY2F0ZWdvcnknLAogICAgICAgIGRhdGE6IG9wdGlvbnMueEF4aXMKICAgICAgfV0pLCAieUF4aXMiLCBbewogICAgICAgIHR5cGU6ICd2YWx1ZScsCiAgICAgICAgc2NhbGU6IHRydWUKICAgICAgfV0pLCAic2VyaWVzIiwgb3B0aW9ucy5zZXJpZXMpOwogICAgICAvLyBteUNoYXJ0LnNldE9wdGlvbihvcHRpb24sIHRydWUpOwogICAgfQoKICAgIC8v6I635Y+W5b2T5YmN5qCP55uu55qE6auY5bqmCiAgICBmdW5jdGlvbiBnZXREaXZIZWlnaHQoZWwpIHsKICAgICAgaWYgKGVsKSB7CiAgICAgICAgdmFyIHBIZWlnaHQgPSAkKGVsKS5wYXJlbnQoKS5oZWlnaHQoKTsKICAgICAgICBpZiAocEhlaWdodCA8IDEpIHsKICAgICAgICAgIHJldHVybiBnZXREaXZIZWlnaHQoJChlbCkucGFyZW50KCkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gMzQwOwogICAgICB9CiAgICAgIHJldHVybiBwSGVpZ2h0OwogICAgfQogICAgaW5pdChiaW5kaW5nKTsKICB9Cn0pOwpWdWUuZGlyZWN0aXZlKCdvcGluaW9uJywgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICBpZiAoYmluZGluZy52YWx1ZSkgewogICAgICB3aGlsZSAoYmluZGluZy52YWx1ZS5pbmRleE9mKCJcbiIpICE9IC0xKSB7CiAgICAgICAgYmluZGluZy52YWx1ZSA9IGJpbmRpbmcudmFsdWUucmVwbGFjZSgiXG4iLCAiPGJyPiIpOwogICAgICB9CiAgICAgIGVsLmlubmVySFRNTCA9IGJpbmRpbmcudmFsdWU7CiAgICB9CiAgfQp9KTsKVnVlLmRpcmVjdGl2ZSgnaWZyYW1ldHJpZ2dlcicsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgZWwub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAkKCJib2R5IikudHJpZ2dlcigiZm9ybUxvYWRlZCIpOwogICAgfTsKICAgICQoImJvZHkiKS5iaW5kKCJmb3JtTG9hZGVkIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGZybSA9ICQoIiNmcm1GcmFtZSIpWzBdOwogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgaWYgKGUuZGF0YSAmJiBlLmRhdGEuY29uc3RydWN0b3IgPT0gT2JqZWN0ICYmIGUuZGF0YS50eXBlID09ICdoZWlnaHQnKSB7CiAgICAgICAgICBmcm0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwogICAgICAgICAgLy8g5o+Q5YmN6L+Y5Y6f6auY5bqmCiAgICAgICAgICBmcm0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnYXV0bycpOwogICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGZybS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGUuZGF0YS5oZWlnaHQpOwogICAgICAgICAgICBmcm0uc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKICAgICAgICAgICAgJChmcm0pLnRyaWdnZXIoIm1vdXNlb3ZlciIpOwogICAgICAgICAgfSwgMCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoJ21ldGhvZGF1dGgnLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIHZhciBhbGxNZXRob2QgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuYWxsTWV0aG9kOwogICAgdmFyIG1ldGhvZEF1dGggPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UubWV0aG9kQXV0aDsKICAgIHZhciBlbEF1dGggPSBiaW5kaW5nLmV4cHJlc3Npb247CiAgICB2YXIgYWxsTWV0aG9kQXJyYXkgPSBhbGxNZXRob2Quc3BsaXQoJywnKTsKICAgIHZhciBtZXRob2RBdXRoQXJyYXkgPSBtZXRob2RBdXRoLnNwbGl0KCcsJyk7CiAgICAvLyDml6DmnYPpmZDliJnpmpDol4/mjInpkq4KICAgIGlmICgkLmluQXJyYXkoZWxBdXRoLCBtZXRob2RBdXRoQXJyYXkpID09IC0xICYmICQuaW5BcnJheShlbEF1dGgsIGFsbE1ldGhvZEFycmF5KSkgewogICAgICAkKGVsKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgfQogIH0KfSk7CgovLyDms6jlhozlhajlsYDlhazlvI/orqHnrpfnu4Tku7YKVnVlLmRpcmVjdGl2ZSgiZm9ybXVsYSIsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIHByb3BzRGF0YSA9IHZub2RlLmNvbnRleHQuJG9wdGlvbnMucHJvcHNEYXRhOwogICAgLy/liJ3lp4vljJbnmoTml7blgJnvvIzlpoLmnpzmsqHmnInlgLzvvIzliJnnlKjlhazlvI/nmoTorqHnrpfnu5PmnpzmnaXotYvlgLznu5nlvZPliY3lrZfmrrUKICAgIHZhciBvbGRWYWwgPSB1dGlscy5nZXRWYWx1ZUJ5UGF0aChwcm9wc0RhdGEsIGJpbmRpbmcudmFsdWUuYmluZFBhdGgpOwogICAgaWYgKHByb3BzRGF0YSAmJiAhb2xkVmFsKSB7CiAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKHByb3BzRGF0YSwgYmluZGluZy52YWx1ZS5iaW5kUGF0aCwgYmluZGluZy52YWx1ZS52YWx1ZSk7CiAgICAgIHZub2RlLmNvbnRleHQuJGZvcmNlVXBkYXRlKCk7CiAgICB9CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUsIG9sZFZub2RlKSB7CiAgICBpZiAoYmluZGluZy5vbGRWYWx1ZS52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHsKICAgICAgaWYgKGJpbmRpbmcub2xkVmFsdWUudmFsdWUuZ2V0VGltZSgpICE9PSBiaW5kaW5nLnZhbHVlLnZhbHVlLmdldFRpbWUoKSkgewogICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKHZub2RlLmNvbnRleHQuJG9wdGlvbnMucHJvcHNEYXRhLCBiaW5kaW5nLnZhbHVlLmJpbmRQYXRoLCBiaW5kaW5nLnZhbHVlLnZhbHVlKTsKICAgICAgICB2bm9kZS5jb250ZXh0LiRmb3JjZVVwZGF0ZSgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoYmluZGluZy5vbGRWYWx1ZS52YWx1ZSAhPSBiaW5kaW5nLnZhbHVlLnZhbHVlKSB7CiAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgodm5vZGUuY29udGV4dC4kb3B0aW9ucy5wcm9wc0RhdGEsIGJpbmRpbmcudmFsdWUuYmluZFBhdGgsIGJpbmRpbmcudmFsdWUudmFsdWUpOwogICAgICAgIHZub2RlLmNvbnRleHQuJGZvcmNlVXBkYXRlKCk7CiAgICAgIH0KICAgIH0KICB9Cn0pOwpWdWUuZGlyZWN0aXZlKCJtYXBwaW5nIiwgewogIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLm9sZFZhbHVlICE9PSBiaW5kaW5nLnZhbHVlKSB7CiAgICAgIFZ1ZS5zZXQoZWwuX192dWVfXywgImlucHV0VmFsIiwgYmluZGluZy52YWx1ZSk7CiAgICB9CiAgfQp9KTsKVnVlLmRpcmVjdGl2ZSgiZHluYW1pYy1vcHRpb25zIiwgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICB2YXIgZXhwID0gbnVsbDsKICAgIGlmIChiaW5kaW5nLmV4cHJlc3Npb24pIHsKICAgICAgZXhwID0gdXRpbHMucGFyc2VUb0pzb24oYmluZGluZy5leHByZXNzaW9uKTsKICAgIH0KICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgIGlmIChpbnN0KSB7CiAgICAgIC8vIOS4iuS4gOasoeWKqOaAgemAiemhueafpeivouadoeS7tgogICAgICBpbnN0LnByZUR5bmFtaWNMb2FkUGFyYW1zID0gbnVsbDsKICAgICAgaW5zdC4kb24oImR5bmFtaWMtb3B0aW9uczpsb2FkIiwgZnVuY3Rpb24gKGFsaWFzLCBwYXJhbXMpIHsKICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307CiAgICAgICAgLy8g5piv5ZCm5omn6KGM5p+l6K+iCiAgICAgICAgdmFyIGRvTG9hZCA9IHRydWU7CiAgICAgICAgaWYgKGV4cCAmJiBleHAuY2FjaGUpIHsKICAgICAgICAgIC8vIOebuOavlOS4iuS4gOasoe+8jOafpeivouWPguaVsOaYr+WQpuacieWPmOWMlgogICAgICAgICAgdmFyIGNoYW5nZWQgPSAhdXRpbHMub2JqZWN0RXF1YWxzKGluc3QucHJlRHluYW1pY0xvYWRQYXJhbXMsIHBhcmFtcyk7CiAgICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICBkb0xvYWQgPSB0cnVlOwogICAgICAgICAgICBpbnN0LnByZUR5bmFtaWNMb2FkUGFyYW1zID0gcGFyYW1zOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG9Mb2FkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRvTG9hZCAmJiBDdXN0b21RdWVyeS5sb2FkKGFsaWFzLCBwYXJhbXMpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgIGluc3QuJGVtaXQoImR5bmFtaWMtb3B0aW9uczp1cGRhdGUiLCBhbGlhcywgZGF0YSk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogIH0KfSk7Ci8v55So5LqO5LiK57qn5YC85Y+Y5YyW5ZCO77yM5LiL57qn5YaF5a656ZyA6KaB5riF56m6ClZ1ZS5kaXJlY3RpdmUoIndhdGNoLXBhcmVudCIsIHsKICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlICYmIGJpbmRpbmcudmFsdWUucGlkKSB7CiAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkgewogICAgICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgICAgICB2YXIgaW5zdFBhcmVudCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZShpbnN0KTsKICAgICAgICBpbnN0UGFyZW50LiR3YXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gdXRpbHMuZ2V0VmFsdWVCeVBhdGgoaW5zdFBhcmVudCwgYmluZGluZy52YWx1ZS5waWRba2V5XSwgYmluZGluZy52YWx1ZS5pbmRleCk7CiAgICAgICAgfSwgZnVuY3Rpb24gKG5ld1ZhbCwgb2xkVmFsLCBmYXJld2VsbCkgewogICAgICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7CiAgICAgICAgICAgIGluc3QuaW5wdXRWYWwgPSAiIjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgZm9yICh2YXIga2V5IGluIGJpbmRpbmcudmFsdWUucGlkKSB7CiAgICAgICAgX2xvb3AoKTsKICAgICAgfQogICAgfQogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoInJlbGF0ZWQtcXVlcnkiLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgIHZhciBleHAgPSBudWxsOwogICAgaWYgKGJpbmRpbmcuZXhwcmVzc2lvbikgewogICAgICBleHAgPSB1dGlscy5wYXJzZVRvSnNvbihiaW5kaW5nLmV4cHJlc3Npb24pOwogICAgfQogICAgaWYgKGluc3QpIHsKICAgICAgLy8g5LiK5LiA5qyh5YWz6IGU5p+l6K+i5p2h5Lu277yI5LiA5Liq57uE5Lu25Y+v5Lul57uR5a6a5aSa5Liq5YWz6IGU5p+l6K+i77yM77yJCiAgICAgIGluc3QucHJlUmVsYXRlZFF1ZXJ5UGFyYW1zID0ge307CiAgICAgIGluc3QuJG9uKCJyZWxhdGVkLXF1ZXJ5OmxvYWQiLCBmdW5jdGlvbiAoYWxpYXMsIHBhcmFtcywgcmVzdWx0QmluZCkgewogICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTsKICAgICAgICAvLyDmmK/lkKbmiafooYzmn6Xor6IKICAgICAgICB2YXIgZG9Mb2FkID0gdHJ1ZTsKICAgICAgICBpZiAoZXhwICYmIGV4cC5jYWNoZSkgewogICAgICAgICAgLy8g55u45q+U5LiK5LiA5qyh77yM5p+l6K+i5Y+C5pWw5piv5ZCm5pyJ5Y+Y5YyWCiAgICAgICAgICB2YXIgY2hhbmdlZCA9ICF1dGlscy5vYmplY3RFcXVhbHMoaW5zdC5wcmVSZWxhdGVkUXVlcnlQYXJhbXNbYWxpYXNdLCBwYXJhbXMpOwogICAgICAgICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICAgICAgZG9Mb2FkID0gdHJ1ZTsKICAgICAgICAgICAgaW5zdC5wcmVSZWxhdGVkUXVlcnlQYXJhbXNbYWxpYXNdID0gcGFyYW1zOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG9Mb2FkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRvTG9hZCAmJiBDdXN0b21RdWVyeS5sb2FkKGFsaWFzLCBwYXJhbXMpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuY29uc3RydWN0b3IgPT0gQXJyYXkgJiYgZGF0YS5sZW5ndGggPiAwICYmIHJlc3VsdEJpbmQgJiYgcmVzdWx0QmluZC5jb25zdHJ1Y3RvciA9PSBPYmplY3QpIHsKICAgICAgICAgICAgLy8g6I635Y+W5b2T5YmN5o6n5Lu25piv5ZCm5Zyo5a2Q6KGo5p+Q6KGM5LitCiAgICAgICAgICAgIHZhciBfdXRpbHMkZ2V0U3ViU2NvcGVFbEEyID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGVsKSwKICAgICAgICAgICAgICBpbmRleCA9IF91dGlscyRnZXRTdWJTY29wZUVsQTIuaW5kZXg7CiAgICAgICAgICAgIHZhciBwSW5zdCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZShpbnN0KTsKICAgICAgICAgICAgLy8g5YWz6IGU5p+l6K+i5YC85Zue57uR5pe277yM6buY6K6k6I635Y+W6L+U5Zue55qE56ys5LiA5p2h6K6w5b2VCiAgICAgICAgICAgIHZhciBzaW5nbGVEYXRhID0gZGF0YVswXTsKICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0QmluZCkuZm9yRWFjaChmdW5jdGlvbiAoaykgewogICAgICAgICAgICAgIHZhciBwYXRoID0gcmVzdWx0QmluZFtrXTsKICAgICAgICAgICAgICAvLyDkuLvooagKICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgocEluc3QsIHBhdGgsIHNpbmdsZURhdGFba10pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyDlrZDooagKICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKHBJbnN0LCBwYXRoLCBzaW5nbGVEYXRhW2tdLCBpbmRleCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgfQp9KTsKLy/ooajmoLzmqKrlkJHmi5bmi70KVnVlLmRpcmVjdGl2ZSgndGFibGVEcmFnJywgewogIGluc2VydGVkOiBmdW5jdGlvbiBpbnNlcnRlZChlbCkgewogICAgdmFyIGN1cnJlbnRFbGVtZW50ID0gZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWwtdGFibGVfX2JvZHktd3JhcHBlcicpWzBdIHx8IGVsOwogICAgdmFyIHRhZ05hbWVzID0gWydzcGFuJywgJ2lucHV0JywgJ3RleHRhcmVhJywgJ2FzaWRlJ107CiAgICBpZiAoY3VycmVudEVsZW1lbnQpIHsKICAgICAgY3VycmVudEVsZW1lbnQub25tb3VzZWRvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICB2YXIgY3VycmVudFRhZ05hbWVzID0gZXZlbnQudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICBpZiAodGFnTmFtZXMuaW5jbHVkZXMoY3VycmVudFRhZ05hbWVzKSkgcmV0dXJuOwogICAgICAgIGN1cnJlbnRFbGVtZW50LnN0eWxlLmN1cnNvciA9ICdncmFiJzsKICAgICAgICB2YXIgZ2FwWCA9IGV2ZW50LmNsaWVudFg7CiAgICAgICAgdmFyIHN0YXJ0WCA9IGVsLnNjcm9sbExlZnQ7CiAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgdmFyIHggPSBlLmNsaWVudFggLSBnYXBYOwogICAgICAgICAgY3VycmVudEVsZW1lbnQuc2Nyb2xsTGVmdCA9IHN0YXJ0WCAtIHg7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfTsKICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsOwogICAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDsKICAgICAgICB9OwogICAgICB9OwogICAgfQogIH0KfSk7CgovL+eUqOS6juaOp+WItuWtkOihqOaIluWtmeihqOWNleihjHBlcm1pc3Npb24KVnVlLmRpcmVjdGl2ZSgicGVybWlzc2lvbi1saW5lIiwgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICBpZiAoYmluZGluZy52YWx1ZSkgewogICAgICB2YXIgaW5zdCA9IHZub2RlLmNvbnRleHQ7CiAgICAgIHZhciBpZHhPYmogPSB1dGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoZWwpOwogICAgICB2YXIgcGF0aHMgPSBiaW5kaW5nLnZhbHVlLnNwbGl0KCdfJyk7CiAgICAgIHZhciBib1R5cGUgPSBwYXRoc1swXTsKICAgICAgdmFyIGlkU3RyID0gYmluZGluZy52YWx1ZSArICdfJyArIGlkeE9iai5pbmRleDsKICAgICAgLy/lrZnooajml7bvvIzojrflj5blrZnooajmiYDlsZ7lrZDooajluo/lj7cKICAgICAgaWYgKGJvVHlwZSA9PSAnc3VuJyAmJiBpZHhPYmouc3ViU2NvcGVFbCkgewogICAgICAgIHZhciBzdWJJZHhPYmogPSB1dGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoaWR4T2JqLnN1YlNjb3BlRWwucGFyZW50RWxlbWVudCk7CiAgICAgICAgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgc3ViSWR4T2JqLmluZGV4ICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICB9CiAgICAgIGlmIChpbnN0LnBlcm1pc3Npb24gJiYgaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXSAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddW2lkU3RyXSkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKGVsLl9fdnVlX18pIHsKICAgICAgICAgICAgZWwuX192dWVfXy5wZXJtaXNzaW9uX3N1YiA9IGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdOwogICAgICAgICAgICBlbC5fX3Z1ZV9fLnN1Yl93b3JrID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9LCAwKTsKICAgICAgfQogICAgfQogIH0sCiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICBpZiAoYmluZGluZy52YWx1ZSkgewogICAgICB2YXIgaW5zdCA9IHZub2RlLmNvbnRleHQ7CiAgICAgIHZhciBpZHhPYmogPSB1dGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoZWwpOwogICAgICB2YXIgcGF0aHMgPSBiaW5kaW5nLnZhbHVlLnNwbGl0KCdfJyk7CiAgICAgIHZhciBib1R5cGUgPSBwYXRoc1swXTsKICAgICAgdmFyIGlkU3RyID0gYmluZGluZy52YWx1ZSArICdfJyArIGlkeE9iai5pbmRleDsKICAgICAgLy/lrZnooajml7bvvIzojrflj5blrZnooajmiYDlsZ7lrZDooajluo/lj7cKICAgICAgaWYgKGJvVHlwZSA9PSAnc3VuJyAmJiBpZHhPYmouc3ViU2NvcGVFbCkgewogICAgICAgIHZhciBzdWJJZHhPYmogPSB1dGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoaWR4T2JqLnN1YlNjb3BlRWwucGFyZW50RWxlbWVudCk7CiAgICAgICAgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgc3ViSWR4T2JqLmluZGV4ICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICB9CiAgICAgIGlmIChpbnN0LnBlcm1pc3Npb24gJiYgaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXSAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddW2lkU3RyXSkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKGVsLl9fdnVlX18pIHsKICAgICAgICAgICAgZWwuX192dWVfXy5wZXJtaXNzaW9uX3N1YiA9IGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdOwogICAgICAgICAgfQogICAgICAgIH0sIDApOwogICAgICB9CiAgICB9CiAgfQp9KTsKLy/nlKjkuo7mjqfliLblrZDooajmiJblrZnooajljZXooYxwZXJtaXNzaW9uIGxhYmxl5qCH562+ClZ1ZS5kaXJlY3RpdmUoInBlcm1pc3Npb24tbGluZS1sYWJsZSIsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgaWYgKGJpbmRpbmcudmFsdWUpIHsKICAgICAgdmFyIGluc3QgPSB2bm9kZS5jb250ZXh0OwogICAgICB2YXIgaWR4T2JqID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGVsKTsKICAgICAgdmFyIHBhdGhzID0gYmluZGluZy52YWx1ZS5zcGxpdCgnXycpOwogICAgICB2YXIgYm9UeXBlID0gcGF0aHNbMF07CiAgICAgIHZhciBpZFN0ciA9IGJpbmRpbmcudmFsdWUgKyAnXycgKyBpZHhPYmouaW5kZXg7CiAgICAgIC8v5a2Z6KGo5pe277yM6I635Y+W5a2Z6KGo5omA5bGe5a2Q6KGo5bqP5Y+3CiAgICAgIGlmIChib1R5cGUgPT0gJ3N1bicgJiYgaWR4T2JqLnN1YlNjb3BlRWwpIHsKICAgICAgICB2YXIgc3ViSWR4T2JqID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGlkeE9iai5zdWJTY29wZUVsLnBhcmVudEVsZW1lbnQpOwogICAgICAgIGlkU3RyID0gYmluZGluZy52YWx1ZSArICdfJyArIHN1YklkeE9iai5pbmRleCArICdfJyArIGlkeE9iai5pbmRleDsKICAgICAgfQogICAgICBpZiAoaW5zdC5wZXJtaXNzaW9uICYmIGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ10gJiYgaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl0pIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGVsLnBhcmVudEVsZW1lbnQuaGlkZGVuID0gaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl0gPT0gJ24nID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIH0sIDApOwogICAgICB9CiAgICB9CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgICAgdmFyIGlkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChlbCk7CiAgICAgIHZhciBwYXRocyA9IGJpbmRpbmcudmFsdWUuc3BsaXQoJ18nKTsKICAgICAgdmFyIGJvVHlwZSA9IHBhdGhzWzBdOwogICAgICB2YXIgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICAvL+WtmeihqOaXtu+8jOiOt+WPluWtmeihqOaJgOWxnuWtkOihqOW6j+WPtwogICAgICBpZiAoYm9UeXBlID09ICdzdW4nICYmIGlkeE9iai5zdWJTY29wZUVsKSB7CiAgICAgICAgdmFyIHN1YklkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChpZHhPYmouc3ViU2NvcGVFbC5wYXJlbnRFbGVtZW50KTsKICAgICAgICBpZFN0ciA9IGJpbmRpbmcudmFsdWUgKyAnXycgKyBzdWJJZHhPYmouaW5kZXggKyAnXycgKyBpZHhPYmouaW5kZXg7CiAgICAgIH0KICAgICAgaWYgKGluc3QucGVybWlzc2lvbiAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddICYmIGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBlbC5wYXJlbnRFbGVtZW50LmhpZGRlbiA9IGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdID09ICduJyA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9LCAwKTsKICAgICAgfQogICAgfQogIH0KfSk7CgovLyDnlKjkuo7ngrnlh7vmjIflrprljLrln5/lpJbmiafooYzmn5Dlip/og70gClZ1ZS5kaXJlY3RpdmUoImNsaWNrLW91dHNpZGUiLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZ3MsIHZub2RlKSB7CiAgICBlbC5oYW5kbGVyID0gZnVuY3Rpb24gKGUpIHsKICAgICAgaWYgKCFlbC5jb250YWlucyhlLnRhcmdldCkpIHsKICAgICAgICB2YXIgbWV0aG9kID0gYmluZGluZ3MuZXhwcmVzc2lvbjsKICAgICAgICB2bm9kZS5jb250ZXh0W21ldGhvZF0oKTsKICAgICAgfQogICAgfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZWwuaGFuZGxlcik7CiAgfSwKICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZChlbCkgewogICAgLy8g5Y+v55So5LqO6Kej6Zmk5LqL5Lu257uR5a6aCiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGVsLmhhbmRsZXIpOwogIH0KfSk7CnZhciBkaXJlY3RpdmUgPSB7fTsKZXhwb3J0IGRlZmF1bHQgZGlyZWN0aXZlOw=="},null]}