@mnaoumov/obsidian-lib 10.12.0 → 11.0.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.
- package/components/worker-component/package.json +6 -0
- package/components/worker-pool-component/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +409 -292
- package/dist/lib/cjs/__merged.d.cts +17 -8
- package/dist/lib/cjs/anchored-suggest.cjs +1 -1
- package/dist/lib/cjs/app.cjs +2 -2
- package/dist/lib/cjs/async-with-notice.cjs +4 -4
- package/dist/lib/cjs/attachment-path.cjs +9 -9
- package/dist/lib/cjs/attachment-path.d.cts +3 -3
- package/dist/lib/cjs/attachment-unit-folder.cjs +2 -2
- package/dist/lib/cjs/backlink-index.cjs +5 -5
- package/dist/lib/cjs/backlink.cjs +7 -7
- package/dist/lib/cjs/bases-view-registrar.cjs +1 -1
- package/dist/lib/cjs/broken-link-candidates.cjs +1 -1
- package/dist/lib/cjs/bug-report.cjs +3 -3
- package/dist/lib/cjs/bulk-operation-progress.cjs +1 -1
- package/dist/lib/cjs/bulk-operation.cjs +2 -2
- package/dist/lib/cjs/callout.cjs +6 -6
- package/dist/lib/cjs/canvas.cjs +11 -9
- package/dist/lib/cjs/canvas.d.cts +13 -0
- package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -3
- package/dist/lib/cjs/code-block-render-handoff.cjs +5 -5
- package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +4 -4
- package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +2 -2
- package/dist/lib/cjs/codemirror/index.cjs +7 -7
- package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +5 -5
- package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +2 -2
- package/dist/lib/cjs/codemirror/settings-facet.cjs +1 -1
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +17 -17
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +13 -13
- package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -2
- package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +10 -10
- package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +7 -7
- package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -3
- package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -3
- package/dist/lib/cjs/command-handlers/global-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/index.cjs +15 -15
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +6 -6
- package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +1 -1
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -1
- package/dist/lib/cjs/community-plugins.cjs +3 -3
- package/dist/lib/cjs/components/abort-signal-component.cjs +2 -2
- package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
- package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +3 -3
- package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
- package/dist/lib/cjs/components/async-events-component.cjs +1 -1
- package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +12 -12
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +2 -2
- package/dist/lib/cjs/components/component-ex.cjs +21 -11
- package/dist/lib/cjs/components/component-ex.d.cts +11 -0
- package/dist/lib/cjs/components/console-debug-component.cjs +2 -2
- package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -2
- package/dist/lib/cjs/components/disposable-component.cjs +2 -2
- package/dist/lib/cjs/components/embed-extensions-component.cjs +1 -1
- package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +8 -8
- package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +7 -7
- package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +2 -2
- package/dist/lib/cjs/components/incremental-file-index-component.cjs +4 -4
- package/dist/lib/cjs/components/index.cjs +46 -40
- package/dist/lib/cjs/components/index.d.cts +2 -0
- package/dist/lib/cjs/components/layout-ready-component.cjs +3 -3
- package/dist/lib/cjs/components/menu-event-registrar-component.cjs +2 -2
- package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
- package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-gate-component.cjs +68 -28
- package/dist/lib/cjs/components/plugin-gate-component.d.cts +36 -13
- package/dist/lib/cjs/components/plugin-notice-component.cjs +39 -33
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +4 -3
- package/dist/lib/cjs/components/plugin-settings-component.cjs +113 -17
- package/dist/lib/cjs/components/plugin-settings-component.d.cts +35 -5
- package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -2
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +8 -8
- package/dist/lib/cjs/components/pointer-position-component.cjs +2 -2
- package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +3 -3
- package/dist/lib/cjs/components/registry-component.cjs +2 -2
- package/dist/lib/cjs/components/release-notes-component.cjs +6 -6
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +25 -25
- package/dist/lib/cjs/components/rmdir-guard-component.cjs +2 -2
- package/dist/lib/cjs/components/settings-facet-component.cjs +1 -1
- package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
- package/dist/lib/cjs/components/shared-component-pool-component.cjs +6 -6
- package/dist/lib/cjs/components/style-sheet-component.cjs +3 -3
- package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -3
- package/dist/lib/cjs/components/templates-language-component.cjs +1 -1
- package/dist/lib/cjs/components/worker-component.cjs +363 -0
- package/dist/lib/cjs/components/worker-component.d.cts +156 -0
- package/dist/lib/cjs/components/worker-pool-component.cjs +185 -0
- package/dist/lib/cjs/components/worker-pool-component.d.cts +102 -0
- package/dist/lib/cjs/components/workspace-layout-state-component.cjs +7 -7
- package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
- package/dist/lib/cjs/constructors/index.cjs +1 -1
- package/dist/lib/cjs/data-handler.cjs +111 -4
- package/dist/lib/cjs/data-handler.d.cts +92 -1
- package/dist/lib/cjs/data-stores/data-store-locations.cjs +82 -24
- package/dist/lib/cjs/data-stores/data-store-locations.d.cts +15 -0
- package/dist/lib/cjs/data-stores/data-store-replica.cjs +33 -5
- package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
- package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +2 -2
- package/dist/lib/cjs/data-stores/data-store-transport.cjs +81 -8
- package/dist/lib/cjs/data-stores/data-store-transport.d.cts +30 -1
- package/dist/lib/cjs/data-stores/index.cjs +6 -6
- package/dist/lib/cjs/data-stores/local-data-store.cjs +74 -10
- package/dist/lib/cjs/data-stores/local-data-store.d.cts +58 -1
- package/dist/lib/cjs/data-stores/shared-data-store.cjs +76 -19
- package/dist/lib/cjs/data-stores/shared-data-store.d.cts +18 -1
- package/dist/lib/cjs/dataview-link.cjs +2 -2
- package/dist/lib/cjs/dataview.cjs +27 -7
- package/dist/lib/cjs/dataview.d.cts +14 -0
- package/dist/lib/cjs/debug.cjs +3 -3
- package/dist/lib/cjs/demo-vault-helper.cjs +34 -6
- package/dist/lib/cjs/demo-vault-helper.d.cts +6 -2
- package/dist/lib/cjs/desktop-bulk-operation-git.cjs +10 -10
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +13 -13
- package/dist/lib/cjs/desktop-git-runner.cjs +2 -2
- package/dist/lib/cjs/desktop-operating-system.cjs +1 -1
- package/dist/lib/cjs/desktop-request-url-stream.cjs +8 -14
- package/dist/lib/cjs/desktop-trusted-input.cjs +2 -2
- package/dist/lib/cjs/disposable.cjs +150 -0
- package/dist/lib/cjs/disposable.d.cts +39 -0
- package/dist/lib/cjs/editor-extension-registrar.cjs +1 -1
- package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -2
- package/dist/lib/cjs/editor-suggest.cjs +1 -1
- package/dist/lib/cjs/editor.cjs +6 -6
- package/dist/lib/cjs/events.cjs +2 -2
- package/dist/lib/cjs/extensions-registrar.cjs +1 -1
- package/dist/lib/cjs/feature-request.cjs +1 -1
- package/dist/lib/cjs/file-change.cjs +10 -10
- package/dist/lib/cjs/file-explorer.cjs +2 -2
- package/dist/lib/cjs/file-manager.cjs +5 -5
- package/dist/lib/cjs/file-system.cjs +10 -10
- package/dist/lib/cjs/folder-note.cjs +4 -4
- package/dist/lib/cjs/frontmatter-formatting.cjs +7 -6
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +1 -1
- package/dist/lib/cjs/frontmatter.cjs +5 -5
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/hotkey.cjs +1 -1
- package/dist/lib/cjs/hover-link-source-registrar.cjs +1 -1
- package/dist/lib/cjs/html-element.cjs +2 -2
- package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -1
- package/dist/lib/cjs/i18n/default-translations.cjs +1 -1
- package/dist/lib/cjs/i18n/i18n.cjs +7 -7
- package/dist/lib/cjs/i18n/index.cjs +4 -4
- package/dist/lib/cjs/i18n/locales/en.cjs +5 -1
- package/dist/lib/cjs/i18n/locales/en.d.cts +4 -0
- package/dist/lib/cjs/i18n/locales/index.cjs +2 -2
- package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -1
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +4 -0
- package/dist/lib/cjs/index.cjs +145 -127
- package/dist/lib/cjs/index.d.cts +6 -0
- package/dist/lib/cjs/inline-token-renderer.cjs +2 -2
- package/dist/lib/cjs/is-in-obsidian.cjs +1 -1
- package/dist/lib/cjs/library-styles.cjs +3 -3
- package/dist/lib/cjs/link-and-tag-input-suggest.cjs +2 -2
- package/dist/lib/cjs/link.cjs +76 -56
- package/dist/lib/cjs/link.d.cts +20 -14
- package/dist/lib/cjs/logger.cjs +4 -4
- package/dist/lib/cjs/loop.cjs +10 -16
- package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +17 -2
- package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +7 -0
- package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -13
- package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -2
- package/dist/lib/cjs/markdown-view.cjs +3 -3
- package/dist/lib/cjs/markdown.cjs +12 -12
- package/dist/lib/cjs/metadata-cache.cjs +23 -23
- package/dist/lib/cjs/metadata-cache.d.cts +5 -4
- package/dist/lib/cjs/misplaced-attachment.cjs +297 -0
- package/dist/lib/cjs/misplaced-attachment.d.cts +228 -0
- package/dist/lib/cjs/mobile-app-info.cjs +1 -1
- package/dist/lib/cjs/modals/alert.cjs +4 -4
- package/dist/lib/cjs/modals/code-block-builder.cjs +7 -7
- package/dist/lib/cjs/modals/confirm.cjs +4 -4
- package/dist/lib/cjs/modals/copy-text-manually.cjs +4 -4
- package/dist/lib/cjs/modals/index.cjs +12 -12
- package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
- package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -3
- package/dist/lib/cjs/modals/modal.cjs +3 -3
- package/dist/lib/cjs/modals/prompt.cjs +10 -10
- package/dist/lib/cjs/modals/prompt.d.cts +1 -1
- package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +5 -5
- package/dist/lib/cjs/modals/select-item.cjs +6 -6
- package/dist/lib/cjs/modals/select-option.cjs +3 -3
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
- package/dist/lib/cjs/note-priority.cjs +2 -2
- package/dist/lib/cjs/notebook-navigator.cjs +12 -2
- package/dist/lib/cjs/notebook-navigator.d.cts +6 -0
- package/dist/lib/cjs/obsidian-lib-state.cjs +1 -1
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian-settings.cjs +1 -1
- package/dist/lib/cjs/obsidian-word-characters.cjs +1 -1
- package/dist/lib/cjs/parse-link.cjs +14 -14
- package/dist/lib/cjs/path-compatibility.cjs +368 -0
- package/dist/lib/cjs/path-compatibility.d.cts +263 -0
- package/dist/lib/cjs/path-settings.cjs +3 -3
- package/dist/lib/cjs/pdf.cjs +2 -2
- package/dist/lib/cjs/plugin/index.cjs +16 -13
- package/dist/lib/cjs/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/plugin/plugin-api.cjs +8 -8
- package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +6 -3
- package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +5 -0
- package/dist/lib/cjs/plugin/plugin-context.cjs +10 -9
- package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin-event-source.d.cts +4 -4
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +4 -4
- package/dist/lib/cjs/plugin/plugin-instance.cjs +14 -12
- package/dist/lib/cjs/plugin/plugin-instance.d.cts +7 -0
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +6 -4
- package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +15 -15
- package/dist/lib/cjs/plugin/plugin.cjs +118 -34
- package/dist/lib/cjs/plugin/plugin.d.cts +28 -5
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +1 -1
- package/dist/lib/cjs/plugin/third-party-plugin.cjs +231 -0
- package/dist/lib/cjs/plugin/third-party-plugin.d.cts +244 -0
- package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -2
- package/dist/lib/cjs/popovers/field-popover.cjs +4 -4
- package/dist/lib/cjs/popovers/index.cjs +3 -3
- package/dist/lib/cjs/popovers/popover-anchor.cjs +1 -1
- package/dist/lib/cjs/popovers/popover.cjs +5 -5
- package/dist/lib/cjs/queue.cjs +8 -8
- package/dist/lib/cjs/react/app-context.cjs +3 -3
- package/dist/lib/cjs/react/index.cjs +1 -1
- package/dist/lib/cjs/reference-definition.cjs +1 -1
- package/dist/lib/cjs/reference.cjs +3 -3
- package/dist/lib/cjs/release-asset.cjs +5 -5
- package/dist/lib/cjs/rendered-markdown.cjs +4 -4
- package/dist/lib/cjs/request-url.cjs +4 -4
- package/dist/lib/cjs/resource-lock.cjs +46 -42
- package/dist/lib/cjs/resource-lock.d.cts +8 -7
- package/dist/lib/cjs/resource-url.cjs +3 -3
- package/dist/lib/cjs/ribbon-icon-registrar.cjs +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +7 -7
- package/dist/lib/cjs/setting-components/date-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/date-time-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/email-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/file-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/folder-list-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/hotkey-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/index.cjs +30 -30
- package/dist/lib/cjs/setting-components/list-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/month-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +9 -6
- package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +4 -1
- package/dist/lib/cjs/setting-components/number-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/password-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -3
- package/dist/lib/cjs/setting-components/tag-list-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/telephone-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/text-based-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/time-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/url-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/validator-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/week-component.cjs +4 -4
- package/dist/lib/cjs/setting-ex.cjs +26 -26
- package/dist/lib/cjs/setting-group-ex.cjs +2 -2
- package/dist/lib/cjs/settings-recovery.cjs +217 -0
- package/dist/lib/cjs/settings-recovery.d.cts +178 -0
- package/dist/lib/cjs/settings-tabs.cjs +5 -5
- package/dist/lib/cjs/status-bar-item-registrar.cjs +1 -1
- package/dist/lib/cjs/templater.cjs +14 -4
- package/dist/lib/cjs/templater.d.cts +6 -0
- package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -2
- package/dist/lib/cjs/transformers/index.cjs +1 -1
- package/dist/lib/cjs/trusted-input.cjs +1 -1
- package/dist/lib/cjs/validation.cjs +4 -4
- package/dist/lib/cjs/vault-delete.cjs +6 -6
- package/dist/lib/cjs/vault-transaction.cjs +5 -5
- package/dist/lib/cjs/vault.cjs +12 -12
- package/dist/lib/cjs/view-registrar.cjs +1 -1
- package/dist/lib/cjs/virtual-file.cjs +16 -14
- package/dist/lib/cjs/virtual-file.d.cts +2 -1
- package/dist/lib/cjs/wasm.cjs +119 -0
- package/dist/lib/cjs/wasm.d.cts +54 -0
- package/dist/lib/cjs/worker-protocol.cjs +209 -0
- package/dist/lib/cjs/worker-protocol.d.cts +282 -0
- package/dist/lib/cjs/workspace.cjs +1 -1
- package/dist/lib/esm/__merged.d.mts +17 -8
- package/dist/lib/esm/__merged.mjs +133 -3
- package/dist/lib/esm/app.mjs +2 -2
- package/dist/lib/esm/attachment-path.d.mts +3 -3
- package/dist/lib/esm/attachment-path.mjs +2 -2
- package/dist/lib/esm/backlink-index.mjs +2 -2
- package/dist/lib/esm/canvas.d.mts +13 -0
- package/dist/lib/esm/canvas.mjs +6 -5
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +13 -13
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +14 -14
- package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +7 -7
- package/dist/lib/esm/command-handlers/editor-command-handler.mjs +8 -8
- package/dist/lib/esm/components/component-ex.d.mts +11 -0
- package/dist/lib/esm/components/component-ex.mjs +19 -6
- package/dist/lib/esm/components/disposable-component.mjs +1 -1
- package/dist/lib/esm/components/index.d.mts +2 -0
- package/dist/lib/esm/components/index.mjs +5 -1
- package/dist/lib/esm/components/plugin-gate-component.d.mts +36 -13
- package/dist/lib/esm/components/plugin-gate-component.mjs +57 -14
- package/dist/lib/esm/components/plugin-notice-component.d.mts +4 -3
- package/dist/lib/esm/components/plugin-notice-component.mjs +30 -21
- package/dist/lib/esm/components/plugin-settings-component.d.mts +35 -5
- package/dist/lib/esm/components/plugin-settings-component.mjs +99 -3
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +2 -2
- package/dist/lib/esm/components/worker-component.d.mts +156 -0
- package/dist/lib/esm/components/worker-component.mjs +279 -0
- package/dist/lib/esm/components/worker-pool-component.d.mts +102 -0
- package/dist/lib/esm/components/worker-pool-component.mjs +95 -0
- package/dist/lib/esm/components/workspace-layout-state-component.mjs +1 -1
- package/dist/lib/esm/data-handler.d.mts +92 -1
- package/dist/lib/esm/data-handler.mjs +112 -3
- package/dist/lib/esm/data-stores/data-store-locations.d.mts +15 -0
- package/dist/lib/esm/data-stores/data-store-locations.mjs +80 -22
- package/dist/lib/esm/data-stores/data-store-replica.mjs +33 -5
- package/dist/lib/esm/data-stores/data-store-seeds.d.mts +2 -2
- package/dist/lib/esm/data-stores/data-store-seeds.mjs +4 -4
- package/dist/lib/esm/data-stores/data-store-transport.d.mts +30 -1
- package/dist/lib/esm/data-stores/data-store-transport.mjs +78 -5
- package/dist/lib/esm/data-stores/local-data-store.d.mts +58 -1
- package/dist/lib/esm/data-stores/local-data-store.mjs +71 -9
- package/dist/lib/esm/data-stores/shared-data-store.d.mts +18 -1
- package/dist/lib/esm/data-stores/shared-data-store.mjs +72 -15
- package/dist/lib/esm/dataview.d.mts +14 -0
- package/dist/lib/esm/dataview.mjs +19 -1
- package/dist/lib/esm/demo-vault-helper.d.mts +6 -2
- package/dist/lib/esm/demo-vault-helper.mjs +29 -1
- package/dist/lib/esm/desktop-demo-vault-opener.mjs +1 -1
- package/dist/lib/esm/desktop-request-url-stream.mjs +4 -10
- package/dist/lib/esm/disposable.d.mts +39 -0
- package/dist/lib/esm/disposable.mjs +64 -0
- package/dist/lib/esm/file-system.mjs +2 -2
- package/dist/lib/esm/frontmatter-formatting.mjs +2 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/i18n/locales/en.d.mts +4 -0
- package/dist/lib/esm/i18n/locales/en.mjs +5 -1
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +4 -0
- package/dist/lib/esm/index.d.mts +6 -0
- package/dist/lib/esm/index.mjs +13 -1
- package/dist/lib/esm/link.d.mts +20 -14
- package/dist/lib/esm/link.mjs +57 -38
- package/dist/lib/esm/loop.mjs +2 -8
- package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +7 -0
- package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +16 -1
- package/dist/lib/esm/metadata-cache.d.mts +5 -4
- package/dist/lib/esm/metadata-cache.mjs +6 -6
- package/dist/lib/esm/misplaced-attachment.d.mts +228 -0
- package/dist/lib/esm/misplaced-attachment.mjs +212 -0
- package/dist/lib/esm/modals/prompt.d.mts +1 -1
- package/dist/lib/esm/modals/prompt.mjs +1 -1
- package/dist/lib/esm/notebook-navigator.d.mts +6 -0
- package/dist/lib/esm/notebook-navigator.mjs +11 -2
- package/dist/lib/esm/parse-link.mjs +4 -4
- package/dist/lib/esm/path-compatibility.d.mts +263 -0
- package/dist/lib/esm/path-compatibility.mjs +277 -0
- package/dist/lib/esm/plugin/index.d.mts +1 -0
- package/dist/lib/esm/plugin/index.mjs +4 -2
- package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +5 -0
- package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +3 -1
- package/dist/lib/esm/plugin/plugin-context.mjs +2 -1
- package/dist/lib/esm/plugin/plugin-event-source.d.mts +4 -4
- package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-instance.d.mts +7 -0
- package/dist/lib/esm/plugin/plugin-instance.mjs +2 -1
- package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +6 -4
- package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -1
- package/dist/lib/esm/plugin/plugin.d.mts +28 -5
- package/dist/lib/esm/plugin/plugin.mjs +103 -9
- package/dist/lib/esm/plugin/third-party-plugin.d.mts +244 -0
- package/dist/lib/esm/plugin/third-party-plugin.mjs +147 -0
- package/dist/lib/esm/release-asset.mjs +1 -1
- package/dist/lib/esm/resource-lock.d.mts +8 -7
- package/dist/lib/esm/resource-lock.mjs +31 -26
- package/dist/lib/esm/setting-components/multiple-text-component.d.mts +4 -1
- package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -3
- package/dist/lib/esm/settings-recovery.d.mts +178 -0
- package/dist/lib/esm/settings-recovery.mjs +125 -0
- package/dist/lib/esm/settings-tabs.mjs +2 -2
- package/dist/lib/esm/templater.d.mts +6 -0
- package/dist/lib/esm/templater.mjs +11 -2
- package/dist/lib/esm/vault.mjs +1 -1
- package/dist/lib/esm/virtual-file.d.mts +2 -1
- package/dist/lib/esm/virtual-file.mjs +7 -5
- package/dist/lib/esm/wasm.d.mts +54 -0
- package/dist/lib/esm/wasm.mjs +30 -0
- package/dist/lib/esm/worker-protocol.d.mts +282 -0
- package/dist/lib/esm/worker-protocol.mjs +113 -0
- package/package.json +9 -8
- package/plugin/third-party-plugin/package.json +6 -0
|
@@ -114,6 +114,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
114
114
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
115
115
|
var plugin_instance_exports = {};
|
|
116
116
|
__export(plugin_instance_exports, {
|
|
117
|
+
PLUGINS_CHANGED_EVENT_NAME: () => PLUGINS_CHANGED_EVENT_NAME,
|
|
117
118
|
PluginAvailability: () => PluginAvailability,
|
|
118
119
|
PluginInstanceUnavailableError: () => PluginInstanceUnavailableError,
|
|
119
120
|
getLoadedPlugin: () => getLoadedPlugin,
|
|
@@ -122,17 +123,17 @@ __export(plugin_instance_exports, {
|
|
|
122
123
|
waitForPlugin: () => waitForPlugin
|
|
123
124
|
});
|
|
124
125
|
module.exports = __toCommonJS(plugin_instance_exports);
|
|
125
|
-
var import_async = require(
|
|
126
|
-
var import_object_utils = require(
|
|
127
|
-
var import_obsidian = require(
|
|
128
|
-
var import_community_plugins = require(
|
|
129
|
-
var import_plugin_notice_component = require(
|
|
130
|
-
var import_css_class = require(
|
|
131
|
-
var import_html_element = require(
|
|
132
|
-
var import_i18n = require(
|
|
133
|
-
var import_settings_modal = require(
|
|
134
|
-
var import_plugin_install_state = require(
|
|
135
|
-
var import_plugin_lifecycle_events = require(
|
|
126
|
+
var import_async = require("@mnaoumov/typescript-lib/async");
|
|
127
|
+
var import_object_utils = require("@mnaoumov/typescript-lib/object-utils");
|
|
128
|
+
var import_obsidian = require("obsidian");
|
|
129
|
+
var import_community_plugins = require("../community-plugins.cjs");
|
|
130
|
+
var import_plugin_notice_component = require("../components/plugin-notice-component.cjs");
|
|
131
|
+
var import_css_class = require("../css-class.cjs");
|
|
132
|
+
var import_html_element = require("../html-element.cjs");
|
|
133
|
+
var import_i18n = require("../i18n/i18n.cjs");
|
|
134
|
+
var import_settings_modal = require("../settings-modal.cjs");
|
|
135
|
+
var import_plugin_install_state = require("./plugin-install-state.cjs");
|
|
136
|
+
var import_plugin_lifecycle_events = require("./plugin-lifecycle-events.cjs");
|
|
136
137
|
const DEFAULT_WAIT_FOR_PLUGIN_TIMEOUT_IN_MILLISECONDS = 1e4;
|
|
137
138
|
const PLUGINS_CHANGED_EVENT_NAME = "changed";
|
|
138
139
|
const COMMUNITY_PLUGINS_SETTING_TAB_ID = "community-plugins";
|
|
@@ -438,6 +439,7 @@ async function waitForAvailability(params) {
|
|
|
438
439
|
}
|
|
439
440
|
// Annotate the CommonJS export names for ESM import in node:
|
|
440
441
|
0 && (module.exports = {
|
|
442
|
+
PLUGINS_CHANGED_EVENT_NAME,
|
|
441
443
|
PluginAvailability,
|
|
442
444
|
PluginInstanceUnavailableError,
|
|
443
445
|
getLoadedPlugin,
|
|
@@ -445,4 +447,4 @@ async function waitForAvailability(params) {
|
|
|
445
447
|
requirePlugin,
|
|
446
448
|
waitForPlugin
|
|
447
449
|
});
|
|
448
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWluc3RhbmNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBbm90aGVyIHBsdWdpbidzIElOU1RBTkNFOiB3aGV0aGVyIGl0IGlzIHRoZXJlLCB3YWl0aW5nIGZvciBpdCwgYW5kIGFza2luZyB0aGUgdXNlciB0byBicmluZyBpdCBpbi5cbiAqXG4gKiBUaGlzIGlzIHRoZSBwYXRoIGZvciBhIHBsdWdpbiB0aGF0IHB1Ymxpc2hlcyBub3RoaW5nIHRocm91Z2ggdGhlIGxpYnJhcnkncyByZWdpc3RyeSwgd2hpY2ggaXMgbW9zdCBvZlxuICogdGhlbS4gQSBwcm92aWRlciB0aGF0IGRvZXMgcHVibGlzaCBpcyBiZXR0ZXIgcmVhY2hlZCB0aHJvdWdoIGB3YXRjaFBsdWdpbkFwaWAgKGAuL3BsdWdpbi1hcGkudHNgKTogaXRzXG4gKiByZWZlcmVuY2UgaXMgbGl2ZSwgdmVyc2lvbi1uZWdvdGlhdGVkIGFuZCByZXZva2VkIHdoZW4gdGhlIHByb3ZpZGVyIGdvZXMgYXdheSwgbm9uZSBvZiB3aGljaCBhIGJhcmVcbiAqIGluc3RhbmNlIG9mZmVycy4gQW5kIGEgcGx1Z2luIHRoYXQgbXVzdCBTVE9QIHJ1bm5pbmcgd2hlbiBhbm90aGVyIG9uZSBnb2VzIGF3YXkgZGVjbGFyZXMgaXQgdGhyb3VnaFxuICogYFBsdWdpbkJhc2UuZ2V0UGx1Z2luRGVwZW5kZW5jaWVzKClgLCB3aG9zZSBnYXRlIG93bnMgdGhhdCB0ZWFyZG93biDigJQge0BsaW5rIHJlcXVpcmVQbHVnaW59IGlzIGEgb25lLXNob3RcbiAqIHdhaXQsIG5vdCBhIHNlY29uZCBkZXBlbmRlbmN5IHN5c3RlbS5cbiAqXG4gKiBXaGF0IFwibG9hZGVkXCIgY2FuIGFuZCBjYW5ub3QgbWVhbiwgcmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjFgOlxuICpcbiAqIC0gYFBsdWdpbnMubG9hZFBsdWdpbmAgc3RvcmVzIHRoZSBpbnN0YW5jZSBpbiBgYXBwLnBsdWdpbnMucGx1Z2luc2AgQkVGT1JFIGl0IGF3YWl0cyBgcGx1Z2luLmxvYWQoKWAsIGFuZFxuICogICBgUGx1Z2luLmxvYWRgIHNldHMgYF9sb2FkZWRgIGJlZm9yZSBpdCBhd2FpdHMgYG9ubG9hZCgpYC4gU28gYGFwcC5wbHVnaW5zLmdldFBsdWdpbihpZClgIGNhbiByZXR1cm4gYVxuICogICBwbHVnaW4gd2hvc2UgYG9ubG9hZGAgaXMgc3RpbGwgcnVubmluZywgYW5kIGBfbG9hZGVkYCBjYW5ub3QgdGVsbCB0aGUgdHdvIGFwYXJ0LlxuICogICBgUGx1Z2lucy5lbmFibGVQbHVnaW5gIGJyYWNrZXRzIHRoZSBsb2FkIHdpdGggYGxvYWRpbmdQbHVnaW5JZGAsIHdoaWNoIGlzIHRoZSBvbmUgc2lnbmFsIHRoYXQgZG9lcywgc29cbiAqICAgYW4gaW5zdGFuY2Ugd2hvc2UgaWQgaXMgYGxvYWRpbmdQbHVnaW5JZGAgcmVhZHMgYXMge0BsaW5rIFBsdWdpbkF2YWlsYWJpbGl0eS5Mb2FkaW5nfS5cbiAqIC0gYG9ubG9hZGAgaGF2aW5nIHNldHRsZWQgaXMgdGhlIG1vc3QgYW55dGhpbmcgY2FuIHByb21pc2UuIEEgcGx1Z2luIHRoYXQgc3RhcnRzIGZ1cnRoZXIgd29yayBmcm9tXG4gKiAgIGBvbmxvYWRgIHdpdGhvdXQgYXdhaXRpbmcgaXQsIG9yIHdhaXRzIGZvciBsYXlvdXQtcmVhZHksIGlzIFwibG9hZGVkXCIgYmVmb3JlIHRoYXQgd29yayBpcyBkb25lLCBhbmRcbiAqICAgT2JzaWRpYW4gaGFzIG5vIGhvb2sgc2F5aW5nIGV2ZXJ5IHBsdWdpbiBoYXMgZmluaXNoZWQgaW5pdGlhbGl6aW5nLiBBIHBsdWdpbiBidWlsdCBvbiB0aGlzIGxpYnJhcnlcbiAqICAgc2F5cyBtb3JlIHRocm91Z2ggdGhlIGBvYnNpZGlhbi1saWI6cGx1Z2luLWxvYWRlZGAgYnJvYWRjYXN0LCB3aGljaCBmb2xsb3dzIGl0cyBwdWJsaXNoZWQgQVBJcy5cbiAqIC0gYGFwcC5wbHVnaW5zYCBpcyBhbiBgRXZlbnRzYCBzb3VyY2UgdGhhdCB0cmlnZ2VycyBgY2hhbmdlZGAsIGRlYm91bmNlZCBieSBvbmUgbWFjcm90YXNrLCBhZnRlciBldmVyeVxuICogICBlbmFibGUsIGRpc2FibGUsIGluc3RhbGwsIHVuaW5zdGFsbCBhbmQgbWFuaWZlc3QgcmVsb2FkLiBUaGF0IGlzIHdoYXQgYSB3YWl0IHN1YnNjcmliZXMgdG8sIHNvIG5vdGhpbmdcbiAqICAgaGVyZSBwb2xscy4gSXQgZmlyZXMgYWZ0ZXIgYGVuYWJsZVBsdWdpbmAgcmV0dXJuZWQsIHdoZW4gYGxvYWRpbmdQbHVnaW5JZGAgaXMgYG51bGxgIGFnYWluLlxuICpcbiAqIEEgdHlwZSBhcmd1bWVudCBhbG9uZSBpcyBhIGNhbGxlcidzIEFTU0VSVElPTiBhYm91dCB0aGUgaW5zdGFuY2UsIG5vdCBhIGNoZWNrOiBub3RoaW5nIGF0IHJ1bnRpbWUga25vd3NcbiAqIHdoYXQgYFRQbHVnaW5gIGlzLiBQYXNzIGBpc1BsdWdpbmAgdG8gaGF2ZSB0aGUgc2hhcGUgdmVyaWZpZWQ7IGFuIGluc3RhbmNlIGZhaWxpbmcgaXQgcmVhZHMgYXNcbiAqIHtAbGluayBQbHVnaW5BdmFpbGFiaWxpdHkuU2hhcGVNaXNtYXRjaH0sIHRoZSB1c3VhbCBzaWduIG9mIGEgcmVsZWFzZSB0aGF0IHJlbmFtZWQgd2hhdCB0aGUgY2FsbGVyIHVzZXMuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEV2ZW50UmVmLFxuICBFdmVudHMsXG4gIFBsdWdpblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGNvbnZlcnRBc3luY1RvU3luYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgQ29tcG9uZW50XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHsgUGx1Z2luRW5hYmxlUmVmdXNlZEVycm9yIH0gZnJvbSAnLi4vY29tbXVuaXR5LXBsdWdpbnMudHMnO1xuaW1wb3J0IHsgUGx1Z2luTm90aWNlTW9kZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHtcbiAgYXNDb2RlQmxvY2ssXG4gIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3Ncbn0gZnJvbSAnLi4vaHRtbC1lbGVtZW50LnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgb3BlblNldHRpbmdUYWIgfSBmcm9tICcuLi9zZXR0aW5ncy1tb2RhbC50cyc7XG5pbXBvcnQge1xuICBjb21wYXJlUGx1Z2luVmVyc2lvbldpdGhNaW5pbXVtLFxuICBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luLFxuICBQbHVnaW5WZXJzaW9uQ29tcGFyaXNvbixcbiAgdXBkYXRlUGx1Z2luXG59IGZyb20gJy4vcGx1Z2luLWluc3RhbGwtc3RhdGUudHMnO1xuaW1wb3J0IHsgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FIH0gZnJvbSAnLi9wbHVnaW4tbGlmZWN5Y2xlLWV2ZW50cy50cyc7XG5cbi8qKlxuICogSG93IGxvbmcge0BsaW5rIHdhaXRGb3JQbHVnaW59IHdhaXRzIGJ5IGRlZmF1bHQgYmVmb3JlIGdpdmluZyB1cC5cbiAqL1xuY29uc3QgREVGQVVMVF9XQUlUX0ZPUl9QTFVHSU5fVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5cbi8qKlxuICogVGhlIGV2ZW50IGBhcHAucGx1Z2luc2AgdHJpZ2dlcnMgYWZ0ZXIgZXZlcnkgZW5hYmxlLCBkaXNhYmxlLCBpbnN0YWxsLCB1bmluc3RhbGwgYW5kIG1hbmlmZXN0IHJlbG9hZC5cbiAqL1xuY29uc3QgUExVR0lOU19DSEFOR0VEX0VWRU5UX05BTUUgPSAnY2hhbmdlZCc7XG5cbi8qKlxuICogVGhlIGlkIG9mIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgc2V0dGluZ3MgdGFiLlxuICovXG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19TRVRUSU5HX1RBQl9JRCA9ICdjb21tdW5pdHktcGx1Z2lucyc7XG5cbi8qKlxuICogV2hldGhlciBhbm90aGVyIHBsdWdpbidzIGluc3RhbmNlIGNhbiBiZSB1c2VkIHJpZ2h0IG5vdywgYW5kIGlmIG5vdCwgd2h5LlxuICovXG5leHBvcnQgZW51bSBQbHVnaW5BdmFpbGFiaWxpdHkge1xuICAvKipcbiAgICogTG9hZGVkLCBgb25sb2FkYCBzZXR0bGVkLCBhbmQgZXZlcnkgZGVjbGFyZWQgcmVxdWlyZW1lbnQgbWV0LlxuICAgKi9cbiAgQXZhaWxhYmxlID0gJ2F2YWlsYWJsZScsXG5cbiAgLyoqXG4gICAqIFJ1bm5pbmcgYXQgYSByZWxlYXNlIHdob3NlIGBtYW5pZmVzdC52ZXJzaW9uYCBjYW5ub3QgYmUgcGFyc2VkLCB3aGlsZSB0aGUgY2FsbGVyIGRlY2xhcmVkIGFcbiAgICoge0BsaW5rIEdldFBsdWdpbkF2YWlsYWJpbGl0eVBhcmFtcy5taW5QbHVnaW5WZXJzaW9ufS4gQ291bnRzIGFzIHVuYXZhaWxhYmxlLCBiZWNhdXNlIGZhaWxpbmcgY2xvc2VkIGlzIHRoZVxuICAgKiBzYWZlIGRpcmVjdGlvbi5cbiAgICovXG4gIEludmFsaWRWZXJzaW9uID0gJ2ludmFsaWRWZXJzaW9uJyxcblxuICAvKipcbiAgICogVGhlIGluc3RhbmNlIGV4aXN0cyBidXQgaXRzIGBvbmxvYWRgIGhhcyBub3Qgc2V0dGxlZCB5ZXQuXG4gICAqL1xuICBMb2FkaW5nID0gJ2xvYWRpbmcnLFxuXG4gIC8qKlxuICAgKiBJbnN0YWxsZWQgYnV0IG5laXRoZXIgZW5hYmxlZCBub3IgcnVubmluZy5cbiAgICovXG4gIE5vdEVuYWJsZWQgPSAnbm90RW5hYmxlZCcsXG5cbiAgLyoqXG4gICAqIE5vdCBpbnN0YWxsZWQgaW4gdGhpcyB2YXVsdC5cbiAgICovXG4gIE5vdEluc3RhbGxlZCA9ICdub3RJbnN0YWxsZWQnLFxuXG4gIC8qKlxuICAgKiBJbnN0YWxsZWQgYW5kIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIGJ1dCBubyBpbnN0YW5jZSBpcyBydW5uaW5nLiBBdCBzdGFydHVwIHRoYXQgaXMgYSBwbHVnaW5cbiAgICogT2JzaWRpYW4gaGFzIG5vdCByZWFjaGVkIHlldDsgbGF0ZXIgaXQgaXMgb25lIHRoYXQgZmFpbGVkIHRvIGxvYWQsIG9yIG9uZSBzd2l0Y2hlZCBvZmYgYnkgYSBkaXNhYmxlIHRoYXRcbiAgICogZG9lcyBub3QgdG91Y2ggdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBOb3RMb2FkZWQgPSAnbm90TG9hZGVkJyxcblxuICAvKipcbiAgICogUnVubmluZyBhdCBhIHJlbGVhc2Ugb2xkZXIgdGhhbiB0aGUgY2FsbGVyJ3Mge0BsaW5rIEdldFBsdWdpbkF2YWlsYWJpbGl0eVBhcmFtcy5taW5QbHVnaW5WZXJzaW9ufS5cbiAgICovXG4gIE91dGRhdGVkID0gJ291dGRhdGVkJyxcblxuICAvKipcbiAgICogUnVubmluZywgYnV0IHRoZSBjYWxsZXIncyB7QGxpbmsgR2V0UGx1Z2luQXZhaWxhYmlsaXR5UGFyYW1zLmlzUGx1Z2lufSByZWplY3RlZCB0aGUgaW5zdGFuY2UuXG4gICAqL1xuICBTaGFwZU1pc21hdGNoID0gJ3NoYXBlTWlzbWF0Y2gnXG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldExvYWRlZFBsdWdpbn0uXG4gKlxuICogQHR5cGVQYXJhbSBUUGx1Z2luIC0gVGhlIHBsdWdpbiB0eXBlIHRoZSBjYWxsZXIgZXhwZWN0cy5cbiAqL1xuZXhwb3J0IHR5cGUgR2V0TG9hZGVkUGx1Z2luUGFyYW1zPFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gPSBQbHVnaW4+ID0gR2V0UGx1Z2luQXZhaWxhYmlsaXR5UGFyYW1zPFRQbHVnaW4+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRQbHVnaW5BdmFpbGFiaWxpdHl9LlxuICpcbiAqIEB0eXBlUGFyYW0gVFBsdWdpbiAtIFRoZSBwbHVnaW4gdHlwZSB0aGUgY2FsbGVyIGV4cGVjdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UGx1Z2luQXZhaWxhYmlsaXR5UGFyYW1zPFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gPSBQbHVnaW4+IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhhdCB0aGUgcnVubmluZyBpbnN0YW5jZSBpcyB0aGUgc2hhcGUgdGhlIGNhbGxlciB1c2VzLiBXaXRob3V0IGl0LCBgVFBsdWdpbmAgaXMgYW5cbiAgICogYXNzZXJ0aW9uIG5vdGhpbmcgY2hlY2tzLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHJ1bm5pbmcgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGluc3RhbmNlIGlzIGEgYFRQbHVnaW5gLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNQbHVnaW4/OiAocGx1Z2luOiBQbHVnaW4pID0+IHBsdWdpbiBpcyBUUGx1Z2luO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkZXN0IHJlbGVhc2Ugb2YgdGhlIHBsdWdpbiB0aGUgY2FsbGVyIHdvcmtzIHdpdGgsIGNvbXBhcmVkIHdpdGggaXRzIGBtYW5pZmVzdC52ZXJzaW9uYC4gVGhpcyBpc1xuICAgKiBhIHBsdWdpbiBSRUxFQVNFLCBuZXZlciBhbiBBUEkgY29udHJhY3QgdmVyc2lvbjogYSBwcm92aWRlciBwdWJsaXNoaW5nIGEgdmVyc2lvbmVkIGNvbnRyYWN0IGlzIHJlYWNoZWRcbiAgICogdGhyb3VnaCBgd2F0Y2hQbHVnaW5BcGlgJ3MgYGFwaVZlcnNpb25SYW5nZWAgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IG1pblBsdWdpblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgUGx1Z2luSW5zdGFuY2VVbmF2YWlsYWJsZUVycm9yfSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5JbnN0YW5jZVVuYXZhaWxhYmxlRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaHkgdGhlIHBsdWdpbiB3YXMgdW5hdmFpbGFibGUgd2hlbiB0aGUgd2FpdCBnYXZlIHVwLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5OiBQbHVnaW5BdmFpbGFiaWxpdHk7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXF1aXJlUGx1Z2lufS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVQbHVnaW5QYXJhbXM8VFBsdWdpbiBleHRlbmRzIFBsdWdpbiA9IFBsdWdpbj4gZXh0ZW5kcyBHZXRQbHVnaW5BdmFpbGFiaWxpdHlQYXJhbXM8VFBsdWdpbj4ge1xuICAvKipcbiAgICogRW5kcyB0aGUgd2FpdCBlYXJseTsgdGhlIHByb21pc2UgcmVqZWN0cyB3aXRoIHRoZSBzaWduYWwncyByZWFzb24uXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IG93bmluZyB0aGUgd2FpdCBhbmQgaXRzIG5vdGljZS4gSXRzIHVubG9hZCBlbmRzIGJvdGgsIHJlamVjdGluZyB0aGUgcHJvbWlzZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudDogQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSByZXF1aXJlZCBwbHVnaW4sIHNob3duIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXNraW5nIHBsdWdpbidzIG5vdGljZSBjb21wb25lbnQsIHdoaWNoIHNob3dzIHdoYXQgaXMgbWlzc2luZyBhbmQgdGhlIGJ1dHRvbiB0aGF0IGZpeGVzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGFza2luZyBwbHVnaW4sIG5hbWVkIGluIHRoZSBub3RpY2UuXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0aW5nUGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byB3YWl0IGJlZm9yZSBnaXZpbmcgdXAuIEJ5IGRlZmF1bHQgdGhlIHdhaXQgbGFzdHMgdW50aWwgdGhlIHVzZXIgcmVwYWlycyB0aGUgcGx1Z2luLCB0aGVcbiAgICoge0BsaW5rIFJlcXVpcmVQbHVnaW5QYXJhbXMuYWJvcnRTaWduYWx9IGFib3J0cyBvciB0aGUge0BsaW5rIFJlcXVpcmVQbHVnaW5QYXJhbXMuY29tcG9uZW50fSB1bmxvYWRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB3YWl0Rm9yUGx1Z2lufS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRGb3JQbHVnaW5QYXJhbXM8VFBsdWdpbiBleHRlbmRzIFBsdWdpbiA9IFBsdWdpbj4gZXh0ZW5kcyBHZXRQbHVnaW5BdmFpbGFiaWxpdHlQYXJhbXM8VFBsdWdpbj4ge1xuICAvKipcbiAgICogRW5kcyB0aGUgd2FpdCBlYXJseTsgdGhlIHByb21pc2UgcmVqZWN0cyB3aXRoIHRoZSBzaWduYWwncyByZWFzb24uXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBBIGNvbXBvbmVudCB3aG9zZSB1bmxvYWQgZW5kcyB0aGUgd2FpdCwgcmVqZWN0aW5nIHRoZSBwcm9taXNlLiBQYXNzIHRoZSB3YWl0aW5nIHBsdWdpbiwgb3IgdGhlXG4gICAqIGNvbXBvbmVudCB0aGF0IHdpbGwgdXNlIHRoZSBpbnN0YW5jZSwgc28gYSB3YWl0IG5ldmVyIG91dGxpdmVzIGl0cyBjb25zdW1lci5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudD86IENvbXBvbmVudDtcblxuICAvKipcbiAgICogSG93IGxvbmcgdG8gd2FpdCBiZWZvcmUgcmVqZWN0aW5nIHdpdGggYSB7QGxpbmsgUGx1Z2luSW5zdGFuY2VVbmF2YWlsYWJsZUVycm9yfS5cbiAgICpcbiAgICogQGRlZmF1bHQgMTAwMDBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUgaW50ZXJuYWwgd2FpdCBib3RoIHB1YmxpYyB3YWl0cyBzaGFyZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzLlxuICovXG5pbnRlcmZhY2UgV2FpdEZvckF2YWlsYWJpbGl0eVBhcmFtczxUUGx1Z2luIGV4dGVuZHMgUGx1Z2luPiBleHRlbmRzIFdhaXRGb3JQbHVnaW5QYXJhbXM8VFBsdWdpbj4ge1xuICAvKipcbiAgICogQ2FsbGVkIG9uY2Ugd2hlbiB0aGUgd2FpdCBzZXR0bGVzLCBlaXRoZXIgd2F5LCBhZnRlciBldmVyeSBsaXN0ZW5lciBoYXMgYmVlbiByZW1vdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgb25TZXR0bGVkPzogKCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQ2FsbGVkIG9uIGV2ZXJ5IHJlLWV2YWx1YXRpb24gd2hpbGUgdGhlIHBsdWdpbiBpcyBzdGlsbCB1bmF2YWlsYWJsZSwgaW5jbHVkaW5nIHRoZSBmaXJzdC5cbiAgICpcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eSAtIFRoZSBhdmFpbGFiaWxpdHkganVzdCByZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgb25VbmF2YWlsYWJsZT86IChhdmFpbGFiaWxpdHk6IFBsdWdpbkF2YWlsYWJpbGl0eSkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIHRpbWVvdXQsIG9yIGBudWxsYCBmb3Igbm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkVGltZW91dEluTWlsbGlzZWNvbmRzOiBudWxsIHwgbnVtYmVyO1xufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgcGx1Z2luIGRpZCBub3QgYmVjb21lIGF2YWlsYWJsZSBiZWZvcmUgYSB3YWl0IGdhdmUgdXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5JbnN0YW5jZVVuYXZhaWxhYmxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBXaHkgdGhlIHBsdWdpbiB3YXMgdW5hdmFpbGFibGUgd2hlbiB0aGUgd2FpdCBnYXZlIHVwLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJpbGl0eTogUGx1Z2luQXZhaWxhYmlsaXR5O1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcGx1Z2luLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFBsdWdpbkluc3RhbmNlVW5hdmFpbGFibGVFcnJvcn0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBsdWdpbkluc3RhbmNlVW5hdmFpbGFibGVFcnJvckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoYFBsdWdpbiBcIiR7cGFyYW1zLnBsdWdpbklkfVwiIGlzIG5vdCBhdmFpbGFibGU6ICR7cGFyYW1zLmF2YWlsYWJpbGl0eX0uYCk7XG4gICAgdGhpcy5uYW1lID0gJ1BsdWdpbkluc3RhbmNlVW5hdmFpbGFibGVFcnJvcic7XG4gICAgdGhpcy5hdmFpbGFiaWxpdHkgPSBwYXJhbXMuYXZhaWxhYmlsaXR5O1xuICAgIHRoaXMucGx1Z2luSWQgPSBwYXJhbXMucGx1Z2luSWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFub3RoZXIgcGx1Z2luJ3MgaW5zdGFuY2Ugd2hlbiBpdCBpcyB7QGxpbmsgUGx1Z2luQXZhaWxhYmlsaXR5LkF2YWlsYWJsZX0sIGFuZCBgbnVsbGAgb3RoZXJ3aXNlLlxuICpcbiAqIFVubGlrZSBgYXBwLnBsdWdpbnMuZ2V0UGx1Z2luYCwgaXQgbmV2ZXIgcmV0dXJucyBhbiBpbnN0YW5jZSB3aG9zZSBgb25sb2FkYCBpcyBzdGlsbCBydW5uaW5nLlxuICpcbiAqIEB0eXBlUGFyYW0gVFBsdWdpbiAtIFRoZSBwbHVnaW4gdHlwZSB0aGUgY2FsbGVyIGV4cGVjdHM7IGNoZWNrZWQgb25seSB0aHJvdWdoIGBpc1BsdWdpbmAuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBHZXRQbHVnaW5BdmFpbGFiaWxpdHlQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIGluc3RhbmNlLCBvciBgbnVsbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2FkZWRQbHVnaW48VFBsdWdpbiBleHRlbmRzIFBsdWdpbiA9IFBsdWdpbj4ocGFyYW1zOiBHZXRMb2FkZWRQbHVnaW5QYXJhbXM8Tm9JbmZlcjxUUGx1Z2luPj4pOiBudWxsIHwgVFBsdWdpbiB7XG4gIHJldHVybiBnZXRQbHVnaW5BdmFpbGFiaWxpdHkocGFyYW1zKSA9PT0gUGx1Z2luQXZhaWxhYmlsaXR5LkF2YWlsYWJsZSA/IChwYXJhbXMuYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKHBhcmFtcy5wbHVnaW5JZCkgYXMgVFBsdWdpbikgOiBudWxsO1xufVxuXG4vKipcbiAqIFJlYWRzIHdoZXRoZXIgYW5vdGhlciBwbHVnaW4ncyBpbnN0YW5jZSBjYW4gYmUgdXNlZCByaWdodCBub3csIGFuZCBpZiBub3QsIHdoeS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgR2V0UGx1Z2luQXZhaWxhYmlsaXR5UGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgUGx1Z2luQXZhaWxhYmlsaXR5fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBsdWdpbkF2YWlsYWJpbGl0eTxUUGx1Z2luIGV4dGVuZHMgUGx1Z2luID0gUGx1Z2luPihwYXJhbXM6IEdldFBsdWdpbkF2YWlsYWJpbGl0eVBhcmFtczxOb0luZmVyPFRQbHVnaW4+Pik6IFBsdWdpbkF2YWlsYWJpbGl0eSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgaXNQbHVnaW4sXG4gICAgbWluUGx1Z2luVmVyc2lvbixcbiAgICBwbHVnaW5JZFxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW4gPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4ocGx1Z2luSWQpO1xuXG4gIGlmIChwbHVnaW4gPT09IG51bGwpIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24oYXBwLnBsdWdpbnMubWFuaWZlc3RzLCBwbHVnaW5JZCkpIHtcbiAgICAgIHJldHVybiBQbHVnaW5BdmFpbGFiaWxpdHkuTm90SW5zdGFsbGVkO1xuICAgIH1cblxuICAgIHJldHVybiBhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpID8gUGx1Z2luQXZhaWxhYmlsaXR5Lk5vdExvYWRlZCA6IFBsdWdpbkF2YWlsYWJpbGl0eS5Ob3RFbmFibGVkO1xuICB9XG5cbiAgaWYgKGFwcC5wbHVnaW5zLmxvYWRpbmdQbHVnaW5JZCA9PT0gcGx1Z2luSWQpIHtcbiAgICByZXR1cm4gUGx1Z2luQXZhaWxhYmlsaXR5LkxvYWRpbmc7XG4gIH1cblxuICBpZiAobWluUGx1Z2luVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tcGFyaXNvbiA9IGNvbXBhcmVQbHVnaW5WZXJzaW9uV2l0aE1pbmltdW0ocGx1Z2luLm1hbmlmZXN0LnZlcnNpb24sIG1pblBsdWdpblZlcnNpb24pO1xuICAgIGlmIChjb21wYXJpc29uID09PSBQbHVnaW5WZXJzaW9uQ29tcGFyaXNvbi5CZWxvd01pbmltdW0pIHtcbiAgICAgIHJldHVybiBQbHVnaW5BdmFpbGFiaWxpdHkuT3V0ZGF0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmlzb24gPT09IFBsdWdpblZlcnNpb25Db21wYXJpc29uLkludmFsaWQpIHtcbiAgICAgIHJldHVybiBQbHVnaW5BdmFpbGFiaWxpdHkuSW52YWxpZFZlcnNpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzUGx1Z2luICYmICFpc1BsdWdpbihwbHVnaW4pID8gUGx1Z2luQXZhaWxhYmlsaXR5LlNoYXBlTWlzbWF0Y2ggOiBQbHVnaW5BdmFpbGFiaWxpdHkuQXZhaWxhYmxlO1xufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhbm90aGVyIHBsdWdpbiB0byBiZWNvbWUge0BsaW5rIFBsdWdpbkF2YWlsYWJpbGl0eS5BdmFpbGFibGV9LCBhc2tpbmcgdGhlIHVzZXIgdG8gcmVwYWlyIGl0XG4gKiB3aGlsZSBpdCBpcyBub3QuXG4gKlxuICogUmVzb2x2ZXMgYXQgb25jZSB3aGVuIGl0IGFscmVhZHkgaXMuIE90aGVyd2lzZSwgb25jZSB0aGUgd29ya3NwYWNlIGxheW91dCBpcyByZWFkeSDigJQgYmVmb3JlIHRoYXQsIGFcbiAqIHBsdWdpbiBPYnNpZGlhbiBoYXMgbm90IGxvYWRlZCB5ZXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIG1pc3Npbmcgb25lIOKAlCBhIG5vdGljZSBzYXlzIHdoYXQgaXMgd3JvbmdcbiAqIGFuZCBvZmZlcnMgdGhlIG1hdGNoaW5nIHJlcGFpcjogaW5zdGFsbCwgZW5hYmxlLCBvciB1cGRhdGUsIHBsdXMgYSB3YXkgdG8gdGhlIGNvbW11bml0eSBwbHVnaW5zIGxpc3QuXG4gKiBUaGUgbm90aWNlIGZvbGxvd3MgdGhlIHN0YXRlIGFzIGl0IGNoYW5nZXMgYW5kIGdvZXMgYXdheSB3aGVuIHRoZSB3YWl0IHNldHRsZXMuIEEgcmVwYWlyIHRoYXQgZmFpbHMgaXNcbiAqIHJlcG9ydGVkIGFuZCBsZWF2ZXMgdGhlIHdhaXQgcnVubmluZywgc28gdGhlIHVzZXIgY2FuIHRyeSBhZ2FpbiBvciBmaXggaXQgYnkgaGFuZC5cbiAqXG4gKiBUaGUgcHJvbWlzZSBzZXR0bGVzIE9OQ0UuIEl0IGRvZXMgbm90IHdhdGNoIHRoZSBwbHVnaW4gYWZ0ZXJ3YXJkczogYSBjb25zdW1lciB0aGF0IG11c3Qgc3RvcCB3aGVuIHRoZVxuICogcGx1Z2luIGdvZXMgYXdheSBkZWNsYXJlcyBhIGRlcGVuZGVuY3kgdGhyb3VnaCBgUGx1Z2luQmFzZS5nZXRQbHVnaW5EZXBlbmRlbmNpZXMoKWAgaW5zdGVhZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzOyBjaGVja2VkIG9ubHkgdGhyb3VnaCBgaXNQbHVnaW5gLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgUmVxdWlyZVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgd2l0aCB0aGUgaW5zdGFuY2UuXG4gKiBAdGhyb3dzIFRoZSBhYm9ydCByZWFzb24sIG9yIGFuIGVycm9yIG5hbWluZyB0aGUgdW5sb2FkZWQgY29tcG9uZW50LCB3aGVuIHRoZSB3YWl0IGlzIGVuZGVkIGVhcmx5LlxuICogQHRocm93cyB7QGxpbmsgUGx1Z2luSW5zdGFuY2VVbmF2YWlsYWJsZUVycm9yfSBXaGVuIHtAbGluayBSZXF1aXJlUGx1Z2luUGFyYW1zLnRpbWVvdXRJbk1pbGxpc2Vjb25kc30gZWxhcHNlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVQbHVnaW48VFBsdWdpbiBleHRlbmRzIFBsdWdpbiA9IFBsdWdpbj4ocGFyYW1zOiBSZXF1aXJlUGx1Z2luUGFyYW1zPE5vSW5mZXI8VFBsdWdpbj4+KTogUHJvbWlzZTxUUGx1Z2luPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGxldCBzaG93bkF2YWlsYWJpbGl0eTogbnVsbCB8IFBsdWdpbkF2YWlsYWJpbGl0eSA9IG51bGw7XG4gIC8vIGBMb2FkaW5nYCBpcyBuZXZlciBzaG93biwgc28gaXQgc3RhbmRzIGluIGZvciBcIm5vdCByZWFkIHlldFwiLlxuICBsZXQgbGF0ZXN0QXZhaWxhYmlsaXR5ID0gUGx1Z2luQXZhaWxhYmlsaXR5LkxvYWRpbmc7XG4gIGxldCBoaWRlTm90aWNlOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgbGV0IGlzU2V0dGxlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHNob3coYXZhaWxhYmlsaXR5OiBQbHVnaW5BdmFpbGFiaWxpdHkpOiB2b2lkIHtcbiAgICBpZiAoaXNTZXR0bGVkIHx8ICFhcHAud29ya3NwYWNlLmxheW91dFJlYWR5IHx8IGF2YWlsYWJpbGl0eSA9PT0gc2hvd25BdmFpbGFiaWxpdHkgfHwgYXZhaWxhYmlsaXR5ID09PSBQbHVnaW5BdmFpbGFiaWxpdHkuTG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGhpZGVOb3RpY2U/LigpO1xuICAgIHNob3duQXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5O1xuICAgIGNvbnN0IG5vdGljZSA9IHBhcmFtcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZShjcmVhdGVSZXF1aXJlbWVudEZyYWdtZW50KHBhcmFtcywgYXZhaWxhYmlsaXR5KSwge1xuICAgICAgbW9kZTogUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZSxcbiAgICAgIHNob3VsZEhpZGVPbkNsaWNrOiBmYWxzZVxuICAgIH0pO1xuICAgIGhpZGVOb3RpY2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICBub3RpY2UuaGlkZSgpO1xuICAgIH07XG4gIH1cblxuICBpZiAoIWFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkpIHtcbiAgICBhcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoKCkgPT4ge1xuICAgICAgc2hvdyhsYXRlc3RBdmFpbGFiaWxpdHkpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHdhaXRGb3JBdmFpbGFiaWxpdHkoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBvblNldHRsZWQ6ICgpID0+IHtcbiAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICBoaWRlTm90aWNlPy4oKTtcbiAgICB9LFxuICAgIG9uVW5hdmFpbGFibGU6IChhdmFpbGFiaWxpdHkpID0+IHtcbiAgICAgIGxhdGVzdEF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eTtcbiAgICAgIHNob3coYXZhaWxhYmlsaXR5KTtcbiAgICB9LFxuICAgIHJlc29sdmVkVGltZW91dEluTWlsbGlzZWNvbmRzOiBwYXJhbXMudGltZW91dEluTWlsbGlzZWNvbmRzID8/IG51bGxcbiAgfSk7XG59XG5cbi8qKlxuICogV2FpdHMgZm9yIGFub3RoZXIgcGx1Z2luIHRvIGJlY29tZSB7QGxpbmsgUGx1Z2luQXZhaWxhYmlsaXR5LkF2YWlsYWJsZX0uXG4gKlxuICogUmVzb2x2ZXMgYXQgb25jZSB3aGVuIGl0IGFscmVhZHkgaXMsIHdoaWNoIGNvdmVycyBhIGNvbnN1bWVyIHJlbG9hZGVkIGFmdGVyIGl0cyBkZXBlbmRlbmN5LiBPdGhlcndpc2UgaXRcbiAqIHJlLXJlYWRzIHRoZSBzdGF0ZSBvbiBldmVyeSBgYXBwLnBsdWdpbnNgIGBjaGFuZ2VkYCBhbmQgZXZlcnkgYG9ic2lkaWFuLWxpYjpwbHVnaW4tbG9hZGVkYCBicm9hZGNhc3QsIHNvIGFcbiAqIHBsdWdpbiBlbmFibGVkLCB1cGRhdGVkIG9yIHJlbG9hZGVkIGxhdGVyIGlzIHBpY2tlZCB1cCB3aXRoIG5vIHBvbGxpbmcuIEl0IHN1YnNjcmliZXMgYmVmb3JlIGl0cyBmaXJzdFxuICogcmVhZCwgc28gYSBjaGFuZ2UgbGFuZGluZyBpbiBiZXR3ZWVuIGNhbm5vdCBiZSBtaXNzZWQuIEV2ZXJ5IGxpc3RlbmVyIGFuZCB0aW1lciBpcyByZW1vdmVkIHdoZW4gaXQgc2V0dGxlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzOyBjaGVja2VkIG9ubHkgdGhyb3VnaCBgaXNQbHVnaW5gLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgV2FpdEZvclBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgd2l0aCB0aGUgaW5zdGFuY2UuXG4gKiBAdGhyb3dzIFRoZSBhYm9ydCByZWFzb24sIG9yIGFuIGVycm9yIG5hbWluZyB0aGUgdW5sb2FkZWQgY29tcG9uZW50LCB3aGVuIHRoZSB3YWl0IGlzIGVuZGVkIGVhcmx5LlxuICogQHRocm93cyB7QGxpbmsgUGx1Z2luSW5zdGFuY2VVbmF2YWlsYWJsZUVycm9yfSBXaGVuIHRoZSB0aW1lb3V0IGVsYXBzZXMsIGNhcnJ5aW5nIHRoZSBhdmFpbGFiaWxpdHkgYXQgdGhhdCBtb21lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUGx1Z2luPFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gPSBQbHVnaW4+KHBhcmFtczogV2FpdEZvclBsdWdpblBhcmFtczxOb0luZmVyPFRQbHVnaW4+Pik6IFByb21pc2U8VFBsdWdpbj4ge1xuICByZXR1cm4gYXdhaXQgd2FpdEZvckF2YWlsYWJpbGl0eSh7XG4gICAgLi4ucGFyYW1zLFxuICAgIHJlc29sdmVkVGltZW91dEluTWlsbGlzZWNvbmRzOiBwYXJhbXMudGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfV0FJVF9GT1JfUExVR0lOX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXF1aXJlbWVudEZyYWdtZW50PFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4+KHBhcmFtczogUmVxdWlyZVBsdWdpblBhcmFtczxUUGx1Z2luPiwgYXZhaWxhYmlsaXR5OiBQbHVnaW5BdmFpbGFiaWxpdHkpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBtaW5QbHVnaW5WZXJzaW9uID0gJycsXG4gICAgcGx1Z2luSWQsXG4gICAgcGx1Z2luTmFtZSxcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQsXG4gICAgcmVxdWVzdGluZ1BsdWdpbk5hbWVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgaW50ZXJwb2xhdGlvbiA9IHtcbiAgICBtaW5QbHVnaW5WZXJzaW9uLFxuICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHJlcXVlc3RpbmdQbHVnaW5OYW1lKSxcbiAgICByZXF1aXJlZFBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHBsdWdpbk5hbWUpXG4gIH07XG5cbiAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50KChmcmFnbWVudEVsKSA9PiB7XG4gICAgZnJhZ21lbnRFbC5hcHBlbmQoY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiB7XG4gICAgICBzd2l0Y2ggKGF2YWlsYWJpbGl0eSkge1xuICAgICAgICBjYXNlIFBsdWdpbkF2YWlsYWJpbGl0eS5JbnZhbGlkVmVyc2lvbjoge1xuICAgICAgICAgIHJldHVybiAkLm9ic2lkaWFuTGliLnBsdWdpblJlcXVpcmVtZW50LmludmFsaWRWZXJzaW9uTm90aWNlO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUGx1Z2luQXZhaWxhYmlsaXR5Lk5vdEVuYWJsZWQ6IHtcbiAgICAgICAgICByZXR1cm4gJC5vYnNpZGlhbkxpYi5wbHVnaW5SZXF1aXJlbWVudC5ub3RFbmFibGVkTm90aWNlO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUGx1Z2luQXZhaWxhYmlsaXR5Lk5vdEluc3RhbGxlZDoge1xuICAgICAgICAgIHJldHVybiAkLm9ic2lkaWFuTGliLnBsdWdpblJlcXVpcmVtZW50Lm5vdEluc3RhbGxlZE5vdGljZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFBsdWdpbkF2YWlsYWJpbGl0eS5Ob3RMb2FkZWQ6IHtcbiAgICAgICAgICByZXR1cm4gJC5vYnNpZGlhbkxpYi5wbHVnaW5SZXF1aXJlbWVudC5ub3RMb2FkZWROb3RpY2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBQbHVnaW5BdmFpbGFiaWxpdHkuT3V0ZGF0ZWQ6IHtcbiAgICAgICAgICByZXR1cm4gJC5vYnNpZGlhbkxpYi5wbHVnaW5SZXF1aXJlbWVudC5vdXRkYXRlZE5vdGljZTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmV0dXJuICQub2JzaWRpYW5MaWIucGx1Z2luUmVxdWlyZW1lbnQuc2hhcGVNaXNtYXRjaE5vdGljZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGludGVycG9sYXRpb24pKSk7XG5cbiAgICBjb25zdCBidXR0b25zRWwgPSBmcmFnbWVudEVsLmNyZWF0ZURpdih7XG4gICAgICBjbHM6IFtDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuUGx1Z2luU3VnZ2VzdGlvbk5vdGljZUJ1dHRvbnNdXG4gICAgfSk7XG5cbiAgICBzd2l0Y2ggKGF2YWlsYWJpbGl0eSkge1xuICAgICAgY2FzZSBQbHVnaW5BdmFpbGFiaWxpdHkuTm90RW5hYmxlZDpcbiAgICAgIGNhc2UgUGx1Z2luQXZhaWxhYmlsaXR5Lk5vdEluc3RhbGxlZDoge1xuICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJ1dHRvbnNFbClcbiAgICAgICAgICAuc2V0QnV0dG9uVGV4dCh0KCgkKSA9PlxuICAgICAgICAgICAgYXZhaWxhYmlsaXR5ID09PSBQbHVnaW5BdmFpbGFiaWxpdHkuTm90RW5hYmxlZFxuICAgICAgICAgICAgICA/ICQub2JzaWRpYW5MaWIucGx1Z2luU3VnZ2VzdGlvbi5lbmFibGVcbiAgICAgICAgICAgICAgOiAkLm9ic2lkaWFuTGliLnBsdWdpblN1Z2dlc3Rpb24uaW5zdGFsbFxuICAgICAgICAgICkpXG4gICAgICAgICAgLnNldEN0YSgpXG4gICAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJ1blJlcGFpcihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IGluc3RhbGxBbmRFbmFibGVQbHVnaW4oe1xuICAgICAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgICAgICBwbHVnaW5JZCxcbiAgICAgICAgICAgICAgICBwbHVnaW5OYW1lLFxuICAgICAgICAgICAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBsdWdpbkF2YWlsYWJpbGl0eS5Ob3RMb2FkZWQ6IHtcbiAgICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChidXR0b25zRWwpXG4gICAgICAgICAgLnNldEJ1dHRvblRleHQodCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wbHVnaW5SZXF1aXJlbWVudC5lbmFibGUsIHsgcmVxdWlyZWRQbHVnaW5OYW1lOiBwbHVnaW5OYW1lIH0pKVxuICAgICAgICAgIC5zZXRDdGEoKVxuICAgICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBydW5SZXBhaXIoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBsb2FkRW5hYmxlZFBsdWdpbihwYXJhbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChidXR0b25zRWwpXG4gICAgICAgICAgLnNldEJ1dHRvblRleHQodCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wbHVnaW5EZXBlbmRlbmN5LnVwZGF0ZSwgeyBkZXBlbmRlbmN5UGx1Z2luTmFtZTogcGx1Z2luTmFtZSB9KSlcbiAgICAgICAgICAuc2V0Q3RhKClcbiAgICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcnVuUmVwYWlyKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlUGx1Z2luKHtcbiAgICAgICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICAgICAgcGx1Z2luSWQsXG4gICAgICAgICAgICAgICAgcGx1Z2luTmFtZSxcbiAgICAgICAgICAgICAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgcmVxdWVzdGluZ1BsdWdpbk5hbWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5ldyBCdXR0b25Db21wb25lbnQoYnV0dG9uc0VsKVxuICAgICAgLnNldEJ1dHRvblRleHQodCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wbHVnaW5SZXF1aXJlbWVudC5vcGVuQ29tbXVuaXR5UGx1Z2lucykpXG4gICAgICAub25DbGljaygoKSA9PiB7XG4gICAgICAgIG9wZW5TZXR0aW5nVGFiKHtcbiAgICAgICAgICBhcHAsXG4gICAgICAgICAgdGFiSWQ6IENPTU1VTklUWV9QTFVHSU5TX1NFVFRJTkdfVEFCX0lEXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIExvYWRzIGEgcGx1Z2luIHRoYXQgaXMgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBidXQgbm90IHJ1bm5pbmcsIHRoZSBvbmUgY2FzZVxuICogYGluc3RhbGxBbmRFbmFibGVQbHVnaW5gIHRyZWF0cyBhcyBhbHJlYWR5IGRvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBUUGx1Z2luIC0gVGhlIHBsdWdpbiB0eXBlIHRoZSBjYWxsZXIgZXhwZWN0cy5cbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcmVxdWlyZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBsb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRFbmFibGVkUGx1Z2luPFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4+KHBhcmFtczogUmVxdWlyZVBsdWdpblBhcmFtczxUUGx1Z2luPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIHBsdWdpbklkLFxuICAgIHBsdWdpbk5hbWUsXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50XG4gIH0gPSBwYXJhbXM7XG5cbiAgdHJ5IHtcbiAgICBpZiAoIWF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgUGx1Z2luRW5hYmxlUmVmdXNlZEVycm9yKHBsdWdpbklkKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UoY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2NrcyhcbiAgICAgIHQoKCQpID0+ICQub2JzaWRpYW5MaWIucGx1Z2luUmVxdWlyZW1lbnQuZW5hYmxlRmFpbGVkLCB7IHJlcXVpcmVkUGx1Z2luTmFtZTogYXNDb2RlQmxvY2socGx1Z2luTmFtZSkgfSlcbiAgICApKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgYSByZXBhaXIgdGhlIHVzZXIgY2xpY2tlZC4gSXRzIGZhaWx1cmUgaGFzIGFscmVhZHkgYmVlbiBzaG93biBhcyBhIG5vdGljZSwgYW5kIHRoZSB3YWl0IGl0IGJlbG9uZ3MgdG9cbiAqIGtlZXBzIHJ1bm5pbmcgc28gdGhlIHVzZXIgY2FuIHRyeSBhZ2Fpbiwgc28gaXQgaXMgbG9nZ2VkIHJhdGhlciB0aGFuIHJldGhyb3duIGludG8gdGhlIGNsaWNrIGhhbmRsZXIuXG4gKlxuICogQHBhcmFtIHJlcGFpciAtIFRoZSByZXBhaXIuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHJlcGFpciBoYXMgcnVuLlxuICovXG5hc3luYyBmdW5jdGlvbiBydW5SZXBhaXIocmVwYWlyOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVwYWlyKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckF2YWlsYWJpbGl0eTxUUGx1Z2luIGV4dGVuZHMgUGx1Z2luPihwYXJhbXM6IFdhaXRGb3JBdmFpbGFiaWxpdHlQYXJhbXM8VFBsdWdpbj4pOiBQcm9taXNlPFRQbHVnaW4+IHtcbiAgY29uc3Qge1xuICAgIGFib3J0U2lnbmFsLFxuICAgIGFwcCxcbiAgICBjb21wb25lbnQsXG4gICAgb25TZXR0bGVkLFxuICAgIG9uVW5hdmFpbGFibGUsXG4gICAgcGx1Z2luSWQsXG4gICAgcmVzb2x2ZWRUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgfSA9IHBhcmFtcztcblxuICBhYm9ydFNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8VFBsdWdpbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBpc1NldHRsZWQgPSBmYWxzZTtcbiAgICBsZXQgdGltZW91dElkOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcbiAgICBsZXQgcmVtb3ZlV2FpdENvbXBvbmVudDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgZXZlbnRSZWZzOiBbRXZlbnRzLCBFdmVudFJlZl1bXSA9IFtdO1xuXG4gICAgZnVuY3Rpb24gY2xlYW5VcCgpOiB2b2lkIHtcbiAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICByZW1vdmVXYWl0Q29tcG9uZW50Py4oKTtcbiAgICAgIHJlbW92ZVdhaXRDb21wb25lbnQgPSBudWxsO1xuICAgICAgZm9yIChjb25zdCBbc291cmNlLCBldmVudFJlZl0gb2YgZXZlbnRSZWZzKSB7XG4gICAgICAgIHNvdXJjZS5vZmZyZWYoZXZlbnRSZWYpO1xuICAgICAgfVxuICAgICAgZXZlbnRSZWZzLmxlbmd0aCA9IDA7XG4gICAgICBhYm9ydFNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBoYW5kbGVBYm9ydCk7XG4gICAgICBpZiAodGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgdGltZW91dElkID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIG9uU2V0dGxlZD8uKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmFpbChlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICAgIGlmIChpc1NldHRsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjbGVhblVwKCk7XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZUFib3J0KCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHJlYXNvbjogdW5rbm93biA9IGNhc3RUbzxBYm9ydFNpZ25hbD4oJGV2ZW50LnRhcmdldCkucmVhc29uO1xuICAgICAgZmFpbChyZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbiA6IG5ldyBFcnJvcihTdHJpbmcocmVhc29uKSwgeyBjYXVzZTogcmVhc29uIH0pKTtcbiAgICB9XG5cbiAgICAvLyBObyBzZXR0bGVkIGd1YXJkOiBzZXR0bGluZyByZW1vdmVzIGJvdGggbGlzdGVuZXJzLCBhbmQgbm90aGluZyBlbHNlIGNhbGxzIHRoaXMuXG4gICAgZnVuY3Rpb24gY2hlY2soKTogdm9pZCB7XG4gICAgICBjb25zdCBhdmFpbGFiaWxpdHkgPSBnZXRQbHVnaW5BdmFpbGFiaWxpdHkocGFyYW1zKTtcbiAgICAgIGlmIChhdmFpbGFiaWxpdHkgPT09IFBsdWdpbkF2YWlsYWJpbGl0eS5BdmFpbGFibGUpIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKHBsdWdpbklkKSBhcyBUUGx1Z2luO1xuICAgICAgICBjbGVhblVwKCk7XG4gICAgICAgIHJlc29sdmUocGx1Z2luKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBvblVuYXZhaWxhYmxlPy4oYXZhaWxhYmlsaXR5KTtcbiAgICB9XG5cbiAgICAvLyBTdWJzY3JpYmUgQkVGT1JFIHRoZSBmaXJzdCByZWFkLCBzbyBhIGNoYW5nZSBsYW5kaW5nIGJldHdlZW4gdGhlIHJlYWQgYW5kIHRoZSBzdWJzY3JpcHRpb24gY2Fubm90IGJlXG4gICAgLy8gbWlzc2VkLlxuICAgIGV2ZW50UmVmcy5wdXNoKFxuICAgICAgW2FwcC5wbHVnaW5zLCBhcHAucGx1Z2lucy5vbihQTFVHSU5TX0NIQU5HRURfRVZFTlRfTkFNRSwgY2hlY2spXSxcbiAgICAgIFthcHAud29ya3NwYWNlLCBhcHAud29ya3NwYWNlLm9uKFBMVUdJTl9MT0FERURfRVZFTlRfTkFNRSwgY2hlY2spXVxuICAgICk7XG4gICAgYWJvcnRTaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgaGFuZGxlQWJvcnQpO1xuXG4gICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgLy8gQSBjaGlsZCByYXRoZXIgdGhhbiBgY29tcG9uZW50LnJlZ2lzdGVyYCwgYmVjYXVzZSBhIGNvbXBvbmVudCBjYW5ub3QgZm9yZ2V0IGEgcmVnaXN0ZXJlZCBjYWxsYmFjazpcbiAgICAgIC8vIHJlbW92aW5nIHRoZSBjaGlsZCBvbiBzZXR0bGUgaXMgd2hhdCBrZWVwcyBhIGxvbmctbGl2ZWQgY29uc3VtZXIgZnJvbSBjb2xsZWN0aW5nIG9uZSBwZXIgd2FpdC5cbiAgICAgIGNvbnN0IHdhaXRDb21wb25lbnQgPSBuZXcgQ29tcG9uZW50KCk7XG4gICAgICB3YWl0Q29tcG9uZW50LnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgICAgZmFpbChuZXcgRXJyb3IoYFRoZSB3YWl0IGZvciBwbHVnaW4gXCIke3BsdWdpbklkfVwiIGVuZGVkIGJlY2F1c2UgaXRzIGNvbXBvbmVudCB1bmxvYWRlZC5gKSk7XG4gICAgICB9KTtcbiAgICAgIGNvbXBvbmVudC5hZGRDaGlsZCh3YWl0Q29tcG9uZW50KTtcbiAgICAgIHJlbW92ZVdhaXRDb21wb25lbnQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbXBvbmVudC5yZW1vdmVDaGlsZCh3YWl0Q29tcG9uZW50KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVkVGltZW91dEluTWlsbGlzZWNvbmRzICE9PSBudWxsKSB7XG4gICAgICB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZhaWwoXG4gICAgICAgICAgbmV3IFBsdWdpbkluc3RhbmNlVW5hdmFpbGFibGVFcnJvcih7XG4gICAgICAgICAgICBhdmFpbGFiaWxpdHk6IGdldFBsdWdpbkF2YWlsYWJpbGl0eShwYXJhbXMpLFxuICAgICAgICAgICAgcGx1Z2luSWRcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSwgcmVzb2x2ZWRUaW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICAgIH1cblxuICAgIGNoZWNrKCk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVDQSxtQkFBbUM7QUFDbkMsMEJBQXVCO0FBQ3ZCLHNCQUdPO0FBSVAsK0JBQXlDO0FBQ3pDLHFDQUFpQztBQUNqQyx1QkFBeUI7QUFDekIsMEJBR087QUFDUCxrQkFBa0I7QUFDbEIsNEJBQStCO0FBQy9CLGtDQUtPO0FBQ1AscUNBQXlDO0FBS3pDLE1BQU0sa0RBQWtEO0FBS3hELE1BQU0sNkJBQTZCO0FBS25DLE1BQU0sbUNBQW1DO0FBS2xDLElBQUsscUJBQUwsa0JBQUtBLHdCQUFMO0FBSUwsRUFBQUEsb0JBQUEsZUFBWTtBQU9aLEVBQUFBLG9CQUFBLG9CQUFpQjtBQUtqQixFQUFBQSxvQkFBQSxhQUFVO0FBS1YsRUFBQUEsb0JBQUEsZ0JBQWE7QUFLYixFQUFBQSxvQkFBQSxrQkFBZTtBQU9mLEVBQUFBLG9CQUFBLGVBQVk7QUFLWixFQUFBQSxvQkFBQSxjQUFXO0FBS1gsRUFBQUEsb0JBQUEsbUJBQWdCO0FBM0NOLFNBQUFBO0FBQUEsR0FBQTtBQStMTCxNQUFNLHVDQUF1QyxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJeEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVB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
|
|
450
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWluc3RhbmNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBbm90aGVyIHBsdWdpbidzIElOU1RBTkNFOiB3aGV0aGVyIGl0IGlzIHRoZXJlLCB3YWl0aW5nIGZvciBpdCwgYW5kIGFza2luZyB0aGUgdXNlciB0byBicmluZyBpdCBpbi5cbiAqXG4gKiBUaGlzIGlzIHRoZSBwYXRoIGZvciBhIHBsdWdpbiB0aGF0IHB1Ymxpc2hlcyBub3RoaW5nIHRocm91Z2ggdGhlIGxpYnJhcnkncyByZWdpc3RyeSwgd2hpY2ggaXMgbW9zdCBvZlxuICogdGhlbS4gQSBwcm92aWRlciB0aGF0IGRvZXMgcHVibGlzaCBpcyBiZXR0ZXIgcmVhY2hlZCB0aHJvdWdoIGB3YXRjaFBsdWdpbkFwaWAgKGAuL3BsdWdpbi1hcGkudHNgKTogaXRzXG4gKiByZWZlcmVuY2UgaXMgbGl2ZSwgdmVyc2lvbi1uZWdvdGlhdGVkIGFuZCByZXZva2VkIHdoZW4gdGhlIHByb3ZpZGVyIGdvZXMgYXdheSwgbm9uZSBvZiB3aGljaCBhIGJhcmVcbiAqIGluc3RhbmNlIG9mZmVycy4gQW5kIGEgcGx1Z2luIHRoYXQgbXVzdCBTVE9QIHJ1bm5pbmcgd2hlbiBhbm90aGVyIG9uZSBnb2VzIGF3YXkgZGVjbGFyZXMgaXQgdGhyb3VnaFxuICogYFBsdWdpbkJhc2UuZ2V0UGx1Z2luRGVwZW5kZW5jaWVzKClgLCB3aG9zZSBnYXRlIG93bnMgdGhhdCB0ZWFyZG93biDigJQge0BsaW5rIHJlcXVpcmVQbHVnaW59IGlzIGEgb25lLXNob3RcbiAqIHdhaXQsIG5vdCBhIHNlY29uZCBkZXBlbmRlbmN5IHN5c3RlbS5cbiAqXG4gKiBXaGF0IFwibG9hZGVkXCIgY2FuIGFuZCBjYW5ub3QgbWVhbiwgcmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjFgOlxuICpcbiAqIC0gYFBsdWdpbnMubG9hZFBsdWdpbmAgc3RvcmVzIHRoZSBpbnN0YW5jZSBpbiBgYXBwLnBsdWdpbnMucGx1Z2luc2AgQkVGT1JFIGl0IGF3YWl0cyBgcGx1Z2luLmxvYWQoKWAsIGFuZFxuICogICBgUGx1Z2luLmxvYWRgIHNldHMgYF9sb2FkZWRgIGJlZm9yZSBpdCBhd2FpdHMgYG9ubG9hZCgpYC4gU28gYGFwcC5wbHVnaW5zLmdldFBsdWdpbihpZClgIGNhbiByZXR1cm4gYVxuICogICBwbHVnaW4gd2hvc2UgYG9ubG9hZGAgaXMgc3RpbGwgcnVubmluZywgYW5kIGBfbG9hZGVkYCBjYW5ub3QgdGVsbCB0aGUgdHdvIGFwYXJ0LlxuICogICBgUGx1Z2lucy5lbmFibGVQbHVnaW5gIGJyYWNrZXRzIHRoZSBsb2FkIHdpdGggYGxvYWRpbmdQbHVnaW5JZGAsIHdoaWNoIGlzIHRoZSBvbmUgc2lnbmFsIHRoYXQgZG9lcywgc29cbiAqICAgYW4gaW5zdGFuY2Ugd2hvc2UgaWQgaXMgYGxvYWRpbmdQbHVnaW5JZGAgcmVhZHMgYXMge0BsaW5rIFBsdWdpbkF2YWlsYWJpbGl0eS5Mb2FkaW5nfS5cbiAqIC0gYG9ubG9hZGAgaGF2aW5nIHNldHRsZWQgaXMgdGhlIG1vc3QgYW55dGhpbmcgY2FuIHByb21pc2UuIEEgcGx1Z2luIHRoYXQgc3RhcnRzIGZ1cnRoZXIgd29yayBmcm9tXG4gKiAgIGBvbmxvYWRgIHdpdGhvdXQgYXdhaXRpbmcgaXQsIG9yIHdhaXRzIGZvciBsYXlvdXQtcmVhZHksIGlzIFwibG9hZGVkXCIgYmVmb3JlIHRoYXQgd29yayBpcyBkb25lLCBhbmRcbiAqICAgT2JzaWRpYW4gaGFzIG5vIGhvb2sgc2F5aW5nIGV2ZXJ5IHBsdWdpbiBoYXMgZmluaXNoZWQgaW5pdGlhbGl6aW5nLiBBIHBsdWdpbiBidWlsdCBvbiB0aGlzIGxpYnJhcnlcbiAqICAgc2F5cyBtb3JlIHRocm91Z2ggdGhlIGBvYnNpZGlhbi1saWI6cGx1Z2luLWxvYWRlZGAgYnJvYWRjYXN0LCB3aGljaCBmb2xsb3dzIGl0cyBwdWJsaXNoZWQgQVBJcy5cbiAqIC0gYGFwcC5wbHVnaW5zYCBpcyBhbiBgRXZlbnRzYCBzb3VyY2UgdGhhdCB0cmlnZ2VycyBgY2hhbmdlZGAsIGRlYm91bmNlZCBieSBvbmUgbWFjcm90YXNrLCBhZnRlciBldmVyeVxuICogICBlbmFibGUsIGRpc2FibGUsIGluc3RhbGwsIHVuaW5zdGFsbCBhbmQgbWFuaWZlc3QgcmVsb2FkLiBUaGF0IGlzIHdoYXQgYSB3YWl0IHN1YnNjcmliZXMgdG8sIHNvIG5vdGhpbmdcbiAqICAgaGVyZSBwb2xscy4gSXQgZmlyZXMgYWZ0ZXIgYGVuYWJsZVBsdWdpbmAgcmV0dXJuZWQsIHdoZW4gYGxvYWRpbmdQbHVnaW5JZGAgaXMgYG51bGxgIGFnYWluLlxuICpcbiAqIEEgdHlwZSBhcmd1bWVudCBhbG9uZSBpcyBhIGNhbGxlcidzIEFTU0VSVElPTiBhYm91dCB0aGUgaW5zdGFuY2UsIG5vdCBhIGNoZWNrOiBub3RoaW5nIGF0IHJ1bnRpbWUga25vd3NcbiAqIHdoYXQgYFRQbHVnaW5gIGlzLiBQYXNzIGBpc1BsdWdpbmAgdG8gaGF2ZSB0aGUgc2hhcGUgdmVyaWZpZWQ7IGFuIGluc3RhbmNlIGZhaWxpbmcgaXQgcmVhZHMgYXNcbiAqIHtAbGluayBQbHVnaW5BdmFpbGFiaWxpdHkuU2hhcGVNaXNtYXRjaH0sIHRoZSB1c3VhbCBzaWduIG9mIGEgcmVsZWFzZSB0aGF0IHJlbmFtZWQgd2hhdCB0aGUgY2FsbGVyIHVzZXMuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEV2ZW50UmVmLFxuICBFdmVudHMsXG4gIFBsdWdpblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGNvbnZlcnRBc3luY1RvU3luYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgQ29tcG9uZW50XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHsgUGx1Z2luRW5hYmxlUmVmdXNlZEVycm9yIH0gZnJvbSAnLi4vY29tbXVuaXR5LXBsdWdpbnMudHMnO1xuaW1wb3J0IHsgUGx1Z2luTm90aWNlTW9kZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHtcbiAgYXNDb2RlQmxvY2ssXG4gIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3Ncbn0gZnJvbSAnLi4vaHRtbC1lbGVtZW50LnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgb3BlblNldHRpbmdUYWIgfSBmcm9tICcuLi9zZXR0aW5ncy1tb2RhbC50cyc7XG5pbXBvcnQge1xuICBjb21wYXJlUGx1Z2luVmVyc2lvbldpdGhNaW5pbXVtLFxuICBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luLFxuICBQbHVnaW5WZXJzaW9uQ29tcGFyaXNvbixcbiAgdXBkYXRlUGx1Z2luXG59IGZyb20gJy4vcGx1Z2luLWluc3RhbGwtc3RhdGUudHMnO1xuaW1wb3J0IHsgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FIH0gZnJvbSAnLi9wbHVnaW4tbGlmZWN5Y2xlLWV2ZW50cy50cyc7XG5cbi8qKlxuICogSG93IGxvbmcge0BsaW5rIHdhaXRGb3JQbHVnaW59IHdhaXRzIGJ5IGRlZmF1bHQgYmVmb3JlIGdpdmluZyB1cC5cbiAqL1xuY29uc3QgREVGQVVMVF9XQUlUX0ZPUl9QTFVHSU5fVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5cbi8qKlxuICogVGhlIGV2ZW50IGBhcHAucGx1Z2luc2AgdHJpZ2dlcnMgYWZ0ZXIgZXZlcnkgZW5hYmxlLCBkaXNhYmxlLCBpbnN0YWxsLCB1bmluc3RhbGwgYW5kIG1hbmlmZXN0IHJlbG9hZC5cbiAqXG4gKiBSZWFkIGZyb20gT2JzaWRpYW4gYDEuMTUuMWA6IGBkaWRDaGFuZ2VgIHRyaWdnZXJzIGl0IGRlYm91bmNlZCBieSBvbmUgbWFjcm90YXNrLCBzbyBzZXZlcmFsIGNoYW5nZXMgaW4gb25lXG4gKiB0YXNrIGFycml2ZSBhcyBvbmUgZXZlbnQsIGFmdGVyIGBlbmFibGVQbHVnaW5gIC8gYGRpc2FibGVQbHVnaW5gIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgUExVR0lOU19DSEFOR0VEX0VWRU5UX05BTUUgPSAnY2hhbmdlZCc7XG5cbi8qKlxuICogVGhlIGlkIG9mIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgc2V0dGluZ3MgdGFiLlxuICovXG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19TRVRUSU5HX1RBQl9JRCA9ICdjb21tdW5pdHktcGx1Z2lucyc7XG5cbi8qKlxuICogV2hldGhlciBhbm90aGVyIHBsdWdpbidzIGluc3RhbmNlIGNhbiBiZSB1c2VkIHJpZ2h0IG5vdywgYW5kIGlmIG5vdCwgd2h5LlxuICovXG5leHBvcnQgZW51bSBQbHVnaW5BdmFpbGFiaWxpdHkge1xuICAvKipcbiAgICogTG9hZGVkLCBgb25sb2FkYCBzZXR0bGVkLCBhbmQgZXZlcnkgZGVjbGFyZWQgcmVxdWlyZW1lbnQgbWV0LlxuICAgKi9cbiAgQXZhaWxhYmxlID0gJ2F2YWlsYWJsZScsXG5cbiAgLyoqXG4gICAqIFJ1bm5pbmcgYXQgYSByZWxlYXNlIHdob3NlIGBtYW5pZmVzdC52ZXJzaW9uYCBjYW5ub3QgYmUgcGFyc2VkLCB3aGlsZSB0aGUgY2FsbGVyIGRlY2xhcmVkIGFcbiAgICoge0BsaW5rIEdldFBsdWdpbkF2YWlsYWJpbGl0eVBhcmFtcy5taW5QbHVnaW5WZXJzaW9ufS4gQ291bnRzIGFzIHVuYXZhaWxhYmxlLCBiZWNhdXNlIGZhaWxpbmcgY2xvc2VkIGlzIHRoZVxuICAgKiBzYWZlIGRpcmVjdGlvbi5cbiAgICovXG4gIEludmFsaWRWZXJzaW9uID0gJ2ludmFsaWRWZXJzaW9uJyxcblxuICAvKipcbiAgICogVGhlIGluc3RhbmNlIGV4aXN0cyBidXQgaXRzIGBvbmxvYWRgIGhhcyBub3Qgc2V0dGxlZCB5ZXQuXG4gICAqL1xuICBMb2FkaW5nID0gJ2xvYWRpbmcnLFxuXG4gIC8qKlxuICAgKiBJbnN0YWxsZWQgYnV0IG5laXRoZXIgZW5hYmxlZCBub3IgcnVubmluZy5cbiAgICovXG4gIE5vdEVuYWJsZWQgPSAnbm90RW5hYmxlZCcsXG5cbiAgLyoqXG4gICAqIE5vdCBpbnN0YWxsZWQgaW4gdGhpcyB2YXVsdC5cbiAgICovXG4gIE5vdEluc3RhbGxlZCA9ICdub3RJbnN0YWxsZWQnLFxuXG4gIC8qKlxuICAgKiBJbnN0YWxsZWQgYW5kIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIGJ1dCBubyBpbnN0YW5jZSBpcyBydW5uaW5nLiBBdCBzdGFydHVwIHRoYXQgaXMgYSBwbHVnaW5cbiAgICogT2JzaWRpYW4gaGFzIG5vdCByZWFjaGVkIHlldDsgbGF0ZXIgaXQgaXMgb25lIHRoYXQgZmFpbGVkIHRvIGxvYWQsIG9yIG9uZSBzd2l0Y2hlZCBvZmYgYnkgYSBkaXNhYmxlIHRoYXRcbiAgICogZG9lcyBub3QgdG91Y2ggdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBOb3RMb2FkZWQgPSAnbm90TG9hZGVkJyxcblxuICAvKipcbiAgICogUnVubmluZyBhdCBhIHJlbGVhc2Ugb2xkZXIgdGhhbiB0aGUgY2FsbGVyJ3Mge0BsaW5rIEdldFBsdWdpbkF2YWlsYWJpbGl0eVBhcmFtcy5taW5QbHVnaW5WZXJzaW9ufS5cbiAgICovXG4gIE91dGRhdGVkID0gJ291dGRhdGVkJyxcblxuICAvKipcbiAgICogUnVubmluZywgYnV0IHRoZSBjYWxsZXIncyB7QGxpbmsgR2V0UGx1Z2luQXZhaWxhYmlsaXR5UGFyYW1zLmlzUGx1Z2lufSByZWplY3RlZCB0aGUgaW5zdGFuY2UuXG4gICAqL1xuICBTaGFwZU1pc21hdGNoID0gJ3NoYXBlTWlzbWF0Y2gnXG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldExvYWRlZFBsdWdpbn0uXG4gKlxuICogQHR5cGVQYXJhbSBUUGx1Z2luIC0gVGhlIHBsdWdpbiB0eXBlIHRoZSBjYWxsZXIgZXhwZWN0cy5cbiAqL1xuZXhwb3J0IHR5cGUgR2V0TG9hZGVkUGx1Z2luUGFyYW1zPFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gPSBQbHVnaW4+ID0gR2V0UGx1Z2luQXZhaWxhYmlsaXR5UGFyYW1zPFRQbHVnaW4+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRQbHVnaW5BdmFpbGFiaWxpdHl9LlxuICpcbiAqIEB0eXBlUGFyYW0gVFBsdWdpbiAtIFRoZSBwbHVnaW4gdHlwZSB0aGUgY2FsbGVyIGV4cGVjdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UGx1Z2luQXZhaWxhYmlsaXR5UGFyYW1zPFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gPSBQbHVnaW4+IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhhdCB0aGUgcnVubmluZyBpbnN0YW5jZSBpcyB0aGUgc2hhcGUgdGhlIGNhbGxlciB1c2VzLiBXaXRob3V0IGl0LCBgVFBsdWdpbmAgaXMgYW5cbiAgICogYXNzZXJ0aW9uIG5vdGhpbmcgY2hlY2tzLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHJ1bm5pbmcgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGluc3RhbmNlIGlzIGEgYFRQbHVnaW5gLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNQbHVnaW4/OiAocGx1Z2luOiBQbHVnaW4pID0+IHBsdWdpbiBpcyBUUGx1Z2luO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkZXN0IHJlbGVhc2Ugb2YgdGhlIHBsdWdpbiB0aGUgY2FsbGVyIHdvcmtzIHdpdGgsIGNvbXBhcmVkIHdpdGggaXRzIGBtYW5pZmVzdC52ZXJzaW9uYC4gVGhpcyBpc1xuICAgKiBhIHBsdWdpbiBSRUxFQVNFLCBuZXZlciBhbiBBUEkgY29udHJhY3QgdmVyc2lvbjogYSBwcm92aWRlciBwdWJsaXNoaW5nIGEgdmVyc2lvbmVkIGNvbnRyYWN0IGlzIHJlYWNoZWRcbiAgICogdGhyb3VnaCBgd2F0Y2hQbHVnaW5BcGlgJ3MgYGFwaVZlcnNpb25SYW5nZWAgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IG1pblBsdWdpblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgUGx1Z2luSW5zdGFuY2VVbmF2YWlsYWJsZUVycm9yfSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5JbnN0YW5jZVVuYXZhaWxhYmxlRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaHkgdGhlIHBsdWdpbiB3YXMgdW5hdmFpbGFibGUgd2hlbiB0aGUgd2FpdCBnYXZlIHVwLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5OiBQbHVnaW5BdmFpbGFiaWxpdHk7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXF1aXJlUGx1Z2lufS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVQbHVnaW5QYXJhbXM8VFBsdWdpbiBleHRlbmRzIFBsdWdpbiA9IFBsdWdpbj4gZXh0ZW5kcyBHZXRQbHVnaW5BdmFpbGFiaWxpdHlQYXJhbXM8VFBsdWdpbj4ge1xuICAvKipcbiAgICogRW5kcyB0aGUgd2FpdCBlYXJseTsgdGhlIHByb21pc2UgcmVqZWN0cyB3aXRoIHRoZSBzaWduYWwncyByZWFzb24uXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IG93bmluZyB0aGUgd2FpdCBhbmQgaXRzIG5vdGljZS4gSXRzIHVubG9hZCBlbmRzIGJvdGgsIHJlamVjdGluZyB0aGUgcHJvbWlzZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudDogQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSByZXF1aXJlZCBwbHVnaW4sIHNob3duIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXNraW5nIHBsdWdpbidzIG5vdGljZSBjb21wb25lbnQsIHdoaWNoIHNob3dzIHdoYXQgaXMgbWlzc2luZyBhbmQgdGhlIGJ1dHRvbiB0aGF0IGZpeGVzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGFza2luZyBwbHVnaW4sIG5hbWVkIGluIHRoZSBub3RpY2UuXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0aW5nUGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byB3YWl0IGJlZm9yZSBnaXZpbmcgdXAuIEJ5IGRlZmF1bHQgdGhlIHdhaXQgbGFzdHMgdW50aWwgdGhlIHVzZXIgcmVwYWlycyB0aGUgcGx1Z2luLCB0aGVcbiAgICoge0BsaW5rIFJlcXVpcmVQbHVnaW5QYXJhbXMuYWJvcnRTaWduYWx9IGFib3J0cyBvciB0aGUge0BsaW5rIFJlcXVpcmVQbHVnaW5QYXJhbXMuY29tcG9uZW50fSB1bmxvYWRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB3YWl0Rm9yUGx1Z2lufS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRGb3JQbHVnaW5QYXJhbXM8VFBsdWdpbiBleHRlbmRzIFBsdWdpbiA9IFBsdWdpbj4gZXh0ZW5kcyBHZXRQbHVnaW5BdmFpbGFiaWxpdHlQYXJhbXM8VFBsdWdpbj4ge1xuICAvKipcbiAgICogRW5kcyB0aGUgd2FpdCBlYXJseTsgdGhlIHByb21pc2UgcmVqZWN0cyB3aXRoIHRoZSBzaWduYWwncyByZWFzb24uXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBBIGNvbXBvbmVudCB3aG9zZSB1bmxvYWQgZW5kcyB0aGUgd2FpdCwgcmVqZWN0aW5nIHRoZSBwcm9taXNlLiBQYXNzIHRoZSB3YWl0aW5nIHBsdWdpbiwgb3IgdGhlXG4gICAqIGNvbXBvbmVudCB0aGF0IHdpbGwgdXNlIHRoZSBpbnN0YW5jZSwgc28gYSB3YWl0IG5ldmVyIG91dGxpdmVzIGl0cyBjb25zdW1lci5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudD86IENvbXBvbmVudDtcblxuICAvKipcbiAgICogSG93IGxvbmcgdG8gd2FpdCBiZWZvcmUgcmVqZWN0aW5nIHdpdGggYSB7QGxpbmsgUGx1Z2luSW5zdGFuY2VVbmF2YWlsYWJsZUVycm9yfS5cbiAgICpcbiAgICogQGRlZmF1bHQgMTAwMDBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUgaW50ZXJuYWwgd2FpdCBib3RoIHB1YmxpYyB3YWl0cyBzaGFyZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzLlxuICovXG5pbnRlcmZhY2UgV2FpdEZvckF2YWlsYWJpbGl0eVBhcmFtczxUUGx1Z2luIGV4dGVuZHMgUGx1Z2luPiBleHRlbmRzIFdhaXRGb3JQbHVnaW5QYXJhbXM8VFBsdWdpbj4ge1xuICAvKipcbiAgICogQ2FsbGVkIG9uY2Ugd2hlbiB0aGUgd2FpdCBzZXR0bGVzLCBlaXRoZXIgd2F5LCBhZnRlciBldmVyeSBsaXN0ZW5lciBoYXMgYmVlbiByZW1vdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgb25TZXR0bGVkPzogKCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQ2FsbGVkIG9uIGV2ZXJ5IHJlLWV2YWx1YXRpb24gd2hpbGUgdGhlIHBsdWdpbiBpcyBzdGlsbCB1bmF2YWlsYWJsZSwgaW5jbHVkaW5nIHRoZSBmaXJzdC5cbiAgICpcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eSAtIFRoZSBhdmFpbGFiaWxpdHkganVzdCByZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgb25VbmF2YWlsYWJsZT86IChhdmFpbGFiaWxpdHk6IFBsdWdpbkF2YWlsYWJpbGl0eSkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIHRpbWVvdXQsIG9yIGBudWxsYCBmb3Igbm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkVGltZW91dEluTWlsbGlzZWNvbmRzOiBudWxsIHwgbnVtYmVyO1xufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgcGx1Z2luIGRpZCBub3QgYmVjb21lIGF2YWlsYWJsZSBiZWZvcmUgYSB3YWl0IGdhdmUgdXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5JbnN0YW5jZVVuYXZhaWxhYmxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBXaHkgdGhlIHBsdWdpbiB3YXMgdW5hdmFpbGFibGUgd2hlbiB0aGUgd2FpdCBnYXZlIHVwLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJpbGl0eTogUGx1Z2luQXZhaWxhYmlsaXR5O1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcGx1Z2luLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFBsdWdpbkluc3RhbmNlVW5hdmFpbGFibGVFcnJvcn0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBsdWdpbkluc3RhbmNlVW5hdmFpbGFibGVFcnJvckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoYFBsdWdpbiBcIiR7cGFyYW1zLnBsdWdpbklkfVwiIGlzIG5vdCBhdmFpbGFibGU6ICR7cGFyYW1zLmF2YWlsYWJpbGl0eX0uYCk7XG4gICAgdGhpcy5uYW1lID0gJ1BsdWdpbkluc3RhbmNlVW5hdmFpbGFibGVFcnJvcic7XG4gICAgdGhpcy5hdmFpbGFiaWxpdHkgPSBwYXJhbXMuYXZhaWxhYmlsaXR5O1xuICAgIHRoaXMucGx1Z2luSWQgPSBwYXJhbXMucGx1Z2luSWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFub3RoZXIgcGx1Z2luJ3MgaW5zdGFuY2Ugd2hlbiBpdCBpcyB7QGxpbmsgUGx1Z2luQXZhaWxhYmlsaXR5LkF2YWlsYWJsZX0sIGFuZCBgbnVsbGAgb3RoZXJ3aXNlLlxuICpcbiAqIFVubGlrZSBgYXBwLnBsdWdpbnMuZ2V0UGx1Z2luYCwgaXQgbmV2ZXIgcmV0dXJucyBhbiBpbnN0YW5jZSB3aG9zZSBgb25sb2FkYCBpcyBzdGlsbCBydW5uaW5nLlxuICpcbiAqIEB0eXBlUGFyYW0gVFBsdWdpbiAtIFRoZSBwbHVnaW4gdHlwZSB0aGUgY2FsbGVyIGV4cGVjdHM7IGNoZWNrZWQgb25seSB0aHJvdWdoIGBpc1BsdWdpbmAuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBHZXRQbHVnaW5BdmFpbGFiaWxpdHlQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIGluc3RhbmNlLCBvciBgbnVsbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2FkZWRQbHVnaW48VFBsdWdpbiBleHRlbmRzIFBsdWdpbiA9IFBsdWdpbj4ocGFyYW1zOiBHZXRMb2FkZWRQbHVnaW5QYXJhbXM8Tm9JbmZlcjxUUGx1Z2luPj4pOiBudWxsIHwgVFBsdWdpbiB7XG4gIHJldHVybiBnZXRQbHVnaW5BdmFpbGFiaWxpdHkocGFyYW1zKSA9PT0gUGx1Z2luQXZhaWxhYmlsaXR5LkF2YWlsYWJsZSA/IChwYXJhbXMuYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKHBhcmFtcy5wbHVnaW5JZCkgYXMgVFBsdWdpbikgOiBudWxsO1xufVxuXG4vKipcbiAqIFJlYWRzIHdoZXRoZXIgYW5vdGhlciBwbHVnaW4ncyBpbnN0YW5jZSBjYW4gYmUgdXNlZCByaWdodCBub3csIGFuZCBpZiBub3QsIHdoeS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgR2V0UGx1Z2luQXZhaWxhYmlsaXR5UGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgUGx1Z2luQXZhaWxhYmlsaXR5fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBsdWdpbkF2YWlsYWJpbGl0eTxUUGx1Z2luIGV4dGVuZHMgUGx1Z2luID0gUGx1Z2luPihwYXJhbXM6IEdldFBsdWdpbkF2YWlsYWJpbGl0eVBhcmFtczxOb0luZmVyPFRQbHVnaW4+Pik6IFBsdWdpbkF2YWlsYWJpbGl0eSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgaXNQbHVnaW4sXG4gICAgbWluUGx1Z2luVmVyc2lvbixcbiAgICBwbHVnaW5JZFxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW4gPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4ocGx1Z2luSWQpO1xuXG4gIGlmIChwbHVnaW4gPT09IG51bGwpIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24oYXBwLnBsdWdpbnMubWFuaWZlc3RzLCBwbHVnaW5JZCkpIHtcbiAgICAgIHJldHVybiBQbHVnaW5BdmFpbGFiaWxpdHkuTm90SW5zdGFsbGVkO1xuICAgIH1cblxuICAgIHJldHVybiBhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpID8gUGx1Z2luQXZhaWxhYmlsaXR5Lk5vdExvYWRlZCA6IFBsdWdpbkF2YWlsYWJpbGl0eS5Ob3RFbmFibGVkO1xuICB9XG5cbiAgaWYgKGFwcC5wbHVnaW5zLmxvYWRpbmdQbHVnaW5JZCA9PT0gcGx1Z2luSWQpIHtcbiAgICByZXR1cm4gUGx1Z2luQXZhaWxhYmlsaXR5LkxvYWRpbmc7XG4gIH1cblxuICBpZiAobWluUGx1Z2luVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tcGFyaXNvbiA9IGNvbXBhcmVQbHVnaW5WZXJzaW9uV2l0aE1pbmltdW0ocGx1Z2luLm1hbmlmZXN0LnZlcnNpb24sIG1pblBsdWdpblZlcnNpb24pO1xuICAgIGlmIChjb21wYXJpc29uID09PSBQbHVnaW5WZXJzaW9uQ29tcGFyaXNvbi5CZWxvd01pbmltdW0pIHtcbiAgICAgIHJldHVybiBQbHVnaW5BdmFpbGFiaWxpdHkuT3V0ZGF0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmlzb24gPT09IFBsdWdpblZlcnNpb25Db21wYXJpc29uLkludmFsaWQpIHtcbiAgICAgIHJldHVybiBQbHVnaW5BdmFpbGFiaWxpdHkuSW52YWxpZFZlcnNpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzUGx1Z2luICYmICFpc1BsdWdpbihwbHVnaW4pID8gUGx1Z2luQXZhaWxhYmlsaXR5LlNoYXBlTWlzbWF0Y2ggOiBQbHVnaW5BdmFpbGFiaWxpdHkuQXZhaWxhYmxlO1xufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhbm90aGVyIHBsdWdpbiB0byBiZWNvbWUge0BsaW5rIFBsdWdpbkF2YWlsYWJpbGl0eS5BdmFpbGFibGV9LCBhc2tpbmcgdGhlIHVzZXIgdG8gcmVwYWlyIGl0XG4gKiB3aGlsZSBpdCBpcyBub3QuXG4gKlxuICogUmVzb2x2ZXMgYXQgb25jZSB3aGVuIGl0IGFscmVhZHkgaXMuIE90aGVyd2lzZSwgb25jZSB0aGUgd29ya3NwYWNlIGxheW91dCBpcyByZWFkeSDigJQgYmVmb3JlIHRoYXQsIGFcbiAqIHBsdWdpbiBPYnNpZGlhbiBoYXMgbm90IGxvYWRlZCB5ZXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIG1pc3Npbmcgb25lIOKAlCBhIG5vdGljZSBzYXlzIHdoYXQgaXMgd3JvbmdcbiAqIGFuZCBvZmZlcnMgdGhlIG1hdGNoaW5nIHJlcGFpcjogaW5zdGFsbCwgZW5hYmxlLCBvciB1cGRhdGUsIHBsdXMgYSB3YXkgdG8gdGhlIGNvbW11bml0eSBwbHVnaW5zIGxpc3QuXG4gKiBUaGUgbm90aWNlIGZvbGxvd3MgdGhlIHN0YXRlIGFzIGl0IGNoYW5nZXMgYW5kIGdvZXMgYXdheSB3aGVuIHRoZSB3YWl0IHNldHRsZXMuIEEgcmVwYWlyIHRoYXQgZmFpbHMgaXNcbiAqIHJlcG9ydGVkIGFuZCBsZWF2ZXMgdGhlIHdhaXQgcnVubmluZywgc28gdGhlIHVzZXIgY2FuIHRyeSBhZ2FpbiBvciBmaXggaXQgYnkgaGFuZC5cbiAqXG4gKiBUaGUgcHJvbWlzZSBzZXR0bGVzIE9OQ0UuIEl0IGRvZXMgbm90IHdhdGNoIHRoZSBwbHVnaW4gYWZ0ZXJ3YXJkczogYSBjb25zdW1lciB0aGF0IG11c3Qgc3RvcCB3aGVuIHRoZVxuICogcGx1Z2luIGdvZXMgYXdheSBkZWNsYXJlcyBhIGRlcGVuZGVuY3kgdGhyb3VnaCBgUGx1Z2luQmFzZS5nZXRQbHVnaW5EZXBlbmRlbmNpZXMoKWAgaW5zdGVhZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzOyBjaGVja2VkIG9ubHkgdGhyb3VnaCBgaXNQbHVnaW5gLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgUmVxdWlyZVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgd2l0aCB0aGUgaW5zdGFuY2UuXG4gKiBAdGhyb3dzIFRoZSBhYm9ydCByZWFzb24sIG9yIGFuIGVycm9yIG5hbWluZyB0aGUgdW5sb2FkZWQgY29tcG9uZW50LCB3aGVuIHRoZSB3YWl0IGlzIGVuZGVkIGVhcmx5LlxuICogQHRocm93cyB7QGxpbmsgUGx1Z2luSW5zdGFuY2VVbmF2YWlsYWJsZUVycm9yfSBXaGVuIHtAbGluayBSZXF1aXJlUGx1Z2luUGFyYW1zLnRpbWVvdXRJbk1pbGxpc2Vjb25kc30gZWxhcHNlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVQbHVnaW48VFBsdWdpbiBleHRlbmRzIFBsdWdpbiA9IFBsdWdpbj4ocGFyYW1zOiBSZXF1aXJlUGx1Z2luUGFyYW1zPE5vSW5mZXI8VFBsdWdpbj4+KTogUHJvbWlzZTxUUGx1Z2luPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGxldCBzaG93bkF2YWlsYWJpbGl0eTogbnVsbCB8IFBsdWdpbkF2YWlsYWJpbGl0eSA9IG51bGw7XG4gIC8vIGBMb2FkaW5nYCBpcyBuZXZlciBzaG93biwgc28gaXQgc3RhbmRzIGluIGZvciBcIm5vdCByZWFkIHlldFwiLlxuICBsZXQgbGF0ZXN0QXZhaWxhYmlsaXR5ID0gUGx1Z2luQXZhaWxhYmlsaXR5LkxvYWRpbmc7XG4gIGxldCBoaWRlTm90aWNlOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgbGV0IGlzU2V0dGxlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHNob3coYXZhaWxhYmlsaXR5OiBQbHVnaW5BdmFpbGFiaWxpdHkpOiB2b2lkIHtcbiAgICBpZiAoaXNTZXR0bGVkIHx8ICFhcHAud29ya3NwYWNlLmxheW91dFJlYWR5IHx8IGF2YWlsYWJpbGl0eSA9PT0gc2hvd25BdmFpbGFiaWxpdHkgfHwgYXZhaWxhYmlsaXR5ID09PSBQbHVnaW5BdmFpbGFiaWxpdHkuTG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGhpZGVOb3RpY2U/LigpO1xuICAgIHNob3duQXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5O1xuICAgIGNvbnN0IG5vdGljZSA9IHBhcmFtcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZShjcmVhdGVSZXF1aXJlbWVudEZyYWdtZW50KHBhcmFtcywgYXZhaWxhYmlsaXR5KSwge1xuICAgICAgbW9kZTogUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZSxcbiAgICAgIHNob3VsZEhpZGVPbkNsaWNrOiBmYWxzZVxuICAgIH0pO1xuICAgIGhpZGVOb3RpY2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICBub3RpY2UuaGlkZSgpO1xuICAgIH07XG4gIH1cblxuICBpZiAoIWFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkpIHtcbiAgICBhcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoKCkgPT4ge1xuICAgICAgc2hvdyhsYXRlc3RBdmFpbGFiaWxpdHkpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHdhaXRGb3JBdmFpbGFiaWxpdHkoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBvblNldHRsZWQ6ICgpID0+IHtcbiAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICBoaWRlTm90aWNlPy4oKTtcbiAgICB9LFxuICAgIG9uVW5hdmFpbGFibGU6IChhdmFpbGFiaWxpdHkpID0+IHtcbiAgICAgIGxhdGVzdEF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eTtcbiAgICAgIHNob3coYXZhaWxhYmlsaXR5KTtcbiAgICB9LFxuICAgIHJlc29sdmVkVGltZW91dEluTWlsbGlzZWNvbmRzOiBwYXJhbXMudGltZW91dEluTWlsbGlzZWNvbmRzID8/IG51bGxcbiAgfSk7XG59XG5cbi8qKlxuICogV2FpdHMgZm9yIGFub3RoZXIgcGx1Z2luIHRvIGJlY29tZSB7QGxpbmsgUGx1Z2luQXZhaWxhYmlsaXR5LkF2YWlsYWJsZX0uXG4gKlxuICogUmVzb2x2ZXMgYXQgb25jZSB3aGVuIGl0IGFscmVhZHkgaXMsIHdoaWNoIGNvdmVycyBhIGNvbnN1bWVyIHJlbG9hZGVkIGFmdGVyIGl0cyBkZXBlbmRlbmN5LiBPdGhlcndpc2UgaXRcbiAqIHJlLXJlYWRzIHRoZSBzdGF0ZSBvbiBldmVyeSBgYXBwLnBsdWdpbnNgIGBjaGFuZ2VkYCBhbmQgZXZlcnkgYG9ic2lkaWFuLWxpYjpwbHVnaW4tbG9hZGVkYCBicm9hZGNhc3QsIHNvIGFcbiAqIHBsdWdpbiBlbmFibGVkLCB1cGRhdGVkIG9yIHJlbG9hZGVkIGxhdGVyIGlzIHBpY2tlZCB1cCB3aXRoIG5vIHBvbGxpbmcuIEl0IHN1YnNjcmliZXMgYmVmb3JlIGl0cyBmaXJzdFxuICogcmVhZCwgc28gYSBjaGFuZ2UgbGFuZGluZyBpbiBiZXR3ZWVuIGNhbm5vdCBiZSBtaXNzZWQuIEV2ZXJ5IGxpc3RlbmVyIGFuZCB0aW1lciBpcyByZW1vdmVkIHdoZW4gaXQgc2V0dGxlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgcGx1Z2luIHR5cGUgdGhlIGNhbGxlciBleHBlY3RzOyBjaGVja2VkIG9ubHkgdGhyb3VnaCBgaXNQbHVnaW5gLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgV2FpdEZvclBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgd2l0aCB0aGUgaW5zdGFuY2UuXG4gKiBAdGhyb3dzIFRoZSBhYm9ydCByZWFzb24sIG9yIGFuIGVycm9yIG5hbWluZyB0aGUgdW5sb2FkZWQgY29tcG9uZW50LCB3aGVuIHRoZSB3YWl0IGlzIGVuZGVkIGVhcmx5LlxuICogQHRocm93cyB7QGxpbmsgUGx1Z2luSW5zdGFuY2VVbmF2YWlsYWJsZUVycm9yfSBXaGVuIHRoZSB0aW1lb3V0IGVsYXBzZXMsIGNhcnJ5aW5nIHRoZSBhdmFpbGFiaWxpdHkgYXQgdGhhdCBtb21lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUGx1Z2luPFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gPSBQbHVnaW4+KHBhcmFtczogV2FpdEZvclBsdWdpblBhcmFtczxOb0luZmVyPFRQbHVnaW4+Pik6IFByb21pc2U8VFBsdWdpbj4ge1xuICByZXR1cm4gYXdhaXQgd2FpdEZvckF2YWlsYWJpbGl0eSh7XG4gICAgLi4ucGFyYW1zLFxuICAgIHJlc29sdmVkVGltZW91dEluTWlsbGlzZWNvbmRzOiBwYXJhbXMudGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfV0FJVF9GT1JfUExVR0lOX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXF1aXJlbWVudEZyYWdtZW50PFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4+KHBhcmFtczogUmVxdWlyZVBsdWdpblBhcmFtczxUUGx1Z2luPiwgYXZhaWxhYmlsaXR5OiBQbHVnaW5BdmFpbGFiaWxpdHkpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBtaW5QbHVnaW5WZXJzaW9uID0gJycsXG4gICAgcGx1Z2luSWQsXG4gICAgcGx1Z2luTmFtZSxcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQsXG4gICAgcmVxdWVzdGluZ1BsdWdpbk5hbWVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgaW50ZXJwb2xhdGlvbiA9IHtcbiAgICBtaW5QbHVnaW5WZXJzaW9uLFxuICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHJlcXVlc3RpbmdQbHVnaW5OYW1lKSxcbiAgICByZXF1aXJlZFBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHBsdWdpbk5hbWUpXG4gIH07XG5cbiAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50KChmcmFnbWVudEVsKSA9PiB7XG4gICAgZnJhZ21lbnRFbC5hcHBlbmQoY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiB7XG4gICAgICBzd2l0Y2ggKGF2YWlsYWJpbGl0eSkge1xuICAgICAgICBjYXNlIFBsdWdpbkF2YWlsYWJpbGl0eS5JbnZhbGlkVmVyc2lvbjoge1xuICAgICAgICAgIHJldHVybiAkLm9ic2lkaWFuTGliLnBsdWdpblJlcXVpcmVtZW50LmludmFsaWRWZXJzaW9uTm90aWNlO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUGx1Z2luQXZhaWxhYmlsaXR5Lk5vdEVuYWJsZWQ6IHtcbiAgICAgICAgICByZXR1cm4gJC5vYnNpZGlhbkxpYi5wbHVnaW5SZXF1aXJlbWVudC5ub3RFbmFibGVkTm90aWNlO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUGx1Z2luQXZhaWxhYmlsaXR5Lk5vdEluc3RhbGxlZDoge1xuICAgICAgICAgIHJldHVybiAkLm9ic2lkaWFuTGliLnBsdWdpblJlcXVpcmVtZW50Lm5vdEluc3RhbGxlZE5vdGljZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFBsdWdpbkF2YWlsYWJpbGl0eS5Ob3RMb2FkZWQ6IHtcbiAgICAgICAgICByZXR1cm4gJC5vYnNpZGlhbkxpYi5wbHVnaW5SZXF1aXJlbWVudC5ub3RMb2FkZWROb3RpY2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBQbHVnaW5BdmFpbGFiaWxpdHkuT3V0ZGF0ZWQ6IHtcbiAgICAgICAgICByZXR1cm4gJC5vYnNpZGlhbkxpYi5wbHVnaW5SZXF1aXJlbWVudC5vdXRkYXRlZE5vdGljZTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmV0dXJuICQub2JzaWRpYW5MaWIucGx1Z2luUmVxdWlyZW1lbnQuc2hhcGVNaXNtYXRjaE5vdGljZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGludGVycG9sYXRpb24pKSk7XG5cbiAgICBjb25zdCBidXR0b25zRWwgPSBmcmFnbWVudEVsLmNyZWF0ZURpdih7XG4gICAgICBjbHM6IFtDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuUGx1Z2luU3VnZ2VzdGlvbk5vdGljZUJ1dHRvbnNdXG4gICAgfSk7XG5cbiAgICBzd2l0Y2ggKGF2YWlsYWJpbGl0eSkge1xuICAgICAgY2FzZSBQbHVnaW5BdmFpbGFiaWxpdHkuTm90RW5hYmxlZDpcbiAgICAgIGNhc2UgUGx1Z2luQXZhaWxhYmlsaXR5Lk5vdEluc3RhbGxlZDoge1xuICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJ1dHRvbnNFbClcbiAgICAgICAgICAuc2V0QnV0dG9uVGV4dCh0KCgkKSA9PlxuICAgICAgICAgICAgYXZhaWxhYmlsaXR5ID09PSBQbHVnaW5BdmFpbGFiaWxpdHkuTm90RW5hYmxlZFxuICAgICAgICAgICAgICA/ICQub2JzaWRpYW5MaWIucGx1Z2luU3VnZ2VzdGlvbi5lbmFibGVcbiAgICAgICAgICAgICAgOiAkLm9ic2lkaWFuTGliLnBsdWdpblN1Z2dlc3Rpb24uaW5zdGFsbFxuICAgICAgICAgICkpXG4gICAgICAgICAgLnNldEN0YSgpXG4gICAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJ1blJlcGFpcihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IGluc3RhbGxBbmRFbmFibGVQbHVnaW4oe1xuICAgICAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgICAgICBwbHVnaW5JZCxcbiAgICAgICAgICAgICAgICBwbHVnaW5OYW1lLFxuICAgICAgICAgICAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBsdWdpbkF2YWlsYWJpbGl0eS5Ob3RMb2FkZWQ6IHtcbiAgICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChidXR0b25zRWwpXG4gICAgICAgICAgLnNldEJ1dHRvblRleHQodCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wbHVnaW5SZXF1aXJlbWVudC5lbmFibGUsIHsgcmVxdWlyZWRQbHVnaW5OYW1lOiBwbHVnaW5OYW1lIH0pKVxuICAgICAgICAgIC5zZXRDdGEoKVxuICAgICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBydW5SZXBhaXIoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBsb2FkRW5hYmxlZFBsdWdpbihwYXJhbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChidXR0b25zRWwpXG4gICAgICAgICAgLnNldEJ1dHRvblRleHQodCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wbHVnaW5EZXBlbmRlbmN5LnVwZGF0ZSwgeyBkZXBlbmRlbmN5UGx1Z2luTmFtZTogcGx1Z2luTmFtZSB9KSlcbiAgICAgICAgICAuc2V0Q3RhKClcbiAgICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcnVuUmVwYWlyKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlUGx1Z2luKHtcbiAgICAgICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICAgICAgcGx1Z2luSWQsXG4gICAgICAgICAgICAgICAgcGx1Z2luTmFtZSxcbiAgICAgICAgICAgICAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgcmVxdWVzdGluZ1BsdWdpbk5hbWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5ldyBCdXR0b25Db21wb25lbnQoYnV0dG9uc0VsKVxuICAgICAgLnNldEJ1dHRvblRleHQodCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5wbHVnaW5SZXF1aXJlbWVudC5vcGVuQ29tbXVuaXR5UGx1Z2lucykpXG4gICAgICAub25DbGljaygoKSA9PiB7XG4gICAgICAgIG9wZW5TZXR0aW5nVGFiKHtcbiAgICAgICAgICBhcHAsXG4gICAgICAgICAgdGFiSWQ6IENPTU1VTklUWV9QTFVHSU5TX1NFVFRJTkdfVEFCX0lEXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIExvYWRzIGEgcGx1Z2luIHRoYXQgaXMgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBidXQgbm90IHJ1bm5pbmcsIHRoZSBvbmUgY2FzZVxuICogYGluc3RhbGxBbmRFbmFibGVQbHVnaW5gIHRyZWF0cyBhcyBhbHJlYWR5IGRvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBUUGx1Z2luIC0gVGhlIHBsdWdpbiB0eXBlIHRoZSBjYWxsZXIgZXhwZWN0cy5cbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcmVxdWlyZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBsb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRFbmFibGVkUGx1Z2luPFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4+KHBhcmFtczogUmVxdWlyZVBsdWdpblBhcmFtczxUUGx1Z2luPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIHBsdWdpbklkLFxuICAgIHBsdWdpbk5hbWUsXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50XG4gIH0gPSBwYXJhbXM7XG5cbiAgdHJ5IHtcbiAgICBpZiAoIWF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgUGx1Z2luRW5hYmxlUmVmdXNlZEVycm9yKHBsdWdpbklkKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UoY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2NrcyhcbiAgICAgIHQoKCQpID0+ICQub2JzaWRpYW5MaWIucGx1Z2luUmVxdWlyZW1lbnQuZW5hYmxlRmFpbGVkLCB7IHJlcXVpcmVkUGx1Z2luTmFtZTogYXNDb2RlQmxvY2socGx1Z2luTmFtZSkgfSlcbiAgICApKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgYSByZXBhaXIgdGhlIHVzZXIgY2xpY2tlZC4gSXRzIGZhaWx1cmUgaGFzIGFscmVhZHkgYmVlbiBzaG93biBhcyBhIG5vdGljZSwgYW5kIHRoZSB3YWl0IGl0IGJlbG9uZ3MgdG9cbiAqIGtlZXBzIHJ1bm5pbmcgc28gdGhlIHVzZXIgY2FuIHRyeSBhZ2Fpbiwgc28gaXQgaXMgbG9nZ2VkIHJhdGhlciB0aGFuIHJldGhyb3duIGludG8gdGhlIGNsaWNrIGhhbmRsZXIuXG4gKlxuICogQHBhcmFtIHJlcGFpciAtIFRoZSByZXBhaXIuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHJlcGFpciBoYXMgcnVuLlxuICovXG5hc3luYyBmdW5jdGlvbiBydW5SZXBhaXIocmVwYWlyOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVwYWlyKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckF2YWlsYWJpbGl0eTxUUGx1Z2luIGV4dGVuZHMgUGx1Z2luPihwYXJhbXM6IFdhaXRGb3JBdmFpbGFiaWxpdHlQYXJhbXM8VFBsdWdpbj4pOiBQcm9taXNlPFRQbHVnaW4+IHtcbiAgY29uc3Qge1xuICAgIGFib3J0U2lnbmFsLFxuICAgIGFwcCxcbiAgICBjb21wb25lbnQsXG4gICAgb25TZXR0bGVkLFxuICAgIG9uVW5hdmFpbGFibGUsXG4gICAgcGx1Z2luSWQsXG4gICAgcmVzb2x2ZWRUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgfSA9IHBhcmFtcztcblxuICBhYm9ydFNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8VFBsdWdpbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBpc1NldHRsZWQgPSBmYWxzZTtcbiAgICBsZXQgdGltZW91dElkOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcbiAgICBsZXQgcmVtb3ZlV2FpdENvbXBvbmVudDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgZXZlbnRSZWZzOiBbRXZlbnRzLCBFdmVudFJlZl1bXSA9IFtdO1xuXG4gICAgZnVuY3Rpb24gY2xlYW5VcCgpOiB2b2lkIHtcbiAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICByZW1vdmVXYWl0Q29tcG9uZW50Py4oKTtcbiAgICAgIHJlbW92ZVdhaXRDb21wb25lbnQgPSBudWxsO1xuICAgICAgZm9yIChjb25zdCBbc291cmNlLCBldmVudFJlZl0gb2YgZXZlbnRSZWZzKSB7XG4gICAgICAgIHNvdXJjZS5vZmZyZWYoZXZlbnRSZWYpO1xuICAgICAgfVxuICAgICAgZXZlbnRSZWZzLmxlbmd0aCA9IDA7XG4gICAgICBhYm9ydFNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBoYW5kbGVBYm9ydCk7XG4gICAgICBpZiAodGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgdGltZW91dElkID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIG9uU2V0dGxlZD8uKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmFpbChlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICAgIGlmIChpc1NldHRsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjbGVhblVwKCk7XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZUFib3J0KCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHJlYXNvbjogdW5rbm93biA9IGNhc3RUbzxBYm9ydFNpZ25hbD4oJGV2ZW50LnRhcmdldCkucmVhc29uO1xuICAgICAgZmFpbChyZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbiA6IG5ldyBFcnJvcihTdHJpbmcocmVhc29uKSwgeyBjYXVzZTogcmVhc29uIH0pKTtcbiAgICB9XG5cbiAgICAvLyBObyBzZXR0bGVkIGd1YXJkOiBzZXR0bGluZyByZW1vdmVzIGJvdGggbGlzdGVuZXJzLCBhbmQgbm90aGluZyBlbHNlIGNhbGxzIHRoaXMuXG4gICAgZnVuY3Rpb24gY2hlY2soKTogdm9pZCB7XG4gICAgICBjb25zdCBhdmFpbGFiaWxpdHkgPSBnZXRQbHVnaW5BdmFpbGFiaWxpdHkocGFyYW1zKTtcbiAgICAgIGlmIChhdmFpbGFiaWxpdHkgPT09IFBsdWdpbkF2YWlsYWJpbGl0eS5BdmFpbGFibGUpIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKHBsdWdpbklkKSBhcyBUUGx1Z2luO1xuICAgICAgICBjbGVhblVwKCk7XG4gICAgICAgIHJlc29sdmUocGx1Z2luKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBvblVuYXZhaWxhYmxlPy4oYXZhaWxhYmlsaXR5KTtcbiAgICB9XG5cbiAgICAvLyBTdWJzY3JpYmUgQkVGT1JFIHRoZSBmaXJzdCByZWFkLCBzbyBhIGNoYW5nZSBsYW5kaW5nIGJldHdlZW4gdGhlIHJlYWQgYW5kIHRoZSBzdWJzY3JpcHRpb24gY2Fubm90IGJlXG4gICAgLy8gbWlzc2VkLlxuICAgIGV2ZW50UmVmcy5wdXNoKFxuICAgICAgW2FwcC5wbHVnaW5zLCBhcHAucGx1Z2lucy5vbihQTFVHSU5TX0NIQU5HRURfRVZFTlRfTkFNRSwgY2hlY2spXSxcbiAgICAgIFthcHAud29ya3NwYWNlLCBhcHAud29ya3NwYWNlLm9uKFBMVUdJTl9MT0FERURfRVZFTlRfTkFNRSwgY2hlY2spXVxuICAgICk7XG4gICAgYWJvcnRTaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgaGFuZGxlQWJvcnQpO1xuXG4gICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgLy8gQSBjaGlsZCByYXRoZXIgdGhhbiBgY29tcG9uZW50LnJlZ2lzdGVyYCwgYmVjYXVzZSBhIGNvbXBvbmVudCBjYW5ub3QgZm9yZ2V0IGEgcmVnaXN0ZXJlZCBjYWxsYmFjazpcbiAgICAgIC8vIHJlbW92aW5nIHRoZSBjaGlsZCBvbiBzZXR0bGUgaXMgd2hhdCBrZWVwcyBhIGxvbmctbGl2ZWQgY29uc3VtZXIgZnJvbSBjb2xsZWN0aW5nIG9uZSBwZXIgd2FpdC5cbiAgICAgIGNvbnN0IHdhaXRDb21wb25lbnQgPSBuZXcgQ29tcG9uZW50KCk7XG4gICAgICB3YWl0Q29tcG9uZW50LnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgICAgZmFpbChuZXcgRXJyb3IoYFRoZSB3YWl0IGZvciBwbHVnaW4gXCIke3BsdWdpbklkfVwiIGVuZGVkIGJlY2F1c2UgaXRzIGNvbXBvbmVudCB1bmxvYWRlZC5gKSk7XG4gICAgICB9KTtcbiAgICAgIGNvbXBvbmVudC5hZGRDaGlsZCh3YWl0Q29tcG9uZW50KTtcbiAgICAgIHJlbW92ZVdhaXRDb21wb25lbnQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbXBvbmVudC5yZW1vdmVDaGlsZCh3YWl0Q29tcG9uZW50KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVkVGltZW91dEluTWlsbGlzZWNvbmRzICE9PSBudWxsKSB7XG4gICAgICB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZhaWwoXG4gICAgICAgICAgbmV3IFBsdWdpbkluc3RhbmNlVW5hdmFpbGFibGVFcnJvcih7XG4gICAgICAgICAgICBhdmFpbGFiaWxpdHk6IGdldFBsdWdpbkF2YWlsYWJpbGl0eShwYXJhbXMpLFxuICAgICAgICAgICAgcGx1Z2luSWRcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSwgcmVzb2x2ZWRUaW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICAgIH1cblxuICAgIGNoZWNrKCk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdUNBLG1CQUFtQztBQUNuQywwQkFBdUI7QUFDdkIsc0JBR087QUFJUCwrQkFBeUM7QUFDekMscUNBQWlDO0FBQ2pDLHVCQUF5QjtBQUN6QiwwQkFHTztBQUNQLGtCQUFrQjtBQUNsQiw0QkFBK0I7QUFDL0Isa0NBS087QUFDUCxxQ0FBeUM7QUFLekMsTUFBTSxrREFBa0Q7QUFRakQsTUFBTSw2QkFBNkI7QUFLMUMsTUFBTSxtQ0FBbUM7QUFLbEMsSUFBSyxxQkFBTCxrQkFBS0Esd0JBQUw7QUFJTCxFQUFBQSxvQkFBQSxlQUFZO0FBT1osRUFBQUEsb0JBQUEsb0JBQWlCO0FBS2pCLEVBQUFBLG9CQUFBLGFBQVU7QUFLVixFQUFBQSxvQkFBQSxnQkFBYTtBQUtiLEVBQUFBLG9C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QzFDLGVBQU8sT0FBTyxRQUFRO0FBQUEsTUFDeEI7QUFDQSxnQkFBVSxTQUFTO0FBQ25CLG1CQUFhLG9CQUFvQixTQUFTLFdBQVc7QUFDckQsVUFBSSxjQUFjLE1BQU07QUFDdEIsZUFBTyxhQUFhLFNBQVM7QUFDN0Isb0JBQVk7QUFBQSxNQUNkO0FBQ0Esa0JBQVk7QUFBQSxJQUNkO0FBRUEsYUFBUyxLQUFLLE9BQW9CO0FBQ2hDLFVBQUksV0FBVztBQUNiO0FBQUEsTUFDRjtBQUVBLGNBQVE7QUFDUixhQUFPLEtBQUs7QUFBQSxJQUNkO0FBRUEsYUFBUyxZQUFZLFFBQXFCO0FBQ3hDLFlBQU0sYUFBa0IsNEJBQW9CLE9BQU8sTUFBTSxFQUFFO0FBQzNELFdBQUssa0JBQWtCLFFBQVEsU0FBUyxJQUFJLE1BQU0sT0FBTyxNQUFNLEdBQUcsRUFBRSxPQUFPLE9BQU8sQ0FBQyxDQUFDO0FBQUEsSUFDdEY7QUFHQSxhQUFTLFFBQWM7QUFDckIsWUFBTSxlQUFlLHNCQUFzQixNQUFNO0FBQ2pELFVBQUksaUJBQWlCLDZCQUE4QjtBQUNqRCxjQUFNLFNBQVMsSUFBSSxRQUFRLFVBQVUsUUFBUTtBQUM3QyxnQkFBUTtBQUNSLGdCQUFRLE1BQU07QUFDZDtBQUFBLE1BQ0Y7QUFFQSxzQkFBZ0IsWUFBWTtBQUFBLElBQzlCO0FBSUEsY0FBVTtBQUFBLE1BQ1IsQ0FBQyxJQUFJLFNBQVMsSUFBSSxRQUFRLEdBQUcsNEJBQTRCLEtBQUssQ0FBQztBQUFBLE1BQy9ELENBQUMsSUFBSSxXQUFXLElBQUksVUFBVSxHQUFHLHlEQUEwQixLQUFLLENBQUM7QUFBQSxJQUNuRTtBQUNBLGlCQUFhLGlCQUFpQixTQUFTLFdBQVc7QUFFbEQsUUFBSSxXQUFXO0FBR2IsWUFBTSxnQkFBZ0IsSUFBSSwwQkFBVTtBQUNwQyxvQkFBYyxTQUFTLE1BQU07QUFDM0IsYUFBSyxJQUFJLE1BQU0sd0JBQXdCLFFBQVEseUNBQXlDLENBQUM7QUFBQSxNQUMzRixDQUFDO0FBQ0QsZ0JBQVUsU0FBUyxhQUFhO0FBQ2hDLDRCQUFzQixNQUFZO0FBQ2hDLGtCQUFVLFlBQVksYUFBYTtBQUFBLE1BQ3JDO0FBQUEsSUFDRjtBQUVBLFFBQUksa0NBQWtDLE1BQU07QUFDMUMsa0JBQVksT0FBTyxXQUFXLE1BQU07QUFDbEM7QUFBQSxVQUNFLElBQUksK0JBQStCO0FBQUEsWUFDakMsY0FBYyxzQkFBc0IsTUFBTTtBQUFBLFlBQzFDO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0YsR0FBRyw2QkFBNkI7QUFBQSxJQUNsQztBQUVBLFVBQU07QUFBQSxFQUNSLENBQUM7QUFDSDsiLCJuYW1lcyI6WyJQbHVnaW5BdmFpbGFiaWxpdHkiXX0=
|
|
@@ -34,6 +34,13 @@
|
|
|
34
34
|
import type { App, Plugin } from 'obsidian' with { 'resolution-mode': 'import' };
|
|
35
35
|
import { Component } from 'obsidian';
|
|
36
36
|
import type { PluginNoticeComponent } from '../components/plugin-notice-component.cjs';
|
|
37
|
+
/**
|
|
38
|
+
* The event `app.plugins` triggers after every enable, disable, install, uninstall and manifest reload.
|
|
39
|
+
*
|
|
40
|
+
* Read from Obsidian `1.15.1`: `didChange` triggers it debounced by one macrotask, so several changes in one
|
|
41
|
+
* task arrive as one event, after `enablePlugin` / `disablePlugin` returned.
|
|
42
|
+
*/
|
|
43
|
+
export declare const PLUGINS_CHANGED_EVENT_NAME = "changed";
|
|
37
44
|
/**
|
|
38
45
|
* Whether another plugin's instance can be used right now, and if not, why.
|
|
39
46
|
*/
|
|
@@ -104,4 +104,4 @@ function triggerPluginLifecycleEvent(params) {
|
|
|
104
104
|
PLUGIN_UNLOADED_EVENT_NAME,
|
|
105
105
|
triggerPluginLifecycleEvent
|
|
106
106
|
});
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBsaWZlY3ljbGUgYnJvYWRjYXN0IGV2ZXJ5IHtAbGluayBQbHVnaW5CYXNlfSBtYWtlczogYG9ic2lkaWFuLWxpYjpwbHVnaW4tbG9hZGVkYCB3aGVuIGl0IGhhc1xuICogZmluaXNoZWQgbG9hZGluZyBhbmQgYG9ic2lkaWFuLWxpYjpwbHVnaW4tdW5sb2FkZWRgIHdoZW4gaXQgZ29lcyBhd2F5LlxuICpcbiAqIE9ic2lkaWFuIGRvZXMgc2F5IHRoYXQgU09NRSBwbHVnaW4gY2hhbmdlZDogcmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjFgLCBgYXBwLnBsdWdpbnNgIHRyaWdnZXJzXG4gKiBgY2hhbmdlZGAsIGRlYm91bmNlZCBieSBvbmUgbWFjcm90YXNrLCBhZnRlciBldmVyeSBlbmFibGUsIGRpc2FibGUsIGluc3RhbGwsIHVuaW5zdGFsbCBhbmQgbWFuaWZlc3RcbiAqIHJlbG9hZCwgYnV0IGl0IGNhcnJpZXMgbm8gcGF5bG9hZDogaXQgZG9lcyBub3Qgc2F5IHdoaWNoIHBsdWdpbiBjaGFuZ2VkLCBub3IgdGhhdCBpdHMgQVBJcyBhcmUgcHVibGlzaGVkLlxuICogVGhpcyBicm9hZGNhc3QgbmFtZXMgdGhlIHBsdWdpbiBhbmQgY29tZXMgYWZ0ZXIgaXRzIEFQSXMsIHNvIGl0IGlzIHRoZSBzaWduYWwgZm9yIFwidGhhdCBwbHVnaW4gaXMgcmVhZHlcbiAqIHRvIGNhbGxcIiwgYW5kIGBjaGFuZ2VkYCB0aGUgc2lnbmFsIGZvciBcInJlLXJlYWQgdGhlIG1hbmlmZXN0c1wiLiBUaGUgYnJvYWRjYXN0IGdvZXMgdGhyb3VnaFxuICogYGFwcC53b3Jrc3BhY2VgLCB3aGljaCBpcyBvbmUgb2JqZWN0IGV2ZXJ5IHBsdWdpbiBpbiB0aGUgdmF1bHQgY2FuIHJlYWNoLiBEZWxpYmVyYXRlbHkgTk9UIHRoZSBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuTGliYCBiYWcgdGhlIHJlc3Qgb2YgdGhlIGxpYnJhcnkgc2hhcmVzXG4gKiBpdHMgc3RhdGUgdGhyb3VnaDogYSBsaXN0ZW5lciB0aGVyZSBuZWVkcyBpdHMgb3duIGNvcHkgb2YgdGhpcyBsaWJyYXJ5LCBhbmQgdGhlc2UgZXZlbnRzIGFyZSBtZWFudCB0byBiZVxuICogY29uc3VtYWJsZSBieSBhbnkgcGx1Z2luIGF0IGFsbC5cbiAqXG4gKiBUaGUgbmFtZXMgYXJlIHBhc3QgdGVuc2UgYmVjYXVzZSBhIGJyb2FkY2FzdCBzdGF0ZXMgc29tZXRoaW5nIHRoYXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuIGBsb2FkZWRgIGluXG4gKiBwYXJ0aWN1bGFyIGNhcnJpZXMgYSBndWFyYW50ZWU6IGl0IGlzIHRyaWdnZXJlZCBvbmx5IGFmdGVyIGV2ZXJ5IEFQSSB0aGUgcGx1Z2luIGRlY2xhcmVzIGhhcyBiZWVuXG4gKiBwdWJsaXNoZWQsIHNvIGEgbGlzdGVuZXIgbWF5IGNhbGwgdGhlbSBpbW1lZGlhdGVseS5cbiAqXG4gKiBCb3RoIHRoZSBldmVudCBuYW1lcyBhbmQge0BsaW5rIFBsdWdpbkxpZmVjeWNsZUV2ZW50UGF5bG9hZH0gYXJlIGEgQ1JPU1MtVkVSU0lPTiBDT05UUkFDVC4gQ29waWVzIG9mXG4gKiB0aGlzIGxpYnJhcnkgYXQgZGlmZmVyZW50IHZlcnNpb25zIHB1Ymxpc2ggYW5kIGNvbnN1bWUgdGhlbSBzaWRlIGJ5IHNpZGUgaW4gb25lIHZhdWx0LCBzbyBuZWl0aGVyIG1heVxuICogY2hhbmdlIGluY29tcGF0aWJseTogcGxhaW4gZGF0YSBvbmx5LCBhbmQgbmV3IHBheWxvYWQgZmllbGRzIG9ubHkgZXZlciBhZGRlZC5cbiAqXG4gKiBUaGF0IGNvbnRyYWN0IGlzIGFsc28gUFVCTElTSEVELCBhcyBvZiB0aGUgYFBsdWdpbiBBUEkgcHJvdG9jb2xgIGd1aWRlOiB0aGlyZC1wYXJ0eSBwbHVnaW5zIHRoYXQgd2lsbFxuICogbmV2ZXIgaW5zdGFsbCB0aGlzIGxpYnJhcnkgYXJlIHRvbGQgdG8gaGFyZGNvZGUgdGhlc2Ugc3RyaW5ncyBhbmQgdGhpcyBwYXlsb2FkIHNoYXBlLiBQdWJsaXNoaW5nIGl0XG4gKiBhZGRlZCBubyBuZXcgY29uc3RyYWludCDigJQgdGhlIGNyb3NzLWNvcHkgb25lIGFib3ZlIGFscmVhZHkgZm9yYmFkZSBldmVyeSBjaGFuZ2UgYW4gb3V0c2lkZXIgY291bGRcbiAqIG5vdGljZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiBlaXRoZXIgbGlmZWN5Y2xlIGV2ZW50LlxuICovXG5leHBvcnQgdHlwZSBQbHVnaW5MaWZlY3ljbGVFdmVudE5hbWUgPSB0eXBlb2YgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FIHwgdHlwZW9mIFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FO1xuXG4vKipcbiAqIFRoZSBwYXlsb2FkIG9mIHtAbGluayBQTFVHSU5fTE9BREVEX0VWRU5UX05BTUV9IGFuZCB7QGxpbmsgUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUV9LlxuICpcbiAqIFBsYWluIGRhdGEgYnkgZGVzaWduIOKAlCBubyBjbGFzcyBpbnN0YW5jZXMgYW5kIG5vIHR5cGVzIG93bmVkIGJ5IHRoaXMgbGlicmFyeSDigJQgYmVjYXVzZSBpdCBjcm9zc2VzXG4gKiBiZXR3ZWVuIGluZGVwZW5kZW50bHkgYnVuZGxlZCBjb3BpZXMgb2YgaXQsIGFuZCBiZXR3ZWVuIHBsdWdpbnMgdGhhdCBkbyBub3QgdXNlIGl0IGF0IGFsbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQge1xuICAvKipcbiAgICogVGhlIGNvbnRyYWN0IHZlcnNpb25zIHRoZSBwbHVnaW4gcHVibGlzaGVkLCBlbXB0eSB3aGVuIGl0IHB1Ymxpc2hlcyBubyBBUEkuXG4gICAqXG4gICAqIEFuIGFycmF5IHJhdGhlciB0aGFuIGEgc2luZ2xlIHZlcnNpb24gYmVjYXVzZSBhIHByb3ZpZGVyIG1heSBwdWJsaXNoIHNldmVyYWwgY29udHJhY3QgdmVyc2lvbnMgc2lkZSBieVxuICAgKiBzaWRlLCBzbyBjb25zdW1lcnMgcGlubmVkIHRvIGFuIG9sZGVyIHJhbmdlIGtlZXAgd29ya2luZyBhY3Jvc3MgYSBicmVha2luZyBjaGFuZ2UuXG4gICAqXG4gICAqIFRoZSBBUEkgb2JqZWN0cyB0aGVtc2VsdmVzIGFyZSBkZWxpYmVyYXRlbHkgTk9UIGhlcmUuIEEgaGFuZGxlIGRlbGl2ZXJlZCBieSBhIG9uZS1zaG90IGV2ZW50IGlzIGFcbiAgICogcHJvYmU6IGl0IGFuc3dlcnMgXCJub3dcIiBhbmQgbmV2ZXIgc2F5cyB3aGVuIFwibm93XCIgY2hhbmdlZCwgYW5kIG9uZSB0aGF0IG91dGxpdmVzIHRoZSBwcm92aWRlciBpc1xuICAgKiBleGFjdGx5IHRoZSBzdGFsZSBoYW5kbGUgdGhlIHBsdWdpbi1hcGkgcmVnaXN0cnkncyByZXZvY2FibGUgaGFuZGxlcyBleGlzdCB0byBwcmV2ZW50LiBSZWFjaCB0aGUgQVBJXG4gICAqIHRocm91Z2ggYHdhdGNoUGx1Z2luQXBpYCBpbnN0ZWFkLCB3aG9zZSByZWZlcmVuY2Ugc3RheXMgY29ycmVjdCBhY3Jvc3MgdW5sb2FkIGFuZCByZS1lbmFibGUuXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBpZHMgb2YgdGhlIHBsdWdpbnMgdGhpcyBvbmUgZGVjbGFyZXMgYXMgbWFuZGF0b3J5IGRlcGVuZGVuY2llcywgZW1wdHkgd2hlbiBpdCBkZWNsYXJlcyBub25lLlxuICAgKlxuICAgKiBQcmVzZW50IHNvIHRoZSByZWxhdGlvbnNoaXAgY2FuIGJlIHJlYWQgZnJvbSB0aGUgT1RIRVIgZW5kOiBhIHByb3ZpZGVyIGhhcyBubyB3YXkgdG8gYXNrIHdobyBkZXBlbmRzXG4gICAqIG9uIGl0IOKAlCB0aGUgcmVnaXN0cnkgb25seSBhbnN3ZXJzIGNvbnN1bWVyLXRvLXByb3ZpZGVyIOKAlCBhbmQgXCJ3aGljaCBpbnN0YWxsZWQgcGx1Z2lucyBuZWVkIHRoaXMgb25lXCJcbiAgICogaXMgd2hhdCBsZXRzIGEgcHJvdmlkZXIncyBzZXR0aW5ncyB0YWIgdGVsbCB0aGUgdXNlciB3aHkgaXQgaXMgaW4gdGhlaXIgdmF1bHQgYXQgYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeVBsdWdpbklkczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgbWFuaWZlc3QuaWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGBtYW5pZmVzdC5uYW1lYCwgZm9yIGRpc3BsYXkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgbWFuaWZlc3QudmVyc2lvbmAuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2Ugd2hvc2Ugd29ya3NwYWNlIGNhcnJpZXMgdGhlIGJyb2FkY2FzdC5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdG8gdHJpZ2dlci5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZTtcblxuICAvKipcbiAgICogVGhlIHBheWxvYWQgZGVzY3JpYmluZyB0aGUgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXlsb2FkO1xufVxuXG4vKipcbiAqIFRyaWdnZXJlZCBvbmNlIGEgcGx1Z2luIGhhcyBmaW5pc2hlZCBsb2FkaW5nIEFORCBwdWJsaXNoZWQgZXZlcnkgQVBJIGl0IGRlY2xhcmVzLCBzbyBhIGxpc3RlbmVyIG1heSBjYWxsXG4gKiB0aG9zZSBBUElzIGltbWVkaWF0ZWx5LlxuICpcbiAqIE5hbWVzcGFjZWQgYnkgdGhlIHBhY2thZ2UgbmFtZSByYXRoZXIgdGhhbiBieSBhbiBhYmJyZXZpYXRpb24gb2YgaXQ6IHRoZSBldmVudCBpcyBnbG9iYWwgdG8gdGhlIHZhdWx0XG4gKiBhbmQgYWltZWQgYXQgcGx1Z2luIGF1dGhvcnMgd2hvIGhhdmUgbmV2ZXIgaGVhcmQgb2YgdGhpcyBsaWJyYXJ5LCBzbyB0aGUgcHJlZml4IGhhcyB0byBpZGVudGlmeSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fTE9BREVEX0VWRU5UX05BTUUgPSAnb2JzaWRpYW4tbGliOnBsdWdpbi1sb2FkZWQnO1xuXG4vKipcbiAqIFRyaWdnZXJlZCBhcyBhIHBsdWdpbiB1bmxvYWRzIOKAlCB3aGV0aGVyIHRoZSB1c2VyIGRpc2FibGVkIGl0LCB1bmluc3RhbGxlZCBpdCwgb3IgT2JzaWRpYW4gaXMgc2h1dHRpbmdcbiAqIGRvd24uIEl0cyBBUElzIGFyZSByZXZva2VkIGJ5IHRoZSB0aW1lIGEgbGlzdGVuZXIgcnVucy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FID0gJ29ic2lkaWFuLWxpYjpwbHVnaW4tdW5sb2FkZWQnO1xuXG5kZWNsYXJlIG1vZHVsZSAnb2JzaWRpYW4nIHtcbiAgaW50ZXJmYWNlIFdvcmtzcGFjZSB7XG4gICAgLyoqXG4gICAgICogU3Vic2NyaWJlcyB0byBhIHBsdWdpbiBmaW5pc2hpbmcgaXRzIGxvYWQsIG9yIHRvIG9uZSB1bmxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFNob3VsZCBiZSB7QGxpbmsgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FfSBvciB7QGxpbmsgUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUV9LlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayByZWNlaXZpbmcgdGhlIHBsdWdpbidzIHBheWxvYWQuXG4gICAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIFRoZSBldmVudCByZWZlcmVuY2UuXG4gICAgICovXG4gICAgLypcbiAgICAgKiBBbiBhdWdtZW50YXRpb24gb2YgYW4gRVhJU1RJTkcgb3ZlcmxvYWQgc2V0IGhhcyB0byBzdGF5IGEgbWV0aG9kIHNpZ25hdHVyZS4gQSBwcm9wZXJ0eSBtZW1iZXIgZG9lcyBub3QgbWVyZ2UgaW50b1xuICAgICAqIGBXb3Jrc3BhY2Uub25gJ3Mgb3ZlcmxvYWRzLCBhbmQgVHlwZVNjcmlwdCBzYXlzIHNvIG5vd2hlcmUgbmVhciBoZXJlOiB0aGUgZGVjbGFyYXRpb24gaXRzZWxmIGNvbXBpbGVzLCBhbmQgZXZlcnlcbiAgICAgKiBjYWxsIHNpdGUgbG9zZXMgdGhlIHNpZ25hdHVyZSBpbnN0ZWFkIOKAlCBgb24oUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLCAuLi4pYCBmYWlscyB3aXRoIFwidGhlIGxhc3Qgb3ZlcmxvYWQgZ2F2ZSB0aGVcbiAgICAgKiBmb2xsb3dpbmcgZXJyb3JcIi4gVGhlIHJ1bGUgcmVwb3J0cyB0aGlzIG9uZSB3aXRob3V0IGEgZml4IGZvciB0aGUgc2FtZSByZWFzb24sIHNvIHRoZSBkaXNhYmxlIGJlbG93IGlzIHRoZSBhbnN3ZXJcbiAgICAgKiByYXRoZXIgdGhhbiBhIGRlZmVycmFsLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWV0aG9kLXNpZ25hdHVyZS1zdHlsZSAtLSBBIHByb3BlcnR5IG1lbWJlciBkb2VzIG5vdCBtZXJnZSBpbnRvIGFuIGV4aXN0aW5nIG92ZXJsb2FkIHNldC4gU2VlIGFib3ZlLlxuICAgIG9uKFxuICAgICAgbmFtZTogUGx1Z2luTGlmZWN5Y2xlRXZlbnROYW1lLFxuICAgICAgY2FsbGJhY2s6IChwYXlsb2FkOiBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQpID0+IHVua25vd24sXG4gICAgICBjb250ZXh0PzogdW5rbm93blxuICAgICk6IEV2ZW50UmVmO1xuICB9XG59XG5cbi8qKlxuICogVHJpZ2dlcnMgb25lIG9mIHRoZSB0d28gbGlmZWN5Y2xlIGV2ZW50cyBvbiB0aGUgYXBwJ3Mgd29ya3NwYWNlLlxuICpcbiAqIEEgdGhpbiB0eXBlZCB3cmFwcGVyIG92ZXIgYFdvcmtzcGFjZS50cmlnZ2VyYCwgd2hpY2ggYWNjZXB0cyBhbnkgZXZlbnQgbmFtZSBhbmQgYW55IGFyZ3VtZW50cywgc28gdGhhdCB0aGUgb25lXG4gKiBwbGFjZSBhIHBheWxvYWQgaXMgY29uc3RydWN0ZWQgaXMgY2hlY2tlZCBhZ2FpbnN0IHtAbGluayBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWR9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudFBhcmFtc30uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmlnZ2VyUGx1Z2luTGlmZWN5Y2xlRXZlbnQocGFyYW1zOiBUcmlnZ2VyUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBhcHAsIG5hbWUsIHBheWxvYWQgfSA9IHBhcmFtcztcbiAgYXBwLndvcmtzcGFjZS50cmlnZ2VyKG5hbWUsIHBheWxvYWQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTRHTyxNQUFNLDJCQUEyQjtBQU1qQyxNQUFNLDZCQUE2QjtBQW9DbkMsU0FBUyw0QkFBNEIsUUFBaUQ7QUFDM0YsUUFBTSxFQUFFLEtBQUssTUFBTSxRQUFRLElBQUk7QUFDL0IsTUFBSSxVQUFVLFFBQVEsTUFBTSxPQUFPO0FBQ3JDOyIsIm5hbWVzIjpbXX0=
|
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
* The lifecycle broadcast every {@link PluginBase} makes: `obsidian-lib:plugin-loaded` when it has
|
|
6
6
|
* finished loading and `obsidian-lib:plugin-unloaded` when it goes away.
|
|
7
7
|
*
|
|
8
|
-
* Obsidian
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* Obsidian does say that SOME plugin changed: read from Obsidian `1.15.1`, `app.plugins` triggers
|
|
9
|
+
* `changed`, debounced by one macrotask, after every enable, disable, install, uninstall and manifest
|
|
10
|
+
* reload, but it carries no payload: it does not say which plugin changed, nor that its APIs are published.
|
|
11
|
+
* This broadcast names the plugin and comes after its APIs, so it is the signal for "that plugin is ready
|
|
12
|
+
* to call", and `changed` the signal for "re-read the manifests". The broadcast goes through
|
|
13
|
+
* `app.workspace`, which is one object every plugin in the vault can reach. Deliberately NOT the `globalThis.__obsidianLib` bag the rest of the library shares
|
|
12
14
|
* its state through: a listener there needs its own copy of this library, and these events are meant to be
|
|
13
15
|
* consumable by any plugin at all.
|
|
14
16
|
*
|
|
@@ -118,21 +118,21 @@ __export(plugin_settings_tab_exports, {
|
|
|
118
118
|
SAVE_TO_FILE_CONTEXT: () => SAVE_TO_FILE_CONTEXT
|
|
119
119
|
});
|
|
120
120
|
module.exports = __toCommonJS(plugin_settings_tab_exports);
|
|
121
|
-
var import_async = require(
|
|
122
|
-
var import_async_events = require(
|
|
123
|
-
var import_function = require(
|
|
124
|
-
var import_object_utils = require(
|
|
125
|
-
var import_type_guards = require(
|
|
126
|
-
var import_obsidian = require(
|
|
127
|
-
var import_async_events_component = require(
|
|
128
|
-
var import_component_ex = require(
|
|
129
|
-
var import_css_class = require(
|
|
130
|
-
var import_setting_component_wrapper = require(
|
|
131
|
-
var import_text_based_component = require(
|
|
132
|
-
var import_validator_component = require(
|
|
133
|
-
var import_setting_ex = require(
|
|
134
|
-
var import_validation = require(
|
|
135
|
-
var import_plugin_context = require(
|
|
121
|
+
var import_async = require("@mnaoumov/typescript-lib/async");
|
|
122
|
+
var import_async_events = require("@mnaoumov/typescript-lib/async-events");
|
|
123
|
+
var import_function = require("@mnaoumov/typescript-lib/function");
|
|
124
|
+
var import_object_utils = require("@mnaoumov/typescript-lib/object-utils");
|
|
125
|
+
var import_type_guards = require("@mnaoumov/typescript-lib/type-guards");
|
|
126
|
+
var import_obsidian = require("obsidian");
|
|
127
|
+
var import_async_events_component = require("../components/async-events-component.cjs");
|
|
128
|
+
var import_component_ex = require("../components/component-ex.cjs");
|
|
129
|
+
var import_css_class = require("../css-class.cjs");
|
|
130
|
+
var import_setting_component_wrapper = require("../setting-components/setting-component-wrapper.cjs");
|
|
131
|
+
var import_text_based_component = require("../setting-components/text-based-component.cjs");
|
|
132
|
+
var import_validator_component = require("../setting-components/validator-component.cjs");
|
|
133
|
+
var import_setting_ex = require("../setting-ex.cjs");
|
|
134
|
+
var import_validation = require("../validation.cjs");
|
|
135
|
+
var import_plugin_context = require("./plugin-context.cjs");
|
|
136
136
|
const SAVE_TO_FILE_CONTEXT = "PluginSettingsTab";
|
|
137
137
|
class PluginSettingsTabEventsComponent extends import_component_ex.ComponentEx {
|
|
138
138
|
params;
|