@mnaoumov/obsidian-lib 1.0.0 → 2.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/README.md +9 -1
- package/dist/lib/cjs/__merged.cjs +54 -64
- package/dist/lib/cjs/__merged.d.cts +5 -3
- package/dist/lib/cjs/active-file-provider.cjs +40 -64
- package/dist/lib/cjs/app.cjs +40 -64
- package/dist/lib/cjs/async-with-notice.cjs +40 -64
- package/dist/lib/cjs/attachment-path.cjs +101 -72
- package/dist/lib/cjs/attachment-path.d.cts +21 -43
- package/dist/lib/cjs/attachment-unit-folder.cjs +40 -64
- package/dist/lib/cjs/attachment-unit-folder.d.cts +8 -9
- package/dist/lib/cjs/backlink-index.cjs +41 -65
- package/dist/lib/cjs/backlink.cjs +40 -64
- package/dist/lib/cjs/bases-view-registrar.cjs +40 -64
- package/dist/lib/cjs/callout.cjs +40 -64
- package/dist/lib/cjs/canvas.cjs +40 -64
- package/dist/lib/cjs/case-insensitive-file-index.cjs +40 -64
- package/dist/lib/cjs/code-block-markdown-information.cjs +40 -64
- package/dist/lib/cjs/code-block-reg-exp.cjs +40 -64
- package/dist/lib/cjs/codemirror/index.cjs +40 -64
- package/dist/lib/cjs/codemirror/state-field-spec.cjs +40 -64
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/command-handler-component.cjs +40 -64
- package/dist/lib/cjs/command-handlers/command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/file-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/global-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/index.cjs +40 -64
- package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-registrar.cjs +40 -64
- package/dist/lib/cjs/community-plugins.cjs +40 -64
- package/dist/lib/cjs/components/abort-signal-component.cjs +40 -64
- package/dist/lib/cjs/components/all-windows-event-component.cjs +40 -64
- package/dist/lib/cjs/components/async-error-handler-component.cjs +40 -64
- package/dist/lib/cjs/components/async-events-component.cjs +40 -64
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +40 -64
- package/dist/lib/cjs/components/component-ex.cjs +41 -65
- package/dist/lib/cjs/components/console-debug-component.cjs +40 -64
- package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +40 -64
- package/dist/lib/cjs/components/disposable-component.cjs +40 -64
- package/dist/lib/cjs/components/embed-extensions-component.cjs +40 -64
- package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +40 -64
- package/dist/lib/cjs/components/index.cjs +40 -64
- package/dist/lib/cjs/components/layout-ready-component.cjs +40 -64
- package/dist/lib/cjs/components/menu-event-registrar-component.cjs +40 -64
- package/dist/lib/cjs/components/monkey-around-component.cjs +40 -64
- package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +40 -64
- package/dist/lib/cjs/components/plugin-context-component.cjs +40 -64
- package/dist/lib/cjs/components/plugin-gate-component.cjs +41 -65
- package/dist/lib/cjs/components/plugin-notice-component.cjs +46 -65
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -0
- package/dist/lib/cjs/components/plugin-settings-component.cjs +41 -65
- package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +40 -64
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +40 -64
- package/dist/lib/cjs/components/pointer-position-component.cjs +40 -64
- package/dist/lib/cjs/components/registry-component.cjs +40 -64
- package/dist/lib/cjs/components/release-notes-component.cjs +42 -65
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +40 -64
- package/dist/lib/cjs/components/rmdir-guard-component.cjs +40 -64
- package/dist/lib/cjs/components/settings-migration-component.cjs +44 -68
- package/dist/lib/cjs/components/settings-migration-component.d.cts +6 -4
- package/dist/lib/cjs/components/syntax-highlighting-component.cjs +40 -64
- package/dist/lib/cjs/components/templates-language-component.cjs +40 -64
- package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +40 -64
- package/dist/lib/cjs/constructors/index.cjs +40 -64
- package/dist/lib/cjs/css-class.cjs +40 -64
- package/dist/lib/cjs/data-handler.cjs +40 -64
- package/dist/lib/cjs/dataview-link.cjs +40 -64
- package/dist/lib/cjs/dataview.cjs +40 -64
- package/dist/lib/cjs/debug.cjs +40 -64
- package/dist/lib/cjs/demo-vault-helper-settings.cjs +40 -64
- package/dist/lib/cjs/demo-vault-helper.cjs +42 -65
- package/dist/lib/cjs/demo-vault-naming.cjs +40 -64
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +48 -71
- package/dist/lib/cjs/desktop-trusted-input.cjs +40 -64
- package/dist/lib/cjs/editor-extension-registrar.cjs +40 -64
- package/dist/lib/cjs/editor-suggest-registrar.cjs +40 -64
- package/dist/lib/cjs/editor.cjs +40 -64
- package/dist/lib/cjs/events.cjs +40 -64
- package/dist/lib/cjs/extensions-registrar.cjs +40 -64
- package/dist/lib/cjs/file-change.cjs +40 -64
- package/dist/lib/cjs/file-explorer.cjs +40 -64
- package/dist/lib/cjs/file-manager.cjs +40 -64
- package/dist/lib/cjs/file-system.cjs +45 -64
- package/dist/lib/cjs/file-system.d.cts +7 -0
- package/dist/lib/cjs/folder-note.cjs +40 -64
- package/dist/lib/cjs/frontmatter-formatting.cjs +41 -65
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +40 -64
- package/dist/lib/cjs/frontmatter.cjs +40 -64
- package/dist/lib/cjs/generated-during-build.cjs +42 -66
- package/dist/lib/cjs/generated-during-build.d.cts +8 -2
- package/dist/lib/cjs/hover-link-source-registrar.cjs +40 -64
- package/dist/lib/cjs/html-element.cjs +40 -64
- package/dist/lib/cjs/i18n/custom-type-options.cjs +40 -64
- package/dist/lib/cjs/i18n/default-translations.cjs +40 -64
- package/dist/lib/cjs/i18n/i18n.cjs +40 -64
- package/dist/lib/cjs/i18n/index.cjs +40 -64
- package/dist/lib/cjs/i18n/locales/en.cjs +40 -64
- package/dist/lib/cjs/i18n/locales/index.cjs +40 -64
- package/dist/lib/cjs/i18n/locales/translations-map.cjs +40 -64
- package/dist/lib/cjs/index.cjs +40 -64
- package/dist/lib/cjs/is-in-obsidian.cjs +40 -64
- package/dist/lib/cjs/library-styles.cjs +40 -64
- package/dist/lib/cjs/library.cjs +40 -64
- package/dist/lib/cjs/link-name.cjs +40 -64
- package/dist/lib/cjs/link-update-progress.cjs +40 -64
- package/dist/lib/cjs/link.cjs +40 -64
- package/dist/lib/cjs/logger.cjs +40 -64
- package/dist/lib/cjs/loop.cjs +40 -64
- package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +40 -64
- package/dist/lib/cjs/markdown-code-block-processor.cjs +40 -64
- package/dist/lib/cjs/markdown-post-processor-registrar.cjs +40 -64
- package/dist/lib/cjs/markdown-view.cjs +40 -64
- package/dist/lib/cjs/markdown.cjs +40 -64
- package/dist/lib/cjs/menu-event-registrar.cjs +40 -64
- package/dist/lib/cjs/metadata-cache.cjs +64 -70
- package/dist/lib/cjs/metadata-cache.d.cts +8 -19
- package/dist/lib/cjs/mobile-trusted-input.cjs +40 -64
- package/dist/lib/cjs/modals/alert.cjs +40 -64
- package/dist/lib/cjs/modals/confirm.cjs +40 -64
- package/dist/lib/cjs/modals/index.cjs +40 -64
- package/dist/lib/cjs/modals/minimizable-modal.cjs +40 -64
- package/dist/lib/cjs/modals/modal-command-builder.cjs +40 -64
- package/dist/lib/cjs/modals/modal.cjs +40 -64
- package/dist/lib/cjs/modals/prompt.cjs +40 -64
- package/dist/lib/cjs/modals/select-item.cjs +40 -64
- package/dist/lib/cjs/modals/select-option.cjs +40 -64
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +40 -64
- package/dist/lib/cjs/note-priority.cjs +41 -65
- package/dist/lib/cjs/notebook-navigator.cjs +40 -64
- package/dist/lib/cjs/obsidian-dev-utils-state.cjs +40 -64
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +40 -64
- package/dist/lib/cjs/obsidian-settings.cjs +40 -64
- package/dist/lib/cjs/parse-link.cjs +40 -64
- package/dist/lib/cjs/path-settings.cjs +40 -64
- package/dist/lib/cjs/pdf.cjs +40 -64
- package/dist/lib/cjs/plugin/index.cjs +43 -64
- package/dist/lib/cjs/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/plugin/plugin-api-schema.cjs +171 -0
- package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +59 -0
- package/dist/lib/cjs/plugin/plugin-api.cjs +46 -64
- package/dist/lib/cjs/plugin/plugin-api.d.cts +83 -10
- package/dist/lib/cjs/plugin/plugin-context.cjs +40 -64
- package/dist/lib/cjs/plugin/plugin-event-source.cjs +40 -64
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +40 -64
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +40 -64
- package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +41 -65
- package/dist/lib/cjs/plugin/plugin.cjs +41 -65
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +69 -64
- package/dist/lib/cjs/plugin/settings-migration-api.d.cts +16 -3
- package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +40 -64
- package/dist/lib/cjs/popovers/field-popover.cjs +40 -64
- package/dist/lib/cjs/popovers/index.cjs +40 -64
- package/dist/lib/cjs/popovers/popover-anchor.cjs +40 -64
- package/dist/lib/cjs/popovers/popover.cjs +40 -64
- package/dist/lib/cjs/property-entry.cjs +40 -64
- package/dist/lib/cjs/queue.cjs +40 -64
- package/dist/lib/cjs/react/app-context.cjs +40 -64
- package/dist/lib/cjs/react/index.cjs +40 -64
- package/dist/lib/cjs/reference.cjs +40 -64
- package/dist/lib/cjs/resource-lock.cjs +40 -64
- package/dist/lib/cjs/resource-url.cjs +40 -64
- package/dist/lib/cjs/ribbon-icon-registrar.cjs +40 -64
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/date-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/date-time-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/email-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/file-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/index.cjs +40 -64
- package/dist/lib/cjs/setting-components/month-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +41 -65
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/number-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/password-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +40 -64
- package/dist/lib/cjs/setting-components/telephone-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/text-based-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/time-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/typed-text-component.cjs +41 -65
- package/dist/lib/cjs/setting-components/url-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/validator-component.cjs +41 -65
- package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +40 -64
- package/dist/lib/cjs/setting-components/week-component.cjs +40 -64
- package/dist/lib/cjs/setting-ex.cjs +40 -64
- package/dist/lib/cjs/setting-group-ex.cjs +40 -64
- package/dist/lib/cjs/status-bar-item-registrar.cjs +40 -64
- package/dist/lib/cjs/templater.cjs +40 -64
- package/dist/lib/cjs/transformers/duration-transformer.cjs +40 -64
- package/dist/lib/cjs/transformers/index.cjs +40 -64
- package/dist/lib/cjs/trusted-input.cjs +40 -64
- package/dist/lib/cjs/validation.cjs +40 -64
- package/dist/lib/cjs/vault-delete.cjs +40 -64
- package/dist/lib/cjs/vault-transaction.cjs +40 -64
- package/dist/lib/cjs/vault.cjs +41 -65
- package/dist/lib/cjs/view-registrar.cjs +40 -64
- package/dist/lib/cjs/workspace.cjs +40 -64
- package/dist/lib/esm/__merged.d.mts +5 -3
- package/dist/lib/esm/__merged.mjs +20 -14
- package/dist/lib/esm/active-file-provider.mjs +6 -14
- package/dist/lib/esm/app.mjs +6 -14
- package/dist/lib/esm/async-with-notice.mjs +6 -14
- package/dist/lib/esm/attachment-path.d.mts +21 -43
- package/dist/lib/esm/attachment-path.mjs +70 -22
- package/dist/lib/esm/attachment-unit-folder.d.mts +8 -9
- package/dist/lib/esm/attachment-unit-folder.mjs +6 -14
- package/dist/lib/esm/backlink-index.mjs +6 -14
- package/dist/lib/esm/backlink.mjs +6 -14
- package/dist/lib/esm/bases-view-registrar.mjs +6 -14
- package/dist/lib/esm/callout.mjs +6 -14
- package/dist/lib/esm/canvas.mjs +6 -14
- package/dist/lib/esm/case-insensitive-file-index.mjs +6 -14
- package/dist/lib/esm/code-block-markdown-information.mjs +5 -13
- package/dist/lib/esm/code-block-reg-exp.mjs +6 -14
- package/dist/lib/esm/codemirror/index.mjs +6 -14
- package/dist/lib/esm/codemirror/state-field-spec.mjs +5 -13
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/command-handler-component.mjs +6 -14
- package/dist/lib/esm/command-handlers/command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/editor-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/file-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/folder-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/global-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/index.mjs +6 -14
- package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +6 -14
- package/dist/lib/esm/command-registrar.mjs +6 -14
- package/dist/lib/esm/community-plugins.mjs +6 -14
- package/dist/lib/esm/components/abort-signal-component.mjs +6 -14
- package/dist/lib/esm/components/all-windows-event-component.mjs +6 -14
- package/dist/lib/esm/components/async-error-handler-component.mjs +6 -14
- package/dist/lib/esm/components/async-events-component.mjs +6 -14
- package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +6 -14
- package/dist/lib/esm/components/component-ex.mjs +6 -14
- package/dist/lib/esm/components/console-debug-component.mjs +6 -14
- package/dist/lib/esm/components/core-plugin-toggle-component.mjs +6 -14
- package/dist/lib/esm/components/disposable-component.mjs +6 -14
- package/dist/lib/esm/components/embed-extensions-component.mjs +6 -14
- package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +6 -14
- package/dist/lib/esm/components/index.mjs +6 -14
- package/dist/lib/esm/components/layout-ready-component.mjs +6 -14
- package/dist/lib/esm/components/menu-event-registrar-component.mjs +6 -14
- package/dist/lib/esm/components/monkey-around-component.mjs +6 -14
- package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +6 -14
- package/dist/lib/esm/components/plugin-context-component.mjs +6 -14
- package/dist/lib/esm/components/plugin-gate-component.mjs +6 -14
- package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -0
- package/dist/lib/esm/components/plugin-notice-component.mjs +12 -15
- package/dist/lib/esm/components/plugin-settings-component.mjs +6 -14
- package/dist/lib/esm/components/plugin-settings-tab-component.mjs +6 -14
- package/dist/lib/esm/components/plugin-suggestion-component.mjs +6 -14
- package/dist/lib/esm/components/pointer-position-component.mjs +6 -14
- package/dist/lib/esm/components/registry-component.mjs +6 -14
- package/dist/lib/esm/components/release-notes-component.mjs +11 -15
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +6 -14
- package/dist/lib/esm/components/rmdir-guard-component.mjs +6 -14
- package/dist/lib/esm/components/settings-migration-component.d.mts +6 -4
- package/dist/lib/esm/components/settings-migration-component.mjs +10 -18
- package/dist/lib/esm/components/syntax-highlighting-component.mjs +6 -14
- package/dist/lib/esm/components/templates-language-component.mjs +6 -14
- package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +6 -14
- package/dist/lib/esm/constructors/index.mjs +6 -14
- package/dist/lib/esm/css-class.mjs +6 -14
- package/dist/lib/esm/data-handler.mjs +6 -14
- package/dist/lib/esm/dataview-link.mjs +6 -14
- package/dist/lib/esm/dataview.mjs +6 -14
- package/dist/lib/esm/debug.mjs +6 -14
- package/dist/lib/esm/demo-vault-helper-settings.mjs +5 -13
- package/dist/lib/esm/demo-vault-helper.mjs +8 -15
- package/dist/lib/esm/demo-vault-naming.mjs +6 -14
- package/dist/lib/esm/desktop-demo-vault-opener.mjs +17 -21
- package/dist/lib/esm/desktop-trusted-input.mjs +6 -14
- package/dist/lib/esm/editor-extension-registrar.mjs +6 -14
- package/dist/lib/esm/editor-suggest-registrar.mjs +6 -14
- package/dist/lib/esm/editor.mjs +6 -14
- package/dist/lib/esm/events.mjs +6 -14
- package/dist/lib/esm/extensions-registrar.mjs +6 -14
- package/dist/lib/esm/file-change.mjs +6 -14
- package/dist/lib/esm/file-explorer.mjs +6 -14
- package/dist/lib/esm/file-manager.mjs +6 -14
- package/dist/lib/esm/file-system.d.mts +7 -0
- package/dist/lib/esm/file-system.mjs +10 -14
- package/dist/lib/esm/folder-note.mjs +6 -14
- package/dist/lib/esm/frontmatter-formatting.mjs +6 -14
- package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +6 -14
- package/dist/lib/esm/frontmatter.mjs +6 -14
- package/dist/lib/esm/generated-during-build.d.mts +8 -2
- package/dist/lib/esm/generated-during-build.mjs +8 -16
- package/dist/lib/esm/hover-link-source-registrar.mjs +6 -14
- package/dist/lib/esm/html-element.mjs +6 -14
- package/dist/lib/esm/i18n/custom-type-options.mjs +6 -14
- package/dist/lib/esm/i18n/default-translations.mjs +6 -14
- package/dist/lib/esm/i18n/i18n.mjs +6 -14
- package/dist/lib/esm/i18n/index.mjs +6 -14
- package/dist/lib/esm/i18n/locales/en.mjs +6 -14
- package/dist/lib/esm/i18n/locales/index.mjs +6 -14
- package/dist/lib/esm/i18n/locales/translations-map.mjs +6 -14
- package/dist/lib/esm/index.mjs +6 -14
- package/dist/lib/esm/is-in-obsidian.mjs +6 -14
- package/dist/lib/esm/library-styles.mjs +6 -14
- package/dist/lib/esm/library.mjs +6 -14
- package/dist/lib/esm/link-name.mjs +6 -14
- package/dist/lib/esm/link-update-progress.mjs +5 -13
- package/dist/lib/esm/link.mjs +6 -14
- package/dist/lib/esm/logger.mjs +6 -14
- package/dist/lib/esm/loop.mjs +6 -14
- package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +6 -14
- package/dist/lib/esm/markdown-code-block-processor.mjs +6 -14
- package/dist/lib/esm/markdown-post-processor-registrar.mjs +6 -14
- package/dist/lib/esm/markdown-view.mjs +6 -14
- package/dist/lib/esm/markdown.mjs +6 -14
- package/dist/lib/esm/menu-event-registrar.mjs +5 -13
- package/dist/lib/esm/metadata-cache.d.mts +8 -19
- package/dist/lib/esm/metadata-cache.mjs +35 -21
- package/dist/lib/esm/mobile-trusted-input.mjs +6 -14
- package/dist/lib/esm/modals/alert.mjs +6 -14
- package/dist/lib/esm/modals/confirm.mjs +6 -14
- package/dist/lib/esm/modals/index.mjs +6 -14
- package/dist/lib/esm/modals/minimizable-modal.mjs +6 -14
- package/dist/lib/esm/modals/modal-command-builder.mjs +6 -14
- package/dist/lib/esm/modals/modal.mjs +6 -14
- package/dist/lib/esm/modals/prompt.mjs +6 -14
- package/dist/lib/esm/modals/select-item.mjs +6 -14
- package/dist/lib/esm/modals/select-option.mjs +6 -14
- package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +6 -14
- package/dist/lib/esm/note-priority.mjs +6 -14
- package/dist/lib/esm/notebook-navigator.mjs +6 -14
- package/dist/lib/esm/obsidian-dev-utils-state.mjs +6 -14
- package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +6 -14
- package/dist/lib/esm/obsidian-settings.mjs +6 -14
- package/dist/lib/esm/parse-link.mjs +6 -14
- package/dist/lib/esm/path-settings.mjs +6 -14
- package/dist/lib/esm/pdf.mjs +6 -14
- package/dist/lib/esm/plugin/index.d.mts +1 -0
- package/dist/lib/esm/plugin/index.mjs +8 -14
- package/dist/lib/esm/plugin/plugin-api-schema.d.mts +59 -0
- package/dist/lib/esm/plugin/plugin-api-schema.mjs +73 -0
- package/dist/lib/esm/plugin/plugin-api.d.mts +83 -10
- package/dist/lib/esm/plugin/plugin-api.mjs +11 -14
- package/dist/lib/esm/plugin/plugin-context.mjs +6 -14
- package/dist/lib/esm/plugin/plugin-event-source.mjs +6 -14
- package/dist/lib/esm/plugin/plugin-install-state.mjs +6 -14
- package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +6 -14
- package/dist/lib/esm/plugin/plugin-settings-tab.mjs +6 -14
- package/dist/lib/esm/plugin/plugin.mjs +6 -14
- package/dist/lib/esm/plugin/settings-migration-api.d.mts +16 -3
- package/dist/lib/esm/plugin/settings-migration-api.mjs +30 -14
- package/dist/lib/esm/plugin-cli-handler-registrar.mjs +6 -14
- package/dist/lib/esm/popovers/field-popover.mjs +6 -14
- package/dist/lib/esm/popovers/index.mjs +6 -14
- package/dist/lib/esm/popovers/popover-anchor.mjs +6 -14
- package/dist/lib/esm/popovers/popover.mjs +6 -14
- package/dist/lib/esm/property-entry.mjs +6 -14
- package/dist/lib/esm/queue.mjs +6 -14
- package/dist/lib/esm/react/app-context.mjs +6 -14
- package/dist/lib/esm/react/index.mjs +6 -14
- package/dist/lib/esm/reference.mjs +6 -14
- package/dist/lib/esm/resource-lock.mjs +6 -14
- package/dist/lib/esm/resource-url.mjs +6 -14
- package/dist/lib/esm/ribbon-icon-registrar.mjs +6 -14
- package/dist/lib/esm/setting-components/checkbox-component.mjs +6 -14
- package/dist/lib/esm/setting-components/code-highlighter-component.mjs +6 -14
- package/dist/lib/esm/setting-components/date-component.mjs +6 -14
- package/dist/lib/esm/setting-components/date-time-component.mjs +6 -14
- package/dist/lib/esm/setting-components/email-component.mjs +6 -14
- package/dist/lib/esm/setting-components/file-component.mjs +6 -14
- package/dist/lib/esm/setting-components/index.mjs +6 -14
- package/dist/lib/esm/setting-components/month-component.mjs +6 -14
- package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +6 -14
- package/dist/lib/esm/setting-components/multiple-email-component.mjs +6 -14
- package/dist/lib/esm/setting-components/multiple-file-component.mjs +6 -14
- package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -14
- package/dist/lib/esm/setting-components/number-component.mjs +6 -14
- package/dist/lib/esm/setting-components/password-component.mjs +6 -14
- package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +6 -14
- package/dist/lib/esm/setting-components/telephone-component.mjs +6 -14
- package/dist/lib/esm/setting-components/text-based-component.mjs +6 -14
- package/dist/lib/esm/setting-components/time-component.mjs +6 -14
- package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +6 -14
- package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +6 -14
- package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +6 -14
- package/dist/lib/esm/setting-components/typed-range-text-component.mjs +6 -14
- package/dist/lib/esm/setting-components/typed-text-component.mjs +6 -14
- package/dist/lib/esm/setting-components/url-component.mjs +6 -14
- package/dist/lib/esm/setting-components/validator-component.mjs +6 -14
- package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +5 -13
- package/dist/lib/esm/setting-components/week-component.mjs +6 -14
- package/dist/lib/esm/setting-ex.mjs +6 -14
- package/dist/lib/esm/setting-group-ex.mjs +6 -14
- package/dist/lib/esm/status-bar-item-registrar.mjs +6 -14
- package/dist/lib/esm/templater.mjs +6 -14
- package/dist/lib/esm/transformers/duration-transformer.mjs +6 -14
- package/dist/lib/esm/transformers/index.mjs +6 -14
- package/dist/lib/esm/trusted-input.mjs +6 -14
- package/dist/lib/esm/validation.mjs +6 -14
- package/dist/lib/esm/vault-delete.mjs +6 -14
- package/dist/lib/esm/vault-transaction.mjs +6 -14
- package/dist/lib/esm/vault.mjs +6 -14
- package/dist/lib/esm/view-registrar.mjs +6 -14
- package/dist/lib/esm/workspace.mjs +6 -14
- package/dist/styles.css +4 -1
- package/package.json +69 -24
- package/plugin/plugin-api-schema/package.json +6 -0
|
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
5
5
|
|
|
6
6
|
(function () {
|
|
7
7
|
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for(
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for(
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
function ensureBrowserProcess() {
|
|
13
13
|
const browserProcess = {
|
|
14
14
|
browser: true,
|
|
15
15
|
cwd() {
|
|
16
|
-
return
|
|
16
|
+
return "/";
|
|
17
17
|
},
|
|
18
18
|
env: {},
|
|
19
|
-
platform:
|
|
19
|
+
platform: "android"
|
|
20
20
|
};
|
|
21
|
-
|
|
22
|
-
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
21
|
const existingProcess = globalThis.process;
|
|
24
|
-
|
|
25
22
|
if (!existingProcess) {
|
|
26
|
-
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
23
|
globalThis.process = browserProcess;
|
|
28
24
|
return;
|
|
29
25
|
}
|
|
30
|
-
|
|
31
26
|
if (existingProcess.versions?.node) {
|
|
32
27
|
return;
|
|
33
28
|
}
|
|
34
|
-
|
|
35
29
|
const existingProcessRecord = existingProcess;
|
|
36
|
-
|
|
37
30
|
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
31
|
existingProcessRecord[key] ??= value;
|
|
39
32
|
}
|
|
40
|
-
|
|
41
|
-
existingProcessRecord['browser'] = true;
|
|
33
|
+
existingProcessRecord["browser"] = true;
|
|
42
34
|
}
|
|
43
35
|
|
|
44
36
|
(function initEsm() {
|
|
@@ -469,4 +461,4 @@ export {
|
|
|
469
461
|
PluginConflictSeverity,
|
|
470
462
|
PluginGateComponent
|
|
471
463
|
};
|
|
472
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcGx1Z2luLWdhdGUtY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGdhdGUgb24gYSBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2U6IHdoYXQgbXVzdCBiZSBQUkVTRU5UIGZvciBpdCB0byBydW4sIGFuZCB3aGF0IG11c3QgTk9UIGJlLlxuICpcbiAqIEJvdGggaGFsdmVzIGFuc3dlciB0aGUgc2FtZSBxdWVzdGlvbiBcdTIwMTQgbWF5IHRoaXMgcGx1Z2luJ3MgYG9ubG9hZEltcGxgIHJ1biByaWdodCBub3c/IFx1MjAxNCBzbyB0aGV5IGFyZSBvbmVcbiAqIGNvbXBvbmVudCByYXRoZXIgdGhhbiB0d28uIEEgc2Vjb25kLCBpbmRlcGVuZGVudCBnYXRlIHdvdWxkIGRvdWJsZS1sb2FkIHRoZSBzdXJmYWNlIGFuZCBzdGFjayBhIHNlY29uZFxuICogXCJibG9ja2VkXCIgc2V0dGluZ3MgdGFiIG9udG8gdGhlIHNhbWUgcGx1Z2luLCBhbmQgbmVpdGhlciBjb3VsZCBzZWUgdGhlIG90aGVyJ3MgcmVhc29uIGZvciByZWZ1c2luZy5cbiAqXG4gKiAjIyBEZXBlbmRlbmNpZXM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IGNhbm5vdCB3b3JrIHdpdGhvdXRcbiAqXG4gKiBUaGlzIGlzIHRoZSBzdHJpY3Qgc2libGluZyBvZiBgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudGAsIGFuZCB0aGUgZGlmZmVyZW5jZSBpcyB0aGUgd2hvbGUgcG9pbnQuIEFcbiAqIFNVR0dFU1RJT04gaXMgYW4gb2ZmZXIgXHUyMDE0IHRoZSBob3N0IGtlZXBzIHdvcmtpbmcgd2l0aG91dCBpdCBhbmQgc2ltcGx5IGNhbm5vdCBkbyBvbmUgdGhpbmcuIEEgREVQRU5ERU5DWVxuICogaXMgYSByZXF1aXJlbWVudDogYG9ubG9hZEltcGxgIG5ldmVyIHJ1bnMsIG5vIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCwgbm8gaGFuZGxlciBpcyBpbnN0YWxsZWQsIG5vdGhpbmcgaXNcbiAqIHBhdGNoZWQuIFJlYWNoIGZvciBhIHN1Z2dlc3Rpb24gd2hlbiB0aGUgb3RoZXIgcGx1Z2luIGFkZHMgc29tZXRoaW5nOyByZWFjaCBmb3IgYSBkZXBlbmRlbmN5IHdoZW4gdGhlXG4gKiBob3N0J3MgYWR2ZXJ0aXNlZCBiZWhhdmlvciBpcyBub3QgdGhlcmUgd2l0aG91dCBpdC5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gZGVwZW5kZW5jeSBmaWVsZCBpbiBhIG1hbmlmZXN0LCB3aGljaCBpcyBleGFjdGx5IHRoZSBwcm9ibGVtIHRoaXMgY2xvc2VzLiBXaXRob3V0IG9uZSxcbiAqIGEgdXNlciBtZWV0aW5nIGFuIHVuZmFtaWxpYXIgcGx1Z2luIGluIHRoZWlyIGxpc3QgbW9udGhzIGxhdGVyIGhhcyBub3RoaW5nIHRlbGxpbmcgdGhlbSBpdCBpc1xuICogbG9hZC1iZWFyaW5nIFx1MjAxNCB0aGV5IHJlbW92ZSBpdCwgYW5kIHRoZSBicmVha2FnZSBzdXJmYWNlcyB3ZWVrcyBhZnRlciB0aGF0IGFzIGRhbWFnZSB0aGV5IGNhbm5vdCBjb25uZWN0XG4gKiB0byBhbnl0aGluZyB0aGV5IGRpZC4gU28gdGhlIHJlbGF0aW9uc2hpcCBpcyBtYWRlIHZpc2libGUgZnJvbSBib3RoIGVuZHMgYW5kIGVuZm9yY2VkIHdoaWxlIGl0IGhvbGRzOlxuICogdGhlIGRlcGVuZGVudCBleHBsYWlucyBpdHNlbGYgd2hlcmUgdGhlIHVzZXIgaXMgbG9va2luZywgcmVwYWlycyBpdHNlbGYgaW4gb25lIGNsaWNrLCBhbmQgcmVhY3RzIHRoZVxuICogSU5TVEFOVCB0aGUgZGVwZW5kZW5jeSBnb2VzIGF3YXkgcmF0aGVyIHRoYW4gZGVncmFkaW5nIHF1aWV0bHkuXG4gKlxuICogVGhyZWUgY2hvaWNlcyBhcmUgZGVsaWJlcmF0ZSBhbmQgd29ydGggc3RhdGluZywgYmVjYXVzZSBlYWNoIGhhcyBhbiBvYnZpb3VzLWxvb2tpbmcgYWx0ZXJuYXRpdmU6XG4gKlxuICogLSAqKkJsb2NrZWQgbWVhbnMgZW5hYmxlZC1idXQtaW5lcnQsIG5ldmVyIHNlbGYtZGlzYWJsZWQuKiogQ2FsbGluZyBgZGlzYWJsZVBsdWdpbkFuZFNhdmVgIG9uIGl0c2VsZlxuICogICB3b3VsZCBiZSB0aGUgbGl0ZXJhbCByZWFkaW5nIG9mIFwicmVmdXNlcyB0byBsb2FkXCIsIGFuZCBpdCByZXdyaXRlcyBhIGNvbmZpZyB0aGF0IGJlbG9uZ3MgdG8gdGhlIHVzZXIgXHUyMDE0XG4gKiAgIHdobyB3b3VsZCB0aGVuIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmUtZW5hYmxlIGl0IGFmdGVyIGZpeGluZyB0aGUgZGVwZW5kZW5jeS4gU3RheWluZyBlbmFibGVkIGFuZCBpbmVydFxuICogICBzYXlzIHRoZSBzYW1lIHRoaW5nIHRvIHRoZSB1c2VyLCBjaGFuZ2VzIG5vdGhpbmcgdGhleSBvd24sIGFuZCBjYW4gdW5kbyBpdHNlbGYuXG4gKiAtICoqQmxvY2tlZCBpcyBub3QgYW4gZXJyb3IuKiogVGhyb3dpbmcgZnJvbSBgb25sb2FkYCBtYXJrcyB0aGUgcGx1Z2luIGZhaWxlZCBpbiBPYnNpZGlhbiBhbmQgaGFuZHMgdGhlXG4gKiAgIHVzZXIgYSBzdGFjayB0cmFjZSBpbnN0ZWFkIG9mIGEgc2VudGVuY2UgYW5kIGEgYnV0dG9uLlxuICogLSAqKkEgZGVwZW5kZW5jeSBtdXN0IHB1Ymxpc2ggYW4gQVBJLioqIFRoYXQgaXMgd2hhdCBtYWtlcyBwcmVzZW5jZSwgYWJzZW5jZSwgdmVyc2lvbiBhbmQgZGVwYXJ0dXJlIGFsbFxuICogICBvYnNlcnZhYmxlIHRocm91Z2ggb25lIG1lY2hhbmlzbSBcdTIwMTQgYHdhdGNoUGx1Z2luQXBpYCdzIHJlZmVyZW5jZSBpcyBsaXZlLCBpcyByZXZva2VkIHdoZW4gdGhlIHByb3ZpZGVyXG4gKiAgIHVubG9hZHMsIGFuZCBhbHJlYWR5IGNsYXNzaWZpZXMgbm90LWluc3RhbGxlZCBhZ2FpbnN0IG5vdC1lbmFibGVkIGFnYWluc3QgdG9vLW9sZC4gQSBwcm92aWRlciB3aXRoXG4gKiAgIG5vdGhpbmcgdG8gZXhwb3NlIGNhbiBwdWJsaXNoIGFuIGVtcHR5IEFQSSBwdXJlbHkgc28gaXQgY2FuIGJlIGRlcGVuZGVkIHVwb247IHRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBiZVxuICogICBhIHNlY29uZCwgd2Vha2VyIGRldGVjdGlvbiBwYXRoIHRvIG1haW50YWluIGJlc2lkZSBpdC5cbiAqXG4gKiAjIyBDb25mbGljdHM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IHJlZnVzZXMgdG8gcnVuIGJlc2lkZVxuICpcbiAqIFRoZSBpbnZlcnNlIHJlbGF0aW9uc2hpcCwgYW5kIGl0IG5lZWRzIGl0cyBvd24gZGV0ZWN0aW9uIHBhdGggYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBvbmUgZG9lcyBub3QgZml0LlxuICogQSBjb25mbGljdGluZyBwbHVnaW4gaXMgdHlwaWNhbGx5IGFuIE9MRCB2ZXJzaW9uIG9mIHNvbWUgb3RoZXIgcGx1Z2luIHRoYXQgc3RpbGwgb3ducyBiZWhhdmlvciB0aGlzIG9uZVxuICogaGFzIHRha2VuIG92ZXIgXHUyMDE0IGl0IHB1Ymxpc2hlcyBubyBBUEkgYXQgYWxsLCBzbyB0aGVyZSBpcyBubyBgYXBpVmVyc2lvblJhbmdlYCB0byBjb21wYXJlIGFnYWluc3QuXG4gKlxuICogVGhlIGFyZ3VtZW50IGZvciByZWZ1c2luZyByYXRoZXIgdGhhbiBjb21wZXRpbmcgY29tZXMgZnJvbSB0aGUgY2FzZSB0aGlzIGdlbmVyYWxpemVzOiB0d28gcmVuYW1lL2RlbGV0ZVxuICogaGFuZGxlcnMgYWN0aW5nIG9uIG9uZSByZW5hbWUgY29ycnVwdCBsaW5rcyBhbmQgbW92ZSBhdHRhY2htZW50cyB0d2ljZSwgYW5kIHRoZXJlIGlzIG5vIHJlbGlhYmxlIHdheSB0b1xuICogd2luIHRoYXQgcmFjZSBcdTIwMTQgYSBoYW5kbGVyIGlzIGVsZWN0ZWQgYnkgcmVnaXN0cnkgb3JkZXIsIGJ1dCB0aGUgcGF0Y2hlcyB0aGF0IGRvIHRoZSB3b3JrIHNpdCBvdXRzaWRlXG4gKiB0aGF0IGVsZWN0aW9uLCBzbyB3aGljaGV2ZXIgcGx1Z2luIGxvYWRlZCBmaXJzdCBrZWVwcyBhIGhhbmQgb24gdGhlIHdoZWVsLiBFdmVyeSBzY2hlbWUgZm9yIHNlaXppbmdcbiAqIGNvbnRyb2wgZnJvbSBpbnNpZGUgaXMgbG9hZC1vcmRlciBkZXBlbmRlbnQuIFJlZnVzaW5nIGlzIGRldGVybWluaXN0aWMgd2hlcmUgY29tcGV0aW5nIGlzIG5vdCwgYW5kIGFcbiAqIHZhdWx0IHRoYXQgYnJpZWZseSBoYXMgbm8gaGFuZGxlciBpcyBhIGZhciBiZXR0ZXIgb3V0Y29tZSB0aGFuIG9uZSB3aXRoIHR3by5cbiAqXG4gKiBUd28gZGV0YWlscyBvZiB0aGF0IGRldGVjdGlvbiBjYXJyeSBvdmVyIHZlcmJhdGltLCBiZWNhdXNlIGJvdGggYXJlIGxvYWQtYmVhcmluZzpcbiAqXG4gKiAtICoqVmVyc2lvbnMgYXJlIHJlYWQsIG5ldmVyIHRoZSByZWdpc3RyeS4qKiBBIHBsdWdpbiB0aGF0IGhhcyBub3QgbG9hZGVkIHlldCBoYXMgcmVnaXN0ZXJlZCBub3RoaW5nLCBzb1xuICogICBhc2tpbmcgdGhlIHJlZ2lzdHJ5IGdpdmVzIGEgZGlmZmVyZW50IGFuc3dlciBkZXBlbmRpbmcgb24gd2hlbiBpdCBpcyBhc2tlZC4gYGFwcC5wbHVnaW5zLm1hbmlmZXN0c2AgaXNcbiAqICAgcG9wdWxhdGVkIGZvciBldmVyeSBpbnN0YWxsZWQgcGx1Z2luIGF0IHN0YXJ0dXAsIHdoYXRldmVyIHRoZSBsb2FkIG9yZGVyIHR1cm5zIG91dCB0byBiZS5cbiAqIC0gKipBbiB1bnBhcnNlYWJsZSB2ZXJzaW9uIGNvdW50cyBhcyBjb25mbGljdGluZy4qKiBGYWlsaW5nIGNsb3NlZCBpcyB0aGUgc2FmZSBkaXJlY3Rpb246IGEgZmFsc2UgYWxhcm1cbiAqICAgY29zdHMgYSBub3RpY2UsIGEgZmFsc2UgYWxsLWNsZWFyIGNvc3RzIGEgdmF1bHQuXG4gKlxuICogTm90IGV2ZXJ5IG92ZXJsYXAgaXMgdGhhdCBzZXZlcmUsIHdoaWNoIGlzIHdoeSBhIGNvbmZsaWN0IGRlY2xhcmVzIGEge0BsaW5rIFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHl9LlxuICogVHdvIHBsdWdpbnMgc2hpcHBpbmcgdGhlIHNhbWUgY29tbWFuZCBkdXBsaWNhdGUgYSBwYWxldHRlIGVudHJ5IGFuZCBkbyB0aGUgd29yayB0d2ljZSBcdTIwMTQgYW5ub3lpbmcsIG5vdFxuICogY29ycnVwdGluZyBcdTIwMTQgYW5kIHJlZnVzaW5nIHRvIGxvYWQgb3ZlciB0aGF0IHdvdWxkIGJlIGEgd29yc2Ugb3V0Y29tZSB0aGFuIHRoZSBvdmVybGFwLiBUaG9zZSBkZWNsYXJlXG4gKiB7QGxpbmsgUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJufSBhbmQgYm90aCBrZWVwIHJ1bm5pbmcuXG4gKlxuICogIyMgV2hhdCB0aGlzIGNhbiBhbmQgY2Fubm90IHNlZVxuICpcbiAqIE9ic2lkaWFuIHJhaXNlcyBubyBldmVudCB3aGVuIEFOT1RIRVIgcGx1Z2luIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgKHNlZSBgcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHNgKSxcbiAqIHNvIGxpdmUgY29uZmxpY3QgZGV0ZWN0aW9uIGhhcyBhIHJlYWwgY2VpbGluZyBhbmQgaXQgaXMgc3RhdGVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wbGllZCBhd2F5LiBBXG4gKiBjb25mbGljdGluZyBwbHVnaW4gYnVpbHQgb24gdGhpcyBsaWJyYXJ5IGFubm91bmNlcyBpdHNlbGYgdGhyb3VnaCB0aGUgbGlmZWN5Y2xlIGJyb2FkY2FzdCwgYW5kIGlzXG4gKiB0aGVyZWZvcmUgY2F1Z2h0IHRoZSBtb21lbnQgaXQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gT25lIHRoYXQgaXMgbm90IFx1MjAxNCBhbiBvbGQgcmVsZWFzZSBwcmVkYXRpbmcgdGhlXG4gKiBicm9hZGNhc3QsIG9yIGEgcGx1Z2luIGJ5IGFub3RoZXIgYXV0aG9yIGVudGlyZWx5IFx1MjAxNCBpcyBjYXVnaHQgYXQgdGhlIG5leHQgbG9hZCwgd2hpY2ggaXMgd2hlbiBpdHNcbiAqIG1hbmlmZXN0IGlzIHJlYWQuXG4gKlxuICogIyMgV2h5IGEgbG9zcyBpcyBhbm5vdW5jZWQgbGF0ZVxuICpcbiAqIE9ic2lkaWFuIHVwZGF0ZXMgYW4gZW5hYmxlZCBwbHVnaW4gYnkgcmVsb2FkaW5nIGl0OiB0aGUgb2xkIGNvcHkgdW5sb2FkcywgdGhlIG5ldyBvbmUgbG9hZHMuIEZvciB0aGVcbiAqIG1vbWVudCBpbiBiZXR3ZWVuIHRoZSBwcm92aWRlcidzIEFQSSBpcyByZXZva2VkLCBzbyBldmVyeSBkZXBlbmRlbnQgc2VlcyBpdHMgZGVwZW5kZW5jeSBnbyBhd2F5IGFuZFxuICogY29tZSBiYWNrLiBUaGUgZmVhdHVyZSBzdXJmYWNlIHN0aWxsIGNvbWVzIGRvd24gYXQgb25jZSBcdTIwMTQgdGhlIGRlcGVuZGVuY3kgcmVhbGx5IGlzIGdvbmUgZm9yIHRoYXRcbiAqIG1vbWVudCBcdTIwMTQgYnV0IHRoZSBub3RpY2Ugd2FpdHMge0BsaW5rIExPU1NfQU5OT1VOQ0VNRU5UX0dSQUNFX1BFUklPRF9JTl9NSUxMSVNFQ09ORFN9LCBhbmQgYSBsb3NzIHRoYXRcbiAqIGhlYWxlZCBpbiB0aGUgbWVhbnRpbWUgaXMgbmV2ZXIgYW5ub3VuY2VkLiBXaXRob3V0IHRoYXQsIHVwZGF0aW5nIG9uZSBwbHVnaW4gcHV0IGEgXCJubyBsb25nZXJcbiAqIGF2YWlsYWJsZVwiIG5vdGljZSBvbiBzY3JlZW4gaW4gZXZlcnkgcGx1Z2luIGRlcGVuZGluZyBvbiBpdCwgZGVzY3JpYmluZyBhIHN0YXRlIHRoYXQgbm8gbG9uZ2VyIGhlbGQgYnlcbiAqIHRoZSB0aW1lIHRoZSB1c2VyIHJlYWQgaXQuIEEgbG9zcyB0aGUgdXNlciBjYXVzZWQgb24gcHVycG9zZSBcdTIwMTQgZGlzYWJsaW5nIG9yIHVuaW5zdGFsbGluZyB0aGVcbiAqIGRlcGVuZGVuY3kgXHUyMDE0IG91dGxhc3RzIHRoZSB3aW5kb3cgYW5kIGlzIGFubm91bmNlZCBhcyBiZWZvcmUsIG9ubHkgYSBmZXcgc2Vjb25kcyBsYXRlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgY29udmVydEFzeW5jVG9TeW5jIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IHNhdGlzZmllcyBhcyBzYXRpc2ZpZXNWZXJzaW9uIH0gZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQge1xuICBCdXR0b25Db21wb25lbnQsXG4gIFBsdWdpblNldHRpbmdUYWJcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbkFwaVJlZiB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luTGlmZWN5Y2xlRXZlbnROYW1lLFxuICBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWRcbn0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1saWZlY3ljbGUtZXZlbnRzLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IGRpc2FibGVDb21tdW5pdHlQbHVnaW4gfSBmcm9tICcuLi9jb21tdW5pdHktcGx1Z2lucy50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQge1xuICBhc0NvZGVCbG9jayxcbiAgY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrc1xufSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyB3YXRjaFBsdWdpbkFwaSB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB7XG4gIGdldEluc3RhbGxlZFBsdWdpblN0YXRlLFxuICBnZXRJbnN0YWxsZWRQbHVnaW5WZXJzaW9uLFxuICBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luLFxuICBJbnN0YWxsZWRQbHVnaW5TdGF0ZVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWluc3RhbGwtc3RhdGUudHMnO1xuaW1wb3J0IHtcbiAgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJBc3luY0V2ZW50IH0gZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LXJlYWR5LWNvbXBvbmVudC50cyc7XG5cbi8qKlxuICogSG93IGxvbmcgYSBnYXRlIHRoYXQgY2xvc2VkIHdoaWxlIHRoZSBwbHVnaW4gd2FzIHJ1bm5pbmcgd2FpdHMgYmVmb3JlIHNheWluZyBzby5cbiAqXG4gKiBMb25nIGVub3VnaCB0byBjb3ZlciBPYnNpZGlhbiByZWxvYWRpbmcgYSBwbHVnaW4gdG8gYXBwbHkgaXRzIHVwZGF0ZSwgc2hvcnQgZW5vdWdoIHRoYXQgYSB1c2VyIHdob1xuICogZGlzYWJsZWQgdGhlIGRlcGVuZGVuY3kgYnkgaGFuZCBzdGlsbCBjb25uZWN0cyB0aGUgbm90aWNlIHRvIHdoYXQgdGhleSBqdXN0IGRpZC5cbiAqL1xuY29uc3QgTE9TU19BTk5PVU5DRU1FTlRfR1JBQ0VfUEVSSU9EX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGJhZGx5IHR3byBwbHVnaW5zIHJ1bm5pbmcgc2lkZSBieSBzaWRlIGdvZXMgd3JvbmcsIGFuZCB0aGVyZWZvcmUgd2hhdCB0aGlzIG9uZSBkb2VzIGFib3V0IGl0LlxuICovXG5leHBvcnQgZW51bSBQbHVnaW5Db25mbGljdFNldmVyaXR5IHtcbiAgLyoqXG4gICAqIFRoZSBob3N0IHJlZnVzZXMgdG8gcnVuIGF0IGFsbCB3aGlsZSB0aGUgY29uZmxpY3QgaG9sZHM6IGBvbmxvYWRJbXBsYCBuZXZlciBydW5zLCBub3RoaW5nIGlzXG4gICAqIHJlZ2lzdGVyZWQsIGFuZCB0aGUgcGx1Z2luIGV4cGxhaW5zIGl0c2VsZiB0aGUgd2F5IGEgbWlzc2luZyBkZXBlbmRlbmN5IGRvZXMuXG4gICAqXG4gICAqIEZvciBhbiBvdmVybGFwIHdoZXJlIGJvdGggcGx1Z2lucyBhY3Rpbmcgb24gdGhlIHNhbWUgb3BlcmF0aW9uIGRhbWFnZXMgdGhlIHZhdWx0LlxuICAgKi9cbiAgQmxvY2sgPSAnYmxvY2snLFxuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBydW5zIGFueXdheSBhbmQgc2F5cyB0aGUgb3ZlcmxhcCBpcyB0aGVyZS5cbiAgICpcbiAgICogRm9yIGFuIG92ZXJsYXAgdGhhdCBpcyBhbm5veWluZyByYXRoZXIgdGhhbiBkZXN0cnVjdGl2ZSBcdTIwMTQgZHVwbGljYXRlIGNvbW1hbmRzLCB3b3JrIGRvbmUgdHdpY2UgXHUyMDE0IHdoZXJlXG4gICAqIHJlZnVzaW5nIHRvIGxvYWQgd291bGQgY29zdCB0aGUgdXNlciBtb3JlIHRoYW4gdGhlIG92ZXJsYXAgZG9lcy5cbiAgICovXG4gIFdhcm4gPSAnd2Fybidcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBhbm90aGVyIHBsdWdpbiByZWZ1c2VzIHRvIHJ1biBiZXNpZGUsIG9yIHdhcm5zIGFib3V0IHJ1bm5pbmcgYmVzaWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkNvbmZsaWN0IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgdGhlIE9USEVSIHBsdWdpbidzIHZlcnNpb25zIHRoYXQgY29uZmxpY3QsIGUuZy4gYCc8MTIuMC4wJ2AgZm9yIFwiZXZlcnkgdmVyc2lvblxuICAgKiBiZWZvcmUgdGhlIG9uZSB0aGF0IGdhdmUgdGhpcyBiZWhhdmlvciB1cFwiLlxuICAgKlxuICAgKiBBIHJhbmdlIHJhdGhlciB0aGFuIGEgbWluaW11bSwgc28gYW4gb3ZlcmxhcCBjb25maW5lZCB0byBvbmUgbWFqb3IgKGAnPj0zIDw0J2ApIGlzIGV4cHJlc3NpYmxlLCBhbmQgc29cbiAgICogaXMgYSBwbHVnaW4gdGhhdCBjb25mbGljdHMgYXQgZXZlcnkgdmVyc2lvbiBcdTIwMTQgc3BlbGwgdGhhdCBgJz49MC4wLjAnYCwgc2luY2UgYGNvbXBhcmUtdmVyc2lvbnNgIHJlamVjdHNcbiAgICogYSBiYXJlIGAqYC4gRXZhbHVhdGVkIGFnYWluc3QgYG1hbmlmZXN0LnZlcnNpb25gOyBhIHZlcnNpb24gdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGNvdW50cyBhc1xuICAgKiBjb25mbGljdGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZsaWN0aW5nVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIHNob3duIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxvY2FsaXplZCBzZW50ZW5jZSBzYXlpbmcgd2hhdCBnb2VzIHdyb25nIHdoZW4gYm90aCBydW4sIHNob3duIGluIHRoZSBiYW5uZXIuXG4gICAqXG4gICAqIFRoZSBkZWNsYXJpbmcgcGx1Z2luIG93bnMgdGhpcyBzdHJpbmcgYmVjYXVzZSBvbmx5IGl0IGtub3dzIHdoYXQgdGhlIHR3byBvZiB0aGVtIGNvbGxpZGUgb3ZlciwgYW5kIGFcbiAgICogdXNlciBiZWluZyBhc2tlZCB0byBkaXNhYmxlIHNvbWV0aGluZyBkZXNlcnZlcyB0byBiZSB0b2xkIHdoeS5cbiAgICovXG4gIHJlYWRvbmx5IHJlYXNvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0IHRoaXMgcGx1Z2luIGRvZXMgYWJvdXQgdGhlIGNvbmZsaWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2V2ZXJpdHk6IFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHk7XG59XG5cbi8qKlxuICogQSBwbHVnaW4gYW5vdGhlciBwbHVnaW4gY2Fubm90IHdvcmsgd2l0aG91dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5EZXBlbmRlbmN5IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgQVBJIGNvbnRyYWN0IHZlcnNpb25zIHRoZSBkZXBlbmRlbnQgY29tcGlsZWQgYWdhaW5zdCwgZS5nLiBgJ14yJ2AuXG4gICAqXG4gICAqIEEgZGVwZW5kZW5jeSB3aG9zZSBwdWJsaXNoZWQgQVBJIGZhbGxzIG91dHNpZGUgdGhlIHJhbmdlIGNvdW50cyBhcyBVTlNBVElTRklFRCwgd2hpY2ggaXMgd2hhdCB0dXJucyBhXG4gICAqIHNpbGVudCBiZWhhdmlvcmFsIG1pc21hdGNoIGJldHdlZW4gdHdvIGluZGVwZW5kZW50bHkgcmVsZWFzZWQgcGx1Z2lucyBpbnRvIGEgdmlzaWJsZSBcInVwZGF0ZSB0aGlzXG4gICAqIG9uZVwiIG1lc3NhZ2UuIFNwZWxsIFwiYW55IHZlcnNpb25cIiBhcyBgJz49MC4wLjAnYCBcdTIwMTQgYGNvbXBhcmUtdmVyc2lvbnNgIHJlamVjdHMgYSBiYXJlIGAqYC5cbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb25SYW5nZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcmVxdWlyZWQgcGx1Z2luLCBhcyBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcmVxdWlyZWQgcGx1Z2luLCBzaG93biB0byB0aGUgdXNlci5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQSBsb2NhbGl6ZWQgc2VudGVuY2Ugc2F5aW5nIHdoYXQgdGhlIGRlcGVuZGVudCBkb2VzIHdpdGggdGhpcyBwbHVnaW4sIHNob3duIGluIHRoZSBzZXR0aW5ncyBiYW5uZXIuXG4gICAqXG4gICAqIFRoZSBkZXBlbmRlbnQgb3ducyB0aGlzIHN0cmluZyBiZWNhdXNlIG9ubHkgaXQga25vd3Mgd2hhdCBpdCB1c2VzIHRoZSBvdGhlciBwbHVnaW4gZm9yLCBhbmQgYSB1c2VyXG4gICAqIGJlaW5nIGFza2VkIHRvIGluc3RhbGwgc29tZXRoaW5nIGRlc2VydmVzIHRvIGJlIHRvbGQgd2h5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBQbHVnaW5HYXRlQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5HYXRlQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbmZsaWN0cyB0byBlbmZvcmNlLiBBbiBlbXB0eSBsaXN0IG1lYW5zIHRoZSBwbHVnaW4gcmVmdXNlcyB0byBydW4gYmVzaWRlIG5vdGhpbmcuXG4gICAqL1xuICByZWFkb25seSBjb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W107XG5cbiAgLyoqXG4gICAqIFRoZSBkZXBlbmRlbmNpZXMgdG8gZW5mb3JjZS4gQW4gZW1wdHkgbGlzdCBtZWFucyB0aGUgcGx1Z2luIGRlcGVuZHMgb24gbm90aGluZywgYW5kIGl0cyBmZWF0dXJlXG4gICAqIHN1cmZhY2UgbG9hZHMgaW1tZWRpYXRlbHkuXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM6IHJlYWRvbmx5IFBsdWdpbkRlcGVuZGVuY3lbXTtcblxuICAvKipcbiAgICogTG9hZHMgdGhlIGhvc3QgcGx1Z2luJ3MgZmVhdHVyZSBzdXJmYWNlLiBDYWxsZWQgb25jZSBldmVyeSBkZXBlbmRlbmN5IGlzIHNhdGlzZmllZCBhbmQgbm8gYmxvY2tpbmdcbiAgICogY29uZmxpY3QgaG9sZHMsIGFuZCBhZ2FpbiBhZnRlciBhIGdhdGUgdGhhdCBoYWQgY2xvc2VkIG9wZW5zIGJhY2sgdXAuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc3VyZmFjZSBpcyBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBsb2FkRmVhdHVyZVN1cmZhY2U6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBob3N0IHBsdWdpbiBcdTIwMTQgdGhlIG9uZSBkZWNsYXJpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmxpY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW47XG5cbiAgLyoqXG4gICAqIFRoZSBob3N0IHBsdWdpbidzIG5vdGljZSBjb21wb25lbnQsIHVzZWQgdG8gc2F5IHdoYXQgaXMgbWlzc2luZywgd2hhdCBpcyBpbiB0aGUgd2F5LCBhbmQgd2hhdCBjaGFuZ2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFVubG9hZHMgdGhlIGhvc3QgcGx1Z2luJ3MgZmVhdHVyZSBzdXJmYWNlLiBDYWxsZWQgd2hlbiBhIGdhdGUgdGhhdCBoYWQgYmVlbiBvcGVuIGNsb3Nlcy5cbiAgICovXG4gIHJlYWRvbmx5IHVubG9hZEZlYXR1cmVTdXJmYWNlOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgQmxvY2tlZFBsdWdpblNldHRpbmdUYWJ9IGNvbnN0cnVjdG9yLlxuICovXG5pbnRlcmZhY2UgQmxvY2tlZFBsdWdpblNldHRpbmdUYWJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYmxvY2tlZCBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYmxvY2tlZCBleHBsYW5hdGlvbiBpbnRvIHRoZSB0YWIncyBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSB0YWIncyBjb250YWluZXIgZWxlbWVudC5cbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlckJhbm5lcjogKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgc2V0dGluZ3MgdGFiIGEgYmxvY2tlZCBwbHVnaW4gc2hvd3MgaW4gcGxhY2Ugb2YgdGhlIG9uZSBpdCBuZXZlciBnb3QgdG8gcmVnaXN0ZXIuXG4gKlxuICogQSBibG9ja2VkIHBsdWdpbidzIGBvbmxvYWRJbXBsYCBuZXZlciByYW4sIHNvIGl0cyByZWFsIHNldHRpbmdzIHRhYiBkb2VzIG5vdCBleGlzdCBcdTIwMTQgYW5kIGEgdXNlciB3aG8gZ29lc1xuICogbG9va2luZyBmb3IgdGhlIHBsdWdpbidzIHNldHRpbmdzIGlzIHByZWNpc2VseSB0aGUgdXNlciBhc2tpbmcgXCJ3aHkgaXNuJ3QgdGhpcyBkb2luZyBhbnl0aGluZz9cIi4gQW5cbiAqIGVtcHR5IHNwYWNlIGlzIHRoZSB3b3JzdCBwb3NzaWJsZSBhbnN3ZXIgdG8gdGhhdCBxdWVzdGlvbi5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvc2V0dGluZ3MtdGFiL3ByZWZlci1zZXR0aW5nLWRlZmluaXRpb25zIC0tIFRoaXMgdGFiIGhhcyBubyBzZXR0aW5ncyB0byBkZWNsYXJlLiBJdCBzdGFuZHMgaW4gZm9yIGEgc2V0dGluZ3MgdGFiIHRoYXQgZG9lcyBub3QgZXhpc3QgeWV0LCBjYXJyeWluZyBhbiBleHBsYW5hdGlvbiBhbmQgYSByZXBhaXIgYnV0dG9uLCBhbmQgdGhlIHBsdWdpbidzIHJlYWwgc2V0dGluZ3MgYXBwZWFyIHRoZSBtb21lbnQgdGhlIGdhdGUgb3BlbnMuXG5jbGFzcyBCbG9ja2VkUGx1Z2luU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlckJhbm5lcjogKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgQmxvY2tlZFBsdWdpblNldHRpbmdUYWJ9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBCbG9ja2VkUGx1Z2luU2V0dGluZ1RhYkNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zLnBsdWdpbi5hcHAsIHBhcmFtcy5wbHVnaW4pO1xuICAgIHRoaXMucmVuZGVyQmFubmVyID0gcGFyYW1zLnJlbmRlckJhbm5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSB0YWIuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZGlzcGxheSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG4gICAgdGhpcy5yZW5kZXJCYW5uZXIodGhpcy5jb250YWluZXJFbCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbmZvcmNlcyBhIHBsdWdpbidzIG1hbmRhdG9yeSBkZXBlbmRlbmNpZXMgYW5kIGRlY2xhcmVkIGNvbmZsaWN0cywgZ2F0aW5nIGl0cyBmZWF0dXJlIHN1cmZhY2Ugb24gYm90aC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkdhdGVDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYW5ub3VuY2VkV2FybmluZ1BsdWdpbklkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaVJlZnMgPSBuZXcgTWFwPHN0cmluZywgUGx1Z2luQXBpUmVmPG9iamVjdD4+KCk7XG4gIHByaXZhdGUgYmxvY2tlZFNldHRpbmdUYWI6IG51bGwgfCBQbHVnaW5TZXR0aW5nVGFiID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W107XG4gIHByaXZhdGUgaGFzQW5ub3VuY2VkQmxvY2tlZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzRmVhdHVyZVN1cmZhY2VMb2FkZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0xheW91dFJlYWR5ID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZEZlYXR1cmVTdXJmYWNlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIGxvc3NBbm5vdW5jZW1lbnRUaW1lcklkOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IFBsdWdpbk5vdGljZUNvbXBvbmVudDtcbiAgcHJpdmF0ZSByZWFkb25seSB1bmxvYWRGZWF0dXJlU3VyZmFjZTogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIGdldCBhcHAoKTogQXBwIHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW4uYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFBsdWdpbkdhdGVDb21wb25lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5HYXRlQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29uZmxpY3RzID0gcGFyYW1zLmNvbmZsaWN0cztcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IHBhcmFtcy5kZXBlbmRlbmNpZXM7XG4gICAgdGhpcy5sb2FkRmVhdHVyZVN1cmZhY2UgPSBwYXJhbXMubG9hZEZlYXR1cmVTdXJmYWNlO1xuICAgIHRoaXMucGx1Z2luID0gcGFyYW1zLnBsdWdpbjtcbiAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gICAgdGhpcy51bmxvYWRGZWF0dXJlU3VyZmFjZSA9IHBhcmFtcy51bmxvYWRGZWF0dXJlU3VyZmFjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXlzIHdoZXRoZXIgYW55IHdhcm5pbmcgY29uZmxpY3QgaXMgaW4gZm9yY2UgcmlnaHQgbm93LlxuICAgKlxuICAgKiBUaGUgcHJlZGljYXRlIGEgZGVjbGFyYXRpdmUgc2V0dGluZ3MgdGFiIG5lZWRzLCBhbmQgdGhlIGNvdW50ZXJwYXJ0IHRvXG4gICAqIGBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50LmdldFN1Z2dlc3RlZFBsdWdpblN0YXRlYC4gU3VjaCBhIHRhYiBkZWNpZGVzIHdoZXRoZXIgYSByb3cgZXhpc3RzXG4gICAqIEJFRk9SRSBpdCByZW5kZXJzIGFueXRoaW5nIGludG8gaXQsIHNvIHtAbGluayByZW5kZXJDb25mbGljdFdhcm5pbmdCYW5uZXJ9IHdyaXRpbmcgbm90aGluZyBjYW5ub3RcbiAgICogYW5zd2VyIHRoZSBxdWVzdGlvbiBmb3IgaXQgXHUyMDE0IGEgcm93IHRoYXQgcmVuZGVycyBlbXB0eSBpcyBzdGlsbCBhIHJvdywgd2l0aCB0aGUgZGl2aWRlciBhbmQgcGFkZGluZ1xuICAgKiBldmVyeSBvdGhlciBzZXR0aW5nIGhhcy5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciBhdCBsZWFzdCBvbmUgZGVjbGFyZWQgd2FybmluZyBjb25mbGljdCBob2xkcy5cbiAgICovXG4gIHB1YmxpYyBoYXNBY3RpdmVXYXJuaW5nQ29uZmxpY3RzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm4pLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHdhdGNoaW5nIGV2ZXJ5IGRlY2xhcmVkIGRlcGVuZGVuY3kgYW5kIGNvbmZsaWN0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgdGhpcy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGFwaVJlZiA9IHdhdGNoUGx1Z2luQXBpPG9iamVjdD4oe1xuICAgICAgICBhcGlWZXJzaW9uUmFuZ2U6IGRlcGVuZGVuY3kuYXBpVmVyc2lvblJhbmdlLFxuICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIHBsdWdpbklkOiBkZXBlbmRlbmN5LnBsdWdpbklkXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyQXN5bmNFdmVudChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYXBpUmVmLm9uKCdjaGFuZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5hcGlSZWZzLnNldChkZXBlbmRlbmN5LnBsdWdpbklkLCBhcGlSZWYpO1xuICAgIH1cblxuICAgIC8vIEEgY29uZmxpY3QgaGFzIG5vIEFQSSB0byB3YXRjaCBcdTIwMTQgaXQgaXMgcmVhZCBvdXQgb2YgdGhlIG1hbmlmZXN0cyBcdTIwMTQgc28gdGhlIHRyaWdnZXIgdG8gcmUtcmVhZCBpcyB0aGVcbiAgICAvLyBsaWJyYXJ5J3Mgb3duIGxpZmVjeWNsZSBicm9hZGNhc3QuIEl0IGNvdmVycyBldmVyeSBjb25mbGljdGluZyBwbHVnaW4gYnVpbHQgb24gdGhpcyBsaWJyYXJ5OyBvbmVcbiAgICAvLyB0aGF0IGlzIG5vdCBpcyBjYXVnaHQgYXQgdGhlIG5leHQgbG9hZCwgYXMgdGhlIGZpbGUgaGVhZGVyIHNheXMuXG4gICAgY29uc3QgbGlmZWN5Y2xlRXZlbnROYW1lczogUGx1Z2luTGlmZWN5Y2xlRXZlbnROYW1lW10gPSBbUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLCBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRV07XG4gICAgZm9yIChjb25zdCBldmVudE5hbWUgb2YgbGlmZWN5Y2xlRXZlbnROYW1lcykge1xuICAgICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLndvcmtzcGFjZS5vbihcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKHBheWxvYWQ6IFBsdWdpbkxpZmVjeWNsZUV2ZW50UGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGlmIChwYXlsb2FkLnBsdWdpbklkID09PSB0aGlzLnBsdWdpbi5tYW5pZmVzdC5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9KVxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgLy8gTm90aGluZyBpcyBTQUlEIGFib3V0IGEgbWlzc2luZyBkZXBlbmRlbmN5IHVudGlsIHRoZSBsYXlvdXQgaXMgcmVhZHkuIFBsdWdpbnMgbG9hZCBpbiBhbiB1bnNwZWNpZmllZFxuICAgIC8vIG9yZGVyLCBzbyBhIGRlcGVuZGVuY3kgdGhhdCBzaW1wbHkgaGFzIG5vdCBsb2FkZWQgeWV0IGlzIGluZGlzdGluZ3Vpc2hhYmxlIGF0IHRoaXMgcG9pbnQgZnJvbSBvbmVcbiAgICAvLyB0aGF0IGlzIG5vdCBpbnN0YWxsZWQgXHUyMDE0IGFubm91bmNpbmcgaGVyZSB3b3VsZCBwdXQgYSBcIm1pc3NpbmcgcGx1Z2luXCIgbm90aWNlIG9uIHNjcmVlbiBhdCBldmVyeVxuICAgIC8vIHN0YXJ0dXAgYW5kIHRha2UgaXQgYXdheSBhIG1vbWVudCBsYXRlci4gVGhlIGdhdGUgaXRzZWxmIGRvZXMgbm90IHdhaXQ6IHRoZSBzdXJmYWNlIGxvYWRzIHRoZVxuICAgIC8vIGluc3RhbnQgdGhlIGRlcGVuZGVuY3kgaXMgdGhlcmUsIHdoZW5ldmVyIHRoYXQgaXMuXG4gICAgdGhpcy5hZGRDaGlsZChcbiAgICAgIG5ldyBDYWxsYmFja0xheW91dFJlYWR5Q29tcG9uZW50KHRoaXMuYXBwLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMYXlvdXRSZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlc2VudFVuc2F0aXNmaWVkKHRoaXMuZ2V0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMoKSwgdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5CbG9jaykpO1xuICAgICAgICB0aGlzLmFubm91bmNlV2FybmluZ3MoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5jYW5jZWxMb3NzQW5ub3VuY2VtZW50KCk7XG4gICAgICB0aGlzLmhpZGVCbG9ja2VkU2V0dGluZ1RhYigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyB0aGUgZ2F0ZSBvbmNlIHRoZSB3YXRjaGVzIGFyZSBpbiBwbGFjZSwgbG9hZGluZyB0aGUgZmVhdHVyZSBzdXJmYWNlIGlmIGl0IGlzIGFscmVhZHkgb3Blbi5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBmaXJzdCBldmFsdWF0aW9uIGlzIGNvbXBsZXRlLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBiYW5uZXIgZm9yIGV2ZXJ5IGNvbmZsaWN0IHRoZSBob3N0IGlzIHJ1bm5pbmcgYWxvbmdzaWRlLCBzbyBhIHBsdWdpbiBjYW4gcHV0IHRoZSBvdmVybGFwIGluXG4gICAqIGl0cyBvd24gc2V0dGluZ3MgdGFiLlxuICAgKlxuICAgKiBDb25zdW1lci1pbnZva2VkLCBleGFjdGx5IGxpa2UgYFBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnQucmVuZGVyQmFubmVyYDogdGhlIGxpYnJhcnkgcmVnaXN0ZXJzIHRoZVxuICAgKiBzZXR0aW5ncyB0YWIgYSBCTE9DS0VEIHBsdWdpbiBuZWVkcywgYmVjYXVzZSB0aGF0IHBsdWdpbiBuZXZlciBnb3QgdG8gcmVnaXN0ZXIgb25lIG9mIGl0cyBvd24sIGJ1dCBpdFxuICAgKiBoYXMgbm8gaG9vayBpbnRvIHRoZSB0YWIgYSBydW5uaW5nIHBsdWdpbiBidWlsZHMuIFJlbmRlcnMgbm90aGluZyB3aGVuIG5vIHdhcm5pbmcgY29uZmxpY3QgaG9sZHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKi9cbiAgcHVibGljIHJlbmRlckNvbmZsaWN0V2FybmluZ0Jhbm5lcihjb250YWluZXJFbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuV2FybikpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29uZmxpY3RFbnRyeShjb250YWluZXJFbCwgY29uZmxpY3QsIHRoaXMuY3JlYXRlQ29uZmxpY3RXYXJuaW5nTWVzc2FnZShjb25mbGljdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXlzIHdoYXQgd2VudCBhd2F5IHdoaWxlIHRoZSBwbHVnaW4gd2FzIHJ1bm5pbmcsIG5vdyB0aGF0IHRoZSBncmFjZSBwZXJpb2QgaXMgb3Zlci5cbiAgICpcbiAgICogUmUtcmVhZHMgdGhlIGdhdGUgcmF0aGVyIHRoYW4gdHJ1c3Rpbmcgd2hhdCBjbG9zZWQgaXQsIHNvIGEgZGVwZW5kZW5jeSB0aGF0IHdlbnQgYXdheSBkdXJpbmcgdGhlXG4gICAqIHdpbmRvdyBpcyBhbm5vdW5jZWQgd2l0aCB0aGUgcmVzdC4gT25lIHRoYXQgY2FtZSBiYWNrIGluIHRpbWUgbmV2ZXIgZ2V0cyBoZXJlOiB0aGUgZ2F0ZSByZW9wZW5pbmdcbiAgICogY2FuY2VscyB0aGUgdGltZXIuXG4gICAqL1xuICBwcml2YXRlIGFubm91bmNlTG9zcygpOiB2b2lkIHtcbiAgICB0aGlzLmxvc3NBbm5vdW5jZW1lbnRUaW1lcklkID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiB0aGlzLmdldFVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzKCkpIHtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UodGhpcy5jcmVhdGVEZXBlbmRlbmN5TG9zdE1lc3NhZ2UoZGVwZW5kZW5jeSkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5CbG9jaykpIHtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UodGhpcy5jcmVhdGVDb25mbGljdEFwcGVhcmVkTWVzc2FnZShjb25mbGljdCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYW5ub3VuY2VXYXJuaW5ncygpOiB2b2lkIHtcbiAgICAvLyBBIHdhcm5pbmcgZGVzY3JpYmVzIHR3byBwbHVnaW5zIHRoYXQgYXJlIGJvdGggUlVOTklORywgc28gaXQgaXMgcG9pbnRsZXNzIHdoaWxlIHRoaXMgb25lIGlzIGJsb2NrZWRcbiAgICAvLyBcdTIwMTQgYW5kIGl0IHdhaXRzIGZvciBsYXlvdXQtcmVhZHkgZm9yIHRoZSBzYW1lIHJlYXNvbiB0aGUgYmxvY2tlZCBub3RpY2UgZG9lcy5cbiAgICBpZiAoIXRoaXMuaXNMYXlvdXRSZWFkeSB8fCAhdGhpcy5pc0ZlYXR1cmVTdXJmYWNlTG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb25mbGljdCBvZiB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm4pKSB7XG4gICAgICBpZiAodGhpcy5hbm5vdW5jZWRXYXJuaW5nUGx1Z2luSWRzLmhhcyhjb25mbGljdC5wbHVnaW5JZCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYW5ub3VuY2VkV2FybmluZ1BsdWdpbklkcy5hZGQoY29uZmxpY3QucGx1Z2luSWQpO1xuICAgICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZSh0aGlzLmNyZWF0ZUNvbmZsaWN0V2FybmluZ01lc3NhZ2UoY29uZmxpY3QpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhbmNlbExvc3NBbm5vdW5jZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubG9zc0Fubm91bmNlbWVudFRpbWVySWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMubG9zc0Fubm91bmNlbWVudFRpbWVySWQpO1xuICAgIHRoaXMubG9zc0Fubm91bmNlbWVudFRpbWVySWQgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCbG9ja2VkTWVzc2FnZShkZXBlbmRlbmN5OiBQbHVnaW5EZXBlbmRlbmN5KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkRlcGVuZGVuY3kuYmxvY2tlZE5vdGljZSwge1xuICAgICAgZGVwZW5kZW5jeVBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKGRlcGVuZGVuY3kucGx1Z2luTmFtZSksXG4gICAgICBwbHVnaW5OYW1lOiBhc0NvZGVCbG9jayh0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29uZmxpY3RBcHBlYXJlZE1lc3NhZ2UoY29uZmxpY3Q6IFBsdWdpbkNvbmZsaWN0KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkNvbmZsaWN0LmNvbmZsaWN0QXBwZWFyZWROb3RpY2UsIHtcbiAgICAgIGNvbmZsaWN0aW5nUGx1Z2luTmFtZTogYXNDb2RlQmxvY2soY29uZmxpY3QucGx1Z2luTmFtZSksXG4gICAgICBwbHVnaW5OYW1lOiBhc0NvZGVCbG9jayh0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29uZmxpY3RCbG9ja2VkTWVzc2FnZShjb25mbGljdDogUGx1Z2luQ29uZmxpY3QpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luQ29uZmxpY3QuYmxvY2tlZE5vdGljZSwge1xuICAgICAgY29uZmxpY3RpbmdQbHVnaW5OYW1lOiBhc0NvZGVCbG9jayhjb25mbGljdC5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb25mbGljdFdhcm5pbmdNZXNzYWdlKGNvbmZsaWN0OiBQbHVnaW5Db25mbGljdCk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC53YXJuaW5nTm90aWNlLCB7XG4gICAgICBjb25mbGljdGluZ1BsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKGNvbmZsaWN0LnBsdWdpbk5hbWUpLFxuICAgICAgcGx1Z2luTmFtZTogYXNDb2RlQmxvY2sodGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlcGVuZGVuY3lMb3N0TWVzc2FnZShkZXBlbmRlbmN5OiBQbHVnaW5EZXBlbmRlbmN5KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkRlcGVuZGVuY3kuZGVwZW5kZW5jeUxvc3ROb3RpY2UsIHtcbiAgICAgIGRlcGVuZGVuY3lQbHVnaW5OYW1lOiBhc0NvZGVCbG9jayhkZXBlbmRlbmN5LnBsdWdpbk5hbWUpLFxuICAgICAgcGx1Z2luTmFtZTogYXNDb2RlQmxvY2sodGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZSlcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGRlY2xhcmVkIGNvbmZsaWN0cyBvZiBvbmUgc2V2ZXJpdHkgdGhhdCBhcmUgY3VycmVudGx5IGluIGZvcmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2V2ZXJpdHkgLSBUaGUgc2V2ZXJpdHkgdG8gc2VsZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgY29uZmxpY3RzIGhvbGRpbmcgcmlnaHQgbm93LCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGRlY2xhcmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBY3RpdmVDb25mbGljdHMoc2V2ZXJpdHk6IFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkpOiBQbHVnaW5Db25mbGljdFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25mbGljdHMuZmlsdGVyKChjb25mbGljdCkgPT4gY29uZmxpY3Quc2V2ZXJpdHkgPT09IHNldmVyaXR5ICYmIHRoaXMuaXNDb25mbGljdEFjdGl2ZShjb25mbGljdCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVbnNhdGlzZmllZERlcGVuZGVuY2llcygpOiBQbHVnaW5EZXBlbmRlbmN5W10ge1xuICAgIHJldHVybiB0aGlzLmRlcGVuZGVuY2llcy5maWx0ZXIoKGRlcGVuZGVuY3kpID0+ICF0aGlzLmFwaVJlZnMuZ2V0KGRlcGVuZGVuY3kucGx1Z2luSWQpPy52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVCbG9ja2VkU2V0dGluZ1RhYigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYmxvY2tlZFNldHRpbmdUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFwcC5zZXR0aW5nLnJlbW92ZVNldHRpbmdUYWIodGhpcy5ibG9ja2VkU2V0dGluZ1RhYik7XG4gICAgdGhpcy5ibG9ja2VkU2V0dGluZ1RhYiA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRGVjaWRlcyB3aGV0aGVyIG9uZSBkZWNsYXJlZCBjb25mbGljdCBpcyBpbiBmb3JjZSByaWdodCBub3cuXG4gICAqXG4gICAqIE9ubHkgYW4gRU5BQkxFRCBwbHVnaW4gY291bnRzLiBPbmUgdGhhdCBpcyBpbnN0YWxsZWQgYnV0IHN3aXRjaGVkIG9mZiByZWdpc3RlcnMgbm90aGluZywgc28gaXQgY2Fubm90XG4gICAqIGNvbGxpZGUsIGFuZCBhY3Rpbmcgb24gaXQgd291bGQgYmUgYW4gYWxhcm0gdGhlIHVzZXIgY2FuIG9ubHkgYW5zd2VyIGJ5IHVuaW5zdGFsbGluZyBzb21ldGhpbmcgdGhleVxuICAgKiBoYXZlIGFscmVhZHkgdHVybmVkIG9mZi5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZsaWN0IC0gVGhlIGRlY2xhcmVkIGNvbmZsaWN0LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb25mbGljdGluZyBwbHVnaW4gaXMgZW5hYmxlZCBhdCBhIGNvbmZsaWN0aW5nIHZlcnNpb24uXG4gICAqL1xuICBwcml2YXRlIGlzQ29uZmxpY3RBY3RpdmUoY29uZmxpY3Q6IFBsdWdpbkNvbmZsaWN0KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5zdGFsbGVkVmVyc2lvbiA9IGdldEluc3RhbGxlZFBsdWdpblZlcnNpb24oe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIHBsdWdpbklkOiBjb25mbGljdC5wbHVnaW5JZFxuICAgIH0pO1xuXG4gICAgaWYgKGluc3RhbGxlZFZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHNhdGlzZmllc1ZlcnNpb24oaW5zdGFsbGVkVmVyc2lvbiwgY29uZmxpY3QuY29uZmxpY3RpbmdWZXJzaW9uUmFuZ2UpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNheXMgd2hhdCBpcyBpbiB0aGUgd2F5LCBhbmQgcHV0cyB0aGUgc2FtZSBleHBsYW5hdGlvbiB3aGVyZSB0aGUgdXNlciB3aWxsIGxvb2sgZm9yIHRoZSBwbHVnaW4nc1xuICAgKiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzIC0gVGhlIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3QgY3VycmVudGx5IHNhdGlzZmllZC5cbiAgICogQHBhcmFtIGJsb2NraW5nQ29uZmxpY3RzIC0gVGhlIGNvbmZsaWN0cyBjdXJyZW50bHkgcmVmdXNpbmcgdGhlIHBsdWdpbiB0aGUgcmlnaHQgdG8gcnVuLlxuICAgKi9cbiAgcHJpdmF0ZSBwcmVzZW50VW5zYXRpc2ZpZWQoXG4gICAgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXM6IHJlYWRvbmx5IFBsdWdpbkRlcGVuZGVuY3lbXSxcbiAgICBibG9ja2luZ0NvbmZsaWN0czogcmVhZG9ubHkgUGx1Z2luQ29uZmxpY3RbXVxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNMYXlvdXRSZWFkeSB8fCAodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMubGVuZ3RoID09PSAwICYmIGJsb2NraW5nQ29uZmxpY3RzLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dCbG9ja2VkU2V0dGluZ1RhYih1bnNhdGlzZmllZERlcGVuZGVuY2llcywgYmxvY2tpbmdDb25mbGljdHMpO1xuXG4gICAgaWYgKHRoaXMuaGFzQW5ub3VuY2VkQmxvY2tlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaGFzQW5ub3VuY2VkQmxvY2tlZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzKSB7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHRoaXMuY3JlYXRlQmxvY2tlZE1lc3NhZ2UoZGVwZW5kZW5jeSkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgYmxvY2tpbmdDb25mbGljdHMpIHtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UodGhpcy5jcmVhdGVDb25mbGljdEJsb2NrZWRNZXNzYWdlKGNvbmZsaWN0KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLWV2YWx1YXRlcyB0aGUgZ2F0ZSBhbmQgbW92ZXMgdGhlIGZlYXR1cmUgc3VyZmFjZSB0byBtYXRjaC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzdXJmYWNlIG1hdGNoZXMgdGhlIGdhdGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMgPSB0aGlzLmdldFVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzKCk7XG4gICAgY29uc3QgYmxvY2tpbmdDb25mbGljdHMgPSB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5LkJsb2NrKTtcblxuICAgIGlmICh1bnNhdGlzZmllZERlcGVuZGVuY2llcy5sZW5ndGggPT09IDAgJiYgYmxvY2tpbmdDb25mbGljdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNhbmNlbExvc3NBbm5vdW5jZW1lbnQoKTtcbiAgICAgIHRoaXMuaGlkZUJsb2NrZWRTZXR0aW5nVGFiKCk7XG4gICAgICB0aGlzLmhhc0Fubm91bmNlZEJsb2NrZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKCF0aGlzLmlzRmVhdHVyZVN1cmZhY2VMb2FkZWQpIHtcbiAgICAgICAgdGhpcy5pc0ZlYXR1cmVTdXJmYWNlTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkRmVhdHVyZVN1cmZhY2UoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbm5vdW5jZVdhcm5pbmdzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCkge1xuICAgICAgdGhpcy5pc0ZlYXR1cmVTdXJmYWNlTG9hZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnVubG9hZEZlYXR1cmVTdXJmYWNlKCk7XG5cbiAgICAgIC8vIEEgZ2F0ZSB0aGF0IGNsb3NlcyB3aGlsZSB0aGUgcGx1Z2luIGlzIFJVTk5JTkcgaXMgdGhlIGNhc2Ugd29ydGggYmVpbmcgbG91ZCBhYm91dDogdGhlIHVzZXIganVzdFxuICAgICAgLy8gZGlkIHNvbWV0aGluZywgYW5kIHRoZSBjb25zZXF1ZW5jZSBpcyBpbW1lZGlhdGUgYW5kIGludmlzaWJsZSB3aXRob3V0IHRoaXMuIEFubm91bmNlZCByZWdhcmRsZXNzXG4gICAgICAvLyBvZiBsYXlvdXQgcmVhZGluZXNzLCBiZWNhdXNlIGEgcnVubmluZyBwbHVnaW4gbWVhbnMgdGhlIGxheW91dCBpcyBsb25nIHNpbmNlIHJlYWR5IFx1MjAxNCBidXQgb25seVxuICAgICAgLy8gb25jZSB0aGUgZ3JhY2UgcGVyaW9kIGhhcyBzaG93biB0aGUgbG9zcyBpcyBub3QgYW4gdXBkYXRlIHJlbG9hZGluZyB0aGUgcHJvdmlkZXIgKHNlZSB0aGUgZmlsZVxuICAgICAgLy8gaGVhZGVyKS5cbiAgICAgIHRoaXMubG9zc0Fubm91bmNlbWVudFRpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYW5ub3VuY2VMb3NzKCk7XG4gICAgICB9LCBMT1NTX0FOTk9VTkNFTUVOVF9HUkFDRV9QRVJJT0RfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgICAgdGhpcy5oYXNBbm5vdW5jZWRCbG9ja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvd0Jsb2NrZWRTZXR0aW5nVGFiKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLCBibG9ja2luZ0NvbmZsaWN0cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcmVzZW50VW5zYXRpc2ZpZWQodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMsIGJsb2NraW5nQ29uZmxpY3RzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBibG9ja2VkIGV4cGxhbmF0aW9uIGludG8gYSBzZXR0aW5ncy10YWIgY29udGFpbmVyOiB3aGF0IGlzIG1pc3Npbmcgb3IgaW4gdGhlIHdheSwgd2h5IGl0XG4gICAqIG1hdHRlcnMsIGFuZCB0aGUgYnV0dG9uIHRoYXQgZml4ZXMgaXQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcGFyYW0gdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMgLSBUaGUgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgc2F0aXNmaWVkLlxuICAgKiBAcGFyYW0gYmxvY2tpbmdDb25mbGljdHMgLSBUaGUgY29uZmxpY3RzIGN1cnJlbnRseSByZWZ1c2luZyB0aGUgcGx1Z2luIHRoZSByaWdodCB0byBydW4uXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckJsb2NrZWRCYW5uZXIoXG4gICAgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LFxuICAgIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W10sXG4gICAgYmxvY2tpbmdDb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W11cbiAgKTogdm9pZCB7XG4gICAgaWYgKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkRlcGVuZGVuY3kuc2V0dGluZ3NIZWFkaW5nKSB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGJhbm5lckVsID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHtcbiAgICAgICAgY2xzOiBbQ3NzQ2xhc3MuTGlicmFyeU5hbWUsIENzc0NsYXNzLlBsdWdpbkRlcGVuZGVuY3lCYW5uZXJdXG4gICAgICB9KTtcbiAgICAgIGJhbm5lckVsLmFwcGVuZCh0aGlzLmNyZWF0ZUJsb2NrZWRNZXNzYWdlKGRlcGVuZGVuY3kpKTtcbiAgICAgIGJhbm5lckVsLmNyZWF0ZURpdih7IHRleHQ6IGRlcGVuZGVuY3kucmVhc29uIH0pO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IGdldEluc3RhbGxlZFBsdWdpblN0YXRlKHtcbiAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgcGx1Z2luSWQ6IGRlcGVuZGVuY3kucGx1Z2luSWRcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJhbm5lckVsKVxuICAgICAgICAuc2V0QnV0dG9uVGV4dCh0KCgkKSA9PlxuICAgICAgICAgIHN0YXRlID09PSBJbnN0YWxsZWRQbHVnaW5TdGF0ZS5JbnN0YWxsZWRCdXREaXNhYmxlZFxuICAgICAgICAgICAgPyAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luU3VnZ2VzdGlvbi5lbmFibGVcbiAgICAgICAgICAgIDogJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpblN1Z2dlc3Rpb24uaW5zdGFsbFxuICAgICAgICApKVxuICAgICAgICAuc2V0Q3RhKClcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luKHtcbiAgICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgICBwbHVnaW5JZDogZGVwZW5kZW5jeS5wbHVnaW5JZCxcbiAgICAgICAgICAgIHBsdWdpbk5hbWU6IGRlcGVuZGVuY3kucGx1Z2luTmFtZSxcbiAgICAgICAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAvLyBUaGUgbGluayBPVVQgdG8gdGhlIGRlcGVuZGVuY3kncyBvd24gc2V0dGluZ3MsIHNob3duIG9ubHkgb25jZSBpdCBpcyBpbnN0YWxsZWQgYW5kIGVuYWJsZWQgXHUyMDE0IHRoZVxuICAgICAgLy8gb3RoZXIgaGFsZiBvZiB0aGUgcmVsYXRpb25zaGlwIGJlaW5nIHZpc2libGUgZnJvbSBib3RoIGVuZHMuIEl0IGlzIHdoYXQgc3RvcHMgXCJjb25maWd1cmUgb25lXG4gICAgICAvLyBvcGVyYXRpb24gYWNyb3NzIHR3byBwbHVnaW5zXCIgZnJvbSBtZWFuaW5nIFwiZ28gYW5kIGZpbmQgdGhlIG90aGVyIHBsdWdpbiB5b3Vyc2VsZlwiLlxuICAgICAgaWYgKHN0YXRlICE9PSBJbnN0YWxsZWRQbHVnaW5TdGF0ZS5FbmFibGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbmRlck9wZW5TZXR0aW5nc0J1dHRvbihiYW5uZXJFbCwgZGVwZW5kZW5jeS5wbHVnaW5JZCwgZGVwZW5kZW5jeS5wbHVnaW5OYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoYmxvY2tpbmdDb25mbGljdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luQ29uZmxpY3Quc2V0dGluZ3NIZWFkaW5nKSB9KTtcblxuICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgYmxvY2tpbmdDb25mbGljdHMpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29uZmxpY3RFbnRyeShjb250YWluZXJFbCwgY29uZmxpY3QsIHRoaXMuY3JlYXRlQ29uZmxpY3RCbG9ja2VkTWVzc2FnZShjb25mbGljdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIG9uZSBjb25mbGljdDogd2hhdCBpdCBpcywgd2h5IGl0IG1hdHRlcnMsIGFuZCB0aGUgdHdvIHdheXMgb3V0IG9mIGl0LlxuICAgKlxuICAgKiBUaGUgcmVwYWlyIGlzIG9mZmVyZWQgb24gdGhlIE9USEVSIHBsdWdpbiBcdTIwMTQgZGlzYWJsaW5nIGl0IGlzIHRoZSBvbmUgdGhpbmcgdGhpcyBwbHVnaW4gY2FuIGRvIGluIGFcbiAgICogY2xpY2ssIHNpbmNlIGl0IGNhbm5vdCB1cGRhdGUgc29tZW9uZSBlbHNlJ3MgcGx1Z2luIFx1MjAxNCBhbmQgaXQgaXMgdGhlIHBlcnNpc3RlZCBgZGlzYWJsZVBsdWdpbkFuZFNhdmVgXG4gICAqIHJhdGhlciB0aGFuIHRoZSB0cmFuc2llbnQgZGlzYWJsZSwgYmVjYXVzZSB0aGUgdXNlciBhc2tlZCBmb3IgaXQgYnkgY2xpY2tpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcGFyYW0gY29uZmxpY3QgLSBUaGUgY29uZmxpY3QgdG8gcmVuZGVyLlxuICAgKiBAcGFyYW0gbWVzc2FnZUZyYWdtZW50IC0gVGhlIHNlbnRlbmNlIGV4cGxhaW5pbmcgdGhlIGNvbmZsaWN0LlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJDb25mbGljdEVudHJ5KGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgY29uZmxpY3Q6IFBsdWdpbkNvbmZsaWN0LCBtZXNzYWdlRnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBiYW5uZXJFbCA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdih7XG4gICAgICBjbHM6IFtDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuUGx1Z2luQ29uZmxpY3RCYW5uZXJdXG4gICAgfSk7XG4gICAgYmFubmVyRWwuYXBwZW5kKG1lc3NhZ2VGcmFnbWVudCk7XG4gICAgYmFubmVyRWwuY3JlYXRlRGl2KHsgdGV4dDogY29uZmxpY3QucmVhc29uIH0pO1xuXG4gICAgbmV3IEJ1dHRvbkNvbXBvbmVudChiYW5uZXJFbClcbiAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5kaXNhYmxlLCB7IGNvbmZsaWN0aW5nUGx1Z2luTmFtZTogY29uZmxpY3QucGx1Z2luTmFtZSB9KSlcbiAgICAgIC5zZXRDdGEoKVxuICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbih7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5JZDogY29uZmxpY3QucGx1Z2luSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgICAgfSkpO1xuXG4gICAgdGhpcy5yZW5kZXJPcGVuU2V0dGluZ3NCdXR0b24oYmFubmVyRWwsIGNvbmZsaWN0LnBsdWdpbklkLCBjb25mbGljdC5wbHVnaW5OYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyT3BlblNldHRpbmdzQnV0dG9uKGJhbm5lckVsOiBIVE1MRWxlbWVudCwgcGx1Z2luSWQ6IHN0cmluZywgcGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbmV3IEJ1dHRvbkNvbXBvbmVudChiYW5uZXJFbClcbiAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5Lm9wZW5EZXBlbmRlbmN5U2V0dGluZ3MsIHtcbiAgICAgICAgZGVwZW5kZW5jeVBsdWdpbk5hbWU6IHBsdWdpbk5hbWVcbiAgICAgIH0pKVxuICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcC5zZXR0aW5nLm9wZW4oKTtcbiAgICAgICAgdGhpcy5hcHAuc2V0dGluZy5vcGVuVGFiQnlJZChwbHVnaW5JZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Jsb2NrZWRTZXR0aW5nVGFiKFxuICAgIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W10sXG4gICAgYmxvY2tpbmdDb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W11cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmxvY2tlZFNldHRpbmdUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZGRlZCB0aHJvdWdoIGBhcHAuc2V0dGluZ2AgcmF0aGVyIHRoYW4gYHBsdWdpbi5hZGRTZXR0aW5nVGFiYCwgYmVjYXVzZSB0aGlzIHRhYiBoYXMgdG8gY29tZSBiYWNrXG4gICAgLy8gT0ZGIGFnYWluIHRoZSBtb21lbnQgdGhlIGdhdGUgb3BlbnMgXHUyMDE0IG90aGVyd2lzZSB0aGUgcGx1Z2luJ3Mgb3duIHNldHRpbmdzIHRhYiwgcmVnaXN0ZXJlZCBieVxuICAgIC8vIGBvbmxvYWRJbXBsYCwgd291bGQgYXBwZWFyIGJlc2lkZSBhIHN0YWxlIFwicmVxdWlyZWQgcGx1Z2luIG1pc3NpbmdcIiBvbmUuIGBwbHVnaW4uYWRkU2V0dGluZ1RhYmBcbiAgICAvLyBvbmx5IGV2ZXIgcmVtb3ZlcyBhdCBwbHVnaW4gdW5sb2FkLlxuICAgIGNvbnN0IGJsb2NrZWRTZXR0aW5nVGFiID0gbmV3IEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFiKHtcbiAgICAgIHBsdWdpbjogdGhpcy5wbHVnaW4sXG4gICAgICByZW5kZXJCYW5uZXI6IChjb250YWluZXJFbCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlckJsb2NrZWRCYW5uZXIoY29udGFpbmVyRWwsIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLCBibG9ja2luZ0NvbmZsaWN0cyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hcHAuc2V0dGluZy5hZGRTZXR0aW5nVGFiKGJsb2NrZWRTZXR0aW5nVGFiKTtcbiAgICB0aGlzLmJsb2NrZWRTZXR0aW5nVGFiID0gYmxvY2tlZFNldHRpbmdUYWI7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwRkEsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxhQUFhLHdCQUF3QjtBQUM5QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQVNQLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsZ0JBQWdCO0FBQ3pCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxTQUFTO0FBQ2xCLFNBQVMsc0JBQXNCO0FBQy9CO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEs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LEVBQUUsQ0FBQztBQUVoRyxlQUFXLFlBQVksbUJBQW1CO0FBQ3hDLFdBQUssb0JBQW9CLGFBQWEsVUFBVSxLQUFLLDZCQUE2QixRQUFRLENBQUM7QUFBQSxJQUM3RjtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFhUSxvQkFBb0IsYUFBMEIsVUFBMEIsaUJBQXlDO0FBQ3ZILFVBQU0sV0FBVyxZQUFZLFVBQVU7QUFBQSxNQUNyQyxLQUFLLENBQUMsU0FBUyxhQUFhLFNBQVMsb0JBQW9CO0FBQUEsSUFDM0QsQ0FBQztBQUNELGFBQVMsT0FBTyxlQUFlO0FBQy9CLGFBQVMsVUFBVSxFQUFFLE1BQU0sU0FBUyxPQUFPLENBQUM7QUFFNUMsUUFBSSxnQkFBZ0IsUUFBUSxFQUN6QixjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLGVBQWUsU0FBUyxFQUFFLHVCQUF1QixTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQ2pILE9BQU8sRUFDUCxRQUFRLG1CQUFtQixZQUFZO0FBQ3RDLFlBQU0sdUJBQXVCO0FBQUEsUUFDM0IsS0FBSyxLQUFLO0FBQUEsUUFDVixVQUFVLFNBQVM7QUFBQSxNQUNyQixDQUFDO0FBQ0QsWUFBTSxLQUFLLFFBQVE7QUFBQSxJQUNyQixDQUFDLENBQUM7QUFFSixTQUFLLHlCQUF5QixVQUFVLFNBQVMsVUFBVSxTQUFTLFVBQVU7QUFBQSxFQUNoRjtBQUFBLEVBRVEseUJBQXlCLFVBQXVCLFVBQWtCLFlBQTBCO0FBQ2xHLFFBQUksZ0JBQWdCLFFBQVEsRUFDekIsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQixpQkFBaUIsd0JBQXdCO0FBQUEsTUFDbEYsc0JBQXNCO0FBQUEsSUFDeEIsQ0FBQyxDQUFDLEVBQ0QsUUFBUSxNQUFNO0FBQ2IsV0FBSyxJQUFJLFFBQVEsS0FBSztBQUN0QixXQUFLLElBQUksUUFBUSxZQUFZLFFBQVE7QUFBQSxJQUN2QyxDQUFDO0FBQUEsRUFDTDtBQUFBLEVBRVEsc0JBQ04seUJBQ0EsbUJBQ007QUFDTixRQUFJLEtBQUssbUJBQW1CO0FBQzFCO0FBQUEsSUFDRjtBQU1BLFVBQU0sb0JBQW9CLElBQUksd0JBQXdCO0FBQUEsTUFDcEQsUUFBUSxLQUFLO0FBQUEsTUFDYixjQUFjLENBQUMsZ0JBQXNCO0FBQ25DLGFBQUssb0JBQW9CLGFBQWEseUJBQXlCLGlCQUFpQjtBQUFBLE1BQ2xGO0FBQUEsSUFDRixDQUFDO0FBQ0QsU0FBSyxJQUFJLFFBQVEsY0FBYyxpQkFBaUI7QUFDaEQsU0FBSyxvQkFBb0I7QUFBQSxFQUMzQjtBQUNGOyIsCiAgIm5hbWVzIjogWyJQbHVnaW5Db25mbGljdFNldmVyaXR5Il0KfQo=
|
|
464
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcGx1Z2luLWdhdGUtY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGdhdGUgb24gYSBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2U6IHdoYXQgbXVzdCBiZSBQUkVTRU5UIGZvciBpdCB0byBydW4sIGFuZCB3aGF0IG11c3QgTk9UIGJlLlxuICpcbiAqIEJvdGggaGFsdmVzIGFuc3dlciB0aGUgc2FtZSBxdWVzdGlvbiBcdTIwMTQgbWF5IHRoaXMgcGx1Z2luJ3MgYG9ubG9hZEltcGxgIHJ1biByaWdodCBub3c/IFx1MjAxNCBzbyB0aGV5IGFyZSBvbmVcbiAqIGNvbXBvbmVudCByYXRoZXIgdGhhbiB0d28uIEEgc2Vjb25kLCBpbmRlcGVuZGVudCBnYXRlIHdvdWxkIGRvdWJsZS1sb2FkIHRoZSBzdXJmYWNlIGFuZCBzdGFjayBhIHNlY29uZFxuICogXCJibG9ja2VkXCIgc2V0dGluZ3MgdGFiIG9udG8gdGhlIHNhbWUgcGx1Z2luLCBhbmQgbmVpdGhlciBjb3VsZCBzZWUgdGhlIG90aGVyJ3MgcmVhc29uIGZvciByZWZ1c2luZy5cbiAqXG4gKiAjIyBEZXBlbmRlbmNpZXM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IGNhbm5vdCB3b3JrIHdpdGhvdXRcbiAqXG4gKiBUaGlzIGlzIHRoZSBzdHJpY3Qgc2libGluZyBvZiBgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudGAsIGFuZCB0aGUgZGlmZmVyZW5jZSBpcyB0aGUgd2hvbGUgcG9pbnQuIEFcbiAqIFNVR0dFU1RJT04gaXMgYW4gb2ZmZXIgXHUyMDE0IHRoZSBob3N0IGtlZXBzIHdvcmtpbmcgd2l0aG91dCBpdCBhbmQgc2ltcGx5IGNhbm5vdCBkbyBvbmUgdGhpbmcuIEEgREVQRU5ERU5DWVxuICogaXMgYSByZXF1aXJlbWVudDogYG9ubG9hZEltcGxgIG5ldmVyIHJ1bnMsIG5vIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCwgbm8gaGFuZGxlciBpcyBpbnN0YWxsZWQsIG5vdGhpbmcgaXNcbiAqIHBhdGNoZWQuIFJlYWNoIGZvciBhIHN1Z2dlc3Rpb24gd2hlbiB0aGUgb3RoZXIgcGx1Z2luIGFkZHMgc29tZXRoaW5nOyByZWFjaCBmb3IgYSBkZXBlbmRlbmN5IHdoZW4gdGhlXG4gKiBob3N0J3MgYWR2ZXJ0aXNlZCBiZWhhdmlvciBpcyBub3QgdGhlcmUgd2l0aG91dCBpdC5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gZGVwZW5kZW5jeSBmaWVsZCBpbiBhIG1hbmlmZXN0LCB3aGljaCBpcyBleGFjdGx5IHRoZSBwcm9ibGVtIHRoaXMgY2xvc2VzLiBXaXRob3V0IG9uZSxcbiAqIGEgdXNlciBtZWV0aW5nIGFuIHVuZmFtaWxpYXIgcGx1Z2luIGluIHRoZWlyIGxpc3QgbW9udGhzIGxhdGVyIGhhcyBub3RoaW5nIHRlbGxpbmcgdGhlbSBpdCBpc1xuICogbG9hZC1iZWFyaW5nIFx1MjAxNCB0aGV5IHJlbW92ZSBpdCwgYW5kIHRoZSBicmVha2FnZSBzdXJmYWNlcyB3ZWVrcyBhZnRlciB0aGF0IGFzIGRhbWFnZSB0aGV5IGNhbm5vdCBjb25uZWN0XG4gKiB0byBhbnl0aGluZyB0aGV5IGRpZC4gU28gdGhlIHJlbGF0aW9uc2hpcCBpcyBtYWRlIHZpc2libGUgZnJvbSBib3RoIGVuZHMgYW5kIGVuZm9yY2VkIHdoaWxlIGl0IGhvbGRzOlxuICogdGhlIGRlcGVuZGVudCBleHBsYWlucyBpdHNlbGYgd2hlcmUgdGhlIHVzZXIgaXMgbG9va2luZywgcmVwYWlycyBpdHNlbGYgaW4gb25lIGNsaWNrLCBhbmQgcmVhY3RzIHRoZVxuICogSU5TVEFOVCB0aGUgZGVwZW5kZW5jeSBnb2VzIGF3YXkgcmF0aGVyIHRoYW4gZGVncmFkaW5nIHF1aWV0bHkuXG4gKlxuICogVGhyZWUgY2hvaWNlcyBhcmUgZGVsaWJlcmF0ZSBhbmQgd29ydGggc3RhdGluZywgYmVjYXVzZSBlYWNoIGhhcyBhbiBvYnZpb3VzLWxvb2tpbmcgYWx0ZXJuYXRpdmU6XG4gKlxuICogLSAqKkJsb2NrZWQgbWVhbnMgZW5hYmxlZC1idXQtaW5lcnQsIG5ldmVyIHNlbGYtZGlzYWJsZWQuKiogQ2FsbGluZyBgZGlzYWJsZVBsdWdpbkFuZFNhdmVgIG9uIGl0c2VsZlxuICogICB3b3VsZCBiZSB0aGUgbGl0ZXJhbCByZWFkaW5nIG9mIFwicmVmdXNlcyB0byBsb2FkXCIsIGFuZCBpdCByZXdyaXRlcyBhIGNvbmZpZyB0aGF0IGJlbG9uZ3MgdG8gdGhlIHVzZXIgXHUyMDE0XG4gKiAgIHdobyB3b3VsZCB0aGVuIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmUtZW5hYmxlIGl0IGFmdGVyIGZpeGluZyB0aGUgZGVwZW5kZW5jeS4gU3RheWluZyBlbmFibGVkIGFuZCBpbmVydFxuICogICBzYXlzIHRoZSBzYW1lIHRoaW5nIHRvIHRoZSB1c2VyLCBjaGFuZ2VzIG5vdGhpbmcgdGhleSBvd24sIGFuZCBjYW4gdW5kbyBpdHNlbGYuXG4gKiAtICoqQmxvY2tlZCBpcyBub3QgYW4gZXJyb3IuKiogVGhyb3dpbmcgZnJvbSBgb25sb2FkYCBtYXJrcyB0aGUgcGx1Z2luIGZhaWxlZCBpbiBPYnNpZGlhbiBhbmQgaGFuZHMgdGhlXG4gKiAgIHVzZXIgYSBzdGFjayB0cmFjZSBpbnN0ZWFkIG9mIGEgc2VudGVuY2UgYW5kIGEgYnV0dG9uLlxuICogLSAqKkEgZGVwZW5kZW5jeSBtdXN0IHB1Ymxpc2ggYW4gQVBJLioqIFRoYXQgaXMgd2hhdCBtYWtlcyBwcmVzZW5jZSwgYWJzZW5jZSwgdmVyc2lvbiBhbmQgZGVwYXJ0dXJlIGFsbFxuICogICBvYnNlcnZhYmxlIHRocm91Z2ggb25lIG1lY2hhbmlzbSBcdTIwMTQgYHdhdGNoUGx1Z2luQXBpYCdzIHJlZmVyZW5jZSBpcyBsaXZlLCBpcyByZXZva2VkIHdoZW4gdGhlIHByb3ZpZGVyXG4gKiAgIHVubG9hZHMsIGFuZCBhbHJlYWR5IGNsYXNzaWZpZXMgbm90LWluc3RhbGxlZCBhZ2FpbnN0IG5vdC1lbmFibGVkIGFnYWluc3QgdG9vLW9sZC4gQSBwcm92aWRlciB3aXRoXG4gKiAgIG5vdGhpbmcgdG8gZXhwb3NlIGNhbiBwdWJsaXNoIGFuIGVtcHR5IEFQSSBwdXJlbHkgc28gaXQgY2FuIGJlIGRlcGVuZGVkIHVwb247IHRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBiZVxuICogICBhIHNlY29uZCwgd2Vha2VyIGRldGVjdGlvbiBwYXRoIHRvIG1haW50YWluIGJlc2lkZSBpdC5cbiAqXG4gKiAjIyBDb25mbGljdHM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IHJlZnVzZXMgdG8gcnVuIGJlc2lkZVxuICpcbiAqIFRoZSBpbnZlcnNlIHJlbGF0aW9uc2hpcCwgYW5kIGl0IG5lZWRzIGl0cyBvd24gZGV0ZWN0aW9uIHBhdGggYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBvbmUgZG9lcyBub3QgZml0LlxuICogQSBjb25mbGljdGluZyBwbHVnaW4gaXMgdHlwaWNhbGx5IGFuIE9MRCB2ZXJzaW9uIG9mIHNvbWUgb3RoZXIgcGx1Z2luIHRoYXQgc3RpbGwgb3ducyBiZWhhdmlvciB0aGlzIG9uZVxuICogaGFzIHRha2VuIG92ZXIgXHUyMDE0IGl0IHB1Ymxpc2hlcyBubyBBUEkgYXQgYWxsLCBzbyB0aGVyZSBpcyBubyBgYXBpVmVyc2lvblJhbmdlYCB0byBjb21wYXJlIGFnYWluc3QuXG4gKlxuICogVGhlIGFyZ3VtZW50IGZvciByZWZ1c2luZyByYXRoZXIgdGhhbiBjb21wZXRpbmcgY29tZXMgZnJvbSB0aGUgY2FzZSB0aGlzIGdlbmVyYWxpemVzOiB0d28gcmVuYW1lL2RlbGV0ZVxuICogaGFuZGxlcnMgYWN0aW5nIG9uIG9uZSByZW5hbWUgY29ycnVwdCBsaW5rcyBhbmQgbW92ZSBhdHRhY2htZW50cyB0d2ljZSwgYW5kIHRoZXJlIGlzIG5vIHJlbGlhYmxlIHdheSB0b1xuICogd2luIHRoYXQgcmFjZSBcdTIwMTQgYSBoYW5kbGVyIGlzIGVsZWN0ZWQgYnkgcmVnaXN0cnkgb3JkZXIsIGJ1dCB0aGUgcGF0Y2hlcyB0aGF0IGRvIHRoZSB3b3JrIHNpdCBvdXRzaWRlXG4gKiB0aGF0IGVsZWN0aW9uLCBzbyB3aGljaGV2ZXIgcGx1Z2luIGxvYWRlZCBmaXJzdCBrZWVwcyBhIGhhbmQgb24gdGhlIHdoZWVsLiBFdmVyeSBzY2hlbWUgZm9yIHNlaXppbmdcbiAqIGNvbnRyb2wgZnJvbSBpbnNpZGUgaXMgbG9hZC1vcmRlciBkZXBlbmRlbnQuIFJlZnVzaW5nIGlzIGRldGVybWluaXN0aWMgd2hlcmUgY29tcGV0aW5nIGlzIG5vdCwgYW5kIGFcbiAqIHZhdWx0IHRoYXQgYnJpZWZseSBoYXMgbm8gaGFuZGxlciBpcyBhIGZhciBiZXR0ZXIgb3V0Y29tZSB0aGFuIG9uZSB3aXRoIHR3by5cbiAqXG4gKiBUd28gZGV0YWlscyBvZiB0aGF0IGRldGVjdGlvbiBjYXJyeSBvdmVyIHZlcmJhdGltLCBiZWNhdXNlIGJvdGggYXJlIGxvYWQtYmVhcmluZzpcbiAqXG4gKiAtICoqVmVyc2lvbnMgYXJlIHJlYWQsIG5ldmVyIHRoZSByZWdpc3RyeS4qKiBBIHBsdWdpbiB0aGF0IGhhcyBub3QgbG9hZGVkIHlldCBoYXMgcmVnaXN0ZXJlZCBub3RoaW5nLCBzb1xuICogICBhc2tpbmcgdGhlIHJlZ2lzdHJ5IGdpdmVzIGEgZGlmZmVyZW50IGFuc3dlciBkZXBlbmRpbmcgb24gd2hlbiBpdCBpcyBhc2tlZC4gYGFwcC5wbHVnaW5zLm1hbmlmZXN0c2AgaXNcbiAqICAgcG9wdWxhdGVkIGZvciBldmVyeSBpbnN0YWxsZWQgcGx1Z2luIGF0IHN0YXJ0dXAsIHdoYXRldmVyIHRoZSBsb2FkIG9yZGVyIHR1cm5zIG91dCB0byBiZS5cbiAqIC0gKipBbiB1bnBhcnNlYWJsZSB2ZXJzaW9uIGNvdW50cyBhcyBjb25mbGljdGluZy4qKiBGYWlsaW5nIGNsb3NlZCBpcyB0aGUgc2FmZSBkaXJlY3Rpb246IGEgZmFsc2UgYWxhcm1cbiAqICAgY29zdHMgYSBub3RpY2UsIGEgZmFsc2UgYWxsLWNsZWFyIGNvc3RzIGEgdmF1bHQuXG4gKlxuICogTm90IGV2ZXJ5IG92ZXJsYXAgaXMgdGhhdCBzZXZlcmUsIHdoaWNoIGlzIHdoeSBhIGNvbmZsaWN0IGRlY2xhcmVzIGEge0BsaW5rIFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHl9LlxuICogVHdvIHBsdWdpbnMgc2hpcHBpbmcgdGhlIHNhbWUgY29tbWFuZCBkdXBsaWNhdGUgYSBwYWxldHRlIGVudHJ5IGFuZCBkbyB0aGUgd29yayB0d2ljZSBcdTIwMTQgYW5ub3lpbmcsIG5vdFxuICogY29ycnVwdGluZyBcdTIwMTQgYW5kIHJlZnVzaW5nIHRvIGxvYWQgb3ZlciB0aGF0IHdvdWxkIGJlIGEgd29yc2Ugb3V0Y29tZSB0aGFuIHRoZSBvdmVybGFwLiBUaG9zZSBkZWNsYXJlXG4gKiB7QGxpbmsgUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJufSBhbmQgYm90aCBrZWVwIHJ1bm5pbmcuXG4gKlxuICogIyMgV2hhdCB0aGlzIGNhbiBhbmQgY2Fubm90IHNlZVxuICpcbiAqIE9ic2lkaWFuIHJhaXNlcyBubyBldmVudCB3aGVuIEFOT1RIRVIgcGx1Z2luIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgKHNlZSBgcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHNgKSxcbiAqIHNvIGxpdmUgY29uZmxpY3QgZGV0ZWN0aW9uIGhhcyBhIHJlYWwgY2VpbGluZyBhbmQgaXQgaXMgc3RhdGVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wbGllZCBhd2F5LiBBXG4gKiBjb25mbGljdGluZyBwbHVnaW4gYnVpbHQgb24gdGhpcyBsaWJyYXJ5IGFubm91bmNlcyBpdHNlbGYgdGhyb3VnaCB0aGUgbGlmZWN5Y2xlIGJyb2FkY2FzdCwgYW5kIGlzXG4gKiB0aGVyZWZvcmUgY2F1Z2h0IHRoZSBtb21lbnQgaXQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gT25lIHRoYXQgaXMgbm90IFx1MjAxNCBhbiBvbGQgcmVsZWFzZSBwcmVkYXRpbmcgdGhlXG4gKiBicm9hZGNhc3QsIG9yIGEgcGx1Z2luIGJ5IGFub3RoZXIgYXV0aG9yIGVudGlyZWx5IFx1MjAxNCBpcyBjYXVnaHQgYXQgdGhlIG5leHQgbG9hZCwgd2hpY2ggaXMgd2hlbiBpdHNcbiAqIG1hbmlmZXN0IGlzIHJlYWQuXG4gKlxuICogIyMgV2h5IGEgbG9zcyBpcyBhbm5vdW5jZWQgbGF0ZVxuICpcbiAqIE9ic2lkaWFuIHVwZGF0ZXMgYW4gZW5hYmxlZCBwbHVnaW4gYnkgcmVsb2FkaW5nIGl0OiB0aGUgb2xkIGNvcHkgdW5sb2FkcywgdGhlIG5ldyBvbmUgbG9hZHMuIEZvciB0aGVcbiAqIG1vbWVudCBpbiBiZXR3ZWVuIHRoZSBwcm92aWRlcidzIEFQSSBpcyByZXZva2VkLCBzbyBldmVyeSBkZXBlbmRlbnQgc2VlcyBpdHMgZGVwZW5kZW5jeSBnbyBhd2F5IGFuZFxuICogY29tZSBiYWNrLiBUaGUgZmVhdHVyZSBzdXJmYWNlIHN0aWxsIGNvbWVzIGRvd24gYXQgb25jZSBcdTIwMTQgdGhlIGRlcGVuZGVuY3kgcmVhbGx5IGlzIGdvbmUgZm9yIHRoYXRcbiAqIG1vbWVudCBcdTIwMTQgYnV0IHRoZSBub3RpY2Ugd2FpdHMge0BsaW5rIExPU1NfQU5OT1VOQ0VNRU5UX0dSQUNFX1BFUklPRF9JTl9NSUxMSVNFQ09ORFN9LCBhbmQgYSBsb3NzIHRoYXRcbiAqIGhlYWxlZCBpbiB0aGUgbWVhbnRpbWUgaXMgbmV2ZXIgYW5ub3VuY2VkLiBXaXRob3V0IHRoYXQsIHVwZGF0aW5nIG9uZSBwbHVnaW4gcHV0IGEgXCJubyBsb25nZXJcbiAqIGF2YWlsYWJsZVwiIG5vdGljZSBvbiBzY3JlZW4gaW4gZXZlcnkgcGx1Z2luIGRlcGVuZGluZyBvbiBpdCwgZGVzY3JpYmluZyBhIHN0YXRlIHRoYXQgbm8gbG9uZ2VyIGhlbGQgYnlcbiAqIHRoZSB0aW1lIHRoZSB1c2VyIHJlYWQgaXQuIEEgbG9zcyB0aGUgdXNlciBjYXVzZWQgb24gcHVycG9zZSBcdTIwMTQgZGlzYWJsaW5nIG9yIHVuaW5zdGFsbGluZyB0aGVcbiAqIGRlcGVuZGVuY3kgXHUyMDE0IG91dGxhc3RzIHRoZSB3aW5kb3cgYW5kIGlzIGFubm91bmNlZCBhcyBiZWZvcmUsIG9ubHkgYSBmZXcgc2Vjb25kcyBsYXRlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgY29udmVydEFzeW5jVG9TeW5jIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IHNhdGlzZmllcyBhcyBzYXRpc2ZpZXNWZXJzaW9uIH0gZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQge1xuICBCdXR0b25Db21wb25lbnQsXG4gIFBsdWdpblNldHRpbmdUYWJcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbkFwaVJlZiB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luTGlmZWN5Y2xlRXZlbnROYW1lLFxuICBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWRcbn0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1saWZlY3ljbGUtZXZlbnRzLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IGRpc2FibGVDb21tdW5pdHlQbHVnaW4gfSBmcm9tICcuLi9jb21tdW5pdHktcGx1Z2lucy50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQge1xuICBhc0NvZGVCbG9jayxcbiAgY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrc1xufSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyB3YXRjaFBsdWdpbkFwaSB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB7XG4gIGdldEluc3RhbGxlZFBsdWdpblN0YXRlLFxuICBnZXRJbnN0YWxsZWRQbHVnaW5WZXJzaW9uLFxuICBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luLFxuICBJbnN0YWxsZWRQbHVnaW5TdGF0ZVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWluc3RhbGwtc3RhdGUudHMnO1xuaW1wb3J0IHtcbiAgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJBc3luY0V2ZW50IH0gZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LXJlYWR5LWNvbXBvbmVudC50cyc7XG5cbi8qKlxuICogSG93IGxvbmcgYSBnYXRlIHRoYXQgY2xvc2VkIHdoaWxlIHRoZSBwbHVnaW4gd2FzIHJ1bm5pbmcgd2FpdHMgYmVmb3JlIHNheWluZyBzby5cbiAqXG4gKiBMb25nIGVub3VnaCB0byBjb3ZlciBPYnNpZGlhbiByZWxvYWRpbmcgYSBwbHVnaW4gdG8gYXBwbHkgaXRzIHVwZGF0ZSwgc2hvcnQgZW5vdWdoIHRoYXQgYSB1c2VyIHdob1xuICogZGlzYWJsZWQgdGhlIGRlcGVuZGVuY3kgYnkgaGFuZCBzdGlsbCBjb25uZWN0cyB0aGUgbm90aWNlIHRvIHdoYXQgdGhleSBqdXN0IGRpZC5cbiAqL1xuY29uc3QgTE9TU19BTk5PVU5DRU1FTlRfR1JBQ0VfUEVSSU9EX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGJhZGx5IHR3byBwbHVnaW5zIHJ1bm5pbmcgc2lkZSBieSBzaWRlIGdvZXMgd3JvbmcsIGFuZCB0aGVyZWZvcmUgd2hhdCB0aGlzIG9uZSBkb2VzIGFib3V0IGl0LlxuICovXG5leHBvcnQgZW51bSBQbHVnaW5Db25mbGljdFNldmVyaXR5IHtcbiAgLyoqXG4gICAqIFRoZSBob3N0IHJlZnVzZXMgdG8gcnVuIGF0IGFsbCB3aGlsZSB0aGUgY29uZmxpY3QgaG9sZHM6IGBvbmxvYWRJbXBsYCBuZXZlciBydW5zLCBub3RoaW5nIGlzXG4gICAqIHJlZ2lzdGVyZWQsIGFuZCB0aGUgcGx1Z2luIGV4cGxhaW5zIGl0c2VsZiB0aGUgd2F5IGEgbWlzc2luZyBkZXBlbmRlbmN5IGRvZXMuXG4gICAqXG4gICAqIEZvciBhbiBvdmVybGFwIHdoZXJlIGJvdGggcGx1Z2lucyBhY3Rpbmcgb24gdGhlIHNhbWUgb3BlcmF0aW9uIGRhbWFnZXMgdGhlIHZhdWx0LlxuICAgKi9cbiAgQmxvY2sgPSAnYmxvY2snLFxuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBydW5zIGFueXdheSBhbmQgc2F5cyB0aGUgb3ZlcmxhcCBpcyB0aGVyZS5cbiAgICpcbiAgICogRm9yIGFuIG92ZXJsYXAgdGhhdCBpcyBhbm5veWluZyByYXRoZXIgdGhhbiBkZXN0cnVjdGl2ZSBcdTIwMTQgZHVwbGljYXRlIGNvbW1hbmRzLCB3b3JrIGRvbmUgdHdpY2UgXHUyMDE0IHdoZXJlXG4gICAqIHJlZnVzaW5nIHRvIGxvYWQgd291bGQgY29zdCB0aGUgdXNlciBtb3JlIHRoYW4gdGhlIG92ZXJsYXAgZG9lcy5cbiAgICovXG4gIFdhcm4gPSAnd2Fybidcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBhbm90aGVyIHBsdWdpbiByZWZ1c2VzIHRvIHJ1biBiZXNpZGUsIG9yIHdhcm5zIGFib3V0IHJ1bm5pbmcgYmVzaWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkNvbmZsaWN0IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgdGhlIE9USEVSIHBsdWdpbidzIHZlcnNpb25zIHRoYXQgY29uZmxpY3QsIGUuZy4gYCc8MTIuMC4wJ2AgZm9yIFwiZXZlcnkgdmVyc2lvblxuICAgKiBiZWZvcmUgdGhlIG9uZSB0aGF0IGdhdmUgdGhpcyBiZWhhdmlvciB1cFwiLlxuICAgKlxuICAgKiBBIHJhbmdlIHJhdGhlciB0aGFuIGEgbWluaW11bSwgc28gYW4gb3ZlcmxhcCBjb25maW5lZCB0byBvbmUgbWFqb3IgKGAnPj0zIDw0J2ApIGlzIGV4cHJlc3NpYmxlLCBhbmQgc29cbiAgICogaXMgYSBwbHVnaW4gdGhhdCBjb25mbGljdHMgYXQgZXZlcnkgdmVyc2lvbiBcdTIwMTQgc3BlbGwgdGhhdCBgJz49MC4wLjAnYCwgc2luY2UgYGNvbXBhcmUtdmVyc2lvbnNgIHJlamVjdHNcbiAgICogYSBiYXJlIGAqYC4gRXZhbHVhdGVkIGFnYWluc3QgYG1hbmlmZXN0LnZlcnNpb25gOyBhIHZlcnNpb24gdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGNvdW50cyBhc1xuICAgKiBjb25mbGljdGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZsaWN0aW5nVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIHNob3duIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxvY2FsaXplZCBzZW50ZW5jZSBzYXlpbmcgd2hhdCBnb2VzIHdyb25nIHdoZW4gYm90aCBydW4sIHNob3duIGluIHRoZSBiYW5uZXIuXG4gICAqXG4gICAqIFRoZSBkZWNsYXJpbmcgcGx1Z2luIG93bnMgdGhpcyBzdHJpbmcgYmVjYXVzZSBvbmx5IGl0IGtub3dzIHdoYXQgdGhlIHR3byBvZiB0aGVtIGNvbGxpZGUgb3ZlciwgYW5kIGFcbiAgICogdXNlciBiZWluZyBhc2tlZCB0byBkaXNhYmxlIHNvbWV0aGluZyBkZXNlcnZlcyB0byBiZSB0b2xkIHdoeS5cbiAgICovXG4gIHJlYWRvbmx5IHJlYXNvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0IHRoaXMgcGx1Z2luIGRvZXMgYWJvdXQgdGhlIGNvbmZsaWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2V2ZXJpdHk6IFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHk7XG59XG5cbi8qKlxuICogQSBwbHVnaW4gYW5vdGhlciBwbHVnaW4gY2Fubm90IHdvcmsgd2l0aG91dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5EZXBlbmRlbmN5IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgQVBJIGNvbnRyYWN0IHZlcnNpb25zIHRoZSBkZXBlbmRlbnQgY29tcGlsZWQgYWdhaW5zdCwgZS5nLiBgJ14yJ2AuXG4gICAqXG4gICAqIEEgZGVwZW5kZW5jeSB3aG9zZSBwdWJsaXNoZWQgQVBJIGZhbGxzIG91dHNpZGUgdGhlIHJhbmdlIGNvdW50cyBhcyBVTlNBVElTRklFRCwgd2hpY2ggaXMgd2hhdCB0dXJucyBhXG4gICAqIHNpbGVudCBiZWhhdmlvcmFsIG1pc21hdGNoIGJldHdlZW4gdHdvIGluZGVwZW5kZW50bHkgcmVsZWFzZWQgcGx1Z2lucyBpbnRvIGEgdmlzaWJsZSBcInVwZGF0ZSB0aGlzXG4gICAqIG9uZVwiIG1lc3NhZ2UuIFNwZWxsIFwiYW55IHZlcnNpb25cIiBhcyBgJz49MC4wLjAnYCBcdTIwMTQgYGNvbXBhcmUtdmVyc2lvbnNgIHJlamVjdHMgYSBiYXJlIGAqYC5cbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb25SYW5nZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcmVxdWlyZWQgcGx1Z2luLCBhcyBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcmVxdWlyZWQgcGx1Z2luLCBzaG93biB0byB0aGUgdXNlci5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQSBsb2NhbGl6ZWQgc2VudGVuY2Ugc2F5aW5nIHdoYXQgdGhlIGRlcGVuZGVudCBkb2VzIHdpdGggdGhpcyBwbHVnaW4sIHNob3duIGluIHRoZSBzZXR0aW5ncyBiYW5uZXIuXG4gICAqXG4gICAqIFRoZSBkZXBlbmRlbnQgb3ducyB0aGlzIHN0cmluZyBiZWNhdXNlIG9ubHkgaXQga25vd3Mgd2hhdCBpdCB1c2VzIHRoZSBvdGhlciBwbHVnaW4gZm9yLCBhbmQgYSB1c2VyXG4gICAqIGJlaW5nIGFza2VkIHRvIGluc3RhbGwgc29tZXRoaW5nIGRlc2VydmVzIHRvIGJlIHRvbGQgd2h5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBQbHVnaW5HYXRlQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5HYXRlQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbmZsaWN0cyB0byBlbmZvcmNlLiBBbiBlbXB0eSBsaXN0IG1lYW5zIHRoZSBwbHVnaW4gcmVmdXNlcyB0byBydW4gYmVzaWRlIG5vdGhpbmcuXG4gICAqL1xuICByZWFkb25seSBjb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W107XG5cbiAgLyoqXG4gICAqIFRoZSBkZXBlbmRlbmNpZXMgdG8gZW5mb3JjZS4gQW4gZW1wdHkgbGlzdCBtZWFucyB0aGUgcGx1Z2luIGRlcGVuZHMgb24gbm90aGluZywgYW5kIGl0cyBmZWF0dXJlXG4gICAqIHN1cmZhY2UgbG9hZHMgaW1tZWRpYXRlbHkuXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM6IHJlYWRvbmx5IFBsdWdpbkRlcGVuZGVuY3lbXTtcblxuICAvKipcbiAgICogTG9hZHMgdGhlIGhvc3QgcGx1Z2luJ3MgZmVhdHVyZSBzdXJmYWNlLiBDYWxsZWQgb25jZSBldmVyeSBkZXBlbmRlbmN5IGlzIHNhdGlzZmllZCBhbmQgbm8gYmxvY2tpbmdcbiAgICogY29uZmxpY3QgaG9sZHMsIGFuZCBhZ2FpbiBhZnRlciBhIGdhdGUgdGhhdCBoYWQgY2xvc2VkIG9wZW5zIGJhY2sgdXAuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc3VyZmFjZSBpcyBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBsb2FkRmVhdHVyZVN1cmZhY2U6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBob3N0IHBsdWdpbiBcdTIwMTQgdGhlIG9uZSBkZWNsYXJpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmxpY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW47XG5cbiAgLyoqXG4gICAqIFRoZSBob3N0IHBsdWdpbidzIG5vdGljZSBjb21wb25lbnQsIHVzZWQgdG8gc2F5IHdoYXQgaXMgbWlzc2luZywgd2hhdCBpcyBpbiB0aGUgd2F5LCBhbmQgd2hhdCBjaGFuZ2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFVubG9hZHMgdGhlIGhvc3QgcGx1Z2luJ3MgZmVhdHVyZSBzdXJmYWNlLiBDYWxsZWQgd2hlbiBhIGdhdGUgdGhhdCBoYWQgYmVlbiBvcGVuIGNsb3Nlcy5cbiAgICovXG4gIHJlYWRvbmx5IHVubG9hZEZlYXR1cmVTdXJmYWNlOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgQmxvY2tlZFBsdWdpblNldHRpbmdUYWJ9IGNvbnN0cnVjdG9yLlxuICovXG5pbnRlcmZhY2UgQmxvY2tlZFBsdWdpblNldHRpbmdUYWJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYmxvY2tlZCBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYmxvY2tlZCBleHBsYW5hdGlvbiBpbnRvIHRoZSB0YWIncyBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSB0YWIncyBjb250YWluZXIgZWxlbWVudC5cbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlckJhbm5lcjogKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgc2V0dGluZ3MgdGFiIGEgYmxvY2tlZCBwbHVnaW4gc2hvd3MgaW4gcGxhY2Ugb2YgdGhlIG9uZSBpdCBuZXZlciBnb3QgdG8gcmVnaXN0ZXIuXG4gKlxuICogQSBibG9ja2VkIHBsdWdpbidzIGBvbmxvYWRJbXBsYCBuZXZlciByYW4sIHNvIGl0cyByZWFsIHNldHRpbmdzIHRhYiBkb2VzIG5vdCBleGlzdCBcdTIwMTQgYW5kIGEgdXNlciB3aG8gZ29lc1xuICogbG9va2luZyBmb3IgdGhlIHBsdWdpbidzIHNldHRpbmdzIGlzIHByZWNpc2VseSB0aGUgdXNlciBhc2tpbmcgXCJ3aHkgaXNuJ3QgdGhpcyBkb2luZyBhbnl0aGluZz9cIi4gQW5cbiAqIGVtcHR5IHNwYWNlIGlzIHRoZSB3b3JzdCBwb3NzaWJsZSBhbnN3ZXIgdG8gdGhhdCBxdWVzdGlvbi5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvc2V0dGluZ3MtdGFiL3ByZWZlci1zZXR0aW5nLWRlZmluaXRpb25zIC0tIFRoaXMgdGFiIGhhcyBubyBzZXR0aW5ncyB0byBkZWNsYXJlLiBJdCBzdGFuZHMgaW4gZm9yIGEgc2V0dGluZ3MgdGFiIHRoYXQgZG9lcyBub3QgZXhpc3QgeWV0LCBjYXJyeWluZyBhbiBleHBsYW5hdGlvbiBhbmQgYSByZXBhaXIgYnV0dG9uLCBhbmQgdGhlIHBsdWdpbidzIHJlYWwgc2V0dGluZ3MgYXBwZWFyIHRoZSBtb21lbnQgdGhlIGdhdGUgb3BlbnMuXG5jbGFzcyBCbG9ja2VkUGx1Z2luU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlckJhbm5lcjogKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgQmxvY2tlZFBsdWdpblNldHRpbmdUYWJ9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBCbG9ja2VkUGx1Z2luU2V0dGluZ1RhYkNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zLnBsdWdpbi5hcHAsIHBhcmFtcy5wbHVnaW4pO1xuICAgIHRoaXMucmVuZGVyQmFubmVyID0gcGFyYW1zLnJlbmRlckJhbm5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSB0YWIuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZGlzcGxheSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG4gICAgdGhpcy5yZW5kZXJCYW5uZXIodGhpcy5jb250YWluZXJFbCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbmZvcmNlcyBhIHBsdWdpbidzIG1hbmRhdG9yeSBkZXBlbmRlbmNpZXMgYW5kIGRlY2xhcmVkIGNvbmZsaWN0cywgZ2F0aW5nIGl0cyBmZWF0dXJlIHN1cmZhY2Ugb24gYm90aC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkdhdGVDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYW5ub3VuY2VkV2FybmluZ1BsdWdpbklkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaVJlZnMgPSBuZXcgTWFwPHN0cmluZywgUGx1Z2luQXBpUmVmPG9iamVjdD4+KCk7XG4gIHByaXZhdGUgYmxvY2tlZFNldHRpbmdUYWI6IG51bGwgfCBQbHVnaW5TZXR0aW5nVGFiID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W107XG4gIHByaXZhdGUgaGFzQW5ub3VuY2VkQmxvY2tlZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzRmVhdHVyZVN1cmZhY2VMb2FkZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0xheW91dFJlYWR5ID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZEZlYXR1cmVTdXJmYWNlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIGxvc3NBbm5vdW5jZW1lbnRUaW1lcklkOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IFBsdWdpbk5vdGljZUNvbXBvbmVudDtcbiAgcHJpdmF0ZSByZWFkb25seSB1bmxvYWRGZWF0dXJlU3VyZmFjZTogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIGdldCBhcHAoKTogQXBwIHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW4uYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFBsdWdpbkdhdGVDb21wb25lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5HYXRlQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29uZmxpY3RzID0gcGFyYW1zLmNvbmZsaWN0cztcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IHBhcmFtcy5kZXBlbmRlbmNpZXM7XG4gICAgdGhpcy5sb2FkRmVhdHVyZVN1cmZhY2UgPSBwYXJhbXMubG9hZEZlYXR1cmVTdXJmYWNlO1xuICAgIHRoaXMucGx1Z2luID0gcGFyYW1zLnBsdWdpbjtcbiAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gICAgdGhpcy51bmxvYWRGZWF0dXJlU3VyZmFjZSA9IHBhcmFtcy51bmxvYWRGZWF0dXJlU3VyZmFjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXlzIHdoZXRoZXIgYW55IHdhcm5pbmcgY29uZmxpY3QgaXMgaW4gZm9yY2UgcmlnaHQgbm93LlxuICAgKlxuICAgKiBUaGUgcHJlZGljYXRlIGEgZGVjbGFyYXRpdmUgc2V0dGluZ3MgdGFiIG5lZWRzLCBhbmQgdGhlIGNvdW50ZXJwYXJ0IHRvXG4gICAqIGBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50LmdldFN1Z2dlc3RlZFBsdWdpblN0YXRlYC4gU3VjaCBhIHRhYiBkZWNpZGVzIHdoZXRoZXIgYSByb3cgZXhpc3RzXG4gICAqIEJFRk9SRSBpdCByZW5kZXJzIGFueXRoaW5nIGludG8gaXQsIHNvIHtAbGluayByZW5kZXJDb25mbGljdFdhcm5pbmdCYW5uZXJ9IHdyaXRpbmcgbm90aGluZyBjYW5ub3RcbiAgICogYW5zd2VyIHRoZSBxdWVzdGlvbiBmb3IgaXQgXHUyMDE0IGEgcm93IHRoYXQgcmVuZGVycyBlbXB0eSBpcyBzdGlsbCBhIHJvdywgd2l0aCB0aGUgZGl2aWRlciBhbmQgcGFkZGluZ1xuICAgKiBldmVyeSBvdGhlciBzZXR0aW5nIGhhcy5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciBhdCBsZWFzdCBvbmUgZGVjbGFyZWQgd2FybmluZyBjb25mbGljdCBob2xkcy5cbiAgICovXG4gIHB1YmxpYyBoYXNBY3RpdmVXYXJuaW5nQ29uZmxpY3RzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm4pLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHdhdGNoaW5nIGV2ZXJ5IGRlY2xhcmVkIGRlcGVuZGVuY3kgYW5kIGNvbmZsaWN0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgdGhpcy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGFwaVJlZiA9IHdhdGNoUGx1Z2luQXBpPG9iamVjdD4oe1xuICAgICAgICBhcGlWZXJzaW9uUmFuZ2U6IGRlcGVuZGVuY3kuYXBpVmVyc2lvblJhbmdlLFxuICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIHBsdWdpbklkOiBkZXBlbmRlbmN5LnBsdWdpbklkXG4gICAgICB9KTtcbiAgICAgIHJlZ2lzdGVyQXN5bmNFdmVudChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYXBpUmVmLm9uKCdjaGFuZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5hcGlSZWZzLnNldChkZXBlbmRlbmN5LnBsdWdpbklkLCBhcGlSZWYpO1xuICAgIH1cblxuICAgIC8vIEEgY29uZmxpY3QgaGFzIG5vIEFQSSB0byB3YXRjaCBcdTIwMTQgaXQgaXMgcmVhZCBvdXQgb2YgdGhlIG1hbmlmZXN0cyBcdTIwMTQgc28gdGhlIHRyaWdnZXIgdG8gcmUtcmVhZCBpcyB0aGVcbiAgICAvLyBsaWJyYXJ5J3Mgb3duIGxpZmVjeWNsZSBicm9hZGNhc3QuIEl0IGNvdmVycyBldmVyeSBjb25mbGljdGluZyBwbHVnaW4gYnVpbHQgb24gdGhpcyBsaWJyYXJ5OyBvbmVcbiAgICAvLyB0aGF0IGlzIG5vdCBpcyBjYXVnaHQgYXQgdGhlIG5leHQgbG9hZCwgYXMgdGhlIGZpbGUgaGVhZGVyIHNheXMuXG4gICAgY29uc3QgbGlmZWN5Y2xlRXZlbnROYW1lczogUGx1Z2luTGlmZWN5Y2xlRXZlbnROYW1lW10gPSBbUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLCBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRV07XG4gICAgZm9yIChjb25zdCBldmVudE5hbWUgb2YgbGlmZWN5Y2xlRXZlbnROYW1lcykge1xuICAgICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLndvcmtzcGFjZS5vbihcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKHBheWxvYWQ6IFBsdWdpbkxpZmVjeWNsZUV2ZW50UGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGlmIChwYXlsb2FkLnBsdWdpbklkID09PSB0aGlzLnBsdWdpbi5tYW5pZmVzdC5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9KVxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgLy8gTm90aGluZyBpcyBTQUlEIGFib3V0IGEgbWlzc2luZyBkZXBlbmRlbmN5IHVudGlsIHRoZSBsYXlvdXQgaXMgcmVhZHkuIFBsdWdpbnMgbG9hZCBpbiBhbiB1bnNwZWNpZmllZFxuICAgIC8vIG9yZGVyLCBzbyBhIGRlcGVuZGVuY3kgdGhhdCBzaW1wbHkgaGFzIG5vdCBsb2FkZWQgeWV0IGlzIGluZGlzdGluZ3Vpc2hhYmxlIGF0IHRoaXMgcG9pbnQgZnJvbSBvbmVcbiAgICAvLyB0aGF0IGlzIG5vdCBpbnN0YWxsZWQgXHUyMDE0IGFubm91bmNpbmcgaGVyZSB3b3VsZCBwdXQgYSBcIm1pc3NpbmcgcGx1Z2luXCIgbm90aWNlIG9uIHNjcmVlbiBhdCBldmVyeVxuICAgIC8vIHN0YXJ0dXAgYW5kIHRha2UgaXQgYXdheSBhIG1vbWVudCBsYXRlci4gVGhlIGdhdGUgaXRzZWxmIGRvZXMgbm90IHdhaXQ6IHRoZSBzdXJmYWNlIGxvYWRzIHRoZVxuICAgIC8vIGluc3RhbnQgdGhlIGRlcGVuZGVuY3kgaXMgdGhlcmUsIHdoZW5ldmVyIHRoYXQgaXMuXG4gICAgdGhpcy5hZGRDaGlsZChcbiAgICAgIG5ldyBDYWxsYmFja0xheW91dFJlYWR5Q29tcG9uZW50KHRoaXMuYXBwLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMYXlvdXRSZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlc2VudFVuc2F0aXNmaWVkKHRoaXMuZ2V0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMoKSwgdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5CbG9jaykpO1xuICAgICAgICB0aGlzLmFubm91bmNlV2FybmluZ3MoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5jYW5jZWxMb3NzQW5ub3VuY2VtZW50KCk7XG4gICAgICB0aGlzLmhpZGVCbG9ja2VkU2V0dGluZ1RhYigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyB0aGUgZ2F0ZSBvbmNlIHRoZSB3YXRjaGVzIGFyZSBpbiBwbGFjZSwgbG9hZGluZyB0aGUgZmVhdHVyZSBzdXJmYWNlIGlmIGl0IGlzIGFscmVhZHkgb3Blbi5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBmaXJzdCBldmFsdWF0aW9uIGlzIGNvbXBsZXRlLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBiYW5uZXIgZm9yIGV2ZXJ5IGNvbmZsaWN0IHRoZSBob3N0IGlzIHJ1bm5pbmcgYWxvbmdzaWRlLCBzbyBhIHBsdWdpbiBjYW4gcHV0IHRoZSBvdmVybGFwIGluXG4gICAqIGl0cyBvd24gc2V0dGluZ3MgdGFiLlxuICAgKlxuICAgKiBDb25zdW1lci1pbnZva2VkLCBleGFjdGx5IGxpa2UgYFBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnQucmVuZGVyQmFubmVyYDogdGhlIGxpYnJhcnkgcmVnaXN0ZXJzIHRoZVxuICAgKiBzZXR0aW5ncyB0YWIgYSBCTE9DS0VEIHBsdWdpbiBuZWVkcywgYmVjYXVzZSB0aGF0IHBsdWdpbiBuZXZlciBnb3QgdG8gcmVnaXN0ZXIgb25lIG9mIGl0cyBvd24sIGJ1dCBpdFxuICAgKiBoYXMgbm8gaG9vayBpbnRvIHRoZSB0YWIgYSBydW5uaW5nIHBsdWdpbiBidWlsZHMuIFJlbmRlcnMgbm90aGluZyB3aGVuIG5vIHdhcm5pbmcgY29uZmxpY3QgaG9sZHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKi9cbiAgcHVibGljIHJlbmRlckNvbmZsaWN0V2FybmluZ0Jhbm5lcihjb250YWluZXJFbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuV2FybikpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29uZmxpY3RFbnRyeShjb250YWluZXJFbCwgY29uZmxpY3QsIHRoaXMuY3JlYXRlQ29uZmxpY3RXYXJuaW5nTWVzc2FnZShjb25mbGljdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXlzIHdoYXQgd2VudCBhd2F5IHdoaWxlIHRoZSBwbHVnaW4gd2FzIHJ1bm5pbmcsIG5vdyB0aGF0IHRoZSBncmFjZSBwZXJpb2QgaXMgb3Zlci5cbiAgICpcbiAgICogUmUtcmVhZHMgdGhlIGdhdGUgcmF0aGVyIHRoYW4gdHJ1c3Rpbmcgd2hhdCBjbG9zZWQgaXQsIHNvIGEgZGVwZW5kZW5jeSB0aGF0IHdlbnQgYXdheSBkdXJpbmcgdGhlXG4gICAqIHdpbmRvdyBpcyBhbm5vdW5jZWQgd2l0aCB0aGUgcmVzdC4gT25lIHRoYXQgY2FtZSBiYWNrIGluIHRpbWUgbmV2ZXIgZ2V0cyBoZXJlOiB0aGUgZ2F0ZSByZW9wZW5pbmdcbiAgICogY2FuY2VscyB0aGUgdGltZXIuXG4gICAqL1xuICBwcml2YXRlIGFubm91bmNlTG9zcygpOiB2b2lkIHtcbiAgICB0aGlzLmxvc3NBbm5vdW5jZW1lbnRUaW1lcklkID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiB0aGlzLmdldFVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzKCkpIHtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UodGhpcy5jcmVhdGVEZXBlbmRlbmN5TG9zdE1lc3NhZ2UoZGVwZW5kZW5jeSkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5CbG9jaykpIHtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UodGhpcy5jcmVhdGVDb25mbGljdEFwcGVhcmVkTWVzc2FnZShjb25mbGljdCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYW5ub3VuY2VXYXJuaW5ncygpOiB2b2lkIHtcbiAgICAvLyBBIHdhcm5pbmcgZGVzY3JpYmVzIHR3byBwbHVnaW5zIHRoYXQgYXJlIGJvdGggUlVOTklORywgc28gaXQgaXMgcG9pbnRsZXNzIHdoaWxlIHRoaXMgb25lIGlzIGJsb2NrZWRcbiAgICAvLyBcdTIwMTQgYW5kIGl0IHdhaXRzIGZvciBsYXlvdXQtcmVhZHkgZm9yIHRoZSBzYW1lIHJlYXNvbiB0aGUgYmxvY2tlZCBub3RpY2UgZG9lcy5cbiAgICBpZiAoIXRoaXMuaXNMYXlvdXRSZWFkeSB8fCAhdGhpcy5pc0ZlYXR1cmVTdXJmYWNlTG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb25mbGljdCBvZiB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm4pKSB7XG4gICAgICBpZiAodGhpcy5hbm5vdW5jZWRXYXJuaW5nUGx1Z2luSWRzLmhhcyhjb25mbGljdC5wbHVnaW5JZCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYW5ub3VuY2VkV2FybmluZ1BsdWdpbklkcy5hZGQoY29uZmxpY3QucGx1Z2luSWQpO1xuICAgICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZSh0aGlzLmNyZWF0ZUNvbmZsaWN0V2FybmluZ01lc3NhZ2UoY29uZmxpY3QpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhbmNlbExvc3NBbm5vdW5jZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubG9zc0Fubm91bmNlbWVudFRpbWVySWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMubG9zc0Fubm91bmNlbWVudFRpbWVySWQpO1xuICAgIHRoaXMubG9zc0Fubm91bmNlbWVudFRpbWVySWQgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCbG9ja2VkTWVzc2FnZShkZXBlbmRlbmN5OiBQbHVnaW5EZXBlbmRlbmN5KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkRlcGVuZGVuY3kuYmxvY2tlZE5vdGljZSwge1xuICAgICAgZGVwZW5kZW5jeVBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKGRlcGVuZGVuY3kucGx1Z2luTmFtZSksXG4gICAgICBwbHVnaW5OYW1lOiBhc0NvZGVCbG9jayh0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29uZmxpY3RBcHBlYXJlZE1lc3NhZ2UoY29uZmxpY3Q6IFBsdWdpbkNvbmZsaWN0KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkNvbmZsaWN0LmNvbmZsaWN0QXBwZWFyZWROb3RpY2UsIHtcbiAgICAgIGNvbmZsaWN0aW5nUGx1Z2luTmFtZTogYXNDb2RlQmxvY2soY29uZmxpY3QucGx1Z2luTmFtZSksXG4gICAgICBwbHVnaW5OYW1lOiBhc0NvZGVCbG9jayh0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29uZmxpY3RCbG9ja2VkTWVzc2FnZShjb25mbGljdDogUGx1Z2luQ29uZmxpY3QpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luQ29uZmxpY3QuYmxvY2tlZE5vdGljZSwge1xuICAgICAgY29uZmxpY3RpbmdQbHVnaW5OYW1lOiBhc0NvZGVCbG9jayhjb25mbGljdC5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb25mbGljdFdhcm5pbmdNZXNzYWdlKGNvbmZsaWN0OiBQbHVnaW5Db25mbGljdCk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC53YXJuaW5nTm90aWNlLCB7XG4gICAgICBjb25mbGljdGluZ1BsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKGNvbmZsaWN0LnBsdWdpbk5hbWUpLFxuICAgICAgcGx1Z2luTmFtZTogYXNDb2RlQmxvY2sodGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlcGVuZGVuY3lMb3N0TWVzc2FnZShkZXBlbmRlbmN5OiBQbHVnaW5EZXBlbmRlbmN5KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkRlcGVuZGVuY3kuZGVwZW5kZW5jeUxvc3ROb3RpY2UsIHtcbiAgICAgIGRlcGVuZGVuY3lQbHVnaW5OYW1lOiBhc0NvZGVCbG9jayhkZXBlbmRlbmN5LnBsdWdpbk5hbWUpLFxuICAgICAgcGx1Z2luTmFtZTogYXNDb2RlQmxvY2sodGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZSlcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGRlY2xhcmVkIGNvbmZsaWN0cyBvZiBvbmUgc2V2ZXJpdHkgdGhhdCBhcmUgY3VycmVudGx5IGluIGZvcmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2V2ZXJpdHkgLSBUaGUgc2V2ZXJpdHkgdG8gc2VsZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgY29uZmxpY3RzIGhvbGRpbmcgcmlnaHQgbm93LCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGRlY2xhcmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBY3RpdmVDb25mbGljdHMoc2V2ZXJpdHk6IFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkpOiBQbHVnaW5Db25mbGljdFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25mbGljdHMuZmlsdGVyKChjb25mbGljdCkgPT4gY29uZmxpY3Quc2V2ZXJpdHkgPT09IHNldmVyaXR5ICYmIHRoaXMuaXNDb25mbGljdEFjdGl2ZShjb25mbGljdCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVbnNhdGlzZmllZERlcGVuZGVuY2llcygpOiBQbHVnaW5EZXBlbmRlbmN5W10ge1xuICAgIHJldHVybiB0aGlzLmRlcGVuZGVuY2llcy5maWx0ZXIoKGRlcGVuZGVuY3kpID0+ICF0aGlzLmFwaVJlZnMuZ2V0KGRlcGVuZGVuY3kucGx1Z2luSWQpPy52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVCbG9ja2VkU2V0dGluZ1RhYigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYmxvY2tlZFNldHRpbmdUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFwcC5zZXR0aW5nLnJlbW92ZVNldHRpbmdUYWIodGhpcy5ibG9ja2VkU2V0dGluZ1RhYik7XG4gICAgdGhpcy5ibG9ja2VkU2V0dGluZ1RhYiA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRGVjaWRlcyB3aGV0aGVyIG9uZSBkZWNsYXJlZCBjb25mbGljdCBpcyBpbiBmb3JjZSByaWdodCBub3cuXG4gICAqXG4gICAqIE9ubHkgYW4gRU5BQkxFRCBwbHVnaW4gY291bnRzLiBPbmUgdGhhdCBpcyBpbnN0YWxsZWQgYnV0IHN3aXRjaGVkIG9mZiByZWdpc3RlcnMgbm90aGluZywgc28gaXQgY2Fubm90XG4gICAqIGNvbGxpZGUsIGFuZCBhY3Rpbmcgb24gaXQgd291bGQgYmUgYW4gYWxhcm0gdGhlIHVzZXIgY2FuIG9ubHkgYW5zd2VyIGJ5IHVuaW5zdGFsbGluZyBzb21ldGhpbmcgdGhleVxuICAgKiBoYXZlIGFscmVhZHkgdHVybmVkIG9mZi5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZsaWN0IC0gVGhlIGRlY2xhcmVkIGNvbmZsaWN0LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb25mbGljdGluZyBwbHVnaW4gaXMgZW5hYmxlZCBhdCBhIGNvbmZsaWN0aW5nIHZlcnNpb24uXG4gICAqL1xuICBwcml2YXRlIGlzQ29uZmxpY3RBY3RpdmUoY29uZmxpY3Q6IFBsdWdpbkNvbmZsaWN0KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5zdGFsbGVkVmVyc2lvbiA9IGdldEluc3RhbGxlZFBsdWdpblZlcnNpb24oe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIHBsdWdpbklkOiBjb25mbGljdC5wbHVnaW5JZFxuICAgIH0pO1xuXG4gICAgaWYgKGluc3RhbGxlZFZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHNhdGlzZmllc1ZlcnNpb24oaW5zdGFsbGVkVmVyc2lvbiwgY29uZmxpY3QuY29uZmxpY3RpbmdWZXJzaW9uUmFuZ2UpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNheXMgd2hhdCBpcyBpbiB0aGUgd2F5LCBhbmQgcHV0cyB0aGUgc2FtZSBleHBsYW5hdGlvbiB3aGVyZSB0aGUgdXNlciB3aWxsIGxvb2sgZm9yIHRoZSBwbHVnaW4nc1xuICAgKiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzIC0gVGhlIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3QgY3VycmVudGx5IHNhdGlzZmllZC5cbiAgICogQHBhcmFtIGJsb2NraW5nQ29uZmxpY3RzIC0gVGhlIGNvbmZsaWN0cyBjdXJyZW50bHkgcmVmdXNpbmcgdGhlIHBsdWdpbiB0aGUgcmlnaHQgdG8gcnVuLlxuICAgKi9cbiAgcHJpdmF0ZSBwcmVzZW50VW5zYXRpc2ZpZWQoXG4gICAgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXM6IHJlYWRvbmx5IFBsdWdpbkRlcGVuZGVuY3lbXSxcbiAgICBibG9ja2luZ0NvbmZsaWN0czogcmVhZG9ubHkgUGx1Z2luQ29uZmxpY3RbXVxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNMYXlvdXRSZWFkeSB8fCAodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMubGVuZ3RoID09PSAwICYmIGJsb2NraW5nQ29uZmxpY3RzLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dCbG9ja2VkU2V0dGluZ1RhYih1bnNhdGlzZmllZERlcGVuZGVuY2llcywgYmxvY2tpbmdDb25mbGljdHMpO1xuXG4gICAgaWYgKHRoaXMuaGFzQW5ub3VuY2VkQmxvY2tlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaGFzQW5ub3VuY2VkQmxvY2tlZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzKSB7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHRoaXMuY3JlYXRlQmxvY2tlZE1lc3NhZ2UoZGVwZW5kZW5jeSkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgYmxvY2tpbmdDb25mbGljdHMpIHtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UodGhpcy5jcmVhdGVDb25mbGljdEJsb2NrZWRNZXNzYWdlKGNvbmZsaWN0KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLWV2YWx1YXRlcyB0aGUgZ2F0ZSBhbmQgbW92ZXMgdGhlIGZlYXR1cmUgc3VyZmFjZSB0byBtYXRjaC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzdXJmYWNlIG1hdGNoZXMgdGhlIGdhdGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMgPSB0aGlzLmdldFVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzKCk7XG4gICAgY29uc3QgYmxvY2tpbmdDb25mbGljdHMgPSB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5LkJsb2NrKTtcblxuICAgIGlmICh1bnNhdGlzZmllZERlcGVuZGVuY2llcy5sZW5ndGggPT09IDAgJiYgYmxvY2tpbmdDb25mbGljdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNhbmNlbExvc3NBbm5vdW5jZW1lbnQoKTtcbiAgICAgIHRoaXMuaGlkZUJsb2NrZWRTZXR0aW5nVGFiKCk7XG4gICAgICB0aGlzLmhhc0Fubm91bmNlZEJsb2NrZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKCF0aGlzLmlzRmVhdHVyZVN1cmZhY2VMb2FkZWQpIHtcbiAgICAgICAgdGhpcy5pc0ZlYXR1cmVTdXJmYWNlTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkRmVhdHVyZVN1cmZhY2UoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbm5vdW5jZVdhcm5pbmdzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCkge1xuICAgICAgdGhpcy5pc0ZlYXR1cmVTdXJmYWNlTG9hZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnVubG9hZEZlYXR1cmVTdXJmYWNlKCk7XG5cbiAgICAgIC8vIEEgZ2F0ZSB0aGF0IGNsb3NlcyB3aGlsZSB0aGUgcGx1Z2luIGlzIFJVTk5JTkcgaXMgdGhlIGNhc2Ugd29ydGggYmVpbmcgbG91ZCBhYm91dDogdGhlIHVzZXIganVzdFxuICAgICAgLy8gZGlkIHNvbWV0aGluZywgYW5kIHRoZSBjb25zZXF1ZW5jZSBpcyBpbW1lZGlhdGUgYW5kIGludmlzaWJsZSB3aXRob3V0IHRoaXMuIEFubm91bmNlZCByZWdhcmRsZXNzXG4gICAgICAvLyBvZiBsYXlvdXQgcmVhZGluZXNzLCBiZWNhdXNlIGEgcnVubmluZyBwbHVnaW4gbWVhbnMgdGhlIGxheW91dCBpcyBsb25nIHNpbmNlIHJlYWR5IFx1MjAxNCBidXQgb25seVxuICAgICAgLy8gb25jZSB0aGUgZ3JhY2UgcGVyaW9kIGhhcyBzaG93biB0aGUgbG9zcyBpcyBub3QgYW4gdXBkYXRlIHJlbG9hZGluZyB0aGUgcHJvdmlkZXIgKHNlZSB0aGUgZmlsZVxuICAgICAgLy8gaGVhZGVyKS5cbiAgICAgIHRoaXMubG9zc0Fubm91bmNlbWVudFRpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYW5ub3VuY2VMb3NzKCk7XG4gICAgICB9LCBMT1NTX0FOTk9VTkNFTUVOVF9HUkFDRV9QRVJJT0RfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgICAgdGhpcy5oYXNBbm5vdW5jZWRCbG9ja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvd0Jsb2NrZWRTZXR0aW5nVGFiKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLCBibG9ja2luZ0NvbmZsaWN0cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcmVzZW50VW5zYXRpc2ZpZWQodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMsIGJsb2NraW5nQ29uZmxpY3RzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBibG9ja2VkIGV4cGxhbmF0aW9uIGludG8gYSBzZXR0aW5ncy10YWIgY29udGFpbmVyOiB3aGF0IGlzIG1pc3Npbmcgb3IgaW4gdGhlIHdheSwgd2h5IGl0XG4gICAqIG1hdHRlcnMsIGFuZCB0aGUgYnV0dG9uIHRoYXQgZml4ZXMgaXQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcGFyYW0gdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMgLSBUaGUgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgc2F0aXNmaWVkLlxuICAgKiBAcGFyYW0gYmxvY2tpbmdDb25mbGljdHMgLSBUaGUgY29uZmxpY3RzIGN1cnJlbnRseSByZWZ1c2luZyB0aGUgcGx1Z2luIHRoZSByaWdodCB0byBydW4uXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckJsb2NrZWRCYW5uZXIoXG4gICAgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LFxuICAgIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W10sXG4gICAgYmxvY2tpbmdDb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W11cbiAgKTogdm9pZCB7XG4gICAgaWYgKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkRlcGVuZGVuY3kuc2V0dGluZ3NIZWFkaW5nKSB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGJhbm5lckVsID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHtcbiAgICAgICAgY2xzOiBbQ3NzQ2xhc3MuTGlicmFyeU5hbWUsIENzc0NsYXNzLlBsdWdpbkRlcGVuZGVuY3lCYW5uZXJdXG4gICAgICB9KTtcbiAgICAgIGJhbm5lckVsLmFwcGVuZCh0aGlzLmNyZWF0ZUJsb2NrZWRNZXNzYWdlKGRlcGVuZGVuY3kpKTtcbiAgICAgIGJhbm5lckVsLmNyZWF0ZURpdih7IHRleHQ6IGRlcGVuZGVuY3kucmVhc29uIH0pO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IGdldEluc3RhbGxlZFBsdWdpblN0YXRlKHtcbiAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgcGx1Z2luSWQ6IGRlcGVuZGVuY3kucGx1Z2luSWRcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJhbm5lckVsKVxuICAgICAgICAuc2V0QnV0dG9uVGV4dCh0KCgkKSA9PlxuICAgICAgICAgIHN0YXRlID09PSBJbnN0YWxsZWRQbHVnaW5TdGF0ZS5JbnN0YWxsZWRCdXREaXNhYmxlZFxuICAgICAgICAgICAgPyAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luU3VnZ2VzdGlvbi5lbmFibGVcbiAgICAgICAgICAgIDogJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpblN1Z2dlc3Rpb24uaW5zdGFsbFxuICAgICAgICApKVxuICAgICAgICAuc2V0Q3RhKClcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luKHtcbiAgICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgICBwbHVnaW5JZDogZGVwZW5kZW5jeS5wbHVnaW5JZCxcbiAgICAgICAgICAgIHBsdWdpbk5hbWU6IGRlcGVuZGVuY3kucGx1Z2luTmFtZSxcbiAgICAgICAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAvLyBUaGUgbGluayBPVVQgdG8gdGhlIGRlcGVuZGVuY3kncyBvd24gc2V0dGluZ3MsIHNob3duIG9ubHkgb25jZSBpdCBpcyBpbnN0YWxsZWQgYW5kIGVuYWJsZWQgXHUyMDE0IHRoZVxuICAgICAgLy8gb3RoZXIgaGFsZiBvZiB0aGUgcmVsYXRpb25zaGlwIGJlaW5nIHZpc2libGUgZnJvbSBib3RoIGVuZHMuIEl0IGlzIHdoYXQgc3RvcHMgXCJjb25maWd1cmUgb25lXG4gICAgICAvLyBvcGVyYXRpb24gYWNyb3NzIHR3byBwbHVnaW5zXCIgZnJvbSBtZWFuaW5nIFwiZ28gYW5kIGZpbmQgdGhlIG90aGVyIHBsdWdpbiB5b3Vyc2VsZlwiLlxuICAgICAgaWYgKHN0YXRlICE9PSBJbnN0YWxsZWRQbHVnaW5TdGF0ZS5FbmFibGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbmRlck9wZW5TZXR0aW5nc0J1dHRvbihiYW5uZXJFbCwgZGVwZW5kZW5jeS5wbHVnaW5JZCwgZGVwZW5kZW5jeS5wbHVnaW5OYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoYmxvY2tpbmdDb25mbGljdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luQ29uZmxpY3Quc2V0dGluZ3NIZWFkaW5nKSB9KTtcblxuICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgYmxvY2tpbmdDb25mbGljdHMpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29uZmxpY3RFbnRyeShjb250YWluZXJFbCwgY29uZmxpY3QsIHRoaXMuY3JlYXRlQ29uZmxpY3RCbG9ja2VkTWVzc2FnZShjb25mbGljdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIG9uZSBjb25mbGljdDogd2hhdCBpdCBpcywgd2h5IGl0IG1hdHRlcnMsIGFuZCB0aGUgdHdvIHdheXMgb3V0IG9mIGl0LlxuICAgKlxuICAgKiBUaGUgcmVwYWlyIGlzIG9mZmVyZWQgb24gdGhlIE9USEVSIHBsdWdpbiBcdTIwMTQgZGlzYWJsaW5nIGl0IGlzIHRoZSBvbmUgdGhpbmcgdGhpcyBwbHVnaW4gY2FuIGRvIGluIGFcbiAgICogY2xpY2ssIHNpbmNlIGl0IGNhbm5vdCB1cGRhdGUgc29tZW9uZSBlbHNlJ3MgcGx1Z2luIFx1MjAxNCBhbmQgaXQgaXMgdGhlIHBlcnNpc3RlZCBgZGlzYWJsZVBsdWdpbkFuZFNhdmVgXG4gICAqIHJhdGhlciB0aGFuIHRoZSB0cmFuc2llbnQgZGlzYWJsZSwgYmVjYXVzZSB0aGUgdXNlciBhc2tlZCBmb3IgaXQgYnkgY2xpY2tpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcGFyYW0gY29uZmxpY3QgLSBUaGUgY29uZmxpY3QgdG8gcmVuZGVyLlxuICAgKiBAcGFyYW0gbWVzc2FnZUZyYWdtZW50IC0gVGhlIHNlbnRlbmNlIGV4cGxhaW5pbmcgdGhlIGNvbmZsaWN0LlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJDb25mbGljdEVudHJ5KGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgY29uZmxpY3Q6IFBsdWdpbkNvbmZsaWN0LCBtZXNzYWdlRnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBiYW5uZXJFbCA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdih7XG4gICAgICBjbHM6IFtDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuUGx1Z2luQ29uZmxpY3RCYW5uZXJdXG4gICAgfSk7XG4gICAgYmFubmVyRWwuYXBwZW5kKG1lc3NhZ2VGcmFnbWVudCk7XG4gICAgYmFubmVyRWwuY3JlYXRlRGl2KHsgdGV4dDogY29uZmxpY3QucmVhc29uIH0pO1xuXG4gICAgbmV3IEJ1dHRvbkNvbXBvbmVudChiYW5uZXJFbClcbiAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5kaXNhYmxlLCB7IGNvbmZsaWN0aW5nUGx1Z2luTmFtZTogY29uZmxpY3QucGx1Z2luTmFtZSB9KSlcbiAgICAgIC5zZXRDdGEoKVxuICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbih7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5JZDogY29uZmxpY3QucGx1Z2luSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgICAgfSkpO1xuXG4gICAgdGhpcy5yZW5kZXJPcGVuU2V0dGluZ3NCdXR0b24oYmFubmVyRWwsIGNvbmZsaWN0LnBsdWdpbklkLCBjb25mbGljdC5wbHVnaW5OYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyT3BlblNldHRpbmdzQnV0dG9uKGJhbm5lckVsOiBIVE1MRWxlbWVudCwgcGx1Z2luSWQ6IHN0cmluZywgcGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbmV3IEJ1dHRvbkNvbXBvbmVudChiYW5uZXJFbClcbiAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5Lm9wZW5EZXBlbmRlbmN5U2V0dGluZ3MsIHtcbiAgICAgICAgZGVwZW5kZW5jeVBsdWdpbk5hbWU6IHBsdWdpbk5hbWVcbiAgICAgIH0pKVxuICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcC5zZXR0aW5nLm9wZW4oKTtcbiAgICAgICAgdGhpcy5hcHAuc2V0dGluZy5vcGVuVGFiQnlJZChwbHVnaW5JZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Jsb2NrZWRTZXR0aW5nVGFiKFxuICAgIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W10sXG4gICAgYmxvY2tpbmdDb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W11cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmxvY2tlZFNldHRpbmdUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZGRlZCB0aHJvdWdoIGBhcHAuc2V0dGluZ2AgcmF0aGVyIHRoYW4gYHBsdWdpbi5hZGRTZXR0aW5nVGFiYCwgYmVjYXVzZSB0aGlzIHRhYiBoYXMgdG8gY29tZSBiYWNrXG4gICAgLy8gT0ZGIGFnYWluIHRoZSBtb21lbnQgdGhlIGdhdGUgb3BlbnMgXHUyMDE0IG90aGVyd2lzZSB0aGUgcGx1Z2luJ3Mgb3duIHNldHRpbmdzIHRhYiwgcmVnaXN0ZXJlZCBieVxuICAgIC8vIGBvbmxvYWRJbXBsYCwgd291bGQgYXBwZWFyIGJlc2lkZSBhIHN0YWxlIFwicmVxdWlyZWQgcGx1Z2luIG1pc3NpbmdcIiBvbmUuIGBwbHVnaW4uYWRkU2V0dGluZ1RhYmBcbiAgICAvLyBvbmx5IGV2ZXIgcmVtb3ZlcyBhdCBwbHVnaW4gdW5sb2FkLlxuICAgIGNvbnN0IGJsb2NrZWRTZXR0aW5nVGFiID0gbmV3IEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFiKHtcbiAgICAgIHBsdWdpbjogdGhpcy5wbHVnaW4sXG4gICAgICByZW5kZXJCYW5uZXI6IChjb250YWluZXJFbCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlckJsb2NrZWRCYW5uZXIoY29udGFpbmVyRWwsIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLCBibG9ja2luZ0NvbmZsaWN0cyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hcHAuc2V0dGluZy5hZGRTZXR0aW5nVGFiKGJsb2NrZWRTZXR0aW5nVGFiKTtcbiAgICB0aGlzLmJsb2NrZWRTZXR0aW5nVGFiID0gYmxvY2tlZFNldHRpbmdUYWI7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEZBLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsYUFBYSx3QkFBd0I7QUFDOUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFTUCxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLGdCQUFnQjtBQUN6QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsU0FBUztBQUNsQixTQUFTLHNCQUFzQjtBQUMvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFB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QUM7QUFFaEcsZUFBVyxZQUFZLG1CQUFtQjtBQUN4QyxXQUFLLG9CQUFvQixhQUFhLFVBQVUsS0FBSyw2QkFBNkIsUUFBUSxDQUFDO0FBQUEsSUFDN0Y7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBYVEsb0JBQW9CLGFBQTBCLFVBQTBCLGlCQUF5QztBQUN2SCxVQUFNLFdBQVcsWUFBWSxVQUFVO0FBQUEsTUFDckMsS0FBSyxDQUFDLFNBQVMsYUFBYSxTQUFTLG9CQUFvQjtBQUFBLElBQzNELENBQUM7QUFDRCxhQUFTLE9BQU8sZUFBZTtBQUMvQixhQUFTLFVBQVUsRUFBRSxNQUFNLFNBQVMsT0FBTyxDQUFDO0FBRTVDLFFBQUksZ0JBQWdCLFFBQVEsRUFDekIsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQixlQUFlLFNBQVMsRUFBRSx1QkFBdUIsU0FBUyxXQUFXLENBQUMsQ0FBQyxFQUNqSCxPQUFPLEVBQ1AsUUFBUSxtQkFBbUIsWUFBWTtBQUN0QyxZQUFNLHVCQUF1QjtBQUFBLFFBQzNCLEtBQUssS0FBSztBQUFBLFFBQ1YsVUFBVSxTQUFTO0FBQUEsTUFDckIsQ0FBQztBQUNELFlBQU0sS0FBSyxRQUFRO0FBQUEsSUFDckIsQ0FBQyxDQUFDO0FBRUosU0FBSyx5QkFBeUIsVUFBVSxTQUFTLFVBQVUsU0FBUyxVQUFVO0FBQUEsRUFDaEY7QUFBQSxFQUVRLHlCQUF5QixVQUF1QixVQUFrQixZQUEwQjtBQUNsRyxRQUFJLGdCQUFnQixRQUFRLEVBQ3pCLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsaUJBQWlCLHdCQUF3QjtBQUFBLE1BQ2xGLHNCQUFzQjtBQUFBLElBQ3hCLENBQUMsQ0FBQyxFQUNELFFBQVEsTUFBTTtBQUNiLFdBQUssSUFBSSxRQUFRLEtBQUs7QUFDdEIsV0FBSyxJQUFJLFFBQVEsWUFBWSxRQUFRO0FBQUEsSUFDdkMsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUVRLHNCQUNOLHlCQUNBLG1CQUNNO0FBQ04sUUFBSSxLQUFLLG1CQUFtQjtBQUMxQjtBQUFBLElBQ0Y7QUFNQSxVQUFNLG9CQUFvQixJQUFJLHdCQUF3QjtBQUFBLE1BQ3BELFFBQVEsS0FBSztBQUFBLE1BQ2IsY0FBYyxDQUFDLGdCQUFzQjtBQUNuQyxhQUFLLG9CQUFvQixhQUFhLHlCQUF5QixpQkFBaUI7QUFBQSxNQUNsRjtBQUFBLElBQ0YsQ0FBQztBQUNELFNBQUssSUFBSSxRQUFRLGNBQWMsaUJBQWlCO0FBQ2hELFNBQUssb0JBQW9CO0FBQUEsRUFDM0I7QUFDRjsiLAogICJuYW1lcyI6IFsiUGx1Z2luQ29uZmxpY3RTZXZlcml0eSJdCn0K
|
|
@@ -310,6 +310,9 @@ export declare class PluginNoticeComponent extends ComponentEx {
|
|
|
310
310
|
* Builds the notice content, prefixing the message with the plugin name in a styled element so it is
|
|
311
311
|
* visually distinguished from the message body.
|
|
312
312
|
*
|
|
313
|
+
* The name is rendered as inline code, the way every plugin name in the UI is, inside a span that keeps
|
|
314
|
+
* the prefix's own layout and accent color.
|
|
315
|
+
*
|
|
313
316
|
* @param message - The message to display after the plugin name prefix.
|
|
314
317
|
* @returns A {@link DocumentFragment} with the styled plugin name prefix followed by the message.
|
|
315
318
|
*/
|