4f5a8dc443bda17a9f75691ed2fcceba.json 56 KB

1
  1. {"remainingRequest":"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\\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=="},{"version":3,"names":["Cookies","config","forEach","hasOneOf","objEqual","cloneDeep","title","useI18n","packageConfig","setCookies","key","val","cookieExpires","set","concat","name","expires","getCookies","get","removeCookies","remove","hasChild","item","children","length","showThisMenuEle","access","meta","getMenuByRouter","list","res","hideInMenu","obj","icon","showAlways","href","push","_getMenuByRouter","getBreadCrumbList","route","homeRoute","_homeRoute$meta","homeItem","_objectSpread","routeMetched","matched","some","filter","undefined","hideInBread","map","__titleIsFunction__","to","path","_toConsumableArray","getRouteTitleHandled","router","showTitle","vm","_item$meta","includes","replace","m","str","_","$t","trim","setTagNavListInLocalstorage","localStorage","tagNaveList","JSON","stringify","getTagNavListFromLocalstorage","parse","getHomeRoute","routers","homeName","arguments","i","len","_getHomeRoute","getNewTagList","newRoute","newList","findIndex","hasAccess","canTurnTo","routes","routePermissionJudge","getParams","url","keyValueArr","split","paramObj","keyValue","getNextRoute","index","routeEqual","doCustomTimes","times","callback","getArrayFromFile","file","nameSplit","format","Promise","resolve","reject","reader","FileReader","readAsText","arr","onload","evt","data","target","result","pasteData","row","Error","getTableDataFromArray","array","columns","tableData","titles","shift","col","findNodeUpper","ele","tag","parentNode","tagName","toUpperCase","_findNodeUpper","findNodeUpperByClasses","classes","classList","every","className","contains","_findNodeUpperByClasses","findNodeDownward","childNodes","child","_findNodeDownward","showByAccess","canViewAccess","route1","route2","params1","params","params2","query1","query","query2","routeHasExist","tagNavList","routeItem","localSave","value","setItem","localRead","getItem","scrollTop","el","from","duration","endCallback","window","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","setTimeout","difference","Math","abs","step","ceil","scroll","start","end","d","scrollTo","setTitle","winTitle","handledRoute","pageTitle","resTitle","document","R","menuList","newOpenMenus","newMenu","_R","getMenuopen","allMenus","menu","menus","transMenu","openNames","currentMenu","find","itemOpenNames","reduce","all","foundChildren","wss","wsSocketUrl","ishttps","location","protocol"],"sources":["D:/front/item/zyAdmin/src/libs/util.js"],"sourcesContent":["// +---------------------------------------------------------------------\r\n// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]\r\n// +---------------------------------------------------------------------\r\n// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.\r\n// +---------------------------------------------------------------------\r\n// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权\r\n// +---------------------------------------------------------------------\r\n// | Author: CRMEB Team <admin@crmeb.com>\r\n// +---------------------------------------------------------------------\r\n\r\nimport Cookies from 'js-cookie';\r\n// cookie保存的天数\r\nimport config from '@/config';\r\nimport { forEach, hasOneOf, objEqual } from '@/libs/tools';\r\nimport { cloneDeep } from 'lodash';\r\nconst { title, useI18n } = config;\r\nimport packageConfig from '../../package.json';\r\n// 设置setCookies;\r\n// setToken\r\nexport const setCookies = (key, val, cookieExpires) => {\r\n Cookies.set(`${packageConfig.name}:${key}`, val, { expires: cookieExpires || 1 });\r\n};\r\n// 获取getCookies;\r\n// getToken\r\nexport const getCookies = (key) => {\r\n return Cookies.get(`${packageConfig.name}:${key}`);\r\n};\r\n\r\nexport const removeCookies = (key) => {\r\n return Cookies.remove(`${packageConfig.name}:${key}`);\r\n};\r\n\r\nexport const hasChild = (item) => {\r\n return item.children && item.children.length !== 0;\r\n};\r\n\r\nconst showThisMenuEle = (item, access) => {\r\n if (item.meta && item.meta.access && item.meta.access.length) {\r\n if (hasOneOf(item.meta.access, access)) return true;\r\n else return false;\r\n } else return true;\r\n};\r\n/**\r\n * @param {Array} list 通过路由列表得到菜单列表\r\n * @returns {Array}\r\n */\r\nexport const getMenuByRouter = (list, access) => {\r\n let res = [];\r\n forEach(list, (item) => {\r\n if (!item.meta || (item.meta && !item.meta.hideInMenu)) {\r\n let obj = {\r\n icon: (item.meta && item.meta.icon) || '',\r\n name: item.name,\r\n meta: item.meta,\r\n };\r\n if ((hasChild(item) || (item.meta && item.meta.showAlways)) && showThisMenuEle(item, access)) {\r\n obj.children = getMenuByRouter(item.children, access);\r\n }\r\n if (item.meta && item.meta.href) obj.href = item.meta.href;\r\n if (showThisMenuEle(item, access)) res.push(obj);\r\n }\r\n });\r\n return res;\r\n};\r\n\r\n/**\r\n * @param {Array} routeMetched 当前路由metched\r\n * @returns {Array}\r\n */\r\nexport const getBreadCrumbList = (route, homeRoute) => {\r\n let homeItem = { ...homeRoute, icon: homeRoute.meta?.icon };\r\n let routeMetched = route.matched;\r\n if (routeMetched.some((item) => item.name === homeRoute.name)) return [homeItem];\r\n let res = routeMetched\r\n .filter((item) => {\r\n return item.meta === undefined || !item.meta.hideInBread;\r\n })\r\n .map((item) => {\r\n let meta = { ...item.meta };\r\n if (meta.title && typeof meta.title === 'function') {\r\n meta.__titleIsFunction__ = true;\r\n meta.title = meta.title(route);\r\n }\r\n let obj = {\r\n icon: (item.meta && item.meta.icon) || '',\r\n name: item.name,\r\n meta: meta,\r\n };\r\n return obj;\r\n });\r\n res = res.filter((item) => {\r\n return !item.meta.hideInMenu;\r\n });\r\n return [{ ...homeItem, to: homeRoute.path }, ...res];\r\n};\r\n\r\nexport const getRouteTitleHandled = (route) => {\r\n let router = { ...route };\r\n let meta = { ...route.meta };\r\n let title = '';\r\n if (meta.title) {\r\n if (typeof meta.title === 'function') {\r\n meta.__titleIsFunction__ = true;\r\n title = meta.title(router);\r\n } else title = meta.title;\r\n }\r\n meta.title = title;\r\n router.meta = meta;\r\n return router;\r\n};\r\n\r\nexport const showTitle = (item, vm) => {\r\n let { title, __titleIsFunction__ } = item.meta;\r\n if (!title) return;\r\n if (useI18n) {\r\n if (title.includes('{{') && title.includes('}}') && useI18n)\r\n title = title.replace(/({{[\\s\\S]+?}})/, (m, str) => str.replace(/{{([\\s\\S]*)}}/, (m, _) => vm.$t(_.trim())));\r\n else if (__titleIsFunction__) title = item.meta.title;\r\n else title = vm.$t(item.name);\r\n } else title = (item.meta && item.meta.title) || item.name;\r\n return title;\r\n};\r\n\r\n/**\r\n * @description 本地存储和获取标签导航列表\r\n */\r\nexport const setTagNavListInLocalstorage = (list) => {\r\n localStorage.tagNaveList = JSON.stringify(list);\r\n};\r\n/**\r\n * @returns {Array} 其中的每个元素只包含路由原信息中的name, path, meta三项\r\n */\r\nexport const getTagNavListFromLocalstorage = () => {\r\n const list = localStorage.tagNaveList;\r\n return list ? JSON.parse(list) : [];\r\n};\r\n\r\n/**\r\n * @param {Array} routers 路由列表数组\r\n * @description 用于找到路由列表中name为home的对象\r\n */\r\nexport const getHomeRoute = (routers, homeName = 'home') => {\r\n let i = -1;\r\n let len = routers.length;\r\n let homeRoute = {};\r\n while (++i < len) {\r\n let item = routers[i];\r\n if (item.children && item.children.length) {\r\n let res = getHomeRoute(item.children, homeName);\r\n if (res.name) return res;\r\n } else {\r\n if (item.name === homeName) homeRoute = item;\r\n }\r\n }\r\n return homeRoute;\r\n};\r\n\r\n/**\r\n * @param {*} list 现有标签导航列表\r\n * @param {*} newRoute 新添加的路由原信息对象\r\n * @description 如果该newRoute已经存在则不再添加\r\n */\r\nexport const getNewTagList = (list, newRoute) => {\r\n const { name, path, meta } = newRoute;\r\n let newList = [...list];\r\n if (newList.findIndex((item) => item.path === path) >= 0) return newList;\r\n else newList.push({ name, path, meta });\r\n return newList;\r\n};\r\n\r\n/**\r\n * @param {*} access 用户权限数组,如 ['super_admin', 'admin']\r\n * @param {*} route 路由列表\r\n */\r\nconst hasAccess = (access, route) => {\r\n if (route.meta && route.meta.access) return hasOneOf(access, route.meta.access);\r\n else return true;\r\n};\r\n\r\n/**\r\n * 权鉴\r\n * @param {*} name 即将跳转的路由name\r\n * @param {*} access 用户权限数组\r\n * @param {*} routes 路由列表\r\n * @description 用户是否可跳转到该页\r\n */\r\nexport const canTurnTo = (name, access, routes) => {\r\n const routePermissionJudge = (list) => {\r\n return list.some((item) => {\r\n if (item.children && item.children.length) {\r\n return routePermissionJudge(item.children);\r\n } else if (item.name === name) {\r\n return hasAccess(access, item);\r\n }\r\n });\r\n };\r\n\r\n return routePermissionJudge(routes);\r\n};\r\n\r\n/**\r\n * @param {String} url\r\n * @description 从URL中解析参数\r\n */\r\nexport const getParams = (url) => {\r\n const keyValueArr = url.split('?')[1].split('&');\r\n let paramObj = {};\r\n keyValueArr.forEach((item) => {\r\n const keyValue = item.split('=');\r\n paramObj[keyValue[0]] = keyValue[1];\r\n });\r\n return paramObj;\r\n};\r\n\r\n/**\r\n * @param {Array} list 标签列表\r\n * @param {String} name 当前关闭的标签的name\r\n */\r\nexport const getNextRoute = (list, route) => {\r\n let res = {};\r\n if (list.length === 2) {\r\n res = getHomeRoute(list);\r\n } else {\r\n const index = list.findIndex((item) => routeEqual(item, route));\r\n if (index === list.length - 1) res = list[list.length - 2];\r\n else res = list[index + 1];\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * @param {Number} times 回调函数需要执行的次数\r\n * @param {Function} callback 回调函数\r\n */\r\nexport const doCustomTimes = (times, callback) => {\r\n let i = -1;\r\n while (++i < times) {\r\n callback(i);\r\n }\r\n};\r\n\r\n/**\r\n * @param {Object} file 从上传组件得到的文件对象\r\n * @returns {Promise} resolve参数是解析后的二维数组\r\n * @description 从Csv文件中解析出表格,解析成二维数组\r\n */\r\nexport const getArrayFromFile = (file) => {\r\n let nameSplit = file.name.split('.');\r\n let format = nameSplit[nameSplit.length - 1];\r\n return new Promise((resolve, reject) => {\r\n let reader = new FileReader();\r\n reader.readAsText(file); // 以文本格式读取\r\n let arr = [];\r\n reader.onload = function (evt) {\r\n let data = evt.target.result; // 读到的数据\r\n let pasteData = data.trim();\r\n arr = pasteData\r\n .split(/[\\n\\u0085\\u2028\\u2029]|\\r\\n?/g)\r\n .map((row) => {\r\n return row.split('\\t');\r\n })\r\n .map((item) => {\r\n return item[0].split(',');\r\n });\r\n if (format === 'csv') resolve(arr);\r\n else reject(new Error('[Format Error]:你上传的不是Csv文件'));\r\n };\r\n });\r\n};\r\n\r\n/**\r\n * @param {Array} array 表格数据二维数组\r\n * @returns {Object} { columns, tableData }\r\n * @description 从二维数组中获取表头和表格数据,将第一行作为表头,用于在表格中展示数据\r\n */\r\nexport const getTableDataFromArray = (array) => {\r\n let columns = [];\r\n let tableData = [];\r\n if (array.length > 1) {\r\n let titles = array.shift();\r\n columns = titles.map((item) => {\r\n return {\r\n title: item,\r\n key: item,\r\n };\r\n });\r\n tableData = array.map((item) => {\r\n let res = {};\r\n item.forEach((col, i) => {\r\n res[titles[i]] = col;\r\n });\r\n return res;\r\n });\r\n }\r\n return {\r\n columns,\r\n tableData,\r\n };\r\n};\r\n\r\nexport const findNodeUpper = (ele, tag) => {\r\n if (ele.parentNode) {\r\n if (ele.parentNode.tagName === tag.toUpperCase()) {\r\n return ele.parentNode;\r\n } else {\r\n return findNodeUpper(ele.parentNode, tag);\r\n }\r\n }\r\n};\r\n\r\nexport const findNodeUpperByClasses = (ele, classes) => {\r\n let parentNode = ele.parentNode;\r\n if (parentNode) {\r\n let classList = parentNode.classList;\r\n if (classList && classes.every((className) => classList.contains(className))) {\r\n return parentNode;\r\n } else {\r\n return findNodeUpperByClasses(parentNode, classes);\r\n }\r\n }\r\n};\r\n\r\nexport const findNodeDownward = (ele, tag) => {\r\n const tagName = tag.toUpperCase();\r\n if (ele.childNodes.length) {\r\n let i = -1;\r\n let len = ele.childNodes.length;\r\n while (++i < len) {\r\n let child = ele.childNodes[i];\r\n if (child.tagName === tagName) return child;\r\n else return findNodeDownward(child, tag);\r\n }\r\n }\r\n};\r\n\r\nexport const showByAccess = (access, canViewAccess) => {\r\n return hasOneOf(canViewAccess, access);\r\n};\r\n\r\n/**\r\n * @description 根据name/params/query判断两个路由对象是否相等\r\n * @param {*} route1 路由对象\r\n * @param {*} route2 路由对象\r\n */\r\nexport const routeEqual = (route1, route2) => {\r\n const params1 = route1.params || {};\r\n const params2 = route2.params || {};\r\n const query1 = route1.query || {};\r\n const query2 = route2.query || {};\r\n return route1.name === route2.name && objEqual(params1, params2) && objEqual(query1, query2);\r\n};\r\n\r\n/**\r\n * 判断打开的标签列表里是否已存在这个新添加的路由对象\r\n */\r\nexport const routeHasExist = (tagNavList, routeItem) => {\r\n let len = tagNavList.length;\r\n let res = false;\r\n doCustomTimes(len, (index) => {\r\n if (routeEqual(tagNavList[index], routeItem)) res = true;\r\n });\r\n return res;\r\n};\r\n\r\nexport const localSave = (key, value) => {\r\n localStorage.setItem(key, value);\r\n};\r\n\r\nexport const localRead = (key) => {\r\n return localStorage.getItem(key) || '';\r\n};\r\n\r\n// scrollTop animation\r\nexport const scrollTop = (el, from = 0, to, duration = 500, endCallback) => {\r\n if (!window.requestAnimationFrame) {\r\n window.requestAnimationFrame =\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n };\r\n }\r\n const difference = Math.abs(from - to);\r\n const step = Math.ceil((difference / duration) * 50);\r\n\r\n const scroll = (start, end, step) => {\r\n if (start === end) {\r\n endCallback && endCallback();\r\n return;\r\n }\r\n\r\n let d = start + step > end ? end : start + step;\r\n if (start > end) {\r\n d = start - step < end ? end : start - step;\r\n }\r\n\r\n if (el === window) {\r\n window.scrollTo(d, d);\r\n } else {\r\n el.scrollTop = d;\r\n }\r\n window.requestAnimationFrame(() => scroll(d, end, step));\r\n };\r\n scroll(from, to, step);\r\n};\r\n\r\n/**\r\n * @description 根据当前跳转的路由设置显示在浏览器标签的title\r\n * @param {Object} routeItem 路由对象\r\n * @param {Object} vm Vue实例\r\n */\r\nexport const setTitle = (routeItem, vm) => {\r\n let winTitle = localStorage.getItem('ADMIN_TITLE') || title;\r\n const handledRoute = getRouteTitleHandled(routeItem);\r\n const pageTitle = showTitle(handledRoute, vm);\r\n const resTitle = pageTitle ? `${winTitle} - ${pageTitle}` : winTitle;\r\n window.document.title = resTitle;\r\n};\r\n\r\nexport const R = (menuList, newOpenMenus) => {\r\n menuList.forEach((item) => {\r\n let newMenu = {};\r\n for (let i in item) {\r\n if (i !== 'children') newMenu[i] = cloneDeep(item[i]);\r\n }\r\n newOpenMenus.push(newMenu);\r\n item.children && R(item.children, newOpenMenus);\r\n });\r\n return newOpenMenus;\r\n};\r\n\r\nexport function getMenuopen(to, menuList) {\r\n const allMenus = [];\r\n menuList.forEach((menu) => {\r\n const menus = transMenu(menu, []);\r\n allMenus.push({\r\n path: menu.path,\r\n openNames: [],\r\n });\r\n menus.forEach((item) => allMenus.push(item));\r\n });\r\n const currentMenu = allMenus.find((item) => item.path === to.path);\r\n return currentMenu ? currentMenu.openNames : [];\r\n}\r\n\r\nfunction transMenu(menu, openNames) {\r\n if (menu.children && menu.children.length) {\r\n const itemOpenNames = openNames.concat([menu.path]);\r\n return menu.children.reduce((all, item) => {\r\n all.push({\r\n path: item.path,\r\n openNames: itemOpenNames,\r\n });\r\n const foundChildren = transMenu(item, itemOpenNames);\r\n return all.concat(foundChildren);\r\n }, []);\r\n } else {\r\n return [menu].map((item) => {\r\n return {\r\n path: item.path,\r\n openNames: openNames,\r\n };\r\n });\r\n }\r\n}\r\n\r\nexport function wss(wsSocketUrl) {\r\n let ishttps = document.location.protocol == 'https:';\r\n if (ishttps) {\r\n return wsSocketUrl.replace('ws:', 'wss:');\r\n } else {\r\n return wsSocketUrl.replace('wss:', 'ws:');\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}]}