obsidian-dev-utils 86.1.3 → 86.2.0

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.
Files changed (66) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/dev/main.js +37333 -0
  3. package/dist/dev/manifest.json +9 -0
  4. package/dist/lib/cjs/__merged.cjs +34 -3
  5. package/dist/lib/cjs/__merged.d.cts +5 -4
  6. package/dist/lib/cjs/async-events.cjs +32 -3
  7. package/dist/lib/cjs/async-events.d.cts +63 -0
  8. package/dist/lib/cjs/disposable.cjs +103 -115
  9. package/dist/lib/cjs/disposable.d.cts +81 -57
  10. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  11. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +48 -21
  12. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +11 -8
  13. package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.cjs +1 -1
  14. package/dist/lib/cjs/obsidian/community-plugins.cjs +109 -9
  15. package/dist/lib/cjs/obsidian/community-plugins.d.cts +175 -3
  16. package/dist/lib/cjs/obsidian/components/component-ex.cjs +18 -1
  17. package/dist/lib/cjs/obsidian/components/component-ex.d.cts +12 -0
  18. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +8 -4
  19. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +7 -3
  20. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +5 -4
  21. package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +3 -2
  22. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +2 -7
  23. package/dist/lib/cjs/obsidian/events.cjs +165 -0
  24. package/dist/lib/cjs/obsidian/events.d.cts +98 -0
  25. package/dist/lib/cjs/obsidian/index.cjs +4 -1
  26. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  27. package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +1 -1
  28. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +7 -3
  29. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +31 -33
  30. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.cts +11 -0
  31. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +39 -52
  32. package/dist/lib/cjs/script-utils/linters/eslint-no-restricted-syntax.cjs +1 -5
  33. package/dist/lib/cjs/type.cjs +31 -12
  34. package/dist/lib/cjs/type.d.cts +56 -36
  35. package/dist/lib/esm/__merged.d.mts +5 -4
  36. package/dist/lib/esm/__merged.mjs +39 -5
  37. package/dist/lib/esm/async-events.d.mts +63 -0
  38. package/dist/lib/esm/async-events.mjs +29 -2
  39. package/dist/lib/esm/disposable.d.mts +81 -57
  40. package/dist/lib/esm/disposable.mjs +101 -115
  41. package/dist/lib/esm/generated-during-build.mjs +1 -1
  42. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +11 -8
  43. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +49 -22
  44. package/dist/lib/esm/obsidian/command-handlers/open-demo-vault-command-handler.mjs +1 -1
  45. package/dist/lib/esm/obsidian/community-plugins.d.mts +175 -3
  46. package/dist/lib/esm/obsidian/community-plugins.mjs +100 -8
  47. package/dist/lib/esm/obsidian/components/component-ex.d.mts +12 -0
  48. package/dist/lib/esm/obsidian/components/component-ex.mjs +18 -1
  49. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +7 -3
  50. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +8 -4
  51. package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +3 -2
  52. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +5 -4
  53. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +5 -7
  54. package/dist/lib/esm/obsidian/events.d.mts +98 -0
  55. package/dist/lib/esm/obsidian/events.mjs +55 -0
  56. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  57. package/dist/lib/esm/obsidian/index.mjs +3 -1
  58. package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +7 -3
  59. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.mts +11 -0
  60. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +29 -32
  61. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +40 -55
  62. package/dist/lib/esm/script-utils/linters/eslint-no-restricted-syntax.mjs +1 -5
  63. package/dist/lib/esm/type.d.mts +56 -36
  64. package/dist/lib/esm/type.mjs +30 -11
  65. package/obsidian/events/package.json +6 -0
  66. package/package.json +18 -15
@@ -400,8 +400,9 @@ class PluginNoticeComponent extends import_component_ex.ComponentEx {
400
400
  }
