@mnaoumov/typescript-lib 1.5.0 → 1.6.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.
@@ -86,7 +86,9 @@ export declare function abortSignalTimeout(timeoutInMilliseconds: number): Abort
86
86
  * globalThis[Symbol.for('@mnaoumov/typescript-lib/state')].values.sharedAbortController.value.abort();
87
87
  * ```
88
88
  *
89
- * In an Obsidian plugin the same instance is also reachable as `__obsidianDevUtils.sharedAbortController.value`.
89
+ * From code, call {@link getSharedAbortController} (or {@link getSharedAbortSignal}) rather than reading the slot.
90
+ * `@mnaoumov/obsidian-lib` also mirrors the instance under the legacy `__obsidianDevUtils` global, but only so that
91
+ * plugins bundling an older `obsidian-dev-utils` copy share it; new code and new console recipes should not use it.
90
92
  *
91
93
  * @returns The shared {@link ResettableAbortController}.
92
94
  */
@@ -99,12 +101,11 @@ export declare function getSharedAbortController(): ResettableAbortController;
99
101
  *
100
102
  * @example
101
103
  * ```typescript
102
- * await loop({
103
- * abortSignal: getSharedAbortSignal(),
104
- * buildNoticeMessage: (file) => `Processing ${file.path}`,
105
- * items: app.vault.getMarkdownFiles(),
106
- * processItem: async (file) => { await processFile(file); }
107
- * });
104
+ * const abortSignal = getSharedAbortSignal();
105
+ * for (const url of urls) {
106
+ * abortSignal.throwIfAborted();
107
+ * await fetch(url, { signal: abortSignal });
108
+ * }
108
109
  * ```
109
110
  *
110
111
  * @returns The {@link AbortSignal} of the shared {@link ResettableAbortController}.
@@ -112,4 +112,4 @@ export {
112
112
  onAbort,
113
113
  waitForAbort
114
114
  };
115
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Fib3J0LWNvbnRyb2xsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBYm9ydENvbnRyb2xsZXIgdXRpbGl0aWVzLlxuICovXG5cbmltcG9ydCB7XG4gIENhbGxiYWNrRGlzcG9zYWJsZSxcbiAgQ29tYmluZURpc3Bvc2FibGVcbn0gZnJvbSAnLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGdldFR5cGVzY3JpcHRMaWJTdGF0ZSB9IGZyb20gJy4vdHlwZXNjcmlwdC1saWItc3RhdGUudHMnO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGFuIGluZmluaXRlIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBjb25zdCBJTkZJTklURV9USU1FT1VUID0gSW5maW5pdHk7XG5cbi8qKlxuICogQW4ge0BsaW5rIEFib3J0Q29udHJvbGxlcn0gdGhhdCBjYW4gYmUgYWJvcnRlZCBtb3JlIHRoYW4gb25jZS5cbiAqXG4gKiBBIHBsYWluIHtAbGluayBBYm9ydENvbnRyb2xsZXJ9IGlzIHNpbmdsZS11c2U6IG9uY2UgYWJvcnRlZCwgaXRzIHNpZ25hbCBzdGF5cyBhYm9ydGVkIGZvcmV2ZXIsIHNvIGl0XG4gKiBjYW5ub3QgYmFjayBhIGNhbmNlbCBidXR0b24gdGhhdCB0aGUgdXNlciBtYXkgcHJlc3MgbW9yZSB0aGFuIG9uY2UuIFRoaXMgb25lIGFib3J0cyB0aGUgY3VycmVudCBzaWduYWxcbiAqIGFuZCBpbW1lZGlhdGVseSByZXBsYWNlcyBpdCwgc28gdGhlIG5leHQgb3BlcmF0aW9uIHN0YXJ0cyB3aXRoIGEgZnJlc2gsIG5vbi1hYm9ydGVkIHNpZ25hbCB3aGlsZSB0aGUgd29ya1xuICogdGhhdCBjYXB0dXJlZCB0aGUgcHJldmlvdXMgc2lnbmFsIHN0aWxsIG9ic2VydmVzIHRoZSBhYm9ydC5cbiAqXG4gKiBSZWFkIHtAbGluayBSZXNldHRhYmxlQWJvcnRDb250cm9sbGVyLnNpZ25hbH0gYXQgdGhlIHN0YXJ0IG9mIGVhY2ggb3BlcmF0aW9uLiBOZXZlciBjYWNoZSBpdCwgb3IgdGhlXG4gKiBvcGVyYXRpb24gYWZ0ZXIgdGhlIGZpcnN0IGFib3J0IHN0YXJ0cyBhbHJlYWR5IGFib3J0ZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc2V0dGFibGVBYm9ydENvbnRyb2xsZXIgPSBuZXcgUmVzZXR0YWJsZUFib3J0Q29udHJvbGxlcigpO1xuICpcbiAqIGF3YWl0IGxvb3Aoe1xuICogICBhYm9ydFNpZ25hbDogcmVzZXR0YWJsZUFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gKiAgIGJ1aWxkTm90aWNlTWVzc2FnZTogKGZpbGUpID0+IGBQcm9jZXNzaW5nICR7ZmlsZS5wYXRofWAsXG4gKiAgIGl0ZW1zOiBhcHAudmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpLFxuICogICBwcm9jZXNzSXRlbTogYXN5bmMgKGZpbGUpID0+IHsgYXdhaXQgcHJvY2Vzc0ZpbGUoZmlsZSk7IH1cbiAqIH0pO1xuICpcbiAqIC8vIEZyb20gYSBjYW5jZWwgYnV0dG9uLCBhIGNvbW1hbmQsIG9yIHRoZSBkZXZ0b29scyBjb25zb2xlLlxuICogcmVzZXR0YWJsZUFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgZ2V0U2hhcmVkQWJvcnRDb250cm9sbGVyfSBmb3IgdGhlIGFwcC13aWRlIGluc3RhbmNlLlxuICovXG5leHBvcnQgY2xhc3MgUmVzZXR0YWJsZUFib3J0Q29udHJvbGxlciB7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBhYm9ydCBzaWduYWwuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQWJvcnRTaWduYWx9IHRoYXQgYWJvcnRzIG9uIHRoZSBuZXh0IHtAbGluayBSZXNldHRhYmxlQWJvcnRDb250cm9sbGVyLmFib3J0fSBjYWxsLlxuICAgKi9cbiAgcHVibGljIGdldCBzaWduYWwoKTogQWJvcnRTaWduYWwge1xuICAgIHJldHVybiB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gIH1cblxuICBwcml2YXRlIGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAvKipcbiAgICogQWJvcnRzIHRoZSBjdXJyZW50IHNpZ25hbCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBhIGZyZXNoLCBub24tYWJvcnRlZCBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSByZWFzb24gLSBUaGUgcmVhc29uIHRvIGFib3J0IHdpdGguIFdoZW4gb21pdHRlZCwgdGhlIHNpZ25hbCBpcyBhYm9ydGVkIHdpdGggdGhlIG5hdGl2ZVxuICAgKiBgQWJvcnRFcnJvcmAge0BsaW5rIERPTUV4Y2VwdGlvbn0sIGV4YWN0bHkgYXMge0BsaW5rIEFib3J0Q29udHJvbGxlci5hYm9ydH0gZG9lcy5cbiAgICovXG4gIHB1YmxpYyBhYm9ydChyZWFzb24/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKTtcbiAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGFib3J0IHNpZ25hbCB0aGF0IGFib3J0cyB3aGVuIGFueSBvZiB0aGUgZ2l2ZW4gYWJvcnQgc2lnbmFscyBhYm9ydC5cbiAqXG4gKiBAcGFyYW0gbWF5YmVBYm9ydFNpZ25hbHMgLSBUaGUgYWJvcnQgc2lnbmFscyB0byBhYm9ydCB3aGVuIGFueSBvZiB0aGVtIGFib3J0LlxuICogQHJldHVybnMgVGhlIGFib3J0IHNpZ25hbCB0aGF0IGFib3J0cyB3aGVuIGFueSBvZiB0aGUgZ2l2ZW4gYWJvcnQgc2lnbmFscyBhYm9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFib3J0U2lnbmFsQW55KC4uLm1heWJlQWJvcnRTaWduYWxzOiAoQWJvcnRTaWduYWwgfCB1bmRlZmluZWQpW10pOiBBYm9ydFNpZ25hbCB7XG4gIGNvbnN0IGFib3J0U2lnbmFscyA9IG1heWJlQWJvcnRTaWduYWxzLmZpbHRlcigoYWJvcnRTaWduYWwpID0+ICEhYWJvcnRTaWduYWwpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gYEFib3J0U2lnbmFsLmFueWAgaXMgZmVhdHVyZS1kZXRlY3RlZCBoZXJlIHdpdGggYSBtYW51YWwgZmFsbGJhY2sgYmVsb3csIHNvIGl0IGlzIG5vdCByZXF1aXJlZCBvbiBvbGRlciBPYnNpZGlhbi9FbGVjdHJvbiAoQ2hyb21pdW0pIHZlcnNpb25zIHRoYXQgbGFjayBpdC5cbiAgaWYgKHR5cGVvZiBBYm9ydFNpZ25hbC5hbnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zIC0tIGBBYm9ydFNpZ25hbC5hbnlgIGlzIGZlYXR1cmUtZGV0ZWN0ZWQgYnkgdGhlIGd1YXJkIGFib3ZlIHdpdGggYSBtYW51YWwgZmFsbGJhY2sgYmVsb3csIHNvIGl0IGlzIG5vdCByZXF1aXJlZCBvbiBvbGRlciBPYnNpZGlhbi9FbGVjdHJvbiAoQ2hyb21pdW0pIHZlcnNpb25zIHRoYXQgbGFjayBpdC5cbiAgICByZXR1cm4gQWJvcnRTaWduYWwuYW55KGFib3J0U2lnbmFscyk7XG4gIH1cblxuICBpZiAoYWJvcnRTaWduYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBhYm9ydFNpZ25hbE5ldmVyKCk7XG4gIH1cblxuICBpZiAoYWJvcnRTaWduYWxzLmxlbmd0aCA9PT0gMSAmJiBhYm9ydFNpZ25hbHNbMF0pIHtcbiAgICByZXR1cm4gYWJvcnRTaWduYWxzWzBdO1xuICB9XG5cbiAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGZvciAoY29uc3QgYWJvcnRTaWduYWwgb2YgYWJvcnRTaWduYWxzKSB7XG4gICAgaWYgKGFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBhYm9ydFNpZ25hbDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBhYm9ydEhhbmRsZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZVtdID0gQXJyYXkuZnJvbShhYm9ydFNpZ25hbHMsIChhYm9ydFNpZ25hbCkgPT4gb25BYm9ydChhYm9ydFNpZ25hbCwgaGFuZGxlQWJvcnQpKTtcblxuICBjb25zdCBjb21iaW5lZEFib3J0SGFuZGxlckRpc3Bvc2FibGUgPSBuZXcgQ29tYmluZURpc3Bvc2FibGUoeyBkaXNwb3NhYmxlczogYWJvcnRIYW5kbGVyRGlzcG9zYWJsZXMgfSk7XG5cbiAgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWw7XG5cbiAgZnVuY3Rpb24gaGFuZGxlQWJvcnQoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogdm9pZCB7XG4gICAgY29tYmluZWRBYm9ydEhhbmRsZXJEaXNwb3NhYmxlLmRpc3Bvc2UoKTtcbiAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoYWJvcnRTaWduYWwucmVhc29uKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGFib3J0IHNpZ25hbCB0aGF0IG5ldmVyIGFib3J0cy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJvcnQgc2lnbmFsIHRoYXQgbmV2ZXIgYWJvcnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWJvcnRTaWduYWxOZXZlcigpOiBBYm9ydFNpZ25hbCB7XG4gIHJldHVybiBuZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsO1xufVxuXG4vKipcbiAqIEFuIGFib3J0IHNpZ25hbCB0aGF0IGFib3J0cyBhZnRlciBhIHRpbWVvdXQuXG4gKlxuICogQHBhcmFtIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIFRoZSBhYm9ydCBzaWduYWwgdGhhdCBhYm9ydHMgYWZ0ZXIgYSB0aW1lb3V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWJvcnRTaWduYWxUaW1lb3V0KHRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyKTogQWJvcnRTaWduYWwge1xuICBpZiAodGltZW91dEluTWlsbGlzZWNvbmRzID09PSBJTkZJTklURV9USU1FT1VUKSB7XG4gICAgcmV0dXJuIGFib3J0U2lnbmFsTmV2ZXIoKTtcbiAgfVxuXG4gIC8vIEludGVudGlvbmFsbHkgTk9UIHRoZSBuYXRpdmUgYEFib3J0U2lnbmFsLnRpbWVvdXRgLCB3aG9zZSBpbnRlcm5hbCB0aW1lciBjYW5ub3QgYmUgYWR2YW5jZWQgYnlcbiAgLy8gYHZpLnVzZUZha2VUaW1lcnMoKWAsIHNvIGBzbGVlcGAgKGl0cyBzb2xlIGNvbnN1bWVyKSB3b3VsZCBiZSB1bmNvbnRyb2xsYWJsZSBpbiB0ZXN0cy4gQnVpbGRpbmdcbiAgLy8gYHNsZWVwYCdzIHNpZ25hbCBvZmYgYGdsb2JhbFRoaXMuc2V0VGltZW91dGAga2VlcHMgaXQgZmFrZS10aW1lciBjb250cm9sbGFibGUgKGxpa2VcbiAgLy8gYHNldFRpbWVvdXRBc3luY2ApIGFuZCBhbHNvIHdvcmtzIGluIGEgTm9kZSBlbnZpcm9ubWVudCB3aGVyZSBgd2luZG93YCBpcyB1bmRlZmluZWQsIHNpbmNlXG4gIC8vIGBnbG9iYWxUaGlzYCBleGlzdHMgaW4gTm9kZSB0b28uIENvbnN1bWVyIGludGVncmF0aW9uLXRlc3QgcHJvamVjdHMgcnVuIHZpdGVzdCB1bmRlclxuICAvLyBgZW52aXJvbm1lbnQ6ICdub2RlJ2AsIGluIHdoaWNoIGEgYHdpbmRvd2AtYmFzZWQgcHJpbWl0aXZlIHRocm93cyBhIGBSZWZlcmVuY2VFcnJvcmAuXG4gIC8vIFRoZSBhYm9ydCByZWFzb24gbWlycm9ycyB0aGUgbmF0aXZlIG9uZSAtLSBhIGBET01FeGNlcHRpb25gIG5hbWVkIGBUaW1lb3V0RXJyb3JgIC0tIG1hdGNoaW5nXG4gIC8vIGBBYm9ydFNpZ25hbC50aW1lb3V0YCBmb3IgYHJlYXNvbi5uYW1lYCBjaGVja3MuXG4gIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBnbG9iYWxUaGlzLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gYERPTUV4Y2VwdGlvbmAgaXMgYSBET00gZ2xvYmFsIGFsd2F5cyBwcmVzZW50IGluIHRoZSBPYnNpZGlhbi9FbGVjdHJvbiAoQ2hyb21pdW0pIHJ1bnRpbWUgdGhpcyBjb2RlIHRhcmdldHMsIGFuZCBpcyBhbHNvIGEgTm9kZSBnbG9iYWwgZnJvbSBOb2RlIDE3IG9ud2FyZC5cbiAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IERPTUV4Y2VwdGlvbihgVGltZWQgb3V0IGluICR7U3RyaW5nKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyl9IG1pbGxpc2Vjb25kc2AsICdUaW1lb3V0RXJyb3InKSk7XG4gIH0sIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gIHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xufVxuXG4vKipcbiAqIFRoZSBhcHAtd2lkZSBzaGFyZWQge0BsaW5rIFJlc2V0dGFibGVBYm9ydENvbnRyb2xsZXJ9LlxuICpcbiAqIEV2ZXJ5IHBsdWdpbiBidWlsdCBvbiB0aGlzIGxpYnJhcnkgc2hhcmVzIG9uZSBpbnN0YW5jZSwgc28gYSBzaW5nbGUge0BsaW5rIFJlc2V0dGFibGVBYm9ydENvbnRyb2xsZXIuYWJvcnR9XG4gKiBjYWxsIGNhbmNlbHMgd2hhdGV2ZXIgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQsIHdoaWNoZXZlciBwbHVnaW4gc3RhcnRlZCBpdC4gQSBwbHVnaW4gdGhhdCBuZWVkc1xuICogYSBjYW5jZWwgYnV0dG9uIG9mIGl0cyBvd24gc2NvcGUgY29uc3RydWN0cyBpdHMgb3duIHtAbGluayBSZXNldHRhYmxlQWJvcnRDb250cm9sbGVyfSBpbnN0ZWFkLlxuICpcbiAqIEl0IGxpdmVzIGluIHRoZSBzaGFyZWQgc3RhdGUsIHNvIGl0IGlzIHJlYWNoYWJsZSBmcm9tIHRoZSBkZXZ0b29scyBjb25zb2xlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGdsb2JhbFRoaXNbU3ltYm9sLmZvcignQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0YXRlJyldLnZhbHVlcy5zaGFyZWRBYm9ydENvbnRyb2xsZXIudmFsdWUuYWJvcnQoKTtcbiAqIGBgYFxuICpcbiAqIEluIGFuIE9ic2lkaWFuIHBsdWdpbiB0aGUgc2FtZSBpbnN0YW5jZSBpcyBhbHNvIHJlYWNoYWJsZSBhcyBgX19vYnNpZGlhbkRldlV0aWxzLnNoYXJlZEFib3J0Q29udHJvbGxlci52YWx1ZWAuXG4gKlxuICogQHJldHVybnMgVGhlIHNoYXJlZCB7QGxpbmsgUmVzZXR0YWJsZUFib3J0Q29udHJvbGxlcn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFyZWRBYm9ydENvbnRyb2xsZXIoKTogUmVzZXR0YWJsZUFib3J0Q29udHJvbGxlciB7XG4gIHJldHVybiBnZXRUeXBlc2NyaXB0TGliU3RhdGUoJ3NoYXJlZEFib3J0Q29udHJvbGxlcicsIG5ldyBSZXNldHRhYmxlQWJvcnRDb250cm9sbGVyKCkpLnZhbHVlO1xufVxuXG4vKipcbiAqIFRoZSBzaWduYWwgb2YgdGhlIGFwcC13aWRlIHNoYXJlZCB7QGxpbmsgUmVzZXR0YWJsZUFib3J0Q29udHJvbGxlcn0uXG4gKlxuICogQ2FsbCBpdCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBvcGVyYXRpb24uIE5ldmVyIGNhY2hlIGl0LCBvciB0aGUgb3BlcmF0aW9uIGFmdGVyIHRoZSBmaXJzdCBhYm9ydCBzdGFydHNcbiAqIGFscmVhZHkgYWJvcnRlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogYXdhaXQgbG9vcCh7XG4gKiAgIGFib3J0U2lnbmFsOiBnZXRTaGFyZWRBYm9ydFNpZ25hbCgpLFxuICogICBidWlsZE5vdGljZU1lc3NhZ2U6IChmaWxlKSA9PiBgUHJvY2Vzc2luZyAke2ZpbGUucGF0aH1gLFxuICogICBpdGVtczogYXBwLnZhdWx0LmdldE1hcmtkb3duRmlsZXMoKSxcbiAqICAgcHJvY2Vzc0l0ZW06IGFzeW5jIChmaWxlKSA9PiB7IGF3YWl0IHByb2Nlc3NGaWxlKGZpbGUpOyB9XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQWJvcnRTaWduYWx9IG9mIHRoZSBzaGFyZWQge0BsaW5rIFJlc2V0dGFibGVBYm9ydENvbnRyb2xsZXJ9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hhcmVkQWJvcnRTaWduYWwoKTogQWJvcnRTaWduYWwge1xuICByZXR1cm4gZ2V0U2hhcmVkQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gYWJvcnQgbGlzdGVuZXIgdG8gYW4gYWJvcnQgc2lnbmFsIGFuZCBjYWxscyB0aGUgY2FsbGJhY2sgaWYgdGhlIGFib3J0IHNpZ25hbCBpcyBhbHJlYWR5IGFib3J0ZWQuXG4gKlxuICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBhZGQgdGhlIGxpc3RlbmVyIHRvLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgYWJvcnQgc2lnbmFsIGFib3J0cy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgcmVtb3ZlcyB0aGUgYWJvcnQgbGlzdGVuZXIgd2hlbiBkaXNwb3NlZCwgZm9yIHVzZSB3aXRoIGB1c2luZ2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkFib3J0KGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCwgY2FsbGJhY2s6IChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgaWYgKGFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICBjYWxsYmFjayhhYm9ydFNpZ25hbCk7XG4gICAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoeyBjYWxsYmFjazogbm9vcCB9KTtcbiAgfVxuXG4gIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgd3JhcHBlZENhbGxiYWNrLCB7IG9uY2U6IHRydWUgfSk7XG4gIHJldHVybiBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICBjYWxsYmFjazogKCk6IHZvaWQgPT4ge1xuICAgICAgYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB3cmFwcGVkQ2FsbGJhY2spO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlZENhbGxiYWNrKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjYWxsYmFjaygkZXZlbnQudGFyZ2V0IGFzIEFib3J0U2lnbmFsKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhbiBhYm9ydCBzaWduYWwgdG8gYWJvcnQgYW5kIHJlc29sdmVzIHdpdGggaXRzIHJlYXNvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBFeHBlY3RlZCB0eXBlIG9mIGBhYm9ydFNpZ25hbC5yZWFzb25gLlxuICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byB3YWl0IGZvci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVhc29uIG9mIHRoZSBhYm9ydCBzaWduYWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0Rm9yQWJvcnQ8VCA9IHVua25vd24+KGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD47XG4vKipcbiAqIFdhaXRzIGZvciBhbiBhYm9ydCBzaWduYWwgdG8gYWJvcnQgYW5kIHJlamVjdHMgd2l0aCBpdHMgcmVhc29uLlxuICpcbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gd2FpdCBmb3IuXG4gKiBAcGFyYW0gc2hvdWxkUmVqZWN0T25BYm9ydCAtIFdoZXRoZXIgdG8gcmVqZWN0IHRoZSBwcm9taXNlIGlmIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyB3aXRoIHRoZSByZWFzb24gb2YgdGhlIGFib3J0IHNpZ25hbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRGb3JBYm9ydChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsIHNob3VsZFJlamVjdE9uQWJvcnQ6IHRydWUpOiBQcm9taXNlPG5ldmVyPjtcbi8qKlxuICogV2FpdHMgZm9yIGFuIGFib3J0IHNpZ25hbCB0byBhYm9ydCBhbmQgcmVzb2x2ZXMgd2l0aCBpdHMgcmVhc29uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIEV4cGVjdGVkIHR5cGUgb2YgYGFib3J0U2lnbmFsLnJlYXNvbmAuXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIHdhaXQgZm9yLlxuICogQHBhcmFtIHNob3VsZFJlamVjdE9uQWJvcnQgLSBXaGV0aGVyIHRvIHJlamVjdCB0aGUgcHJvbWlzZSBpZiB0aGUgYWJvcnQgc2lnbmFsIGlzIGFib3J0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgYWJvcnQgc2lnbmFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FpdEZvckFib3J0PFQgPSB1bmtub3duPihhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsIHNob3VsZFJlamVjdE9uQWJvcnQ/OiBib29sZWFuKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgb25BYm9ydChhYm9ydFNpZ25hbCwgKCkgPT4ge1xuICAgICAgaWYgKHNob3VsZFJlamVjdE9uQWJvcnQpIHtcbiAgICAgICAgcmVqZWN0KGFib3J0U2lnbmFsLnJlYXNvbiBhcyBFcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKGFib3J0U2lnbmFsLnJlYXNvbiBhcyBUKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQU1BO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsNkJBQTZCO0FBSy9CLE1BQU0sbUJBQW1CO0FBOEJ6QixNQUFNLDBCQUEwQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1yQyxJQUFXLFNBQXNCO0FBQy9CLFdBQU8sS0FBSyxnQkFBZ0I7QUFBQSxFQUM5QjtBQUFBLEVBRVEsa0JBQWtCLElBQUksZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRdkMsTUFBTSxRQUF3QjtBQUNuQyxTQUFLLGdCQUFnQixNQUFNLE1BQU07QUFDakMsU0FBSyxrQkFBa0IsSUFBSSxnQkFBZ0I7QUFBQSxFQUM3QztBQUNGO0FBUU8sU0FBUyxrQkFBa0IsbUJBQTZEO0FBQzdGLFFBQU0sZUFBZSxrQkFBa0IsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsV0FBVztBQUc1RSxNQUFJLE9BQU8sWUFBWSxRQUFRLFlBQVk7QUFFekMsV0FBTyxZQUFZLElBQUksWUFBWTtBQUFBLEVBQ3JDO0FBRUEsTUFBSSxhQUFhLFdBQVcsR0FBRztBQUM3QixXQUFPLGlCQUFpQjtBQUFBLEVBQzFCO0FBRUEsTUFBSSxhQUFhLFdBQVcsS0FBSyxhQUFhLENBQUMsR0FBRztBQUNoRCxXQUFPLGFBQWEsQ0FBQztBQUFBLEVBQ3ZCO0FBRUEsUUFBTSxrQkFBa0IsSUFBSSxnQkFBZ0I7QUFFNUMsYUFBVyxlQUFlLGNBQWM7QUFDdEMsUUFBSSxZQUFZLFNBQVM7QUFDdkIsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsUUFBTSwwQkFBd0MsTUFBTSxLQUFLLGNBQWMsQ0FBQyxnQkFBZ0IsUUFBUSxhQUFhLFdBQVcsQ0FBQztBQUV6SCxRQUFNLGlDQUFpQyxJQUFJLGtCQUFrQixFQUFFLGFBQWEsd0JBQXdCLENBQUM7QUFFckcsU0FBTyxnQkFBZ0I7QUFFdkIsV0FBUyxZQUFZLGFBQWdDO0FBQ25ELG1DQUErQixRQUFRO0FBQ3ZDLG9CQUFnQixNQUFNLFlBQVksTUFBTTtBQUFBLEVBQzFDO0FBQ0Y7QUFPTyxTQUFTLG1CQUFnQztBQUM5QyxTQUFPLElBQUksZ0JBQWdCLEVBQUU7QUFDL0I7QUFRTyxTQUFTLG1CQUFtQix1QkFBNEM7QUFDN0UsTUFBSSwwQkFBMEIsa0JBQWtCO0FBQzlDLFdBQU8saUJBQWlCO0FBQUEsRUFDMUI7QUFVQSxRQUFNLGtCQUFrQixJQUFJLGdCQUFnQjtBQUU1QyxhQUFXLFdBQVcsTUFBTTtBQUUxQixvQkFBZ0IsTUFBTSxJQUFJLGFBQWEsZ0JBQWdCLE9BQU8scUJBQXFCLENBQUMsaUJBQWlCLGNBQWMsQ0FBQztBQUFBLEVBQ3RILEdBQUcscUJBQXFCO0FBQ3hCLFNBQU8sZ0JBQWdCO0FBQ3pCO0FBbUJPLFNBQVMsMkJBQXNEO0FBQ3BFLFNBQU8sc0JBQXNCLHlCQUF5QixJQUFJLDBCQUEwQixDQUFDLEVBQUU7QUFDekY7QUFvQk8sU0FBUyx1QkFBb0M7QUFDbEQsU0FBTyx5QkFBeUIsRUFBRTtBQUNwQztBQVNPLFNBQVMsUUFBUSxhQUEwQixVQUEwRDtBQUMxRyxNQUFJLFlBQVksU0FBUztBQUN2QixhQUFTLFdBQVc7QUFDcEIsV0FBTyxJQUFJLG1CQUFtQixFQUFFLFVBQVUsS0FBSyxDQUFDO0FBQUEsRUFDbEQ7QUFFQSxjQUFZLGlCQUFpQixTQUFTLGlCQUFpQixFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3JFLFNBQU8sSUFBSSxtQkFBbUI7QUFBQSxJQUM1QixVQUFVLE1BQVk7QUFDcEIsa0JBQVksb0JBQW9CLFNBQVMsZUFBZTtBQUFBLElBQzFEO0FBQUEsRUFDRixDQUFDO0FBRUQsV0FBUyxnQkFBZ0IsUUFBcUI7QUFDNUMsYUFBUyxPQUFPLE1BQXFCO0FBQUEsRUFDdkM7QUFDRjtBQTBCTyxTQUFTLGFBQTBCLGFBQTBCLHFCQUEyQztBQUM3RyxTQUFPLElBQUksUUFBVyxDQUFDLFNBQVMsV0FBVztBQUN6QyxZQUFRLGFBQWEsTUFBTTtBQUN6QixVQUFJLHFCQUFxQjtBQUN2QixlQUFPLFlBQVksTUFBZTtBQUFBLE1BQ3BDLE9BQU87QUFDTCxnQkFBUSxZQUFZLE1BQVc7QUFBQSxNQUNqQztBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogW10KfQo=
115
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Fib3J0LWNvbnRyb2xsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBYm9ydENvbnRyb2xsZXIgdXRpbGl0aWVzLlxuICovXG5cbmltcG9ydCB7XG4gIENhbGxiYWNrRGlzcG9zYWJsZSxcbiAgQ29tYmluZURpc3Bvc2FibGVcbn0gZnJvbSAnLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGdldFR5cGVzY3JpcHRMaWJTdGF0ZSB9IGZyb20gJy4vdHlwZXNjcmlwdC1saWItc3RhdGUudHMnO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGFuIGluZmluaXRlIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBjb25zdCBJTkZJTklURV9USU1FT1VUID0gSW5maW5pdHk7XG5cbi8qKlxuICogQW4ge0BsaW5rIEFib3J0Q29udHJvbGxlcn0gdGhhdCBjYW4gYmUgYWJvcnRlZCBtb3JlIHRoYW4gb25jZS5cbiAqXG4gKiBBIHBsYWluIHtAbGluayBBYm9ydENvbnRyb2xsZXJ9IGlzIHNpbmdsZS11c2U6IG9uY2UgYWJvcnRlZCwgaXRzIHNpZ25hbCBzdGF5cyBhYm9ydGVkIGZvcmV2ZXIsIHNvIGl0XG4gKiBjYW5ub3QgYmFjayBhIGNhbmNlbCBidXR0b24gdGhhdCB0aGUgdXNlciBtYXkgcHJlc3MgbW9yZSB0aGFuIG9uY2UuIFRoaXMgb25lIGFib3J0cyB0aGUgY3VycmVudCBzaWduYWxcbiAqIGFuZCBpbW1lZGlhdGVseSByZXBsYWNlcyBpdCwgc28gdGhlIG5leHQgb3BlcmF0aW9uIHN0YXJ0cyB3aXRoIGEgZnJlc2gsIG5vbi1hYm9ydGVkIHNpZ25hbCB3aGlsZSB0aGUgd29ya1xuICogdGhhdCBjYXB0dXJlZCB0aGUgcHJldmlvdXMgc2lnbmFsIHN0aWxsIG9ic2VydmVzIHRoZSBhYm9ydC5cbiAqXG4gKiBSZWFkIHtAbGluayBSZXNldHRhYmxlQWJvcnRDb250cm9sbGVyLnNpZ25hbH0gYXQgdGhlIHN0YXJ0IG9mIGVhY2ggb3BlcmF0aW9uLiBOZXZlciBjYWNoZSBpdCwgb3IgdGhlXG4gKiBvcGVyYXRpb24gYWZ0ZXIgdGhlIGZpcnN0IGFib3J0IHN0YXJ0cyBhbHJlYWR5IGFib3J0ZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc2V0dGFibGVBYm9ydENvbnRyb2xsZXIgPSBuZXcgUmVzZXR0YWJsZUFib3J0Q29udHJvbGxlcigpO1xuICpcbiAqIGF3YWl0IGxvb3Aoe1xuICogICBhYm9ydFNpZ25hbDogcmVzZXR0YWJsZUFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gKiAgIGJ1aWxkTm90aWNlTWVzc2FnZTogKGZpbGUpID0+IGBQcm9jZXNzaW5nICR7ZmlsZS5wYXRofWAsXG4gKiAgIGl0ZW1zOiBhcHAudmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpLFxuICogICBwcm9jZXNzSXRlbTogYXN5bmMgKGZpbGUpID0+IHsgYXdhaXQgcHJvY2Vzc0ZpbGUoZmlsZSk7IH1cbiAqIH0pO1xuICpcbiAqIC8vIEZyb20gYSBjYW5jZWwgYnV0dG9uLCBhIGNvbW1hbmQsIG9yIHRoZSBkZXZ0b29scyBjb25zb2xlLlxuICogcmVzZXR0YWJsZUFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgZ2V0U2hhcmVkQWJvcnRDb250cm9sbGVyfSBmb3IgdGhlIGFwcC13aWRlIGluc3RhbmNlLlxuICovXG5leHBvcnQgY2xhc3MgUmVzZXR0YWJsZUFib3J0Q29udHJvbGxlciB7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBhYm9ydCBzaWduYWwuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQWJvcnRTaWduYWx9IHRoYXQgYWJvcnRzIG9uIHRoZSBuZXh0IHtAbGluayBSZXNldHRhYmxlQWJvcnRDb250cm9sbGVyLmFib3J0fSBjYWxsLlxuICAgKi9cbiAgcHVibGljIGdldCBzaWduYWwoKTogQWJvcnRTaWduYWwge1xuICAgIHJldHVybiB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gIH1cblxuICBwcml2YXRlIGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAvKipcbiAgICogQWJvcnRzIHRoZSBjdXJyZW50IHNpZ25hbCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBhIGZyZXNoLCBub24tYWJvcnRlZCBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSByZWFzb24gLSBUaGUgcmVhc29uIHRvIGFib3J0IHdpdGguIFdoZW4gb21pdHRlZCwgdGhlIHNpZ25hbCBpcyBhYm9ydGVkIHdpdGggdGhlIG5hdGl2ZVxuICAgKiBgQWJvcnRFcnJvcmAge0BsaW5rIERPTUV4Y2VwdGlvbn0sIGV4YWN0bHkgYXMge0BsaW5rIEFib3J0Q29udHJvbGxlci5hYm9ydH0gZG9lcy5cbiAgICovXG4gIHB1YmxpYyBhYm9ydChyZWFzb24/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKTtcbiAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGFib3J0IHNpZ25hbCB0aGF0IGFib3J0cyB3aGVuIGFueSBvZiB0aGUgZ2l2ZW4gYWJvcnQgc2lnbmFscyBhYm9ydC5cbiAqXG4gKiBAcGFyYW0gbWF5YmVBYm9ydFNpZ25hbHMgLSBUaGUgYWJvcnQgc2lnbmFscyB0byBhYm9ydCB3aGVuIGFueSBvZiB0aGVtIGFib3J0LlxuICogQHJldHVybnMgVGhlIGFib3J0IHNpZ25hbCB0aGF0IGFib3J0cyB3aGVuIGFueSBvZiB0aGUgZ2l2ZW4gYWJvcnQgc2lnbmFscyBhYm9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFib3J0U2lnbmFsQW55KC4uLm1heWJlQWJvcnRTaWduYWxzOiAoQWJvcnRTaWduYWwgfCB1bmRlZmluZWQpW10pOiBBYm9ydFNpZ25hbCB7XG4gIGNvbnN0IGFib3J0U2lnbmFscyA9IG1heWJlQWJvcnRTaWduYWxzLmZpbHRlcigoYWJvcnRTaWduYWwpID0+ICEhYWJvcnRTaWduYWwpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gYEFib3J0U2lnbmFsLmFueWAgaXMgZmVhdHVyZS1kZXRlY3RlZCBoZXJlIHdpdGggYSBtYW51YWwgZmFsbGJhY2sgYmVsb3csIHNvIGl0IGlzIG5vdCByZXF1aXJlZCBvbiBvbGRlciBPYnNpZGlhbi9FbGVjdHJvbiAoQ2hyb21pdW0pIHZlcnNpb25zIHRoYXQgbGFjayBpdC5cbiAgaWYgKHR5cGVvZiBBYm9ydFNpZ25hbC5hbnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zIC0tIGBBYm9ydFNpZ25hbC5hbnlgIGlzIGZlYXR1cmUtZGV0ZWN0ZWQgYnkgdGhlIGd1YXJkIGFib3ZlIHdpdGggYSBtYW51YWwgZmFsbGJhY2sgYmVsb3csIHNvIGl0IGlzIG5vdCByZXF1aXJlZCBvbiBvbGRlciBPYnNpZGlhbi9FbGVjdHJvbiAoQ2hyb21pdW0pIHZlcnNpb25zIHRoYXQgbGFjayBpdC5cbiAgICByZXR1cm4gQWJvcnRTaWduYWwuYW55KGFib3J0U2lnbmFscyk7XG4gIH1cblxuICBpZiAoYWJvcnRTaWduYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBhYm9ydFNpZ25hbE5ldmVyKCk7XG4gIH1cblxuICBpZiAoYWJvcnRTaWduYWxzLmxlbmd0aCA9PT0gMSAmJiBhYm9ydFNpZ25hbHNbMF0pIHtcbiAgICByZXR1cm4gYWJvcnRTaWduYWxzWzBdO1xuICB9XG5cbiAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGZvciAoY29uc3QgYWJvcnRTaWduYWwgb2YgYWJvcnRTaWduYWxzKSB7XG4gICAgaWYgKGFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBhYm9ydFNpZ25hbDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBhYm9ydEhhbmRsZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZVtdID0gQXJyYXkuZnJvbShhYm9ydFNpZ25hbHMsIChhYm9ydFNpZ25hbCkgPT4gb25BYm9ydChhYm9ydFNpZ25hbCwgaGFuZGxlQWJvcnQpKTtcblxuICBjb25zdCBjb21iaW5lZEFib3J0SGFuZGxlckRpc3Bvc2FibGUgPSBuZXcgQ29tYmluZURpc3Bvc2FibGUoeyBkaXNwb3NhYmxlczogYWJvcnRIYW5kbGVyRGlzcG9zYWJsZXMgfSk7XG5cbiAgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWw7XG5cbiAgZnVuY3Rpb24gaGFuZGxlQWJvcnQoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogdm9pZCB7XG4gICAgY29tYmluZWRBYm9ydEhhbmRsZXJEaXNwb3NhYmxlLmRpc3Bvc2UoKTtcbiAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoYWJvcnRTaWduYWwucmVhc29uKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGFib3J0IHNpZ25hbCB0aGF0IG5ldmVyIGFib3J0cy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJvcnQgc2lnbmFsIHRoYXQgbmV2ZXIgYWJvcnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWJvcnRTaWduYWxOZXZlcigpOiBBYm9ydFNpZ25hbCB7XG4gIHJldHVybiBuZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsO1xufVxuXG4vKipcbiAqIEFuIGFib3J0IHNpZ25hbCB0aGF0IGFib3J0cyBhZnRlciBhIHRpbWVvdXQuXG4gKlxuICogQHBhcmFtIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIFRoZSBhYm9ydCBzaWduYWwgdGhhdCBhYm9ydHMgYWZ0ZXIgYSB0aW1lb3V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWJvcnRTaWduYWxUaW1lb3V0KHRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyKTogQWJvcnRTaWduYWwge1xuICBpZiAodGltZW91dEluTWlsbGlzZWNvbmRzID09PSBJTkZJTklURV9USU1FT1VUKSB7XG4gICAgcmV0dXJuIGFib3J0U2lnbmFsTmV2ZXIoKTtcbiAgfVxuXG4gIC8vIEludGVudGlvbmFsbHkgTk9UIHRoZSBuYXRpdmUgYEFib3J0U2lnbmFsLnRpbWVvdXRgLCB3aG9zZSBpbnRlcm5hbCB0aW1lciBjYW5ub3QgYmUgYWR2YW5jZWQgYnlcbiAgLy8gYHZpLnVzZUZha2VUaW1lcnMoKWAsIHNvIGBzbGVlcGAgKGl0cyBzb2xlIGNvbnN1bWVyKSB3b3VsZCBiZSB1bmNvbnRyb2xsYWJsZSBpbiB0ZXN0cy4gQnVpbGRpbmdcbiAgLy8gYHNsZWVwYCdzIHNpZ25hbCBvZmYgYGdsb2JhbFRoaXMuc2V0VGltZW91dGAga2VlcHMgaXQgZmFrZS10aW1lciBjb250cm9sbGFibGUgKGxpa2VcbiAgLy8gYHNldFRpbWVvdXRBc3luY2ApIGFuZCBhbHNvIHdvcmtzIGluIGEgTm9kZSBlbnZpcm9ubWVudCB3aGVyZSBgd2luZG93YCBpcyB1bmRlZmluZWQsIHNpbmNlXG4gIC8vIGBnbG9iYWxUaGlzYCBleGlzdHMgaW4gTm9kZSB0b28uIENvbnN1bWVyIGludGVncmF0aW9uLXRlc3QgcHJvamVjdHMgcnVuIHZpdGVzdCB1bmRlclxuICAvLyBgZW52aXJvbm1lbnQ6ICdub2RlJ2AsIGluIHdoaWNoIGEgYHdpbmRvd2AtYmFzZWQgcHJpbWl0aXZlIHRocm93cyBhIGBSZWZlcmVuY2VFcnJvcmAuXG4gIC8vIFRoZSBhYm9ydCByZWFzb24gbWlycm9ycyB0aGUgbmF0aXZlIG9uZSAtLSBhIGBET01FeGNlcHRpb25gIG5hbWVkIGBUaW1lb3V0RXJyb3JgIC0tIG1hdGNoaW5nXG4gIC8vIGBBYm9ydFNpZ25hbC50aW1lb3V0YCBmb3IgYHJlYXNvbi5uYW1lYCBjaGVja3MuXG4gIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBnbG9iYWxUaGlzLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gYERPTUV4Y2VwdGlvbmAgaXMgYSBET00gZ2xvYmFsIGFsd2F5cyBwcmVzZW50IGluIHRoZSBPYnNpZGlhbi9FbGVjdHJvbiAoQ2hyb21pdW0pIHJ1bnRpbWUgdGhpcyBjb2RlIHRhcmdldHMsIGFuZCBpcyBhbHNvIGEgTm9kZSBnbG9iYWwgZnJvbSBOb2RlIDE3IG9ud2FyZC5cbiAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IERPTUV4Y2VwdGlvbihgVGltZWQgb3V0IGluICR7U3RyaW5nKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyl9IG1pbGxpc2Vjb25kc2AsICdUaW1lb3V0RXJyb3InKSk7XG4gIH0sIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gIHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xufVxuXG4vKipcbiAqIFRoZSBhcHAtd2lkZSBzaGFyZWQge0BsaW5rIFJlc2V0dGFibGVBYm9ydENvbnRyb2xsZXJ9LlxuICpcbiAqIEV2ZXJ5IHBsdWdpbiBidWlsdCBvbiB0aGlzIGxpYnJhcnkgc2hhcmVzIG9uZSBpbnN0YW5jZSwgc28gYSBzaW5nbGUge0BsaW5rIFJlc2V0dGFibGVBYm9ydENvbnRyb2xsZXIuYWJvcnR9XG4gKiBjYWxsIGNhbmNlbHMgd2hhdGV2ZXIgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQsIHdoaWNoZXZlciBwbHVnaW4gc3RhcnRlZCBpdC4gQSBwbHVnaW4gdGhhdCBuZWVkc1xuICogYSBjYW5jZWwgYnV0dG9uIG9mIGl0cyBvd24gc2NvcGUgY29uc3RydWN0cyBpdHMgb3duIHtAbGluayBSZXNldHRhYmxlQWJvcnRDb250cm9sbGVyfSBpbnN0ZWFkLlxuICpcbiAqIEl0IGxpdmVzIGluIHRoZSBzaGFyZWQgc3RhdGUsIHNvIGl0IGlzIHJlYWNoYWJsZSBmcm9tIHRoZSBkZXZ0b29scyBjb25zb2xlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGdsb2JhbFRoaXNbU3ltYm9sLmZvcignQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0YXRlJyldLnZhbHVlcy5zaGFyZWRBYm9ydENvbnRyb2xsZXIudmFsdWUuYWJvcnQoKTtcbiAqIGBgYFxuICpcbiAqIEZyb20gY29kZSwgY2FsbCB7QGxpbmsgZ2V0U2hhcmVkQWJvcnRDb250cm9sbGVyfSAob3Ige0BsaW5rIGdldFNoYXJlZEFib3J0U2lnbmFsfSkgcmF0aGVyIHRoYW4gcmVhZGluZyB0aGUgc2xvdC5cbiAqIGBAbW5hb3Vtb3Yvb2JzaWRpYW4tbGliYCBhbHNvIG1pcnJvcnMgdGhlIGluc3RhbmNlIHVuZGVyIHRoZSBsZWdhY3kgYF9fb2JzaWRpYW5EZXZVdGlsc2AgZ2xvYmFsLCBidXQgb25seSBzbyB0aGF0XG4gKiBwbHVnaW5zIGJ1bmRsaW5nIGFuIG9sZGVyIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGNvcHkgc2hhcmUgaXQ7IG5ldyBjb2RlIGFuZCBuZXcgY29uc29sZSByZWNpcGVzIHNob3VsZCBub3QgdXNlIGl0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBzaGFyZWQge0BsaW5rIFJlc2V0dGFibGVBYm9ydENvbnRyb2xsZXJ9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hhcmVkQWJvcnRDb250cm9sbGVyKCk6IFJlc2V0dGFibGVBYm9ydENvbnRyb2xsZXIge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKCdzaGFyZWRBYm9ydENvbnRyb2xsZXInLCBuZXcgUmVzZXR0YWJsZUFib3J0Q29udHJvbGxlcigpKS52YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgc2lnbmFsIG9mIHRoZSBhcHAtd2lkZSBzaGFyZWQge0BsaW5rIFJlc2V0dGFibGVBYm9ydENvbnRyb2xsZXJ9LlxuICpcbiAqIENhbGwgaXQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggb3BlcmF0aW9uLiBOZXZlciBjYWNoZSBpdCwgb3IgdGhlIG9wZXJhdGlvbiBhZnRlciB0aGUgZmlyc3QgYWJvcnQgc3RhcnRzXG4gKiBhbHJlYWR5IGFib3J0ZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFib3J0U2lnbmFsID0gZ2V0U2hhcmVkQWJvcnRTaWduYWwoKTtcbiAqIGZvciAoY29uc3QgdXJsIG9mIHVybHMpIHtcbiAqICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAqICAgYXdhaXQgZmV0Y2godXJsLCB7IHNpZ25hbDogYWJvcnRTaWduYWwgfSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEFib3J0U2lnbmFsfSBvZiB0aGUgc2hhcmVkIHtAbGluayBSZXNldHRhYmxlQWJvcnRDb250cm9sbGVyfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNoYXJlZEFib3J0U2lnbmFsKCk6IEFib3J0U2lnbmFsIHtcbiAgcmV0dXJuIGdldFNoYXJlZEFib3J0Q29udHJvbGxlcigpLnNpZ25hbDtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIGFib3J0IGxpc3RlbmVyIHRvIGFuIGFib3J0IHNpZ25hbCBhbmQgY2FsbHMgdGhlIGNhbGxiYWNrIGlmIHRoZSBhYm9ydCBzaWduYWwgaXMgYWxyZWFkeSBhYm9ydGVkLlxuICpcbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gYWRkIHRoZSBsaXN0ZW5lciB0by5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGFib3J0IHNpZ25hbCBhYm9ydHMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHJlbW92ZXMgdGhlIGFib3J0IGxpc3RlbmVyIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb25BYm9ydChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsIGNhbGxiYWNrOiAoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gIGlmIChhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgY2FsbGJhY2soYWJvcnRTaWduYWwpO1xuICAgIHJldHVybiBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHsgY2FsbGJhY2s6IG5vb3AgfSk7XG4gIH1cblxuICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHdyYXBwZWRDYWxsYmFjaywgeyBvbmNlOiB0cnVlIH0pO1xuICByZXR1cm4gbmV3IENhbGxiYWNrRGlzcG9zYWJsZSh7XG4gICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgIGFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgd3JhcHBlZENhbGxiYWNrKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZWRDYWxsYmFjaygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY2FsbGJhY2soJGV2ZW50LnRhcmdldCBhcyBBYm9ydFNpZ25hbCk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYW4gYWJvcnQgc2lnbmFsIHRvIGFib3J0IGFuZCByZXNvbHZlcyB3aXRoIGl0cyByZWFzb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gRXhwZWN0ZWQgdHlwZSBvZiBgYWJvcnRTaWduYWwucmVhc29uYC5cbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gd2FpdCBmb3IuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgYWJvcnQgc2lnbmFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FpdEZvckFib3J0PFQgPSB1bmtub3duPihhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+O1xuLyoqXG4gKiBXYWl0cyBmb3IgYW4gYWJvcnQgc2lnbmFsIHRvIGFib3J0IGFuZCByZWplY3RzIHdpdGggaXRzIHJlYXNvbi5cbiAqXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIHdhaXQgZm9yLlxuICogQHBhcmFtIHNob3VsZFJlamVjdE9uQWJvcnQgLSBXaGV0aGVyIHRvIHJlamVjdCB0aGUgcHJvbWlzZSBpZiB0aGUgYWJvcnQgc2lnbmFsIGlzIGFib3J0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlamVjdHMgd2l0aCB0aGUgcmVhc29uIG9mIHRoZSBhYm9ydCBzaWduYWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0Rm9yQWJvcnQoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsLCBzaG91bGRSZWplY3RPbkFib3J0OiB0cnVlKTogUHJvbWlzZTxuZXZlcj47XG4vKipcbiAqIFdhaXRzIGZvciBhbiBhYm9ydCBzaWduYWwgdG8gYWJvcnQgYW5kIHJlc29sdmVzIHdpdGggaXRzIHJlYXNvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBFeHBlY3RlZCB0eXBlIG9mIGBhYm9ydFNpZ25hbC5yZWFzb25gLlxuICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byB3YWl0IGZvci5cbiAqIEBwYXJhbSBzaG91bGRSZWplY3RPbkFib3J0IC0gV2hldGhlciB0byByZWplY3QgdGhlIHByb21pc2UgaWYgdGhlIGFib3J0IHNpZ25hbCBpcyBhYm9ydGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZWFzb24gb2YgdGhlIGFib3J0IHNpZ25hbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRGb3JBYm9ydDxUID0gdW5rbm93bj4oYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsLCBzaG91bGRSZWplY3RPbkFib3J0PzogYm9vbGVhbik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIG9uQWJvcnQoYWJvcnRTaWduYWwsICgpID0+IHtcbiAgICAgIGlmIChzaG91bGRSZWplY3RPbkFib3J0KSB7XG4gICAgICAgIHJlamVjdChhYm9ydFNpZ25hbC5yZWFzb24gYXMgRXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShhYm9ydFNpZ25hbC5yZWFzb24gYXMgVCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFNQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsWUFBWTtBQUNyQixTQUFTLDZCQUE2QjtBQUsvQixNQUFNLG1CQUFtQjtBQThCekIsTUFBTSwwQkFBMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNckMsSUFBVyxTQUFzQjtBQUMvQixXQUFPLEtBQUssZ0JBQWdCO0FBQUEsRUFDOUI7QUFBQSxFQUVRLGtCQUFrQixJQUFJLGdCQUFnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUXZDLE1BQU0sUUFBd0I7QUFDbkMsU0FBSyxnQkFBZ0IsTUFBTSxNQUFNO0FBQ2pDLFNBQUssa0JBQWtCLElBQUksZ0JBQWdCO0FBQUEsRUFDN0M7QUFDRjtBQVFPLFNBQVMsa0JBQWtCLG1CQUE2RDtBQUM3RixRQUFNLGVBQWUsa0JBQWtCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFdBQVc7QUFHNUUsTUFBSSxPQUFPLFlBQVksUUFBUSxZQUFZO0FBRXpDLFdBQU8sWUFBWSxJQUFJLFlBQVk7QUFBQSxFQUNyQztBQUVBLE1BQUksYUFBYSxXQUFXLEdBQUc7QUFDN0IsV0FBTyxpQkFBaUI7QUFBQSxFQUMxQjtBQUVBLE1BQUksYUFBYSxXQUFXLEtBQUssYUFBYSxDQUFDLEdBQUc7QUFDaEQsV0FBTyxhQUFhLENBQUM7QUFBQSxFQUN2QjtBQUVBLFFBQU0sa0JBQWtCLElBQUksZ0JBQWdCO0FBRTVDLGFBQVcsZUFBZSxjQUFjO0FBQ3RDLFFBQUksWUFBWSxTQUFTO0FBQ3ZCLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFFBQU0sMEJBQXdDLE1BQU0sS0FBSyxjQUFjLENBQUMsZ0JBQWdCLFFBQVEsYUFBYSxXQUFXLENBQUM7QUFFekgsUUFBTSxpQ0FBaUMsSUFBSSxrQkFBa0IsRUFBRSxhQUFhLHdCQUF3QixDQUFDO0FBRXJHLFNBQU8sZ0JBQWdCO0FBRXZCLFdBQVMsWUFBWSxhQUFnQztBQUNuRCxtQ0FBK0IsUUFBUTtBQUN2QyxvQkFBZ0IsTUFBTSxZQUFZLE1BQU07QUFBQSxFQUMxQztBQUNGO0FBT08sU0FBUyxtQkFBZ0M7QUFDOUMsU0FBTyxJQUFJLGdCQUFnQixFQUFFO0FBQy9CO0FBUU8sU0FBUyxtQkFBbUIsdUJBQTRDO0FBQzdFLE1BQUksMEJBQTBCLGtCQUFrQjtBQUM5QyxXQUFPLGlCQUFpQjtBQUFBLEVBQzFCO0FBVUEsUUFBTSxrQkFBa0IsSUFBSSxnQkFBZ0I7QUFFNUMsYUFBVyxXQUFXLE1BQU07QUFFMUIsb0JBQWdCLE1BQU0sSUFBSSxhQUFhLGdCQUFnQixPQUFPLHFCQUFxQixDQUFDLGlCQUFpQixjQUFjLENBQUM7QUFBQSxFQUN0SCxHQUFHLHFCQUFxQjtBQUN4QixTQUFPLGdCQUFnQjtBQUN6QjtBQXFCTyxTQUFTLDJCQUFzRDtBQUNwRSxTQUFPLHNCQUFzQix5QkFBeUIsSUFBSSwwQkFBMEIsQ0FBQyxFQUFFO0FBQ3pGO0FBbUJPLFNBQVMsdUJBQW9DO0FBQ2xELFNBQU8seUJBQXlCLEVBQUU7QUFDcEM7QUFTTyxTQUFTLFFBQVEsYUFBMEIsVUFBMEQ7QUFDMUcsTUFBSSxZQUFZLFNBQVM7QUFDdkIsYUFBUyxXQUFXO0FBQ3BCLFdBQU8sSUFBSSxtQkFBbUIsRUFBRSxVQUFVLEtBQUssQ0FBQztBQUFBLEVBQ2xEO0FBRUEsY0FBWSxpQkFBaUIsU0FBUyxpQkFBaUIsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNyRSxTQUFPLElBQUksbUJBQW1CO0FBQUEsSUFDNUIsVUFBVSxNQUFZO0FBQ3BCLGtCQUFZLG9CQUFvQixTQUFTLGVBQWU7QUFBQSxJQUMxRDtBQUFBLEVBQ0YsQ0FBQztBQUVELFdBQVMsZ0JBQWdCLFFBQXFCO0FBQzVDLGFBQVMsT0FBTyxNQUFxQjtBQUFBLEVBQ3ZDO0FBQ0Y7QUEwQk8sU0FBUyxhQUEwQixhQUEwQixxQkFBMkM7QUFDN0csU0FBTyxJQUFJLFFBQVcsQ0FBQyxTQUFTLFdBQVc7QUFDekMsWUFBUSxhQUFhLE1BQU07QUFDekIsVUFBSSxxQkFBcUI7QUFDdkIsZUFBTyxZQUFZLE1BQWU7QUFBQSxNQUNwQyxPQUFPO0FBQ0wsZ0JBQVEsWUFBWSxNQUFXO0FBQUEsTUFDakM7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -48,9 +48,9 @@ export interface DebugController {
48
48
  * @example
49
49
  * ```typescript
