obsidian-dev-utils 101.5.0 → 101.7.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 (80) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/integration-test-plugin/main.js +2612 -1815
  3. package/dist/lib/cjs/__merged.cjs +29 -1
  4. package/dist/lib/cjs/__merged.d.cts +5 -1
  5. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  6. package/dist/lib/cjs/obsidian/components/component-ex.cjs +14 -1
  7. package/dist/lib/cjs/obsidian/components/component-ex.d.cts +11 -0
  8. package/dist/lib/cjs/obsidian/components/index.cjs +7 -1
  9. package/dist/lib/cjs/obsidian/components/index.d.cts +2 -0
  10. package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +1 -1
  11. package/dist/lib/cjs/obsidian/components/plugin-gate-component.cjs +520 -0
  12. package/dist/lib/cjs/obsidian/components/plugin-gate-component.d.cts +299 -0
  13. package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.cjs +17 -38
  14. package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.d.cts +25 -18
  15. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +7 -2
  16. package/dist/lib/cjs/obsidian/components/settings-migration-component.cjs +232 -0
  17. package/dist/lib/cjs/obsidian/components/settings-migration-component.d.cts +120 -0
  18. package/dist/lib/cjs/obsidian/css-class.cjs +3 -1
  19. package/dist/lib/cjs/obsidian/css-class.d.cts +9 -0
  20. package/dist/lib/cjs/obsidian/html-element.cjs +27 -3
  21. package/dist/lib/cjs/obsidian/html-element.d.cts +36 -0
  22. package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +15 -1
  23. package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +14 -0
  24. package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +14 -0
  25. package/dist/lib/cjs/obsidian/mobile-trusted-input.cjs +1 -1
  26. package/dist/lib/cjs/obsidian/mobile-trusted-input.d.cts +5 -3
  27. package/dist/lib/cjs/obsidian/plugin/index.cjs +12 -3
  28. package/dist/lib/cjs/obsidian/plugin/index.d.cts +3 -0
  29. package/dist/lib/cjs/obsidian/plugin/plugin-api.cjs +2 -2
  30. package/dist/lib/cjs/obsidian/plugin/plugin-api.d.cts +34 -15
  31. package/dist/lib/cjs/obsidian/plugin/plugin-install-state.cjs +208 -0
  32. package/dist/lib/cjs/obsidian/plugin/plugin-install-state.d.cts +113 -0
  33. package/dist/lib/cjs/obsidian/plugin/plugin-lifecycle-events.cjs +161 -0
  34. package/dist/lib/cjs/obsidian/plugin/plugin-lifecycle-events.d.cts +119 -0
  35. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +241 -21
  36. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +133 -4
  37. package/dist/lib/cjs/obsidian/plugin/settings-migration-api.cjs +141 -0
  38. package/dist/lib/cjs/obsidian/plugin/settings-migration-api.d.cts +91 -0
  39. package/dist/lib/esm/__merged.d.mts +5 -1
  40. package/dist/lib/esm/__merged.mjs +32 -2
  41. package/dist/lib/esm/generated-during-build.mjs +1 -1
  42. package/dist/lib/esm/obsidian/components/component-ex.d.mts +11 -0
  43. package/dist/lib/esm/obsidian/components/component-ex.mjs +14 -1
  44. package/dist/lib/esm/obsidian/components/index.d.mts +2 -0
  45. package/dist/lib/esm/obsidian/components/index.mjs +5 -1
  46. package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +1 -1
  47. package/dist/lib/esm/obsidian/components/plugin-gate-component.d.mts +299 -0
  48. package/dist/lib/esm/obsidian/components/plugin-gate-component.mjs +428 -0
  49. package/dist/lib/esm/obsidian/components/plugin-suggestion-component.d.mts +25 -18
  50. package/dist/lib/esm/obsidian/components/plugin-suggestion-component.mjs +21 -41
  51. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +7 -2
  52. package/dist/lib/esm/obsidian/components/settings-migration-component.d.mts +120 -0
  53. package/dist/lib/esm/obsidian/components/settings-migration-component.mjs +127 -0
  54. package/dist/lib/esm/obsidian/css-class.d.mts +9 -0
  55. package/dist/lib/esm/obsidian/css-class.mjs +3 -1
  56. package/dist/lib/esm/obsidian/html-element.d.mts +36 -0
  57. package/dist/lib/esm/obsidian/html-element.mjs +24 -2
  58. package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +14 -0
  59. package/dist/lib/esm/obsidian/i18n/locales/en.mjs +15 -1
  60. package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +14 -0
  61. package/dist/lib/esm/obsidian/mobile-trusted-input.d.mts +5 -3
  62. package/dist/lib/esm/obsidian/mobile-trusted-input.mjs +1 -1
  63. package/dist/lib/esm/obsidian/plugin/index.d.mts +3 -0
  64. package/dist/lib/esm/obsidian/plugin/index.mjs +8 -2
  65. package/dist/lib/esm/obsidian/plugin/plugin-api.d.mts +34 -15
  66. package/dist/lib/esm/obsidian/plugin/plugin-api.mjs +2 -2
  67. package/dist/lib/esm/obsidian/plugin/plugin-install-state.d.mts +113 -0
  68. package/dist/lib/esm/obsidian/plugin/plugin-install-state.mjs +106 -0
  69. package/dist/lib/esm/obsidian/plugin/plugin-lifecycle-events.d.mts +119 -0
  70. package/dist/lib/esm/obsidian/plugin/plugin-lifecycle-events.mjs +54 -0
  71. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +133 -4
  72. package/dist/lib/esm/obsidian/plugin/plugin.mjs +245 -21
  73. package/dist/lib/esm/obsidian/plugin/settings-migration-api.d.mts +91 -0
  74. package/dist/lib/esm/obsidian/plugin/settings-migration-api.mjs +44 -0
  75. package/obsidian/components/plugin-gate-component/package.json +6 -0
  76. package/obsidian/components/settings-migration-component/package.json +6 -0
  77. package/obsidian/plugin/plugin-install-state/package.json +6 -0
  78. package/obsidian/plugin/plugin-lifecycle-events/package.json +6 -0
  79. package/obsidian/plugin/settings-migration-api/package.json +6 -0
  80. package/package.json +15 -15
@@ -14,6 +14,7 @@ export * as 'menu-event-registrar-component' from './menu-event-registrar-compon
14
14
  export * as 'monkey-around-component' from './monkey-around-component.mjs';
15
15
  export * as 'notebook-navigator-menu-event-registrar-component' from './notebook-navigator-menu-event-registrar-component.mjs';
16
16
  export * as 'plugin-context-component' from './plugin-context-component.mjs';
17
+ export * as 'plugin-gate-component' from './plugin-gate-component.mjs';
17
18
  export * as 'plugin-notice-component' from './plugin-notice-component.mjs';
18
19
  export * as 'plugin-settings-component' from './plugin-settings-component.mjs';
19
20
  export * as 'plugin-settings-tab-component' from './plugin-settings-tab-component.mjs';
@@ -22,4 +23,5 @@ export * as 'pointer-position-component' from './pointer-position-component.mjs'
22
23
  export * as 'registry-component' from './registry-component.mjs';
23
24
  export * as 'rename-delete-handler-component' from './rename-delete-handler-component.mjs';
24
25
  export * as 'rmdir-guard-component' from './rmdir-guard-component.mjs';
26
+ export * as 'settings-migration-component' from './settings-migration-component.mjs';
25
27
  export * as 'syntax-highlighting-component' from './syntax-highlighting-component.mjs';
@@ -56,6 +56,7 @@ import * as menu_event_registrar_component from "./menu-event-registrar-componen
56
56
  import * as monkey_around_component from "./monkey-around-component.mjs";
57
57
  import * as notebook_navigator_menu_event_registrar_component from "./notebook-navigator-menu-event-registrar-component.mjs";
58
58
  import * as plugin_context_component from "./plugin-context-component.mjs";
59
+ import * as plugin_gate_component from "./plugin-gate-component.mjs";
59
60
  import * as plugin_notice_component from "./plugin-notice-component.mjs";
60
61
  import * as plugin_settings_component from "./plugin-settings-component.mjs";
61
62
  import * as plugin_settings_tab_component from "./plugin-settings-tab-component.mjs";
@@ -64,6 +65,7 @@ import * as pointer_position_component from "./pointer-position-component.mjs";
64
65
  import * as registry_component from "./registry-component.mjs";
65
66
  import * as rename_delete_handler_component from "./rename-delete-handler-component.mjs";
66
67
  import * as rmdir_guard_component from "./rmdir-guard-component.mjs";
68
+ import * as settings_migration_component from "./settings-migration-component.mjs";
67
69
  import * as syntax_highlighting_component from "./syntax-highlighting-component.mjs";
