ctt-babylon 0.24.75 → 0.24.76

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.
@@ -74,9 +74,7 @@ export class Utils {
74
74
  // Validación robusta: necesitamos etiqueta y un link string
75
75
  if (typeof rawLink !== 'string')
76
76
  return undefined;
77
- const trimmedValue = rawLink.endsWith('/')
78
- ? rawLink.slice(0, -1)
79
- : rawLink;
77
+ const trimmedValue = rawLink;
80
78
  let url;
81
79
  if (/^\+?[0-9]+$/.test(trimmedValue)) {
82
80
  url = trimmedValue.startsWith('tel:')
@@ -334,4 +332,4 @@ export class Utils {
334
332
  return regex.test(value ?? '') ? 'SUP' : '';
335
333
  }
336
334
  }
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdsQyxNQUFNLE9BQU8sS0FBSztJQUNkLDhEQUE4RDtJQUM5RCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWE7UUFDN0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixNQUFNLENBQUMsNEJBQTRCLENBQUMsR0FBUTtRQUN4QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNyRTthQUFNLElBQ0gsR0FBRztZQUNILE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFDdkIsR0FBRyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQzVCO1lBQ0UsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxNQUFNLENBQUM7WUFDbEIsQ0FBQyxFQUFF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LElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBYTtRQUM1QixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QyxnREFBZ0Q7UUFDaEQsTUFBTSxjQUFjLEdBQUc7WUFDbkIsYUFBYTtZQUNiLGFBQWE7WUFDYixVQUFVO1lBQ1YsY0FBYztZQUNkLFlBQVk7WUFDWixXQUFXO1lBQ1gsY0FBYztTQUNqQixDQUFDO1FBQ0YsT0FBTyxjQUFjLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQXFCO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDO1FBRXBDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2hELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhYnlsb25CdXR0b25JLCBCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyB7XG4gICAgLy8gRnVuY2nDs24gcGFyYSBjb252ZXJ0aXIgdW5hIGNhZGVuYSBkZSBzbmFrZV9jYXNlIGEgY2FtZWxDYXNlXG4gICAgc3RhdGljIHNuYWtlVG9DYW1lbChzbmFrZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHNuYWtlLnJlcGxhY2UoLyhfXFx3KS9nLCAobWF0Y2hlcykgPT4gbWF0Y2hlc1sxXS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICAvLyBGdW5jacOzbiBwYXJhIGNvbnZlcnRpciBsYXMgcHJvcGllZGFkZXMgZGUgdW4gb2JqZXRvIGRlIHNuYWtlX2Nhc2UgYSBjYW1lbENhc2VcbiAgICBzdGF0aWMgY29udmVydE9iamVjdEtleXNUb0NhbWVsQ2FzZShvYmo6IGFueSk6IGFueSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiB0aGlzLmNvbnZlcnRPYmplY3RLZXlzVG9DYW1lbENhc2UoaXRlbSkpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgb2JqICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxLZXkgPSB0aGlzLnNuYWtlVG9DYW1lbChrZXkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtjYW1lbEtleV0gPSB0aGlzLmNvbnZlcnRPYmplY3RLZXlzVG9DYW1lbENhc2Uob2JqW2tleV0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LCB7fSBhcyBhbnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvcm1hdExpbmtUeXBlKGxpbmtUeXBlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gbGlua1R5cGUgPT09ICdleHRlcm5hbF9saW5rJyB8fCBsaW5rVHlwZSA9PT0gJ2V4dGVybmFsJ1xuICAgICAgICAgICAgPyAnZXh0ZXJuYWwnXG4gICAgICAgICAgICA6IGxpbmtUeXBlID09PSAnaW50ZXJuYWxfbGluaycgfHwgbGlua1R5cGUgPT09ICdpbnRlcm5hbCdcbiAgICAgICAgICAgICAgPyAnaW50ZXJuYWwnXG4gICAgICAgICAgICAgIDogbGlua1R5cGU7XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbmRDb21wb25lbnQ8VD4oXG4gICAgICAgIGJvZHk6IEJvZHlDb21wb25lbnQ8VD5bXSxcbiAgICAgICAgbmFtZTogc3RyaW5nXG4gICAgKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBib2R5LmZpbmQoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50Py5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBuYW1lKVxuICAgICAgICAgICAgPy5wcm9wcztcbiAgICB9XG5cbiAgICBzdGF0aWMgY29udmVydFRvQmFzZTY0KGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICAgICAgICByZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIG5vcm1hbGl6ZVRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRleHRcbiAgICAgICAgICAgID8ubm9ybWFsaXplKCdORkQnKSAvLyBEZXNjb21wb25lIGxvcyBjYXJhY3RlcmVzIGNvbiBhY2VudG9zXG4gICAgICAgICAgICA/LnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKSAvLyBFbGltaW5hIGxvcyBhY2VudG9zXG4gICAgICAgICAgICA/LnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIG1hcEJ1dHRvbnMoXG4gICAgICAgIGJ1dHRvbjogYW55IHwgYW55W10gfCB1bmRlZmluZWQgfCBudWxsLFxuICAgICAgICBidXR0b25UeXBlPzogc3RyaW5nXG4gICAgKTogQmFieWxvbkJ1dHRvbklbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghYnV0dG9uIHx8IChBcnJheS5pc0FycmF5KGJ1dHRvbikgJiYgYnV0dG9uLmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIFNpIGVzIHVuIGFycmF5LCBsbyB1c2Ftb3MgdGFsIGN1YWxcbiAgICAgICAgbGV0IHJhd0FycmF5OiBhbnlbXSB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidXR0b24pKSB7XG4gICAgICAgICAgICByYXdBcnJheSA9IGJ1dHRvbjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYnV0dG9uID09PSAnb2JqZWN0JyAmJiBidXR0b24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFNpIGVzIGl0ZXJhYmxlIChOb2RlTGlzdCwgZXRjLilcbiAgICAgICAgICAgIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgcmF3QXJyYXkgPSBBcnJheS5mcm9tKGJ1dHRvbiBhcyBJdGVyYWJsZTxhbnk+KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2kgZXMgdW4gb2JqZXRvIHBsYW5vLCBjb252ZXJ0aW1vcyBzdXMgdmFsb3JlcyBhIGFycmF5XG4gICAgICAgICAgICAgICAgcmF3QXJyYXkgPSBPYmplY3QudmFsdWVzKGJ1dHRvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJhd0FycmF5KSByZXR1cm4gdHlwZW9mIGJ1dHRvbiA9PT0gJ29iamVjdCcgPyBbXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBtYXBwZWQgPSByYXdBcnJheVxuICAgICAgICAgICAgLm1hcCgoYnRuKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgYnRuPy5sYWJlbCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYnRuLmxhYmVsPy50cmltKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGJ0bj8ubGFiZWwgfHwgJycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhd0xpbmsgPSBidG4/LmxpbmtWYWx1ZSA/PyBidG4/LmxpbmtfdmFsdWU7XG5cbiAgICAgICAgICAgICAgICAvLyBWYWxpZGFjacOzbiByb2J1c3RhOiBuZWNlc2l0YW1vcyBldGlxdWV0YSB5IHVuIGxpbmsgc3RyaW5nXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByYXdMaW5rICE9PSAnc3RyaW5nJykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyaW1tZWRWYWx1ZSA9IHJhd0xpbmsuZW5kc1dpdGgoJy8nKVxuICAgICAgICAgICAgICAgICAgICA/IHJhd0xpbmsuc2xpY2UoMCwgLTEpXG4gICAgICAgICAgICAgICAgICAgIDogcmF3TGluaztcbiAgICAgICAgICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICBpZiAoL15cXCs/WzAtOV0rJC8udGVzdCh0cmltbWVkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHRyaW1tZWRWYWx1ZS5zdGFydHNXaXRoKCd0ZWw6JylcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdHJpbW1lZFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGB0ZWw6JHt0cmltbWVkVmFsdWV9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QodHJpbW1lZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSB0cmltbWVkVmFsdWUuc3RhcnRzV2l0aCgnbWFpbHRvOicpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRyaW1tZWRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgbWFpbHRvOiR7dHJpbW1lZFZhbHVlfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdHJpbW1lZFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGJ1dHRvblR5cGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgbGlua1R5cGU6IFV0aWxzLmZvcm1hdExpbmtUeXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgYnRuPy5saW5rVHlwZSA/PyBidG4/LmxpbmtfdHlwZVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgIGljb246IGJ0bj8uaWNvbiA/IGBpY29uLSR7YnRuLmljb259YCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGJ0bj8ub3JkZXI/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgIHZhcnM6IGJ0bj8ubGlua1ZhcnM/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgfSBhcyBCYWJ5bG9uQnV0dG9uSTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKChidG4pOiBidG4gaXMgQmFieWxvbkJ1dHRvbkkgPT4gISFidG4pO1xuXG4gICAgICAgIHJldHVybiBVdGlscy5zb3J0QnV0dG9uc0J5T3JkZXIobWFwcGVkLCB7IGtlZXBPcmlnaW5hbDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBwcm9jZXNzU2luZ2xlQnV0dG9uKFxuICAgICAgICBidG46IGFueSxcbiAgICAgICAgYnV0dG9uVHlwZT86IHN0cmluZ1xuICAgICk6IEJhYnlsb25CdXR0b25JIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBidG4/LmxhYmVsPy50cmltKCk7XG4gICAgICAgIGNvbnN0IHJhd0xpbmsgPSBidG4/LmxpbmtWYWx1ZSA/PyBidG4/LmxpbmtfdmFsdWU7XG5cbiAgICAgICAgLy8gVmFsaWRhY2nDs24gYsOhc2ljYTogc2kgbm8gaGF5IGxhYmVsIG8gbGluaywgbm8gZXMgdW4gYm90w7NuIHbDoWxpZG9cbiAgICAgICAgaWYgKCFsYWJlbCB8fCAhcmF3TGluayB8fCB0eXBlb2YgcmF3TGluayAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMaW1waWV6YSBkZSBVUkxcbiAgICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gcmF3TGluay5lbmRzV2l0aCgnLycpXG4gICAgICAgICAgICA/IHJhd0xpbmsuc2xpY2UoMCwgLTEpXG4gICAgICAgICAgICA6IHJhd0xpbms7XG4gICAgICAgIGxldCB1cmw6IHN0cmluZyA9IHRyaW1tZWRWYWx1ZTtcblxuICAgICAgICBpZiAoL15cXCs/WzAtOV0rJC8udGVzdCh0cmltbWVkVmFsdWUpKSB7XG4gICAgICAgICAgICB1cmwgPSB0cmltbWVkVmFsdWUuc3RhcnRzV2l0aCgndGVsOicpXG4gICAgICAgICAgICAgICAgPyB0cmltbWVkVmFsdWVcbiAgICAgICAgICAgICAgICA6IGB0ZWw6JHt0cmltbWVkVmFsdWV9YDtcbiAgICAgICAgfSBlbHNlIGlmICgvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHRyaW1tZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHVybCA9IHRyaW1tZWRWYWx1ZS5zdGFydHNXaXRoKCdtYWlsdG86JylcbiAgICAgICAgICAgICAgICA/IHRyaW1tZWRWYWx1ZVxuICAgICAgICAgICAgICAgIDogYG1haWx0bzoke3RyaW1tZWRWYWx1ZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGJ1dHRvblR5cGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICBsaW5rVHlwZTogVXRpbHMuZm9ybWF0TGlua1R5cGUoYnRuPy5saW5rVHlwZSA/PyBidG4/LmxpbmtfdHlwZSksXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpY29uOiBidG4uaWNvbiA/IGBpY29uLSR7YnRuLmljb259YCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG9yZGVyOiBidG4ub3JkZXI/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB2YXJzOiBidG4ubGlua1ZhcnM/LnRvU3RyaW5nKCksXG4gICAgICAgIH0gYXMgQmFieWxvbkJ1dHRvbkk7XG4gICAgfVxuXG4gICAgc3RhdGljIGxvYWRTY3JpcHQkKHNyYzogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTx2b2lkPigob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICBgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWBcbiAgICAgICAgICAgICkgYXMgSFRNTFNjcmlwdEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgIC8vIFZlcmlmaWNhbW9zIHNpIHlhIHRlcm1pbsOzIGRlIGNhcmdhciBwcmV2aWFtZW50ZVxuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtbG9hZGVkJykgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgZXhpc3RlIHBlcm8gc2lndWUgZGVzY2FyZ8OhbmRvc2UsIG5vcyBcImVuZ2FuY2hhbW9zXCIgYSBzdSBldmVudG8gbG9hZFxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKGBFcnJvciBsb2FkaW5nIHNjcmlwdDogJHtzcmN9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHNyYztcbiAgICAgICAgICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICAgICAgICAvLyBRdWl0YW1vcyBhc3luYyBwYXJhIHF1ZSByZXNwZXRlIG3DoXMgZWwgb3JkZW4gZGUgZWplY3VjacOzbiBzaSBoYXkgdmFyaW9zLCBkZWZlciBlcyBzdWZpY2llbnRlXG4gICAgICAgICAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xuXG4gICAgICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1hcmNhbW9zIGVsIHNjcmlwdCBjb21vIHRvdGFsbWVudGUgY2FyZ2Fkb1xuICAgICAgICAgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbG9hZGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBFcnJvcihgRXJyb3IgbG9hZGluZyBzY3JpcHQ6ICR7c3JjfWApKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGxvYWRTdHlsZSQoaHJlZjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxib29sZWFuPigob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPVwiJHtocmVmfVwiXWApO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgICAgIGxpbmsucmVsID0gJ3ByZWxvYWQnO1xuICAgICAgICAgICAgbGluay5ocmVmID0gaHJlZjtcbiAgICAgICAgICAgIGxpbmsuYXMgPSAnc3R5bGUnO1xuICAgICAgICAgICAgbGluay5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGluay5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG5cbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGluay5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoYE5vIHNlIHB1ZG8gcHJlY2FyZ2FyIGVsIGVzdGlsbzogJHtocmVmfWApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG5cbiAgICAgICAgICAgIC8vIG9wY2lvbmFsOiBmYWxsYmFjayA8bm9zY3JpcHQ+IChubyBsbyBuZWNlc2l0YSBBbmd1bGFyIHBlcm8gbG8gcHVlZGVzIGFncmVnYXIpXG4gICAgICAgICAgICBjb25zdCBub3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25vc2NyaXB0Jyk7XG4gICAgICAgICAgICBub3NjcmlwdC5pbm5lckhUTUwgPSBgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIke2hyZWZ9XCI+YDtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobm9zY3JpcHQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2FmZU9wZW5FeHRlcm5hbCh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXVybCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHdpbiA9IHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7XG4gICAgICAgIGlmICh3aW4pIHJldHVybjtcblxuICAgICAgICAvLyBGYWxsYmFjayBzaSBibG9xdWVhbiBwb3B1cHNcbiAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICBhLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgICBhLnJlbCA9ICdub29wZW5lciBub3JlZmVycmVyJztcbiAgICAgICAgYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgIGEucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4dHJhY3ROdW1iZXJSYW5nZShcbiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBudWxsLFxuICAgICAgICBmYWxsYmFjazogbnVtYmVyW10gPSBbXVxuICAgICk6IG51bWJlcltdIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbGxiYWNrO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoID0gdmFsdWUubWF0Y2goL1xcZCsvKTtcbiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIGZhbGxiYWNrO1xuXG4gICAgICAgIGNvbnN0IG4gPSBOdW1iZXIobWF0Y2hbMF0pO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG4pIHx8IG4gPD0gMCkgcmV0dXJuIGZhbGxiYWNrO1xuXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBuIH0sIChfLCBpKSA9PiBpICsgMSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNvcnRCdXR0b25zQnlPcmRlcjxUIGV4dGVuZHMgeyBvcmRlcj86IGFueSB9PihcbiAgICAgICAgYnV0dG9ucz86IEFycmF5PFQgfCB1bmRlZmluZWQgfCBudWxsPiB8IG51bGwsXG4gICAgICAgIG9wdHM/OiB7IGtlZXBPcmlnaW5hbD86IGJvb2xlYW4gfVxuICAgICk6IFRbXSB7XG4gICAgICAgIGNvbnN0IGFyciA9IChidXR0b25zID8/IFtdKS5maWx0ZXIoKGIpOiBiIGlzIFQgPT4gISFiKTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgbGlzdCA9IG9wdHM/LmtlZXBPcmlnaW5hbCA/IFsuLi5hcnJdIDogYXJyO1xuXG4gICAgICAgIGNvbnN0IHRvTnVtID0gKHY6IGFueSk6IG51bWJlciA9PiB7XG4gICAgICAgICAgICBjb25zdCBuID0gTnVtYmVyKHYpO1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGxpc3Quc29ydCgoYSwgYikgPT4gdG9OdW0oYS5vcmRlcikgLSB0b051bShiLm9yZGVyKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHRvU2x1ZyhpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCA/PyAnJylcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICA/LnRyaW0oKVxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpIC8vIHF1aXRhIHRpbGRlc1xuICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgJ2FuZCcpIC8vIG9wY2lvbmFsXG4gICAgICAgICAgICAucmVwbGFjZSgvW15hLXowLTlcXHMtXS9nLCAnJykgLy8gcXVpdGEgY2FyYWN0ZXJlcyByYXJvc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJy0nKSAvLyBlc3BhY2lvcyAtPiAtXG4gICAgICAgICAgICAucmVwbGFjZSgvLSsvZywgJy0nKSAvLyBjb2xhcHNhIC0tLVxuICAgICAgICAgICAgLnJlcGxhY2UoL14tfC0kL2csICcnKTsgLy8gcXVpdGEgLSBhbCBpbmljaW8vZmluXG4gICAgfVxuXG4gICAgc3RhdGljIHVuaXF1ZVNsdWcobGFiZWw6IHN0cmluZywgdXNlZDogU2V0PHN0cmluZz4pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBiYXNlID0gdGhpcy50b1NsdWcobGFiZWwpIHx8ICdpdGVtJztcbiAgICAgICAgaWYgKCF1c2VkLmhhcyhiYXNlKSkge1xuICAgICAgICAgICAgdXNlZC5hZGQoYmFzZSk7XG4gICAgICAgICAgICByZXR1cm4gYmFzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpID0gMjtcbiAgICAgICAgd2hpbGUgKHVzZWQuaGFzKGAke2Jhc2V9LSR7aX1gKSkgaSsrO1xuICAgICAgICBjb25zdCBzbHVnID0gYCR7YmFzZX0tJHtpfWA7XG4gICAgICAgIHVzZWQuYWRkKHNsdWcpO1xuICAgICAgICByZXR1cm4gc2x1ZztcbiAgICB9XG5cbiAgICBzdGF0aWMgY2Fub25pY2FsSG90ZWxUeXBlU2x1ZyhsYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgLy8gc2x1ZyBiYXNlIChzaW4gdGlsZGVzL3Jhcm9zKVxuICAgICAgICBsZXQgcyA9IFV0aWxzLnRvU2x1ZyhsYWJlbCk7XG5cbiAgICAgICAgLy8gbm9ybWFsaXphIHBsdXJhbGVzIGNvbXVuZXMgRVMgKGhvdGVsKGVzKSwgYXBhcnRhbWVudG8ocykpXG4gICAgICAgIC8vIHB1ZWRlcyBhbXBsaWFyIGFxdcOtIHNpIHRpZW5lcyBcImFwYXJ0YW1lbnRvcyB0dXLDrXN0aWNvc1wiLCBldGMuXG4gICAgICAgIGlmIChzID09PSAnaG90ZWxlcycpIHJldHVybiAnaG90ZWwnO1xuICAgICAgICBpZiAocyA9PT0gJ2FwYXJ0YW1lbnRvcycpIHJldHVybiAnYXBhcnRhbWVudG8nO1xuXG4gICAgICAgIC8vIHJlZ2xhIGdlbsOpcmljYSBzdWF2ZTogc2kgdGVybWluYSBlbiAncycgeSBubyBlcyAnZG9zL3RyZXMvLi4uJyBldGMuXG4gICAgICAgIC8vIChldml0YSBjYXJnYXJ0ZSBjb3NhcyBjb21vIFwicG9vbHNcIiBzaSBleGlzdGllcmFuLCBwZXJvIGFxdcOtIGFwbGljYSBiaWVuKVxuICAgICAgICBpZiAocy5lbmRzV2l0aCgncycpKSBzID0gcy5zbGljZSgwLCAtMSk7XG5cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcHJ1ZWJhIHNpIGVsIHRpcG8gZXMgdW4gaG90ZWwgZW4gdmFyaW9zIGlkaW9tYXNcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNIb3RlbCh0eXBlPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdHlwZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gdHlwZT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIC8vIFRyYWR1Y2Npb25lcyBkZSBcImhvdGVsXCIgZW4gdmFyaW9zIGlkaW9tYXNcbiAgICAgICAgY29uc3QgaG90ZWxUeXBlcyA9IFtcbiAgICAgICAgICAgICdow7R0ZWwnLFxuICAgICAgICAgICAgJ2hvdGVsJyxcbiAgICAgICAgICAgICfQvtGC0LXQu9GMJyxcbiAgICAgICAgICAgICdob3RldScsXG4gICAgICAgICAgICAnaG90ZScsXG4gICAgICAgICAgICAnaG90ZWlzJyxcbiAgICAgICAgICAgICdob3RlbHMnLFxuICAgICAgICAgICAgJ2jDtHRlbHMnLFxuICAgICAgICAgICAgJ2hvdGVsZXMnLFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gaG90ZWxUeXBlcy5pbmNsdWRlcyhub3JtYWxpemVkKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Rm9ybWF0dGVkVXJsKGxpbms6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghbGluaz8udXJsKSByZXR1cm4gJyc7XG5cbiAgICAgICAgaWYgKGxpbmsudmFycykge1xuICAgICAgICAgICAgY29uc3QgY2xlYW5VcmwgPSBsaW5rLnVybC5lbmRzV2l0aCgnLycpXG4gICAgICAgICAgICAgICAgPyBsaW5rLnVybC5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICAgICA6IGxpbmsudXJsO1xuICAgICAgICAgICAgcmV0dXJuIGNsZWFuVXJsICsgbGluay52YXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxpbmsudXJsICsgKGxpbmsudmFycyB8fCAnJyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzQXBhcnRtZW50KHR5cGU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0eXBlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0eXBlPy50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgLy8gVHJhZHVjY2lvbmVzIGRlIFwiYXBhcnRtZW50XCIgZW4gdmFyaW9zIGlkaW9tYXNcbiAgICAgICAgY29uc3QgYXBhcnRtZW50VHlwZXMgPSBbXG4gICAgICAgICAgICAnYXBwYXJ0ZW1lbnQnLFxuICAgICAgICAgICAgJ2FwYXJ0YW1lbnRvJyxcbiAgICAgICAgICAgICfQutCy0LDRgNGC0LjRgNCwJyxcbiAgICAgICAgICAgICdhcGFydGFtZW50b3MnLFxuICAgICAgICAgICAgJ2FwYXJ0bWVudHMnLFxuICAgICAgICAgICAgJ2FwYXJ0bWVudCcsXG4gICAgICAgICAgICAnYXBwYXJ0ZW1lbnRzJyxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGFwYXJ0bWVudFR5cGVzLmluY2x1ZGVzKG5vcm1hbGl6ZWQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzaG93SWZTdXAodmFsdWU/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSAvXFxiKFNVUHxzdXBlcmlvcilcXGIvaTtcblxuICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZSA/PyAnJykgPyAnU1VQJyA6ICcnO1xuICAgIH1cbn1cbiJdfQ==
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdsQyxNQUFNLE9BQU8sS0FBSztJQUNkLDhEQUE4RDtJQUM5RCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWE7UUFDN0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixNQUFNLENBQUMsNEJBQTRCLENBQUMsR0FBUTtRQUN4QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNyRTthQUFNLElBQ0gsR0FBRztZQUNILE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFDdkIsR0FBRyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQzVCO1lBQ0UsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxNQUFNLENBQUM7WUFDbEIsQ0FBQyxFQUFF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LE1BQU0sVUFBVSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QyxnREFBZ0Q7UUFDaEQsTUFBTSxjQUFjLEdBQUc7WUFDbkIsYUFBYTtZQUNiLGFBQWE7WUFDYixVQUFVO1lBQ1YsY0FBYztZQUNkLFlBQVk7WUFDWixXQUFXO1lBQ1gsY0FBYztTQUNqQixDQUFDO1FBQ0YsT0FBTyxjQUFjLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQXFCO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDO1FBRXBDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2hELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhYnlsb25CdXR0b25JLCBCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyB7XG4gICAgLy8gRnVuY2nDs24gcGFyYSBjb252ZXJ0aXIgdW5hIGNhZGVuYSBkZSBzbmFrZV9jYXNlIGEgY2FtZWxDYXNlXG4gICAgc3RhdGljIHNuYWtlVG9DYW1lbChzbmFrZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHNuYWtlLnJlcGxhY2UoLyhfXFx3KS9nLCAobWF0Y2hlcykgPT4gbWF0Y2hlc1sxXS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICAvLyBGdW5jacOzbiBwYXJhIGNvbnZlcnRpciBsYXMgcHJvcGllZGFkZXMgZGUgdW4gb2JqZXRvIGRlIHNuYWtlX2Nhc2UgYSBjYW1lbENhc2VcbiAgICBzdGF0aWMgY29udmVydE9iamVjdEtleXNUb0NhbWVsQ2FzZShvYmo6IGFueSk6IGFueSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiB0aGlzLmNvbnZlcnRPYmplY3RLZXlzVG9DYW1lbENhc2UoaXRlbSkpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgb2JqICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxLZXkgPSB0aGlzLnNuYWtlVG9DYW1lbChrZXkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtjYW1lbEtleV0gPSB0aGlzLmNvbnZlcnRPYmplY3RLZXlzVG9DYW1lbENhc2Uob2JqW2tleV0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LCB7fSBhcyBhbnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvcm1hdExpbmtUeXBlKGxpbmtUeXBlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gbGlua1R5cGUgPT09ICdleHRlcm5hbF9saW5rJyB8fCBsaW5rVHlwZSA9PT0gJ2V4dGVybmFsJ1xuICAgICAgICAgICAgPyAnZXh0ZXJuYWwnXG4gICAgICAgICAgICA6IGxpbmtUeXBlID09PSAnaW50ZXJuYWxfbGluaycgfHwgbGlua1R5cGUgPT09ICdpbnRlcm5hbCdcbiAgICAgICAgICAgICAgPyAnaW50ZXJuYWwnXG4gICAgICAgICAgICAgIDogbGlua1R5cGU7XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbmRDb21wb25lbnQ8VD4oXG4gICAgICAgIGJvZHk6IEJvZHlDb21wb25lbnQ8VD5bXSxcbiAgICAgICAgbmFtZTogc3RyaW5nXG4gICAgKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBib2R5LmZpbmQoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50Py5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBuYW1lKVxuICAgICAgICAgICAgPy5wcm9wcztcbiAgICB9XG5cbiAgICBzdGF0aWMgY29udmVydFRvQmFzZTY0KGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICAgICAgICByZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIG5vcm1hbGl6ZVRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRleHRcbiAgICAgICAgICAgID8ubm9ybWFsaXplKCdORkQnKSAvLyBEZXNjb21wb25lIGxvcyBjYXJhY3RlcmVzIGNvbiBhY2VudG9zXG4gICAgICAgICAgICA/LnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKSAvLyBFbGltaW5hIGxvcyBhY2VudG9zXG4gICAgICAgICAgICA/LnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIG1hcEJ1dHRvbnMoXG4gICAgICAgIGJ1dHRvbjogYW55IHwgYW55W10gfCB1bmRlZmluZWQgfCBudWxsLFxuICAgICAgICBidXR0b25UeXBlPzogc3RyaW5nXG4gICAgKTogQmFieWxvbkJ1dHRvbklbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghYnV0dG9uIHx8IChBcnJheS5pc0FycmF5KGJ1dHRvbikgJiYgYnV0dG9uLmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIFNpIGVzIHVuIGFycmF5LCBsbyB1c2Ftb3MgdGFsIGN1YWxcbiAgICAgICAgbGV0IHJhd0FycmF5OiBhbnlbXSB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidXR0b24pKSB7XG4gICAgICAgICAgICByYXdBcnJheSA9IGJ1dHRvbjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYnV0dG9uID09PSAnb2JqZWN0JyAmJiBidXR0b24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFNpIGVzIGl0ZXJhYmxlIChOb2RlTGlzdCwgZXRjLilcbiAgICAgICAgICAgIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgcmF3QXJyYXkgPSBBcnJheS5mcm9tKGJ1dHRvbiBhcyBJdGVyYWJsZTxhbnk+KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2kgZXMgdW4gb2JqZXRvIHBsYW5vLCBjb252ZXJ0aW1vcyBzdXMgdmFsb3JlcyBhIGFycmF5XG4gICAgICAgICAgICAgICAgcmF3QXJyYXkgPSBPYmplY3QudmFsdWVzKGJ1dHRvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJhd0FycmF5KSByZXR1cm4gdHlwZW9mIGJ1dHRvbiA9PT0gJ29iamVjdCcgPyBbXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBtYXBwZWQgPSByYXdBcnJheVxuICAgICAgICAgICAgLm1hcCgoYnRuKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgYnRuPy5sYWJlbCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYnRuLmxhYmVsPy50cmltKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGJ0bj8ubGFiZWwgfHwgJycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhd0xpbmsgPSBidG4/LmxpbmtWYWx1ZSA/PyBidG4/LmxpbmtfdmFsdWU7XG5cbiAgICAgICAgICAgICAgICAvLyBWYWxpZGFjacOzbiByb2J1c3RhOiBuZWNlc2l0YW1vcyBldGlxdWV0YSB5IHVuIGxpbmsgc3RyaW5nXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByYXdMaW5rICE9PSAnc3RyaW5nJykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyaW1tZWRWYWx1ZSA9IHJhd0xpbms7XG4gICAgICAgICAgICAgICAgbGV0IHVybDogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgaWYgKC9eXFwrP1swLTldKyQvLnRlc3QodHJpbW1lZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSB0cmltbWVkVmFsdWUuc3RhcnRzV2l0aCgndGVsOicpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRyaW1tZWRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgdGVsOiR7dHJpbW1lZFZhbHVlfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHRyaW1tZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdHJpbW1lZFZhbHVlLnN0YXJ0c1dpdGgoJ21haWx0bzonKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cmltbWVkVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYG1haWx0bzoke3RyaW1tZWRWYWx1ZX1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHRyaW1tZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBidXR0b25UeXBlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIGxpbmtUeXBlOiBVdGlscy5mb3JtYXRMaW5rVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ0bj8ubGlua1R5cGUgPz8gYnRuPy5saW5rX3R5cGVcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICBpY29uOiBidG4/Lmljb24gPyBgaWNvbi0ke2J0bi5pY29ufWAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiBidG4/Lm9yZGVyPy50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICB2YXJzOiBidG4/LmxpbmtWYXJzPy50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIH0gYXMgQmFieWxvbkJ1dHRvbkk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoYnRuKTogYnRuIGlzIEJhYnlsb25CdXR0b25JID0+ICEhYnRuKTtcblxuICAgICAgICByZXR1cm4gVXRpbHMuc29ydEJ1dHRvbnNCeU9yZGVyKG1hcHBlZCwgeyBrZWVwT3JpZ2luYWw6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcHJvY2Vzc1NpbmdsZUJ1dHRvbihcbiAgICAgICAgYnRuOiBhbnksXG4gICAgICAgIGJ1dHRvblR5cGU/OiBzdHJpbmdcbiAgICApOiBCYWJ5bG9uQnV0dG9uSSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gYnRuPy5sYWJlbD8udHJpbSgpO1xuICAgICAgICBjb25zdCByYXdMaW5rID0gYnRuPy5saW5rVmFsdWUgPz8gYnRuPy5saW5rX3ZhbHVlO1xuXG4gICAgICAgIC8vIFZhbGlkYWNpw7NuIGLDoXNpY2E6IHNpIG5vIGhheSBsYWJlbCBvIGxpbmssIG5vIGVzIHVuIGJvdMOzbiB2w6FsaWRvXG4gICAgICAgIGlmICghbGFiZWwgfHwgIXJhd0xpbmsgfHwgdHlwZW9mIHJhd0xpbmsgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTGltcGllemEgZGUgVVJMXG4gICAgICAgIGNvbnN0IHRyaW1tZWRWYWx1ZSA9IHJhd0xpbmsuZW5kc1dpdGgoJy8nKVxuICAgICAgICAgICAgPyByYXdMaW5rLnNsaWNlKDAsIC0xKVxuICAgICAgICAgICAgOiByYXdMaW5rO1xuICAgICAgICBsZXQgdXJsOiBzdHJpbmcgPSB0cmltbWVkVmFsdWU7XG5cbiAgICAgICAgaWYgKC9eXFwrP1swLTldKyQvLnRlc3QodHJpbW1lZFZhbHVlKSkge1xuICAgICAgICAgICAgdXJsID0gdHJpbW1lZFZhbHVlLnN0YXJ0c1dpdGgoJ3RlbDonKVxuICAgICAgICAgICAgICAgID8gdHJpbW1lZFZhbHVlXG4gICAgICAgICAgICAgICAgOiBgdGVsOiR7dHJpbW1lZFZhbHVlfWA7XG4gICAgICAgIH0gZWxzZSBpZiAoL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC8udGVzdCh0cmltbWVkVmFsdWUpKSB7XG4gICAgICAgICAgICB1cmwgPSB0cmltbWVkVmFsdWUuc3RhcnRzV2l0aCgnbWFpbHRvOicpXG4gICAgICAgICAgICAgICAgPyB0cmltbWVkVmFsdWVcbiAgICAgICAgICAgICAgICA6IGBtYWlsdG86JHt0cmltbWVkVmFsdWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBidXR0b25UeXBlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgbGlua1R5cGU6IFV0aWxzLmZvcm1hdExpbmtUeXBlKGJ0bj8ubGlua1R5cGUgPz8gYnRuPy5saW5rX3R5cGUpLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgaWNvbjogYnRuLmljb24gPyBgaWNvbi0ke2J0bi5pY29ufWAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmRlcjogYnRuLm9yZGVyPy50b1N0cmluZygpLFxuICAgICAgICAgICAgdmFyczogYnRuLmxpbmtWYXJzPy50b1N0cmluZygpLFxuICAgICAgICB9IGFzIEJhYnlsb25CdXR0b25JO1xuICAgIH1cblxuICAgIHN0YXRpYyBsb2FkU2NyaXB0JChzcmM6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8dm9pZD4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgYHNjcmlwdFtzcmM9XCIke3NyY31cIl1gXG4gICAgICAgICAgICApIGFzIEhUTUxTY3JpcHRFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyBWZXJpZmljYW1vcyBzaSB5YSB0ZXJtaW7DsyBkZSBjYXJnYXIgcHJldmlhbWVudGVcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcuZ2V0QXR0cmlidXRlKCdkYXRhLWxvYWRlZCcpID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIGV4aXN0ZSBwZXJvIHNpZ3VlIGRlc2NhcmfDoW5kb3NlLCBub3MgXCJlbmdhbmNoYW1vc1wiIGEgc3UgZXZlbnRvIGxvYWRcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihgRXJyb3IgbG9hZGluZyBzY3JpcHQ6ICR7c3JjfWApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBzcmM7XG4gICAgICAgICAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgICAgICAgLy8gUXVpdGFtb3MgYXN5bmMgcGFyYSBxdWUgcmVzcGV0ZSBtw6FzIGVsIG9yZGVuIGRlIGVqZWN1Y2nDs24gc2kgaGF5IHZhcmlvcywgZGVmZXIgZXMgc3VmaWNpZW50ZVxuICAgICAgICAgICAgc2NyaXB0LmRlZmVyID0gdHJ1ZTtcblxuICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBNYXJjYW1vcyBlbCBzY3JpcHQgY29tbyB0b3RhbG1lbnRlIGNhcmdhZG9cbiAgICAgICAgICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCdkYXRhLWxvYWRlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBzY3JpcHQub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoYEVycm9yIGxvYWRpbmcgc2NyaXB0OiAke3NyY31gKSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBsb2FkU3R5bGUkKGhyZWY6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8Ym9vbGVhbj4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGxpbmtbaHJlZj1cIiR7aHJlZn1cIl1gKTtcbiAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgICAgICBsaW5rLnJlbCA9ICdwcmVsb2FkJztcbiAgICAgICAgICAgIGxpbmsuaHJlZiA9IGhyZWY7XG4gICAgICAgICAgICBsaW5rLmFzID0gJ3N0eWxlJztcbiAgICAgICAgICAgIGxpbmsub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxpbmsub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxpbmsub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKGBObyBzZSBwdWRvIHByZWNhcmdhciBlbCBlc3RpbG86ICR7aHJlZn1gKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuXG4gICAgICAgICAgICAvLyBvcGNpb25hbDogZmFsbGJhY2sgPG5vc2NyaXB0PiAobm8gbG8gbmVjZXNpdGEgQW5ndWxhciBwZXJvIGxvIHB1ZWRlcyBhZ3JlZ2FyKVxuICAgICAgICAgICAgY29uc3Qgbm9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdub3NjcmlwdCcpO1xuICAgICAgICAgICAgbm9zY3JpcHQuaW5uZXJIVE1MID0gYDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiJHtocmVmfVwiPmA7XG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG5vc2NyaXB0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNhZmVPcGVuRXh0ZXJuYWwodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF1cmwpIHJldHVybjtcblxuICAgICAgICBjb25zdCB3aW4gPSB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnLCAnbm9vcGVuZXIsbm9yZWZlcnJlcicpO1xuICAgICAgICBpZiAod2luKSByZXR1cm47XG5cbiAgICAgICAgLy8gRmFsbGJhY2sgc2kgYmxvcXVlYW4gcG9wdXBzXG4gICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGEuaHJlZiA9IHVybDtcbiAgICAgICAgYS50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgICAgYS5yZWwgPSAnbm9vcGVuZXIgbm9yZWZlcnJlcic7XG4gICAgICAgIGEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgICBhLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBleHRyYWN0TnVtYmVyUmFuZ2UoXG4gICAgICAgIHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgZmFsbGJhY2s6IG51bWJlcltdID0gW11cbiAgICApOiBudW1iZXJbXSB7XG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBmYWxsYmFjaztcblxuICAgICAgICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKC9cXGQrLyk7XG4gICAgICAgIGlmICghbWF0Y2gpIHJldHVybiBmYWxsYmFjaztcblxuICAgICAgICBjb25zdCBuID0gTnVtYmVyKG1hdGNoWzBdKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihuKSB8fCBuIDw9IDApIHJldHVybiBmYWxsYmFjaztcblxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogbiB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzb3J0QnV0dG9uc0J5T3JkZXI8VCBleHRlbmRzIHsgb3JkZXI/OiBhbnkgfT4oXG4gICAgICAgIGJ1dHRvbnM/OiBBcnJheTxUIHwgdW5kZWZpbmVkIHwgbnVsbD4gfCBudWxsLFxuICAgICAgICBvcHRzPzogeyBrZWVwT3JpZ2luYWw/OiBib29sZWFuIH1cbiAgICApOiBUW10ge1xuICAgICAgICBjb25zdCBhcnIgPSAoYnV0dG9ucyA/PyBbXSkuZmlsdGVyKChiKTogYiBpcyBUID0+ICEhYik7XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gICAgICAgIGNvbnN0IGxpc3QgPSBvcHRzPy5rZWVwT3JpZ2luYWwgPyBbLi4uYXJyXSA6IGFycjtcblxuICAgICAgICBjb25zdCB0b051bSA9ICh2OiBhbnkpOiBudW1iZXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgbiA9IE51bWJlcih2KTtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBsaXN0LnNvcnQoKGEsIGIpID0+IHRvTnVtKGEub3JkZXIpIC0gdG9OdW0oYi5vcmRlcikpO1xuICAgIH1cblxuICAgIHN0YXRpYyB0b1NsdWcoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAoaW5wdXQgPz8gJycpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgPy50cmltKClcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKSAvLyBxdWl0YSB0aWxkZXNcbiAgICAgICAgICAgIC5yZXBsYWNlKC8mL2csICdhbmQnKSAvLyBvcGNpb25hbFxuICAgICAgICAgICAgLnJlcGxhY2UoL1teYS16MC05XFxzLV0vZywgJycpIC8vIHF1aXRhIGNhcmFjdGVyZXMgcmFyb3NcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICctJykgLy8gZXNwYWNpb3MgLT4gLVxuICAgICAgICAgICAgLnJlcGxhY2UoLy0rL2csICctJykgLy8gY29sYXBzYSAtLS1cbiAgICAgICAgICAgIC5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7IC8vIHF1aXRhIC0gYWwgaW5pY2lvL2ZpblxuICAgIH1cblxuICAgIHN0YXRpYyB1bmlxdWVTbHVnKGxhYmVsOiBzdHJpbmcsIHVzZWQ6IFNldDxzdHJpbmc+KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMudG9TbHVnKGxhYmVsKSB8fCAnaXRlbSc7XG4gICAgICAgIGlmICghdXNlZC5oYXMoYmFzZSkpIHtcbiAgICAgICAgICAgIHVzZWQuYWRkKGJhc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaSA9IDI7XG4gICAgICAgIHdoaWxlICh1c2VkLmhhcyhgJHtiYXNlfS0ke2l9YCkpIGkrKztcbiAgICAgICAgY29uc3Qgc2x1ZyA9IGAke2Jhc2V9LSR7aX1gO1xuICAgICAgICB1c2VkLmFkZChzbHVnKTtcbiAgICAgICAgcmV0dXJuIHNsdWc7XG4gICAgfVxuXG4gICAgc3RhdGljIGNhbm9uaWNhbEhvdGVsVHlwZVNsdWcobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIC8vIHNsdWcgYmFzZSAoc2luIHRpbGRlcy9yYXJvcylcbiAgICAgICAgbGV0IHMgPSBVdGlscy50b1NsdWcobGFiZWwpO1xuXG4gICAgICAgIC8vIG5vcm1hbGl6YSBwbHVyYWxlcyBjb211bmVzIEVTIChob3RlbChlcyksIGFwYXJ0YW1lbnRvKHMpKVxuICAgICAgICAvLyBwdWVkZXMgYW1wbGlhciBhcXXDrSBzaSB0aWVuZXMgXCJhcGFydGFtZW50b3MgdHVyw61zdGljb3NcIiwgZXRjLlxuICAgICAgICBpZiAocyA9PT0gJ2hvdGVsZXMnKSByZXR1cm4gJ2hvdGVsJztcbiAgICAgICAgaWYgKHMgPT09ICdhcGFydGFtZW50b3MnKSByZXR1cm4gJ2FwYXJ0YW1lbnRvJztcblxuICAgICAgICAvLyByZWdsYSBnZW7DqXJpY2Egc3VhdmU6IHNpIHRlcm1pbmEgZW4gJ3MnIHkgbm8gZXMgJ2Rvcy90cmVzLy4uLicgZXRjLlxuICAgICAgICAvLyAoZXZpdGEgY2FyZ2FydGUgY29zYXMgY29tbyBcInBvb2xzXCIgc2kgZXhpc3RpZXJhbiwgcGVybyBhcXXDrSBhcGxpY2EgYmllbilcbiAgICAgICAgaWYgKHMuZW5kc1dpdGgoJ3MnKSkgcyA9IHMuc2xpY2UoMCwgLTEpO1xuXG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBydWViYSBzaSBlbCB0aXBvIGVzIHVuIGhvdGVsIGVuIHZhcmlvcyBpZGlvbWFzXG4gICAgICovXG4gICAgc3RhdGljIGlzSG90ZWwodHlwZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXR5cGUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHR5cGU/LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBUcmFkdWNjaW9uZXMgZGUgXCJob3RlbFwiIGVuIHZhcmlvcyBpZGlvbWFzXG4gICAgICAgIGNvbnN0IGhvdGVsVHlwZXMgPSBbXG4gICAgICAgICAgICAnaMO0dGVsJyxcbiAgICAgICAgICAgICdob3RlbCcsXG4gICAgICAgICAgICAn0L7RgtC10LvRjCcsXG4gICAgICAgICAgICAnaG90ZXUnLFxuICAgICAgICAgICAgJ2hvdGUnLFxuICAgICAgICAgICAgJ2hvdGVpcycsXG4gICAgICAgICAgICAnaG90ZWxzJyxcbiAgICAgICAgICAgICdow7R0ZWxzJyxcbiAgICAgICAgICAgICdob3RlbGVzJyxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGhvdGVsVHlwZXMuaW5jbHVkZXMobm9ybWFsaXplZCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEZvcm1hdHRlZFVybChsaW5rOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWxpbms/LnVybCkgcmV0dXJuICcnO1xuXG4gICAgICAgIGlmIChsaW5rLnZhcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsZWFuVXJsID0gbGluay51cmwuZW5kc1dpdGgoJy8nKVxuICAgICAgICAgICAgICAgID8gbGluay51cmwuc2xpY2UoMCwgLTEpXG4gICAgICAgICAgICAgICAgOiBsaW5rLnVybDtcbiAgICAgICAgICAgIHJldHVybiBjbGVhblVybCArIGxpbmsudmFycztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaW5rLnVybCArIChsaW5rLnZhcnMgfHwgJycpO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc0FwYXJ0bWVudCh0eXBlPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdHlwZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gdHlwZT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIC8vIFRyYWR1Y2Npb25lcyBkZSBcImFwYXJ0bWVudFwiIGVuIHZhcmlvcyBpZGlvbWFzXG4gICAgICAgIGNvbnN0IGFwYXJ0bWVudFR5cGVzID0gW1xuICAgICAgICAgICAgJ2FwcGFydGVtZW50JyxcbiAgICAgICAgICAgICdhcGFydGFtZW50bycsXG4gICAgICAgICAgICAn0LrQstCw0YDRgtC40YDQsCcsXG4gICAgICAgICAgICAnYXBhcnRhbWVudG9zJyxcbiAgICAgICAgICAgICdhcGFydG1lbnRzJyxcbiAgICAgICAgICAgICdhcGFydG1lbnQnLFxuICAgICAgICAgICAgJ2FwcGFydGVtZW50cycsXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiBhcGFydG1lbnRUeXBlcy5pbmNsdWRlcyhub3JtYWxpemVkKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2hvd0lmU3VwKHZhbHVlPzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gL1xcYihTVVB8c3VwZXJpb3IpXFxiL2k7XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUgPz8gJycpID8gJ1NVUCcgOiAnJztcbiAgICB9XG59XG4iXX0=
@@ -720,9 +720,7 @@ class Utils {
720
720
  // Validación robusta: necesitamos etiqueta y un link string
721
721
  if (typeof rawLink !== 'string')
722
722
  return undefined;
723
- const trimmedValue = rawLink.endsWith('/')
724
- ? rawLink.slice(0, -1)
725
- : rawLink;
723
+ const trimmedValue = rawLink;
726
724
  let url;
727
725
  if (/^\+?[0-9]+$/.test(trimmedValue)) {
728
726
  url = trimmedValue.startsWith('tel:')