{"remainingRequest":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\bzzgj-fvue\\src\\components\\eipControl\\EipTreeselect.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\src\\components\\eipControl\\EipTreeselect.vue","mtime":1705895419251},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\babel.config.js","mtime":1725536844935},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2J6emdqLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FzeW5jVG9HZW5lcmF0b3IuanMiOwppbXBvcnQgX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvYnp6Z2otZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlci5qcyI7CmltcG9ydCAicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZG90LWFsbC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnN0aWNreS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zZWFyY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCB1dGlscyBmcm9tICdAL3V0aWxzLmpzJzsKaW1wb3J0IGhvdGVudFV0aWxzIGZyb20gJ0AvaG90ZW50LXVpLXV0aWwuanMnOwppbXBvcnQgc3ViX3Bpb19taXhpbiBmcm9tICdAL3N1Yi1wZXJtaXNzaW9uLW1peGluLmpzJzsKaW1wb3J0IHJlcSBmcm9tICdAL3JlcXVlc3QuanMnOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ2VpcC10cmVlc2VsZWN0JywKICBwcm9wczogWyd2YWxpZGF0ZScsICd2YWx1ZScsICduYW1lJywgJ3Blcm1pc3Npb24nLCAnbXVsdGlwbGUnLCAnc2VsZWN0bGlzdCcsICdnYW5nZWQnLCAnZmlsdGVyYWJsZScsICdhbGxvd0NyZWF0ZScsICdzdHlsZXMnLCAnY3VzdG9tUXVlcnknXSwKICBtaXhpbnM6IFtzdWJfcGlvX21peGluXSwKICAvL+a3t+WFpeaWueW8j+W8leWFpeihqOWNlee7hOS7tuS4reWFrOWFseWxnuaAp++8jOWkhOeQhuWtkOihqOOAgeWtmeihqOihjOWGheiBlOWKqO+8iOWIh+mdouS/ruaUuXBlcm1pc3Npb25fc3ViX3N1Yu+8iQogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBjb25maWc6IHt9LAogICAgICB0b3RhbDogMTAsCiAgICAgIHBhZ2VTaXplOiA1LAogICAgICBjdXJyZW50UGFnZTogMSwKICAgICAgb3B0aW9uczogW10sCiAgICAgIHRlbXBvcHRpb25zOiBbXSwKICAgICAgdmFsdWVEZXNjOiAnJywKICAgICAgdGFnRm9ybWF0VmFsdWU6IFtdLAogICAgICBkZWZhdWx0UHJvcHM6IHsKICAgICAgICBjaGlsZHJlbjogJ2NoaWxkcmVuJywKICAgICAgICBsYWJlbDogJ3ZhbHVlJwogICAgICB9LAogICAgICBuZXdWYWxpZGF0ZTogbnVsbCwKICAgICAgY3VyU3ViSW5kZXg6IG51bGwKICAgIH07CiAgfSwKICB3YXRjaDogewogICAgdmFsdWVEZXNjOiBmdW5jdGlvbiB2YWx1ZURlc2MobmV3VmFsLCBvbGRWYWwpIHsKICAgICAgaWYgKG5ld1ZhbCAmJiBuZXdWYWwgIT0gb2xkVmFsKSB7CiAgICAgICAgdGhpcy50YWdGb3JtYXRWYWx1ZSA9IG5ld1ZhbC5zcGxpdCgnLCcpOwogICAgICB9CiAgICB9CiAgfSwKICBjb21wdXRlZDogewogICAgaW5wdXRWYWw6IHsKICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHsKICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7CiAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUpIHsKICAgICAgICAgICAgICB2YXIgY2hlY2tlZE5vZGVzID0gdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlLmdldENoZWNrZWROb2RlcygpOwogICAgICAgICAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihjaGVja2VkTm9kZXMpLAogICAgICAgICAgICAgICAgX3N0ZXA7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7CiAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gX3N0ZXAudmFsdWU7CiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5zcGxpdCgnLCcpLmluY2x1ZGVzKGRhdGEua2V5KSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5zZXRDaGVja2VkKGRhdGEsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgX2l0ZXJhdG9yLmYoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuc3BsaXQoJywnKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUpIHsKICAgICAgICAgICAgICB2YXIgX2NoZWNrZWROb2RlcyA9IHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5nZXRDaGVja2VkTm9kZXMoKTsKICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKF9jaGVja2VkTm9kZXMpLAogICAgICAgICAgICAgICAgX3N0ZXAyOwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOykgewogICAgICAgICAgICAgICAgICB2YXIgX2RhdGEgPSBfc3RlcDIudmFsdWU7CiAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5zZXRDaGVja2VkKF9kYXRhLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICBfaXRlcmF0b3IyLmUoZXJyKTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgX2l0ZXJhdG9yMi5mKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZSA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgKyAnJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgICAgfQogICAgICB9LAogICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWwpIHsKICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkgewogICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwuam9pbignLCcpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpOwogICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIHZhbCkgewogICAgICAgICAgICAvL+WIpOaWreWvueivneahhuaYr+WQpue7keWumuS6huWFs+iBlOafpeivogogICAgICAgICAgICBpZiAodGhpcy5jdXN0b21RdWVyeSAmJiB0aGlzLmN1c3RvbVF1ZXJ5LmN1c3RRdWVyeUpzb24gJiYgdGhpcy5jdXN0b21RdWVyeS5jdXN0UXVlcnlKc29uLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICB2YXIgY3VzdFF1ZXJ5SnNvbiA9IHRoaXMuY3VzdG9tUXVlcnkuY3VzdFF1ZXJ5SnNvbjsKICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1c3RRdWVyeUpzb24ubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChjdXN0UXVlcnlKc29uW2ldLmNvbmRpdGlvbmZpZWxkLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgdGhpcy5kb1F1ZXJ5KGN1c3RRdWVyeUpzb25baV0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignWycgKyBjdXN0UXVlcnlKc29uW2ldLmNvbW1lbnQgKyAnXeWFs+iBlOafpeivouWPluWAvOWPguaVsOacque7keWumuihqOWNleWtl+autScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGlucHV0V3JpdGVhYmxlOiBmdW5jdGlvbiBpbnB1dFdyaXRlYWJsZSgpIHsKICAgICAgcmV0dXJuIHV0aWxzLmdldFdyaXRlYWJsZSh0aGlzLnBlcm1pc3Npb25fc3ViKTsKICAgIH0sCiAgICBpbnB1dFZhbGlkYXRlOiBmdW5jdGlvbiBpbnB1dFZhbGlkYXRlKCkgewogICAgICBpZiAodGhpcy5uZXdWYWxpZGF0ZSkgewogICAgICAgIHJldHVybiB0aGlzLm5ld1ZhbGlkYXRlOwogICAgICB9CiAgICAgIHZhciB2YWxpZGF0ZU9iaiA9IHRoaXMuJHN0b3JlLnN0YXRlLmluZGV4LnZhbGlkYXRlOwogICAgICByZXR1cm4gdXRpbHMuYWRkUmVxdWlyZWRPck5vdCh0aGlzLnBlcm1pc3Npb25fc3ViLCB0aGlzLnZhbGlkYXRlLCB2YWxpZGF0ZU9iaiwgdGhpcyk7CiAgICB9LAogICAgaW5wdXROYW1lOiBmdW5jdGlvbiBpbnB1dE5hbWUoKSB7CiAgICAgIHZhciBsYWJlbGRlc2MgPSAnJzsKICAgICAgaWYgKHRoaXMuJHNsb3RzICYmIHRoaXMuJHNsb3RzLmxhYmVsZGVzYyAmJiB0aGlzLiRzbG90cy5sYWJlbGRlc2NbMF0uY2hpbGRyZW4gJiYgdGhpcy4kc2xvdHMubGFiZWxkZXNjWzBdLmNoaWxkcmVuWzBdLnRleHQpIHsKICAgICAgICBsYWJlbGRlc2MgPSB0aGlzLiRzbG90cy5sYWJlbGRlc2NbMF0uY2hpbGRyZW5bMF0udGV4dDsKICAgICAgICByZXR1cm4gdGhpcy5uYW1lID8gdGhpcy5uYW1lIDogdXRpbHMuZ2V0TmFtZSgpICsgJy0nICsgbGFiZWxkZXNjOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0aGlzLm5hbWUgPyB0aGlzLm5hbWUgOiB1dGlscy5nZXROYW1lKCk7CiAgICAgIH0KICAgIH0KICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnNlbGVjdGxpc3QgPyB0aGlzLnNlbGVjdGxpc3QgOiBbXTsKICAgIHZhciBfbWUgPSB0aGlzOwogICAgdmFyIF9ob3RlbnRVdGlscyRnZXRTdWJTYyA9IGhvdGVudFV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChfbWUuJGVsKSwKICAgICAgc3ViU2NvcGVFbCA9IF9ob3RlbnRVdGlscyRnZXRTdWJTYy5zdWJTY29wZUVsOwogICAgaWYgKHN1YlNjb3BlRWwpIHsKICAgICAgdGhpcy5jdXJTdWJJbmRleCA9IHN1YlNjb3BlRWwuZGF0YXNldFsnaW5kZXgnXTsKICAgIH0KICAgIHZhciBnYW5nZWQgPSB0aGlzLmdhbmdlZDsKICAgIC8v5Yik5pat5piv5ZCm5pyJ5Y+C5pWw57uR5a6aCiAgICBpZiAoZ2FuZ2VkICYmIGdhbmdlZC5iaW5kICYmIEpTT04uc3RyaW5naWZ5KGdhbmdlZC5iaW5kKSAhPSAne30nICYmIHRoaXMuY29uZmlnKSB7CiAgICAgIHZhciBiaW5kID0gZ2FuZ2VkLmJpbmQ7CiAgICAgIHZhciBmb3JtVm0gPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UoX21lKTsKICAgICAgZm9yICh2YXIga2V5IGluIGJpbmQpIHsKICAgICAgICB2YXIgcGFyYW1Eb20gPSBudWxsOwogICAgICAgIGlmICh0aGlzLmN1clN1YkluZGV4ID09IG51bGwpIHsKICAgICAgICAgIHBhcmFtRG9tID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW21vZGVsLW5hbWU9IicgKyBiaW5kW2tleV0gKyAnIl0nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIHN1YkZpbGVkTmFtZSA9IGJpbmRba2V5XS5zcGxpdCgnLicpWzNdOwogICAgICAgICAgcGFyYW1Eb20gPSBzdWJTY29wZUVsLnF1ZXJ5U2VsZWN0b3IoJ1ttb2RlbC1uYW1lPSJpdGVtLicgKyBzdWJGaWxlZE5hbWUgKyAnIl0nKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcmFtRG9tICYmIHBhcmFtRG9tLl9fdnVlX18pIHsKICAgICAgICAgIHBhcmFtRG9tLl9fdnVlX18uJHdhdGNoKCd2YWx1ZScsIGZ1bmN0aW9uIChuZXdWYWwsIG9sZFZhbCkgewogICAgICAgICAgICBpZiAobmV3VmFsICE9IG9sZFZhbCkgewogICAgICAgICAgICAgIF9tZS5zZWFyY2goZmFsc2UsIG5ld1ZhbCwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuc2VsZWN0bGlzdCA/IHRoaXMuc2VsZWN0bGlzdCA6IFtdOwogICAgLy/liqjmgIHkvKDlhaUKICAgIGlmICh0aGlzLmdhbmdlZCAmJiB0aGlzLmdhbmdlZC5hbGlhcyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoIDwgMSAmJiB0aGlzLmdhbmdlZCkgewogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICB0aGlzXy4kc3RvcmUuZGlzcGF0Y2goJ2Zvcm0vZ2V0QnlBbGlhc0NxJywgdGhpc18uZ2FuZ2VkLmFsaWFzKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB0aGlzXy5jb25maWcgPSByZXM7CiAgICAgICAgdmFyIG9iaklzRW1wdHkgPSB0aGlzXy5vYmpJc0VtcHR5KHRoaXNfLmdhbmdlZC5iaW5kKTsKICAgICAgICBpZiAodGhpc18uZ2FuZ2VkICYmICFvYmpJc0VtcHR5KSB7CiAgICAgICAgICB0aGlzXy5oYW5kZWxJbml0R2FuZ2Vkc2VhcmNoKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXNfLnNlYXJjaChmYWxzZSwgJycpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICB0aGlzLiR2YWxpZGF0b3IgPSB0aGlzLiRyb290LiR2YWxpZGF0b3I7CiAgfSwKICBtZXRob2RzOiB7CiAgICAvL+WIpOaWreWvueixoemHjOmdoueahOWAvOaYr+WQpuS4uuepugogICAgb2JqSXNFbXB0eTogZnVuY3Rpb24gb2JqSXNFbXB0eShvYmopIHsKICAgICAgZm9yICh2YXIga2V5IGluIG9iaikgewogICAgICAgIGlmIChvYmpba2V5XSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sCiAgICBkb1F1ZXJ5OiBmdW5jdGlvbiBkb1F1ZXJ5KHBhcmFtKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7CiAgICAgICAgdmFyIHBhcmFtTG9hZERhdGEsIHBJbnN0LCBpLCBiaW5kVmFsLCBvYmosIHF1ZXJ5VXJsLCByZXF1ZXN0TWV0aG9kOwogICAgICAgIHJldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIHBhcmFtTG9hZERhdGEgPSBbXTsKICAgICAgICAgICAgICBwSW5zdCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZShfdGhpczIpOyAvL+iOt+WPluWFs+iBlOafpeivoue7keWumueahOihqOWNleWPguaVsAogICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJhbS5jb25kaXRpb25maWVsZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKHBhcmFtLmNvbmRpdGlvbmZpZWxkW2ldLmZpZWxkUGF0aCAhPSAnJykgewogICAgICAgICAgICAgICAgICBiaW5kVmFsID0gdXRpbHMuZ2V0VmFsdWVCeVBhdGgocEluc3QsIHBhcmFtLmNvbmRpdGlvbmZpZWxkW2ldLmZpZWxkUGF0aCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgIG9iaiA9IHsKICAgICAgICAgICAgICAgICAgICBrZXk6IHBhcmFtLmNvbmRpdGlvbmZpZWxkW2ldLmZpZWxkLAogICAgICAgICAgICAgICAgICAgIHZhbHVlOiBiaW5kVmFsCiAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgIHBhcmFtTG9hZERhdGEucHVzaChvYmopOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBxdWVyeVVybCA9IHBhcmFtLmRzVHlwZSA9PSAnZGF0YVNvdXJjZScgPyAnJHtmb3JtfS9mb3JtL2N1c3RvbVF1ZXJ5L3YxL2RvUXVlcnk/YWxpYXM9JyArIHBhcmFtLmFsaWFzICsgJyZwYWdlPTEnIDogcGFyYW0udXJsOwogICAgICAgICAgICAgIHJlcXVlc3RNZXRob2QgPSAnUE9TVCc7IC8v5aaC5p6c5YWz6IGU5pWw5o2u5YiX6KGo5p+l6K+i5pWw5o2u5LiN5piv5pWw5o2u5rqQ5YiZ6K+35rGC5pa55rOV5Li6cmVzdGZ1bOmFjee9rueahOivt+axguaWueW8jwogICAgICAgICAgICAgIGlmIChwYXJhbS5kc1R5cGUgIT0gJ2RhdGFTb3VyY2UnKSB7CiAgICAgICAgICAgICAgICByZXF1ZXN0TWV0aG9kID0gcGFyYW0ucmVxdWVzdFR5cGU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIC8v5p+l6K+i5pWw5o2uCiAgICAgICAgICAgICAgcmVxLnJlcXVlc3QoewogICAgICAgICAgICAgICAgdXJsOiBxdWVyeVVybCwKICAgICAgICAgICAgICAgIG1ldGhvZDogcmVxdWVzdE1ldGhvZCwKICAgICAgICAgICAgICAgIGRhdGE6IHBhcmFtTG9hZERhdGEKICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIC8v5Yik5pat5piv5ZCm5pyJ5YWz6IGU5p+l6K+i5pWw5o2u6L+U5ZueCiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEucm93cy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgIC8v6I635Y+W5YWz6IGU5p+l6K+i6L+U5Zue55qE6KGo5Y2V5Y+C5pWwCiAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBwYXJhbS5yZXN1bHRmaWVsZC5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0ucmVzdWx0ZmllbGRbX2ldLmZpZWxkUGF0aCAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByZXMuZGF0YS5yb3dzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5yb3dzW2pdW3BhcmFtLnJlc3VsdGZpZWxkW19pXS5jb21tZW50XSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCArIHJlcy5kYXRhLnJvd3Nbal1bcGFyYW0ucmVzdWx0ZmllbGRbX2ldLmNvbW1lbnRdICsgJywnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyaW5nKDAsIHZhbC5sZW5ndGggLSAxKTsKICAgICAgICAgICAgICAgICAgICAgIC8v6LWL5YC857uZ57uR5a6a55qE5a2X5q61CiAgICAgICAgICAgICAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aChwSW5zdCwgcGFyYW0ucmVzdWx0ZmllbGRbX2ldLmZpZWxkUGF0aCwgdmFsLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIC8v6I635Y+W5YWz6IGU5p+l6K+i6L+U5Zue55qE6KGo5Y2V5Y+C5pWwCiAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHBhcmFtLnJlc3VsdGZpZWxkLmxlbmd0aDsgX2kyKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0ucmVzdWx0ZmllbGRbX2kyXS5maWVsZFBhdGggIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgIC8v6LWL5YC857uZ57uR5a6a55qE5a2X5q61CiAgICAgICAgICAgICAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aChwSW5zdCwgcGFyYW0ucmVzdWx0ZmllbGRbX2kyXS5maWVsZFBhdGgsICcnLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIGhhbmRlbEluaXRHYW5nZWRzZWFyY2g6IGZ1bmN0aW9uIGhhbmRlbEluaXRHYW5nZWRzZWFyY2goKSB7CiAgICAgIHZhciBfbWUgPSB0aGlzOwogICAgICB2YXIgX2hvdGVudFV0aWxzJGdldFN1YlNjMiA9IGhvdGVudFV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChfbWUuJGVsKSwKICAgICAgICBzdWJTY29wZUVsID0gX2hvdGVudFV0aWxzJGdldFN1YlNjMi5zdWJTY29wZUVsOwogICAgICBpZiAoc3ViU2NvcGVFbCkgewogICAgICAgIHRoaXMuY3VyU3ViSW5kZXggPSBzdWJTY29wZUVsLmRhdGFzZXRbJ2luZGV4J107CiAgICAgIH0KICAgICAgdmFyIGdhbmdlZCA9IHRoaXMuZ2FuZ2VkOwogICAgICAvL+WIpOaWreaYr+WQpuacieWPguaVsOe7keWumgogICAgICBpZiAoZ2FuZ2VkICYmIEpTT04uc3RyaW5naWZ5KGdhbmdlZC5iaW5kKSAhPSAne30nICYmIHRoaXMuY29uZmlnKSB7CiAgICAgICAgdmFyIGJpbmQgPSBnYW5nZWQuYmluZDsKICAgICAgICB2YXIgZm9ybVZtID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKF9tZSk7CiAgICAgICAgaWYgKHRoaXMuY3VyU3ViSW5kZXggPT0gbnVsbCkgewogICAgICAgICAgZm9yICh2YXIga2V5IGluIGJpbmQpIHsKICAgICAgICAgICAgdmFyIHBJbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKF9tZSk7CiAgICAgICAgICAgIHZhciB2YWwgPSB1dGlscy5nZXRWYWx1ZUJ5UGF0aChwSW5zdCwgYmluZFtrZXldKTsKICAgICAgICAgICAgX21lLnNlYXJjaChmYWxzZSwgdmFsKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yICh2YXIga2V5IGluIGJpbmQpIHsKICAgICAgICAgICAgdmFyIHN1YkZpbGVkTmFtZSA9IGJpbmRba2V5XS5zcGxpdCgnLicpWzNdOwogICAgICAgICAgICB2YXIgcGFyYW1Eb20gPSBzdWJTY29wZUVsLnF1ZXJ5U2VsZWN0b3IoJ1ttb2RlbC1uYW1lPSJpdGVtLicgKyBzdWJGaWxlZE5hbWUgKyAnIl0nKTsKICAgICAgICAgICAgaWYgKHBhcmFtRG9tICYmIHBhcmFtRG9tLl9fdnVlX18gJiYgcGFyYW1Eb20uX192dWVfXy52YWx1ZSkgewogICAgICAgICAgICAgIHZhciBuZXdWYWwgPSBwYXJhbURvbS5fX3Z1ZV9fLnZhbHVlICsgJyc7CiAgICAgICAgICAgICAgX21lLnNlYXJjaChmYWxzZSwgbmV3VmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHsKICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHsKICAgICAgICB0aGlzLnRlbXBvcHRpb25zID0gW107CiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlLnNldENoZWNrZWRLZXlzKFtdLCB0cnVlKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUuc2V0Q3VycmVudE5vZGUoe30pOwogICAgICB9CiAgICB9LAogICAgY2xpY2tOYXRpdmU6IGZ1bmN0aW9uIGNsaWNrTmF0aXZlKCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgLy/liqjmgIHkvKDlhaUKICAgICAgaWYgKHRoaXMuZ2FuZ2VkICYmIHRoaXMuZ2FuZ2VkLmFsaWFzICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPCAxKSB7CiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2Zvcm0vZ2V0QnlBbGlhc0NxJywgdGhpcy5nYW5nZWQuYWxpYXMpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgX3RoaXMzLmNvbmZpZyA9IHJlczsKICAgICAgICAgIF90aGlzMy5zZWFyY2goKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIHNlbGVjdEJsdXI6IGZ1bmN0aW9uIHNlbGVjdEJsdXIodmFsKSB7CiAgICAgIHRoaXMuc2VhcmNoKCk7CiAgICB9LAogICAgaGFuZGxlQ2hlY2tDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoZWNrQ2hhbmdlKGRhdGEpIHsKICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHsKICAgICAgICB2YXIgY2hlY2tlZE5vZGVzID0gdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlLmdldENoZWNrZWROb2RlcygpOwogICAgICAgIHZhciBtb2RlbFZhbHVlID0gW107CiAgICAgICAgdGhpcy50ZW1wb3B0aW9ucyA9IGNoZWNrZWROb2RlczsKICAgICAgICB2YXIgX2l0ZXJhdG9yMyA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGNoZWNrZWROb2RlcyksCiAgICAgICAgICBfc3RlcDM7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGZvciAoX2l0ZXJhdG9yMy5zKCk7ICEoX3N0ZXAzID0gX2l0ZXJhdG9yMy5uKCkpLmRvbmU7KSB7CiAgICAgICAgICAgIHZhciBfZGF0YTIgPSBfc3RlcDMudmFsdWU7CiAgICAgICAgICAgIG1vZGVsVmFsdWUucHVzaChfZGF0YTIua2V5KTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIF9pdGVyYXRvcjMuZShlcnIpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBfaXRlcmF0b3IzLmYoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBtb2RlbFZhbHVlLmpvaW4oJywnKSk7CiAgICAgIH0KICAgIH0sCiAgICBoYW5kbGVOb2RlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZU5vZGVDbGljayhkYXRhKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICB0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUuc2V0Q2hlY2tlZChkYXRhLCB0cnVlKTsKICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7CiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRhLmtleSk7CiAgICAgICAgaWYgKGRhdGEua2V5KSB7CiAgICAgICAgICAvL+WIpOaWreWvueivneahhuaYr+WQpue7keWumuS6huWFs+iBlOafpeivogogICAgICAgICAgaWYgKHRoaXMuY3VzdG9tUXVlcnkgJiYgdGhpcy5jdXN0b21RdWVyeS5jdXN0UXVlcnlKc29uICYmIHRoaXMuY3VzdG9tUXVlcnkuY3VzdFF1ZXJ5SnNvbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHZhciBjdXN0UXVlcnlKc29uID0gdGhpcy5jdXN0b21RdWVyeS5jdXN0UXVlcnlKc29uOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1c3RRdWVyeUpzb24ubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBpZiAoY3VzdFF1ZXJ5SnNvbltpXS5jb25kaXRpb25maWVsZC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICB0aGlzLmRvUXVlcnkoY3VzdFF1ZXJ5SnNvbltpXSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1snICsgY3VzdFF1ZXJ5SnNvbltpXS5jb21tZW50ICsgJ13lhbPogZTmn6Xor6Llj5blgLzlj4LmlbDmnKrnu5HlrprooajljZXlrZfmrrUnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy4kcmVmcy50cmVlc2VsZWN0LmJsdXIoKTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIF90aGlzNC4kdmFsaWRhdG9yLnZhbGlkYXRlKCk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5tdWx0aXBsZSkgewogICAgICAgIHZhciBjaGVja2VkTm9kZXMgPSB0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUuZ2V0Q2hlY2tlZE5vZGVzKCk7CiAgICAgICAgdmFyIG1vZGVsVmFsdWUgPSBbXTsKICAgICAgICB0aGlzLnRlbXBvcHRpb25zID0gY2hlY2tlZE5vZGVzOwogICAgICAgIHZhciBfaXRlcmF0b3I0ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoY2hlY2tlZE5vZGVzKSwKICAgICAgICAgIF9zdGVwNDsKICAgICAgICB0cnkgewogICAgICAgICAgZm9yIChfaXRlcmF0b3I0LnMoKTsgIShfc3RlcDQgPSBfaXRlcmF0b3I0Lm4oKSkuZG9uZTspIHsKICAgICAgICAgICAgdmFyIF9kYXRhMyA9IF9zdGVwNC52YWx1ZTsKICAgICAgICAgICAgbW9kZWxWYWx1ZS5wdXNoKF9kYXRhMy5rZXkpOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgX2l0ZXJhdG9yNC5lKGVycik7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIF9pdGVyYXRvcjQuZigpOwogICAgICAgIH0KICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG1vZGVsVmFsdWUuam9pbignLCcpKTsKICAgICAgfQogICAgfSwKICAgIGZpbHRlck5vZGU6IGZ1bmN0aW9uIGZpbHRlck5vZGUodmFsdWUsIGRhdGEpIHsKICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRydWU7CiAgICAgIHJldHVybiBkYXRhLnZhbHVlLmluZGV4T2YodmFsdWUpICE9PSAtMTsKICAgIH0sCiAgICBmaWx0ZXJNZXRob2Q6IGZ1bmN0aW9uIGZpbHRlck1ldGhvZChxdWVyeSkgewogICAgICB0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUuZmlsdGVyKHF1ZXJ5KTsKICAgIH0sCiAgICByZW1vdGVNZXRob2Q6IGZ1bmN0aW9uIHJlbW90ZU1ldGhvZCh2YWwpIHsKICAgICAgaWYgKHZhbCkgewogICAgICAgIHRoaXMuc2VhcmNoKGZhbHNlLCB2YWwpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMucGFyYW0gPSAnJzsKICAgICAgICB0aGlzLnNlYXJjaCgpOwogICAgICB9CiAgICB9LAogICAgaGFuZGxlQ3VycmVudENoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ3VycmVudENoYW5nZShjdXJyZW50UGFnZSkgewogICAgICB0aGlzLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2U7CiAgICAgIHRoaXMuc2VhcmNoKGN1cnJlbnRQYWdlKTsKICAgIH0sCiAgICBzZWFyY2g6IGZ1bmN0aW9uIHNlYXJjaChjdXJyZW50UGFnZSwgcGFyYW0sIGdhbmdlZENoYW5nZSkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgdGhpcy5vcHRpb25zID0gW107CiAgICAgIGlmIChnYW5nZWRDaGFuZ2UpIHsKICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsICcnKTsKICAgICAgfQogICAgICB2YXIgb2JqSXNFbXB0eSA9IHRoaXMub2JqSXNFbXB0eSh0aGlzLmdhbmdlZC5iaW5kKTsKICAgICAgaWYgKCF0aGlzLmNvbmZpZyB8fCB0aGlzLmdhbmdlZC5iaW5kICYmICFvYmpJc0VtcHR5ICYmICFwYXJhbSkgcmV0dXJuOwogICAgICB2YXIgc3RyID0gdGhpcy5jb25maWc7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIHZhciBnYW5nZWQgPSB0aGlzLmdhbmdlZDsKICAgICAgdGhpcy5wYWdlU2l6ZSA9IHN0ci5wYWdlU2l6ZTsKICAgICAgLy8gaWYoc3RyLm5lZWRQYWdlID09PSAxKXsKICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgIHBhZ2VCZWFuOiB7CiAgICAgICAgICBwYWdlOiBjdXJyZW50UGFnZSA/IGN1cnJlbnRQYWdlIDogMSwKICAgICAgICAgIHBhZ2VTaXplOiBzdHIucGFnZVNpemUsCiAgICAgICAgICBzaG93VG90YWw6ICd0cnVlJwogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKHBhcmFtKSB7CiAgICAgICAgaWYgKHN0ci5kc1R5cGUgPT0gJ2RhdGFTb3VyY2UnKSB7CiAgICAgICAgICB2YXIgQmFzZTY0ID0gcmVxdWlyZSgnanMtYmFzZTY0JykuQmFzZTY0OwogICAgICAgICAgc3RyLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2UgPyBjdXJyZW50UGFnZSA6IDE7CiAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ2FuZ2VkLmJpbmQpID09PSAne30nKSB7CiAgICAgICAgICAgIHN0ci5xdWVyeURhdGEgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFt7CiAgICAgICAgICAgICAga2V5OiBnYW5nZWQudmFsdWVCaW5kLAogICAgICAgICAgICAgIHZhbHVlOiBwYXJhbQogICAgICAgICAgICB9XSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHF1ZXJ5RGF0YSA9IFtdOwogICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZ2FuZ2VkLmJpbmQpIHsKICAgICAgICAgICAgICB2YXIgcEluc3QgPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UoX3RoaXMpOwogICAgICAgICAgICAgIHZhciB2YWwgPSB1dGlscy5nZXRWYWx1ZUJ5UGF0aChwSW5zdCwgZ2FuZ2VkLmJpbmRba2V5XSwgdGhpcy5jdXJTdWJJbmRleCk7CiAgICAgICAgICAgICAgaWYgKHZhbCkgewogICAgICAgICAgICAgICAgcXVlcnlEYXRhLnB1c2goewogICAgICAgICAgICAgICAgICBrZXk6IGtleSwKICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHF1ZXJ5RGF0YS5wdXNoKHsKICAgICAgICAgICAgICAgICAga2V5OiBrZXksCiAgICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJhbQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0ci5xdWVyeURhdGEgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHF1ZXJ5RGF0YSkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgdGVtcGxhdGVQYSA9IHRoaXMuY29uZmlnLmRhdGFQYXJhbTsKICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXF1ZXN0VHlwZSA9PSAnUE9TVCcgJiYgdGVtcGxhdGVQYSkgewogICAgICAgICAgICB2YXIgY29uZGl0aW9uZmllbGQgPSBKU09OLnBhcnNlKHN0ci5jb25kaXRpb25maWVsZCk7CiAgICAgICAgICAgIGNvbmRpdGlvbmZpZWxkLmZvckVhY2goZnVuY3Rpb24gKGVsZSkgewogICAgICAgICAgICAgIHZhciBwSW5zdCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZShfdGhpcyk7CiAgICAgICAgICAgICAgdmFyIHZhbCA9IHV0aWxzLmdldFZhbHVlQnlQYXRoKHBJbnN0LCBnYW5nZWQuYmluZFtlbGUuZmllbGRdKTsKICAgICAgICAgICAgICBpZiAodmFsKSB7CiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVBhID0gdGVtcGxhdGVQYS5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xceycgKyBlbGUuZmllbGQgKyAnXFx9JywgJ2cnKSwgdmFsKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGVtcGxhdGVQYSA9IHRlbXBsYXRlUGEucmVwbGFjZShuZXcgUmVnRXhwKCdcXHsnICsgZWxlLmZpZWxkICsgJ1xcfScsICdnJyksIHBhcmFtKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHt9CiAgICAgICAgICBzdHIucGFnZUJlYW4gPSB1dGlscy5wYXJzZVRvSnNvbih0ZW1wbGF0ZVBhKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RyLnBhZ2VCZWFuID0gcGFnZUJlYW47CiAgICAgICAgc3RyLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2UgPyBjdXJyZW50UGFnZSA6IDE7CiAgICAgICAgc3RyLnF1ZXJ5RGF0YSA9ICcnOwogICAgICB9CiAgICAgIC8vfQogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZm9ybS9zZWxlY3RRdWVyeScsIHN0cikudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgaWYgKF90aGlzNS5jb25maWcgJiYgX3RoaXM1LmNvbmZpZy5kc1R5cGUgPT09ICdyZXN0ZnVsJykgewogICAgICAgICAgX3RoaXMub3B0aW9ucyA9IHJlcy5yb3dzOwogICAgICAgICAgLy90cmVl5pWw57uE6L2sbGlzdAogICAgICAgICAgX3RoaXM1LmFkZFNlbGVjdExpc3QoX3RoaXMub3B0aW9ucyk7CiAgICAgICAgICAvL+WkhOeQhuWPquivu+WbnuWhq+aYvuekugogICAgICAgICAgaWYgKF90aGlzLmlucHV0VmFsICYmIF90aGlzLmlucHV0VmFsLmNvbnN0cnVjdG9yID09IEFycmF5ICYmIF90aGlzLmlucHV0VmFsLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfdGhpcy5pbnB1dFZhbC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIF90aGlzNS5maW5kRGVzYyhfdGhpcy5vcHRpb25zLCBfdGhpcy5pbnB1dFZhbFtpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy/pu5jorqTpgInkuK3moJHoioLngrkKICAgICAgICAgICAgaWYgKF90aGlzNS5pbnB1dFdyaXRlYWJsZSkgewogICAgICAgICAgICAgIF90aGlzNS4kcmVmcy50cmVlc2VsZWN0RWxUcmVlLnNldENoZWNrZWRLZXlzKF90aGlzLmlucHV0VmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3RoaXM1LmZpbmREZXNjKF90aGlzLm9wdGlvbnMsIF90aGlzLmlucHV0VmFsKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfdGhpczUudmFsdWVEZXNjICE9ICcnKSB7CiAgICAgICAgICAgIF90aGlzNS52YWx1ZURlc2MgPSBfdGhpczUudmFsdWVEZXNjLnN1YnN0cmluZygwLCBfdGhpczUudmFsdWVEZXNjLmxlbmd0aCAtIDEpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBfdGhpcy50b3RhbCA9IHJlcy50b3RhbDsKICAgICAgICBfdGhpcy5vcHRpb25zID0gW107CiAgICAgICAgcmVzLnJvd3MuZm9yRWFjaChmdW5jdGlvbiAobSkgewogICAgICAgICAgdmFyIG9wdGlvbiA9IHt9OwogICAgICAgICAgaWYgKF90aGlzLmdhbmdlZC52YWx1ZUJpbmQpIHsKICAgICAgICAgICAgb3B0aW9uLmtleSA9IG1bZ2FuZ2VkLnZhbHVlQmluZF0gKyAnJzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfdGhpcy5nYW5nZWQubGFiZWxCaW5kKSB7CiAgICAgICAgICAgIG9wdGlvbi52YWx1ZSA9IG1bZ2FuZ2VkLmxhYmVsQmluZF07CiAgICAgICAgICB9CiAgICAgICAgICBfdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKTsKICAgICAgICB9KTsKCiAgICAgICAgLy90cmVl5pWw57uE6L2sbGlzdAogICAgICAgIF90aGlzNS5hZGRTZWxlY3RMaXN0KF90aGlzLm9wdGlvbnMpOwogICAgICAgIGlmIChfdGhpcy5pbnB1dFZhbCAmJiBfdGhpcy5pbnB1dFZhbC5jb25zdHJ1Y3RvciA9PSBBcnJheSAmJiBfdGhpcy5pbnB1dFZhbC5sZW5ndGggPiAwKSB7CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IF90aGlzLmlucHV0VmFsLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIF90aGlzNS5maW5kRGVzYyhfdGhpcy5vcHRpb25zLCBfdGhpcy5pbnB1dFZhbFtqXSk7CiAgICAgICAgICB9CiAgICAgICAgICAvL+m7mOiupOmAieS4reagkeiKgueCuQogICAgICAgICAgX3RoaXM1LiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIF90aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUgJiYgX3RoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5zZXRDaGVja2VkS2V5cyhfdGhpcy5pbnB1dFZhbCk7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX3RoaXM1LmZpbmREZXNjKF90aGlzLm9wdGlvbnMsIF90aGlzLmlucHV0VmFsKTsKICAgICAgICB9CiAgICAgICAgaWYgKF90aGlzNS52YWx1ZURlc2MgIT0gJycpIHsKICAgICAgICAgIF90aGlzNS52YWx1ZURlc2MgPSBfdGhpczUudmFsdWVEZXNjLnN1YnN0cmluZygwLCBfdGhpczUudmFsdWVEZXNjLmxlbmd0aCAtIDEpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgZmluZERlc2M6IGZ1bmN0aW9uIGZpbmREZXNjKGxpc3QsIGtleSkgewogICAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGlmIChsaXN0W2ldLmtleSA9PSBrZXkpIHsKICAgICAgICAgICAgdGhpcy52YWx1ZURlc2MgKz0gbGlzdFtpXS52YWx1ZSArICcsJzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGxpc3RbaV0uY2hpbGRyZW4pIHsKICAgICAgICAgICAgdGhpcy5maW5kRGVzYyhsaXN0W2ldLmNoaWxkcmVuLCBrZXkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGFkZFNlbGVjdExpc3Q6IGZ1bmN0aW9uIGFkZFNlbGVjdExpc3QobGlzdCkgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7CiAgICAgICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7CiAgICAgICAgICBfdGhpczYudGVtcG9wdGlvbnMucHVzaChsKTsKICAgICAgICAgIGlmIChsLmNoaWxkcmVuKSB7CiAgICAgICAgICAgIF90aGlzNi5hZGRTZWxlY3RMaXN0KGwuY2hpbGRyZW4pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgfQp9Ow=="},null]}