401
401
  /**
402
402
  * Makes a notice hard to close: marks its outer element (so the CSS neutralizes its padding) and
403
- * installs a capture-phase click guard that stops every click except on the close button from
404
- * reaching Obsidian's own dismiss handler.
403
+ * installs a capture-phase click guard that stops every click except on an interactive element (a
404
+ * button, link, the close button, etc.) from reaching Obsidian's own dismiss handler — so an
405
+ * interactive child's own handler still runs while a stray click cannot dismiss the notice.
405
406
  *
406
407
  * @param notice - The notice to guard.
407
408
  * @param requiresCloseConfirmation - Whether the notice requires close confirmation; when `false`,
@@ -413,7 +414,7 @@ class PluginNoticeComponent extends import_component_ex.ComponentEx {
413
414
  }
414
415
  (0, import_plugin_context.addPluginCssClasses)(notice.containerEl, import_css_class.CssClass.PluginNoticeRequiresConfirmation);
415
416
  notice.containerEl.addEventListener("click", (evt) => {
416
- if (evt.target instanceof Element && evt.target.closest(`.${import_css_class.CssClass.PluginNoticeCloseButton}`)) {
417
+ if (evt.target instanceof Element && evt.target.closest(INTERACTIVE_ELEMENT_SELECTOR)) {
417
418
  return;
418
419
  }
419
420
  evt.stopPropagation();
@@ -494,4 +495,4 @@ class PluginNoticeComponent extends import_component_ex.ComponentEx {
494
495
  0 && (module.exports = {
495
496
  PluginNoticeComponent
496
497
  });
497
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIGRpc3BsYXlpbmcgbm90aWNlcyB0byB0aGUgdXNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgTm90aWNlLFxuICBzZXRJY29uXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vdmFsdWUtcHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4uLy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi8uLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS1wcm92aWRlci50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICcuLi9tb2RhbHMvY29uZmlybS50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9tb25rZXktYXJvdW5kLWNvbXBvbmVudC50cyc7XG5cbmNvbnN0IFBFUk1BTkVOVF9OT1RJQ0VTX1NUQVRFX0tFWSA9ICdwbHVnaW4tbm90aWNlLWNvbXBvbmVudDpwZXJtYW5lbnQtbm90aWNlcyc7XG5jb25zdCBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA9IDA7XG5jb25zdCBERUZBVUxUX0RFTEFZX0JFRk9SRV9TSE9XX0lOX01JTExJU0VDT05EUyA9IDUwMDtcblxuLy8gRWxlbWVudHMgYSB1c2VyIGNsaWNrcyB0byBhY3Qgb24gdGhlbSByYXRoZXIgdGhhbiB0byBkaXNtaXNzIHRoZSBub3RpY2UuIEEgY2xpY2sgbGFuZGluZyBvbiAob3Jcbi8vIEluc2lkZSkgb25lIG9mIHRoZXNlIGlzIGtlcHQgZnJvbSBidWJibGluZyB0byB0aGUgbm90aWNlLCBzbyB0aGUgbm90aWNlIHN0YXlzIG9wZW4uXG5jb25zdCBJTlRFUkFDVElWRV9FTEVNRU5UX1NFTEVDVE9SID0gJ2EsIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGxhYmVsLCBbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSwgW3JvbGU9XCJidXR0b25cIl0sIFtyb2xlPVwibGlua1wiXSwgW3JvbGU9XCJjaGVja2JveFwiXSwgW3JvbGU9XCJ0YWJcIl0sIFtyb2xlPVwibWVudWl0ZW1cIl0nO1xuXG4vKipcbiAqIEEgaGFuZGxlIHRvIGEgZGVsYXllZCBub3RpY2UgY3JlYXRlZCBieSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS4gSXQgaXMgYVxuICoge0BsaW5rIERpc3Bvc2FibGV9IChzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGB1c2luZ2ApIHRoYXQgYWxzbyBsZXRzIHRoZSBjb250ZW50IGJlIHVwZGF0ZWQgd2hpbGUgdGhlXG4gKiBub3RpY2UgaXMgc2hvd24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50RGVsYXllZE5vdGljZSBleHRlbmRzIERpc3Bvc2FibGUge1xuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIG5vdGljZSBjb250ZW50LCByZS1hcHBseWluZyB0aGUgcGx1Z2luLW5hbWUgcHJlZml4LCB0aGUgaW50ZXJhY3RpdmUtY2xpY2sgZ3VhcmQsIGFuZFxuICAgKiB0aGUgQ2FuY2VsIGJ1dHRvbi4gVXNlZnVsIGZvciByZXBvcnRpbmcgcHJvZ3Jlc3MuIElmIHRoZSBkZWxheSBoYXMgbm90IGVsYXBzZWQgeWV0LCB0aGUgbmV3IGNvbnRlbnRcbiAgICogYmVjb21lcyB3aGF0IGlzIHNob3duIG9uY2UgaXQgZG9lcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgbmV3IG5vdGljZSBjb250ZW50LlxuICAgKi9cbiAgc2V0Q29udGVudChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBhIENhbmNlbCBidXR0b24gaXMgYXBwZW5kZWQgdG8gdGhlIG5vdGljZTsgY2xpY2tpbmcgaXQgYWJvcnRzIHRoaXMgY29udHJvbGxlci4gV2hlblxuICAgKiBvbWl0dGVkLCBubyBDYW5jZWwgYnV0dG9uIGlzIHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBvZiB0aGUgQ2FuY2VsIGJ1dHRvbiBzaG93biB3aGVuIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcy5hYm9ydENvbnRyb2xsZXJ9XG4gICAqIGlzIHByb3ZpZGVkLiBXaGVuIG9taXR0ZWQsIHRoZSBsb2NhbGl6ZWQgYENhbmNlbGAgbGFiZWwgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29udGVudCwgcmVzb2x2ZWQgbGF6aWx5IG9ubHkgaWYgdGhlIGRlbGF5IGVsYXBzZXMgXHUyMDE0IHNvIGFuIG9wZXJhdGlvbiB0aGF0IGZpbmlzaGVzXG4gICAqIHNvb25lciBuZXZlciBidWlsZHMgaXQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBWYWx1ZVByb3ZpZGVyPERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0aGUgb3BlcmF0aW9uIG11c3QgcnVuIGJlZm9yZSB0aGUgbm90aWNlIGlzIHNob3duLiBPcGVyYXRpb25zIHRoYXQgZmluaXNoIHNvb25lciBuZXZlclxuICAgKiBzaG93IGEgbm90aWNlLCBhdm9pZGluZyBhIGRpc3RyYWN0aW5nIGZsYXNoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwYFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBzaG91bGQgc3RheSB1bnRpbCBpdCBpcyByZXBsYWNlZCwgdGhlIHBsdWdpbiBpcyByZWxvYWRlZCwgb3IgdGhlIHVzZXIgZGlzbWlzc2VzIGl0LlxuICAgKlxuICAgKiBBIHBlcm1hbmVudCBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgaXMgbm90IGhpZGRlbiB3aGVuIHRoZSBjb21wb25lbnQgdW5sb2Fkcywgc28gaXQgY2FuXG4gICAqIGNvbW11bmljYXRlIHN0YXRlIHRoYXQgb3V0bGl2ZXMgdGhlIHBsdWdpbiAoZS5nLiBhIGNsZWFudXAgdGhhdCByZXF1aXJlcyBhIHJlbG9hZCkuIFRoZXJlIGlzIGF0IG1vc3Qgb25lIHBlcm1hbmVudFxuICAgKiBub3RpY2UgcGVyIHBsdWdpbjogaXQgaXMgaGlkZGVuIGJ5IHRoZSBuZXh0IHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZX0gY2FsbCBhbmQgZGlzbWlzc2VkXG4gICAqIGF1dG9tYXRpY2FsbHkgdGhlIG5leHQgdGltZSB0aGUgY29tcG9uZW50IGxvYWRzIChpLmUuIHdoZW4gdGhlIHBsdWdpbiBpcyByZS1lbmFibGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNQZXJtYW5lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2Ugb2NjdXBpZXMgdGhlIHNpbmdsZSBwZXItcGx1Z2luIHJldXNhYmxlIHNsb3QuXG4gICAqXG4gICAqIEEgcmV1c2FibGUgbm90aWNlIHRha2VzIHRoZSBzaGFyZWQgc2xvdDogdGhlIG5leHQgcmV1c2FibGUgbm90aWNlIGhpZGVzIGl0LCBhbmQgaXQgaXMgaGlkZGVuIG9uIHVubG9hZC5cbiAgICogQSBub24tcmV1c2FibGUgKHN0YW5kYWxvbmUpIG5vdGljZSBpcyBub3QgcGxhY2VkIGluIHRoZSBzbG90IFx1MjAxNCBpdCBuZXZlciBoaWRlcywgYW5kIGlzIG5ldmVyIGhpZGRlbiBieSwgYVxuICAgKiByZXVzYWJsZSBub3RpY2U7IG11bHRpcGxlIHN0YW5kYWxvbmUgbm90aWNlcyBjb2V4aXN0LiBTdGFuZGFsb25lIG5vdGljZXMgYXJlIHN0aWxsIGhpZGRlbiB0b2dldGhlciBvbiB1bmxvYWQuXG4gICAqXG4gICAqIEEgcGVybWFuZW50IG5vdGljZSBtdXN0IGJlIHJldXNhYmxlICh7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuaXNQZXJtYW5lbnR9IGltcGxpZXNcbiAgICogYGlzUmV1c2FibGVgKTsgcGFzc2luZyBgaXNSZXVzYWJsZTogZmFsc2VgIHRvZ2V0aGVyIHdpdGggYGlzUGVybWFuZW50OiB0cnVlYCB0aHJvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNSZXVzYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBub3RpY2UgaXMgaGlkZGVuIFx1MjAxNCB3aGV0aGVyIGJ5IHRoZSB1c2VyIGNsb3NpbmcgaXQsIGJ5IGEgbGF0ZXIgcmV1c2FibGVcbiAgICogbm90aWNlIHJlcGxhY2luZyBpdCwgYnkgaXRzIGR1cmF0aW9uIGVsYXBzaW5nLCBvciBvbiBjb21wb25lbnQgdW5sb2FkLiBJdCBydW5zIGF0IG1vc3Qgb25jZSBwZXJcbiAgICogbm90aWNlLiBBbiBhc3luYyBjYWxsYmFjayBpcyBydW4gZmlyZS1hbmQtZm9yZ2V0IChpdHMgcmVqZWN0aW9uIHN1cmZhY2VzIHRocm91Z2ggdGhlIGFzeW5jLWVycm9yXG4gICAqIHBpcGVsaW5lKS5cbiAgICovXG4gIG9uSGlkZT8odGhpczogdm9pZCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBpcyBoYXJkIHRvIGNsb3NlOiBpdCBkb2VzIG5vdCBkaXNtaXNzIG9uIGFueSBzdHJheSBjbGljaywgYW5kIGluc3RlYWQgc2hvd3MgYVxuICAgKiBjbG9zZSAoWCkgYnV0dG9uIHdob3NlIGNsaWNrIG9wZW5zIGEgY29uZmlybWF0aW9uIG1vZGFsLCBkaXNtaXNzaW5nIHRoZSBub3RpY2Ugb25seSBpZiBjb25maXJtZWQuXG4gICAqXG4gICAqIEEgaGFyZC10by1jbG9zZSBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgaXMgc3RhbmRhbG9uZSAoaW1wbGllc1xuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuaXNSZXVzYWJsZX0gYD0gZmFsc2VgKSwgc28gYSBsYXRlciBub3RpY2UgbmV2ZXJcbiAgICogc2lsZW50bHkgcmVwbGFjZXMgaXQ7IHBhc3NpbmcgYGlzUmV1c2FibGU6IHRydWVgIHRvZ2V0aGVyIHdpdGggYHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb246IHRydWVgXG4gICAqIHRocm93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbj86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuICByZWFkb25seSBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuICByZWFkb25seSBjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBub3RpY2UgdGhpcyBjb250ZW50IGJlbG9uZ3MgdG8sIHVzZWQgYnkgdGhlIGNsb3NlIGJ1dHRvbidzIGhhbmRsZXIuIFRoZSBub3RpY2UgZG9lc1xuICAgKiBub3QgZXhpc3QgeWV0IHdoZW4gdGhlIGNvbnRlbnQgaXMgYnVpbHQsIHNvIGl0IGlzIHJlc29sdmVkIGxhemlseSBhdCBjbGljayB0aW1lLiBSZXF1aXJlZCB3aGVuXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMucmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbn0gaXMgYHRydWVgLlxuICAgKi9cbiAgZ2V0Tm90aWNlPyh0aGlzOiB2b2lkKTogTm90aWNlIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBhZnRlciB0aGUgcGx1Z2luIG5hbWUgcHJlZml4LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWNlIGlzIGhhcmQgdG8gY2xvc2U6IHN0b3BzIGV2ZXJ5IGNsaWNrIGZyb20gZGlzbWlzc2luZyBpdCBhbmQgYWRkcyBhIGNsb3NlIGJ1dHRvblxuICAgKiBndWFyZGVkIGJ5IGEgY29uZmlybWF0aW9uIG1vZGFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VXaXRoRHVyYXRpb25QYXJhbXMge1xuICByZWFkb25seSBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBudWxsIHwgbnVtYmVyO1xuICByZWFkb25seSBpc1JldXNhYmxlOiBib29sZWFuO1xuICByZWFkb25seSBtZXNzYWdlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICByZWFkb25seSBvbkhpZGU6ICgoKSA9PiBQcm9taXNhYmxlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIHNob3dpbmcgcGx1Z2luIG5vdGljZXMuIEF1dG9tYXRpY2FsbHkgaGlkZXMgdGhlIHByZXZpb3VzIG5vdGljZSB3aGVuIGEgbmV3IG9uZSBpcyBzaG93bi5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbk5vdGljZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gbmFtZSAoc2hvd24gYXMgcHJlZml4IGluIG5vdGljZXMpLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIG5vdGljZTogTm90aWNlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGFsb25lTm90aWNlcyA9IG5ldyBTZXQ8Tm90aWNlPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMucGx1Z2luTmFtZSA9IHBhcmFtcy5wbHVnaW5OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyB0aGUgcGVybWFuZW50IG5vdGljZSBsZWZ0IG92ZXIgZnJvbSBhIHByZXZpb3VzIGxvYWQgKGUuZy4gYSBwcmV2aW91cyBwbHVnaW4gc2Vzc2lvbikgb24gbG9hZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgY29uc3QgcGVybWFuZW50Tm90aWNlID0gdGhpcy5nZXRQZXJtYW5lbnROb3RpY2UoKTtcbiAgICBwZXJtYW5lbnROb3RpY2U/LmhpZGUoKTtcbiAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgY3VycmVudCBub3RpY2Ugb24gdW5sb2FkLCB1bmxlc3MgaXQgaXMgdGhlIHBlcm1hbmVudCBub3RpY2UgKHdoaWNoIGlzIG1lYW50IHRvIG91dGxpdmUgdGhlIHBsdWdpbikuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb251bmxvYWQoKTogdm9pZCB7XG4gICAgLy8gQ2FuY2VsIGFueSBkZWxheWVkIG5vdGljZSB3aG9zZSB0aW1lciBoYXMgbm90IGZpcmVkIHlldCwgc28gaXQgbmV2ZXIgYXBwZWFycyBhZnRlciB1bmxvYWQuXG4gICAgZm9yIChjb25zdCBjYW5jZWxQZW5kaW5nVGltZXIgb2YgWy4uLnRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9uc10pIHtcbiAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRQZXJtYW5lbnROb3RpY2UoKSAhPT0gdGhpcy5ub3RpY2UpIHtcbiAgICAgIHRoaXMubm90aWNlPy5oaWRlKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhbmRhbG9uZU5vdGljZSBvZiB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzKSB7XG4gICAgICBzdGFuZGFsb25lTm90aWNlLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgbm90aWNlIG1lc3NhZ2UgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyB0aGUgbm90aWNlLlxuICAgKiBAcmV0dXJucyBUaGUgbm90aWNlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBzaG93Tm90aWNlKG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcsIG9wdGlvbnM/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucyk6IE5vdGljZSB7XG4gICAgY29uc3QgaXNQZXJtYW5lbnQgPSBvcHRpb25zPy5pc1Blcm1hbmVudCA/PyBmYWxzZTtcbiAgICBjb25zdCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uID0gb3B0aW9ucz8ucmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbiA/PyBmYWxzZTtcbiAgICBjb25zdCBpc1JldXNhYmxlID0gb3B0aW9ucz8uaXNSZXVzYWJsZSA/PyAhcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbjtcblxuICAgIGlmIChvcHRpb25zPy5pc1JldXNhYmxlID09PSB0cnVlICYmIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBub3RpY2UgdGhhdCByZXF1aXJlcyBjbG9zZSBjb25maXJtYXRpb24gY2Fubm90IGJlIHJldXNhYmxlLicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uaXNSZXVzYWJsZSA9PT0gZmFsc2UgJiYgaXNQZXJtYW5lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBwZXJtYW5lbnQgbm90aWNlIG11c3QgYmUgcmV1c2FibGUuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGlzUGVybWFuZW50IHx8IHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24gPyBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc2hvd05vdGljZVdpdGhEdXJhdGlvbih7XG4gICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLFxuICAgICAgaXNSZXVzYWJsZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBvbkhpZGU6IG9wdGlvbnM/Lm9uSGlkZSxcbiAgICAgIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24sXG4gICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBpc1Blcm1hbmVudFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbm90aWNlIGRlc2NyaWJpbmcgYSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLCBidXQgb25seSBvbmNlIHRoZSBvcGVyYXRpb24gaGFzIHJ1biBmb3IgbG9uZ2VyXG4gICAqIHRoYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmRlbGF5SW5NaWxsaXNlY29uZHN9IFx1MjAxNCBzbyBvcGVyYXRpb25zXG4gICAqIHRoYXQgZmluaXNoIHNvb25lciBuZXZlciBmbGFzaCBhIG5vdGljZS4gVGhlIG5vdGljZSBzdGF5cyB1bnRpbCB0aGUgcmV0dXJuZWQge0BsaW5rIERpc3Bvc2FibGV9IGlzXG4gICAqIGRpc3Bvc2VkICh3aGljaCBhbHNvIGNhbmNlbHMgdGhlIHBlbmRpbmcgdGltZXIgaWYgaXQgaGFzIG5vdCBmaXJlZCB5ZXQpLCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoXG4gICAqIGB1c2luZ2AuIFdoZW4gYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmFib3J0Q29udHJvbGxlcn0gaXMgZ2l2ZW4sIGFcbiAgICogQ2FuY2VsIGJ1dHRvbiB0aGF0IGFib3J0cyBpdCBpcyBhcHBlbmRlZCAoYW5kLCBiZWluZyBpbnRlcmFjdGl2ZSwgZG9lcyBub3QgZGlzbWlzcyB0aGUgbm90aWNlKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogdXNpbmcgX25vdGljZSA9IHBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlQWZ0ZXJEZWxheSh7XG4gICAqICAgYWJvcnRDb250cm9sbGVyLFxuICAgKiAgIGNvbnRlbnQ6ICgpID0+IGJ1aWxkUHJvZ3Jlc3NGcmFnbWVudCgpXG4gICAqIH0pO1xuICAgKiBhd2FpdCBydW5PcGVyYXRpb24oYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudERlbGF5ZWROb3RpY2V9IHRoYXQgaGlkZXMgdGhlIG5vdGljZSAob3IgY2FuY2VscyB0aGUgcGVuZGluZ1xuICAgKiB0aW1lcikgd2hlbiBkaXNwb3NlZCBhbmQgbGV0cyB0aGUgY29udGVudCBiZSB1cGRhdGVkIHdoaWxlIGl0IGlzIHNob3duLlxuICAgKi9cbiAgcHVibGljIHNob3dOb3RpY2VBZnRlckRlbGF5KHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnREZWxheWVkTm90aWNlIHtcbiAgICBsZXQgc2hvd25Ob3RpY2U6IE5vdGljZSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBpc0Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgbGV0IHRpbWVySWQgPSAwO1xuICAgIGxldCBjdXJyZW50Q29udGVudDogVmFsdWVQcm92aWRlcjxEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nPiA9IHBhcmFtcy5jb250ZW50O1xuXG4gICAgY29uc3QgY2FuY2VsUGVuZGluZ1RpbWVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgIHRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucy5kZWxldGUoY2FuY2VsUGVuZGluZ1RpbWVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGREZWxheWVkTWVzc2FnZSA9IChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogRG9jdW1lbnRGcmFnbWVudCA9PlxuICAgICAgdGhpcy5idWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zPih7XG4gICAgICAgIGFib3J0Q29udHJvbGxlcjogcGFyYW1zLmFib3J0Q29udHJvbGxlcixcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogcGFyYW1zLmNhbmNlbEJ1dHRvblRleHQsXG4gICAgICAgIGNvbnRlbnRcbiAgICAgIH0pKTtcblxuICAgIHRpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjYW5jZWxQZW5kaW5nVGltZXIoKTtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRDb250ZW50ID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGN1cnJlbnRDb250ZW50LCB7fSk7XG4gICAgICAgIC8vIFRoZSBoYW5kbGUgbWF5IGhhdmUgYmVlbiBkaXNwb3NlZCB3aGlsZSB0aGUgY29udGVudCB3YXMgYmVpbmcgcmVzb2x2ZWQ7IGRvbid0IHNob3cgYSBzdGFsZSBub3RpY2UuXG4gICAgICAgIGlmIChpc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNob3duTm90aWNlID0gdGhpcy5zaG93Tm90aWNlV2l0aER1cmF0aW9uKHtcbiAgICAgICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICBpc1JldXNhYmxlOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IGJ1aWxkRGVsYXllZE1lc3NhZ2UocmVzb2x2ZWRDb250ZW50KSxcbiAgICAgICAgICBvbkhpZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHBhcmFtcy5kZWxheUluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfREVMQVlfQkVGT1JFX1NIT1dfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIHRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucy5hZGQoY2FuY2VsUGVuZGluZ1RpbWVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZXRDb250ZW50OiAoY29udGVudDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgICBjdXJyZW50Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgIC8vIFJlLXdyYXAgc28gdGhlIHByZWZpeCwgaW50ZXJhY3RpdmUgZ3VhcmQsIGFuZCBDYW5jZWwgYnV0dG9uIHN1cnZpdmUgdGhlIGNvbnRlbnQgc3dhcC5cbiAgICAgICAgc2hvd25Ob3RpY2U/LnNldE1lc3NhZ2UodGhpcy5idWlsZE5vdGljZUNvbnRlbnQoeyBtZXNzYWdlOiBidWlsZERlbGF5ZWRNZXNzYWdlKGNvbnRlbnQpIH0pKTtcbiAgICAgIH0sXG4gICAgICBbU3ltYm9sLmRpc3Bvc2VdOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlzRGlzcG9zZWQgPSB0cnVlO1xuICAgICAgICBjYW5jZWxQZW5kaW5nVGltZXIoKTtcbiAgICAgICAgc2hvd25Ob3RpY2U/LmhpZGUoKTtcbiAgICAgICAgaWYgKHRoaXMubm90aWNlID09PSBzaG93bk5vdGljZSkge1xuICAgICAgICAgIHRoaXMubm90aWNlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIGNsb3NlIChYKSBidXR0b24gdG8gdGhlIG5vdGljZSBjb250ZW50LiBDbGlja2luZyBpdCBvcGVucyBhIGNvbmZpcm1hdGlvbiBtb2RhbCBhbmQsIG9ubHlcbiAgICogaWYgY29uZmlybWVkLCBoaWRlcyB0aGUgbm90aWNlIGFuZCBkcm9wcyBpdCBmcm9tIHRoZSBzdGFuZGFsb25lLW5vdGljZSB0cmFja2luZyBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZW50RWwgLSBUaGUgbm90aWNlIGNvbnRlbnQgd3JhcHBlciB0byBhcHBlbmQgdGhlIGJ1dHRvbiB0by5cbiAgICogQHBhcmFtIGdldE5vdGljZSAtIFJlc29sdmVzIHRoZSBub3RpY2UgdG8gaGlkZSB3aGVuIHRoZSBjbG9zZSBpcyBjb25maXJtZWQuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZENsb3NlQnV0dG9uKGNvbnRlbnRFbDogSFRNTEVsZW1lbnQsIGdldE5vdGljZTogKCkgPT4gTm90aWNlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uRWwgPSBjb250ZW50RWwuY3JlYXRlRWwoJ2J1dHRvbicsIHtcbiAgICAgIGF0dHI6IHsgJ2FyaWEtbGFiZWwnOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubm90aWNlcy5jbG9zZUFyaWFMYWJlbCkgfVxuICAgIH0pO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoY2xvc2VCdXR0b25FbCwgQ3NzQ2xhc3MuUGx1Z2luTm90aWNlQ2xvc2VCdXR0b24pO1xuICAgIHNldEljb24oY2xvc2VCdXR0b25FbCwgJ3gnKTtcbiAgICBjbG9zZUJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpc0NvbmZpcm1lZCA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgbWVzc2FnZTogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLm5vdGljZXMuY2xvc2VDb25maXJtTWVzc2FnZSlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaXNDb25maXJtZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm90aWNlID0gZW5zdXJlTm9uTnVsbGFibGUoZ2V0Tm90aWNlKCkpO1xuICAgICAgICBub3RpY2UuaGlkZSgpO1xuICAgICAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmRlbGV0ZShub3RpY2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBtZXNzYWdlIGZvciBhIGRlbGF5ZWQgbm90aWNlOiB0aGUgcmVzb2x2ZWQgY29udGVudCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIENhbmNlbFxuICAgKiBidXR0b24gdGhhdCBhYm9ydHMgdGhlIHByb3ZpZGVkIGNvbnRyb2xsZXIgd2hlbiBjbGlja2VkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IGhvbGRpbmcgdGhlIGNvbnRlbnQgYW5kLCBpZiByZXF1ZXN0ZWQsIGEgQ2FuY2VsIGJ1dHRvbi5cbiAgICovXG4gIHByaXZhdGUgYnVpbGREZWxheWVkTm90aWNlTWVzc2FnZShwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2VQYXJhbXMpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBjb25zdCB7IGFib3J0Q29udHJvbGxlciwgY2FuY2VsQnV0dG9uVGV4dCwgY29udGVudCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAvLyBgQnV0dG9uQ29tcG9uZW50YCByZXF1aXJlcyBhbiBgSFRNTEVsZW1lbnRgIHBhcmVudCwgc28gYnVpbGQgaXQgb24gYSB0aHJvd2F3YXlcbiAgICAgIC8vIERldGFjaGVkIGVsZW1lbnQgYW5kIG1vdmUgaXRzIGBidXR0b25FbGAgaW50byB0aGUgZnJhZ21lbnQuXG4gICAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGNyZWF0ZURpdigpKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5zZXRCdXR0b25UZXh0KGNhbmNlbEJ1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmJ1dHRvbnMuY2FuY2VsKSk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGNhbmNlbEJ1dHRvbi5idXR0b25FbCwgQ3NzQ2xhc3MuQ2FuY2VsQnV0dG9uKTtcbiAgICAgIC8vIFRoZSBjbGljayBpcyB3aXJlZCB2aWEgYGFkZEV2ZW50TGlzdGVuZXJgIHJhdGhlciB0aGFuIGBCdXR0b25Db21wb25lbnQub25DbGlja2Agc28gaXRcbiAgICAgIC8vIEJ1YmJsZXMgdGhyb3VnaCB0aGUgaW50ZXJhY3RpdmUtZWxlbWVudCBndWFyZCAoa2VlcGluZyB0aGUgbm90aWNlIG9wZW4pIGFuZCBzdGF5c1xuICAgICAgLy8gRGlyZWN0bHkgZXhlcmNpc2FibGUgdmlhIGEgZGlzcGF0Y2hlZCBET00gZXZlbnQgaW4gdW5pdCB0ZXN0cy5cbiAgICAgIGNhbmNlbEJ1dHRvbi5idXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICB9KTtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGNhbmNlbEJ1dHRvbi5idXR0b25FbCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5vdGljZSBjb250ZW50IHdyYXBwZWQgaW4gYSBjb250YWluZXIgdGhhdCBrZWVwcyB0aGUgbm90aWNlIG9wZW4gd2hlbiBhbiBpbnRlcmFjdGl2ZVxuICAgKiBlbGVtZW50IGluc2lkZSBpdCBpcyBjbGlja2VkLiBPYnNpZGlhbiBkaXNtaXNzZXMgYSBub3RpY2Ugb24gYW55IGNsaWNrIHRoYXQgYnViYmxlcyB1cCB0byBpdHNcbiAgICogZWxlbWVudDsgdGhlIGNvbnRhaW5lciBpbnRlcmNlcHRzIGNsaWNrcyBvcmlnaW5hdGluZyBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IChhIGxpbmssIGJ1dHRvbixcbiAgICogaW5wdXQsIGV0Yy4pIGFuZCBzdG9wcyB0aGVtIHRoZXJlLCBzbyB0aGUgZWxlbWVudCdzIG93biBoYW5kbGVyIHN0aWxsIHJ1bnMgYnV0IHRoZSBub3RpY2Ugc3RheXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gaG9sZGluZyB0aGUgd3JhcHBlZCwgcHJlZml4ZWQgbm90aWNlIGNvbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTm90aWNlQ29udGVudChwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IHsgZ2V0Tm90aWNlLCBtZXNzYWdlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uID0gZmFsc2UgfSA9IHBhcmFtcztcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgY29uc3QgY29udGVudEVsID0gZnJhZ21lbnQuY3JlYXRlRGl2KCk7XG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3Nlcyhjb250ZW50RWwsIENzc0NsYXNzLlBsdWdpbk5vdGljZUNvbnRlbnQpO1xuICAgIGNvbnRlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2UpKTtcbiAgICBjb250ZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAvLyBBIGhhcmQtdG8tY2xvc2Ugbm90aWNlIG11c3Qgbm90IGRpc21pc3Mgb24gYW55IHN0cmF5IGNsaWNrOyBvbmx5IGl0cyBjbG9zZSBidXR0b24gKHZpYSB0aGVcbiAgICAgIC8vIENvbmZpcm1hdGlvbiBtb2RhbCkgbWF5IGRpc21pc3MgaXQuXG4gICAgICBpZiAocmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbikge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJiBldnQudGFyZ2V0LmNsb3Nlc3QoSU5URVJBQ1RJVkVfRUxFTUVOVF9TRUxFQ1RPUikpIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pIHtcbiAgICAgIHRoaXMuYXBwZW5kQ2xvc2VCdXR0b24oY29udGVudEVsLCBlbnN1cmVOb25OdWxsYWJsZShnZXROb3RpY2UpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgbm90aWNlIGNvbnRlbnQsIHByZWZpeGluZyB0aGUgbWVzc2FnZSB3aXRoIHRoZSBwbHVnaW4gbmFtZSBpbiBhIHN0eWxlZCBlbGVtZW50IHNvIGl0IGlzXG4gICAqIHZpc3VhbGx5IGRpc3Rpbmd1aXNoZWQgZnJvbSB0aGUgbWVzc2FnZSBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgYWZ0ZXIgdGhlIHBsdWdpbiBuYW1lIHByZWZpeC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gd2l0aCB0aGUgc3R5bGVkIHBsdWdpbiBuYW1lIHByZWZpeCBmb2xsb3dlZCBieSB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRQcmVmaXhlZE1lc3NhZ2UobWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBjb25zdCBuYW1lRWwgPSBjcmVhdGVTcGFuKHsgdGV4dDogdGhpcy5wbHVnaW5OYW1lIH0pO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobmFtZUVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VOYW1lKTtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChuYW1lRWwpO1xuICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCcgKHVubG9hZGVkKScpO1xuICAgIH1cbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCdcXG4nKTtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KG1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJtYW5lbnROb3RpY2UoKTogTm90aWNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlcygpLmdldCh0aGlzLnBsdWdpbk5hbWUpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcm1hbmVudE5vdGljZXMoKTogTWFwPHN0cmluZywgTm90aWNlPiB7XG4gICAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZTxNYXA8c3RyaW5nLCBOb3RpY2U+PihQRVJNQU5FTlRfTk9USUNFU19TVEFURV9LRVksIG5ldyBNYXA8c3RyaW5nLCBOb3RpY2U+KCkpLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgbm90aWNlIGhhcmQgdG8gY2xvc2U6IG1hcmtzIGl0cyBvdXRlciBlbGVtZW50IChzbyB0aGUgQ1NTIG5ldXRyYWxpemVzIGl0cyBwYWRkaW5nKSBhbmRcbiAgICogaW5zdGFsbHMgYSBjYXB0dXJlLXBoYXNlIGNsaWNrIGd1YXJkIHRoYXQgc3RvcHMgZXZlcnkgY2xpY2sgZXhjZXB0IG9uIHRoZSBjbG9zZSBidXR0b24gZnJvbVxuICAgKiByZWFjaGluZyBPYnNpZGlhbidzIG93biBkaXNtaXNzIGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSBub3RpY2UgLSBUaGUgbm90aWNlIHRvIGd1YXJkLlxuICAgKiBAcGFyYW0gcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbiAtIFdoZXRoZXIgdGhlIG5vdGljZSByZXF1aXJlcyBjbG9zZSBjb25maXJtYXRpb247IHdoZW4gYGZhbHNlYCxcbiAgICogbm90aGluZyBpcyBpbnN0YWxsZWQuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxDbG9zZUNvbmZpcm1hdGlvbkd1YXJkcyhub3RpY2U6IE5vdGljZSwgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgb3V0ZXIgYC5ub3RpY2VgIGVsZW1lbnQgKGBjb250YWluZXJFbGApIGNhcnJpZXMgT2JzaWRpYW4ncyBkaXNtaXNzLW9uLWNsaWNrIGhhbmRsZXIgYW5kIHRoZVxuICAgIC8vIFBhZGRpbmcgYSBzdHJheSBjbGljayBjb3VsZCBsYW5kIG9uOyBtYXJrIGl0IHNvIHRoZSBzdHlsZXNoZWV0IGRyb3BzIHRoYXQgcGFkZGluZy5cbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKG5vdGljZS5jb250YWluZXJFbCwgQ3NzQ2xhc3MuUGx1Z2luTm90aWNlUmVxdWlyZXNDb25maXJtYXRpb24pO1xuICAgIC8vIFN0b3AgZXZlcnkgY2xpY2sgb24gdGhlIG5vdGljZSBcdTIwMTQgZXhjZXB0IG9uIHRoZSBjbG9zZSBidXR0b24gXHUyMDE0IGZyb20gcmVhY2hpbmcgT2JzaWRpYW4ncyBkaXNtaXNzXG4gICAgLy8gSGFuZGxlci4gUmVnaXN0ZXJlZCBpbiB0aGUgY2FwdHVyZSBwaGFzZSBvbiB0aGUgb3V0ZXJtb3N0IGVsZW1lbnQgc28gaXQgYWx3YXlzIHJ1bnMgZmlyc3QuXG4gICAgbm90aWNlLmNvbnRhaW5lckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgaWYgKGV2dC50YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ICYmIGV2dC50YXJnZXQuY2xvc2VzdChgLiR7Q3NzQ2xhc3MuUGx1Z2luTm90aWNlQ2xvc2VCdXR0b259YCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGVybWFuZW50Tm90aWNlKG5vdGljZTogTm90aWNlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlcygpO1xuICAgIGlmIChub3RpY2UpIHtcbiAgICAgIG1hcC5zZXQodGhpcy5wbHVnaW5OYW1lLCBub3RpY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuZGVsZXRlKHRoaXMucGx1Z2luTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbm90aWNlIHdpdGggdGhlIGdpdmVuIGR1cmF0aW9uLiBBIHJldXNhYmxlIG5vdGljZSByZXBsYWNlcyB0aGUgY3VycmVudCByZXVzYWJsZSBub3RpY2UgKGFuZFxuICAgKiBpcyBvcHRpb25hbGx5IHJlZ2lzdGVyZWQgYXMgdGhpcyBwbHVnaW4ncyBwZXJtYW5lbnQgbm90aWNlKTsgYSBzdGFuZGFsb25lIG5vdGljZSBpcyB0cmFja2VkXG4gICAqIHNlcGFyYXRlbHksIGxlYXZpbmcgdGhlIHJldXNhYmxlIHNsb3QgdW50b3VjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIG5vdGljZS5cbiAgICovXG4gIHByaXZhdGUgc2hvd05vdGljZVdpdGhEdXJhdGlvbihwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VXaXRoRHVyYXRpb25QYXJhbXMpOiBOb3RpY2Uge1xuICAgIGNvbnN0IHsgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcywgaXNSZXVzYWJsZSwgbWVzc2FnZSwgb25IaWRlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uLCBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50IH0gPSBwYXJhbXM7XG4gICAgLy8gT2JzaWRpYW4ncyBgTm90aWNlYCB0cmVhdHMgYW4gb21pdHRlZCBkdXJhdGlvbiBhcyBpdHMgZGVmYXVsdCwgc28gbWFwIHRoZSBgbnVsbGAgXCJubyBleHBsaWNpdFxuICAgIC8vIER1cmF0aW9uXCIgdmFsdWUgdG8gYHVuZGVmaW5lZGAuXG4gICAgY29uc3Qgbm90aWNlRHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uSW5NaWxsaXNlY29uZHMgPz8gdW5kZWZpbmVkO1xuXG4gICAgLy8gVGhlIGNsb3NlIGJ1dHRvbidzIGNvbmZpcm0gaGFuZGxlciBuZWVkcyB0aGUgYE5vdGljZWAsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHVudGlsIGl0IGlzIGJ1aWx0IGZyb21cbiAgICAvLyBUaGlzIGNvbnRlbnQ7IGNhcHR1cmUgaXQgbGF6aWx5IHZpYSBhIGhvbGRlciByZXNvbHZlZCBhdCBjbGljayB0aW1lLiBUaGUgZ2V0dGVyIGlzIGNyZWF0ZWQgb25seVxuICAgIC8vIEZvciBhIGhhcmQtdG8tY2xvc2Ugbm90aWNlIFx1MjAxNCB0aGUgb25seSBraW5kIHRoYXQgaGFzIGEgY2xvc2UgYnV0dG9uLlxuICAgIGxldCBidWlsdE5vdGljZTogTm90aWNlIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuYnVpbGROb3RpY2VDb250ZW50KG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXM+KHtcbiAgICAgIGdldE5vdGljZTogcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbiA/ICgpOiBOb3RpY2UgfCBudWxsID0+IGJ1aWx0Tm90aWNlIDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb25cbiAgICB9KSk7XG5cbiAgICBpZiAoIWlzUmV1c2FibGUpIHtcbiAgICAgIGJ1aWx0Tm90aWNlID0gbmV3IE5vdGljZShjb250ZW50LCBub3RpY2VEdXJhdGlvbkluTWlsbGlzZWNvbmRzKTtcbiAgICAgIHRoaXMuaW5zdGFsbENsb3NlQ29uZmlybWF0aW9uR3VhcmRzKGJ1aWx0Tm90aWNlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uKTtcbiAgICAgIHRoaXMud2lyZU9uSGlkZShidWlsdE5vdGljZSwgb25IaWRlKTtcbiAgICAgIHRoaXMuc3RhbmRhbG9uZU5vdGljZXMuYWRkKGJ1aWx0Tm90aWNlKTtcbiAgICAgIHJldHVybiBidWlsdE5vdGljZTtcbiAgICB9XG5cbiAgICB0aGlzLm5vdGljZT8uaGlkZSgpO1xuICAgIGJ1aWx0Tm90aWNlID0gbmV3IE5vdGljZShjb250ZW50LCBub3RpY2VEdXJhdGlvbkluTWlsbGlzZWNvbmRzKTtcbiAgICB0aGlzLm5vdGljZSA9IGJ1aWx0Tm90aWNlO1xuICAgIHRoaXMuaW5zdGFsbENsb3NlQ29uZmlybWF0aW9uR3VhcmRzKGJ1aWx0Tm90aWNlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uKTtcbiAgICB0aGlzLndpcmVPbkhpZGUoYnVpbHROb3RpY2UsIG9uSGlkZSk7XG5cbiAgICBpZiAoc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudCkge1xuICAgICAgdGhpcy5zZXRQZXJtYW5lbnROb3RpY2UoYnVpbHROb3RpY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWx0Tm90aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBzIGEgbm90aWNlJ3MgYGhpZGVgIHNvIHRoZSBnaXZlbiBjYWxsYmFjayBydW5zIHRoZSBmaXJzdCB0aW1lIHRoZSBub3RpY2UgaXMgaGlkZGVuIFx1MjAxNCBieSB0aGVcbiAgICogdXNlciwgYnkgYSByZXBsYWNpbmcgbm90aWNlLCBieSBpdHMgZHVyYXRpb24gZWxhcHNpbmcsIG9yIG9uIHVubG9hZC4gRG9lcyBub3RoaW5nIHdoZW4gbm8gY2FsbGJhY2tcbiAgICogaXMgZ2l2ZW4uXG4gICAqXG4gICAqIEBwYXJhbSBub3RpY2UgLSBUaGUgbm90aWNlIHdob3NlIGBoaWRlYCB0byB3cmFwLlxuICAgKiBAcGFyYW0gb25IaWRlIC0gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBvbiB0aGUgZmlyc3QgaGlkZSwgb3IgYHVuZGVmaW5lZGAgdG8gc2tpcCB3cmFwcGluZy5cbiAgICovXG4gIHByaXZhdGUgd2lyZU9uSGlkZShub3RpY2U6IE5vdGljZSwgb25IaWRlOiAoKCkgPT4gUHJvbWlzYWJsZTx2b2lkPikgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoIW9uSGlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBSdW4gYG9uSGlkZWAgdGhlIGZpcnN0IHRpbWUgdGhlIG5vdGljZSBpcyBoaWRkZW4uIEEgYG9uY2VgIHBhdGNoIG9uIGBoaWRlYCBpbnRlcmNlcHRzIGV4YWN0bHkgb25lXG4gICAgLy8gQ2FsbCB0aGVuIHVuaW5zdGFsbHMgaXRzZWxmICh1bmxvYWRpbmcgdGhpcyBkZWRpY2F0ZWQgY29tcG9uZW50KSwgc28gdGhlcmUgaXMgbm8gbWFudWFsXG4gICAgLy8gU2luZ2xlLWZpcmUgYm9va2tlZXBpbmcgYW5kIG5vIGxpbmdlcmluZyBwYXRjaCBvbiB0aGUgdHJhbnNpZW50IG5vdGljZS5cbiAgICBjb25zdCBwYXRjaENvbXBvbmVudCA9IG5ldyBNb25rZXlBcm91bmRDb21wb25lbnQoKTtcbiAgICBwYXRjaENvbXBvbmVudC5sb2FkKCk7XG4gICAgcGF0Y2hDb21wb25lbnQucmVnaXN0ZXJNZXRob2RQYXRjaCh7XG4gICAgICBtZXRob2ROYW1lOiAnaGlkZScsXG4gICAgICBvYmo6IG5vdGljZSxcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrIH0pID0+IHtcbiAgICAgICAgZmFsbGJhY2soKTtcbiAgICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IG9uSGlkZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0Esc0JBSU87QUFJUCxtQkFBa0M7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
498
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIGRpc3BsYXlpbmcgbm90aWNlcyB0byB0aGUgdXNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgTm90aWNlLFxuICBzZXRJY29uXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vdmFsdWUtcHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4uLy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi8uLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS1wcm92aWRlci50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICcuLi9tb2RhbHMvY29uZmlybS50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9tb25rZXktYXJvdW5kLWNvbXBvbmVudC50cyc7XG5cbmNvbnN0IFBFUk1BTkVOVF9OT1RJQ0VTX1NUQVRFX0tFWSA9ICdwbHVnaW4tbm90aWNlLWNvbXBvbmVudDpwZXJtYW5lbnQtbm90aWNlcyc7XG5jb25zdCBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA9IDA7XG5jb25zdCBERUZBVUxUX0RFTEFZX0JFRk9SRV9TSE9XX0lOX01JTExJU0VDT05EUyA9IDUwMDtcblxuLy8gRWxlbWVudHMgYSB1c2VyIGNsaWNrcyB0byBhY3Qgb24gdGhlbSByYXRoZXIgdGhhbiB0byBkaXNtaXNzIHRoZSBub3RpY2UuIEEgY2xpY2sgbGFuZGluZyBvbiAob3Jcbi8vIEluc2lkZSkgb25lIG9mIHRoZXNlIGlzIGtlcHQgZnJvbSBidWJibGluZyB0byB0aGUgbm90aWNlLCBzbyB0aGUgbm90aWNlIHN0YXlzIG9wZW4uXG5jb25zdCBJTlRFUkFDVElWRV9FTEVNRU5UX1NFTEVDVE9SID0gJ2EsIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGxhYmVsLCBbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSwgW3JvbGU9XCJidXR0b25cIl0sIFtyb2xlPVwibGlua1wiXSwgW3JvbGU9XCJjaGVja2JveFwiXSwgW3JvbGU9XCJ0YWJcIl0sIFtyb2xlPVwibWVudWl0ZW1cIl0nO1xuXG4vKipcbiAqIEEgaGFuZGxlIHRvIGEgZGVsYXllZCBub3RpY2UgY3JlYXRlZCBieSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS4gSXQgaXMgYVxuICoge0BsaW5rIERpc3Bvc2FibGV9IChzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGB1c2luZ2ApIHRoYXQgYWxzbyBsZXRzIHRoZSBjb250ZW50IGJlIHVwZGF0ZWQgd2hpbGUgdGhlXG4gKiBub3RpY2UgaXMgc2hvd24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50RGVsYXllZE5vdGljZSBleHRlbmRzIERpc3Bvc2FibGUge1xuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIG5vdGljZSBjb250ZW50LCByZS1hcHBseWluZyB0aGUgcGx1Z2luLW5hbWUgcHJlZml4LCB0aGUgaW50ZXJhY3RpdmUtY2xpY2sgZ3VhcmQsIGFuZFxuICAgKiB0aGUgQ2FuY2VsIGJ1dHRvbi4gVXNlZnVsIGZvciByZXBvcnRpbmcgcHJvZ3Jlc3MuIElmIHRoZSBkZWxheSBoYXMgbm90IGVsYXBzZWQgeWV0LCB0aGUgbmV3IGNvbnRlbnRcbiAgICogYmVjb21lcyB3aGF0IGlzIHNob3duIG9uY2UgaXQgZG9lcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgbmV3IG5vdGljZSBjb250ZW50LlxuICAgKi9cbiAgc2V0Q29udGVudChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBhIENhbmNlbCBidXR0b24gaXMgYXBwZW5kZWQgdG8gdGhlIG5vdGljZTsgY2xpY2tpbmcgaXQgYWJvcnRzIHRoaXMgY29udHJvbGxlci4gV2hlblxuICAgKiBvbWl0dGVkLCBubyBDYW5jZWwgYnV0dG9uIGlzIHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBvZiB0aGUgQ2FuY2VsIGJ1dHRvbiBzaG93biB3aGVuIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcy5hYm9ydENvbnRyb2xsZXJ9XG4gICAqIGlzIHByb3ZpZGVkLiBXaGVuIG9taXR0ZWQsIHRoZSBsb2NhbGl6ZWQgYENhbmNlbGAgbGFiZWwgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29udGVudCwgcmVzb2x2ZWQgbGF6aWx5IG9ubHkgaWYgdGhlIGRlbGF5IGVsYXBzZXMgXHUyMDE0IHNvIGFuIG9wZXJhdGlvbiB0aGF0IGZpbmlzaGVzXG4gICAqIHNvb25lciBuZXZlciBidWlsZHMgaXQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBWYWx1ZVByb3ZpZGVyPERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0aGUgb3BlcmF0aW9uIG11c3QgcnVuIGJlZm9yZSB0aGUgbm90aWNlIGlzIHNob3duLiBPcGVyYXRpb25zIHRoYXQgZmluaXNoIHNvb25lciBuZXZlclxuICAgKiBzaG93IGEgbm90aWNlLCBhdm9pZGluZyBhIGRpc3RyYWN0aW5nIGZsYXNoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwYFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBzaG91bGQgc3RheSB1bnRpbCBpdCBpcyByZXBsYWNlZCwgdGhlIHBsdWdpbiBpcyByZWxvYWRlZCwgb3IgdGhlIHVzZXIgZGlzbWlzc2VzIGl0LlxuICAgKlxuICAgKiBBIHBlcm1hbmVudCBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgaXMgbm90IGhpZGRlbiB3aGVuIHRoZSBjb21wb25lbnQgdW5sb2Fkcywgc28gaXQgY2FuXG4gICAqIGNvbW11bmljYXRlIHN0YXRlIHRoYXQgb3V0bGl2ZXMgdGhlIHBsdWdpbiAoZS5nLiBhIGNsZWFudXAgdGhhdCByZXF1aXJlcyBhIHJlbG9hZCkuIFRoZXJlIGlzIGF0IG1vc3Qgb25lIHBlcm1hbmVudFxuICAgKiBub3RpY2UgcGVyIHBsdWdpbjogaXQgaXMgaGlkZGVuIGJ5IHRoZSBuZXh0IHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZX0gY2FsbCBhbmQgZGlzbWlzc2VkXG4gICAqIGF1dG9tYXRpY2FsbHkgdGhlIG5leHQgdGltZSB0aGUgY29tcG9uZW50IGxvYWRzIChpLmUuIHdoZW4gdGhlIHBsdWdpbiBpcyByZS1lbmFibGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNQZXJtYW5lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2Ugb2NjdXBpZXMgdGhlIHNpbmdsZSBwZXItcGx1Z2luIHJldXNhYmxlIHNsb3QuXG4gICAqXG4gICAqIEEgcmV1c2FibGUgbm90aWNlIHRha2VzIHRoZSBzaGFyZWQgc2xvdDogdGhlIG5leHQgcmV1c2FibGUgbm90aWNlIGhpZGVzIGl0LCBhbmQgaXQgaXMgaGlkZGVuIG9uIHVubG9hZC5cbiAgICogQSBub24tcmV1c2FibGUgKHN0YW5kYWxvbmUpIG5vdGljZSBpcyBub3QgcGxhY2VkIGluIHRoZSBzbG90IFx1MjAxNCBpdCBuZXZlciBoaWRlcywgYW5kIGlzIG5ldmVyIGhpZGRlbiBieSwgYVxuICAgKiByZXVzYWJsZSBub3RpY2U7IG11bHRpcGxlIHN0YW5kYWxvbmUgbm90aWNlcyBjb2V4aXN0LiBTdGFuZGFsb25lIG5vdGljZXMgYXJlIHN0aWxsIGhpZGRlbiB0b2dldGhlciBvbiB1bmxvYWQuXG4gICAqXG4gICAqIEEgcGVybWFuZW50IG5vdGljZSBtdXN0IGJlIHJldXNhYmxlICh7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuaXNQZXJtYW5lbnR9IGltcGxpZXNcbiAgICogYGlzUmV1c2FibGVgKTsgcGFzc2luZyBgaXNSZXVzYWJsZTogZmFsc2VgIHRvZ2V0aGVyIHdpdGggYGlzUGVybWFuZW50OiB0cnVlYCB0aHJvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNSZXVzYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBub3RpY2UgaXMgaGlkZGVuIFx1MjAxNCB3aGV0aGVyIGJ5IHRoZSB1c2VyIGNsb3NpbmcgaXQsIGJ5IGEgbGF0ZXIgcmV1c2FibGVcbiAgICogbm90aWNlIHJlcGxhY2luZyBpdCwgYnkgaXRzIGR1cmF0aW9uIGVsYXBzaW5nLCBvciBvbiBjb21wb25lbnQgdW5sb2FkLiBJdCBydW5zIGF0IG1vc3Qgb25jZSBwZXJcbiAgICogbm90aWNlLiBBbiBhc3luYyBjYWxsYmFjayBpcyBydW4gZmlyZS1hbmQtZm9yZ2V0IChpdHMgcmVqZWN0aW9uIHN1cmZhY2VzIHRocm91Z2ggdGhlIGFzeW5jLWVycm9yXG4gICAqIHBpcGVsaW5lKS5cbiAgICovXG4gIG9uSGlkZT8odGhpczogdm9pZCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBpcyBoYXJkIHRvIGNsb3NlOiBpdCBkb2VzIG5vdCBkaXNtaXNzIG9uIGFueSBzdHJheSBjbGljaywgYW5kIGluc3RlYWQgc2hvd3MgYVxuICAgKiBjbG9zZSAoWCkgYnV0dG9uIHdob3NlIGNsaWNrIG9wZW5zIGEgY29uZmlybWF0aW9uIG1vZGFsLCBkaXNtaXNzaW5nIHRoZSBub3RpY2Ugb25seSBpZiBjb25maXJtZWQuXG4gICAqXG4gICAqIEEgaGFyZC10by1jbG9zZSBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgaXMgc3RhbmRhbG9uZSAoaW1wbGllc1xuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuaXNSZXVzYWJsZX0gYD0gZmFsc2VgKSwgc28gYSBsYXRlciBub3RpY2UgbmV2ZXJcbiAgICogc2lsZW50bHkgcmVwbGFjZXMgaXQ7IHBhc3NpbmcgYGlzUmV1c2FibGU6IHRydWVgIHRvZ2V0aGVyIHdpdGggYHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb246IHRydWVgXG4gICAqIHRocm93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbj86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuICByZWFkb25seSBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuICByZWFkb25seSBjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBub3RpY2UgdGhpcyBjb250ZW50IGJlbG9uZ3MgdG8sIHVzZWQgYnkgdGhlIGNsb3NlIGJ1dHRvbidzIGhhbmRsZXIuIFRoZSBub3RpY2UgZG9lc1xuICAgKiBub3QgZXhpc3QgeWV0IHdoZW4gdGhlIGNvbnRlbnQgaXMgYnVpbHQsIHNvIGl0IGlzIHJlc29sdmVkIGxhemlseSBhdCBjbGljayB0aW1lLiBSZXF1aXJlZCB3aGVuXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMucmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbn0gaXMgYHRydWVgLlxuICAgKi9cbiAgZ2V0Tm90aWNlPyh0aGlzOiB2b2lkKTogTm90aWNlIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBhZnRlciB0aGUgcGx1Z2luIG5hbWUgcHJlZml4LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWNlIGlzIGhhcmQgdG8gY2xvc2U6IHN0b3BzIGV2ZXJ5IGNsaWNrIGZyb20gZGlzbWlzc2luZyBpdCBhbmQgYWRkcyBhIGNsb3NlIGJ1dHRvblxuICAgKiBndWFyZGVkIGJ5IGEgY29uZmlybWF0aW9uIG1vZGFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VXaXRoRHVyYXRpb25QYXJhbXMge1xuICByZWFkb25seSBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBudWxsIHwgbnVtYmVyO1xuICByZWFkb25seSBpc1JldXNhYmxlOiBib29sZWFuO1xuICByZWFkb25seSBtZXNzYWdlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICByZWFkb25seSBvbkhpZGU6ICgoKSA9PiBQcm9taXNhYmxlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIHNob3dpbmcgcGx1Z2luIG5vdGljZXMuIEF1dG9tYXRpY2FsbHkgaGlkZXMgdGhlIHByZXZpb3VzIG5vdGljZSB3aGVuIGEgbmV3IG9uZSBpcyBzaG93bi5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbk5vdGljZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gbmFtZSAoc2hvd24gYXMgcHJlZml4IGluIG5vdGljZXMpLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIG5vdGljZTogTm90aWNlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGFsb25lTm90aWNlcyA9IG5ldyBTZXQ8Tm90aWNlPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMucGx1Z2luTmFtZSA9IHBhcmFtcy5wbHVnaW5OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyB0aGUgcGVybWFuZW50IG5vdGljZSBsZWZ0IG92ZXIgZnJvbSBhIHByZXZpb3VzIGxvYWQgKGUuZy4gYSBwcmV2aW91cyBwbHVnaW4gc2Vzc2lvbikgb24gbG9hZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgY29uc3QgcGVybWFuZW50Tm90aWNlID0gdGhpcy5nZXRQZXJtYW5lbnROb3RpY2UoKTtcbiAgICBwZXJtYW5lbnROb3RpY2U/LmhpZGUoKTtcbiAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgY3VycmVudCBub3RpY2Ugb24gdW5sb2FkLCB1bmxlc3MgaXQgaXMgdGhlIHBlcm1hbmVudCBub3RpY2UgKHdoaWNoIGlzIG1lYW50IHRvIG91dGxpdmUgdGhlIHBsdWdpbikuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb251bmxvYWQoKTogdm9pZCB7XG4gICAgLy8gQ2FuY2VsIGFueSBkZWxheWVkIG5vdGljZSB3aG9zZSB0aW1lciBoYXMgbm90IGZpcmVkIHlldCwgc28gaXQgbmV2ZXIgYXBwZWFycyBhZnRlciB1bmxvYWQuXG4gICAgZm9yIChjb25zdCBjYW5jZWxQZW5kaW5nVGltZXIgb2YgWy4uLnRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9uc10pIHtcbiAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRQZXJtYW5lbnROb3RpY2UoKSAhPT0gdGhpcy5ub3RpY2UpIHtcbiAgICAgIHRoaXMubm90aWNlPy5oaWRlKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhbmRhbG9uZU5vdGljZSBvZiB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzKSB7XG4gICAgICBzdGFuZGFsb25lTm90aWNlLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgbm90aWNlIG1lc3NhZ2UgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyB0aGUgbm90aWNlLlxuICAgKiBAcmV0dXJucyBUaGUgbm90aWNlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBzaG93Tm90aWNlKG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcsIG9wdGlvbnM/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucyk6IE5vdGljZSB7XG4gICAgY29uc3QgaXNQZXJtYW5lbnQgPSBvcHRpb25zPy5pc1Blcm1hbmVudCA/PyBmYWxzZTtcbiAgICBjb25zdCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uID0gb3B0aW9ucz8ucmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbiA/PyBmYWxzZTtcbiAgICBjb25zdCBpc1JldXNhYmxlID0gb3B0aW9ucz8uaXNSZXVzYWJsZSA/PyAhcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbjtcblxuICAgIGlmIChvcHRpb25zPy5pc1JldXNhYmxlID09PSB0cnVlICYmIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBub3RpY2UgdGhhdCByZXF1aXJlcyBjbG9zZSBjb25maXJtYXRpb24gY2Fubm90IGJlIHJldXNhYmxlLicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uaXNSZXVzYWJsZSA9PT0gZmFsc2UgJiYgaXNQZXJtYW5lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBwZXJtYW5lbnQgbm90aWNlIG11c3QgYmUgcmV1c2FibGUuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGlzUGVybWFuZW50IHx8IHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24gPyBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc2hvd05vdGljZVdpdGhEdXJhdGlvbih7XG4gICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLFxuICAgICAgaXNSZXVzYWJsZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBvbkhpZGU6IG9wdGlvbnM/Lm9uSGlkZSxcbiAgICAgIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24sXG4gICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBpc1Blcm1hbmVudFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbm90aWNlIGRlc2NyaWJpbmcgYSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLCBidXQgb25seSBvbmNlIHRoZSBvcGVyYXRpb24gaGFzIHJ1biBmb3IgbG9uZ2VyXG4gICAqIHRoYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmRlbGF5SW5NaWxsaXNlY29uZHN9IFx1MjAxNCBzbyBvcGVyYXRpb25zXG4gICAqIHRoYXQgZmluaXNoIHNvb25lciBuZXZlciBmbGFzaCBhIG5vdGljZS4gVGhlIG5vdGljZSBzdGF5cyB1bnRpbCB0aGUgcmV0dXJuZWQge0BsaW5rIERpc3Bvc2FibGV9IGlzXG4gICAqIGRpc3Bvc2VkICh3aGljaCBhbHNvIGNhbmNlbHMgdGhlIHBlbmRpbmcgdGltZXIgaWYgaXQgaGFzIG5vdCBmaXJlZCB5ZXQpLCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoXG4gICAqIGB1c2luZ2AuIFdoZW4gYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmFib3J0Q29udHJvbGxlcn0gaXMgZ2l2ZW4sIGFcbiAgICogQ2FuY2VsIGJ1dHRvbiB0aGF0IGFib3J0cyBpdCBpcyBhcHBlbmRlZCAoYW5kLCBiZWluZyBpbnRlcmFjdGl2ZSwgZG9lcyBub3QgZGlzbWlzcyB0aGUgbm90aWNlKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogdXNpbmcgX25vdGljZSA9IHBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlQWZ0ZXJEZWxheSh7XG4gICAqICAgYWJvcnRDb250cm9sbGVyLFxuICAgKiAgIGNvbnRlbnQ6ICgpID0+IGJ1aWxkUHJvZ3Jlc3NGcmFnbWVudCgpXG4gICAqIH0pO1xuICAgKiBhd2FpdCBydW5PcGVyYXRpb24oYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudERlbGF5ZWROb3RpY2V9IHRoYXQgaGlkZXMgdGhlIG5vdGljZSAob3IgY2FuY2VscyB0aGUgcGVuZGluZ1xuICAgKiB0aW1lcikgd2hlbiBkaXNwb3NlZCBhbmQgbGV0cyB0aGUgY29udGVudCBiZSB1cGRhdGVkIHdoaWxlIGl0IGlzIHNob3duLlxuICAgKi9cbiAgcHVibGljIHNob3dOb3RpY2VBZnRlckRlbGF5KHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnREZWxheWVkTm90aWNlIHtcbiAgICBsZXQgc2hvd25Ob3RpY2U6IE5vdGljZSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBpc0Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgbGV0IHRpbWVySWQgPSAwO1xuICAgIGxldCBjdXJyZW50Q29udGVudDogVmFsdWVQcm92aWRlcjxEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nPiA9IHBhcmFtcy5jb250ZW50O1xuXG4gICAgY29uc3QgY2FuY2VsUGVuZGluZ1RpbWVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgIHRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucy5kZWxldGUoY2FuY2VsUGVuZGluZ1RpbWVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGREZWxheWVkTWVzc2FnZSA9IChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogRG9jdW1lbnRGcmFnbWVudCA9PlxuICAgICAgdGhpcy5idWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zPih7XG4gICAgICAgIGFib3J0Q29udHJvbGxlcjogcGFyYW1zLmFib3J0Q29udHJvbGxlcixcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogcGFyYW1zLmNhbmNlbEJ1dHRvblRleHQsXG4gICAgICAgIGNvbnRlbnRcbiAgICAgIH0pKTtcblxuICAgIHRpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjYW5jZWxQZW5kaW5nVGltZXIoKTtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRDb250ZW50ID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGN1cnJlbnRDb250ZW50LCB7fSk7XG4gICAgICAgIC8vIFRoZSBoYW5kbGUgbWF5IGhhdmUgYmVlbiBkaXNwb3NlZCB3aGlsZSB0aGUgY29udGVudCB3YXMgYmVpbmcgcmVzb2x2ZWQ7IGRvbid0IHNob3cgYSBzdGFsZSBub3RpY2UuXG4gICAgICAgIGlmIChpc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNob3duTm90aWNlID0gdGhpcy5zaG93Tm90aWNlV2l0aER1cmF0aW9uKHtcbiAgICAgICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICBpc1JldXNhYmxlOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IGJ1aWxkRGVsYXllZE1lc3NhZ2UocmVzb2x2ZWRDb250ZW50KSxcbiAgICAgICAgICBvbkhpZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHBhcmFtcy5kZWxheUluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfREVMQVlfQkVGT1JFX1NIT1dfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIHRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucy5hZGQoY2FuY2VsUGVuZGluZ1RpbWVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZXRDb250ZW50OiAoY29udGVudDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgICBjdXJyZW50Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgIC8vIFJlLXdyYXAgc28gdGhlIHByZWZpeCwgaW50ZXJhY3RpdmUgZ3VhcmQsIGFuZCBDYW5jZWwgYnV0dG9uIHN1cnZpdmUgdGhlIGNvbnRlbnQgc3dhcC5cbiAgICAgICAgc2hvd25Ob3RpY2U/LnNldE1lc3NhZ2UodGhpcy5idWlsZE5vdGljZUNvbnRlbnQoeyBtZXNzYWdlOiBidWlsZERlbGF5ZWRNZXNzYWdlKGNvbnRlbnQpIH0pKTtcbiAgICAgIH0sXG4gICAgICBbU3ltYm9sLmRpc3Bvc2VdOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlzRGlzcG9zZWQgPSB0cnVlO1xuICAgICAgICBjYW5jZWxQZW5kaW5nVGltZXIoKTtcbiAgICAgICAgc2hvd25Ob3RpY2U/LmhpZGUoKTtcbiAgICAgICAgaWYgKHRoaXMubm90aWNlID09PSBzaG93bk5vdGljZSkge1xuICAgICAgICAgIHRoaXMubm90aWNlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIGNsb3NlIChYKSBidXR0b24gdG8gdGhlIG5vdGljZSBjb250ZW50LiBDbGlja2luZyBpdCBvcGVucyBhIGNvbmZpcm1hdGlvbiBtb2RhbCBhbmQsIG9ubHlcbiAgICogaWYgY29uZmlybWVkLCBoaWRlcyB0aGUgbm90aWNlIGFuZCBkcm9wcyBpdCBmcm9tIHRoZSBzdGFuZGFsb25lLW5vdGljZSB0cmFja2luZyBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZW50RWwgLSBUaGUgbm90aWNlIGNvbnRlbnQgd3JhcHBlciB0byBhcHBlbmQgdGhlIGJ1dHRvbiB0by5cbiAgICogQHBhcmFtIGdldE5vdGljZSAtIFJlc29sdmVzIHRoZSBub3RpY2UgdG8gaGlkZSB3aGVuIHRoZSBjbG9zZSBpcyBjb25maXJtZWQuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZENsb3NlQnV0dG9uKGNvbnRlbnRFbDogSFRNTEVsZW1lbnQsIGdldE5vdGljZTogKCkgPT4gTm90aWNlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uRWwgPSBjb250ZW50RWwuY3JlYXRlRWwoJ2J1dHRvbicsIHtcbiAgICAgIGF0dHI6IHsgJ2FyaWEtbGFiZWwnOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubm90aWNlcy5jbG9zZUFyaWFMYWJlbCkgfVxuICAgIH0pO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoY2xvc2VCdXR0b25FbCwgQ3NzQ2xhc3MuUGx1Z2luTm90aWNlQ2xvc2VCdXR0b24pO1xuICAgIHNldEljb24oY2xvc2VCdXR0b25FbCwgJ3gnKTtcbiAgICBjbG9zZUJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpc0NvbmZpcm1lZCA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgbWVzc2FnZTogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLm5vdGljZXMuY2xvc2VDb25maXJtTWVzc2FnZSlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaXNDb25maXJtZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm90aWNlID0gZW5zdXJlTm9uTnVsbGFibGUoZ2V0Tm90aWNlKCkpO1xuICAgICAgICBub3RpY2UuaGlkZSgpO1xuICAgICAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmRlbGV0ZShub3RpY2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBtZXNzYWdlIGZvciBhIGRlbGF5ZWQgbm90aWNlOiB0aGUgcmVzb2x2ZWQgY29udGVudCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIENhbmNlbFxuICAgKiBidXR0b24gdGhhdCBhYm9ydHMgdGhlIHByb3ZpZGVkIGNvbnRyb2xsZXIgd2hlbiBjbGlja2VkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IGhvbGRpbmcgdGhlIGNvbnRlbnQgYW5kLCBpZiByZXF1ZXN0ZWQsIGEgQ2FuY2VsIGJ1dHRvbi5cbiAgICovXG4gIHByaXZhdGUgYnVpbGREZWxheWVkTm90aWNlTWVzc2FnZShwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2VQYXJhbXMpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBjb25zdCB7IGFib3J0Q29udHJvbGxlciwgY2FuY2VsQnV0dG9uVGV4dCwgY29udGVudCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAvLyBgQnV0dG9uQ29tcG9uZW50YCByZXF1aXJlcyBhbiBgSFRNTEVsZW1lbnRgIHBhcmVudCwgc28gYnVpbGQgaXQgb24gYSB0aHJvd2F3YXlcbiAgICAgIC8vIERldGFjaGVkIGVsZW1lbnQgYW5kIG1vdmUgaXRzIGBidXR0b25FbGAgaW50byB0aGUgZnJhZ21lbnQuXG4gICAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGNyZWF0ZURpdigpKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5zZXRCdXR0b25UZXh0KGNhbmNlbEJ1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmJ1dHRvbnMuY2FuY2VsKSk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGNhbmNlbEJ1dHRvbi5idXR0b25FbCwgQ3NzQ2xhc3MuQ2FuY2VsQnV0dG9uKTtcbiAgICAgIC8vIFRoZSBjbGljayBpcyB3aXJlZCB2aWEgYGFkZEV2ZW50TGlzdGVuZXJgIHJhdGhlciB0aGFuIGBCdXR0b25Db21wb25lbnQub25DbGlja2Agc28gaXRcbiAgICAgIC8vIEJ1YmJsZXMgdGhyb3VnaCB0aGUgaW50ZXJhY3RpdmUtZWxlbWVudCBndWFyZCAoa2VlcGluZyB0aGUgbm90aWNlIG9wZW4pIGFuZCBzdGF5c1xuICAgICAgLy8gRGlyZWN0bHkgZXhlcmNpc2FibGUgdmlhIGEgZGlzcGF0Y2hlZCBET00gZXZlbnQgaW4gdW5pdCB0ZXN0cy5cbiAgICAgIGNhbmNlbEJ1dHRvbi5idXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICB9KTtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGNhbmNlbEJ1dHRvbi5idXR0b25FbCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5vdGljZSBjb250ZW50IHdyYXBwZWQgaW4gYSBjb250YWluZXIgdGhhdCBrZWVwcyB0aGUgbm90aWNlIG9wZW4gd2hlbiBhbiBpbnRlcmFjdGl2ZVxuICAgKiBlbGVtZW50IGluc2lkZSBpdCBpcyBjbGlja2VkLiBPYnNpZGlhbiBkaXNtaXNzZXMgYSBub3RpY2Ugb24gYW55IGNsaWNrIHRoYXQgYnViYmxlcyB1cCB0byBpdHNcbiAgICogZWxlbWVudDsgdGhlIGNvbnRhaW5lciBpbnRlcmNlcHRzIGNsaWNrcyBvcmlnaW5hdGluZyBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IChhIGxpbmssIGJ1dHRvbixcbiAgICogaW5wdXQsIGV0Yy4pIGFuZCBzdG9wcyB0aGVtIHRoZXJlLCBzbyB0aGUgZWxlbWVudCdzIG93biBoYW5kbGVyIHN0aWxsIHJ1bnMgYnV0IHRoZSBub3RpY2Ugc3RheXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gaG9sZGluZyB0aGUgd3JhcHBlZCwgcHJlZml4ZWQgbm90aWNlIGNvbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTm90aWNlQ29udGVudChwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IHsgZ2V0Tm90aWNlLCBtZXNzYWdlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uID0gZmFsc2UgfSA9IHBhcmFtcztcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgY29uc3QgY29udGVudEVsID0gZnJhZ21lbnQuY3JlYXRlRGl2KCk7XG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3Nlcyhjb250ZW50RWwsIENzc0NsYXNzLlBsdWdpbk5vdGljZUNvbnRlbnQpO1xuICAgIGNvbnRlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2UpKTtcbiAgICBjb250ZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAvLyBBIGhhcmQtdG8tY2xvc2Ugbm90aWNlIG11c3Qgbm90IGRpc21pc3Mgb24gYW55IHN0cmF5IGNsaWNrOyBvbmx5IGl0cyBjbG9zZSBidXR0b24gKHZpYSB0aGVcbiAgICAgIC8vIENvbmZpcm1hdGlvbiBtb2RhbCkgbWF5IGRpc21pc3MgaXQuXG4gICAgICBpZiAocmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvbikge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJiBldnQudGFyZ2V0LmNsb3Nlc3QoSU5URVJBQ1RJVkVfRUxFTUVOVF9TRUxFQ1RPUikpIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pIHtcbiAgICAgIHRoaXMuYXBwZW5kQ2xvc2VCdXR0b24oY29udGVudEVsLCBlbnN1cmVOb25OdWxsYWJsZShnZXROb3RpY2UpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgbm90aWNlIGNvbnRlbnQsIHByZWZpeGluZyB0aGUgbWVzc2FnZSB3aXRoIHRoZSBwbHVnaW4gbmFtZSBpbiBhIHN0eWxlZCBlbGVtZW50IHNvIGl0IGlzXG4gICAqIHZpc3VhbGx5IGRpc3Rpbmd1aXNoZWQgZnJvbSB0aGUgbWVzc2FnZSBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgYWZ0ZXIgdGhlIHBsdWdpbiBuYW1lIHByZWZpeC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gd2l0aCB0aGUgc3R5bGVkIHBsdWdpbiBuYW1lIHByZWZpeCBmb2xsb3dlZCBieSB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRQcmVmaXhlZE1lc3NhZ2UobWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBjb25zdCBuYW1lRWwgPSBjcmVhdGVTcGFuKHsgdGV4dDogdGhpcy5wbHVnaW5OYW1lIH0pO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobmFtZUVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VOYW1lKTtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChuYW1lRWwpO1xuICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCcgKHVubG9hZGVkKScpO1xuICAgIH1cbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCdcXG4nKTtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KG1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJtYW5lbnROb3RpY2UoKTogTm90aWNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlcygpLmdldCh0aGlzLnBsdWdpbk5hbWUpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcm1hbmVudE5vdGljZXMoKTogTWFwPHN0cmluZywgTm90aWNlPiB7XG4gICAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZTxNYXA8c3RyaW5nLCBOb3RpY2U+PihQRVJNQU5FTlRfTk9USUNFU19TVEFURV9LRVksIG5ldyBNYXA8c3RyaW5nLCBOb3RpY2U+KCkpLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgbm90aWNlIGhhcmQgdG8gY2xvc2U6IG1hcmtzIGl0cyBvdXRlciBlbGVtZW50IChzbyB0aGUgQ1NTIG5ldXRyYWxpemVzIGl0cyBwYWRkaW5nKSBhbmRcbiAgICogaW5zdGFsbHMgYSBjYXB0dXJlLXBoYXNlIGNsaWNrIGd1YXJkIHRoYXQgc3RvcHMgZXZlcnkgY2xpY2sgZXhjZXB0IG9uIGFuIGludGVyYWN0aXZlIGVsZW1lbnQgKGFcbiAgICogYnV0dG9uLCBsaW5rLCB0aGUgY2xvc2UgYnV0dG9uLCBldGMuKSBmcm9tIHJlYWNoaW5nIE9ic2lkaWFuJ3Mgb3duIGRpc21pc3MgaGFuZGxlciBcdTIwMTQgc28gYW5cbiAgICogaW50ZXJhY3RpdmUgY2hpbGQncyBvd24gaGFuZGxlciBzdGlsbCBydW5zIHdoaWxlIGEgc3RyYXkgY2xpY2sgY2Fubm90IGRpc21pc3MgdGhlIG5vdGljZS5cbiAgICpcbiAgICogQHBhcmFtIG5vdGljZSAtIFRoZSBub3RpY2UgdG8gZ3VhcmQuXG4gICAqIEBwYXJhbSByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uIC0gV2hldGhlciB0aGUgbm90aWNlIHJlcXVpcmVzIGNsb3NlIGNvbmZpcm1hdGlvbjsgd2hlbiBgZmFsc2VgLFxuICAgKiBub3RoaW5nIGlzIGluc3RhbGxlZC5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbENsb3NlQ29uZmlybWF0aW9uR3VhcmRzKG5vdGljZTogTm90aWNlLCByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFyZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRoZSBvdXRlciBgLm5vdGljZWAgZWxlbWVudCAoYGNvbnRhaW5lckVsYCkgY2FycmllcyBPYnNpZGlhbidzIGRpc21pc3Mtb24tY2xpY2sgaGFuZGxlciBhbmQgdGhlXG4gICAgLy8gUGFkZGluZyBhIHN0cmF5IGNsaWNrIGNvdWxkIGxhbmQgb247IG1hcmsgaXQgc28gdGhlIHN0eWxlc2hlZXQgZHJvcHMgdGhhdCBwYWRkaW5nLlxuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobm90aWNlLmNvbnRhaW5lckVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VSZXF1aXJlc0NvbmZpcm1hdGlvbik7XG4gICAgLy8gU3RvcCBldmVyeSBjbGljayBvbiB0aGUgbm90aWNlIFx1MjAxNCBleGNlcHQgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCBcdTIwMTQgZnJvbSByZWFjaGluZyBPYnNpZGlhbidzXG4gICAgLy8gRGlzbWlzcyBoYW5kbGVyLiBSZWdpc3RlcmVkIGluIHRoZSBjYXB0dXJlIHBoYXNlIG9uIHRoZSBvdXRlcm1vc3QgZWxlbWVudCBzbyBpdCBhbHdheXMgcnVucyBmaXJzdC5cbiAgICAvLyBMZXR0aW5nIGEgY2xpY2sgcmVhY2ggYW4gaW50ZXJhY3RpdmUgY2hpbGQgKGEgYnV0dG9uLCBsaW5rLCB0aGUgY2xvc2UgYnV0dG9uLCBldGMuKSBpcyB3aGF0IGtlZXBzXG4gICAgLy8gSXRzIG93biBoYW5kbGVyIHdvcmtpbmc7IHRoZSBidWJibGUtcGhhc2UgZ3VhcmQgb24gdGhlIGNvbnRlbnQgd3JhcHBlciB0aGVuIHN0b3BzIHRoYXQgY2xpY2sgZnJvbVxuICAgIC8vIEJ1YmJsaW5nIHVwIHRvIE9ic2lkaWFuJ3MgZGlzbWlzcyBoYW5kbGVyLCBzbyB0aGUgbm90aWNlIHN0aWxsIHN0YXlzIG9wZW4uXG4gICAgbm90aWNlLmNvbnRhaW5lckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgaWYgKGV2dC50YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ICYmIGV2dC50YXJnZXQuY2xvc2VzdChJTlRFUkFDVElWRV9FTEVNRU5UX1NFTEVDVE9SKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQZXJtYW5lbnROb3RpY2Uobm90aWNlOiBOb3RpY2UgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5nZXRQZXJtYW5lbnROb3RpY2VzKCk7XG4gICAgaWYgKG5vdGljZSkge1xuICAgICAgbWFwLnNldCh0aGlzLnBsdWdpbk5hbWUsIG5vdGljZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcC5kZWxldGUodGhpcy5wbHVnaW5OYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYSBub3RpY2Ugd2l0aCB0aGUgZ2l2ZW4gZHVyYXRpb24uIEEgcmV1c2FibGUgbm90aWNlIHJlcGxhY2VzIHRoZSBjdXJyZW50IHJldXNhYmxlIG5vdGljZSAoYW5kXG4gICAqIGlzIG9wdGlvbmFsbHkgcmVnaXN0ZXJlZCBhcyB0aGlzIHBsdWdpbidzIHBlcm1hbmVudCBub3RpY2UpOyBhIHN0YW5kYWxvbmUgbm90aWNlIGlzIHRyYWNrZWRcbiAgICogc2VwYXJhdGVseSwgbGVhdmluZyB0aGUgcmV1c2FibGUgc2xvdCB1bnRvdWNoZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgbm90aWNlLlxuICAgKi9cbiAgcHJpdmF0ZSBzaG93Tm90aWNlV2l0aER1cmF0aW9uKHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZVdpdGhEdXJhdGlvblBhcmFtcyk6IE5vdGljZSB7XG4gICAgY29uc3QgeyBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLCBpc1JldXNhYmxlLCBtZXNzYWdlLCBvbkhpZGUsIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24sIHNob3VsZFJlZ2lzdGVyQXNQZXJtYW5lbnQgfSA9IHBhcmFtcztcbiAgICAvLyBPYnNpZGlhbidzIGBOb3RpY2VgIHRyZWF0cyBhbiBvbWl0dGVkIGR1cmF0aW9uIGFzIGl0cyBkZWZhdWx0LCBzbyBtYXAgdGhlIGBudWxsYCBcIm5vIGV4cGxpY2l0XG4gICAgLy8gRHVyYXRpb25cIiB2YWx1ZSB0byBgdW5kZWZpbmVkYC5cbiAgICBjb25zdCBub3RpY2VEdXJhdGlvbkluTWlsbGlzZWNvbmRzID0gZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA/PyB1bmRlZmluZWQ7XG5cbiAgICAvLyBUaGUgY2xvc2UgYnV0dG9uJ3MgY29uZmlybSBoYW5kbGVyIG5lZWRzIHRoZSBgTm90aWNlYCwgd2hpY2ggZG9lcyBub3QgZXhpc3QgdW50aWwgaXQgaXMgYnVpbHQgZnJvbVxuICAgIC8vIFRoaXMgY29udGVudDsgY2FwdHVyZSBpdCBsYXppbHkgdmlhIGEgaG9sZGVyIHJlc29sdmVkIGF0IGNsaWNrIHRpbWUuIFRoZSBnZXR0ZXIgaXMgY3JlYXRlZCBvbmx5XG4gICAgLy8gRm9yIGEgaGFyZC10by1jbG9zZSBub3RpY2UgXHUyMDE0IHRoZSBvbmx5IGtpbmQgdGhhdCBoYXMgYSBjbG9zZSBidXR0b24uXG4gICAgbGV0IGJ1aWx0Tm90aWNlOiBOb3RpY2UgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5idWlsZE5vdGljZUNvbnRlbnQobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcz4oe1xuICAgICAgZ2V0Tm90aWNlOiByZXF1aXJlc0Nsb3NlQ29uZmlybWF0aW9uID8gKCk6IE5vdGljZSB8IG51bGwgPT4gYnVpbHROb3RpY2UgOiB1bmRlZmluZWQsXG4gICAgICBtZXNzYWdlLFxuICAgICAgcmVxdWlyZXNDbG9zZUNvbmZpcm1hdGlvblxuICAgIH0pKTtcblxuICAgIGlmICghaXNSZXVzYWJsZSkge1xuICAgICAgYnVpbHROb3RpY2UgPSBuZXcgTm90aWNlKGNvbnRlbnQsIG5vdGljZUR1cmF0aW9uSW5NaWxsaXNlY29uZHMpO1xuICAgICAgdGhpcy5pbnN0YWxsQ2xvc2VDb25maXJtYXRpb25HdWFyZHMoYnVpbHROb3RpY2UsIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pO1xuICAgICAgdGhpcy53aXJlT25IaWRlKGJ1aWx0Tm90aWNlLCBvbkhpZGUpO1xuICAgICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5hZGQoYnVpbHROb3RpY2UpO1xuICAgICAgcmV0dXJuIGJ1aWx0Tm90aWNlO1xuICAgIH1cblxuICAgIHRoaXMubm90aWNlPy5oaWRlKCk7XG4gICAgYnVpbHROb3RpY2UgPSBuZXcgTm90aWNlKGNvbnRlbnQsIG5vdGljZUR1cmF0aW9uSW5NaWxsaXNlY29uZHMpO1xuICAgIHRoaXMubm90aWNlID0gYnVpbHROb3RpY2U7XG4gICAgdGhpcy5pbnN0YWxsQ2xvc2VDb25maXJtYXRpb25HdWFyZHMoYnVpbHROb3RpY2UsIHJlcXVpcmVzQ2xvc2VDb25maXJtYXRpb24pO1xuICAgIHRoaXMud2lyZU9uSGlkZShidWlsdE5vdGljZSwgb25IaWRlKTtcblxuICAgIGlmIChzaG91bGRSZWdpc3RlckFzUGVybWFuZW50KSB7XG4gICAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShidWlsdE5vdGljZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0UGVybWFuZW50Tm90aWNlKG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbHROb3RpY2U7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHMgYSBub3RpY2UncyBgaGlkZWAgc28gdGhlIGdpdmVuIGNhbGxiYWNrIHJ1bnMgdGhlIGZpcnN0IHRpbWUgdGhlIG5vdGljZSBpcyBoaWRkZW4gXHUyMDE0IGJ5IHRoZVxuICAgKiB1c2VyLCBieSBhIHJlcGxhY2luZyBub3RpY2UsIGJ5IGl0cyBkdXJhdGlvbiBlbGFwc2luZywgb3Igb24gdW5sb2FkLiBEb2VzIG5vdGhpbmcgd2hlbiBubyBjYWxsYmFja1xuICAgKiBpcyBnaXZlbi5cbiAgICpcbiAgICogQHBhcmFtIG5vdGljZSAtIFRoZSBub3RpY2Ugd2hvc2UgYGhpZGVgIHRvIHdyYXAuXG4gICAqIEBwYXJhbSBvbkhpZGUgLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIG9uIHRoZSBmaXJzdCBoaWRlLCBvciBgdW5kZWZpbmVkYCB0byBza2lwIHdyYXBwaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlT25IaWRlKG5vdGljZTogTm90aWNlLCBvbkhpZGU6ICgoKSA9PiBQcm9taXNhYmxlPHZvaWQ+KSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghb25IaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFJ1biBgb25IaWRlYCB0aGUgZmlyc3QgdGltZSB0aGUgbm90aWNlIGlzIGhpZGRlbi4gQSBgb25jZWAgcGF0Y2ggb24gYGhpZGVgIGludGVyY2VwdHMgZXhhY3RseSBvbmVcbiAgICAvLyBDYWxsIHRoZW4gdW5pbnN0YWxscyBpdHNlbGYgKHVubG9hZGluZyB0aGlzIGRlZGljYXRlZCBjb21wb25lbnQpLCBzbyB0aGVyZSBpcyBubyBtYW51YWxcbiAgICAvLyBTaW5nbGUtZmlyZSBib29ra2VlcGluZyBhbmQgbm8gbGluZ2VyaW5nIHBhdGNoIG9uIHRoZSB0cmFuc2llbnQgbm90aWNlLlxuICAgIGNvbnN0IHBhdGNoQ29tcG9uZW50ID0gbmV3IE1vbmtleUFyb3VuZENvbXBvbmVudCgpO1xuICAgIHBhdGNoQ29tcG9uZW50LmxvYWQoKTtcbiAgICBwYXRjaENvbXBvbmVudC5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgIG1ldGhvZE5hbWU6ICdoaWRlJyxcbiAgICAgIG9iajogbm90aWNlLFxuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2sgfSkgPT4ge1xuICAgICAgICBmYWxsYmFjaygpO1xuICAgICAgICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgb25IaWRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSxzQkFJTztBQUlQLG1CQUFrQztBQUNsQywwQkFBNEM7QUFDNUMsc0NBQXlDO0FBQ3pDLHlCQUFrQztBQUNsQyw0QkFBNkI7QUFDN0IsdUJBQXlCO0FBQ3pCLGtCQUFrQjtBQUNsQixxQkFBd0I7QUFDeEIsNEJBQW9DO0FBQ3BDLDBCQUE0QjtBQUM1QixxQ0FBc0M7QUFFdEMsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSw0Q0FBNEM7QUFDbEQsTUFBTSw0Q0FBNEM7QUFJbEQsTUFBTSwrQkFBK0I7QUFrSjlCLE1BQU0sOEJBQThCLGdDQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJbEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUEsRUFFWCxTQUF3QjtBQUFBLEVBQ2YsNEJBQTRCLG9CQUFJLElBQWdCO0FBQUEsRUFDaEQsb0JBQW9CLG9CQUFJLElBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPOUMsWUFBWSxRQUFnRDtBQUNqRSxVQUFNO0FBQ04sU0FBSyxNQUFNLE9BQU87QUFDbEIsU0FBSyxhQUFhLE9BQU87QUFB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
@@ -200,8 +200,9 @@ export declare class PluginNoticeComponent extends ComponentEx {
200
200
  private getPermanentNotices;
201
201
  /**
202
202
  * Makes a notice hard to close: marks its outer element (so the CSS neutralizes its padding) and
203
- * installs a capture-phase click guard that stops every click except on the close button from
204
- * reaching Obsidian's own dismiss handler.
203
+ * installs a capture-phase click guard that stops every click except on an interactive element (a
204
+ * button, link, the close button, etc.) from reaching Obsidian's own dismiss handler — so an
205
+ * interactive child's own handler still runs while a stray click cannot dismiss the notice.
205
206
  *
206
207
  * @param notice - The notice to guard.
207
208
  * @param requiresCloseConfirmation - Whether the notice requires close confirmation; when `false`,
@@ -161,7 +161,7 @@ async function openDemoVault(params) {
161
161
  return;
162
162
  }
163
163
  const currentVersion = manifest.version;
164
- const latestVersion = await getLatestReleaseVersion(repo);
164
+ const latestVersion = await (0, import_community_plugins.getLatestReleaseVersion)(repo);
165
165
  let versionToOpen;
166
166
  if ((0, import_compare_versions.compareVersions)(currentVersion, latestVersion) >= 0) {
167
167
  versionToOpen = currentVersion;
@@ -227,13 +227,8 @@ async function downloadAndExtractDemoVault(params) {
227
227
  zip.extractAllTo(cacheDir, true);
228
228
  return true;
229
229
  }
230
- async function getLatestReleaseVersion(repo) {
231
- const response = await (0, import_obsidian.requestUrl)(`https://api.github.com/repos/${repo}/releases/latest`);
232
- const release = response.json;
233
- return release.tag_name;
234
- }
235
230
  // Annotate the CommonJS export names for ESM import in node:
236
231
  0 && (module.exports = {
237
232
  openDemoVault
238
233
  });
239
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2Rlc2t0b3AtZGVtby12YXVsdC1vcGVuZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEb3dubG9hZHMgYW5kIG9wZW5zIGEgcGx1Z2luJ3Mgc2hpcHBlZCBkZW1vIHZhdWx0IGluIGEgbmV3IE9ic2lkaWFuIHdpbmRvdyAoZGVza3RvcCBvbmx5KS5cbiAqXG4gKiBBIHBsdWdpbiBjYW4gYXR0YWNoIGEgYGRlbW8tdmF1bHQtPHZlcnNpb24+LnppcGAgYXJjaGl2ZSB0byBlYWNoIEdpdEh1YiByZWxlYXNlIChzZWVcbiAqIGBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0YCBpbiBgc2NyaXB0LXV0aWxzL2RlbW8tdmF1bHQudHNgKS4gVGhpcyByZXNvbHZlcyB0aGUgcGx1Z2luJ3MgcmVwb3NpdG9yeVxuICogZnJvbSBPYnNpZGlhbidzIGNvbW11bml0eSByZWdpc3RyeSwgZG93bmxvYWRzIHRoZSBhcmNoaXZlIGZvciB0aGUgY2hvc2VuIHZlcnNpb24sIGV4dHJhY3RzIGl0IHRvIGFcbiAqIHBlci12ZXJzaW9uIGNhY2hlIGZvbGRlciB1bmRlciB0aGUgT1MgdGVtcCBkaXJlY3RvcnksIGFuZCBvcGVucyB0aGF0IGZvbGRlciBhcyBhIHZhdWx0IGluIGEgbmV3XG4gKiB3aW5kb3cuIFdoZW4gdGhlIGluc3RhbGxlZCBwbHVnaW4gdmVyc2lvbiBpcyBiZWhpbmQgdGhlIGxhdGVzdCByZWxlYXNlLCB0aGUgdXNlciBpcyBvZmZlcmVkIGEgY2hvaWNlXG4gKiBiZXR3ZWVuIHRoZSB0d28gdmVyc2lvbnMuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFBsdWdpbk1hbmlmZXN0XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IEFkbVppcCBmcm9tICdhZG0temlwJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzIC0tIERlc2t0b3Atb25seSBmZWF0dXJlIGdhdGVkIGJ5IGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgOyB0aGUgY29tbWFuZCBpcyBoaWRkZW4gb24gbW9iaWxlIHNvIHRoaXMgTm9kZSBBUEkgaXMgbmV2ZXIgcmVhY2hlZCB0aGVyZS5cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyAtLSBEZXNrdG9wLW9ubHkgZmVhdHVyZSBnYXRlZCBieSBgUGxhdGZvcm0uaXNEZXNrdG9wQXBwYDsgdGhlIGNvbW1hbmQgaXMgaGlkZGVuIG9uIG1vYmlsZSBzbyB0aGlzIE5vZGUgQVBJIGlzIG5ldmVyIHJlYWNoZWQgdGhlcmUuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMgLS0gRGVza3RvcC1vbmx5IGZlYXR1cmUgZ2F0ZWQgYnkgYFBsYXRmb3JtLmlzRGVza3RvcEFwcGA7IHRoZSBjb21tYW5kIGlzIGhpZGRlbiBvbiBtb2JpbGUgc28gdGhpcyBOb2RlIEFQSSBpcyBuZXZlciByZWFjaGVkIHRoZXJlLlxuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7IGdldENvbW11bml0eVBsdWdpblJlcG8gfSBmcm9tICcuL2NvbW11bml0eS1wbHVnaW5zLnRzJztcbmltcG9ydCB7IHNlbGVjdE9wdGlvbiB9IGZyb20gJy4vbW9kYWxzL3NlbGVjdC1vcHRpb24udHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBvcGVuRGVtb1ZhdWx0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuRGVtb1ZhdWx0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIG1hbmlmZXN0IG9mIHRoZSBwbHVnaW4gd2hvc2UgZGVtbyB2YXVsdCBpcyBvcGVuZWQuIEl0cyBgaWRgIGxvY2F0ZXMgdGhlIEdpdEh1YiByZXBvc2l0b3J5LCBpdHNcbiAgICogYHZlcnNpb25gIHNlbGVjdHMgdGhlIGFyY2hpdmUsIGFuZCBpdHMgYG5hbWVgIGxhYmVscyB0aGUgbm90aWNlcyBhbmQgdGhlIHZlcnNpb24tY2hvaWNlIGRpYWxvZy5cbiAgICovXG4gIHJlYWRvbmx5IG1hbmlmZXN0OiBQbHVnaW5NYW5pZmVzdDtcblxuICAvKipcbiAgICogVGhlIG5vdGljZSBjb21wb25lbnQgdXNlZCB0byByZXBvcnQgcHJvYmxlbXMgKHBsdWdpbiBub3QgaW4gdGhlIHJlZ2lzdHJ5LCBtaXNzaW5nIGFyY2hpdmUpLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG59XG5cbmludGVyZmFjZSBEb3dubG9hZEFuZEV4dHJhY3REZW1vVmF1bHRQYXJhbXMge1xuICByZWFkb25seSBjYWNoZURpcjogc3RyaW5nO1xuICByZWFkb25seSBtYW5pZmVzdDogUGx1Z2luTWFuaWZlc3Q7XG4gIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2Uge1xuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2AuXG4gICAqL1xuICByZWFkb25seSB0YWdfbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBERU1PX1ZBVUxUU19DQUNIRV9GT0xERVIgPSAnb2JzaWRpYW4tZGVtby12YXVsdHMnO1xuY29uc3QgSFRUUF9TVEFUVVNfT0sgPSAyMDA7XG5cbi8qKlxuICogRG93bmxvYWRzIGFuZCBvcGVucyB0aGUgcGx1Z2luJ3MgZGVtbyB2YXVsdCBpbiBhIG5ldyBPYnNpZGlhbiB3aW5kb3cuIERlc2t0b3Agb25seS5cbiAqXG4gKiBJZiB0aGUgaW5zdGFsbGVkIHBsdWdpbiB2ZXJzaW9uIGlzIHRoZSBsYXRlc3QgKG9yIG5ld2VyKSwgaXRzIGRlbW8gdmF1bHQgb3BlbnMgZGlyZWN0bHk7IG90aGVyd2lzZVxuICogdGhlIHVzZXIgY2hvb3NlcyBiZXR3ZWVuIHRoZSBsYXRlc3QgYW5kIHRoZSBjdXJyZW50bHktaW5zdGFsbGVkIHZlcnNpb24uIFRoZSBjaG9zZW4gdmVyc2lvbidzXG4gKiBhcmNoaXZlIGlzIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZCBvbmNlLCB0aGVuIHJldXNlZCBmcm9tIGEgcGVyLXZlcnNpb24gY2FjaGUgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIE9wZW5EZW1vVmF1bHRQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSB2YXVsdCBoYXMgYmVlbiBvcGVuZWQsIG9yIG9uY2UgdGhlIG9wZXJhdGlvbiBoYXNcbiAqIGJlZW4gcmVwb3J0ZWQgYXMgbm90IHBvc3NpYmxlIChub3RpY2Ugc2hvd24pIG9yIGNhbmNlbGxlZCBieSB0aGUgdXNlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5EZW1vVmF1bHQocGFyYW1zOiBPcGVuRGVtb1ZhdWx0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbWFuaWZlc3QsXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50XG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgcmVwbyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpblJlcG8obWFuaWZlc3QuaWQpO1xuICBpZiAoIXJlcG8pIHtcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZShgQ291bGQgbm90IGZpbmQgcGx1Z2luICR7bWFuaWZlc3QubmFtZX0gaW4gdGhlIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gbWFuaWZlc3QudmVyc2lvbjtcbiAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG8pO1xuXG4gIGxldCB2ZXJzaW9uVG9PcGVuOiBzdHJpbmc7XG4gIGlmIChjb21wYXJlVmVyc2lvbnMoY3VycmVudFZlcnNpb24sIGxhdGVzdFZlcnNpb24pID49IDApIHtcbiAgICB2ZXJzaW9uVG9PcGVuID0gY3VycmVudFZlcnNpb247XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2hvc2VuVmVyc2lvbiA9IGF3YWl0IHNlbGVjdE9wdGlvbjxudWxsIHwgc3RyaW5nPih7XG4gICAgICBhcHAsXG4gICAgICBtZXNzYWdlOiBgQ3VycmVudCB2ZXJzaW9uIG9mIHBsdWdpbiAke21hbmlmZXN0Lm5hbWV9IHYke2N1cnJlbnRWZXJzaW9ufSBpcyBub3QgdGhlIGxhdGVzdCAodiR7bGF0ZXN0VmVyc2lvbn0pYCxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlzQ3RhOiB0cnVlLFxuICAgICAgICAgIHRleHQ6IGBPcGVuIGRlbW8gdmF1bHQgZm9yIGxhdGVzdCB2ZXJzaW9uICh2JHtsYXRlc3RWZXJzaW9ufSlgLFxuICAgICAgICAgIHZhbHVlOiBsYXRlc3RWZXJzaW9uXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBgT3BlbiBkZW1vIHZhdWx0IGZvciBjdXJyZW50IHZlcnNpb24gKHYke2N1cnJlbnRWZXJzaW9ufSlgLFxuICAgICAgICAgIHZhbHVlOiBjdXJyZW50VmVyc2lvblxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ0NhbmNlbCcsXG4gICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHRpdGxlOiBtYW5pZmVzdC5uYW1lXG4gICAgfSk7XG4gICAgaWYgKGNob3NlblZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmVyc2lvblRvT3BlbiA9IGNob3NlblZlcnNpb247XG4gIH1cblxuICBjb25zdCBjYWNoZURpciA9IGpvaW4odG1wZGlyKCksIERFTU9fVkFVTFRTX0NBQ0hFX0ZPTERFUiwgbWFuaWZlc3QuaWQsIHZlcnNpb25Ub09wZW4pO1xuICBpZiAoIWV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgY29uc3QgaXNFeHRyYWN0ZWQgPSBhd2FpdCBkb3dubG9hZEFuZEV4dHJhY3REZW1vVmF1bHQoe1xuICAgICAgY2FjaGVEaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICAgIHJlcG8sXG4gICAgICB2ZXJzaW9uOiB2ZXJzaW9uVG9PcGVuXG4gICAgfSk7XG4gICAgaWYgKCFpc0V4dHJhY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtb3BlbicsIGNhY2hlRGlyLCBmYWxzZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdChwYXJhbXM6IERvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdFBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7XG4gICAgY2FjaGVEaXIsXG4gICAgbWFuaWZlc3QsXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LFxuICAgIHJlcG8sXG4gICAgdmVyc2lvblxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGFzc2V0VXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3JlcG99L3JlbGVhc2VzL2Rvd25sb2FkLyR7dmVyc2lvbn0vZGVtby12YXVsdC0ke3ZlcnNpb259LnppcGA7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybCh7XG4gICAgdGhyb3c6IGZhbHNlLFxuICAgIHVybDogYXNzZXRVcmxcbiAgfSk7XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEhUVFBfU1RBVFVTX09LKSB7XG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UoYE5vIGRlbW8gdmF1bHQgaXMgYXZhaWxhYmxlIGZvciBwbHVnaW4gJHttYW5pZmVzdC5uYW1lfSB2JHt2ZXJzaW9ufS5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKEJ1ZmZlci5mcm9tKHJlc3BvbnNlLmFycmF5QnVmZmVyKSk7XG4gIHppcC5leHRyYWN0QWxsVG8oY2FjaGVEaXIsIHRydWUpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0UmVsZWFzZVZlcnNpb24ocmVwbzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vcmVsZWFzZXMvbGF0ZXN0YCk7XG4gIGNvbnN0IHJlbGVhc2UgPSByZXNwb25zZS5qc29uIGFzIEdpdEh1YlJlbGVhc2U7XG4gIHJldHVybiByZWxlYXNlLnRhZ19uYW1lO1xufVxuIl0sCiAgIm1hcHBp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
234
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2Rlc2t0b3AtZGVtby12YXVsdC1vcGVuZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEb3dubG9hZHMgYW5kIG9wZW5zIGEgcGx1Z2luJ3Mgc2hpcHBlZCBkZW1vIHZhdWx0IGluIGEgbmV3IE9ic2lkaWFuIHdpbmRvdyAoZGVza3RvcCBvbmx5KS5cbiAqXG4gKiBBIHBsdWdpbiBjYW4gYXR0YWNoIGEgYGRlbW8tdmF1bHQtPHZlcnNpb24+LnppcGAgYXJjaGl2ZSB0byBlYWNoIEdpdEh1YiByZWxlYXNlIChzZWVcbiAqIGBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0YCBpbiBgc2NyaXB0LXV0aWxzL2RlbW8tdmF1bHQudHNgKS4gVGhpcyByZXNvbHZlcyB0aGUgcGx1Z2luJ3MgcmVwb3NpdG9yeVxuICogZnJvbSBPYnNpZGlhbidzIGNvbW11bml0eSByZWdpc3RyeSwgZG93bmxvYWRzIHRoZSBhcmNoaXZlIGZvciB0aGUgY2hvc2VuIHZlcnNpb24sIGV4dHJhY3RzIGl0IHRvIGFcbiAqIHBlci12ZXJzaW9uIGNhY2hlIGZvbGRlciB1bmRlciB0aGUgT1MgdGVtcCBkaXJlY3RvcnksIGFuZCBvcGVucyB0aGF0IGZvbGRlciBhcyBhIHZhdWx0IGluIGEgbmV3XG4gKiB3aW5kb3cuIFdoZW4gdGhlIGluc3RhbGxlZCBwbHVnaW4gdmVyc2lvbiBpcyBiZWhpbmQgdGhlIGxhdGVzdCByZWxlYXNlLCB0aGUgdXNlciBpcyBvZmZlcmVkIGEgY2hvaWNlXG4gKiBiZXR3ZWVuIHRoZSB0d28gdmVyc2lvbnMuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFBsdWdpbk1hbmlmZXN0XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IEFkbVppcCBmcm9tICdhZG0temlwJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzIC0tIERlc2t0b3Atb25seSBmZWF0dXJlIGdhdGVkIGJ5IGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgOyB0aGUgY29tbWFuZCBpcyBoaWRkZW4gb24gbW9iaWxlIHNvIHRoaXMgTm9kZSBBUEkgaXMgbmV2ZXIgcmVhY2hlZCB0aGVyZS5cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyAtLSBEZXNrdG9wLW9ubHkgZmVhdHVyZSBnYXRlZCBieSBgUGxhdGZvcm0uaXNEZXNrdG9wQXBwYDsgdGhlIGNvbW1hbmQgaXMgaGlkZGVuIG9uIG1vYmlsZSBzbyB0aGlzIE5vZGUgQVBJIGlzIG5ldmVyIHJlYWNoZWQgdGhlcmUuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMgLS0gRGVza3RvcC1vbmx5IGZlYXR1cmUgZ2F0ZWQgYnkgYFBsYXRmb3JtLmlzRGVza3RvcEFwcGA7IHRoZSBjb21tYW5kIGlzIGhpZGRlbiBvbiBtb2JpbGUgc28gdGhpcyBOb2RlIEFQSSBpcyBuZXZlciByZWFjaGVkIHRoZXJlLlxuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7XG4gIGdldENvbW11bml0eVBsdWdpblJlcG8sXG4gIGdldExhdGVzdFJlbGVhc2VWZXJzaW9uXG59IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbnMudHMnO1xuaW1wb3J0IHsgc2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9tb2RhbHMvc2VsZWN0LW9wdGlvbi50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIG9wZW5EZW1vVmF1bHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5EZW1vVmF1bHRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFuaWZlc3Qgb2YgdGhlIHBsdWdpbiB3aG9zZSBkZW1vIHZhdWx0IGlzIG9wZW5lZC4gSXRzIGBpZGAgbG9jYXRlcyB0aGUgR2l0SHViIHJlcG9zaXRvcnksIGl0c1xuICAgKiBgdmVyc2lvbmAgc2VsZWN0cyB0aGUgYXJjaGl2ZSwgYW5kIGl0cyBgbmFtZWAgbGFiZWxzIHRoZSBub3RpY2VzIGFuZCB0aGUgdmVyc2lvbi1jaG9pY2UgZGlhbG9nLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3Q6IFBsdWdpbk1hbmlmZXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgbm90aWNlIGNvbXBvbmVudCB1c2VkIHRvIHJlcG9ydCBwcm9ibGVtcyAocGx1Z2luIG5vdCBpbiB0aGUgcmVnaXN0cnksIG1pc3NpbmcgYXJjaGl2ZSkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IFBsdWdpbk5vdGljZUNvbXBvbmVudDtcbn1cblxuaW50ZXJmYWNlIERvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdFBhcmFtcyB7XG4gIHJlYWRvbmx5IGNhY2hlRGlyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1hbmlmZXN0OiBQbHVnaW5NYW5pZmVzdDtcbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG5jb25zdCBERU1PX1ZBVUxUU19DQUNIRV9GT0xERVIgPSAnb2JzaWRpYW4tZGVtby12YXVsdHMnO1xuY29uc3QgSFRUUF9TVEFUVVNfT0sgPSAyMDA7XG5cbi8qKlxuICogRG93bmxvYWRzIGFuZCBvcGVucyB0aGUgcGx1Z2luJ3MgZGVtbyB2YXVsdCBpbiBhIG5ldyBPYnNpZGlhbiB3aW5kb3cuIERlc2t0b3Agb25seS5cbiAqXG4gKiBJZiB0aGUgaW5zdGFsbGVkIHBsdWdpbiB2ZXJzaW9uIGlzIHRoZSBsYXRlc3QgKG9yIG5ld2VyKSwgaXRzIGRlbW8gdmF1bHQgb3BlbnMgZGlyZWN0bHk7IG90aGVyd2lzZVxuICogdGhlIHVzZXIgY2hvb3NlcyBiZXR3ZWVuIHRoZSBsYXRlc3QgYW5kIHRoZSBjdXJyZW50bHktaW5zdGFsbGVkIHZlcnNpb24uIFRoZSBjaG9zZW4gdmVyc2lvbidzXG4gKiBhcmNoaXZlIGlzIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZCBvbmNlLCB0aGVuIHJldXNlZCBmcm9tIGEgcGVyLXZlcnNpb24gY2FjaGUgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIE9wZW5EZW1vVmF1bHRQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSB2YXVsdCBoYXMgYmVlbiBvcGVuZWQsIG9yIG9uY2UgdGhlIG9wZXJhdGlvbiBoYXNcbiAqIGJlZW4gcmVwb3J0ZWQgYXMgbm90IHBvc3NpYmxlIChub3RpY2Ugc2hvd24pIG9yIGNhbmNlbGxlZCBieSB0aGUgdXNlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5EZW1vVmF1bHQocGFyYW1zOiBPcGVuRGVtb1ZhdWx0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbWFuaWZlc3QsXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50XG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgcmVwbyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpblJlcG8obWFuaWZlc3QuaWQpO1xuICBpZiAoIXJlcG8pIHtcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZShgQ291bGQgbm90IGZpbmQgcGx1Z2luICR7bWFuaWZlc3QubmFtZX0gaW4gdGhlIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gbWFuaWZlc3QudmVyc2lvbjtcbiAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG8pO1xuXG4gIGxldCB2ZXJzaW9uVG9PcGVuOiBzdHJpbmc7XG4gIGlmIChjb21wYXJlVmVyc2lvbnMoY3VycmVudFZlcnNpb24sIGxhdGVzdFZlcnNpb24pID49IDApIHtcbiAgICB2ZXJzaW9uVG9PcGVuID0gY3VycmVudFZlcnNpb247XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2hvc2VuVmVyc2lvbiA9IGF3YWl0IHNlbGVjdE9wdGlvbjxudWxsIHwgc3RyaW5nPih7XG4gICAgICBhcHAsXG4gICAgICBtZXNzYWdlOiBgQ3VycmVudCB2ZXJzaW9uIG9mIHBsdWdpbiAke21hbmlmZXN0Lm5hbWV9IHYke2N1cnJlbnRWZXJzaW9ufSBpcyBub3QgdGhlIGxhdGVzdCAodiR7bGF0ZXN0VmVyc2lvbn0pYCxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlzQ3RhOiB0cnVlLFxuICAgICAgICAgIHRleHQ6IGBPcGVuIGRlbW8gdmF1bHQgZm9yIGxhdGVzdCB2ZXJzaW9uICh2JHtsYXRlc3RWZXJzaW9ufSlgLFxuICAgICAgICAgIHZhbHVlOiBsYXRlc3RWZXJzaW9uXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBgT3BlbiBkZW1vIHZhdWx0IGZvciBjdXJyZW50IHZlcnNpb24gKHYke2N1cnJlbnRWZXJzaW9ufSlgLFxuICAgICAgICAgIHZhbHVlOiBjdXJyZW50VmVyc2lvblxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ0NhbmNlbCcsXG4gICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHRpdGxlOiBtYW5pZmVzdC5uYW1lXG4gICAgfSk7XG4gICAgaWYgKGNob3NlblZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmVyc2lvblRvT3BlbiA9IGNob3NlblZlcnNpb247XG4gIH1cblxuICBjb25zdCBjYWNoZURpciA9IGpvaW4odG1wZGlyKCksIERFTU9fVkFVTFRTX0NBQ0hFX0ZPTERFUiwgbWFuaWZlc3QuaWQsIHZlcnNpb25Ub09wZW4pO1xuICBpZiAoIWV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgY29uc3QgaXNFeHRyYWN0ZWQgPSBhd2FpdCBkb3dubG9hZEFuZEV4dHJhY3REZW1vVmF1bHQoe1xuICAgICAgY2FjaGVEaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICAgIHJlcG8sXG4gICAgICB2ZXJzaW9uOiB2ZXJzaW9uVG9PcGVuXG4gICAgfSk7XG4gICAgaWYgKCFpc0V4dHJhY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtb3BlbicsIGNhY2hlRGlyLCBmYWxzZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdChwYXJhbXM6IERvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdFBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7XG4gICAgY2FjaGVEaXIsXG4gICAgbWFuaWZlc3QsXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LFxuICAgIHJlcG8sXG4gICAgdmVyc2lvblxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGFzc2V0VXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3JlcG99L3JlbGVhc2VzL2Rvd25sb2FkLyR7dmVyc2lvbn0vZGVtby12YXVsdC0ke3ZlcnNpb259LnppcGA7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybCh7XG4gICAgdGhyb3c6IGZhbHNlLFxuICAgIHVybDogYXNzZXRVcmxcbiAgfSk7XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEhUVFBfU1RBVFVTX09LKSB7XG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UoYE5vIGRlbW8gdmF1bHQgaXMgYXZhaWxhYmxlIGZvciBwbHVnaW4gJHttYW5pZmVzdC5uYW1lfSB2JHt2ZXJzaW9ufS5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKEJ1ZmZlci5mcm9tKHJlc3BvbnNlLmFycmF5QnVmZmVyKSk7XG4gIHppcC5leHRyYWN0QWxsVG8oY2FjaGVEaXIsIHRydWUpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEscUJBQW1CO0FBQ25CLDhCQUFnQztBQUVoQyx5QkFBdUI7QUFFdkIscUJBQTJCO0FBRTNCLHFCQUF1QjtBQUN2QixzQkFBMkI7QUFJM0Isa0JBQXFCO0FBQ3JCLCtCQUdPO0FBQ1AsMkJBQTZCO0FBK0I3QixNQUFNLDJCQUEyQjtBQUNqQyxNQUFNLGlCQUFpQjtBQWF2QixlQUFzQixjQUFjLFFBQTRDO0FBQzlFLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixRQUFNLE9BQU8sVUFBTSxpREFBdUIsU0FBUyxFQUFFO0FBQ3JELE1BQUksQ0FBQyxNQUFNO0FBQ1QsMEJBQXNCLFdBQVcseUJBQXlCLFNBQVMsSUFBSSxxQ0FBcUM7QUFDNUc7QUFBQSxFQUNGO0FBRUEsUUFBTSxpQkFBaUIsU0FBUztBQUNoQyxRQUFNLGdCQUFnQixVQUFNLGtEQUF3QixJQUFJO0FBRXhELE1BQUk7QUFDSixVQUFJLHlDQUFnQixnQkFBZ0IsYUFBYSxLQUFLLEdBQUc7QUFDdkQsb0JBQWdCO0FBQUEsRUFDbEIsT0FBTztBQUNMLFVBQU0sZ0JBQWdCLFVBQU0sbUNBQTRCO0FBQUEsTUFDdEQ7QUFBQSxNQUNBLFNBQVMsNkJBQTZCLFNBQVMsSUFBSSxLQUFLLGNBQWMsd0JBQXdCLGFBQWE7QUFBQSxNQUMzRyxTQUFTO0FBQUEsUUFDUDtBQUFBLFVBQ0UsT0FBTztBQUFBLFVBQ1AsTUFBTSx3Q0FBd0MsYUFBYTtBQUFBLFVBQzNELE9BQU87QUFBQSxRQUNUO0FBQUEsUUFDQTtBQUFBLFVBQ0UsTUFBTSx5Q0FBeUMsY0FBYztBQUFBLFVBQzdELE9BQU87QUFBQSxRQUNUO0FBQUEsUUFDQTtBQUFBLFVBQ0UsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBQUEsTUFDQSxPQUFPLFNBQVM7QUFBQSxJQUNsQixDQUFDO0FBQ0QsUUFBSSxrQkFBa0IsTUFBTTtBQUMxQjtBQUFBLElBQ0Y7QUFDQSxvQkFBZ0I7QUFBQSxFQUNsQjtBQUVBLFFBQU0sZUFBVyxzQkFBSyx1QkFBTyxHQUFHLDBCQUEwQixTQUFTLElBQUksYUFBYTtBQUNwRixNQUFJLEtBQUMsMkJBQVcsUUFBUSxHQUFHO0FBQ3pCLFVBQU0sY0FBYyxNQUFNLDRCQUE0QjtBQUFBLE1BQ3BEO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxTQUFTO0FBQUEsSUFDWCxDQUFDO0FBQ0QsUUFBSSxDQUFDLGFBQWE7QUFDaEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFNBQU8sU0FBUyxZQUFZLFNBQVMsY0FBYyxVQUFVLEtBQUs7QUFDcEU7QUFFQSxlQUFlLDRCQUE0QixRQUE2RDtBQUN0RyxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixRQUFNLFdBQVcsc0JBQXNCLElBQUksc0JBQXNCLE9BQU8sZUFBZSxPQUFPO0FBQzlGLFFBQU0sV0FBVyxVQUFNLDRCQUFXO0FBQUEsSUFDaEMsT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLEVBQ1AsQ0FBQztBQUNELE1BQUksU0FBUyxXQUFXLGdCQUFnQjtBQUN0QywwQkFBc0IsV0FBVyx5Q0FBeUMsU0FBUyxJQUFJLEtBQUssT0FBTyxHQUFHO0FBQ3RHLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxNQUFNLElBQUksZUFBQUEsUUFBTywwQkFBTyxLQUFLLFNBQVMsV0FBVyxDQUFDO0FBQ3hELE1BQUksYUFBYSxVQUFVLElBQUk7QUFDL0IsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJBZG1aaXAiXQp9Cg==
@@ -0,0 +1,165 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function initCjs() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ const globalThisRecord = globalThis;
9
+ globalThisRecord['__name'] ??= name;
10
+ const originalRequire = require;
11
+ if (originalRequire && !originalRequire.__isPatched) {
12
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
13
+ require = Object.assign(
14
+ (id) => requirePatched(id),
15
+ originalRequire,
16
+ {
17
+ __isPatched: true
18
+ }
19
+ );
20
+ }
21
+
22
+ const newFuncs = {
23
+ __extractDefault() {
24
+ return extractDefault;
25
+ },
26
+ process() {
27
+ const browserProcess = {
28
+ browser: true,
29
+ cwd() {
30
+ return '/';
31
+ },
32
+ env: {},
33
+ platform: 'android'
34
+ };
35
+ return browserProcess;
36
+ }
37
+ };
38
+
39
+ for (const key of Object.keys(newFuncs)) {
40
+ globalThisRecord[key] ??= newFuncs[key]?.();
41
+ }
42
+
43
+ function name(obj) {
44
+ return obj;
45
+ }
46
+
47
+ function extractDefault(module) {
48
+ return module && module.__esModule && 'default' in module ? module.default : module;
49
+ }
50
+
51
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
+ 'obsidian',
53
+ '@codemirror/autocomplete',
54
+ '@codemirror/collab',
55
+ '@codemirror/commands',
56
+ '@codemirror/language',
57
+ '@codemirror/lint',
58
+ '@codemirror/search',
59
+ '@codemirror/state',
60
+ '@codemirror/text',
61
+ '@codemirror/view',
62
+ '@lezer/common',
63
+ '@lezer/lr',
64
+ '@lezer/highlight'];
65
+
66
+
67
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
68
+ '@codemirror/closebrackets',
69
+ '@codemirror/comment',
70
+ '@codemirror/fold',
71
+ '@codemirror/gutter',
72
+ '@codemirror/highlight',
73
+ '@codemirror/history',
74
+ '@codemirror/matchbrackets',
75
+ '@codemirror/panel',
76
+ '@codemirror/rangeset',
77
+ '@codemirror/rectangular-selection',
78
+ '@codemirror/stream-parser',
79
+ '@codemirror/tooltip'];
80
+
81
+
82
+ function requirePatched(id) {
83
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
84
+ return originalRequire?.(id);
85
+ }
86
+
87
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
88
+ if (globalThis.app.isMobile) {
89
+ if (id === 'process' || id === 'node:process') {
90
+ // eslint-disable-next-line no-console -- Valid usage.
91
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
93
+ return globalThis.process;
94
+ }
95
+ } else {
96
+ const module = originalRequire?.(id);
97
+ if (module) {
98
+ return extractDefault(module);
99
+ }
100
+ }
101
+
102
+ // eslint-disable-next-line no-console -- Valid usage.
103
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
104
+ return {};
105
+ }
106
+ })();
107
+
108
+ "use strict";
109
+ var __defProp = Object.defineProperty;
110
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
111
+ var __getOwnPropNames = Object.getOwnPropertyNames;
112
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
113
+ var __export = (target, all) => {
114
+ for (var name in all)
115
+ __defProp(target, name, { get: all[name], enumerable: true });
116
+ };
117
+ var __copyProps = (to, from, except, desc) => {
118
+ if (from && typeof from === "object" || typeof from === "function") {
119
+ for (let key of __getOwnPropNames(from))
120
+ if (!__hasOwnProp.call(to, key) && key !== except)
121
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
122
+ }
123
+ return to;
124
+ };
125
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
126
+ var events_exports = {};
127
+ __export(events_exports, {
128
+ EventRefDisposable: () => EventRefDisposable,
129
+ subscribeDisposableEvent: () => subscribeDisposableEvent,
130
+ subscribeEvent: () => subscribeEvent
131
+ });
132
+ module.exports = __toCommonJS(events_exports);
133
+ var import_disposable = require('../disposable.cjs');
134
+ var import_object_utils = require('../object-utils.cjs');
135
+ class EventRefDisposable extends import_disposable.DisposableBase {
136
+ /**
137
+ * Creates a disposable wrapping an existing {@link EventRef}.
138
+ *
139
+ * @param eventRef - The event reference to unregister on dispose.
140
+ */
141
+ constructor(eventRef) {
142
+ super();
143
+ this.eventRef = eventRef;
144
+ }
145
+ eventRef;
146
+ /**
147
+ * Unregisters the event via the source stored on the ref (`eventRef.e.offref`).
148
+ */
149
+ performDispose() {
150
+ this.eventRef.e.offref(this.eventRef);
151
+ }
152
+ }
153
+ function subscribeDisposableEvent(params) {
154
+ return new EventRefDisposable(subscribeEvent(params));
155
+ }
156
+ function subscribeEvent(params) {
157
+ return params.events.on(params.name, (0, import_object_utils.castTo)(params.callback), params.thisArg);
158
+ }
159
+ // Annotate the CommonJS export names for ESM import in node:
160
+ 0 && (module.exports = {
161
+ EventRefDisposable,
162
+ subscribeDisposableEvent,
163
+ subscribeEvent
164
+ });
165
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2V2ZW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFR5cGVkIGhlbHBlcnMgZm9yIHN1YnNjcmliaW5nIHRvIGFuIE9ic2lkaWFuIHtAbGluayBFdmVudHN9IHNvdXJjZS4gQm90aCBkZXJpdmUgdGhlIHZhbGlkIGV2ZW50IG5hbWVzIGFuZCB0aGVpclxuICogY2FsbGJhY2sgYXJndW1lbnQgdHlwZXMgZnJvbSB0aGUgc291cmNlJ3Mgb3ZlcmxvYWRlZCBgb25gIG1ldGhvZCAodmlhIHtAbGluayBFeHRyYWN0RXZlbnRNYXB9KSwgc28gdGhlIGV2ZW50XG4gKiBuYW1lIGFuZCBoYW5kbGVyIGFyZSBmdWxseSBhdXRvY29tcGxldGVkLiB7QGxpbmsgc3Vic2NyaWJlRXZlbnR9IHJldHVybnMgdGhlIHJhdyB7QGxpbmsgRXZlbnRSZWZ9IChwYXJpdHkgd2l0aFxuICoge0BsaW5rIEV2ZW50cy5vbn0pOyB7QGxpbmsgc3Vic2NyaWJlRGlzcG9zYWJsZUV2ZW50fSByZXR1cm5zIGEge0BsaW5rIERpc3Bvc2FibGVFeH0gdGhhdCB1bnJlZ2lzdGVycyBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEV2ZW50UmVmLFxuICBFdmVudHNcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGVFeCB9IGZyb20gJy4uL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmljRnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jdGlvbi50cyc7XG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RFdmVudE1hcCB9IGZyb20gJy4uL3R5cGUudHMnO1xuXG5pbXBvcnQgeyBEaXNwb3NhYmxlQmFzZSB9IGZyb20gJy4uL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHsgY2FzdFRvIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc3Vic2NyaWJlRGlzcG9zYWJsZUV2ZW50fS4gU2FtZSBzaGFwZSBhcyB7QGxpbmsgU3Vic2NyaWJlRXZlbnRQYXJhbXN9LlxuICpcbiAqIEB0eXBlUGFyYW0gU291cmNlIC0gVGhlIHtAbGluayBFdmVudHN9IHNvdXJjZSB0eXBlLlxuICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgZXZlbnQgbmFtZSwgY29uc3RyYWluZWQgdG8gdGhlIHNvdXJjZSdzIGtub3duIGV2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgU3Vic2NyaWJlRGlzcG9zYWJsZUV2ZW50UGFyYW1zPFNvdXJjZSBleHRlbmRzIEV2ZW50cywgRXZlbnROYW1lIGV4dGVuZHMgRXZlbnROYW1lT2Y8U291cmNlPj4gPSBTdWJzY3JpYmVFdmVudFBhcmFtczxcbiAgU291cmNlLFxuICBFdmVudE5hbWVcbj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHN1YnNjcmliZUV2ZW50fS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNvdXJjZSAtIFRoZSB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgdHlwZS5cbiAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIGV2ZW50IG5hbWUsIGNvbnN0cmFpbmVkIHRvIHRoZSBzb3VyY2UncyBrbm93biBldmVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3Vic2NyaWJlRXZlbnRQYXJhbXM8U291cmNlIGV4dGVuZHMgRXZlbnRzLCBFdmVudE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVPZjxTb3VyY2U+PiB7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgY2FsbGJhY2suIEl0cyBhcmd1bWVudCB0eXBlcyBhcmUgaW5mZXJyZWQgZnJvbSB7QGxpbmsgU3Vic2NyaWJlRXZlbnRQYXJhbXMubmFtZX0uXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogRXZlbnRDYWxsYmFja09mPFNvdXJjZSwgRXZlbnROYW1lPjtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHNvdXJjZSB0byBzdWJzY3JpYmUgb24uXG4gICAqL1xuICByZWFkb25seSBldmVudHM6IFNvdXJjZTtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IG5hbWUgdG8gc3Vic2NyaWJlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogRXZlbnROYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIHJlYWRvbmx5IHRoaXNBcmc/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIFRoZSBjYWxsYmFjayB0eXBlIGZvciBhIGdpdmVuIGV2ZW50IG9uIGEge0BsaW5rIEV2ZW50c30gc291cmNlLCB3aXRoIGl0cyBhcmd1bWVudCB0dXBsZSBpbmZlcnJlZCBmcm9tXG4gKiB7QGxpbmsgRXh0cmFjdEV2ZW50TWFwfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNvdXJjZSAtIFRoZSB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgdHlwZS5cbiAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIGV2ZW50IG5hbWUuXG4gKi9cbnR5cGUgRXZlbnRDYWxsYmFja09mPFNvdXJjZSBleHRlbmRzIEV2ZW50cywgRXZlbnROYW1lIGV4dGVuZHMgRXZlbnROYW1lT2Y8U291cmNlPj4gPSBFeHRyYWN0RXZlbnRNYXA8U291cmNlPltFdmVudE5hbWVdIGV4dGVuZHMgaW5mZXIgQXJncyBleHRlbmRzIHVua25vd25bXSA/ICguLi5hcmdzOiBBcmdzKSA9PiB1bmtub3duXG4gIDogbmV2ZXI7XG5cbi8qKlxuICogVGhlIHVuaW9uIG9mIGtub3duIGV2ZW50IG5hbWVzIGZvciBhIHtAbGluayBFdmVudHN9IHNvdXJjZSwgZGVyaXZlZCBmcm9tIGl0cyBgb25gIG92ZXJsb2Fkcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFNvdXJjZSAtIFRoZSB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgdHlwZS5cbiAqL1xudHlwZSBFdmVudE5hbWVPZjxTb3VyY2UgZXh0ZW5kcyBFdmVudHM+ID0ga2V5b2YgRXh0cmFjdEV2ZW50TWFwPFNvdXJjZT4gJiBzdHJpbmc7XG5cbi8qKlxuICogQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IHVucmVnaXN0ZXJzIGFuIE9ic2lkaWFuIHtAbGluayBFdmVudFJlZn0gb24gZGlzcG9zZSwgdmlhIHRoZSBldmVudCBzb3VyY2UgZXhwb3NlZCBvblxuICogdGhlIHJlZiBpdHNlbGYgKGBldmVudFJlZi5lYCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBFdmVudFJlZkRpc3Bvc2FibGUgZXh0ZW5kcyBEaXNwb3NhYmxlQmFzZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGlzcG9zYWJsZSB3cmFwcGluZyBhbiBleGlzdGluZyB7QGxpbmsgRXZlbnRSZWZ9LlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRSZWYgLSBUaGUgZXZlbnQgcmVmZXJlbmNlIHRvIHVucmVnaXN0ZXIgb24gZGlzcG9zZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGV2ZW50UmVmOiBFdmVudFJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgdGhlIGV2ZW50IHZpYSB0aGUgc291cmNlIHN0b3JlZCBvbiB0aGUgcmVmIChgZXZlbnRSZWYuZS5vZmZyZWZgKS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50UmVmLmUub2ZmcmVmKHRoaXMuZXZlbnRSZWYpO1xuICB9XG59XG5cbi8qKlxuICogU3Vic2NyaWJlcyB0byBhbiBldmVudCBvbiBhbiB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgYW5kIHJldHVybnMgYSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IHVucmVnaXN0ZXJzIGl0IG9uXG4gKiBkaXNwb3NlLiBUeXBlZCB3cmFwcGVyIG92ZXIge0BsaW5rIEV2ZW50cy5vbn06IHRoZSBldmVudCBuYW1lIGFuZCBjYWxsYmFjayBhcmd1bWVudHMgYXJlIGF1dG9jb21wbGV0ZWQgZnJvbSB0aGVcbiAqIHNvdXJjZSdzIG92ZXJsb2Fkcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFNvdXJjZSAtIFRoZSB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgdHlwZS5cbiAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVyIHdoZW4gZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVEaXNwb3NhYmxlRXZlbnQ8U291cmNlIGV4dGVuZHMgRXZlbnRzLCBFdmVudE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVPZjxTb3VyY2U+PihcbiAgcGFyYW1zOiBTdWJzY3JpYmVEaXNwb3NhYmxlRXZlbnRQYXJhbXM8U291cmNlLCBFdmVudE5hbWU+XG4pOiBEaXNwb3NhYmxlRXgge1xuICByZXR1cm4gbmV3IEV2ZW50UmVmRGlzcG9zYWJsZShzdWJzY3JpYmVFdmVudChwYXJhbXMpKTtcbn1cblxuLyoqXG4gKiBTdWJzY3JpYmVzIHRvIGFuIGV2ZW50IG9uIGFuIHtAbGluayBFdmVudHN9IHNvdXJjZSBhbmQgcmV0dXJucyB0aGUgcmF3IHtAbGluayBFdmVudFJlZn0gKHBhcml0eSB3aXRoXG4gKiB7QGxpbmsgRXZlbnRzLm9ufSkuIFR5cGVkIHdyYXBwZXI6IHRoZSBldmVudCBuYW1lIGFuZCBjYWxsYmFjayBhcmd1bWVudHMgYXJlIGF1dG9jb21wbGV0ZWQgZnJvbSB0aGUgc291cmNlJ3NcbiAqIG92ZXJsb2Fkcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFNvdXJjZSAtIFRoZSB7QGxpbmsgRXZlbnRzfSBzb3VyY2UgdHlwZS5cbiAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHtAbGluayBFdmVudFJlZn0gZm9yIHRoZSByZWdpc3RlcmVkIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVFdmVudDxTb3VyY2UgZXh0ZW5kcyBFdmVudHMsIEV2ZW50TmFtZSBleHRlbmRzIEV2ZW50TmFtZU9mPFNvdXJjZT4+KFxuICBwYXJhbXM6IFN1YnNjcmliZUV2ZW50UGFyYW1zPFNvdXJjZSwgRXZlbnROYW1lPlxuKTogRXZlbnRSZWYge1xuICAvLyBBIGdlbmVyaWMgYG5hbWVgIGNhbm5vdCBzZWxlY3Qgb25lIG9mIGBvbmAncyBzcGVjaWZpYyBvdmVybG9hZHMsIHNvIHRoZSBjYWxsIHJlc29sdmVzIGFnYWluc3QgdGhlIGJhc2VcbiAgLy8gYG9uKG5hbWU6IHN0cmluZywgY2FsbGJhY2ssIGN0eD8pYCBzaWduYXR1cmUgXHUyMDE0IHRoZSBjYWxsYmFjayBpcyBjYXN0IHRvIHRoYXQgc2lnbmF0dXJlJ3MgcGFyYW1ldGVyIHR5cGUuXG4gIHJldHVybiBwYXJhbXMuZXZlbnRzLm9uKHBhcmFtcy5uYW1lLCBjYXN0VG88R2VuZXJpY0Z1bmN0aW9uPHVua25vd25bXT4+KHBhcmFtcy5jYWxsYmFjayksIHBhcmFtcy50aGlzQXJnKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEsd0JBQStCO0FBQy9CLDBCQUF1QjtBQThEaEIsTUFBTSwyQkFBMkIsaUNBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNOUMsWUFBNkIsVUFBb0I7QUFDdEQsVUFBTTtBQUQ0QjtBQUFBLEVBRXBDO0FBQUEsRUFGb0M7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9qQixpQkFBdUI7QUFDeEMsU0FBSyxTQUFTLEVBQUUsT0FBTyxLQUFLLFFBQVE7QUFBQSxFQUN0QztBQUNGO0FBWU8sU0FBUyx5QkFDZCxRQUNjO0FBQ2QsU0FBTyxJQUFJLG1CQUFtQixlQUFlLE1BQU0sQ0FBQztBQUN0RDtBQVlPLFNBQVMsZUFDZCxRQUNVO0FBR1YsU0FBTyxPQUFPLE9BQU8sR0FBRyxPQUFPLFVBQU0sNEJBQW1DLE9BQU8sUUFBUSxHQUFHLE9BQU8sT0FBTztBQUMxRzsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,98 @@
1
+ /// <reference path="../library.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Typed helpers for subscribing to an Obsidian {@link Events} source. Both derive the valid event names and their
6
+ * callback argument types from the source's overloaded `on` method (via {@link ExtractEventMap}), so the event
7
+ * name and handler are fully autocompleted. {@link subscribeEvent} returns the raw {@link EventRef} (parity with
8
+ * {@link Events.on}); {@link subscribeDisposableEvent} returns a {@link DisposableEx} that unregisters it.
9
+ */
10
+ import type { EventRef, Events } from 'obsidian' with { 'resolution-mode': 'import' };
11
+ import type { DisposableEx } from '../disposable.cjs';
12
+ import type { ExtractEventMap } from '../type.cjs';
13
+ import { DisposableBase } from '../disposable.cjs';
14
+ /**
15
+ * Parameters for {@link subscribeDisposableEvent}. Same shape as {@link SubscribeEventParams}.
16
+ *
17
+ * @typeParam Source - The {@link Events} source type.
18
+ * @typeParam EventName - The event name, constrained to the source's known events.
19
+ */
20
+ export type SubscribeDisposableEventParams<Source extends Events, EventName extends EventNameOf<Source>> = SubscribeEventParams<Source, EventName>;
21
+ /**
22
+ * Parameters for {@link subscribeEvent}.
23
+ *
24
+ * @typeParam Source - The {@link Events} source type.
25
+ * @typeParam EventName - The event name, constrained to the source's known events.
26
+ */
27
+ export interface SubscribeEventParams<Source extends Events, EventName extends EventNameOf<Source>> {
28
+ /**
29
+ * The event callback. Its argument types are inferred from {@link SubscribeEventParams.name}.
30
+ */
31
+ readonly callback: EventCallbackOf<Source, EventName>;
32
+ /**
33
+ * The event source to subscribe on.
34
+ */
35
+ readonly events: Source;
36
+ /**
37
+ * The event name to subscribe to.
38
+ */
39
+ readonly name: EventName;
40
+ /**
41
+ * The context passed as `this` to the callback.
42
+ */
43
+ readonly thisArg?: unknown;
44
+ }
45
+ /**
46
+ * The callback type for a given event on a {@link Events} source, with its argument tuple inferred from
47
+ * {@link ExtractEventMap}.
48
+ *
49
+ * @typeParam Source - The {@link Events} source type.
50
+ * @typeParam EventName - The event name.
51
+ */
52
+ type EventCallbackOf<Source extends Events, EventName extends EventNameOf<Source>> = ExtractEventMap<Source>[EventName] extends infer Args extends unknown[] ? (...args: Args) => unknown : never;
53
+ /**
54
+ * The union of known event names for a {@link Events} source, derived from its `on` overloads.
55
+ *
56
+ * @typeParam Source - The {@link Events} source type.
57
+ */
58
+ type EventNameOf<Source extends Events> = keyof ExtractEventMap<Source> & string;
59
+ /**
60
+ * A {@link DisposableEx} that unregisters an Obsidian {@link EventRef} on dispose, via the event source exposed on
61
+ * the ref itself (`eventRef.e`).
62
+ */
63
+ export declare class EventRefDisposable extends DisposableBase {
64
+ private readonly eventRef;
65
+ /**
66
+ * Creates a disposable wrapping an existing {@link EventRef}.
67
+ *
68
+ * @param eventRef - The event reference to unregister on dispose.
69
+ */
70
+ constructor(eventRef: EventRef);
71
+ /**
72
+ * Unregisters the event via the source stored on the ref (`eventRef.e.offref`).
73
+ */
74
+ protected performDispose(): void;
75
+ }
76
+ /**
77
+ * Subscribes to an event on an {@link Events} source and returns a {@link DisposableEx} that unregisters it on
78
+ * dispose. Typed wrapper over {@link Events.on}: the event name and callback arguments are autocompleted from the
79
+ * source's overloads.
80
+ *
81
+ * @typeParam Source - The {@link Events} source type.
82
+ * @typeParam EventName - The event name.
83
+ * @param params - The subscription parameters.
84
+ * @returns A {@link DisposableEx} that unregisters the handler when disposed.
85
+ */
86
+ export declare function subscribeDisposableEvent<Source extends Events, EventName extends EventNameOf<Source>>(params: SubscribeDisposableEventParams<Source, EventName>): DisposableEx;
87
+ /**
88
+ * Subscribes to an event on an {@link Events} source and returns the raw {@link EventRef} (parity with
89
+ * {@link Events.on}). Typed wrapper: the event name and callback arguments are autocompleted from the source's
90
+ * overloads.
91
+ *
92
+ * @typeParam Source - The {@link Events} source type.
93
+ * @typeParam EventName - The event name.
94
+ * @param params - The subscription parameters.
95
+ * @returns The {@link EventRef} for the registered handler.
96
+ */
97
+ export declare function subscribeEvent<Source extends Events, EventName extends EventNameOf<Source>>(params: SubscribeEventParams<Source, EventName>): EventRef;
98
+ export {};