68
70
  export {
69
71
  abort_signal_component as "abort-signal-component",
@@ -81,6 +83,7 @@ export {
81
83
  monkey_around_component as "monkey-around-component",
82
84
  notebook_navigator_menu_event_registrar_component as "notebook-navigator-menu-event-registrar-component",
83
85
  plugin_context_component as "plugin-context-component",
86
+ plugin_gate_component as "plugin-gate-component",
84
87
  plugin_notice_component as "plugin-notice-component",
85
88
  plugin_settings_component as "plugin-settings-component",
86
89
  plugin_settings_tab_component as "plugin-settings-tab-component",
@@ -89,6 +92,7 @@ export {
89
92
  registry_component as "registry-component",
90
93
  rename_delete_handler_component as "rename-delete-handler-component",
91
94
  rmdir_guard_component as "rmdir-guard-component",
95
+ settings_migration_component as "settings-migration-component",
92
96
  syntax_highlighting_component as "syntax-highlighting-component"
93
97
  };
94
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnYWJvcnQtc2lnbmFsLWNvbXBvbmVudCcgZnJvbSAnLi9hYm9ydC1zaWduYWwtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhbGwtd2luZG93cy1ldmVudC1jb21wb25lbnQnIGZyb20gJy4vYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnYXN5bmMtZXZlbnRzLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdjYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgtY29tcG9uZW50JyBmcm9tICcuL2Nhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2NvbXBvbmVudC1leCcgZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NvbnNvbGUtZGVidWctY29tcG9uZW50JyBmcm9tICcuL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdkaXNwb3NhYmxlLWNvbXBvbmVudCcgZnJvbSAnLi9kaXNwb3NhYmxlLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQnIGZyb20gJy4vZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2dlbmVyYXRlLW1hcmtkb3duLWxpbmstZGVmYXVsdC1wYXJhbXMtY29tcG9uZW50JyBmcm9tICcuL2dlbmVyYXRlLW1hcmtkb3duLWxpbmstZGVmYXVsdC1wYXJhbXMtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdsYXlvdXQtcmVhZHktY29tcG9uZW50JyBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ21lbnUtZXZlbnQtcmVnaXN0cmFyLWNvbXBvbmVudCcgZnJvbSAnLi9tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ21vbmtleS1hcm91bmQtY29tcG9uZW50JyBmcm9tICcuL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50JyBmcm9tICcuL25vdGVib29rLW5hdmlnYXRvci1tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudCcgZnJvbSAnLi9wbHVnaW4tY29udGV4dC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1ub3RpY2UtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc3VnZ2VzdGlvbi1jb21wb25lbnQnIGZyb20gJy4vcGx1Z2luLXN1Z2dlc3Rpb24tY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudCcgZnJvbSAnLi9wb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncmVnaXN0cnktY29tcG9uZW50JyBmcm9tICcuL3JlZ2lzdHJ5LWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncmVuYW1lLWRlbGV0ZS1oYW5kbGVyLWNvbXBvbmVudCcgZnJvbSAnLi9yZW5hbWUtZGVsZXRlLWhhbmRsZXItY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdybWRpci1ndWFyZC1jb21wb25lbnQnIGZyb20gJy4vcm1kaXItZ3VhcmQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdzeW50YXgtaGlnaGxpZ2h0aW5nLWNvbXBvbmVudCcgZnJvbSAnLi9zeW50YXgtaGlnaGxpZ2h0aW5nLWNvbXBvbmVudC50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsWUFBWUEsNEJBQThCO0FBQzFDLFlBQVlDLGlDQUFtQztBQUMvQyxZQUFZQyxtQ0FBcUM7QUFDakQsWUFBWUMsNEJBQThCO0FBQzFDLFlBQVlDLDJDQUE2QztBQUN6RCxZQUFZQyxrQkFBb0I7QUFDaEMsWUFBWUMsNkJBQStCO0FBQzNDLFlBQVlDLDBCQUE0QjtBQUN4QyxZQUFZQyxnQ0FBa0M7QUFDOUMsWUFBWUMscURBQXVEO0FBQ25FLFlBQVlDLDRCQUE4QjtBQUMxQyxZQUFZQyxvQ0FBc0M7QUFDbEQsWUFBWUMsNkJBQStCO0FBQzNDLFlBQVlDLHVEQUF5RDtBQUNyRSxZQUFZQyw4QkFBZ0M7QUFDNUMsWUFBWUMsNkJBQStCO0FBQzNDLFlBQVlDLCtCQUFpQztBQUM3QyxZQUFZQyxtQ0FBcUM7QUFDakQsWUFBWUMsaUNBQW1DO0FBQy9DLFlBQVlDLGdDQUFrQztBQUM5QyxZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWUMscUNBQXVDO0FBQ25ELFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZQyxtQ0FBcUM7IiwKICAibmFtZXMiOiBbImFib3J0LXNpZ25hbC1jb21wb25lbnQiLCAiYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50IiwgImFzeW5jLWVycm9yLWhhbmRsZXItY29tcG9uZW50IiwgImFzeW5jLWV2ZW50cy1jb21wb25lbnQiLCAiY2FzZS1pbnNlbnNpdGl2ZS1maWxlLWluZGV4LWNvbXBvbmVudCIsICJjb21wb25lbnQtZXgiLCAiY29uc29sZS1kZWJ1Zy1jb21wb25lbnQiLCAiZGlzcG9zYWJsZS1jb21wb25lbnQiLCAiZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQiLCAiZ2VuZXJhdGUtbWFya2Rvd24tbGluay1kZWZhdWx0LXBhcmFtcy1jb21wb25lbnQiLCAibGF5b3V0LXJlYWR5LWNvbXBvbmVudCIsICJtZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQiLCAibW9ua2V5LWFyb3VuZC1jb21wb25lbnQiLCAibm90ZWJvb2stbmF2aWdhdG9yLW1lbnUtZXZlbnQtcmVnaXN0cmFyLWNvbXBvbmVudCIsICJwbHVnaW4tY29udGV4dC1jb21wb25lbnQiLCAicGx1Z2luLW5vdGljZS1jb21wb25lbnQiLCAicGx1Z2luLXNldHRpbmdzLWNvbXBvbmVudCIsICJwbHVnaW4tc2V0dGluZ3MtdGFiLWNvbXBvbmVudCIsICJwbHVnaW4tc3VnZ2VzdGlvbi1jb21wb25lbnQiLCAicG9pbnRlci1wb3NpdGlvbi1jb21wb25lbnQiLCAicmVnaXN0cnktY29tcG9uZW50IiwgInJlbmFtZS1kZWxldGUtaGFuZGxlci1jb21wb25lbnQiLCAicm1kaXItZ3VhcmQtY29tcG9uZW50IiwgInN5bnRheC1oaWdobGlnaHRpbmctY29tcG9uZW50Il0KfQo=
98
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnYWJvcnQtc2lnbmFsLWNvbXBvbmVudCcgZnJvbSAnLi9hYm9ydC1zaWduYWwtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhbGwtd2luZG93cy1ldmVudC1jb21wb25lbnQnIGZyb20gJy4vYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdhc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnYXN5bmMtZXZlbnRzLWNvbXBvbmVudCcgZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdjYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgtY29tcG9uZW50JyBmcm9tICcuL2Nhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2NvbXBvbmVudC1leCcgZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NvbnNvbGUtZGVidWctY29tcG9uZW50JyBmcm9tICcuL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdkaXNwb3NhYmxlLWNvbXBvbmVudCcgZnJvbSAnLi9kaXNwb3NhYmxlLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQnIGZyb20gJy4vZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2dlbmVyYXRlLW1hcmtkb3duLWxpbmstZGVmYXVsdC1wYXJhbXMtY29tcG9uZW50JyBmcm9tICcuL2dlbmVyYXRlLW1hcmtkb3duLWxpbmstZGVmYXVsdC1wYXJhbXMtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdsYXlvdXQtcmVhZHktY29tcG9uZW50JyBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ21lbnUtZXZlbnQtcmVnaXN0cmFyLWNvbXBvbmVudCcgZnJvbSAnLi9tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ21vbmtleS1hcm91bmQtY29tcG9uZW50JyBmcm9tICcuL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50JyBmcm9tICcuL25vdGVib29rLW5hdmlnYXRvci1tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudCcgZnJvbSAnLi9wbHVnaW4tY29udGV4dC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1nYXRlLWNvbXBvbmVudCcgZnJvbSAnLi9wbHVnaW4tZ2F0ZS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1ub3RpY2UtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50JyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc3VnZ2VzdGlvbi1jb21wb25lbnQnIGZyb20gJy4vcGx1Z2luLXN1Z2dlc3Rpb24tY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdwb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudCcgZnJvbSAnLi9wb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncmVnaXN0cnktY29tcG9uZW50JyBmcm9tICcuL3JlZ2lzdHJ5LWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAncmVuYW1lLWRlbGV0ZS1oYW5kbGVyLWNvbXBvbmVudCcgZnJvbSAnLi9yZW5hbWUtZGVsZXRlLWhhbmRsZXItY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdybWRpci1ndWFyZC1jb21wb25lbnQnIGZyb20gJy4vcm1kaXItZ3VhcmQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzICdzZXR0aW5ncy1taWdyYXRpb24tY29tcG9uZW50JyBmcm9tICcuL3NldHRpbmdzLW1pZ3JhdGlvbi1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgJ3N5bnRheC1oaWdobGlnaHRpbmctY29tcG9uZW50JyBmcm9tICcuL3N5bnRheC1oaWdobGlnaHRpbmctY29tcG9uZW50LnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxZQUFZQSw0QkFBOEI7QUFDMUMsWUFBWUMsaUNBQW1DO0FBQy9DLFlBQVlDLG1DQUFxQztBQUNqRCxZQUFZQyw0QkFBOEI7QUFDMUMsWUFBWUMsMkNBQTZDO0FBQ3pELFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZQyw2QkFBK0I7QUFDM0MsWUFBWUMsMEJBQTRCO0FBQ3hDLFlBQVlDLGdDQUFrQztBQUM5QyxZQUFZQyxxREFBdUQ7QUFDbkUsWUFBWUMsNEJBQThCO0FBQzFDLFlBQVlDLG9DQUFzQztBQUNsRCxZQUFZQyw2QkFBK0I7QUFDM0MsWUFBWUMsdURBQXlEO0FBQ3JFLFlBQVlDLDhCQUFnQztBQUM1QyxZQUFZQywyQkFBNkI7QUFDekMsWUFBWUMsNkJBQStCO0FBQzNDLFlBQVlDLCtCQUFpQztBQUM3QyxZQUFZQyxtQ0FBcUM7QUFDakQsWUFBWUMsaUNBQW1DO0FBQy9DLFlBQVlDLGdDQUFrQztBQUM5QyxZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWUMscUNBQXVDO0FBQ25ELFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZQyxrQ0FBb0M7QUFDaEQsWUFBWUMsbUNBQXFDOyIsCiAgIm5hbWVzIjogWyJhYm9ydC1zaWduYWwtY29tcG9uZW50IiwgImFsbC13aW5kb3dzLWV2ZW50LWNvbXBvbmVudCIsICJhc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudCIsICJhc3luYy1ldmVudHMtY29tcG9uZW50IiwgImNhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleC1jb21wb25lbnQiLCAiY29tcG9uZW50LWV4IiwgImNvbnNvbGUtZGVidWctY29tcG9uZW50IiwgImRpc3Bvc2FibGUtY29tcG9uZW50IiwgImVtYmVkLWV4dGVuc2lvbnMtY29tcG9uZW50IiwgImdlbmVyYXRlLW1hcmtkb3duLWxpbmstZGVmYXVsdC1wYXJhbXMtY29tcG9uZW50IiwgImxheW91dC1yZWFkeS1jb21wb25lbnQiLCAibWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50IiwgIm1vbmtleS1hcm91bmQtY29tcG9uZW50IiwgIm5vdGVib29rLW5hdmlnYXRvci1tZW51LWV2ZW50LXJlZ2lzdHJhci1jb21wb25lbnQiLCAicGx1Z2luLWNvbnRleHQtY29tcG9uZW50IiwgInBsdWdpbi1nYXRlLWNvbXBvbmVudCIsICJwbHVnaW4tbm90aWNlLWNvbXBvbmVudCIsICJwbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50IiwgInBsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50IiwgInBsdWdpbi1zdWdnZXN0aW9uLWNvbXBvbmVudCIsICJwb2ludGVyLXBvc2l0aW9uLWNvbXBvbmVudCIsICJyZWdpc3RyeS1jb21wb25lbnQiLCAicmVuYW1lLWRlbGV0ZS1oYW5kbGVyLWNvbXBvbmVudCIsICJybWRpci1ndWFyZC1jb21wb25lbnQiLCAic2V0dGluZ3MtbWlncmF0aW9uLWNvbXBvbmVudCIsICJzeW50YXgtaGlnaGxpZ2h0aW5nLWNvbXBvbmVudCJdCn0K
@@ -145,4 +145,4 @@ export {
145
145
  around,
146
146
  hasPatchToken
147
147
  };
148
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbXByb3ZlZCB0eXBlLXNhZmUgd3JhcHBlciBvZiB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbW9ua2V5LWFyb3VuZH0gbGlicmFyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbmFsS2V5cyB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFyb3VuZCBhcyBvcmlnaW5hbEFyb3VuZCB9IGZyb20gJ21vbmtleS1hcm91bmQnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi8uLi90eXBlLnRzJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEEgdHlwZSBvZiB0aGUgZmFjdG9yaWVzIHRvIGFwcGx5IHRvIHRoZSBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgRmFjdG9yaWVzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0gUGFydGlhbDxGdWxsRmFjdG9yaWVzPCRPYmplY3Q+PjtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGNhbGxhYmxlIFx1MjAxNCBhIG1ldGhvZCwgb3IgYSBmdW5jdGlvbi1saWtlIG9iamVjdCBzdWNoIGFzIGEgYERlYm91bmNlcmAuIFRoZXNlIGFyZSB0aGUgbWVtYmVyc1xuICogYWNjZXB0ZWQgYnkge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgZmlsdGVyZWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uS2V5czwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IENvbmRpdGlvbmFsS2V5czwkT2JqZWN0LCBHZW5lcmljRnVuY3Rpb24gfCB1bmRlZmluZWQ+ICYga2V5b2YgJE9iamVjdDtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGEgcGxhaW4gZnVuY3Rpb24gKGEgXCJyZWFsIG1ldGhvZFwiKS4gRnVuY3Rpb24tbGlrZSBvYmplY3RzIHRoYXQgY2FycnkgZXh0cmEgbWVtYmVycyBhcmVcbiAqIGV4Y2x1ZGVkIFx1MjAxNCBlLmcuIGEgYERlYm91bmNlcmAgKHdoaWNoIGFkZHMgYGNhbmNlbGAvYHJ1bmApIGJlbG9uZ3MgdG8ge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LFxuICogbm90IHtAbGluayBNb25rZXlBcm91bmRDb21wb25lbnQjcmVnaXN0ZXJNZXRob2RQYXRjaH0uIFRoZSBjaGVjayBpcyB3aGV0aGVyIHRoZSBtZW1iZXIgaGFzIGFueSBvd24ga2V5cyBiZXlvbmQgYSBiYXJlXG4gKiBmdW5jdGlvbidzIChgRXhjbHVkZTxrZXlvZiBULCBrZXlvZiBHZW5lcmljRnVuY3Rpb24+YCBpcyBgbmV2ZXJgKS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIGtleXMgYXJlIGZpbHRlcmVkLlxuICovXG5leHBvcnQgdHlwZSBNZXRob2RLZXlzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0gTWV0aG9kS2V5c01hcDwkT2JqZWN0PltGdW5jdGlvbktleXM8JE9iamVjdD5dO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIHtAbGluayBNb25rZXlBcm91bmRDb21wb25lbnQjcmVnaXN0ZXJGdW5jdGlvblBhdGNofS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHR5cGVQYXJhbSBGdW5jdGlvbk5hbWUgLSBUaGUgZnVuY3Rpb24gbmFtZSB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3RlckZ1bmN0aW9uUGF0Y2hQYXJhbXM8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgRnVuY3Rpb25OYW1lIGV4dGVuZHMgRnVuY3Rpb25LZXlzPCRPYmplY3Q+PiB7XG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgJG9iamVjdDogJE9iamVjdDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIG5hbWUgdG8gcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU6IEZ1bmN0aW9uTmFtZTtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBwYXRjaCB1bmluc3RhbGxzIGl0c2VsZiB0aGUgZmlyc3QgdGltZSB0aGUgcGF0Y2hlZCBmdW5jdGlvbiBpcyBpbnZva2VkIChieVxuICAgKiB1bmxvYWRpbmcgdGhpcyBjb21wb25lbnQpLCByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIFx1MjAxNCBzbyB0aGUgaW50ZXJjZXB0aW9uIGhhcHBlbnMgZXhhY3RseSBvbmNlLlxuICAgKiBJbnRlbmRlZCBmb3IgYSBjb21wb25lbnQgZGVkaWNhdGVkIHRvIHRoaXMgc2luZ2xlIHBhdGNoLiBFeGlzdGluZyBjYWxsZXJzIHRoYXQgb21pdCBpdCBhcmVcbiAgICogdW5hZmZlY3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgb25jZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgb3JpZ2luYWwgdmFsdWUgYW5kIHJldHVybnMgdGhlIHBhdGNoZWQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW5hbFZhbHVlIC0gVGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBmdW5jdGlvbi5cbiAgICogQHJldHVybnMgVGhlIHBhdGNoZWQgdmFsdWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcGF0Y2hIYW5kbGVyKG9yaWdpbmFsVmFsdWU6ICRPYmplY3RbRnVuY3Rpb25OYW1lXSk6ICRPYmplY3RbRnVuY3Rpb25OYW1lXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyTWV0aG9kUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgdG8gcGF0Y2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ua2V5QXJvdW5kQ29tcG9uZW50UmVnaXN0ZXJNZXRob2RQYXRjaFBhcmFtczwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4ge1xuICAvKipcbiAgICogVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5ICRvYmplY3Q6ICRPYmplY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgbmFtZSB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZE5hbWU6IE1ldGhvZE5hbWU7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCB0aGUgcGF0Y2ggdW5pbnN0YWxscyBpdHNlbGYgdGhlIGZpcnN0IHRpbWUgdGhlIHBhdGNoZWQgbWV0aG9kIGlzIGludm9rZWQsIHJlc3RvcmluZ1xuICAgKiB0aGUgb3JpZ2luYWwgXHUyMDE0IHNvIHRoZSBpbnRlcmNlcHRpb24gaGFwcGVucyBleGFjdGx5IG9uY2UuIEV4aXN0aW5nIGNhbGxlcnMgdGhhdCBvbWl0IGl0IGFyZVxuICAgKiB1bmFmZmVjdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBvbmNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGNoIGhhbmRsZXIgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBwYXRjaEhhbmRsZXI6IFBhdGNoSGFuZGxlckZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCB0b2tlbiB0byBpZGVudGlmeSB0aGUgcGF0Y2guXG4gICAqXG4gICAqIFRoZSB0b2tlbiBpcyByZWNvcmRlZCBhZ2FpbnN0IHRoZSBtZXRob2QgdGhpcyBwYXRjaCBJTlNUQUxMUywgc28gdGhlIG5leHQgcGF0Y2ggb2YgdGhlIHNhbWUgbWV0aG9kXG4gICAqIGRldGVjdHMgaXQgdmlhIHtAbGluayBoYXNQYXRjaFRva2VufSBvbiBpdHMgb3duIGBvcmlnaW5hbE1ldGhvZGAgYW5kIGNhbiBkZWZlciB0byB0aGlzIG9uZS4gVGhlXG4gICAqIHBhdGNoIHRoYXQgaW5zdGFsbHMgYSB0b2tlbiB0aGVyZWZvcmUgbmV2ZXIgc2VlcyBpdHMgb3duIHRva2VuIFx1MjAxNCBvbmx5IHRoZSBwYXRjaGVzIHN0YWNrZWQgb24gdG9wIG9mXG4gICAqIGl0IGRvLiBVc2UgYSBgU3ltYm9sLmZvcmAgdG9rZW4gdG8gbWFrZSB0aGUgZGV0ZWN0aW9uIHdvcmsgYWNyb3NzIGluZGVwZW5kZW50bHkgYnVuZGxlZCBjb3BpZXMgb2ZcbiAgICogdGhpcyBsaWJyYXJ5LlxuICAgKlxuICAgKiBUaGUgdG9rZW4gaXMgZHJvcHBlZCB3aGVuIHRoaXMgY29tcG9uZW50IHVubG9hZHMsIHNvIGEgbGF0ZXIgcGF0Y2ggdGhhdCBoYWQgZGVmZXJyZWQgdGFrZXMgb3ZlciBvblxuICAgKiBpdHMgbmV4dCBjYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0Y2hUb2tlbj86IHN5bWJvbDtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgcG9zdC1wYXRjaCBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgcnVucyBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IHBvc3RQYXRjaEhhbmRsZXI/OiBQb3N0UGF0Y2hIYW5kbGVyRnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT47XG59XG5cbi8qKlxuICogQSBwYXRjaCBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgaW50ZXJjZXB0cyBjYWxscyB0byBhIG1ldGhvZCBvbiBhbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBhdGNoSGFuZGxlckZ1bmN0aW9uPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PiA9IChcbiAgcGFyYW1zOiBQYXRjaEhhbmRsZXJQYXJhbXM8JE9iamVjdCwgTWV0aG9kTmFtZT5cbikgPT4gUmV0dXJuVHlwZTxFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT4+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIGEge0BsaW5rIFBhdGNoSGFuZGxlckZ1bmN0aW9ufSBjYWxsYmFjay5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IGJlaW5nIHBhdGNoZWQuXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgYmVpbmcgcGF0Y2hlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXRjaEhhbmRsZXJQYXJhbXM8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+IHtcbiAgLyoqXG4gICAqIEludm9rZXMgdGhlIG9yaWdpbmFsIG1ldGhvZCB3aXRoIHRoZSBvcmlnaW5hbCBgdGhpc2AgYW5kIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHJldHVybnMgV2hhdGV2ZXIgdGhlIG9yaWdpbmFsIG1ldGhvZCByZXR1cm5zLlxuICAgKi9cbiAgZmFsbGJhY2sodGhpczogdm9pZCk6IFJldHVyblR5cGU8RXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+PjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIGFyZ3VtZW50cyBvZiB0aGUgaW50ZXJjZXB0ZWQgY2FsbCwgYXMgYSB0dXBsZS5cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbmFsQXJndW1lbnRzOiBQYXJhbWV0ZXJzPEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPj47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCAodW5wYXRjaGVkKSBtZXRob2QuIENhbGwgdmlhIGBvcmlnaW5hbEZuLmNhbGwob3JpZ2luYWxUaGlzLCAuLi5vcmlnaW5hbEFyZ3MpYC5cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbmFsTWV0aG9kOiBFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBtZXRob2QsIGJ1dCB3aXRoIHRoZSBgdGhpc2AgY29udGV4dCBhbHJlYWR5IGJvdW5kIHRvIHRoZSBvcmlnaW5hbCBvYmplY3QuIENhbGwgdmlhIGBvcmlnaW5hbE1ldGhvZEJvdW5kKC4uLm9yaWdpbmFsQXJncylgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxNZXRob2RCb3VuZDogT21pdFRoaXNQYXJhbWV0ZXI8RXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+PjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIGB0aGlzYCBjb250ZXh0IG9mIHRoZSBpbnRlcmNlcHRlZCBjYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxUaGlzOiAkT2JqZWN0O1xufVxuXG4vKipcbiAqIEEgcG9zdC1wYXRjaCBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgcnVucyBhZnRlciBhIHBhdGNoIGlzIGFwcGxpZWQuXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBvc3RQYXRjaEhhbmRsZXJGdW5jdGlvbjwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4gPSAoXG4gIHBhcmFtczogUG9zdFBhdGNoSGFuZGxlclBhcmFtczwkT2JqZWN0LCBNZXRob2ROYW1lPlxuKSA9PiBNYXliZVJldHVybjxFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT4+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIGEge0BsaW5rIFBvc3RQYXRjaEhhbmRsZXJGdW5jdGlvbn0gY2FsbGJhY2suXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdFBhdGNoSGFuZGxlclBhcmFtczwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4ge1xuICAvKipcbiAgICogVGhlIG9yaWdpbmFsICh1bnBhdGNoZWQpIG1ldGhvZC4gQ2FsbCB2aWEgYG9yaWdpbmFsRm4uY2FsbChvcmlnaW5hbFRoaXMsIC4uLm9yaWdpbmFsQXJncylgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxNZXRob2Q6IEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcblxuICAvKipcbiAgICogVGhlIHBhdGNoZWQgbWV0aG9kLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0Y2hlZE1ldGhvZDogRXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xufVxuXG50eXBlIEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4gPSBHZW5lcmljRnVuY3Rpb248UGFyYW1ldGVyczxFeHRyYWN0PCRPYmplY3RbTWV0aG9kTmFtZV0sIEdlbmVyaWNGdW5jdGlvbj4+LCBSZXR1cm5UeXBlPEV4dHJhY3Q8JE9iamVjdFtNZXRob2ROYW1lXSwgR2VuZXJpY0Z1bmN0aW9uPj4+O1xuXG50eXBlIEZ1bGxGYWN0b3JpZXM8JE9iamVjdCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtLZXkgaW4ga2V5b2YgJE9iamVjdF06IChvcmlnaW5hbFZhbHVlOiAkT2JqZWN0W0tleV0pID0+ICRPYmplY3RbS2V5XTtcbn07XG5cbnR5cGUgTWV0aG9kS2V5c01hcDwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0tleSBpbiBGdW5jdGlvbktleXM8JE9iamVjdD5dOiBbRXhjbHVkZTxrZXlvZiBOb25OdWxsYWJsZTwkT2JqZWN0W0tleV0+LCBrZXlvZiBHZW5lcmljRnVuY3Rpb24+XSBleHRlbmRzIFtuZXZlcl0gPyBLZXkgOiBuZXZlcjtcbn07XG5cbnR5cGUgT3JpZ2luYWxGYWN0b3JpZXM8JE9iamVjdCBleHRlbmRzIEdlbmVyaWNPYmplY3Q+ID0gUGFyYW1ldGVyczx0eXBlb2Ygb3JpZ2luYWxBcm91bmQ8JE9iamVjdD4+WzFdO1xuXG50eXBlIFVuaW5zdGFsbGVyID0gKCkgPT4gdm9pZDtcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1hbmFnZXMgbW9ua2V5LXBhdGNoZXMgd2l0aCBsaWZlY3ljbGUtYm91bmQgY2xlYW51cC5cbiAqIEFsbCBwYXRjaGVzIHJlZ2lzdGVyZWQgdmlhIHRoaXMgY29tcG9uZW50IGFyZSBhdXRvbWF0aWNhbGx5IHVuaW5zdGFsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCB1bmxvYWRzLlxuICovXG5leHBvcnQgY2xhc3MgTW9ua2V5QXJvdW5kQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgcGF0Y2ggZm9yIGEgc2luZ2xlIGZ1bmN0aW9uLWxpa2UgbWVtYmVyIChhIG1ldGhvZCwgb3IgYSBjYWxsYWJsZSBzdWNoIGFzIGEgYERlYm91bmNlcmApIHVzaW5nIGEgc2ltcGxpZmllZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKiBAdHlwZVBhcmFtIEZ1bmN0aW9uTmFtZSAtIFRoZSBmdW5jdGlvbiBuYW1lIHRvIHBhdGNoLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgb2YgdGhlIHBhdGNoLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyRnVuY3Rpb25QYXRjaDwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBjb25zdCBGdW5jdGlvbk5hbWUgZXh0ZW5kcyBGdW5jdGlvbktleXM8JE9iamVjdD4+KFxuICAgIHBhcmFtczogTW9ua2V5QXJvdW5kQ29tcG9uZW50UmVnaXN0ZXJGdW5jdGlvblBhdGNoUGFyYW1zPCRPYmplY3QsIEZ1bmN0aW9uTmFtZT5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIGNvbnN0IGZhY3RvcmllczogRmFjdG9yaWVzPCRPYmplY3Q+ID0ge307XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8taW1tZWRpYXRlLW11dGF0aW9uIC0tIEEgY29tcHV0ZWQga2V5IGluIGFuIG9iamVjdCBsaXRlcmFsIGRvZXMgbm90IG1hdGNoIGBQYXJ0aWFsPEZ1bGxGYWN0b3JpZXM8JE9iamVjdD4+YCB3aGVuIHRoZSBrZXkgdHlwZSBpcyBnZW5lcmljOyBhc3NpZ25pbmcgYWZ0ZXIgZGVjbGFyYXRpb24ga2VlcHMgdGhlIHRhcmdldCB0eXBlIGtub3duLlxuICAgIGZhY3Rvcmllc1twYXJhbXMuZnVuY3Rpb25OYW1lXSA9IChvcmlnaW5hbFZhbHVlOiAkT2JqZWN0W0Z1bmN0aW9uTmFtZV0pOiAkT2JqZWN0W0Z1bmN0aW9uTmFtZV0gPT4ge1xuICAgICAgY29uc3QgcGF0Y2hlZFZhbHVlID0gcGFyYW1zLnBhdGNoSGFuZGxlcihvcmlnaW5hbFZhbHVlKTtcbiAgICAgIGlmICghcGFyYW1zLm9uY2UpIHtcbiAgICAgICAgcmV0dXJuIHBhdGNoZWRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQSBgb25jZWAgcGF0Y2ggdW5sb2FkcyB0aGlzIGNvbXBvbmVudCBhZnRlciB0aGUgZmlyc3QgaW52b2NhdGlvbiBcdTIwMTQgcnVubmluZyB0aGUgcmVnaXN0ZXJlZFxuICAgICAgLy8gVW5pbnN0YWxsZXIgYW5kIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwuIGB1bmxvYWRDb21wb25lbnRgIGlzIGFuIGFycm93IHNvIGl0IGNhcHR1cmVzIHRoZVxuICAgICAgLy8gQ29tcG9uZW50IGB0aGlzYDsgdGhlIG5lc3RlZCBgb25jZVBhdGNoZWRWYWx1ZWAgbXVzdCBiZSBhIGZ1bmN0aW9uIHRvIHJlY2VpdmUgdGhlIGNhbGwtdGltZVxuICAgICAgLy8gYHRoaXNgLiBPd24gbWVtYmVycyAoZS5nLiBhIGBEZWJvdW5jZXJgJ3MgYGNhbmNlbGAvYHJ1bmApIGFyZSBjb3BpZWQgb250byBpdCBzbyBmdW5jdGlvbi1saWtlXG4gICAgICAvLyBWYWx1ZXMga2VlcCB3b3JraW5nLlxuICAgICAgY29uc3QgdW5sb2FkQ29tcG9uZW50ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnVubG9hZCgpO1xuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIG9uY2VQYXRjaGVkVmFsdWUodGhpczogdW5rbm93biwgLi4uJGFyZ3VtZW50czogdW5rbm93bltdKTogdW5rbm93biB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkocGF0Y2hlZFZhbHVlLCB0aGlzLCAkYXJndW1lbnRzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB1bmxvYWRDb21wb25lbnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob25jZVBhdGNoZWRWYWx1ZSwgcGF0Y2hlZFZhbHVlKSBhcyAkT2JqZWN0W0Z1bmN0aW9uTmFtZV07XG4gICAgfTtcblxuICAgIHRoaXMucmVnaXN0ZXJQYXRjaChwYXJhbXMuJG9iamVjdCwgZmFjdG9yaWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBzaW5nbGUtbWV0aG9kIHBhdGNoIHVzaW5nIGEgc2ltcGxpZmllZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgdG8gcGF0Y2guXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBvZiB0aGUgcGF0Y2guXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJNZXRob2RQYXRjaDwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBjb25zdCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4oXG4gICAgcGFyYW1zOiBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3Rlck1ldGhvZFBhdGNoUGFyYW1zPCRPYmplY3QsIE1ldGhvZE5hbWU+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG5cbiAgICB0eXBlICRGdW5jdGlvbiA9IEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcblxuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvblBhdGNoKHtcbiAgICAgICRvYmplY3Q6IHBhcmFtcy4kb2JqZWN0LFxuICAgICAgZnVuY3Rpb25OYW1lOiBwYXJhbXMubWV0aG9kTmFtZSxcbiAgICAgIG9uY2U6IHBhcmFtcy5vbmNlID8/IGZhbHNlLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAob3JpZ2luYWxNZXRob2RSYXcpID0+IHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbE1ldGhvZFJhdyBhcyAkRnVuY3Rpb247XG4gICAgICAgIGNvbnN0IGZpbmFsUGF0Y2hlZE1ldGhvZCA9IHBhcmFtcy5wb3N0UGF0Y2hIYW5kbGVyPy4oe1xuICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLFxuICAgICAgICAgIHBhdGNoZWRNZXRob2RcbiAgICAgICAgfSkgPz8gcGF0Y2hlZE1ldGhvZDtcbiAgICAgICAgcmV0dXJuIGZpbmFsUGF0Y2hlZE1ldGhvZCBhcyAkT2JqZWN0W01ldGhvZE5hbWVdO1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhdGNoZWRNZXRob2QodGhpczogJE9iamVjdCwgLi4ub3JpZ2luYWxBcmd1bWVudHM6IFBhcmFtZXRlcnM8JEZ1bmN0aW9uPik6IFJldHVyblR5cGU8JEZ1bmN0aW9uPiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtdGhpcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMsIHVuaWNvcm4vbm8tdGhpcy1hc3NpZ25tZW50IC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBgdGhpc2AgY29udGV4dC5cbiAgICAgICAgICBjb25zdCBvcmlnaW5hbFRoaXMgPSB0aGlzO1xuICAgICAgICAgIHJldHVybiBwYXJhbXMucGF0Y2hIYW5kbGVyKHtcbiAgICAgICAgICAgIGZhbGxiYWNrKCkge1xuICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuY2FsbChvcmlnaW5hbFRoaXMsIC4uLm9yaWdpbmFsQXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmlnaW5hbEFyZ3VtZW50cyxcbiAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLFxuICAgICAgICAgICAgb3JpZ2luYWxNZXRob2RCb3VuZDogb3JpZ2luYWxNZXRob2QuYmluZChvcmlnaW5hbFRoaXMpLFxuICAgICAgICAgICAgb3JpZ2luYWxUaGlzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghcGFyYW1zLnBhdGNoVG9rZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGUgdG9rZW4gbWFya3MgdGhlIElOU1RBTExFRCBtZXRob2QsIHJlYWQgYmFjayBvbmNlIHRoZSBwYXRjaCBpcyBpbiBwbGFjZS5cbiAgICAvLyBUaGF0IGlzIHRoZSBpZGVudGl0eSB0aGUgbmV4dCBwYXRjaCBvZiB0aGUgc2FtZSBtZXRob2QgcmVjZWl2ZXMgYXMgaXRzIGBvcmlnaW5hbE1ldGhvZGAuXG4gICAgLy8gYG1vbmtleS1hcm91bmRgIGluc3RhbGxzIGEgd3JhcHBlciBvZiBpdHMgb3duIGFuZCBleHBvc2VzIHRoZSB2YWx1ZSBidWlsdCBhYm92ZSBvbmx5IHZpYSBpdHMgcHJvdG90eXBlLlxuICAgIC8vIE1hcmtpbmcgdGhhdCB2YWx1ZSwgb3IgdGhlIG1ldGhvZCBiZWluZyB3cmFwcGVkIGFzIHRoaXMgb25jZSBkaWQsIG1hdGNoZXMgbm90aGluZyB0aGUgbmV4dCBwYXRjaCBzZWVzLlxuICAgIC8vIERyb3BwaW5nIHRoZSB0b2tlbiBvbiB1bmxvYWQgbGV0cyBhIGRlZmVycmluZyBsYXRlciBwYXRjaCB0YWtlIG92ZXIsIHNpbmNlIHRoZSBndWFyZCBpcyByZWFkIHBlciBjYWxsLlxuICAgIGNvbnN0IHBhdGNoZWRNZXRob2QgPSBwYXJhbXMuJG9iamVjdFtwYXJhbXMubWV0aG9kTmFtZV0gYXMgR2VuZXJpY0Z1bmN0aW9uO1xuICAgIGNvbnN0IG1vbmtleUFyb3VuZFBhdGNoZXMgPSBnZXRNb25rZXlBcm91bmRQYXRjaGVzKCk7XG4gICAgbW9ua2V5QXJvdW5kUGF0Y2hlcy5zZXQocGF0Y2hlZE1ldGhvZCwgcGFyYW1zLnBhdGNoVG9rZW4pO1xuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgbW9ua2V5QXJvdW5kUGF0Y2hlcy5kZWxldGUocGF0Y2hlZE1ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgcGF0Y2ggdXNpbmcgcmF3IGZhY3RvcmllcyAoYWR2YW5jZWQgQVBJKS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKiBAcGFyYW0gZmFjdG9yaWVzIC0gVGhlIGZhY3RvcmllcyB0byBhcHBseSB0byB0aGUgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyUGF0Y2g8JE9iamVjdCBleHRlbmRzIG9iamVjdD4oJG9iamVjdDogJE9iamVjdCwgZmFjdG9yaWVzOiBGYWN0b3JpZXM8JE9iamVjdD4pOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuXG4gICAgY29uc3QgdW5pbnN0YWxsZXIgPSBhcm91bmQoJG9iamVjdCwgZmFjdG9yaWVzKTtcbiAgICB0aGlzLnJlZ2lzdGVyKHVuaW5zdGFsbGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBwYXRjaCB0byB0aGUgb2JqZWN0LlxuICogQmV0dGVyIHN0cm9uZ2x5LXR5cGVkIHZlcnNpb24gb2YgYG1vbmtleS1hcm91bmRgLlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gKiBAcGFyYW0gJG9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gKiBAcGFyYW0gZmFjdG9yaWVzIC0gVGhlIGZhY3RvcmllcyB0byBhcHBseSB0byB0aGUgb2JqZWN0LlxuICogQHJldHVybnMgVGhlIHVuaW5zdGFsbGVyIHRoYXQgcmVtb3ZlcyB0aGUgcGF0Y2ggd2hlbiBjYWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcm91bmQ8JE9iamVjdCBleHRlbmRzIG9iamVjdD4oJG9iamVjdDogJE9iamVjdCwgZmFjdG9yaWVzOiBGYWN0b3JpZXM8JE9iamVjdD4pOiBVbmluc3RhbGxlciB7XG4gIHJldHVybiBvcmlnaW5hbEFyb3VuZCgkb2JqZWN0IGFzIEdlbmVyaWNPYmplY3QsIGZhY3RvcmllcyBhcyBPcmlnaW5hbEZhY3RvcmllczxHZW5lcmljT2JqZWN0Pik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZnVuY3Rpb24gaGFzIGEgc3BlY2lmaWMgcGF0Y2ggdG9rZW4uXG4gKlxuICogQSB0b2tlbiBpcyBjYXJyaWVkIGJ5IHRoZSBtZXRob2QgYSB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyTWV0aG9kUGF0Y2h9IGNhbGwgSU5TVEFMTEVELCBzb1xuICogdGhlIGludGVuZGVkIGNhbGxlciBpcyBhIGxhdGVyIHBhdGNoIG9mIHRoZSBzYW1lIG1ldGhvZCwgY2hlY2tpbmcgdGhlIGBvcmlnaW5hbE1ldGhvZGAgaXQgd3JhcHBlZCBpblxuICogb3JkZXIgdG8gZGVmZXIgdG8gdGhlIHBhdGNoIGFscmVhZHkgaW4gcGxhY2U6XG4gKlxuICogYGBgdHNcbiAqIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsTWV0aG9kIH0pID0+IHtcbiAqICAgaWYgKGhhc1BhdGNoVG9rZW4ob3JpZ2luYWxNZXRob2QsIFBBVENIX1RPS0VOKSkge1xuICogICAgIHJldHVybiBmYWxsYmFjaygpO1xuICogICB9XG4gKiAgIC4uLlxuICogfVxuICogYGBgXG4gKlxuICogVGhlIGNoZWNrIGlzIG1hZGUgcGVyIGNhbGwsIHNvIGl0IHN0b3BzIHJlcG9ydGluZyB0aGUgZWFybGllciBwYXRjaCBvbmNlIHRoYXQgcGF0Y2gncyBjb21wb25lbnQgdW5sb2Fkcy5cbiAqXG4gKiBAcGFyYW0gJGZ1bmN0aW9uIC0gVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHBhcmFtIHBhdGNoVG9rZW4gLSBUaGUgcGF0Y2ggdG9rZW4gdG8gY2hlY2sgZm9yLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZnVuY3Rpb24gaGFzIHRoZSBwYXRjaCB0b2tlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1BhdGNoVG9rZW4oJGZ1bmN0aW9uOiBHZW5lcmljRnVuY3Rpb24sIHBhdGNoVG9rZW46IHN5bWJvbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0TW9ua2V5QXJvdW5kUGF0Y2hlcygpLmdldCgkZnVuY3Rpb24pID09PSBwYXRjaFRva2VuO1xufVxuXG5mdW5jdGlvbiBnZXRNb25rZXlBcm91bmRQYXRjaGVzKCk6IFdlYWtNYXA8R2VuZXJpY0Z1bmN0aW9uLCBzeW1ib2w+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSgnbW9ua2V5QXJvdW5kUGF0Y2hlcycsIG5ldyBXZWFrTWFwPEdlbmVyaWNGdW5jdGlvbiwgc3ltYm9sPigpKS52YWx1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLFVBQVUsc0JBQXNCO0FBTXpDLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMsbUJBQW1CO0FBNk1yQixNQUFNLDhCQUE4QixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVE5QyxzQkFDTCxRQUNNO0FBQ04sU0FBSyxhQUFhO0FBRWxCLFVBQU0sWUFBZ0MsQ0FBQztBQUV2QyxjQUFVLE9BQU8sWUFBWSxJQUFJLENBQUMsa0JBQWdFO0FBQ2hHLFlBQU0sZUFBZSxPQUFPLGFBQWEsYUFBYTtBQUN0RCxVQUFJLENBQUMsT0FBTyxNQUFNO0FBQ2hCLGVBQU87QUFBQSxNQUNUO0FBT0EsWUFBTSxrQkFBa0IsTUFBWTtBQUNsQyxhQUFLLE9BQU87QUFBQSxNQUNkO0FBQ0EsZUFBUyxvQkFBbUMsWUFBZ0M7QUFDMUUsWUFBSTtBQUNGLGlCQUFPLFFBQVEsTUFBTSxjQUFjLE1BQU0sVUFBVTtBQUFBLFFBQ3JELFVBQUU7QUFDQSwwQkFBZ0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFDQSxhQUFPLE9BQU8sT0FBTyxrQkFBa0IsWUFBWTtBQUFBLElBQ3JEO0FBRUEsU0FBSyxjQUFjLE9BQU8sU0FBUyxTQUFTO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sb0JBQ0wsUUFDTTtBQUNOLFNBQUssYUFBYTtBQUlsQixTQUFLLHNCQUFzQjtBQUFBLE1BQ3pCLFNBQVMsT0FBTztBQUFBLE1BQ2hCLGNBQWMsT0FBTztBQUFBLE1BQ3JCLE1BQU0sT0FBTyxRQUFRO0FBQUEsTUFDckIsY0FBYyxDQUFDLHNCQUFzQjtBQUNuQyxjQUFNLGlCQUFpQjtBQUN2QixjQUFNLHFCQUFxQixPQUFPLG1CQUFtQjtBQUFBLFVBQ25EO0FBQUEsVUFDQSxlQUFBQTtBQUFBLFFBQ0YsQ0FBQyxLQUFLQTtBQUNOLGVBQU87QUFFUCxpQkFBU0Esa0JBQWdDLG1CQUFpRTtBQUV4RyxnQkFBTSxlQUFlO0FBQ3JCLGlCQUFPLE9BQU8sYUFBYTtBQUFBLFlBQ3pCLFdBQVc7QUFDVCxxQkFBTyxlQUFlLEtBQUssY0FBYyxHQUFHLGlCQUFpQjtBQUFBLFlBQy9EO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLHFCQUFxQixlQUFlLEtBQUssWUFBWTtBQUFBLFlBQ3JEO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFFRCxRQUFJLENBQUMsT0FBTyxZQUFZO0FBQ3RCO0FBQUEsSUFDRjtBQU9BLFVBQU0sZ0JBQWdCLE9BQU8sUUFBUSxPQUFPLFVBQVU7QUFDdEQsVUFBTSxzQkFBc0IsdUJBQXVCO0FBQ25ELHdCQUFvQixJQUFJLGVBQWUsT0FBTyxVQUFVO0FBQ3hELFNBQUssU0FBUyxNQUFNO0FBQ2xCLDBCQUFvQixPQUFPLGFBQWE7QUFBQSxJQUMxQyxDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTTyxjQUFzQyxTQUFrQixXQUFxQztBQUNsRyxTQUFLLGFBQWE7QUFFbEIsVUFBTSxjQUFjLE9BQU8sU0FBUyxTQUFTO0FBQzdDLFNBQUssU0FBUyxXQUFXO0FBQUEsRUFDM0I7QUFDRjtBQVdPLFNBQVMsT0FBK0IsU0FBa0IsV0FBNEM7QUFDM0csU0FBTyxlQUFlLFNBQTBCLFNBQTZDO0FBQy9GO0FBd0JPLFNBQVMsY0FBYyxXQUE0QixZQUE2QjtBQUNyRixTQUFPLHVCQUF1QixFQUFFLElBQUksU0FBUyxNQUFNO0FBQ3JEO0FBRUEsU0FBUyx5QkFBMkQ7QUFDbEUsU0FBTyx5QkFBeUIsdUJBQXVCLG9CQUFJLFFBQWlDLENBQUMsRUFBRTtBQUNqRzsiLAogICJuYW1lcyI6IFsicGF0Y2hlZE1ldGhvZCJdCn0K
148
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbXByb3ZlZCB0eXBlLXNhZmUgd3JhcHBlciBvZiB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbW9ua2V5LWFyb3VuZH0gbGlicmFyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbmFsS2V5cyB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFyb3VuZCBhcyBvcmlnaW5hbEFyb3VuZCB9IGZyb20gJ21vbmtleS1hcm91bmQnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi8uLi90eXBlLnRzJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEEgdHlwZSBvZiB0aGUgZmFjdG9yaWVzIHRvIGFwcGx5IHRvIHRoZSBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgRmFjdG9yaWVzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0gUGFydGlhbDxGdWxsRmFjdG9yaWVzPCRPYmplY3Q+PjtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGNhbGxhYmxlIFx1MjAxNCBhIG1ldGhvZCwgb3IgYSBmdW5jdGlvbi1saWtlIG9iamVjdCBzdWNoIGFzIGEgYERlYm91bmNlcmAuIFRoZXNlIGFyZSB0aGUgbWVtYmVyc1xuICogYWNjZXB0ZWQgYnkge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgZmlsdGVyZWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uS2V5czwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IENvbmRpdGlvbmFsS2V5czwkT2JqZWN0LCBHZW5lcmljRnVuY3Rpb24gfCB1bmRlZmluZWQ+ICYga2V5b2YgJE9iamVjdDtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGEgcGxhaW4gZnVuY3Rpb24gKGEgXCJyZWFsIG1ldGhvZFwiKS4gRnVuY3Rpb24tbGlrZSBvYmplY3RzIHRoYXQgY2FycnkgZXh0cmEgbWVtYmVycyBhcmVcbiAqIGV4Y2x1ZGVkIFx1MjAxNCBlLmcuIGEgYERlYm91bmNlcmAgKHdoaWNoIGFkZHMgYGNhbmNlbGAvYHJ1bmApIGJlbG9uZ3MgdG8ge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LFxuICogbm90IHtAbGluayBNb25rZXlBcm91bmRDb21wb25lbnQjcmVnaXN0ZXJNZXRob2RQYXRjaH0uIFRoZSBjaGVjayBpcyB3aGV0aGVyIHRoZSBtZW1iZXIgaGFzIGFueSBvd24ga2V5cyBiZXlvbmQgYSBiYXJlXG4gKiBmdW5jdGlvbidzIChgRXhjbHVkZTxrZXlvZiBULCBrZXlvZiBHZW5lcmljRnVuY3Rpb24+YCBpcyBgbmV2ZXJgKS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIGtleXMgYXJlIGZpbHRlcmVkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWdlbmVyYXRlZC1lbXB0eS1vYmplY3QtdHlwZSAtLSBGYWxzZSBwb3NpdGl2ZS4gVGhlIHJ1bGUgcmVwb3J0cyB0aGUgYE1ldGhvZEtleXNNYXA8JE9iamVjdD5gIHJlZmVyZW5jZSwgd2hpY2ggaGFzIG5vIG1lbWJlcnMgdW50aWwgYCRPYmplY3RgIGlzIGtub3duLCBzbyBpdCByZWFkcyBhcyBlbXB0eSBpbnNpZGUgdGhpcyBnZW5lcmljIGRlY2xhcmF0aW9uLiBPbmNlIGluc3RhbnRpYXRlZCBpdCBpcyBhIHJlYWwga2V5IHVuaW9uLCBhcyB0aGUgYE1ldGhvZEtleXNgIHR5cGUgdGVzdHMgYXNzZXJ0LlxuZXhwb3J0IHR5cGUgTWV0aG9kS2V5czwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IE1ldGhvZEtleXNNYXA8JE9iamVjdD5bRnVuY3Rpb25LZXlzPCRPYmplY3Q+XTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyRnVuY3Rpb25QYXRjaH0uXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAqIEB0eXBlUGFyYW0gRnVuY3Rpb25OYW1lIC0gVGhlIGZ1bmN0aW9uIG5hbWUgdG8gcGF0Y2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ua2V5QXJvdW5kQ29tcG9uZW50UmVnaXN0ZXJGdW5jdGlvblBhdGNoUGFyYW1zPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIEZ1bmN0aW9uTmFtZSBleHRlbmRzIEZ1bmN0aW9uS2V5czwkT2JqZWN0Pj4ge1xuICAvKipcbiAgICogVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5ICRvYmplY3Q6ICRPYmplY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiBuYW1lIHRvIHBhdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25OYW1lOiBGdW5jdGlvbk5hbWU7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCB0aGUgcGF0Y2ggdW5pbnN0YWxscyBpdHNlbGYgdGhlIGZpcnN0IHRpbWUgdGhlIHBhdGNoZWQgZnVuY3Rpb24gaXMgaW52b2tlZCAoYnlcbiAgICogdW5sb2FkaW5nIHRoaXMgY29tcG9uZW50KSwgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCBcdTIwMTQgc28gdGhlIGludGVyY2VwdGlvbiBoYXBwZW5zIGV4YWN0bHkgb25jZS5cbiAgICogSW50ZW5kZWQgZm9yIGEgY29tcG9uZW50IGRlZGljYXRlZCB0byB0aGlzIHNpbmdsZSBwYXRjaC4gRXhpc3RpbmcgY2FsbGVycyB0aGF0IG9taXQgaXQgYXJlXG4gICAqIHVuYWZmZWN0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IG9uY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQYXRjaCBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIG9yaWdpbmFsIHZhbHVlIGFuZCByZXR1cm5zIHRoZSBwYXRjaGVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gb3JpZ2luYWxWYWx1ZSAtIFRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoZSBwYXRjaGVkIHZhbHVlIG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHBhdGNoSGFuZGxlcihvcmlnaW5hbFZhbHVlOiAkT2JqZWN0W0Z1bmN0aW9uTmFtZV0pOiAkT2JqZWN0W0Z1bmN0aW9uTmFtZV07XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBwYXNzZWQgdG8ge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3Rlck1ldGhvZFBhdGNofS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIHRvIHBhdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbmtleUFyb3VuZENvbXBvbmVudFJlZ2lzdGVyTWV0aG9kUGF0Y2hQYXJhbXM8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+IHtcbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gICAqL1xuICByZWFkb25seSAkb2JqZWN0OiAkT2JqZWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIG5hbWUgdG8gcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBtZXRob2ROYW1lOiBNZXRob2ROYW1lO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgdGhlIHBhdGNoIHVuaW5zdGFsbHMgaXRzZWxmIHRoZSBmaXJzdCB0aW1lIHRoZSBwYXRjaGVkIG1ldGhvZCBpcyBpbnZva2VkLCByZXN0b3JpbmdcbiAgICogdGhlIG9yaWdpbmFsIFx1MjAxNCBzbyB0aGUgaW50ZXJjZXB0aW9uIGhhcHBlbnMgZXhhY3RseSBvbmNlLiBFeGlzdGluZyBjYWxsZXJzIHRoYXQgb21pdCBpdCBhcmVcbiAgICogdW5hZmZlY3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgb25jZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRjaCBoYW5kbGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0Y2hIYW5kbGVyOiBQYXRjaEhhbmRsZXJGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgdG9rZW4gdG8gaWRlbnRpZnkgdGhlIHBhdGNoLlxuICAgKlxuICAgKiBUaGUgdG9rZW4gaXMgcmVjb3JkZWQgYWdhaW5zdCB0aGUgbWV0aG9kIHRoaXMgcGF0Y2ggSU5TVEFMTFMsIHNvIHRoZSBuZXh0IHBhdGNoIG9mIHRoZSBzYW1lIG1ldGhvZFxuICAgKiBkZXRlY3RzIGl0IHZpYSB7QGxpbmsgaGFzUGF0Y2hUb2tlbn0gb24gaXRzIG93biBgb3JpZ2luYWxNZXRob2RgIGFuZCBjYW4gZGVmZXIgdG8gdGhpcyBvbmUuIFRoZVxuICAgKiBwYXRjaCB0aGF0IGluc3RhbGxzIGEgdG9rZW4gdGhlcmVmb3JlIG5ldmVyIHNlZXMgaXRzIG93biB0b2tlbiBcdTIwMTQgb25seSB0aGUgcGF0Y2hlcyBzdGFja2VkIG9uIHRvcCBvZlxuICAgKiBpdCBkby4gVXNlIGEgYFN5bWJvbC5mb3JgIHRva2VuIHRvIG1ha2UgdGhlIGRldGVjdGlvbiB3b3JrIGFjcm9zcyBpbmRlcGVuZGVudGx5IGJ1bmRsZWQgY29waWVzIG9mXG4gICAqIHRoaXMgbGlicmFyeS5cbiAgICpcbiAgICogVGhlIHRva2VuIGlzIGRyb3BwZWQgd2hlbiB0aGlzIGNvbXBvbmVudCB1bmxvYWRzLCBzbyBhIGxhdGVyIHBhdGNoIHRoYXQgaGFkIGRlZmVycmVkIHRha2VzIG92ZXIgb25cbiAgICogaXRzIG5leHQgY2FsbC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGNoVG9rZW4/OiBzeW1ib2w7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHBvc3QtcGF0Y2ggaGFuZGxlciBmdW5jdGlvbiB0aGF0IHJ1bnMgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBwb3N0UGF0Y2hIYW5kbGVyPzogUG9zdFBhdGNoSGFuZGxlckZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xufVxuXG4vKipcbiAqIEEgcGF0Y2ggaGFuZGxlciBmdW5jdGlvbiB0aGF0IGludGVyY2VwdHMgY2FsbHMgdG8gYSBtZXRob2Qgb24gYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgYmVpbmcgcGF0Y2hlZC5cbiAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSBiZWluZyBwYXRjaGVkLlxuICovXG5leHBvcnQgdHlwZSBQYXRjaEhhbmRsZXJGdW5jdGlvbjwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4gPSAoXG4gIHBhcmFtczogUGF0Y2hIYW5kbGVyUGFyYW1zPCRPYmplY3QsIE1ldGhvZE5hbWU+XG4pID0+IFJldHVyblR5cGU8RXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+PjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byBhIHtAbGluayBQYXRjaEhhbmRsZXJGdW5jdGlvbn0gY2FsbGJhY2suXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0Y2hIYW5kbGVyUGFyYW1zPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PiB7XG4gIC8qKlxuICAgKiBJbnZva2VzIHRoZSBvcmlnaW5hbCBtZXRob2Qgd2l0aCB0aGUgb3JpZ2luYWwgYHRoaXNgIGFuZCBhcmd1bWVudHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoYXRldmVyIHRoZSBvcmlnaW5hbCBtZXRob2QgcmV0dXJucy5cbiAgICovXG4gIGZhbGxiYWNrKHRoaXM6IHZvaWQpOiBSZXR1cm5UeXBlPEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPj47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBhcmd1bWVudHMgb2YgdGhlIGludGVyY2VwdGVkIGNhbGwsIGFzIGEgdHVwbGUuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbEFyZ3VtZW50czogUGFyYW1ldGVyczxFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgKHVucGF0Y2hlZCkgbWV0aG9kLiBDYWxsIHZpYSBgb3JpZ2luYWxGbi5jYWxsKG9yaWdpbmFsVGhpcywgLi4ub3JpZ2luYWxBcmdzKWAuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbE1ldGhvZDogRXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgbWV0aG9kLCBidXQgd2l0aCB0aGUgYHRoaXNgIGNvbnRleHQgYWxyZWFkeSBib3VuZCB0byB0aGUgb3JpZ2luYWwgb2JqZWN0LiBDYWxsIHZpYSBgb3JpZ2luYWxNZXRob2RCb3VuZCguLi5vcmlnaW5hbEFyZ3MpYC5cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbmFsTWV0aG9kQm91bmQ6IE9taXRUaGlzUGFyYW1ldGVyPEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPj47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBgdGhpc2AgY29udGV4dCBvZiB0aGUgaW50ZXJjZXB0ZWQgY2FsbC5cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbmFsVGhpczogJE9iamVjdDtcbn1cblxuLyoqXG4gKiBBIHBvc3QtcGF0Y2ggaGFuZGxlciBmdW5jdGlvbiB0aGF0IHJ1bnMgYWZ0ZXIgYSBwYXRjaCBpcyBhcHBsaWVkLlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgYmVpbmcgcGF0Y2hlZC5cbiAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSBiZWluZyBwYXRjaGVkLlxuICovXG5leHBvcnQgdHlwZSBQb3N0UGF0Y2hIYW5kbGVyRnVuY3Rpb248JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+ID0gKFxuICBwYXJhbXM6IFBvc3RQYXRjaEhhbmRsZXJQYXJhbXM8JE9iamVjdCwgTWV0aG9kTmFtZT5cbikgPT4gTWF5YmVSZXR1cm48RXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+PjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byBhIHtAbGluayBQb3N0UGF0Y2hIYW5kbGVyRnVuY3Rpb259IGNhbGxiYWNrLlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgYmVpbmcgcGF0Y2hlZC5cbiAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSBiZWluZyBwYXRjaGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RQYXRjaEhhbmRsZXJQYXJhbXM8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+IHtcbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCAodW5wYXRjaGVkKSBtZXRob2QuIENhbGwgdmlhIGBvcmlnaW5hbEZuLmNhbGwob3JpZ2luYWxUaGlzLCAuLi5vcmlnaW5hbEFyZ3MpYC5cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbmFsTWV0aG9kOiBFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRjaGVkIG1ldGhvZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGNoZWRNZXRob2Q6IEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcbn1cblxudHlwZSBFeHRyYWN0RnVuY3Rpb248JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+ID0gR2VuZXJpY0Z1bmN0aW9uPFBhcmFtZXRlcnM8RXh0cmFjdDwkT2JqZWN0W01ldGhvZE5hbWVdLCBHZW5lcmljRnVuY3Rpb24+PiwgUmV0dXJuVHlwZTxFeHRyYWN0PCRPYmplY3RbTWV0aG9kTmFtZV0sIEdlbmVyaWNGdW5jdGlvbj4+PjtcblxudHlwZSBGdWxsRmFjdG9yaWVzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBbS2V5IGluIGtleW9mICRPYmplY3RdOiAob3JpZ2luYWxWYWx1ZTogJE9iamVjdFtLZXldKSA9PiAkT2JqZWN0W0tleV07XG59O1xuXG50eXBlIE1ldGhvZEtleXNNYXA8JE9iamVjdCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtLZXkgaW4gRnVuY3Rpb25LZXlzPCRPYmplY3Q+XTogW0V4Y2x1ZGU8a2V5b2YgTm9uTnVsbGFibGU8JE9iamVjdFtLZXldPiwga2V5b2YgR2VuZXJpY0Z1bmN0aW9uPl0gZXh0ZW5kcyBbbmV2ZXJdID8gS2V5IDogbmV2ZXI7XG59O1xuXG50eXBlIE9yaWdpbmFsRmFjdG9yaWVzPCRPYmplY3QgZXh0ZW5kcyBHZW5lcmljT2JqZWN0PiA9IFBhcmFtZXRlcnM8dHlwZW9mIG9yaWdpbmFsQXJvdW5kPCRPYmplY3Q+PlsxXTtcblxudHlwZSBVbmluc3RhbGxlciA9ICgpID0+IHZvaWQ7XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBtYW5hZ2VzIG1vbmtleS1wYXRjaGVzIHdpdGggbGlmZWN5Y2xlLWJvdW5kIGNsZWFudXAuXG4gKiBBbGwgcGF0Y2hlcyByZWdpc3RlcmVkIHZpYSB0aGlzIGNvbXBvbmVudCBhcmUgYXV0b21hdGljYWxseSB1bmluc3RhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgdW5sb2Fkcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vbmtleUFyb3VuZENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHBhdGNoIGZvciBhIHNpbmdsZSBmdW5jdGlvbi1saWtlIG1lbWJlciAoYSBtZXRob2QsIG9yIGEgY2FsbGFibGUgc3VjaCBhcyBhIGBEZWJvdW5jZXJgKSB1c2luZyBhIHNpbXBsaWZpZWQgaGFuZGxlci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHR5cGVQYXJhbSBGdW5jdGlvbk5hbWUgLSBUaGUgZnVuY3Rpb24gbmFtZSB0byBwYXRjaC5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBwYXRjaC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZ1bmN0aW9uUGF0Y2g8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgY29uc3QgRnVuY3Rpb25OYW1lIGV4dGVuZHMgRnVuY3Rpb25LZXlzPCRPYmplY3Q+PihcbiAgICBwYXJhbXM6IE1vbmtleUFyb3VuZENvbXBvbmVudFJlZ2lzdGVyRnVuY3Rpb25QYXRjaFBhcmFtczwkT2JqZWN0LCBGdW5jdGlvbk5hbWU+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG5cbiAgICBjb25zdCBmYWN0b3JpZXM6IEZhY3RvcmllczwkT2JqZWN0PiA9IHt9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWltbWVkaWF0ZS1tdXRhdGlvbiAtLSBBIGNvbXB1dGVkIGtleSBpbiBhbiBvYmplY3QgbGl0ZXJhbCBkb2VzIG5vdCBtYXRjaCBgUGFydGlhbDxGdWxsRmFjdG9yaWVzPCRPYmplY3Q+PmAgd2hlbiB0aGUga2V5IHR5cGUgaXMgZ2VuZXJpYzsgYXNzaWduaW5nIGFmdGVyIGRlY2xhcmF0aW9uIGtlZXBzIHRoZSB0YXJnZXQgdHlwZSBrbm93bi5cbiAgICBmYWN0b3JpZXNbcGFyYW1zLmZ1bmN0aW9uTmFtZV0gPSAob3JpZ2luYWxWYWx1ZTogJE9iamVjdFtGdW5jdGlvbk5hbWVdKTogJE9iamVjdFtGdW5jdGlvbk5hbWVdID0+IHtcbiAgICAgIGNvbnN0IHBhdGNoZWRWYWx1ZSA9IHBhcmFtcy5wYXRjaEhhbmRsZXIob3JpZ2luYWxWYWx1ZSk7XG4gICAgICBpZiAoIXBhcmFtcy5vbmNlKSB7XG4gICAgICAgIHJldHVybiBwYXRjaGVkVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEEgYG9uY2VgIHBhdGNoIHVubG9hZHMgdGhpcyBjb21wb25lbnQgYWZ0ZXIgdGhlIGZpcnN0IGludm9jYXRpb24gXHUyMDE0IHJ1bm5pbmcgdGhlIHJlZ2lzdGVyZWRcbiAgICAgIC8vIFVuaW5zdGFsbGVyIGFuZCByZXN0b3JpbmcgdGhlIG9yaWdpbmFsLiBgdW5sb2FkQ29tcG9uZW50YCBpcyBhbiBhcnJvdyBzbyBpdCBjYXB0dXJlcyB0aGVcbiAgICAgIC8vIENvbXBvbmVudCBgdGhpc2A7IHRoZSBuZXN0ZWQgYG9uY2VQYXRjaGVkVmFsdWVgIG11c3QgYmUgYSBmdW5jdGlvbiB0byByZWNlaXZlIHRoZSBjYWxsLXRpbWVcbiAgICAgIC8vIGB0aGlzYC4gT3duIG1lbWJlcnMgKGUuZy4gYSBgRGVib3VuY2VyYCdzIGBjYW5jZWxgL2BydW5gKSBhcmUgY29waWVkIG9udG8gaXQgc28gZnVuY3Rpb24tbGlrZVxuICAgICAgLy8gVmFsdWVzIGtlZXAgd29ya2luZy5cbiAgICAgIGNvbnN0IHVubG9hZENvbXBvbmVudCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy51bmxvYWQoKTtcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBvbmNlUGF0Y2hlZFZhbHVlKHRoaXM6IHVua25vd24sIC4uLiRhcmd1bWVudHM6IHVua25vd25bXSk6IHVua25vd24ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHBhdGNoZWRWYWx1ZSwgdGhpcywgJGFyZ3VtZW50cyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdW5sb2FkQ29tcG9uZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9uY2VQYXRjaGVkVmFsdWUsIHBhdGNoZWRWYWx1ZSkgYXMgJE9iamVjdFtGdW5jdGlvbk5hbWVdO1xuICAgIH07XG5cbiAgICB0aGlzLnJlZ2lzdGVyUGF0Y2gocGFyYW1zLiRvYmplY3QsIGZhY3Rvcmllcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc2luZ2xlLW1ldGhvZCBwYXRjaCB1c2luZyBhIHNpbXBsaWZpZWQgaGFuZGxlci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIHRvIHBhdGNoLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgb2YgdGhlIHBhdGNoLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyTWV0aG9kUGF0Y2g8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgY29uc3QgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+KFxuICAgIHBhcmFtczogTW9ua2V5QXJvdW5kQ29tcG9uZW50UmVnaXN0ZXJNZXRob2RQYXRjaFBhcmFtczwkT2JqZWN0LCBNZXRob2ROYW1lPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuXG4gICAgdHlwZSAkRnVuY3Rpb24gPSBFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT47XG5cbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25QYXRjaCh7XG4gICAgICAkb2JqZWN0OiBwYXJhbXMuJG9iamVjdCxcbiAgICAgIGZ1bmN0aW9uTmFtZTogcGFyYW1zLm1ldGhvZE5hbWUsXG4gICAgICBvbmNlOiBwYXJhbXMub25jZSA/PyBmYWxzZSxcbiAgICAgIHBhdGNoSGFuZGxlcjogKG9yaWdpbmFsTWV0aG9kUmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gb3JpZ2luYWxNZXRob2RSYXcgYXMgJEZ1bmN0aW9uO1xuICAgICAgICBjb25zdCBmaW5hbFBhdGNoZWRNZXRob2QgPSBwYXJhbXMucG9zdFBhdGNoSGFuZGxlcj8uKHtcbiAgICAgICAgICBvcmlnaW5hbE1ldGhvZCxcbiAgICAgICAgICBwYXRjaGVkTWV0aG9kXG4gICAgICAgIH0pID8/IHBhdGNoZWRNZXRob2Q7XG4gICAgICAgIHJldHVybiBmaW5hbFBhdGNoZWRNZXRob2QgYXMgJE9iamVjdFtNZXRob2ROYW1lXTtcblxuICAgICAgICBmdW5jdGlvbiBwYXRjaGVkTWV0aG9kKHRoaXM6ICRPYmplY3QsIC4uLm9yaWdpbmFsQXJndW1lbnRzOiBQYXJhbWV0ZXJzPCRGdW5jdGlvbj4pOiBSZXR1cm5UeXBlPCRGdW5jdGlvbj4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXRoaXMsIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzLCB1bmljb3JuL25vLXRoaXMtYXNzaWdubWVudCAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgYHRoaXNgIGNvbnRleHQuXG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxUaGlzID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gcGFyYW1zLnBhdGNoSGFuZGxlcih7XG4gICAgICAgICAgICBmYWxsYmFjaygpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmNhbGwob3JpZ2luYWxUaGlzLCAuLi5vcmlnaW5hbEFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3JpZ2luYWxBcmd1bWVudHMsXG4gICAgICAgICAgICBvcmlnaW5hbE1ldGhvZCxcbiAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kQm91bmQ6IG9yaWdpbmFsTWV0aG9kLmJpbmQob3JpZ2luYWxUaGlzKSxcbiAgICAgICAgICAgIG9yaWdpbmFsVGhpc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXBhcmFtcy5wYXRjaFRva2VuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIHRva2VuIG1hcmtzIHRoZSBJTlNUQUxMRUQgbWV0aG9kLCByZWFkIGJhY2sgb25jZSB0aGUgcGF0Y2ggaXMgaW4gcGxhY2UuXG4gICAgLy8gVGhhdCBpcyB0aGUgaWRlbnRpdHkgdGhlIG5leHQgcGF0Y2ggb2YgdGhlIHNhbWUgbWV0aG9kIHJlY2VpdmVzIGFzIGl0cyBgb3JpZ2luYWxNZXRob2RgLlxuICAgIC8vIGBtb25rZXktYXJvdW5kYCBpbnN0YWxscyBhIHdyYXBwZXIgb2YgaXRzIG93biBhbmQgZXhwb3NlcyB0aGUgdmFsdWUgYnVpbHQgYWJvdmUgb25seSB2aWEgaXRzIHByb3RvdHlwZS5cbiAgICAvLyBNYXJraW5nIHRoYXQgdmFsdWUsIG9yIHRoZSBtZXRob2QgYmVpbmcgd3JhcHBlZCBhcyB0aGlzIG9uY2UgZGlkLCBtYXRjaGVzIG5vdGhpbmcgdGhlIG5leHQgcGF0Y2ggc2Vlcy5cbiAgICAvLyBEcm9wcGluZyB0aGUgdG9rZW4gb24gdW5sb2FkIGxldHMgYSBkZWZlcnJpbmcgbGF0ZXIgcGF0Y2ggdGFrZSBvdmVyLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcmVhZCBwZXIgY2FsbC5cbiAgICBjb25zdCBwYXRjaGVkTWV0aG9kID0gcGFyYW1zLiRvYmplY3RbcGFyYW1zLm1ldGhvZE5hbWVdIGFzIEdlbmVyaWNGdW5jdGlvbjtcbiAgICBjb25zdCBtb25rZXlBcm91bmRQYXRjaGVzID0gZ2V0TW9ua2V5QXJvdW5kUGF0Y2hlcygpO1xuICAgIG1vbmtleUFyb3VuZFBhdGNoZXMuc2V0KHBhdGNoZWRNZXRob2QsIHBhcmFtcy5wYXRjaFRva2VuKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIG1vbmtleUFyb3VuZFBhdGNoZXMuZGVsZXRlKHBhdGNoZWRNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHBhdGNoIHVzaW5nIHJhdyBmYWN0b3JpZXMgKGFkdmFuY2VkIEFQSSkuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gICAqIEBwYXJhbSAkb2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHBhcmFtIGZhY3RvcmllcyAtIFRoZSBmYWN0b3JpZXMgdG8gYXBwbHkgdG8gdGhlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclBhdGNoPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6ICRPYmplY3QsIGZhY3RvcmllczogRmFjdG9yaWVzPCRPYmplY3Q+KTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIGNvbnN0IHVuaW5zdGFsbGVyID0gYXJvdW5kKCRvYmplY3QsIGZhY3Rvcmllcyk7XG4gICAgdGhpcy5yZWdpc3Rlcih1bmluc3RhbGxlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgcGF0Y2ggdG8gdGhlIG9iamVjdC5cbiAqIEJldHRlciBzdHJvbmdseS10eXBlZCB2ZXJzaW9uIG9mIGBtb25rZXktYXJvdW5kYC5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHBhcmFtIGZhY3RvcmllcyAtIFRoZSBmYWN0b3JpZXMgdG8gYXBwbHkgdG8gdGhlIG9iamVjdC5cbiAqIEByZXR1cm5zIFRoZSB1bmluc3RhbGxlciB0aGF0IHJlbW92ZXMgdGhlIHBhdGNoIHdoZW4gY2FsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJvdW5kPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6ICRPYmplY3QsIGZhY3RvcmllczogRmFjdG9yaWVzPCRPYmplY3Q+KTogVW5pbnN0YWxsZXIge1xuICByZXR1cm4gb3JpZ2luYWxBcm91bmQoJG9iamVjdCBhcyBHZW5lcmljT2JqZWN0LCBmYWN0b3JpZXMgYXMgT3JpZ2luYWxGYWN0b3JpZXM8R2VuZXJpY09iamVjdD4pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZ1bmN0aW9uIGhhcyBhIHNwZWNpZmljIHBhdGNoIHRva2VuLlxuICpcbiAqIEEgdG9rZW4gaXMgY2FycmllZCBieSB0aGUgbWV0aG9kIGEge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3Rlck1ldGhvZFBhdGNofSBjYWxsIElOU1RBTExFRCwgc29cbiAqIHRoZSBpbnRlbmRlZCBjYWxsZXIgaXMgYSBsYXRlciBwYXRjaCBvZiB0aGUgc2FtZSBtZXRob2QsIGNoZWNraW5nIHRoZSBgb3JpZ2luYWxNZXRob2RgIGl0IHdyYXBwZWQgaW5cbiAqIG9yZGVyIHRvIGRlZmVyIHRvIHRoZSBwYXRjaCBhbHJlYWR5IGluIHBsYWNlOlxuICpcbiAqIGBgYHRzXG4gKiBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbE1ldGhvZCB9KSA9PiB7XG4gKiAgIGlmIChoYXNQYXRjaFRva2VuKG9yaWdpbmFsTWV0aG9kLCBQQVRDSF9UT0tFTikpIHtcbiAqICAgICByZXR1cm4gZmFsbGJhY2soKTtcbiAqICAgfVxuICogICAuLi5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZSBjaGVjayBpcyBtYWRlIHBlciBjYWxsLCBzbyBpdCBzdG9wcyByZXBvcnRpbmcgdGhlIGVhcmxpZXIgcGF0Y2ggb25jZSB0aGF0IHBhdGNoJ3MgY29tcG9uZW50IHVubG9hZHMuXG4gKlxuICogQHBhcmFtICRmdW5jdGlvbiAtIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEBwYXJhbSBwYXRjaFRva2VuIC0gVGhlIHBhdGNoIHRva2VuIHRvIGNoZWNrIGZvci5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZ1bmN0aW9uIGhhcyB0aGUgcGF0Y2ggdG9rZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNQYXRjaFRva2VuKCRmdW5jdGlvbjogR2VuZXJpY0Z1bmN0aW9uLCBwYXRjaFRva2VuOiBzeW1ib2wpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldE1vbmtleUFyb3VuZFBhdGNoZXMoKS5nZXQoJGZ1bmN0aW9uKSA9PT0gcGF0Y2hUb2tlbjtcbn1cblxuZnVuY3Rpb24gZ2V0TW9ua2V5QXJvdW5kUGF0Y2hlcygpOiBXZWFrTWFwPEdlbmVyaWNGdW5jdGlvbiwgc3ltYm9sPiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoJ21vbmtleUFyb3VuZFBhdGNoZXMnLCBuZXcgV2Vha01hcDxHZW5lcmljRnVuY3Rpb24sIHN5bWJvbD4oKSkudmFsdWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsU0FBUyxVQUFVLHNCQUFzQjtBQU16QyxTQUFTLGdDQUFnQztBQUN6QyxTQUFTLG1CQUFtQjtBQThNckIsTUFBTSw4QkFBOEIsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFROUMsc0JBQ0wsUUFDTTtBQUNOLFNBQUssYUFBYTtBQUVsQixVQUFNLFlBQWdDLENBQUM7QUFFdkMsY0FBVSxPQUFPLFlBQVksSUFBSSxDQUFDLGtCQUFnRTtBQUNoRyxZQUFNLGVBQWUsT0FBTyxhQUFhLGFBQWE7QUFDdEQsVUFBSSxDQUFDLE9BQU8sTUFBTTtBQUNoQixlQUFPO0FBQUEsTUFDVDtBQU9BLFlBQU0sa0JBQWtCLE1BQVk7QUFDbEMsYUFBSyxPQUFPO0FBQUEsTUFDZDtBQUNBLGVBQVMsb0JBQW1DLFlBQWdDO0FBQzFFLFlBQUk7QUFDRixpQkFBTyxRQUFRLE1BQU0sY0FBYyxNQUFNLFVBQVU7QUFBQSxRQUNyRCxVQUFFO0FBQ0EsMEJBQWdCO0FBQUEsUUFDbEI7QUFBQSxNQUNGO0FBQ0EsYUFBTyxPQUFPLE9BQU8sa0JBQWtCLFlBQVk7QUFBQSxJQUNyRDtBQUVBLFNBQUssY0FBYyxPQUFPLFNBQVMsU0FBUztBQUFBLEVBQzlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNPLG9CQUNMLFFBQ007QUFDTixTQUFLLGFBQWE7QUFJbEIsU0FBSyxzQkFBc0I7QUFBQSxNQUN6QixTQUFTLE9BQU87QUFBQSxNQUNoQixjQUFjLE9BQU87QUFBQSxNQUNyQixNQUFNLE9BQU8sUUFBUTtBQUFBLE1BQ3JCLGNBQWMsQ0FBQyxzQkFBc0I7QUFDbkMsY0FBTSxpQkFBaUI7QUFDdkIsY0FBTSxxQkFBcUIsT0FBTyxtQkFBbUI7QUFBQSxVQUNuRDtBQUFBLFVBQ0EsZUFBQUE7QUFBQSxRQUNGLENBQUMsS0FBS0E7QUFDTixlQUFPO0FBRVAsaUJBQVNBLGtCQUFnQyxtQkFBaUU7QUFFeEcsZ0JBQU0sZUFBZTtBQUNyQixpQkFBTyxPQUFPLGFBQWE7QUFBQSxZQUN6QixXQUFXO0FBQ1QscUJBQU8sZUFBZSxLQUFLLGNBQWMsR0FBRyxpQkFBaUI7QUFBQSxZQUMvRDtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQSxxQkFBcUIsZUFBZSxLQUFLLFlBQVk7QUFBQSxZQUNyRDtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBRUQsUUFBSSxDQUFDLE9BQU8sWUFBWTtBQUN0QjtBQUFBLElBQ0Y7QUFPQSxVQUFNLGdCQUFnQixPQUFPLFFBQVEsT0FBTyxVQUFVO0FBQ3RELFVBQU0sc0JBQXNCLHVCQUF1QjtBQUNuRCx3QkFBb0IsSUFBSSxlQUFlLE9BQU8sVUFBVTtBQUN4RCxTQUFLLFNBQVMsTUFBTTtBQUNsQiwwQkFBb0IsT0FBTyxhQUFhO0FBQUEsSUFDMUMsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sY0FBc0MsU0FBa0IsV0FBcUM7QUFDbEcsU0FBSyxhQUFhO0FBRWxCLFVBQU0sY0FBYyxPQUFPLFNBQVMsU0FBUztBQUM3QyxTQUFLLFNBQVMsV0FBVztBQUFBLEVBQzNCO0FBQ0Y7QUFXTyxTQUFTLE9BQStCLFNBQWtCLFdBQTRDO0FBQzNHLFNBQU8sZUFBZSxTQUEwQixTQUE2QztBQUMvRjtBQXdCTyxTQUFTLGNBQWMsV0FBNEIsWUFBNkI7QUFDckYsU0FBTyx1QkFBdUIsRUFBRSxJQUFJLFNBQVMsTUFBTTtBQUNyRDtBQUVBLFNBQVMseUJBQTJEO0FBQ2xFLFNBQU8seUJBQXlCLHVCQUF1QixvQkFBSSxRQUFpQyxDQUFDLEVBQUU7QUFDakc7IiwKICAibmFtZXMiOiBbInBhdGNoZWRNZXRob2QiXQp9Cg==
@@ -0,0 +1,299 @@
1
+ /// <reference path="../../library.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * The gate on a plugin's feature surface: what must be PRESENT for it to run, and what must NOT be.
6
+ *
7
+ * Both halves answer the same question — may this plugin's `onloadImpl` run right now? — so they are one
8
+ * component rather than two. A second, independent gate would double-load the surface and stack a second
9
+ * "blocked" settings tab onto the same plugin, and neither could see the other's reason for refusing.
10
+ *
11
+ * ## Dependencies: a plugin declaring what it cannot work without
12
+ *
13
+ * This is the strict sibling of `PluginSuggestionComponent`, and the difference is the whole point. A
14
+ * SUGGESTION is an offer — the host keeps working without it and simply cannot do one thing. A DEPENDENCY
15
+ * is a requirement: `onloadImpl` never runs, no command is registered, no handler is installed, nothing is
16
+ * patched. Reach for a suggestion when the other plugin adds something; reach for a dependency when the
17
+ * host's advertised behavior is not there without it.
18
+ *
19
+ * Obsidian has no dependency field in a manifest, which is exactly the problem this closes. Without one,
20
+ * a user meeting an unfamiliar plugin in their list months later has nothing telling them it is
21
+ * load-bearing — they remove it, and the breakage surfaces weeks after that as damage they cannot connect
22
+ * to anything they did. So the relationship is made visible from both ends and enforced while it holds:
23
+ * the dependent explains itself where the user is looking, repairs itself in one click, and reacts the
24
+ * INSTANT the dependency goes away rather than degrading quietly.
25
+ *
26
+ * Three choices are deliberate and worth stating, because each has an obvious-looking alternative:
27
+ *
28
+ * - **Blocked means enabled-but-inert, never self-disabled.** Calling `disablePluginAndSave` on itself
29
+ * would be the literal reading of "refuses to load", and it rewrites a config that belongs to the user —
30
+ * who would then have to remember to re-enable it after fixing the dependency. Staying enabled and inert
31
+ * says the same thing to the user, changes nothing they own, and can undo itself.
32
+ * - **Blocked is not an error.** Throwing from `onload` marks the plugin failed in Obsidian and hands the
33
+ * user a stack trace instead of a sentence and a button.
34
+ * - **A dependency must publish an API.** That is what makes presence, absence, version and departure all
35
+ * observable through one mechanism — `watchPluginApi`'s reference is live, is revoked when the provider
36
+ * unloads, and already classifies not-installed against not-enabled against too-old. A provider with
37
+ * nothing to expose can publish an empty API purely so it can be depended upon; the alternative would be
38
+ * a second, weaker detection path to maintain beside it.
39
+ *
40
+ * ## Conflicts: a plugin declaring what it refuses to run beside
41
+ *
42
+ * The inverse relationship, and it needs its own detection path because the dependency one does not fit.
43
+ * A conflicting plugin is typically an OLD version of some other plugin that still owns behavior this one
44
+ * has taken over — it publishes no API at all, so there is no `apiVersionRange` to compare against.
45
+ *
46
+ * The argument for refusing rather than competing comes from the case this generalizes: two rename/delete
47
+ * handlers acting on one rename corrupt links and move attachments twice, and there is no reliable way to
48
+ * win that race — a handler is elected by registry order, but the patches that do the work sit outside
49
+ * that election, so whichever plugin loaded first keeps a hand on the wheel. Every scheme for seizing
50
+ * control from inside is load-order dependent. Refusing is deterministic where competing is not, and a
51
+ * vault that briefly has no handler is a far better outcome than one with two.
52
+ *
53
+ * Two details of that detection carry over verbatim, because both are load-bearing:
54
+ *
55
+ * - **Versions are read, never the registry.** A plugin that has not loaded yet has registered nothing, so
56
+ * asking the registry gives a different answer depending on when it is asked. `app.plugins.manifests` is
57
+ * populated for every installed plugin at startup, whatever the load order turns out to be.
58
+ * - **An unparseable version counts as conflicting.** Failing closed is the safe direction: a false alarm
59
+ * costs a notice, a false all-clear costs a vault.
60
+ *
61
+ * Not every overlap is that severe, which is why a conflict declares a {@link PluginConflictSeverity}.
62
+ * Two plugins shipping the same command duplicate a palette entry and do the work twice — annoying, not
63
+ * corrupting — and refusing to load over that would be a worse outcome than the overlap. Those declare
64
+ * {@link PluginConflictSeverity.Warn} and both keep running.
65
+ *
66
+ * ## What this can and cannot see
67
+ *
68
+ * Obsidian raises no event when ANOTHER plugin is enabled or disabled (see `plugin-lifecycle-events.ts`),
69
+ * so live conflict detection has a real ceiling and it is stated here rather than implied away. A
70
+ * conflicting plugin built on this library announces itself through the lifecycle broadcast, and is
71
+ * therefore caught the moment it is enabled or disabled. One that is not — an old release predating the
72
+ * broadcast, or a plugin by another author entirely — is caught at the next load, which is when its
73
+ * manifest is read.
74
+ */
75
+ import type { Plugin } from 'obsidian';
76
+ import type { PluginNoticeComponent } from './plugin-notice-component.mjs';
77
+ import { ComponentEx } from './component-ex.mjs';
78
+ /**
79
+ * How badly two plugins running side by side goes wrong, and therefore what this one does about it.
80
+ */
81
+ export declare enum PluginConflictSeverity {
82
+ /**
83
+ * The host refuses to run at all while the conflict holds: `onloadImpl` never runs, nothing is
84
+ * registered, and the plugin explains itself the way a missing dependency does.
85
+ *
86
+ * For an overlap where both plugins acting on the same operation damages the vault.
87
+ */
88
+ Block = "block",
89
+ /**
90
+ * The host runs anyway and says the overlap is there.
91
+ *
92
+ * For an overlap that is annoying rather than destructive — duplicate commands, work done twice — where
93
+ * refusing to load would cost the user more than the overlap does.
94
+ */
95
+ Warn = "warn"
96
+ }
97
+ /**
98
+ * A plugin another plugin refuses to run beside, or warns about running beside.
99
+ */
100
+ export interface PluginConflict {
101
+ /**
102
+ * The semver range of the OTHER plugin's versions that conflict, e.g. `'<12.0.0'` for "every version
103
+ * before the one that gave this behavior up".
104
+ *
105
+ * A range rather than a minimum, so an overlap confined to one major (`'>=3 <4'`) is expressible, and so
106
+ * is a plugin that conflicts at every version — spell that `'>=0.0.0'`, since `compare-versions` rejects
107
+ * a bare `*`. Evaluated against `manifest.version`; a version that cannot be parsed counts as
108
+ * conflicting.
109
+ */
110
+ readonly conflictingVersionRange: string;
111
+ /**
112
+ * The `manifest.id` of the conflicting plugin, as listed in Obsidian's community plugin registry.
113
+ */
114
+ readonly pluginId: string;
115
+ /**
116
+ * The display name of the conflicting plugin, shown to the user.
117
+ */
118
+ readonly pluginName: string;
119
+ /**
120
+ * A localized sentence saying what goes wrong when both run, shown in the banner.
121
+ *
122
+ * The declaring plugin owns this string because only it knows what the two of them collide over, and a
123
+ * user being asked to disable something deserves to be told why.
124
+ */
125
+ readonly reason: string;
126
+ /**
127
+ * What this plugin does about the conflict.
128
+ */
129
+ readonly severity: PluginConflictSeverity;
130
+ }
131
+ /**
132
+ * A plugin another plugin cannot work without.
133
+ */
134
+ export interface PluginDependency {
135
+ /**
136
+ * The semver range of API contract versions the dependent compiled against, e.g. `'^2'`.
137
+ *
138
+ * A dependency whose published API falls outside the range counts as UNSATISFIED, which is what turns a
139
+ * silent behavioral mismatch between two independently released plugins into a visible "update this
140
+ * one" message. Spell "any version" as `'>=0.0.0'` — `compare-versions` rejects a bare `*`.
141
+ */
142
+ readonly apiVersionRange: string;
143
+ /**
144
+ * The `manifest.id` of the required plugin, as listed in Obsidian's community plugin registry.
145
+ */
146
+ readonly pluginId: string;
147
+ /**
148
+ * The display name of the required plugin, shown to the user.
149
+ */
150
+ readonly pluginName: string;
151
+ /**
152
+ * A localized sentence saying what the dependent does with this plugin, shown in the settings banner.
153
+ *
154
+ * The dependent owns this string because only it knows what it uses the other plugin for, and a user
155
+ * being asked to install something deserves to be told why.
156
+ */
157
+ readonly reason: string;
158
+ }
159
+ /**
160
+ * Parameters for the {@link PluginGateComponent} constructor.
161
+ */
162
+ export interface PluginGateComponentConstructorParams {
163
+ /**
164
+ * The conflicts to enforce. An empty list means the plugin refuses to run beside nothing.
165
+ */
166
+ readonly conflicts: readonly PluginConflict[];
167
+ /**
168
+ * The dependencies to enforce. An empty list means the plugin depends on nothing, and its feature
169
+ * surface loads immediately.
170
+ */
171
+ readonly dependencies: readonly PluginDependency[];
172
+ /**
173
+ * Loads the host plugin's feature surface. Called once every dependency is satisfied and no blocking
174
+ * conflict holds, and again after a gate that had closed opens back up.
175
+ *
176
+ * @returns A {@link Promise} that resolves once the surface is loaded.
177
+ */
178
+ loadFeatureSurface(this: void): Promise<void>;
179
+ /**
180
+ * The host plugin — the one declaring the dependencies and conflicts.
181
+ */
182
+ readonly plugin: Plugin;
183
+ /**
184
+ * The host plugin's notice component, used to say what is missing, what is in the way, and what changed.
185
+ */
186
+ readonly pluginNoticeComponent: PluginNoticeComponent;
187
+ /**
188
+ * Unloads the host plugin's feature surface. Called when a gate that had been open closes.
189
+ */
190
+ unloadFeatureSurface(this: void): void;
191
+ }
192
+ /**
193
+ * Enforces a plugin's mandatory dependencies and declared conflicts, gating its feature surface on both.
194
+ */
195
+ export declare class PluginGateComponent extends ComponentEx {
196
+ private readonly announcedWarningPluginIds;
197
+ private readonly apiRefs;
198
+ private blockedSettingTab;
199
+ private readonly conflicts;
200
+ private readonly dependencies;
201
+ private hasAnnouncedBlocked;
202
+ private isFeatureSurfaceLoaded;
203
+ private isLayoutReady;
204
+ private readonly loadFeatureSurface;
205
+ private readonly plugin;
206
+ private readonly pluginNoticeComponent;
207
+ private readonly unloadFeatureSurface;
208
+ private get app();
209
+ /**
210
+ * Creates an instance of {@link PluginGateComponent}.
211
+ *
212
+ * @param params - The constructor parameters.
213
+ */
214
+ constructor(params: PluginGateComponentConstructorParams);
215
+ /**
216
+ * Starts watching every declared dependency and conflict.
217
+ */
218
+ onload(): void;
219
+ /**
220
+ * Evaluates the gate once the watches are in place, loading the feature surface if it is already open.
221
+ *
222
+ * @returns A {@link Promise} that resolves once the first evaluation is complete.
223
+ */
224
+ onloadAsync(): Promise<void>;
225
+ /**
226
+ * Renders a banner for every conflict the host is running alongside, so a plugin can put the overlap in
227
+ * its own settings tab.
228
+ *
229
+ * Consumer-invoked, exactly like `PluginSuggestionComponent.renderBanner`: the library registers the
230
+ * settings tab a BLOCKED plugin needs, because that plugin never got to register one of its own, but it
231
+ * has no hook into the tab a running plugin builds. Renders nothing when no warning conflict holds.
232
+ *
233
+ * @param containerEl - The element to render into.
234
+ */
235
+ renderConflictWarningBanner(containerEl: HTMLElement): void;
236
+ private announceWarnings;
237
+ private createBlockedMessage;
238
+ private createConflictAppearedMessage;
239
+ private createConflictBlockedMessage;
240
+ private createConflictWarningMessage;
241
+ private createDependencyLostMessage;
242
+ /**
243
+ * Finds the declared conflicts of one severity that are currently in force.
244
+ *
245
+ * @param severity - The severity to select.
246
+ * @returns The conflicts holding right now, in the order they were declared.
247
+ */
248
+ private getActiveConflicts;
249
+ private getUnsatisfiedDependencies;
250
+ private hideBlockedSettingTab;
251
+ /**
252
+ * Decides whether one declared conflict is in force right now.
253
+ *
254
+ * Only an ENABLED plugin counts. One that is installed but switched off registers nothing, so it cannot
255
+ * collide, and acting on it would be an alarm the user can only answer by uninstalling something they
256
+ * have already turned off.
257
+ *
258
+ * @param conflict - The declared conflict.
259
+ * @returns Whether the conflicting plugin is enabled at a conflicting version.
260
+ */
261
+ private isConflictActive;
262
+ /**
263
+ * Says what is in the way, and puts the same explanation where the user will look for the plugin's
264
+ * settings.
265
+ *
266
+ * @param unsatisfiedDependencies - The dependencies that are not currently satisfied.
267
+ * @param blockingConflicts - The conflicts currently refusing the plugin the right to run.
268
+ */
269
+ private presentUnsatisfied;
270
+ /**
271
+ * Re-evaluates the gate and moves the feature surface to match.
272
+ *
273
+ * @returns A {@link Promise} that resolves once the surface matches the gate.
274
+ */
275
+ private refresh;
276
+ /**
277
+ * Renders the blocked explanation into a settings-tab container: what is missing or in the way, why it
278
+ * matters, and the button that fixes it.
279
+ *
280
+ * @param containerEl - The element to render into.
281
+ * @param unsatisfiedDependencies - The dependencies that are not currently satisfied.
282
+ * @param blockingConflicts - The conflicts currently refusing the plugin the right to run.
283
+ */
284
+ private renderBlockedBanner;
285
+ /**
286
+ * Renders one conflict: what it is, why it matters, and the two ways out of it.
287
+ *
288
+ * The repair is offered on the OTHER plugin — disabling it is the one thing this plugin can do in a
289
+ * click, since it cannot update someone else's plugin — and it is the persisted `disablePluginAndSave`
290
+ * rather than the transient disable, because the user asked for it by clicking.
291
+ *
292
+ * @param containerEl - The element to render into.
293
+ * @param conflict - The conflict to render.
294
+ * @param messageFragment - The sentence explaining the conflict.
295
+ */
296
+ private renderConflictEntry;
297
+ private renderOpenSettingsButton;
298
+ private showBlockedSettingTab;
299
+ }