util-helpers 4.7.0 → 4.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/util-helpers.js +1 -1
- package/dist/util-helpers.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -52,6 +52,7 @@ formatMoney('1000'); // => 1,000.00
|
|
|
52
52
|
- [formatBankCard](https://doly-dev.github.io/util-helpers/module-Processor.html#.formatBankCard) - 格式化银行卡
|
|
53
53
|
- [normalizeString](https://doly-dev.github.io/util-helpers/module-Processor.html#.normalizeString) - 规整化字符串,如果值为 `undefined` `null` 转为 '',如果不是字符串类型则转为字符串
|
|
54
54
|
- [numberToChinese](https://doly-dev.github.io/util-helpers/module-Processor.html#.numberToChinese) - 数字转中文数字
|
|
55
|
+
- [padZero](https://doly-dev.github.io/util-helpers/module-Processor.html#.padZero) - 前置补零
|
|
55
56
|
- [parseIdCard](https://doly-dev.github.io/util-helpers/module-Processor.html#.parseIdCard) - 解析身份证号码
|
|
56
57
|
- [replaceChar](https://doly-dev.github.io/util-helpers/module-Processor.html#.replaceChar) - 替换字符,应用场景如:脱敏
|
|
57
58
|
- [safeDate](https://doly-dev.github.io/util-helpers/module-Processor.html#.safeDate) - 创建一个 Date 实例,同 new Date
|
package/dist/util-helpers.js
CHANGED
|
@@ -2645,4 +2645,4 @@
|
|
|
2645
2645
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
2646
2646
|
|
|
2647
2647
|
})));
|
|
2648
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC1oZWxwZXJzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvdHlwZS9pc1R5cGUuanMiLCIuLi9zcmMvdXRpbHMvdHlwZS9pc1N0cmluZy5qcyIsIi4uL3NyYy91dGlscy9jb252ZXJ0VG9TdHJpbmcuanMiLCIuLi9zcmMvaXNNb2JpbGUuanMiLCIuLi9zcmMvaXNUZWxlcGhvbmUuanMiLCIuLi9zcmMvaXNQb3N0Y29kZS5qcyIsIi4uL3NyYy9pc0lkQ2FyZC5qcyIsIi4uL3NyYy9pc0VtYWlsLmpzIiwiLi4vc3JjL2lzUVEuanMiLCIuLi9zcmMvaXNXWC5qcyIsIi4uL3NyYy9pc1ZlaGljbGUuanMiLCIuLi9zcmMvaXNCYW5rQ2FyZC5qcyIsIi4uL3NyYy9pc1NvY2lhbENyZWRpdENvZGUuanMiLCIuLi9zcmMvdXRpbHMvY29uZmlnLmpzIiwiLi4vc3JjL3ZhbGlkYXRlUGFzc3dvcmQuanMiLCIuLi9zcmMvaXNQYXNzd29yZC5qcyIsIi4uL3NyYy9pc1Bhc3Nwb3J0LmpzIiwiLi4vc3JjL2lzQ2hpbmVzZS5qcyIsIi4uL3NyYy9pc0lQdjQuanMiLCIuLi9zcmMvaXNJUHY2LmpzIiwiLi4vc3JjL2lzVXJsLmpzIiwiLi4vc3JjL2lzQnVzaW5lc3NMaWNlbnNlLmpzIiwiLi4vc3JjL2lzUHJvbWlzZUxpa2UuanMiLCIuLi9zcmMvaXNITUNhcmQuanMiLCIuLi9zcmMvaXNUV0NhcmQuanMiLCIuLi9zcmMvdXRpbHMvY29uc3RhbnRzLmpzIiwiLi4vc3JjL3V0aWxzL21hdGgudXRpbC5qcyIsIi4uL3NyYy91dGlscy90eXBlL2lzTmFOLmpzIiwiLi4vc3JjL2Zvcm1hdE1vbmV5LmpzIiwiLi4vc3JjL3V0aWxzL3R5cGUvaXNVbmRlZmluZWQuanMiLCIuLi9zcmMvdXRpbHMvdHlwZS9pc051bGwuanMiLCIuLi9zcmMvdXRpbHMvdHlwZS9pc05pbC5qcyIsIi4uL3NyYy9ub3JtYWxpemVTdHJpbmcuanMiLCIuLi9zcmMvZm9ybWF0QmFua0NhcmQuanMiLCIuLi9zcmMvcmVwbGFjZUNoYXIuanMiLCIuLi9zcmMvbnVtYmVyVG9DaGluZXNlLmpzIiwiLi4vc3JjL2J5dGVzVG9TaXplLmpzIiwiLi4vc3JjL3BhcnNlSWRDYXJkLmpzIiwiLi4vc3JjL2Jsb2JUb0RhdGFVUkwuanMiLCIuLi9zcmMvZGF0YVVSTFRvQmxvYi5qcyIsIi4uL3NyYy9zZXREYXRhVVJMUHJlZml4LmpzIiwiLi4vc3JjL3NhZmVEYXRlLmpzIiwiLi4vc3JjL2Zvcm1hdE1vYmlsZS5qcyIsIi4uL3NyYy9wYWRaZXJvLmpzIiwiLi4vc3JjL3V0aWxzL3R5cGUvaXNOdW1iZXIuanMiLCIuLi9zcmMvdGltZXMuanMiLCIuLi9zcmMvcGx1cy5qcyIsIi4uL3NyYy9taW51cy5qcyIsIi4uL3NyYy9kaXZpZGUuanMiLCIuLi9zcmMvcm91bmQuanMiLCIuLi9zcmMvd2FpdFRpbWUuanMiLCIuLi9zcmMvY2FsY3VsYXRlQ3Vyc29yUG9zaXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIOajgOa1i+WAvOeahCBgdG9TdHJpbmdgIOexu+Wei1xuICpcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg5qOA5p+l5YC8XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZW5hbWUg57G75Z6L5ZCN56ewXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g6L+U5Zue5YC855qEIGB0b1N0cmluZ2Ag57G75Z6L5piv5ZCm5Yy56YWNXG4gKi9cbmZ1bmN0aW9uIGlzVHlwZSh2YWx1ZSwgdHlwZW5hbWUpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSBgW29iamVjdCAke3R5cGVuYW1lfV1gO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1R5cGU7XG4iLCJpbXBvcnQgaXNUeXBlIGZyb20gJy4vaXNUeXBlJztcblxuLyoqXG4gKiDmo4Dmn6XlgLzmmK/lkKbkuLpTdHJpbmdcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlR5cGUuaXNTdHJpbmdcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDmo4Dmn6XlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDmmK/lkKbkuLpTdHJpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogaXNTdHJpbmcoJ2FiYycpXG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNTdHJpbmcoMSlcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBpc1R5cGUodmFsdWUsICdTdHJpbmcnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTdHJpbmc7XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi90eXBlL2lzU3RyaW5nJztcblxuLyoqXG4gKiDovazmjaLkuLrlrZfnrKbkuLJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIOWAvFxuICogQHJldHVybnMge3N0cmluZ30g5a2X56ym5LiyXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb252ZXJ0VG9TdHJpbmc7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuLy8g5omL5py65Y+356CBIDEx5L2N5pWw5a2X77yM5LulMeW8gOWktO+8jOesrOS6jOS9jeaYrzM0NTY3ODnlhbbkuK3kuIDkuKrvvIzlkI7pnaLlho3liqA55Liq5pWw5a2XXG5jb25zdCByZWcgPSAvXjFbMzQ1Njc4OV1cXGR7OX0kLztcblxuLyoqXG4gKiDmo4DmtYvlgLzmmK/lkKbkuLrmiYvmnLrlj7fnoIFcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlZhbGlkYXRvci5pc01vYmlsZVxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOimgeajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOWAvOaYr+WQpuS4uuaJi+acuuWPt+eggVxuICogQGV4YW1wbGVcbiAqXG4gKiBpc01vYmlsZSgnMTMwMDAwMDAwMDAnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc01vYmlsZSgnMTMwMDAnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICovXG5mdW5jdGlvbiBpc01vYmlsZSh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTW9iaWxlO1xuIiwiaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8vIOWbuuWumueUteivnSDmlK/mjIHljLrlj7flkozliIbmnLrlj7cgM++9njTkvY3ljLrlj7fvvIzku6Uw5byA5aS077ybN++9njjkvY3nm7Tmkq3lj7fvvIzku6Uy772eOeW8gOWktO+8mzHvvZ425L2N5YiG5py65Y+3XG5jb25zdCByZWcgPSAvXigwXFxkezIsM31cXC0pPyhbMi05XVxcZHs2LDd9KShcXC1cXGR7MSw2fSk/JC87XG5cbi8qKlxuICog5qOA5rWL5YC85piv5ZCm5Li65Zu65a6a55S16K+dXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNUZWxlcGhvbmVcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrlm7rlrprnlLXor51cbiAqIEBleGFtcGxlXG4gKlxuICogaXNUZWxlcGhvbmUoJzIyMDMzMjEyJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNUZWxlcGhvbmUoJzAyMS0yMjAzMzIxMicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzVGVsZXBob25lKCcwMjEtMjIwMzMyMTItMTIzJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNUZWxlcGhvbmUoJzEzMDAwMDAwMDAwJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqL1xuZnVuY3Rpb24gaXNUZWxlcGhvbmUodmFsdWUpIHtcbiAgY29uc3QgdmFsdWVTdHIgPSBjb252ZXJ0VG9TdHJpbmcodmFsdWUpO1xuICByZXR1cm4gcmVnLnRlc3QodmFsdWVTdHIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1RlbGVwaG9uZTtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyDpgq7mlL/nvJbnoIFcbmNvbnN0IHJlZyA9IC9eXFxkezZ9JC87XG5cbi8qKlxuICog5qOA5rWL5YC85piv5ZCm5Li66YKu5pS/57yW56CB77yMNuS9jeaVsOWtl1xuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzUG9zdGNvZGVcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrpgq7mlL/nvJbnoIFcbiAqIEBleGFtcGxlXG4gKlxuICogaXNQb3N0Y29kZSgnMTAxMTExJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNQb3N0Y29kZSgnMTIzJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqL1xuZnVuY3Rpb24gaXNQb3N0Y29kZSh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUG9zdGNvZGU7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuLy8g6Lqr5Lu96K+B5Y+35q2j5YiZXG5jb25zdCByZWdJZENhcmQgPSAvXlsxLTldXFxkezV9KDE5fDIwKT9cXGR7Mn0oKDBbMS05XSl8KDFbMDEyXSkpKChbMC0yXVsxLTldKXwxMHwyMHwzMHwzMSlcXGR7M30oXFxkfFgpPyQvaTtcblxuLyoqXG4gKiDmoKHpqoznoIHorqHnrpdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vemgud2lraXBlZGlhLm9yZy93aWtpL+S4reWNjuS6uuawkeWFseWSjOWbveWFrOawkei6q+S7veWPt+eggXzkuK3ljY7kurrmsJHlhbHlkozlm73lhazmsJHouqvku73lj7fnoIF9XG4gKiBAc2VlIOWPguiAgyB7QGxpbmsgaHR0cHM6Ly9iYWlrZS5iYWlkdS5jb20vaXRlbS/lsYXmsJHouqvku73or4Hlj7fnoIF85bGF5rCR6Lqr5Lu96K+B5Y+356CBfVxuICogQHBhcmFtIHtzdHJpbmd9IGlkIOi6q+S7veivgeWPt+eggVxuICogQHJldHVybnMge2Jvb2xlYW59IOagoemqjOeggeaYr+WQpuato+ehrlxuICovXG5mdW5jdGlvbiBjaGVjayhpZCkge1xuICBsZXQgaW5kZXgsIHN1bSwgbnVtO1xuICBmb3IgKHN1bSA9IGluZGV4ID0gMDsgaW5kZXggPCAxNzsgaW5kZXgrKykge1xuICAgIHN1bSArPSAoTWF0aC5wb3coMiwgMTcgLSBpbmRleCkgJSAxMSkgKiBOdW1iZXIoaWRbaW5kZXhdKTtcbiAgfVxuICBudW0gPSAoMTIgLSAoc3VtICUgMTEpKSAlIDExO1xuICBpZiAobnVtIDwgMTApIHtcbiAgICByZXR1cm4gbnVtID09PSBOdW1iZXIoaWRbMTddKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaWRbMTddID09ICdYJztcbiAgfVxufVxuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4ujE45L2N6Lqr5Lu96K+B5Y+356CB44CCPGJyLz7lrr3mnb7mqKHlvI/kuIvvvIzmlK/mjIExNeS9jei6q+S7veivgeWPt+eggVxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzSWRDYXJkXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg6KaB5qOA5rWL55qE5YC8XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIOmFjee9rumhuVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sb29zZT1mYWxzZV0g5a695p2+5qih5byP77yM5pSv5oyBMTXkvY3ouqvku73or4Hlj7fnoIFcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2hlY2tDb2RlPXRydWVdIOaYr+WQpuagoemqjOacgOWQjuS4gOS9jeagoemqjOegge+8jOS7heaUr+aMgTE45L2N6Lqr5Lu96K+B5Y+356CBXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5YC85piv5ZCm5Li66Lqr5Lu96K+B5Y+3XG4gKiBAZXhhbXBsZVxuICpcbiAqIGlzSWRDYXJkKCcxMzA3MDExOTkzMTAzMDIyODgnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0lkQ2FyZCgnMTMwNzAxMTk5MzEwMzAyMjhYJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIGlzSWRDYXJkKCcxMzA3MDExOTkzMTAzMDIyOFgnLCB7IGNoZWNrQ29kZTogZmFsc2UgfSk7IC8vIOS4jeagoemqjOagoemqjOeggVxuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzSWRDYXJkKCczMjAzMTE3NzA3MDYwMDEnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogaXNJZENhcmQoJzMyMDMxMTc3MDcwNjAwMScsIHsgbG9vc2U6IHRydWUgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICovXG5mdW5jdGlvbiBpc0lkQ2FyZCh2YWx1ZSwgeyBsb29zZSA9IGZhbHNlLCBjaGVja0NvZGUgPSB0cnVlIH0gPSB7fSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIGlmICh2YWx1ZVN0ci5sZW5ndGggPT09IDE1ICYmIGxvb3NlKSB7XG4gICAgcmV0dXJuIHJlZ0lkQ2FyZC50ZXN0KHZhbHVlU3RyKTtcbiAgfVxuXG4gIGlmICh2YWx1ZVN0ci5sZW5ndGggPT09IDE4ICYmIHJlZ0lkQ2FyZC50ZXN0KHZhbHVlU3RyKSkge1xuICAgIGlmIChjaGVja0NvZGUpIHtcbiAgICAgIHJldHVybiBjaGVjayh2YWx1ZVN0cik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0lkQ2FyZDtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyDpgq7nrrFcbmNvbnN0IHJlZyA9IC9eW1xcZGEtel0rKFtcXC1cXC5cXF9dP1tcXGRhLXpdKykqQFtcXGRhLXpdKyhbXFwtXFwuXT9bXFxkYS16XSspKihcXC5bYS16XXsyLH0pKyQvaTtcblxuLyoqXG4gKiDmo4DmtYvlgLzmmK/lkKbkuLpFbWFpbFxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzRW1haWxcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLpFbWFpbFxuICogQGV4YW1wbGVcbiAqXG4gKiBpc0VtYWlsKCcxMjMyQHFxLmNvbScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzRW1haWwoJzEyM0AnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICovXG5mdW5jdGlvbiBpc0VtYWlsKHZhbHVlKSB7XG4gIGNvbnN0IHZhbHVlU3RyID0gY29udmVydFRvU3RyaW5nKHZhbHVlKTtcbiAgcmV0dXJuIHJlZy50ZXN0KHZhbHVlU3RyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNFbWFpbDtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyBRUeWPt+ato+WImVxuY29uc3QgcmVnID0gL15bMS05XVxcZHs0LDEwfSQvO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4ulFR5Y+377yM6Z2eMOW8gOWktO+8jDXoh7MxMeS9jeaVsOWtl1xuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzUVFcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLpRUeWPt1xuICogQGV4YW1wbGVcbiAqXG4gKiBpc1FRKCcxMjM0NScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzUVEoJzEyMycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKi9cbmZ1bmN0aW9uIGlzUVEodmFsdWUpIHtcbiAgY29uc3QgdmFsdWVTdHIgPSBjb252ZXJ0VG9TdHJpbmcodmFsdWUpO1xuICByZXR1cm4gcmVnLnRlc3QodmFsdWVTdHIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1FRO1xuIiwiaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8vIOW+ruS/oeWPtyA26IezMjDkvY3vvIzku6XlrZfmr43lvIDlpLTvvIzlrZfmr43vvIzmlbDlrZfvvIzlh4/lj7fvvIjov57mjqXnrKbvvInvvIzkuIvliJLnur9cbmNvbnN0IHJlZyA9IC9eW2Etel0oWy1fYS16MC05XXs1LDE5fSkrJC9pO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uuW+ruS/oeWPt1xuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzV1hcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrlvq7kv6Hlj7dcbiAqIEBleGFtcGxlXG4gKlxuICogaXNXWCgnYTEyMzQ1Jyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNXWCgnMTIzJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqL1xuZnVuY3Rpb24gaXNXWCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzV1g7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuLy8g6L2m54mM5Y+35q2j5YiZXG5jb25zdCByZWcgPSAvXlvkuqzmtKXmsqrmuJ3lhoDosavkupHovr3pu5HmuZjnmpbpsoHmlrDoi4/mtZnotaPphILmoYLnlJjmmYvokpnpmZXlkInpl73otLXnsqTpnZLol4/lt53lroHnkLzkvb/pooZBLVpdezF9W0EtWl17MX0oKFtBLVowLTldezR9W0EtWjAtOeaMguWtpuitpua4r+a+s117MX0pfChbQS1aMC05XXs1fVtERl0pfChbREZdW0EtWjAtOV17NX0pKSQvO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uui9pueJjOWPt++8jOaUr+aMgeaWsOiDvea6kOWSjOmdnuaWsOiDvea6kOi9pueJjFxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzVmVoaWNsZVxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vYmFpa2UuYmFpZHUuY29tL2l0ZW0v6L2m54mM5Y+3fOi9pueJjOWPt31cbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrovabniYzlj7dcbiAqIEBleGFtcGxlXG4gKlxuICogaXNWZWhpY2xlKCfkuqxMMTIzNDUnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc1ZlaGljbGUoJ+eypEJEMTIzNDUnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc1ZlaGljbGUoJ+eypEJGMTIzNDUnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc1ZlaGljbGUoJ+eypEIxMjM0NUQnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc1ZlaGljbGUoJ+eypEIxMjM0NUYnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKi9cbmZ1bmN0aW9uIGlzVmVoaWNsZSh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVmVoaWNsZTtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyDpnZ4w5byA5aS077yMMTB+MjHkvY3mlbDlrZdcbmNvbnN0IHJlZyA9IC9eWzEtOV1cXGR7OSwyMH0kLztcblxuLy8gOH4zMOS9jeaVsOWtl1xuY29uc3QgcmVnTG9vc2UgPSAvXlxcZHs4LDMwfSQvO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uumTtuihjOWNoeWPt+OAguato+W4uOaooeW8j++8iOmdnjDlvIDlpLTvvIwxMH4yMeS9jeaVsOWtl++8ieWuveadvuaooeW8j++8iDh+MzDkvY3mlbDlrZfvvIlcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlZhbGlkYXRvci5pc0JhbmtDYXJkXG4gKiBAc2VlIOWPguiAgyB7QGxpbmsgaHR0cHM6Ly9rZi5xcS5jb20vZmFxLzE3MDExMkFCbm02YjE3MDExMkZ2cXVBbi5odG1sfOW4uOeUqOmTtuihjOi0puWPt+S9jeaVsOWPguiAg31cbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10g6YWN572u6aG5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxvb3NlPWZhbHNlXSDlrr3mnb7mqKHlvI/vvIw4fjMw5L2N5pWw5a2XXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5YC85piv5ZCm5Li66ZO26KGM5Y2h5Y+3XG4gKiBAZXhhbXBsZVxuICpcbiAqIGlzQmFua0NhcmQoJzYyMjg0ODA0MDI1NjQ4OTAwMTgnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0JhbmtDYXJkKCc2MjI4NDgwNDAyNTY0ODkwJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNCYW5rQ2FyZCgnMTIzNDU2Nzg5Jyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIGlzQmFua0NhcmQoJzEyMzQ1Njc4OScsIHsgbG9vc2U6IHRydWUgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICovXG5mdW5jdGlvbiBpc0JhbmtDYXJkKHZhbHVlLCB7IGxvb3NlID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IHZhbHVlU3RyID0gY29udmVydFRvU3RyaW5nKHZhbHVlKTtcblxuICBpZiAobG9vc2UpIHtcbiAgICByZXR1cm4gcmVnTG9vc2UudGVzdCh2YWx1ZVN0cik7XG4gIH1cbiAgcmV0dXJuIHJlZy50ZXN0KHZhbHVlU3RyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNCYW5rQ2FyZDtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyDln7rnoYDop4TliJnvvIznlLExOOS9jeaVsOWtl+WSjOWkp+WGmeWtl+avjee7hOaIkO+8jOS4jeS9v+eUqEnjgIFP44CBWuOAgVPjgIFW44CCXG5jb25zdCBiYXNlUmVnID0gL15bXFxkQS1ISi1OUFFSVFVXWFldezJ9XFxkezZ9W1xcZEEtSEotTlBRUlRVV1hZXXsxMH0kLztcblxuLy8g5Z+656GA5a2X56ym57uE5oiQXG5jb25zdCBiYXNlQ29kZUFyciA9ICcwMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlRVV1hZJy5zcGxpdCgnJyk7XG5cbi8v5Yqg5p2D5Zug5a2QXG5jb25zdCB3ZWlnaHRGYWN0b3IgPSBbMSwgMywgOSwgMjcsIDE5LCAyNiwgMTYsIDE3LCAyMCwgMjksIDI1LCAxMywgOCwgMjQsIDEwLCAzMCwgMjhdO1xuXG4vKipcbiAqIOiOt+WPluWtl+espuS9jee9rlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSDlrZfnrKZcbiAqIEByZXR1cm5zIHtudW1iZXJ9IOWtl+espuaJgOWcqOWfuuehgOWtl+espueahOS9jee9rlxuICovXG5mdW5jdGlvbiBnZXRCYXNlQ29kZUluZGV4KGNvZGUpIHtcbiAgbGV0IHJldDtcblxuICBiYXNlQ29kZUFyci5zb21lKChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGlmIChpdGVtID09PSBjb2RlKSB7XG4gICAgICByZXQgPSBpbmRleDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xuXG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiDorqHnrpfmoKHpqoznoIFcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlQ29kZSDnu5/kuIDku6PnoIHliY0xN+S9jVxuICogQHJldHVybnMge3N0cmluZ30g5qCh6aqM56CBXG4gKi9cbmZ1bmN0aW9uIHN1bUNoZWNrQ29kZShwcmVDb2RlKSB7XG4gIC8vIGNvbnN0IHByZUNvZGVBcnIgPSBwcmVDb2RlLnNwbGl0KCcnKTtcblxuICBsZXQgdG90YWwgPSAwO1xuXG4gIC8vIOiuoeeul+Wtl+espuS9jee9ruWvueW6lOW6j+WPt+WSjOWKoOadg+WboOWtkOeahOS5mOenr++8jOaAu+WSjFxuICBmb3IgKGxldCBpID0gMDsgaSA8IDE3OyBpKyspIHtcbiAgICAvLyDlrZfnrKbkvY3nva7lr7nlupTnmoTln7rnoYDnvJbnoIHluo/lj7dcbiAgICBjb25zdCBpbmRleCA9IGdldEJhc2VDb2RlSW5kZXgocHJlQ29kZVtpXSk7XG4gICAgLy8g5Yqg5p2D5Zug5a2QXG4gICAgY29uc3Qgd2YgPSB3ZWlnaHRGYWN0b3JbaV07XG4gICAgLy8g6K6h566X5bqP5Y+35ZKM5Yqg5p2D5Zug5a2Q55qE5LmY56ev77yM5bm26K6h566X57qn5pWw5LmL5ZKMXG4gICAgdG90YWwgKz0gaW5kZXggKiB3ZjtcbiAgfVxuXG4gIC8vIOiuoeeul+aVtOaVsOaxguS9meWHveaVsE1PRFxuICBjb25zdCByZW1haW5kZXIgPSB0b3RhbCAlIDMxO1xuICAvLyDmoKHpqoznoIHlrZfnrKblgLzluo/lj7dcbiAgY29uc3QgY2hlY2tDb2RlSW5kZXggPSAzMSAtIHJlbWFpbmRlcjtcblxuICByZXR1cm4gYmFzZUNvZGVBcnJbY2hlY2tDb2RlSW5kZXhdO1xufVxuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uue7n+S4gOekvuS8muS/oeeUqOS7o+egge+8jOS5n+WPq+S4ieivgeWQiOS4gOe7hOe7h+S7o+eggeOAgueUsTE45L2N5pWw5a2X5ZKM5aSn5YaZ5a2X5q+N57uE5oiQ77yM5LiN5L2/55SoSeOAgU/jgIFa44CBU+OAgVbjgIJcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlZhbGlkYXRvci5pc1NvY2lhbENyZWRpdENvZGVcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL3poLndpa2lzb3VyY2Uub3JnL3poLWhhbnMvR0JfMzIxMDAtMjAxNV/ms5Xkurrlkozlhbbku5bnu4Tnu4fnu5/kuIDnpL7kvJrkv6HnlKjku6PnoIHnvJbnoIHop4TliJl8R0IgMzIxMDAtMjAxNSDms5Xkurrlkozlhbbku5bnu4Tnu4fnu5/kuIDnpL7kvJrkv6HnlKjku6PnoIHnvJbnoIHop4TliJl9XG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg6KaB5qOA5rWL55qE5YC8XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIOmFjee9rumhuVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sb29zZT1mYWxzZV0g5a695p2+5qih5byP44CC5aaC5p6c5Li6dHJ1Ze+8jOS4jeagoemqjOagoemqjOS9jeOAglxuICogQHJldHVybnMge2Jvb2xlYW59IOWAvOaYr+WQpuS4uue7n+S4gOekvuS8muS/oeeUqOS7o+eggVxuICogQGV4YW1wbGVcbiAqXG4gKiBpc1NvY2lhbENyZWRpdENvZGUoJzkxMzUwMTAwTTAwMDEwMFk0MycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzU29jaWFsQ3JlZGl0Q29kZSgnOTEzNTAxMDBNMDAwMTAwWTRBJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIC8vIOWuveadvuaooeW8j++8jOS4jeagoemqjOagoemqjOS9jeOAguaJgOS7peS5n+WPr+S7pemAmui/h1xuICogaXNTb2NpYWxDcmVkaXRDb2RlKCc5MTM1MDEwME0wMDAxMDBZNEEnLCB7bG9vc2U6IHRydWV9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKi9cbmZ1bmN0aW9uIGlzU29jaWFsQ3JlZGl0Q29kZSh2YWx1ZSwgeyBsb29zZSA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG5cbiAgY29uc3QgcGFzc0Jhc2VSdWxlID0gYmFzZVJlZy50ZXN0KHZhbHVlU3RyKTtcblxuICAvLyDlrr3mnb7mqKHlvI8g5oiWIOWfuuehgOinhOWImeS4jemAmui/h+ebtOaOpei/lOWbnlxuICBpZiAobG9vc2UgfHwgIXBhc3NCYXNlUnVsZSkge1xuICAgIHJldHVybiBwYXNzQmFzZVJ1bGU7XG4gIH1cblxuICAvLyDliY0xN+S9jVxuICBjb25zdCBwcmVDb2RlID0gdmFsdWVTdHIuc3Vic3RyaW5nKDAsIDE3KTtcbiAgLy8g5qCh6aqM56CBXG4gIGNvbnN0IGxhc3RDb2RlID0gdmFsdWVTdHIuc3Vic3RyaW5nKHZhbHVlU3RyLmxlbmd0aCAtIDEpO1xuICAvLyDorqHnrpfmoKHpqoznoIFcbiAgY29uc3QgY2hlY2tDb2RlID0gc3VtQ2hlY2tDb2RlKHByZUNvZGUpO1xuXG4gIHJldHVybiBsYXN0Q29kZSA9PT0gY2hlY2tDb2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1NvY2lhbENyZWRpdENvZGU7XG4iLCJjb25zdCBjb25maWcgPSB7XG4gIC8vIOemgeeUqHdhcm5pbmfmj5DnpLpcbiAgZGlzYWJsZVdhcm5pbmc6IHRydWVcbn07XG5cbi8qKlxuICog6K6+572u56aB5q2id2FybmluZ+aPkOekulxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpEZWJ1Zy5mb3JtYXRCYW5rQ2FyZFxuICogQHNpbmNlIDMuNi4xXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJvb2wg5piv5ZCm56aB5q2id2FybmluZ+aPkOekulxuICovXG5mdW5jdGlvbiBzZXREaXNhYmxlV2FybmluZyhib29sKSB7XG4gIGNvbmZpZy5kaXNhYmxlV2FybmluZyA9ICEhYm9vbDtcbn1cblxuZXhwb3J0IHsgY29uZmlnLCBzZXREaXNhYmxlV2FybmluZyB9O1xuIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi91dGlscy9jb25maWcnO1xuXG5jb25zdCByZWdOdW1iZXIgPSAvW1xcZF0vO1xuY29uc3QgcmVnTG93ZXJDYXNlTGV0dGVyID0gL1thLXpdLztcbmNvbnN0IHJlZ1VwcGVyQ2FzZUxldHRlciA9IC9bQS1aXS87XG5jb25zdCByZWdBbGxOdW1iZXJBbmRMZXR0ZXIgPSAvW1xcZHxhLXpdL2dpO1xuXG4vKipcbiAqIOaYr+WQpuWMheWQq+aVsOWtl1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIOajgOafpeeahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuWMheWQq+aVsOWtl1xuICovXG5mdW5jdGlvbiBoYXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiByZWdOdW1iZXIudGVzdCh2YWwpO1xufVxuXG4vKipcbiAqIOaYr+WQpuWMheWQq+Wwj+WGmeWtl+avjVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIOajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuWMheWQq+Wwj+WGmeWtl+avjVxuICovXG5mdW5jdGlvbiBoYXNMb3dlckNhc2VMZXR0ZXIodmFsKSB7XG4gIHJldHVybiByZWdMb3dlckNhc2VMZXR0ZXIudGVzdCh2YWwpO1xufVxuXG4vKipcbiAqIOaYr+WQpuWMheWQq+Wkp+WGmeWtl+avjVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIOajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuWMheWQq+Wkp+WGmeWtl+avjVxuICovXG5mdW5jdGlvbiBoYXNVcHBlckNhc2VMZXR0ZXIodmFsKSB7XG4gIHJldHVybiByZWdVcHBlckNhc2VMZXR0ZXIudGVzdCh2YWwpO1xufVxuXG4vKipcbiAqIOaYr+WQpuS4uuWNgeWFrei/m+WItlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIOajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4uuWNgeWFrei/m+WItlxuICovXG5mdW5jdGlvbiBoYXNIZXgodmFsKSB7XG4gIHJldHVybiB2YWwuaW5kZXhPZignXFxcXHgnKSA+IC0xIHx8IHZhbC5pbmRleE9mKCdcXFxcdScpID4gLTE7XG59XG5cbi8qKlxuICog5piv5ZCm5YyF5ZCr54m55q6K5a2X56ymXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwg5qOA5rWL55qE5YC8XG4gKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzXSDnibnmrorlrZfnrKZcbiAqIEByZXR1cm5zIHtib29sZWFufSDmmK/lkKbljIXlkKvnibnmrorlrZfnrKZcbiAqL1xuZnVuY3Rpb24gaGFzU3BlY2lhbENoYXJhY3Rlcih2YWwsIGNoYXJzID0gJycpIHtcbiAgaWYgKCFjaGFycykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHNwZWNpYWxDaGFycyA9IHZhbC5yZXBsYWNlKHJlZ0FsbE51bWJlckFuZExldHRlciwgJycpO1xuICBjb25zdCByZWdDaGFycyA9IGhhc0hleChjaGFycykgPyBuZXcgUmVnRXhwKGBbJHtjaGFyc31dYCkgOiBudWxsO1xuXG4gIGlmIChyZWdDaGFycykge1xuICAgIHJldHVybiByZWdDaGFycy50ZXN0KHNwZWNpYWxDaGFycyk7XG4gIH1cblxuICBsZXQgcmV0ID0gZmFsc2U7XG4gIHNwZWNpYWxDaGFycy5zcGxpdCgnJykuc29tZSgoY2hhckl0ZW0pID0+IHtcbiAgICBpZiAoY2hhcnMuaW5kZXhPZihjaGFySXRlbSkgPiAtMSkge1xuICAgICAgcmV0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICog5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ymXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwg5qOA5rWL55qE5YC8XG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcnMg6Z2e5rOV5a2X56ymXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ymXG4gKi9cbmZ1bmN0aW9uIGhhc1VuYWxsb3dhYmxlQ2hhcmFjdGVyKHZhbCwgY2hhcnMgPSAnJykge1xuICBjb25zdCBzcGVjaWFsQ2hhcnMgPSB2YWwucmVwbGFjZShyZWdBbGxOdW1iZXJBbmRMZXR0ZXIsICcnKTtcblxuICBpZiAoIWNoYXJzICYmIHNwZWNpYWxDaGFycykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgcmVnQ2hhcnMgPSBoYXNIZXgoY2hhcnMpID8gbmV3IFJlZ0V4cChgW14ke2NoYXJzfV1gKSA6IG51bGw7XG4gIGlmIChyZWdDaGFycykge1xuICAgIHJldHVybiByZWdDaGFycy50ZXN0KHNwZWNpYWxDaGFycyk7XG4gIH1cbiAgbGV0IHJldCA9IGZhbHNlO1xuICBzcGVjaWFsQ2hhcnMuc3BsaXQoJycpLnNvbWUoKGNoYXJJdGVtKSA9PiB7XG4gICAgaWYgKGNoYXJzLmluZGV4T2YoY2hhckl0ZW0pID09PSAtMSkge1xuICAgICAgcmV0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFzc3dvcmRDb250YWluZXMgLSDpqozor4Hlr4bnoIHnmoTljIXlkKvlhoXlrrlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbnVtYmVyIC0g5YyF5ZCr5pWw5a2XXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvd2VyQ2FzZUxldHRlciAtIOWMheWQq+Wwj+WGmeWtl+avjVxuICogQHByb3BlcnR5IHtib29sZWFufSB1cHBlckNhc2VMZXR0ZXIgLSDljIXlkKvlpKflhpnlrZfmr41cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3BlY2lhbENoYXJhY3RlciAtIOWMheWQq+eJueauiuWtl+esplxuICogQHByb3BlcnR5IHtib29sZWFufSB1bmFsbG93YWJsZUNoYXJhY3RlciAtIOWMheWQq+mdnuazleWtl+esplxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVmFsaWRhdGVQYXNzd29yZFJldHVybiAtIOmqjOivgee7k+aenFxuICogQHByb3BlcnR5IHtib29sZWFufSB2YWxpZGF0ZWQgLSDpqozor4Hnu5PmnpzvvIzmoLnmja7lr4bnoIHlvLrluqbjgIHmmK/lkKbljIXlkKvpnZ7ms5XlrZfnrKblvpflh7pcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZXZlbCAtIOW8uuW6pue6p+WIq++8jOWMheWQq+aVsOWtly/lpKflsI/lhpnlrZfmr40v54m55q6K5a2X56ymXG4gKiBAcHJvcGVydHkge1Bhc3N3b3JkQ29udGFpbmVzfSBjb250YWluZXMgLSDljIXlkKvlhoXlrrlcbiAqL1xuXG4vKipcbiAqIOmqjOivgeWvhuegge+8iOaVsOWtl+OAgeWkp+Wwj+WGmeWtl+avjeOAgeeJueauiuWtl+espuOAgemdnuazleWtl+espu+8iVxuICpcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL2JhaWtlLmJhaWR1LmNvbS9pdGVtL0FTQ0lJIzN8QVNDSUl9XG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlZhbGlkYXRvci52YWxpZGF0ZVBhc3N3b3JkXG4gKiBAc2luY2UgMy43LjBcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10g6YWN572u6aG5XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubGV2ZWw9Ml0g5a+G56CB5by65bqmIDEt5YyF5ZCr5LiA56eN5a2X56ymIDIt5YyF5ZCr5Lik56eN5a2X56ymIDMt5YyF5ZCr5LiJ56eN5a2X56ym44CC77yI5aSn5YaZ5a2X5q+N44CB5bCP5YaZ5a2X5q+N44CB5pWw5a2X44CB54m55q6K5a2X56ym77yJXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmlnbm9yZUNhc2U9ZmFsc2VdIOaYr+WQpuW/veeVpeWkp+Wwj+WGme+8jOS4uiB0dXJlIOaXtu+8jOWkp+Wwj+WGmeWtl+avjeinhuS4uuS4gOenjeWtl+esplxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNwZWNpYWw9XCIhQCMkJV4mKigpLT1fK1tdXFx8e30sLi8/PD5+XCJdIOaUr+aMgeeahOeJueauiuWtl+esplxuICogQHJldHVybnMge1ZhbGlkYXRlUGFzc3dvcmRSZXR1cm59IOmqjOivgee7k+aenFxuICogQGV4YW1wbGVcbiAqXG4gKiB2YWxpZGF0ZVBhc3N3b3JkKCdhMTIzNDU2NzgnKTtcbiAqIC8vID0+XG4gKiB7XG4gKiAgIHZhbGlkYXRlZDogdHJ1ZSwgLy8g6aqM6K+B57uT5p6c77yM5qC55o2u5a+G56CB5by65bqm44CB5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ym5b6X5Ye6XG4gKiAgIGxldmVsOiAyLCAvLyDlvLrluqbnuqfliKtcbiAqICAgY29udGFpbmVzOiB7XG4gKiAgICAgbnVtYmVyOiB0cnVlLCAvLyDljIXlkKvmlbDlrZdcbiAqICAgICBsb3dlckNhc2VMZXR0ZXI6IHRydWUsIC8vIOWMheWQq+Wwj+WGmeWtl+avjVxuICogICAgIHVwcGVyQ2FzZUxldHRlcjogZmFsc2UsIC8vIOWMheWQq+Wkp+WGmeWtl+avjVxuICogICAgIHNwZWNpYWxDaGFyYWN0ZXI6IGZhbHNlLCAvLyDljIXlkKvnibnmrorlrZfnrKZcbiAqICAgICB1bmFsbG93YWJsZUNoYXJhY3RlcjogZmFsc2UgLy8g5YyF5ZCr6Z2e5rOV5a2X56ymXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiB2YWxpZGF0ZVBhc3N3b3JkKCdhMTIzNDU2NzgnLCB7bGV2ZWw6IDN9KTtcbiAqIC8vID0+XG4gKiB7XG4gKiAgIHZhbGlkYXRlZDogZmFsc2UsXG4gKiAgIGxldmVsOiAyLFxuICogICBjb250YWluZXM6IHtcbiAqICAgICBudW1iZXI6IHRydWUsXG4gKiAgICAgbG93ZXJDYXNlTGV0dGVyOiB0cnVlLFxuICogICAgIHVwcGVyQ2FzZUxldHRlcjogZmFsc2UsXG4gKiAgICAgc3BlY2lhbENoYXJhY3RlcjogZmFsc2UsXG4gKiAgICAgdW5hbGxvd2FibGVDaGFyYWN0ZXI6IGZhbHNlXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiB2YWxpZGF0ZVBhc3N3b3JkKCdfQWHkuIDkuozkuIk0NTY3OCcsIHtsZXZlbDogMywgaWdub3JlQ2FzZTogdHJ1ZX0pO1xuICogLy8gPT5cbiAqIHtcbiAqICAgdmFsaWRhdGVkOiBmYWxzZSxcbiAqICAgbGV2ZWw6IDMsXG4gKiAgIGNvbnRhaW5lczoge1xuICogICAgIG51bWJlcjogdHJ1ZSxcbiAqICAgICBsb3dlckNhc2VMZXR0ZXI6IHRydWUsXG4gKiAgICAgdXBwZXJDYXNlTGV0dGVyOiB0cnVlLFxuICogICAgIHNwZWNpYWxDaGFyYWN0ZXI6IHRydWUsXG4gKiAgICAgdW5hbGxvd2FibGVDaGFyYWN0ZXI6IHRydWVcbiAqICAgfVxuICogfVxuICpcbiAqIC8vIOiHquWumuS5ieeJueauiuWtl+esplxuICogdmFsaWRhdGVQYXNzd29yZCgnX0Fh5LiA5LqM5LiJNDU2NzgnLCB7bGV2ZWw6IDMsIGlnbm9yZUNhc2U6IHRydWUsIHNwZWNpYWw6ICdf5LiA5LqM5LiJJ30pO1xuICogLy8gPT5cbiAqIHtcbiAqICAgdmFsaWRhdGVkOiB0cnVlLFxuICogICBsZXZlbDogMyxcbiAqICAgY29udGFpbmVzOiB7XG4gKiAgICAgbnVtYmVyOiB0cnVlLFxuICogICAgIGxvd2VyQ2FzZUxldHRlcjogdHJ1ZSxcbiAqICAgICB1cHBlckNhc2VMZXR0ZXI6IHRydWUsXG4gKiAgICAgc3BlY2lhbENoYXJhY3RlcjogdHJ1ZSxcbiAqICAgICB1bmFsbG93YWJsZUNoYXJhY3RlcjogZmFsc2VcbiAqICAgfVxuICogfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBhc3N3b3JkKHZhbHVlLCB7IGxldmVsID0gMiwgaWdub3JlQ2FzZSA9IGZhbHNlLCBzcGVjaWFsID0gJ1xcXFx4MjEtXFxcXHgyRlxcXFx4M0EtXFxcXHg0MFxcXFx4NUItXFxcXHg2MFxcXFx4N0ItXFxcXHg3RScgfSA9IHt9KSB7XG4gIGxldCB2YWxTdHIgPSB2YWx1ZTtcblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIGlmICghY29uZmlnLmRpc2FibGVXYXJuaW5nKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFt2YWxpZGF0ZVBhc3N3b3JkXSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nLmApO1xuICAgIH1cbiAgICB2YWxTdHIgPSAnJztcbiAgfVxuXG4gIGxldCBjdXJyZW50TGV2ZWwgPSAwO1xuXG4gIC8vIOWMheWQq+aVsOWtl1xuICBjb25zdCBjb250YWluZXNOdW1iZXIgPSBoYXNOdW1iZXIodmFsU3RyKTtcbiAgLy8g5YyF5ZCr5bCP5YaZ5a2X5q+NXG4gIGNvbnN0IGNvbnRhaW5lc0xvd2VyQ2FzZUxldHRlciA9IGhhc0xvd2VyQ2FzZUxldHRlcih2YWxTdHIpO1xuICAvLyDljIXlkKvlpKflhpnlrZfmr41cbiAgY29uc3QgY29udGFpbmVzVXBwZXJDYXNlTGV0dGVyID0gaGFzVXBwZXJDYXNlTGV0dGVyKHZhbFN0cik7XG4gIC8vIOWMheWQq+eJueauiuWtl+esplxuICBjb25zdCBjb250YWluZXNTcGVjaWFsQ2hhcmFjdGVyID0gaGFzU3BlY2lhbENoYXJhY3Rlcih2YWxTdHIsIHNwZWNpYWwpO1xuICAvLyDljIXlkKvpnZ7ms5XlrZfnrKZcbiAgY29uc3QgY29udGFpbmVzVW5hbGxvd2FibGVDaGFyYWN0ZXIgPSBoYXNVbmFsbG93YWJsZUNoYXJhY3Rlcih2YWxTdHIsIHNwZWNpYWwpO1xuXG4gIGlmIChjb250YWluZXNOdW1iZXIpIHtcbiAgICBjdXJyZW50TGV2ZWwgKz0gMTtcbiAgfVxuXG4gIGlmIChpZ25vcmVDYXNlKSB7XG4gICAgLy8g5LiN5Yy65YiG5aSn5bCP5YaZXG4gICAgaWYgKGNvbnRhaW5lc0xvd2VyQ2FzZUxldHRlciB8fCBjb250YWluZXNVcHBlckNhc2VMZXR0ZXIpIHtcbiAgICAgIGN1cnJlbnRMZXZlbCArPSAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyDljLrliIblpKflsI/lhplcbiAgICBpZiAoY29udGFpbmVzTG93ZXJDYXNlTGV0dGVyKSB7XG4gICAgICBjdXJyZW50TGV2ZWwgKz0gMTtcbiAgICB9XG4gICAgaWYgKGNvbnRhaW5lc1VwcGVyQ2FzZUxldHRlcikge1xuICAgICAgY3VycmVudExldmVsICs9IDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbnRhaW5lc1NwZWNpYWxDaGFyYWN0ZXIpIHtcbiAgICBjdXJyZW50TGV2ZWwgKz0gMTtcbiAgfVxuXG4gIC8vIOmqjOivgee7k+aenFxuICBjb25zdCB2YWxpZGF0ZWQgPSBjdXJyZW50TGV2ZWwgPj0gbGV2ZWwgJiYgIWNvbnRhaW5lc1VuYWxsb3dhYmxlQ2hhcmFjdGVyO1xuXG4gIHJldHVybiB7XG4gICAgdmFsaWRhdGVkLFxuICAgIGxldmVsOiBjdXJyZW50TGV2ZWwsXG4gICAgY29udGFpbmVzOiB7XG4gICAgICBudW1iZXI6IGNvbnRhaW5lc051bWJlcixcbiAgICAgIGxvd2VyQ2FzZUxldHRlcjogY29udGFpbmVzTG93ZXJDYXNlTGV0dGVyLFxuICAgICAgdXBwZXJDYXNlTGV0dGVyOiBjb250YWluZXNVcHBlckNhc2VMZXR0ZXIsXG4gICAgICBzcGVjaWFsQ2hhcmFjdGVyOiBjb250YWluZXNTcGVjaWFsQ2hhcmFjdGVyLFxuICAgICAgdW5hbGxvd2FibGVDaGFyYWN0ZXI6IGNvbnRhaW5lc1VuYWxsb3dhYmxlQ2hhcmFjdGVyXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZVBhc3N3b3JkO1xuIiwiaW1wb3J0IHZhbGlkYXRlUGFzc3dvcmQgZnJvbSAnLi92YWxpZGF0ZVBhc3N3b3JkJztcblxuLyoqXG4gKiDmo4DmtYvlgLzmmK/lkKbnrKblkIjlr4bnoIHlvLrluqZcbiAqIDxwPjxzdHJvbmc+5rOo5oSP77ya6K+l5qCh6aqM5Y+q5qCh6aqM5piv5ZCm5a2Y5Zyo5LiN5ZCM5a2X56ymKOWkp+Wwj+WGmeWtl+avjeOAgeaVsOWtl+OAgeeJueauiuespuWPtynvvIzkuI3liKTmlq3plb/luqbjgII8L3N0cm9uZz48L3A+XG4gKiA8cD48aT7lpoLmnpzpnIDopoHmm7Tnu4boh7TnmoTpqozor4HvvIzor7fkvb/nlKggPGEgaHJlZj1cIiMudmFsaWRhdGVQYXNzd29yZFwiPnZhbGlkYXRlUGFzc3dvcmQ8L2E+PC9pPjwvcD5cbiAqXG4gKiBAc2VlIOWPguiAgyB7QGxpbmsgaHR0cHM6Ly9iYWlrZS5iYWlkdS5jb20vaXRlbS9BU0NJSSMzfEFTQ0lJfVxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNQYXNzd29yZFxuICogQHNpbmNlIDEuMS4wXG4gKiBAcmVxdWlyZXMgbW9kdWxlOlZhbGlkYXRvci52YWxpZGF0ZVBhc3N3b3JkXG4gKiBAcGFyYW0geyp9IHZhbHVlIOimgeajgOa1i+eahOWAvFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSDphY3nva7poblcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZXZlbD0yXSDlr4bnoIHlvLrluqYgMS3ljIXlkKvkuIDnp43lrZfnrKYgMi3ljIXlkKvkuKTnp43lrZfnrKYgMy3ljIXlkKvkuInnp43lrZfnrKbjgILvvIjlpKflhpnlrZfmr43jgIHlsI/lhpnlrZfmr43jgIHmlbDlrZfjgIHnibnmrorlrZfnrKbvvIlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaWdub3JlQ2FzZT1mYWxzZV0g5piv5ZCm5b+955Wl5aSn5bCP5YaZ77yM5Li6IHR1cmUg5pe277yM5aSn5bCP5YaZ5a2X5q+N6KeG5Li65LiA56eN5a2X56ymXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3BlY2lhbD1cIiFAIyQlXiYqKCktPV8rW11cXHx7fSwuLz88Pn5cIl0g5pSv5oyB55qE54m55q6K5a2X56ymXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5YC85piv5ZCm56ym5ZCI5a+G56CB5by65bqmXG4gKiBAZXhhbXBsZVxuICpcbiAqIGlzUGFzc3dvcmQoJ2ExMjM0NTY3OCcpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzUGFzc3dvcmQoJ2ExMjM0NTY3OCcsIHtsZXZlbDogM30pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc1Bhc3N3b3JkKCdBYTEyMzQ1Njc4Jywge2xldmVsOiAzfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNQYXNzd29yZCgnQWExMjM0NTY3OCcsIHtsZXZlbDogMywgaWdub3JlQ2FzZTogdHJ1ZX0pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc1Bhc3N3b3JkKCdfQWExMjM0NTY3OCcsIHtsZXZlbDogMywgaWdub3JlQ2FzZTogdHJ1ZX0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIC8vIOS7heaUr+aMgSDmlbDlrZfjgIHlrZfmr43jgIHnibnmrorlrZfnrKbvvIzlhbbku5blrZfnrKblpoLkuK3mloflrZfnrKbmmK/moKHpqozkuI3pgJrov4fnmoRcbiAqIGlzUGFzc3dvcmQoJ19BYeS4gOS6jOS4iTQ1Njc4Jywge2xldmVsOiAzLCBpZ25vcmVDYXNlOiB0cnVlfSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIGlzUGFzc3dvcmQoJyBfQWExMjM0NTY3OCcsIHtsZXZlbDogMywgaWdub3JlQ2FzZTogdHJ1ZX0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQYXNzd29yZCh2YWx1ZSwgeyBsZXZlbCA9IDIsIGlnbm9yZUNhc2UgPSBmYWxzZSwgc3BlY2lhbCA9ICdcXFxceDIxLVxcXFx4MkZcXFxceDNBLVxcXFx4NDBcXFxceDVCLVxcXFx4NjBcXFxceDdCLVxcXFx4N0UnIH0gPSB7fSkge1xuICByZXR1cm4gdmFsaWRhdGVQYXNzd29yZCh2YWx1ZSwgeyBsZXZlbCwgaWdub3JlQ2FzZSwgc3BlY2lhbCB9KS52YWxpZGF0ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUGFzc3dvcmQ7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuLy8g5oqk54Wn5Y+3IDnkvY3vvIzljIXmi6zpppblrZfmr43lkozmlbDlrZfvvJvmlK/mjIEg5pmu6YCa5oqk54WnKEUqKeOAgeWkluS6pOaKpOeFpyhERSnjgIHlhazliqHmiqTnhacoU0Up44CB5YWs5Yqh5pmu6YCa5oqk54WnKFBFKeOAgemmmea4r+eJueWMuuaKpOeFpyhLL0tKKeOAgea+s+mXqOeJueWMuuaKpOeFpyhNQSlcbmNvbnN0IHJlZyA9IC9eKChlW1xcZGEtel0pfChkZSl8KHNlKXwocGUpfChrW1xcZGEtel0pfChrail8KG1hKSlbXFxkYS16XXs3fSQvaTtcblxuLyoqXG4gKiDmo4DmtYvlgLzmmK/lkKbkuLrmiqTnhaflj7dcbiAqIOaUr+aMgeaZrumAmuaKpOeFpyhFKinjgIHlpJbkuqTmiqTnhacoREUp44CB5YWs5Yqh5oqk54WnKFNFKeOAgeWFrOWKoeaZrumAmuaKpOeFpyhQRSnjgIHpppnmuK/nibnljLrmiqTnhacoSy9LSinjgIHmvrPpl6jnibnljLrmiqTnhacoTUEpXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNQYXNzcG9ydFxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vemgud2lraXBlZGlhLm9yZy93aWtpL+S4reWNjuS6uuawkeWFseWSjOWbveaKpOeFpyPkuKrkurrotYTmlpnpobV85Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95oqk54WnI+S4quS6uui1hOaWmemhtX1cbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrmiqTnhaflj7dcbiAqIEBleGFtcGxlXG4gKlxuICogaXNQYXNzcG9ydCgnRTEyMzQ1Njc4Jyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNQYXNzcG9ydCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqL1xuZnVuY3Rpb24gaXNQYXNzcG9ydCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUGFzc3BvcnQ7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuY29uc3QgY2hpbmVzZURpY3Rpb25hcnkgPSB7XG4gIC8vIOWfuuacrOaxieWtl1xuICBjaGluZXNlQmFzaWM6ICdbXFx1NGUwMC1cXHU5ZmE1XScsXG5cbiAgLy8g5Z+65pys5rGJ5a2X6KGl5YWFXG4gIGNoaW5lc2VFeHRlbmQ6ICdbXFx1OWVhNi1cXHU5ZmVmXScsXG5cbiAgLy8g5rGJ5a2X5omp5bGVQVxuICBjaGluZXNlRXh0ZW5kQTogJ1tcXHUzNDAwLVxcdTREQjVdJyxcblxuICAvLyDmsYnlrZfmianlsZVCXG4gIGNoaW5lc2VFeHRlbmRCOiAnW1xcdXsyMDAwMH0tXFx1ezJBNkQ2fV0nLFxuXG4gIC8vIOaxieWtl+aJqeWxlUNcbiAgY2hpbmVzZUV4dGVuZEM6ICdbXFx1ezJBNzAwfS1cXHV7MkI3MzR9XScsXG5cbiAgLy8g5rGJ5a2X5omp5bGVRFxuICBjaGluZXNlRXh0ZW5kRDogJ1tcXHV7MkI3NDB9LVxcdXsyQjgxRH1dJyxcblxuICAvLyDmsYnlrZfmianlsZVFXG4gIGNoaW5lc2VFeHRlbmRFOiAnW1xcdXsyQjgyMH0tXFx1ezJDRUExfV0nLFxuXG4gIC8vIOaxieWtl+aJqeWxlUZcbiAgY2hpbmVzZUV4dGVuZEY6ICdbXFx1ezJDRUIwfS1cXHV7MkVCRTB9XSdcbn07XG5cbmxldCBsb29zZUNoaW5lc2VSZWdFeHAgPSBjaGluZXNlRGljdGlvbmFyeS5jaGluZXNlQmFzaWMgKyAnKyc7XG5cbmxldCBjaGluZXNlUmVnRXhwID0gJ14nICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUJhc2ljICsgJyskJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuY29uc3Qgc3VwcG9ydFJlZ0V4cFVuaWNvZGUgPSBSZWdFeHAucHJvdG90eXBlLmhhc093blByb3BlcnR5KCd1bmljb2RlJyk7XG5cbmlmIChzdXBwb3J0UmVnRXhwVW5pY29kZSkge1xuICBsb29zZUNoaW5lc2VSZWdFeHAgPSAnKD86JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VCYXNpYyArICd8JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VFeHRlbmQgKyAnfCcgKyBjaGluZXNlRGljdGlvbmFyeS5jaGluZXNlRXh0ZW5kQSArICd8JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VFeHRlbmRCICsgJ3wnICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUV4dGVuZEMgKyAnfCcgKyBjaGluZXNlRGljdGlvbmFyeS5jaGluZXNlRXh0ZW5kRCArICd8JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VFeHRlbmRFICsgJ3wnICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUV4dGVuZEYgKyAnKSsnO1xuICBjaGluZXNlUmVnRXhwID0gJ14oPzonICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUJhc2ljICsgJ3wnICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUV4dGVuZCArICd8JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VFeHRlbmRBICsgJ3wnICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUV4dGVuZEIgKyAnfCcgKyBjaGluZXNlRGljdGlvbmFyeS5jaGluZXNlRXh0ZW5kQyArICd8JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VFeHRlbmREICsgJ3wnICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUV4dGVuZEUgKyAnfCcgKyBjaGluZXNlRGljdGlvbmFyeS5jaGluZXNlRXh0ZW5kRiArICcpKyQnO1xufVxuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uuS4reaWh1xuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzQ2hpbmVzZVxuICogQHNpbmNlIDEuMS4wXG4gKiBAc2VlIOWPguiAgyB7QGxpbmsgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzgvI0Jsb2NrTGlzdGluZ3w0LjQgTGlzdGluZyBvZiBDaGFyYWN0ZXJzIENvdmVyZWQgYnkgdGhlIFVuaWhhbiBEYXRhYmFzZX1cbiAqIEBwYXJhbSB7Kn0gdmFsdWUg6KaB5qOA5rWL55qE5YC8XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIOmFjee9rumhuVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sb29zZT1mYWxzZV0g5a695p2+5qih5byP44CC5aaC5p6c5Li6dHJ1Ze+8jOWPquimgeWMheWQq+S4reaWh+WNs+S4unRydWVcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrkuK3mlodcbiAqIEBleGFtcGxlXG4gKlxuICogaXNDaGluZXNlKCfmnpfmn5Dmn5AnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0NoaW5lc2UoJ+ael0EnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogLy8g5a695p2+5qih5byP77yM5Y+q6KaB5YyF5ZCr5Lit5paH5Y2z5Li6dHJ1ZVxuICogaXNDaGluZXNlKCfmnpdBJywge2xvb3NlOiB0cnVlfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNDaGluZXNlKCdB5p6XQScsIHtsb29zZTogdHJ1ZX0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqL1xuZnVuY3Rpb24gaXNDaGluZXNlKHZhbHVlLCB7IGxvb3NlID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IHZhbHVlU3RyID0gY29udmVydFRvU3RyaW5nKHZhbHVlKTtcbiAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cChsb29zZSA/IGxvb3NlQ2hpbmVzZVJlZ0V4cCA6IGNoaW5lc2VSZWdFeHAsIHN1cHBvcnRSZWdFeHBVbmljb2RlID8gJ3UnIDogdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHJlZy50ZXN0KHZhbHVlU3RyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNDaGluZXNlO1xuIiwiaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8vIGlwdjTmraPliJlcbmNvbnN0IHJlZyA9IC9eKChcXGR7MSwyfXwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLil7M30oXFxkezEsMn18MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSkkLztcblxuLyoqXG4gKiDmo4DmtYvlgLzmmK/lkKbkuLppcHY0XG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNJUHY0XG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg6KaB5qOA5rWL55qE5YC8XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5YC85piv5ZCm5Li6aXB2NFxuICogQGV4YW1wbGVcbiAqXG4gKiBpc0lQdjQoJzE5Mi4xNjguMS4xJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNJUHY0KCcyNTUuMjU1LjI1NS4yNTUnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0lQdjQoJzI1Ni4yNTYuMjU2LjI1NicpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc0lQdjQoJzAuMCcpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKi9cbmZ1bmN0aW9uIGlzSVB2NCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSVB2NDtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyBpcHY25q2j5YiZXG5jb25zdCByZWcgPSAvXigoKFswLTlBLUZdezEsNH06KXs3fShbMC05QS1GXXsxLDR9fDopKXwoKFswLTlBLUZdezEsNH06KXs2fSg6WzAtOUEtRl17MSw0fXwoKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFxcZHsxLDJ9KSl7M30pfDopKXwoKFswLTlBLUZdezEsNH06KXs1fSgoKDpbMC05QS1GXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFxcZHsxLDJ9KShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkpezN9KXw6KSl8KChbMC05QS1GXXsxLDR9Oil7NH0oKCg6WzAtOUEtRl17MSw0fSl7MSwzfSl8KCg6WzAtOUEtRl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKXszfSkpfDopKXwoKFswLTlBLUZdezEsNH06KXszfSgoKDpbMC05QS1GXXsxLDR9KXsxLDR9KXwoKDpbMC05QS1GXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKXszfSkpfDopKXwoKFswLTlBLUZdezEsNH06KXsyfSgoKDpbMC05QS1GXXsxLDR9KXsxLDV9KXwoKDpbMC05QS1GXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKXszfSkpfDopKXwoKFswLTlBLUZdezEsNH06KXsxfSgoKDpbMC05QS1GXXsxLDR9KXsxLDZ9KXwoKDpbMC05QS1GXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKXszfSkpfDopKXwoOigoKDpbMC05QS1GXXsxLDR9KXsxLDd9KXwoKDpbMC05QS1GXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKXszfSkpfDopKSkoJS4rKT8kL2k7XG5cbi8qKlxuICog5qOA5rWL5YC85piv5ZCm5Li6aXB2NlxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzSVB2NlxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOimgeajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOWAvOaYr+WQpuS4umlwdjZcbiAqIEBleGFtcGxlXG4gKlxuICogLy8g5YaS5YiG5Y2B5YWt6L+b5Yi26KGo56S65rOVXG4gKiBpc0lQdjYoJzIwMDE6MERCODowMDAwOjAwMjM6MDAwODowODAwOjIwMEM6NDE3QScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIC8vIOWJjeWvvDDnnIHnlaVcbiAqIGlzSVB2NignMjAwMTpEQjg6MDoyMzo4OjgwMDoyMDBDOjQxN0EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0lQdjYoJ0ZGMDE6MDowOjA6MDowOjA6MTEwMScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIC8vIDDkvY3ljovnvKnooajnpLrms5VcbiAqIGlzSVB2NignRkYwMTo6MTEwMScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzSVB2NignOjoxJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNJUHY2KCc6OicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzSVB2NignMDowOjA6MDowOjA6MDoxJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNJUHY2KCcwOjA6MDowOjA6MDowOjAnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiAvLyDlhoXltYxJUHY05Zyw5Z2A6KGo56S65rOVXG4gKiBpc0lQdjYoJzo6MTkyLjE2OC4xLjEnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0lQdjYoJzo6RkZGRjoxOTIuMTY4LjEuMScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzSVB2NignMTkyLjE2OC4xLjEnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICovXG5mdW5jdGlvbiBpc0lQdjYodmFsdWUpIHtcbiAgY29uc3QgdmFsdWVTdHIgPSBjb252ZXJ0VG9TdHJpbmcodmFsdWUpO1xuICByZXR1cm4gcmVnLnRlc3QodmFsdWVTdHIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0lQdjY7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuLy8gdXJs5q2j5YiZXG5jb25zdCByZWcgPSAvKCgoXmh0dHBzPzooPzpcXC9cXC8pPykoPzpbLTs6Jj1cXCtcXCQsXFx3XStAKT9bQS1aYS16MC05Li1dKyg/OjpcXGQrKT98KD86d3d3LnxbLTs6Jj1cXCtcXCQsXFx3XStAKVtBLVphLXowLTkuLV0rKSgoPzpcXC9bXFwrfiVcXC8uXFx3LV9dKik/XFw/Pyg/OlstXFwrPSY7JUAuXFx3X10qKSM/KD86W1xcd10qKSk/KSQvO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4unVybFxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzVXJsXG4gKiBAc2luY2UgMy40LjBcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL3poLndpa2lwZWRpYS5vcmcvd2lraS/nu5/kuIDotYTmupDlrprkvY3nrKZ857uf5LiA6LWE5rqQ5a6a5L2N56ymfVxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLp1cmxcbiAqIEBleGFtcGxlXG4gKlxuICogaXNVcmwoJycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc1VybCgnOC44LjguOCcpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc1VybCgnZXhhbXBsZS5jb20nKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc1VybCgnaHR0cDovL2V4YW1wbGUuY29tJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNVcmwoJ2h0dHBzOi8vZXhhbXBsZS5jb206ODA4MCcpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzVXJsKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Rlc3QvMTIzJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNVcmwoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vdGVzdC8xMjM/Zm9vPWJhcicpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1VybCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVXJsO1xuIiwiaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8vIOWfuuehgOinhOWIme+8jOeUsTE05L2N5pWw5a2X5pys5L2T56CB5ZKMMeS9jeaVsOWtl+agoemqjOeggee7hOaIkO+8jOWFtuS4reacrOS9k+eggeS7juW3puiHs+WPs+S+neasoeS4uu+8mjbkvY3pppbmrKHnmbvorrDmnLrlhbPnoIHjgIE45L2N6aG65bqP56CB44CCXG5jb25zdCBiYXNlUmVnID0gL15cXGR7MTV9JC87XG5cbi8qKlxuICog6K6h566X5qCh6aqM56CBXG4gKlxuICogQHByaXZhdGVcbiAqIEBzaW5jZSAzLjUuMFxuICogQHBhcmFtIHtzdHJpbmd9IHByZUNvZGUg6JCl5Lia5omn54Wn5YmNMTTkvY1cbiAqIEByZXR1cm5zIHtudW1iZXJ9IOagoemqjOeggVxuICovXG5mdW5jdGlvbiBzdW1DaGVja0NvZGUocHJlQ29kZSkge1xuICBsZXQgcmV0TnVtOyAvLyDmoKHpqozkvY3mlbDlrZdcblxuICBsZXQgcGogPSAxMDsgLy8gUGorMSAxMe+8jOWIneWni+S4ujEwXG5cbiAgZm9yIChsZXQgaiA9IDA7IGogPCAxNDsgaisrKSB7XG4gICAgY29uc3Qgc2ogPSBwaiArIE51bWJlcihwcmVDb2RlW2pdKTtcbiAgICBsZXQgc2oxMCA9IHNqICUgMTA7XG4gICAgc2oxMCA9IHNqMTAgPT09IDAgPyAxMCA6IHNqMTA7XG4gICAgY29uc3QgcGoxID0gc2oxMCAqIDI7XG4gICAgcGogPSBwajEgJSAxMTtcbiAgfVxuXG4gIC8vIOWPjeaooTEw6K6h566XXG4gIGlmIChwaiA9PT0gMTAgfHwgcGogPT09IDEpIHtcbiAgICByZXROdW0gPSAxO1xuICB9IGVsc2Uge1xuICAgIHJldE51bSA9IDExIC0gcGo7XG4gIH1cblxuICByZXR1cm4gcmV0TnVtO1xufVxuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uuiQpeS4muaJp+eFp+WPt++8jOS5n+WPq+W3peWVhuazqOWGjOWPt+OAgueUsTE05L2N5pWw5a2X5pys5L2T56CB5ZKMMeS9jeaVsOWtl+agoemqjOeggee7hOaIkO+8jOWFtuS4reacrOS9k+eggeS7juW3puiHs+WPs+S+neasoeS4uu+8mjbkvY3pppbmrKHnmbvorrDmnLrlhbPnoIHjgIE45L2N6aG65bqP56CB44CCXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNCdXNpbmVzc0xpY2Vuc2VcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL3dlbmt1LmJhaWR1LmNvbS92aWV3LzE5ODczNzA0Y2MxNzU1MjcwNzIyMDg3Yy5odG1sfEdTMTXigJQyMDA2IOW3peWVhuihjOaUv+euoeeQhuW4guWcuuS4u+S9k+azqOWGjOWPt+e8luWItuinhOWImX1cbiAqIEBzaW5jZSAzLjUuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10g6YWN572u6aG5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxvb3NlPWZhbHNlXSDlrr3mnb7mqKHlvI/jgILlpoLmnpzkuLp0cnVl77yM5LiN5qCh6aqM5qCh6aqM5L2N44CCXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5YC85piv5ZCm5Li66JCl5Lia5omn54Wn5Y+3XG4gKiBAZXhhbXBsZVxuICpcbiAqIGlzQnVzaW5lc3NMaWNlbnNlKCczMTAxMTU2MDA5ODU1MzMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0J1c2luZXNzTGljZW5zZSgnMzEwMTE1NjAwOScpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc0J1c2luZXNzTGljZW5zZSgnMzEwMTE1NjAwOScsIHsgbG9vc2U6IHRydWUgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIGlzQnVzaW5lc3NMaWNlbnNlKCczMTAxMTU2MDA5ODU1MzUnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogaXNCdXNpbmVzc0xpY2Vuc2UoJzMxMDExNTYwMDk4NTUzNScsIHsgbG9vc2U6IHRydWUgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzQnVzaW5lc3NMaWNlbnNlKHZhbHVlLCB7IGxvb3NlID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IHZhbHVlU3RyID0gY29udmVydFRvU3RyaW5nKHZhbHVlKTtcblxuICBjb25zdCBwYXNzQmFzZVJ1bGUgPSBiYXNlUmVnLnRlc3QodmFsdWVTdHIpO1xuXG4gIC8vIOWuveadvuaooeW8jyDmiJYg5Z+656GA6KeE5YiZ5LiN6YCa6L+H55u05o6l6L+U5ZueXG4gIGlmIChsb29zZSB8fCAhcGFzc0Jhc2VSdWxlKSB7XG4gICAgcmV0dXJuIHBhc3NCYXNlUnVsZTtcbiAgfVxuXG4gIC8vIOWJjTE05L2NXG4gIGNvbnN0IHByZUNvZGUgPSB2YWx1ZVN0ci5zdWJzdHJpbmcoMCwgMTQpO1xuICAvLyDmoKHpqoznoIFcbiAgY29uc3QgbGFzdENvZGUgPSB2YWx1ZVN0ci5zdWJzdHJpbmcodmFsdWVTdHIubGVuZ3RoIC0gMSk7XG4gIC8vIOiuoeeul+agoemqjOeggVxuICBjb25zdCBjaGVja0NvZGUgPSBzdW1DaGVja0NvZGUocHJlQ29kZSk7XG5cbiAgcmV0dXJuIGxhc3RDb2RlID09PSBTdHJpbmcoY2hlY2tDb2RlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNCdXNpbmVzc0xpY2Vuc2U7XG4iLCIvKipcbiAqIOajgOa1i+WAvOaYr+WQpuexu+S8vFByb21pc2Xlr7nosaFcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlZhbGlkYXRvci5pc1Byb21pc2VMaWtlXG4gKiBAc2luY2UgMy44LjBcbiAqIEBwYXJhbSB7Kn0gb2JqIOimgeajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuexu+S8vFByb21pc2Xlr7nosaFcbiAqIEBleGFtcGxlXG4gKlxuICogaXNQcm9taXNlTGlrZShbXSk7XG4gKiA9PiBmYWxzZVxuICpcbiAqIGlzUHJvbWlzZUxpa2Uoe3RoZW46KCk9Pnt9fSk7XG4gKiA9PiB0cnVlXG4gKlxuICogaXNQcm9taXNlTGlrZShQcm9taXNlLnJlc29sdmUoKSk7XG4gKiA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUHJvbWlzZUxpa2Uob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQcm9taXNlTGlrZTtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyDmuK/mvrPlsYXmsJHmnaXlvoDlhoXlnLDpgJrooYzor4HmraPliJlcbmNvbnN0IHJlZ0hNQ2FyZCA9IC9eW2htXXsxfShbMC05XXsxMH18WzAtOV17OH0pJC9pO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uua4r+a+s+WxheawkeadpeW+gOWGheWcsOmAmuihjOivge+8jOS/l+ensOWbnuS5oeivgeaIluWbnuS5oeWNoeOAglxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzSE1DYXJkXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL3poLndpa2lwZWRpYS5vcmcvd2lraS/muK/mvrPlsYXmsJHmnaXlvoDlhoXlnLDpgJrooYzor4F85riv5r6z5bGF5rCR5p2l5b6A5YaF5Zyw6YCa6KGM6K+BfVxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDmmK/lkKbkuLrmuK/mvrPlsYXmsJHmnaXlvoDlhoXlnLDpgJrooYzor4FcbiAqIEBleGFtcGxlXG4gKiAvLyDnrKzkuIDku6MgMTEg5L2NXG4gKiBpc0hNQ2FyZCgnaDMyMDMxMTc3MDcnKSAvLyB0cnVlXG4gKiBpc0hNQ2FyZCgnSDMyMDMxMTc3MDcnKSAvLyB0cnVlXG4gKiBpc0hNQ2FyZCgnbTMyMDMxMTc3MDcnKSAvLyB0cnVlXG4gKiBpc0hNQ2FyZCgnTTMyMDMxMTc3MDcnKSAvLyB0cnVlXG4gKlxuICogLy8g56ys5LqM5LujIDkg5L2NXG4gKiBpc0hNQ2FyZCgnaDMyMDMxMTc3JykgLy8gdHJ1ZVxuICogaXNITUNhcmQoJ0gzMjAzMTE3NycpIC8vIHRydWVcbiAqIGlzSE1DYXJkKCdtMzIwMzExNzcnKSAvLyB0cnVlXG4gKiBpc0hNQ2FyZCgnTTMyMDMxMTc3JykgLy8gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc0hNQ2FyZCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWdITUNhcmQudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSE1DYXJkO1xuIiwiaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8vIOWPsOa5vuWxheawkeadpeW+gOWkp+mZhumAmuihjOivgeato+WIme+8jOaUr+aMgeS4gOasoeaAp+efreacn+WPsOiDnuivgVxuY29uc3QgcmVnVFdDYXJkID0gL14oXFxkezh9fFtcXGRhLXpdezEwfSkkL2k7XG5cbi8qKlxuICog5qOA5rWL5YC85piv5ZCm5Li65Y+w5rm+5bGF5rCR5p2l5b6A5aSn6ZmG6YCa6KGM6K+B77yM5L+X56ew5Y+w6IOe6K+B44CCXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNUV0NhcmRcbiAqIEBzaW5jZSA0LjAuMFxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vemgud2lraXBlZGlhLm9yZy93aWtpL+WPsOa5vuWxheawkeadpeW+gOWkp+mZhumAmuihjOivgXzlj7Dmub7lsYXmsJHmnaXlvoDlpKfpmYbpgJrooYzor4F9XG4gKiBAcGFyYW0geyp9IHZhbHVlIOimgeajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4uuWPsOa5vuWxheawkeadpeW+gOWkp+mZhumAmuihjOivgVxuICogQGV4YW1wbGVcbiAqIGlzVFdDYXJkKCcxMjM0NTY3OCcpIC8vIHRydWVcbiAqIGlzVFdDYXJkKCcwNzI1NzQ1NicpIC8vIHRydWVcbiAqXG4gKiAvLyDkuIDmrKHmgKfnn63mnJ9cbiAqIGlzVFdDYXJkKCdGMjkwMjk5OTc3JykgLy8gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1RXQ2FyZCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWdUV0NhcmQudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVFdDYXJkO1xuIiwiLy8g5pyA5aSn5a6J5YWo5pWw5a2XXG5leHBvcnQgY29uc3QgTUFYX1NBRkVfSU5URUdFUiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8IDkwMDcxOTkyNTQ3NDA5OTE7XG4vLyDmnIDlsI/lronlhajmlbDlrZdcbmV4cG9ydCBjb25zdCBNSU5fU0FGRV9JTlRFR0VSID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgfHwgLTkwMDcxOTkyNTQ3NDA5OTE7XG4iLCIvKipcbiAqIOWPguiAgzogaHR0cHM6Ly9naXRodWIuY29tL25lZmUvbnVtYmVyLXByZWNpc2lvbi9ibG9iL21hc3Rlci9zcmMvaW5kZXgudHNcbiAqXG4gKiDop6PlhrPmta7liqjov5Dnrpfpl67popjvvIzpgb/lhY3lsI/mlbDngrnlkI7kuqfnlJ/lpJrkvY3mlbDlkozorqHnrpfnsr7luqbmjZ/lpLHjgIJcbiAqIOmXrumimOekuuS+i++8mjIuMyArIDIuNCA9IDQuNjk5OTk5OTk5OTk5OTk577yMMS4wIC0gMC45ID0gMC4wOTk5OTk5OTk5OTk5OTk5OFxuICovXG5cbmltcG9ydCB7IE1BWF9TQUZFX0lOVEVHRVIsIE1JTl9TQUZFX0lOVEVHRVIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8qKlxuICog5piv5ZCm5Li656eR5a2m6K6h5pWw5rOV5pWw5a2XXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG51bSDmo4Dmn6XlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTY2llbnRpZmljTnVtYmVyKG51bSkge1xuICByZXR1cm4gL1xcZCtcXC4/XFxkKmVbXFwrXFwtXSpcXGQrL2kudGVzdChudW0pO1xufVxuXG4vKipcbiAqIOaKiumUmeivr+eahOaVsOaNrui9rOato1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW0g6L6T5YWl5pWwXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0xMl0g5bCP5pWw54K555qE57K+5bqmXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICogQGV4YW1wbGVcbiAqXG4gKiAgc3RyaXAoMC4wOTk5OTk5OTk5OTk5OTk5OCk9MC4xXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcChudW0sIHByZWNpc2lvbiA9IDEyKSB7XG4gIHJldHVybiArcGFyc2VGbG9hdChudW0udG9QcmVjaXNpb24ocHJlY2lzaW9uKSk7XG59XG5cbi8qKlxuICog6K6h566X5pWw5a2X55qE5bCP5pWw54K56ZW/5bqm77yM5pSv5oyB56eR5a2m6K6w5pWw5rOVXG4gKlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBudW0g6L6T5YWl5pWwXG4gKiBAcmV0dXJucyB7bnVtYmVyfSDlsI/mlbDngrnplb/luqZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZ2l0TGVuZ3RoKG51bSkge1xuICAvLyBHZXQgZGlnaXQgbGVuZ3RoIG9mIGVcbiAgY29uc3QgZVNwbGl0ID0gbnVtLnRvU3RyaW5nKCkuc3BsaXQoL2UvaSk7XG4gIGNvbnN0IGxlbiA9IChlU3BsaXRbMF0uc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoIC0gKyhlU3BsaXRbMV0gfHwgMCk7XG4gIHJldHVybiBsZW4gPiAwID8gbGVuIDogMDtcbn1cblxuLyoqXG4gKiDmiorlsI/mlbDovazmiJDmlbTmlbDvvIzmlK/mjIHnp5HlraborqHmlbDms5XjgILlpoLmnpzmmK/lsI/mlbDliJnmlL7lpKfmiJDmlbTmlbBcbiAqXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IG51bSDovpPlhaXmlbBcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdDJGaXhlZChudW0pIHtcbiAgaWYgKCFpc1NjaWVudGlmaWNOdW1iZXIobnVtLnRvU3RyaW5nKCkpKSB7XG4gICAgcmV0dXJuIE51bWJlcihudW0udG9TdHJpbmcoKS5yZXBsYWNlKCcuJywgJycpKTtcbiAgfVxuICBjb25zdCBkTGVuID0gZGlnaXRMZW5ndGgobnVtKTtcbiAgcmV0dXJuIGRMZW4gPiAwID8gc3RyaXAoK251bSAqIE1hdGgucG93KDEwLCBkTGVuKSkgOiArbnVtO1xufVxuXG4vKipcbiAqIOajgOa1i+aVsOWtl+aYr+WQpui2iueVjO+8jOWmguaenOi2iueVjOe7meWHuuaPkOekulxuICogQHBhcmFtIHtudW1iZXJ9IG51bSDovpPlhaXmlbBcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0JvdW5kYXJ5KG51bSkge1xuICBpZiAoK251bSA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgK251bSA8IE1JTl9TQUZFX0lOVEVHRVIpIHtcbiAgICBpZiAoIWNvbmZpZy5kaXNhYmxlV2FybmluZykge1xuICAgICAgY29uc29sZS53YXJuKGAke251bX0gaXMgYmV5b25kIGJvdW5kYXJ5IHdoZW4gdHJhbnNmZXIgdG8gaW50ZWdlciwgdGhlIHJlc3VsdHMgbWF5IG5vdCBiZSBhY2N1cmF0ZWApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIOWOu+aOieW3pui+ueaVsOWtlzBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbnVtIOaVsOWtl+Wtl+espuS4slxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MZWZ0WmVybyhudW0pIHtcbiAgY29uc3QgcmVnID0gL14oWystXSk/KDArKShbMC05XFwuXSspJC87XG4gIGNvbnN0IHJlc3VsdCA9IHJlZy5leGVjKG51bSk7XG5cbiAgbGV0IHNpZ247XG5cbiAgaWYgKHJlc3VsdCkge1xuICAgIHNpZ24gPSByZXN1bHRbMV0gfHwgJyc7XG4gICAgcmV0dXJuIHNpZ24gKyAocmVzdWx0WzNdWzBdID09PSAnLicgPyAnMCcgKyByZXN1bHRbM10gOiByZXN1bHRbM10pO1xuICB9XG5cbiAgcmV0dXJuIG51bTtcbn1cblxuLyoqXG4gKiDnp5HlraborqHmlbDms5XovazmjaLmiJDmma7pgJrmlbDlrZdcbiAqXG4gKiBKYXZhU2NyaXB05Zyo5Lul5LiL5oOF5pmv5Lya6Ieq5Yqo5bCG5pWw5YC86L2s5o2i5Li656eR5a2m6K6h5pWw5rOV77yaXG4gKiAgMS7lsI/mlbDngrnliY3nmoTmlbDlrZfkuKrmlbDlpKfkuo7nrYnkuo4yMuS9jVxuICogIDIu5bCP5pWw54K55YmN6L655pivMO+8jOWwj+aVsOeCueWQjuWNgeWIhuS9je+8iOWMheWQq+WNgeWIhuS9je+8ieS5i+WQjui/nue7rembtueahOS4quaVsOWkp+S6juetieS6jjbkuKpcbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gbnVtIOenkeWtpuiuoeaVsOazleaVsOWtl1xuICogQHJldHVybnMge3N0cmluZ30g6L2s5o2i5ZCO55qE5pWw5a2X5a2X56ym5LiyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2llbnRpZmljVG9OdW1iZXIobnVtKSB7XG4gIGlmIChpc1NjaWVudGlmaWNOdW1iZXIobnVtLnRvU3RyaW5nKCkpKSB7XG4gICAgY29uc3QgemVybyA9ICcwJztcbiAgICBjb25zdCBwYXJ0cyA9IFN0cmluZyhudW0pLnRvTG93ZXJDYXNlKCkuc3BsaXQoJ2UnKTtcbiAgICBjb25zdCBlID0gcGFydHMucG9wKCk7IC8vIOWtmOWCqOaMh+aVsFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBsID0gTWF0aC5hYnMoZSk7IC8vIOWPlue7neWvueWAvO+8jGwtMeWwseaYrzDnmoTkuKrmlbBcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3Qgc2lnbiA9IGUgLyBsOyAvL+WIpOaWreato+i0n1xuICAgIGNvbnN0IGNvZWZmX2FycmF5ID0gcGFydHNbMF0uc3BsaXQoJy4nKTsgLy8g5bCG57O75pWw5oyJ54Wn5bCP5pWw54K55ouG5YiGXG5cbiAgICAvL+WmguaenOaYr+Wwj+aVsFxuICAgIGlmIChzaWduID09PSAtMSkge1xuICAgICAgLy/mi7zmjqXlrZfnrKbkuLLvvIzlpoLmnpzmmK/lsI/mlbDvvIzmi7zmjqUw5ZKM5bCP5pWw54K5XG4gICAgICBudW0gPSB6ZXJvICsgJy4nICsgbmV3IEFycmF5KGwpLmpvaW4oemVybykgKyBjb2VmZl9hcnJheS5qb2luKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGVjID0gY29lZmZfYXJyYXlbMV07XG5cbiAgICAgIC8v5aaC5p6c5piv5pW05pWw77yM5bCG5pW05pWw6Zmk56ys5LiA5L2N5LmL5aSW55qE6Z2e6Zu25pWw5a2X6K6h5YWl5L2N5pWw77yM55u45bqU55qE5YeP5bCRMOeahOS4quaVsFxuICAgICAgaWYgKGwgLSBkZWMubGVuZ3RoIDwgMCkge1xuICAgICAgICBudW0gPSB0cmltTGVmdFplcm8oY29lZmZfYXJyYXlbMF0gKyBkZWMuc3Vic3RyaW5nKDAsIGwpKSArICcuJyArIGRlYy5zdWJzdHJpbmcobCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL+aLvOaOpeWtl+espuS4su+8jOWmguaenOaYr+aVtOaVsO+8jOS4jemcgOimgeaLvOaOpeWwj+aVsOeCuVxuICAgICAgICBudW0gPSBjb2VmZl9hcnJheS5qb2luKCcnKSArIG5ldyBBcnJheShsIC0gZGVjLmxlbmd0aCArIDEpLmpvaW4oemVybyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIG51bTtcbn1cbiIsImltcG9ydCBpc1R5cGUgZnJvbSAnLi9pc1R5cGUnO1xuXG4vKipcbiAqIOajgOafpeWAvOaYr+WQpuS4uk5hTlxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VHlwZS5pc05hTlxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOajgOafpeWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4uk5hTlxuICogQGV4YW1wbGVcbiAqXG4gKiBpc05hTihOYU4pXG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNOYU4oMSlcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIF9pc05hTih2YWx1ZSkge1xuICByZXR1cm4gaXNUeXBlKHZhbHVlLCAnTnVtYmVyJykgJiYgaXNOYU4odmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBfaXNOYU47XG4iLCJpbXBvcnQgeyBjaGVja0JvdW5kYXJ5LCBzY2llbnRpZmljVG9OdW1iZXIsIGlzU2NpZW50aWZpY051bWJlciB9IGZyb20gJy4vdXRpbHMvbWF0aC51dGlsJztcbmltcG9ydCBpc05hTiBmcm9tICcuL3V0aWxzL3R5cGUvaXNOYU4nO1xuaW1wb3J0IHsgdHJpbUxlZnRaZXJvIH0gZnJvbSAnLi91dGlscy9tYXRoLnV0aWwnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi91dGlscy9jb25maWcnO1xuXG5jb25zdCByZWcgPSAvXlsrLV0/XFxkKlxcLj9cXGQqJC87XG5cbi8qKlxuICog5qOA5p+l5pWw5a2X5oiW5pWw5a2X5a2X56ym5LiyXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBudW1cbiAqIEByZXR1cm5zIOaYr+WQpuS4uuaVsOWtl1xuICovXG5mdW5jdGlvbiBjaGVja051bWJlcihudW0pIHtcbiAgaWYgKCEocmVnLnRlc3QobnVtKSB8fCBpc1NjaWVudGlmaWNOdW1iZXIobnVtKSkgfHwgaXNOYU4obnVtKSB8fCAodHlwZW9mIG51bSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIG51bSAhPT0gJ3N0cmluZycpIHx8IG51bSA9PT0gJycpIHtcbiAgICBpZiAoIWNvbmZpZy5kaXNhYmxlV2FybmluZykge1xuICAgICAgY29uc29sZS53YXJuKGAke251bX0gaW52YWxpZCBwYXJhbWV0ZXIuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8g5pWw5a2X6LaF6ZmQ5aaC5p6c5LiN5piv5piv5a2X56ym5Liy77yM5Y+v6IO95pyJ5byC5bi4XG4gIC8vIOWmgiAxMTExMTExMTExMTExMTExMTExMTExIC8vID0+IDEuMTExMTExMTExMTExMTExMWUrMjFcbiAgaWYgKHR5cGVvZiBudW0gPT09ICdudW1iZXInKSB7XG4gICAgY2hlY2tCb3VuZGFyeShudW0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICog5qC85byP5YyW5pW05pWw6YOo5YiGXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnRTdHIg5pWw5a2X5a2X56ym5LiyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhvdXNhbmQg5Y2D5YiG5L2N56ym5Y+3XG4gKiBAcmV0dXJucyDmoLzlvI/ljJblkI7nmoTlgLxcbiAqL1xuZnVuY3Rpb24gZm9ybWF0SW50KGludFN0ciwgdGhvdXNhbmQpIHtcbiAgbGV0IHR4dCA9ICcnO1xuICBpbnRTdHIgPSB0cmltTGVmdFplcm8oaW50U3RyKTtcbiAgaW50U3RyID0gaW50U3RyWzBdID09PSAnKycgPyBpbnRTdHIuc3Vic3RyaW5nKDEpIDogaW50U3RyOyAvLyDljrvmjokr56ym5Y+3XG4gIGNvbnN0IG5lZ2F0aXZlU3ltYm9sID0gTnVtYmVyKGludFN0cikgPCAwID8gJy0nIDogJyc7XG4gIGNvbnN0IHJlQXJyID0gbmVnYXRpdmVTeW1ib2wgPyBpbnRTdHIuc3Vic3RyaW5nKDEpLnNwbGl0KCcnKS5yZXZlcnNlKCkgOiBpbnRTdHIuc3BsaXQoJycpLnJldmVyc2UoKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgdHh0ICs9IHJlQXJyW2ldICsgKChpICsgMSkgJSAzID09PSAwICYmIGkgKyAxICE9PSByZUFyci5sZW5ndGggPyB0aG91c2FuZCA6ICcnKTtcbiAgfVxuXG4gIHJldHVybiBuZWdhdGl2ZVN5bWJvbCArIHR4dC5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xufVxuXG4vKipcbiAqIOagvOW8j+WMluWwj+aVsOmDqOWIhu+8jOWmguaenOS9v+eUqCB0b0ZpeGVk77yM6LaF5aSn6aKd5pWw5a2X5Lya6Ieq5Yqo6KKr5oiq5patXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWNTdHIg5bCP5pWw54K56YOo5YiG55qE5a2X56ym5LiyXG4gKiBAcGFyYW0ge251bWJlcn0gcHJlY2lzaW9uIOS/neeVmeS9jeaVsFxuICogQHBhcmFtIHtzdHJpbmd9IGRlY2ltYWwg5bCP5pWw54K556ym5Y+3XG4gKiBAcmV0dXJucyDmoLzlvI/ljJblkI7nmoTlgLxcbiAqL1xuZnVuY3Rpb24gZm9ybWF0RGVjKGRlY1N0ciwgcHJlY2lzaW9uLCBkZWNpbWFsKSB7XG4gIGlmIChwcmVjaXNpb24gPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCB6ZXJvID0gMDtcbiAgbGV0IHJldCA9ICcnO1xuXG4gIGlmIChkZWNTdHIgJiYgTnVtYmVyKGRlY1N0cikgPiAwKSB7XG4gICAgbGV0IHRtcE51bSA9IHBhcnNlRmxvYXQoJzAuJyArIGRlY1N0cik7XG4gICAgcmV0ID0gdG1wTnVtLnRvRml4ZWQocHJlY2lzaW9uKS5zdWJzdHJpbmcoMik7XG4gIH0gZWxzZSB7XG4gICAgcmV0ID0gemVyby50b0ZpeGVkKHByZWNpc2lvbikuc3Vic3RyaW5nKDIpO1xuICB9XG5cbiAgcmV0dXJuIGRlY2ltYWwgKyByZXQ7XG59XG5cbi8qKlxuICog5qC85byP5YyW6YeR6aKdXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3IuZm9ybWF0TW9uZXlcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IG51bSDpnIDovazmjaLph5Hpop0gKOacgOWkp++8mjkwMDcxOTkyNTQ3NDA5OTEg5pyA5bCP77yaIC05MDA3MTk5MjU0NzQwOTkxKVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIOmHkemineagvOW8j+WMlumFjee9rlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IFtvcHRpb25zLnByZWNpc2lvbj0yXSAtIOS/neeVmeS9jeaVsCDvvIjmnIDpq5jvvJoxMOS9je+8iVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN5bWJvbF0gLSDotKfluIHnrKblj7dcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50aG91c2FuZD1cIixcIl0gLSDljYPliIbkvY3nrKblj7dcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5kZWNpbWFsPVwiLlwiXSAtIOWwj+aVsOS9jeespuWPt1xuICogQHJldHVybnMge3N0cmluZ30g5qC85byP5YyW55qE6YeR6aKdXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIOaVtOaVsFxuICogZm9ybWF0TW9uZXkoJzEwMDAnKTtcbiAqIC8vID0+IDEsMDAwLjAwXG4gKlxuICogLy8g5bCP5pWw77yI6buY6K6k5L+d55WZMuS9jeWwj+aVsO+8iVxuICogZm9ybWF0TW9uZXkoJzMwMDAuMDMnKTtcbiAqIC8vID0+IDMsMDAwLjAzXG4gKlxuICogLy8g5L+d55WZNOS9jeWwj+aVsFxuICogZm9ybWF0TW9uZXkoJzMwMDAuMDMwMCcsIHsgcHJlY2lzaW9uOiA0IH0pO1xuICogLy8gPT4gMywwMDAuMDMwMFxuICpcbiAqIC8vIOS/neeVmTEw5L2N5bCP5pWwXG4gKiBmb3JtYXRNb25leSgnMTUwMC4yJywgeyBwcmVjaXNpb246IDEwIH0pO1xuICogLy8gPT4gMSw1MDAuMjAwMDAwMDAwMFxuICpcbiAqIC8vIOiHquWumuS5ieWNleS9jeespuWPt1xuICogZm9ybWF0TW9uZXkoMTAwMC4wMCwgeyBzeW1ib2w6ICckJyB9KTtcbiAqIC8vID0+ICQxLDAwMC4wMFxuICpcbiAqIC8vIOiHquWumuS5ieWNg+S9jeWIhuWJsuespu+8iOm7mOiupCcsJ++8iVxuICogZm9ybWF0TW9uZXkoMTAwMC4wMCwgeyB0aG91c2FuZDogJ3wnIH0pO1xuICogLy8gPT4gMXwwMDAuMDBcbiAqXG4gKiAvLyDoh6rlrprkuYnlsI/mlbDkvY3liIblibLnrKYo6buY6K6kJy4nKVxuICogZm9ybWF0TW9uZXkoMTAwMC4wMCwgeyBkZWNpbWFsOiAnJicgfSk7XG4gKiAvLyA9PiAxLDAwMCYwMFxuICovXG5jb25zdCBmb3JtYXRNb25leSA9IChudW0sIHsgcHJlY2lzaW9uID0gMiwgc3ltYm9sLCB0aG91c2FuZCA9ICcsJywgZGVjaW1hbCA9ICcuJyB9ID0ge30pID0+IHtcbiAgLy8g5pWw5a2X5Y+C5pWw5LiN5q2j56Gu77yM6L+U5Zue56m65a2X56ym5LiyXG4gIC8vIEB0cy1pZ25vcmVcbiAgaWYgKCFjaGVja051bWJlcihudW0pKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8g5Y+C5pWw6KeE5pW05YyWXG4gIGlmICh0eXBlb2YgcHJlY2lzaW9uICE9PSAnbnVtYmVyJyB8fCBpc05hTihwcmVjaXNpb24pIHx8IHByZWNpc2lvbiA8IDApIHtcbiAgICBwcmVjaXNpb24gPSAyO1xuICB9IGVsc2UgaWYgKHByZWNpc2lvbiA+IDEwKSB7XG4gICAgcHJlY2lzaW9uID0gMTA7XG4gIH1cbiAgc3ltYm9sID0gdHlwZW9mIHN5bWJvbCA9PT0gJ3N0cmluZycgPyBzeW1ib2wgOiAnJztcbiAgdGhvdXNhbmQgPSB0eXBlb2YgdGhvdXNhbmQgPT09ICdzdHJpbmcnID8gdGhvdXNhbmQgOiAnLCc7XG4gIGRlY2ltYWwgPSB0eXBlb2YgZGVjaW1hbCA9PT0gJ3N0cmluZycgPyBkZWNpbWFsIDogJy4nO1xuXG4gIC8vIOi9rOaNouaVsOWtl+Wtl+espuS4su+8jOaUr+aMgeenkeWtpuiusOaVsOazlVxuICBjb25zdCBudW1TdHIgPSBzY2llbnRpZmljVG9OdW1iZXIobnVtKSArICcnO1xuICAvLyDmlbTmlbDlkozlsI/mlbDpg6jliIZcbiAgY29uc3QgW2ludFN0ciwgZGVjU3RyXSA9IG51bVN0ci5zcGxpdCgnLicpO1xuXG4gIHJldHVybiBzeW1ib2wgKyBmb3JtYXRJbnQoaW50U3RyLCB0aG91c2FuZCkgKyBmb3JtYXREZWMoZGVjU3RyLCBwcmVjaXNpb24sIGRlY2ltYWwpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TW9uZXk7XG4iLCIvKipcbiAqIOajgOafpeWAvOaYr+WQpuS4ulVuZGVmaW5lZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VHlwZS5pc1VuZGVmaW5lZFxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOajgOafpeWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4ulVuZGVmaW5lZFxuICogQGV4YW1wbGVcbiAqXG4gKiBpc1VuZGVmaW5lZCh1bmRlZmluZWQpXG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNVbmRlZmluZWQodm9pZCAwKVxuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzVW5kZWZpbmVkKG51bGwpXG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHZvaWQgMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNVbmRlZmluZWQ7XG4iLCIvKipcbiAqIOajgOafpeWAvOaYr+WQpuS4uk51bGxcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlR5cGUuaXNOdWxsXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg5qOA5p+l5YC8XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5piv5ZCm5Li6TnVsbFxuICogQGV4YW1wbGVcbiAqXG4gKiBpc051bGwobnVsbClcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc051bGwodm9pZCAwKVxuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOdWxsO1xuIiwiaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQnO1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG5cbi8qKlxuICog5qOA5p+l5YC85piv5ZCm5Li6IHVuZGVmaW5lZCDmiJYgbnVsbFxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VHlwZS5pc05hTlxuICogQHNpbmNlIDQuMy4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOajgOafpeWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4uiB1bmRlZmluZWQg5oiWIG51bGxcbiAqL1xuZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc05pbDtcbiIsImltcG9ydCBpc05pbCBmcm9tICcuL3V0aWxzL3R5cGUvaXNOaWwnO1xuaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8qKlxuICog6KeE5pW05YyW5a2X56ym5Liy44CC5aaC5p6c5YC85Li6IHVuZGVmaW5lZCDmiJYgbnVsbCDlsIbovazkuLrnqbrlrZfnrKbkuLLvvIzlpoLmnpzlgLzkuI3mmK/lrZfnrKbkuLLnsbvlnovlsIbovazkuLrlrZfnrKbkuLLjgIJcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlByb2Nlc3Nvci5ub3JtYWxpemVTdHJpbmdcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy96aC1DTi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcjc3RyaW5nX2luc3RhbmNlc3xTdHJpbmd9XG4gKiBAc2luY2UgNC4zLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg5b6F5aSE55CG55qE5YC8XG4gKiBAcmV0dXJucyB7c3RyaW5nfSDop4TmlbTljJbnmoTlgLxcbiAqIEBleGFtcGxlXG4gKiBub3JtYWxpemVTdHJpbmcoKTsgLy8gJydcbiAqIG5vcm1hbGl6ZVN0cmluZyh1bmRlZmluZWQpOyAvLyAnJ1xuICogbm9ybWFsaXplU3RyaW5nKHZvaWQgMCk7IC8vICcnXG4gKiBub3JtYWxpemVTdHJpbmcobnVsbCk7IC8vICcnXG4gKlxuICogbm9ybWFsaXplU3RyaW5nKHRydWUpOyAvLyAndHJ1ZSdcbiAqIG5vcm1hbGl6ZVN0cmluZyhOYU4pOyAvLyAnTmFOJ1xuICogbm9ybWFsaXplU3RyaW5nKDEpOyAvLyAnMSdcbiAqIG5vcm1hbGl6ZVN0cmluZygnYScpOyAvLyAnYSdcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nKHZhbHVlKSB7XG4gIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5vcm1hbGl6ZVN0cmluZztcbiIsImltcG9ydCBub3JtYWxpemVTdHJpbmcgZnJvbSAnLi9ub3JtYWxpemVTdHJpbmcnO1xuXG4vKipcbiAqIOagvOW8j+WMlumTtuihjOWNoeWPt1xuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6UHJvY2Vzc29yLmZvcm1hdEJhbmtDYXJkXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYW5rQ2FyZE5vIOimgeWkhOeQhueahOWtl+espuS4slxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSDphY3nva7poblcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jaGFyPVwiIFwiXSDpl7TpmpTlrZfnrKZcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZW5ndGg9NF0g6Ze06ZqU6ZW/5bqmXG4gKiBAcmV0dXJucyB7c3RyaW5nfSDmoLzlvI/ljJbnmoTpk7booYzljaHlj7dcbiAqIEBleGFtcGxlXG4gKlxuICogLy8gMTnkvY3pk7booYzljaFcbiAqIGZvcm1hdEJhbmtDYXJkKCc2MjI4NDgwNDAyNTY0ODkwMDE4Jyk7XG4gKiAvLyA9PiA2MjI4IDQ4MDQgMDI1NiA0ODkwIDAxOFxuICpcbiAqIC8vIDE25L2N6ZO26KGM5Y2hXG4gKiBmb3JtYXRCYW5rQ2FyZCgnNjIyODQ4MDQwMjU2NDg5MCcpO1xuICogLy8gPT4gNjIyOCA0ODA0IDAyNTYgNDg5MFxuICpcbiAqIC8vIOiEseaVj+mTtuihjOWNoVxuICogZm9ybWF0QmFua0NhcmQoJzYyMjgqKioqKioqKjg5MCcpO1xuICogLy8gPT4gNjIyOCAqKioqICoqKiogODkwXG4gKlxuICogLy8gMTbkvY3pk7booYzljaHvvIxcIi1cIumXtOmalFxuICogZm9ybWF0QmFua0NhcmQoJzYyMjg0ODA0MDI1NjQ4OTAnLCB7Y2hhcjogJy0nfSk7XG4gKiAvLyA9PiA2MjI4LTQ4MDQtMDI1Ni00ODkwXG4gKlxuICovXG5mdW5jdGlvbiBmb3JtYXRCYW5rQ2FyZChiYW5rQ2FyZE5vID0gJycsIHsgY2hhciA9ICcgJywgbGVuZ3RoID0gNCB9ID0ge30pIHtcbiAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cChgKC57JHtsZW5ndGh9fSlgLCAnZycpO1xuICBjb25zdCByZWdDaGFyID0gbmV3IFJlZ0V4cChgJHtjaGFyfWAsICdnJyk7XG5cbiAgY29uc3QgcmVhbFZhbHVlID0gbm9ybWFsaXplU3RyaW5nKGJhbmtDYXJkTm8pLnJlcGxhY2UocmVnQ2hhciwgJycpO1xuICBjb25zdCBzdHIgPSByZWFsVmFsdWUucmVwbGFjZShyZWcsIGAkMSR7Y2hhcn1gKTtcblxuICByZXR1cm4gcmVhbFZhbHVlLmxlbmd0aCAlIGxlbmd0aCA9PT0gMCA/IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDEpIDogc3RyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXRCYW5rQ2FyZDtcbiIsIi8qKlxuICog5pu/5o2i5a2X56ym77yM5bqU55So5Zy65pmv5aaC77ya6ISx5pWPXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3IucmVwbGFjZUNoYXJcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciDopoHlpITnkIbnmoTlrZfnrKbkuLJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10g6YWN572u6aG5XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc3RhcnQ9M10g5byA5aeL5L2N572uXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZW5kPS00XSDnu5PmnZ/kvY3nva5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jaGFyPVwiKlwiXSDmm7/mjaLlrZfnrKZcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5yZXBlYXRdIOabv+aNouWtl+espueahOmHjeWkjeasoeaVsO+8jOm7mOiupOS4uuabv+aNouWGheWuuemVv+W6pu+8jOWPr+iuvue9ruS4uuWbuuWumuWAvFxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmV4Y2x1ZGVdIOaOkumZpOWtl+espu+8jOWmguaenOaMh+WumuaOkumZpOmhue+8jHJlcGVhdOiuvue9ruaXoOaViFxuICogQHJldHVybnMge3N0cmluZ30g5aSE55CG5ZCO55qE5a2X56ymXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIOaJi+acuuWPt1xuICogcmVwbGFjZUNoYXIoJzEzMDAwMDAwMDAwJyk7XG4gKiAvLyA9PiAxMzAqKioqMDAwMFxuICpcbiAqIC8vIOi6q+S7veivgVxuICogcmVwbGFjZUNoYXIoJzEzMDcwMTE5OTMxMDMwMjI4OCcpO1xuICogLy8gPT4gMTMwKioqKioqKioqKioyMjg4XG4gKlxuICogLy8g6YKu566xXG4gKiBjb25zdCBlbWFpbCA9ICcxMjM0NUBxcS5jb20nXG4gKiByZXBsYWNlQ2hhcihlbWFpbCwge3N0YXJ0OiAyLCBlbmQ6IGVtYWlsLmluZGV4T2YoJ0AnKSwgcmVwZWF0OiA0fSk7XG4gKiAvLyA9PiAxMioqKipAcXEuY29tXG4gKlxuICogLy8g6ZO26KGM5Y2h5Y+3XG4gKiByZXBsYWNlQ2hhcignNjIyODQ4MDQwMjU2NDg5MDAxOCcsIHtzdGFydDogMCwgZW5kOiAtNCwgcmVwZWF0OiA0fSk7XG4gKiAvLyA9PiAqKioqMDAxOFxuICpcbiAqIC8vIOW4puagvOW8j+eahOmTtuihjOWNoeWPt1xuICogcmVwbGFjZUNoYXIoJzYyMjggNDgwNCAwMjU2IDQ4OTAgMDE4Jywge3N0YXJ0OiA0LCBlbmQ6IC00LCBleGNsdWRlOiAnICd9KTtcbiAqIC8vID0+IDYyMjggKioqKiAqKioqICoqKiogMDE4XG4gKlxuICogLy8g55So5oi35ZCNXG4gKiByZXBsYWNlQ2hhcign5p6X5p+Q5p+QJywge3N0YXJ0OiAxLCBlbmQ6IEluZmluaXR5LCByZXBlYXQ6IDJ9KTtcbiAqIC8vID0+IOaelyoqXG4gKiByZXBsYWNlQ2hhcign5p6X5p+QJywge3N0YXJ0OiAxLCBlbmQ6IEluZmluaXR5LCByZXBlYXQ6IDJ9KTtcbiAqIC8vID0+IOaelyoqXG4gKiByZXBsYWNlQ2hhcign5p6X5p+Q5p+Q5p+QJywge3N0YXJ0OiAxLCBlbmQ6IEluZmluaXR5LCByZXBlYXQ6IDJ9KTtcbiAqIC8vID0+IOaelyoqXG4gKlxuICovXG5mdW5jdGlvbiByZXBsYWNlQ2hhcihzdHIgPSAnJywgeyBzdGFydCA9IDMsIGVuZCA9IC00LCBjaGFyID0gJyonLCByZXBlYXQsIGV4Y2x1ZGUgfSA9IHt9KSB7XG4gIGNvbnN0IHN0ckxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgLy8g5byA5aeL5L2N572u6LaF6L+Hc3Ry6ZW/5bqmXG4gIGlmIChNYXRoLmFicyhzdGFydCkgPj0gc3RyTGVuKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj0gMCA/IHN0YXJ0IDogc3RyTGVuICsgc3RhcnQ7XG4gIGVuZCA9IGVuZCA+PSAwID8gZW5kIDogc3RyTGVuICsgZW5kO1xuXG4gIC8vIOW8gOWni+S9jee9ruWkp+S6jue7k+adn+S9jee9rlxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGxldCBtaWRkbGVTdHIgPSBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuXG4gIGlmIChleGNsdWRlKSB7XG4gICAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cChgW14ke2V4Y2x1ZGV9XWAsICdnJyk7XG4gICAgbWlkZGxlU3RyID0gbWlkZGxlU3RyLnJlcGxhY2UocmVnLCBjaGFyKTtcbiAgfSBlbHNlIHtcbiAgICByZXBlYXQgPSB0eXBlb2YgcmVwZWF0ID09PSAnbnVtYmVyJyAmJiByZXBlYXQgPj0gMCA/IHJlcGVhdCA6IG1pZGRsZVN0ci5sZW5ndGg7XG4gICAgbWlkZGxlU3RyID0gY2hhci5yZXBlYXQocmVwZWF0KTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIHN0YXJ0KSArIG1pZGRsZVN0ciArIHN0ci5zdWJzdHJpbmcoZW5kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVwbGFjZUNoYXI7XG4iLCJpbXBvcnQgeyBjaGVja0JvdW5kYXJ5IH0gZnJvbSAnLi91dGlscy9tYXRoLnV0aWwnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi91dGlscy9jb25maWcnO1xuXG4vLyDnroDkvZNcbmNvbnN0IGNobk51bWJlckNoYXIgPSBbJ+mbticsICfkuIAnLCAn5LqMJywgJ+S4iScsICflm5snLCAn5LqUJywgJ+WFrScsICfkuIMnLCAn5YWrJywgJ+S5nSddO1xuY29uc3QgY2huVW5pdENoYXIgPSBbJycsICfljYEnLCAn55m+JywgJ+WNgyddO1xuXG4vLyDnuYHkvZNcbmNvbnN0IGJpZzVOdW1iZXJDaGFyID0gWyfpm7YnLCAn5aO5JywgJ+i0sCcsICflj4EnLCAn6IKGJywgJ+S8jScsICfpmYYnLCAn5p+SJywgJ+aNjCcsICfnjpYnXTtcbmNvbnN0IGJpZzVVbml0Q2hhciA9IFsnJywgJ+aLvicsICfkvbAnLCAn5LufJ107XG5cbi8vIOaVsOWtl+Wtl+espuOAgeiuoeaVsOWNleS9jVxuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmdbXX1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBudW1iZXJDaGFyO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmdbXX1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCB1bml0Q2hhcjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nW119XG4gKiBAcHJpdmF0ZVxuICovXG5sZXQgdW5pdFNlY3Rpb247XG5cbi8qKlxuICog5q+P5Liq5bCP6IqC55qE5YaF6YOo6L+b6KGM6L2s5YyWXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWN0aW9uIOaVsOWtl1xuICogQHJldHVybnMge3N0cmluZ30g6L2s5YyW55qE5pWw5a2XXG4gKi9cbmZ1bmN0aW9uIHNlY3Rpb25Ub0NoaW5lc2Uoc2VjdGlvbikge1xuICBsZXQgc3RyID0gJycsXG4gICAgY2huc3RyID0gJycsXG4gICAgemVybyA9IGZhbHNlLCAvL3plcm/kuLrmmK/lkKbov5vooYzooaXpm7bvvIwg56ys5LiA5qyh6L+b6KGM5Y+W5L2Z55Sx5LqO5Li65Liq5L2N5pWw77yM6buY6K6k5LiN6KGl6Zu2XG4gICAgdW5pdFBvcyA9IDA7XG5cbiAgd2hpbGUgKHNlY3Rpb24gPiAwKSB7XG4gICAgLy8g5a+55pWw5a2X5Y+W5L2ZMTDvvIzlvpfliLDnmoTmlbDljbPkuLrkuKrkvY3mlbBcbiAgICBsZXQgdiA9IHNlY3Rpb24gJSAxMDtcblxuICAgIC8v5aaC5p6c5pWw5a2X5Li66Zu277yM5YiZ5a+55a2X56ym5Liy6L+b6KGM6KGl6Zu2XG4gICAgaWYgKHYgPT0gMCkge1xuICAgICAgaWYgKHplcm8pIHtcbiAgICAgICAgLy/lpoLmnpzpgYfliLDov57nu63lpJrmrKHlj5bkvZnpg73mmK8w77yM6YKj5LmI5Y+q6ZyA6KGl5LiA5Liq6Zu25Y2z5Y+vXG4gICAgICAgIHplcm8gPSBmYWxzZTtcbiAgICAgICAgY2huc3RyID0gbnVtYmVyQ2hhclt2XSArIGNobnN0cjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy/nrKzkuIDmrKHlj5bkvZnkuYvlkI7vvIzlpoLmnpzlho3mrKHlj5bkvZnkuLrpm7bvvIzliJnpnIDopoHooaXpm7ZcbiAgICAgIHplcm8gPSB0cnVlO1xuICAgICAgc3RyID0gbnVtYmVyQ2hhclt2XTtcbiAgICAgIHN0ciArPSB1bml0Q2hhclt1bml0UG9zXTtcbiAgICAgIGNobnN0ciA9IHN0ciArIGNobnN0cjtcbiAgICB9XG4gICAgdW5pdFBvcysrO1xuICAgIHNlY3Rpb24gPSBNYXRoLmZsb29yKHNlY3Rpb24gLyAxMCk7XG4gIH1cbiAgcmV0dXJuIGNobnN0cjtcbn1cblxuLyoqXG4gKiDovazmjaLmlbTmlbBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG51bSDopoHovazmjaLnmoTmlbDlrZdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IOS4reaWh+aVsOWtl1xuICovXG5mdW5jdGlvbiBjb252ZXJ0SW50ZWdlcihudW0pIHtcbiAgbnVtID0gTWF0aC5mbG9vcihudW0pO1xuXG4gIGxldCB1bml0UG9zID0gMDtcbiAgbGV0IHN0cklucyA9ICcnLFxuICAgIGNoblN0ciA9ICcnO1xuICBsZXQgbmVlZFplcm8gPSBmYWxzZTtcblxuICBpZiAobnVtID09PSAwKSB7XG4gICAgcmV0dXJuIG51bWJlckNoYXJbMF07XG4gIH1cbiAgd2hpbGUgKG51bSA+IDApIHtcbiAgICB2YXIgc2VjdGlvbiA9IG51bSAlIDEwMDAwO1xuICAgIGlmIChuZWVkWmVybykge1xuICAgICAgY2huU3RyID0gbnVtYmVyQ2hhclswXSArIGNoblN0cjtcbiAgICB9XG4gICAgc3RySW5zID0gc2VjdGlvblRvQ2hpbmVzZShzZWN0aW9uKTtcbiAgICBzdHJJbnMgKz0gc2VjdGlvbiAhPT0gMCA/IHVuaXRTZWN0aW9uW3VuaXRQb3NdIDogdW5pdFNlY3Rpb25bMF07XG4gICAgY2huU3RyID0gc3RySW5zICsgY2huU3RyO1xuICAgIG5lZWRaZXJvID0gc2VjdGlvbiA8IDEwMDAgJiYgc2VjdGlvbiA+IDA7XG4gICAgbnVtID0gTWF0aC5mbG9vcihudW0gLyAxMDAwMCk7XG4gICAgdW5pdFBvcysrO1xuICB9XG4gIHJldHVybiBjaG5TdHI7XG59XG5cbi8qKlxuICog6L2s5o2i5bCP5pWwXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW0g6KaB6L2s5o2i55qE5pWw5a2XXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnREZWNpbWFsKG51bSkge1xuICBjb25zdCBudW1TdHIgPSBudW0gKyAnJztcbiAgY29uc3QgaW5kZXggPSBudW1TdHIuaW5kZXhPZignLicpO1xuXG4gIGxldCByZXQgPSAnJztcblxuICBpZiAoaW5kZXggPiAtMSkge1xuICAgIGxldCBkZWNpbWFsU3RyID0gbnVtU3RyLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgcmV0ID0gbWFwTnVtYmVyQ2hhcihwYXJzZUludChkZWNpbWFsU3RyKSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIOaYoOWwhOS4uuS4reaWh+aVsOWtl1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtIOimgeWkhOeQhueahOaVsOWtl1xuICogQHJldHVybnMge3N0cmluZ30g6L+U5Zue5Lit5paH5pWw5a2X55qE5pig5bCEXG4gKi9cbmZ1bmN0aW9uIG1hcE51bWJlckNoYXIobnVtKSB7XG4gIGNvbnN0IG51bVN0ciA9IG51bSArICcnO1xuICBsZXQgcmV0ID0gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG51bVN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHJldCArPSBudW1iZXJDaGFyW3BhcnNlSW50KG51bVN0cltpXSldO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiDmlbDlrZfovazkuK3mlofmlbDlrZdcbiAqIOS4jeWcqOWuieWFqOaVsOWtlyAtOTAwNzE5OTI1NDc0MDk5Me+9njkwMDcxOTkyNTQ3NDA5OTEg5YaF77yM5aSE55CG5Lya5pyJ5byC5bi4XG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3IubnVtYmVyVG9DaGluZXNlXG4gKiBAc2luY2UgMS4yLjBcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW0g5pWw5a2XXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIOmFjee9rumhuVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5iaWc1PWZhbHNlXSDnuYHkvZNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudW5pdD10cnVlXSDorqHmlbDljZXkvY1cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5kZWNpbWFsPVwi54K5XCJdIOS4reaWh+Wwj+aVsOeCuVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnplcm89XCLpm7ZcIl0g6K6+572uMOOAguW4uOeUqOmFjee9riDjgIdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5uZWdhdGl2ZT1cIui0n1wiXSDotJ/mlbDliY3pnaLnmoTlrZdcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy51bml0Q29uZmlnXSDoioLngrnljZXkvY3phY3nva5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy51bml0Q29uZmlnLnc9XCLkuIdcIl0g6K6+572u6K6h5pWw5Y2V5L2N5LiH44CC5bi455So6YWN572uIOiQrFxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnVuaXRDb25maWcueT1cIuS6v1wiXSDorr7nva7orqHmlbDljZXkvY3kur/jgILluLjnlKjphY3nva4g5YSEXG4gKiBAcmV0dXJucyB7c3RyaW5nfSDkuK3mlofmlbDlrZdcbiAqIEBleGFtcGxlXG4gKlxuICogbnVtYmVyVG9DaGluZXNlKDEwMCk7XG4gKiAvLyA9PiDkuIDnmb5cbiAqXG4gKiBudW1iZXJUb0NoaW5lc2UoMTAwLjMpO1xuICogLy8gPT4g5LiA55m+54K55LiJXG4gKlxuICogLy8g57mB5L2TXG4gKiBudW1iZXJUb0NoaW5lc2UoMTAwLCB7YmlnNTogdHJ1ZX0pO1xuICogLy8gPT4g5aO55L2wXG4gKlxuICogbnVtYmVyVG9DaGluZXNlKDEwMC4zLCB7YmlnNTogdHJ1ZX0pO1xuICogLy8gPT4g5aO55L2w54K55Y+BXG4gKlxuICogbnVtYmVyVG9DaGluZXNlKDEyMzQ1Njc4OTAsIHtiaWc1OiB0cnVlfSk7XG4gKiAvLyA9PiDlo7nmi77otLDkur/lj4Hku5/ogobkvbDkvI3mi77pmYbkuIfmn5Lku5/mjYzkvbDnjpbmi75cbiAqXG4gKiAvLyDkuI3luKborqHmlbDljZXkvY1cbiAqIG51bWJlclRvQ2hpbmVzZSgxOTkwLCB7dW5pdDogZmFsc2V9KTtcbiAqIC8vID0+IOS4gOS5neS5nembtlxuICpcbiAqIC8vIOS4jeW4puiuoeaVsOWNleS9je+8jOS/ruaUuTBcbiAqIG51bWJlclRvQ2hpbmVzZSgxOTkwLCB7dW5pdDogZmFsc2UsIHplcm86J+OAhyd9KTtcbiAqIC8vID0+IOS4gOS5neS5neOAh1xuICpcbiAqL1xuZnVuY3Rpb24gbnVtYmVyVG9DaGluZXNlKFxuICBudW0sXG4gIHtcbiAgICBiaWc1ID0gZmFsc2UsXG4gICAgdW5pdCA9IHRydWUsXG4gICAgZGVjaW1hbCA9ICfngrknLFxuICAgIHplcm8gPSAnJyxcbiAgICBuZWdhdGl2ZSA9ICfotJ8nLFxuICAgIHVuaXRDb25maWcgPSB7XG4gICAgICB3OiAn5LiHJywgLy8gJ+iQrCdcbiAgICAgIHk6ICfkur8nIC8vICflhIQnXG4gICAgfVxuICB9ID0ge31cbikge1xuICAvLyDpnZ7mlbDlrZcg5oiWIE5hTiDkuI3lpITnkIZcbiAgaWYgKHR5cGVvZiBudW0gIT09ICdudW1iZXInIHx8IGlzTmFOKG51bSkpIHtcbiAgICBpZiAoIWNvbmZpZy5kaXNhYmxlV2FybmluZykge1xuICAgICAgY29uc29sZS53YXJuKGDlj4LmlbDplJnor68gJHtudW1977yM6K+35Lyg5YWl5pWw5a2XYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8g6LaF6L+H5a6J5YWo5pWw5a2X5o+Q56S6XG4gIGNoZWNrQm91bmRhcnkobnVtKTtcblxuICAvLyDorr7nva7mlbDlrZflrZfnrKblkozorqHmlbDljZXkvY1cbiAgaWYgKGJpZzUpIHtcbiAgICBudW1iZXJDaGFyID0gYmlnNU51bWJlckNoYXIuc2xpY2UoKTtcbiAgICB1bml0Q2hhciA9IGJpZzVVbml0Q2hhci5zbGljZSgpO1xuICB9IGVsc2Uge1xuICAgIG51bWJlckNoYXIgPSBjaG5OdW1iZXJDaGFyLnNsaWNlKCk7XG4gICAgdW5pdENoYXIgPSBjaG5Vbml0Q2hhci5zbGljZSgpO1xuICB9XG5cbiAgLy8g6K6+572u6IqC54K56K6h5pWw5Y2V5L2N77yM5LiH44CB5Lq/44CB5LiH5Lq/XG4gIGNvbnN0IGRlZmF1bHRVbml0V2FuID0gJ+S4hyc7XG4gIGNvbnN0IGRlZmF1bHRVbml0WWkgPSAn5Lq/JztcbiAgdW5pdFNlY3Rpb24gPSBbJycsIHVuaXRDb25maWcudyB8fCBkZWZhdWx0VW5pdFdhbiwgdW5pdENvbmZpZy55IHx8IGRlZmF1bHRVbml0WWksIHVuaXRDb25maWcudyAmJiB1bml0Q29uZmlnLnkgPyB1bml0Q29uZmlnLncgKyB1bml0Q29uZmlnLnkgOiBkZWZhdWx0VW5pdFdhbiArIGRlZmF1bHRVbml0WWldO1xuXG4gIC8vIOiuvue9rjBcbiAgaWYgKHplcm8pIHtcbiAgICBudW1iZXJDaGFyWzBdID0gemVybztcbiAgfVxuXG4gIC8vIOWJjee9ruWtl+espu+8jOi0n+aVsOWkhOeQhlxuICBjb25zdCBwcmVTdHIgPSBudW0gPCAwID8gbmVnYXRpdmUgOiAnJztcblxuICAvLyDmlbTmlbDlkozlsI/mlbBcbiAgbGV0IGNobkludGVnZXIsIGNobkRlY2ltYWw7XG5cbiAgLy8g5aSE55CG5pW05pWwXG4gIGlmICh1bml0KSB7XG4gICAgY2huSW50ZWdlciA9IGNvbnZlcnRJbnRlZ2VyKG51bSk7XG4gIH0gZWxzZSB7XG4gICAgY2huSW50ZWdlciA9IG1hcE51bWJlckNoYXIoTWF0aC5mbG9vcihudW0pKTtcbiAgfVxuXG4gIC8vIOWkhOeQhuWwj+aVsFxuICBjaG5EZWNpbWFsID0gY29udmVydERlY2ltYWwobnVtKTtcblxuICByZXR1cm4gY2huRGVjaW1hbCA/IGAke3ByZVN0cn0ke2NobkludGVnZXJ9JHtkZWNpbWFsfSR7Y2huRGVjaW1hbH1gIDogYCR7cHJlU3RyfSR7Y2huSW50ZWdlcn1gO1xufVxuXG5leHBvcnQgZGVmYXVsdCBudW1iZXJUb0NoaW5lc2U7XG4iLCIvKipcbiAqIOWtl+iKgui9rOaNouWtmOWCqOWNleS9je+8jOS/neeVmTLkvY3lsI/mlbDngrlcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlByb2Nlc3Nvci5ieXRlc1RvU2l6ZVxuICogQHNpbmNlIDMuOC4wXG4gKiBAcGFyYW0ge251bWJlcn0gYnl0ZXMg5a2X6IqC5aSn5bCPXG4gKiBAcmV0dXJucyB7c3RyaW5nfSDlrZjlgqjljZXkvY3lgLxcbiAqIEBleGFtcGxlXG4gKlxuICogYnl0ZXNUb1NpemUoMCk7XG4gKiAvLyA9PiAwIEJcbiAqXG4gKiBieXRlc1RvU2l6ZSgxMDI0KTtcbiAqIC8vID0+IDEgS0JcbiAqXG4gKiBieXRlc1RvU2l6ZSgzLjIxMzI0MyoxMDI0KjEwMjQpO1xuICogLy8gPT4gMy4yMSBNQlxuICpcbiAqIGJ5dGVzVG9TaXplKDEwMjQqMTAyNCoxMDI0KTtcbiAqIC8vID0+IDEgR0JcbiAqL1xuZnVuY3Rpb24gYnl0ZXNUb1NpemUoYnl0ZXMpIHtcbiAgaWYgKGJ5dGVzID09PSAwKSByZXR1cm4gJzAgQic7XG4gIGNvbnN0IGsgPSAxMDI0O1xuICAvLyDlrZjlgqjljZXkvY1cbiAgY29uc3Qgc2l6ZXMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcbiAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuXG4gIHJldHVybiBzaXplc1tpXSA/IGAke051bWJlcigoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSl9ICR7c2l6ZXNbaV19YCA6IGJ5dGVzICsgJyc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ5dGVzVG9TaXplO1xuIiwiaW1wb3J0IGlzSWRDYXJkIGZyb20gJy4vaXNJZENhcmQnO1xuXG5jb25zdCByZWdJZENhcmQgPSAvXig/PHByb3ZpbmNlPlxcZHsyfSkoPzxjaXR5PlxcZHsyfSkoPzxhcmVhPlxcZHsyfSkoPzx5ZWFyPig/OlxcZHsyfSk/XFxkezJ9KSg/PG1vbnRoPlxcZHsyfSkoPzxkYXk+XFxkezJ9KVxcZHsyfSg/PGdlbmRlcj5cXGQpKD86XFxkfFgpPyQvaTtcblxuY29uc3QgUHJvdmluY2VzID0gW1xuICAvLyDljY7ljJflnLDljLrvvJrljJfkuqzluIJ8MTEwMDAw77yM5aSp5rSl5biCfDEyMDAwMO+8jOays+WMl+ecgXwxMzAwMDDvvIzlsbHopb/nnIF8MTQwMDAw77yM5YaF6JKZ5Y+k6Ieq5rK75Yy6fDE1MDAwMFxuICBbJzExJywgJ+WMl+S6rOW4giddLFxuICBbJzEyJywgJ+Wkqea0peW4giddLFxuICBbJzEzJywgJ+ays+WMl+ecgSddLFxuICBbJzE0JywgJ+Wxseilv+ecgSddLFxuICBbJzE1JywgJ+WGheiSmeWPpOiHquayu+WMuiddLFxuXG4gIC8vIOS4nOWMl+WcsOWMuu+8miDovr3lroHnnIF8MjEwMDAw77yM5ZCJ5p6X55yBfDIyMDAwMO+8jOm7kem+meaxn+ecgXwyMzAwMDBcbiAgWycyMScsICfovr3lroHnnIEnXSxcbiAgWycyMicsICflkInmnpfnnIEnXSxcbiAgWycyMycsICfpu5HpvpnmsZ/nnIEnXSxcblxuICAvLyDljY7kuJzlnLDljLrvvJog5LiK5rW35biCfDMxMDAwMO+8jOaxn+iLj+ecgXwzMjAwMDDvvIzmtZnmsZ/nnIF8MzMwMDAw77yM5a6J5b6955yBfDM0MDAwMO+8jOemj+W7uuecgXwzNTAwMDDvvIzmsZ/opb/nnIF8MzYwMDAw77yM5bGx5Lic55yBfDM3MDAwMFxuICBbJzMxJywgJ+S4iua1t+W4giddLFxuICBbJzMyJywgJ+axn+iLj+ecgSddLFxuICBbJzMzJywgJ+a1meaxn+ecgSddLFxuICBbJzM0JywgJ+WuieW+veecgSddLFxuICBbJzM1JywgJ+emj+W7uuecgSddLFxuICBbJzM2JywgJ+axn+ilv+ecgSddLFxuICBbJzM3JywgJ+WxseS4nOecgSddLFxuXG4gIC8vIOWNjuS4reWcsOWMuu+8miDmsrPljZfnnIF8NDEwMDAw77yM5rmW5YyX55yBfDQyMDAwMO+8jOa5luWNl+ecgXw0MzAwMDBcbiAgWyc0MScsICfmsrPljZfnnIEnXSxcbiAgWyc0MicsICfmuZbljJfnnIEnXSxcbiAgWyc0MycsICfmuZbljZfnnIEnXSxcblxuICAvLyDljY7ljZflnLDljLrvvJrlub/kuJznnIF8NDQwMDAw77yM5bm/6KW/5aOu5peP6Ieq5rK75Yy6fDQ1MDAwMO+8jOa1t+WNl+ecgXw0NjAwMDBcbiAgWyc0NCcsICflub/kuJznnIEnXSxcbiAgWyc0NScsICflub/opb/lo67ml4/oh6rmsrvljLonXSxcbiAgWyc0NicsICfmtbfljZfnnIEnXSxcblxuICAvLyDopb/ljZflnLDljLrvvJrph43luobluIJ8NTAwMDAw77yM5Zub5bed55yBfDUxMDAwMO+8jOi0teW3nuecgXw1MjAwMDDvvIzkupHljZfnnIF8NTMwMDAw77yM6KW/6JeP6Ieq5rK75Yy6fDU0MDAwMFxuICBbJzUwJywgJ+mHjeW6huW4giddLFxuICBbJzUxJywgJ+Wbm+W3neecgSddLFxuICBbJzUyJywgJ+i0teW3nuecgSddLFxuICBbJzUzJywgJ+S6keWNl+ecgSddLFxuICBbJzU0JywgJ+ilv+iXj+iHquayu+WMuiddLFxuXG4gIC8vIOilv+WMl+WcsOWMuu+8miDpmZXopb/nnIF8NjEwMDAw77yM55SY6IKD55yBfDYyMDAwMO+8jOmdkua1t+ecgXw2MzAwMDDvvIzlroHlpI/lm57ml4/oh6rmsrvljLp8NjQwMDAw77yM5paw55aG57u05ZC+5bCU6Ieq5rK75Yy6fDY1MDAwMFxuICBbJzYxJywgJ+mZleilv+ecgSddLFxuICBbJzYyJywgJ+eUmOiCg+ecgSddLFxuICBbJzYzJywgJ+mdkua1t+ecgSddLFxuICBbJzY0JywgJ+WugeWkj+WbnuaXj+iHquayu+WMuiddLFxuICBbJzY1JywgJ+aWsOeWhue7tOWQvuWwlOiHquayu+WMuiddLFxuXG4gIC8vIOWPsOa5vuWcsOWMuu+8muWPsOa5vuecgXw3MTAwMDBcbiAgLy8g5Y+w5rm+5bGF5rCR5YWs5rCR6Lqr5Lu95Y+356CB5Zyw5Z2A56CB5Li6ODMwMDAw77yM5Y+C6ICDIGh0dHA6Ly93d3cud2Fud2VpYmFpa2UuY29tL3dpa2kt5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu96KGM5pS/5Yy65YiS5Luj56CBXyg35Yy6KeOAgWh0dHBzOi8vemgud2lraXBlZGlhLm9yZy93aWtpL+a4r+a+s+WPsOWxheawkeWxheS9j+ivgVxuICBbJzcxJywgJ+WPsOa5vuecgSddLFxuICBbJzgzJywgJ+WPsOa5vuecgSddLFxuXG4gIC8vIOa4r+a+s+WcsOWMuu+8mummmea4r+eJueWIq+ihjOaUv+WMunw4MTAwMDDvvIzmvrPpl6jnibnliKvooYzmlL/ljLp8ODIwMDAwXG4gIFsnODEnLCAn6aaZ5riv54m55Yir6KGM5pS/5Yy6J10sXG4gIFsnODInLCAn5r6z6Zeo54m55Yir6KGM5pS/5Yy6J11cbl07XG5cbi8vIOesrOS4gOS9jeaVsOWtl+aYr+S7peWJjeeahOWkp+WMuuWItuS7o+eggeOAguesrOS6jOS9jeaYr+Wkp+WMuuaJgOWcqOecgeW4gue8lueggeOAguWFqOWbveWFseWIhuS4ujjkuKrlpKfljLrvvJrljY7ljJfvvIgx77yJ44CB5Lic5YyX77yIMu+8ieOAgeWNjuS4nO+8iDPvvInjgIHkuK3ljZfvvIg077yJ44CB6KW/5Y2X77yINe+8ieOAgeilv+WMl++8iDbvvInjgIHlj7Dmub7vvIg377yJ5ZKM5riv5r6z77yIOO+8ieOAglxuLy8gY29uc3QgUmVnaW9ucyA9IFtcbi8vICAgWycxJywgJ+WNjuWMl+WcsOWMuiddLFxuLy8gICBbJzInLCAn5Lic5YyX5Zyw5Yy6J10sXG4vLyAgIFsnMycsICfljY7kuJzlnLDljLonXSxcbi8vICAgWyc0JywgJ+S4reWNl+WcsOWMuiddLFxuLy8gICBbJzUnLCAn6KW/5Y2X5Zyw5Yy6J10sXG4vLyAgIFsnNicsICfopb/ljJflnLDljLonXSxcbi8vICAgWyc3JywgJ+WPsOa5vuWcsOWMuiddLFxuLy8gICBbJzgnLCAn5riv5r6z5Zyw5Yy6J11cbi8vIF07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSWRDYXJkT3JpZ2luIC0g6Kej5p6Q6Lqr5Lu96K+B5Y6f5pWw5o2uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvdmluY2UgLSDnnIHku73nvJbnoIFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjaXR5IC0g5Z+O5biC57yW56CBXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXJlYSAtIOWcsOWMuue8lueggVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHllYXIgLSDlh7rnlJ/lubRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb250aCAtIOWHuueUn+aciFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRheSAtIOWHuueUn+aXpVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGdlbmRlciAtIOaAp+WIqyDog73mlbTpmaQy5Li65aWz77yM5ZCm5YiZ5Li655S3XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJZENhcmRJbmZvIC0g6Lqr5Lu96K+B5L+h5oGvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvdmluY2UgLSDnnIHku71cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiaXJ0aGRheSAtIOeUn+aXpVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGdlbmRlciAtIOaAp+WIq1xuICogQHByb3BlcnR5IHtJZENhcmRPcmlnaW59IG9yaWdpbiAtIOino+aekOi6q+S7veivgeWOn+aVsOaNrlxuICovXG5cbi8qKlxuICog6Kej5p6Q6Lqr5Lu96K+B5Y+356CB77yM5pSv5oyBMTXjgIExOOS9jei6q+S7veivgeWPt+eggVxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6UHJvY2Vzc29yLnBhcnNlSWRDYXJkXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL2JhaWtlLmJhaWR1LmNvbS9pdGVtL+Wxheawkei6q+S7veivgeWPt+eggXzlsYXmsJHouqvku73or4Hlj7fnoIF9XG4gKiBAcGFyYW0ge3N0cmluZ30gaWQg6Lqr5Lu96K+B5Y+356CB77yM5pSv5oyBMTXkvY1cbiAqIEByZXR1cm5zIHtudWxsfElkQ2FyZEluZm99IG51bGwg5oiWIOecgeS7veOAgeeUn+aXpeOAgeaAp+WIq++8jOecgS/luIIv5Yy6L+W5tC/mnIgv5pelL+aAp+WIq+e8lueggVxuICogQGV4YW1wbGVcbiAqIHBhcnNlSWRDYXJkKCcxMjM0NTY3ODkxMjM0NTYnKTtcbiAqIC8vID0+IG51bGxcbiAqXG4gKiAvLyAxOOS9jei6q+S7veivgeWPt+eggVxuICogcGFyc2VJZENhcmQoJzEzMDcwMTE5OTMxMDMwMjI4OCcpXG4gKiAvLyA9PlxuICoge1xuICogICBiaXJ0aGRheTogXCIxOTkzLTEwLTMwXCIsXG4gKiAgIGdlbmRlcjogXCLlpbNcIixcbiAqICAgb3JpZ2luOiB7IHByb3ZpbmNlOiBcIjEzXCIsIGNpdHk6IFwiMDdcIiwgYXJlYTogXCIwMVwiLCB5ZWFyOiBcIjE5OTNcIiwgbW9udGg6IFwiMTBcIiwgZGF5OiBcIjMwXCIsIGdlbmRlcjogXCI4XCIgfSxcbiAqICAgcHJvdmluY2U6IFwi5rKz5YyX55yBXCJcbiAqIH1cbiAqXG4gKiAvLyAxNeS9jei6q+S7veivgeWPt+eggVxuICogcGFyc2VJZENhcmQoJzEzMDcwMTkzMTAzMDIyOCcpO1xuICogLy8gPT5cbiAqIHtcbiAqICAgYmlydGhkYXk6IFwiOTMtMTAtMzBcIixcbiAqICAgZ2VuZGVyOiBcIuWls1wiLFxuICogICBvcmlnaW46IHsgcHJvdmluY2U6IFwiMTNcIiwgY2l0eTogXCIwN1wiLCBhcmVhOiBcIjAxXCIsIHllYXI6IFwiOTNcIiwgbW9udGg6IFwiMTBcIiwgZGF5OiBcIjMwXCIsIGdlbmRlcjogXCI4XCIgfSxcbiAqICAgcHJvdmluY2U6IFwi5rKz5YyX55yBXCJcbiAqIH1cbiAqXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSWRDYXJkKGlkKSB7XG4gIGlmICghaXNJZENhcmQoaWQsIHsgbG9vc2U6IHRydWUgfSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGluZm8gPSByZWdJZENhcmQuZXhlYyhpZCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge3sgcHJvdmluY2U6IHN0cmluZywgY2l0eTogc3RyaW5nLCBhcmVhOiBzdHJpbmcsIHllYXI6IHN0cmluZywgbW9udGg6IHN0cmluZywgZGF5OiBzdHJpbmcsIGdlbmRlcjogc3RyaW5nIH19XG4gICAqXG4gICAqL1xuICBsZXQgb3JpZ2luID0ge1xuICAgIHByb3ZpbmNlOiAnJyxcbiAgICBjaXR5OiAnJyxcbiAgICBhcmVhOiAnJyxcbiAgICB5ZWFyOiAnJyxcbiAgICBtb250aDogJycsXG4gICAgZGF5OiAnJyxcbiAgICBnZW5kZXI6ICcnXG4gIH07XG5cbiAgaWYgKGluZm8uZ3JvdXBzKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9yaWdpbiA9IGluZm8uZ3JvdXBzO1xuICB9IGVsc2Uge1xuICAgIG9yaWdpbiA9IHtcbiAgICAgIHByb3ZpbmNlOiBpbmZvWzFdLFxuICAgICAgY2l0eTogaW5mb1syXSxcbiAgICAgIGFyZWE6IGluZm9bM10sXG4gICAgICB5ZWFyOiBpbmZvWzRdLFxuICAgICAgbW9udGg6IGluZm9bNV0sXG4gICAgICBkYXk6IGluZm9bNl0sXG4gICAgICBnZW5kZXI6IGluZm9bN11cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJvdmluY2UgPSBQcm92aW5jZXMuZmluZCgoaXRlbSkgPT4gaXRlbVswXSA9PT0gb3JpZ2luLnByb3ZpbmNlKTtcblxuICBpZiAoIXByb3ZpbmNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBiaXJ0aGRheSA9IGAke29yaWdpbi55ZWFyfS0ke29yaWdpbi5tb250aH0tJHtvcmlnaW4uZGF5fWA7XG4gIGNvbnN0IGdlbmRlciA9IE51bWJlcihvcmlnaW4uZ2VuZGVyKSAlIDIgPT09IDAgPyAn5aWzJyA6ICfnlLcnO1xuICAvLyBjb25zdCByZWdpb24gPSBSZWdpb25zLmZpbmQoaXRlbSA9PiBpdGVtWzBdID09PSBvcmlnaW4ucHJvdmluY2U/LnN1YnN0cmluZygwLCAxKSk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyByZWdpb24sXG4gICAgcHJvdmluY2U6IHByb3ZpbmNlWzFdLFxuICAgIGJpcnRoZGF5LFxuICAgIGdlbmRlcixcbiAgICBvcmlnaW5cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJZENhcmQ7XG4iLCIvLyAgZmlsZeOAgWJsb2Lmlofku7blpoLkvZXpooTop4jlm77niYfvvJ9cbi8vICDmlrnms5Ux77ya5bCGZmlsZeaIluiAhWJsb2Lnsbvlnovmlofku7bovazmiJBiYXNlNjTmlbDmja7vvIzlho3kvZzkuLpzcmPotYvlgLznu5lpbWfmoIfnrb5cbi8vICDmlrnms5Uy77ya5L2/55SoIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpIOS4umJsb2LjgIFmaWxlIOWIm+W7uuS4gOS4quaMh+WQkeivpeWPguaVsOWvueixoeeahFVSTFxuXG4vKipcbiAqIOWwhiBCbG9iIOaIliBGaWxlIOWvueixoei9rOaIkCBkYXRhOlVSTCDmoLzlvI/nmoQgQmFzZTY0IOWtl+espuS4suOAglxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6UHJvY2Vzc29yLmJsb2JUb0RhdGFVUkxcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy96aC1DTi9kb2NzL1dlYi9BUEkvRmlsZVJlYWRlci9yZWFkQXNEYXRhVVJMfEZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCgpfVxuICogQHNpbmNlIDQuMS4wXG4gKiBAcGFyYW0ge0Jsb2J9IGJsb2IgQmxvYiDmiJYgRmlsZSDlr7nosaFcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IGRhdGE6VVJMIOagvOW8j+eahCBCYXNlNjQg5a2X56ym5Liy44CCXG4gKiBAZXhhbXBsZVxuICogY29uc3QgYUZpbGVQYXJ0cyA9IFsnPGEgaWQ9XCJhXCI+PGIgaWQ9XCJiXCI+aGV5ITwvYj48L2E+J107IC8vIOS4gOS4quWMheWQq0RPTVN0cmluZ+eahOaVsOe7hFxuICogY29uc3QgaHRtbEJsb2IgPSBuZXcgQmxvYihhRmlsZVBhcnRzLCB7IHR5cGU6ICd0ZXh0L2h0bWwnIH0pOyAvLyDlvpfliLAgYmxvYlxuICpcbiAqIGJsb2JUb0RhdGFVUkwoaHRtbEJsb2IpLnRoZW4oZGF0YT0+e1xuICogICBjb25zb2xlLmxvZyhkYXRhKTsgLy8gZGF0YTp0ZXh0L2h0bWw7YmFzZTY0LFBHRWdhV1E5SW1FaVBqeGlJR2xrUFNKaUlqNW9aWGtoUEM5aVBqd3ZZVDQ9XG4gKiB9KTtcbiAqXG4gKiBjb25zdCB0ZXh0QmxvYiA9IG5ldyBCbG9iKGFGaWxlUGFydHMsIHsgdHlwZTogJ3RleHQvcGxhaW4nIH0pO1xuICpcbiAqIGJsb2JUb0RhdGFVUkwodGV4dEJsb2IpLnRoZW4oZGF0YT0+e1xuICogICBjb25zb2xlLmxvZyhkYXRhKTsgLy8gZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGJsb2JUb0RhdGFVUkwoYmxvYikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmxvYlRvRGF0YVVSTDtcbiIsIi8qKlxuICog5bCGIERhdGFVUkwg6L2s5Li6IEJsb2Ig5a+56LGhXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3IuZGF0YVVSTFRvQmxvYlxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL3poLUNOL2RvY3MvR2xvc3NhcnkvQmFzZTY0fEJhc2U2NH1cbiAqIEBzaW5jZSA0LjEuMFxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGF1cmwgZGF0YTog5Y2P6K6u55qEVVJMXG4gKiBAcmV0dXJucyB7QmxvYn0gQmxvYiDlr7nosaFcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkYXRhdXJsID0gJ2RhdGE6dGV4dC9odG1sO2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PSc7XG4gKiBkYXRhVVJMVG9CbG9iKGRhdGF1cmwpO1xuICovXG5mdW5jdGlvbiBkYXRhVVJMVG9CbG9iKGRhdGF1cmwpIHtcbiAgY29uc3QgYXJyID0gZGF0YXVybC5zcGxpdCgnLCcpO1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG1pbWUgPSBhcnJbMF0ubWF0Y2goLzooLio/KTsvKVsxXTtcbiAgY29uc3QgYnN0ciA9IGF0b2IoYXJyWzFdKTtcbiAgbGV0IG4gPSBic3RyLmxlbmd0aDtcbiAgY29uc3QgdThhcnIgPSBuZXcgVWludDhBcnJheShuKTtcblxuICB3aGlsZSAobi0tKSB7XG4gICAgdThhcnJbbl0gPSBic3RyLmNoYXJDb2RlQXQobik7XG4gIH1cbiAgcmV0dXJuIG5ldyBCbG9iKFt1OGFycl0sIHsgdHlwZTogbWltZSB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGF0YVVSTFRvQmxvYjtcbiIsIi8qKlxuICog6K6+572uIERhdGFVUkwg5YmN57yA44CBTUlNRSDnsbvlnovjgIFiYXNlNjQg5qCH6K+G44CCPGJyLz5cbiAqIOWmguaenOS9oOmcgOimgeiOt+WPlkRhdGFVUkwg55qEIE1JTUUg57G75Z6L5ZKM5pWw5o2u5pys6Lqr77yM5o6o6I2Q5L2/55SoIDxhIGhyZWY9XCJodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9kYXRhLXVybHNcIj5kYXRhLXVybHM8L2E+44CCXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3Iuc2V0RGF0YVVSTFByZWZpeFxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL3poLUNOL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzfERhdGEgVVJMc31cbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI3VuZGVyc3RhbmRpbmctbWltZS10eXBlc3xNSU1FIHR5cGVzfVxuICogQHNpbmNlIDQuMS4wXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YSDmlbDmja7mnKzouqtcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWltZXR5cGU9XCJpbWFnZS9wbmdcIl0gTUlNRSDnsbvlnotcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Jhc2U2ND10cnVlXSDmt7vliqAgYmFzZTY0IOagh+ivhlxuICogQHJldHVybnMge3N0cmluZ30gRGF0YVVSTCDmoLzlvI/nmoTlrZfnrKbkuLJcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkYXRhID0gJ1BHRWdhV1E5SW1FaVBqeGlJR2xrUFNKaUlqNW9aWGtoUEM5aVBqd3ZZVDQ9JztcbiAqIHNldERhdGFVUkxQcmVmaXgoZGF0YSk7IC8vIGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogc2V0RGF0YVVSTFByZWZpeChkYXRhLCAnaW1hZ2UvcG5nJywgZmFsc2UpOyAvLyBkYXRhOmltYWdlL3BuZyxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogc2V0RGF0YVVSTFByZWZpeChkYXRhLCAnaW1hZ2UvanBnJyk7IC8vIGRhdGE6aW1hZ2UvanBnO2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogc2V0RGF0YVVSTFByZWZpeChkYXRhLCAndGV4dC9odG1sJyk7IC8vIGRhdGE6dGV4dC9odG1sO2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogc2V0RGF0YVVSTFByZWZpeChkYXRhLCAnJyk7IC8vIGRhdGE6O2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogc2V0RGF0YVVSTFByZWZpeChkYXRhLCAnJywgZmFsc2UpOyAvLyBkYXRhOixQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICovXG5mdW5jdGlvbiBzZXREYXRhVVJMUHJlZml4KGRhdGEsIG1pbWV0eXBlID0gJ2ltYWdlL3BuZycsIGJhc2U2NCA9IHRydWUpIHtcbiAgcmV0dXJuIGBkYXRhOiR7bWltZXR5cGV9JHtiYXNlNjQgPyAnO2Jhc2U2NCcgOiAnJ30sJHtkYXRhfWA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldERhdGFVUkxQcmVmaXg7XG4iLCJpbXBvcnQgaXNOaWwgZnJvbSAnLi91dGlscy90eXBlL2lzTmlsJztcblxuLy8gVE9ETzog5Ye95pWw6YeN6L2977yM57G75Z6L5Y+C54WnIERhdGVcblxuLyoqXG4gKiDliJvlu7rkuIDkuKogRGF0ZSDlrp7kvovml6XmnJ/lr7nosaHvvIzlkIwgbmV3IERhdGUoKSDjgII8YnIvPlxuICog6KeE6YG/5LqG6Iu55p6c6K6+5aSH5rWP6KeI5Zmo5LiN5pSv5oyB6YOo5YiG5qC85byP77yIWVlZWS1NTS1ERCBISC1tbSDmiJYgWVlZWS5NTS5ERO+8ieOAglxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6UHJvY2Vzc29yLnNhZmVEYXRlXG4gKiBAc2VlIOWPguiAgyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvemgtQ04vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZXxEYXRlfVxuICogQHNpbmNlIDQuNC4wXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8RGF0ZX0gW3ZhbHVlXSDml6XmnJ/ml7bpl7TlrZfnrKbkuLLjgIHmr6vnp5LmlbDjgIHml6XmnJ/lr7nosaFcbiAqIEBwYXJhbSB7Li4ubnVtYmVyfSBhcmdzIOaciC/ml6Uv5pe2L+WIhi/np5Iv5q+r56eSXG4gKiBAcmV0dXJucyB7RGF0ZX0gRGF0ZSDlrp7kvovml6XmnJ/lr7nosaFcbiAqIEBleGFtcGxlXG4gKiBzYWZlRGF0ZSgnMjAyMi0xLTEnKTsgLy8gU2F0IEphbiAwMSAyMDIyIDAwOjAwOjAwIEdNVCswODAwICjkuK3lm73moIflh4bml7bpl7QpXG4gKiBzYWZlRGF0ZSgnMjAyMi8xLzEnKTsgLy8gU2F0IEphbiAwMSAyMDIyIDAwOjAwOjAwIEdNVCswODAwICjkuK3lm73moIflh4bml7bpl7QpXG4gKiBzYWZlRGF0ZSgnMjAyMi4xLjEnKTsgLy8gU2F0IEphbiAwMSAyMDIyIDAwOjAwOjAwIEdNVCswODAwICjkuK3lm73moIflh4bml7bpl7QpXG4gKiBzYWZlRGF0ZSgnMjAyMi4xLjEgMTE6MTEnKTsgLy8gU2F0IEphbiAwMSAyMDIyIDExOjExOjAwIEdNVCswODAwICjkuK3lm73moIflh4bml7bpl7QpXG4gKiBzYWZlRGF0ZSg5OSwgMSk7IC8vIE1vbiBGZWIgMDEgMTk5OSAwMDowMDowMCBHTVQrMDgwMCAo5Lit5Zu95qCH5YeG5pe26Ze0KVxuICogc2FmZURhdGUoMTY0NjcxMTIzMzE3MSk7IC8vIFR1ZSBNYXIgMDggMjAyMiAxMTo0NzoxMyBHTVQrMDgwMCAo5Lit5Zu95qCH5YeG5pe26Ze0KVxuICpcbiAqL1xuZnVuY3Rpb24gc2FmZURhdGUodmFsdWUsIC4uLmFyZ3MpIHtcbiAgY29uc3Qgc2FmZVZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnJlcGxhY2UoL1tcXFxcLi1dL2csICcvJykgOiB2YWx1ZTtcblxuICBpZiAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBEYXRlKHNhZmVWYWx1ZSwgLi4uYXJncyk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBpc05pbChzYWZlVmFsdWUpID8gbmV3IERhdGUoKSA6IG5ldyBEYXRlKHNhZmVWYWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNhZmVEYXRlO1xuIiwiaW1wb3J0IG5vcm1hbGl6ZVN0cmluZyBmcm9tICcuL25vcm1hbGl6ZVN0cmluZyc7XG5cbi8qKlxuICog5qC85byP5YyW5omL5py65Y+356CBXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3IuZm9ybWF0TW9iaWxlXG4gKiBAc2luY2UgNC41LjBcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2JpbGVObyDmiYvmnLrlj7fnoIFcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10g6YWN572u6aG5XG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2hhcj0nICddIOmXtOmalOWtl+esplxuICogQHJldHVybnMge3N0cmluZ30g5qC85byP5YyW5ZCO55qE5omL5py65Y+356CBXG4gKiBAZXhhbXBsZVxuICogZm9ybWF0TW9iaWxlKCcxMzM0NTY3ODkwMCcpIC8vICcxMzMgNDU2NyA4OTAwJ1xuICogZm9ybWF0TW9iaWxlKCcxMzM0NTY3ODkwMCcsIHsgY2hhcjogJy0nIH0pIC8vICcxMzMtNDU2Ny04OTAwJ1xuICpcbiAqIC8vIOiEseaVj+aJi+acuuWPt+eggVxuICogZm9ybWF0TW9iaWxlKCcxMzMqKioqMTIzNCcpIC8vICcxMzMgKioqKiAxMjM0J1xuICogZm9ybWF0TW9iaWxlKCcxMzMqKioqMTIzNCcsIHsgY2hhcjogJy0nIH0pIC8vICcxMzMtKioqKi0xMjM0J1xuICpcbiAqIC8vIOaJi+acuuWPt+eggeS9jeaVsOS4jeWkn1xuICogZm9ybWF0TW9iaWxlKCcxMzMnKSAvLyAnMTMzJ1xuICogZm9ybWF0TW9iaWxlKCcxMzM0NTYnKSAvLyAnMTMzIDQ1NidcbiAqIGZvcm1hdE1vYmlsZSgnMTMzNDU2NzgnKSAvLyAnMTMzIDQ1NjcgOCdcbiAqL1xuZnVuY3Rpb24gZm9ybWF0TW9iaWxlKG1vYmlsZU5vLCB7IGNoYXIgPSAnICcgfSA9IHt9KSB7XG4gIGNvbnN0IHJlZ0NoYXIgPSBuZXcgUmVnRXhwKGNoYXIsICdnJyk7XG4gIGNvbnN0IHJlYWxWYWx1ZSA9IG5vcm1hbGl6ZVN0cmluZyhtb2JpbGVObykucmVwbGFjZShyZWdDaGFyLCAnJykuc3Vic3RyaW5nKDAsIDExKTtcblxuICBpZiAocmVhbFZhbHVlLmxlbmd0aCA+IDcpIHtcbiAgICByZXR1cm4gcmVhbFZhbHVlLnJlcGxhY2UoL14oLi4uKSguLi4uKS9nLCBgJDEke2NoYXJ9JDIke2NoYXJ9YCk7XG4gIH1cbiAgaWYgKHJlYWxWYWx1ZS5sZW5ndGggPiAzKSB7XG4gICAgcmV0dXJuIHJlYWxWYWx1ZS5yZXBsYWNlKC9eKC4uLikvZywgYCQxJHtjaGFyfWApO1xuICB9XG4gIHJldHVybiByZWFsVmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdE1vYmlsZTtcbiIsImltcG9ydCBub3JtYWxpemVTdHJpbmcgZnJvbSAnLi9ub3JtYWxpemVTdHJpbmcnO1xuXG4vKipcbiAqIOWJjee9ruihpembtlxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6UHJvY2Vzc29yLnBhZFplcm9cbiAqIEBzaW5jZSA0LjcuMFxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB2YWx1ZSDopoHlpITnkIbnmoTlgLxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT0yXSDmjIflrprlrZfnrKbkuLLplb/luqZcbiAqIEByZXR1cm5zIHtzdHJpbmd9IOeUqOmbtuWhq+WFheaVsOWtl+WIsOe7meWumumVv+W6pueahOWtl+espuS4slxuICogQGV4YW1wbGVcbiAqIHBhZFplcm8oNSk7IC8vICcwNSdcbiAqIHBhZFplcm8oJzUnKTsgLy8gJzA1J1xuICpcbiAqIHBhZFplcm8oMTIpOyAvLyAnMTInXG4gKiBwYWRaZXJvKCcxMicpOyAvLyAnMTInXG4gKlxuICogcGFkWmVybyg2ODgpOyAvLyAnNjg4J1xuICogcGFkWmVybygnNjg4Jyk7IC8vICc2ODgnXG4gKlxuICogcGFkWmVybyg2ODgsIDUpOyAvLyAnMDA2ODgnXG4gKiBwYWRaZXJvKCc2ODgnLCA1KTsgLy8gJzAwNjg4J1xuICovXG5mdW5jdGlvbiBwYWRaZXJvKHZhbHVlLCBzaXplID0gMikge1xuICBjb25zdCBzdHIgPSBub3JtYWxpemVTdHJpbmcodmFsdWUpO1xuICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicgfHwgc2l6ZSA8IDApIHtcbiAgICBzaXplID0gMDtcbiAgfVxuXG4gIGlmIChsZW4gPCBzaXplKSB7XG4gICAgcmV0dXJuICcwJy5yZXBlYXQoc2l6ZSAtIGxlbikgKyBzdHI7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGFkWmVybztcbiIsImltcG9ydCBpc1R5cGUgZnJvbSAnLi9pc1R5cGUnO1xuXG4vKipcbiAqIOajgOafpeWAvOaYr+WQpuS4uk51bWJlclxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VHlwZS5pc051bWJlclxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOajgOafpeWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4uk51bWJlclxuICogQGV4YW1wbGVcbiAqXG4gKiBpc051bWJlcigxKVxuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpXG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNOdW1iZXIoSW5maW5pdHkpXG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNOdW1iZXIoTmFOKVxuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzTnVtYmVyKCcxJylcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiBpc1R5cGUodmFsdWUsICdOdW1iZXInKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOdW1iZXI7XG4iLCJpbXBvcnQgeyBkaWdpdExlbmd0aCwgZmxvYXQyRml4ZWQsIGNoZWNrQm91bmRhcnkgfSBmcm9tICcuL3V0aWxzL21hdGgudXRpbCc7XG5pbXBvcnQgeyBpc051bWJlciwgaXNOYU4sIGlzU3RyaW5nIH0gZnJvbSAnLi91dGlscy90eXBlJztcblxuLyoqXG4gKiDnsr7noa7kuZjms5XvvIzmlK/mjIHlpJrkuKrmlbDnm7jkuZhcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOk1hdGgudGltZXNcbiAqIEBzaW5jZSAzLjEuMFxuICogQHBhcmFtIHsuLi5udW1iZXJ8c3RyaW5nfSBudW1zIOebuOS5mOeahOaVsFxuICogQHJldHVybnMge251bWJlcn0g5LmY56evXG4gKiBAZXhhbXBsZVxuICpcbiAqIHRpbWVzKDMsIDAuNik7XG4gKiAvLyA9PiAxLjhcbiAqXG4gKiB0aW1lcygzLCAwLjYsIDIpO1xuICogLy8gPT4gMy42XG4gKlxuICogdGltZXMoMywgMC42LCAyLCAxMCk7XG4gKiAvLyA9PiAzNlxuICovXG5mdW5jdGlvbiB0aW1lcyguLi5udW1zKSB7XG4gIGNvbnN0IFtudW0xLCBudW0yLCAuLi5yZXN0XSA9IG51bXM7XG4gIGlmIChyZXN0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdGltZXModGltZXMobnVtMSwgbnVtMiksIC4uLnJlc3QpO1xuICB9XG5cbiAgLy8g5YW85a655aSE55CG77yM5aaC5p6c56ysMuS4quWPguaVsOS4uumdnuaVsOWtl+aIluWtl+espuS4suaXtu+8jOi/lOWbnuesrOS4gOS4quWPguaVsFxuICBpZiAoKCFpc051bWJlcihudW0yKSB8fCBpc05hTihudW0yKSkgJiYgIWlzU3RyaW5nKG51bTIpKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBudW0xO1xuICB9XG5cbiAgY29uc3QgbnVtMUNoYW5nZWQgPSBmbG9hdDJGaXhlZChudW0xKTtcbiAgY29uc3QgbnVtMkNoYW5nZWQgPSBmbG9hdDJGaXhlZChudW0yKTtcbiAgY29uc3QgYmFzZU51bSA9IGRpZ2l0TGVuZ3RoKG51bTEpICsgZGlnaXRMZW5ndGgobnVtMik7XG4gIGNvbnN0IGxlZnRWYWx1ZSA9IG51bTFDaGFuZ2VkICogbnVtMkNoYW5nZWQ7XG5cbiAgY2hlY2tCb3VuZGFyeShsZWZ0VmFsdWUpO1xuXG4gIHJldHVybiBsZWZ0VmFsdWUgLyBNYXRoLnBvdygxMCwgYmFzZU51bSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRpbWVzO1xuIiwiaW1wb3J0IHsgZGlnaXRMZW5ndGggfSBmcm9tICcuL3V0aWxzL21hdGgudXRpbCc7XG5pbXBvcnQgdGltZXMgZnJvbSAnLi90aW1lcyc7XG5pbXBvcnQgeyBpc051bWJlciwgaXNOYU4sIGlzU3RyaW5nIH0gZnJvbSAnLi91dGlscy90eXBlJztcblxuLyoqXG4gKiDnsr7noa7liqDms5XvvIzmlK/mjIHlpJrkuKrmlbDnm7jliqBcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOk1hdGgucGx1c1xuICogQHNpbmNlIDMuMS4wXG4gKiBAcGFyYW0gey4uLm51bWJlcnxzdHJpbmd9IG51bXMg55u45Yqg55qE5pWwXG4gKiBAcmV0dXJucyB7bnVtYmVyfSDmgLvlkoxcbiAqIEBleGFtcGxlXG4gKlxuICogcGx1cygwLjEsIDAuMik7XG4gKiAvLyA9PiAwLjNcbiAqXG4gKiBwbHVzKDAuMSwgMC4yLCAwLjMpO1xuICogLy8gPT4gMC42XG4gKlxuICogcGx1cygwLjEsIDAuMiwgMC4zLCAwLjQpO1xuICogLy8gPT4gMVxuICovXG5mdW5jdGlvbiBwbHVzKC4uLm51bXMpIHtcbiAgY29uc3QgW251bTEsIG51bTIsIC4uLnJlc3RdID0gbnVtcztcblxuICBpZiAocmVzdC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBsdXMocGx1cyhudW0xLCBudW0yKSwgLi4ucmVzdCk7XG4gIH1cblxuICAvLyDlhbzlrrnlpITnkIbvvIzlpoLmnpznrKwy5Liq5Y+C5pWw5Li66Z2e5pWw5a2X5oiW5a2X56ym5Liy5pe277yM6L+U5Zue56ys5LiA5Liq5Y+C5pWwXG4gIGlmICgoIWlzTnVtYmVyKG51bTIpIHx8IGlzTmFOKG51bTIpKSAmJiAhaXNTdHJpbmcobnVtMikpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG51bTE7XG4gIH1cblxuICBjb25zdCBiYXNlTnVtID0gTWF0aC5wb3coMTAsIE1hdGgubWF4KGRpZ2l0TGVuZ3RoKG51bTEpLCBkaWdpdExlbmd0aChudW0yKSkpO1xuICByZXR1cm4gKHRpbWVzKG51bTEsIGJhc2VOdW0pICsgdGltZXMobnVtMiwgYmFzZU51bSkpIC8gYmFzZU51bTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGx1cztcbiIsImltcG9ydCB7IGRpZ2l0TGVuZ3RoIH0gZnJvbSAnLi91dGlscy9tYXRoLnV0aWwnO1xuaW1wb3J0IHRpbWVzIGZyb20gJy4vdGltZXMnO1xuaW1wb3J0IHsgaXNOdW1iZXIsIGlzTmFOLCBpc1N0cmluZyB9IGZyb20gJy4vdXRpbHMvdHlwZSc7XG5cbi8qKlxuICog57K+56Gu5YeP5rOV77yM5pSv5oyB5aSa5Liq5pWw55u45YePXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpNYXRoLm1pbnVzXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBwYXJhbSB7Li4ubnVtYmVyfHN0cmluZ30gbnVtcyDnm7jlh4/nmoTmlbBcbiAqIEByZXR1cm5zIHtudW1iZXJ9IOW3rlxuICogQGV4YW1wbGVcbiAqXG4gKiBtaW51cygxLCAwLjkpO1xuICogLy8gPT4gMC4xXG4gKlxuICogbWludXMoMSwgMC45LCAwLjAyKTtcbiAqIC8vID0+IDAuMDhcbiAqXG4gKiBtaW51cygxLCAwLjksIDAuMDIsIDAuMDgpO1xuICogLy8gPT4gMFxuICovXG5mdW5jdGlvbiBtaW51cyguLi5udW1zKSB7XG4gIGNvbnN0IFtudW0xLCBudW0yLCAuLi5yZXN0XSA9IG51bXM7XG5cbiAgaWYgKHJlc3QubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBtaW51cyhtaW51cyhudW0xLCBudW0yKSwgLi4ucmVzdCk7XG4gIH1cblxuICAvLyDlhbzlrrnlpITnkIbvvIzlpoLmnpznrKwy5Liq5Y+C5pWw5Li66Z2e5pWw5a2X5oiW5a2X56ym5Liy5pe277yM6L+U5Zue56ys5LiA5Liq5Y+C5pWwXG4gIGlmICgoIWlzTnVtYmVyKG51bTIpIHx8IGlzTmFOKG51bTIpKSAmJiAhaXNTdHJpbmcobnVtMikpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG51bTE7XG4gIH1cblxuICBjb25zdCBiYXNlTnVtID0gTWF0aC5wb3coMTAsIE1hdGgubWF4KGRpZ2l0TGVuZ3RoKG51bTEpLCBkaWdpdExlbmd0aChudW0yKSkpO1xuICByZXR1cm4gKHRpbWVzKG51bTEsIGJhc2VOdW0pIC0gdGltZXMobnVtMiwgYmFzZU51bSkpIC8gYmFzZU51bTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWludXM7XG4iLCJpbXBvcnQgeyBzdHJpcCwgZGlnaXRMZW5ndGgsIGZsb2F0MkZpeGVkLCBjaGVja0JvdW5kYXJ5IH0gZnJvbSAnLi91dGlscy9tYXRoLnV0aWwnO1xuaW1wb3J0IHRpbWVzIGZyb20gJy4vdGltZXMnO1xuaW1wb3J0IHsgaXNOdW1iZXIsIGlzTmFOLCBpc1N0cmluZyB9IGZyb20gJy4vdXRpbHMvdHlwZSc7XG5cbi8qKlxuICog57K+56Gu6Zmk5rOV77yM5pSv5oyB5aSa5Liq5pWw55u46ZmkXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpNYXRoLmRpdmlkZVxuICogQHNpbmNlIDMuMS4wXG4gKiBAcGFyYW0gey4uLm51bWJlcnxzdHJpbmd9IG51bXMg6Zmk5pWw5ZKM6KKr6Zmk5pWwXG4gKiBAcmV0dXJucyB7bnVtYmVyfSDllYbmlbBcbiAqIEBleGFtcGxlXG4gKlxuICogZGl2aWRlKDEuMjEsIDEuMSk7XG4gKiAvLyA9PiAxLjFcbiAqXG4gKiBkaXZpZGUoMTAwMCwgMTAsIDEwKTtcbiAqIC8vID0+IDEwXG4gKlxuICogZGl2aWRlKDEwMDAsIDEwLCAxMCwgMTApO1xuICogLy8gPT4gMVxuICovXG5mdW5jdGlvbiBkaXZpZGUoLi4ubnVtcykge1xuICBjb25zdCBbbnVtMSwgbnVtMiwgLi4ucmVzdF0gPSBudW1zO1xuXG4gIGlmIChyZXN0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZGl2aWRlKGRpdmlkZShudW0xLCBudW0yKSwgLi4ucmVzdCk7XG4gIH1cblxuICAvLyDlhbzlrrnlpITnkIbvvIzlpoLmnpznrKwy5Liq5Y+C5pWw5Li66Z2e5pWw5a2X5oiW5a2X56ym5Liy5pe277yM6L+U5Zue56ys5LiA5Liq5Y+C5pWwXG4gIGlmICgoIWlzTnVtYmVyKG51bTIpIHx8IGlzTmFOKG51bTIpKSAmJiAhaXNTdHJpbmcobnVtMikpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG51bTE7XG4gIH1cblxuICBjb25zdCBudW0xQ2hhbmdlZCA9IGZsb2F0MkZpeGVkKG51bTEpO1xuICBjb25zdCBudW0yQ2hhbmdlZCA9IGZsb2F0MkZpeGVkKG51bTIpO1xuICBjaGVja0JvdW5kYXJ5KG51bTFDaGFuZ2VkKTtcbiAgY2hlY2tCb3VuZGFyeShudW0yQ2hhbmdlZCk7XG4gIC8vIGZpeDog57G75Ly8IDEwICoqIC00IOS4uiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk577yMc3RyaXAg5L+u5q2jXG4gIHJldHVybiB0aW1lcyhudW0xQ2hhbmdlZCAvIG51bTJDaGFuZ2VkLCBzdHJpcChNYXRoLnBvdygxMCwgZGlnaXRMZW5ndGgobnVtMikgLSBkaWdpdExlbmd0aChudW0xKSkpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGl2aWRlO1xuIiwiaW1wb3J0IGRpdmlkZSBmcm9tICcuL2RpdmlkZSc7XG5pbXBvcnQgdGltZXMgZnJvbSAnLi90aW1lcyc7XG5cbi8qKlxuICog5Zub6IiN5LqU5YWl77yM5pSv5oyB6K6+572u57K+5bqmXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpNYXRoLnJvdW5kXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gbnVtIOimgeWbm+iIjeS6lOWFpeeahOaVsOWtl1xuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0g5Zub6IiN5LqU5YWl55qE57K+5bqmXG4gKiBAcmV0dXJucyB7bnVtYmVyfSDlm5voiI3kupTlhaXnmoTmlbDlrZdcbiAqIEBleGFtcGxlXG4gKlxuICogcm91bmQoNC4wMDYpO1xuICogLy8gPT4gNFxuICpcbiAqIHJvdW5kKDQuMDA2LCAyKTtcbiAqIC8vID0+IDQuMDFcbiAqXG4gKiByb3VuZCg0MDYwLCAtMik7XG4gKiAvLyA9PiA0MTAwXG4gKi9cbmZ1bmN0aW9uIHJvdW5kKG51bSwgcHJlY2lzaW9uID0gMCkge1xuICBjb25zdCBiYXNlID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG4gIHJldHVybiBkaXZpZGUoTWF0aC5yb3VuZCh0aW1lcyhudW0sIGJhc2UpKSwgYmFzZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJvdW5kO1xuIiwiLyoqXG4gKiDnrYnlvoXml7bpl7Tov5Tlm54gUHJvbWlzZSDjgILluLjnlKjkuo7lvILmraXmlrnms5XkuK3lu7bml7bjgIJcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOk90aGVyLndhaXRUaW1lXG4gKiBAc2luY2UgNC4yLjBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGltZT0xMDAwXSDlu7bml7bml7bpl7TvvIzljZXkvY3mr6vnp5JcbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHRlc3QgPSBhc3luYyAoKT0+e1xuICogICBhd2FpdCB3YWl0VGltZSgpO1xuICogICAvLyBkbyBzb21ldGhpbmdcbiAqIH1cbiAqXG4gKiB3YWl0VGltZSg1MDApLnRoZW4oKCk9PntcbiAqICAgLy8gZG8gc29tZXRoaW5nXG4gKiB9KVxuICovXG5mdW5jdGlvbiB3YWl0VGltZSh0aW1lID0gMTAwMCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWUpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2FpdFRpbWU7XG4iLCJpbXBvcnQgbm9ybWFsaXplU3RyaW5nIGZyb20gJy4vbm9ybWFsaXplU3RyaW5nJztcblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduLW1vYmlsZS9ibG9iL3YyL2NvbXBvbmVudHMvaW5wdXQtaXRlbS9pbmRleC50c3gjTDI0MFxuXG4vKipcbiAqIOiuoeeul+i+k+WFpeahhueahOWAvOagvOW8j+WMluWQjuWFieagh+S9jee9rlxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6T3RoZXIuY2FsY3VsYXRlQ3Vyc29yUG9zaXRpb25cbiAqIEBzaW5jZSA0LjYuMFxuICogQHNlZSDmoLzlvI/ljJbmiYvmnLrlj7fnoIEge0BsaW5rIGh0dHBzOi8vZG9seS1kZXYuZ2l0aHViLmlvL3V0aWwtaGVscGVycy9tb2R1bGUtUHJvY2Vzc29yLmh0bWwjLmZvcm1hdE1vYmlsZXxmb3JtYXRNb2JpbGV9XG4gKiBAc2VlIOagvOW8j+WMlumTtuihjOWNoeWPtyB7QGxpbmsgaHR0cHM6Ly9kb2x5LWRldi5naXRodWIuaW8vdXRpbC1oZWxwZXJzL21vZHVsZS1Qcm9jZXNzb3IuaHRtbCMuZm9ybWF0QmFua0NhcmR8Zm9ybWF0QmFua0NhcmR9XG4gKiBAc2VlIGg156S65L6LIHtAbGluayBodHRwczovLzI5NTB2OS5jc2IuYXBwL3zngrnlh7vmn6XnnIt9XG4gKiBAc2VlIHJlYWN056S65L6LIHtAbGluayBodHRwczovLzMzY2N5OS5jc2IuYXBwL3zngrnlh7vmn6XnnIt9XG4gKiBAcGFyYW0ge251bWJlcn0gcHJldlBvcyDotYvlgLzliY3nmoTlhYnmoIfkvY3nva7vvIxvbkNoYW5nZS9vbklucHV055qE5YWJ5qCH5L2N572uIGUudGFyZ2V0LnNlbGVjdGlvbkVuZFxuICogQHBhcmFtIHtzdHJpbmd9IHByZXZDdHJsVmFsdWUg5LiK5LiA5Liq5qC85byP5YyW5ZCO55qE5YC8XG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3VmFsdWUg5b2T5YmN6L6T5YWl5Y6f5YC8XG4gKiBAcGFyYW0ge3N0cmluZ30gY3RybFZhbHVlIOW9k+WJjeagvOW8j+WMluWQjueahOWAvFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSDphY3nva7poblcbiAqIEBwYXJhbSB7c3RyaW5nW118c3RyaW5nfSBbb3B0aW9ucy5wbGFjZWhvbGRlckNoYXI9JyAnXSDljaDkvY3nrKZcbiAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5tYXNrUmVnPS9cXEQvZ10g6ZyA6KaB6YGu55uW55qE5a2X56ym6KeE5YiZ44CC6buY6K6k5Y675o6J6Z2e5pWw5a2X77yM5oSP5ZGz552AIGN0cmxWYWx1ZSDpnIDopoHljrvmjonpnZ7mlbDlrZfjgIJcbiAqIEBwYXJhbSB7J21vYmlsZSd8J2JhbmtDYXJkJ30gW29wdGlvbnMudHlwZV0g5qC85byP5YyW57G75Z6L77yM5YaF572u5omL5py65Y+356CB5ZKM6ZO26KGM5Y2h5Y+354m55q6K5aSE55CGXG4gKiBAcmV0dXJucyB7bnVtYmVyfSDmoLzlvI/ljJblkI7nmoTlhYnmoIfkvY3nva5cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlQ3Vyc29yUG9zaXRpb24ocHJldlBvcywgcHJldkN0cmxWYWx1ZSwgcmF3VmFsdWUsIGN0cmxWYWx1ZSwgeyBwbGFjZWhvbGRlckNoYXIgPSAnICcsIG1hc2tSZWcgPSAvXFxEL2csIHR5cGUgfSA9IHt9KSB7XG4gIGNvbnN0IHJlYWxDdHJsVmFsdWUgPSBub3JtYWxpemVTdHJpbmcocHJldkN0cmxWYWx1ZSk7XG4gIGNvbnN0IHJlYWxSYXdWYWx1ZSA9IG5vcm1hbGl6ZVN0cmluZyhyYXdWYWx1ZSk7XG4gIGNvbnN0IHBsYWNlaG9sZGVyQ2hhcnMgPSBBcnJheS5pc0FycmF5KHBsYWNlaG9sZGVyQ2hhcikgPyBwbGFjZWhvbGRlckNoYXIgOiBbcGxhY2Vob2xkZXJDaGFyXTtcblxuICBjb25zdCBlZGl0TGVuZ3RoID0gcmVhbFJhd1ZhbHVlLmxlbmd0aCAtIHJlYWxDdHJsVmFsdWUubGVuZ3RoO1xuICBjb25zdCBpc0FkZGl0aW9uID0gZWRpdExlbmd0aCA+IDA7XG5cbiAgbGV0IHBvcyA9IHByZXZQb3M7XG5cbiAgaWYgKGlzQWRkaXRpb24pIHtcbiAgICBjb25zdCBhZGRpdGlvblN0ciA9IHJlYWxSYXdWYWx1ZS5zdWJzdHJpbmcocG9zIC0gZWRpdExlbmd0aCwgcG9zKTtcbiAgICBsZXQgY3RybENoYXJDb3VudCA9IGFkZGl0aW9uU3RyLnJlcGxhY2UobWFza1JlZywgJycpLmxlbmd0aDtcbiAgICBwb3MgLT0gZWRpdExlbmd0aCAtIGN0cmxDaGFyQ291bnQ7XG5cbiAgICBsZXQgcGxhY2Vob2xkZXJDaGFyQ291bnQgPSAwO1xuICAgIHdoaWxlIChjdHJsQ2hhckNvdW50ID4gMCkge1xuICAgICAgaWYgKHBsYWNlaG9sZGVyQ2hhcnMuaW5kZXhPZihjdHJsVmFsdWUuY2hhckF0KHBvcyAtIGN0cmxDaGFyQ291bnQgKyBwbGFjZWhvbGRlckNoYXJDb3VudCkpICE9PSAtMSkge1xuICAgICAgICBwbGFjZWhvbGRlckNoYXJDb3VudCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3RybENoYXJDb3VudC0tO1xuICAgICAgfVxuICAgIH1cbiAgICBwb3MgKz0gcGxhY2Vob2xkZXJDaGFyQ291bnQ7XG4gIH1cblxuICBpZiAoKHR5cGUgPT09ICdtb2JpbGUnICYmIChwb3MgPT09IDQgfHwgcG9zID09PSA5KSkgfHwgKHR5cGUgPT09ICdiYW5rQ2FyZCcgJiYgcG9zID4gMCAmJiBwb3MgJSA1ID09PSAwKSkge1xuICAgIHBvcyAtPSAxO1xuICB9XG5cbiAgcmV0dXJuIHBvcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FsY3VsYXRlQ3Vyc29yUG9zaXRpb247XG4iXSwibmFtZXMiOlsicmVnIiwicmVnSWRDYXJkIiwiYmFzZVJlZyIsInN1bUNoZWNrQ29kZSIsImlzTmFOIl0sIm1hcHBpbmdzIjoiOzs7Ozs7RUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUMzQztFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7RUFDakMsRUFBRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pEOztFQ1hBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0VBQ3pCLEVBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0VBQ2pDOztFQ2xCQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLGVBQWUsQ0FBQyxLQUFLLEVBQUU7RUFDaEMsRUFBRSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ2pEOztFQ1JBO0VBQ0EsTUFBTUEsS0FBRyxHQUFHLG1CQUFtQixDQUFDO0FBQ2hDO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtFQUN6QixFQUFFLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENB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O0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRTtFQUN2QixFQUFFLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUMxQyxFQUFFLE9BQU9BLEtBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDNUI7O0VDdERBO0VBQ0EsTUFBTUEsS0FBRyxHQUFHLHVLQUF1SyxDQUFDO0FBQ3BMO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRTtFQUN0QixFQUFFLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUMxQyxFQUFFLE9BQU9BLEtBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDNUI7O0VDdENBO0VBQ0EsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDO0FBQzNCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtFQUMvQixFQUFFLElBQUksTUFBTSxDQUFDO0FBQ2I7RUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNkO0VBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQy9CLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2QyxJQUFJ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QyxDQUFDO0FBQ2xEO0VBQ0EsRUFBRSxPQUFPLFNBQVMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNsRjs7RUN4Q0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLFdBQVcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO0VBQzFGLEVBQUUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUM1QjtFQUNBO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxFQUFFO0VBQ2pDLElBQUksT0FBTyxHQUFHLENBQUM7RUFDZixHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzlDLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDdEM7RUFDQTtFQUNBLEVBQUUsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO0VBQ3BCLElBQUksT0FBTyxHQUFHLENBQUM7RUFD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RSxLQUFLLENBQUM7RUFDZixFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztFQUNmLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO0VBQ2YsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7QUFDakI7RUFDQTtFQUNBLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO0VBQ2YsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7RUFDZixFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztFQUNmLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0VBQ25CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO0FBQ3BCO0VBQ0E7RUFDQTtFQUNBLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO0VBQ2YsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7QUFDZjtFQUNBO0VBQ0EsRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7RUFDbkIsRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7RUFDbkIsQ0FBQyxDQUFDO0FBQ0Y7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxXQUFXLENBQUMsRUFBRSxFQUFFO0VBQ3pCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVB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V0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLEVBQUU7RUFDdkUsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQzlEOztFQ3RCQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRTtFQUNsQyxFQUFFLE1BQU0sU0FBUyxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDdEY7RUFDQSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0VBQy9CO0VBQ0EsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0VBQ3hDLEdBQUc7QUFDSDtFQUNBO0VBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQzdEOztFQ2hDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtFQUNyRCxFQUFFLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FB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
|
|
2648
|
+
//# sourceMappingURL=util-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util-helpers.js","sources":["../src/utils/type/isType.js","../src/utils/type/isString.js","../src/utils/convertToString.js","../src/isMobile.js","../src/isTelephone.js","../src/isPostcode.js","../src/isIdCard.js","../src/isEmail.js","../src/isQQ.js","../src/isWX.js","../src/isVehicle.js","../src/isBankCard.js","../src/isSocialCreditCode.js","../src/utils/config.js","../src/validatePassword.js","../src/isPassword.js","../src/isPassport.js","../src/isChinese.js","../src/isIPv4.js","../src/isIPv6.js","../src/isUrl.js","../src/isBusinessLicense.js","../src/isPromiseLike.js","../src/isHMCard.js","../src/isTWCard.js","../src/utils/constants.js","../src/utils/math.util.js","../src/utils/type/isNaN.js","../src/formatMoney.js","../src/utils/type/isUndefined.js","../src/utils/type/isNull.js","../src/utils/type/isNil.js","../src/normalizeString.js","../src/formatBankCard.js","../src/replaceChar.js","../src/numberToChinese.js","../src/bytesToSize.js","../src/parseIdCard.js","../src/blobToDataURL.js","../src/dataURLToBlob.js","../src/setDataURLPrefix.js","../src/safeDate.js","../src/formatMobile.js","../src/padZero.js","../src/utils/type/isNumber.js","../src/times.js","../src/plus.js","../src/minus.js","../src/divide.js","../src/round.js","../src/waitTime.js","../src/calculateCursorPosition.js"],"sourcesContent":["const toString = Object.prototype.toString;\n\n/**\n * 检测值的 `toString` 类型\n *\n * @private\n * @since 1.1.0\n * @param {*} value 检查值\n * @param {string} typename 类型名称\n * @returns {boolean} 返回值的 `toString` 类型是否匹配\n */\nfunction isType(value, typename) {\n return toString.call(value) === `[object ${typename}]`;\n}\n\nexport default isType;\n","import isType from './isType';\n\n/**\n * 检查值是否为String\n *\n * @static\n * @alias module:Type.isString\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为String\n * @example\n *\n * isString('abc')\n * // => true\n *\n * isString(1)\n * // => false\n */\nfunction isString(value) {\n return isType(value, 'String');\n}\n\nexport default isString;\n","import isString from './type/isString';\n\n/**\n * 转换为字符串\n *\n * @param {*} value 值\n * @returns {string} 字符串\n */\nfunction convertToString(value) {\n return isString(value) ? value : String(value);\n}\n\nexport default convertToString;\n","import convertToString from './utils/convertToString';\n\n// 手机号码 11位数字,以1开头,第二位是3456789其中一个,后面再加9个数字\nconst reg = /^1[3456789]\\d{9}$/;\n\n/**\n * 检测值是否为手机号码\n *\n * @static\n * @alias module:Validator.isMobile\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为手机号码\n * @example\n *\n * isMobile('13000000000');\n * // => true\n *\n * isMobile('13000');\n * // => false\n *\n */\nfunction isMobile(value) {\n const valueStr = convertToString(value);\n return reg.test(valueStr);\n}\n\nexport default isMobile;\n","import convertToString from './utils/convertToString';\n\n// 固定电话 支持区号和分机号 3~4位区号,以0开头;7~8位直播号,以2~9开头;1~6位分机号\nconst reg = /^(0\\d{2,3}\\-)?([2-9]\\d{6,7})(\\-\\d{1,6})?$/;\n\n/**\n * 检测值是否为固定电话\n *\n * @static\n * @alias module:Validator.isTelephone\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为固定电话\n * @example\n *\n * isTelephone('22033212');\n * // => true\n *\n * isTelephone('021-22033212');\n * // => true\n *\n * isTelephone('021-22033212-123');\n * // => true\n *\n * isTelephone('13000000000');\n * // => false\n *\n */\nfunction isTelephone(value) {\n const valueStr = convertToString(value);\n return reg.test(valueStr);\n}\n\nexport default isTelephone;\n","import convertToString from './utils/convertToString';\n\n// 邮政编码\nconst reg = /^\\d{6}$/;\n\n/**\n * 检测值是否为邮政编码,6位数字\n *\n * @static\n * @alias module:Validator.isPostcode\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为邮政编码\n * @example\n *\n * isPostcode('101111');\n * // => true\n *\n * isPostcode('123');\n * // => false\n *\n */\nfunction isPostcode(value) {\n const valueStr = convertToString(value);\n return reg.test(valueStr);\n}\n\nexport default isPostcode;\n","import convertToString from './utils/convertToString';\n\n// 身份证号正则\nconst regIdCard = /^[1-9]\\d{5}(19|20)?\\d{2}((0[1-9])|(1[012]))(([0-2][1-9])|10|20|30|31)\\d{3}(\\d|X)?$/i;\n\n/**\n * 校验码计算\n *\n * @private\n * @see 参考 {@link https://zh.wikipedia.org/wiki/中华人民共和国公民身份号码|中华人民共和国公民身份号码}\n * @see 参考 {@link https://baike.baidu.com/item/居民身份证号码|居民身份证号码}\n * @param {string} id 身份证号码\n * @returns {boolean} 校验码是否正确\n */\nfunction check(id) {\n let index, sum, num;\n for (sum = index = 0; index < 17; index++) {\n sum += (Math.pow(2, 17 - index) % 11) * Number(id[index]);\n }\n num = (12 - (sum % 11)) % 11;\n if (num < 10) {\n return num === Number(id[17]);\n } else {\n return id[17] == 'X';\n }\n}\n\n/**\n * 检测值是否为18位身份证号码。<br/>宽松模式下,支持15位身份证号码\n *\n * @static\n * @alias module:Validator.isIdCard\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式,支持15位身份证号码\n * @param {boolean} [options.checkCode=true] 是否校验最后一位校验码,仅支持18位身份证号码\n * @returns {boolean} 值是否为身份证号\n * @example\n *\n * isIdCard('130701199310302288');\n * // => true\n *\n * isIdCard('13070119931030228X');\n * // => false\n *\n * isIdCard('13070119931030228X', { checkCode: false }); // 不校验校验码\n * // => true\n *\n * isIdCard('320311770706001');\n * // => false\n *\n * isIdCard('320311770706001', { loose: true });\n * // => true\n *\n */\nfunction isIdCard(value, { loose = false, checkCode = true } = {}) {\n const valueStr = convertToString(value);\n if (valueStr.length === 15 && loose) {\n return regIdCard.test(valueStr);\n }\n\n if (valueStr.length === 18 && regIdCard.test(valueStr)) {\n if (checkCode) {\n return check(valueStr);\n }\n return true;\n }\n\n return false;\n}\n\nexport default isIdCard;\n","import convertToString from './utils/convertToString';\n\n// 邮箱\nconst reg = /^[\\da-z]+([\\-\\.\\_]?[\\da-z]+)*@[\\da-z]+([\\-\\.]?[\\da-z]+)*(\\.[a-z]{2,})+$/i;\n\n/**\n * 检测值是否为Email\n *\n * @static\n * @alias module:Validator.isEmail\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为Email\n * @example\n *\n * isEmail('1232@qq.com');\n * // => true\n *\n * isEmail('123@');\n * // => false\n *\n */\nfunction isEmail(value) {\n const valueStr = convertToString(value);\n return reg.test(valueStr);\n}\n\nexport default isEmail;\n","import convertToString from './utils/convertToString';\n\n// QQ号正则\nconst reg = /^[1-9]\\d{4,10}$/;\n\n/**\n * 检测值是否为QQ号,非0开头,5至11位数字\n *\n * @static\n * @alias module:Validator.isQQ\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为QQ号\n * @example\n *\n * isQQ('12345');\n * // => true\n *\n * isQQ('123');\n * // => false\n *\n */\nfunction isQQ(value) {\n const valueStr = convertToString(value);\n return reg.test(valueStr);\n}\n\nexport default isQQ;\n","import convertToString from './utils/convertToString';\n\n// 微信号 6至20位,以字母开头,字母,数字,减号(连接符),下划线\nconst reg = /^[a-z]([-_a-z0-9]{5,19})+$/i;\n\n/**\n * 检测值是否为微信号\n *\n * @static\n * @alias module:Validator.isWX\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为微信号\n * @example\n *\n * isWX('a12345');\n * // => true\n *\n * isWX('123');\n * // => false\n *\n */\nfunction isWX(value) {\n const valueStr = convertToString(value);\n return reg.test(valueStr);\n}\n\nexport default isWX;\n","import convertToString from './utils/convertToString';\n\n// 车牌号正则\nconst reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([A-Z0-9]{4}[A-Z0-9挂学警港澳]{1})|([A-Z0-9]{5}[DF])|([DF][A-Z0-9]{5}))$/;\n\n/**\n * 检测值是否为车牌号,支持新能源和非新能源车牌\n *\n * @static\n * @alias module:Validator.isVehicle\n * @see 参考 {@link https://baike.baidu.com/item/车牌号|车牌号}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为车牌号\n * @example\n *\n * isVehicle('京L12345');\n * // => true\n *\n * isVehicle('粤BD12345');\n * // => true\n *\n * isVehicle('粤BF12345');\n * // => true\n *\n * isVehicle('粤B12345D');\n * // => true\n *\n * isVehicle('粤B12345F');\n * // => true\n *\n */\nfunction isVehicle(value) {\n const valueStr = convertToString(value);\n return reg.test(valueStr);\n}\n\nexport default isVehicle;\n","import convertToString from './utils/convertToString';\n\n// 非0开头,10~21位数字\nconst reg = /^[1-9]\\d{9,20}$/;\n\n// 8~30位数字\nconst regLoose = /^\\d{8,30}$/;\n\n/**\n * 检测值是否为银行卡号。正常模式(非0开头,10~21位数字)宽松模式(8~30位数字)\n *\n * @static\n * @alias module:Validator.isBankCard\n * @see 参考 {@link https://kf.qq.com/faq/170112ABnm6b170112FvquAn.html|常用银行账号位数参考}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式,8~30位数字\n * @returns {boolean} 值是否为银行卡号\n * @example\n *\n * isBankCard('6228480402564890018');\n * // => true\n *\n * isBankCard('6228480402564890');\n * // => true\n *\n * isBankCard('123456789');\n * // => false\n *\n * isBankCard('123456789', { loose: true });\n * // => true\n *\n */\nfunction isBankCard(value, { loose = false } = {}) {\n const valueStr = convertToString(value);\n\n if (loose) {\n return regLoose.test(valueStr);\n }\n return reg.test(valueStr);\n}\n\nexport default isBankCard;\n","import convertToString from './utils/convertToString';\n\n// 基础规则,由18位数字和大写字母组成,不使用I、O、Z、S、V。\nconst baseReg = /^[\\dA-HJ-NPQRTUWXY]{2}\\d{6}[\\dA-HJ-NPQRTUWXY]{10}$/;\n\n// 基础字符组成\nconst baseCodeArr = '0123456789ABCDEFGHJKLMNPQRTUWXY'.split('');\n\n//加权因子\nconst weightFactor = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];\n\n/**\n * 获取字符位置\n *\n * @private\n * @param {string} code 字符\n * @returns {number} 字符所在基础字符的位置\n */\nfunction getBaseCodeIndex(code) {\n let ret;\n\n baseCodeArr.some((item, index) => {\n if (item === code) {\n ret = index;\n return true;\n }\n return false;\n });\n\n // @ts-ignore\n return ret;\n}\n\n/**\n * 计算校验码\n *\n * @private\n * @since 1.1.0\n * @param {string} preCode 统一代码前17位\n * @returns {string} 校验码\n */\nfunction sumCheckCode(preCode) {\n // const preCodeArr = preCode.split('');\n\n let total = 0;\n\n // 计算字符位置对应序号和加权因子的乘积,总和\n for (let i = 0; i < 17; i++) {\n // 字符位置对应的基础编码序号\n const index = getBaseCodeIndex(preCode[i]);\n // 加权因子\n const wf = weightFactor[i];\n // 计算序号和加权因子的乘积,并计算级数之和\n total += index * wf;\n }\n\n // 计算整数求余函数MOD\n const remainder = total % 31;\n // 校验码字符值序号\n const checkCodeIndex = 31 - remainder;\n\n return baseCodeArr[checkCodeIndex];\n}\n\n/**\n * 检测值是否为统一社会信用代码,也叫三证合一组织代码。由18位数字和大写字母组成,不使用I、O、Z、S、V。\n *\n * @static\n * @alias module:Validator.isSocialCreditCode\n * @see 参考 {@link https://zh.wikisource.org/zh-hans/GB_32100-2015_法人和其他组织统一社会信用代码编码规则|GB 32100-2015 法人和其他组织统一社会信用代码编码规则}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式。如果为true,不校验校验位。\n * @returns {boolean} 值是否为统一社会信用代码\n * @example\n *\n * isSocialCreditCode('91350100M000100Y43');\n * // => true\n *\n * isSocialCreditCode('91350100M000100Y4A');\n * // => false\n *\n * // 宽松模式,不校验校验位。所以也可以通过\n * isSocialCreditCode('91350100M000100Y4A', {loose: true});\n * // => true\n *\n */\nfunction isSocialCreditCode(value, { loose = false } = {}) {\n const valueStr = convertToString(value);\n\n const passBaseRule = baseReg.test(valueStr);\n\n // 宽松模式 或 基础规则不通过直接返回\n if (loose || !passBaseRule) {\n return passBaseRule;\n }\n\n // 前17位\n const preCode = valueStr.substring(0, 17);\n // 校验码\n const lastCode = valueStr.substring(valueStr.length - 1);\n // 计算校验码\n const checkCode = sumCheckCode(preCode);\n\n return lastCode === checkCode;\n}\n\nexport default isSocialCreditCode;\n","const config = {\n // 禁用warning提示\n disableWarning: true\n};\n\n/**\n * 设置禁止warning提示\n * @static\n * @alias module:Debug.formatBankCard\n * @since 3.6.1\n * @param {boolean} bool 是否禁止warning提示\n */\nfunction setDisableWarning(bool) {\n config.disableWarning = !!bool;\n}\n\nexport { config, setDisableWarning };\n","import { config } from './utils/config';\n\nconst regNumber = /[\\d]/;\nconst regLowerCaseLetter = /[a-z]/;\nconst regUpperCaseLetter = /[A-Z]/;\nconst regAllNumberAndLetter = /[\\d|a-z]/gi;\n\n/**\n * 是否包含数字\n *\n * @private\n * @param {string} val 检查的值\n * @returns {boolean} 是否包含数字\n */\nfunction hasNumber(val) {\n return regNumber.test(val);\n}\n\n/**\n * 是否包含小写字母\n *\n * @private\n * @param {string} val 检测的值\n * @returns {boolean} 是否包含小写字母\n */\nfunction hasLowerCaseLetter(val) {\n return regLowerCaseLetter.test(val);\n}\n\n/**\n * 是否包含大写字母\n *\n * @private\n * @param {string} val 检测的值\n * @returns {boolean} 是否包含大写字母\n */\nfunction hasUpperCaseLetter(val) {\n return regUpperCaseLetter.test(val);\n}\n\n/**\n * 是否为十六进制\n *\n * @private\n * @param {string} val 检测的值\n * @returns {boolean} 是否为十六进制\n */\nfunction hasHex(val) {\n return val.indexOf('\\\\x') > -1 || val.indexOf('\\\\u') > -1;\n}\n\n/**\n * 是否包含特殊字符\n *\n * @private\n * @param {string} val 检测的值\n * @param {string} [chars] 特殊字符\n * @returns {boolean} 是否包含特殊字符\n */\nfunction hasSpecialCharacter(val, chars = '') {\n if (!chars) {\n return false;\n }\n\n const specialChars = val.replace(regAllNumberAndLetter, '');\n const regChars = hasHex(chars) ? new RegExp(`[${chars}]`) : null;\n\n if (regChars) {\n return regChars.test(specialChars);\n }\n\n let ret = false;\n specialChars.split('').some((charItem) => {\n if (chars.indexOf(charItem) > -1) {\n ret = true;\n }\n return ret;\n });\n return ret;\n}\n\n/**\n * 是否包含非法字符\n *\n * @private\n * @param {string} val 检测的值\n * @param {string} chars 非法字符\n * @returns {boolean} 是否包含非法字符\n */\nfunction hasUnallowableCharacter(val, chars = '') {\n const specialChars = val.replace(regAllNumberAndLetter, '');\n\n if (!chars && specialChars) {\n return true;\n }\n\n const regChars = hasHex(chars) ? new RegExp(`[^${chars}]`) : null;\n if (regChars) {\n return regChars.test(specialChars);\n }\n let ret = false;\n specialChars.split('').some((charItem) => {\n if (chars.indexOf(charItem) === -1) {\n ret = true;\n }\n return ret;\n });\n return ret;\n}\n\n/**\n * @typedef {Object} PasswordContaines - 验证密码的包含内容\n * @property {boolean} number - 包含数字\n * @property {boolean} lowerCaseLetter - 包含小写字母\n * @property {boolean} upperCaseLetter - 包含大写字母\n * @property {boolean} specialCharacter - 包含特殊字符\n * @property {boolean} unallowableCharacter - 包含非法字符\n */\n\n/**\n * @typedef {Object} ValidatePasswordReturn - 验证结果\n * @property {boolean} validated - 验证结果,根据密码强度、是否包含非法字符得出\n * @property {number} level - 强度级别,包含数字/大小写字母/特殊字符\n * @property {PasswordContaines} containes - 包含内容\n */\n\n/**\n * 验证密码(数字、大小写字母、特殊字符、非法字符)\n *\n * @see 参考 {@link https://baike.baidu.com/item/ASCII#3|ASCII}\n * @static\n * @alias module:Validator.validatePassword\n * @since 3.7.0\n * @param {string} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {number} [options.level=2] 密码强度 1-包含一种字符 2-包含两种字符 3-包含三种字符。(大写字母、小写字母、数字、特殊字符)\n * @param {boolean} [options.ignoreCase=false] 是否忽略大小写,为 ture 时,大小写字母视为一种字符\n * @param {string} [options.special=\"!@#$%^&*()-=_+[]\\|{},./?<>~\"] 支持的特殊字符\n * @returns {ValidatePasswordReturn} 验证结果\n * @example\n *\n * validatePassword('a12345678');\n * // =>\n * {\n * validated: true, // 验证结果,根据密码强度、是否包含非法字符得出\n * level: 2, // 强度级别\n * containes: {\n * number: true, // 包含数字\n * lowerCaseLetter: true, // 包含小写字母\n * upperCaseLetter: false, // 包含大写字母\n * specialCharacter: false, // 包含特殊字符\n * unallowableCharacter: false // 包含非法字符\n * }\n * }\n *\n * validatePassword('a12345678', {level: 3});\n * // =>\n * {\n * validated: false,\n * level: 2,\n * containes: {\n * number: true,\n * lowerCaseLetter: true,\n * upperCaseLetter: false,\n * specialCharacter: false,\n * unallowableCharacter: false\n * }\n * }\n *\n * validatePassword('_Aa一二三45678', {level: 3, ignoreCase: true});\n * // =>\n * {\n * validated: false,\n * level: 3,\n * containes: {\n * number: true,\n * lowerCaseLetter: true,\n * upperCaseLetter: true,\n * specialCharacter: true,\n * unallowableCharacter: true\n * }\n * }\n *\n * // 自定义特殊字符\n * validatePassword('_Aa一二三45678', {level: 3, ignoreCase: true, special: '_一二三'});\n * // =>\n * {\n * validated: true,\n * level: 3,\n * containes: {\n * number: true,\n * lowerCaseLetter: true,\n * upperCaseLetter: true,\n * specialCharacter: true,\n * unallowableCharacter: false\n * }\n * }\n */\nfunction validatePassword(value, { level = 2, ignoreCase = false, special = '\\\\x21-\\\\x2F\\\\x3A-\\\\x40\\\\x5B-\\\\x60\\\\x7B-\\\\x7E' } = {}) {\n let valStr = value;\n\n if (typeof value !== 'string') {\n if (!config.disableWarning) {\n console.warn(`[validatePassword] value must be a string.`);\n }\n valStr = '';\n }\n\n let currentLevel = 0;\n\n // 包含数字\n const containesNumber = hasNumber(valStr);\n // 包含小写字母\n const containesLowerCaseLetter = hasLowerCaseLetter(valStr);\n // 包含大写字母\n const containesUpperCaseLetter = hasUpperCaseLetter(valStr);\n // 包含特殊字符\n const containesSpecialCharacter = hasSpecialCharacter(valStr, special);\n // 包含非法字符\n const containesUnallowableCharacter = hasUnallowableCharacter(valStr, special);\n\n if (containesNumber) {\n currentLevel += 1;\n }\n\n if (ignoreCase) {\n // 不区分大小写\n if (containesLowerCaseLetter || containesUpperCaseLetter) {\n currentLevel += 1;\n }\n } else {\n // 区分大小写\n if (containesLowerCaseLetter) {\n currentLevel += 1;\n }\n if (containesUpperCaseLetter) {\n currentLevel += 1;\n }\n }\n\n if (containesSpecialCharacter) {\n currentLevel += 1;\n }\n\n // 验证结果\n const validated = currentLevel >= level && !containesUnallowableCharacter;\n\n return {\n validated,\n level: currentLevel,\n containes: {\n number: containesNumber,\n lowerCaseLetter: containesLowerCaseLetter,\n upperCaseLetter: containesUpperCaseLetter,\n specialCharacter: containesSpecialCharacter,\n unallowableCharacter: containesUnallowableCharacter\n }\n };\n}\n\nexport default validatePassword;\n","import validatePassword from './validatePassword';\n\n/**\n * 检测值是否符合密码强度\n * <p><strong>注意:该校验只校验是否存在不同字符(大小写字母、数字、特殊符号),不判断长度。</strong></p>\n * <p><i>如果需要更细致的验证,请使用 <a href=\"#.validatePassword\">validatePassword</a></i></p>\n *\n * @see 参考 {@link https://baike.baidu.com/item/ASCII#3|ASCII}\n * @static\n * @alias module:Validator.isPassword\n * @since 1.1.0\n * @requires module:Validator.validatePassword\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {number} [options.level=2] 密码强度 1-包含一种字符 2-包含两种字符 3-包含三种字符。(大写字母、小写字母、数字、特殊字符)\n * @param {boolean} [options.ignoreCase=false] 是否忽略大小写,为 ture 时,大小写字母视为一种字符\n * @param {string} [options.special=\"!@#$%^&*()-=_+[]\\|{},./?<>~\"] 支持的特殊字符\n * @returns {boolean} 值是否符合密码强度\n * @example\n *\n * isPassword('a12345678');\n * // => true\n *\n * isPassword('a12345678', {level: 3});\n * // => false\n *\n * isPassword('Aa12345678', {level: 3});\n * // => true\n *\n * isPassword('Aa12345678', {level: 3, ignoreCase: true});\n * // => false\n *\n * isPassword('_Aa12345678', {level: 3, ignoreCase: true});\n * // => true\n *\n * // 仅支持 数字、字母、特殊字符,其他字符如中文字符是校验不通过的\n * isPassword('_Aa一二三45678', {level: 3, ignoreCase: true});\n * // => false\n *\n * isPassword(' _Aa12345678', {level: 3, ignoreCase: true});\n * // => false\n */\nfunction isPassword(value, { level = 2, ignoreCase = false, special = '\\\\x21-\\\\x2F\\\\x3A-\\\\x40\\\\x5B-\\\\x60\\\\x7B-\\\\x7E' } = {}) {\n return validatePassword(value, { level, ignoreCase, special }).validated;\n}\n\nexport default isPassword;\n","import convertToString from './utils/convertToString';\n\n// 护照号 9位,包括首字母和数字;支持 普通护照(E*)、外交护照(DE)、公务护照(SE)、公务普通护照(PE)、香港特区护照(K/KJ)、澳门特区护照(MA)\nconst reg = /^((e[\\da-z])|(de)|(se)|(pe)|(k[\\da-z])|(kj)|(ma))[\\da-z]{7}$/i;\n\n/**\n * 检测值是否为护照号\n * 支持普通护照(E*)、外交护照(DE)、公务护照(SE)、公务普通护照(PE)、香港特区护照(K/KJ)、澳门特区护照(MA)\n *\n * @static\n * @alias module:Validator.isPassport\n * @see 参考 {@link https://zh.wikipedia.org/wiki/中华人民共和国护照#个人资料页|中华人民共和国护照#个人资料页}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为护照号\n * @example\n *\n * isPassport('E12345678');\n * // => true\n *\n * isPassport('abc');\n * // => false\n *\n */\nfunction isPassport(value) {\n const valueStr = convertToString(value);\n return reg.test(valueStr);\n}\n\nexport default isPassport;\n","import convertToString from './utils/convertToString';\n\nconst chineseDictionary = {\n // 基本汉字\n chineseBasic: '[\\u4e00-\\u9fa5]',\n\n // 基本汉字补充\n chineseExtend: '[\\u9ea6-\\u9fef]',\n\n // 汉字扩展A\n chineseExtendA: '[\\u3400-\\u4DB5]',\n\n // 汉字扩展B\n chineseExtendB: '[\\u{20000}-\\u{2A6D6}]',\n\n // 汉字扩展C\n chineseExtendC: '[\\u{2A700}-\\u{2B734}]',\n\n // 汉字扩展D\n chineseExtendD: '[\\u{2B740}-\\u{2B81D}]',\n\n // 汉字扩展E\n chineseExtendE: '[\\u{2B820}-\\u{2CEA1}]',\n\n // 汉字扩展F\n chineseExtendF: '[\\u{2CEB0}-\\u{2EBE0}]'\n};\n\nlet looseChineseRegExp = chineseDictionary.chineseBasic + '+';\n\nlet chineseRegExp = '^' + chineseDictionary.chineseBasic + '+$';\n\n// eslint-disable-next-line no-prototype-builtins\nconst supportRegExpUnicode = RegExp.prototype.hasOwnProperty('unicode');\n\nif (supportRegExpUnicode) {\n looseChineseRegExp = '(?:' + chineseDictionary.chineseBasic + '|' + chineseDictionary.chineseExtend + '|' + chineseDictionary.chineseExtendA + '|' + chineseDictionary.chineseExtendB + '|' + chineseDictionary.chineseExtendC + '|' + chineseDictionary.chineseExtendD + '|' + chineseDictionary.chineseExtendE + '|' + chineseDictionary.chineseExtendF + ')+';\n chineseRegExp = '^(?:' + chineseDictionary.chineseBasic + '|' + chineseDictionary.chineseExtend + '|' + chineseDictionary.chineseExtendA + '|' + chineseDictionary.chineseExtendB + '|' + chineseDictionary.chineseExtendC + '|' + chineseDictionary.chineseExtendD + '|' + chineseDictionary.chineseExtendE + '|' + chineseDictionary.chineseExtendF + ')+$';\n}\n\n/**\n * 检测值是否为中文\n *\n * @static\n * @alias module:Validator.isChinese\n * @since 1.1.0\n * @see 参考 {@link http://www.unicode.org/reports/tr38/#BlockListing|4.4 Listing of Characters Covered by the Unihan Database}\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式。如果为true,只要包含中文即为true\n * @returns {boolean} 值是否为中文\n * @example\n *\n * isChinese('林某某');\n * // => true\n *\n * isChinese('林A');\n * // => false\n *\n * // 宽松模式,只要包含中文即为true\n * isChinese('林A', {loose: true});\n * // => true\n *\n * isChinese('A林A', {loose: true});\n * // => true\n *\n */\nfunction isChinese(value, { loose = false } = {}) {\n const valueStr = convertToString(value);\n const reg = new RegExp(loose ? looseChineseRegExp : chineseRegExp, supportRegExpUnicode ? 'u' : undefined);\n return reg.test(valueStr);\n}\n\nexport default isChinese;\n","import convertToString from './utils/convertToString';\n\n// ipv4正则\nconst reg = /^((\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n\n/**\n * 检测值是否为ipv4\n *\n * @static\n * @alias module:Validator.isIPv4\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为ipv4\n * @example\n *\n * isIPv4('192.168.1.1');\n * // => true\n *\n * isIPv4('255.255.255.255');\n * // => true\n *\n * isIPv4('256.256.256.256');\n * // => false\n *\n * isIPv4('0.0');\n * // => false\n *\n */\nfunction isIPv4(value) {\n const valueStr = convertToString(value);\n return reg.test(valueStr);\n}\n\nexport default isIPv4;\n","import convertToString from './utils/convertToString';\n\n// ipv6正则\nconst reg = /^((([0-9A-F]{1,4}:){7}([0-9A-F]{1,4}|:))|(([0-9A-F]{1,4}:){6}(:[0-9A-F]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3})|:))|(([0-9A-F]{1,4}:){5}(((:[0-9A-F]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3})|:))|(([0-9A-F]{1,4}:){4}(((:[0-9A-F]{1,4}){1,3})|((:[0-9A-F]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){3}(((:[0-9A-F]{1,4}){1,4})|((:[0-9A-F]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){2}(((:[0-9A-F]{1,4}){1,5})|((:[0-9A-F]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){1}(((:[0-9A-F]{1,4}){1,6})|((:[0-9A-F]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(:(((:[0-9A-F]{1,4}){1,7})|((:[0-9A-F]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:)))(%.+)?$/i;\n\n/**\n * 检测值是否为ipv6\n *\n * @static\n * @alias module:Validator.isIPv6\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为ipv6\n * @example\n *\n * // 冒分十六进制表示法\n * isIPv6('2001:0DB8:0000:0023:0008:0800:200C:417A');\n * // => true\n *\n * // 前导0省略\n * isIPv6('2001:DB8:0:23:8:800:200C:417A');\n * // => true\n *\n * isIPv6('FF01:0:0:0:0:0:0:1101');\n * // => true\n *\n * // 0位压缩表示法\n * isIPv6('FF01::1101');\n * // => true\n *\n * isIPv6('::1');\n * // => true\n *\n * isIPv6('::');\n * // => true\n *\n * isIPv6('0:0:0:0:0:0:0:1');\n * // => true\n *\n * isIPv6('0:0:0:0:0:0:0:0');\n * // => true\n *\n * // 内嵌IPv4地址表示法\n * isIPv6('::192.168.1.1');\n * // => true\n *\n * isIPv6('::FFFF:192.168.1.1');\n * // => true\n *\n * isIPv6('192.168.1.1');\n * // => false\n *\n */\nfunction isIPv6(value) {\n const valueStr = convertToString(value);\n return reg.test(valueStr);\n}\n\nexport default isIPv6;\n","import convertToString from './utils/convertToString';\n\n// url正则\nconst reg = /(((^https?:(?:\\/\\/)?)(?:[-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9.-]+(?::\\d+)?|(?:www.|[-;:&=\\+\\$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[\\+~%\\/.\\w-_]*)?\\??(?:[-\\+=&;%@.\\w_]*)#?(?:[\\w]*))?)$/;\n\n/**\n * 检测值是否为url\n *\n * @static\n * @alias module:Validator.isUrl\n * @since 3.4.0\n * @see 参考 {@link https://zh.wikipedia.org/wiki/统一资源定位符|统一资源定位符}\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为url\n * @example\n *\n * isUrl('');\n * // => false\n *\n * isUrl('8.8.8.8');\n * // => false\n *\n * isUrl('example.com');\n * // => true\n *\n * isUrl('http://example.com');\n * // => true\n *\n * isUrl('https://example.com:8080');\n * // => true\n *\n * isUrl('http://www.example.com/test/123');\n * // => true\n *\n * isUrl('http://www.example.com/test/123?foo=bar');\n * // => true\n */\nfunction isUrl(value) {\n const valueStr = convertToString(value);\n return reg.test(valueStr);\n}\n\nexport default isUrl;\n","import convertToString from './utils/convertToString';\n\n// 基础规则,由14位数字本体码和1位数字校验码组成,其中本体码从左至右依次为:6位首次登记机关码、8位顺序码。\nconst baseReg = /^\\d{15}$/;\n\n/**\n * 计算校验码\n *\n * @private\n * @since 3.5.0\n * @param {string} preCode 营业执照前14位\n * @returns {number} 校验码\n */\nfunction sumCheckCode(preCode) {\n let retNum; // 校验位数字\n\n let pj = 10; // Pj+1 11,初始为10\n\n for (let j = 0; j < 14; j++) {\n const sj = pj + Number(preCode[j]);\n let sj10 = sj % 10;\n sj10 = sj10 === 0 ? 10 : sj10;\n const pj1 = sj10 * 2;\n pj = pj1 % 11;\n }\n\n // 反模10计算\n if (pj === 10 || pj === 1) {\n retNum = 1;\n } else {\n retNum = 11 - pj;\n }\n\n return retNum;\n}\n\n/**\n * 检测值是否为营业执照号,也叫工商注册号。由14位数字本体码和1位数字校验码组成,其中本体码从左至右依次为:6位首次登记机关码、8位顺序码。\n *\n * @static\n * @alias module:Validator.isBusinessLicense\n * @see 参考 {@link https://wenku.baidu.com/view/19873704cc1755270722087c.html|GS15—2006 工商行政管理市场主体注册号编制规则}\n * @since 3.5.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式。如果为true,不校验校验位。\n * @returns {boolean} 值是否为营业执照号\n * @example\n *\n * isBusinessLicense('310115600985533');\n * // => true\n *\n * isBusinessLicense('3101156009');\n * // => false\n *\n * isBusinessLicense('3101156009', { loose: true });\n * // => false\n *\n * isBusinessLicense('310115600985535');\n * // => false\n *\n * isBusinessLicense('310115600985535', { loose: true });\n * // => true\n */\nfunction isBusinessLicense(value, { loose = false } = {}) {\n const valueStr = convertToString(value);\n\n const passBaseRule = baseReg.test(valueStr);\n\n // 宽松模式 或 基础规则不通过直接返回\n if (loose || !passBaseRule) {\n return passBaseRule;\n }\n\n // 前14位\n const preCode = valueStr.substring(0, 14);\n // 校验码\n const lastCode = valueStr.substring(valueStr.length - 1);\n // 计算校验码\n const checkCode = sumCheckCode(preCode);\n\n return lastCode === String(checkCode);\n}\n\nexport default isBusinessLicense;\n","/**\n * 检测值是否类似Promise对象\n *\n * @static\n * @alias module:Validator.isPromiseLike\n * @since 3.8.0\n * @param {*} obj 要检测的值\n * @returns {boolean} 是否类似Promise对象\n * @example\n *\n * isPromiseLike([]);\n * => false\n *\n * isPromiseLike({then:()=>{}});\n * => true\n *\n * isPromiseLike(Promise.resolve());\n * => true\n */\nfunction isPromiseLike(obj) {\n return obj !== null && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n\nexport default isPromiseLike;\n","import convertToString from './utils/convertToString';\n\n// 港澳居民来往内地通行证正则\nconst regHMCard = /^[hm]{1}([0-9]{10}|[0-9]{8})$/i;\n\n/**\n * 检测值是否为港澳居民来往内地通行证,俗称回乡证或回乡卡。\n *\n * @static\n * @alias module:Validator.isHMCard\n * @since 4.0.0\n * @see 参考 {@link https://zh.wikipedia.org/wiki/港澳居民来往内地通行证|港澳居民来往内地通行证}\n * @param {*} value 要检测的值\n * @returns {boolean} 是否为港澳居民来往内地通行证\n * @example\n * // 第一代 11 位\n * isHMCard('h3203117707') // true\n * isHMCard('H3203117707') // true\n * isHMCard('m3203117707') // true\n * isHMCard('M3203117707') // true\n *\n * // 第二代 9 位\n * isHMCard('h32031177') // true\n * isHMCard('H32031177') // true\n * isHMCard('m32031177') // true\n * isHMCard('M32031177') // true\n */\nfunction isHMCard(value) {\n const valueStr = convertToString(value);\n return regHMCard.test(valueStr);\n}\n\nexport default isHMCard;\n","import convertToString from './utils/convertToString';\n\n// 台湾居民来往大陆通行证正则,支持一次性短期台胞证\nconst regTWCard = /^(\\d{8}|[\\da-z]{10})$/i;\n\n/**\n * 检测值是否为台湾居民来往大陆通行证,俗称台胞证。\n *\n * @static\n * @alias module:Validator.isTWCard\n * @since 4.0.0\n * @see 参考 {@link https://zh.wikipedia.org/wiki/台湾居民来往大陆通行证|台湾居民来往大陆通行证}\n * @param {*} value 要检测的值\n * @returns {boolean} 是否为台湾居民来往大陆通行证\n * @example\n * isTWCard('12345678') // true\n * isTWCard('07257456') // true\n *\n * // 一次性短期\n * isTWCard('F290299977') // true\n */\nfunction isTWCard(value) {\n const valueStr = convertToString(value);\n return regTWCard.test(valueStr);\n}\n\nexport default isTWCard;\n","// 最大安全数字\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n// 最小安全数字\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n","/**\n * 参考: https://github.com/nefe/number-precision/blob/master/src/index.ts\n *\n * 解决浮动运算问题,避免小数点后产生多位数和计算精度损失。\n * 问题示例:2.3 + 2.4 = 4.699999999999999,1.0 - 0.9 = 0.09999999999999998\n */\n\nimport { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } from './constants';\nimport { config } from './config';\n\n/**\n * 是否为科学计数法数字\n *\n * @param {string} num 检查值\n * @returns {boolean}\n */\nexport function isScientificNumber(num) {\n return /\\d+\\.?\\d*e[\\+\\-]*\\d+/i.test(num);\n}\n\n/**\n * 把错误的数据转正\n *\n * @param {number} num 输入数\n * @param {number} [precision=12] 小数点的精度\n * @returns {number}\n * @example\n *\n * strip(0.09999999999999998)=0.1\n */\nexport function strip(num, precision = 12) {\n return +parseFloat(num.toPrecision(precision));\n}\n\n/**\n * 计算数字的小数点长度,支持科学记数法\n *\n * @param {number|string} num 输入数\n * @returns {number} 小数点长度\n */\nexport function digitLength(num) {\n // Get digit length of e\n const eSplit = num.toString().split(/e/i);\n const len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0);\n return len > 0 ? len : 0;\n}\n\n/**\n * 把小数转成整数,支持科学计数法。如果是小数则放大成整数\n *\n * @param {number|string} num 输入数\n * @returns {number}\n */\nexport function float2Fixed(num) {\n if (!isScientificNumber(num.toString())) {\n return Number(num.toString().replace('.', ''));\n }\n const dLen = digitLength(num);\n return dLen > 0 ? strip(+num * Math.pow(10, dLen)) : +num;\n}\n\n/**\n * 检测数字是否越界,如果越界给出提示\n * @param {number} num 输入数\n * @returns\n */\nexport function checkBoundary(num) {\n if (+num > MAX_SAFE_INTEGER || +num < MIN_SAFE_INTEGER) {\n if (!config.disableWarning) {\n console.warn(`${num} is beyond boundary when transfer to integer, the results may not be accurate`);\n }\n }\n}\n\n/**\n * 去掉左边数字0\n *\n * @param {string} num 数字字符串\n * @returns {string}\n */\nexport function trimLeftZero(num) {\n const reg = /^([+-])?(0+)([0-9\\.]+)$/;\n const result = reg.exec(num);\n\n let sign;\n\n if (result) {\n sign = result[1] || '';\n return sign + (result[3][0] === '.' ? '0' + result[3] : result[3]);\n }\n\n return num;\n}\n\n/**\n * 科学计数法转换成普通数字\n *\n * JavaScript在以下情景会自动将数值转换为科学计数法:\n * 1.小数点前的数字个数大于等于22位\n * 2.小数点前边是0,小数点后十分位(包含十分位)之后连续零的个数大于等于6个\n *\n * @param {string | number} num 科学计数法数字\n * @returns {string} 转换后的数字字符串\n */\nexport function scientificToNumber(num) {\n if (isScientificNumber(num.toString())) {\n const zero = '0';\n const parts = String(num).toLowerCase().split('e');\n const e = parts.pop(); // 存储指数\n // @ts-ignore\n const l = Math.abs(e); // 取绝对值,l-1就是0的个数\n // @ts-ignore\n const sign = e / l; //判断正负\n const coeff_array = parts[0].split('.'); // 将系数按照小数点拆分\n\n //如果是小数\n if (sign === -1) {\n //拼接字符串,如果是小数,拼接0和小数点\n num = zero + '.' + new Array(l).join(zero) + coeff_array.join('');\n } else {\n const dec = coeff_array[1];\n\n //如果是整数,将整数除第一位之外的非零数字计入位数,相应的减少0的个数\n if (l - dec.length < 0) {\n num = trimLeftZero(coeff_array[0] + dec.substring(0, l)) + '.' + dec.substring(l);\n } else {\n //拼接字符串,如果是整数,不需要拼接小数点\n num = coeff_array.join('') + new Array(l - dec.length + 1).join(zero);\n }\n }\n }\n // @ts-ignore\n return num;\n}\n","import isType from './isType';\n\n/**\n * 检查值是否为NaN\n *\n * @static\n * @alias module:Type.isNaN\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为NaN\n * @example\n *\n * isNaN(NaN)\n * // => true\n *\n * isNaN(1)\n * // => false\n */\nfunction _isNaN(value) {\n return isType(value, 'Number') && isNaN(value);\n}\n\nexport default _isNaN;\n","import { checkBoundary, scientificToNumber, isScientificNumber } from './utils/math.util';\nimport isNaN from './utils/type/isNaN';\nimport { trimLeftZero } from './utils/math.util';\nimport { config } from './utils/config';\n\nconst reg = /^[+-]?\\d*\\.?\\d*$/;\n\n/**\n * 检查数字或数字字符串\n *\n * @private\n * @param {string} num\n * @returns 是否为数字\n */\nfunction checkNumber(num) {\n if (!(reg.test(num) || isScientificNumber(num)) || isNaN(num) || (typeof num !== 'number' && typeof num !== 'string') || num === '') {\n if (!config.disableWarning) {\n console.warn(`${num} invalid parameter.`);\n }\n\n return false;\n }\n\n // 数字超限如果不是是字符串,可能有异常\n // 如 1111111111111111111111 // => 1.1111111111111111e+21\n if (typeof num === 'number') {\n checkBoundary(num);\n }\n\n return true;\n}\n\n/**\n * 格式化整数部分\n *\n * @private\n * @param {string} intStr 数字字符串\n * @param {string} thousand 千分位符号\n * @returns 格式化后的值\n */\nfunction formatInt(intStr, thousand) {\n let txt = '';\n intStr = trimLeftZero(intStr);\n intStr = intStr[0] === '+' ? intStr.substring(1) : intStr; // 去掉+符号\n const negativeSymbol = Number(intStr) < 0 ? '-' : '';\n const reArr = negativeSymbol ? intStr.substring(1).split('').reverse() : intStr.split('').reverse();\n\n for (let i = 0; i < reArr.length; i++) {\n txt += reArr[i] + ((i + 1) % 3 === 0 && i + 1 !== reArr.length ? thousand : '');\n }\n\n return negativeSymbol + txt.split('').reverse().join('');\n}\n\n/**\n * 格式化小数部分,如果使用 toFixed,超大额数字会自动被截断\n *\n * @private\n * @param {string} decStr 小数点部分的字符串\n * @param {number} precision 保留位数\n * @param {string} decimal 小数点符号\n * @returns 格式化后的值\n */\nfunction formatDec(decStr, precision, decimal) {\n if (precision === 0) {\n return '';\n }\n\n const zero = 0;\n let ret = '';\n\n if (decStr && Number(decStr) > 0) {\n let tmpNum = parseFloat('0.' + decStr);\n ret = tmpNum.toFixed(precision).substring(2);\n } else {\n ret = zero.toFixed(precision).substring(2);\n }\n\n return decimal + ret;\n}\n\n/**\n * 格式化金额\n *\n * @static\n * @alias module:Processor.formatMoney\n * @since 1.1.0\n * @param {string | number} num 需转换金额 (最大:9007199254740991 最小: -9007199254740991)\n * @param {Object} [options] - 金额格式化配置\n * @param {string | number} [options.precision=2] - 保留位数 (最高:10位)\n * @param {string} [options.symbol] - 货币符号\n * @param {string} [options.thousand=\",\"] - 千分位符号\n * @param {string} [options.decimal=\".\"] - 小数位符号\n * @returns {string} 格式化的金额\n * @example\n *\n * // 整数\n * formatMoney('1000');\n * // => 1,000.00\n *\n * // 小数(默认保留2位小数)\n * formatMoney('3000.03');\n * // => 3,000.03\n *\n * // 保留4位小数\n * formatMoney('3000.0300', { precision: 4 });\n * // => 3,000.0300\n *\n * // 保留10位小数\n * formatMoney('1500.2', { precision: 10 });\n * // => 1,500.2000000000\n *\n * // 自定义单位符号\n * formatMoney(1000.00, { symbol: '$' });\n * // => $1,000.00\n *\n * // 自定义千位分割符(默认',')\n * formatMoney(1000.00, { thousand: '|' });\n * // => 1|000.00\n *\n * // 自定义小数位分割符(默认'.')\n * formatMoney(1000.00, { decimal: '&' });\n * // => 1,000&00\n */\nconst formatMoney = (num, { precision = 2, symbol, thousand = ',', decimal = '.' } = {}) => {\n // 数字参数不正确,返回空字符串\n // @ts-ignore\n if (!checkNumber(num)) {\n return '';\n }\n\n // 参数规整化\n if (typeof precision !== 'number' || isNaN(precision) || precision < 0) {\n precision = 2;\n } else if (precision > 10) {\n precision = 10;\n }\n symbol = typeof symbol === 'string' ? symbol : '';\n thousand = typeof thousand === 'string' ? thousand : ',';\n decimal = typeof decimal === 'string' ? decimal : '.';\n\n // 转换数字字符串,支持科学记数法\n const numStr = scientificToNumber(num) + '';\n // 整数和小数部分\n const [intStr, decStr] = numStr.split('.');\n\n return symbol + formatInt(intStr, thousand) + formatDec(decStr, precision, decimal);\n};\n\nexport default formatMoney;\n","/**\n * 检查值是否为Undefined\n *\n * @static\n * @alias module:Type.isUndefined\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为Undefined\n * @example\n *\n * isUndefined(undefined)\n * // => true\n *\n * isUndefined(void 0)\n * // => true\n *\n * isUndefined(null)\n * // => false\n */\nfunction isUndefined(value) {\n return value === void 0;\n}\n\nexport default isUndefined;\n","/**\n * 检查值是否为Null\n *\n * @static\n * @alias module:Type.isNull\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为Null\n * @example\n *\n * isNull(null)\n * // => true\n *\n * isNull(void 0)\n * // => false\n */\nfunction isNull(value) {\n return value === null;\n}\n\nexport default isNull;\n","import isUndefined from './isUndefined';\nimport isNull from './isNull';\n\n/**\n * 检查值是否为 undefined 或 null\n *\n * @static\n * @alias module:Type.isNaN\n * @since 4.3.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为 undefined 或 null\n */\nfunction isNil(value) {\n return isUndefined(value) || isNull(value);\n}\n\nexport default isNil;\n","import isNil from './utils/type/isNil';\nimport convertToString from './utils/convertToString';\n\n/**\n * 规整化字符串。如果值为 undefined 或 null 将转为空字符串,如果值不是字符串类型将转为字符串。\n *\n * @static\n * @alias module:Processor.normalizeString\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String#string_instances|String}\n * @since 4.3.0\n * @param {*} value 待处理的值\n * @returns {string} 规整化的值\n * @example\n * normalizeString(); // ''\n * normalizeString(undefined); // ''\n * normalizeString(void 0); // ''\n * normalizeString(null); // ''\n *\n * normalizeString(true); // 'true'\n * normalizeString(NaN); // 'NaN'\n * normalizeString(1); // '1'\n * normalizeString('a'); // 'a'\n */\nfunction normalizeString(value) {\n if (isNil(value)) {\n return '';\n }\n return convertToString(value);\n}\n\nexport default normalizeString;\n","import normalizeString from './normalizeString';\n\n/**\n * 格式化银行卡号\n *\n * @static\n * @alias module:Processor.formatBankCard\n * @since 1.1.0\n * @param {string} bankCardNo 要处理的字符串\n * @param {Object} [options] 配置项\n * @param {string} [options.char=\" \"] 间隔字符\n * @param {number} [options.length=4] 间隔长度\n * @returns {string} 格式化的银行卡号\n * @example\n *\n * // 19位银行卡\n * formatBankCard('6228480402564890018');\n * // => 6228 4804 0256 4890 018\n *\n * // 16位银行卡\n * formatBankCard('6228480402564890');\n * // => 6228 4804 0256 4890\n *\n * // 脱敏银行卡\n * formatBankCard('6228********890');\n * // => 6228 **** **** 890\n *\n * // 16位银行卡,\"-\"间隔\n * formatBankCard('6228480402564890', {char: '-'});\n * // => 6228-4804-0256-4890\n *\n */\nfunction formatBankCard(bankCardNo = '', { char = ' ', length = 4 } = {}) {\n const reg = new RegExp(`(.{${length}})`, 'g');\n const regChar = new RegExp(`${char}`, 'g');\n\n const realValue = normalizeString(bankCardNo).replace(regChar, '');\n const str = realValue.replace(reg, `$1${char}`);\n\n return realValue.length % length === 0 ? str.substring(0, str.length - 1) : str;\n}\n\nexport default formatBankCard;\n","/**\n * 替换字符,应用场景如:脱敏\n *\n * @static\n * @alias module:Processor.replaceChar\n * @since 1.1.0\n * @param {string} str 要处理的字符串\n * @param {Object} [options] 配置项\n * @param {number} [options.start=3] 开始位置\n * @param {number} [options.end=-4] 结束位置\n * @param {string} [options.char=\"*\"] 替换字符\n * @param {number} [options.repeat] 替换字符的重复次数,默认为替换内容长度,可设置为固定值\n * @param {string} [options.exclude] 排除字符,如果指定排除项,repeat设置无效\n * @returns {string} 处理后的字符\n * @example\n *\n * // 手机号\n * replaceChar('13000000000');\n * // => 130****0000\n *\n * // 身份证\n * replaceChar('130701199310302288');\n * // => 130***********2288\n *\n * // 邮箱\n * const email = '12345@qq.com'\n * replaceChar(email, {start: 2, end: email.indexOf('@'), repeat: 4});\n * // => 12****@qq.com\n *\n * // 银行卡号\n * replaceChar('6228480402564890018', {start: 0, end: -4, repeat: 4});\n * // => ****0018\n *\n * // 带格式的银行卡号\n * replaceChar('6228 4804 0256 4890 018', {start: 4, end: -4, exclude: ' '});\n * // => 6228 **** **** **** 018\n *\n * // 用户名\n * replaceChar('林某某', {start: 1, end: Infinity, repeat: 2});\n * // => 林**\n * replaceChar('林某', {start: 1, end: Infinity, repeat: 2});\n * // => 林**\n * replaceChar('林某某某', {start: 1, end: Infinity, repeat: 2});\n * // => 林**\n *\n */\nfunction replaceChar(str = '', { start = 3, end = -4, char = '*', repeat, exclude } = {}) {\n const strLen = str.length;\n\n // 开始位置超过str长度\n if (Math.abs(start) >= strLen) {\n return str;\n }\n\n start = start >= 0 ? start : strLen + start;\n end = end >= 0 ? end : strLen + end;\n\n // 开始位置大于结束位置\n if (start >= end) {\n return str;\n }\n\n let middleStr = str.substring(start, end);\n\n if (exclude) {\n const reg = new RegExp(`[^${exclude}]`, 'g');\n middleStr = middleStr.replace(reg, char);\n } else {\n repeat = typeof repeat === 'number' && repeat >= 0 ? repeat : middleStr.length;\n middleStr = char.repeat(repeat);\n }\n\n return str.substring(0, start) + middleStr + str.substring(end);\n}\n\nexport default replaceChar;\n","import { checkBoundary } from './utils/math.util';\nimport { config } from './utils/config';\n\n// 简体\nconst chnNumberChar = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];\nconst chnUnitChar = ['', '十', '百', '千'];\n\n// 繁体\nconst big5NumberChar = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];\nconst big5UnitChar = ['', '拾', '佰', '仟'];\n\n// 数字字符、计数单位\n\n/**\n * @type {string[]}\n * @private\n */\nlet numberChar;\n\n/**\n * @type {string[]}\n * @private\n */\nlet unitChar;\n\n/**\n * @type {string[]}\n * @private\n */\nlet unitSection;\n\n/**\n * 每个小节的内部进行转化\n *\n * @private\n * @param {number} section 数字\n * @returns {string} 转化的数字\n */\nfunction sectionToChinese(section) {\n let str = '',\n chnstr = '',\n zero = false, //zero为是否进行补零, 第一次进行取余由于为个位数,默认不补零\n unitPos = 0;\n\n while (section > 0) {\n // 对数字取余10,得到的数即为个位数\n let v = section % 10;\n\n //如果数字为零,则对字符串进行补零\n if (v == 0) {\n if (zero) {\n //如果遇到连续多次取余都是0,那么只需补一个零即可\n zero = false;\n chnstr = numberChar[v] + chnstr;\n }\n } else {\n //第一次取余之后,如果再次取余为零,则需要补零\n zero = true;\n str = numberChar[v];\n str += unitChar[unitPos];\n chnstr = str + chnstr;\n }\n unitPos++;\n section = Math.floor(section / 10);\n }\n return chnstr;\n}\n\n/**\n * 转换整数\n *\n * @private\n * @param {number} num 要转换的数字\n * @returns {string} 中文数字\n */\nfunction convertInteger(num) {\n num = Math.floor(num);\n\n let unitPos = 0;\n let strIns = '',\n chnStr = '';\n let needZero = false;\n\n if (num === 0) {\n return numberChar[0];\n }\n while (num > 0) {\n var section = num % 10000;\n if (needZero) {\n chnStr = numberChar[0] + chnStr;\n }\n strIns = sectionToChinese(section);\n strIns += section !== 0 ? unitSection[unitPos] : unitSection[0];\n chnStr = strIns + chnStr;\n needZero = section < 1000 && section > 0;\n num = Math.floor(num / 10000);\n unitPos++;\n }\n return chnStr;\n}\n\n/**\n * 转换小数\n *\n * @private\n * @param {number} num 要转换的数字\n */\nfunction convertDecimal(num) {\n const numStr = num + '';\n const index = numStr.indexOf('.');\n\n let ret = '';\n\n if (index > -1) {\n let decimalStr = numStr.slice(index + 1);\n ret = mapNumberChar(parseInt(decimalStr));\n }\n\n return ret;\n}\n\n/**\n * 映射为中文数字\n *\n * @private\n * @param {number} num 要处理的数字\n * @returns {string} 返回中文数字的映射\n */\nfunction mapNumberChar(num) {\n const numStr = num + '';\n let ret = '';\n\n for (let i = 0, len = numStr.length; i < len; i++) {\n ret += numberChar[parseInt(numStr[i])];\n }\n\n return ret;\n}\n\n/**\n * 数字转中文数字\n * 不在安全数字 -9007199254740991~9007199254740991 内,处理会有异常\n *\n * @static\n * @alias module:Processor.numberToChinese\n * @since 1.2.0\n * @param {number} num 数字\n * @param {Object} [options] 配置项\n * @param {boolean} [options.big5=false] 繁体\n * @param {boolean} [options.unit=true] 计数单位\n * @param {string} [options.decimal=\"点\"] 中文小数点\n * @param {string} [options.zero=\"零\"] 设置0。常用配置 〇\n * @param {string} [options.negative=\"负\"] 负数前面的字\n * @param {Object} [options.unitConfig] 节点单位配置\n * @param {string} [options.unitConfig.w=\"万\"] 设置计数单位万。常用配置 萬\n * @param {string} [options.unitConfig.y=\"亿\"] 设置计数单位亿。常用配置 億\n * @returns {string} 中文数字\n * @example\n *\n * numberToChinese(100);\n * // => 一百\n *\n * numberToChinese(100.3);\n * // => 一百点三\n *\n * // 繁体\n * numberToChinese(100, {big5: true});\n * // => 壹佰\n *\n * numberToChinese(100.3, {big5: true});\n * // => 壹佰点叁\n *\n * numberToChinese(1234567890, {big5: true});\n * // => 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾\n *\n * // 不带计数单位\n * numberToChinese(1990, {unit: false});\n * // => 一九九零\n *\n * // 不带计数单位,修改0\n * numberToChinese(1990, {unit: false, zero:'〇'});\n * // => 一九九〇\n *\n */\nfunction numberToChinese(\n num,\n {\n big5 = false,\n unit = true,\n decimal = '点',\n zero = '',\n negative = '负',\n unitConfig = {\n w: '万', // '萬'\n y: '亿' // '億'\n }\n } = {}\n) {\n // 非数字 或 NaN 不处理\n if (typeof num !== 'number' || isNaN(num)) {\n if (!config.disableWarning) {\n console.warn(`参数错误 ${num},请传入数字`);\n }\n\n return '';\n }\n\n // 超过安全数字提示\n checkBoundary(num);\n\n // 设置数字字符和计数单位\n if (big5) {\n numberChar = big5NumberChar.slice();\n unitChar = big5UnitChar.slice();\n } else {\n numberChar = chnNumberChar.slice();\n unitChar = chnUnitChar.slice();\n }\n\n // 设置节点计数单位,万、亿、万亿\n const defaultUnitWan = '万';\n const defaultUnitYi = '亿';\n unitSection = ['', unitConfig.w || defaultUnitWan, unitConfig.y || defaultUnitYi, unitConfig.w && unitConfig.y ? unitConfig.w + unitConfig.y : defaultUnitWan + defaultUnitYi];\n\n // 设置0\n if (zero) {\n numberChar[0] = zero;\n }\n\n // 前置字符,负数处理\n const preStr = num < 0 ? negative : '';\n\n // 整数和小数\n let chnInteger, chnDecimal;\n\n // 处理整数\n if (unit) {\n chnInteger = convertInteger(num);\n } else {\n chnInteger = mapNumberChar(Math.floor(num));\n }\n\n // 处理小数\n chnDecimal = convertDecimal(num);\n\n return chnDecimal ? `${preStr}${chnInteger}${decimal}${chnDecimal}` : `${preStr}${chnInteger}`;\n}\n\nexport default numberToChinese;\n","/**\n * 字节转换存储单位,保留2位小数点\n *\n * @static\n * @alias module:Processor.bytesToSize\n * @since 3.8.0\n * @param {number} bytes 字节大小\n * @returns {string} 存储单位值\n * @example\n *\n * bytesToSize(0);\n * // => 0 B\n *\n * bytesToSize(1024);\n * // => 1 KB\n *\n * bytesToSize(3.213243*1024*1024);\n * // => 3.21 MB\n *\n * bytesToSize(1024*1024*1024);\n * // => 1 GB\n */\nfunction bytesToSize(bytes) {\n if (bytes === 0) return '0 B';\n const k = 1024;\n // 存储单位\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return sizes[i] ? `${Number((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}` : bytes + '';\n}\n\nexport default bytesToSize;\n","import isIdCard from './isIdCard';\n\nconst regIdCard = /^(?<province>\\d{2})(?<city>\\d{2})(?<area>\\d{2})(?<year>(?:\\d{2})?\\d{2})(?<month>\\d{2})(?<day>\\d{2})\\d{2}(?<gender>\\d)(?:\\d|X)?$/i;\n\nconst Provinces = [\n // 华北地区:北京市|110000,天津市|120000,河北省|130000,山西省|140000,内蒙古自治区|150000\n ['11', '北京市'],\n ['12', '天津市'],\n ['13', '河北省'],\n ['14', '山西省'],\n ['15', '内蒙古自治区'],\n\n // 东北地区: 辽宁省|210000,吉林省|220000,黑龙江省|230000\n ['21', '辽宁省'],\n ['22', '吉林省'],\n ['23', '黑龙江省'],\n\n // 华东地区: 上海市|310000,江苏省|320000,浙江省|330000,安徽省|340000,福建省|350000,江西省|360000,山东省|370000\n ['31', '上海市'],\n ['32', '江苏省'],\n ['33', '浙江省'],\n ['34', '安徽省'],\n ['35', '福建省'],\n ['36', '江西省'],\n ['37', '山东省'],\n\n // 华中地区: 河南省|410000,湖北省|420000,湖南省|430000\n ['41', '河南省'],\n ['42', '湖北省'],\n ['43', '湖南省'],\n\n // 华南地区:广东省|440000,广西壮族自治区|450000,海南省|460000\n ['44', '广东省'],\n ['45', '广西壮族自治区'],\n ['46', '海南省'],\n\n // 西南地区:重庆市|500000,四川省|510000,贵州省|520000,云南省|530000,西藏自治区|540000\n ['50', '重庆市'],\n ['51', '四川省'],\n ['52', '贵州省'],\n ['53', '云南省'],\n ['54', '西藏自治区'],\n\n // 西北地区: 陕西省|610000,甘肃省|620000,青海省|630000,宁夏回族自治区|640000,新疆维吾尔自治区|650000\n ['61', '陕西省'],\n ['62', '甘肃省'],\n ['63', '青海省'],\n ['64', '宁夏回族自治区'],\n ['65', '新疆维吾尔自治区'],\n\n // 台湾地区:台湾省|710000\n // 台湾居民公民身份号码地址码为830000,参考 http://www.wanweibaike.com/wiki-中华人民共和国行政区划代码_(7区)、https://zh.wikipedia.org/wiki/港澳台居民居住证\n ['71', '台湾省'],\n ['83', '台湾省'],\n\n // 港澳地区:香港特别行政区|810000,澳门特别行政区|820000\n ['81', '香港特别行政区'],\n ['82', '澳门特别行政区']\n];\n\n// 第一位数字是以前的大区制代码。第二位是大区所在省市编码。全国共分为8个大区:华北(1)、东北(2)、华东(3)、中南(4)、西南(5)、西北(6)、台湾(7)和港澳(8)。\n// const Regions = [\n// ['1', '华北地区'],\n// ['2', '东北地区'],\n// ['3', '华东地区'],\n// ['4', '中南地区'],\n// ['5', '西南地区'],\n// ['6', '西北地区'],\n// ['7', '台湾地区'],\n// ['8', '港澳地区']\n// ];\n\n/**\n * @typedef {Object} IdCardOrigin - 解析身份证原数据\n * @property {string} province - 省份编码\n * @property {string} city - 城市编码\n * @property {string} area - 地区编码\n * @property {string} year - 出生年\n * @property {string} month - 出生月\n * @property {string} day - 出生日\n * @property {string} gender - 性别 能整除2为女,否则为男\n */\n\n/**\n * @typedef {Object} IdCardInfo - 身份证信息\n * @property {string} province - 省份\n * @property {string} birthday - 生日\n * @property {string} gender - 性别\n * @property {IdCardOrigin} origin - 解析身份证原数据\n */\n\n/**\n * 解析身份证号码,支持15、18位身份证号码\n *\n * @static\n * @alias module:Processor.parseIdCard\n * @since 4.0.0\n * @see 参考 {@link https://baike.baidu.com/item/居民身份证号码|居民身份证号码}\n * @param {string} id 身份证号码,支持15位\n * @returns {null|IdCardInfo} null 或 省份、生日、性别,省/市/区/年/月/日/性别编码\n * @example\n * parseIdCard('123456789123456');\n * // => null\n *\n * // 18位身份证号码\n * parseIdCard('130701199310302288')\n * // =>\n * {\n * birthday: \"1993-10-30\",\n * gender: \"女\",\n * origin: { province: \"13\", city: \"07\", area: \"01\", year: \"1993\", month: \"10\", day: \"30\", gender: \"8\" },\n * province: \"河北省\"\n * }\n *\n * // 15位身份证号码\n * parseIdCard('130701931030228');\n * // =>\n * {\n * birthday: \"93-10-30\",\n * gender: \"女\",\n * origin: { province: \"13\", city: \"07\", area: \"01\", year: \"93\", month: \"10\", day: \"30\", gender: \"8\" },\n * province: \"河北省\"\n * }\n *\n */\nfunction parseIdCard(id) {\n if (!isIdCard(id, { loose: true })) {\n return null;\n }\n\n const info = regIdCard.exec(id);\n\n if (!info) {\n return null;\n }\n\n /**\n * @type {{ province: string, city: string, area: string, year: string, month: string, day: string, gender: string }}\n *\n */\n let origin = {\n province: '',\n city: '',\n area: '',\n year: '',\n month: '',\n day: '',\n gender: ''\n };\n\n if (info.groups) {\n // @ts-ignore\n origin = info.groups;\n } else {\n origin = {\n province: info[1],\n city: info[2],\n area: info[3],\n year: info[4],\n month: info[5],\n day: info[6],\n gender: info[7]\n };\n }\n\n const province = Provinces.find((item) => item[0] === origin.province);\n\n if (!province) {\n return null;\n }\n\n const birthday = `${origin.year}-${origin.month}-${origin.day}`;\n const gender = Number(origin.gender) % 2 === 0 ? '女' : '男';\n // const region = Regions.find(item => item[0] === origin.province?.substring(0, 1));\n\n return {\n // region,\n province: province[1],\n birthday,\n gender,\n origin\n };\n}\n\nexport default parseIdCard;\n","// file、blob文件如何预览图片?\n// 方法1:将file或者blob类型文件转成base64数据,再作为src赋值给img标签\n// 方法2:使用 window.URL.createObjectURL(blob) 为blob、file 创建一个指向该参数对象的URL\n\n/**\n * 将 Blob 或 File 对象转成 data:URL 格式的 Base64 字符串。\n *\n * @static\n * @alias module:Processor.blobToDataURL\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader/readAsDataURL|FileReader.readAsDataURL()}\n * @since 4.1.0\n * @param {Blob} blob Blob 或 File 对象\n * @returns {Promise<string>} data:URL 格式的 Base64 字符串。\n * @example\n * const aFileParts = ['<a id=\"a\"><b id=\"b\">hey!</b></a>']; // 一个包含DOMString的数组\n * const htmlBlob = new Blob(aFileParts, { type: 'text/html' }); // 得到 blob\n *\n * blobToDataURL(htmlBlob).then(data=>{\n * console.log(data); // data:text/html;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * });\n *\n * const textBlob = new Blob(aFileParts, { type: 'text/plain' });\n *\n * blobToDataURL(textBlob).then(data=>{\n * console.log(data); // data:text/plain;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * });\n */\nfunction blobToDataURL(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n // @ts-ignore\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n}\n\nexport default blobToDataURL;\n","/**\n * 将 DataURL 转为 Blob 对象\n *\n * @static\n * @alias module:Processor.dataURLToBlob\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Base64|Base64}\n * @since 4.1.0\n * @param {string} dataurl data: 协议的URL\n * @returns {Blob} Blob 对象\n * @example\n * const dataurl = 'data:text/html;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=';\n * dataURLToBlob(dataurl);\n */\nfunction dataURLToBlob(dataurl) {\n const arr = dataurl.split(',');\n // @ts-ignore\n const mime = arr[0].match(/:(.*?);/)[1];\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: mime });\n}\n\nexport default dataURLToBlob;\n","/**\n * 设置 DataURL 前缀、MIME 类型、base64 标识。<br/>\n * 如果你需要获取DataURL 的 MIME 类型和数据本身,推荐使用 <a href=\"https://www.npmjs.com/package/data-urls\">data-urls</a>。\n *\n * @static\n * @alias module:Processor.setDataURLPrefix\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Data_URIs|Data URLs}\n * @see 参考 {@link https://mimesniff.spec.whatwg.org/#understanding-mime-types|MIME types}\n * @since 4.1.0\n * @param {string} data 数据本身\n * @param {string} [mimetype=\"image/png\"] MIME 类型\n * @param {boolean} [base64=true] 添加 base64 标识\n * @returns {string} DataURL 格式的字符串\n * @example\n * const data = 'PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=';\n * setDataURLPrefix(data); // data:image/png;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, 'image/png', false); // data:image/png,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, 'image/jpg'); // data:image/jpg;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, 'text/html'); // data:text/html;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, ''); // data:;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, '', false); // data:,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n */\nfunction setDataURLPrefix(data, mimetype = 'image/png', base64 = true) {\n return `data:${mimetype}${base64 ? ';base64' : ''},${data}`;\n}\n\nexport default setDataURLPrefix;\n","import isNil from './utils/type/isNil';\n\n// TODO: 函数重载,类型参照 Date\n\n/**\n * 创建一个 Date 实例日期对象,同 new Date() 。<br/>\n * 规避了苹果设备浏览器不支持部分格式(YYYY-MM-DD HH-mm 或 YYYY.MM.DD)。\n *\n * @static\n * @alias module:Processor.safeDate\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date|Date}\n * @since 4.4.0\n * @param {string|number|Date} [value] 日期时间字符串、毫秒数、日期对象\n * @param {...number} args 月/日/时/分/秒/毫秒\n * @returns {Date} Date 实例日期对象\n * @example\n * safeDate('2022-1-1'); // Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)\n * safeDate('2022/1/1'); // Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)\n * safeDate('2022.1.1'); // Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)\n * safeDate('2022.1.1 11:11'); // Sat Jan 01 2022 11:11:00 GMT+0800 (中国标准时间)\n * safeDate(99, 1); // Mon Feb 01 1999 00:00:00 GMT+0800 (中国标准时间)\n * safeDate(1646711233171); // Tue Mar 08 2022 11:47:13 GMT+0800 (中国标准时间)\n *\n */\nfunction safeDate(value, ...args) {\n const safeValue = typeof value === 'string' ? value.replace(/[\\\\.-]/g, '/') : value;\n\n if (args && args.length > 0) {\n // @ts-ignore\n return new Date(safeValue, ...args);\n }\n\n // @ts-ignore\n return isNil(safeValue) ? new Date() : new Date(safeValue);\n}\n\nexport default safeDate;\n","import normalizeString from './normalizeString';\n\n/**\n * 格式化手机号码\n *\n * @static\n * @alias module:Processor.formatMobile\n * @since 4.5.0\n * @param {string} mobileNo 手机号码\n * @param {object} [options] 配置项\n * @param {string} [options.char=' '] 间隔字符\n * @returns {string} 格式化后的手机号码\n * @example\n * formatMobile('13345678900') // '133 4567 8900'\n * formatMobile('13345678900', { char: '-' }) // '133-4567-8900'\n *\n * // 脱敏手机号码\n * formatMobile('133****1234') // '133 **** 1234'\n * formatMobile('133****1234', { char: '-' }) // '133-****-1234'\n *\n * // 手机号码位数不够\n * formatMobile('133') // '133'\n * formatMobile('133456') // '133 456'\n * formatMobile('13345678') // '133 4567 8'\n */\nfunction formatMobile(mobileNo, { char = ' ' } = {}) {\n const regChar = new RegExp(char, 'g');\n const realValue = normalizeString(mobileNo).replace(regChar, '').substring(0, 11);\n\n if (realValue.length > 7) {\n return realValue.replace(/^(...)(....)/g, `$1${char}$2${char}`);\n }\n if (realValue.length > 3) {\n return realValue.replace(/^(...)/g, `$1${char}`);\n }\n return realValue;\n}\n\nexport default formatMobile;\n","import normalizeString from './normalizeString';\n\n/**\n * 前置补零\n *\n * @static\n * @alias module:Processor.padZero\n * @since 4.7.0\n * @param {string|number} value 要处理的值\n * @param {number} [size=2] 指定字符串长度\n * @returns {string} 用零填充数字到给定长度的字符串\n * @example\n * padZero(5); // '05'\n * padZero('5'); // '05'\n *\n * padZero(12); // '12'\n * padZero('12'); // '12'\n *\n * padZero(688); // '688'\n * padZero('688'); // '688'\n *\n * padZero(688, 5); // '00688'\n * padZero('688', 5); // '00688'\n */\nfunction padZero(value, size = 2) {\n const str = normalizeString(value);\n const len = str.length;\n\n if (typeof size !== 'number' || size < 0) {\n size = 0;\n }\n\n if (len < size) {\n return '0'.repeat(size - len) + str;\n }\n return str;\n}\n\nexport default padZero;\n","import isType from './isType';\n\n/**\n * 检查值是否为Number\n *\n * @static\n * @alias module:Type.isNumber\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为Number\n * @example\n *\n * isNumber(1)\n * // => true\n *\n * isNumber(Number.MIN_VALUE)\n * // => true\n *\n * isNumber(Infinity)\n * // => true\n *\n * isNumber(NaN)\n * // => true\n *\n * isNumber('1')\n * // => false\n */\nfunction isNumber(value) {\n return isType(value, 'Number');\n}\n\nexport default isNumber;\n","import { digitLength, float2Fixed, checkBoundary } from './utils/math.util';\nimport { isNumber, isNaN, isString } from './utils/type';\n\n/**\n * 精确乘法,支持多个数相乘\n *\n * @static\n * @alias module:Math.times\n * @since 3.1.0\n * @param {...number|string} nums 相乘的数\n * @returns {number} 乘积\n * @example\n *\n * times(3, 0.6);\n * // => 1.8\n *\n * times(3, 0.6, 2);\n * // => 3.6\n *\n * times(3, 0.6, 2, 10);\n * // => 36\n */\nfunction times(...nums) {\n const [num1, num2, ...rest] = nums;\n if (rest.length > 0) {\n return times(times(num1, num2), ...rest);\n }\n\n // 兼容处理,如果第2个参数为非数字或字符串时,返回第一个参数\n if ((!isNumber(num2) || isNaN(num2)) && !isString(num2)) {\n // @ts-ignore\n return num1;\n }\n\n const num1Changed = float2Fixed(num1);\n const num2Changed = float2Fixed(num2);\n const baseNum = digitLength(num1) + digitLength(num2);\n const leftValue = num1Changed * num2Changed;\n\n checkBoundary(leftValue);\n\n return leftValue / Math.pow(10, baseNum);\n}\n\nexport default times;\n","import { digitLength } from './utils/math.util';\nimport times from './times';\nimport { isNumber, isNaN, isString } from './utils/type';\n\n/**\n * 精确加法,支持多个数相加\n *\n * @static\n * @alias module:Math.plus\n * @since 3.1.0\n * @param {...number|string} nums 相加的数\n * @returns {number} 总和\n * @example\n *\n * plus(0.1, 0.2);\n * // => 0.3\n *\n * plus(0.1, 0.2, 0.3);\n * // => 0.6\n *\n * plus(0.1, 0.2, 0.3, 0.4);\n * // => 1\n */\nfunction plus(...nums) {\n const [num1, num2, ...rest] = nums;\n\n if (rest.length > 0) {\n return plus(plus(num1, num2), ...rest);\n }\n\n // 兼容处理,如果第2个参数为非数字或字符串时,返回第一个参数\n if ((!isNumber(num2) || isNaN(num2)) && !isString(num2)) {\n // @ts-ignore\n return num1;\n }\n\n const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));\n return (times(num1, baseNum) + times(num2, baseNum)) / baseNum;\n}\n\nexport default plus;\n","import { digitLength } from './utils/math.util';\nimport times from './times';\nimport { isNumber, isNaN, isString } from './utils/type';\n\n/**\n * 精确减法,支持多个数相减\n *\n * @static\n * @alias module:Math.minus\n * @since 3.1.0\n * @param {...number|string} nums 相减的数\n * @returns {number} 差\n * @example\n *\n * minus(1, 0.9);\n * // => 0.1\n *\n * minus(1, 0.9, 0.02);\n * // => 0.08\n *\n * minus(1, 0.9, 0.02, 0.08);\n * // => 0\n */\nfunction minus(...nums) {\n const [num1, num2, ...rest] = nums;\n\n if (rest.length > 0) {\n return minus(minus(num1, num2), ...rest);\n }\n\n // 兼容处理,如果第2个参数为非数字或字符串时,返回第一个参数\n if ((!isNumber(num2) || isNaN(num2)) && !isString(num2)) {\n // @ts-ignore\n return num1;\n }\n\n const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));\n return (times(num1, baseNum) - times(num2, baseNum)) / baseNum;\n}\n\nexport default minus;\n","import { strip, digitLength, float2Fixed, checkBoundary } from './utils/math.util';\nimport times from './times';\nimport { isNumber, isNaN, isString } from './utils/type';\n\n/**\n * 精确除法,支持多个数相除\n *\n * @static\n * @alias module:Math.divide\n * @since 3.1.0\n * @param {...number|string} nums 除数和被除数\n * @returns {number} 商数\n * @example\n *\n * divide(1.21, 1.1);\n * // => 1.1\n *\n * divide(1000, 10, 10);\n * // => 10\n *\n * divide(1000, 10, 10, 10);\n * // => 1\n */\nfunction divide(...nums) {\n const [num1, num2, ...rest] = nums;\n\n if (rest.length > 0) {\n return divide(divide(num1, num2), ...rest);\n }\n\n // 兼容处理,如果第2个参数为非数字或字符串时,返回第一个参数\n if ((!isNumber(num2) || isNaN(num2)) && !isString(num2)) {\n // @ts-ignore\n return num1;\n }\n\n const num1Changed = float2Fixed(num1);\n const num2Changed = float2Fixed(num2);\n checkBoundary(num1Changed);\n checkBoundary(num2Changed);\n // fix: 类似 10 ** -4 为 0.00009999999999999999,strip 修正\n return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1))));\n}\n\nexport default divide;\n","import divide from './divide';\nimport times from './times';\n\n/**\n * 四舍五入,支持设置精度\n *\n * @static\n * @alias module:Math.round\n * @since 3.1.0\n * @param {number|string} num 要四舍五入的数字\n * @param {number} [precision=0] 四舍五入的精度\n * @returns {number} 四舍五入的数字\n * @example\n *\n * round(4.006);\n * // => 4\n *\n * round(4.006, 2);\n * // => 4.01\n *\n * round(4060, -2);\n * // => 4100\n */\nfunction round(num, precision = 0) {\n const base = Math.pow(10, precision);\n return divide(Math.round(times(num, base)), base);\n}\n\nexport default round;\n","/**\n * 等待时间返回 Promise 。常用于异步方法中延时。\n *\n * @static\n * @alias module:Other.waitTime\n * @since 4.2.0\n * @param {number} [time=1000] 延时时间,单位毫秒\n * @returns {Promise<void>}\n * @example\n * const test = async ()=>{\n * await waitTime();\n * // do something\n * }\n *\n * waitTime(500).then(()=>{\n * // do something\n * })\n */\nfunction waitTime(time = 1000) {\n return new Promise((resolve) => {\n setTimeout(resolve, time);\n });\n}\n\nexport default waitTime;\n","import normalizeString from './normalizeString';\n\n// ref: https://github.com/ant-design/ant-design-mobile/blob/v2/components/input-item/index.tsx#L240\n\n/**\n * 计算输入框的值格式化后光标位置\n *\n * @static\n * @alias module:Other.calculateCursorPosition\n * @since 4.6.0\n * @see 格式化手机号码 {@link https://doly-dev.github.io/util-helpers/module-Processor.html#.formatMobile|formatMobile}\n * @see 格式化银行卡号 {@link https://doly-dev.github.io/util-helpers/module-Processor.html#.formatBankCard|formatBankCard}\n * @see h5示例 {@link https://2950v9.csb.app/|点击查看}\n * @see react示例 {@link https://33ccy9.csb.app/|点击查看}\n * @param {number} prevPos 赋值前的光标位置,onChange/onInput的光标位置 e.target.selectionEnd\n * @param {string} prevCtrlValue 上一个格式化后的值\n * @param {string} rawValue 当前输入原值\n * @param {string} ctrlValue 当前格式化后的值\n * @param {Object} [options] 配置项\n * @param {string[]|string} [options.placeholderChar=' '] 占位符\n * @param {RegExp} [options.maskReg=/\\D/g] 需要遮盖的字符规则。默认去掉非数字,意味着 ctrlValue 需要去掉非数字。\n * @param {'mobile'|'bankCard'} [options.type] 格式化类型,内置手机号码和银行卡号特殊处理\n * @returns {number} 格式化后的光标位置\n */\nfunction calculateCursorPosition(prevPos, prevCtrlValue, rawValue, ctrlValue, { placeholderChar = ' ', maskReg = /\\D/g, type } = {}) {\n const realCtrlValue = normalizeString(prevCtrlValue);\n const realRawValue = normalizeString(rawValue);\n const placeholderChars = Array.isArray(placeholderChar) ? placeholderChar : [placeholderChar];\n\n const editLength = realRawValue.length - realCtrlValue.length;\n const isAddition = editLength > 0;\n\n let pos = prevPos;\n\n if (isAddition) {\n const additionStr = realRawValue.substring(pos - editLength, pos);\n let ctrlCharCount = additionStr.replace(maskReg, '').length;\n pos -= editLength - ctrlCharCount;\n\n let placeholderCharCount = 0;\n while (ctrlCharCount > 0) {\n if (placeholderChars.indexOf(ctrlValue.charAt(pos - ctrlCharCount + placeholderCharCount)) !== -1) {\n placeholderCharCount++;\n } else {\n ctrlCharCount--;\n }\n }\n pos += placeholderCharCount;\n }\n\n if ((type === 'mobile' && (pos === 4 || pos === 9)) || (type === 'bankCard' && pos > 0 && pos % 5 === 0)) {\n pos -= 1;\n }\n\n return pos;\n}\n\nexport default calculateCursorPosition;\n"],"names":["reg","regIdCard","baseReg","sumCheckCode","isNaN"],"mappings":"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"}
|