1784e632bd335e67709616be5b8cd635.json 23 KB

1
  1. {"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\thread-loader\\dist\\cjs.js!D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js!D:\\front\\item\\zyAdmin\\src\\libs\\util.js","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\libs\\util.js","mtime":1761614939003},{"path":"D:\\front\\item\\zyAdmin\\babel.config.js","mtime":1761614925168},{"path":"D:\\front\\item\\zyAdmin\\.babelrc","mtime":1761614925165},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\thread-loader\\dist\\cjs.js","mtime":1761614937017},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js","mtime":1761614927320}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJEOi9mcm9udC9pdGVtL3p5QWRtaW4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIjsKaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovZnJvbnQvaXRlbS96eUFkbWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC1pbmRleC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmV2ZXJ5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5yZWR1Y2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5zb21lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyB8IENSTUVCIFsgQ1JNRULotYvog73lvIDlj5HogIXvvIzliqnlipvkvIHkuJrlj5HlsZUgXQovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIHwgQ29weXJpZ2h0IChjKSAyMDE2fjIwMjMgaHR0cHM6Ly93d3cuY3JtZWIuY29tIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gfCBMaWNlbnNlZCBDUk1FQuW5tuS4jeaYr+iHqueUsei9r+S7tu+8jOacque7j+iuuOWPr+S4jeiDveWOu+aOiUNSTUVC55u45YWz54mI5p2DCi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gfCBBdXRob3I6IENSTUVCIFRlYW0gPGFkbWluQGNybWViLmNvbT4KLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaW1wb3J0IENvb2tpZXMgZnJvbSAnanMtY29va2llJzsKLy8gY29va2ll5L+d5a2Y55qE5aSp5pWwCmltcG9ydCBjb25maWcgZnJvbSAnQC9jb25maWcnOwppbXBvcnQgeyBmb3JFYWNoLCBoYXNPbmVPZiwgb2JqRXF1YWwgfSBmcm9tICdAL2xpYnMvdG9vbHMnOwppbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnOwp2YXIgdGl0bGUgPSBjb25maWcudGl0bGUsCiAgdXNlSTE4biA9IGNvbmZpZy51c2VJMThuOwppbXBvcnQgcGFja2FnZUNvbmZpZyBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nOwovLyDorr7nva5zZXRDb29raWVz77ybCi8vIHNldFRva2VuCmV4cG9ydCB2YXIgc2V0Q29va2llcyA9IGZ1bmN0aW9uIHNldENvb2tpZXMoa2V5LCB2YWwsIGNvb2tpZUV4cGlyZXMpIHsKICBDb29raWVzLnNldCgiIi5jb25jYXQocGFja2FnZUNvbmZpZy5uYW1lLCAiOiIpLmNvbmNhdChrZXkpLCB2YWwsIHsKICAgIGV4cGlyZXM6IGNvb2tpZUV4cGlyZXMgfHwgMQogIH0pOwp9OwovLyDojrflj5ZnZXRDb29raWVz77ybCi8vIGdldFRva2VuCmV4cG9ydCB2YXIgZ2V0Q29va2llcyA9IGZ1bmN0aW9uIGdldENvb2tpZXMoa2V5KSB7CiAgcmV0dXJuIENvb2tpZXMuZ2V0KCIiLmNvbmNhdChwYWNrYWdlQ29uZmlnLm5hbWUsICI6IikuY29uY2F0KGtleSkpOwp9OwpleHBvcnQgdmFyIHJlbW92ZUNvb2tpZXMgPSBmdW5jdGlvbiByZW1vdmVDb29raWVzKGtleSkgewogIHJldHVybiBDb29raWVzLnJlbW92ZSgiIi5jb25jYXQocGFja2FnZUNvbmZpZy5uYW1lLCAiOiIpLmNvbmNhdChrZXkpKTsKfTsKZXhwb3J0IHZhciBoYXNDaGlsZCA9IGZ1bmN0aW9uIGhhc0NoaWxkKGl0ZW0pIHsKICByZXR1cm4gaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCAhPT0gMDsKfTsKdmFyIHNob3dUaGlzTWVudUVsZSA9IGZ1bmN0aW9uIHNob3dUaGlzTWVudUVsZShpdGVtLCBhY2Nlc3MpIHsKICBpZiAoaXRlbS5tZXRhICYmIGl0ZW0ubWV0YS5hY2Nlc3MgJiYgaXRlbS5tZXRhLmFjY2Vzcy5sZW5ndGgpIHsKICAgIGlmIChoYXNPbmVPZihpdGVtLm1ldGEuYWNjZXNzLCBhY2Nlc3MpKSByZXR1cm4gdHJ1ZTtlbHNlIHJldHVybiBmYWxzZTsKICB9IGVsc2UgcmV0dXJuIHRydWU7Cn07Ci8qKg0KICogQHBhcmFtIHtBcnJheX0gbGlzdCDpgJrov4fot6/nlLHliJfooajlvpfliLDoj5zljZXliJfooagNCiAqIEByZXR1cm5zIHtBcnJheX0NCiAqLwp2YXIgX2dldE1lbnVCeVJvdXRlciA9IGZ1bmN0aW9uIGdldE1lbnVCeVJvdXRlcihsaXN0LCBhY2Nlc3MpIHsKICB2YXIgcmVzID0gW107CiAgZm9yRWFjaChsaXN0LCBmdW5jdGlvbiAoaXRlbSkgewogICAgaWYgKCFpdGVtLm1ldGEgfHwgaXRlbS5tZXRhICYmICFpdGVtLm1ldGEuaGlkZUluTWVudSkgewogICAgICB2YXIgb2JqID0gewogICAgICAgIGljb246IGl0ZW0ubWV0YSAmJiBpdGVtLm1ldGEuaWNvbiB8fCAnJywKICAgICAgICBuYW1lOiBpdGVtLm5hbWUsCiAgICAgICAgbWV0YTogaXRlbS5tZXRhCiAgICAgIH07CiAgICAgIGlmICgoaGFzQ2hpbGQoaXRlbSkgfHwgaXRlbS5tZXRhICYmIGl0ZW0ubWV0YS5zaG93QWx3YXlzKSAmJiBzaG93VGhpc01lbnVFbGUoaXRlbSwgYWNjZXNzKSkgewogICAgICAgIG9iai5jaGlsZHJlbiA9IF9nZXRNZW51QnlSb3V0ZXIoaXRlbS5jaGlsZHJlbiwgYWNjZXNzKTsKICAgICAgfQogICAgICBpZiAoaXRlbS5tZXRhICYmIGl0ZW0ubWV0YS5ocmVmKSBvYmouaHJlZiA9IGl0ZW0ubWV0YS5ocmVmOwogICAgICBpZiAoc2hvd1RoaXNNZW51RWxlKGl0ZW0sIGFjY2VzcykpIHJlcy5wdXNoKG9iaik7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHJlczsKfTsKCi8qKg0KICogQHBhcmFtIHtBcnJheX0gcm91dGVNZXRjaGVkIOW9k+WJjei3r+eUsW1ldGNoZWQNCiAqIEByZXR1cm5zIHtBcnJheX0NCiAqLwpleHBvcnQgeyBfZ2V0TWVudUJ5Um91dGVyIGFzIGdldE1lbnVCeVJvdXRlciB9OwpleHBvcnQgdmFyIGdldEJyZWFkQ3J1bWJMaXN0ID0gZnVuY3Rpb24gZ2V0QnJlYWRDcnVtYkxpc3Qocm91dGUsIGhvbWVSb3V0ZSkgewogIHZhciBfaG9tZVJvdXRlJG1ldGE7CiAgdmFyIGhvbWVJdGVtID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBob21lUm91dGUpLCB7fSwgewogICAgaWNvbjogKF9ob21lUm91dGUkbWV0YSA9IGhvbWVSb3V0ZS5tZXRhKSA9PT0gbnVsbCB8fCBfaG9tZVJvdXRlJG1ldGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ob21lUm91dGUkbWV0YS5pY29uCiAgfSk7CiAgdmFyIHJvdXRlTWV0Y2hlZCA9IHJvdXRlLm1hdGNoZWQ7CiAgaWYgKHJvdXRlTWV0Y2hlZC5zb21lKGZ1bmN0aW9uIChpdGVtKSB7CiAgICByZXR1cm4gaXRlbS5uYW1lID09PSBob21lUm91dGUubmFtZTsKICB9KSkgcmV0dXJuIFtob21lSXRlbV07CiAgdmFyIHJlcyA9IHJvdXRlTWV0Y2hlZC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsKICAgIHJldHVybiBpdGVtLm1ldGEgPT09IHVuZGVmaW5lZCB8fCAhaXRlbS5tZXRhLmhpZGVJbkJyZWFkOwogIH0pLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgdmFyIG1ldGEgPSBfb2JqZWN0U3ByZWFkKHt9LCBpdGVtLm1ldGEpOwogICAgaWYgKG1ldGEudGl0bGUgJiYgdHlwZW9mIG1ldGEudGl0bGUgPT09ICdmdW5jdGlvbicpIHsKICAgICAgbWV0YS5fX3RpdGxlSXNGdW5jdGlvbl9fID0gdHJ1ZTsKICAgICAgbWV0YS50aXRsZSA9IG1ldGEudGl0bGUocm91dGUpOwogICAgfQogICAgdmFyIG9iaiA9IHsKICAgICAgaWNvbjogaXRlbS5tZXRhICYmIGl0ZW0ubWV0YS5pY29uIHx8ICcnLAogICAgICBuYW1lOiBpdGVtLm5hbWUsCiAgICAgIG1ldGE6IG1ldGEKICAgIH07CiAgICByZXR1cm4gb2JqOwogIH0pOwogIHJlcyA9IHJlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsKICAgIHJldHVybiAhaXRlbS5tZXRhLmhpZGVJbk1lbnU7CiAgfSk7CiAgcmV0dXJuIFtfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGhvbWVJdGVtKSwge30sIHsKICAgIHRvOiBob21lUm91dGUucGF0aAogIH0pXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlcykpOwp9OwpleHBvcnQgdmFyIGdldFJvdXRlVGl0bGVIYW5kbGVkID0gZnVuY3Rpb24gZ2V0Um91dGVUaXRsZUhhbmRsZWQocm91dGUpIHsKICB2YXIgcm91dGVyID0gX29iamVjdFNwcmVhZCh7fSwgcm91dGUpOwogIHZhciBtZXRhID0gX29iamVjdFNwcmVhZCh7fSwgcm91dGUubWV0YSk7CiAgdmFyIHRpdGxlID0gJyc7CiAgaWYgKG1ldGEudGl0bGUpIHsKICAgIGlmICh0eXBlb2YgbWV0YS50aXRsZSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICBtZXRhLl9fdGl0bGVJc0Z1bmN0aW9uX18gPSB0cnVlOwogICAgICB0aXRsZSA9IG1ldGEudGl0bGUocm91dGVyKTsKICAgIH0gZWxzZSB0aXRsZSA9IG1ldGEudGl0bGU7CiAgfQogIG1ldGEudGl0bGUgPSB0aXRsZTsKICByb3V0ZXIubWV0YSA9IG1ldGE7CiAgcmV0dXJuIHJvdXRlcjsKfTsKZXhwb3J0IHZhciBzaG93VGl0bGUgPSBmdW5jdGlvbiBzaG93VGl0bGUoaXRlbSwgdm0pIHsKICB2YXIgX2l0ZW0kbWV0YSA9IGl0ZW0ubWV0YSwKICAgIHRpdGxlID0gX2l0ZW0kbWV0YS50aXRsZSwKICAgIF9fdGl0bGVJc0Z1bmN0aW9uX18gPSBfaXRlbSRtZXRhLl9fdGl0bGVJc0Z1bmN0aW9uX187CiAgaWYgKCF0aXRsZSkgcmV0dXJuOwogIGlmICh1c2VJMThuKSB7CiAgICBpZiAodGl0bGUuaW5jbHVkZXMoJ3t7JykgJiYgdGl0bGUuaW5jbHVkZXMoJ319JykgJiYgdXNlSTE4bikgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKC8oe3tbXHNcU10rP319KS8sIGZ1bmN0aW9uIChtLCBzdHIpIHsKICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC97eyhbXHNcU10qKX19LywgZnVuY3Rpb24gKG0sIF8pIHsKICAgICAgICByZXR1cm4gdm0uJHQoXy50cmltKCkpOwogICAgICB9KTsKICAgIH0pO2Vsc2UgaWYgKF9fdGl0bGVJc0Z1bmN0aW9uX18pIHRpdGxlID0gaXRlbS5tZXRhLnRpdGxlO2Vsc2UgdGl0bGUgPSB2bS4kdChpdGVtLm5hbWUpOwogIH0gZWxzZSB0aXRsZSA9IGl0ZW0ubWV0YSAmJiBpdGVtLm1ldGEudGl0bGUgfHwgaXRlbS5uYW1lOwogIHJldHVybiB0aXRsZTsKfTsKCi8qKg0KICogQGRlc2NyaXB0aW9uIOacrOWcsOWtmOWCqOWSjOiOt+WPluagh+etvuWvvOiIquWIl+ihqA0KICovCmV4cG9ydCB2YXIgc2V0VGFnTmF2TGlzdEluTG9jYWxzdG9yYWdlID0gZnVuY3Rpb24gc2V0VGFnTmF2TGlzdEluTG9jYWxzdG9yYWdlKGxpc3QpIHsKICBsb2NhbFN0b3JhZ2UudGFnTmF2ZUxpc3QgPSBKU09OLnN0cmluZ2lmeShsaXN0KTsKfTsKLyoqDQogKiBAcmV0dXJucyB7QXJyYXl9IOWFtuS4reeahOavj+S4quWFg+e0oOWPquWMheWQq+i3r+eUseWOn+S/oeaBr+S4reeahG5hbWUsIHBhdGgsIG1ldGHkuInpobkNCiAqLwpleHBvcnQgdmFyIGdldFRhZ05hdkxpc3RGcm9tTG9jYWxzdG9yYWdlID0gZnVuY3Rpb24gZ2V0VGFnTmF2TGlzdEZyb21Mb2NhbHN0b3JhZ2UoKSB7CiAgdmFyIGxpc3QgPSBsb2NhbFN0b3JhZ2UudGFnTmF2ZUxpc3Q7CiAgcmV0dXJuIGxpc3QgPyBKU09OLnBhcnNlKGxpc3QpIDogW107Cn07CgovKioNCiAqIEBwYXJhbSB7QXJyYXl9IHJvdXRlcnMg6Lev55Sx5YiX6KGo5pWw57uEDQogKiBAZGVzY3JpcHRpb24g55So5LqO5om+5Yiw6Lev55Sx5YiX6KGo5LitbmFtZeS4umhvbWXnmoTlr7nosaENCiAqLwp2YXIgX2dldEhvbWVSb3V0ZSA9IGZ1bmN0aW9uIGdldEhvbWVSb3V0ZShyb3V0ZXJzKSB7CiAgdmFyIGhvbWVOYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnaG9tZSc7CiAgdmFyIGkgPSAtMTsKICB2YXIgbGVuID0gcm91dGVycy5sZW5ndGg7CiAgdmFyIGhvbWVSb3V0ZSA9IHt9OwogIHdoaWxlICgrK2kgPCBsZW4pIHsKICAgIHZhciBpdGVtID0gcm91dGVyc1tpXTsKICAgIGlmIChpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgIHZhciByZXMgPSBfZ2V0SG9tZVJvdXRlKGl0ZW0uY2hpbGRyZW4sIGhvbWVOYW1lKTsKICAgICAgaWYgKHJlcy5uYW1lKSByZXR1cm4gcmVzOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGl0ZW0ubmFtZSA9PT0gaG9tZU5hbWUpIGhvbWVSb3V0ZSA9IGl0ZW07CiAgICB9CiAgfQogIHJldHVybiBob21lUm91dGU7Cn07CgovKioNCiAqIEBwYXJhbSB7Kn0gbGlzdCDnjrDmnInmoIfnrb7lr7zoiKrliJfooagNCiAqIEBwYXJhbSB7Kn0gbmV3Um91dGUg5paw5re75Yqg55qE6Lev55Sx5Y6f5L+h5oGv5a+56LGhDQogKiBAZGVzY3JpcHRpb24g5aaC5p6c6K+lbmV3Um91dGXlt7Lnu4/lrZjlnKjliJnkuI3lho3mt7vliqANCiAqLwpleHBvcnQgeyBfZ2V0SG9tZVJvdXRlIGFzIGdldEhvbWVSb3V0ZSB9OwpleHBvcnQgdmFyIGdldE5ld1RhZ0xpc3QgPSBmdW5jdGlvbiBnZXROZXdUYWdMaXN0KGxpc3QsIG5ld1JvdXRlKSB7CiAgdmFyIG5hbWUgPSBuZXdSb3V0ZS5uYW1lLAogICAgcGF0aCA9IG5ld1JvdXRlLnBhdGgsCiAgICBtZXRhID0gbmV3Um91dGUubWV0YTsKICB2YXIgbmV3TGlzdCA9IF90b0NvbnN1bWFibGVBcnJheShsaXN0KTsKICBpZiAobmV3TGlzdC5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHsKICAgIHJldHVybiBpdGVtLnBhdGggPT09IHBhdGg7CiAgfSkgPj0gMCkgcmV0dXJuIG5ld0xpc3Q7ZWxzZSBuZXdMaXN0LnB1c2goewogICAgbmFtZTogbmFtZSwKICAgIHBhdGg6IHBhdGgsCiAgICBtZXRhOiBtZXRhCiAgfSk7CiAgcmV0dXJuIG5ld0xpc3Q7Cn07CgovKioNCiAqIEBwYXJhbSB7Kn0gYWNjZXNzIOeUqOaIt+adg+mZkOaVsOe7hO+8jOWmgiBbJ3N1cGVyX2FkbWluJywgJ2FkbWluJ10NCiAqIEBwYXJhbSB7Kn0gcm91dGUg6Lev55Sx5YiX6KGoDQogKi8KdmFyIGhhc0FjY2VzcyA9IGZ1bmN0aW9uIGhhc0FjY2VzcyhhY2Nlc3MsIHJvdXRlKSB7CiAgaWYgKHJvdXRlLm1ldGEgJiYgcm91dGUubWV0YS5hY2Nlc3MpIHJldHVybiBoYXNPbmVPZihhY2Nlc3MsIHJvdXRlLm1ldGEuYWNjZXNzKTtlbHNlIHJldHVybiB0cnVlOwp9OwoKLyoqDQogKiDmnYPpibQNCiAqIEBwYXJhbSB7Kn0gbmFtZSDljbPlsIbot7PovaznmoTot6/nlLFuYW1lDQogKiBAcGFyYW0geyp9IGFjY2VzcyDnlKjmiLfmnYPpmZDmlbDnu4QNCiAqIEBwYXJhbSB7Kn0gcm91dGVzIOi3r+eUseWIl+ihqA0KICogQGRlc2NyaXB0aW9uIOeUqOaIt+aYr+WQpuWPr+i3s+i9rOWIsOivpemhtQ0KICovCmV4cG9ydCB2YXIgY2FuVHVyblRvID0gZnVuY3Rpb24gY2FuVHVyblRvKG5hbWUsIGFjY2Vzcywgcm91dGVzKSB7CiAgdmFyIF9yb3V0ZVBlcm1pc3Npb25KdWRnZSA9IGZ1bmN0aW9uIHJvdXRlUGVybWlzc2lvbkp1ZGdlKGxpc3QpIHsKICAgIHJldHVybiBsaXN0LnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gX3JvdXRlUGVybWlzc2lvbkp1ZGdlKGl0ZW0uY2hpbGRyZW4pOwogICAgICB9IGVsc2UgaWYgKGl0ZW0ubmFtZSA9PT0gbmFtZSkgewogICAgICAgIHJldHVybiBoYXNBY2Nlc3MoYWNjZXNzLCBpdGVtKTsKICAgICAgfQogICAgfSk7CiAgfTsKICByZXR1cm4gX3JvdXRlUGVybWlzc2lvbkp1ZGdlKHJvdXRlcyk7Cn07CgovKioNCiAqIEBwYXJhbSB7U3RyaW5nfSB1cmwNCiAqIEBkZXNjcmlwdGlvbiDku45VUkzkuK3op6PmnpDlj4LmlbANCiAqLwpleHBvcnQgdmFyIGdldFBhcmFtcyA9IGZ1bmN0aW9uIGdldFBhcmFtcyh1cmwpIHsKICB2YXIga2V5VmFsdWVBcnIgPSB1cmwuc3BsaXQoJz8nKVsxXS5zcGxpdCgnJicpOwogIHZhciBwYXJhbU9iaiA9IHt9OwogIGtleVZhbHVlQXJyLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgIHZhciBrZXlWYWx1ZSA9IGl0ZW0uc3BsaXQoJz0nKTsKICAgIHBhcmFtT2JqW2tleVZhbHVlWzBdXSA9IGtleVZhbHVlWzFdOwogIH0pOwogIHJldHVybiBwYXJhbU9iajsKfTsKCi8qKg0KICogQHBhcmFtIHtBcnJheX0gbGlzdCDmoIfnrb7liJfooagNCiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIOW9k+WJjeWFs+mXreeahOagh+etvueahG5hbWUNCiAqLwpleHBvcnQgdmFyIGdldE5leHRSb3V0ZSA9IGZ1bmN0aW9uIGdldE5leHRSb3V0ZShsaXN0LCByb3V0ZSkgewogIHZhciByZXMgPSB7fTsKICBpZiAobGlzdC5sZW5ndGggPT09IDIpIHsKICAgIHJlcyA9IF9nZXRIb21lUm91dGUobGlzdCk7CiAgfSBlbHNlIHsKICAgIHZhciBpbmRleCA9IGxpc3QuZmluZEluZGV4KGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIHJldHVybiByb3V0ZUVxdWFsKGl0ZW0sIHJvdXRlKTsKICAgIH0pOwogICAgaWYgKGluZGV4ID09PSBsaXN0Lmxlbmd0aCAtIDEpIHJlcyA9IGxpc3RbbGlzdC5sZW5ndGggLSAyXTtlbHNlIHJlcyA9IGxpc3RbaW5kZXggKyAxXTsKICB9CiAgcmV0dXJuIHJlczsKfTsKCi8qKg0KICogQHBhcmFtIHtOdW1iZXJ9IHRpbWVzIOWbnuiwg+WHveaVsOmcgOimgeaJp+ihjOeahOasoeaVsA0KICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sg5Zue6LCD5Ye95pWwDQogKi8KZXhwb3J0IHZhciBkb0N1c3RvbVRpbWVzID0gZnVuY3Rpb24gZG9DdXN0b21UaW1lcyh0aW1lcywgY2FsbGJhY2spIHsKICB2YXIgaSA9IC0xOwogIHdoaWxlICgrK2kgPCB0aW1lcykgewogICAgY2FsbGJhY2soaSk7CiAgfQp9OwoKLyoqDQogKiBAcGFyYW0ge09iamVjdH0gZmlsZSDku47kuIrkvKDnu4Tku7blvpfliLDnmoTmlofku7blr7nosaENCiAqIEByZXR1cm5zIHtQcm9taXNlfSByZXNvbHZl5Y+C5pWw5piv6Kej5p6Q5ZCO55qE5LqM57u05pWw57uEDQogKiBAZGVzY3JpcHRpb24g5LuOQ3N25paH5Lu25Lit6Kej5p6Q5Ye66KGo5qC877yM6Kej5p6Q5oiQ5LqM57u05pWw57uEDQogKi8KZXhwb3J0IHZhciBnZXRBcnJheUZyb21GaWxlID0gZnVuY3Rpb24gZ2V0QXJyYXlGcm9tRmlsZShmaWxlKSB7CiAgdmFyIG5hbWVTcGxpdCA9IGZpbGUubmFtZS5zcGxpdCgnLicpOwogIHZhciBmb3JtYXQgPSBuYW1lU3BsaXRbbmFtZVNwbGl0Lmxlbmd0aCAtIDFdOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOyAvLyDku6XmlofmnKzmoLzlvI/or7vlj5YKICAgIHZhciBhcnIgPSBbXTsKICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgIHZhciBkYXRhID0gZXZ0LnRhcmdldC5yZXN1bHQ7IC8vIOivu+WIsOeahOaVsOaNrgogICAgICB2YXIgcGFzdGVEYXRhID0gZGF0YS50cmltKCk7CiAgICAgIGFyciA9IHBhc3RlRGF0YS5zcGxpdCgvW1xuXHUwMDg1XHUyMDI4XHUyMDI5XXxcclxuPy9nKS5tYXAoZnVuY3Rpb24gKHJvdykgewogICAgICAgIHJldHVybiByb3cuc3BsaXQoJ1x0Jyk7CiAgICAgIH0pLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIHJldHVybiBpdGVtWzBdLnNwbGl0KCcsJyk7CiAgICAgIH0pOwogICAgICBpZiAoZm9ybWF0ID09PSAnY3N2JykgcmVzb2x2ZShhcnIpO2Vsc2UgcmVqZWN0KG5ldyBFcnJvcignW0Zvcm1hdCBFcnJvcl065L2g5LiK5Lyg55qE5LiN5pivQ3N25paH5Lu2JykpOwogICAgfTsKICB9KTsKfTsKCi8qKg0KICogQHBhcmFtIHtBcnJheX0gYXJyYXkg6KGo5qC85pWw5o2u5LqM57u05pWw57uEDQogKiBAcmV0dXJucyB7T2JqZWN0fSB7IGNvbHVtbnMsIHRhYmxlRGF0YSB9DQogKiBAZGVzY3JpcHRpb24g5LuO5LqM57u05pWw57uE5Lit6I635Y+W6KGo5aS05ZKM6KGo5qC85pWw5o2u77yM5bCG56ys5LiA6KGM5L2c5Li66KGo5aS077yM55So5LqO5Zyo6KGo5qC85Lit5bGV56S65pWw5o2uDQogKi8KZXhwb3J0IHZhciBnZXRUYWJsZURhdGFGcm9tQXJyYXkgPSBmdW5jdGlvbiBnZXRUYWJsZURhdGFGcm9tQXJyYXkoYXJyYXkpIHsKICB2YXIgY29sdW1ucyA9IFtdOwogIHZhciB0YWJsZURhdGEgPSBbXTsKICBpZiAoYXJyYXkubGVuZ3RoID4gMSkgewogICAgdmFyIHRpdGxlcyA9IGFycmF5LnNoaWZ0KCk7CiAgICBjb2x1bW5zID0gdGl0bGVzLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICByZXR1cm4gewogICAgICAgIHRpdGxlOiBpdGVtLAogICAgICAgIGtleTogaXRlbQogICAgICB9OwogICAgfSk7CiAgICB0YWJsZURhdGEgPSBhcnJheS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgdmFyIHJlcyA9IHt9OwogICAgICBpdGVtLmZvckVhY2goZnVuY3Rpb24gKGNvbCwgaSkgewogICAgICAgIHJlc1t0aXRsZXNbaV1dID0gY29sOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlczsKICAgIH0pOwogIH0KICByZXR1cm4gewogICAgY29sdW1uczogY29sdW1ucywKICAgIHRhYmxlRGF0YTogdGFibGVEYXRhCiAgfTsKfTsKdmFyIF9maW5kTm9kZVVwcGVyID0gZnVuY3Rpb24gZmluZE5vZGVVcHBlcihlbGUsIHRhZykgewogIGlmIChlbGUucGFyZW50Tm9kZSkgewogICAgaWYgKGVsZS5wYXJlbnROb2RlLnRhZ05hbWUgPT09IHRhZy50b1VwcGVyQ2FzZSgpKSB7CiAgICAgIHJldHVybiBlbGUucGFyZW50Tm9kZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfZmluZE5vZGVVcHBlcihlbGUucGFyZW50Tm9kZSwgdGFnKTsKICAgIH0KICB9Cn07CmV4cG9ydCB7IF9maW5kTm9kZVVwcGVyIGFzIGZpbmROb2RlVXBwZXIgfTsKdmFyIF9maW5kTm9kZVVwcGVyQnlDbGFzc2VzID0gZnVuY3Rpb24gZmluZE5vZGVVcHBlckJ5Q2xhc3NlcyhlbGUsIGNsYXNzZXMpIHsKICB2YXIgcGFyZW50Tm9kZSA9IGVsZS5wYXJlbnROb2RlOwogIGlmIChwYXJlbnROb2RlKSB7CiAgICB2YXIgY2xhc3NMaXN0ID0gcGFyZW50Tm9kZS5jbGFzc0xpc3Q7CiAgICBpZiAoY2xhc3NMaXN0ICYmIGNsYXNzZXMuZXZlcnkoZnVuY3Rpb24gKGNsYXNzTmFtZSkgewogICAgICByZXR1cm4gY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7CiAgICB9KSkgewogICAgICByZXR1cm4gcGFyZW50Tm9kZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfZmluZE5vZGVVcHBlckJ5Q2xhc3NlcyhwYXJlbnROb2RlLCBjbGFzc2VzKTsKICAgIH0KICB9Cn07CmV4cG9ydCB7IF9maW5kTm9kZVVwcGVyQnlDbGFzc2VzIGFzIGZpbmROb2RlVXBwZXJCeUNsYXNzZXMgfTsKdmFyIF9maW5kTm9kZURvd253YXJkID0gZnVuY3Rpb24gZmluZE5vZGVEb3dud2FyZChlbGUsIHRhZykgewogIHZhciB0YWdOYW1lID0gdGFnLnRvVXBwZXJDYXNlKCk7CiAgaWYgKGVsZS5jaGlsZE5vZGVzLmxlbmd0aCkgewogICAgdmFyIGkgPSAtMTsKICAgIHZhciBsZW4gPSBlbGUuY2hpbGROb2Rlcy5sZW5ndGg7CiAgICB3aGlsZSAoKytpIDwgbGVuKSB7CiAgICAgIHZhciBjaGlsZCA9IGVsZS5jaGlsZE5vZGVzW2ldOwogICAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gdGFnTmFtZSkgcmV0dXJuIGNoaWxkO2Vsc2UgcmV0dXJuIF9maW5kTm9kZURvd253YXJkKGNoaWxkLCB0YWcpOwogICAgfQogIH0KfTsKZXhwb3J0IHsgX2ZpbmROb2RlRG93bndhcmQgYXMgZmluZE5vZGVEb3dud2FyZCB9OwpleHBvcnQgdmFyIHNob3dCeUFjY2VzcyA9IGZ1bmN0aW9uIHNob3dCeUFjY2VzcyhhY2Nlc3MsIGNhblZpZXdBY2Nlc3MpIHsKICByZXR1cm4gaGFzT25lT2YoY2FuVmlld0FjY2VzcywgYWNjZXNzKTsKfTsKCi8qKg0KICogQGRlc2NyaXB0aW9uIOagueaNrm5hbWUvcGFyYW1zL3F1ZXJ55Yik5pat5Lik5Liq6Lev55Sx5a+56LGh5piv5ZCm55u4562JDQogKiBAcGFyYW0geyp9IHJvdXRlMSDot6/nlLHlr7nosaENCiAqIEBwYXJhbSB7Kn0gcm91dGUyIOi3r+eUseWvueixoQ0KICovCmV4cG9ydCB2YXIgcm91dGVFcXVhbCA9IGZ1bmN0aW9uIHJvdXRlRXF1YWwocm91dGUxLCByb3V0ZTIpIHsKICB2YXIgcGFyYW1zMSA9IHJvdXRlMS5wYXJhbXMgfHwge307CiAgdmFyIHBhcmFtczIgPSByb3V0ZTIucGFyYW1zIHx8IHt9OwogIHZhciBxdWVyeTEgPSByb3V0ZTEucXVlcnkgfHwge307CiAgdmFyIHF1ZXJ5MiA9IHJvdXRlMi5xdWVyeSB8fCB7fTsKICByZXR1cm4gcm91dGUxLm5hbWUgPT09IHJvdXRlMi5uYW1lICYmIG9iakVxdWFsKHBhcmFtczEsIHBhcmFtczIpICYmIG9iakVxdWFsKHF1ZXJ5MSwgcXVlcnkyKTsKfTsKCi8qKg0KICog5Yik5pat5omT5byA55qE5qCH562+5YiX6KGo6YeM5piv5ZCm5bey5a2Y5Zyo6L+Z5Liq5paw5re75Yqg55qE6Lev55Sx5a+56LGhDQogKi8KZXhwb3J0IHZhciByb3V0ZUhhc0V4aXN0ID0gZnVuY3Rpb24gcm91dGVIYXNFeGlzdCh0YWdOYXZMaXN0LCByb3V0ZUl0ZW0pIHsKICB2YXIgbGVuID0gdGFnTmF2TGlzdC5sZW5ndGg7CiAgdmFyIHJlcyA9IGZhbHNlOwogIGRvQ3VzdG9tVGltZXMobGVuLCBmdW5jdGlvbiAoaW5kZXgpIHsKICAgIGlmIChyb3V0ZUVxdWFsKHRhZ05hdkxpc3RbaW5kZXhdLCByb3V0ZUl0ZW0pKSByZXMgPSB0cnVlOwogIH0pOwogIHJldHVybiByZXM7Cn07CmV4cG9ydCB2YXIgbG9jYWxTYXZlID0gZnVuY3Rpb24gbG9jYWxTYXZlKGtleSwgdmFsdWUpIHsKICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTsKfTsKZXhwb3J0IHZhciBsb2NhbFJlYWQgPSBmdW5jdGlvbiBsb2NhbFJlYWQoa2V5KSB7CiAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgfHwgJyc7Cn07CgovLyBzY3JvbGxUb3AgYW5pbWF0aW9uCmV4cG9ydCB2YXIgc2Nyb2xsVG9wID0gZnVuY3Rpb24gc2Nyb2xsVG9wKGVsKSB7CiAgdmFyIGZyb20gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7CiAgdmFyIHRvID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7CiAgdmFyIGR1cmF0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiA1MDA7CiAgdmFyIGVuZENhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgPyBhcmd1bWVudHNbNF0gOiB1bmRlZmluZWQ7CiAgaWYgKCF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7CiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgICAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApOwogICAgfTsKICB9CiAgdmFyIGRpZmZlcmVuY2UgPSBNYXRoLmFicyhmcm9tIC0gdG8pOwogIHZhciBzdGVwID0gTWF0aC5jZWlsKGRpZmZlcmVuY2UgLyBkdXJhdGlvbiAqIDUwKTsKICB2YXIgX3Njcm9sbCA9IGZ1bmN0aW9uIHNjcm9sbChzdGFydCwgZW5kLCBzdGVwKSB7CiAgICBpZiAoc3RhcnQgPT09IGVuZCkgewogICAgICBlbmRDYWxsYmFjayAmJiBlbmRDYWxsYmFjaygpOwogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgZCA9IHN0YXJ0ICsgc3RlcCA+IGVuZCA/IGVuZCA6IHN0YXJ0ICsgc3RlcDsKICAgIGlmIChzdGFydCA+IGVuZCkgewogICAgICBkID0gc3RhcnQgLSBzdGVwIDwgZW5kID8gZW5kIDogc3RhcnQgLSBzdGVwOwogICAgfQogICAgaWYgKGVsID09PSB3aW5kb3cpIHsKICAgICAgd2luZG93LnNjcm9sbFRvKGQsIGQpOwogICAgfSBlbHNlIHsKICAgICAgZWwuc2Nyb2xsVG9wID0gZDsKICAgIH0KICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gX3Njcm9sbChkLCBlbmQsIHN0ZXApOwogICAgfSk7CiAgfTsKICBfc2Nyb2xsKGZyb20sIHRvLCBzdGVwKTsKfTsKCi8qKg0KICogQGRlc2NyaXB0aW9uIOagueaNruW9k+WJjei3s+i9rOeahOi3r+eUseiuvue9ruaYvuekuuWcqOa1j+iniOWZqOagh+etvueahHRpdGxlDQogKiBAcGFyYW0ge09iamVjdH0gcm91dGVJdGVtIOi3r+eUseWvueixoQ0KICogQHBhcmFtIHtPYmplY3R9IHZtIFZ1ZeWunuS+iw0KICovCmV4cG9ydCB2YXIgc2V0VGl0bGUgPSBmdW5jdGlvbiBzZXRUaXRsZShyb3V0ZUl0ZW0sIHZtKSB7CiAgdmFyIHdpblRpdGxlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0FETUlOX1RJVExFJykgfHwgdGl0bGU7CiAgdmFyIGhhbmRsZWRSb3V0ZSA9IGdldFJvdXRlVGl0bGVIYW5kbGVkKHJvdXRlSXRlbSk7CiAgdmFyIHBhZ2VUaXRsZSA9IHNob3dUaXRsZShoYW5kbGVkUm91dGUsIHZtKTsKICB2YXIgcmVzVGl0bGUgPSBwYWdlVGl0bGUgPyAiIi5jb25jYXQod2luVGl0bGUsICIgLSAiKS5jb25jYXQocGFnZVRpdGxlKSA6IHdpblRpdGxlOwogIHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHJlc1RpdGxlOwp9Owp2YXIgX1IgPSBmdW5jdGlvbiBSKG1lbnVMaXN0LCBuZXdPcGVuTWVudXMpIHsKICBtZW51TGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICB2YXIgbmV3TWVudSA9IHt9OwogICAgZm9yICh2YXIgaSBpbiBpdGVtKSB7CiAgICAgIGlmIChpICE9PSAnY2hpbGRyZW4nKSBuZXdNZW51W2ldID0gY2xvbmVEZWVwKGl0ZW1baV0pOwogICAgfQogICAgbmV3T3Blbk1lbnVzLnB1c2gobmV3TWVudSk7CiAgICBpdGVtLmNoaWxkcmVuICYmIF9SKGl0ZW0uY2hpbGRyZW4sIG5ld09wZW5NZW51cyk7CiAgfSk7CiAgcmV0dXJuIG5ld09wZW5NZW51czsKfTsKZXhwb3J0IHsgX1IgYXMgUiB9OwpleHBvcnQgZnVuY3Rpb24gZ2V0TWVudW9wZW4odG8sIG1lbnVMaXN0KSB7CiAgdmFyIGFsbE1lbnVzID0gW107CiAgbWVudUxpc3QuZm9yRWFjaChmdW5jdGlvbiAobWVudSkgewogICAgdmFyIG1lbnVzID0gdHJhbnNNZW51KG1lbnUsIFtdKTsKICAgIGFsbE1lbnVzLnB1c2goewogICAgICBwYXRoOiBtZW51LnBhdGgsCiAgICAgIG9wZW5OYW1lczogW10KICAgIH0pOwogICAgbWVudXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICByZXR1cm4gYWxsTWVudXMucHVzaChpdGVtKTsKICAgIH0pOwogIH0pOwogIHZhciBjdXJyZW50TWVudSA9IGFsbE1lbnVzLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHsKICAgIHJldHVybiBpdGVtLnBhdGggPT09IHRvLnBhdGg7CiAgfSk7CiAgcmV0dXJuIGN1cnJlbnRNZW51ID8gY3VycmVudE1lbnUub3Blbk5hbWVzIDogW107Cn0KZnVuY3Rpb24gdHJhbnNNZW51KG1lbnUsIG9wZW5OYW1lcykgewogIGlmIChtZW51LmNoaWxkcmVuICYmIG1lbnUuY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICB2YXIgaXRlbU9wZW5OYW1lcyA9IG9wZW5OYW1lcy5jb25jYXQoW21lbnUucGF0aF0pOwogICAgcmV0dXJuIG1lbnUuY2hpbGRyZW4ucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGl0ZW0pIHsKICAgICAgYWxsLnB1c2goewogICAgICAgIHBhdGg6IGl0ZW0ucGF0aCwKICAgICAgICBvcGVuTmFtZXM6IGl0ZW1PcGVuTmFtZXMKICAgICAgfSk7CiAgICAgIHZhciBmb3VuZENoaWxkcmVuID0gdHJhbnNNZW51KGl0ZW0sIGl0ZW1PcGVuTmFtZXMpOwogICAgICByZXR1cm4gYWxsLmNvbmNhdChmb3VuZENoaWxkcmVuKTsKICAgIH0sIFtdKTsKICB9IGVsc2UgewogICAgcmV0dXJuIFttZW51XS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBwYXRoOiBpdGVtLnBhdGgsCiAgICAgICAgb3Blbk5hbWVzOiBvcGVuTmFtZXMKICAgICAgfTsKICAgIH0pOwogIH0KfQpleHBvcnQgZnVuY3Rpb24gd3NzKHdzU29ja2V0VXJsKSB7CiAgdmFyIGlzaHR0cHMgPSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA9PSAnaHR0cHM6JzsKICBpZiAoaXNodHRwcykgewogICAgcmV0dXJuIHdzU29ja2V0VXJsLnJlcGxhY2UoJ3dzOicsICd3c3M6Jyk7CiAgfSBlbHNlIHsKICAgIHJldHVybiB3c1NvY2tldFVybC5yZXBsYWNlKCd3c3M6JywgJ3dzOicpOwogIH0KfQ=="},null]}