50
50
  * window.DEBUG.enable('foo-bar'); // show all debug messages from the `foo-bar` plugin
51
- * window.DEBUG.enable('foo-bar:obsidian-dev-utils:*'); // show all debug messages from the `obsidian-dev-utils` library within the `foo-bar` plugin
51
+ * window.DEBUG.enable('foo-bar:obsidian-dev-utils:*'); // show all debug messages from `@mnaoumov/obsidian-lib` within the `foo-bar` plugin (it keeps its legacy `obsidian-dev-utils` namespace)
52
52
  * window.DEBUG.enable('foo-bar:*'); // show all debug messages from the `foo-bar` plugin and its submodules
53
- * window.DEBUG.enable('*:obsidian-dev-utils:*'); // show all debug messages for the `obsidian-dev-utils` library within any plugin
53
+ * window.DEBUG.enable('*:obsidian-dev-utils:*'); // show all debug messages from `@mnaoumov/obsidian-lib` within any plugin
54
54
  * window.DEBUG.enable(['foo-bar', 'baz-qux']); // enable multiple namespaces
55
55
  * window.DEBUG.enable('foo-bar,baz-qux'); // enable multiple namespaces using comma-separated string
56
56
  * window.DEBUG.enable('*'); // show all debug messages
@@ -48,6 +48,11 @@ export declare function getDebugger(namespace: string, framesToSkip?: number): D
48
48
  /**
49
49
  * Returns a debugger instance for the library (under its debug namespace, see `Library.debugNamespace`).
50
50
  *
51
+ * When the host supplied `Library.debugNamespaceAliases`, a filter written for an alias still shows the messages.
52
+ * Each message prints ONCE: under the current namespace when a filter enables it, otherwise under the first alias a
53
+ * filter enables. Printing under every enabled one would double each message under the most common filter of all,
54
+ * `<prefix>*`, which enables them all.
55
+ *
51
56
  * @param namespace - The namespace for the debugger instance.
52
57
  * @returns A debugger instance for the library (under its debug namespace, see `Library.debugNamespace`).
53
58
  */
