@mnaoumov/obsidian-lib 3.3.0 → 3.4.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 +6 -0
- package/dist/lib/cjs/@types/i18next.d.cts +1 -1
- package/dist/lib/cjs/@types/obsidian-integration-testing.d.cts +3 -3
- package/dist/lib/cjs/@types/original-fs.d.cts +2 -1
- package/dist/lib/cjs/__merged.cjs +2 -21
- package/dist/lib/cjs/__merged.d.cts +1 -1
- package/dist/lib/cjs/active-file-provider.cjs +1 -47
- package/dist/lib/cjs/active-file-provider.d.cts +1 -1
- package/dist/lib/cjs/app.cjs +1 -47
- package/dist/lib/cjs/app.d.cts +1 -1
- package/dist/lib/cjs/async-with-notice.cjs +2 -21
- package/dist/lib/cjs/async-with-notice.d.cts +2 -1
- package/dist/lib/cjs/attachment-path.cjs +2 -21
- package/dist/lib/cjs/attachment-path.d.cts +1 -1
- package/dist/lib/cjs/attachment-unit-folder.cjs +2 -21
- package/dist/lib/cjs/attachment-unit-folder.d.cts +1 -1
- package/dist/lib/cjs/backlink-index.cjs +2 -21
- package/dist/lib/cjs/backlink-index.d.cts +1 -1
- package/dist/lib/cjs/backlink.cjs +2 -21
- package/dist/lib/cjs/backlink.d.cts +1 -1
- package/dist/lib/cjs/bases-view-registrar.cjs +2 -21
- package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
- package/dist/lib/cjs/callout.cjs +2 -21
- package/dist/lib/cjs/callout.d.cts +2 -1
- package/dist/lib/cjs/canvas.cjs +2 -21
- package/dist/lib/cjs/canvas.d.cts +1 -1
- package/dist/lib/cjs/case-insensitive-file-index.cjs +2 -21
- package/dist/lib/cjs/case-insensitive-file-index.d.cts +1 -1
- package/dist/lib/cjs/code-block-markdown-information.cjs +1 -47
- package/dist/lib/cjs/code-block-markdown-information.d.cts +1 -1
- package/dist/lib/cjs/code-block-reg-exp.cjs +1 -47
- package/dist/lib/cjs/code-block-reg-exp.d.cts +1 -1
- package/dist/lib/cjs/codemirror/index.cjs +2 -48
- package/dist/lib/cjs/codemirror/index.d.cts +1 -1
- package/dist/lib/cjs/codemirror/state-field-spec.cjs +1 -47
- package/dist/lib/cjs/codemirror/state-field-spec.d.cts +1 -1
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +2 -21
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +1 -1
- package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -21
- package/dist/lib/cjs/command-handlers/command-handler-component.d.cts +1 -1
- package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -21
- package/dist/lib/cjs/command-handlers/command-handler.d.cts +1 -1
- package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +2 -21
- package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +1 -1
- package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -24
- package/dist/lib/cjs/command-handlers/file-command-handler.d.cts +1 -1
- package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -24
- package/dist/lib/cjs/command-handlers/folder-command-handler.d.cts +1 -1
- package/dist/lib/cjs/command-handlers/global-command-handler.cjs +3 -22
- package/dist/lib/cjs/command-handlers/global-command-handler.d.cts +1 -1
- package/dist/lib/cjs/command-handlers/index.cjs +11 -57
- package/dist/lib/cjs/command-handlers/index.d.cts +1 -1
- package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -21
- package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.d.cts +1 -1
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +1 -47
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.d.cts +1 -1
- package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -47
- package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.d.cts +1 -1
- package/dist/lib/cjs/command-registrar.cjs +1 -47
- package/dist/lib/cjs/command-registrar.d.cts +1 -1
- package/dist/lib/cjs/community-plugins.cjs +2 -21
- package/dist/lib/cjs/community-plugins.d.cts +1 -1
- package/dist/lib/cjs/components/abort-signal-component.cjs +2 -21
- package/dist/lib/cjs/components/abort-signal-component.d.cts +2 -1
- package/dist/lib/cjs/components/all-windows-event-component.cjs +1 -47
- package/dist/lib/cjs/components/all-windows-event-component.d.cts +2 -1
- package/dist/lib/cjs/components/async-error-handler-component.cjs +2 -21
- package/dist/lib/cjs/components/async-error-handler-component.d.cts +1 -1
- package/dist/lib/cjs/components/async-events-component.cjs +2 -21
- package/dist/lib/cjs/components/async-events-component.d.cts +1 -1
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +1 -47
- package/dist/lib/cjs/components/case-insensitive-file-index-component.d.cts +1 -1
- package/dist/lib/cjs/components/component-ex.cjs +3 -16
- package/dist/lib/cjs/components/component-ex.d.cts +1 -1
- package/dist/lib/cjs/components/console-debug-component.cjs +2 -21
- package/dist/lib/cjs/components/console-debug-component.d.cts +2 -2
- package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -21
- package/dist/lib/cjs/components/core-plugin-toggle-component.d.cts +1 -1
- package/dist/lib/cjs/components/disposable-component.cjs +3 -16
- package/dist/lib/cjs/components/disposable-component.d.cts +1 -1
- package/dist/lib/cjs/components/embed-extensions-component.cjs +1 -47
- package/dist/lib/cjs/components/embed-extensions-component.d.cts +1 -1
- package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +1 -47
- package/dist/lib/cjs/components/generate-markdown-link-default-params-component.d.cts +1 -1
- package/dist/lib/cjs/components/index.cjs +30 -76
- package/dist/lib/cjs/components/index.d.cts +1 -1
- package/dist/lib/cjs/components/layout-ready-component.cjs +2 -21
- package/dist/lib/cjs/components/layout-ready-component.d.cts +1 -1
- package/dist/lib/cjs/components/menu-event-registrar-component.cjs +1 -47
- package/dist/lib/cjs/components/menu-event-registrar-component.d.cts +1 -1
- package/dist/lib/cjs/components/monkey-around-component.cjs +2 -21
- package/dist/lib/cjs/components/monkey-around-component.d.cts +1 -1
- package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +2 -21
- package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.d.cts +1 -1
- package/dist/lib/cjs/components/plugin-context-component.cjs +2 -21
- package/dist/lib/cjs/components/plugin-context-component.d.cts +1 -1
- package/dist/lib/cjs/components/plugin-gate-component.cjs +2 -21
- package/dist/lib/cjs/components/plugin-gate-component.d.cts +2 -1
- package/dist/lib/cjs/components/plugin-notice-component.cjs +3 -16
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +2 -1
- package/dist/lib/cjs/components/plugin-settings-component.cjs +2 -21
- package/dist/lib/cjs/components/plugin-settings-component.d.cts +1 -1
- package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -21
- package/dist/lib/cjs/components/plugin-settings-tab-component.d.cts +1 -1
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +2 -21
- package/dist/lib/cjs/components/plugin-suggestion-component.d.cts +2 -1
- package/dist/lib/cjs/components/pointer-position-component.cjs +1 -47
- package/dist/lib/cjs/components/pointer-position-component.d.cts +1 -1
- package/dist/lib/cjs/components/registry-component.cjs +2 -21
- package/dist/lib/cjs/components/registry-component.d.cts +1 -1
- package/dist/lib/cjs/components/release-notes-component.cjs +2 -21
- package/dist/lib/cjs/components/release-notes-component.d.cts +2 -1
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +3 -16
- package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +1 -1
- package/dist/lib/cjs/components/rmdir-guard-component.cjs +1 -47
- package/dist/lib/cjs/components/rmdir-guard-component.d.cts +1 -1
- package/dist/lib/cjs/components/settings-migration-component.cjs +2 -21
- package/dist/lib/cjs/components/settings-migration-component.d.cts +1 -1
- package/dist/lib/cjs/components/syntax-highlighting-component.cjs +2 -21
- package/dist/lib/cjs/components/syntax-highlighting-component.d.cts +1 -1
- package/dist/lib/cjs/components/templates-language-component.cjs +3 -49
- package/dist/lib/cjs/components/templates-language-component.d.cts +1 -1
- package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +3 -16
- package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.d.cts +1 -1
- package/dist/lib/cjs/constructors/index.cjs +2 -48
- package/dist/lib/cjs/constructors/index.d.cts +1 -1
- package/dist/lib/cjs/css-class.cjs +1 -47
- package/dist/lib/cjs/css-class.d.cts +1 -1
- package/dist/lib/cjs/data-handler.cjs +1 -47
- package/dist/lib/cjs/data-handler.d.cts +1 -1
- package/dist/lib/cjs/dataview-link.cjs +2 -21
- package/dist/lib/cjs/dataview-link.d.cts +1 -1
- package/dist/lib/cjs/dataview.cjs +2 -21
- package/dist/lib/cjs/dataview.d.cts +2 -1
- package/dist/lib/cjs/debug.cjs +2 -21
- package/dist/lib/cjs/debug.d.cts +1 -1
- package/dist/lib/cjs/demo-vault-helper-settings.cjs +1 -47
- package/dist/lib/cjs/demo-vault-helper-settings.d.cts +1 -1
- package/dist/lib/cjs/demo-vault-helper.cjs +2 -21
- package/dist/lib/cjs/demo-vault-helper.d.cts +1 -1
- package/dist/lib/cjs/demo-vault-naming.cjs +1 -47
- package/dist/lib/cjs/demo-vault-naming.d.cts +1 -1
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +3 -16
- package/dist/lib/cjs/desktop-demo-vault-opener.d.cts +1 -1
- package/dist/lib/cjs/desktop-trusted-input.cjs +2 -21
- package/dist/lib/cjs/desktop-trusted-input.d.cts +2 -1
- package/dist/lib/cjs/editor-extension-registrar.cjs +2 -21
- package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
- package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -21
- package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
- package/dist/lib/cjs/editor.cjs +2 -21
- package/dist/lib/cjs/editor.d.cts +1 -1
- package/dist/lib/cjs/events.cjs +2 -21
- package/dist/lib/cjs/events.d.cts +1 -1
- package/dist/lib/cjs/extensions-registrar.cjs +2 -21
- package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
- package/dist/lib/cjs/file-change.cjs +2 -21
- package/dist/lib/cjs/file-change.d.cts +2 -1
- package/dist/lib/cjs/file-explorer.cjs +2 -21
- package/dist/lib/cjs/file-explorer.d.cts +1 -1
- package/dist/lib/cjs/file-manager.cjs +2 -21
- package/dist/lib/cjs/file-manager.d.cts +2 -1
- package/dist/lib/cjs/file-system.cjs +2 -21
- package/dist/lib/cjs/file-system.d.cts +1 -1
- package/dist/lib/cjs/folder-note.cjs +2 -21
- package/dist/lib/cjs/folder-note.d.cts +1 -1
- package/dist/lib/cjs/frontmatter-formatting.cjs +2 -21
- package/dist/lib/cjs/frontmatter-formatting.d.cts +1 -1
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +2 -21
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +1 -1
- package/dist/lib/cjs/frontmatter.cjs +2 -21
- package/dist/lib/cjs/frontmatter.d.cts +1 -1
- package/dist/lib/cjs/generated-during-build.cjs +2 -48
- package/dist/lib/cjs/generated-during-build.d.cts +1 -1
- package/dist/lib/cjs/hover-link-source-registrar.cjs +2 -21
- package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
- package/dist/lib/cjs/html-element.cjs +1 -47
- package/dist/lib/cjs/html-element.d.cts +2 -1
- package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -47
- package/dist/lib/cjs/i18n/custom-type-options.d.cts +1 -1
- package/dist/lib/cjs/i18n/default-translations.cjs +1 -47
- package/dist/lib/cjs/i18n/default-translations.d.cts +1 -1
- package/dist/lib/cjs/i18n/i18n.cjs +3 -22
- package/dist/lib/cjs/i18n/i18n.d.cts +2 -2
- package/dist/lib/cjs/i18n/index.cjs +5 -51
- package/dist/lib/cjs/i18n/index.d.cts +1 -1
- package/dist/lib/cjs/i18n/locales/en.cjs +1 -47
- package/dist/lib/cjs/i18n/locales/en.d.cts +1 -1
- package/dist/lib/cjs/i18n/locales/index.cjs +3 -49
- package/dist/lib/cjs/i18n/locales/index.d.cts +1 -1
- package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -47
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +1 -1
- package/dist/lib/cjs/index.cjs +96 -142
- package/dist/lib/cjs/index.d.cts +1 -1
- package/dist/lib/cjs/is-in-obsidian.cjs +1 -47
- package/dist/lib/cjs/is-in-obsidian.d.cts +1 -1
- package/dist/lib/cjs/library-references.d.cts +2 -0
- package/dist/lib/cjs/library-styles.cjs +2 -21
- package/dist/lib/cjs/library-styles.d.cts +2 -1
- package/dist/lib/cjs/library.cjs +1 -47
- package/dist/lib/cjs/link-name.cjs +1 -47
- package/dist/lib/cjs/link-name.d.cts +1 -1
- package/dist/lib/cjs/link-update-progress.cjs +1 -47
- package/dist/lib/cjs/link-update-progress.d.cts +1 -1
- package/dist/lib/cjs/link.cjs +3 -16
- package/dist/lib/cjs/link.d.cts +2 -1
- package/dist/lib/cjs/logger.cjs +2 -21
- package/dist/lib/cjs/logger.d.cts +2 -1
- package/dist/lib/cjs/loop.cjs +3 -16
- package/dist/lib/cjs/loop.d.cts +2 -1
- package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +2 -21
- package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +2 -1
- package/dist/lib/cjs/markdown-code-block-processor.cjs +2 -21
- package/dist/lib/cjs/markdown-code-block-processor.d.cts +2 -1
- package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -21
- package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +2 -1
- package/dist/lib/cjs/markdown-view.cjs +1 -47
- package/dist/lib/cjs/markdown-view.d.cts +1 -1
- package/dist/lib/cjs/markdown.cjs +3 -16
- package/dist/lib/cjs/markdown.d.cts +2 -1
- package/dist/lib/cjs/menu-event-registrar.cjs +1 -47
- package/dist/lib/cjs/menu-event-registrar.d.cts +1 -1
- package/dist/lib/cjs/metadata-cache.cjs +3 -16
- package/dist/lib/cjs/metadata-cache.d.cts +1 -1
- package/dist/lib/cjs/mobile-trusted-input.cjs +1 -47
- package/dist/lib/cjs/mobile-trusted-input.d.cts +1 -1
- package/dist/lib/cjs/modals/alert.cjs +2 -21
- package/dist/lib/cjs/modals/alert.d.cts +2 -1
- package/dist/lib/cjs/modals/confirm.cjs +2 -21
- package/dist/lib/cjs/modals/confirm.d.cts +2 -1
- package/dist/lib/cjs/modals/index.cjs +10 -56
- package/dist/lib/cjs/modals/index.d.cts +1 -1
- package/dist/lib/cjs/modals/minimizable-modal.cjs +2 -21
- package/dist/lib/cjs/modals/minimizable-modal.d.cts +1 -1
- package/dist/lib/cjs/modals/modal-command-builder.cjs +2 -21
- package/dist/lib/cjs/modals/modal-command-builder.d.cts +2 -1
- package/dist/lib/cjs/modals/modal.cjs +2 -21
- package/dist/lib/cjs/modals/modal.d.cts +1 -1
- package/dist/lib/cjs/modals/prompt.cjs +2 -21
- package/dist/lib/cjs/modals/prompt.d.cts +2 -1
- package/dist/lib/cjs/modals/select-item.cjs +2 -21
- package/dist/lib/cjs/modals/select-item.d.cts +1 -1
- package/dist/lib/cjs/modals/select-option.cjs +2 -21
- package/dist/lib/cjs/modals/select-option.d.cts +2 -1
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -47
- package/dist/lib/cjs/modals/suggest-modal-command-builder.d.cts +1 -1
- package/dist/lib/cjs/note-priority.cjs +2 -21
- package/dist/lib/cjs/note-priority.d.cts +1 -1
- package/dist/lib/cjs/notebook-navigator.cjs +1 -47
- package/dist/lib/cjs/notebook-navigator.d.cts +1 -1
- package/dist/lib/cjs/obsidian-dev-utils-state.cjs +2 -21
- package/dist/lib/cjs/obsidian-dev-utils-state.d.cts +1 -1
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +2 -21
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian-settings.cjs +2 -21
- package/dist/lib/cjs/obsidian-settings.d.cts +1 -1
- package/dist/lib/cjs/parse-link.cjs +3 -22
- package/dist/lib/cjs/parse-link.d.cts +1 -1
- package/dist/lib/cjs/path-settings.cjs +2 -21
- package/dist/lib/cjs/path-settings.d.cts +1 -1
- package/dist/lib/cjs/pdf.cjs +2 -21
- package/dist/lib/cjs/pdf.d.cts +2 -1
- package/dist/lib/cjs/plugin/index.cjs +10 -56
- package/dist/lib/cjs/plugin/index.d.cts +1 -1
- package/dist/lib/cjs/plugin/plugin-api-schema.cjs +2 -21
- package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +1 -1
- package/dist/lib/cjs/plugin/plugin-api.cjs +2 -21
- package/dist/lib/cjs/plugin/plugin-api.d.cts +1 -1
- package/dist/lib/cjs/plugin/plugin-context.cjs +3 -22
- package/dist/lib/cjs/plugin/plugin-context.d.cts +2 -1
- package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -47
- package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +1 -47
- package/dist/lib/cjs/plugin/plugin-install-state.d.cts +1 -1
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -47
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +1 -1
- package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +2 -21
- package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +2 -1
- package/dist/lib/cjs/plugin/plugin.cjs +2 -21
- package/dist/lib/cjs/plugin/plugin.d.cts +1 -1
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +2 -21
- package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
- package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -21
- package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
- package/dist/lib/cjs/popovers/field-popover.cjs +2 -21
- package/dist/lib/cjs/popovers/field-popover.d.cts +1 -1
- package/dist/lib/cjs/popovers/index.cjs +4 -50
- package/dist/lib/cjs/popovers/index.d.cts +1 -1
- package/dist/lib/cjs/popovers/popover-anchor.cjs +2 -21
- package/dist/lib/cjs/popovers/popover-anchor.d.cts +2 -1
- package/dist/lib/cjs/popovers/popover.cjs +2 -21
- package/dist/lib/cjs/popovers/popover.d.cts +2 -1
- package/dist/lib/cjs/property-entry.cjs +1 -47
- package/dist/lib/cjs/property-entry.d.cts +1 -1
- package/dist/lib/cjs/queue.cjs +2 -21
- package/dist/lib/cjs/queue.d.cts +2 -1
- package/dist/lib/cjs/react/app-context.cjs +2 -21
- package/dist/lib/cjs/react/app-context.d.cts +1 -1
- package/dist/lib/cjs/react/index.cjs +2 -48
- package/dist/lib/cjs/react/index.d.cts +1 -1
- package/dist/lib/cjs/reference.cjs +2 -21
- package/dist/lib/cjs/reference.d.cts +1 -1
- package/dist/lib/cjs/resource-lock.cjs +2 -21
- package/dist/lib/cjs/resource-lock.d.cts +2 -1
- package/dist/lib/cjs/resource-url.cjs +2 -21
- package/dist/lib/cjs/resource-url.d.cts +1 -1
- package/dist/lib/cjs/ribbon-icon-registrar.cjs +2 -21
- package/dist/lib/cjs/ribbon-icon-registrar.d.cts +2 -1
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/checkbox-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/code-highlighter-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/date-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/date-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/date-time-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/date-time-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/email-component.cjs +1 -47
- package/dist/lib/cjs/setting-components/email-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/file-component.cjs +1 -47
- package/dist/lib/cjs/setting-components/file-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/index.cjs +27 -73
- package/dist/lib/cjs/setting-components/index.d.cts +1 -1
- package/dist/lib/cjs/setting-components/month-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/month-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.d.cts +3 -1
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +1 -47
- package/dist/lib/cjs/setting-components/multiple-email-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/multiple-file-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/number-component.cjs +1 -47
- package/dist/lib/cjs/setting-components/number-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/password-component.cjs +1 -47
- package/dist/lib/cjs/setting-components/password-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +2 -21
- package/dist/lib/cjs/setting-components/setting-component-wrapper.d.cts +2 -1
- package/dist/lib/cjs/setting-components/telephone-component.cjs +1 -47
- package/dist/lib/cjs/setting-components/telephone-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/text-based-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/text-based-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/time-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/time-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/typed-dropdown-component.d.cts +3 -1
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.d.cts +3 -1
- package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -47
- package/dist/lib/cjs/setting-components/typed-range-text-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/typed-text-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/typed-text-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/url-component.cjs +1 -47
- package/dist/lib/cjs/setting-components/url-component.d.cts +2 -1
- package/dist/lib/cjs/setting-components/validator-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/validator-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +1 -47
- package/dist/lib/cjs/setting-components/value-component-with-change-tracking.d.cts +1 -1
- package/dist/lib/cjs/setting-components/week-component.cjs +2 -21
- package/dist/lib/cjs/setting-components/week-component.d.cts +2 -1
- package/dist/lib/cjs/setting-ex.cjs +2 -21
- package/dist/lib/cjs/setting-ex.d.cts +2 -1
- package/dist/lib/cjs/setting-group-ex.cjs +2 -21
- package/dist/lib/cjs/setting-group-ex.d.cts +2 -1
- package/dist/lib/cjs/status-bar-item-registrar.cjs +2 -21
- package/dist/lib/cjs/status-bar-item-registrar.d.cts +2 -1
- package/dist/lib/cjs/templater.cjs +1 -47
- package/dist/lib/cjs/templater.d.cts +1 -1
- package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -21
- package/dist/lib/cjs/transformers/duration-transformer.d.cts +1 -1
- package/dist/lib/cjs/transformers/index.cjs +2 -48
- package/dist/lib/cjs/transformers/index.d.cts +1 -1
- package/dist/lib/cjs/trusted-input.cjs +2 -21
- package/dist/lib/cjs/trusted-input.d.cts +1 -1
- package/dist/lib/cjs/validation.cjs +2 -21
- package/dist/lib/cjs/validation.d.cts +1 -1
- package/dist/lib/cjs/vault-delete.cjs +2 -21
- package/dist/lib/cjs/vault-delete.d.cts +1 -1
- package/dist/lib/cjs/vault-transaction.cjs +3 -16
- package/dist/lib/cjs/vault-transaction.d.cts +1 -1
- package/dist/lib/cjs/vault.cjs +3 -16
- package/dist/lib/cjs/vault.d.cts +1 -1
- package/dist/lib/cjs/view-registrar.cjs +2 -21
- package/dist/lib/cjs/view-registrar.d.cts +1 -1
- package/dist/lib/cjs/workspace.cjs +2 -21
- package/dist/lib/cjs/workspace.d.cts +2 -1
- package/dist/lib/esm/@types/i18next.d.mts +1 -1
- package/dist/lib/esm/@types/obsidian-integration-testing.d.mts +3 -3
- package/dist/lib/esm/@types/original-fs.d.mts +2 -1
- package/dist/lib/esm/__merged.d.mts +1 -1
- package/dist/lib/esm/__merged.mjs +2 -11
- package/dist/lib/esm/active-file-provider.d.mts +1 -1
- package/dist/lib/esm/active-file-provider.mjs +1 -37
- package/dist/lib/esm/app.d.mts +1 -1
- package/dist/lib/esm/app.mjs +1 -37
- package/dist/lib/esm/async-with-notice.d.mts +2 -1
- package/dist/lib/esm/async-with-notice.mjs +2 -11
- package/dist/lib/esm/attachment-path.d.mts +1 -1
- package/dist/lib/esm/attachment-path.mjs +2 -11
- package/dist/lib/esm/attachment-unit-folder.d.mts +1 -1
- package/dist/lib/esm/attachment-unit-folder.mjs +2 -11
- package/dist/lib/esm/backlink-index.d.mts +1 -1
- package/dist/lib/esm/backlink-index.mjs +2 -11
- package/dist/lib/esm/backlink.d.mts +1 -1
- package/dist/lib/esm/backlink.mjs +2 -11
- package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
- package/dist/lib/esm/bases-view-registrar.mjs +2 -11
- package/dist/lib/esm/callout.d.mts +2 -1
- package/dist/lib/esm/callout.mjs +2 -11
- package/dist/lib/esm/canvas.d.mts +1 -1
- package/dist/lib/esm/canvas.mjs +2 -11
- package/dist/lib/esm/case-insensitive-file-index.d.mts +1 -1
- package/dist/lib/esm/case-insensitive-file-index.mjs +2 -11
- package/dist/lib/esm/code-block-markdown-information.d.mts +1 -1
- package/dist/lib/esm/code-block-markdown-information.mjs +0 -36
- package/dist/lib/esm/code-block-reg-exp.d.mts +1 -1
- package/dist/lib/esm/code-block-reg-exp.mjs +1 -37
- package/dist/lib/esm/codemirror/index.d.mts +1 -1
- package/dist/lib/esm/codemirror/index.mjs +1 -37
- package/dist/lib/esm/codemirror/state-field-spec.d.mts +1 -1
- package/dist/lib/esm/codemirror/state-field-spec.mjs +0 -36
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +1 -1
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +2 -11
- package/dist/lib/esm/command-handlers/command-handler-component.d.mts +1 -1
- package/dist/lib/esm/command-handlers/command-handler-component.mjs +2 -11
- package/dist/lib/esm/command-handlers/command-handler.d.mts +1 -1
- package/dist/lib/esm/command-handlers/command-handler.mjs +2 -11
- package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +1 -1
- package/dist/lib/esm/command-handlers/editor-command-handler.mjs +2 -11
- package/dist/lib/esm/command-handlers/file-command-handler.d.mts +1 -1
- package/dist/lib/esm/command-handlers/file-command-handler.mjs +5 -14
- package/dist/lib/esm/command-handlers/folder-command-handler.d.mts +1 -1
- package/dist/lib/esm/command-handlers/folder-command-handler.mjs +5 -14
- package/dist/lib/esm/command-handlers/global-command-handler.d.mts +1 -1
- package/dist/lib/esm/command-handlers/global-command-handler.mjs +3 -12
- package/dist/lib/esm/command-handlers/index.d.mts +1 -1
- package/dist/lib/esm/command-handlers/index.mjs +1 -37
- package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.d.mts +1 -1
- package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +2 -11
- package/dist/lib/esm/command-handlers/open-settings-command-handler.d.mts +1 -1
- package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +1 -37
- package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.d.mts +1 -1
- package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +1 -37
- package/dist/lib/esm/command-registrar.d.mts +1 -1
- package/dist/lib/esm/command-registrar.mjs +1 -37
- package/dist/lib/esm/community-plugins.d.mts +1 -1
- package/dist/lib/esm/community-plugins.mjs +2 -11
- package/dist/lib/esm/components/abort-signal-component.d.mts +2 -1
- package/dist/lib/esm/components/abort-signal-component.mjs +2 -11
- package/dist/lib/esm/components/all-windows-event-component.d.mts +2 -1
- package/dist/lib/esm/components/all-windows-event-component.mjs +1 -37
- package/dist/lib/esm/components/async-error-handler-component.d.mts +1 -1
- package/dist/lib/esm/components/async-error-handler-component.mjs +2 -11
- package/dist/lib/esm/components/async-events-component.d.mts +1 -1
- package/dist/lib/esm/components/async-events-component.mjs +2 -11
- package/dist/lib/esm/components/case-insensitive-file-index-component.d.mts +1 -1
- package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +1 -37
- package/dist/lib/esm/components/component-ex.d.mts +1 -1
- package/dist/lib/esm/components/component-ex.mjs +3 -6
- package/dist/lib/esm/components/console-debug-component.d.mts +2 -2
- package/dist/lib/esm/components/console-debug-component.mjs +2 -11
- package/dist/lib/esm/components/core-plugin-toggle-component.d.mts +1 -1
- package/dist/lib/esm/components/core-plugin-toggle-component.mjs +2 -11
- package/dist/lib/esm/components/disposable-component.d.mts +1 -1
- package/dist/lib/esm/components/disposable-component.mjs +3 -6
- package/dist/lib/esm/components/embed-extensions-component.d.mts +1 -1
- package/dist/lib/esm/components/embed-extensions-component.mjs +1 -37
- package/dist/lib/esm/components/generate-markdown-link-default-params-component.d.mts +1 -1
- package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +1 -37
- package/dist/lib/esm/components/index.d.mts +1 -1
- package/dist/lib/esm/components/index.mjs +1 -37
- package/dist/lib/esm/components/layout-ready-component.d.mts +1 -1
- package/dist/lib/esm/components/layout-ready-component.mjs +2 -11
- package/dist/lib/esm/components/menu-event-registrar-component.d.mts +1 -1
- package/dist/lib/esm/components/menu-event-registrar-component.mjs +1 -37
- package/dist/lib/esm/components/monkey-around-component.d.mts +1 -1
- package/dist/lib/esm/components/monkey-around-component.mjs +2 -11
- package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.d.mts +1 -1
- package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +2 -11
- package/dist/lib/esm/components/plugin-context-component.d.mts +1 -1
- package/dist/lib/esm/components/plugin-context-component.mjs +2 -11
- package/dist/lib/esm/components/plugin-gate-component.d.mts +2 -1
- package/dist/lib/esm/components/plugin-gate-component.mjs +2 -11
- package/dist/lib/esm/components/plugin-notice-component.d.mts +2 -1
- package/dist/lib/esm/components/plugin-notice-component.mjs +3 -6
- package/dist/lib/esm/components/plugin-settings-component.d.mts +1 -1
- package/dist/lib/esm/components/plugin-settings-component.mjs +2 -11
- package/dist/lib/esm/components/plugin-settings-tab-component.d.mts +1 -1
- package/dist/lib/esm/components/plugin-settings-tab-component.mjs +2 -11
- package/dist/lib/esm/components/plugin-suggestion-component.d.mts +2 -1
- package/dist/lib/esm/components/plugin-suggestion-component.mjs +2 -11
- package/dist/lib/esm/components/pointer-position-component.d.mts +1 -1
- package/dist/lib/esm/components/pointer-position-component.mjs +1 -37
- package/dist/lib/esm/components/registry-component.d.mts +1 -1
- package/dist/lib/esm/components/registry-component.mjs +2 -11
- package/dist/lib/esm/components/release-notes-component.d.mts +2 -1
- package/dist/lib/esm/components/release-notes-component.mjs +2 -11
- package/dist/lib/esm/components/rename-delete-handler-component.d.mts +1 -1
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +3 -6
- package/dist/lib/esm/components/rmdir-guard-component.d.mts +1 -1
- package/dist/lib/esm/components/rmdir-guard-component.mjs +1 -37
- package/dist/lib/esm/components/settings-migration-component.d.mts +1 -1
- package/dist/lib/esm/components/settings-migration-component.mjs +2 -11
- package/dist/lib/esm/components/syntax-highlighting-component.d.mts +1 -1
- package/dist/lib/esm/components/syntax-highlighting-component.mjs +2 -11
- package/dist/lib/esm/components/templates-language-component.d.mts +1 -1
- package/dist/lib/esm/components/templates-language-component.mjs +3 -39
- package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.d.mts +1 -1
- package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +3 -6
- package/dist/lib/esm/constructors/index.d.mts +1 -1
- package/dist/lib/esm/constructors/index.mjs +1 -37
- package/dist/lib/esm/css-class.d.mts +1 -1
- package/dist/lib/esm/css-class.mjs +1 -37
- package/dist/lib/esm/data-handler.d.mts +1 -1
- package/dist/lib/esm/data-handler.mjs +1 -37
- package/dist/lib/esm/dataview-link.d.mts +1 -1
- package/dist/lib/esm/dataview-link.mjs +2 -11
- package/dist/lib/esm/dataview.d.mts +2 -1
- package/dist/lib/esm/dataview.mjs +2 -11
- package/dist/lib/esm/debug.d.mts +1 -1
- package/dist/lib/esm/debug.mjs +2 -11
- package/dist/lib/esm/demo-vault-helper-settings.d.mts +1 -1
- package/dist/lib/esm/demo-vault-helper-settings.mjs +0 -36
- package/dist/lib/esm/demo-vault-helper.d.mts +1 -1
- package/dist/lib/esm/demo-vault-helper.mjs +2 -11
- package/dist/lib/esm/demo-vault-naming.d.mts +1 -1
- package/dist/lib/esm/demo-vault-naming.mjs +1 -37
- package/dist/lib/esm/desktop-demo-vault-opener.d.mts +1 -1
- package/dist/lib/esm/desktop-demo-vault-opener.mjs +3 -6
- package/dist/lib/esm/desktop-trusted-input.d.mts +2 -1
- package/dist/lib/esm/desktop-trusted-input.mjs +2 -11
- package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
- package/dist/lib/esm/editor-extension-registrar.mjs +2 -11
- package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
- package/dist/lib/esm/editor-suggest-registrar.mjs +2 -11
- package/dist/lib/esm/editor.d.mts +1 -1
- package/dist/lib/esm/editor.mjs +2 -11
- package/dist/lib/esm/events.d.mts +1 -1
- package/dist/lib/esm/events.mjs +2 -11
- package/dist/lib/esm/extensions-registrar.d.mts +1 -1
- package/dist/lib/esm/extensions-registrar.mjs +2 -11
- package/dist/lib/esm/file-change.d.mts +2 -1
- package/dist/lib/esm/file-change.mjs +2 -11
- package/dist/lib/esm/file-explorer.d.mts +1 -1
- package/dist/lib/esm/file-explorer.mjs +2 -11
- package/dist/lib/esm/file-manager.d.mts +2 -1
- package/dist/lib/esm/file-manager.mjs +2 -11
- package/dist/lib/esm/file-system.d.mts +1 -1
- package/dist/lib/esm/file-system.mjs +2 -11
- package/dist/lib/esm/folder-note.d.mts +1 -1
- package/dist/lib/esm/folder-note.mjs +2 -11
- package/dist/lib/esm/frontmatter-formatting.d.mts +1 -1
- package/dist/lib/esm/frontmatter-formatting.mjs +2 -11
- package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +1 -1
- package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +2 -11
- package/dist/lib/esm/frontmatter.d.mts +1 -1
- package/dist/lib/esm/frontmatter.mjs +2 -11
- package/dist/lib/esm/generated-during-build.d.mts +1 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -38
- package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
- package/dist/lib/esm/hover-link-source-registrar.mjs +2 -11
- package/dist/lib/esm/html-element.d.mts +2 -1
- package/dist/lib/esm/html-element.mjs +1 -37
- package/dist/lib/esm/i18n/custom-type-options.d.mts +1 -1
- package/dist/lib/esm/i18n/custom-type-options.mjs +1 -37
- package/dist/lib/esm/i18n/default-translations.d.mts +1 -1
- package/dist/lib/esm/i18n/default-translations.mjs +1 -37
- package/dist/lib/esm/i18n/i18n.d.mts +2 -2
- package/dist/lib/esm/i18n/i18n.mjs +2 -11
- package/dist/lib/esm/i18n/index.d.mts +1 -1
- package/dist/lib/esm/i18n/index.mjs +1 -37
- package/dist/lib/esm/i18n/locales/en.d.mts +1 -1
- package/dist/lib/esm/i18n/locales/en.mjs +1 -37
- package/dist/lib/esm/i18n/locales/index.d.mts +1 -1
- package/dist/lib/esm/i18n/locales/index.mjs +1 -37
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +1 -1
- package/dist/lib/esm/i18n/locales/translations-map.mjs +1 -37
- package/dist/lib/esm/index.d.mts +1 -1
- package/dist/lib/esm/index.mjs +1 -37
- package/dist/lib/esm/is-in-obsidian.d.mts +1 -1
- package/dist/lib/esm/is-in-obsidian.mjs +1 -37
- package/dist/lib/esm/library-references.d.mts +2 -0
- package/dist/lib/esm/library-styles.d.mts +2 -1
- package/dist/lib/esm/library-styles.mjs +2 -11
- package/dist/lib/esm/library.mjs +1 -37
- package/dist/lib/esm/link-name.d.mts +1 -1
- package/dist/lib/esm/link-name.mjs +1 -37
- package/dist/lib/esm/link-update-progress.d.mts +1 -1
- package/dist/lib/esm/link-update-progress.mjs +0 -36
- package/dist/lib/esm/link.d.mts +2 -1
- package/dist/lib/esm/link.mjs +3 -6
- package/dist/lib/esm/logger.d.mts +2 -1
- package/dist/lib/esm/logger.mjs +2 -11
- package/dist/lib/esm/loop.d.mts +2 -1
- package/dist/lib/esm/loop.mjs +3 -6
- package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +2 -1
- package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +2 -11
- package/dist/lib/esm/markdown-code-block-processor.d.mts +2 -1
- package/dist/lib/esm/markdown-code-block-processor.mjs +2 -11
- package/dist/lib/esm/markdown-post-processor-registrar.d.mts +2 -1
- package/dist/lib/esm/markdown-post-processor-registrar.mjs +2 -11
- package/dist/lib/esm/markdown-view.d.mts +1 -1
- package/dist/lib/esm/markdown-view.mjs +1 -37
- package/dist/lib/esm/markdown.d.mts +2 -1
- package/dist/lib/esm/markdown.mjs +3 -6
- package/dist/lib/esm/menu-event-registrar.d.mts +1 -1
- package/dist/lib/esm/menu-event-registrar.mjs +0 -36
- package/dist/lib/esm/metadata-cache.d.mts +1 -1
- package/dist/lib/esm/metadata-cache.mjs +3 -6
- package/dist/lib/esm/mobile-trusted-input.d.mts +1 -1
- package/dist/lib/esm/mobile-trusted-input.mjs +1 -37
- package/dist/lib/esm/modals/alert.d.mts +2 -1
- package/dist/lib/esm/modals/alert.mjs +2 -11
- package/dist/lib/esm/modals/confirm.d.mts +2 -1
- package/dist/lib/esm/modals/confirm.mjs +2 -11
- package/dist/lib/esm/modals/index.d.mts +1 -1
- package/dist/lib/esm/modals/index.mjs +1 -37
- package/dist/lib/esm/modals/minimizable-modal.d.mts +1 -1
- package/dist/lib/esm/modals/minimizable-modal.mjs +2 -11
- package/dist/lib/esm/modals/modal-command-builder.d.mts +2 -1
- package/dist/lib/esm/modals/modal-command-builder.mjs +2 -11
- package/dist/lib/esm/modals/modal.d.mts +1 -1
- package/dist/lib/esm/modals/modal.mjs +2 -11
- package/dist/lib/esm/modals/prompt.d.mts +2 -1
- package/dist/lib/esm/modals/prompt.mjs +2 -11
- package/dist/lib/esm/modals/select-item.d.mts +1 -1
- package/dist/lib/esm/modals/select-item.mjs +2 -11
- package/dist/lib/esm/modals/select-option.d.mts +2 -1
- package/dist/lib/esm/modals/select-option.mjs +2 -11
- package/dist/lib/esm/modals/suggest-modal-command-builder.d.mts +1 -1
- package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +1 -37
- package/dist/lib/esm/note-priority.d.mts +1 -1
- package/dist/lib/esm/note-priority.mjs +2 -11
- package/dist/lib/esm/notebook-navigator.d.mts +1 -1
- package/dist/lib/esm/notebook-navigator.mjs +1 -37
- package/dist/lib/esm/obsidian-dev-utils-state.d.mts +1 -1
- package/dist/lib/esm/obsidian-dev-utils-state.mjs +2 -11
- package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +2 -11
- package/dist/lib/esm/obsidian-settings.d.mts +1 -1
- package/dist/lib/esm/obsidian-settings.mjs +2 -11
- package/dist/lib/esm/parse-link.d.mts +1 -1
- package/dist/lib/esm/parse-link.mjs +2 -11
- package/dist/lib/esm/path-settings.d.mts +1 -1
- package/dist/lib/esm/path-settings.mjs +2 -11
- package/dist/lib/esm/pdf.d.mts +2 -1
- package/dist/lib/esm/pdf.mjs +2 -11
- package/dist/lib/esm/plugin/index.d.mts +1 -1
- package/dist/lib/esm/plugin/index.mjs +1 -37
- package/dist/lib/esm/plugin/plugin-api-schema.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin-api-schema.mjs +2 -11
- package/dist/lib/esm/plugin/plugin-api.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin-api.mjs +2 -11
- package/dist/lib/esm/plugin/plugin-context.d.mts +2 -1
- package/dist/lib/esm/plugin/plugin-context.mjs +3 -12
- package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -37
- package/dist/lib/esm/plugin/plugin-install-state.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin-install-state.mjs +1 -37
- package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -37
- package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +2 -1
- package/dist/lib/esm/plugin/plugin-settings-tab.mjs +2 -11
- package/dist/lib/esm/plugin/plugin.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin.mjs +2 -11
- package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
- package/dist/lib/esm/plugin/settings-migration-api.mjs +2 -11
- package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
- package/dist/lib/esm/plugin-cli-handler-registrar.mjs +2 -11
- package/dist/lib/esm/popovers/field-popover.d.mts +1 -1
- package/dist/lib/esm/popovers/field-popover.mjs +2 -11
- package/dist/lib/esm/popovers/index.d.mts +1 -1
- package/dist/lib/esm/popovers/index.mjs +1 -37
- package/dist/lib/esm/popovers/popover-anchor.d.mts +2 -1
- package/dist/lib/esm/popovers/popover-anchor.mjs +2 -11
- package/dist/lib/esm/popovers/popover.d.mts +2 -1
- package/dist/lib/esm/popovers/popover.mjs +2 -11
- package/dist/lib/esm/property-entry.d.mts +1 -1
- package/dist/lib/esm/property-entry.mjs +1 -37
- package/dist/lib/esm/queue.d.mts +2 -1
- package/dist/lib/esm/queue.mjs +2 -11
- package/dist/lib/esm/react/app-context.d.mts +1 -1
- package/dist/lib/esm/react/app-context.mjs +2 -11
- package/dist/lib/esm/react/index.d.mts +1 -1
- package/dist/lib/esm/react/index.mjs +1 -37
- package/dist/lib/esm/reference.d.mts +1 -1
- package/dist/lib/esm/reference.mjs +2 -11
- package/dist/lib/esm/resource-lock.d.mts +2 -1
- package/dist/lib/esm/resource-lock.mjs +2 -11
- package/dist/lib/esm/resource-url.d.mts +1 -1
- package/dist/lib/esm/resource-url.mjs +2 -11
- package/dist/lib/esm/ribbon-icon-registrar.d.mts +2 -1
- package/dist/lib/esm/ribbon-icon-registrar.mjs +2 -11
- package/dist/lib/esm/setting-components/checkbox-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/checkbox-component.mjs +2 -11
- package/dist/lib/esm/setting-components/code-highlighter-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/code-highlighter-component.mjs +2 -11
- package/dist/lib/esm/setting-components/date-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/date-component.mjs +2 -11
- package/dist/lib/esm/setting-components/date-time-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/date-time-component.mjs +2 -11
- package/dist/lib/esm/setting-components/email-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/email-component.mjs +1 -37
- package/dist/lib/esm/setting-components/file-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/file-component.mjs +1 -37
- package/dist/lib/esm/setting-components/index.d.mts +1 -1
- package/dist/lib/esm/setting-components/index.mjs +1 -37
- package/dist/lib/esm/setting-components/month-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/month-component.mjs +2 -11
- package/dist/lib/esm/setting-components/multiple-dropdown-component.d.mts +3 -1
- package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +2 -11
- package/dist/lib/esm/setting-components/multiple-email-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/multiple-email-component.mjs +1 -37
- package/dist/lib/esm/setting-components/multiple-file-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/multiple-file-component.mjs +2 -11
- package/dist/lib/esm/setting-components/multiple-text-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/multiple-text-component.mjs +2 -11
- package/dist/lib/esm/setting-components/number-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/number-component.mjs +1 -37
- package/dist/lib/esm/setting-components/password-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/password-component.mjs +1 -37
- package/dist/lib/esm/setting-components/setting-component-wrapper.d.mts +2 -1
- package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +2 -11
- package/dist/lib/esm/setting-components/telephone-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/telephone-component.mjs +1 -37
- package/dist/lib/esm/setting-components/text-based-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/text-based-component.mjs +2 -11
- package/dist/lib/esm/setting-components/time-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/time-component.mjs +2 -11
- package/dist/lib/esm/setting-components/tri-state-checkbox-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +2 -11
- package/dist/lib/esm/setting-components/typed-dropdown-component.d.mts +3 -1
- package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +2 -11
- package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.d.mts +3 -1
- package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +2 -11
- package/dist/lib/esm/setting-components/typed-range-text-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/typed-range-text-component.mjs +1 -37
- package/dist/lib/esm/setting-components/typed-text-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/typed-text-component.mjs +2 -11
- package/dist/lib/esm/setting-components/url-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/url-component.mjs +1 -37
- package/dist/lib/esm/setting-components/validator-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/validator-component.mjs +2 -11
- package/dist/lib/esm/setting-components/value-component-with-change-tracking.d.mts +1 -1
- package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +0 -36
- package/dist/lib/esm/setting-components/week-component.d.mts +2 -1
- package/dist/lib/esm/setting-components/week-component.mjs +2 -11
- package/dist/lib/esm/setting-ex.d.mts +2 -1
- package/dist/lib/esm/setting-ex.mjs +2 -11
- package/dist/lib/esm/setting-group-ex.d.mts +2 -1
- package/dist/lib/esm/setting-group-ex.mjs +2 -11
- package/dist/lib/esm/status-bar-item-registrar.d.mts +2 -1
- package/dist/lib/esm/status-bar-item-registrar.mjs +2 -11
- package/dist/lib/esm/templater.d.mts +1 -1
- package/dist/lib/esm/templater.mjs +1 -37
- package/dist/lib/esm/transformers/duration-transformer.d.mts +1 -1
- package/dist/lib/esm/transformers/duration-transformer.mjs +2 -11
- package/dist/lib/esm/transformers/index.d.mts +1 -1
- package/dist/lib/esm/transformers/index.mjs +1 -37
- package/dist/lib/esm/trusted-input.d.mts +1 -1
- package/dist/lib/esm/trusted-input.mjs +2 -11
- package/dist/lib/esm/validation.d.mts +1 -1
- package/dist/lib/esm/validation.mjs +2 -11
- package/dist/lib/esm/vault-delete.d.mts +1 -1
- package/dist/lib/esm/vault-delete.mjs +2 -11
- package/dist/lib/esm/vault-transaction.d.mts +1 -1
- package/dist/lib/esm/vault-transaction.mjs +3 -6
- package/dist/lib/esm/vault.d.mts +1 -1
- package/dist/lib/esm/vault.mjs +3 -6
- package/dist/lib/esm/view-registrar.d.mts +1 -1
- package/dist/lib/esm/view-registrar.mjs +2 -11
- package/dist/lib/esm/workspace.d.mts +2 -1
- package/dist/lib/esm/workspace.mjs +2 -11
- package/package.json +24 -8
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
5
|
(function () {
|
|
7
6
|
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
7
|
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
@@ -33,10 +32,8 @@ function ensureBrowserProcess() {
|
|
|
33
32
|
existingProcessRecord["browser"] = true;
|
|
34
33
|
}
|
|
35
34
|
|
|
36
|
-
(
|
|
37
|
-
|
|
38
|
-
ensureBrowserProcess();
|
|
39
|
-
})();
|
|
35
|
+
ensureDisposeSymbols();
|
|
36
|
+
ensureBrowserProcess();
|
|
40
37
|
})();
|
|
41
38
|
|
|
42
39
|
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
|
|
@@ -388,4 +385,4 @@ export {
|
|
|
388
385
|
renderExternalLink,
|
|
389
386
|
renderInternalLink
|
|
390
387
|
};
|
|
391
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21hcmtkb3duLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHByb2Nlc3NpbmcgTWFya2Rvd24gY29udGVudCBpbiBPYnNpZGlhbi5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVlcGx5IGNvdXBsZWQgdG8gT2JzaWRpYW4gcnVudGltZTsgcmVxdWlyZXMgcnVubmluZyB2YXVsdCBmb3IgbWVhbmluZ2Z1bCB0ZXN0aW5nLiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIERvbUV2ZW50c0hhbmRsZXJzLFxuICBEb21FdmVudHNIYW5kbGVyc0luZm8sXG4gIEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkXG59IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QnO1xuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgaW52b2tlQXN5bmNTYWZlbHksXG4gIHNsZWVwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBnZXRaSW5kZXgsXG4gIHdhaXRVbnRpbENvbm5lY3RlZFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvaHRtbC1lbGVtZW50JztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdXJsJztcbmltcG9ydCB7IEludGVybmFsUGx1Z2luTmFtZSB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7IHQgfSBmcm9tICdpMThuZXh0JztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG92ZXJQb3BvdmVyLFxuICBLZXltYXAsXG4gIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLFxuICBNYXJrZG93blJlbmRlcmVyLFxuICBNZW51LFxuICBOb3RpY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHR5cGUgeyBGb2xkZXJOb3RlTG9jYXRpb24gfSBmcm9tICcuL2ZvbGRlci1ub3RlLnRzJztcblxuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IHJldmVhbEluRmlsZUV4cGxvcmVyIH0gZnJvbSAnLi9maWxlLWV4cGxvcmVyLnRzJztcbmltcG9ydCB7XG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0UGF0aCxcbiAgaXNGaWxlLFxuICBpc0ZvbGRlclxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHJlc29sdmVGb2xkZXJOb3RlLFxuICByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1xufSBmcm9tICcuL2ZvbGRlci1ub3RlLnRzJztcblxuLyoqXG4gKiBIb3cgbG9uZyB0byBsZXQgT2JzaWRpYW4gc2V0dGxlIGJlZm9yZSBvcGVuaW5nIGEgZm9sZGVyIG5vdGUuIFRoZSBjbGljayBjYW4gbGFuZCByaWdodCBhZnRlciBhblxuICogb3BlcmF0aW9uIHRoYXQgY3JlYXRlZCwgcmV3cm90ZSBhbmQgdHJhc2hlZCBub3RlcywgYW5kIG9wZW5pbmcgaW50byB0aGUgbWlkZGxlIG9mIE9ic2lkaWFuJ3Mgb3duXG4gKiByZWFjdGlvbiB0byB0aGF0IHNob3dzIHRoZSBub3RlIGJlZm9yZSBpdHMgbWV0YWRhdGEgaGFzIGNhdWdodCB1cC5cbiAqL1xuY29uc3QgREVMQVlfQkVGT1JFX09QRU5fSU5fTUlMTElTRUNPTkRTID0gMjAwO1xuXG4vKipcbiAqIFRoZSBzZWN0aW9ucyBhbiBleHRlcm5hbCBsaW5rJ3MgY29udGV4dCBtZW51IGRlY2xhcmVzLCBpbiBPYnNpZGlhbidzIG93biBvcmRlci4gVGhlIG9yZGVyIGlzIHdoYXRcbiAqIHtAbGluayBNZW51LnNvcnR9IGdyb3VwcyB0aGUgaXRlbXMgYnksIHNvIGl0IGhhcyB0byBtYXRjaCB3aGF0XG4gKiB7QGxpbmsgV29ya3NwYWNlLmhhbmRsZUV4dGVybmFsTGlua0NvbnRleHRNZW51fSBhbmQgZXZlcnkgYHVybC1tZW51YCBsaXN0ZW5lciBleHBlY3QgdG8gZmlsbC5cbiAqL1xuY29uc3QgRVhURVJOQUxfTElOS19NRU5VX1NFQ1RJT05TID0gW1xuICAndGl0bGUnLFxuICAnb3BlbicsXG4gICdzZWxlY3Rpb24nLFxuICAnY2xpcGJvYXJkJyxcbiAgJ2luZm8nLFxuICAnYWN0aW9uJyxcbiAgJ3ZpZXcnLFxuICAnJyxcbiAgJ2Rhbmdlcidcbl07XG5cbi8qKlxuICogVGhlIHNlY3Rpb25zIGFuIGludGVybmFsIGxpbmsncyBjb250ZXh0IG1lbnUgZGVjbGFyZXMsIGluIE9ic2lkaWFuJ3Mgb3duIG9yZGVyLiBTZWVcbiAqIHtAbGluayBFWFRFUk5BTF9MSU5LX01FTlVfU0VDVElPTlN9IFx1MjAxNCB0aGUgY291bnRlcnBhcnQgZm9yIGBmaWxlLW1lbnVgIGxpc3RlbmVycy5cbiAqL1xuY29uc3QgSU5URVJOQUxfTElOS19NRU5VX1NFQ1RJT05TID0gW1xuICAndGl0bGUnLFxuICAnb3BlbicsXG4gICdhY3Rpb24nLFxuICAnY2xpcGJvYXJkJyxcbiAgJ3ZpZXcnLFxuICAnaW5mbycsXG4gICcnLFxuICAnZGFuZ2VyJ1xuXTtcblxuLyoqXG4gKiBUaGUgcGFyYW1zIGZvciB0aGUgZnVsbCByZW5kZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVsbFJlbmRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBDb21wb25lbnQgaW5zdGFuY2UgdG8gdXNlIGZvciB0aGUgcmVuZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50PzogQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgSFRNTEVsZW1lbnQgdG8gcmVuZGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgZWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgTWFya2Rvd24gc3RyaW5nIHRvIHJlbmRlci5cbiAgICovXG4gIHJlYWRvbmx5IG1hcmtkb3duOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVnaXN0ZXIgbGluayBoYW5kbGVycyBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlZ2lzdGVyTGlua0hhbmRsZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBwYXRoIHRvIHJlc29sdmUgcmVsYXRpdmUgbGlua3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnLydgXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBtYXJrZG93blRvSHRtbH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFya2Rvd25Ub0h0bWxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgTWFya2Rvd24gc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqL1xuICByZWFkb25seSBtYXJrZG93bjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggdG8gcmVzb2x2ZSByZWxhdGl2ZSBsaW5rcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJMaW5rSGFuZGxlcnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyTGlua0hhbmRsZXJzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIEhUTUxFbGVtZW50IHRvIHJlZ2lzdGVyIGxpbmsgaGFuZGxlcnMgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggdG8gcmVzb2x2ZSByZWxhdGl2ZSBsaW5rcyBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZW5kZXJFeHRlcm5hbExpbmt9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlckV4dGVybmFsTGlua1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBleHRlcm5hbCBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheVRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgdG8gcmVuZGVyIHRoZSBleHRlcm5hbCBsaW5rIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXItbm90ZSBzZXR1cCB7QGxpbmsgcmVuZGVySW50ZXJuYWxMaW5rfSByZXNvbHZlcyBhIGZvbGRlciBsaW5rJ3Mgbm90ZSB3aXRoIFx1MjAxNCBldmVyeXRoaW5nXG4gKiB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGVDb25maWd9IHRha2VzIGV4Y2VwdCB0aGUgYXBwLCB3aGljaCB0aGUgbGluayBhbHJlYWR5IGNhcnJpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySW50ZXJuYWxMaW5rRm9sZGVyTm90ZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnkuIFNlZSB7QGxpbmsgUmVzb2x2ZUZvbGRlck5vdGVDb25maWdQYXJhbXMuZXh0ZW5zaW9uc30uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ21kJ11gXG4gICAqL1xuICByZWFkb25seSBleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci4gU2VlXG4gICAqIHtAbGluayBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcy5pc0hpZGRlbn0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzSGlkZGVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlcmUgdGhlIG5vdGUgc2l0cyByZWxhdGl2ZSB0byBpdHMgZm9sZGVyLiBTZWUge0BsaW5rIFJlc29sdmVGb2xkZXJOb3RlQ29uZmlnUGFyYW1zLmxvY2F0aW9ufS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBGb2xkZXJOb3RlTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBmb2xkZXIgbm90ZSBvZiBhIGZvbGRlci4gU2VlIHtAbGluayBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcy5yZXNvbHZlTmFtZX0uXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZS5cbiAgICogQGRlZmF1bHQgYChmb2xkZXIpID0+IGZvbGRlci5uYW1lYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZU5hbWU/OiAoZm9sZGVyOiBURm9sZGVyKSA9PiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlbmRlckludGVybmFsTGlua30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySW50ZXJuYWxMaW5rUGFyYW1zIHtcbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBhIGNsaWNrIGhhcyByZXZlYWxlZCB0aGUgbGluaydzIGRlc3RpbmF0aW9uIGluIHRoZSBmaWxlIGV4cGxvcmVyLCBvbmNlIHRoZSBleHBsb3JlciBoYXNcbiAgICogZmluaXNoZWQgdGFraW5nIHRoZSBmb2N1cyBmb3IgaXQgXHUyMDE0IHNvIHRoaXMgaXMgd2hlcmUgYSBjYWxsZXIgbW92ZXMgdGhlIGZvY3VzIHNvbWV3aGVyZSBlbHNlLlxuICAgKlxuICAgKiBBd2FpdGVkLCBhbmQgY2FsbGVkIG9ubHkgZm9yIGEgY2xpY2sgdGhhdCByZXZlYWxzOiBhbHdheXMgZm9yIGEgZm9sZGVyIGxpbmssIGFuZCBmb3IgYSBmaWxlIGxpbmsgb25seVxuICAgKiB3aXRoIHtAbGluayBSZW5kZXJJbnRlcm5hbExpbmtQYXJhbXMuc2hvdWxkUmV2ZWFsRmlsZX0gYW5kIGEgZGVzdGluYXRpb24gdGhhdCBleGlzdHMuIFdpdGggdGhlIGZpbGVcbiAgICogZXhwbG9yZXIgZGlzYWJsZWQgaXQgaXMgc3RpbGwgY2FsbGVkLCByaWdodCBhd2F5LCBzaW5jZSB0aGVyZSBpcyB0aGVuIG5vdGhpbmcgdG8gd2FpdCBmb3IuXG4gICAqL1xuICByZWFkb25seSBhZnRlclJldmVhbD86ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBpbnRlcm5hbCBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheVRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvdyB0byBhbnN3ZXIgd2hpY2ggbm90ZSBpcyBhIGZvbGRlcidzIGZvbGRlciBub3RlLCB3aGVuIHRoZSBsaW5rIG5hbWVzIGEgRk9MREVSLlxuICAgKlxuICAgKiBPbWl0dGVkIG1lYW5zIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b306IHRoZSBpbnN0YWxsZWQgYGZvbGRlci1ub3Rlc2AgcGx1Z2luJ3MgbGl2ZVxuICAgKiBjb25maWd1cmF0aW9uLCBvciBhIG5vdGUgbmFtZWQgYWZ0ZXIgaXRzIGZvbGRlciwgaW5zaWRlIGl0LCB3aGVuIHRoYXQgcGx1Z2luIGlzIGFic2VudC4gUGFzc1xuICAgKiBgeyBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUgfWAgZm9yIGEgZm9sZGVyIGxpbmsgdGhhdCBtdXN0IG9ubHkgZXZlciByZXZlYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB7fWBcbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlck5vdGU/OiBSZW5kZXJJbnRlcm5hbExpbmtGb2xkZXJOb3RlT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byByZW5kZXIgdGhlIGludGVybmFsIGxpbmsgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yQWJzdHJhY3RGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY2xpY2tpbmcgYSBGSUxFIGxpbmsgYWxzbyBoaWdobGlnaHRzIHRoYXQgZmlsZSBpbiB0aGUgZmlsZSBleHBsb3Jlciwgb24gdG9wIG9mIHRoZSBvcGVuXG4gICAqIE9ic2lkaWFuJ3Mgb3duIGxpbmsgaGFuZGxlciBwZXJmb3Jtcy5cbiAgICpcbiAgICogT3B0LWluLCB1bmxpa2UgdGhlIGZvbGRlciBicmFuY2g6IGEgZm9sZGVyIGxpbmsgaGFzIGFsd2F5cyByZXZlYWxlZCAocmV2ZWFsaW5nIHdhcyBhbGwgaXRzIGNsaWNrXG4gICAqIGNvdWxkIG1lYW4pLCB3aGVyZWFzIGEgZmlsZSBsaW5rIGhhcyBhbHdheXMgb25seSBvcGVuZWQgXHUyMDE0IHNvIHR1cm5pbmcgdGhpcyBvbiBieSBkZWZhdWx0IHdvdWxkIGNoYW5nZVxuICAgKiB3aGF0IGV2ZXJ5IGV4aXN0aW5nIGNhbGxlcidzIGxpbmsgZG9lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmV2ZWFsRmlsZT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGaXhlZFpJbmRleERvbUV2ZW50c0hhbmRsZXJzSW5mb0NvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5jbGFzcyBFbWJlZEJ5RXh0ZW5zaW9uTWRQYXRjaENvbXBvbmVudCBleHRlbmRzIE1vbmtleUFyb3VuZENvbXBvbmVudCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVtYmVkQnlFeHRlbnNpb246IEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgICRvYmplY3Q6IHRoaXMuZW1iZWRCeUV4dGVuc2lvbixcbiAgICAgIG1ldGhvZE5hbWU6ICdtZCcsXG4gICAgICBwYXRjaEhhbmRsZXI6ICh7XG4gICAgICAgIGZhbGxiYWNrLFxuICAgICAgICBvcmlnaW5hbEFyZ3VtZW50czogW2NvbnRleHRdXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnRleHQuZGlzcGxheU1vZGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm8gaW1wbGVtZW50cyBEb21FdmVudHNIYW5kbGVyc0luZm8ge1xuICBwdWJsaWMgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgaG92ZXJQb3BvdmVyKCk6IEhvdmVyUG9wb3ZlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9ob3ZlclBvcG92ZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IGhvdmVyUG9wb3Zlcihob3ZlclBvcG92ZXI6IEhvdmVyUG9wb3ZlciB8IG51bGwpIHtcbiAgICB0aGlzLl9ob3ZlclBvcG92ZXIgPSBob3ZlclBvcG92ZXI7XG4gICAgaWYgKGhvdmVyUG9wb3ZlciAmJiB0aGlzLnpJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBob3ZlclBvcG92ZXIuaG92ZXJFbC5zZXRDc3NTdHlsZXMoe1xuICAgICAgICB6SW5kZXg6IFN0cmluZyh0aGlzLnpJbmRleClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hvdmVyUG9wb3ZlcjogSG92ZXJQb3BvdmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSB6SW5kZXg/OiBudW1iZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm9Db25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBhdGggPSBwYXJhbXMucGF0aDtcbiAgICB0aGlzLmVsID0gcGFyYW1zLmVsO1xuXG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd2FpdFVudGlsQ29ubmVjdGVkKHRoaXMuZWwpO1xuICAgICAgdGhpcy51cGRhdGVaSW5kZXgodGhpcy5lbCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVpJbmRleChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuekluZGV4ID0gZ2V0WkluZGV4KGVsZW1lbnQpICsgMTtcbiAgfVxufVxuXG4vKipcbiAqIFdoYXQgYSByZW5kZXJlZCBsaW5rIERPRVMgd2hlbiBpdCBpcyBjbGlja2VkLCBob3ZlcmVkLCBkcmFnZ2VkIG9yIHJpZ2h0LWNsaWNrZWQuXG4gKlxuICoge0BsaW5rIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzfSBvbmx5IHBlcmZvcm1zIHRoZSBERUxFR0FUSU9OIGhhbGYgXHUyMDE0IHdoaWNoIGVsZW1lbnQgYW5cbiAqIGV2ZW50IGxhbmRlZCBvbiwgd2hpY2ggbGluayB0ZXh0IGl0IGNhcnJpZXMsIGFuZCB3aGljaCBvZiB0aGVzZSBtZXRob2RzIHRvIGNhbGwuIFRoZSBoYWxmIGl0IGRvZXMgbm90XG4gKiBwcm92aWRlIGlzIHRoaXMgb25lLCBhbmQgT2JzaWRpYW4ga2VlcHMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBwcml2YXRlOiB0aGUgb25seSBoYW5kbGUgb24gaXQgaXMgdGhlXG4gKiBpbnN0YW5jZSBhIGxpdmUgcHJldmlldyB2aWV3IHBhc3NlcyBpbi4ge0BsaW5rIGdldERvbUV2ZW50c0hhbmRsZXJzQ29uc3RydWN0b3J9IHVzZWQgdG8gb2J0YWluIGl0IGJ5XG4gKiBvcGVuaW5nIGEgcmVhbCBsZWFmIG9uIGFuIGFyYml0cmFyeSBub3RlIGFuZCBpbnRlcmNlcHRpbmcgdGhhdCBjYWxsIFx1MjAxNCB3aGljaCBtdXRhdGVkIHRoZSB1c2VyJ3NcbiAqIHdvcmtzcGFjZSBvbiBFVkVSWSBjb25zdW1lcidzIGxvYWQgKGEgdGFiIG9wZW5pbmcgYW5kIGNsb3NpbmcsIHR3byBgZmlsZS1vcGVuYCBhbmQgdHdvXG4gKiBgYWN0aXZlLWxlYWYtY2hhbmdlYCBldmVudHMsIGFuIHVucmVsYXRlZCBub3RlIHJlbmRlcmVkIGluIHByZXZpZXcpLlxuICpcbiAqIFRoZXNlIGJvZGllcyBhcmUgYSBwb3J0IG9mIHRoYXQgY2xhc3MsIHNvIG5vdGhpbmcgaGFzIHRvIGJlIG9wZW5lZC4gS2VlcGluZ1xuICoge0BsaW5rIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzfSBmb3IgdGhlIGRlbGVnYXRpb24gaXMgd2hhdCBrZWVwcyBmb290bm90ZSBsaW5rcyxcbiAqIHRhZ3MsIGV4dGVybmFsIGxpbmtzLCBtb2QtY2xpY2sgYW5kIGRyYWcgYmVoYXZpbmcgZXhhY3RseSBhcyB0aGV5IGRvIGluc2lkZSBhIHJlYWwgcHJldmlldy5cbiAqL1xuY2xhc3MgTGlua0RvbUV2ZW50c0hhbmRsZXJzIGltcGxlbWVudHMgRG9tRXZlbnRzSGFuZGxlcnMge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbmZvOiBEb21FdmVudHNIYW5kbGVyc0luZm8pIHt9XG5cbiAgcHVibGljIG9uRXh0ZXJuYWxMaW5rQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50LCB0YXJnZXRFbDogSFRNTEVsZW1lbnQsIGxpbmtUZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIWlzVXJsKGxpbmtUZXh0KSkge1xuICAgICAgbmV3IE5vdGljZSh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubm90aWNlcy5mYWlsZWRUb09wZW5VcmwsIHsgdXJsOiBsaW5rVGV4dCB9KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbW9kaWZpZXJQYW5lVHlwZSA9IEtleW1hcC5pc01vZEV2ZW50KCRldmVudCk7XG4gICAgdGFyZ2V0RWwud2luLm9wZW4obGlua1RleHQsIHR5cGVvZiBtb2RpZmllclBhbmVUeXBlID09PSAnYm9vbGVhbicgPyAnJyA6IG1vZGlmaWVyUGFuZVR5cGUpO1xuICB9XG5cbiAgcHVibGljIG9uRXh0ZXJuYWxMaW5rUmlnaHRDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1lbnUgPSBNZW51LmZvckV2ZW50KCRldmVudCk7XG4gICAgbWVudS5hZGRTZWN0aW9ucyhFWFRFUk5BTF9MSU5LX01FTlVfU0VDVElPTlMpO1xuICAgIGFkZENvcHlNZW51SXRlbShtZW51LCB0YXJnZXRFbCk7XG4gICAgdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2UuaGFuZGxlRXh0ZXJuYWxMaW5rQ29udGV4dE1lbnUobWVudSwgbGlua1RleHQpO1xuICB9XG5cbiAgcHVibGljIG9uSW50ZXJuYWxMaW5rQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50LCBfdGFyZ2V0RWw6IEhUTUxFbGVtZW50LCBsaW5rVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGxpbmtUZXh0LCB0aGlzLmluZm8ucGF0aCwgS2V5bWFwLmlzTW9kRXZlbnQoJGV2ZW50KSkpO1xuICB9XG5cbiAgcHVibGljIG9uSW50ZXJuYWxMaW5rRHJhZygkZXZlbnQ6IERyYWdFdmVudCwgX3RhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkcmFnTWFuYWdlciA9IHRoaXMuaW5mby5hcHAuZHJhZ01hbmFnZXI7XG4gICAgZHJhZ01hbmFnZXIub25EcmFnU3RhcnQoJGV2ZW50LCBkcmFnTWFuYWdlci5kcmFnTGluaygkZXZlbnQsIGxpbmtUZXh0LCB0aGlzLmluZm8ucGF0aCwgdGl0bGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkludGVybmFsTGlua01vdXNlb3ZlcigkZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIGBob3ZlclBhcmVudGAgaXMgdGhlIGluZm8gb2JqZWN0IGl0c2VsZiwgZXhhY3RseSBhcyBPYnNpZGlhbiBwYXNzZXMgaXRzIG93biBcdTIwMTQgd2hpY2ggaXMgd2hhdCBrZWVwc1xuICAgIC8vIGBGaXhlZFpJbmRleERvbUV2ZW50c0hhbmRsZXJzSW5mb2AncyBwb3BvdmVyIHotaW5kZXggZml4IGluIHBsYXkuXG4gICAgdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2UudHJpZ2dlcignaG92ZXItbGluaycsIHtcbiAgICAgIGV2ZW50OiAkZXZlbnQsXG4gICAgICBob3ZlclBhcmVudDogdGhpcy5pbmZvLFxuICAgICAgbGlua3RleHQ6IGxpbmtUZXh0LFxuICAgICAgc291cmNlOiAncHJldmlldycsXG4gICAgICBzb3VyY2VQYXRoOiB0aGlzLmluZm8ucGF0aCxcbiAgICAgIHRhcmdldEVsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25JbnRlcm5hbExpbmtSaWdodENsaWNrKCRldmVudDogTW91c2VFdmVudCwgdGFyZ2V0RWw6IEhUTUxFbGVtZW50LCBsaW5rVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWVudSA9IE1lbnUuZm9yRXZlbnQoJGV2ZW50KTtcbiAgICBtZW51LnNldFBhcmVudEVsZW1lbnQodGFyZ2V0RWwpO1xuICAgIG1lbnUuYWRkU2VjdGlvbnMoSU5URVJOQUxfTElOS19NRU5VX1NFQ1RJT05TKTtcbiAgICBhZGRDb3B5TWVudUl0ZW0obWVudSwgdGFyZ2V0RWwpO1xuICAgIHRoaXMuaW5mby5hcHAud29ya3NwYWNlLmhhbmRsZUxpbmtDb250ZXh0TWVudShtZW51LCBsaW5rVGV4dCwgdGhpcy5pbmZvLnBhdGgpO1xuICB9XG5cbiAgcHVibGljIG9uVGFnQ2xpY2soXyRldmVudDogTW91c2VFdmVudCwgX3RhcmdldEVsOiBIVE1MRWxlbWVudCwgdGFnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBgcmVnaXN0ZXJEb21FdmVudHNgIGhhcyBhbHJlYWR5IGNhbGxlZCBgcHJldmVudERlZmF1bHQoKWAgZm9yIGEgdGFnIGNsaWNrLlxuICAgIHRoaXMuaW5mby5hcHAuaW50ZXJuYWxQbHVnaW5zLmdldEVuYWJsZWRQbHVnaW5CeUlkKEludGVybmFsUGx1Z2luTmFtZS5HbG9iYWxTZWFyY2gpPy5vcGVuR2xvYmFsU2VhcmNoKGB0YWc6JHt0YWd9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW5kZXIgdGhlIG1hcmtkb3duIGFuZCBlbWJlZHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVsbCByZW5kZXIuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZnVsbCByZW5kZXIgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmdWxsUmVuZGVyKHBhcmFtczogRnVsbFJlbmRlclBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzb3VyY2VQYXRoID0gcGFyYW1zLnNvdXJjZVBhdGggPz8gJy8nO1xuICBsZXQgc2hvdWxkVW5sb2FkQ29tcG9uZW50ID0gZmFsc2U7XG4gIGxldCBjb21wb25lbnQ6IENvbXBvbmVudDtcbiAgaWYgKHBhcmFtcy5jb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBwYXJhbXMuY29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnQoKTtcbiAgICBjb21wb25lbnQubG9hZCgpO1xuICAgIHNob3VsZFVubG9hZENvbXBvbmVudCA9IHRydWU7XG4gIH1cblxuICB1c2luZyBfID0gY29tcG9uZW50LmFkZENoaWxkKG5ldyBFbWJlZEJ5RXh0ZW5zaW9uTWRQYXRjaENvbXBvbmVudChwYXJhbXMuYXBwLmVtYmVkUmVnaXN0cnkuZW1iZWRCeUV4dGVuc2lvbikpO1xuXG4gIGF3YWl0IE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKHBhcmFtcy5hcHAsIHBhcmFtcy5tYXJrZG93biwgcGFyYW1zLmVsLCBzb3VyY2VQYXRoLCBjb21wb25lbnQpO1xuXG4gIGlmIChzaG91bGRVbmxvYWRDb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQudW5sb2FkKCk7XG4gIH1cblxuICBpZiAocGFyYW1zLnNob3VsZFJlZ2lzdGVyTGlua0hhbmRsZXJzKSB7XG4gICAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFJlZ2lzdGVyTGlua0hhbmRsZXJzUGFyYW1zPih7XG4gICAgICBhcHA6IHBhcmFtcy5hcHAsXG4gICAgICBlbDogcGFyYW1zLmVsLFxuICAgICAgc291cmNlUGF0aDogcGFyYW1zLnNvdXJjZVBhdGhcbiAgICB9KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBNYXJrZG93biB0byBIVE1MLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNvbnZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgSFRNTCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYXJrZG93blRvSHRtbChwYXJhbXM6IE1hcmtkb3duVG9IdG1sUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBtYXJrZG93bixcbiAgICBzb3VyY2VQYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnQoKTtcbiAgY29tcG9uZW50LmxvYWQoKTtcbiAgY29uc3QgcmVuZGVyRGl2ID0gY3JlYXRlRGl2KCk7XG4gIGF3YWl0IE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKGFwcCwgbWFya2Rvd24sIHJlbmRlckRpdiwgc291cmNlUGF0aCA/PyAnJywgY29tcG9uZW50KTtcbiAgY29uc3QgaHRtbCA9IHJlbmRlckRpdi5pbm5lckhUTUw7XG4gIGNvbXBvbmVudC51bmxvYWQoKTtcbiAgcmV0dXJuIGh0bWw7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGxpbmsgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVnaXN0ZXJpbmcgbGluayBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTGlua0hhbmRsZXJzKHBhcmFtczogUmVnaXN0ZXJMaW5rSGFuZGxlcnNQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBlbCxcbiAgICBzb3VyY2VQYXRoXG4gIH0gPSBwYXJhbXM7XG4gIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzKFxuICAgIGVsLFxuICAgIG5ldyBMaW5rRG9tRXZlbnRzSGFuZGxlcnMoXG4gICAgICBuZXcgRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm8oe1xuICAgICAgICBhcHAsXG4gICAgICAgIGVsLFxuICAgICAgICBwYXRoOiBzb3VyY2VQYXRoID8/ICcnXG4gICAgICB9KVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGFuIGV4dGVybmFsIGxpbmsuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIGV4dGVybmFsIGxpbmsuXG4gKiBAcmV0dXJucyBUaGUgSFRNTEFuY2hvckVsZW1lbnQgY29udGFpbmluZyB0aGUgcmVuZGVyZWQgZXh0ZXJuYWwgbGluay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlckV4dGVybmFsTGluayhwYXJhbXM6IFJlbmRlckV4dGVybmFsTGlua1BhcmFtcyk6IFByb21pc2U8SFRNTEFuY2hvckVsZW1lbnQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICB1cmxcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgZGlzcGxheVRleHQgPSBwYXJhbXMuZGlzcGxheVRleHQgPz8gdXJsO1xuICBjb25zdCB3cmFwcGVyRWwgPSBjcmVhdGVTcGFuKCk7XG4gIGF3YWl0IGZ1bGxSZW5kZXIoe1xuICAgIGFwcCxcbiAgICBlbDogd3JhcHBlckVsLFxuICAgIG1hcmtkb3duOiBgWyR7ZGlzcGxheVRleHR9XSgke3VybH0pYFxuICB9KTtcbiAgY29uc3QgYUVsID0gd3JhcHBlckVsLmZpbmQoJ2EnKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMoe1xuICAgIGFwcCxcbiAgICBlbDogYUVsXG4gIH0pO1xuICByZXR1cm4gYUVsO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYW4gaW50ZXJuYWwgbGluay5cbiAqXG4gKiBXaGF0IGNsaWNraW5nIHRoZSByZW5kZXJlZCBsaW5rIGRvZXMgZGVwZW5kcyBvbiB3aGF0IGl0IG5hbWVzOlxuICpcbiAqIC0gQSBGSUxFIGlzIG9wZW5lZCBieSBPYnNpZGlhbidzIG93biBsaW5rIGhhbmRsZXIgXHUyMDE0IGFuZCwgd2l0aFxuICogICB7QGxpbmsgUmVuZGVySW50ZXJuYWxMaW5rUGFyYW1zLnNob3VsZFJldmVhbEZpbGV9LCBhZGRpdGlvbmFsbHkgcmV2ZWFsZWQgaW4gdGhlIGZpbGUgZXhwbG9yZXIuXG4gKiAtIEEgRk9MREVSIGNhbm5vdCBiZSBvcGVuZWQsIHNvIGl0cyBGT0xERVIgTk9URSBpcyBcdTIwMTQgdGhlIG5vdGUgd2hvc2UgcHJvcGVydGllcyBkZXNjcmliZSB0aGUgZm9sZGVyXG4gKiAgIGl0c2VsZiwgcmVzb2x2ZWQgdGhyb3VnaCB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGV9IChieSBkZWZhdWx0IGZyb20gdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYFxuICogICBwbHVnaW4ncyBsaXZlIGNvbmZpZ3VyYXRpb24pLiBUaGUgcmV2ZWFsIGxhbmRzIG9uIHRoYXQgbm90ZSwgdW5sZXNzIHRoZSBub3RlIGlzIGhpZGRlbiBpbiB0aGVcbiAqICAgZXhwbG9yZXIsIGluIHdoaWNoIGNhc2UgaXQgbGFuZHMgb24gdGhlIGZvbGRlciBcdTIwMTQgcmV2ZWFsaW5nIGEgaGlkZGVuIG5vdGUgd291bGQgaGlnaGxpZ2h0IG5vdGhpbmcuXG4gKiAgIEEgZm9sZGVyIHdpdGggTk8gZm9sZGVyIG5vdGUgcmV2ZWFscyB0aGUgZm9sZGVyIGFuZCBvcGVucyBub3RoaW5nOiBub3RoaW5nIGhlcmUgZXZlciBjcmVhdGVzIGEgbm90ZS5cbiAqXG4gKiBFdmVyeXRoaW5nIGlzIHJlc29sdmVkIGF0IENMSUNLIHRpbWUgcmF0aGVyIHRoYW4gYXQgcmVuZGVyIHRpbWUsIGRlbGliZXJhdGVseTogYSByZW5kZXJlZCBsaW5rIG91dGxpdmVzXG4gKiB0aGUgb3BlcmF0aW9uIHRoYXQgcHJvZHVjZWQgaXQsIHNvIGEgZGVzdGluYXRpb24gcmVuYW1lZCBpbiBiZXR3ZWVuIHN0aWxsIHJldmVhbHMgdGhlIHJpZ2h0IGl0ZW0sIGFuZCBhXG4gKiBmb2xkZXIgbm90ZSB3cml0dGVuIGFmdGVyIHRoZSBsaW5rIGFwcGVhcmVkIGlzIHN0aWxsIGZvdW5kLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuZGVyaW5nIHRoZSBpbnRlcm5hbCBsaW5rLlxuICogQHJldHVybnMgVGhlIEhUTUxBbmNob3JFbGVtZW50IGNvbnRhaW5pbmcgdGhlIHJlbmRlcmVkIGludGVybmFsIGxpbmsuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJJbnRlcm5hbExpbmsocGFyYW1zOiBSZW5kZXJJbnRlcm5hbExpbmtQYXJhbXMpOiBQcm9taXNlPEhUTUxBbmNob3JFbGVtZW50PiB7XG4gIGNvbnN0IHtcbiAgICBhZnRlclJldmVhbCxcbiAgICBhcHAsXG4gICAgZm9sZGVyTm90ZSxcbiAgICBwYXRoT3JBYnN0cmFjdEZpbGUsXG4gICAgc2hvdWxkUmV2ZWFsRmlsZVxuICB9ID0gcGFyYW1zO1xuXG4gIC8vIEEgRE9NIGxpc3RlbmVyIGNhbm5vdCBhd2FpdCwgc28gdGhlIHJldmVhbCwgYW5kIHRoZSBob29rIG9yZGVyZWQgYWZ0ZXIgaXQsIHJ1biBkZXRhY2hlZC5cbiAgZnVuY3Rpb24gcmV2ZWFsKGFic3RyYWN0RmlsZVRvUmV2ZWFsOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcmV2ZWFsSW5GaWxlRXhwbG9yZXIoeyBhYnN0cmFjdEZpbGU6IGFic3RyYWN0RmlsZVRvUmV2ZWFsLCBhcHAgfSk7XG4gICAgICBhd2FpdCBhZnRlclJldmVhbD8uKCk7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgYWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yQWJzdHJhY3RGaWxlKTtcbiAgY29uc3QgZGlzcGxheVRleHQgPSBwYXJhbXMuZGlzcGxheVRleHQgPz8gcGF0aDtcbiAgaWYgKGlzRm9sZGVyKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gY3JlYXRlRWwoJ2EnLCB7IHRleHQ6IGRpc3BsYXlUZXh0IH0sIChhRWwpID0+IHtcbiAgICAgIGFFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnKHsgYXBwLCAuLi5mb2xkZXJOb3RlIH0pO1xuICAgICAgICBjb25zdCBmb2xkZXJOb3RlRmlsZSA9IHJlc29sdmVGb2xkZXJOb3RlKHsgYXBwLCBjb25maWcsIGZvbGRlcjogYWJzdHJhY3RGaWxlIH0pO1xuICAgICAgICByZXZlYWwoZm9sZGVyTm90ZUZpbGUgJiYgIWNvbmZpZy5pc0hpZGRlbiA/IGZvbGRlck5vdGVGaWxlIDogYWJzdHJhY3RGaWxlKTtcbiAgICAgICAgaWYgKGZvbGRlck5vdGVGaWxlKSB7XG4gICAgICAgICAgLy8gQSBET00gbGlzdGVuZXIgY2Fubm90IGF3YWl0LCBhbmQgdGhlIG9wZW4gaGFzIHRvIG91dGxpdmUgdGhpcyBoYW5kbGVyOiBpdCBzZXR0bGVzIGZpcnN0LCBmb3JcbiAgICAgICAgICAvLyB0aGUgY2xpY2sgdGhhdCBsYW5kcyByaWdodCBhcyBhbiBvcGVyYXRpb24gZmluaXNoZXMgd3JpdGluZy5cbiAgICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBvcGVuQWZ0ZXJTZXR0bGluZyhhcHAsIGZvbGRlck5vdGVGaWxlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgd3JhcHBlckVsID0gY3JlYXRlU3BhbigpO1xuICBhd2FpdCBmdWxsUmVuZGVyKHtcbiAgICBhcHAsXG4gICAgZWw6IHdyYXBwZXJFbCxcbiAgICBtYXJrZG93bjogYFtbJHtwYXRofXwke2Rpc3BsYXlUZXh0fV1dYFxuICB9KTtcbiAgY29uc3QgYUVsID0gd3JhcHBlckVsLmZpbmQoJ2EnKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMoe1xuICAgIGFwcCxcbiAgICBlbDogYUVsXG4gIH0pO1xuICBpZiAoc2hvdWxkUmV2ZWFsRmlsZSA/PyBmYWxzZSkge1xuICAgIGFFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIC8vIExheWVyZWQgT04gVE9QIG9mIE9ic2lkaWFuJ3Mgb3duIGhhbmRsZXIgXHUyMDE0IG5vIGBwcmV2ZW50RGVmYXVsdGAsIHNvIHRoZSBvcGVuIGlzIHVudG91Y2hlZC4gQSBwYXRoXG4gICAgICAvLyB0aGF0IHJlc29sdmVzIHRvIG5vdGhpbmcgZ2V0cyBubyByZXZlYWw6IGFuIHVucmVzb2x2ZWQgbGluayBoYXMgbm90aGluZyB0byByZXZlYWwsIGFuZCBjbGlja2luZ1xuICAgICAgLy8gb25lIENSRUFURVMgdGhlIG5vdGUgaXQgbmFtZXMuXG4gICAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG4gICAgICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgICAgIHJldmVhbChmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYUVsO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIGBjbGlwYm9hcmRgLXNlY3Rpb24gQ29weSBpdGVtIGV2ZXJ5IGxpbmsgY29udGV4dCBtZW51IGNhcnJpZXMsIGNvcHlpbmcgdGhlIGxpbmsncyBESVNQTEFZXG4gKiB0ZXh0IFx1MjAxNCB3aGljaCBpcyB3aGF0IE9ic2lkaWFuJ3Mgb3duIG1lbnUgY29waWVzLCBub3QgdGhlIHRhcmdldCBwYXRoLlxuICpcbiAqIEBwYXJhbSBtZW51IC0gVGhlIG1lbnUgdG8gYWRkIHRoZSBpdGVtIHRvLlxuICogQHBhcmFtIHRhcmdldEVsIC0gVGhlIGxpbmsgZWxlbWVudCB0aGUgbWVudSB3YXMgb3BlbmVkIG9uLlxuICovXG5mdW5jdGlvbiBhZGRDb3B5TWVudUl0ZW0obWVudTogTWVudSwgdGFyZ2V0RWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgIGl0ZW1cbiAgICAgIC5zZXRTZWN0aW9uKCdjbGlwYm9hcmQnKVxuICAgICAgLnNldFRpdGxlKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5tZW51LmNvcHkpKVxuICAgICAgLnNldEljb24oJ2x1Y2lkZS1jb3B5JylcbiAgICAgIC5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGFyZ2V0RWwud2luLm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRhcmdldEVsLmdldFRleHQoKSkpO1xuICAgICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGEgZmlsZSBpbiB0aGUgYWN0aXZlIGxlYWYsIG9uY2UgdGhlIHZhdWx0IGhhcyBzZXR0bGVkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZSB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBmaWxlIGlzIG9wZW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW5BZnRlclNldHRsaW5nKGFwcDogQXBwLCBmaWxlOiBURmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcCh7IG1pbGxpc2Vjb25kczogREVMQVlfQkVGT1JFX09QRU5fSU5fTUlMTElTRUNPTkRTIH0pO1xuICBhd2FpdCBhcHAud29ya3NwYWNlLmdldExlYWYoKS5vcGVuRmlsZShmaWxlLCB7IGFjdGl2ZTogdHJ1ZSB9KTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG1DQUFtQztBQUM1QyxTQUFTLGFBQWE7QUFDdEIsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxTQUFTO0FBQ2xCO0FBQUEs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
|
|
388
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXJrZG93bi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHByb2Nlc3NpbmcgTWFya2Rvd24gY29udGVudCBpbiBPYnNpZGlhbi5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVlcGx5IGNvdXBsZWQgdG8gT2JzaWRpYW4gcnVudGltZTsgcmVxdWlyZXMgcnVubmluZyB2YXVsdCBmb3IgbWVhbmluZ2Z1bCB0ZXN0aW5nLiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIERvbUV2ZW50c0hhbmRsZXJzLFxuICBEb21FdmVudHNIYW5kbGVyc0luZm8sXG4gIEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkXG59IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QnO1xuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgaW52b2tlQXN5bmNTYWZlbHksXG4gIHNsZWVwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBnZXRaSW5kZXgsXG4gIHdhaXRVbnRpbENvbm5lY3RlZFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvaHRtbC1lbGVtZW50JztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdXJsJztcbmltcG9ydCB7IEludGVybmFsUGx1Z2luTmFtZSB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7IHQgfSBmcm9tICdpMThuZXh0JztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG92ZXJQb3BvdmVyLFxuICBLZXltYXAsXG4gIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLFxuICBNYXJrZG93blJlbmRlcmVyLFxuICBNZW51LFxuICBOb3RpY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHR5cGUgeyBGb2xkZXJOb3RlTG9jYXRpb24gfSBmcm9tICcuL2ZvbGRlci1ub3RlLnRzJztcblxuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IHJldmVhbEluRmlsZUV4cGxvcmVyIH0gZnJvbSAnLi9maWxlLWV4cGxvcmVyLnRzJztcbmltcG9ydCB7XG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0UGF0aCxcbiAgaXNGaWxlLFxuICBpc0ZvbGRlclxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHJlc29sdmVGb2xkZXJOb3RlLFxuICByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1xufSBmcm9tICcuL2ZvbGRlci1ub3RlLnRzJztcblxuLyoqXG4gKiBIb3cgbG9uZyB0byBsZXQgT2JzaWRpYW4gc2V0dGxlIGJlZm9yZSBvcGVuaW5nIGEgZm9sZGVyIG5vdGUuIFRoZSBjbGljayBjYW4gbGFuZCByaWdodCBhZnRlciBhblxuICogb3BlcmF0aW9uIHRoYXQgY3JlYXRlZCwgcmV3cm90ZSBhbmQgdHJhc2hlZCBub3RlcywgYW5kIG9wZW5pbmcgaW50byB0aGUgbWlkZGxlIG9mIE9ic2lkaWFuJ3Mgb3duXG4gKiByZWFjdGlvbiB0byB0aGF0IHNob3dzIHRoZSBub3RlIGJlZm9yZSBpdHMgbWV0YWRhdGEgaGFzIGNhdWdodCB1cC5cbiAqL1xuY29uc3QgREVMQVlfQkVGT1JFX09QRU5fSU5fTUlMTElTRUNPTkRTID0gMjAwO1xuXG4vKipcbiAqIFRoZSBzZWN0aW9ucyBhbiBleHRlcm5hbCBsaW5rJ3MgY29udGV4dCBtZW51IGRlY2xhcmVzLCBpbiBPYnNpZGlhbidzIG93biBvcmRlci4gVGhlIG9yZGVyIGlzIHdoYXRcbiAqIHtAbGluayBNZW51LnNvcnR9IGdyb3VwcyB0aGUgaXRlbXMgYnksIHNvIGl0IGhhcyB0byBtYXRjaCB3aGF0XG4gKiB7QGxpbmsgV29ya3NwYWNlLmhhbmRsZUV4dGVybmFsTGlua0NvbnRleHRNZW51fSBhbmQgZXZlcnkgYHVybC1tZW51YCBsaXN0ZW5lciBleHBlY3QgdG8gZmlsbC5cbiAqL1xuY29uc3QgRVhURVJOQUxfTElOS19NRU5VX1NFQ1RJT05TID0gW1xuICAndGl0bGUnLFxuICAnb3BlbicsXG4gICdzZWxlY3Rpb24nLFxuICAnY2xpcGJvYXJkJyxcbiAgJ2luZm8nLFxuICAnYWN0aW9uJyxcbiAgJ3ZpZXcnLFxuICAnJyxcbiAgJ2Rhbmdlcidcbl07XG5cbi8qKlxuICogVGhlIHNlY3Rpb25zIGFuIGludGVybmFsIGxpbmsncyBjb250ZXh0IG1lbnUgZGVjbGFyZXMsIGluIE9ic2lkaWFuJ3Mgb3duIG9yZGVyLiBTZWVcbiAqIHtAbGluayBFWFRFUk5BTF9MSU5LX01FTlVfU0VDVElPTlN9IOKAlCB0aGUgY291bnRlcnBhcnQgZm9yIGBmaWxlLW1lbnVgIGxpc3RlbmVycy5cbiAqL1xuY29uc3QgSU5URVJOQUxfTElOS19NRU5VX1NFQ1RJT05TID0gW1xuICAndGl0bGUnLFxuICAnb3BlbicsXG4gICdhY3Rpb24nLFxuICAnY2xpcGJvYXJkJyxcbiAgJ3ZpZXcnLFxuICAnaW5mbycsXG4gICcnLFxuICAnZGFuZ2VyJ1xuXTtcblxuLyoqXG4gKiBUaGUgcGFyYW1zIGZvciB0aGUgZnVsbCByZW5kZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVsbFJlbmRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBDb21wb25lbnQgaW5zdGFuY2UgdG8gdXNlIGZvciB0aGUgcmVuZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50PzogQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgSFRNTEVsZW1lbnQgdG8gcmVuZGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgZWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgTWFya2Rvd24gc3RyaW5nIHRvIHJlbmRlci5cbiAgICovXG4gIHJlYWRvbmx5IG1hcmtkb3duOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVnaXN0ZXIgbGluayBoYW5kbGVycyBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlZ2lzdGVyTGlua0hhbmRsZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBwYXRoIHRvIHJlc29sdmUgcmVsYXRpdmUgbGlua3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnLydgXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBtYXJrZG93blRvSHRtbH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFya2Rvd25Ub0h0bWxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgTWFya2Rvd24gc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqL1xuICByZWFkb25seSBtYXJrZG93bjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggdG8gcmVzb2x2ZSByZWxhdGl2ZSBsaW5rcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJMaW5rSGFuZGxlcnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyTGlua0hhbmRsZXJzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIEhUTUxFbGVtZW50IHRvIHJlZ2lzdGVyIGxpbmsgaGFuZGxlcnMgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggdG8gcmVzb2x2ZSByZWxhdGl2ZSBsaW5rcyBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZW5kZXJFeHRlcm5hbExpbmt9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlckV4dGVybmFsTGlua1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBleHRlcm5hbCBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheVRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgdG8gcmVuZGVyIHRoZSBleHRlcm5hbCBsaW5rIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXItbm90ZSBzZXR1cCB7QGxpbmsgcmVuZGVySW50ZXJuYWxMaW5rfSByZXNvbHZlcyBhIGZvbGRlciBsaW5rJ3Mgbm90ZSB3aXRoIOKAlCBldmVyeXRoaW5nXG4gKiB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGVDb25maWd9IHRha2VzIGV4Y2VwdCB0aGUgYXBwLCB3aGljaCB0aGUgbGluayBhbHJlYWR5IGNhcnJpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySW50ZXJuYWxMaW5rRm9sZGVyTm90ZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnkuIFNlZSB7QGxpbmsgUmVzb2x2ZUZvbGRlck5vdGVDb25maWdQYXJhbXMuZXh0ZW5zaW9uc30uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ21kJ11gXG4gICAqL1xuICByZWFkb25seSBleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci4gU2VlXG4gICAqIHtAbGluayBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcy5pc0hpZGRlbn0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzSGlkZGVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlcmUgdGhlIG5vdGUgc2l0cyByZWxhdGl2ZSB0byBpdHMgZm9sZGVyLiBTZWUge0BsaW5rIFJlc29sdmVGb2xkZXJOb3RlQ29uZmlnUGFyYW1zLmxvY2F0aW9ufS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBGb2xkZXJOb3RlTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBmb2xkZXIgbm90ZSBvZiBhIGZvbGRlci4gU2VlIHtAbGluayBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcy5yZXNvbHZlTmFtZX0uXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZS5cbiAgICogQGRlZmF1bHQgYChmb2xkZXIpID0+IGZvbGRlci5uYW1lYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZU5hbWU/OiAoZm9sZGVyOiBURm9sZGVyKSA9PiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlbmRlckludGVybmFsTGlua30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySW50ZXJuYWxMaW5rUGFyYW1zIHtcbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBhIGNsaWNrIGhhcyByZXZlYWxlZCB0aGUgbGluaydzIGRlc3RpbmF0aW9uIGluIHRoZSBmaWxlIGV4cGxvcmVyLCBvbmNlIHRoZSBleHBsb3JlciBoYXNcbiAgICogZmluaXNoZWQgdGFraW5nIHRoZSBmb2N1cyBmb3IgaXQg4oCUIHNvIHRoaXMgaXMgd2hlcmUgYSBjYWxsZXIgbW92ZXMgdGhlIGZvY3VzIHNvbWV3aGVyZSBlbHNlLlxuICAgKlxuICAgKiBBd2FpdGVkLCBhbmQgY2FsbGVkIG9ubHkgZm9yIGEgY2xpY2sgdGhhdCByZXZlYWxzOiBhbHdheXMgZm9yIGEgZm9sZGVyIGxpbmssIGFuZCBmb3IgYSBmaWxlIGxpbmsgb25seVxuICAgKiB3aXRoIHtAbGluayBSZW5kZXJJbnRlcm5hbExpbmtQYXJhbXMuc2hvdWxkUmV2ZWFsRmlsZX0gYW5kIGEgZGVzdGluYXRpb24gdGhhdCBleGlzdHMuIFdpdGggdGhlIGZpbGVcbiAgICogZXhwbG9yZXIgZGlzYWJsZWQgaXQgaXMgc3RpbGwgY2FsbGVkLCByaWdodCBhd2F5LCBzaW5jZSB0aGVyZSBpcyB0aGVuIG5vdGhpbmcgdG8gd2FpdCBmb3IuXG4gICAqL1xuICByZWFkb25seSBhZnRlclJldmVhbD86ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBpbnRlcm5hbCBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheVRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvdyB0byBhbnN3ZXIgd2hpY2ggbm90ZSBpcyBhIGZvbGRlcidzIGZvbGRlciBub3RlLCB3aGVuIHRoZSBsaW5rIG5hbWVzIGEgRk9MREVSLlxuICAgKlxuICAgKiBPbWl0dGVkIG1lYW5zIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b306IHRoZSBpbnN0YWxsZWQgYGZvbGRlci1ub3Rlc2AgcGx1Z2luJ3MgbGl2ZVxuICAgKiBjb25maWd1cmF0aW9uLCBvciBhIG5vdGUgbmFtZWQgYWZ0ZXIgaXRzIGZvbGRlciwgaW5zaWRlIGl0LCB3aGVuIHRoYXQgcGx1Z2luIGlzIGFic2VudC4gUGFzc1xuICAgKiBgeyBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUgfWAgZm9yIGEgZm9sZGVyIGxpbmsgdGhhdCBtdXN0IG9ubHkgZXZlciByZXZlYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB7fWBcbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlck5vdGU/OiBSZW5kZXJJbnRlcm5hbExpbmtGb2xkZXJOb3RlT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byByZW5kZXIgdGhlIGludGVybmFsIGxpbmsgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yQWJzdHJhY3RGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY2xpY2tpbmcgYSBGSUxFIGxpbmsgYWxzbyBoaWdobGlnaHRzIHRoYXQgZmlsZSBpbiB0aGUgZmlsZSBleHBsb3Jlciwgb24gdG9wIG9mIHRoZSBvcGVuXG4gICAqIE9ic2lkaWFuJ3Mgb3duIGxpbmsgaGFuZGxlciBwZXJmb3Jtcy5cbiAgICpcbiAgICogT3B0LWluLCB1bmxpa2UgdGhlIGZvbGRlciBicmFuY2g6IGEgZm9sZGVyIGxpbmsgaGFzIGFsd2F5cyByZXZlYWxlZCAocmV2ZWFsaW5nIHdhcyBhbGwgaXRzIGNsaWNrXG4gICAqIGNvdWxkIG1lYW4pLCB3aGVyZWFzIGEgZmlsZSBsaW5rIGhhcyBhbHdheXMgb25seSBvcGVuZWQg4oCUIHNvIHR1cm5pbmcgdGhpcyBvbiBieSBkZWZhdWx0IHdvdWxkIGNoYW5nZVxuICAgKiB3aGF0IGV2ZXJ5IGV4aXN0aW5nIGNhbGxlcidzIGxpbmsgZG9lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmV2ZWFsRmlsZT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGaXhlZFpJbmRleERvbUV2ZW50c0hhbmRsZXJzSW5mb0NvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5jbGFzcyBFbWJlZEJ5RXh0ZW5zaW9uTWRQYXRjaENvbXBvbmVudCBleHRlbmRzIE1vbmtleUFyb3VuZENvbXBvbmVudCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVtYmVkQnlFeHRlbnNpb246IEVtYmVkUmVnaXN0cnlFbWJlZEJ5RXh0ZW5zaW9uUmVjb3JkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgICRvYmplY3Q6IHRoaXMuZW1iZWRCeUV4dGVuc2lvbixcbiAgICAgIG1ldGhvZE5hbWU6ICdtZCcsXG4gICAgICBwYXRjaEhhbmRsZXI6ICh7XG4gICAgICAgIGZhbGxiYWNrLFxuICAgICAgICBvcmlnaW5hbEFyZ3VtZW50czogW2NvbnRleHRdXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnRleHQuZGlzcGxheU1vZGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm8gaW1wbGVtZW50cyBEb21FdmVudHNIYW5kbGVyc0luZm8ge1xuICBwdWJsaWMgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgaG92ZXJQb3BvdmVyKCk6IEhvdmVyUG9wb3ZlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9ob3ZlclBvcG92ZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IGhvdmVyUG9wb3Zlcihob3ZlclBvcG92ZXI6IEhvdmVyUG9wb3ZlciB8IG51bGwpIHtcbiAgICB0aGlzLl9ob3ZlclBvcG92ZXIgPSBob3ZlclBvcG92ZXI7XG4gICAgaWYgKGhvdmVyUG9wb3ZlciAmJiB0aGlzLnpJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBob3ZlclBvcG92ZXIuaG92ZXJFbC5zZXRDc3NTdHlsZXMoe1xuICAgICAgICB6SW5kZXg6IFN0cmluZyh0aGlzLnpJbmRleClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hvdmVyUG9wb3ZlcjogSG92ZXJQb3BvdmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSB6SW5kZXg/OiBudW1iZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm9Db25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBhdGggPSBwYXJhbXMucGF0aDtcbiAgICB0aGlzLmVsID0gcGFyYW1zLmVsO1xuXG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd2FpdFVudGlsQ29ubmVjdGVkKHRoaXMuZWwpO1xuICAgICAgdGhpcy51cGRhdGVaSW5kZXgodGhpcy5lbCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVpJbmRleChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuekluZGV4ID0gZ2V0WkluZGV4KGVsZW1lbnQpICsgMTtcbiAgfVxufVxuXG4vKipcbiAqIFdoYXQgYSByZW5kZXJlZCBsaW5rIERPRVMgd2hlbiBpdCBpcyBjbGlja2VkLCBob3ZlcmVkLCBkcmFnZ2VkIG9yIHJpZ2h0LWNsaWNrZWQuXG4gKlxuICoge0BsaW5rIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzfSBvbmx5IHBlcmZvcm1zIHRoZSBERUxFR0FUSU9OIGhhbGYg4oCUIHdoaWNoIGVsZW1lbnQgYW5cbiAqIGV2ZW50IGxhbmRlZCBvbiwgd2hpY2ggbGluayB0ZXh0IGl0IGNhcnJpZXMsIGFuZCB3aGljaCBvZiB0aGVzZSBtZXRob2RzIHRvIGNhbGwuIFRoZSBoYWxmIGl0IGRvZXMgbm90XG4gKiBwcm92aWRlIGlzIHRoaXMgb25lLCBhbmQgT2JzaWRpYW4ga2VlcHMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBwcml2YXRlOiB0aGUgb25seSBoYW5kbGUgb24gaXQgaXMgdGhlXG4gKiBpbnN0YW5jZSBhIGxpdmUgcHJldmlldyB2aWV3IHBhc3NlcyBpbi4ge0BsaW5rIGdldERvbUV2ZW50c0hhbmRsZXJzQ29uc3RydWN0b3J9IHVzZWQgdG8gb2J0YWluIGl0IGJ5XG4gKiBvcGVuaW5nIGEgcmVhbCBsZWFmIG9uIGFuIGFyYml0cmFyeSBub3RlIGFuZCBpbnRlcmNlcHRpbmcgdGhhdCBjYWxsIOKAlCB3aGljaCBtdXRhdGVkIHRoZSB1c2VyJ3NcbiAqIHdvcmtzcGFjZSBvbiBFVkVSWSBjb25zdW1lcidzIGxvYWQgKGEgdGFiIG9wZW5pbmcgYW5kIGNsb3NpbmcsIHR3byBgZmlsZS1vcGVuYCBhbmQgdHdvXG4gKiBgYWN0aXZlLWxlYWYtY2hhbmdlYCBldmVudHMsIGFuIHVucmVsYXRlZCBub3RlIHJlbmRlcmVkIGluIHByZXZpZXcpLlxuICpcbiAqIFRoZXNlIGJvZGllcyBhcmUgYSBwb3J0IG9mIHRoYXQgY2xhc3MsIHNvIG5vdGhpbmcgaGFzIHRvIGJlIG9wZW5lZC4gS2VlcGluZ1xuICoge0BsaW5rIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzfSBmb3IgdGhlIGRlbGVnYXRpb24gaXMgd2hhdCBrZWVwcyBmb290bm90ZSBsaW5rcyxcbiAqIHRhZ3MsIGV4dGVybmFsIGxpbmtzLCBtb2QtY2xpY2sgYW5kIGRyYWcgYmVoYXZpbmcgZXhhY3RseSBhcyB0aGV5IGRvIGluc2lkZSBhIHJlYWwgcHJldmlldy5cbiAqL1xuY2xhc3MgTGlua0RvbUV2ZW50c0hhbmRsZXJzIGltcGxlbWVudHMgRG9tRXZlbnRzSGFuZGxlcnMge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbmZvOiBEb21FdmVudHNIYW5kbGVyc0luZm8pIHt9XG5cbiAgcHVibGljIG9uRXh0ZXJuYWxMaW5rQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50LCB0YXJnZXRFbDogSFRNTEVsZW1lbnQsIGxpbmtUZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIWlzVXJsKGxpbmtUZXh0KSkge1xuICAgICAgbmV3IE5vdGljZSh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubm90aWNlcy5mYWlsZWRUb09wZW5VcmwsIHsgdXJsOiBsaW5rVGV4dCB9KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbW9kaWZpZXJQYW5lVHlwZSA9IEtleW1hcC5pc01vZEV2ZW50KCRldmVudCk7XG4gICAgdGFyZ2V0RWwud2luLm9wZW4obGlua1RleHQsIHR5cGVvZiBtb2RpZmllclBhbmVUeXBlID09PSAnYm9vbGVhbicgPyAnJyA6IG1vZGlmaWVyUGFuZVR5cGUpO1xuICB9XG5cbiAgcHVibGljIG9uRXh0ZXJuYWxMaW5rUmlnaHRDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1lbnUgPSBNZW51LmZvckV2ZW50KCRldmVudCk7XG4gICAgbWVudS5hZGRTZWN0aW9ucyhFWFRFUk5BTF9MSU5LX01FTlVfU0VDVElPTlMpO1xuICAgIGFkZENvcHlNZW51SXRlbShtZW51LCB0YXJnZXRFbCk7XG4gICAgdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2UuaGFuZGxlRXh0ZXJuYWxMaW5rQ29udGV4dE1lbnUobWVudSwgbGlua1RleHQpO1xuICB9XG5cbiAgcHVibGljIG9uSW50ZXJuYWxMaW5rQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50LCBfdGFyZ2V0RWw6IEhUTUxFbGVtZW50LCBsaW5rVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGxpbmtUZXh0LCB0aGlzLmluZm8ucGF0aCwgS2V5bWFwLmlzTW9kRXZlbnQoJGV2ZW50KSkpO1xuICB9XG5cbiAgcHVibGljIG9uSW50ZXJuYWxMaW5rRHJhZygkZXZlbnQ6IERyYWdFdmVudCwgX3RhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkcmFnTWFuYWdlciA9IHRoaXMuaW5mby5hcHAuZHJhZ01hbmFnZXI7XG4gICAgZHJhZ01hbmFnZXIub25EcmFnU3RhcnQoJGV2ZW50LCBkcmFnTWFuYWdlci5kcmFnTGluaygkZXZlbnQsIGxpbmtUZXh0LCB0aGlzLmluZm8ucGF0aCwgdGl0bGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkludGVybmFsTGlua01vdXNlb3ZlcigkZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldEVsOiBIVE1MRWxlbWVudCwgbGlua1RleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIGBob3ZlclBhcmVudGAgaXMgdGhlIGluZm8gb2JqZWN0IGl0c2VsZiwgZXhhY3RseSBhcyBPYnNpZGlhbiBwYXNzZXMgaXRzIG93biDigJQgd2hpY2ggaXMgd2hhdCBrZWVwc1xuICAgIC8vIGBGaXhlZFpJbmRleERvbUV2ZW50c0hhbmRsZXJzSW5mb2AncyBwb3BvdmVyIHotaW5kZXggZml4IGluIHBsYXkuXG4gICAgdGhpcy5pbmZvLmFwcC53b3Jrc3BhY2UudHJpZ2dlcignaG92ZXItbGluaycsIHtcbiAgICAgIGV2ZW50OiAkZXZlbnQsXG4gICAgICBob3ZlclBhcmVudDogdGhpcy5pbmZvLFxuICAgICAgbGlua3RleHQ6IGxpbmtUZXh0LFxuICAgICAgc291cmNlOiAncHJldmlldycsXG4gICAgICBzb3VyY2VQYXRoOiB0aGlzLmluZm8ucGF0aCxcbiAgICAgIHRhcmdldEVsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25JbnRlcm5hbExpbmtSaWdodENsaWNrKCRldmVudDogTW91c2VFdmVudCwgdGFyZ2V0RWw6IEhUTUxFbGVtZW50LCBsaW5rVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWVudSA9IE1lbnUuZm9yRXZlbnQoJGV2ZW50KTtcbiAgICBtZW51LnNldFBhcmVudEVsZW1lbnQodGFyZ2V0RWwpO1xuICAgIG1lbnUuYWRkU2VjdGlvbnMoSU5URVJOQUxfTElOS19NRU5VX1NFQ1RJT05TKTtcbiAgICBhZGRDb3B5TWVudUl0ZW0obWVudSwgdGFyZ2V0RWwpO1xuICAgIHRoaXMuaW5mby5hcHAud29ya3NwYWNlLmhhbmRsZUxpbmtDb250ZXh0TWVudShtZW51LCBsaW5rVGV4dCwgdGhpcy5pbmZvLnBhdGgpO1xuICB9XG5cbiAgcHVibGljIG9uVGFnQ2xpY2soXyRldmVudDogTW91c2VFdmVudCwgX3RhcmdldEVsOiBIVE1MRWxlbWVudCwgdGFnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBgcmVnaXN0ZXJEb21FdmVudHNgIGhhcyBhbHJlYWR5IGNhbGxlZCBgcHJldmVudERlZmF1bHQoKWAgZm9yIGEgdGFnIGNsaWNrLlxuICAgIHRoaXMuaW5mby5hcHAuaW50ZXJuYWxQbHVnaW5zLmdldEVuYWJsZWRQbHVnaW5CeUlkKEludGVybmFsUGx1Z2luTmFtZS5HbG9iYWxTZWFyY2gpPy5vcGVuR2xvYmFsU2VhcmNoKGB0YWc6JHt0YWd9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW5kZXIgdGhlIG1hcmtkb3duIGFuZCBlbWJlZHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVsbCByZW5kZXIuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZnVsbCByZW5kZXIgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmdWxsUmVuZGVyKHBhcmFtczogRnVsbFJlbmRlclBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzb3VyY2VQYXRoID0gcGFyYW1zLnNvdXJjZVBhdGggPz8gJy8nO1xuICBsZXQgc2hvdWxkVW5sb2FkQ29tcG9uZW50ID0gZmFsc2U7XG4gIGxldCBjb21wb25lbnQ6IENvbXBvbmVudDtcbiAgaWYgKHBhcmFtcy5jb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBwYXJhbXMuY29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnQoKTtcbiAgICBjb21wb25lbnQubG9hZCgpO1xuICAgIHNob3VsZFVubG9hZENvbXBvbmVudCA9IHRydWU7XG4gIH1cblxuICB1c2luZyBfID0gY29tcG9uZW50LmFkZENoaWxkKG5ldyBFbWJlZEJ5RXh0ZW5zaW9uTWRQYXRjaENvbXBvbmVudChwYXJhbXMuYXBwLmVtYmVkUmVnaXN0cnkuZW1iZWRCeUV4dGVuc2lvbikpO1xuXG4gIGF3YWl0IE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKHBhcmFtcy5hcHAsIHBhcmFtcy5tYXJrZG93biwgcGFyYW1zLmVsLCBzb3VyY2VQYXRoLCBjb21wb25lbnQpO1xuXG4gIGlmIChzaG91bGRVbmxvYWRDb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQudW5sb2FkKCk7XG4gIH1cblxuICBpZiAocGFyYW1zLnNob3VsZFJlZ2lzdGVyTGlua0hhbmRsZXJzKSB7XG4gICAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFJlZ2lzdGVyTGlua0hhbmRsZXJzUGFyYW1zPih7XG4gICAgICBhcHA6IHBhcmFtcy5hcHAsXG4gICAgICBlbDogcGFyYW1zLmVsLFxuICAgICAgc291cmNlUGF0aDogcGFyYW1zLnNvdXJjZVBhdGhcbiAgICB9KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBNYXJrZG93biB0byBIVE1MLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNvbnZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgSFRNTCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYXJrZG93blRvSHRtbChwYXJhbXM6IE1hcmtkb3duVG9IdG1sUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBtYXJrZG93bixcbiAgICBzb3VyY2VQYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnQoKTtcbiAgY29tcG9uZW50LmxvYWQoKTtcbiAgY29uc3QgcmVuZGVyRGl2ID0gY3JlYXRlRGl2KCk7XG4gIGF3YWl0IE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKGFwcCwgbWFya2Rvd24sIHJlbmRlckRpdiwgc291cmNlUGF0aCA/PyAnJywgY29tcG9uZW50KTtcbiAgY29uc3QgaHRtbCA9IHJlbmRlckRpdi5pbm5lckhUTUw7XG4gIGNvbXBvbmVudC51bmxvYWQoKTtcbiAgcmV0dXJuIGh0bWw7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGxpbmsgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVnaXN0ZXJpbmcgbGluayBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTGlua0hhbmRsZXJzKHBhcmFtczogUmVnaXN0ZXJMaW5rSGFuZGxlcnNQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBlbCxcbiAgICBzb3VyY2VQYXRoXG4gIH0gPSBwYXJhbXM7XG4gIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyRG9tRXZlbnRzKFxuICAgIGVsLFxuICAgIG5ldyBMaW5rRG9tRXZlbnRzSGFuZGxlcnMoXG4gICAgICBuZXcgRml4ZWRaSW5kZXhEb21FdmVudHNIYW5kbGVyc0luZm8oe1xuICAgICAgICBhcHAsXG4gICAgICAgIGVsLFxuICAgICAgICBwYXRoOiBzb3VyY2VQYXRoID8/ICcnXG4gICAgICB9KVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGFuIGV4dGVybmFsIGxpbmsuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIGV4dGVybmFsIGxpbmsuXG4gKiBAcmV0dXJucyBUaGUgSFRNTEFuY2hvckVsZW1lbnQgY29udGFpbmluZyB0aGUgcmVuZGVyZWQgZXh0ZXJuYWwgbGluay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlckV4dGVybmFsTGluayhwYXJhbXM6IFJlbmRlckV4dGVybmFsTGlua1BhcmFtcyk6IFByb21pc2U8SFRNTEFuY2hvckVsZW1lbnQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICB1cmxcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgZGlzcGxheVRleHQgPSBwYXJhbXMuZGlzcGxheVRleHQgPz8gdXJsO1xuICBjb25zdCB3cmFwcGVyRWwgPSBjcmVhdGVTcGFuKCk7XG4gIGF3YWl0IGZ1bGxSZW5kZXIoe1xuICAgIGFwcCxcbiAgICBlbDogd3JhcHBlckVsLFxuICAgIG1hcmtkb3duOiBgWyR7ZGlzcGxheVRleHR9XSgke3VybH0pYFxuICB9KTtcbiAgY29uc3QgYUVsID0gd3JhcHBlckVsLmZpbmQoJ2EnKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMoe1xuICAgIGFwcCxcbiAgICBlbDogYUVsXG4gIH0pO1xuICByZXR1cm4gYUVsO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYW4gaW50ZXJuYWwgbGluay5cbiAqXG4gKiBXaGF0IGNsaWNraW5nIHRoZSByZW5kZXJlZCBsaW5rIGRvZXMgZGVwZW5kcyBvbiB3aGF0IGl0IG5hbWVzOlxuICpcbiAqIC0gQSBGSUxFIGlzIG9wZW5lZCBieSBPYnNpZGlhbidzIG93biBsaW5rIGhhbmRsZXIg4oCUIGFuZCwgd2l0aFxuICogICB7QGxpbmsgUmVuZGVySW50ZXJuYWxMaW5rUGFyYW1zLnNob3VsZFJldmVhbEZpbGV9LCBhZGRpdGlvbmFsbHkgcmV2ZWFsZWQgaW4gdGhlIGZpbGUgZXhwbG9yZXIuXG4gKiAtIEEgRk9MREVSIGNhbm5vdCBiZSBvcGVuZWQsIHNvIGl0cyBGT0xERVIgTk9URSBpcyDigJQgdGhlIG5vdGUgd2hvc2UgcHJvcGVydGllcyBkZXNjcmliZSB0aGUgZm9sZGVyXG4gKiAgIGl0c2VsZiwgcmVzb2x2ZWQgdGhyb3VnaCB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGV9IChieSBkZWZhdWx0IGZyb20gdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYFxuICogICBwbHVnaW4ncyBsaXZlIGNvbmZpZ3VyYXRpb24pLiBUaGUgcmV2ZWFsIGxhbmRzIG9uIHRoYXQgbm90ZSwgdW5sZXNzIHRoZSBub3RlIGlzIGhpZGRlbiBpbiB0aGVcbiAqICAgZXhwbG9yZXIsIGluIHdoaWNoIGNhc2UgaXQgbGFuZHMgb24gdGhlIGZvbGRlciDigJQgcmV2ZWFsaW5nIGEgaGlkZGVuIG5vdGUgd291bGQgaGlnaGxpZ2h0IG5vdGhpbmcuXG4gKiAgIEEgZm9sZGVyIHdpdGggTk8gZm9sZGVyIG5vdGUgcmV2ZWFscyB0aGUgZm9sZGVyIGFuZCBvcGVucyBub3RoaW5nOiBub3RoaW5nIGhlcmUgZXZlciBjcmVhdGVzIGEgbm90ZS5cbiAqXG4gKiBFdmVyeXRoaW5nIGlzIHJlc29sdmVkIGF0IENMSUNLIHRpbWUgcmF0aGVyIHRoYW4gYXQgcmVuZGVyIHRpbWUsIGRlbGliZXJhdGVseTogYSByZW5kZXJlZCBsaW5rIG91dGxpdmVzXG4gKiB0aGUgb3BlcmF0aW9uIHRoYXQgcHJvZHVjZWQgaXQsIHNvIGEgZGVzdGluYXRpb24gcmVuYW1lZCBpbiBiZXR3ZWVuIHN0aWxsIHJldmVhbHMgdGhlIHJpZ2h0IGl0ZW0sIGFuZCBhXG4gKiBmb2xkZXIgbm90ZSB3cml0dGVuIGFmdGVyIHRoZSBsaW5rIGFwcGVhcmVkIGlzIHN0aWxsIGZvdW5kLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuZGVyaW5nIHRoZSBpbnRlcm5hbCBsaW5rLlxuICogQHJldHVybnMgVGhlIEhUTUxBbmNob3JFbGVtZW50IGNvbnRhaW5pbmcgdGhlIHJlbmRlcmVkIGludGVybmFsIGxpbmsuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJJbnRlcm5hbExpbmsocGFyYW1zOiBSZW5kZXJJbnRlcm5hbExpbmtQYXJhbXMpOiBQcm9taXNlPEhUTUxBbmNob3JFbGVtZW50PiB7XG4gIGNvbnN0IHtcbiAgICBhZnRlclJldmVhbCxcbiAgICBhcHAsXG4gICAgZm9sZGVyTm90ZSxcbiAgICBwYXRoT3JBYnN0cmFjdEZpbGUsXG4gICAgc2hvdWxkUmV2ZWFsRmlsZVxuICB9ID0gcGFyYW1zO1xuXG4gIC8vIEEgRE9NIGxpc3RlbmVyIGNhbm5vdCBhd2FpdCwgc28gdGhlIHJldmVhbCwgYW5kIHRoZSBob29rIG9yZGVyZWQgYWZ0ZXIgaXQsIHJ1biBkZXRhY2hlZC5cbiAgZnVuY3Rpb24gcmV2ZWFsKGFic3RyYWN0RmlsZVRvUmV2ZWFsOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcmV2ZWFsSW5GaWxlRXhwbG9yZXIoeyBhYnN0cmFjdEZpbGU6IGFic3RyYWN0RmlsZVRvUmV2ZWFsLCBhcHAgfSk7XG4gICAgICBhd2FpdCBhZnRlclJldmVhbD8uKCk7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgYWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yQWJzdHJhY3RGaWxlKTtcbiAgY29uc3QgZGlzcGxheVRleHQgPSBwYXJhbXMuZGlzcGxheVRleHQgPz8gcGF0aDtcbiAgaWYgKGlzRm9sZGVyKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gY3JlYXRlRWwoJ2EnLCB7IHRleHQ6IGRpc3BsYXlUZXh0IH0sIChhRWwpID0+IHtcbiAgICAgIGFFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnKHsgYXBwLCAuLi5mb2xkZXJOb3RlIH0pO1xuICAgICAgICBjb25zdCBmb2xkZXJOb3RlRmlsZSA9IHJlc29sdmVGb2xkZXJOb3RlKHsgYXBwLCBjb25maWcsIGZvbGRlcjogYWJzdHJhY3RGaWxlIH0pO1xuICAgICAgICByZXZlYWwoZm9sZGVyTm90ZUZpbGUgJiYgIWNvbmZpZy5pc0hpZGRlbiA/IGZvbGRlck5vdGVGaWxlIDogYWJzdHJhY3RGaWxlKTtcbiAgICAgICAgaWYgKGZvbGRlck5vdGVGaWxlKSB7XG4gICAgICAgICAgLy8gQSBET00gbGlzdGVuZXIgY2Fubm90IGF3YWl0LCBhbmQgdGhlIG9wZW4gaGFzIHRvIG91dGxpdmUgdGhpcyBoYW5kbGVyOiBpdCBzZXR0bGVzIGZpcnN0LCBmb3JcbiAgICAgICAgICAvLyB0aGUgY2xpY2sgdGhhdCBsYW5kcyByaWdodCBhcyBhbiBvcGVyYXRpb24gZmluaXNoZXMgd3JpdGluZy5cbiAgICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBvcGVuQWZ0ZXJTZXR0bGluZyhhcHAsIGZvbGRlck5vdGVGaWxlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgd3JhcHBlckVsID0gY3JlYXRlU3BhbigpO1xuICBhd2FpdCBmdWxsUmVuZGVyKHtcbiAgICBhcHAsXG4gICAgZWw6IHdyYXBwZXJFbCxcbiAgICBtYXJrZG93bjogYFtbJHtwYXRofXwke2Rpc3BsYXlUZXh0fV1dYFxuICB9KTtcbiAgY29uc3QgYUVsID0gd3JhcHBlckVsLmZpbmQoJ2EnKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgcmVnaXN0ZXJMaW5rSGFuZGxlcnMoe1xuICAgIGFwcCxcbiAgICBlbDogYUVsXG4gIH0pO1xuICBpZiAoc2hvdWxkUmV2ZWFsRmlsZSA/PyBmYWxzZSkge1xuICAgIGFFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIC8vIExheWVyZWQgT04gVE9QIG9mIE9ic2lkaWFuJ3Mgb3duIGhhbmRsZXIg4oCUIG5vIGBwcmV2ZW50RGVmYXVsdGAsIHNvIHRoZSBvcGVuIGlzIHVudG91Y2hlZC4gQSBwYXRoXG4gICAgICAvLyB0aGF0IHJlc29sdmVzIHRvIG5vdGhpbmcgZ2V0cyBubyByZXZlYWw6IGFuIHVucmVzb2x2ZWQgbGluayBoYXMgbm90aGluZyB0byByZXZlYWwsIGFuZCBjbGlja2luZ1xuICAgICAgLy8gb25lIENSRUFURVMgdGhlIG5vdGUgaXQgbmFtZXMuXG4gICAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG4gICAgICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgICAgIHJldmVhbChmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYUVsO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIGBjbGlwYm9hcmRgLXNlY3Rpb24gQ29weSBpdGVtIGV2ZXJ5IGxpbmsgY29udGV4dCBtZW51IGNhcnJpZXMsIGNvcHlpbmcgdGhlIGxpbmsncyBESVNQTEFZXG4gKiB0ZXh0IOKAlCB3aGljaCBpcyB3aGF0IE9ic2lkaWFuJ3Mgb3duIG1lbnUgY29waWVzLCBub3QgdGhlIHRhcmdldCBwYXRoLlxuICpcbiAqIEBwYXJhbSBtZW51IC0gVGhlIG1lbnUgdG8gYWRkIHRoZSBpdGVtIHRvLlxuICogQHBhcmFtIHRhcmdldEVsIC0gVGhlIGxpbmsgZWxlbWVudCB0aGUgbWVudSB3YXMgb3BlbmVkIG9uLlxuICovXG5mdW5jdGlvbiBhZGRDb3B5TWVudUl0ZW0obWVudTogTWVudSwgdGFyZ2V0RWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgIGl0ZW1cbiAgICAgIC5zZXRTZWN0aW9uKCdjbGlwYm9hcmQnKVxuICAgICAgLnNldFRpdGxlKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5tZW51LmNvcHkpKVxuICAgICAgLnNldEljb24oJ2x1Y2lkZS1jb3B5JylcbiAgICAgIC5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGFyZ2V0RWwud2luLm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRhcmdldEVsLmdldFRleHQoKSkpO1xuICAgICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGEgZmlsZSBpbiB0aGUgYWN0aXZlIGxlYWYsIG9uY2UgdGhlIHZhdWx0IGhhcyBzZXR0bGVkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZSB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBmaWxlIGlzIG9wZW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW5BZnRlclNldHRsaW5nKGFwcDogQXBwLCBmaWxlOiBURmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcCh7IG1pbGxpc2Vjb25kczogREVMQVlfQkVGT1JFX09QRU5fSU5fTUlMTElTRUNPTkRTIH0pO1xuICBhd2FpdCBhcHAud29ya3NwYWNlLmdldExlYWYoKS5vcGVuRmlsZShmaWxlLCB7IGFjdGl2ZTogdHJ1ZSB9KTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsYUFBYTtBQUN0QixTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLFNBQVM7QUFDbEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7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
|
|
@@ -3,40 +3,4 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function ensureBrowserProcess() {
|
|
13
|
-
const browserProcess = {
|
|
14
|
-
browser: true,
|
|
15
|
-
cwd() {
|
|
16
|
-
return "/";
|
|
17
|
-
},
|
|
18
|
-
env: {},
|
|
19
|
-
platform: "android"
|
|
20
|
-
};
|
|
21
|
-
const existingProcess = globalThis.process;
|
|
22
|
-
if (!existingProcess) {
|
|
23
|
-
globalThis.process = browserProcess;
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
if (existingProcess.versions?.node) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
const existingProcessRecord = existingProcess;
|
|
30
|
-
for (const [key, value] of Object.entries(browserProcess)) {
|
|
31
|
-
existingProcessRecord[key] ??= value;
|
|
32
|
-
}
|
|
33
|
-
existingProcessRecord["browser"] = true;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
(function initEsm() {
|
|
37
|
-
ensureDisposeSymbols();
|
|
38
|
-
ensureBrowserProcess();
|
|
39
|
-
})();
|
|
40
|
-
})();
|
|
41
|
-
|
|
42
6
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
5
|
(function () {
|
|
7
6
|
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
7
|
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
@@ -33,10 +32,8 @@ function ensureBrowserProcess() {
|
|
|
33
32
|
existingProcessRecord["browser"] = true;
|
|
34
33
|
}
|
|
35
34
|
|
|
36
|
-
(
|
|
37
|
-
|
|
38
|
-
ensureBrowserProcess();
|
|
39
|
-
})();
|
|
35
|
+
ensureDisposeSymbols();
|
|
36
|
+
ensureBrowserProcess();
|
|
40
37
|
})();
|
|
41
38
|
|
|
42
39
|
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
|
|
@@ -473,4 +470,4 @@ export {
|
|
|
473
470
|
unregisterFileCacheForNonExistingFile,
|
|
474
471
|
unregisterFiles
|
|
475
472
|
};
|
|
476
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21ldGFkYXRhLWNhY2hlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbWV0YWRhdGEgY2FjaGUgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcGlDb250cmFjdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcGktY29udHJhY3QnO1xuaW1wb3J0IHR5cGUgeyBSZXRyeU9wdGlvbnMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BcnJheURpY3QgfSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0JztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDYWNoZWRNZXRhZGF0YSxcbiAgUmVmZXJlbmNlLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlQXJndW1lbnRzU2NoZW1hLFxuICBjcmVhdGVUeXBlR3VhcmRTY2hlbWFcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FwaS1jb250cmFjdCc7XG5pbXBvcnQgeyBDYWxsYmFja0Rpc3Bvc2FibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGlzcG9zYWJsZSc7XG5pbXBvcnQgeyBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBDdXN0b21BcnJheURpY3RJbXBsLFxuICBpc0Zyb250bWF0dGVyTGlua0NhY2hlLFxuICBpc1JlZmVyZW5jZUNhY2hlLFxuICBwYXJlbnRGb2xkZXJQYXRoXG59IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2UsXG4gIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHMsXG4gIFBhcnNlTGlua1JlZmVyZW5jZVxufSBmcm9tICcuL3BhcnNlLWxpbmsudHMnO1xuXG5pbXBvcnQgeyByZXRyeVdpdGhUaW1lb3V0Tm90aWNlIH0gZnJvbSAnLi9hc3luYy13aXRoLW5vdGljZS50cyc7XG5pbXBvcnQgeyBnZXRJbmRleGVkQmFja2xpbmtzRm9yRmlsZSB9IGZyb20gJy4vYmFja2xpbmstaW5kZXgudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRQYXRoLFxuICBpc0NhbnZhc0ZpbGUsXG4gIGlzRmlsZSxcbiAgaXNQYXRoT3JGaWxlXG59IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzLFxuICB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHNcbn0gZnJvbSAnLi9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyc7XG5pbXBvcnQgeyBwYXJzZUZyb250bWF0dGVyIH0gZnJvbSAnLi9mcm9udG1hdHRlci50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHtcbiAgcGFyc2VGcm9udG1hdHRlckxpbmtzLFxuICBwYXJzZUxpbmtzLFxuICB0b1BhcnNlTGlua1JlZmVyZW5jZVxufSBmcm9tICcuL3BhcnNlLWxpbmsudHMnO1xuaW1wb3J0IHsgZmluZFBsdWdpbkFwaSB9IGZyb20gJy4vcGx1Z2luL3BsdWdpbi1hcGkudHMnO1xuaW1wb3J0IHsgc29ydFJlZmVyZW5jZXMgfSBmcm9tICcuL3JlZmVyZW5jZS50cyc7XG5pbXBvcnQge1xuICByZWFkU2FmZSxcbiAgc2F2ZU5vdGVcbn0gZnJvbSAnLi92YXVsdC50cyc7XG5cbi8qKlxuICogQSBwYXJzaW5nIGZlYXR1cmUgdGhhdCB3YXMgYXBwbGllZCB3aGVuIGNvbXB1dGluZyBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAqL1xuZXhwb3J0IGVudW0gQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUge1xuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIHRoZSBub3RlIGNvbnRlbnQgYm9keS5cbiAgICovXG4gIEV4dGVybmFsTGlua3MgPSAnRXh0ZXJuYWxMaW5rcycsXG5cbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBzaW5nbGUtbGluayBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICovXG4gIEZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyA9ICdGcm9udG1hdHRlckV4dGVybmFsTGlua3MnLFxuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICovXG4gIE11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSAnTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcycsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLCB3aGljaCBPYnNpZGlhbiBkb2VzIG5vdCBuYXRpdmVseSBjYWNoZS5cbiAgICovXG4gIE11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzID0gJ011bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzJyxcblxuICAvKipcbiAgICogT2JzaWRpYW4ncyBuYXRpdmUgbWV0YWRhdGEgcGFyc2luZyAoaW50ZXJuYWwgbGlua3MsIGVtYmVkcywgZnJvbnRtYXR0ZXIgbGlua3MpLlxuICAgKi9cbiAgTmF0aXZlID0gJ05hdGl2ZSdcbn1cblxuLyoqXG4gKiBBbiBleHRlbmRlZCB7QGxpbmsgQ2FjaGVkTWV0YWRhdGF9IHRoYXQgcmVjb3JkcyB3aGljaCBwYXJzaW5nIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZX1zIHdlcmVcbiAqIGFwcGxpZWQgKHZpYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeC5mZWF0dXJlc30pIGFuZCBjYXJyaWVzIHRoZSByZXN1bHRpbmcgZXh0ZXJuYWwgbGlua3MuIEVhY2ggbGlua3NcbiAqIGFycmF5IGlzIHBvcHVsYXRlZCBvbmx5IHdoZW4gaXRzIGNvcnJlc3BvbmRpbmcgZmVhdHVyZSBpcyBwcmVzZW50IGluIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4LmZlYXR1cmVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWNoZWRNZXRhZGF0YUV4IGV4dGVuZHMgQ2FjaGVkTWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIHRoZSBub3RlIGNvbnRlbnQgYm9keS4gUG9wdWxhdGVkIG9ubHkgd2hlblxuICAgKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRXh0ZXJuYWxMaW5rc30gaXMgYXBwbGllZC5cbiAgICovXG4gIGV4dGVybmFsTGlua3M/OiBQYXJzZUxpbmtSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogVGhlIHBhcnNpbmcgZmVhdHVyZXMgdGhhdCB3ZXJlIGFwcGxpZWQgd2hlbiBjb21wdXRpbmcgdGhpcyBjYWNoZS5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmVzOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gc2luZ2xlLWxpbmsgKHNpbmdsZS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuIFBvcHVsYXRlZCBvbmx5XG4gICAqIHdoZW4ge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLkZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc30gaXMgYXBwbGllZC5cbiAgICovXG4gIGZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcz86IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIChtdWx0aS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuIFBvcHVsYXRlZCBvbmx5IHdoZW5cbiAgICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLk11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3N9IGlzIGFwcGxpZWQuXG4gICAqL1xuICBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLiBQb3B1bGF0ZWQgb25seSB3aGVuXG4gICAqIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rc30gaXMgYXBwbGllZC5cbiAgICovXG4gIG11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzPzogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVPcHRpb25zIGV4dGVuZHMgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHRpbWVvdXQgbm90aWNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dUaW1lb3V0Tm90aWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlUGFyYW1zIGV4dGVuZHMgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdldENhY2hlU2FmZX0uXG4gKi9cbmV4cG9ydCB0eXBlIEdldENhY2hlU2FmZU9wdGlvbnMgPSBQYXJzZUNhY2hlT3B0aW9ucztcblxuLyoqXG4gKiBQYXJhbXMgZm9yIHtAbGluayBnZXRMaW5rc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0TGlua3NQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNhY2hlZCBtZXRhZGF0YSB0byByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlOiBDYWNoZWRNZXRhZGF0YTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBlbWJlZHMgKGBjYWNoZS5lbWJlZHNgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRW1iZWRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSB0aGUgbm90ZSBib2R5LiBSZXF1aXJlcyB0aGUgY2FjaGUgdG8gYmUgYVxuICAgKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBzaW5nbGUtbGluayAoc2luZ2xlLXZhbHVlKSBub3RlIGZyb250bWF0dGVyXG4gICAqIHZhbHVlcy4gUmVxdWlyZXMgdGhlIGNhY2hlIHRvIGJlIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBmcm9udG1hdHRlciBsaW5rcyAoYGNhY2hlLmZyb250bWF0dGVyTGlua3NgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLFxuICAgKiBpLmUuIHRoZSBvZmZzZXQtY2FycnlpbmcgZnJvbnRtYXR0ZXIgZXh0ZXJuYWwgbGlua3MgKG5hcnJvd2VkIHZpYVxuICAgKiB7QGxpbmsgaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzfSkuIFJlcXVpcmVzIHRoZSBjYWNoZSB0byBiZSBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGludGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICogUmVxdWlyZXMgdGhlIGNhY2hlIHRvIGJlIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHJlZmVyZW5jZSBsaW5rcyAoYGNhY2hlLmxpbmtzYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZVJlZmVyZW5jZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBwYXJzaW5nIHBlcmZvcm1lZCBieSB7QGxpbmsgZ2V0Q2FjaGVTYWZlfSBhbmQge0BsaW5rIHBhcnNlTWV0YWRhdGF9IGJleW9uZCBPYnNpZGlhbidzXG4gKiBuYXRpdmUgbWV0YWRhdGEgcGFyc2luZy4gRWFjaCBvcHRpb24gaXMgb3B0LWluOyBlbmFibGluZyBpdCBhZGRzIHRoZSBjb3JyZXNwb25kaW5nXG4gKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmV9IGFuZCBwb3B1bGF0ZXMgdGhlIG1hdGNoaW5nIGxpbmtzIGFycmF5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlQ2FjaGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcGFyc2UgdGhlIGV4dGVybmFsIGxpbmtzIGZyb20gdGhlIG5vdGUgY29udGVudCBib2R5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQYXJzZUV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBleHRlcm5hbCBsaW5rcyBmcm9tIHNpbmdsZS1saW5rIChzaW5nbGUtdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQYXJzZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcGFyc2UgdGhlIGV4dGVybmFsIGxpbmtzIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBpbnRlcm5hbCBsaW5rcyBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlTWV0YWRhdGF9LlxuICovXG5leHBvcnQgdHlwZSBQYXJzZU1ldGFkYXRhT3B0aW9ucyA9IFBhcnNlQ2FjaGVPcHRpb25zO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSBjYWNoZSB0byByZWdpc3Rlci5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlOiBDYWNoZWRNZXRhZGF0YTtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byByZWdpc3RlciB0aGUgZmlsZSBjYWNoZSBmb3IuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgJ3MgcHVibGlzaGVkIEFQSSB0aGlzIG1vZHVsZSBjYWxscywgZGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZCxcbiAqIGJlY2F1c2UgdGhhdCBwbHVnaW4gaXMgbm90IGEgZGVwZW5kZW5jeSAocnVsZSBMOSBpbiBgQUdFTlRTLm1kYCkuIEl0cyBgYXBpLmQudHNgIGRlY2xhcmVzIHRoZSB3aG9sZSBvZiBpdC5cbiAqL1xuaW50ZXJmYWNlIEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaSB7XG4gIC8qKlxuICAgKiBBbnN3ZXJzIGZyb20gdGhlIHBsdWdpbidzIGJhY2tsaW5rIGNhY2hlLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgYmFja2xpbmtzLCBvciBgbnVsbGAgd2hpbGUgdGhlIHBsdWdpbidzIGBCYWNrbGlua3NgIG1vZHVsZSBpcyBvZmYuXG4gICAqL1xuICBnZXRCYWNrbGlua3NGb3JGaWxlOiAocGF0aE9yRmlsZTogUGF0aE9yRmlsZSkgPT4gQ3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBbnN3ZXJzIGZyb20gdGhlIHBsdWdpbidzIGJhY2tsaW5rIGNhY2hlIG9uY2UgdGhlIHBlbmRpbmcgZmlsZSBjaGFuZ2VzIGhhdmUgYmVlbiBwcm9jZXNzZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvYmplY3QuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGJhY2tsaW5rcywgb3IgdG8gYG51bGxgIHdoaWxlIHRoZSBwbHVnaW4ncyBgQmFja2xpbmtzYFxuICAgKiAgIG1vZHVsZSBpcyBvZmYuXG4gICAqL1xuICBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZTogKHBhdGhPckZpbGU6IFBhdGhPckZpbGUpID0+IFByb21pc2U8Q3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4gfCBudWxsPjtcbn1cblxuLyoqXG4gKiBBIHNlbGVjdG9yIGZvciBhIGZlYXR1cmUtZ2F0ZWQgbGluayBjYXRlZ29yeSBpbiB7QGxpbmsgZ2V0TGlua3N9LlxuICovXG5pbnRlcmZhY2UgRmVhdHVyZUxpbmtTZWxlY3RvciB7XG4gIC8qKlxuICAgKiBBIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5rIGNhdGVnb3J5LCB1c2VkIGluIGVycm9yIG1lc3NhZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZlYXR1cmUgdGhhdCBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIGNhY2hlIGZvciB0aGlzIGNhdGVnb3J5IHRvIGJlIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlO1xuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSBsaW5rcyBmb3IgdGhpcyBjYXRlZ29yeSBmcm9tIHRoZSBjYWNoZS5cbiAgICovXG4gIHNlbGVjdDogKGNhY2hlOiBDYWNoZWRNZXRhZGF0YUV4KSA9PiBSZWZlcmVuY2VbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoaXMgY2F0ZWdvcnkuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIHRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeH0uXG4gKi9cbmludGVyZmFjZSBUb1BhcnNlZENhY2hlZE1ldGFkYXRhRXhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBsYWluIGNhY2hlZCBtZXRhZGF0YSB0byB3cmFwLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGU6IENhY2hlZE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90ZSBjb250ZW50IHRoZSBvZmZzZXRzIGluZGV4IGludG8sIHVzZWQgZm9yIGJvZHkgZXh0ZXJuYWwtbGluayBwYXJzaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2Ugb3B0aW9ucyBjb250cm9sbGluZyB3aGljaCBsaW5rcyB0byBwYXJzZS5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IFBhcnNlQ2FjaGVPcHRpb25zO1xufVxuXG4vKipcbiAqIFRoZSBwbHVnaW4gaWQgb2YgdGhlIGBBZHZhbmNlZCBNZXRhZGF0YSBDYWNoZWAgcGx1Z2luLCB0aGUgc3VjY2Vzc29yIHRvIGBCYWNrbGluayBDYWNoZWAuXG4gKlxuICogVXNlZCBieSB7QGxpbmsgaGFzQmFja2xpbmtDYWNoZVBsdWdpbn0sIGFuZCBhcyB0aGUgcHJvdmlkZXIgaWQgdW5kZXIgd2hpY2gge0BsaW5rIGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGh9IGFuZCB7QGxpbmsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmV9IGxvb2sgdXAgdGhlIHBsdWdpbidzIHB1Ymxpc2hlZCBBUEkuXG4gKi9cbmV4cG9ydCBjb25zdCBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9QTFVHSU5fSUQgPSAnYWR2YW5jZWQtbWV0YWRhdGEtY2FjaGUnO1xuXG4vKipcbiAqIFRoZSBjb250cmFjdCB2ZXJzaW9ucyBvZiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgJ3MgQVBJIHRoaXMgbW9kdWxlIGNvbXBpbGVkIGFnYWluc3QuIGAxLjMuMGAgaXMgdGhlIGZpcnN0IHRvIGNhcnJ5IHRoZSB0d28gYmFja2xpbmsgbWV0aG9kcy5cbiAqL1xuY29uc3QgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX0FQSV9WRVJTSU9OX1JBTkdFID0gJ14xLjMuMCc7XG5cbi8qKlxuICogVGhlIHNjaGVtYXMgb2YgYSBiYWNrbGluayBtZXRob2QncyBwYXlsb2FkczogdGhlIG9uZSBwYXRoLW9yLWZpbGUgYXJndW1lbnQsIGFuZCB0aGUgYmFja2xpbmtzIG9yIGBudWxsYC5cbiAqXG4gKiBBIGNvcHkgb2YgdGhlIGBnZXRCYWNrbGlua3NGb3JGaWxlYCBhbmQgYGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlYCBlbnRyaWVzIG9mIGBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9BUElfQ09OVFJBQ1RgLCB3aGljaCBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgIHNoaXBzIGFzXG4gKiBpdHMgcm9vdCBgYXBpLWNvbnRyYWN0LnRzYCBhbmQgcHVibGlzaGVzLiBLZWVwIHRoZSBndWFyZHMgaW4gYWdyZWVtZW50IHdpdGggdGhhdCBmaWxlLCBzbyB0aGUgcHJvdmlkZXIgYW5kIHRoaXMgY29uc3VtZXIgY2hlY2sgb25lIGRlZmluaXRpb24uXG4gKi9cbmNvbnN0IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19NRVRIT0RfQ09OVFJBQ1QgPSB7XG4gIGlucHV0OiBjcmVhdGVBcmd1bWVudHNTY2hlbWE8W3BhdGhPckZpbGU6IFBhdGhPckZpbGVdPihbeyBleHBlY3RlZDogJ2EgcGF0aCBvciBhIGZpbGUnLCB0eXBlR3VhcmQ6IGlzUGF0aE9yRmlsZSB9XSksXG4gIG91dHB1dDogY3JlYXRlVHlwZUd1YXJkU2NoZW1hKHsgZXhwZWN0ZWQ6ICdhIGJhY2tsaW5rcyBkaWN0aW9uYXJ5IG9yIG51bGwnLCB0eXBlR3VhcmQ6IGlzTnVsbGFibGVCYWNrbGlua3NEaWN0IH0pXG59O1xuXG4vKipcbiAqIFRoZSBjb250cmFjdCBvZiB0aGUgbWVtYmVycyBvZiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgJ3MgQVBJIHRoaXMgbW9kdWxlIGNhbGxzLCBzbyBhIHJlY29yZCB0aGF0IGxhY2tzIGVpdGhlciBpcyBwYXNzZWQgb3ZlciwgYW5kIGEgcGF5bG9hZCB0aGF0IGJyZWFrcyBpdHMgc2lnbmF0dXJlIGlzIHJlcG9ydGVkIHdoaWxlIHRoZSBgUGx1Z2luQXBpYCBkZWJ1Z2dlciBpcyBvbi5cbiAqL1xuY29uc3QgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX0FQSV9DT05UUkFDVDogQXBpQ29udHJhY3Q8QWR2YW5jZWRNZXRhZGF0YUNhY2hlQmFja2xpbmtzQXBpPiA9IHtcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZTogQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX01FVEhPRF9DT05UUkFDVCxcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmU6IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19NRVRIT0RfQ09OVFJBQ1Rcbn07XG5cbi8qKlxuICogVGhlIHBsdWdpbiBpZCBvZiB0aGUgcmV0aXJlZCBgQmFja2xpbmsgQ2FjaGVgIHBsdWdpbiwgc3VwZXJzZWRlZCBieSB7QGxpbmsgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEfS5cbiAqXG4gKiBTdGlsbCByZWNvZ25pemVkIGJ5IHtAbGluayBoYXNCYWNrbGlua0NhY2hlUGx1Z2lufSwgZGVsaWJlcmF0ZWx5LiBSZW1vdmluZyBhIHBsdWdpbiBmcm9tIHRoZSBjb21tdW5pdHkgcmVnaXN0cnkgYmxvY2tzIG5ldyBpbnN0YWxsczsgaXQgdW5pbnN0YWxscyBub3RoaW5nLCBzbyBldmVyeSBleGlzdGluZyB1c2VyIGtlZXBzIGl0IHVudGlsIHRoZXkgbWlncmF0ZSBieSBoYW5kLlxuICpcbiAqIEl0IG1heSBiZSBkcm9wcGVkIHdoZW4gYWxsIHRocmVlIG9mIHRoZSBmb2xsb3dpbmcgaG9sZCwgYW5kIG5vdCBiZWZvcmU6IGBBZHZhbmNlZCBNZXRhZGF0YSBDYWNoZWAgaXMgbGlzdGVkIGluIHRoZSBjb21tdW5pdHkgcmVnaXN0cnksIHNvIG1pZ3JhdGluZyBpcyBwb3NzaWJsZSBhdCBhbGw7IHRoZSBmaW5hbCBgQmFja2xpbmsgQ2FjaGVgIGhhbmRvdmVyIHJlbGVhc2UgaGFzIGJlZW4gb3V0IGZvciBhdCBsZWFzdCB0d2VsdmUgbW9udGhzOyBhbmQgdGhpcyBsaWJyYXJ5IGlzIGN1dHRpbmcgYSBtYWpvciByZWxlYXNlIGFueXdheSwgYmVjYXVzZSBkcm9wcGluZyB0aGUgaWQgc2lsZW50bHkgdW4tZ2F0ZXMgY2FudmFzIGxpbmsgaGFuZGxpbmcgZm9yIGFueW9uZSB3aG8gaGFzIG5vdCBtaWdyYXRlZC4gVGhlcmUgaXMgbm8gY29zdCBwcmVzc3VyZSB0byBkcm9wIGl0IGVhcmxpZXIgLSByZWNvZ25pemluZyBhIGRlYWQgaWQgaXMgb25lIHN0cmluZyBjb21wYXJpc29uIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgcmVhZHMgYSBwbHVnaW4gcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBjb25zdCBCQUNLTElOS19DQUNIRV9QTFVHSU5fSUQgPSAnYmFja2xpbmstY2FjaGUnO1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB0aGUgbWV0YWRhdGEgY2FjaGUgaXMgcmVhZHkgZm9yIGFsbCBmaWxlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbWV0YWRhdGEgY2FjaGUgaXMgcmVhZHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVNZXRhZGF0YUNhY2hlUmVhZHkoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBhcHAubWV0YWRhdGFDYWNoZS5vbkNsZWFuQ2FjaGUocmVzb2x2ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYmFja2xpbmtzIGZvciBhIGZpbGUgb3IgcGF0aC5cbiAqIE5PVEU6IFRoZSBmaWxlIG1heSBiZSBub24tZXhpc3RlbnQuXG4gKlxuICogV2hlbiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgIHB1Ymxpc2hlcyBpdHMgYmFja2xpbmtzIEFQSSBhbmQgaXRzIGBCYWNrbGlua3NgIG1vZHVsZSBpcyBvbiwgaXRzIGNhY2hlIGFuc3dlcnMuXG4gKiBPdGhlcndpc2UgdGhlIGFuc3dlciBjb21lcyBmcm9tIGEgYmFja2xpbmsgaW5kZXggd2hvc2UgY29zdCBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIGNhbmRpZGF0ZSBub3RlcyByYXRoZXIgdGhhblxuICogdG8gZXZlcnkgcmVmZXJlbmNlIGluIHRoZSB2YXVsdCwgYW5kIHdoaWNoIGdpdmVzIHRoZSBzYW1lIHJlZmVyZW5jZXMgT2JzaWRpYW4ncyBvd24gYGdldEJhY2tsaW5rc0ZvckZpbGVgIGdpdmVzLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICogQHJldHVybnMgVGhlIGJhY2tsaW5rcyBmb3IgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrbGlua3NGb3JGaWxlT3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogQ3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSwgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlIH0pO1xuICB1c2luZyBfcmVnaXN0cmF0aW9uID0gcmVnaXN0ZXJGaWxlcyhhcHAsIFtmaWxlXSk7XG4gIHJldHVybiBmaW5kQWR2YW5jZWRNZXRhZGF0YUNhY2hlQmFja2xpbmtzQXBpKCk/LmdldEJhY2tsaW5rc0ZvckZpbGUoZmlsZSkgPz8gZ2V0SW5kZXhlZEJhY2tsaW5rc0ZvckZpbGUoYXBwLCBmaWxlKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIHNhZmVseS5cbiAqXG4gKiBXaGVuIGBBZHZhbmNlZCBNZXRhZGF0YSBDYWNoZWAgcHVibGlzaGVzIGl0cyBiYWNrbGlua3MgQVBJIGFuZCBpdHMgYEJhY2tsaW5rc2AgbW9kdWxlIGlzIG9uLCB0aGF0IEFQSSBhbnN3ZXJzLlxuICpcbiAqIE90aGVyd2lzZSB0aGlzIGlzIE5PVCBhIHB1cmUgcmVhZC4gSXQgdmVyaWZpZXNcbiAqIGVhY2ggYmFja2xpbmsgYWdhaW5zdCB0aGUgbm90ZSdzIGN1cnJlbnQgdGV4dCwgYW5kIHRvIGRvIHRoYXQgaXQgY2FsbHMge0BsaW5rIHNhdmVOb3RlfSBvbiBldmVyeVxuICogbm90ZSB0aGF0IGxpbmtzIHRvIHRoZSBmaWxlLCB3aGljaCBzYXZlcyBhbnkgb3BlbiBlZGl0b3IgdmlldyBvZiB0aG9zZSBub3RlcyB0aGF0IGhhcyB1bnNhdmVkXG4gKiBjaGFuZ2VzLiBDYWxsIGl0IGZyb20gYW4gZXhwbGljaXQgdXNlciBhY3Rpb24uIERvIG5vdCBjYWxsIGl0IGZyb20gYW4gYXV0b21hdGljIHRyaWdnZXIgKGEgdmF1bHQgb3JcbiAqIG1ldGFkYXRhIGV2ZW50LCBhIHNhdmUgb3IgcmVuZGVyIHBhdGNoKSB0aGF0IG9ubHkgZGVjaWRlcyB3aGV0aGVyIHRvIGFjdC4gVGhlcmUsIGEgZm9yY2VkIHNhdmUgY2FuXG4gKiByYWNlIGFub3RoZXIgcGx1Z2luJ3MgaW4tZmxpZ2h0IGVkaXRvciBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHRoZSBiYWNrbGlua3MuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IGRpY3Rpb25hcnkgb2YgYmFja2xpbmtzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUocGFyYW1zOiBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZVBhcmFtcyk6IFByb21pc2U8Q3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4+IHtcbiAgY29uc3QgeyBhcHAsIHBhdGhPckZpbGUsIC4uLm9wdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3QgY2FjaGVkQmFja2xpbmtzID0gYXdhaXQgZmluZEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaSgpPy5nZXRCYWNrbGlua3NGb3JGaWxlU2FmZShwYXRoT3JGaWxlKTtcbiAgaWYgKGNhY2hlZEJhY2tsaW5rcykge1xuICAgIHJldHVybiBjYWNoZWRCYWNrbGlua3M7XG4gIH1cblxuICBsZXQgYmFja2xpbmtzOiBDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPiA9IG5ldyBDdXN0b21BcnJheURpY3RJbXBsPFJlZmVyZW5jZT4oKTtcbiAgYXdhaXQgcmV0cnlXaXRoVGltZW91dE5vdGljZSh7XG4gICAgYXN5bmMgb3BlcmF0aW9uRnVuY3Rpb24oYWJvcnRTaWduYWwpIHtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgICAgIGF3YWl0IGVuc3VyZU1ldGFkYXRhQ2FjaGVSZWFkeShhcHApO1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGJhY2tsaW5rcyA9IGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgoYXBwLCBmaWxlKTtcbiAgICAgIGZvciAoY29uc3Qgbm90ZVBhdGggb2YgYmFja2xpbmtzLmtleXMoKSkge1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBjb25zdCBub3RlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogbm90ZVBhdGggfSk7XG4gICAgICAgIGlmICghbm90ZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEEgY2FudmFzIGhvbGRlciBjYW5ub3QgYmUgY2hlY2tlZCBhZ2FpbnN0IGl0cyB0ZXh0LiBJdHMgZmlsZS1ub2RlIHJlZmVyZW5jZXMgY2Fycnkgbm8gcG9zaXRpb24sIGFuZFxuICAgICAgICAvLyBPYnNpZGlhbiByZXBvcnRzIGEgdGV4dC1ub2RlIGVtYmVkIHdpdGggYSBwb3NpdGlvbiBpbnRvIHRoYXQgbm9kZSdzIG93biB0ZXh0LCBub3QgaW50byB0aGUgY2FudmFzIEpTT04sXG4gICAgICAgIC8vIHNvIHNsaWNpbmcgdGhlIGZpbGUgYXQgaXQgbmV2ZXIgZ2l2ZXMgdGhlIGxpbmsgYmFjayBhbmQgdGhlIHJldHJ5IHdvdWxkIG5ldmVyIGVuZC5cbiAgICAgICAgaWYgKGlzQ2FudmFzRmlsZShub3RlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgc2F2ZU5vdGUoYXBwLCBub3RlKTtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZFNhZmUoYXBwLCBub3RlKTtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZyb250bWF0dGVyID0gcGFyc2VGcm9udG1hdHRlcihjb250ZW50KTtcbiAgICAgICAgY29uc3QgbGlua3MgPSBiYWNrbGlua3MuZ2V0KG5vdGVQYXRoKTtcbiAgICAgICAgaWYgKCFsaW5rcykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgIGxldCBhY3R1YWxMaW5rOiBzdHJpbmc7XG4gICAgICAgICAgaWYgKGlzUmVmZXJlbmNlQ2FjaGUobGluaykpIHtcbiAgICAgICAgICAgIGFjdHVhbExpbmsgPSBjb250ZW50LnNsaWNlKGxpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0LCBsaW5rLnBvc2l0aW9uLmVuZC5vZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckxpbmtDYWNoZShsaW5rKSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGxpbmsua2V5KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsaW5rV2l0aE9mZnNldHMgPSB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMobGluayk7XG4gICAgICAgICAgICBhY3R1YWxMaW5rID0gcHJvcGVydHlWYWx1ZS5zbGljZShsaW5rV2l0aE9mZnNldHMuc3RhcnRPZmZzZXQsIGxpbmtXaXRoT2Zmc2V0cy5lbmRPZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFjdHVhbExpbmsgIT09IGxpbmsub3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBvcGVyYXRpb25OYW1lOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubWV0YWRhdGFDYWNoZS5nZXRCYWNrbGlua3NGb3JGaWxlUGF0aCwgeyBmaWxlUGF0aDogZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpIH0pLFxuICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogbnVsbCxcbiAgICByZXRyeU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgc2hvdWxkU2hvd1RpbWVvdXROb3RpY2U6IG9wdGlvbnMuc2hvdWxkU2hvd1RpbWVvdXROb3RpY2UgPz8gdHJ1ZVxuICB9KTtcblxuICByZXR1cm4gYmFja2xpbmtzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY2FjaGVkIG1ldGFkYXRhIGZvciBhIGdpdmVuIGZpbGUgb3IgcGF0aC5cbiAqXG4gKiBUaGlzIGlzIE5PVCBhIHB1cmUgcmVhZDogYmVmb3JlIGl0IHJlYWRzIHRoZSBjYWNoZSwgaXQgY2FsbHMge0BsaW5rIHNhdmVOb3RlfSwgd2hpY2ggc2F2ZXMgYW55XG4gKiBvcGVuIGVkaXRvciB2aWV3IG9mIHRoZSBub3RlIHRoYXQgaGFzIHVuc2F2ZWQgY2hhbmdlcy4gVGhhdCBzYXZlIGlzIHdoeSB0aGUgY2FjaGUgbWF0Y2hlcyB3aGF0IHRoZVxuICogdXNlciBzZWVzLCBhbmQgd2h5IGEgY29tbWFuZCB0aGF0IHJld3JpdGVzIHRoZSBub3RlIGNhbiB1c2UgdGhpcyBzYWZlbHkgd2l0aG91dCBpdHMgcmV3cml0ZSBiZWluZ1xuICogY2xvYmJlcmVkLiBJdCBpcyBhbHNvIGEgd3JpdGUgb24gdGhlIG5vdGUuIFNvIGRvIG5vdCBjYWxsIHRoaXMgZnJvbSBhbiBhdXRvbWF0aWMgdHJpZ2dlciAoYSB2YXVsdFxuICogb3IgbWV0YWRhdGEgZXZlbnQsIGEgc2F2ZSBvciByZW5kZXIgcGF0Y2gsIGEgbGF5b3V0IGhvb2spIHRoYXQgb25seSBkZWNpZGVzIHdoZXRoZXIgdG8gYWN0OiBhXG4gKiBmb3JjZWQgc2F2ZSBvbmUgdGljayBhZnRlciBhbm90aGVyIHBsdWdpbiBoYXMgZGlzcGF0Y2hlZCBhIGNoYW5nZSBpbnRvIHRoZSBlZGl0b3IgY2FuIGxlYXZlXG4gKiBPYnNpZGlhbidzIGVkaXRvciByZW5kZXJpbmcgc3RhbGUgc3RhdGUuIEEgcmVhZC1vbmx5IHByb2JlIG9uIHRoZSBub3RlJ3MgY3VycmVudCB0ZXh0IHNob3VsZCB1c2VcbiAqIHtAbGluayBwYXJzZU1ldGFkYXRhfSBvbiB0aGF0IHRleHQgaW5zdGVhZC4gSXQgbmVlZHMgbm8gdmlldywgbm8gY2FjaGUgYW5kIG5vIHNhdmUuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZU9yUGF0aCAtIFRoZSBmaWxlIG9yIHBhdGggdG8gcmV0cmlldmUgdGhlIG1ldGFkYXRhIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlIG9wdGlvbnMgY29udHJvbGxpbmcgd2hpY2ggYWRkaXRpb25hbCBsaW5rcyB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBjYWNoZWQgbWV0YWRhdGEgZm9yIHRoZSBmaWxlLCBvciBgbnVsbGAgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENhY2hlU2FmZShhcHA6IEFwcCwgZmlsZU9yUGF0aDogUGF0aE9yRmlsZSwgb3B0aW9uczogR2V0Q2FjaGVTYWZlT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxDYWNoZWRNZXRhZGF0YUV4IHwgbnVsbD4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogZmlsZU9yUGF0aCB9KTtcblxuICB0cnkge1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGw7XG4gICAgaWYgKGZpbGUuZGVsZXRlZCkge1xuICAgICAgY2FjaGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHNhdmVOb3RlKGFwcCwgZmlsZSk7XG5cbiAgICAgIGNvbnN0IGZpbGVDYWNoZUVudHJ5ID0gYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZUNhY2hlW2ZpbGUucGF0aF07XG4gICAgICBjb25zdCBpc1VwVG9EYXRlID0gZmlsZUNhY2hlRW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWVcbiAgICAgICAgJiYgZmlsZUNhY2hlRW50cnkuc2l6ZSA9PT0gZmlsZS5zdGF0LnNpemVcbiAgICAgICAgJiYgT2JqZWN0Lmhhc093bihhcHAubWV0YWRhdGFDYWNoZS5tZXRhZGF0YUNhY2hlLCBmaWxlQ2FjaGVFbnRyeS5oYXNoKTtcbiAgICAgIGlmICghaXNVcFRvRGF0ZSkge1xuICAgICAgICBhd2FpdCBhcHAubWV0YWRhdGFDYWNoZS5jb21wdXRlRmlsZU1ldGFkYXRhQXN5bmMoZmlsZSk7XG4gICAgICAgIGF3YWl0IGVuc3VyZU1ldGFkYXRhQ2FjaGVSZWFkeShhcHApO1xuICAgICAgfVxuICAgICAgY2FjaGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBPbmx5IHRoZSBib2R5LWV4dGVybmFsIHBhcnNlIG5lZWRzIHRoZSBmaWxlIGNvbnRlbnQ7IGZyb250bWF0dGVyIHBhcnNpbmcgdXNlcyB0aGUgY2FjaGVkXG4gICAgLy8gZnJvbnRtYXR0ZXIsIHNvIGF2b2lkIHJlYWRpbmcgdGhlIGNvbnRlbnQgdW5sZXNzIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cbiAgICBjb25zdCBjb250ZW50ID0gb3B0aW9ucy5zaG91bGRQYXJzZUV4dGVybmFsTGlua3MgPyBhd2FpdCBhcHAudmF1bHQuY2FjaGVkUmVhZChmaWxlKSA6ICcnO1xuICAgIHJldHVybiB0b1BhcnNlZENhY2hlZE1ldGFkYXRhRXgoeyBjYWNoZSwgY29udGVudCwgb3B0aW9ucyB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIWZpbGUgfHwgZmlsZS5kZWxldGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZnJvbnQgbWF0dGVyIGZyb20gdGhlIG1ldGFkYXRhIGNhY2hlIHNhZmVseS5cbiAqXG4gKiBJdCByZWFkcyB0aHJvdWdoIHtAbGluayBnZXRDYWNoZVNhZmV9LCBzbyBpdCBzYXZlcyBhbnkgb3BlbiBlZGl0b3IgdmlldyBvZiB0aGUgbm90ZSB0aGF0IGhhc1xuICogdW5zYXZlZCBjaGFuZ2VzLiBTZWUge0BsaW5rIGdldENhY2hlU2FmZX0gZm9yIHdoZW4gdGhhdCBzYXZlIG1hdHRlcnMgYW5kIHdoYXQgdG8gdXNlIGluc3RlYWQuXG4gKlxuICogQHR5cGVQYXJhbSBDdXN0b21Gcm9udG1hdHRlciAtIFRoZSB0eXBlIG9mIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byByZXRyaWV2ZSB0aGUgZnJvbnQgbWF0dGVyIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgY29tYmluZWQgZnJvbnQgbWF0dGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RnJvbnRtYXR0ZXJTYWZlPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4oYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+PiB7XG4gIGNvbnN0IGNhY2hlID0gYXdhaXQgZ2V0Q2FjaGVTYWZlKGFwcCwgcGF0aE9yRmlsZSk7XG4gIHJldHVybiAoY2FjaGU/LmZyb250bWF0dGVyID8/IHt9KSBhcyBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHNlbGVjdGVkIGxpbmtzIGZyb20gdGhlIHByb3ZpZGVkIGNhY2hlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyB0aGUgbGlua3MuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiByZWZlcmVuY2VzIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0ZWQgbGlua3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5rcyhwYXJhbXM6IEdldExpbmtzUGFyYW1zKTogUmVmZXJlbmNlW10ge1xuICBjb25zdCB7XG4gICAgY2FjaGUsXG4gICAgc2hvdWxkSW5jbHVkZUVtYmVkcyA9IHRydWUsXG4gICAgc2hvdWxkSW5jbHVkZUV4dGVybmFsTGlua3MgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZmFsc2UsXG4gICAgc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyTGlua3MgPSB0cnVlLFxuICAgIHNob3VsZEluY2x1ZGVNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZmFsc2UsXG4gICAgc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzID0gZmFsc2UsXG4gICAgc2hvdWxkSW5jbHVkZVJlZmVyZW5jZXMgPSB0cnVlXG4gIH0gPSBwYXJhbXM7XG5cbiAgbGV0IGxpbmtzOiBSZWZlcmVuY2VbXSA9IFtcbiAgICAuLi4oc2hvdWxkSW5jbHVkZVJlZmVyZW5jZXMgPyBjYWNoZS5saW5rcyA/PyBbXSA6IFtdKSxcbiAgICAuLi4oc2hvdWxkSW5jbHVkZUVtYmVkcyA/IGNhY2hlLmVtYmVkcyA/PyBbXSA6IFtdKSxcbiAgICAuLi4oc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyTGlua3MgPyBjYWNoZS5mcm9udG1hdHRlckxpbmtzID8/IFtdIDogW10pXG4gIF07XG5cbiAgY29uc3QgZmVhdHVyZUxpbmtTZWxlY3RvcnM6IEZlYXR1cmVMaW5rU2VsZWN0b3JbXSA9IFtcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogJ2JvZHkgZXh0ZXJuYWwgbGlua3MnLFxuICAgICAgZmVhdHVyZTogQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNlbGVjdDogKGNhY2hlRXgpID0+IGNhY2hlRXguZXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNob3VsZEluY2x1ZGU6IHNob3VsZEluY2x1ZGVFeHRlcm5hbExpbmtzXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogJ2Zyb250bWF0dGVyIGV4dGVybmFsIGxpbmtzJyxcbiAgICAgIGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLkZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNlbGVjdDogKGNhY2hlRXgpID0+IGNhY2hlRXguZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLFxuICAgICAgc2hvdWxkSW5jbHVkZTogc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc1xuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246ICdtdWx0aS12YWx1ZSBmcm9udG1hdHRlciBleHRlcm5hbCBsaW5rcycsXG4gICAgICBmZWF0dXJlOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLFxuICAgICAgc2VsZWN0OiAoY2FjaGVFeCkgPT4gY2FjaGVFeC5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLFxuICAgICAgc2hvdWxkSW5jbHVkZTogc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3NcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnbXVsdGktdmFsdWUgZnJvbnRtYXR0ZXIgbGlua3MnLFxuICAgICAgZmVhdHVyZTogQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MsXG4gICAgICBzZWxlY3Q6IChjYWNoZUV4KSA9PiBjYWNoZUV4Lm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzLFxuICAgICAgc2hvdWxkSW5jbHVkZTogc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzXG4gICAgfVxuICBdO1xuXG4gIGZvciAoY29uc3QgZmVhdHVyZUxpbmtTZWxlY3RvciBvZiBmZWF0dXJlTGlua1NlbGVjdG9ycykge1xuICAgIGlmICghZmVhdHVyZUxpbmtTZWxlY3Rvci5zaG91bGRJbmNsdWRlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQ2FjaGVkTWV0YWRhdGFFeChjYWNoZSkgfHwgIWNhY2hlLmZlYXR1cmVzLmluY2x1ZGVzKGZlYXR1cmVMaW5rU2VsZWN0b3IuZmVhdHVyZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGluY2x1ZGUgJHtmZWF0dXJlTGlua1NlbGVjdG9yLmRlc2NyaXB0aW9ufTogdGhlIGNhY2hlIHdhcyBub3QgY29tcHV0ZWQgd2l0aCB0aGUgJHtmZWF0dXJlTGlua1NlbGVjdG9yLmZlYXR1cmV9IGZlYXR1cmUuYCk7XG4gICAgfVxuXG4gICAgbGlua3MucHVzaCguLi5lbnN1cmVOb25OdWxsYWJsZShmZWF0dXJlTGlua1NlbGVjdG9yLnNlbGVjdChjYWNoZSkpKTtcbiAgfVxuXG4gIHNvcnRSZWZlcmVuY2VzKGxpbmtzKTtcblxuICAvLyBCVUc6IGh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvdC9idWctZHVwbGljYXRlZC1saW5rcy1pbi1tZXRhZGF0YWNhY2hlLWluc2lkZS1mb290bm90ZXMvODU1NTFcbiAgbGlua3MgPSBsaW5rcy5maWx0ZXIoKGxpbmssIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c0xpbmsgPSBlbnN1cmVOb25OdWxsYWJsZShsaW5rc1tpbmRleCAtIDFdKTtcblxuICAgIGlmIChpc1JlZmVyZW5jZUNhY2hlKGxpbmspICYmIGlzUmVmZXJlbmNlQ2FjaGUocHJldmlvdXNMaW5rKSkge1xuICAgICAgcmV0dXJuIGxpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0ICE9PSBwcmV2aW91c0xpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0O1xuICAgIH1cblxuICAgIGlmIChpc0Zyb250bWF0dGVyTGlua0NhY2hlKGxpbmspICYmIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUocHJldmlvdXNMaW5rKSkge1xuICAgICAgY29uc3QgbGlua1N0YXJ0T2Zmc2V0ID0gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGxpbmspID8gbGluay5zdGFydE9mZnNldCA6IDA7XG4gICAgICBjb25zdCBwcmV2aW91c0xpbmtTdGFydE9mZnNldCA9IGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhwcmV2aW91c0xpbmspID8gcHJldmlvdXNMaW5rLnN0YXJ0T2Zmc2V0IDogMDtcbiAgICAgIHJldHVybiBsaW5rLmtleSAhPT0gcHJldmlvdXNMaW5rLmtleSB8fCBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMobGluaykgIT09IGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhwcmV2aW91c0xpbmspXG4gICAgICAgIHx8IGxpbmtTdGFydE9mZnNldCAhPT0gcHJldmlvdXNMaW5rU3RhcnRPZmZzZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBsaW5rcztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBiYWNrbGluayBjYWNoZSBwbHVnaW4gaXMgY3VycmVudGx5IGxvYWRlZCAtIGVpdGhlciBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgICh7QGxpbmsgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEfSkgb3IgaXRzIHJldGlyZWQgcHJlZGVjZXNzb3IgYEJhY2tsaW5rIENhY2hlYCAoe0BsaW5rIEJBQ0tMSU5LX0NBQ0hFX1BMVUdJTl9JRH0pLlxuICpcbiAqIFN1Y2ggYSBwbHVnaW4ga2VlcHMgYSBkcmFpbi1vbi1yZWFkIGJhY2tsaW5rIGluZGV4IGFuZCBpbmRleGVzIGNhbnZhcyBtZXRhZGF0YSwgc28gYSBjYWxsZXIgdGhhdCBjb21wZW5zYXRlcyBmb3IgT2JzaWRpYW4ncyBvd24gZ2FwcyBjYW4gc3RhbmQgZG93biB3aGlsZSBvbmUgaXMgcHJlc2VudC4gQm90aCBpZHMgYXJlIHJlY29nbml6ZWQ7IHtAbGluayBCQUNLTElOS19DQUNIRV9QTFVHSU5fSUR9IHJlY29yZHMgd2hlbiB0aGUgcmV0aXJlZCBvbmUgbWF5IGJlIGRyb3BwZWQuXG4gKlxuICogVGhpcyByZWFkcyB0aGUgTE9BREVEIHBsdWdpbiBpbnN0YW5jZSByYXRoZXIgdGhhbiBgYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnNgLCBkZWxpYmVyYXRlbHk6IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZSBwbHVnaW4ncyBwYXRjaGVzIGFyZSBpbiBwbGFjZSByaWdodCBub3csIGFuZCB0aGV5IGFyZSBub3QgdW50aWwgaXQgaGFzIGxvYWRlZC4gUGx1Z2lucyBsb2FkIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLCBzbyBjYWxsIHRoaXMgZnJvbSBhIHVzZXItZHJpdmVuIHBhdGggcmF0aGVyIHRoYW4gZnJvbSBwbHVnaW4gbG9hZCAtIHNlZSBydWxlIEwyNSBpbiBgQUdFTlRTLm1kYC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBhIGJhY2tsaW5rIGNhY2hlIHBsdWdpbiBpcyBsb2FkZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzQmFja2xpbmtDYWNoZVBsdWdpbihhcHA6IEFwcCk6IGJvb2xlYW4ge1xuICByZXR1cm4gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX1BMVUdJTl9JRCkgIT09IG51bGwgfHwgYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKEJBQ0tMSU5LX0NBQ0hFX1BMVUdJTl9JRCkgIT09IG51bGw7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY2FjaGUgaXMgYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0gKGkuZS4gaXQgd2FzIGNvbXB1dGVkIHdpdGggZXh0ZXJuYWwtbGlua1xuICogcGFyc2luZyBlbmFibGVkKS5cbiAqXG4gKiBAcGFyYW0gY2FjaGUgLSBUaGUgY2FjaGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNhY2hlIGlzIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FjaGVkTWV0YWRhdGFFeChjYWNoZTogQ2FjaGVkTWV0YWRhdGEpOiBjYWNoZSBpcyBDYWNoZWRNZXRhZGF0YUV4IHtcbiAgcmV0dXJuICdmZWF0dXJlcycgaW4gY2FjaGU7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gJHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UgdGhlIG1ldGFkYXRhIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlIG9wdGlvbnMgY29udHJvbGxpbmcgd2hpY2ggYWRkaXRpb25hbCBsaW5rcyB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJzZU1ldGFkYXRhKGFwcDogQXBwLCAkc3RyaW5nOiBzdHJpbmcsIG9wdGlvbnM6IFBhcnNlTWV0YWRhdGFPcHRpb25zID0ge30pOiBQcm9taXNlPENhY2hlZE1ldGFkYXRhRXg+IHtcbiAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICBjb25zdCBidWZmZXIgPSBlbmNvZGVyLmVuY29kZSgkc3RyaW5nKS5idWZmZXI7XG4gIGNvbnN0IGNhY2hlID0gYXdhaXQgYXBwLm1ldGFkYXRhQ2FjaGUuY29tcHV0ZU1ldGFkYXRhQXN5bmMoYnVmZmVyKSA/PyB7fTtcbiAgcmV0dXJuIHRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeCh7IGNhY2hlLCBjb250ZW50OiAkc3RyaW5nLCBvcHRpb25zIH0pO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgZmlsZSBjYWNoZSBmb3IgYSBub24tZXhpc3RpbmcgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlZ2lzdGVyaW5nIHRoZSBmaWxlIGNhY2hlLlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgZmlsZSBjYWNoZSB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlKHBhcmFtczogUmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGVQYXJhbXMpOiBEaXNwb3NhYmxlIHtcbiAgY29uc3QgeyBhcHAsIGNhY2hlLCBwYXRoT3JGaWxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlLCBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWUgfSk7XG4gIGlmICghZmlsZS5kZWxldGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlIGlzIGV4aXN0aW5nJyk7XG4gIH1cblxuICBhcHAubWV0YWRhdGFDYWNoZS5maWxlQ2FjaGVbZmlsZS5wYXRoXSA9IHtcbiAgICBoYXNoOiBmaWxlLnBhdGgsXG4gICAgbXRpbWU6IDAsXG4gICAgc2l6ZTogMFxuICB9O1xuXG4gIGFwcC5tZXRhZGF0YUNhY2hlLm1ldGFkYXRhQ2FjaGVbZmlsZS5wYXRoXSA9IGNhY2hlO1xuXG4gIHJldHVybiBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICBjYWxsYmFjazogKCk6IHZvaWQgPT4ge1xuICAgICAgdW5yZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZShhcHAsIGZpbGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGZpbGVzIGluIHRoZSBPYnNpZGlhbiBhcHAuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZXMgLSBUaGUgZmlsZXMgdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBmaWxlcyB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRmlsZXMoYXBwOiBBcHAsIGZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBEaXNwb3NhYmxlIHtcbiAgY29uc3QgcmVnaXN0ZXJlZEZpbGVzQ291bnRzID0gZ2V0UmVnaXN0ZXJlZEZpbGVzQ291bnRzKCk7XG5cbiAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgIHdoaWxlIChmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIGxldCBjb3VudCA9IHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5nZXQoZmlsZS5wYXRoKSA/PyAwO1xuICAgICAgY291bnQrKztcbiAgICAgIHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5zZXQoZmlsZS5wYXRoLCBjb3VudCk7XG5cbiAgICAgIGFwcC52YXVsdC5maWxlTWFwW2ZpbGUucGF0aF0gPSBmaWxlO1xuXG4gICAgICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgICAgIGFwcC5tZXRhZGF0YUNhY2hlLnVuaXF1ZUZpbGVMb29rdXAuYWRkKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLCBmaWxlKTtcbiAgICAgIH1cblxuICAgICAgZmlsZSA9IGdldEZvbGRlcih7XG4gICAgICAgIGFwcCxcbiAgICAgICAgcGF0aE9yRm9sZGVyOiBwYXJlbnRGb2xkZXJQYXRoKGZpbGUucGF0aCksXG4gICAgICAgIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICB1bnJlZ2lzdGVyRmlsZXMoYXBwLCBmaWxlcyk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBVbnJlZ2lzdGVycyB0aGUgZmlsZSBjYWNoZSBmb3IgYSBub24tZXhpc3RpbmcgZmlsZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byB1bnJlZ2lzdGVyIHRoZSBmaWxlIGNhY2hlIGZvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGUoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiB2b2lkIHtcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUsIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZSB9KTtcbiAgaWYgKCFmaWxlLmRlbGV0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgaXMgZXhpc3RpbmcnKTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gIGRlbGV0ZSBhcHAubWV0YWRhdGFDYWNoZS5maWxlQ2FjaGVbZmlsZS5wYXRoXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICBkZWxldGUgYXBwLm1ldGFkYXRhQ2FjaGUubWV0YWRhdGFDYWNoZVtmaWxlLnBhdGhdO1xufVxuXG4vKipcbiAqIFVucmVnaXN0ZXJzIGZpbGVzIGZyb20gdGhlIE9ic2lkaWFuIGFwcC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmaWxlcyAtIFRoZSBmaWxlcyB0byB1bnJlZ2lzdGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckZpbGVzKGFwcDogQXBwLCBmaWxlczogVEFic3RyYWN0RmlsZVtdKTogdm9pZCB7XG4gIGNvbnN0IHJlZ2lzdGVyZWRGaWxlc0NvdW50cyA9IGdldFJlZ2lzdGVyZWRGaWxlc0NvdW50cygpO1xuXG4gIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICB3aGlsZSAoZmlsZS5kZWxldGVkKSB7XG4gICAgICBsZXQgY291bnQgPSByZWdpc3RlcmVkRmlsZXNDb3VudHMuZ2V0KGZpbGUucGF0aCkgPz8gMTtcbiAgICAgIGNvdW50LS07XG4gICAgICByZWdpc3RlcmVkRmlsZXNDb3VudHMuc2V0KGZpbGUucGF0aCwgY291bnQpO1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5kZWxldGUoZmlsZS5wYXRoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICAgICAgICBkZWxldGUgYXBwLnZhdWx0LmZpbGVNYXBbZmlsZS5wYXRoXTtcblxuICAgICAgICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgICAgICAgYXBwLm1ldGFkYXRhQ2FjaGUudW5pcXVlRmlsZUxvb2t1cC5yZW1vdmUoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCksIGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZpbGUgPSBnZXRGb2xkZXIoe1xuICAgICAgICBhcHAsXG4gICAgICAgIHBhdGhPckZvbGRlcjogcGFyZW50Rm9sZGVyUGF0aChmaWxlLnBhdGgpLFxuICAgICAgICBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQWR2YW5jZWRNZXRhZGF0YUNhY2hlQmFja2xpbmtzQXBpKCk6IEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaSB8IG51bGwge1xuICByZXR1cm4gZmluZFBsdWdpbkFwaTxBZHZhbmNlZE1ldGFkYXRhQ2FjaGVCYWNrbGlua3NBcGk+KHtcbiAgICBhcGlWZXJzaW9uUmFuZ2U6IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19BUElfVkVSU0lPTl9SQU5HRSxcbiAgICBjb250cmFjdDogQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX0FQSV9DT05UUkFDVCxcbiAgICBwbHVnaW5JZDogQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkRmlsZXNDb3VudHMoKTogTWFwPHN0cmluZywgbnVtYmVyPiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoJ3JlZ2lzdGVyZWRGaWxlc0NvdW50cycsIG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCkpLnZhbHVlO1xufVxuXG4vKipcbiAqIFN0cnVjdHVyYWxseSByZWNvZ25pemVzIHRoZSBiYWNrbGlua3MgZGljdGlvbmFyeSBhbm90aGVyIHBsdWdpbidzIGNvcHkgYnVpbHQsIG9yIGBudWxsYC4gVGhlIGNsYXNzIGl0IHdhcyBidWlsdCBmcm9tIGxpdmVzIGluIHRoYXQgY29weSwgc28gYGluc3RhbmNlb2ZgIGNhbm5vdCBiZSB1c2VkIChydWxlIEw5IGluIGBBR0VOVFMubWRgKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBgbnVsbGAgb3IgcmVhZHMgYXMgYSBiYWNrbGlua3MgZGljdGlvbmFyeS5cbiAqL1xuZnVuY3Rpb24gaXNOdWxsYWJsZUJhY2tsaW5rc0RpY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPiB8IG51bGwge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGxcbiAgICB8fCAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgJiYgUmVmbGVjdC5nZXQodmFsdWUsICdkYXRhJykgaW5zdGFuY2VvZiBNYXBcbiAgICAgICYmIHR5cGVvZiBSZWZsZWN0LmdldCh2YWx1ZSwgJ2dldCcpID09PSAnZnVuY3Rpb24nXG4gICAgICAmJiB0eXBlb2YgUmVmbGVjdC5nZXQodmFsdWUsICdrZXlzJykgPT09ICdmdW5jdGlvbicpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4dGVybmFsQm9keUxpbmtzKGNvbnRlbnQ6IHN0cmluZywgY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogUGFyc2VMaW5rUmVmZXJlbmNlW10ge1xuICBjb25zdCBmcm9udG1hdHRlckVuZE9mZnNldCA9IGNhY2hlLmZyb250bWF0dGVyUG9zaXRpb24/LmVuZC5vZmZzZXQgPz8gMDtcbiAgcmV0dXJuIHBhcnNlTGlua3MoY29udGVudClcbiAgICAuZmlsdGVyKChwYXJzZUxpbmtSZXN1bHQpID0+IHBhcnNlTGlua1Jlc3VsdC5pc0V4dGVybmFsICYmIHBhcnNlTGlua1Jlc3VsdC5zdGFydE9mZnNldCA+PSBmcm9udG1hdHRlckVuZE9mZnNldClcbiAgICAubWFwKChwYXJzZUxpbmtSZXN1bHQpID0+IHRvUGFyc2VMaW5rUmVmZXJlbmNlKHsgY29udGVudCwgcGFyc2VMaW5rUmVzdWx0IH0pKTtcbn1cblxuZnVuY3Rpb24gdG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4KHBhcmFtczogVG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4UGFyYW1zKTogQ2FjaGVkTWV0YWRhdGFFeCB7XG4gIGNvbnN0IHsgY2FjaGUsIGNvbnRlbnQsIG9wdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3QgZmVhdHVyZXM6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlW10gPSBbQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTmF0aXZlXTtcbiAgY29uc3QgcmVzdWx0OiBDYWNoZWRNZXRhZGF0YUV4ID0geyAuLi5jYWNoZSwgZmVhdHVyZXMgfTtcblxuICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZUV4dGVybmFsTGlua3MpIHtcbiAgICByZXN1bHQuZXh0ZXJuYWxMaW5rcyA9IHBhcnNlRXh0ZXJuYWxCb2R5TGlua3MoY29udGVudCwgY2FjaGUpO1xuICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRXh0ZXJuYWxMaW5rcyk7XG4gIH1cblxuICBpZiAoXG4gICAgb3B0aW9ucy5zaG91bGRQYXJzZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc1xuICAgIHx8IG9wdGlvbnMuc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzXG4gICAgfHwgb3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzXG4gICkge1xuICAgIGNvbnN0IGZyb250bWF0dGVyTGlua3MgPSBwYXJzZUZyb250bWF0dGVyTGlua3MoY2FjaGUuZnJvbnRtYXR0ZXIpO1xuXG4gICAgaWYgKG9wdGlvbnMuc2hvdWxkUGFyc2VGcm9udG1hdHRlckV4dGVybmFsTGlua3MpIHtcbiAgICAgIHJlc3VsdC5mcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSBmcm9udG1hdHRlckxpbmtzLmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcztcbiAgICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MpIHtcbiAgICAgIHJlc3VsdC5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZnJvbnRtYXR0ZXJMaW5rcy5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzO1xuICAgICAgZmVhdHVyZXMucHVzaChDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzKSB7XG4gICAgICByZXN1bHQubXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MgPSBmcm9udG1hdHRlckxpbmtzLm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzO1xuICAgICAgZmVhdHVyZXMucHVzaChDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5r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QUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsRUFDWixDQUFDO0FBQ0g7QUFFQSxTQUFTLDJCQUFnRDtBQUN2RCxTQUFPLHlCQUF5Qix5QkFBeUIsb0JBQUksSUFBb0IsQ0FBQyxFQUFFO0FBQ3RGO0FBUUEsU0FBUyx3QkFBd0IsT0FBNEQ7QUFDM0YsU0FBTyxVQUFVLFFBQ1gsT0FBTyxVQUFVLFlBQ2hCLFFBQVEsSUFBSSxPQUFPLE1BQU0sYUFBYSxPQUN0QyxPQUFPLFFBQVEsSUFBSSxPQUFPLEtBQUssTUFBTSxjQUNyQyxPQUFPLFFBQVEsSUFBSSxPQUFPLE1BQU0sTUFBTTtBQUMvQztBQUVBLFNBQVMsdUJBQXVCLFNBQWlCLE9BQTZDO0FBQzVGLFFBQU0sdUJBQXVCLE1BQU0scUJBQXFCLElBQUksVUFBVTtBQUN0RSxTQUFPLFdBQVcsT0FBTyxFQUN0QixPQUFPLENBQUMsb0JBQW9CLGdCQUFnQixjQUFjLGdCQUFnQixlQUFlLG9CQUFvQixFQUM3RyxJQUFJLENBQUMsb0JBQW9CLHFCQUFxQixFQUFFLFNBQVMsZ0JBQWdCLENBQUMsQ0FBQztBQUNoRjtBQUVBLFNBQVMseUJBQXlCLFFBQTBEO0FBQzFGLFFBQU0sRUFBRSxPQUFPLFNBQVMsUUFBUSxJQUFJO0FBQ3BDLFFBQU0sV0FBc0MsQ0FBQyxxQkFBOEI7QUFDM0UsUUFBTSxTQUEyQixFQUFFLEdBQUcsT0FBTyxTQUFTO0FBRXRELE1BQUksUUFBUSwwQkFBMEI7QUFDcEMsV0FBTyxnQkFBZ0IsdUJBQXVCLFNBQVMsS0FBSztBQUM1RCxhQUFTLEtBQUssbUNBQXFDO0FBQUEsRUFDckQ7QUFFQSxNQUNFLFFBQVEsdUNBQ0wsUUFBUSxpREFDUixRQUFRLHVDQUNYO0FBQ0EsVUFBTSxtQkFBbUIsc0JBQXNCLE1BQU0sV0FBVztBQUVoRSxRQUFJLFFBQVEscUNBQXFDO0FBQy9DLGFBQU8sMkJBQTJCLGlCQUFpQjtBQUNuRCxlQUFTLEtBQUsseURBQWdEO0FBQUEsSUFDaEU7QUFFQSxRQUFJLFFBQVEsK0NBQStDO0FBQ3pELGFBQU8scUNBQXFDLGlCQUFpQjtBQUM3RCxlQUFTLEtBQUssNkVBQTBEO0FBQUEsSUFDMUU7QUFFQSxRQUFJLFFBQVEsdUNBQXVDO0FBQ2pELGFBQU8sNkJBQTZCLGlCQUFpQjtBQUNyRCxlQUFTLEtBQUssNkRBQWtEO0FBQUEsSUFDbEU7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZSJdCn0K
|
|
473
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZXRhZGF0YS1jYWNoZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbWV0YWRhdGEgY2FjaGUgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcGlDb250cmFjdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcGktY29udHJhY3QnO1xuaW1wb3J0IHR5cGUgeyBSZXRyeU9wdGlvbnMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BcnJheURpY3QgfSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0JztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDYWNoZWRNZXRhZGF0YSxcbiAgUmVmZXJlbmNlLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlQXJndW1lbnRzU2NoZW1hLFxuICBjcmVhdGVUeXBlR3VhcmRTY2hlbWFcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FwaS1jb250cmFjdCc7XG5pbXBvcnQgeyBDYWxsYmFja0Rpc3Bvc2FibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGlzcG9zYWJsZSc7XG5pbXBvcnQgeyBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBDdXN0b21BcnJheURpY3RJbXBsLFxuICBpc0Zyb250bWF0dGVyTGlua0NhY2hlLFxuICBpc1JlZmVyZW5jZUNhY2hlLFxuICBwYXJlbnRGb2xkZXJQYXRoXG59IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2UsXG4gIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHMsXG4gIFBhcnNlTGlua1JlZmVyZW5jZVxufSBmcm9tICcuL3BhcnNlLWxpbmsudHMnO1xuXG5pbXBvcnQgeyByZXRyeVdpdGhUaW1lb3V0Tm90aWNlIH0gZnJvbSAnLi9hc3luYy13aXRoLW5vdGljZS50cyc7XG5pbXBvcnQgeyBnZXRJbmRleGVkQmFja2xpbmtzRm9yRmlsZSB9IGZyb20gJy4vYmFja2xpbmstaW5kZXgudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRQYXRoLFxuICBpc0NhbnZhc0ZpbGUsXG4gIGlzRmlsZSxcbiAgaXNQYXRoT3JGaWxlXG59IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzLFxuICB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHNcbn0gZnJvbSAnLi9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyc7XG5pbXBvcnQgeyBwYXJzZUZyb250bWF0dGVyIH0gZnJvbSAnLi9mcm9udG1hdHRlci50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHtcbiAgcGFyc2VGcm9udG1hdHRlckxpbmtzLFxuICBwYXJzZUxpbmtzLFxuICB0b1BhcnNlTGlua1JlZmVyZW5jZVxufSBmcm9tICcuL3BhcnNlLWxpbmsudHMnO1xuaW1wb3J0IHsgZmluZFBsdWdpbkFwaSB9IGZyb20gJy4vcGx1Z2luL3BsdWdpbi1hcGkudHMnO1xuaW1wb3J0IHsgc29ydFJlZmVyZW5jZXMgfSBmcm9tICcuL3JlZmVyZW5jZS50cyc7XG5pbXBvcnQge1xuICByZWFkU2FmZSxcbiAgc2F2ZU5vdGVcbn0gZnJvbSAnLi92YXVsdC50cyc7XG5cbi8qKlxuICogQSBwYXJzaW5nIGZlYXR1cmUgdGhhdCB3YXMgYXBwbGllZCB3aGVuIGNvbXB1dGluZyBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAqL1xuZXhwb3J0IGVudW0gQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUge1xuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIHRoZSBub3RlIGNvbnRlbnQgYm9keS5cbiAgICovXG4gIEV4dGVybmFsTGlua3MgPSAnRXh0ZXJuYWxMaW5rcycsXG5cbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBzaW5nbGUtbGluayBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICovXG4gIEZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyA9ICdGcm9udG1hdHRlckV4dGVybmFsTGlua3MnLFxuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICovXG4gIE11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSAnTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcycsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLCB3aGljaCBPYnNpZGlhbiBkb2VzIG5vdCBuYXRpdmVseSBjYWNoZS5cbiAgICovXG4gIE11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzID0gJ011bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzJyxcblxuICAvKipcbiAgICogT2JzaWRpYW4ncyBuYXRpdmUgbWV0YWRhdGEgcGFyc2luZyAoaW50ZXJuYWwgbGlua3MsIGVtYmVkcywgZnJvbnRtYXR0ZXIgbGlua3MpLlxuICAgKi9cbiAgTmF0aXZlID0gJ05hdGl2ZSdcbn1cblxuLyoqXG4gKiBBbiBleHRlbmRlZCB7QGxpbmsgQ2FjaGVkTWV0YWRhdGF9IHRoYXQgcmVjb3JkcyB3aGljaCBwYXJzaW5nIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZX1zIHdlcmVcbiAqIGFwcGxpZWQgKHZpYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeC5mZWF0dXJlc30pIGFuZCBjYXJyaWVzIHRoZSByZXN1bHRpbmcgZXh0ZXJuYWwgbGlua3MuIEVhY2ggbGlua3NcbiAqIGFycmF5IGlzIHBvcHVsYXRlZCBvbmx5IHdoZW4gaXRzIGNvcnJlc3BvbmRpbmcgZmVhdHVyZSBpcyBwcmVzZW50IGluIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4LmZlYXR1cmVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWNoZWRNZXRhZGF0YUV4IGV4dGVuZHMgQ2FjaGVkTWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIHRoZSBub3RlIGNvbnRlbnQgYm9keS4gUG9wdWxhdGVkIG9ubHkgd2hlblxuICAgKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRXh0ZXJuYWxMaW5rc30gaXMgYXBwbGllZC5cbiAgICovXG4gIGV4dGVybmFsTGlua3M/OiBQYXJzZUxpbmtSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogVGhlIHBhcnNpbmcgZmVhdHVyZXMgdGhhdCB3ZXJlIGFwcGxpZWQgd2hlbiBjb21wdXRpbmcgdGhpcyBjYWNoZS5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmVzOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gc2luZ2xlLWxpbmsgKHNpbmdsZS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuIFBvcHVsYXRlZCBvbmx5XG4gICAqIHdoZW4ge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLkZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc30gaXMgYXBwbGllZC5cbiAgICovXG4gIGZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcz86IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIChtdWx0aS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuIFBvcHVsYXRlZCBvbmx5IHdoZW5cbiAgICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLk11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3N9IGlzIGFwcGxpZWQuXG4gICAqL1xuICBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLiBQb3B1bGF0ZWQgb25seSB3aGVuXG4gICAqIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rc30gaXMgYXBwbGllZC5cbiAgICovXG4gIG11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzPzogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVPcHRpb25zIGV4dGVuZHMgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHRpbWVvdXQgbm90aWNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dUaW1lb3V0Tm90aWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlUGFyYW1zIGV4dGVuZHMgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdldENhY2hlU2FmZX0uXG4gKi9cbmV4cG9ydCB0eXBlIEdldENhY2hlU2FmZU9wdGlvbnMgPSBQYXJzZUNhY2hlT3B0aW9ucztcblxuLyoqXG4gKiBQYXJhbXMgZm9yIHtAbGluayBnZXRMaW5rc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0TGlua3NQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNhY2hlZCBtZXRhZGF0YSB0byByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlOiBDYWNoZWRNZXRhZGF0YTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBlbWJlZHMgKGBjYWNoZS5lbWJlZHNgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRW1iZWRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSB0aGUgbm90ZSBib2R5LiBSZXF1aXJlcyB0aGUgY2FjaGUgdG8gYmUgYVxuICAgKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBzaW5nbGUtbGluayAoc2luZ2xlLXZhbHVlKSBub3RlIGZyb250bWF0dGVyXG4gICAqIHZhbHVlcy4gUmVxdWlyZXMgdGhlIGNhY2hlIHRvIGJlIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBmcm9udG1hdHRlciBsaW5rcyAoYGNhY2hlLmZyb250bWF0dGVyTGlua3NgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLFxuICAgKiBpLmUuIHRoZSBvZmZzZXQtY2FycnlpbmcgZnJvbnRtYXR0ZXIgZXh0ZXJuYWwgbGlua3MgKG5hcnJvd2VkIHZpYVxuICAgKiB7QGxpbmsgaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzfSkuIFJlcXVpcmVzIHRoZSBjYWNoZSB0byBiZSBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGludGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICogUmVxdWlyZXMgdGhlIGNhY2hlIHRvIGJlIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHJlZmVyZW5jZSBsaW5rcyAoYGNhY2hlLmxpbmtzYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZVJlZmVyZW5jZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBwYXJzaW5nIHBlcmZvcm1lZCBieSB7QGxpbmsgZ2V0Q2FjaGVTYWZlfSBhbmQge0BsaW5rIHBhcnNlTWV0YWRhdGF9IGJleW9uZCBPYnNpZGlhbidzXG4gKiBuYXRpdmUgbWV0YWRhdGEgcGFyc2luZy4gRWFjaCBvcHRpb24gaXMgb3B0LWluOyBlbmFibGluZyBpdCBhZGRzIHRoZSBjb3JyZXNwb25kaW5nXG4gKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmV9IGFuZCBwb3B1bGF0ZXMgdGhlIG1hdGNoaW5nIGxpbmtzIGFycmF5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlQ2FjaGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcGFyc2UgdGhlIGV4dGVybmFsIGxpbmtzIGZyb20gdGhlIG5vdGUgY29udGVudCBib2R5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQYXJzZUV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBleHRlcm5hbCBsaW5rcyBmcm9tIHNpbmdsZS1saW5rIChzaW5nbGUtdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQYXJzZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcGFyc2UgdGhlIGV4dGVybmFsIGxpbmtzIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBpbnRlcm5hbCBsaW5rcyBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlTWV0YWRhdGF9LlxuICovXG5leHBvcnQgdHlwZSBQYXJzZU1ldGFkYXRhT3B0aW9ucyA9IFBhcnNlQ2FjaGVPcHRpb25zO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSBjYWNoZSB0byByZWdpc3Rlci5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlOiBDYWNoZWRNZXRhZGF0YTtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byByZWdpc3RlciB0aGUgZmlsZSBjYWNoZSBmb3IuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgJ3MgcHVibGlzaGVkIEFQSSB0aGlzIG1vZHVsZSBjYWxscywgZGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZCxcbiAqIGJlY2F1c2UgdGhhdCBwbHVnaW4gaXMgbm90IGEgZGVwZW5kZW5jeSAocnVsZSBMOSBpbiBgQUdFTlRTLm1kYCkuIEl0cyBgYXBpLmQudHNgIGRlY2xhcmVzIHRoZSB3aG9sZSBvZiBpdC5cbiAqL1xuaW50ZXJmYWNlIEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaSB7XG4gIC8qKlxuICAgKiBBbnN3ZXJzIGZyb20gdGhlIHBsdWdpbidzIGJhY2tsaW5rIGNhY2hlLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgYmFja2xpbmtzLCBvciBgbnVsbGAgd2hpbGUgdGhlIHBsdWdpbidzIGBCYWNrbGlua3NgIG1vZHVsZSBpcyBvZmYuXG4gICAqL1xuICBnZXRCYWNrbGlua3NGb3JGaWxlOiAocGF0aE9yRmlsZTogUGF0aE9yRmlsZSkgPT4gQ3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBbnN3ZXJzIGZyb20gdGhlIHBsdWdpbidzIGJhY2tsaW5rIGNhY2hlIG9uY2UgdGhlIHBlbmRpbmcgZmlsZSBjaGFuZ2VzIGhhdmUgYmVlbiBwcm9jZXNzZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvYmplY3QuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGJhY2tsaW5rcywgb3IgdG8gYG51bGxgIHdoaWxlIHRoZSBwbHVnaW4ncyBgQmFja2xpbmtzYFxuICAgKiAgIG1vZHVsZSBpcyBvZmYuXG4gICAqL1xuICBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZTogKHBhdGhPckZpbGU6IFBhdGhPckZpbGUpID0+IFByb21pc2U8Q3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4gfCBudWxsPjtcbn1cblxuLyoqXG4gKiBBIHNlbGVjdG9yIGZvciBhIGZlYXR1cmUtZ2F0ZWQgbGluayBjYXRlZ29yeSBpbiB7QGxpbmsgZ2V0TGlua3N9LlxuICovXG5pbnRlcmZhY2UgRmVhdHVyZUxpbmtTZWxlY3RvciB7XG4gIC8qKlxuICAgKiBBIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5rIGNhdGVnb3J5LCB1c2VkIGluIGVycm9yIG1lc3NhZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZlYXR1cmUgdGhhdCBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIGNhY2hlIGZvciB0aGlzIGNhdGVnb3J5IHRvIGJlIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlO1xuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSBsaW5rcyBmb3IgdGhpcyBjYXRlZ29yeSBmcm9tIHRoZSBjYWNoZS5cbiAgICovXG4gIHNlbGVjdDogKGNhY2hlOiBDYWNoZWRNZXRhZGF0YUV4KSA9PiBSZWZlcmVuY2VbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoaXMgY2F0ZWdvcnkuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIHRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeH0uXG4gKi9cbmludGVyZmFjZSBUb1BhcnNlZENhY2hlZE1ldGFkYXRhRXhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBsYWluIGNhY2hlZCBtZXRhZGF0YSB0byB3cmFwLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGU6IENhY2hlZE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90ZSBjb250ZW50IHRoZSBvZmZzZXRzIGluZGV4IGludG8sIHVzZWQgZm9yIGJvZHkgZXh0ZXJuYWwtbGluayBwYXJzaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2Ugb3B0aW9ucyBjb250cm9sbGluZyB3aGljaCBsaW5rcyB0byBwYXJzZS5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IFBhcnNlQ2FjaGVPcHRpb25zO1xufVxuXG4vKipcbiAqIFRoZSBwbHVnaW4gaWQgb2YgdGhlIGBBZHZhbmNlZCBNZXRhZGF0YSBDYWNoZWAgcGx1Z2luLCB0aGUgc3VjY2Vzc29yIHRvIGBCYWNrbGluayBDYWNoZWAuXG4gKlxuICogVXNlZCBieSB7QGxpbmsgaGFzQmFja2xpbmtDYWNoZVBsdWdpbn0sIGFuZCBhcyB0aGUgcHJvdmlkZXIgaWQgdW5kZXIgd2hpY2gge0BsaW5rIGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGh9IGFuZCB7QGxpbmsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmV9IGxvb2sgdXAgdGhlIHBsdWdpbidzIHB1Ymxpc2hlZCBBUEkuXG4gKi9cbmV4cG9ydCBjb25zdCBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9QTFVHSU5fSUQgPSAnYWR2YW5jZWQtbWV0YWRhdGEtY2FjaGUnO1xuXG4vKipcbiAqIFRoZSBjb250cmFjdCB2ZXJzaW9ucyBvZiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgJ3MgQVBJIHRoaXMgbW9kdWxlIGNvbXBpbGVkIGFnYWluc3QuIGAxLjMuMGAgaXMgdGhlIGZpcnN0IHRvIGNhcnJ5IHRoZSB0d28gYmFja2xpbmsgbWV0aG9kcy5cbiAqL1xuY29uc3QgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX0FQSV9WRVJTSU9OX1JBTkdFID0gJ14xLjMuMCc7XG5cbi8qKlxuICogVGhlIHNjaGVtYXMgb2YgYSBiYWNrbGluayBtZXRob2QncyBwYXlsb2FkczogdGhlIG9uZSBwYXRoLW9yLWZpbGUgYXJndW1lbnQsIGFuZCB0aGUgYmFja2xpbmtzIG9yIGBudWxsYC5cbiAqXG4gKiBBIGNvcHkgb2YgdGhlIGBnZXRCYWNrbGlua3NGb3JGaWxlYCBhbmQgYGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlYCBlbnRyaWVzIG9mIGBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9BUElfQ09OVFJBQ1RgLCB3aGljaCBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgIHNoaXBzIGFzXG4gKiBpdHMgcm9vdCBgYXBpLWNvbnRyYWN0LnRzYCBhbmQgcHVibGlzaGVzLiBLZWVwIHRoZSBndWFyZHMgaW4gYWdyZWVtZW50IHdpdGggdGhhdCBmaWxlLCBzbyB0aGUgcHJvdmlkZXIgYW5kIHRoaXMgY29uc3VtZXIgY2hlY2sgb25lIGRlZmluaXRpb24uXG4gKi9cbmNvbnN0IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19NRVRIT0RfQ09OVFJBQ1QgPSB7XG4gIGlucHV0OiBjcmVhdGVBcmd1bWVudHNTY2hlbWE8W3BhdGhPckZpbGU6IFBhdGhPckZpbGVdPihbeyBleHBlY3RlZDogJ2EgcGF0aCBvciBhIGZpbGUnLCB0eXBlR3VhcmQ6IGlzUGF0aE9yRmlsZSB9XSksXG4gIG91dHB1dDogY3JlYXRlVHlwZUd1YXJkU2NoZW1hKHsgZXhwZWN0ZWQ6ICdhIGJhY2tsaW5rcyBkaWN0aW9uYXJ5IG9yIG51bGwnLCB0eXBlR3VhcmQ6IGlzTnVsbGFibGVCYWNrbGlua3NEaWN0IH0pXG59O1xuXG4vKipcbiAqIFRoZSBjb250cmFjdCBvZiB0aGUgbWVtYmVycyBvZiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgJ3MgQVBJIHRoaXMgbW9kdWxlIGNhbGxzLCBzbyBhIHJlY29yZCB0aGF0IGxhY2tzIGVpdGhlciBpcyBwYXNzZWQgb3ZlciwgYW5kIGEgcGF5bG9hZCB0aGF0IGJyZWFrcyBpdHMgc2lnbmF0dXJlIGlzIHJlcG9ydGVkIHdoaWxlIHRoZSBgUGx1Z2luQXBpYCBkZWJ1Z2dlciBpcyBvbi5cbiAqL1xuY29uc3QgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX0FQSV9DT05UUkFDVDogQXBpQ29udHJhY3Q8QWR2YW5jZWRNZXRhZGF0YUNhY2hlQmFja2xpbmtzQXBpPiA9IHtcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZTogQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX01FVEhPRF9DT05UUkFDVCxcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmU6IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19NRVRIT0RfQ09OVFJBQ1Rcbn07XG5cbi8qKlxuICogVGhlIHBsdWdpbiBpZCBvZiB0aGUgcmV0aXJlZCBgQmFja2xpbmsgQ2FjaGVgIHBsdWdpbiwgc3VwZXJzZWRlZCBieSB7QGxpbmsgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEfS5cbiAqXG4gKiBTdGlsbCByZWNvZ25pemVkIGJ5IHtAbGluayBoYXNCYWNrbGlua0NhY2hlUGx1Z2lufSwgZGVsaWJlcmF0ZWx5LiBSZW1vdmluZyBhIHBsdWdpbiBmcm9tIHRoZSBjb21tdW5pdHkgcmVnaXN0cnkgYmxvY2tzIG5ldyBpbnN0YWxsczsgaXQgdW5pbnN0YWxscyBub3RoaW5nLCBzbyBldmVyeSBleGlzdGluZyB1c2VyIGtlZXBzIGl0IHVudGlsIHRoZXkgbWlncmF0ZSBieSBoYW5kLlxuICpcbiAqIEl0IG1heSBiZSBkcm9wcGVkIHdoZW4gYWxsIHRocmVlIG9mIHRoZSBmb2xsb3dpbmcgaG9sZCwgYW5kIG5vdCBiZWZvcmU6IGBBZHZhbmNlZCBNZXRhZGF0YSBDYWNoZWAgaXMgbGlzdGVkIGluIHRoZSBjb21tdW5pdHkgcmVnaXN0cnksIHNvIG1pZ3JhdGluZyBpcyBwb3NzaWJsZSBhdCBhbGw7IHRoZSBmaW5hbCBgQmFja2xpbmsgQ2FjaGVgIGhhbmRvdmVyIHJlbGVhc2UgaGFzIGJlZW4gb3V0IGZvciBhdCBsZWFzdCB0d2VsdmUgbW9udGhzOyBhbmQgdGhpcyBsaWJyYXJ5IGlzIGN1dHRpbmcgYSBtYWpvciByZWxlYXNlIGFueXdheSwgYmVjYXVzZSBkcm9wcGluZyB0aGUgaWQgc2lsZW50bHkgdW4tZ2F0ZXMgY2FudmFzIGxpbmsgaGFuZGxpbmcgZm9yIGFueW9uZSB3aG8gaGFzIG5vdCBtaWdyYXRlZC4gVGhlcmUgaXMgbm8gY29zdCBwcmVzc3VyZSB0byBkcm9wIGl0IGVhcmxpZXIgLSByZWNvZ25pemluZyBhIGRlYWQgaWQgaXMgb25lIHN0cmluZyBjb21wYXJpc29uIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgcmVhZHMgYSBwbHVnaW4gcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBjb25zdCBCQUNLTElOS19DQUNIRV9QTFVHSU5fSUQgPSAnYmFja2xpbmstY2FjaGUnO1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB0aGUgbWV0YWRhdGEgY2FjaGUgaXMgcmVhZHkgZm9yIGFsbCBmaWxlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbWV0YWRhdGEgY2FjaGUgaXMgcmVhZHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVNZXRhZGF0YUNhY2hlUmVhZHkoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBhcHAubWV0YWRhdGFDYWNoZS5vbkNsZWFuQ2FjaGUocmVzb2x2ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYmFja2xpbmtzIGZvciBhIGZpbGUgb3IgcGF0aC5cbiAqIE5PVEU6IFRoZSBmaWxlIG1heSBiZSBub24tZXhpc3RlbnQuXG4gKlxuICogV2hlbiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgIHB1Ymxpc2hlcyBpdHMgYmFja2xpbmtzIEFQSSBhbmQgaXRzIGBCYWNrbGlua3NgIG1vZHVsZSBpcyBvbiwgaXRzIGNhY2hlIGFuc3dlcnMuXG4gKiBPdGhlcndpc2UgdGhlIGFuc3dlciBjb21lcyBmcm9tIGEgYmFja2xpbmsgaW5kZXggd2hvc2UgY29zdCBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIGNhbmRpZGF0ZSBub3RlcyByYXRoZXIgdGhhblxuICogdG8gZXZlcnkgcmVmZXJlbmNlIGluIHRoZSB2YXVsdCwgYW5kIHdoaWNoIGdpdmVzIHRoZSBzYW1lIHJlZmVyZW5jZXMgT2JzaWRpYW4ncyBvd24gYGdldEJhY2tsaW5rc0ZvckZpbGVgIGdpdmVzLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICogQHJldHVybnMgVGhlIGJhY2tsaW5rcyBmb3IgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrbGlua3NGb3JGaWxlT3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogQ3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSwgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlIH0pO1xuICB1c2luZyBfcmVnaXN0cmF0aW9uID0gcmVnaXN0ZXJGaWxlcyhhcHAsIFtmaWxlXSk7XG4gIHJldHVybiBmaW5kQWR2YW5jZWRNZXRhZGF0YUNhY2hlQmFja2xpbmtzQXBpKCk/LmdldEJhY2tsaW5rc0ZvckZpbGUoZmlsZSkgPz8gZ2V0SW5kZXhlZEJhY2tsaW5rc0ZvckZpbGUoYXBwLCBmaWxlKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIHNhZmVseS5cbiAqXG4gKiBXaGVuIGBBZHZhbmNlZCBNZXRhZGF0YSBDYWNoZWAgcHVibGlzaGVzIGl0cyBiYWNrbGlua3MgQVBJIGFuZCBpdHMgYEJhY2tsaW5rc2AgbW9kdWxlIGlzIG9uLCB0aGF0IEFQSSBhbnN3ZXJzLlxuICpcbiAqIE90aGVyd2lzZSB0aGlzIGlzIE5PVCBhIHB1cmUgcmVhZC4gSXQgdmVyaWZpZXNcbiAqIGVhY2ggYmFja2xpbmsgYWdhaW5zdCB0aGUgbm90ZSdzIGN1cnJlbnQgdGV4dCwgYW5kIHRvIGRvIHRoYXQgaXQgY2FsbHMge0BsaW5rIHNhdmVOb3RlfSBvbiBldmVyeVxuICogbm90ZSB0aGF0IGxpbmtzIHRvIHRoZSBmaWxlLCB3aGljaCBzYXZlcyBhbnkgb3BlbiBlZGl0b3IgdmlldyBvZiB0aG9zZSBub3RlcyB0aGF0IGhhcyB1bnNhdmVkXG4gKiBjaGFuZ2VzLiBDYWxsIGl0IGZyb20gYW4gZXhwbGljaXQgdXNlciBhY3Rpb24uIERvIG5vdCBjYWxsIGl0IGZyb20gYW4gYXV0b21hdGljIHRyaWdnZXIgKGEgdmF1bHQgb3JcbiAqIG1ldGFkYXRhIGV2ZW50LCBhIHNhdmUgb3IgcmVuZGVyIHBhdGNoKSB0aGF0IG9ubHkgZGVjaWRlcyB3aGV0aGVyIHRvIGFjdC4gVGhlcmUsIGEgZm9yY2VkIHNhdmUgY2FuXG4gKiByYWNlIGFub3RoZXIgcGx1Z2luJ3MgaW4tZmxpZ2h0IGVkaXRvciBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHRoZSBiYWNrbGlua3MuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IGRpY3Rpb25hcnkgb2YgYmFja2xpbmtzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUocGFyYW1zOiBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZVBhcmFtcyk6IFByb21pc2U8Q3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4+IHtcbiAgY29uc3QgeyBhcHAsIHBhdGhPckZpbGUsIC4uLm9wdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3QgY2FjaGVkQmFja2xpbmtzID0gYXdhaXQgZmluZEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaSgpPy5nZXRCYWNrbGlua3NGb3JGaWxlU2FmZShwYXRoT3JGaWxlKTtcbiAgaWYgKGNhY2hlZEJhY2tsaW5rcykge1xuICAgIHJldHVybiBjYWNoZWRCYWNrbGlua3M7XG4gIH1cblxuICBsZXQgYmFja2xpbmtzOiBDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPiA9IG5ldyBDdXN0b21BcnJheURpY3RJbXBsPFJlZmVyZW5jZT4oKTtcbiAgYXdhaXQgcmV0cnlXaXRoVGltZW91dE5vdGljZSh7XG4gICAgYXN5bmMgb3BlcmF0aW9uRnVuY3Rpb24oYWJvcnRTaWduYWwpIHtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgICAgIGF3YWl0IGVuc3VyZU1ldGFkYXRhQ2FjaGVSZWFkeShhcHApO1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGJhY2tsaW5rcyA9IGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgoYXBwLCBmaWxlKTtcbiAgICAgIGZvciAoY29uc3Qgbm90ZVBhdGggb2YgYmFja2xpbmtzLmtleXMoKSkge1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBjb25zdCBub3RlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogbm90ZVBhdGggfSk7XG4gICAgICAgIGlmICghbm90ZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEEgY2FudmFzIGhvbGRlciBjYW5ub3QgYmUgY2hlY2tlZCBhZ2FpbnN0IGl0cyB0ZXh0LiBJdHMgZmlsZS1ub2RlIHJlZmVyZW5jZXMgY2Fycnkgbm8gcG9zaXRpb24sIGFuZFxuICAgICAgICAvLyBPYnNpZGlhbiByZXBvcnRzIGEgdGV4dC1ub2RlIGVtYmVkIHdpdGggYSBwb3NpdGlvbiBpbnRvIHRoYXQgbm9kZSdzIG93biB0ZXh0LCBub3QgaW50byB0aGUgY2FudmFzIEpTT04sXG4gICAgICAgIC8vIHNvIHNsaWNpbmcgdGhlIGZpbGUgYXQgaXQgbmV2ZXIgZ2l2ZXMgdGhlIGxpbmsgYmFjayBhbmQgdGhlIHJldHJ5IHdvdWxkIG5ldmVyIGVuZC5cbiAgICAgICAgaWYgKGlzQ2FudmFzRmlsZShub3RlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgc2F2ZU5vdGUoYXBwLCBub3RlKTtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZFNhZmUoYXBwLCBub3RlKTtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZyb250bWF0dGVyID0gcGFyc2VGcm9udG1hdHRlcihjb250ZW50KTtcbiAgICAgICAgY29uc3QgbGlua3MgPSBiYWNrbGlua3MuZ2V0KG5vdGVQYXRoKTtcbiAgICAgICAgaWYgKCFsaW5rcykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgIGxldCBhY3R1YWxMaW5rOiBzdHJpbmc7XG4gICAgICAgICAgaWYgKGlzUmVmZXJlbmNlQ2FjaGUobGluaykpIHtcbiAgICAgICAgICAgIGFjdHVhbExpbmsgPSBjb250ZW50LnNsaWNlKGxpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0LCBsaW5rLnBvc2l0aW9uLmVuZC5vZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckxpbmtDYWNoZShsaW5rKSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGxpbmsua2V5KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsaW5rV2l0aE9mZnNldHMgPSB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMobGluayk7XG4gICAgICAgICAgICBhY3R1YWxMaW5rID0gcHJvcGVydHlWYWx1ZS5zbGljZShsaW5rV2l0aE9mZnNldHMuc3RhcnRPZmZzZXQsIGxpbmtXaXRoT2Zmc2V0cy5lbmRPZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFjdHVhbExpbmsgIT09IGxpbmsub3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBvcGVyYXRpb25OYW1lOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubWV0YWRhdGFDYWNoZS5nZXRCYWNrbGlua3NGb3JGaWxlUGF0aCwgeyBmaWxlUGF0aDogZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpIH0pLFxuICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogbnVsbCxcbiAgICByZXRyeU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgc2hvdWxkU2hvd1RpbWVvdXROb3RpY2U6IG9wdGlvbnMuc2hvdWxkU2hvd1RpbWVvdXROb3RpY2UgPz8gdHJ1ZVxuICB9KTtcblxuICByZXR1cm4gYmFja2xpbmtzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY2FjaGVkIG1ldGFkYXRhIGZvciBhIGdpdmVuIGZpbGUgb3IgcGF0aC5cbiAqXG4gKiBUaGlzIGlzIE5PVCBhIHB1cmUgcmVhZDogYmVmb3JlIGl0IHJlYWRzIHRoZSBjYWNoZSwgaXQgY2FsbHMge0BsaW5rIHNhdmVOb3RlfSwgd2hpY2ggc2F2ZXMgYW55XG4gKiBvcGVuIGVkaXRvciB2aWV3IG9mIHRoZSBub3RlIHRoYXQgaGFzIHVuc2F2ZWQgY2hhbmdlcy4gVGhhdCBzYXZlIGlzIHdoeSB0aGUgY2FjaGUgbWF0Y2hlcyB3aGF0IHRoZVxuICogdXNlciBzZWVzLCBhbmQgd2h5IGEgY29tbWFuZCB0aGF0IHJld3JpdGVzIHRoZSBub3RlIGNhbiB1c2UgdGhpcyBzYWZlbHkgd2l0aG91dCBpdHMgcmV3cml0ZSBiZWluZ1xuICogY2xvYmJlcmVkLiBJdCBpcyBhbHNvIGEgd3JpdGUgb24gdGhlIG5vdGUuIFNvIGRvIG5vdCBjYWxsIHRoaXMgZnJvbSBhbiBhdXRvbWF0aWMgdHJpZ2dlciAoYSB2YXVsdFxuICogb3IgbWV0YWRhdGEgZXZlbnQsIGEgc2F2ZSBvciByZW5kZXIgcGF0Y2gsIGEgbGF5b3V0IGhvb2spIHRoYXQgb25seSBkZWNpZGVzIHdoZXRoZXIgdG8gYWN0OiBhXG4gKiBmb3JjZWQgc2F2ZSBvbmUgdGljayBhZnRlciBhbm90aGVyIHBsdWdpbiBoYXMgZGlzcGF0Y2hlZCBhIGNoYW5nZSBpbnRvIHRoZSBlZGl0b3IgY2FuIGxlYXZlXG4gKiBPYnNpZGlhbidzIGVkaXRvciByZW5kZXJpbmcgc3RhbGUgc3RhdGUuIEEgcmVhZC1vbmx5IHByb2JlIG9uIHRoZSBub3RlJ3MgY3VycmVudCB0ZXh0IHNob3VsZCB1c2VcbiAqIHtAbGluayBwYXJzZU1ldGFkYXRhfSBvbiB0aGF0IHRleHQgaW5zdGVhZC4gSXQgbmVlZHMgbm8gdmlldywgbm8gY2FjaGUgYW5kIG5vIHNhdmUuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZU9yUGF0aCAtIFRoZSBmaWxlIG9yIHBhdGggdG8gcmV0cmlldmUgdGhlIG1ldGFkYXRhIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlIG9wdGlvbnMgY29udHJvbGxpbmcgd2hpY2ggYWRkaXRpb25hbCBsaW5rcyB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBjYWNoZWQgbWV0YWRhdGEgZm9yIHRoZSBmaWxlLCBvciBgbnVsbGAgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENhY2hlU2FmZShhcHA6IEFwcCwgZmlsZU9yUGF0aDogUGF0aE9yRmlsZSwgb3B0aW9uczogR2V0Q2FjaGVTYWZlT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxDYWNoZWRNZXRhZGF0YUV4IHwgbnVsbD4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogZmlsZU9yUGF0aCB9KTtcblxuICB0cnkge1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGw7XG4gICAgaWYgKGZpbGUuZGVsZXRlZCkge1xuICAgICAgY2FjaGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHNhdmVOb3RlKGFwcCwgZmlsZSk7XG5cbiAgICAgIGNvbnN0IGZpbGVDYWNoZUVudHJ5ID0gYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZUNhY2hlW2ZpbGUucGF0aF07XG4gICAgICBjb25zdCBpc1VwVG9EYXRlID0gZmlsZUNhY2hlRW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWVcbiAgICAgICAgJiYgZmlsZUNhY2hlRW50cnkuc2l6ZSA9PT0gZmlsZS5zdGF0LnNpemVcbiAgICAgICAgJiYgT2JqZWN0Lmhhc093bihhcHAubWV0YWRhdGFDYWNoZS5tZXRhZGF0YUNhY2hlLCBmaWxlQ2FjaGVFbnRyeS5oYXNoKTtcbiAgICAgIGlmICghaXNVcFRvRGF0ZSkge1xuICAgICAgICBhd2FpdCBhcHAubWV0YWRhdGFDYWNoZS5jb21wdXRlRmlsZU1ldGFkYXRhQXN5bmMoZmlsZSk7XG4gICAgICAgIGF3YWl0IGVuc3VyZU1ldGFkYXRhQ2FjaGVSZWFkeShhcHApO1xuICAgICAgfVxuICAgICAgY2FjaGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBPbmx5IHRoZSBib2R5LWV4dGVybmFsIHBhcnNlIG5lZWRzIHRoZSBmaWxlIGNvbnRlbnQ7IGZyb250bWF0dGVyIHBhcnNpbmcgdXNlcyB0aGUgY2FjaGVkXG4gICAgLy8gZnJvbnRtYXR0ZXIsIHNvIGF2b2lkIHJlYWRpbmcgdGhlIGNvbnRlbnQgdW5sZXNzIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cbiAgICBjb25zdCBjb250ZW50ID0gb3B0aW9ucy5zaG91bGRQYXJzZUV4dGVybmFsTGlua3MgPyBhd2FpdCBhcHAudmF1bHQuY2FjaGVkUmVhZChmaWxlKSA6ICcnO1xuICAgIHJldHVybiB0b1BhcnNlZENhY2hlZE1ldGFkYXRhRXgoeyBjYWNoZSwgY29udGVudCwgb3B0aW9ucyB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIWZpbGUgfHwgZmlsZS5kZWxldGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZnJvbnQgbWF0dGVyIGZyb20gdGhlIG1ldGFkYXRhIGNhY2hlIHNhZmVseS5cbiAqXG4gKiBJdCByZWFkcyB0aHJvdWdoIHtAbGluayBnZXRDYWNoZVNhZmV9LCBzbyBpdCBzYXZlcyBhbnkgb3BlbiBlZGl0b3IgdmlldyBvZiB0aGUgbm90ZSB0aGF0IGhhc1xuICogdW5zYXZlZCBjaGFuZ2VzLiBTZWUge0BsaW5rIGdldENhY2hlU2FmZX0gZm9yIHdoZW4gdGhhdCBzYXZlIG1hdHRlcnMgYW5kIHdoYXQgdG8gdXNlIGluc3RlYWQuXG4gKlxuICogQHR5cGVQYXJhbSBDdXN0b21Gcm9udG1hdHRlciAtIFRoZSB0eXBlIG9mIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byByZXRyaWV2ZSB0aGUgZnJvbnQgbWF0dGVyIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgY29tYmluZWQgZnJvbnQgbWF0dGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RnJvbnRtYXR0ZXJTYWZlPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4oYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+PiB7XG4gIGNvbnN0IGNhY2hlID0gYXdhaXQgZ2V0Q2FjaGVTYWZlKGFwcCwgcGF0aE9yRmlsZSk7XG4gIHJldHVybiAoY2FjaGU/LmZyb250bWF0dGVyID8/IHt9KSBhcyBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHNlbGVjdGVkIGxpbmtzIGZyb20gdGhlIHByb3ZpZGVkIGNhY2hlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyB0aGUgbGlua3MuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiByZWZlcmVuY2VzIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0ZWQgbGlua3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5rcyhwYXJhbXM6IEdldExpbmtzUGFyYW1zKTogUmVmZXJlbmNlW10ge1xuICBjb25zdCB7XG4gICAgY2FjaGUsXG4gICAgc2hvdWxkSW5jbHVkZUVtYmVkcyA9IHRydWUsXG4gICAgc2hvdWxkSW5jbHVkZUV4dGVybmFsTGlua3MgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZmFsc2UsXG4gICAgc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyTGlua3MgPSB0cnVlLFxuICAgIHNob3VsZEluY2x1ZGVNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZmFsc2UsXG4gICAgc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzID0gZmFsc2UsXG4gICAgc2hvdWxkSW5jbHVkZVJlZmVyZW5jZXMgPSB0cnVlXG4gIH0gPSBwYXJhbXM7XG5cbiAgbGV0IGxpbmtzOiBSZWZlcmVuY2VbXSA9IFtcbiAgICAuLi4oc2hvdWxkSW5jbHVkZVJlZmVyZW5jZXMgPyBjYWNoZS5saW5rcyA/PyBbXSA6IFtdKSxcbiAgICAuLi4oc2hvdWxkSW5jbHVkZUVtYmVkcyA/IGNhY2hlLmVtYmVkcyA/PyBbXSA6IFtdKSxcbiAgICAuLi4oc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyTGlua3MgPyBjYWNoZS5mcm9udG1hdHRlckxpbmtzID8/IFtdIDogW10pXG4gIF07XG5cbiAgY29uc3QgZmVhdHVyZUxpbmtTZWxlY3RvcnM6IEZlYXR1cmVMaW5rU2VsZWN0b3JbXSA9IFtcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogJ2JvZHkgZXh0ZXJuYWwgbGlua3MnLFxuICAgICAgZmVhdHVyZTogQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNlbGVjdDogKGNhY2hlRXgpID0+IGNhY2hlRXguZXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNob3VsZEluY2x1ZGU6IHNob3VsZEluY2x1ZGVFeHRlcm5hbExpbmtzXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogJ2Zyb250bWF0dGVyIGV4dGVybmFsIGxpbmtzJyxcbiAgICAgIGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLkZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNlbGVjdDogKGNhY2hlRXgpID0+IGNhY2hlRXguZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLFxuICAgICAgc2hvdWxkSW5jbHVkZTogc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc1xuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246ICdtdWx0aS12YWx1ZSBmcm9udG1hdHRlciBleHRlcm5hbCBsaW5rcycsXG4gICAgICBmZWF0dXJlOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLFxuICAgICAgc2VsZWN0OiAoY2FjaGVFeCkgPT4gY2FjaGVFeC5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLFxuICAgICAgc2hvdWxkSW5jbHVkZTogc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3NcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnbXVsdGktdmFsdWUgZnJvbnRtYXR0ZXIgbGlua3MnLFxuICAgICAgZmVhdHVyZTogQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MsXG4gICAgICBzZWxlY3Q6IChjYWNoZUV4KSA9PiBjYWNoZUV4Lm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzLFxuICAgICAgc2hvdWxkSW5jbHVkZTogc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzXG4gICAgfVxuICBdO1xuXG4gIGZvciAoY29uc3QgZmVhdHVyZUxpbmtTZWxlY3RvciBvZiBmZWF0dXJlTGlua1NlbGVjdG9ycykge1xuICAgIGlmICghZmVhdHVyZUxpbmtTZWxlY3Rvci5zaG91bGRJbmNsdWRlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQ2FjaGVkTWV0YWRhdGFFeChjYWNoZSkgfHwgIWNhY2hlLmZlYXR1cmVzLmluY2x1ZGVzKGZlYXR1cmVMaW5rU2VsZWN0b3IuZmVhdHVyZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGluY2x1ZGUgJHtmZWF0dXJlTGlua1NlbGVjdG9yLmRlc2NyaXB0aW9ufTogdGhlIGNhY2hlIHdhcyBub3QgY29tcHV0ZWQgd2l0aCB0aGUgJHtmZWF0dXJlTGlua1NlbGVjdG9yLmZlYXR1cmV9IGZlYXR1cmUuYCk7XG4gICAgfVxuXG4gICAgbGlua3MucHVzaCguLi5lbnN1cmVOb25OdWxsYWJsZShmZWF0dXJlTGlua1NlbGVjdG9yLnNlbGVjdChjYWNoZSkpKTtcbiAgfVxuXG4gIHNvcnRSZWZlcmVuY2VzKGxpbmtzKTtcblxuICAvLyBCVUc6IGh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvdC9idWctZHVwbGljYXRlZC1saW5rcy1pbi1tZXRhZGF0YWNhY2hlLWluc2lkZS1mb290bm90ZXMvODU1NTFcbiAgbGlua3MgPSBsaW5rcy5maWx0ZXIoKGxpbmssIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c0xpbmsgPSBlbnN1cmVOb25OdWxsYWJsZShsaW5rc1tpbmRleCAtIDFdKTtcblxuICAgIGlmIChpc1JlZmVyZW5jZUNhY2hlKGxpbmspICYmIGlzUmVmZXJlbmNlQ2FjaGUocHJldmlvdXNMaW5rKSkge1xuICAgICAgcmV0dXJuIGxpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0ICE9PSBwcmV2aW91c0xpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0O1xuICAgIH1cblxuICAgIGlmIChpc0Zyb250bWF0dGVyTGlua0NhY2hlKGxpbmspICYmIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUocHJldmlvdXNMaW5rKSkge1xuICAgICAgY29uc3QgbGlua1N0YXJ0T2Zmc2V0ID0gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGxpbmspID8gbGluay5zdGFydE9mZnNldCA6IDA7XG4gICAgICBjb25zdCBwcmV2aW91c0xpbmtTdGFydE9mZnNldCA9IGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhwcmV2aW91c0xpbmspID8gcHJldmlvdXNMaW5rLnN0YXJ0T2Zmc2V0IDogMDtcbiAgICAgIHJldHVybiBsaW5rLmtleSAhPT0gcHJldmlvdXNMaW5rLmtleSB8fCBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMobGluaykgIT09IGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhwcmV2aW91c0xpbmspXG4gICAgICAgIHx8IGxpbmtTdGFydE9mZnNldCAhPT0gcHJldmlvdXNMaW5rU3RhcnRPZmZzZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBsaW5rcztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBiYWNrbGluayBjYWNoZSBwbHVnaW4gaXMgY3VycmVudGx5IGxvYWRlZCAtIGVpdGhlciBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgICh7QGxpbmsgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEfSkgb3IgaXRzIHJldGlyZWQgcHJlZGVjZXNzb3IgYEJhY2tsaW5rIENhY2hlYCAoe0BsaW5rIEJBQ0tMSU5LX0NBQ0hFX1BMVUdJTl9JRH0pLlxuICpcbiAqIFN1Y2ggYSBwbHVnaW4ga2VlcHMgYSBkcmFpbi1vbi1yZWFkIGJhY2tsaW5rIGluZGV4IGFuZCBpbmRleGVzIGNhbnZhcyBtZXRhZGF0YSwgc28gYSBjYWxsZXIgdGhhdCBjb21wZW5zYXRlcyBmb3IgT2JzaWRpYW4ncyBvd24gZ2FwcyBjYW4gc3RhbmQgZG93biB3aGlsZSBvbmUgaXMgcHJlc2VudC4gQm90aCBpZHMgYXJlIHJlY29nbml6ZWQ7IHtAbGluayBCQUNLTElOS19DQUNIRV9QTFVHSU5fSUR9IHJlY29yZHMgd2hlbiB0aGUgcmV0aXJlZCBvbmUgbWF5IGJlIGRyb3BwZWQuXG4gKlxuICogVGhpcyByZWFkcyB0aGUgTE9BREVEIHBsdWdpbiBpbnN0YW5jZSByYXRoZXIgdGhhbiBgYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnNgLCBkZWxpYmVyYXRlbHk6IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZSBwbHVnaW4ncyBwYXRjaGVzIGFyZSBpbiBwbGFjZSByaWdodCBub3csIGFuZCB0aGV5IGFyZSBub3QgdW50aWwgaXQgaGFzIGxvYWRlZC4gUGx1Z2lucyBsb2FkIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLCBzbyBjYWxsIHRoaXMgZnJvbSBhIHVzZXItZHJpdmVuIHBhdGggcmF0aGVyIHRoYW4gZnJvbSBwbHVnaW4gbG9hZCAtIHNlZSBydWxlIEwyNSBpbiBgQUdFTlRTLm1kYC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBhIGJhY2tsaW5rIGNhY2hlIHBsdWdpbiBpcyBsb2FkZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzQmFja2xpbmtDYWNoZVBsdWdpbihhcHA6IEFwcCk6IGJvb2xlYW4ge1xuICByZXR1cm4gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX1BMVUdJTl9JRCkgIT09IG51bGwgfHwgYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKEJBQ0tMSU5LX0NBQ0hFX1BMVUdJTl9JRCkgIT09IG51bGw7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY2FjaGUgaXMgYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0gKGkuZS4gaXQgd2FzIGNvbXB1dGVkIHdpdGggZXh0ZXJuYWwtbGlua1xuICogcGFyc2luZyBlbmFibGVkKS5cbiAqXG4gKiBAcGFyYW0gY2FjaGUgLSBUaGUgY2FjaGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNhY2hlIGlzIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FjaGVkTWV0YWRhdGFFeChjYWNoZTogQ2FjaGVkTWV0YWRhdGEpOiBjYWNoZSBpcyBDYWNoZWRNZXRhZGF0YUV4IHtcbiAgcmV0dXJuICdmZWF0dXJlcycgaW4gY2FjaGU7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gJHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UgdGhlIG1ldGFkYXRhIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlIG9wdGlvbnMgY29udHJvbGxpbmcgd2hpY2ggYWRkaXRpb25hbCBsaW5rcyB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJzZU1ldGFkYXRhKGFwcDogQXBwLCAkc3RyaW5nOiBzdHJpbmcsIG9wdGlvbnM6IFBhcnNlTWV0YWRhdGFPcHRpb25zID0ge30pOiBQcm9taXNlPENhY2hlZE1ldGFkYXRhRXg+IHtcbiAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICBjb25zdCBidWZmZXIgPSBlbmNvZGVyLmVuY29kZSgkc3RyaW5nKS5idWZmZXI7XG4gIGNvbnN0IGNhY2hlID0gYXdhaXQgYXBwLm1ldGFkYXRhQ2FjaGUuY29tcHV0ZU1ldGFkYXRhQXN5bmMoYnVmZmVyKSA/PyB7fTtcbiAgcmV0dXJuIHRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeCh7IGNhY2hlLCBjb250ZW50OiAkc3RyaW5nLCBvcHRpb25zIH0pO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgZmlsZSBjYWNoZSBmb3IgYSBub24tZXhpc3RpbmcgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlZ2lzdGVyaW5nIHRoZSBmaWxlIGNhY2hlLlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgZmlsZSBjYWNoZSB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlKHBhcmFtczogUmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGVQYXJhbXMpOiBEaXNwb3NhYmxlIHtcbiAgY29uc3QgeyBhcHAsIGNhY2hlLCBwYXRoT3JGaWxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlLCBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWUgfSk7XG4gIGlmICghZmlsZS5kZWxldGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlIGlzIGV4aXN0aW5nJyk7XG4gIH1cblxuICBhcHAubWV0YWRhdGFDYWNoZS5maWxlQ2FjaGVbZmlsZS5wYXRoXSA9IHtcbiAgICBoYXNoOiBmaWxlLnBhdGgsXG4gICAgbXRpbWU6IDAsXG4gICAgc2l6ZTogMFxuICB9O1xuXG4gIGFwcC5tZXRhZGF0YUNhY2hlLm1ldGFkYXRhQ2FjaGVbZmlsZS5wYXRoXSA9IGNhY2hlO1xuXG4gIHJldHVybiBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICBjYWxsYmFjazogKCk6IHZvaWQgPT4ge1xuICAgICAgdW5yZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZShhcHAsIGZpbGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGZpbGVzIGluIHRoZSBPYnNpZGlhbiBhcHAuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZXMgLSBUaGUgZmlsZXMgdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBmaWxlcyB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRmlsZXMoYXBwOiBBcHAsIGZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBEaXNwb3NhYmxlIHtcbiAgY29uc3QgcmVnaXN0ZXJlZEZpbGVzQ291bnRzID0gZ2V0UmVnaXN0ZXJlZEZpbGVzQ291bnRzKCk7XG5cbiAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgIHdoaWxlIChmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIGxldCBjb3VudCA9IHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5nZXQoZmlsZS5wYXRoKSA/PyAwO1xuICAgICAgY291bnQrKztcbiAgICAgIHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5zZXQoZmlsZS5wYXRoLCBjb3VudCk7XG5cbiAgICAgIGFwcC52YXVsdC5maWxlTWFwW2ZpbGUucGF0aF0gPSBmaWxlO1xuXG4gICAgICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgICAgIGFwcC5tZXRhZGF0YUNhY2hlLnVuaXF1ZUZpbGVMb29rdXAuYWRkKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLCBmaWxlKTtcbiAgICAgIH1cblxuICAgICAgZmlsZSA9IGdldEZvbGRlcih7XG4gICAgICAgIGFwcCxcbiAgICAgICAgcGF0aE9yRm9sZGVyOiBwYXJlbnRGb2xkZXJQYXRoKGZpbGUucGF0aCksXG4gICAgICAgIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICB1bnJlZ2lzdGVyRmlsZXMoYXBwLCBmaWxlcyk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBVbnJlZ2lzdGVycyB0aGUgZmlsZSBjYWNoZSBmb3IgYSBub24tZXhpc3RpbmcgZmlsZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byB1bnJlZ2lzdGVyIHRoZSBmaWxlIGNhY2hlIGZvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGUoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiB2b2lkIHtcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUsIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZSB9KTtcbiAgaWYgKCFmaWxlLmRlbGV0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgaXMgZXhpc3RpbmcnKTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gIGRlbGV0ZSBhcHAubWV0YWRhdGFDYWNoZS5maWxlQ2FjaGVbZmlsZS5wYXRoXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICBkZWxldGUgYXBwLm1ldGFkYXRhQ2FjaGUubWV0YWRhdGFDYWNoZVtmaWxlLnBhdGhdO1xufVxuXG4vKipcbiAqIFVucmVnaXN0ZXJzIGZpbGVzIGZyb20gdGhlIE9ic2lkaWFuIGFwcC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmaWxlcyAtIFRoZSBmaWxlcyB0byB1bnJlZ2lzdGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckZpbGVzKGFwcDogQXBwLCBmaWxlczogVEFic3RyYWN0RmlsZVtdKTogdm9pZCB7XG4gIGNvbnN0IHJlZ2lzdGVyZWRGaWxlc0NvdW50cyA9IGdldFJlZ2lzdGVyZWRGaWxlc0NvdW50cygpO1xuXG4gIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICB3aGlsZSAoZmlsZS5kZWxldGVkKSB7XG4gICAgICBsZXQgY291bnQgPSByZWdpc3RlcmVkRmlsZXNDb3VudHMuZ2V0KGZpbGUucGF0aCkgPz8gMTtcbiAgICAgIGNvdW50LS07XG4gICAgICByZWdpc3RlcmVkRmlsZXNDb3VudHMuc2V0KGZpbGUucGF0aCwgY291bnQpO1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5kZWxldGUoZmlsZS5wYXRoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICAgICAgICBkZWxldGUgYXBwLnZhdWx0LmZpbGVNYXBbZmlsZS5wYXRoXTtcblxuICAgICAgICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgICAgICAgYXBwLm1ldGFkYXRhQ2FjaGUudW5pcXVlRmlsZUxvb2t1cC5yZW1vdmUoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCksIGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZpbGUgPSBnZXRGb2xkZXIoe1xuICAgICAgICBhcHAsXG4gICAgICAgIHBhdGhPckZvbGRlcjogcGFyZW50Rm9sZGVyUGF0aChmaWxlLnBhdGgpLFxuICAgICAgICBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQWR2YW5jZWRNZXRhZGF0YUNhY2hlQmFja2xpbmtzQXBpKCk6IEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaSB8IG51bGwge1xuICByZXR1cm4gZmluZFBsdWdpbkFwaTxBZHZhbmNlZE1ldGFkYXRhQ2FjaGVCYWNrbGlua3NBcGk+KHtcbiAgICBhcGlWZXJzaW9uUmFuZ2U6IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19BUElfVkVSU0lPTl9SQU5HRSxcbiAgICBjb250cmFjdDogQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX0FQSV9DT05UUkFDVCxcbiAgICBwbHVnaW5JZDogQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkRmlsZXNDb3VudHMoKTogTWFwPHN0cmluZywgbnVtYmVyPiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoJ3JlZ2lzdGVyZWRGaWxlc0NvdW50cycsIG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCkpLnZhbHVlO1xufVxuXG4vKipcbiAqIFN0cnVjdHVyYWxseSByZWNvZ25pemVzIHRoZSBiYWNrbGlua3MgZGljdGlvbmFyeSBhbm90aGVyIHBsdWdpbidzIGNvcHkgYnVpbHQsIG9yIGBudWxsYC4gVGhlIGNsYXNzIGl0IHdhcyBidWlsdCBmcm9tIGxpdmVzIGluIHRoYXQgY29weSwgc28gYGluc3RhbmNlb2ZgIGNhbm5vdCBiZSB1c2VkIChydWxlIEw5IGluIGBBR0VOVFMubWRgKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBgbnVsbGAgb3IgcmVhZHMgYXMgYSBiYWNrbGlua3MgZGljdGlvbmFyeS5cbiAqL1xuZnVuY3Rpb24gaXNOdWxsYWJsZUJhY2tsaW5rc0RpY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPiB8IG51bGwge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGxcbiAgICB8fCAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgJiYgUmVmbGVjdC5nZXQodmFsdWUsICdkYXRhJykgaW5zdGFuY2VvZiBNYXBcbiAgICAgICYmIHR5cGVvZiBSZWZsZWN0LmdldCh2YWx1ZSwgJ2dldCcpID09PSAnZnVuY3Rpb24nXG4gICAgICAmJiB0eXBlb2YgUmVmbGVjdC5nZXQodmFsdWUsICdrZXlzJykgPT09ICdmdW5jdGlvbicpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4dGVybmFsQm9keUxpbmtzKGNvbnRlbnQ6IHN0cmluZywgY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogUGFyc2VMaW5rUmVmZXJlbmNlW10ge1xuICBjb25zdCBmcm9udG1hdHRlckVuZE9mZnNldCA9IGNhY2hlLmZyb250bWF0dGVyUG9zaXRpb24/LmVuZC5vZmZzZXQgPz8gMDtcbiAgcmV0dXJuIHBhcnNlTGlua3MoY29udGVudClcbiAgICAuZmlsdGVyKChwYXJzZUxpbmtSZXN1bHQpID0+IHBhcnNlTGlua1Jlc3VsdC5pc0V4dGVybmFsICYmIHBhcnNlTGlua1Jlc3VsdC5zdGFydE9mZnNldCA+PSBmcm9udG1hdHRlckVuZE9mZnNldClcbiAgICAubWFwKChwYXJzZUxpbmtSZXN1bHQpID0+IHRvUGFyc2VMaW5rUmVmZXJlbmNlKHsgY29udGVudCwgcGFyc2VMaW5rUmVzdWx0IH0pKTtcbn1cblxuZnVuY3Rpb24gdG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4KHBhcmFtczogVG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4UGFyYW1zKTogQ2FjaGVkTWV0YWRhdGFFeCB7XG4gIGNvbnN0IHsgY2FjaGUsIGNvbnRlbnQsIG9wdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3QgZmVhdHVyZXM6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlW10gPSBbQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTmF0aXZlXTtcbiAgY29uc3QgcmVzdWx0OiBDYWNoZWRNZXRhZGF0YUV4ID0geyAuLi5jYWNoZSwgZmVhdHVyZXMgfTtcblxuICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZUV4dGVybmFsTGlua3MpIHtcbiAgICByZXN1bHQuZXh0ZXJuYWxMaW5rcyA9IHBhcnNlRXh0ZXJuYWxCb2R5TGlua3MoY29udGVudCwgY2FjaGUpO1xuICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRXh0ZXJuYWxMaW5rcyk7XG4gIH1cblxuICBpZiAoXG4gICAgb3B0aW9ucy5zaG91bGRQYXJzZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc1xuICAgIHx8IG9wdGlvbnMuc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzXG4gICAgfHwgb3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzXG4gICkge1xuICAgIGNvbnN0IGZyb250bWF0dGVyTGlua3MgPSBwYXJzZUZyb250bWF0dGVyTGlua3MoY2FjaGUuZnJvbnRtYXR0ZXIpO1xuXG4gICAgaWYgKG9wdGlvbnMuc2hvdWxkUGFyc2VGcm9udG1hdHRlckV4dGVybmFsTGlua3MpIHtcbiAgICAgIHJlc3VsdC5mcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSBmcm9udG1hdHRlckxpbmtzLmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcztcbiAgICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MpIHtcbiAgICAgIHJlc3VsdC5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZnJvbnRtYXR0ZXJMaW5rcy5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzO1xuICAgICAgZmVhdHVyZXMucHVzaChDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzKSB7XG4gICAgICByZXN1bHQubXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MgPSBmcm9udG1hdHRlckxpbmtzLm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzO1xuICAgICAgZmVhdHVyZXMucHVzaChDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcyk7XG4gICAgfVxu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QUFBQSxFQUNaLENBQUM7QUFDSDtBQUVBLFNBQVMsMkJBQWdEO0FBQ3ZELFNBQU8seUJBQXlCLHlCQUF5QixvQkFBSSxJQUFvQixDQUFDLEVBQUU7QUFDdEY7QUFRQSxTQUFTLHdCQUF3QixPQUE0RDtBQUMzRixTQUFPLFVBQVUsUUFDWCxPQUFPLFVBQVUsWUFDaEIsUUFBUSxJQUFJLE9BQU8sTUFBTSxhQUFhLE9BQ3RDLE9BQU8sUUFBUSxJQUFJLE9BQU8sS0FBSyxNQUFNLGNBQ3JDLE9BQU8sUUFBUSxJQUFJLE9BQU8sTUFBTSxNQUFNO0FBQy9DO0FBRUEsU0FBUyx1QkFBdUIsU0FBaUIsT0FBNkM7QUFDNUYsUUFBTSx1QkFBdUIsTUFBTSxxQkFBcUIsSUFBSSxVQUFVO0FBQ3RFLFNBQU8sV0FBVyxPQUFPLEVBQ3RCLE9BQU8sQ0FBQyxvQkFBb0IsZ0JBQWdCLGNBQWMsZ0JBQWdCLGVBQWUsb0JBQW9CLEVBQzdHLElBQUksQ0FBQyxvQkFBb0IscUJBQXFCLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2hGO0FBRUEsU0FBUyx5QkFBeUIsUUFBMEQ7QUFDMUYsUUFBTSxFQUFFLE9BQU8sU0FBUyxRQUFRLElBQUk7QUFDcEMsUUFBTSxXQUFzQyxDQUFDLHFCQUE4QjtBQUMzRSxRQUFNLFNBQTJCLEVBQUUsR0FBRyxPQUFPLFNBQVM7QUFFdEQsTUFBSSxRQUFRLDBCQUEwQjtBQUNwQyxXQUFPLGdCQUFnQix1QkFBdUIsU0FBUyxLQUFLO0FBQzVELGFBQVMsS0FBSyxtQ0FBcUM7QUFBQSxFQUNyRDtBQUVBLE1BQ0UsUUFBUSx1Q0FDTCxRQUFRLGlEQUNSLFFBQVEsdUNBQ1g7QUFDQSxVQUFNLG1CQUFtQixzQkFBc0IsTUFBTSxXQUFXO0FBRWhFLFFBQUksUUFBUSxxQ0FBcUM7QUFDL0MsYUFBTywyQkFBMkIsaUJBQWlCO0FBQ25ELGVBQVMsS0FBSyx5REFBZ0Q7QUFBQSxJQUNoRTtBQUVBLFFBQUksUUFBUSwrQ0FBK0M7QUFDekQsYUFBTyxxQ0FBcUMsaUJBQWlCO0FBQzdELGVBQVMsS0FBSyw2RUFBMEQ7QUFBQSxJQUMxRTtBQUVBLFFBQUksUUFBUSx1Q0FBdUM7QUFDakQsYUFBTyw2QkFBNkIsaUJBQWlCO0FBQ3JELGVBQVMsS0FBSyw2REFBa0Q7QUFBQSxJQUNsRTtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7IiwibmFtZXMiOlsiQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUiXX0=
|