@@ -37,6 +37,7 @@ import {
37
37
  } from "./error.mjs";
38
38
  import { Library } from "./library.mjs";
39
39
  import { getTypescriptLibState } from "./typescript-lib-state.mjs";
40
+ const ALIAS_FRAMES_TO_SKIP = 1;
40
41
  const NAMESPACE_SEPARATOR = ",";
41
42
  const NEGATED_NAMESPACE_PREFIX = "-";
42
43
  function enableLibraryDebuggers() {
@@ -69,7 +70,25 @@ function getDebugger(namespace, framesToSkip = 0) {
69
70
  return debuggerEx;
70
71
  }
71
72
  function getLibDebugger(namespace) {
72
- return getDebugger(`${Library.debugPrefixNamespace}${Library.debugNamespace}:${namespace}`);
73
+ const aliases = Library.debugNamespaceAliases;
74
+ if (aliases.length === 0) {
75
+ return getDebugger(`${Library.debugPrefixNamespace}${Library.debugNamespace}:${namespace}`);
76
+ }
77
+ const currentDebugger = getDebugger(`${Library.debugPrefixNamespace}${Library.debugNamespace}:${namespace}`, ALIAS_FRAMES_TO_SKIP);
78
+ const aliasDebuggers = aliases.map((alias) => getDebugger(`${Library.debugPrefixNamespace}${alias}:${namespace}`, ALIAS_FRAMES_TO_SKIP));
79
+ const allDebuggers = [currentDebugger, ...aliasDebuggers];
80
+ return new Proxy(currentDebugger, {
81
+ apply(_target, _thisArgument, $arguments) {
82
+ allDebuggers.find((debuggerInstance) => debuggerInstance.enabled)?.(...$arguments);
83
+ },
84
+ get(target, property, receiver) {
85
+ if (property === "enabled") {
86
+ return allDebuggers.some((debuggerInstance) => debuggerInstance.enabled);
87
+ }
88
+ const value = Reflect.get(target, property, receiver);
89
+ return value;
90
+ }
91
+ });
73
92
  }
74
93
  function printWithStackTrace(params) {
75
94
  const {
@@ -165,4 +184,4 @@ export {
165
184
  printWithStackTrace,
166
185
  showInitialDebugMessage
167
186
  };
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWJ1Zy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGRlYnVnZ2luZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyIH0gZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnQ29udHJvbGxlciB9IGZyb20gJy4vZGVidWctY29udHJvbGxlci50cyc7XG5cbmltcG9ydCB7XG4gIEN1c3RvbVN0YWNrVHJhY2VFcnJvcixcbiAgZ2V0U3RhY2tUcmFjZVxufSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7IExpYnJhcnkgfSBmcm9tICcuL2xpYnJhcnkudHMnO1xuaW1wb3J0IHsgZ2V0VHlwZXNjcmlwdExpYlN0YXRlIH0gZnJvbSAnLi90eXBlc2NyaXB0LWxpYi1zdGF0ZS50cyc7XG5cbmNvbnN0IE5BTUVTUEFDRV9TRVBBUkFUT1IgPSAnLCc7XG5jb25zdCBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggPSAnLSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHByaW50V2l0aFN0YWNrVHJhY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByaW50V2l0aFN0YWNrVHJhY2VQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5ICRhcmd1bWVudHM6IHVua25vd25bXTtcblxuICAvKipcbiAgICogVGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVidWdnZXJJbnN0YW5jZTogRGVidWdnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2UgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxvZ1dpdGhDYWxsZXJ9LlxuICovXG5pbnRlcmZhY2UgTG9nV2l0aENhbGxlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgJGFyZ3VtZW50czogdW5rbm93bltdO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwIGluIHRoZSBzdGFjayB0cmFjZS5cbiAgICovXG4gIHJlYWRvbmx5IGZyYW1lc1RvU2tpcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW5hYmxlcyB0aGUgZGVidWdnZXJzIGZvciB0aGUgbGlicmFyeSAodW5kZXIgaXRzIGRlYnVnIG5hbWVzcGFjZSwgc2VlIGBMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVMaWJyYXJ5RGVidWdnZXJzKCk6IHZvaWQge1xuICBlbmFibGVOYW1lc3BhY2VzKFtMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlLCBgJHtMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlfToqYF0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBkZWJ1ZyBjb250cm9sbGVyLlxuICpcbiAqIEByZXR1cm5zIEEgZGVidWcgY29udHJvbGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlYnVnQ29udHJvbGxlcigpOiBEZWJ1Z0NvbnRyb2xsZXIge1xuICByZXR1cm4ge1xuICAgIGRpc2FibGU6IGRpc2FibGVOYW1lc3BhY2VzLFxuICAgIGVuYWJsZTogZW5hYmxlTmFtZXNwYWNlcyxcbiAgICBnZXQ6IGdldE5hbWVzcGFjZXMsXG4gICAgc2V0OiBzZXROYW1lc3BhY2VzXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnZ2VyIGluc3RhbmNlIHdpdGggYSBsb2cgZnVuY3Rpb24gdGhhdCBpbmNsdWRlcyB0aGUgY2FsbGVyJ3MgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlci5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICogQHBhcmFtIGZyYW1lc1RvU2tpcCAtIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIHNraXAgaW4gdGhlIHN0YWNrIHRyYWNlLlxuICogQHJldHVybnMgQSBkZWJ1Z2dlciBpbnN0YW5jZSB3aXRoIGEgbG9nIGZ1bmN0aW9uIHRoYXQgaW5jbHVkZXMgdGhlIGNhbGxlcidzIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWJ1Z2dlcihuYW1lc3BhY2U6IHN0cmluZywgZnJhbWVzVG9Ta2lwID0gMCk6IERlYnVnZ2VyIHtcbiAgY29uc3Qga2V5ID0gYCR7bmFtZXNwYWNlfToke1N0cmluZyhmcmFtZXNUb1NraXApfWA7XG4gIGNvbnN0IGRlYnVnZ2Vyc01hcCA9IGdldFR5cGVzY3JpcHRMaWJTdGF0ZSgnZGVidWdnZXJzJywgbmV3IE1hcDxzdHJpbmcsIERlYnVnZ2VyPigpKS52YWx1ZTtcbiAgbGV0IGRlYnVnZ2VyRXggPSBkZWJ1Z2dlcnNNYXAuZ2V0KGtleSk7XG4gIGlmICghZGVidWdnZXJFeCkge1xuICAgIGRlYnVnZ2VyRXggPSBnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkobmFtZXNwYWNlKTtcbiAgICBkZWJ1Z2dlckV4LmxvZyA9IChtZXNzYWdlOiBzdHJpbmcsIC4uLiRhcmd1bWVudHM6IHVua25vd25bXSk6IHZvaWQgPT4ge1xuICAgICAgbG9nV2l0aENhbGxlcih7XG4gICAgICAgICRhcmd1bWVudHMsXG4gICAgICAgIGZyYW1lc1RvU2tpcCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgbmFtZXNwYWNlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZGVidWdnZXJzTWFwLnNldChrZXksIGRlYnVnZ2VyRXgpO1xuICB9XG5cbiAgcmV0dXJuIGRlYnVnZ2VyRXg7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnZ2VyIGluc3RhbmNlIGZvciB0aGUgbGlicmFyeSAodW5kZXIgaXRzIGRlYnVnIG5hbWVzcGFjZSwgc2VlIGBMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlYCkuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBkZWJ1Z2dlciBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEEgZGVidWdnZXIgaW5zdGFuY2UgZm9yIHRoZSBsaWJyYXJ5ICh1bmRlciBpdHMgZGVidWcgbmFtZXNwYWNlLCBzZWUgYExpYnJhcnkuZGVidWdOYW1lc3BhY2VgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpYkRlYnVnZ2VyKG5hbWVzcGFjZTogc3RyaW5nKTogRGVidWdnZXIge1xuICByZXR1cm4gZ2V0RGVidWdnZXIoYCR7TGlicmFyeS5kZWJ1Z1ByZWZpeE5hbWVzcGFjZX0ke0xpYnJhcnkuZGVidWdOYW1lc3BhY2V9OiR7bmFtZXNwYWNlfWApO1xufVxuXG4vKipcbiAqIFByaW50cyBhIG1lc3NhZ2Ugd2l0aCBhIHN0YWNrIHRyYWNlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcHJpbnRpbmcgdGhlIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFdpdGhTdGFja1RyYWNlKHBhcmFtczogUHJpbnRXaXRoU3RhY2tUcmFjZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgJGFyZ3VtZW50cyxcbiAgICBkZWJ1Z2dlckluc3RhbmNlLFxuICAgIG1lc3NhZ2UsXG4gICAgc3RhY2tUcmFjZVxuICB9ID0gcGFyYW1zO1xuICBpZiAoIUxpYnJhcnkuc2hvdWxkUHJpbnRTdGFja1RyYWNlKSB7XG4gICAgZGVidWdnZXJJbnN0YW5jZShtZXNzYWdlLCAuLi4kYXJndW1lbnRzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWJ1Z2dlckluc3RhbmNlKG1lc3NhZ2UsIC4uLiRhcmd1bWVudHMsICdcXG5cXG4tLS1cXG5Db250ZXh0IHN0YWNrIHRyYWNlOlxcbicsIG1ha2VTdGFja1RyYWNlRXJyb3Ioc3RhY2tUcmFjZSkpO1xufVxuXG4vKipcbiAqIFNob3dzIGFuIGluaXRpYWwgZGVidWcgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgcGx1Z2luIElELlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvd0luaXRpYWxEZWJ1Z01lc3NhZ2UocGx1Z2luSWQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBpc0VuYWJsZWQgPSBnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkuZW5hYmxlZChwbHVnaW5JZCk7XG4gIGNvbnN0IHN0YXRlID0gaXNFbmFibGVkID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJztcbiAgY29uc3QgY2hhbmdlQWN0aW9uID0gaXNFbmFibGVkID8gJ2Rpc2FibGUnIDogJ2VuYWJsZSc7XG4gIGNvbnN0IG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VzKCk7XG4gIHNldE5hbWVzcGFjZXMocGx1Z2luSWQpO1xuICBnZXREZWJ1Z2dlcihwbHVnaW5JZCkoXG4gICAgYERlYnVnIG1lc3NhZ2VzIGZvciBwbHVnaW4gJHtwbHVnaW5JZH0gYXJlICR7c3RhdGV9LiR7Zm9ybWF0R3VpZGVSZWZlcmVuY2UoYCBob3cgdG8gJHtjaGFuZ2VBY3Rpb259IHRoZW1gKX1gXG4gICk7XG4gIHNldE5hbWVzcGFjZXMobmFtZXNwYWNlcyk7XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVOYW1lc3BhY2VzKG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoZ2V0TmFtZXNwYWNlcygpKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgdG9BcnJheShuYW1lc3BhY2VzKSkge1xuICAgIGlmIChuYW1lc3BhY2Uuc3RhcnRzV2l0aChORUdBVEVEX05BTUVTUEFDRV9QUkVGSVgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbmVnYXRlZE5hbWVzcGFjZSA9IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCArIG5hbWVzcGFjZTtcbiAgICBzZXQuZGVsZXRlKG5hbWVzcGFjZSk7XG4gICAgc2V0LmFkZChuZWdhdGVkTmFtZXNwYWNlKTtcbiAgfVxuICBzZXROYW1lc3BhY2VzKFsuLi5zZXRdKTtcbn1cblxuZnVuY3Rpb24gZW5hYmxlTmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBjb25zdCBzZXQgPSBuZXcgU2V0KGdldE5hbWVzcGFjZXMoKSk7XG4gIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIHRvQXJyYXkobmFtZXNwYWNlcykpIHtcbiAgICBpZiAoIW5hbWVzcGFjZS5zdGFydHNXaXRoKE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCkpIHtcbiAgICAgIGNvbnN0IG5lZ2F0ZWROYW1lc3BhY2UgPSBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggKyBuYW1lc3BhY2U7XG4gICAgICBzZXQuZGVsZXRlKG5lZ2F0ZWROYW1lc3BhY2UpO1xuICAgIH1cbiAgICBzZXQuYWRkKG5hbWVzcGFjZSk7XG4gIH1cbiAgc2V0TmFtZXNwYWNlcyhbLi4uc2V0XSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEd1aWRlUmVmZXJlbmNlKHN1ZmZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIExpYnJhcnkuZGVidWdHdWlkZVVybCA/IGAgU2VlICR7TGlicmFyeS5kZWJ1Z0d1aWRlVXJsfSR7c3VmZml4fS5gIDogJyc7XG59XG5cbmZ1bmN0aW9uIGdldE5hbWVzcGFjZXMoKTogc3RyaW5nW10ge1xuICByZXR1cm4gdG9BcnJheShnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkubG9hZCgpID8/ICcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpOiB0eXBlb2YgZGVidWcge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKCdkZWJ1ZycsIGRlYnVnKS52YWx1ZTtcbn1cblxuZnVuY3Rpb24gbG9nV2l0aENhbGxlcihwYXJhbXM6IExvZ1dpdGhDYWxsZXJQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgICRhcmd1bWVudHMsXG4gICAgZnJhbWVzVG9Ta2lwLFxuICAgIG1lc3NhZ2UsXG4gICAgbmFtZXNwYWNlXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZWQobmFtZXNwYWNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghTGlicmFyeS5zaG91bGRQcmludFN0YWNrVHJhY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBWYWxpZCB1c2FnZS5cbiAgICBjb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLiRhcmd1bWVudHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY2FsbGVyIGlzIDMgZnJhbWVzIGFib3ZlIHRoaXMgb25lLCBiZWNhdXNlIHRoZSBjYWxsIHN0YWNrIGlzIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqIDA6IGxvZ1dpdGhDYWxsZXJcbiAgICogMTogZGVidWdJbnN0YW5jZS5sb2dcbiAgICogMjogZGVidWdcbiAgICogMzogZnVuY3Rpb25OYW1lICh0aGUgY2FsbGVyKVxuICAgKlxuICAgKiBgZ2V0U3RhY2tUcmFjZWAgZHJvcHMgaXRzIG93biBmcmFtZSBhbmQsIG9uIGFuIGVuZ2luZSB0aGF0IHdyaXRlcyBvbmUsIHRoZSBgRXJyb3JgIGhlYWRlciBsaW5lLlxuICAgKi9cbiAgY29uc3QgQ0FMTEVSX0ZSQU1FX0lOREVYID0gMztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBWYWxpZCB1c2FnZS5cbiAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi4kYXJndW1lbnRzLCAnXFxuXFxuLS0tXFxuTG9nZ2VyIHN0YWNrIHRyYWNlOlxcbicsIG1ha2VTdGFja1RyYWNlRXJyb3IoZ2V0U3RhY2tUcmFjZShDQUxMRVJfRlJBTUVfSU5ERVggKyBmcmFtZXNUb1NraXApKSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VTdGFja1RyYWNlRXJyb3Ioc3RhY2tUcmFjZTogc3RyaW5nKTogQ3VzdG9tU3RhY2tUcmFjZUVycm9yIHtcbiAgcmV0dXJuIG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3Ioe1xuICAgIGNhdXNlOiB1bmRlZmluZWQsXG4gICAgbWVzc2FnZTogYERlYnVnIG1vZGU6IGludGVudGlvbmFsIHBsYWNlaG9sZGVyIGVycm9yLiR7Zm9ybWF0R3VpZGVSZWZlcmVuY2UoJycpfWAsXG4gICAgc3RhY2tUcmFjZVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBuYW1lc3BhY2VzIHRvIGVuYWJsZS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlcyAtIFRoZSBuYW1lc3BhY2VzIHRvIGVuYWJsZS5cbiAqL1xuZnVuY3Rpb24gc2V0TmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkuZW5hYmxlKHRvQXJyYXkobmFtZXNwYWNlcykuam9pbihOQU1FU1BBQ0VfU0VQQVJBVE9SKSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkobmFtZXNwYWNlczogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiB0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzLnNwbGl0KE5BTUVTUEFDRV9TRVBBUkFUT1IpLmZpbHRlcihCb29sZWFuKSA6IG5hbWVzcGFjZXMuZmxhdE1hcCgobmFtZXNwYWNlKSA9PiB0b0FycmF5KG5hbWVzcGFjZSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sV0FBVztBQUlsQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsZUFBZTtBQUN4QixTQUFTLDZCQUE2QjtBQUV0QyxNQUFNLHNCQUFzQjtBQUM1QixNQUFNLDJCQUEyQjtBQXVEMUIsU0FBUyx5QkFBK0I7QUFDN0MsbUJBQWlCLENBQUMsUUFBUSxnQkFBZ0IsR0FBRyxRQUFRLGNBQWMsSUFBSSxDQUFDO0FBQzFFO0FBT08sU0FBUyxxQkFBc0M7QUFDcEQsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLEVBQ1A7QUFDRjtBQVNPLFNBQVMsWUFBWSxXQUFtQixlQUFlLEdBQWE7QUFDekUsUUFBTSxNQUFNLEdBQUcsU0FBUyxJQUFJLE9BQU8sWUFBWSxDQUFDO0FBQ2hELFFBQU0sZUFBZSxzQkFBc0IsYUFBYSxvQkFBSSxJQUFzQixDQUFDLEVBQUU7QUFDckYsTUFBSSxhQUFhLGFBQWEsSUFBSSxHQUFHO0FBQ3JDLE1BQUksQ0FBQyxZQUFZO0FBQ2YsaUJBQWEsMEJBQTBCLEVBQUUsU0FBUztBQUNsRCxlQUFXLE1BQU0sQ0FBQyxZQUFvQixlQUFnQztBQUNwRSxvQkFBYztBQUFBLFFBQ1o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsaUJBQWEsSUFBSSxLQUFLLFVBQVU7QUFBQSxFQUNsQztBQUVBLFNBQU87QUFDVDtBQVFPLFNBQVMsZUFBZSxXQUE2QjtBQUMxRCxTQUFPLFlBQVksR0FBRyxRQUFRLG9CQUFvQixHQUFHLFFBQVEsY0FB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
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWJ1Zy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGRlYnVnZ2luZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyIH0gZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnQ29udHJvbGxlciB9IGZyb20gJy4vZGVidWctY29udHJvbGxlci50cyc7XG5cbmltcG9ydCB7XG4gIEN1c3RvbVN0YWNrVHJhY2VFcnJvcixcbiAgZ2V0U3RhY2tUcmFjZVxufSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7IExpYnJhcnkgfSBmcm9tICcuL2xpYnJhcnkudHMnO1xuaW1wb3J0IHsgZ2V0VHlwZXNjcmlwdExpYlN0YXRlIH0gZnJvbSAnLi90eXBlc2NyaXB0LWxpYi1zdGF0ZS50cyc7XG5cbi8qKlxuICogVGhlIGFsaWFzaW5nIGRlYnVnZ2VyJ3Mgb3duIGZyYW1lIGJldHdlZW4gdGhlIGNhbGxlciBhbmQgdGhlIGBkZWJ1Z2AgcGFja2FnZTogdGhlIGBhcHBseWAgdHJhcCBvZiBpdHMgcHJveHkuXG4gKi9cbmNvbnN0IEFMSUFTX0ZSQU1FU19UT19TS0lQID0gMTtcbmNvbnN0IE5BTUVTUEFDRV9TRVBBUkFUT1IgPSAnLCc7XG5jb25zdCBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggPSAnLSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHByaW50V2l0aFN0YWNrVHJhY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByaW50V2l0aFN0YWNrVHJhY2VQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5ICRhcmd1bWVudHM6IHVua25vd25bXTtcblxuICAvKipcbiAgICogVGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVidWdnZXJJbnN0YW5jZTogRGVidWdnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2UgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxvZ1dpdGhDYWxsZXJ9LlxuICovXG5pbnRlcmZhY2UgTG9nV2l0aENhbGxlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgJGFyZ3VtZW50czogdW5rbm93bltdO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwIGluIHRoZSBzdGFjayB0cmFjZS5cbiAgICovXG4gIHJlYWRvbmx5IGZyYW1lc1RvU2tpcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW5hYmxlcyB0aGUgZGVidWdnZXJzIGZvciB0aGUgbGlicmFyeSAodW5kZXIgaXRzIGRlYnVnIG5hbWVzcGFjZSwgc2VlIGBMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVMaWJyYXJ5RGVidWdnZXJzKCk6IHZvaWQge1xuICBlbmFibGVOYW1lc3BhY2VzKFtMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlLCBgJHtMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlfToqYF0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBkZWJ1ZyBjb250cm9sbGVyLlxuICpcbiAqIEByZXR1cm5zIEEgZGVidWcgY29udHJvbGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlYnVnQ29udHJvbGxlcigpOiBEZWJ1Z0NvbnRyb2xsZXIge1xuICByZXR1cm4ge1xuICAgIGRpc2FibGU6IGRpc2FibGVOYW1lc3BhY2VzLFxuICAgIGVuYWJsZTogZW5hYmxlTmFtZXNwYWNlcyxcbiAgICBnZXQ6IGdldE5hbWVzcGFjZXMsXG4gICAgc2V0OiBzZXROYW1lc3BhY2VzXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnZ2VyIGluc3RhbmNlIHdpdGggYSBsb2cgZnVuY3Rpb24gdGhhdCBpbmNsdWRlcyB0aGUgY2FsbGVyJ3MgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlci5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICogQHBhcmFtIGZyYW1lc1RvU2tpcCAtIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIHNraXAgaW4gdGhlIHN0YWNrIHRyYWNlLlxuICogQHJldHVybnMgQSBkZWJ1Z2dlciBpbnN0YW5jZSB3aXRoIGEgbG9nIGZ1bmN0aW9uIHRoYXQgaW5jbHVkZXMgdGhlIGNhbGxlcidzIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWJ1Z2dlcihuYW1lc3BhY2U6IHN0cmluZywgZnJhbWVzVG9Ta2lwID0gMCk6IERlYnVnZ2VyIHtcbiAgY29uc3Qga2V5ID0gYCR7bmFtZXNwYWNlfToke1N0cmluZyhmcmFtZXNUb1NraXApfWA7XG4gIGNvbnN0IGRlYnVnZ2Vyc01hcCA9IGdldFR5cGVzY3JpcHRMaWJTdGF0ZSgnZGVidWdnZXJzJywgbmV3IE1hcDxzdHJpbmcsIERlYnVnZ2VyPigpKS52YWx1ZTtcbiAgbGV0IGRlYnVnZ2VyRXggPSBkZWJ1Z2dlcnNNYXAuZ2V0KGtleSk7XG4gIGlmICghZGVidWdnZXJFeCkge1xuICAgIGRlYnVnZ2VyRXggPSBnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkobmFtZXNwYWNlKTtcbiAgICBkZWJ1Z2dlckV4LmxvZyA9IChtZXNzYWdlOiBzdHJpbmcsIC4uLiRhcmd1bWVudHM6IHVua25vd25bXSk6IHZvaWQgPT4ge1xuICAgICAgbG9nV2l0aENhbGxlcih7XG4gICAgICAgICRhcmd1bWVudHMsXG4gICAgICAgIGZyYW1lc1RvU2tpcCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgbmFtZXNwYWNlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZGVidWdnZXJzTWFwLnNldChrZXksIGRlYnVnZ2VyRXgpO1xuICB9XG5cbiAgcmV0dXJuIGRlYnVnZ2VyRXg7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnZ2VyIGluc3RhbmNlIGZvciB0aGUgbGlicmFyeSAodW5kZXIgaXRzIGRlYnVnIG5hbWVzcGFjZSwgc2VlIGBMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlYCkuXG4gKlxuICogV2hlbiB0aGUgaG9zdCBzdXBwbGllZCBgTGlicmFyeS5kZWJ1Z05hbWVzcGFjZUFsaWFzZXNgLCBhIGZpbHRlciB3cml0dGVuIGZvciBhbiBhbGlhcyBzdGlsbCBzaG93cyB0aGUgbWVzc2FnZXMuXG4gKiBFYWNoIG1lc3NhZ2UgcHJpbnRzIE9OQ0U6IHVuZGVyIHRoZSBjdXJyZW50IG5hbWVzcGFjZSB3aGVuIGEgZmlsdGVyIGVuYWJsZXMgaXQsIG90aGVyd2lzZSB1bmRlciB0aGUgZmlyc3QgYWxpYXMgYVxuICogZmlsdGVyIGVuYWJsZXMuIFByaW50aW5nIHVuZGVyIGV2ZXJ5IGVuYWJsZWQgb25lIHdvdWxkIGRvdWJsZSBlYWNoIG1lc3NhZ2UgdW5kZXIgdGhlIG1vc3QgY29tbW9uIGZpbHRlciBvZiBhbGwsXG4gKiBgPHByZWZpeD4qYCwgd2hpY2ggZW5hYmxlcyB0aGVtIGFsbC5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICogQHJldHVybnMgQSBkZWJ1Z2dlciBpbnN0YW5jZSBmb3IgdGhlIGxpYnJhcnkgKHVuZGVyIGl0cyBkZWJ1ZyBuYW1lc3BhY2UsIHNlZSBgTGlicmFyeS5kZWJ1Z05hbWVzcGFjZWApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGliRGVidWdnZXIobmFtZXNwYWNlOiBzdHJpbmcpOiBEZWJ1Z2dlciB7XG4gIGNvbnN0IGFsaWFzZXMgPSBMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlQWxpYXNlcztcbiAgaWYgKGFsaWFzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGdldERlYnVnZ2VyKGAke0xpYnJhcnkuZGVidWdQcmVmaXhOYW1lc3BhY2V9JHtMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlfToke25hbWVzcGFjZX1gKTtcbiAgfVxuXG4gIC8vIEV2ZXJ5IGRlYnVnZ2VyIGNvbWVzIGZyb20gdGhlIHNoYXJlZCBjYWNoZSBgZ2V0RGVidWdnZXJgIGtlZXBzLCBzbyBvbmx5IHRoZSBjaGVhcCBwcm94eSBpcyBuZXcgb24gZWFjaCBjYWxsLCBhbmQgYVxuICAvLyBzcHkgaW5zdGFsbGVkIG9uIG9uZSBjYWxsJ3MgYGxvZ2AgaXMgdGhlIG9uZSB0aGUgbmV4dCBjYWxsIHJlYWNoZXMuXG4gIGNvbnN0IGN1cnJlbnREZWJ1Z2dlciA9IGdldERlYnVnZ2VyKGAke0xpYnJhcnkuZGVidWdQcmVmaXhOYW1lc3BhY2V9JHtMaWJyYXJ5LmRlYnVnTmFtZXNwYWNlfToke25hbWVzcGFjZX1gLCBBTElBU19GUkFNRVNfVE9fU0tJUCk7XG4gIGNvbnN0IGFsaWFzRGVidWdnZXJzID0gYWxpYXNlcy5tYXAoKGFsaWFzKSA9PiBnZXREZWJ1Z2dlcihgJHtMaWJyYXJ5LmRlYnVnUHJlZml4TmFtZXNwYWNlfSR7YWxpYXN9OiR7bmFtZXNwYWNlfWAsIEFMSUFTX0ZSQU1FU19UT19TS0lQKSk7XG4gIGNvbnN0IGFsbERlYnVnZ2VycyA9IFtjdXJyZW50RGVidWdnZXIsIC4uLmFsaWFzRGVidWdnZXJzXTtcbiAgcmV0dXJuIG5ldyBQcm94eShjdXJyZW50RGVidWdnZXIsIHtcbiAgICBhcHBseShfdGFyZ2V0LCBfdGhpc0FyZ3VtZW50LCAkYXJndW1lbnRzOiBQYXJhbWV0ZXJzPERlYnVnZ2VyPik6IHZvaWQge1xuICAgICAgYWxsRGVidWdnZXJzLmZpbmQoKGRlYnVnZ2VySW5zdGFuY2UpID0+IGRlYnVnZ2VySW5zdGFuY2UuZW5hYmxlZCk/LiguLi4kYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGdldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcik6IHVua25vd24ge1xuICAgICAgaWYgKHByb3BlcnR5ID09PSAnZW5hYmxlZCcpIHtcbiAgICAgICAgcmV0dXJuIGFsbERlYnVnZ2Vycy5zb21lKChkZWJ1Z2dlckluc3RhbmNlKSA9PiBkZWJ1Z2dlckluc3RhbmNlLmVuYWJsZWQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZTogdW5rbm93biA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFByaW50cyBhIG1lc3NhZ2Ugd2l0aCBhIHN0YWNrIHRyYWNlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcHJpbnRpbmcgdGhlIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFdpdGhTdGFja1RyYWNlKHBhcmFtczogUHJpbnRXaXRoU3RhY2tUcmFjZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgJGFyZ3VtZW50cyxcbiAgICBkZWJ1Z2dlckluc3RhbmNlLFxuICAgIG1lc3NhZ2UsXG4gICAgc3RhY2tUcmFjZVxuICB9ID0gcGFyYW1zO1xuICBpZiAoIUxpYnJhcnkuc2hvdWxkUHJpbnRTdGFja1RyYWNlKSB7XG4gICAgZGVidWdnZXJJbnN0YW5jZShtZXNzYWdlLCAuLi4kYXJndW1lbnRzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWJ1Z2dlckluc3RhbmNlKG1lc3NhZ2UsIC4uLiRhcmd1bWVudHMsICdcXG5cXG4tLS1cXG5Db250ZXh0IHN0YWNrIHRyYWNlOlxcbicsIG1ha2VTdGFja1RyYWNlRXJyb3Ioc3RhY2tUcmFjZSkpO1xufVxuXG4vKipcbiAqIFNob3dzIGFuIGluaXRpYWwgZGVidWcgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgcGx1Z2luIElELlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvd0luaXRpYWxEZWJ1Z01lc3NhZ2UocGx1Z2luSWQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBpc0VuYWJsZWQgPSBnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkuZW5hYmxlZChwbHVnaW5JZCk7XG4gIGNvbnN0IHN0YXRlID0gaXNFbmFibGVkID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJztcbiAgY29uc3QgY2hhbmdlQWN0aW9uID0gaXNFbmFibGVkID8gJ2Rpc2FibGUnIDogJ2VuYWJsZSc7XG4gIGNvbnN0IG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VzKCk7XG4gIHNldE5hbWVzcGFjZXMocGx1Z2luSWQpO1xuICBnZXREZWJ1Z2dlcihwbHVnaW5JZCkoXG4gICAgYERlYnVnIG1lc3NhZ2VzIGZvciBwbHVnaW4gJHtwbHVnaW5JZH0gYXJlICR7c3RhdGV9LiR7Zm9ybWF0R3VpZGVSZWZlcmVuY2UoYCBob3cgdG8gJHtjaGFuZ2VBY3Rpb259IHRoZW1gKX1gXG4gICk7XG4gIHNldE5hbWVzcGFjZXMobmFtZXNwYWNlcyk7XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVOYW1lc3BhY2VzKG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoZ2V0TmFtZXNwYWNlcygpKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgdG9BcnJheShuYW1lc3BhY2VzKSkge1xuICAgIGlmIChuYW1lc3BhY2Uuc3RhcnRzV2l0aChORUdBVEVEX05BTUVTUEFDRV9QUkVGSVgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbmVnYXRlZE5hbWVzcGFjZSA9IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCArIG5hbWVzcGFjZTtcbiAgICBzZXQuZGVsZXRlKG5hbWVzcGFjZSk7XG4gICAgc2V0LmFkZChuZWdhdGVkTmFtZXNwYWNlKTtcbiAgfVxuICBzZXROYW1lc3BhY2VzKFsuLi5zZXRdKTtcbn1cblxuZnVuY3Rpb24gZW5hYmxlTmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBjb25zdCBzZXQgPSBuZXcgU2V0KGdldE5hbWVzcGFjZXMoKSk7XG4gIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIHRvQXJyYXkobmFtZXNwYWNlcykpIHtcbiAgICBpZiAoIW5hbWVzcGFjZS5zdGFydHNXaXRoKE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCkpIHtcbiAgICAgIGNvbnN0IG5lZ2F0ZWROYW1lc3BhY2UgPSBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggKyBuYW1lc3BhY2U7XG4gICAgICBzZXQuZGVsZXRlKG5lZ2F0ZWROYW1lc3BhY2UpO1xuICAgIH1cbiAgICBzZXQuYWRkKG5hbWVzcGFjZSk7XG4gIH1cbiAgc2V0TmFtZXNwYWNlcyhbLi4uc2V0XSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEd1aWRlUmVmZXJlbmNlKHN1ZmZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIExpYnJhcnkuZGVidWdHdWlkZVVybCA/IGAgU2VlICR7TGlicmFyeS5kZWJ1Z0d1aWRlVXJsfSR7c3VmZml4fS5gIDogJyc7XG59XG5cbmZ1bmN0aW9uIGdldE5hbWVzcGFjZXMoKTogc3RyaW5nW10ge1xuICByZXR1cm4gdG9BcnJheShnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkubG9hZCgpID8/ICcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpOiB0eXBlb2YgZGVidWcge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKCdkZWJ1ZycsIGRlYnVnKS52YWx1ZTtcbn1cblxuZnVuY3Rpb24gbG9nV2l0aENhbGxlcihwYXJhbXM6IExvZ1dpdGhDYWxsZXJQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgICRhcmd1bWVudHMsXG4gICAgZnJhbWVzVG9Ta2lwLFxuICAgIG1lc3NhZ2UsXG4gICAgbmFtZXNwYWNlXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZWQobmFtZXNwYWNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghTGlicmFyeS5zaG91bGRQcmludFN0YWNrVHJhY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBWYWxpZCB1c2FnZS5cbiAgICBjb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLiRhcmd1bWVudHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY2FsbGVyIGlzIDMgZnJhbWVzIGFib3ZlIHRoaXMgb25lLCBiZWNhdXNlIHRoZSBjYWxsIHN0YWNrIGlzIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqIDA6IGxvZ1dpdGhDYWxsZXJcbiAgICogMTogZGVidWdJbnN0YW5jZS5sb2dcbiAgICogMjogZGVidWdcbiAgICogMzogZnVuY3Rpb25OYW1lICh0aGUgY2FsbGVyKVxuICAgKlxuICAgKiBgZ2V0U3RhY2tUcmFjZWAgZHJvcHMgaXRzIG93biBmcmFtZSBhbmQsIG9uIGFuIGVuZ2luZSB0aGF0IHdyaXRlcyBvbmUsIHRoZSBgRXJyb3JgIGhlYWRlciBsaW5lLlxuICAgKi9cbiAgY29uc3QgQ0FMTEVSX0ZSQU1FX0lOREVYID0gMztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBWYWxpZCB1c2FnZS5cbiAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi4kYXJndW1lbnRzLCAnXFxuXFxuLS0tXFxuTG9nZ2VyIHN0YWNrIHRyYWNlOlxcbicsIG1ha2VTdGFja1RyYWNlRXJyb3IoZ2V0U3RhY2tUcmFjZShDQUxMRVJfRlJBTUVfSU5ERVggKyBmcmFtZXNUb1NraXApKSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VTdGFja1RyYWNlRXJyb3Ioc3RhY2tUcmFjZTogc3RyaW5nKTogQ3VzdG9tU3RhY2tUcmFjZUVycm9yIHtcbiAgcmV0dXJuIG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3Ioe1xuICAgIGNhdXNlOiB1bmRlZmluZWQsXG4gICAgbWVzc2FnZTogYERlYnVnIG1vZGU6IGludGVudGlvbmFsIHBsYWNlaG9sZGVyIGVycm9yLiR7Zm9ybWF0R3VpZGVSZWZlcmVuY2UoJycpfWAsXG4gICAgc3RhY2tUcmFjZVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBuYW1lc3BhY2VzIHRvIGVuYWJsZS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlcyAtIFRoZSBuYW1lc3BhY2VzIHRvIGVuYWJsZS5cbiAqL1xuZnVuY3Rpb24gc2V0TmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkuZW5hYmxlKHRvQXJyYXkobmFtZXNwYWNlcykuam9pbihOQU1FU1BBQ0VfU0VQQVJBVE9SKSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkobmFtZXNwYWNlczogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiB0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzLnNwbGl0KE5BTUVTUEFDRV9TRVBBUkFUT1IpLmZpbHRlcihCb29sZWFuKSA6IG5hbWVzcGFjZXMuZmxhdE1hcCgobmFtZXNwYWNlKSA9PiB0b0FycmF5KG5hbWVzcGFjZSkpO1xufVxuIl0sIm1hcHBpbmdz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
@@ -96,6 +96,9 @@ export declare function emitAsyncErrorEvent(asyncError: unknown, shouldIgnore?:
96
96
  * Converts an error to a string representation, including nested causes and the aggregated errors of
97
97
  * an `AggregateError`, with indentation.
98
98
  *
99
+ * Never throws: if the error cannot be formatted (a throwing getter, a malformed nested error), it falls back to the
100
+ * error's own string and stack, so the error being reported is never hidden behind a failure to report it.
101
+ *
99
102
  * @param error - The error to convert to a string.
100
103
  * @returns The string representation of the error.
101
104
  */
@@ -92,7 +92,11 @@ function emitAsyncErrorEvent(asyncError, shouldIgnore = false) {
92
92
  errorAsyncEvents.trigger("asyncError", asyncError);
93
93
  }
94
94
  function errorToString(error) {
95
- return getErrorLines(error).map((line) => line.text).join("\n");
95
+ try {
96
+ return getErrorLines(error).map((line) => line.text).join("\n");
97
+ } catch (formattingError) {
98
+ return getFallbackErrorString(error, formattingError);
99
+ }
96
100
  }
97
101
  function getStackTrace(framesToSkip = 0) {
98
102
  const GET_STACK_TRACE_FRAME_COUNT = 1;
@@ -155,14 +159,21 @@ function getErrorLines(error) {
155
159
  if (error.cause !== void 0) {
156
160
  lines.push(...generateNestedErrorLines(error.cause, "Caused by:"));
157
161
  }
158
- if (error instanceof AggregateError) {
159
- const aggregatedErrors = error.errors;
162
+ const aggregatedErrors = error instanceof AggregateError ? error.errors : void 0;
163
+ if (Array.isArray(aggregatedErrors)) {
160
164
  for (const [index, aggregatedError] of aggregatedErrors.entries()) {
161
165
  lines.push(...generateNestedErrorLines(aggregatedError, `Aggregated error #${String(index + 1)}:`));
162
166
  }
163
167
  }
164
168
  return lines;
165
169
  }
170
+ function getFallbackErrorString(error, formattingError) {
171
+ const errorString = safeToString(() => String(error));
172
+ const stack = safeToString(() => error instanceof Error ? error.stack ?? "" : "");
173
+ const lines = stack.startsWith(errorString) ? [stack] : [errorString, stack];
174
+ lines.push(`(errorToString could not format this error: ${safeToString(() => String(formattingError))})`);
175
+ return lines.filter((line) => line !== "").join("\n");
176
+ }
166
177
  function getOwnErrorLines(error) {
167
178
  const headerLines = getErrorHeader(error).split("\n").map((text) => toTitleLine(text));
168
179
  if (error.stack === void 0) {
@@ -181,6 +192,13 @@ function hasStackHeader() {
181
192
  const firstLine = new Error(STACK_HEADER_PROBE_MESSAGE).stack?.split("\n", 1)[0];
182
193
  return firstLine === `Error: ${STACK_HEADER_PROBE_MESSAGE}`;
183
194
  }
195
+ function safeToString(toString) {
196
+ try {
197
+ return toString();
198
+ } catch {
199
+ return "<unprintable>";
200
+ }
201
+ }
184
202
  function toTitleLine(text) {
185
203
  return { isFrame: false, text };
186
204
  }
@@ -201,4 +219,4 @@ export {
201
219
  stopCollectingUnhandledAsyncErrors,
202
220
  throwExpression
203
221
  };
204
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVycm9yIGhhbmRsaW5nLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHtcbiAgQ2FsbGJhY2tEaXNwb3NhYmxlLFxuICBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvclxufSBmcm9tICcuL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuaW50ZXJmYWNlIEVycm9yQXN5bmNFdmVudE1hcCB7XG4gIGFzeW5jRXJyb3I6IFtlcnJvcjogdW5rbm93bl07XG59XG5cbmNvbnN0IGVycm9yQXN5bmNFdmVudHMgPSBuZXcgQXN5bmNFdmVudHM8RXJyb3JBc3luY0V2ZW50TWFwPigpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdG9wLWxldmVsLXNpZGUtZWZmZWN0cyAtLSBJbnN0YWxsaW5nIHRoZSBkZWZhdWx0IGhhbmRsZXIgb24gaW1wb3J0IGlzIHdoYXQgdGhpcyBtb2R1bGUgaXMgZm9yLiBEZWZlcnJpbmcgaXQgYmVoaW5kIGEgY2FsbCB3b3VsZCBtZWFuIGV2ZXJ5IGNvbnN1bWVyIGhhZCB0byByZW1lbWJlciB0byBtYWtlIHRoYXQgY2FsbCBiZWZvcmUgdGhlIGZpcnN0IGFzeW5jIGVycm9yLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIG1vbWVudCB0aGUgaGFuZGxlciBuZWVkcyB0byBhbHJlYWR5IGV4aXN0LlxuZXJyb3JBc3luY0V2ZW50cy5vbignYXN5bmNFcnJvcicsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvKipcbiAgICogVGhlIG5lc3RpbmcgZGVwdGggb2YgYWN0aXZlIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBzY29wZXMuIFdoaWxlIGdyZWF0ZXIgdGhhbiBgMGAsIGFuXG4gICAqIGFzeW5jIGVycm9yIGVtaXR0ZWQgKG9yIGEgZmlyZS1hbmQtZm9yZ2V0IG9wZXJhdGlvbiB3aG9zZSByZWplY3Rpb24gd2FzIGNhcHR1cmVkKSB3aXRoaW4gdGhlIHNjb3BlIGlzXG4gICAqIHRyZWF0ZWQgYXMgZXhwZWN0ZWQgYW5kIG5vdCBjb2xsZWN0ZWQgYXMgdW5oYW5kbGVkLlxuICAgKi9cbiAgYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVmZmVyIHRoYXQgY29sbGVjdHMgdW5oYW5kbGVkIGFzeW5jIGVycm9ycyB3aGlsZSBhIGNvbGxlY3Rpb24gd2luZG93IGlzIG9wZW4sIG9yIGBudWxsYCB3aGVuXG4gICAqIG5vIHdpbmRvdyBpcyBvcGVuICh0aGUgZGVmYXVsdCBpbiBwcm9kdWN0aW9uKS4gT3BlbmVkIGJ5IHtAbGluayBzdGFydENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30sXG4gICAqIGVtcHRpZWQgd2l0aG91dCBjbG9zaW5nIGJ5IHtAbGluayBkcmFpbkNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzfSwgYW5kIGRyYWluZWQtYW5kLWNsb3NlZCBieVxuICAgKiB7QGxpbmsgc3RvcENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30gXHUyMDE0IHVzZWQgYnkgdGhlIHRlc3QgaGFybmVzcyB0byBmYWlsIGEgdGVzdCB0aGF0IHN3YWxsb3dlZFxuICAgKiBhbiBhc3luYyBlcnJvci5cbiAgICovXG4gIGNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzOiBudWxsIHwgdW5rbm93bltdO1xufVxuXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5jb25zdCBtb2R1bGVTdGF0ZTogTW9kdWxlU3RhdGUgPSB7XG4gIGFzeW5jRXJyb3JJZ25vcmVDb250ZXh0RGVwdGg6IDAsXG4gIGNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzOiBudWxsXG59O1xuLyoqXG4gKiBBIG1lc3NhZ2Ugb2YgdGhlIEFzeW5jV3JhcHBlckVycm9yLlxuICovXG5leHBvcnQgY29uc3QgQVNZTkNfV1JBUFBFUl9FUlJPUl9NRVNTQUdFID0gJ0FuIHVuaGFuZGxlZCBlcnJvciBvY2N1cnJlZCBleGVjdXRpbmcgYXN5bmMgb3BlcmF0aW9uJztcblxuY29uc3QgU1RBQ0tfVFJBQ0VfUFJFRklYID0gJyAgICBhdCc7XG5cbmNvbnN0IEVSUk9SX0hFQURFUl9SRUdfRVhQID0gL15cXHcqRXJyb3IoPzo6IHwkKS87XG5cbmNvbnN0IFNUQUNLX0hFQURFUl9QUk9CRV9NRVNTQUdFID0gJ3N0YWNrIGhlYWRlciBwcm9iZSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBDdXN0b21TdGFja1RyYWNlRXJyb3J9IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVN0YWNrVHJhY2VFcnJvckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBjYXVzZTogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tUcmFjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSBsaW5lIG9mIGFuIGVycm9yJ3Mgc3RyaW5nIGZvcm0sIHRhZ2dlZCB3aXRoIHdoZXRoZXIgaXQgaXMgYSBzdGFjayBmcmFtZS5cbiAqXG4gKiBBIHRpdGxlIChhbiBlcnJvciBoZWFkZXIsIGEgYENhdXNlZCBieTpgIG1hcmtlciwgYSBsaW5lIG9mIGEgbXVsdGktbGluZSBtZXNzYWdlKSBpcyB3cmFwcGVkIGludG9cbiAqIHtAbGluayBnZW5lcmF0ZVN0YWNrVHJhY2VMaW5lfSdzIGZvcm0gd2hlbiB0aGUgZXJyb3IgaXQgYmVsb25ncyB0byBpcyBuZXN0ZWQ7IGEgZnJhbWUgaXMga2VwdCB2ZXJiYXRpbS5cbiAqL1xuaW50ZXJmYWNlIEVycm9yTGluZSB7XG4gIHJlYWRvbmx5IGlzRnJhbWU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbiBlcnJvciB0aGF0IHdyYXBzIGFuIGVycm9yIHdpdGggYSBjdXN0b20gc3RhY2sgdHJhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21TdGFja1RyYWNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDdXN0b21TdGFja1RyYWNlRXJyb3JDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIGNvbnN0IHsgY2F1c2UsIG1lc3NhZ2UsIHN0YWNrVHJhY2UgfSA9IHBhcmFtcztcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdDdXN0b21TdGFja1RyYWNlRXJyb3InO1xuXG4gICAgbGV0IHJvb3RDYXVzZSA9IGNhdXNlO1xuICAgIGNvbnN0IHBhcmVudENhdXNlcyA9IG5ldyBTZXQ8Q3VzdG9tU3RhY2tUcmFjZUVycm9yPigpO1xuICAgIHdoaWxlIChyb290Q2F1c2UgaW5zdGFuY2VvZiBDdXN0b21TdGFja1RyYWNlRXJyb3IpIHtcbiAgICAgIGlmIChwYXJlbnRDYXVzZXMuaGFzKHJvb3RDYXVzZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaXJjdWxhciBjYXVzZSBkZXRlY3RlZCcpO1xuICAgICAgfVxuICAgICAgcGFyZW50Q2F1c2VzLmFkZChyb290Q2F1c2UpO1xuICAgICAgcm9vdENhdXNlID0gcm9vdENhdXNlLmNhdXNlO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrTGluZXMgPSBzdGFja1RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICBpZiAoRVJST1JfSEVBREVSX1JFR19FWFAudGVzdChlbnN1cmVOb25OdWxsYWJsZShzdGFja0xpbmVzWzBdKSkpIHtcbiAgICAgIHN0YWNrTGluZXMuc2hpZnQoKTtcbiAgICB9XG4gICAgLy8gS2VlcCB0aGUgZW5naW5lJ3Mgb3duIGAuc3RhY2tgIHNoYXBlOiBhIGhlYWRlciBvbmx5IHdoZXJlIHRoZSBlbmdpbmUgd3JpdGVzIG9uZSAoVjgpLCBmcmFtZXMgb25seSB3aGVyZSBpdCBkb2VzIG5vdCAoSmF2YVNjcmlwdENvcmUsIFNwaWRlck1vbmtleSkuXG4gICAgaWYgKGhhc1N0YWNrSGVhZGVyKCkpIHtcbiAgICAgIHN0YWNrTGluZXMudW5zaGlmdChnZXRFcnJvckhlYWRlcih0aGlzKSk7XG4gICAgfVxuICAgIHRoaXMuc3RhY2sgPSBzdGFja0xpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCB3cmFwcyBhIG5vbi1gRXJyb3JgIHZhbHVlIHRoYXQgd2FzIHRocm93biwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgaW4gYGNhdXNlYC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVycm9yV3JhcHBlciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRXJyb3JXcmFwcGVyLlxuICAgKlxuICAgKiBAcGFyYW0gdGhyb3duVmFsdWUgLSBUaGUgb3JpZ2luYWwgbm9uLWBFcnJvcmAgdmFsdWUgdGhhdCB3YXMgdGhyb3duLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRocm93blZhbHVlOiB1bmtub3duKSB7XG4gICAgc3VwZXIoYEEgbm9uLUVycm9yIHZhbHVlIHdhcyB0aHJvd246ICR7U3RyaW5nKHRocm93blZhbHVlKX1gLCB7IGNhdXNlOiB0aHJvd25WYWx1ZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnRXJyb3JXcmFwcGVyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGFueSB0aHJvd24gdmFsdWUgdG8gYW4gYEVycm9yYC5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgdmFsdWUgdW5jaGFuZ2VkIGlmIGl0IGlzIGFscmVhZHkgYW4gYEVycm9yYCwgb3RoZXJ3aXNlIHdyYXBzIGl0IGluIGFuIHtAbGluayBFcnJvcldyYXBwZXJ9LlxuICAgKlxuICAgKiBAcGFyYW0gdGhyb3duVmFsdWUgLSBUaGUgdGhyb3duIHZhbHVlIHRvIG5vcm1hbGl6ZS5cbiAgICogQHJldHVybnMgQW4gYEVycm9yYCBpbnN0YW5jZTogdGhlIG9yaWdpbmFsIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgYW4gYEVycm9yYCwgb3RoZXJ3aXNlIGFuIHtAbGluayBFcnJvcldyYXBwZXJ9LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUodGhyb3duVmFsdWU6IHVua25vd24pOiBFcnJvciB7XG4gICAgcmV0dXJuIHRocm93blZhbHVlIGluc3RhbmNlb2YgRXJyb3IgPyB0aHJvd25WYWx1ZSA6IG5ldyBFcnJvcldyYXBwZXIodGhyb3duVmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCBpcyBub3QgcHJpbnRlZCB0byB0aGUgY29uc29sZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNpbGVudEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBTaWxlbnRFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1NpbGVudEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGNvbGxlY3Rpb24gd2luZG93IG9wZW5lZCBieSB7QGxpbmsgc3RhcnRDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnN9IGFuZCByZXR1cm5zIHdoYXQgaXRcbiAqIGhlbGQsIGxlYXZpbmcgdGhlIHdpbmRvdyAqKm9wZW4qKiBzbyBlcnJvcnMgZW1pdHRlZCBhZnRlcndhcmRzIGtlZXAgYmVpbmcgY29sbGVjdGVkLlxuICpcbiAqIFRoaXMgaXMgd2hhdCB0aGUgdGVzdCBzZXR1cCdzIChgQG1uYW91bW92L3R5cGVzY3JpcHQtdGVzdC10b29sa2l0L3NldHVwYCkgYGJlZm9yZUVhY2hgIC8gYGFmdGVyRWFjaGAgdXNlLCByYXRoZXIgdGhhblxuICoge0BsaW5rIHN0b3BDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnN9OiBhbiBhc3luYyBlcnJvciBlbWl0dGVkIGluIHRoZSBnYXAgYmV0d2VlbiB0d28gdGVzdHMgKGUuZy4gYnkgYVxuICogYHNldFRpbWVvdXRgIHRoZSB0ZXN0IGxlZnQgcGVuZGluZykgd291bGQgb3RoZXJ3aXNlIGxhbmQgb24gYSBjbG9zZWQgd2luZG93IGFuZCB2YW5pc2ggdW5yZXBvcnRlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdW5oYW5kbGVkIGFzeW5jIGVycm9ycyBjb2xsZWN0ZWQgc28gZmFyLCBvciBhbiBlbXB0eSBhcnJheSBpZiBubyB3aW5kb3cgaXMgb3Blbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYWluQ29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnMoKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzPy5zcGxpY2UoMCkgPz8gW107XG59XG5cbi8qKlxuICogRW1pdHMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICpcbiAqIFdoZW4gYSBjb2xsZWN0aW9uIHdpbmRvdyBpcyBvcGVuIChzZWUge0BsaW5rIHN0YXJ0Q29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzfSkgdGhlIGVycm9yIGlzXG4gKiBjb2xsZWN0ZWQgYXMgdW5oYW5kbGVkIHVubGVzcyBpdCBpcyBpZ25vcmVkIFx1MjAxNCBlaXRoZXIgYmVjYXVzZSBgc2hvdWxkSWdub3JlYCBpcyBgdHJ1ZWAgb3IgYW5cbiAqIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBzY29wZSBpcyBhY3RpdmUuIEEgcmVnaXN0ZXJlZCBjb25zdW1lciBoYW5kbGVyIGRlbGliZXJhdGVseSBkb2VzXG4gKiAqKm5vdCoqIGV4ZW1wdCB0aGUgZXJyb3I6IGluIHByb2R1Y3Rpb24gaXQgc2hvd3MgdGhlIHVzZXIgYSBOb3RpY2UsIHdoaWNoIGlzIG5vdCBhIHRlc3QgYXNzZXJ0aW5nIHRoYXRcbiAqIHRoZSBlcnJvciB3YXMgZXhwZWN0ZWQuIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBpcyB0aGUgc2luZ2xlLCBleHBsaWNpdCBvcHQtb3V0LlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGVycm9yIHRvIGVtaXQgYXMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICogQHBhcmFtIHNob3VsZElnbm9yZSAtIFdoZXRoZXIgdG8gdHJlYXQgdGhlIGVycm9yIGFzIGV4cGVjdGVkIGFuZCBuZXZlciBjb2xsZWN0IGl0IGFzIHVuaGFuZGxlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0aXZlIGlnbm9yZSBjb250ZXh0LiBVc2VkIHRvIGNhcnJ5IHRoZSBzY2hlZHVsZS10aW1lIGlnbm9yZSBkZWNpc2lvbiBvZiBhIGRlZmVycmVkIGZpcmUtYW5kLWZvcmdldCByZWplY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3I6IHVua25vd24sIHNob3VsZElnbm9yZSA9IGZhbHNlKTogdm9pZCB7XG4gIGNvbnN0IGlzSWdub3JlZCA9IHNob3VsZElnbm9yZSB8fCBtb2R1bGVTdGF0ZS5hc3luY0Vycm9ySWdub3JlQ29udGV4dERlcHRoID4gMDtcbiAgaWYgKG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzICYmICFpc0lnbm9yZWQpIHtcbiAgICBtb2R1bGVTdGF0ZS5jb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9ycy5wdXNoKGFzeW5jRXJyb3IpO1xuICB9XG4gIGVycm9yQXN5bmNFdmVudHMudHJpZ2dlcignYXN5bmNFcnJvcicsIGFzeW5jRXJyb3IpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGVycm9yIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgdGhlIGFnZ3JlZ2F0ZWQgZXJyb3JzIG9mXG4gKiBhbiBgQWdncmVnYXRlRXJyb3JgLCB3aXRoIGluZGVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBjb252ZXJ0IHRvIGEgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvclRvU3RyaW5nKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldEVycm9yTGluZXMoZXJyb3IpLm1hcCgobGluZSkgPT4gbGluZS50ZXh0KS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlIGFzIGEgc3RyaW5nLCBleGNsdWRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzdGFjayB0cmFjZSwgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja1RyYWNlKGZyYW1lc1RvU2tpcCA9IDApOiBzdHJpbmcge1xuICAvLyBTa2lwcGluZyB0aGUgYGdldFN0YWNrVHJhY2VgIGZyYW1lIGl0c2VsZiwgcGx1cyB0aGUgYEVycm9yYCBoZWFkZXIgbGluZSBvbiBhbiBlbmdpbmUgdGhhdCB3cml0ZXMgb25lLlxuICBjb25zdCBHRVRfU1RBQ0tfVFJBQ0VfRlJBTUVfQ09VTlQgPSAxO1xuICBjb25zdCBhZGRpdGlvbmFsTGluZXNUb1NraXAgPSBHRVRfU1RBQ0tfVFJBQ0VfRlJBTUVfQ09VTlQgKyAoaGFzU3RhY2tIZWFkZXIoKSA/IDEgOiAwKTtcbiAgY29uc3Qgc3RhY2sgPSBlbnN1cmVOb25OdWxsYWJsZShuZXcgRXJyb3IoKS5zdGFjayk7XG4gIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoZnJhbWVzVG9Ta2lwICsgYWRkaXRpb25hbExpbmVzVG9Ta2lwKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiB7QGxpbmsgc3RhcnRBc3luY0Vycm9ySWdub3JlQ29udGV4dH0gc2NvcGUgaXMgY3VycmVudGx5IGFjdGl2ZS5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYXQgbGVhc3Qgb25lIGlnbm9yZSBjb250ZXh0IGlzIGFjdGl2ZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jRXJyb3JJZ25vcmVDb250ZXh0QWN0aXZlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbW9kdWxlU3RhdGUuYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aCA+IDA7XG59XG5cbi8qKlxuICogUHJpbnRzIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgb3B0aW9uYWwgQU5TSSBzZXF1ZW5jZSBjbGVhcmluZy5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gcHJpbnQuXG4gKiBAcGFyYW0gY29uc29sZSAtIFRoZSBjb25zb2xlIHRvIHByaW50IHRvIChkZWZhdWx0OiBgZ2xvYmFsVGhpcy5jb25zb2xlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEVycm9yKGVycm9yOiB1bmtub3duLCBjb25zb2xlPzogQ29uc29sZSk6IHZvaWQge1xuICBjb25zb2xlID8/PSBnbG9iYWxUaGlzLmNvbnNvbGU7XG4gIGNvbnNvbGUuZXJyb3IoZXJyb3JUb1N0cmluZyhlcnJvcikpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBoYW5kbGVyIGZvciBhc3luY2hyb25vdXMgZXJyb3JzLlxuICpcbiAqIFJlZ2lzdGVyaW5nIGEgaGFuZGxlciBkb2VzIG5vdCBtYXJrIHRoZSBlcnJvcnMgaXQgcmVjZWl2ZXMgYXMgZXhwZWN0ZWQgXHUyMDE0IHNlZVxuICoge0BsaW5rIGVtaXRBc3luY0Vycm9yRXZlbnR9LiBBIHRlc3QgdGhhdCBkZWxpYmVyYXRlbHkgdHJpZ2dlcnMgYW4gYXN5bmMgZXJyb3Igb3BlbnMgYVxuICoge0BsaW5rIHN0YXJ0QXN5bmNFcnJvcklnbm9yZUNvbnRleHR9IHNjb3BlIHJlZ2FyZGxlc3Mgb2Ygd2hvIGlzIGxpc3RlbmluZy5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlciAtIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGFuIGFzeW5jaHJvbm91cyBlcnJvciBldmVudCBvY2N1cnMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVyIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBc3luY0Vycm9yRXZlbnRIYW5kbGVyKGhhbmRsZXI6IChhc3luY0Vycm9yOiB1bmtub3duKSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGV2ZW50UmVmID0gZXJyb3JBc3luY0V2ZW50cy5vbignYXN5bmNFcnJvcicsIGhhbmRsZXIpO1xuICByZXR1cm4gbmV3IENhbGxiYWNrRGlzcG9zYWJsZSh7XG4gICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgIGVycm9yQXN5bmNFdmVudHMub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICB9LFxuICAgIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmVcbiAgfSk7XG59XG5cbi8qKlxuICogT3BlbnMgYW4gaWdub3JlIGNvbnRleHQgaW4gd2hpY2ggYXN5bmMgZXJyb3JzIGFyZSB0cmVhdGVkIGFzIGV4cGVjdGVkIHJhdGhlciB0aGFuIHVuaGFuZGxlZCwgc28gdGhlXG4gKiB0ZXN0IGhhcm5lc3MgZG9lcyBub3QgZmFpbCB0aGUgdGVzdC5cbiAqXG4gKiBXaGlsZSB0aGUgcmV0dXJuZWQgZGlzcG9zYWJsZSBpcyBoZWxkLCBhbiBhc3luYyBlcnJvciBlbWl0dGVkIGRpcmVjdGx5IChzZWVcbiAqIHtAbGluayBlbWl0QXN5bmNFcnJvckV2ZW50fSkgaXMgbm90IGNvbGxlY3RlZCBhcyB1bmhhbmRsZWQuIENydWNpYWxseSwgYSBmaXJlLWFuZC1mb3JnZXQgb3BlcmF0aW9uXG4gKiBzY2hlZHVsZWQgd2l0aGluIHRoZSBzY29wZSAoZS5nLiB2aWEge0BsaW5rIGFzeW5jIWludm9rZUFzeW5jU2FmZWx5fSkgaXMgYWxzbyBpZ25vcmVkIHdoZW4gaXQgbGF0ZXJcbiAqIHJlamVjdHMgXHUyMDE0IGV2ZW4gYWZ0ZXIgdGhlIHNjb3BlIGhhcyBleGl0ZWQgXHUyMDE0IGJlY2F1c2Uge0BsaW5rIGFzeW5jIWFkZEVycm9ySGFuZGxlcn0gY2FwdHVyZXMgdGhlIGFjdGl2ZVxuICogaWdub3JlIGNvbnRleHQgYXQgc2NoZWR1bGUgdGltZS4gQSB0ZXN0IHRoZXJlZm9yZSBkb2VzIG5vdCBuZWVkIHRvIGRyYWluIHRoZSBvcGVyYXRpb24gaXRzZWxmOlxuICpcbiAqIGBgYHRzXG4gKiBpdCgnZG9lcyBub3QgZmFpbCcsICgpID0+IHtcbiAqICAgdXNpbmcgXyA9IHN0YXJ0QXN5bmNFcnJvcklnbm9yZUNvbnRleHQoKTtcbiAqICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdkZWxpYmVyYXRlbHkgc3dhbGxvd2VkJykpKTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQ29udGV4dHMgbmVzdDsgdGhlIGlnbm9yZSBvbmx5IGVuZHMgb25jZSBldmVyeSBvcGVuIGNvbnRleHQgaGFzIGJlZW4gZGlzcG9zZWQuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCBjbG9zZXMgdGhlIGlnbm9yZSBjb250ZXh0IHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRBc3luY0Vycm9ySWdub3JlQ29udGV4dCgpOiBEaXNwb3NhYmxlIHtcbiAgbW9kdWxlU3RhdGUuYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aCsrO1xuICByZXR1cm4gbmV3IENhbGxiYWNrRGlzcG9zYWJsZSh7XG4gICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgIG1vZHVsZVN0YXRlLmFzeW5jRXJyb3JJZ25vcmVDb250ZXh0RGVwdGgtLTtcbiAgICB9LFxuICAgIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmVcbiAgfSk7XG59XG5cbi8qKlxuICogT3BlbnMgYSB3aW5kb3cgaW4gd2hpY2ggYXN5bmMgZXJyb3JzIGVtaXR0ZWQgb3V0c2lkZSBhbiBpZ25vcmUgY29udGV4dCBhcmUgY29sbGVjdGVkIGFzIHVuaGFuZGxlZFxuICogKHNlZSB7QGxpbmsgZW1pdEFzeW5jRXJyb3JFdmVudH0pLCBkaXNjYXJkaW5nIGFueXRoaW5nIGNvbGxlY3RlZCBieSBhIHByZXZpb3VzIHdpbmRvdy5cbiAqXG4gKiBJbnRlbmRlZCBmb3IgdGhlIHRlc3QgaGFybmVzcyBvbmx5OiB0aGUgcGVyLXRlc3Qgc2V0dXAgb3BlbnMgYSB3aW5kb3cgYmVmb3JlIGVhY2ggdGVzdCBhbmQgZW1wdGllcyBpdFxuICogYWZ0ZXIgZWFjaCB0ZXN0IHZpYSB7QGxpbmsgZHJhaW5Db2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9yc30sIGNsb3NpbmcgaXQgZm9yIGdvb2Qgd2l0aFxuICoge0BsaW5rIHN0b3BDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnN9IG9uY2UgdGhlIGZpbGUncyBsYXN0IHRlc3QgaGFzIHJ1bi4gSW4gcHJvZHVjdGlvbiBubyB3aW5kb3dcbiAqIGlzIG9wZW4sIHNvIGVtaXR0aW5nIGFuIGFzeW5jIGVycm9yIGNhcnJpZXMgbm8gYm9va2tlZXBpbmcgb3ZlcmhlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9ycygpOiB2b2lkIHtcbiAgbW9kdWxlU3RhdGUuY29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBDbG9zZXMgdGhlIHdpbmRvdyBvcGVuZWQgYnkge0BsaW5rIHN0YXJ0Q29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzfSBhbmQgcmV0dXJucyB0aGUgdW5oYW5kbGVkXG4gKiBhc3luYyBlcnJvcnMgY29sbGVjdGVkIHdoaWxlIGl0IHdhcyBvcGVuLlxuICpcbiAqIFVzZSB7QGxpbmsgZHJhaW5Db2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9yc30gaW5zdGVhZCB3aGVyZXZlciBjb2xsZWN0aW9uIG11c3QgY29udGludWUgYWZ0ZXJ3YXJkcyBcdTIwMTRcbiAqIG9uY2UgdGhlIHdpbmRvdyBpcyBjbG9zZWQsIGEgbGF0ZXIgYXN5bmMgZXJyb3IgaXMgbm90IGNvbGxlY3RlZCBieSBhbnlvbmUuXG4gKlxuICogQHJldHVybnMgVGhlIGNvbGxlY3RlZCB1bmhhbmRsZWQgYXN5bmMgZXJyb3JzLCBvciBhbiBlbXB0eSBhcnJheSBpZiBubyB3aW5kb3cgd2FzIG9wZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdG9wQ29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzKCk6IHVua25vd25bXSB7XG4gIGNvbnN0IGNvbGxlY3RlZEVycm9ycyA9IG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzID8/IFtdO1xuICBtb2R1bGVTdGF0ZS5jb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9ycyA9IG51bGw7XG4gIHJldHVybiBjb2xsZWN0ZWRFcnJvcnM7XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byB0aHJvdy5cbiAqIEB0aHJvd3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93RXhwcmVzc2lvbihlcnJvcjogdW5rbm93bik6IG5ldmVyIHtcbiAgdGhyb3cgZXJyb3I7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTmVzdGVkRXJyb3JMaW5lcyhuZXN0ZWRFcnJvcjogdW5rbm93biwgdGl0bGU6IHN0cmluZyk6IEVycm9yTGluZVtdIHtcbiAgY29uc3QgbGluZXMgPSBbdG9UaXRsZUxpbmUodGl0bGUpLCAuLi5nZXRFcnJvckxpbmVzKG5lc3RlZEVycm9yKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUudGV4dC50cmltKCkgIT09ICcnKV07XG4gIHJldHVybiBsaW5lcy5tYXAoKGxpbmUpID0+IGxpbmUuaXNGcmFtZSA/IGxpbmUgOiB7IGlzRnJhbWU6IHRydWUsIHRleHQ6IGdlbmVyYXRlU3RhY2tUcmFjZUxpbmUobGluZS50ZXh0KSB9KTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTdGFja1RyYWNlTGluZSh0aXRsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1NUQUNLX1RSQUNFX1BSRUZJWH0gLS0tICR7dGl0bGV9IC0tLSAoMClgO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYE5hbWU6IG1lc3NhZ2VgIGhlYWRlciB0aGUgd2F5IFY4IHdyaXRlcyBpdCBpbnRvIGAuc3RhY2tgIChhIGJhcmUgYE5hbWVgIGZvciBhbiBlbXB0eSBtZXNzYWdlKS5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IuXG4gKiBAcmV0dXJucyBUaGUgaGVhZGVyLCB3aGljaCBzcGFucyBzZXZlcmFsIGxpbmVzIHdoZW4gdGhlIG1lc3NhZ2UgZG9lcy5cbiAqL1xuZnVuY3Rpb24gZ2V0RXJyb3JIZWFkZXIoZXJyb3I6IEVycm9yKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgPyBgJHtlcnJvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWAgOiBlcnJvci5uYW1lO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvckxpbmVzKGVycm9yOiB1bmtub3duKTogRXJyb3JMaW5lW10ge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpLnNwbGl0KCdcXG4nKS5tYXAoKHRleHQpID0+IHRvVGl0bGVMaW5lKHRleHQpKTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzID0gZ2V0T3duRXJyb3JMaW5lcyhlcnJvcik7XG4gIGlmIChlcnJvci5jYXVzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGluZXMucHVzaCguLi5nZW5lcmF0ZU5lc3RlZEVycm9yTGluZXMoZXJyb3IuY2F1c2UsICdDYXVzZWQgYnk6JykpO1xuICB9XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZUVycm9yKSB7XG4gICAgY29uc3QgYWdncmVnYXRlZEVycm9yczogcmVhZG9ubHkgdW5rbm93bltdID0gZXJyb3IuZXJyb3JzO1xuICAgIGZvciAoY29uc3QgW2luZGV4LCBhZ2dyZWdhdGVkRXJyb3JdIG9mIGFnZ3JlZ2F0ZWRFcnJvcnMuZW50cmllcygpKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLmdlbmVyYXRlTmVzdGVkRXJyb3JMaW5lcyhhZ2dyZWdhdGVkRXJyb3IsIGBBZ2dyZWdhdGVkIGVycm9yICMke1N0cmluZyhpbmRleCArIDEpfTpgKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaW5lcztcbn1cblxuZnVuY3Rpb24gZ2V0T3duRXJyb3JMaW5lcyhlcnJvcjogRXJyb3IpOiBFcnJvckxpbmVbXSB7XG4gIGNvbnN0IGhlYWRlckxpbmVzID0gZ2V0RXJyb3JIZWFkZXIoZXJyb3IpLnNwbGl0KCdcXG4nKS5tYXAoKHRleHQpID0+IHRvVGl0bGVMaW5lKHRleHQpKTtcbiAgaWYgKGVycm9yLnN0YWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gaGVhZGVyTGluZXM7XG4gIH1cblxuICBjb25zdCBzdGFja0xpbmVzID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpO1xuICBpZiAoaGFzU3RhY2tIZWFkZXIoKSkge1xuICAgIHJldHVybiBzdGFja0xpbmVzLm1hcCgodGV4dCkgPT4gKHsgaXNGcmFtZTogdGV4dC5zdGFydHNXaXRoKFNUQUNLX1RSQUNFX1BSRUZJWCksIHRleHQgfSkpO1xuICB9XG5cbiAgLy8gT24gYW4gZW5naW5lIHdpdGhvdXQgYSBoZWFkZXIgbGluZSwgdGhlIGAuc3RhY2tgIGlzIGZyYW1lcyBvbmx5LCBpbiBpdHMgb3duIGBuYW1lQHVybDpsaW5lOmNvbGAgZm9ybSwgc28gdGhlIG1lc3NhZ2UgaXMgbm93aGVyZSBpbiBpdDpcbiAgLy8gUHJlcGVuZCB0aGUgaGVhZGVyLCBhbmQgdGFrZSBldmVyeSBzdGFjayBsaW5lIGFzIGEgZnJhbWUuXG4gIHJldHVybiBbLi4uaGVhZGVyTGluZXMsIC4uLnN0YWNrTGluZXMuZmlsdGVyKCh0ZXh0KSA9PiB0ZXh0LnRyaW0oKSAhPT0gJycpLm1hcCgodGV4dCkgPT4gKHsgaXNGcmFtZTogdHJ1ZSwgdGV4dCB9KSldO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYXN5bmNocm9ub3VzIGVycm9ycyBieSBwcmludGluZyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGFzeW5jaHJvbm91cyBlcnJvciB0byBoYW5kbGUuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUFzeW5jRXJyb3IoYXN5bmNFcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBwcmludEVycm9yKGFzeW5jRXJyb3IpO1xufVxuXG4vKipcbiAqIEFuc3dlcnMgd2hldGhlciB0aGlzIGVuZ2luZSdzIGAuc3RhY2tgIG9wZW5zIHdpdGggdGhlIGVycm9yJ3MgYE5hbWU6IG1lc3NhZ2VgIGhlYWRlciBsaW5lLlxuICpcbiAqIFY4IHdyaXRlcyBvbmU7IEphdmFTY3JpcHRDb3JlIChldmVyeSBBcHBsZSBwbGF0Zm9ybSwgc28gT2JzaWRpYW4gb24gaU9TIGFuZCBpUGFkT1MpIGFuZCBTcGlkZXJNb25rZXkgd3JpdGUgZnJhbWVzIG9ubHkuXG4gKiBUaGUgYW5zd2VyIGJlbG9uZ3MgdG8gdGhlIGVuZ2luZSwgbm90IHRoZSBwbGF0Zm9ybSwgc28gaXQgaXMgcHJvYmVkIHJhdGhlciB0aGFuIHJlYWQgb2ZmIGBQbGF0Zm9ybWAuIEl0IGlzIHByb2JlZCBvbiBldmVyeVxuICogY2FsbCByYXRoZXIgdGhhbiBjYWNoZWQsIGJlY2F1c2UgYEVycm9yLnByZXBhcmVTdGFja1RyYWNlYCBjYW4gcmVzaGFwZSBWOCdzIHN0YWNrIGF0IHJ1bnRpbWUsIGFuZCBvbmUgZXh0cmEgYEVycm9yYCBjb3N0c1xuICogbm90aGluZyBvbiBhIHBhdGggdGhhdCBpcyBhbHJlYWR5IGhhbmRsaW5nIG9uZS5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYC5zdGFja2AgY2FycmllcyB0aGUgaGVhZGVyIGxpbmUuXG4gKi9cbmZ1bmN0aW9uIGhhc1N0YWNrSGVhZGVyKCk6IGJvb2xlYW4ge1xuICBjb25zdCBmaXJzdExpbmUgPSBuZXcgRXJyb3IoU1RBQ0tfSEVBREVSX1BST0JFX01FU1NBR0UpLnN0YWNrPy5zcGxpdCgnXFxuJywgMSlbMF07XG4gIHJldHVybiBmaXJzdExpbmUgPT09IGBFcnJvcjogJHtTVEFDS19IRUFERVJfUFJPQkVfTUVTU0FHRX1gO1xufVxuXG5mdW5jdGlvbiB0b1RpdGxlTGluZSh0ZXh0OiBzdHJpbmcpOiBFcnJvckxpbmUge1xuICByZXR1cm4geyBpc0ZyYW1lOiBmYWxzZSwgdGV4dCB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFNQSxTQUFTLG1CQUFtQjtBQUM1QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMseUJBQXlCO0FBTWxDLE1BQU0sbUJBQW1CLElBQUksWUFBZ0M7QUFFN0QsaUJBQWlCLEdBQUcsY0FBYyxnQkFBZ0I7QUF1QmxELE1BQU0sY0FBMkI7QUFBQSxFQUMvQiw4QkFBOEI7QUFBQSxFQUM5QiwrQkFBK0I7QUFDakM7QUFJTyxNQUFNLDhCQUE4QjtBQUUzQyxNQUFNLHFCQUFxQjtBQUUzQixNQUFNLHVCQUF1QjtBQUU3QixNQUFNLDZCQUE2QjtBQW9DNUIsTUFBTSw4QkFBOEIsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU14QyxZQUFZLFFBQWdEO0FBQ2pFLFVBQU0sRUFBRSxPQUFPLFNBQVMsV0FBVyxJQUFJO0FBQ3ZDLFVBQU0sU0FBUyxFQUFFLE1BQU0sQ0FBQztBQUN4QixTQUFLLE9BQU87QUFFWixRQUFJLFlBQVk7QUFDaEIsVUFBTSxlQUFlLG9CQUFJLElBQTJCO0FBQ3BELFdBQU8scUJBQXFCLHVCQUF1QjtBQUNqRCxVQUFJLGFBQWEsSUFBSSxTQUFTLEdBQUc7QUFDL0IsY0FBTSxJQUFJLE1BQU0seUJBQXlCO0FBQUEsTUFDM0M7QUFDQSxtQkFBYSxJQUFJLFNBQVM7QUFDMUIsa0JBQVksVUFBVTtBQUFBLElBQ3hCO0FBRUEsVUFBTSxhQUFhLFdBQVcsTUFBTSxJQUFJO0FBQ3hDLFFBQUkscUJBQXFC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
222
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVycm9yIGhhbmRsaW5nLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHtcbiAgQ2FsbGJhY2tEaXNwb3NhYmxlLFxuICBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvclxufSBmcm9tICcuL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuaW50ZXJmYWNlIEVycm9yQXN5bmNFdmVudE1hcCB7XG4gIGFzeW5jRXJyb3I6IFtlcnJvcjogdW5rbm93bl07XG59XG5cbmNvbnN0IGVycm9yQXN5bmNFdmVudHMgPSBuZXcgQXN5bmNFdmVudHM8RXJyb3JBc3luY0V2ZW50TWFwPigpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdG9wLWxldmVsLXNpZGUtZWZmZWN0cyAtLSBJbnN0YWxsaW5nIHRoZSBkZWZhdWx0IGhhbmRsZXIgb24gaW1wb3J0IGlzIHdoYXQgdGhpcyBtb2R1bGUgaXMgZm9yLiBEZWZlcnJpbmcgaXQgYmVoaW5kIGEgY2FsbCB3b3VsZCBtZWFuIGV2ZXJ5IGNvbnN1bWVyIGhhZCB0byByZW1lbWJlciB0byBtYWtlIHRoYXQgY2FsbCBiZWZvcmUgdGhlIGZpcnN0IGFzeW5jIGVycm9yLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIG1vbWVudCB0aGUgaGFuZGxlciBuZWVkcyB0byBhbHJlYWR5IGV4aXN0LlxuZXJyb3JBc3luY0V2ZW50cy5vbignYXN5bmNFcnJvcicsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvKipcbiAgICogVGhlIG5lc3RpbmcgZGVwdGggb2YgYWN0aXZlIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBzY29wZXMuIFdoaWxlIGdyZWF0ZXIgdGhhbiBgMGAsIGFuXG4gICAqIGFzeW5jIGVycm9yIGVtaXR0ZWQgKG9yIGEgZmlyZS1hbmQtZm9yZ2V0IG9wZXJhdGlvbiB3aG9zZSByZWplY3Rpb24gd2FzIGNhcHR1cmVkKSB3aXRoaW4gdGhlIHNjb3BlIGlzXG4gICAqIHRyZWF0ZWQgYXMgZXhwZWN0ZWQgYW5kIG5vdCBjb2xsZWN0ZWQgYXMgdW5oYW5kbGVkLlxuICAgKi9cbiAgYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVmZmVyIHRoYXQgY29sbGVjdHMgdW5oYW5kbGVkIGFzeW5jIGVycm9ycyB3aGlsZSBhIGNvbGxlY3Rpb24gd2luZG93IGlzIG9wZW4sIG9yIGBudWxsYCB3aGVuXG4gICAqIG5vIHdpbmRvdyBpcyBvcGVuICh0aGUgZGVmYXVsdCBpbiBwcm9kdWN0aW9uKS4gT3BlbmVkIGJ5IHtAbGluayBzdGFydENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30sXG4gICAqIGVtcHRpZWQgd2l0aG91dCBjbG9zaW5nIGJ5IHtAbGluayBkcmFpbkNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzfSwgYW5kIGRyYWluZWQtYW5kLWNsb3NlZCBieVxuICAgKiB7QGxpbmsgc3RvcENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30gXHUyMDE0IHVzZWQgYnkgdGhlIHRlc3QgaGFybmVzcyB0byBmYWlsIGEgdGVzdCB0aGF0IHN3YWxsb3dlZFxuICAgKiBhbiBhc3luYyBlcnJvci5cbiAgICovXG4gIGNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzOiBudWxsIHwgdW5rbm93bltdO1xufVxuXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5jb25zdCBtb2R1bGVTdGF0ZTogTW9kdWxlU3RhdGUgPSB7XG4gIGFzeW5jRXJyb3JJZ25vcmVDb250ZXh0RGVwdGg6IDAsXG4gIGNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzOiBudWxsXG59O1xuLyoqXG4gKiBBIG1lc3NhZ2Ugb2YgdGhlIEFzeW5jV3JhcHBlckVycm9yLlxuICovXG5leHBvcnQgY29uc3QgQVNZTkNfV1JBUFBFUl9FUlJPUl9NRVNTQUdFID0gJ0FuIHVuaGFuZGxlZCBlcnJvciBvY2N1cnJlZCBleGVjdXRpbmcgYXN5bmMgb3BlcmF0aW9uJztcblxuY29uc3QgU1RBQ0tfVFJBQ0VfUFJFRklYID0gJyAgICBhdCc7XG5cbmNvbnN0IEVSUk9SX0hFQURFUl9SRUdfRVhQID0gL15cXHcqRXJyb3IoPzo6IHwkKS87XG5cbmNvbnN0IFNUQUNLX0hFQURFUl9QUk9CRV9NRVNTQUdFID0gJ3N0YWNrIGhlYWRlciBwcm9iZSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBDdXN0b21TdGFja1RyYWNlRXJyb3J9IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVN0YWNrVHJhY2VFcnJvckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBjYXVzZTogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tUcmFjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSBsaW5lIG9mIGFuIGVycm9yJ3Mgc3RyaW5nIGZvcm0sIHRhZ2dlZCB3aXRoIHdoZXRoZXIgaXQgaXMgYSBzdGFjayBmcmFtZS5cbiAqXG4gKiBBIHRpdGxlIChhbiBlcnJvciBoZWFkZXIsIGEgYENhdXNlZCBieTpgIG1hcmtlciwgYSBsaW5lIG9mIGEgbXVsdGktbGluZSBtZXNzYWdlKSBpcyB3cmFwcGVkIGludG9cbiAqIHtAbGluayBnZW5lcmF0ZVN0YWNrVHJhY2VMaW5lfSdzIGZvcm0gd2hlbiB0aGUgZXJyb3IgaXQgYmVsb25ncyB0byBpcyBuZXN0ZWQ7IGEgZnJhbWUgaXMga2VwdCB2ZXJiYXRpbS5cbiAqL1xuaW50ZXJmYWNlIEVycm9yTGluZSB7XG4gIHJlYWRvbmx5IGlzRnJhbWU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbiBlcnJvciB0aGF0IHdyYXBzIGFuIGVycm9yIHdpdGggYSBjdXN0b20gc3RhY2sgdHJhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21TdGFja1RyYWNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDdXN0b21TdGFja1RyYWNlRXJyb3JDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIGNvbnN0IHsgY2F1c2UsIG1lc3NhZ2UsIHN0YWNrVHJhY2UgfSA9IHBhcmFtcztcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdDdXN0b21TdGFja1RyYWNlRXJyb3InO1xuXG4gICAgbGV0IHJvb3RDYXVzZSA9IGNhdXNlO1xuICAgIGNvbnN0IHBhcmVudENhdXNlcyA9IG5ldyBTZXQ8Q3VzdG9tU3RhY2tUcmFjZUVycm9yPigpO1xuICAgIHdoaWxlIChyb290Q2F1c2UgaW5zdGFuY2VvZiBDdXN0b21TdGFja1RyYWNlRXJyb3IpIHtcbiAgICAgIGlmIChwYXJlbnRDYXVzZXMuaGFzKHJvb3RDYXVzZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaXJjdWxhciBjYXVzZSBkZXRlY3RlZCcpO1xuICAgICAgfVxuICAgICAgcGFyZW50Q2F1c2VzLmFkZChyb290Q2F1c2UpO1xuICAgICAgcm9vdENhdXNlID0gcm9vdENhdXNlLmNhdXNlO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrTGluZXMgPSBzdGFja1RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICBpZiAoRVJST1JfSEVBREVSX1JFR19FWFAudGVzdChlbnN1cmVOb25OdWxsYWJsZShzdGFja0xpbmVzWzBdKSkpIHtcbiAgICAgIHN0YWNrTGluZXMuc2hpZnQoKTtcbiAgICB9XG4gICAgLy8gS2VlcCB0aGUgZW5naW5lJ3Mgb3duIGAuc3RhY2tgIHNoYXBlOiBhIGhlYWRlciBvbmx5IHdoZXJlIHRoZSBlbmdpbmUgd3JpdGVzIG9uZSAoVjgpLCBmcmFtZXMgb25seSB3aGVyZSBpdCBkb2VzIG5vdCAoSmF2YVNjcmlwdENvcmUsIFNwaWRlck1vbmtleSkuXG4gICAgaWYgKGhhc1N0YWNrSGVhZGVyKCkpIHtcbiAgICAgIHN0YWNrTGluZXMudW5zaGlmdChnZXRFcnJvckhlYWRlcih0aGlzKSk7XG4gICAgfVxuICAgIHRoaXMuc3RhY2sgPSBzdGFja0xpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCB3cmFwcyBhIG5vbi1gRXJyb3JgIHZhbHVlIHRoYXQgd2FzIHRocm93biwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgaW4gYGNhdXNlYC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVycm9yV3JhcHBlciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRXJyb3JXcmFwcGVyLlxuICAgKlxuICAgKiBAcGFyYW0gdGhyb3duVmFsdWUgLSBUaGUgb3JpZ2luYWwgbm9uLWBFcnJvcmAgdmFsdWUgdGhhdCB3YXMgdGhyb3duLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRocm93blZhbHVlOiB1bmtub3duKSB7XG4gICAgc3VwZXIoYEEgbm9uLUVycm9yIHZhbHVlIHdhcyB0aHJvd246ICR7U3RyaW5nKHRocm93blZhbHVlKX1gLCB7IGNhdXNlOiB0aHJvd25WYWx1ZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnRXJyb3JXcmFwcGVyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGFueSB0aHJvd24gdmFsdWUgdG8gYW4gYEVycm9yYC5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgdmFsdWUgdW5jaGFuZ2VkIGlmIGl0IGlzIGFscmVhZHkgYW4gYEVycm9yYCwgb3RoZXJ3aXNlIHdyYXBzIGl0IGluIGFuIHtAbGluayBFcnJvcldyYXBwZXJ9LlxuICAgKlxuICAgKiBAcGFyYW0gdGhyb3duVmFsdWUgLSBUaGUgdGhyb3duIHZhbHVlIHRvIG5vcm1hbGl6ZS5cbiAgICogQHJldHVybnMgQW4gYEVycm9yYCBpbnN0YW5jZTogdGhlIG9yaWdpbmFsIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgYW4gYEVycm9yYCwgb3RoZXJ3aXNlIGFuIHtAbGluayBFcnJvcldyYXBwZXJ9LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUodGhyb3duVmFsdWU6IHVua25vd24pOiBFcnJvciB7XG4gICAgcmV0dXJuIHRocm93blZhbHVlIGluc3RhbmNlb2YgRXJyb3IgPyB0aHJvd25WYWx1ZSA6IG5ldyBFcnJvcldyYXBwZXIodGhyb3duVmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCBpcyBub3QgcHJpbnRlZCB0byB0aGUgY29uc29sZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNpbGVudEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBTaWxlbnRFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1NpbGVudEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGNvbGxlY3Rpb24gd2luZG93IG9wZW5lZCBieSB7QGxpbmsgc3RhcnRDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnN9IGFuZCByZXR1cm5zIHdoYXQgaXRcbiAqIGhlbGQsIGxlYXZpbmcgdGhlIHdpbmRvdyAqKm9wZW4qKiBzbyBlcnJvcnMgZW1pdHRlZCBhZnRlcndhcmRzIGtlZXAgYmVpbmcgY29sbGVjdGVkLlxuICpcbiAqIFRoaXMgaXMgd2hhdCB0aGUgdGVzdCBzZXR1cCdzIChgQG1uYW91bW92L3R5cGVzY3JpcHQtdGVzdC10b29sa2l0L3NldHVwYCkgYGJlZm9yZUVhY2hgIC8gYGFmdGVyRWFjaGAgdXNlLCByYXRoZXIgdGhhblxuICoge0BsaW5rIHN0b3BDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnN9OiBhbiBhc3luYyBlcnJvciBlbWl0dGVkIGluIHRoZSBnYXAgYmV0d2VlbiB0d28gdGVzdHMgKGUuZy4gYnkgYVxuICogYHNldFRpbWVvdXRgIHRoZSB0ZXN0IGxlZnQgcGVuZGluZykgd291bGQgb3RoZXJ3aXNlIGxhbmQgb24gYSBjbG9zZWQgd2luZG93IGFuZCB2YW5pc2ggdW5yZXBvcnRlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdW5oYW5kbGVkIGFzeW5jIGVycm9ycyBjb2xsZWN0ZWQgc28gZmFyLCBvciBhbiBlbXB0eSBhcnJheSBpZiBubyB3aW5kb3cgaXMgb3Blbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYWluQ29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnMoKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzPy5zcGxpY2UoMCkgPz8gW107XG59XG5cbi8qKlxuICogRW1pdHMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICpcbiAqIFdoZW4gYSBjb2xsZWN0aW9uIHdpbmRvdyBpcyBvcGVuIChzZWUge0BsaW5rIHN0YXJ0Q29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzfSkgdGhlIGVycm9yIGlzXG4gKiBjb2xsZWN0ZWQgYXMgdW5oYW5kbGVkIHVubGVzcyBpdCBpcyBpZ25vcmVkIFx1MjAxNCBlaXRoZXIgYmVjYXVzZSBgc2hvdWxkSWdub3JlYCBpcyBgdHJ1ZWAgb3IgYW5cbiAqIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBzY29wZSBpcyBhY3RpdmUuIEEgcmVnaXN0ZXJlZCBjb25zdW1lciBoYW5kbGVyIGRlbGliZXJhdGVseSBkb2VzXG4gKiAqKm5vdCoqIGV4ZW1wdCB0aGUgZXJyb3I6IGluIHByb2R1Y3Rpb24gaXQgc2hvd3MgdGhlIHVzZXIgYSBOb3RpY2UsIHdoaWNoIGlzIG5vdCBhIHRlc3QgYXNzZXJ0aW5nIHRoYXRcbiAqIHRoZSBlcnJvciB3YXMgZXhwZWN0ZWQuIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBpcyB0aGUgc2luZ2xlLCBleHBsaWNpdCBvcHQtb3V0LlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGVycm9yIHRvIGVtaXQgYXMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICogQHBhcmFtIHNob3VsZElnbm9yZSAtIFdoZXRoZXIgdG8gdHJlYXQgdGhlIGVycm9yIGFzIGV4cGVjdGVkIGFuZCBuZXZlciBjb2xsZWN0IGl0IGFzIHVuaGFuZGxlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0aXZlIGlnbm9yZSBjb250ZXh0LiBVc2VkIHRvIGNhcnJ5IHRoZSBzY2hlZHVsZS10aW1lIGlnbm9yZSBkZWNpc2lvbiBvZiBhIGRlZmVycmVkIGZpcmUtYW5kLWZvcmdldCByZWplY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3I6IHVua25vd24sIHNob3VsZElnbm9yZSA9IGZhbHNlKTogdm9pZCB7XG4gIGNvbnN0IGlzSWdub3JlZCA9IHNob3VsZElnbm9yZSB8fCBtb2R1bGVTdGF0ZS5hc3luY0Vycm9ySWdub3JlQ29udGV4dERlcHRoID4gMDtcbiAgaWYgKG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzICYmICFpc0lnbm9yZWQpIHtcbiAgICBtb2R1bGVTdGF0ZS5jb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9ycy5wdXNoKGFzeW5jRXJyb3IpO1xuICB9XG4gIGVycm9yQXN5bmNFdmVudHMudHJpZ2dlcignYXN5bmNFcnJvcicsIGFzeW5jRXJyb3IpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGVycm9yIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgdGhlIGFnZ3JlZ2F0ZWQgZXJyb3JzIG9mXG4gKiBhbiBgQWdncmVnYXRlRXJyb3JgLCB3aXRoIGluZGVudGF0aW9uLlxuICpcbiAqIE5ldmVyIHRocm93czogaWYgdGhlIGVycm9yIGNhbm5vdCBiZSBmb3JtYXR0ZWQgKGEgdGhyb3dpbmcgZ2V0dGVyLCBhIG1hbGZvcm1lZCBuZXN0ZWQgZXJyb3IpLCBpdCBmYWxscyBiYWNrIHRvIHRoZVxuICogZXJyb3IncyBvd24gc3RyaW5nIGFuZCBzdGFjaywgc28gdGhlIGVycm9yIGJlaW5nIHJlcG9ydGVkIGlzIG5ldmVyIGhpZGRlbiBiZWhpbmQgYSBmYWlsdXJlIHRvIHJlcG9ydCBpdC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gY29udmVydCB0byBhIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JUb1N0cmluZyhlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdldEVycm9yTGluZXMoZXJyb3IpLm1hcCgobGluZSkgPT4gbGluZS50ZXh0KS5qb2luKCdcXG4nKTtcbiAgfSBjYXRjaCAoZm9ybWF0dGluZ0Vycm9yKSB7XG4gICAgcmV0dXJuIGdldEZhbGxiYWNrRXJyb3JTdHJpbmcoZXJyb3IsIGZvcm1hdHRpbmdFcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlIGFzIGEgc3RyaW5nLCBleGNsdWRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzdGFjayB0cmFjZSwgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja1RyYWNlKGZyYW1lc1RvU2tpcCA9IDApOiBzdHJpbmcge1xuICAvLyBTa2lwcGluZyB0aGUgYGdldFN0YWNrVHJhY2VgIGZyYW1lIGl0c2VsZiwgcGx1cyB0aGUgYEVycm9yYCBoZWFkZXIgbGluZSBvbiBhbiBlbmdpbmUgdGhhdCB3cml0ZXMgb25lLlxuICBjb25zdCBHRVRfU1RBQ0tfVFJBQ0VfRlJBTUVfQ09VTlQgPSAxO1xuICBjb25zdCBhZGRpdGlvbmFsTGluZXNUb1NraXAgPSBHRVRfU1RBQ0tfVFJBQ0VfRlJBTUVfQ09VTlQgKyAoaGFzU3RhY2tIZWFkZXIoKSA/IDEgOiAwKTtcbiAgY29uc3Qgc3RhY2sgPSBlbnN1cmVOb25OdWxsYWJsZShuZXcgRXJyb3IoKS5zdGFjayk7XG4gIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoZnJhbWVzVG9Ta2lwICsgYWRkaXRpb25hbExpbmVzVG9Ta2lwKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiB7QGxpbmsgc3RhcnRBc3luY0Vycm9ySWdub3JlQ29udGV4dH0gc2NvcGUgaXMgY3VycmVudGx5IGFjdGl2ZS5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYXQgbGVhc3Qgb25lIGlnbm9yZSBjb250ZXh0IGlzIGFjdGl2ZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jRXJyb3JJZ25vcmVDb250ZXh0QWN0aXZlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbW9kdWxlU3RhdGUuYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aCA+IDA7XG59XG5cbi8qKlxuICogUHJpbnRzIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgb3B0aW9uYWwgQU5TSSBzZXF1ZW5jZSBjbGVhcmluZy5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gcHJpbnQuXG4gKiBAcGFyYW0gY29uc29sZSAtIFRoZSBjb25zb2xlIHRvIHByaW50IHRvIChkZWZhdWx0OiBgZ2xvYmFsVGhpcy5jb25zb2xlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEVycm9yKGVycm9yOiB1bmtub3duLCBjb25zb2xlPzogQ29uc29sZSk6IHZvaWQge1xuICBjb25zb2xlID8/PSBnbG9iYWxUaGlzLmNvbnNvbGU7XG4gIGNvbnNvbGUuZXJyb3IoZXJyb3JUb1N0cmluZyhlcnJvcikpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBoYW5kbGVyIGZvciBhc3luY2hyb25vdXMgZXJyb3JzLlxuICpcbiAqIFJlZ2lzdGVyaW5nIGEgaGFuZGxlciBkb2VzIG5vdCBtYXJrIHRoZSBlcnJvcnMgaXQgcmVjZWl2ZXMgYXMgZXhwZWN0ZWQgXHUyMDE0IHNlZVxuICoge0BsaW5rIGVtaXRBc3luY0Vycm9yRXZlbnR9LiBBIHRlc3QgdGhhdCBkZWxpYmVyYXRlbHkgdHJpZ2dlcnMgYW4gYXN5bmMgZXJyb3Igb3BlbnMgYVxuICoge0BsaW5rIHN0YXJ0QXN5bmNFcnJvcklnbm9yZUNvbnRleHR9IHNjb3BlIHJlZ2FyZGxlc3Mgb2Ygd2hvIGlzIGxpc3RlbmluZy5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlciAtIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGFuIGFzeW5jaHJvbm91cyBlcnJvciBldmVudCBvY2N1cnMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVyIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBc3luY0Vycm9yRXZlbnRIYW5kbGVyKGhhbmRsZXI6IChhc3luY0Vycm9yOiB1bmtub3duKSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGV2ZW50UmVmID0gZXJyb3JBc3luY0V2ZW50cy5vbignYXN5bmNFcnJvcicsIGhhbmRsZXIpO1xuICByZXR1cm4gbmV3IENhbGxiYWNrRGlzcG9zYWJsZSh7XG4gICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgIGVycm9yQXN5bmNFdmVudHMub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICB9LFxuICAgIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmVcbiAgfSk7XG59XG5cbi8qKlxuICogT3BlbnMgYW4gaWdub3JlIGNvbnRleHQgaW4gd2hpY2ggYXN5bmMgZXJyb3JzIGFyZSB0cmVhdGVkIGFzIGV4cGVjdGVkIHJhdGhlciB0aGFuIHVuaGFuZGxlZCwgc28gdGhlXG4gKiB0ZXN0IGhhcm5lc3MgZG9lcyBub3QgZmFpbCB0aGUgdGVzdC5cbiAqXG4gKiBXaGlsZSB0aGUgcmV0dXJuZWQgZGlzcG9zYWJsZSBpcyBoZWxkLCBhbiBhc3luYyBlcnJvciBlbWl0dGVkIGRpcmVjdGx5IChzZWVcbiAqIHtAbGluayBlbWl0QXN5bmNFcnJvckV2ZW50fSkgaXMgbm90IGNvbGxlY3RlZCBhcyB1bmhhbmRsZWQuIENydWNpYWxseSwgYSBmaXJlLWFuZC1mb3JnZXQgb3BlcmF0aW9uXG4gKiBzY2hlZHVsZWQgd2l0aGluIHRoZSBzY29wZSAoZS5nLiB2aWEge0BsaW5rIGFzeW5jIWludm9rZUFzeW5jU2FmZWx5fSkgaXMgYWxzbyBpZ25vcmVkIHdoZW4gaXQgbGF0ZXJcbiAqIHJlamVjdHMgXHUyMDE0IGV2ZW4gYWZ0ZXIgdGhlIHNjb3BlIGhhcyBleGl0ZWQgXHUyMDE0IGJlY2F1c2Uge0BsaW5rIGFzeW5jIWFkZEVycm9ySGFuZGxlcn0gY2FwdHVyZXMgdGhlIGFjdGl2ZVxuICogaWdub3JlIGNvbnRleHQgYXQgc2NoZWR1bGUgdGltZS4gQSB0ZXN0IHRoZXJlZm9yZSBkb2VzIG5vdCBuZWVkIHRvIGRyYWluIHRoZSBvcGVyYXRpb24gaXRzZWxmOlxuICpcbiAqIGBgYHRzXG4gKiBpdCgnZG9lcyBub3QgZmFpbCcsICgpID0+IHtcbiAqICAgdXNpbmcgXyA9IHN0YXJ0QXN5bmNFcnJvcklnbm9yZUNvbnRleHQoKTtcbiAqICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdkZWxpYmVyYXRlbHkgc3dhbGxvd2VkJykpKTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQ29udGV4dHMgbmVzdDsgdGhlIGlnbm9yZSBvbmx5IGVuZHMgb25jZSBldmVyeSBvcGVuIGNvbnRleHQgaGFzIGJlZW4gZGlzcG9zZWQuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCBjbG9zZXMgdGhlIGlnbm9yZSBjb250ZXh0IHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRBc3luY0Vycm9ySWdub3JlQ29udGV4dCgpOiBEaXNwb3NhYmxlIHtcbiAgbW9kdWxlU3RhdGUuYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aCsrO1xuICByZXR1cm4gbmV3IENhbGxiYWNrRGlzcG9zYWJsZSh7XG4gICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgIG1vZHVsZVN0YXRlLmFzeW5jRXJyb3JJZ25vcmVDb250ZXh0RGVwdGgtLTtcbiAgICB9LFxuICAgIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmVcbiAgfSk7XG59XG5cbi8qKlxuICogT3BlbnMgYSB3aW5kb3cgaW4gd2hpY2ggYXN5bmMgZXJyb3JzIGVtaXR0ZWQgb3V0c2lkZSBhbiBpZ25vcmUgY29udGV4dCBhcmUgY29sbGVjdGVkIGFzIHVuaGFuZGxlZFxuICogKHNlZSB7QGxpbmsgZW1pdEFzeW5jRXJyb3JFdmVudH0pLCBkaXNjYXJkaW5nIGFueXRoaW5nIGNvbGxlY3RlZCBieSBhIHByZXZpb3VzIHdpbmRvdy5cbiAqXG4gKiBJbnRlbmRlZCBmb3IgdGhlIHRlc3QgaGFybmVzcyBvbmx5OiB0aGUgcGVyLXRlc3Qgc2V0dXAgb3BlbnMgYSB3aW5kb3cgYmVmb3JlIGVhY2ggdGVzdCBhbmQgZW1wdGllcyBpdFxuICogYWZ0ZXIgZWFjaCB0ZXN0IHZpYSB7QGxpbmsgZHJhaW5Db2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9yc30sIGNsb3NpbmcgaXQgZm9yIGdvb2Qgd2l0aFxuICoge0BsaW5rIHN0b3BDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnN9IG9uY2UgdGhlIGZpbGUncyBsYXN0IHRlc3QgaGFzIHJ1bi4gSW4gcHJvZHVjdGlvbiBubyB3aW5kb3dcbiAqIGlzIG9wZW4sIHNvIGVtaXR0aW5nIGFuIGFzeW5jIGVycm9yIGNhcnJpZXMgbm8gYm9va2tlZXBpbmcgb3ZlcmhlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9ycygpOiB2b2lkIHtcbiAgbW9kdWxlU3RhdGUuY29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBDbG9zZXMgdGhlIHdpbmRvdyBvcGVuZWQgYnkge0BsaW5rIHN0YXJ0Q29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzfSBhbmQgcmV0dXJucyB0aGUgdW5oYW5kbGVkXG4gKiBhc3luYyBlcnJvcnMgY29sbGVjdGVkIHdoaWxlIGl0IHdhcyBvcGVuLlxuICpcbiAqIFVzZSB7QGxpbmsgZHJhaW5Db2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9yc30gaW5zdGVhZCB3aGVyZXZlciBjb2xsZWN0aW9uIG11c3QgY29udGludWUgYWZ0ZXJ3YXJkcyBcdTIwMTRcbiAqIG9uY2UgdGhlIHdpbmRvdyBpcyBjbG9zZWQsIGEgbGF0ZXIgYXN5bmMgZXJyb3IgaXMgbm90IGNvbGxlY3RlZCBieSBhbnlvbmUuXG4gKlxuICogQHJldHVybnMgVGhlIGNvbGxlY3RlZCB1bmhhbmRsZWQgYXN5bmMgZXJyb3JzLCBvciBhbiBlbXB0eSBhcnJheSBpZiBubyB3aW5kb3cgd2FzIG9wZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdG9wQ29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzKCk6IHVua25vd25bXSB7XG4gIGNvbnN0IGNvbGxlY3RlZEVycm9ycyA9IG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzID8/IFtdO1xuICBtb2R1bGVTdGF0ZS5jb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9ycyA9IG51bGw7XG4gIHJldHVybiBjb2xsZWN0ZWRFcnJvcnM7XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byB0aHJvdy5cbiAqIEB0aHJvd3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93RXhwcmVzc2lvbihlcnJvcjogdW5rbm93bik6IG5ldmVyIHtcbiAgdGhyb3cgZXJyb3I7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTmVzdGVkRXJyb3JMaW5lcyhuZXN0ZWRFcnJvcjogdW5rbm93biwgdGl0bGU6IHN0cmluZyk6IEVycm9yTGluZVtdIHtcbiAgY29uc3QgbGluZXMgPSBbdG9UaXRsZUxpbmUodGl0bGUpLCAuLi5nZXRFcnJvckxpbmVzKG5lc3RlZEVycm9yKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUudGV4dC50cmltKCkgIT09ICcnKV07XG4gIHJldHVybiBsaW5lcy5tYXAoKGxpbmUpID0+IGxpbmUuaXNGcmFtZSA/IGxpbmUgOiB7IGlzRnJhbWU6IHRydWUsIHRleHQ6IGdlbmVyYXRlU3RhY2tUcmFjZUxpbmUobGluZS50ZXh0KSB9KTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTdGFja1RyYWNlTGluZSh0aXRsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1NUQUNLX1RSQUNFX1BSRUZJWH0gLS0tICR7dGl0bGV9IC0tLSAoMClgO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYE5hbWU6IG1lc3NhZ2VgIGhlYWRlciB0aGUgd2F5IFY4IHdyaXRlcyBpdCBpbnRvIGAuc3RhY2tgIChhIGJhcmUgYE5hbWVgIGZvciBhbiBlbXB0eSBtZXNzYWdlKS5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IuXG4gKiBAcmV0dXJucyBUaGUgaGVhZGVyLCB3aGljaCBzcGFucyBzZXZlcmFsIGxpbmVzIHdoZW4gdGhlIG1lc3NhZ2UgZG9lcy5cbiAqL1xuZnVuY3Rpb24gZ2V0RXJyb3JIZWFkZXIoZXJyb3I6IEVycm9yKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgPyBgJHtlcnJvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWAgOiBlcnJvci5uYW1lO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvckxpbmVzKGVycm9yOiB1bmtub3duKTogRXJyb3JMaW5lW10ge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpLnNwbGl0KCdcXG4nKS5tYXAoKHRleHQpID0+IHRvVGl0bGVMaW5lKHRleHQpKTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzID0gZ2V0T3duRXJyb3JMaW5lcyhlcnJvcik7XG4gIGlmIChlcnJvci5jYXVzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGluZXMucHVzaCguLi5nZW5lcmF0ZU5lc3RlZEVycm9yTGluZXMoZXJyb3IuY2F1c2UsICdDYXVzZWQgYnk6JykpO1xuICB9XG4gIC8vIEEgc3ViY2xhc3MsIGEgY3Jvc3MtcmVhbG0gaW5zdGFuY2Ugb3IgYSByZS13cmFwcGVkIG9uZSBjYW4gcGFzcyBgaW5zdGFuY2VvZiBBZ2dyZWdhdGVFcnJvcmAgd2l0aG91dCBhbiBgZXJyb3JzYCBhcnJheS5cbiAgY29uc3QgYWdncmVnYXRlZEVycm9yczogdW5rbm93biA9IGVycm9yIGluc3RhbmNlb2YgQWdncmVnYXRlRXJyb3IgPyBlcnJvci5lcnJvcnMgOiB1bmRlZmluZWQ7XG4gIGlmIChBcnJheS5pc0FycmF5KGFnZ3JlZ2F0ZWRFcnJvcnMpKSB7XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGFnZ3JlZ2F0ZWRFcnJvcl0gb2YgYWdncmVnYXRlZEVycm9ycy5lbnRyaWVzKCkpIHtcbiAgICAgIGxpbmVzLnB1c2goLi4uZ2VuZXJhdGVOZXN0ZWRFcnJvckxpbmVzKGFnZ3JlZ2F0ZWRFcnJvciwgYEFnZ3JlZ2F0ZWQgZXJyb3IgIyR7U3RyaW5nKGluZGV4ICsgMSl9OmApKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbGFzdC1yZXNvcnQgcmVwcmVzZW50YXRpb24gb2YgYW4gZXJyb3IgdGhhdCB7QGxpbmsgZXJyb3JUb1N0cmluZ30gZmFpbGVkIHRvIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdGhhdCBjb3VsZCBub3QgYmUgZm9ybWF0dGVkLlxuICogQHBhcmFtIGZvcm1hdHRpbmdFcnJvciAtIFdoYXQgdGhlIGZvcm1hdHRlciB0aHJldy5cbiAqIEByZXR1cm5zIFRoZSBlcnJvcidzIHN0cmluZywgaXRzIHN0YWNrIHdoZW4gaXQgaGFzIG9uZSwgYW5kIGEgbm90ZSBuYW1pbmcgdGhlIGZvcm1hdHRpbmcgZmFpbHVyZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RmFsbGJhY2tFcnJvclN0cmluZyhlcnJvcjogdW5rbm93biwgZm9ybWF0dGluZ0Vycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgY29uc3QgZXJyb3JTdHJpbmcgPSBzYWZlVG9TdHJpbmcoKCkgPT4gU3RyaW5nKGVycm9yKSk7XG4gIGNvbnN0IHN0YWNrID0gc2FmZVRvU3RyaW5nKCgpID0+IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA/PyAnJyA6ICcnKTtcbiAgY29uc3QgbGluZXMgPSBzdGFjay5zdGFydHNXaXRoKGVycm9yU3RyaW5nKSA/IFtzdGFja10gOiBbZXJyb3JTdHJpbmcsIHN0YWNrXTtcbiAgbGluZXMucHVzaChgKGVycm9yVG9TdHJpbmcgY291bGQgbm90IGZvcm1hdCB0aGlzIGVycm9yOiAke3NhZmVUb1N0cmluZygoKSA9PiBTdHJpbmcoZm9ybWF0dGluZ0Vycm9yKSl9KWApO1xuICByZXR1cm4gbGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lICE9PSAnJykuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGdldE93bkVycm9yTGluZXMoZXJyb3I6IEVycm9yKTogRXJyb3JMaW5lW10ge1xuICBjb25zdCBoZWFkZXJMaW5lcyA9IGdldEVycm9ySGVhZGVyKGVycm9yKS5zcGxpdCgnXFxuJykubWFwKCh0ZXh0KSA9PiB0b1RpdGxlTGluZSh0ZXh0KSk7XG4gIGlmIChlcnJvci5zdGFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGhlYWRlckxpbmVzO1xuICB9XG5cbiAgY29uc3Qgc3RhY2tMaW5lcyA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgaWYgKGhhc1N0YWNrSGVhZGVyKCkpIHtcbiAgICByZXR1cm4gc3RhY2tMaW5lcy5tYXAoKHRleHQpID0+ICh7IGlzRnJhbWU6IHRleHQuc3RhcnRzV2l0aChTVEFDS19UUkFDRV9QUkVGSVgpLCB0ZXh0IH0pKTtcbiAgfVxuXG4gIC8vIE9uIGFuIGVuZ2luZSB3aXRob3V0IGEgaGVhZGVyIGxpbmUsIHRoZSBgLnN0YWNrYCBpcyBmcmFtZXMgb25seSwgaW4gaXRzIG93biBgbmFtZUB1cmw6bGluZTpjb2xgIGZvcm0sIHNvIHRoZSBtZXNzYWdlIGlzIG5vd2hlcmUgaW4gaXQ6XG4gIC8vIFByZXBlbmQgdGhlIGhlYWRlciwgYW5kIHRha2UgZXZlcnkgc3RhY2sgbGluZSBhcyBhIGZyYW1lLlxuICByZXR1cm4gWy4uLmhlYWRlckxpbmVzLCAuLi5zdGFja0xpbmVzLmZpbHRlcigodGV4dCkgPT4gdGV4dC50cmltKCkgIT09ICcnKS5tYXAoKHRleHQpID0+ICh7IGlzRnJhbWU6IHRydWUsIHRleHQgfSkpXTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGFzeW5jaHJvbm91cyBlcnJvcnMgYnkgcHJpbnRpbmcgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXN5bmNFcnJvciAtIFRoZSBhc3luY2hyb25vdXMgZXJyb3IgdG8gaGFuZGxlLlxuICovXG5mdW5jdGlvbiBoYW5kbGVBc3luY0Vycm9yKGFzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgcHJpbnRFcnJvcihhc3luY0Vycm9yKTtcbn1cblxuLyoqXG4gKiBBbnN3ZXJzIHdoZXRoZXIgdGhpcyBlbmdpbmUncyBgLnN0YWNrYCBvcGVucyB3aXRoIHRoZSBlcnJvcidzIGBOYW1lOiBtZXNzYWdlYCBoZWFkZXIgbGluZS5cbiAqXG4gKiBWOCB3cml0ZXMgb25lOyBKYXZhU2NyaXB0Q29yZSAoZXZlcnkgQXBwbGUgcGxhdGZvcm0sIHNvIE9ic2lkaWFuIG9uIGlPUyBhbmQgaVBhZE9TKSBhbmQgU3BpZGVyTW9ua2V5IHdyaXRlIGZyYW1lcyBvbmx5LlxuICogVGhlIGFuc3dlciBiZWxvbmdzIHRvIHRoZSBlbmdpbmUsIG5vdCB0aGUgcGxhdGZvcm0sIHNvIGl0IGlzIHByb2JlZCByYXRoZXIgdGhhbiByZWFkIG9mZiBgUGxhdGZvcm1gLiBJdCBpcyBwcm9iZWQgb24gZXZlcnlcbiAqIGNhbGwgcmF0aGVyIHRoYW4gY2FjaGVkLCBiZWNhdXNlIGBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZWAgY2FuIHJlc2hhcGUgVjgncyBzdGFjayBhdCBydW50aW1lLCBhbmQgb25lIGV4dHJhIGBFcnJvcmAgY29zdHNcbiAqIG5vdGhpbmcgb24gYSBwYXRoIHRoYXQgaXMgYWxyZWFkeSBoYW5kbGluZyBvbmUuXG4gKlxuICogQHJldHVybnMgYHRydWVgIGlmIGAuc3RhY2tgIGNhcnJpZXMgdGhlIGhlYWRlciBsaW5lLlxuICovXG5mdW5jdGlvbiBoYXNTdGFja0hlYWRlcigpOiBib29sZWFuIHtcbiAgY29uc3QgZmlyc3RMaW5lID0gbmV3IEVycm9yKFNUQUNLX0hFQURFUl9QUk9CRV9NRVNTQUdFKS5zdGFjaz8uc3BsaXQoJ1xcbicsIDEpWzBdO1xuICByZXR1cm4gZmlyc3RMaW5lID09PSBgRXJyb3I6ICR7U1RBQ0tfSEVBREVSX1BST0JFX01FU1NBR0V9YDtcbn1cblxuZnVuY3Rpb24gc2FmZVRvU3RyaW5nKHRvU3RyaW5nOiAoKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiB0b1N0cmluZygpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJzx1bnByaW50YWJsZT4nO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvVGl0bGVMaW5lKHRleHQ6IHN0cmluZyk6IEVycm9yTGluZSB7XG4gIHJldHVybiB7IGlzRnJhbWU6IGZhbHNlLCB0ZXh0IH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQU1BLFNBQVMsbUJBQW1CO0FBQzVCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx5QkFBeUI7QUFNbEMsTUFBTSxtQkFBbUIsSUFBSSxZQUFn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
@@ -33,6 +33,12 @@ export interface LibraryInitParams {
33
33
  * A host that publishes its own debug namespace to its users passes it here, so their filters keep matching.
34
34
  */
35
35
  readonly debugNamespace?: string;
36
+ /**
37
+ * Earlier names of {@link debugNamespace}, so a filter written for one of them keeps showing the library's debug
38
+ * messages after the host renames its namespace. Each message still prints once: under {@link debugNamespace} when a
39
+ * filter enables it, otherwise under the first alias a filter enables. Defaults to none.
40
+ */
41
+ readonly debugNamespaceAliases?: readonly string[];
36
42
  /**
37
43
  * The namespace prefix prepended to the library's debug namespaces (e.g. `${pluginId}:`).
38
44
  */
@@ -63,6 +69,13 @@ declare class LibraryContext {
63
69
  * @returns The debug namespace.
64
70
  */
65
71
  get debugNamespace(): string;
72
+ /**
73
+ * The earlier names of {@link debugNamespace} a filter may still be written for. Empty until {@link init} is called
74
+ * with some.
75
+ *
76
+ * @returns The debug namespace aliases.
77
+ */
78
+ get debugNamespaceAliases(): readonly string[];
66
79
  /**
67
80
  * The namespace prefix prepended to the library's debug namespaces. Empty until {@link init} is called.
68
81
  *
@@ -26,6 +26,15 @@ class LibraryContext {
26
26
  get debugNamespace() {
27
27
  return this.params.debugNamespace ?? DEFAULT_DEBUG_NAMESPACE;
28
28
  }
29
+ /**
30
+ * The earlier names of {@link debugNamespace} a filter may still be written for. Empty until {@link init} is called
31
+ * with some.
32
+ *
33
+ * @returns The debug namespace aliases.
34
+ */
35
+ get debugNamespaceAliases() {
36
+ return this.params.debugNamespaceAliases ?? [];
37
+ }
29
38
  /**
30
39
  * The namespace prefix prepended to the library's debug namespaces. Empty until {@link init} is called.
31
40
  *
@@ -71,4 +80,4 @@ export {
71
80
  LIBRARY_NAME,
72
81
  Library
73
82
  };
74
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xpYnJhcnkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBIZWxwZXJzIGZvciB3b3JraW5nIHdpdGggdGhlIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGxpYnJhcnkuXG4gKi9cblxuLyoqXG4gKiBBIG5hbWUgb2YgdGhlIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBMSUJSQVJZX05BTUUgPSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliJztcblxuLyoqXG4gKiBUaGUgZGVidWcgbmFtZXNwYWNlIHRoZSBsaWJyYXJ5J3Mgb3duIGRlYnVnZ2VycyBsaXZlIHVuZGVyIHVudGlsIHtAbGluayBMaWJyYXJ5LmluaXR9IHN1cHBsaWVzIGFub3RoZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0RFQlVHX05BTUVTUEFDRSA9ICd0eXBlc2NyaXB0LWxpYic7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIExpYnJhcnkuaW5pdH0uXG4gKlxuICogVGhlc2UgYXJlIHB1cmVseSBjb3NtZXRpYyB2YWx1ZXMgdGhlIGhvc3QgaW5qZWN0cyBvbmNlIGF0IGluaXRpYWxpemF0aW9uLCBzbyB0aGUgbGlicmFyeSBpdHNlbGYgY2Fycmllc1xuICogbm8ga25vd2xlZGdlIG9mIHdobyBob3N0cyBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWJyYXJ5SW5pdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBndWlkZSBleHBsYWluaW5nIGhvdyB0byB0dXJuIGRlYnVnIG1lc3NhZ2VzIG9uIGFuZCBvZmYsIG5hbWVkIGluIHRoZSBsaWJyYXJ5J3MgZGVidWcgbWVzc2FnZXMuXG4gICAqIFdpdGhvdXQgb25lLCB0aGUgbWVzc2FnZXMgbmFtZSBubyBndWlkZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnR3VpZGVVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2UgdGhlIGxpYnJhcnkncyBvd24gZGVidWdnZXJzIGxpdmUgdW5kZXIuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0RFQlVHX05BTUVTUEFDRX0uXG4gICAqIEEgaG9zdCB0aGF0IHB1Ymxpc2hlcyBpdHMgb3duIGRlYnVnIG5hbWVzcGFjZSB0byBpdHMgdXNlcnMgcGFzc2VzIGl0IGhlcmUsIHNvIHRoZWlyIGZpbHRlcnMga2VlcCBtYXRjaGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnTmFtZXNwYWNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZXNwYWNlIHByZWZpeCBwcmVwZW5kZWQgdG8gdGhlIGxpYnJhcnkncyBkZWJ1ZyBuYW1lc3BhY2VzIChlLmcuIGAke3BsdWdpbklkfTpgKS5cbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnUHJlZml4TmFtZXNwYWNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZGVidWcgbG9nZ2luZyBzaG91bGQgYXBwZW5kIGEgcmljaCBEZXZUb29scyBzdGFjayB0cmFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFByaW50U3RhY2tUcmFjZTogYm9vbGVhbjtcbn1cblxuY29uc3QgREVGQVVMVF9QQVJBTVM6IExpYnJhcnlJbml0UGFyYW1zID0ge1xuICBkZWJ1Z1ByZWZpeE5hbWVzcGFjZTogJycsXG4gIHNob3VsZFByaW50U3RhY2tUcmFjZTogZmFsc2Vcbn07XG5cbi8qKlxuICogVGhlIHNpbmdsZSwgZGV0ZXJtaW5pc3RpYyBpbml0aWFsaXphdGlvbiBlbnRyeSBwb2ludCBmb3IgdGhlIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGxpYnJhcnkuXG4gKlxuICogVGhlIGhvc3QgY2FsbHMge0BsaW5rIExpYnJhcnkuaW5pdH0gZXhhY3RseSBvbmNlIHRvIHB1c2ggaXRzIGNvc21ldGljIGNvbmZpZ3VyYXRpb247IHRoZSBsaWJyYXJ5IG9ubHlcbiAqIHJlYWRzIGl0IHRocm91Z2ggdGhlIGdldHRlcnMuIENhbGxpbmcge0BsaW5rIExpYnJhcnkuaW5pdH0gbW9yZSB0aGFuIG9uY2UgdGhyb3dzIFx1MjAxNFxuICoge0BsaW5rIExpYnJhcnkucmVzZXRUb0RlZmF1bHR9IGNsZWFycyB0aGUgc3RhdGUgKGUuZy4gYmV0d2VlbiB0ZXN0cywgb3Igb24gdW5sb2FkKSBhbmQgYWxsb3dzXG4gKiByZS1pbml0aWFsaXphdGlvbi5cbiAqL1xuY2xhc3MgTGlicmFyeUNvbnRleHQge1xuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgZ3VpZGUgZXhwbGFpbmluZyBob3cgdG8gdHVybiBkZWJ1ZyBtZXNzYWdlcyBvbiBhbmQgb2ZmLiBFbXB0eSB1bnRpbCB7QGxpbmsgaW5pdH0gaXMgY2FsbGVkIHdpdGggb25lLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZGVidWcgZ3VpZGUgVVJMLlxuICAgKi9cbiAgcHVibGljIGdldCBkZWJ1Z0d1aWRlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zLmRlYnVnR3VpZGVVcmwgPz8gJyc7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSB0aGUgbGlicmFyeSdzIG93biBkZWJ1Z2dlcnMgbGl2ZSB1bmRlci5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlYnVnIG5hbWVzcGFjZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGVidWdOYW1lc3BhY2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXMuZGVidWdOYW1lc3BhY2UgPz8gREVGQVVMVF9ERUJVR19OQU1FU1BBQ0U7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSBwcmVmaXggcHJlcGVuZGVkIHRvIHRoZSBsaWJyYXJ5J3MgZGVidWcgbmFtZXNwYWNlcy4gRW1wdHkgdW50aWwge0BsaW5rIGluaXR9IGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlYnVnIG5hbWVzcGFjZSBwcmVmaXguXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlYnVnUHJlZml4TmFtZXNwYWNlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zLmRlYnVnUHJlZml4TmFtZXNwYWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZGVidWcgbG9nZ2luZyBzaG91bGQgYXBwZW5kIGEgcmljaCBEZXZUb29scyBzdGFjayB0cmFjZS4gYGZhbHNlYCB1bnRpbCB7QGxpbmsgaW5pdH0gaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIHByaW50IHN0YWNrIHRyYWNlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvdWxkUHJpbnRTdGFja1RyYWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcy5zaG91bGRQcmludFN0YWNrVHJhY2U7XG4gIH1cblxuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIHBhcmFtczogTGlicmFyeUluaXRQYXJhbXMgPSB7IC4uLkRFRkFVTFRfUEFSQU1TIH07XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBsaWJyYXJ5IHdpdGggdGhlIGhvc3QncyBjb3NtZXRpYyBjb25maWd1cmF0aW9uLiBNdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2U7IGNhbGxpbmcgaXRcbiAgICogYWdhaW4gYmVmb3JlIHtAbGluayByZXNldFRvRGVmYXVsdH0gdGhyb3dzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvc21ldGljIGNvbmZpZ3VyYXRpb24gdG8gaW5qZWN0LlxuICAgKi9cbiAgcHVibGljIGluaXQocGFyYW1zOiBMaWJyYXJ5SW5pdFBhcmFtcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtMSUJSQVJZX05BTUV9IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuIENhbGwgTGlicmFyeS5yZXNldFRvRGVmYXVsdCgpIGJlZm9yZSBpbml0aWFsaXppbmcgYWdhaW4uYCk7XG4gICAgfVxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJhbXMgPSB7IC4uLnBhcmFtcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgbGlicmFyeSBiYWNrIHRvIGl0cyBkZWZhdWx0ICh1bmluaXRpYWxpemVkKSBzdGF0ZSwgYWxsb3dpbmcge0BsaW5rIGluaXR9IHRvIGJlIGNhbGxlZCBhZ2Fpbi5cbiAgICovXG4gIHB1YmxpYyByZXNldFRvRGVmYXVsdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnBhcmFtcyA9IHsgLi4uREVGQVVMVF9QQVJBTVMgfTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBzaW5nbGUge0BsaW5rIExpYnJhcnlDb250ZXh0fSBpbnN0YW5jZSBcdTIwMTQgdGhlIGxpYnJhcnkncyBkZXRlcm1pbmlzdGljIGluaXRpYWxpemF0aW9uIGVudHJ5IHBvaW50LlxuICovXG5leHBvcnQgY29uc3QgTGlicmFyeSA9IG5ldyBMaWJyYXJ5Q29udGV4dCgpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFTTyxNQUFNLGVBQWU7QUFLckIsTUFBTSwwQkFBMEI7QUFnQ3ZDLE1BQU0saUJBQW9DO0FBQUEsRUFDeEMsc0JBQXNCO0FBQUEsRUFDdEIsdUJBQXVCO0FBQ3pCO0FBVUEsTUFBTSxlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTW5CLElBQVcsZ0JBQXdCO0FBQ2pDLFdBQU8sS0FBSyxPQUFPLGlCQUFpQjtBQUFBLEVBQ3RDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBVyxpQkFBeUI7QUFDbEMsV0FBTyxLQUFLLE9BQU8sa0JBQWtCO0FBQUEsRUFDdkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFXLHVCQUErQjtBQUN4QyxXQUFPLEtBQUssT0FBTztBQUFBLEVBQ3JCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBVyx3QkFBaUM7QUFDMUMsV0FBTyxLQUFLLE9BQU87QUFBQSxFQUNyQjtBQUFBLEVBRVEsZ0JBQWdCO0FBQUEsRUFFaEIsU0FBNEIsRUFBRSxHQUFHLGVBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFqRCxLQUFLLFFBQWlDO0FBQzNDLFFBQUksS0FBSyxlQUFlO0FBQ3RCLFlBQU0sSUFBSSxNQUFNLEdBQUcsWUFBWSxtRkFBbUY7QUFBQSxJQUNwSDtBQUNBLFNBQUssZ0JBQWdCO0FBQ3JCLFNBQUssU0FBUyxFQUFFLEdBQUcsT0FBTztBQUFBLEVBQzVCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLTyxpQkFBdUI7QUFDNUIsU0FBSyxnQkFBZ0I7QUFDckIsU0FBSyxTQUFTLEVBQUUsR0FBRyxlQUFlO0FBQUEsRUFDcEM7QUFDRjtBQUtPLE1BQU0sVUFBVSxJQUFJLGVBQWU7IiwKICAibmFtZXMiOiBbXQp9Cg==
83
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xpYnJhcnkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBIZWxwZXJzIGZvciB3b3JraW5nIHdpdGggdGhlIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGxpYnJhcnkuXG4gKi9cblxuLyoqXG4gKiBBIG5hbWUgb2YgdGhlIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBMSUJSQVJZX05BTUUgPSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliJztcblxuLyoqXG4gKiBUaGUgZGVidWcgbmFtZXNwYWNlIHRoZSBsaWJyYXJ5J3Mgb3duIGRlYnVnZ2VycyBsaXZlIHVuZGVyIHVudGlsIHtAbGluayBMaWJyYXJ5LmluaXR9IHN1cHBsaWVzIGFub3RoZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0RFQlVHX05BTUVTUEFDRSA9ICd0eXBlc2NyaXB0LWxpYic7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIExpYnJhcnkuaW5pdH0uXG4gKlxuICogVGhlc2UgYXJlIHB1cmVseSBjb3NtZXRpYyB2YWx1ZXMgdGhlIGhvc3QgaW5qZWN0cyBvbmNlIGF0IGluaXRpYWxpemF0aW9uLCBzbyB0aGUgbGlicmFyeSBpdHNlbGYgY2Fycmllc1xuICogbm8ga25vd2xlZGdlIG9mIHdobyBob3N0cyBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWJyYXJ5SW5pdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBndWlkZSBleHBsYWluaW5nIGhvdyB0byB0dXJuIGRlYnVnIG1lc3NhZ2VzIG9uIGFuZCBvZmYsIG5hbWVkIGluIHRoZSBsaWJyYXJ5J3MgZGVidWcgbWVzc2FnZXMuXG4gICAqIFdpdGhvdXQgb25lLCB0aGUgbWVzc2FnZXMgbmFtZSBubyBndWlkZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnR3VpZGVVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2UgdGhlIGxpYnJhcnkncyBvd24gZGVidWdnZXJzIGxpdmUgdW5kZXIuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0RFQlVHX05BTUVTUEFDRX0uXG4gICAqIEEgaG9zdCB0aGF0IHB1Ymxpc2hlcyBpdHMgb3duIGRlYnVnIG5hbWVzcGFjZSB0byBpdHMgdXNlcnMgcGFzc2VzIGl0IGhlcmUsIHNvIHRoZWlyIGZpbHRlcnMga2VlcCBtYXRjaGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnTmFtZXNwYWNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFYXJsaWVyIG5hbWVzIG9mIHtAbGluayBkZWJ1Z05hbWVzcGFjZX0sIHNvIGEgZmlsdGVyIHdyaXR0ZW4gZm9yIG9uZSBvZiB0aGVtIGtlZXBzIHNob3dpbmcgdGhlIGxpYnJhcnkncyBkZWJ1Z1xuICAgKiBtZXNzYWdlcyBhZnRlciB0aGUgaG9zdCByZW5hbWVzIGl0cyBuYW1lc3BhY2UuIEVhY2ggbWVzc2FnZSBzdGlsbCBwcmludHMgb25jZTogdW5kZXIge0BsaW5rIGRlYnVnTmFtZXNwYWNlfSB3aGVuIGFcbiAgICogZmlsdGVyIGVuYWJsZXMgaXQsIG90aGVyd2lzZSB1bmRlciB0aGUgZmlyc3QgYWxpYXMgYSBmaWx0ZXIgZW5hYmxlcy4gRGVmYXVsdHMgdG8gbm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnTmFtZXNwYWNlQWxpYXNlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZXNwYWNlIHByZWZpeCBwcmVwZW5kZWQgdG8gdGhlIGxpYnJhcnkncyBkZWJ1ZyBuYW1lc3BhY2VzIChlLmcuIGAke3BsdWdpbklkfTpgKS5cbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnUHJlZml4TmFtZXNwYWNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZGVidWcgbG9nZ2luZyBzaG91bGQgYXBwZW5kIGEgcmljaCBEZXZUb29scyBzdGFjayB0cmFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFByaW50U3RhY2tUcmFjZTogYm9vbGVhbjtcbn1cblxuY29uc3QgREVGQVVMVF9QQVJBTVM6IExpYnJhcnlJbml0UGFyYW1zID0ge1xuICBkZWJ1Z1ByZWZpeE5hbWVzcGFjZTogJycsXG4gIHNob3VsZFByaW50U3RhY2tUcmFjZTogZmFsc2Vcbn07XG5cbi8qKlxuICogVGhlIHNpbmdsZSwgZGV0ZXJtaW5pc3RpYyBpbml0aWFsaXphdGlvbiBlbnRyeSBwb2ludCBmb3IgdGhlIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGxpYnJhcnkuXG4gKlxuICogVGhlIGhvc3QgY2FsbHMge0BsaW5rIExpYnJhcnkuaW5pdH0gZXhhY3RseSBvbmNlIHRvIHB1c2ggaXRzIGNvc21ldGljIGNvbmZpZ3VyYXRpb247IHRoZSBsaWJyYXJ5IG9ubHlcbiAqIHJlYWRzIGl0IHRocm91Z2ggdGhlIGdldHRlcnMuIENhbGxpbmcge0BsaW5rIExpYnJhcnkuaW5pdH0gbW9yZSB0aGFuIG9uY2UgdGhyb3dzIFx1MjAxNFxuICoge0BsaW5rIExpYnJhcnkucmVzZXRUb0RlZmF1bHR9IGNsZWFycyB0aGUgc3RhdGUgKGUuZy4gYmV0d2VlbiB0ZXN0cywgb3Igb24gdW5sb2FkKSBhbmQgYWxsb3dzXG4gKiByZS1pbml0aWFsaXphdGlvbi5cbiAqL1xuY2xhc3MgTGlicmFyeUNvbnRleHQge1xuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgZ3VpZGUgZXhwbGFpbmluZyBob3cgdG8gdHVybiBkZWJ1ZyBtZXNzYWdlcyBvbiBhbmQgb2ZmLiBFbXB0eSB1bnRpbCB7QGxpbmsgaW5pdH0gaXMgY2FsbGVkIHdpdGggb25lLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZGVidWcgZ3VpZGUgVVJMLlxuICAgKi9cbiAgcHVibGljIGdldCBkZWJ1Z0d1aWRlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zLmRlYnVnR3VpZGVVcmwgPz8gJyc7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSB0aGUgbGlicmFyeSdzIG93biBkZWJ1Z2dlcnMgbGl2ZSB1bmRlci5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlYnVnIG5hbWVzcGFjZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGVidWdOYW1lc3BhY2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXMuZGVidWdOYW1lc3BhY2UgPz8gREVGQVVMVF9ERUJVR19OQU1FU1BBQ0U7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGVhcmxpZXIgbmFtZXMgb2Yge0BsaW5rIGRlYnVnTmFtZXNwYWNlfSBhIGZpbHRlciBtYXkgc3RpbGwgYmUgd3JpdHRlbiBmb3IuIEVtcHR5IHVudGlsIHtAbGluayBpbml0fSBpcyBjYWxsZWRcbiAgICogd2l0aCBzb21lLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZGVidWcgbmFtZXNwYWNlIGFsaWFzZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlYnVnTmFtZXNwYWNlQWxpYXNlcygpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zLmRlYnVnTmFtZXNwYWNlQWxpYXNlcyA/PyBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZXNwYWNlIHByZWZpeCBwcmVwZW5kZWQgdG8gdGhlIGxpYnJhcnkncyBkZWJ1ZyBuYW1lc3BhY2VzLiBFbXB0eSB1bnRpbCB7QGxpbmsgaW5pdH0gaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZGVidWcgbmFtZXNwYWNlIHByZWZpeC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGVidWdQcmVmaXhOYW1lc3BhY2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXMuZGVidWdQcmVmaXhOYW1lc3BhY2U7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBkZWJ1ZyBsb2dnaW5nIHNob3VsZCBhcHBlbmQgYSByaWNoIERldlRvb2xzIHN0YWNrIHRyYWNlLiBgZmFsc2VgIHVudGlsIHtAbGluayBpbml0fSBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gcHJpbnQgc3RhY2sgdHJhY2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG91bGRQcmludFN0YWNrVHJhY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zLnNob3VsZFByaW50U3RhY2tUcmFjZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcGFyYW1zOiBMaWJyYXJ5SW5pdFBhcmFtcyA9IHsgLi4uREVGQVVMVF9QQVJBTVMgfTtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGxpYnJhcnkgd2l0aCB0aGUgaG9zdCdzIGNvc21ldGljIGNvbmZpZ3VyYXRpb24uIE11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZTsgY2FsbGluZyBpdFxuICAgKiBhZ2FpbiBiZWZvcmUge0BsaW5rIHJlc2V0VG9EZWZhdWx0fSB0aHJvd3MuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29zbWV0aWMgY29uZmlndXJhdGlvbiB0byBpbmplY3QuXG4gICAqL1xuICBwdWJsaWMgaW5pdChwYXJhbXM6IExpYnJhcnlJbml0UGFyYW1zKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke0xJQlJBUllfTkFNRX0gaXMgYWxyZWFkeSBpbml0aWFsaXplZC4gQ2FsbCBMaWJyYXJ5LnJlc2V0VG9EZWZhdWx0KCkgYmVmb3JlIGluaXRpYWxpemluZyBhZ2Fpbi5gKTtcbiAgICB9XG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB0aGlzLnBhcmFtcyA9IHsgLi4ucGFyYW1zIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBsaWJyYXJ5IGJhY2sgdG8gaXRzIGRlZmF1bHQgKHVuaW5pdGlhbGl6ZWQpIHN0YXRlLCBhbGxvd2luZyB7QGxpbmsgaW5pdH0gdG8gYmUgY2FsbGVkIGFnYWluLlxuICAgKi9cbiAgcHVibGljIHJlc2V0VG9EZWZhdWx0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMucGFyYW1zID0geyAuLi5ERUZBVUxUX1BBUkFNUyB9O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHNpbmdsZSB7QGxpbmsgTGlicmFyeUNvbnRleHR9IGluc3RhbmNlIFx1MjAxNCB0aGUgbGlicmFyeSdzIGRldGVybWluaXN0aWMgaW5pdGlhbGl6YXRpb24gZW50cnkgcG9pbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBMaWJyYXJ5ID0gbmV3IExpYnJhcnlDb250ZXh0KCk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQVNPLE1BQU0sZUFBZTtBQUtyQixNQUFNLDBCQUEwQjtBQXVDdkMsTUFBTSxpQkFBb0M7QUFBQSxFQUN4QyxzQkFBc0I7QUFBQSxFQUN0Qix1QkFBdUI7QUFDekI7QUFVQSxNQUFNLGVBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNbkIsSUFBVyxnQkFBd0I7QUFDakMsV0FBTyxLQUFLLE9BQU8saUJBQWlCO0FBQUEsRUFDdEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFXLGlCQUF5QjtBQUNsQyxXQUFPLEtBQUssT0FBTyxrQkFBa0I7QUFBQSxFQUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsSUFBVyx3QkFBMkM7QUFDcEQsV0FBTyxLQUFLLE9BQU8seUJBQXlCLENBQUM7QUFBQSxFQUMvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQVcsdUJBQStCO0FBQ3hDLFdBQU8sS0FBSyxPQUFPO0FBQUEsRUFDckI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFXLHdCQUFpQztBQUMxQyxXQUFPLEtBQUssT0FBTztBQUFBLEVBQ3JCO0FBQUEsRUFFUSxnQkFBZ0I7QUFBQSxFQUVoQixTQUE0QixFQUFFLEdBQUcsZUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUWpELEtBQUssUUFBaUM7QUFDM0MsUUFBSSxLQUFLLGVBQWU7QUFDdEIsWUFBTSxJQUFJLE1BQU0sR0FBRyxZQUFZLG1GQUFtRjtBQUFBLElBQ3BIO0FBQ0EsU0FBSyxnQkFBZ0I7QUFDckIsU0FBSyxTQUFTLEVBQUUsR0FBRyxPQUFPO0FBQUEsRUFDNUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtPLGlCQUF1QjtBQUM1QixTQUFLLGdCQUFnQjtBQUNyQixTQUFLLFNBQVMsRUFBRSxHQUFHLGVBQWU7QUFBQSxFQUNwQztBQUNGO0FBS08sTUFBTSxVQUFVLElBQUksZUFBZTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * The bag lives on `globalThis` under a `Symbol.for` key, so every copy of this module loaded in one realm shares
8
8
  * it, whichever version it is. It holds what must exist once per realm: the debuggers, the `debug` instance and the
9
- * shared abort controller. Obsidian-specific state stays in `obsidian-dev-utils-state.ts`.
9
+ * shared abort controller. Obsidian-specific state stays in `@mnaoumov/obsidian-lib`, under its legacy `__obsidianDevUtils` global.
10
10
  *
11
11
  * The slot is a cross-version wire format: its key and the {@link TypescriptLibStateSlot} shape only ever change
12
12
  * additively.
@@ -37,4 +37,4 @@ export {
37
37
  getTypescriptLibStateSlot,
38
38
  resetTypescriptLibState
39
39
  };
40
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3R5cGVzY3JpcHQtbGliLXN0YXRlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwcm9jZXNzLXdpZGUgc2hhcmVkLXN0YXRlIGJhZyBvZiB0aGUgZ2VuZXJpYywgbm9uLU9ic2lkaWFuIHBhcnQgb2YgdGhlIGxpYnJhcnkuXG4gKlxuICogVGhlIGJhZyBsaXZlcyBvbiBgZ2xvYmFsVGhpc2AgdW5kZXIgYSBgU3ltYm9sLmZvcmAga2V5LCBzbyBldmVyeSBjb3B5IG9mIHRoaXMgbW9kdWxlIGxvYWRlZCBpbiBvbmUgcmVhbG0gc2hhcmVzXG4gKiBpdCwgd2hpY2hldmVyIHZlcnNpb24gaXQgaXMuIEl0IGhvbGRzIHdoYXQgbXVzdCBleGlzdCBvbmNlIHBlciByZWFsbTogdGhlIGRlYnVnZ2VycywgdGhlIGBkZWJ1Z2AgaW5zdGFuY2UgYW5kIHRoZVxuICogc2hhcmVkIGFib3J0IGNvbnRyb2xsZXIuIE9ic2lkaWFuLXNwZWNpZmljIHN0YXRlIHN0YXlzIGluIGBvYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHNgLlxuICpcbiAqIFRoZSBzbG90IGlzIGEgY3Jvc3MtdmVyc2lvbiB3aXJlIGZvcm1hdDogaXRzIGtleSBhbmQgdGhlIHtAbGluayBUeXBlc2NyaXB0TGliU3RhdGVTbG90fSBzaGFwZSBvbmx5IGV2ZXIgY2hhbmdlXG4gKiBhZGRpdGl2ZWx5LlxuICovXG5cbmltcG9ydCB7IFZhbHVlV3JhcHBlciB9IGZyb20gJy4vdmFsdWUtd3JhcHBlci50cyc7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHtAbGluayBUeXBlc2NyaXB0TGliU3RhdGVTbG90fSBzaGFwZSB0aGlzIGNvcHkgd3JpdGVzLlxuICovXG5leHBvcnQgY29uc3QgVFlQRVNDUklQVF9MSUJfU1RBVEVfVkVSU0lPTiA9IDE7XG5cbi8qKlxuICogVGhlIGtleSBvZiB0aGUgZ2xvYmFsIHNsb3QgaG9sZGluZyB0aGUge0BsaW5rIFR5cGVzY3JpcHRMaWJTdGF0ZVNsb3R9LlxuICovXG5leHBvcnQgY29uc3QgVFlQRVNDUklQVF9MSUJfU1RBVEVfS0VZOiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sLmZvcignQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0YXRlJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZC1zdGF0ZSBzbG90IHN0b3JlZCBvbiBgZ2xvYmFsVGhpc2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZXNjcmlwdExpYlN0YXRlU2xvdCB7XG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIHZhbHVlcywgZWFjaCBpbiBhIHtAbGluayBWYWx1ZVdyYXBwZXJ9IHNvIGEgaG9sZGVyIGNhbiByZXBsYWNlIHRoZSB2YWx1ZSBpbiBwbGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlczogUmVjb3JkPHN0cmluZywgVmFsdWVXcmFwcGVyPjtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNsb3Qgc2hhcGUgdGhlIGNyZWF0b3Igd3JvdGUuIEluZm9ybWF0aW9uYWw6IHRoZSBzaGFwZSBvbmx5IGNoYW5nZXMgYWRkaXRpdmVseS5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IG51bWJlcjtcbn1cblxudHlwZSBHbG9iYWxXaXRoVHlwZXNjcmlwdExpYlN0YXRlID0gUGFydGlhbDxSZWNvcmQ8dHlwZW9mIFRZUEVTQ1JJUFRfTElCX1NUQVRFX0tFWSwgVHlwZXNjcmlwdExpYlN0YXRlU2xvdD4+O1xuXG4vKipcbiAqIFJldHJpZXZlcyBvciBjcmVhdGVzIGEgc2hhcmVkLXN0YXRlIHtAbGluayBWYWx1ZVdyYXBwZXJ9IGZvciBhIGdpdmVuIGtleS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgc2hhcmVkIHN0YXRlIHZhbHVlLlxuICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gc3RvcmUgb3IgcmV0cmlldmUgdGhlIHNoYXJlZCBzdGF0ZSB1bmRlci5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBUaGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgaWYgdGhlIHNoYXJlZCBzdGF0ZSBkb2VzIG5vdCBleGlzdCB5ZXQuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFZhbHVlV3JhcHBlcn0gdGhhdCBzdG9yZXMgdGhlIHNoYXJlZCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVzY3JpcHRMaWJTdGF0ZTxUPihrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBUKTogVmFsdWVXcmFwcGVyPFQ+IHtcbiAgcmV0dXJuIChnZXRUeXBlc2NyaXB0TGliU3RhdGVTbG90KCkudmFsdWVzW2tleV0gPz89IFZhbHVlV3JhcHBlci5vZihkZWZhdWx0VmFsdWUpKSBhcyBWYWx1ZVdyYXBwZXI8VD47XG59XG5cbi8qKlxuICogUmV0cmlldmVzIG9yIGNyZWF0ZXMgdGhlIHNoYXJlZC1zdGF0ZSBzbG90LlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgVHlwZXNjcmlwdExpYlN0YXRlU2xvdH0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlc2NyaXB0TGliU3RhdGVTbG90KCk6IFR5cGVzY3JpcHRMaWJTdGF0ZVNsb3Qge1xuICBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbiAgbGV0IHNsb3QgPSBnbG9iYWxbVFlQRVNDUklQVF9MSUJfU1RBVEVfS0VZXTtcbiAgaWYgKCFzbG90KSB7XG4gICAgc2xvdCA9IGNyZWF0ZVNsb3QoKTtcbiAgICBnbG9iYWxbVFlQRVNDUklQVF9MSUJfU1RBVEVfS0VZXSA9IHNsb3Q7XG4gIH1cbiAgcmV0dXJuIHNsb3Q7XG59XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBzaGFyZWQtc3RhdGUgYmFnLlxuICpcbiAqIEludGVuZGVkIGZvciB0ZXN0IGlzb2xhdGlvbjogY2FsbCBpdCBiZWZvcmUgZWFjaCB0ZXN0IHNvIGFjY3VtdWxhdGVkIHN0YXRlIGRvZXMgbm90IGxlYWsgYmV0d2VlbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0VHlwZXNjcmlwdExpYlN0YXRlKCk6IHZvaWQge1xuICBnZXRHbG9iYWwoKVtUWVBFU0NSSVBUX0xJQl9TVEFURV9LRVldID0gY3JlYXRlU2xvdCgpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTbG90KCk6IFR5cGVzY3JpcHRMaWJTdGF0ZVNsb3Qge1xuICByZXR1cm4ge1xuICAgIHZhbHVlczoge30sXG4gICAgdmVyc2lvbjogVFlQRVNDUklQVF9MSUJfU1RBVEVfVkVSU0lPTlxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWwoKTogR2xvYmFsV2l0aFR5cGVzY3JpcHRMaWJTdGF0ZSB7XG4gIHJldHVybiBnbG9iYWxUaGlzIGFzIEdsb2JhbFdpdGhUeXBlc2NyaXB0TGliU3RhdGU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQWFBLFNBQVMsb0JBQW9CO0FBS3RCLE1BQU0sK0JBQStCO0FBS3JDLE1BQU0sMkJBQTBDLHVCQUFPLElBQUksZ0NBQWdDO0FBMkIzRixTQUFTLHNCQUF5QixLQUFhLGNBQWtDO0FBQ3RGLFNBQVEsMEJBQTBCLEVBQUUsT0FBTyxHQUFHLE1BQU0sYUFBYSxHQUFHLFlBQVk7QUFDbEY7QUFPTyxTQUFTLDRCQUFvRDtBQUNsRSxRQUFNLFNBQVMsVUFBVTtBQUN6QixNQUFJLE9BQU8sT0FBTyx3QkFBd0I7QUFDMUMsTUFBSSxDQUFDLE1BQU07QUFDVCxXQUFPLFdBQVc7QUFDbEIsV0FBTyx3QkFBd0IsSUFBSTtBQUFBLEVBQ3JDO0FBQ0EsU0FBTztBQUNUO0FBT08sU0FBUywwQkFBZ0M7QUFDOUMsWUFBVSxFQUFFLHdCQUF3QixJQUFJLFdBQVc7QUFDckQ7QUFFQSxTQUFTLGFBQXFDO0FBQzVDLFNBQU87QUFBQSxJQUNMLFFBQVEsQ0FBQztBQUFBLElBQ1QsU0FBUztBQUFBLEVBQ1g7QUFDRjtBQUVBLFNBQVMsWUFBMEM7QUFDakQsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
40
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3R5cGVzY3JpcHQtbGliLXN0YXRlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwcm9jZXNzLXdpZGUgc2hhcmVkLXN0YXRlIGJhZyBvZiB0aGUgZ2VuZXJpYywgbm9uLU9ic2lkaWFuIHBhcnQgb2YgdGhlIGxpYnJhcnkuXG4gKlxuICogVGhlIGJhZyBsaXZlcyBvbiBgZ2xvYmFsVGhpc2AgdW5kZXIgYSBgU3ltYm9sLmZvcmAga2V5LCBzbyBldmVyeSBjb3B5IG9mIHRoaXMgbW9kdWxlIGxvYWRlZCBpbiBvbmUgcmVhbG0gc2hhcmVzXG4gKiBpdCwgd2hpY2hldmVyIHZlcnNpb24gaXQgaXMuIEl0IGhvbGRzIHdoYXQgbXVzdCBleGlzdCBvbmNlIHBlciByZWFsbTogdGhlIGRlYnVnZ2VycywgdGhlIGBkZWJ1Z2AgaW5zdGFuY2UgYW5kIHRoZVxuICogc2hhcmVkIGFib3J0IGNvbnRyb2xsZXIuIE9ic2lkaWFuLXNwZWNpZmljIHN0YXRlIHN0YXlzIGluIGBAbW5hb3Vtb3Yvb2JzaWRpYW4tbGliYCwgdW5kZXIgaXRzIGxlZ2FjeSBgX19vYnNpZGlhbkRldlV0aWxzYCBnbG9iYWwuXG4gKlxuICogVGhlIHNsb3QgaXMgYSBjcm9zcy12ZXJzaW9uIHdpcmUgZm9ybWF0OiBpdHMga2V5IGFuZCB0aGUge0BsaW5rIFR5cGVzY3JpcHRMaWJTdGF0ZVNsb3R9IHNoYXBlIG9ubHkgZXZlciBjaGFuZ2VcbiAqIGFkZGl0aXZlbHkuXG4gKi9cblxuaW1wb3J0IHsgVmFsdWVXcmFwcGVyIH0gZnJvbSAnLi92YWx1ZS13cmFwcGVyLnRzJztcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUge0BsaW5rIFR5cGVzY3JpcHRMaWJTdGF0ZVNsb3R9IHNoYXBlIHRoaXMgY29weSB3cml0ZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBUWVBFU0NSSVBUX0xJQl9TVEFURV9WRVJTSU9OID0gMTtcblxuLyoqXG4gKiBUaGUga2V5IG9mIHRoZSBnbG9iYWwgc2xvdCBob2xkaW5nIHRoZSB7QGxpbmsgVHlwZXNjcmlwdExpYlN0YXRlU2xvdH0uXG4gKi9cbmV4cG9ydCBjb25zdCBUWVBFU0NSSVBUX0xJQl9TVEFURV9LRVk6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2wuZm9yKCdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RhdGUnKTtcblxuLyoqXG4gKiBUaGUgc2hhcmVkLXN0YXRlIHNsb3Qgc3RvcmVkIG9uIGBnbG9iYWxUaGlzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlc2NyaXB0TGliU3RhdGVTbG90IHtcbiAgLyoqXG4gICAqIFRoZSBzaGFyZWQgdmFsdWVzLCBlYWNoIGluIGEge0BsaW5rIFZhbHVlV3JhcHBlcn0gc28gYSBob2xkZXIgY2FuIHJlcGxhY2UgdGhlIHZhbHVlIGluIHBsYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBWYWx1ZVdyYXBwZXI+O1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgc2xvdCBzaGFwZSB0aGUgY3JlYXRvciB3cm90ZS4gSW5mb3JtYXRpb25hbDogdGhlIHNoYXBlIG9ubHkgY2hhbmdlcyBhZGRpdGl2ZWx5LlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogbnVtYmVyO1xufVxuXG50eXBlIEdsb2JhbFdpdGhUeXBlc2NyaXB0TGliU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDx0eXBlb2YgVFlQRVNDUklQVF9MSUJfU1RBVEVfS0VZLCBUeXBlc2NyaXB0TGliU3RhdGVTbG90Pj47XG5cbi8qKlxuICogUmV0cmlldmVzIG9yIGNyZWF0ZXMgYSBzaGFyZWQtc3RhdGUge0BsaW5rIFZhbHVlV3JhcHBlcn0gZm9yIGEgZ2l2ZW4ga2V5LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBzaGFyZWQgc3RhdGUgdmFsdWUuXG4gKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBzdG9yZSBvciByZXRyaWV2ZSB0aGUgc2hhcmVkIHN0YXRlIHVuZGVyLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIFRoZSBkZWZhdWx0IHZhbHVlIHRvIHVzZSBpZiB0aGUgc2hhcmVkIHN0YXRlIGRvZXMgbm90IGV4aXN0IHlldC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgVmFsdWVXcmFwcGVyfSB0aGF0IHN0b3JlcyB0aGUgc2hhcmVkIHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZXNjcmlwdExpYlN0YXRlPFQ+KGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IFQpOiBWYWx1ZVdyYXBwZXI8VD4ge1xuICByZXR1cm4gKGdldFR5cGVzY3JpcHRMaWJTdGF0ZVNsb3QoKS52YWx1ZXNba2V5XSA/Pz0gVmFsdWVXcmFwcGVyLm9mKGRlZmF1bHRWYWx1ZSkpIGFzIFZhbHVlV3JhcHBlcjxUPjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgb3IgY3JlYXRlcyB0aGUgc2hhcmVkLXN0YXRlIHNsb3QuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBUeXBlc2NyaXB0TGliU3RhdGVTbG90fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVzY3JpcHRMaWJTdGF0ZVNsb3QoKTogVHlwZXNjcmlwdExpYlN0YXRlU2xvdCB7XG4gIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuICBsZXQgc2xvdCA9IGdsb2JhbFtUWVBFU0NSSVBUX0xJQl9TVEFURV9LRVldO1xuICBpZiAoIXNsb3QpIHtcbiAgICBzbG90ID0gY3JlYXRlU2xvdCgpO1xuICAgIGdsb2JhbFtUWVBFU0NSSVBUX0xJQl9TVEFURV9LRVldID0gc2xvdDtcbiAgfVxuICByZXR1cm4gc2xvdDtcbn1cblxuLyoqXG4gKiBDbGVhcnMgdGhlIHNoYXJlZC1zdGF0ZSBiYWcuXG4gKlxuICogSW50ZW5kZWQgZm9yIHRlc3QgaXNvbGF0aW9uOiBjYWxsIGl0IGJlZm9yZSBlYWNoIHRlc3Qgc28gYWNjdW11bGF0ZWQgc3RhdGUgZG9lcyBub3QgbGVhayBiZXR3ZWVuIHRlc3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRUeXBlc2NyaXB0TGliU3RhdGUoKTogdm9pZCB7XG4gIGdldEdsb2JhbCgpW1RZUEVTQ1JJUFRfTElCX1NUQVRFX0tFWV0gPSBjcmVhdGVTbG90KCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNsb3QoKTogVHlwZXNjcmlwdExpYlN0YXRlU2xvdCB7XG4gIHJldHVybiB7XG4gICAgdmFsdWVzOiB7fSxcbiAgICB2ZXJzaW9uOiBUWVBFU0NSSVBUX0xJQl9TVEFURV9WRVJTSU9OXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEdsb2JhbCgpOiBHbG9iYWxXaXRoVHlwZXNjcmlwdExpYlN0YXRlIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXMgYXMgR2xvYmFsV2l0aFR5cGVzY3JpcHRMaWJTdGF0ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBYUEsU0FBUyxvQkFBb0I7QUFLdEIsTUFBTSwrQkFBK0I7QUFLckMsTUFBTSwyQkFBMEMsdUJBQU8sSUFBSSxnQ0FBZ0M7QUEyQjNGLFNBQVMsc0JBQXlCLEtBQWEsY0FBa0M7QUFDdEYsU0FBUSwwQkFBMEIsRUFBRSxPQUFPLEdBQUcsTUFBTSxhQUFhLEdBQUcsWUFBWTtBQUNsRjtBQU9PLFNBQVMsNEJBQW9EO0FBQ2xFLFFBQU0sU0FBUyxVQUFVO0FBQ3pCLE1BQUksT0FBTyxPQUFPLHdCQUF3QjtBQUMxQyxNQUFJLENBQUMsTUFBTTtBQUNULFdBQU8sV0FBVztBQUNsQixXQUFPLHdCQUF3QixJQUFJO0FBQUEsRUFDckM7QUFDQSxTQUFPO0FBQ1Q7QUFPTyxTQUFTLDBCQUFnQztBQUM5QyxZQUFVLEVBQUUsd0JBQXdCLElBQUksV0FBVztBQUNyRDtBQUVBLFNBQVMsYUFBcUM7QUFDNUMsU0FBTztBQUFBLElBQ0wsUUFBUSxDQUFDO0FBQUEsSUFDVCxTQUFTO0FBQUEsRUFDWDtBQUNGO0FBRUEsU0FBUyxZQUEwQztBQUNqRCxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnaoumov/typescript-lib",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "description": "Generic TypeScript utilities: async helpers, errors, disposables, strings, paths, debug logging and more, usable in any TypeScript project.",
5
5
  "keywords": [
6
6
  "typescript",
@@ -78,7 +78,6 @@
78
78
  "build": "jiti scripts/build.ts",
79
79
  "build:clean": "jiti scripts/build-clean.ts",
80
80
  "build:compile": "jiti scripts/build-compile.ts",
81
- "build:compile:typescript": "jiti scripts/build-compile-typescript.ts",
82
81
  "build:generate-exports": "jiti scripts/build-generate-exports.ts",
83
82
  "build:generate-index": "jiti scripts/build-generate-index.ts",
84
83
  "build:lib": "jiti scripts/build-lib.ts",
@@ -87,6 +86,7 @@
87
86
  "build:validate-dependencies": "jiti scripts/build-validate-dependencies.ts",
88
87
  "commit": "jiti scripts/commit.ts",
89
88
  "docs:build": "jiti scripts/docs-build.ts",
89
+ "docs:check-snippets": "jiti scripts/docs-check-snippets.ts",
90
90
  "docs:dev": "jiti scripts/docs-dev.ts",
91
91
  "docs:preview": "jiti scripts/docs-preview.ts",
92
92
  "find-overexposed": "jiti scripts/find-overexposed.ts",
@@ -118,7 +118,7 @@
118
118
  "@astrojs/starlight": "^0.42.6",
119
119
  "@commitlint/cli": "^21.2.2",
120
120
  "@commitlint/config-conventional": "^21.2.2",
121
- "@mnaoumov/typescript-dev-toolkit": "^3.4.0",
121
+ "@mnaoumov/typescript-dev-toolkit": "^3.7.0",
122
122
  "@mnaoumov/typescript-test-toolkit": "^1.0.0",
123
123
  "@resvg/resvg-js": "^2.6.2",
124
124
  "@total-typescript/ts-reset": "^0.6.1",