@cuby-ui/core 0.0.563 → 0.0.564
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 +811 -811
- package/components/filter-bar/components/date-filter/date-filter.component.d.ts +1 -1
- package/components/notification/notification.component.d.ts +2 -2
- package/directives/tooltip/tooltip.component.d.ts +1 -1
- package/esm2022/animations/animations.mjs +1 -1
- package/esm2022/animations/index.mjs +1 -1
- package/esm2022/classes/accessors.mjs +1 -1
- package/esm2022/classes/driver.mjs +1 -1
- package/esm2022/classes/index.mjs +1 -1
- package/esm2022/classes/vehicle.mjs +1 -1
- package/esm2022/components/accordion/accordion-item/accordion-item.component.mjs +3 -3
- package/esm2022/components/accordion/accordion-item/accordion-item.options.mjs +1 -1
- package/esm2022/components/accordion/accordion.component.mjs +3 -3
- package/esm2022/components/accordion/accordion.directive.mjs +1 -1
- package/esm2022/components/accordion/accordion.module.mjs +1 -1
- package/esm2022/components/accordion/index.mjs +1 -1
- package/esm2022/components/alert/alert.component.mjs +3 -3
- package/esm2022/components/alert/alert.interfaces.mjs +1 -1
- package/esm2022/components/alert/alert.module.mjs +1 -1
- package/esm2022/components/alert/alert.service.mjs +1 -1
- package/esm2022/components/alert/alert.tokens.mjs +1 -1
- package/esm2022/components/alert/alert.types.mjs +1 -1
- package/esm2022/components/alert/alerts.component.mjs +3 -3
- package/esm2022/components/alert/index.mjs +1 -1
- package/esm2022/components/alert-hint/alert-hint.component.mjs +3 -3
- package/esm2022/components/alert-hint/error-status.mjs +1 -1
- package/esm2022/components/alert-hint/index.mjs +1 -1
- package/esm2022/components/badge/badge.component.mjs +3 -3
- package/esm2022/components/badge/badge.module.mjs +1 -1
- package/esm2022/components/badge/badge.options.mjs +1 -1
- package/esm2022/components/badge/index.mjs +1 -1
- package/esm2022/components/banner/banner.component.mjs +3 -3
- package/esm2022/components/banner/banner.module.mjs +1 -1
- package/esm2022/components/banner/banner.options.mjs +1 -1
- package/esm2022/components/banner/index.mjs +1 -1
- package/esm2022/components/breadcrumbs/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/components/breadcrumbs/breadcrumbs.component.mjs +3 -3
- package/esm2022/components/breadcrumbs/breadcrumbs.module.mjs +1 -1
- package/esm2022/components/breadcrumbs/index.mjs +1 -1
- package/esm2022/components/button/button.component.mjs +3 -3
- package/esm2022/components/button/button.module.mjs +1 -1
- package/esm2022/components/button/button.options.mjs +1 -1
- package/esm2022/components/button/index.mjs +1 -1
- package/esm2022/components/button-group/button-group.component.mjs +3 -3
- package/esm2022/components/button-group/button-group.module.mjs +1 -1
- package/esm2022/components/button-group/index.mjs +1 -1
- package/esm2022/components/card-wrapper/card-wrapper.component.mjs +3 -3
- package/esm2022/components/card-wrapper/index.mjs +1 -1
- package/esm2022/components/checkbox/checkbox.component.mjs +1 -1
- package/esm2022/components/checkbox/checkbox.module.mjs +1 -1
- package/esm2022/components/checkbox/index.mjs +1 -1
- package/esm2022/components/content-header/content-header.component.mjs +3 -3
- package/esm2022/components/content-header/index.mjs +1 -1
- package/esm2022/components/content-wrapper/content-wrapper.component.mjs +3 -3
- package/esm2022/components/content-wrapper/index.mjs +1 -1
- package/esm2022/components/context-menu/context-menu.component.mjs +3 -3
- package/esm2022/components/context-menu/context-menu.module.mjs +1 -1
- package/esm2022/components/context-menu/index.mjs +1 -1
- package/esm2022/components/date-range-calendar/date-range-calendar.component.mjs +3 -3
- package/esm2022/components/date-range-calendar/date-range-calendar.interfaces.mjs +1 -1
- package/esm2022/components/date-range-calendar/date-range-calendar.module.mjs +1 -1
- package/esm2022/components/date-range-calendar/index.mjs +1 -1
- package/esm2022/components/dialog/dialog-actions/dialog-actions.component.mjs +3 -3
- package/esm2022/components/dialog/dialog-header/dialog-header.component.mjs +3 -3
- package/esm2022/components/dialog/dialog.component.mjs +3 -3
- package/esm2022/components/dialog/dialog.interfaces.mjs +1 -1
- package/esm2022/components/dialog/dialog.module.mjs +1 -1
- package/esm2022/components/dialog/dialog.service.mjs +1 -1
- package/esm2022/components/dialog/dialog.tokens.mjs +1 -1
- package/esm2022/components/dialog/dialogs.component.mjs +3 -3
- package/esm2022/components/dialog/index.mjs +1 -1
- package/esm2022/components/dropdown/dropdown.interfaces.mjs +1 -1
- package/esm2022/components/dropdown/index.mjs +1 -1
- package/esm2022/components/empty-state/empty-state.component.mjs +3 -3
- package/esm2022/components/empty-state/index.mjs +1 -1
- package/esm2022/components/file-icon/file-icon.component.mjs +3 -3
- package/esm2022/components/file-icon/file-icon.options.mjs +1 -1
- package/esm2022/components/file-icon/index.mjs +1 -1
- package/esm2022/components/filter-bar/components/add-filter-button/add-filter-button.component.mjs +3 -3
- package/esm2022/components/filter-bar/components/date-filter/date-filter.component.mjs +3 -3
- package/esm2022/components/filter-bar/components/filter-remove-button/filter-remove-button.component.mjs +3 -3
- package/esm2022/components/filter-bar/components/index.mjs +1 -1
- package/esm2022/components/filter-bar/components/multiselect-filter/multiselect-filter.component.mjs +3 -3
- package/esm2022/components/filter-bar/components/range-filter/range-filter.component.mjs +3 -3
- package/esm2022/components/filter-bar/components/select-filter/select-filter.component.mjs +3 -3
- package/esm2022/components/filter-bar/components/string-filter/string-filter.component.mjs +3 -3
- package/esm2022/components/filter-bar/filter-bar.component.mjs +3 -3
- package/esm2022/components/filter-bar/filter-bar.interfaces.mjs +1 -1
- package/esm2022/components/filter-bar/filter-bar.module.mjs +1 -1
- package/esm2022/components/filter-bar/filter-bar.utils.mjs +1 -1
- package/esm2022/components/filter-bar/index.mjs +1 -1
- package/esm2022/components/form-field/form-field.component.mjs +3 -3
- package/esm2022/components/form-field/form-field.module.mjs +1 -1
- package/esm2022/components/form-field/index.mjs +1 -1
- package/esm2022/components/ghost-input/ghost-input.component.mjs +1 -1
- package/esm2022/components/ghost-input/index.mjs +1 -1
- package/esm2022/components/hint/hint.component.mjs +3 -3
- package/esm2022/components/hint/hint.module.mjs +1 -1
- package/esm2022/components/hint/index.mjs +1 -1
- package/esm2022/components/icon-button/icon-button.component.mjs +3 -3
- package/esm2022/components/icon-button/icon-button.module.mjs +1 -1
- package/esm2022/components/icon-button/index.mjs +1 -1
- package/esm2022/components/index.mjs +1 -1
- package/esm2022/components/input-number/index.mjs +1 -1
- package/esm2022/components/input-number/input-number.component.mjs +3 -3
- package/esm2022/components/input-number/input-number.module.mjs +1 -1
- package/esm2022/components/input-password/index.mjs +1 -1
- package/esm2022/components/input-password/input-password.component.mjs +3 -3
- package/esm2022/components/input-password/input-password.module.mjs +1 -1
- package/esm2022/components/input-text/index.mjs +1 -1
- package/esm2022/components/input-text/input-text.component.mjs +3 -3
- package/esm2022/components/input-text/input-text.module.mjs +1 -1
- package/esm2022/components/input-time/index.mjs +1 -1
- package/esm2022/components/input-time/input-time.component.mjs +3 -3
- package/esm2022/components/input-time/input-time.module.mjs +1 -1
- package/esm2022/components/input-time/input-time.options.mjs +1 -1
- package/esm2022/components/label/index.mjs +1 -1
- package/esm2022/components/label/label.component.mjs +3 -3
- package/esm2022/components/label/label.module.mjs +1 -1
- package/esm2022/components/layout/index.mjs +1 -1
- package/esm2022/components/layout/layout.component.mjs +3 -3
- package/esm2022/components/letter-box/index.mjs +1 -1
- package/esm2022/components/letter-box/letter-box.component.mjs +3 -3
- package/esm2022/components/letter-box/letter-box.interfaces.mjs +1 -1
- package/esm2022/components/notification/index.mjs +1 -1
- package/esm2022/components/notification/notification.component.mjs +3 -3
- package/esm2022/components/notification/notification.module.mjs +1 -1
- package/esm2022/components/notification/notification.options.mjs +1 -1
- package/esm2022/components/options-button/index.mjs +1 -1
- package/esm2022/components/options-button/options-button.component.mjs +3 -3
- package/esm2022/components/radio/index.mjs +1 -1
- package/esm2022/components/radio/radio.component.mjs +1 -1
- package/esm2022/components/radio/radio.module.mjs +1 -1
- package/esm2022/components/render-dynamic-components/index.mjs +1 -1
- package/esm2022/components/render-dynamic-components/render-dynamic-components.component.mjs +3 -3
- package/esm2022/components/render-dynamic-components/render-dynamic-components.options.mjs +1 -1
- package/esm2022/components/render-dynamic-components/render-dynamic-components.service.mjs +1 -1
- package/esm2022/components/root/index.mjs +1 -1
- package/esm2022/components/root/root.component.mjs +3 -3
- package/esm2022/components/root/root.module.mjs +1 -1
- package/esm2022/components/root/root.options.mjs +1 -1
- package/esm2022/components/select/index.mjs +1 -1
- package/esm2022/components/select/select.component.mjs +3 -3
- package/esm2022/components/select/select.module.mjs +1 -1
- package/esm2022/components/sidebar/index.mjs +1 -1
- package/esm2022/components/sidebar/sidebar-container/index.mjs +1 -1
- package/esm2022/components/sidebar/sidebar-container/sidebar-container.component.mjs +3 -3
- package/esm2022/components/sidebar/sidebar-header/index.mjs +1 -1
- package/esm2022/components/sidebar/sidebar-header/sidebar-header.component.mjs +3 -3
- package/esm2022/components/sidebar/sidebar-navigation/index.mjs +1 -1
- package/esm2022/components/sidebar/sidebar-navigation/sidebar-navigation.component.mjs +3 -3
- package/esm2022/components/sidebar/sidebar-navigation-container/index.mjs +1 -1
- package/esm2022/components/sidebar/sidebar-navigation-container/sidebar-navigation-container.component.mjs +3 -3
- package/esm2022/components/sidebar/sidebar-navigation-item/index.mjs +1 -1
- package/esm2022/components/sidebar/sidebar-navigation-item/sidebar-navigation-item.component.mjs +3 -3
- package/esm2022/components/sidebar/sidebar.options.mjs +1 -1
- package/esm2022/components/sidebar/sidebar.service.mjs +1 -1
- package/esm2022/components/svg/index.mjs +1 -1
- package/esm2022/components/svg/svg.component.mjs +3 -3
- package/esm2022/components/svg/svg.module.mjs +1 -1
- package/esm2022/components/tab/index.mjs +1 -1
- package/esm2022/components/tab/tab.component.mjs +1 -1
- package/esm2022/components/tabs/components/abstract-tabs/abstract-tabs.component.mjs +3 -3
- package/esm2022/components/tabs/components/abstract-tabs/index.mjs +1 -1
- package/esm2022/components/tabs/components/index.mjs +1 -1
- package/esm2022/components/tabs/index.mjs +1 -1
- package/esm2022/components/tabs/services/index.mjs +1 -1
- package/esm2022/components/tabs/services/tabs.service.mjs +1 -1
- package/esm2022/components/tabs/tabs.component.mjs +3 -3
- package/esm2022/components/tabs/tabs.options.mjs +1 -1
- package/esm2022/components/tabs/tabs.provider.mjs +1 -1
- package/esm2022/components/textarea/index.mjs +1 -1
- package/esm2022/components/textarea/textarea.component.mjs +1 -1
- package/esm2022/components/textarea/textarea.module.mjs +1 -1
- package/esm2022/components/toggle/index.mjs +1 -1
- package/esm2022/components/toggle/toggle.component.mjs +1 -1
- package/esm2022/components/toggle/toggle.module.mjs +1 -1
- package/esm2022/directives/index.mjs +1 -1
- package/esm2022/directives/skeleton/constants/fade.const.mjs +1 -1
- package/esm2022/directives/skeleton/constants/index.mjs +1 -1
- package/esm2022/directives/skeleton/constants/max-placeholder-length-limiter.const.mjs +1 -1
- package/esm2022/directives/skeleton/constants/min-placeholder-length-limiter.const.mjs +1 -1
- package/esm2022/directives/skeleton/index.mjs +1 -1
- package/esm2022/directives/skeleton/skeleton.directive.mjs +1 -1
- package/esm2022/directives/text-field-controller/index.mjs +1 -1
- package/esm2022/directives/text-field-controller/text-field-controller.module.mjs +1 -1
- package/esm2022/directives/text-field-controller/text-field-controller.provider.mjs +1 -1
- package/esm2022/directives/text-field-controller/text-field-icon-left.directive.mjs +1 -1
- package/esm2022/directives/text-field-controller/text-field-id.directive.mjs +1 -1
- package/esm2022/directives/text-field-controller/text-field-is-error.directive.mjs +1 -1
- package/esm2022/directives/text-field-controller/text-field-placeholder.directive.mjs +1 -1
- package/esm2022/directives/text-field-controller/text-field-size.directive.mjs +1 -1
- package/esm2022/directives/text-field-controller/text-field.controller.mjs +1 -1
- package/esm2022/directives/tooltip/index.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip-describe.directive.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip-driver.directive.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip-host.directive.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip-hover.directive.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip-manual.directive.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip-options.directive.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip-overflow.directive.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip-pointer.directive.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip-position.directive.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip-unstyled.component.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip.component.mjs +13 -13
- package/esm2022/directives/tooltip/tooltip.directive.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip.providers.mjs +1 -1
- package/esm2022/directives/tooltip/tooltip.service.mjs +1 -1
- package/esm2022/directives/tooltip/tooltips.component.mjs +3 -3
- package/esm2022/editor/components/editor-tool-modal/editor-tool-modal.component.mjs +3 -3
- package/esm2022/editor/components/editor-tool-modal/editor-tool-modal.options.mjs +1 -1
- package/esm2022/editor/components/marker-modal/marker-modal.component.mjs +3 -3
- package/esm2022/editor/components/marker-select/component/select-item/select-option.component.mjs +3 -3
- package/esm2022/editor/components/marker-select/marker-select.component.mjs +3 -3
- package/esm2022/editor/config/custom-elements.mjs +1 -1
- package/esm2022/editor/editor.component.mjs +25 -9
- package/esm2022/editor/interfaces/angular-element.mjs +1 -1
- package/esm2022/editor/interfaces/chunk-descriptor.mjs +1 -1
- package/esm2022/editor/interfaces/custom-element.mjs +1 -1
- package/esm2022/editor/interfaces/editor-service.mjs +1 -1
- package/esm2022/editor/providers/index.mjs +1 -1
- package/esm2022/editor/services/editor.service.mjs +3 -3
- package/esm2022/editor/tools/combined-text-block.tool.mjs +2 -2
- package/esm2022/editor/tools/role-marker.tool.mjs +3 -3
- package/esm2022/editor/tools/tool-marker.tool.mjs +1 -1
- package/esm2022/editor/utils/copy-text-to-clipboard.mjs +1 -1
- package/esm2022/editor/utils/create-tools-data.mjs +1 -1
- package/esm2022/editor/utils/merge-small-chunks.mjs +1 -1
- package/esm2022/editor/utils/open-file-in-browser.mjs +1 -1
- package/esm2022/editor/utils/preset-config-token.mjs +1 -1
- package/esm2022/editor/utils/set-loading.mjs +1 -1
- package/esm2022/editor/utils/url.validator.mjs +1 -1
- package/esm2022/editor/widgets/editor-block/editor-block.component.mjs +3 -3
- package/esm2022/editor/widgets/editor-modal/editor-modal.component.mjs +3 -3
- package/esm2022/editor/widgets/editor-modal/index.mjs +1 -1
- package/esm2022/editor/widgets/editor-readonly/editor-readonly.options.mjs +1 -1
- package/esm2022/editor/widgets/editor-readonly/editor-resize-observer.directive.mjs +1 -1
- package/esm2022/editor/widgets/index.mjs +1 -1
- package/esm2022/i18n/index.mjs +1 -1
- package/esm2022/index.mjs +1 -1
- package/esm2022/interceptors/auth.interceptor.mjs +1 -1
- package/esm2022/interceptors/error-handler.interceptor.mjs +1 -1
- package/esm2022/interceptors/sse-stream-reader.interceptor.mjs +1 -1
- package/esm2022/interceptors/x-ndjson.interceptor.mjs +1 -1
- package/esm2022/interfaces/context-menu-item.mjs +1 -1
- package/esm2022/interfaces/error-notification-service.mjs +1 -1
- package/esm2022/interfaces/error-stategy.mjs +1 -1
- package/esm2022/interfaces/image.mjs +1 -1
- package/esm2022/interfaces/index.mjs +1 -1
- package/esm2022/interfaces/option.mjs +1 -1
- package/esm2022/operators/handle-error.mjs +1 -1
- package/esm2022/operators/index.mjs +1 -1
- package/esm2022/pipes/index.mjs +1 -1
- package/esm2022/pipes/time.pipe.mjs +1 -1
- package/esm2022/providers/auth.options.mjs +1 -1
- package/esm2022/providers/auth.provider.mjs +1 -1
- package/esm2022/providers/error-handler.options.mjs +1 -1
- package/esm2022/providers/error-handler.provider.mjs +1 -1
- package/esm2022/providers/index.mjs +1 -1
- package/esm2022/services/auth.service.mjs +1 -1
- package/esm2022/services/browser-auth.service.mjs +1 -1
- package/esm2022/services/error-resolver-factory.service.mjs +1 -1
- package/esm2022/services/global-handler-error.service.mjs +1 -1
- package/esm2022/services/hybrid-storage.service.mjs +1 -1
- package/esm2022/services/index.mjs +1 -1
- package/esm2022/services/loader.options.mjs +1 -1
- package/esm2022/services/mobile-auth.service.mjs +1 -1
- package/esm2022/services/position.service.mjs +1 -1
- package/esm2022/services/theme.options.mjs +1 -1
- package/esm2022/services/theme.service.mjs +1 -1
- package/esm2022/services/token.options.mjs +1 -1
- package/esm2022/services/token.service.mjs +1 -1
- package/esm2022/services/visual-viewport.service.mjs +1 -1
- package/esm2022/tokens/animations-speed.mjs +1 -1
- package/esm2022/tokens/error-notification-service.mjs +1 -1
- package/esm2022/tokens/error-translation-prefix.mjs +1 -1
- package/esm2022/tokens/index.mjs +1 -1
- package/esm2022/tokens/reduced-motion.mjs +1 -1
- package/esm2022/tokens/should-handle-error.mjs +1 -1
- package/esm2022/tokens/viewport.mjs +1 -1
- package/esm2022/types/appearance.mjs +1 -1
- package/esm2022/types/button-theme.mjs +1 -1
- package/esm2022/types/hint-type.mjs +1 -1
- package/esm2022/types/index.mjs +1 -1
- package/esm2022/types/point.mjs +1 -1
- package/esm2022/types/portal-item.mjs +1 -1
- package/esm2022/types/position.mjs +1 -1
- package/esm2022/types/resizing.mjs +1 -1
- package/esm2022/types/shape.mjs +1 -1
- package/esm2022/types/should-handle-error.type.mjs +1 -1
- package/esm2022/types/size.mjs +1 -1
- package/esm2022/types/status.mjs +1 -1
- package/esm2022/utils/check-fixed-position.mjs +1 -1
- package/esm2022/utils/default-validators/create-default-validators.mjs +1 -1
- package/esm2022/utils/default-validators/create-default-validators.options.mjs +1 -1
- package/esm2022/utils/default-validators/extra-spaces.options.mjs +1 -1
- package/esm2022/utils/default-validators/extra-spaces.validators.mjs +1 -1
- package/esm2022/utils/default-validators/index.mjs +1 -1
- package/esm2022/utils/format/index.mjs +1 -1
- package/esm2022/utils/format/remove-spaces.mjs +1 -1
- package/esm2022/utils/format/replace.mjs +1 -1
- package/esm2022/utils/index.mjs +1 -1
- package/esm2022/utils/miscellaneous/index.mjs +1 -1
- package/esm2022/utils/miscellaneous/is-obscured.mjs +1 -1
- package/esm2022/utils/miscellaneous/override-options.mjs +1 -1
- package/esm2022/utils/miscellaneous/to-animation-options.mjs +1 -1
- package/esm2022/widgets/assets/constants/index.mjs +1 -1
- package/esm2022/widgets/assets/constants/translations.mjs +1 -1
- package/esm2022/widgets/assets/index.mjs +1 -1
- package/esm2022/widgets/index.mjs +1 -1
- package/esm2022/widgets/model/index.mjs +1 -1
- package/esm2022/widgets/model/loader.options.mjs +1 -1
- package/esm2022/widgets/model/resource-state-service.interface.mjs +1 -1
- package/esm2022/widgets/model/resource-state-service.token.mjs +1 -1
- package/esm2022/widgets/model/resources-block.options.mjs +1 -1
- package/esm2022/widgets/model/subject-modal-service.interface.mjs +1 -1
- package/esm2022/widgets/model/subject-modal-service.token.mjs +1 -1
- package/esm2022/widgets/model/used-elements-service.interface.mjs +1 -1
- package/esm2022/widgets/model/used-elements-service.token.mjs +1 -1
- package/esm2022/widgets/model/utility-service.interface.mjs +1 -1
- package/esm2022/widgets/model/utility-service.token.mjs +1 -1
- package/esm2022/widgets/service/index.mjs +1 -1
- package/esm2022/widgets/service/resource-state-base.service.mjs +1 -1
- package/esm2022/widgets/service/subject-modal-base.service.mjs +1 -1
- package/esm2022/widgets/service/used-elements-base.service.mjs +1 -1
- package/esm2022/widgets/service/utility-base.service.mjs +1 -1
- package/esm2022/widgets/ui/assignee-role-item/assignee-role-item.component.mjs +3 -3
- package/esm2022/widgets/ui/assignee-role-item/index.mjs +1 -1
- package/esm2022/widgets/ui/assignee-roles-tabs/assignee-roles-tabs.component.mjs +3 -3
- package/esm2022/widgets/ui/assignee-roles-tabs/index.mjs +1 -1
- package/esm2022/widgets/ui/button-change-theme/button-change-theme.component.mjs +3 -3
- package/esm2022/widgets/ui/button-change-theme/index.mjs +1 -1
- package/esm2022/widgets/ui/categories/categories.component.mjs +3 -3
- package/esm2022/widgets/ui/categories/components/categories-list/categories-list.component.mjs +3 -3
- package/esm2022/widgets/ui/categories/components/categories-list/index.mjs +1 -1
- package/esm2022/widgets/ui/categories/components/category-form/category-form.component.mjs +3 -3
- package/esm2022/widgets/ui/categories/components/category-form/index.mjs +1 -1
- package/esm2022/widgets/ui/categories/components/category-item/category-item.component.mjs +3 -3
- package/esm2022/widgets/ui/categories/components/category-item/index.mjs +1 -1
- package/esm2022/widgets/ui/categories/components/create-category-item/create-category-item.component.mjs +3 -3
- package/esm2022/widgets/ui/categories/components/create-category-item/index.mjs +1 -1
- package/esm2022/widgets/ui/categories/components/index.mjs +1 -1
- package/esm2022/widgets/ui/categories/index.mjs +1 -1
- package/esm2022/widgets/ui/categories/services/index.mjs +1 -1
- package/esm2022/widgets/ui/categories/services/selected-category.service.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/checklist-block.component.mjs +3 -3
- package/esm2022/widgets/ui/checklist-block/checklist-block.options.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list/checklist-block-list.component.mjs +3 -3
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list/index.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-action-card/checklist-block-list-item-action-card.component.mjs +3 -3
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-action-card/index.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-action-with-verification/checklist-block-list-item-action-with-verification.component.mjs +3 -3
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-action-with-verification/index.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-action-without-verification/checklist-block-list-item-action-without-verification.component.mjs +3 -3
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-action-without-verification/index.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-container/checklist-block-list-item-container.component.mjs +3 -3
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-container/checklist-block-list-item-container.options.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-container/index.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-evaluation/checklist-block-list-item-evaluation.component.mjs +3 -3
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-evaluation/checklist-block-list-item-evaluation.options.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-evaluation/index.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-evaluation-criteria/checklist-block-list-item-evaluation-criteria.component.mjs +3 -3
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-evaluation-criteria/checklist-block-list-item-evaluation-criteria.options.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-list-item-evaluation-criteria/index.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-title-control/checklist-block-title-control.component.mjs +3 -3
- package/esm2022/widgets/ui/checklist-block/components/checklist-block-title-control/index.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/components/index.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/index.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/services/checklist-block.service.mjs +1 -1
- package/esm2022/widgets/ui/checklist-block/services/index.mjs +1 -1
- package/esm2022/widgets/ui/consumable-form/components/consumable-form-item/consumable-form-item.component.mjs +3 -3
- package/esm2022/widgets/ui/consumable-form/components/consumable-form-item/default-control-delay.mjs +1 -1
- package/esm2022/widgets/ui/consumable-form/components/consumable-form-item/index.mjs +1 -1
- package/esm2022/widgets/ui/consumable-form/components/consumable-form-item-readonly/consumable-form-item-readonly.component.mjs +3 -3
- package/esm2022/widgets/ui/consumable-form/components/consumable-form-item-readonly/index.mjs +1 -1
- package/esm2022/widgets/ui/consumable-form/components/index.mjs +1 -1
- package/esm2022/widgets/ui/consumable-form/consumable-form.component.mjs +3 -3
- package/esm2022/widgets/ui/consumable-form/consumable-form.options.mjs +1 -1
- package/esm2022/widgets/ui/consumable-form/index.mjs +1 -1
- package/esm2022/widgets/ui/criterion-info/criterion-info.component.mjs +3 -3
- package/esm2022/widgets/ui/criterion-info/index.mjs +1 -1
- package/esm2022/widgets/ui/criterion-info-form/criterion-info-form.component.mjs +3 -3
- package/esm2022/widgets/ui/criterion-info-form/criterion-info-form.options.mjs +1 -1
- package/esm2022/widgets/ui/criterion-info-form/index.mjs +1 -1
- package/esm2022/widgets/ui/criterion-readonly-info/criterion-readonly-info.component.mjs +3 -3
- package/esm2022/widgets/ui/criterion-readonly-info/index.mjs +1 -1
- package/esm2022/widgets/ui/delete-modal/delete-modal.component.mjs +3 -3
- package/esm2022/widgets/ui/delete-modal/delete-modal.options.mjs +1 -1
- package/esm2022/widgets/ui/delete-modal/index.mjs +1 -1
- package/esm2022/widgets/ui/framer-preview/framer-preview.component.mjs +3 -3
- package/esm2022/widgets/ui/framer-preview/framer-preview.options.mjs +1 -1
- package/esm2022/widgets/ui/framer-preview/index.mjs +1 -1
- package/esm2022/widgets/ui/general-control-error-hint/general-control-error-hint.component.mjs +3 -3
- package/esm2022/widgets/ui/general-control-error-hint/index.mjs +1 -1
- package/esm2022/widgets/ui/index.mjs +1 -1
- package/esm2022/widgets/ui/inserted/index.mjs +1 -1
- package/esm2022/widgets/ui/inserted/inserted.component.mjs +3 -3
- package/esm2022/widgets/ui/instruction-info/index.mjs +1 -1
- package/esm2022/widgets/ui/instruction-info/instruction-info.component.mjs +3 -3
- package/esm2022/widgets/ui/instruction-info-form/index.mjs +1 -1
- package/esm2022/widgets/ui/instruction-info-form/instruction-info-form.component.mjs +3 -3
- package/esm2022/widgets/ui/instruction-info-form/instruction-info-form.options.mjs +1 -1
- package/esm2022/widgets/ui/instruction-readonly-info/index.mjs +1 -1
- package/esm2022/widgets/ui/instruction-readonly-info/instruction-readonly-info.component.mjs +3 -3
- package/esm2022/widgets/ui/loader/components/circle-loader/circle-loader.component.mjs +3 -3
- package/esm2022/widgets/ui/loader/components/circle-loader/index.mjs +1 -1
- package/esm2022/widgets/ui/loader/components/index.mjs +1 -1
- package/esm2022/widgets/ui/loader/components/linear-loader/index.mjs +1 -1
- package/esm2022/widgets/ui/loader/components/linear-loader/linear-loader.component.mjs +3 -3
- package/esm2022/widgets/ui/loader/components/pulse-loader/index.mjs +1 -1
- package/esm2022/widgets/ui/loader/components/pulse-loader/pulse-loader.component.mjs +3 -3
- package/esm2022/widgets/ui/loader/components/stated-loader/index.mjs +1 -1
- package/esm2022/widgets/ui/loader/components/stated-loader/stated-loader.component.mjs +3 -3
- package/esm2022/widgets/ui/loader/index.mjs +1 -1
- package/esm2022/widgets/ui/loader/loader.component.mjs +3 -3
- package/esm2022/widgets/ui/modal-criteria-tab/index.mjs +1 -1
- package/esm2022/widgets/ui/modal-criteria-tab/modal-criteria-tab.component.mjs +3 -3
- package/esm2022/widgets/ui/modal-divided-section/index.mjs +1 -1
- package/esm2022/widgets/ui/modal-divided-section/modal-divided-section.component.mjs +3 -3
- package/esm2022/widgets/ui/modal-divided-section/modal-divided-section.interfaces.mjs +1 -1
- package/esm2022/widgets/ui/modal-header/index.mjs +1 -1
- package/esm2022/widgets/ui/modal-header/modal-header.component.mjs +3 -3
- package/esm2022/widgets/ui/modal-header-inserted-buttons/index.mjs +1 -1
- package/esm2022/widgets/ui/modal-header-inserted-buttons/modal-header-inserted-buttons.component.mjs +3 -3
- package/esm2022/widgets/ui/modal-header-tabs/index.mjs +1 -1
- package/esm2022/widgets/ui/modal-header-tabs/modal-header-tabs.component.mjs +3 -3
- package/esm2022/widgets/ui/modal-info-tab/index.mjs +1 -1
- package/esm2022/widgets/ui/modal-info-tab/modal-info-tab.component.mjs +3 -3
- package/esm2022/widgets/ui/modal-info-tab/modal-info-tab.options.mjs +1 -1
- package/esm2022/widgets/ui/modal-instructions-tab/index.mjs +1 -1
- package/esm2022/widgets/ui/modal-instructions-tab/modal-instructions-tab.component.mjs +3 -3
- package/esm2022/widgets/ui/modal-operation-part/index.mjs +1 -1
- package/esm2022/widgets/ui/modal-operation-part/modal-operation-part.component.mjs +3 -3
- package/esm2022/widgets/ui/modal-resources-tab/index.mjs +1 -1
- package/esm2022/widgets/ui/modal-resources-tab/modal-resources-tab.component.mjs +3 -3
- package/esm2022/widgets/ui/render-dynamic-modal/index.mjs +1 -1
- package/esm2022/widgets/ui/render-dynamic-modal/render-dynamic-modal.component.mjs +3 -3
- package/esm2022/widgets/ui/render-dynamic-modal/render-dynamic-modal.option.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/index.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/resources-block-consumables/index.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/resources-block-consumables/resources-block-consumables.component.mjs +3 -3
- package/esm2022/widgets/ui/resources-block/components/resources-block-consumables/resources-block-consumables.options.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/resources-block-content/index.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/resources-block-content/resources-block-content.component.mjs +3 -3
- package/esm2022/widgets/ui/resources-block/components/resources-block-part/index.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/resources-block-part/resources-block-part.component.mjs +3 -3
- package/esm2022/widgets/ui/resources-block/components/resources-block-part/resources-block-part.options.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/resources-block-tabs/index.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/resources-block-tabs/resources-block-tabs.component.mjs +3 -3
- package/esm2022/widgets/ui/resources-block/components/resources-block-tabs/resources-block-tabs.options.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/resources-block-toolbox/index.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/resources-block-toolbox/resources-block-toolbox.component.mjs +3 -3
- package/esm2022/widgets/ui/resources-block/components/resources-block-toolbox/resources-block-toolbox.options.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/resources-options/index.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/components/resources-options/resources-options.component.mjs +3 -3
- package/esm2022/widgets/ui/resources-block/index.mjs +1 -1
- package/esm2022/widgets/ui/resources-block/resources-block.component.mjs +3 -3
- package/esm2022/widgets/ui/resources-block-tabs/index.mjs +1 -1
- package/esm2022/widgets/ui/resources-block-tabs/resources-block-tabs.component.mjs +3 -3
- package/esm2022/widgets/ui/resources-block-tabs/resources-block-tabs.options.mjs +1 -1
- package/esm2022/widgets/ui/select-modal/components/index.mjs +1 -1
- package/esm2022/widgets/ui/select-modal/components/select-modal-folder/index.mjs +1 -1
- package/esm2022/widgets/ui/select-modal/components/select-modal-folder/select-modal-folder.component.mjs +3 -3
- package/esm2022/widgets/ui/select-modal/components/select-modal-search/index.mjs +1 -1
- package/esm2022/widgets/ui/select-modal/components/select-modal-search/select-modal-search.component.mjs +3 -3
- package/esm2022/widgets/ui/select-modal/index.mjs +1 -1
- package/esm2022/widgets/ui/select-modal/select-modal.component.mjs +3 -3
- package/esm2022/widgets/ui/select-modal/select-modal.interfaces.mjs +1 -1
- package/esm2022/widgets/ui/select-modal/select-modal.service.mjs +1 -1
- package/esm2022/widgets/ui/storage-list/components/index.mjs +1 -1
- package/esm2022/widgets/ui/storage-list/components/storage-list-item/index.mjs +1 -1
- package/esm2022/widgets/ui/storage-list/components/storage-list-item/storage-list-item.component.mjs +3 -3
- package/esm2022/widgets/ui/storage-list/index.mjs +1 -1
- package/esm2022/widgets/ui/storage-list/storage-list.component.mjs +3 -3
- package/esm2022/widgets/ui/storage-list/storage-list.options.mjs +1 -1
- package/esm2022/widgets/ui/toolbox-form/components/index.mjs +1 -1
- package/esm2022/widgets/ui/toolbox-form/components/tool-form-readonly/index.mjs +1 -1
- package/esm2022/widgets/ui/toolbox-form/components/tool-form-readonly/tool-form-readonly.component.mjs +3 -3
- package/esm2022/widgets/ui/toolbox-form/index.mjs +1 -1
- package/esm2022/widgets/ui/toolbox-form/tool-form.component.mjs +3 -3
- package/esm2022/widgets/ui/toolbox-form/tool-form.options.mjs +1 -1
- package/esm2022/widgets/ui/user-action-context-menu/activity-item/activity-item.component.mjs +3 -3
- package/esm2022/widgets/ui/user-action-context-menu/activity-item/index.mjs +1 -1
- package/esm2022/widgets/ui/user-action-context-menu/company-item/company-item.component.mjs +3 -3
- package/esm2022/widgets/ui/user-action-context-menu/company-item/index.mjs +1 -1
- package/esm2022/widgets/ui/user-action-context-menu/index.mjs +1 -1
- package/esm2022/widgets/ui/user-action-context-menu/services/activity-base.service.mjs +1 -1
- package/esm2022/widgets/ui/user-action-context-menu/services/activity.service.mjs +1 -1
- package/esm2022/widgets/ui/user-action-context-menu/services/index.mjs +1 -1
- package/esm2022/widgets/ui/user-action-context-menu/user-action-context-menu.component.mjs +3 -3
- package/esm2022/widgets/ui/user-action-context-menu/user-action-context.option.mjs +1 -1
- package/esm2022/widgets/ui/utility-info-readonly/index.mjs +1 -1
- package/esm2022/widgets/ui/utility-info-readonly/utility-info-readonly.component.mjs +3 -3
- package/esm2022/widgets/ui/utility-info-readonly/utility-info-readonly.options.mjs +1 -1
- package/esm2022/widgets/ui/utility-modal/components/criterion-modal-create/criterion-modal-create.component.mjs +3 -3
- package/esm2022/widgets/ui/utility-modal/components/criterion-modal-create/index.mjs +1 -1
- package/esm2022/widgets/ui/utility-modal/components/index.mjs +1 -1
- package/esm2022/widgets/ui/utility-modal/components/instruction-modal-create/index.mjs +1 -1
- package/esm2022/widgets/ui/utility-modal/components/instruction-modal-create/instruction-modal-create.component.mjs +3 -3
- package/esm2022/widgets/ui/utility-modal/components/readonly-criterion-modal/index.mjs +1 -1
- package/esm2022/widgets/ui/utility-modal/components/readonly-criterion-modal/readonly-criterion-modal.component.mjs +3 -3
- package/esm2022/widgets/ui/utility-modal/components/readonly-instruction-modal/index.mjs +1 -1
- package/esm2022/widgets/ui/utility-modal/components/readonly-instruction-modal/readonly-instruction-modal.component.mjs +3 -3
- package/esm2022/widgets/ui/utility-modal/components/readonly-utility-modal/index.mjs +1 -1
- package/esm2022/widgets/ui/utility-modal/components/readonly-utility-modal/readonly-utility-modal.component.mjs +3 -3
- package/esm2022/widgets/ui/utility-modal/components/utility-modal-create/index.mjs +1 -1
- package/esm2022/widgets/ui/utility-modal/components/utility-modal-create/utility-modal-create.component.mjs +3 -3
- package/esm2022/widgets/ui/utility-modal/index.mjs +1 -1
- package/esm2022/widgets/ui/utility-modal/utility-modal.component.mjs +3 -3
- package/esm2022/widgets/ui/utility-modal/utility-modal.options.mjs +1 -1
- package/esm2022/widgets/ui/utility-readonly-thumbnail/index.mjs +1 -1
- package/esm2022/widgets/ui/utility-readonly-thumbnail/utility-readonly-thumbnail.component.mjs +3 -3
- package/esm2022/widgets/ui/utility-thumbnail/index.mjs +1 -1
- package/esm2022/widgets/ui/utility-thumbnail/utility-thumbnail.component.mjs +3 -3
- package/fesm2022/cuby-ui-core.mjs +306 -290
- package/fesm2022/cuby-ui-core.mjs.map +1 -1
- package/fonts/Inter-Bold.svg +25443 -25443
- package/fonts/Inter-Medium.svg +25400 -25400
- package/fonts/Inter-Regular.svg +24341 -24341
- package/fonts/Inter-SemiBold.svg +25459 -25459
- package/fonts/Nunito-ExtraBoldItalic.svg +9508 -9508
- package/package.json +4 -4
- package/providers/auth.options.d.ts +1 -1
- package/styles/direcive/flex-container.scss +3 -3
- package/styles/fonts.scss +69 -69
- package/styles/global.scss +10 -10
- package/styles/mixins/buttons.scss +13 -13
- package/styles/mixins/flex.scss +10 -10
- package/styles/mixins/headings.scss +115 -115
- package/styles/mixins/inputs.scss +101 -101
- package/styles/mixins/lists.scss +41 -41
- package/styles/mixins/paddings.scss +35 -35
- package/styles/mixins/shadows.scss +42 -42
- package/styles/mixins/texts.scss +224 -224
- package/styles/theme.scss +608 -608
- package/styles/variables/colors.scss +396 -396
- package/styles/variables/fonts.scss +2 -2
- package/widgets/ui/user-action-context-menu/activity-item/activity-item.component.d.ts +1 -1
|
@@ -3,7 +3,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
3
3
|
import { CuiIdService } from '@cuby-ui/cdk';
|
|
4
4
|
import EditorJS from '@editorjs/editorjs';
|
|
5
5
|
import { concatMap, delay, finalize, fromEvent, map, Subject, takeWhile, tap, throttleTime, timer, toArray } from 'rxjs';
|
|
6
|
-
import { CuiJTextApiService } from '@cuby-ui/api';
|
|
6
|
+
import { CUI_JTEXT_API_SERVICE, CuiJTextApiService } from '@cuby-ui/api';
|
|
7
7
|
import { getEditorConfig } from './config';
|
|
8
8
|
import { COMBINED_TEXT_BLOCK_NAME, COMBINED_TEXT_BLOCK_PART, DEFAULT_CONFIG } from './constants/editor.constants';
|
|
9
9
|
import { setEditorEvents } from './events/set-editor-events';
|
|
@@ -15,7 +15,7 @@ export class CuiEditorComponent {
|
|
|
15
15
|
this.destroy = inject(DestroyRef);
|
|
16
16
|
this.cuiIdService = inject(CuiIdService);
|
|
17
17
|
this.editorService = inject(CuiEditorService);
|
|
18
|
-
this.jTextService = inject(
|
|
18
|
+
this.jTextService = inject(CUI_JTEXT_API_SERVICE);
|
|
19
19
|
this.POOLING_DELAY = 100;
|
|
20
20
|
this.ELEMENT_SPACE_TO_BOTTOM = 150;
|
|
21
21
|
this.SCROLL_THROTTLE_TIME = 200;
|
|
@@ -362,11 +362,15 @@ export class CuiEditorComponent {
|
|
|
362
362
|
this.editor.caret.focus();
|
|
363
363
|
}
|
|
364
364
|
checkIsEmpty() {
|
|
365
|
-
const
|
|
365
|
+
const blocksCount = this.editor.blocks?.getBlocksCount() ?? 0;
|
|
366
|
+
if (!blocksCount) {
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
366
369
|
const REDACTOR_SELECTOR = '.codex-editor__redactor';
|
|
367
|
-
const
|
|
368
|
-
|
|
369
|
-
|
|
370
|
+
const redactorTextContent = this.editorElement
|
|
371
|
+
.querySelector(REDACTOR_SELECTOR)
|
|
372
|
+
?.textContent?.trim();
|
|
373
|
+
return !redactorTextContent;
|
|
370
374
|
}
|
|
371
375
|
resetData() {
|
|
372
376
|
this.scrollSubscription?.unsubscribe();
|
|
@@ -387,10 +391,22 @@ export class CuiEditorComponent {
|
|
|
387
391
|
this.abortController = new AbortController();
|
|
388
392
|
}
|
|
389
393
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
390
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: CuiEditorComponent, isStandalone: true, selector: "cui-editor", inputs: { editorApiId: { classPropertyName: "editorApiId", publicName: "editorApiId", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, requestSize: { classPropertyName: "requestSize", publicName: "requestSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editorEmpty: "editorEmpty" }, providers: [
|
|
394
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: CuiEditorComponent, isStandalone: true, selector: "cui-editor", inputs: { editorApiId: { classPropertyName: "editorApiId", publicName: "editorApiId", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, requestSize: { classPropertyName: "requestSize", publicName: "requestSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editorEmpty: "editorEmpty" }, providers: [
|
|
395
|
+
CuiEditorService,
|
|
396
|
+
{
|
|
397
|
+
provide: CUI_JTEXT_API_SERVICE,
|
|
398
|
+
useFactory: () => inject(CUI_JTEXT_API_SERVICE, { optional: true, skipSelf: true }) ?? new CuiJTextApiService()
|
|
399
|
+
}
|
|
400
|
+
], viewQueries: [{ propertyName: "editorRef", first: true, predicate: ["editor"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\r\n #editor\r\n [id]=\"editorId\"\r\n data-editor\r\n [class._readonly]=\"config().readOnly\"\r\n></div>\r\n", styles: [":host{--textColor: var(--cui-base-900);--menuBackground: var(--cui-base-0);--menuBorder: var(--cui-base-200);--menuItemHover: var(--cui-base-10);--menuItemBackground: var(cui-base-900);--menuIconBackground: var(--cui-base-50);--menuIconHover: var(--cui-base-10);font-weight:400;font-size:14px;line-height:20px;font-family:var(--cui-main-font)}:host ::ng-deep .ce-popover{--color-background: var(--menuBackground);--color-text-primary: var(--textColor);--color-border: var(--menuBorder);--color-border-icon: var(--menuBorder);--color-background-item: var(--menuItemBackground);--color-background-item-hover: var(--menuItemHover)}:host ::ng-deep .ce-popover__search{background:var(--menuIconBackground)}:host ::ng-deep .ce-popover .ce-popover-item__icon{background:var(--menuIconBackground)}:host ::ng-deep .ce-conversion-toolbar{background-color:var(--menuBackground);border-color:var(--menuBorder)}:host ::ng-deep .ce-conversion-toolbar__tools{padding:0 6px 6px}:host ::ng-deep .ce-conversion-tool{padding:3px;border-radius:6px}:host ::ng-deep .ce-conversion-tool__icon{border:1px solid var(--menuBorder);background-color:var(--menuIconBackground);box-shadow:none}:host ::ng-deep .ce-conversion-tool:hover{background-color:var(--menuItemHover)}:host ::ng-deep .ce-conversion-tool:hover .ce-conversion-tool__icon{border-color:var(--menuIconHover)}:host ::ng-deep .combined-text-block{padding:.4em 0;line-height:1.6em;outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part{outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child,:host ::ng-deep .combined-text-block .combined-text-block-part._selected{display:list-item}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child::marker,:host ::ng-deep .combined-text-block .combined-text-block-part._selected::marker{content:\"\"}:host ::ng-deep .image-tool__image{border:1px solid var(--cui-base-200);background-color:var(--cui-base-0)}:host ::ng-deep .image-tool__image-preloader{background-color:var(--cui-base-200)}:host ::ng-deep .image-tool__image-preloader:after{border:1px solid var(--cui-base-200);border-top:1px solid var(--cui-blue-600)}:host ::ng-deep .cdx-button{border-radius:8px;border:1px solid var(--cui-base-200);color:var(--textColor);background-color:var(--cui-base-10);box-shadow:none}:host ::ng-deep .ce-inline-toolbar{border-color:var(--cui-base-100);color:var(--textColor);background-color:var(--cui-base-0)}:host ::ng-deep .ce-inline-toolbar__dropdown:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-inline-tool:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{color:var(--cui-base-500)}:host ::ng-deep .ce-toolbar__plus:hover,:host ::ng-deep .ce-toolbar__settings-btn:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__actions{right:100%}:host ::ng-deep .ce-toolbar__content{max-width:none}@media (max-width: 650px){:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{border-color:var(--menuBorder);background-color:var(--menuBackground)}:host ::ng-deep .ce-toolbar__actions{inset:0 auto auto 0}}:host ::ng-deep .ce-block--selected .ce-block__content{background-color:var(--cui-base-200)}:host ::ng-deep .ce-block__content{max-width:100%}:host ::ng-deep .ce-block:only-of-type .combined-text-block[data-placeholder-active][data-empty=true]:before{content:attr(data-placeholder-active);position:absolute;color:var(--cui-base-400)}:host ::ng-deep [data-editor]{padding-right:4px;width:100%;height:100%;min-height:200px;overflow:hidden auto;scrollbar-gutter:stable}:host ::ng-deep [data-editor] .codex-editor{margin-left:60px}:host ::ng-deep [data-editor] .codex-editor--narrow .ce-popover{right:auto}:host ::ng-deep [data-editor] .codex-editor__redactor{margin-right:auto;padding-bottom:260px!important}@media (max-width: 650px){:host ::ng-deep [data-editor] .codex-editor{margin-left:0}}:host ::ng-deep [data-editor]._readonly{min-height:auto}:host ::ng-deep [data-editor]._readonly .codex-editor{margin:auto}:host ::ng-deep [data-editor]._readonly .codex-editor__redactor{padding-bottom:0!important}:host ::ng-deep [data-editor]._readonly .combined-text-block{padding:0}:host ::ng-deep [data-editor] [data-item-name=move-up],:host ::ng-deep [data-editor] [data-item-name=move-down],:host ::ng-deep [data-editor] [data-tool=paragraph]{display:none}:host ::ng-deep [data-editor] *::selection{background:var(--cui-base-200)}:host ::ng-deep [data-editor] a{color:var(--cui-light-blue-600)}:host ::ng-deep .marker{cursor:pointer;text-decoration:underline;color:var(--cui-light-blue-600);background-color:transparent}:host ::ng-deep .tool-marker,:host ::ng-deep .role-marker{margin:0 5px}:host ::ng-deep .tool-marker{color:#e97c00}:host ::ng-deep .role-marker{color:#8803f1}.form{height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
391
401
|
}
|
|
392
402
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiEditorComponent, decorators: [{
|
|
393
403
|
type: Component,
|
|
394
|
-
args: [{ selector: 'cui-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
404
|
+
args: [{ selector: 'cui-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
405
|
+
CuiEditorService,
|
|
406
|
+
{
|
|
407
|
+
provide: CUI_JTEXT_API_SERVICE,
|
|
408
|
+
useFactory: () => inject(CUI_JTEXT_API_SERVICE, { optional: true, skipSelf: true }) ?? new CuiJTextApiService()
|
|
409
|
+
}
|
|
410
|
+
], template: "<div\r\n #editor\r\n [id]=\"editorId\"\r\n data-editor\r\n [class._readonly]=\"config().readOnly\"\r\n></div>\r\n", styles: [":host{--textColor: var(--cui-base-900);--menuBackground: var(--cui-base-0);--menuBorder: var(--cui-base-200);--menuItemHover: var(--cui-base-10);--menuItemBackground: var(cui-base-900);--menuIconBackground: var(--cui-base-50);--menuIconHover: var(--cui-base-10);font-weight:400;font-size:14px;line-height:20px;font-family:var(--cui-main-font)}:host ::ng-deep .ce-popover{--color-background: var(--menuBackground);--color-text-primary: var(--textColor);--color-border: var(--menuBorder);--color-border-icon: var(--menuBorder);--color-background-item: var(--menuItemBackground);--color-background-item-hover: var(--menuItemHover)}:host ::ng-deep .ce-popover__search{background:var(--menuIconBackground)}:host ::ng-deep .ce-popover .ce-popover-item__icon{background:var(--menuIconBackground)}:host ::ng-deep .ce-conversion-toolbar{background-color:var(--menuBackground);border-color:var(--menuBorder)}:host ::ng-deep .ce-conversion-toolbar__tools{padding:0 6px 6px}:host ::ng-deep .ce-conversion-tool{padding:3px;border-radius:6px}:host ::ng-deep .ce-conversion-tool__icon{border:1px solid var(--menuBorder);background-color:var(--menuIconBackground);box-shadow:none}:host ::ng-deep .ce-conversion-tool:hover{background-color:var(--menuItemHover)}:host ::ng-deep .ce-conversion-tool:hover .ce-conversion-tool__icon{border-color:var(--menuIconHover)}:host ::ng-deep .combined-text-block{padding:.4em 0;line-height:1.6em;outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part{outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child,:host ::ng-deep .combined-text-block .combined-text-block-part._selected{display:list-item}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child::marker,:host ::ng-deep .combined-text-block .combined-text-block-part._selected::marker{content:\"\"}:host ::ng-deep .image-tool__image{border:1px solid var(--cui-base-200);background-color:var(--cui-base-0)}:host ::ng-deep .image-tool__image-preloader{background-color:var(--cui-base-200)}:host ::ng-deep .image-tool__image-preloader:after{border:1px solid var(--cui-base-200);border-top:1px solid var(--cui-blue-600)}:host ::ng-deep .cdx-button{border-radius:8px;border:1px solid var(--cui-base-200);color:var(--textColor);background-color:var(--cui-base-10);box-shadow:none}:host ::ng-deep .ce-inline-toolbar{border-color:var(--cui-base-100);color:var(--textColor);background-color:var(--cui-base-0)}:host ::ng-deep .ce-inline-toolbar__dropdown:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-inline-tool:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{color:var(--cui-base-500)}:host ::ng-deep .ce-toolbar__plus:hover,:host ::ng-deep .ce-toolbar__settings-btn:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__actions{right:100%}:host ::ng-deep .ce-toolbar__content{max-width:none}@media (max-width: 650px){:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{border-color:var(--menuBorder);background-color:var(--menuBackground)}:host ::ng-deep .ce-toolbar__actions{inset:0 auto auto 0}}:host ::ng-deep .ce-block--selected .ce-block__content{background-color:var(--cui-base-200)}:host ::ng-deep .ce-block__content{max-width:100%}:host ::ng-deep .ce-block:only-of-type .combined-text-block[data-placeholder-active][data-empty=true]:before{content:attr(data-placeholder-active);position:absolute;color:var(--cui-base-400)}:host ::ng-deep [data-editor]{padding-right:4px;width:100%;height:100%;min-height:200px;overflow:hidden auto;scrollbar-gutter:stable}:host ::ng-deep [data-editor] .codex-editor{margin-left:60px}:host ::ng-deep [data-editor] .codex-editor--narrow .ce-popover{right:auto}:host ::ng-deep [data-editor] .codex-editor__redactor{margin-right:auto;padding-bottom:260px!important}@media (max-width: 650px){:host ::ng-deep [data-editor] .codex-editor{margin-left:0}}:host ::ng-deep [data-editor]._readonly{min-height:auto}:host ::ng-deep [data-editor]._readonly .codex-editor{margin:auto}:host ::ng-deep [data-editor]._readonly .codex-editor__redactor{padding-bottom:0!important}:host ::ng-deep [data-editor]._readonly .combined-text-block{padding:0}:host ::ng-deep [data-editor] [data-item-name=move-up],:host ::ng-deep [data-editor] [data-item-name=move-down],:host ::ng-deep [data-editor] [data-tool=paragraph]{display:none}:host ::ng-deep [data-editor] *::selection{background:var(--cui-base-200)}:host ::ng-deep [data-editor] a{color:var(--cui-light-blue-600)}:host ::ng-deep .marker{cursor:pointer;text-decoration:underline;color:var(--cui-light-blue-600);background-color:transparent}:host ::ng-deep .tool-marker,:host ::ng-deep .role-marker{margin:0 5px}:host ::ng-deep .tool-marker{color:#e97c00}:host ::ng-deep .role-marker{color:#8803f1}.form{height:100%}\n"] }]
|
|
395
411
|
}], ctorParameters: () => [] });
|
|
396
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUMsT0FBTyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxHQUFHLEVBQ0gsT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFHLEVBQ0gsWUFBWSxFQUNaLEtBQUssRUFDTCxPQUFPLEVBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQVksa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBVzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBVWpFLE1BQU0sT0FBTyxrQkFBa0I7SUE4QzNC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QUcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUNqRCxDQUFDOytHQXBoQlEsa0JBQWtCO21HQUFsQixrQkFBa0IsNGZBRmhCLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsK0lDdkRyRCxtSEFNQTs7NEZEbURhLGtCQUFrQjtrQkFSOUIsU0FBUzsrQkFDSSxZQUFZLGNBQ1YsSUFBSSxtQkFHQyx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgRGVzdHJveVJlZixcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbiAgICB2aWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgdHlwZSB7IEN1aU51bGxhYmxlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcbmltcG9ydCB7IEN1aUlkU2VydmljZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgdHlwZSB7IEFQSSwgQmxvY2tNdXRhdGlvbkV2ZW50LCBPdXRwdXREYXRhIH0gZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcbmltcG9ydCBFZGl0b3JKUyBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xuaW1wb3J0IHR5cGUgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgY29uY2F0TWFwLFxuICAgIGRlbGF5LFxuICAgIGZpbmFsaXplLFxuICAgIGZyb21FdmVudCxcbiAgICBtYXAsXG4gICAgU3ViamVjdCxcbiAgICB0YWtlV2hpbGUsXG4gICAgdGFwLFxuICAgIHRocm90dGxlVGltZSxcbiAgICB0aW1lcixcbiAgICB0b0FycmF5XG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ3VpQmxvY2ssIEN1aUpUZXh0QXBpU2VydmljZSB9IGZyb20gJ0BjdWJ5LXVpL2FwaSc7XG5cbmltcG9ydCB7IGdldEVkaXRvckNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSwgQ09NQklORURfVEVYVF9CTE9DS19QQVJULCBERUZBVUxUX0NPTkZJRyB9IGZyb20gJy4vY29uc3RhbnRzL2VkaXRvci5jb25zdGFudHMnO1xuaW1wb3J0IHsgc2V0RWRpdG9yRXZlbnRzIH0gZnJvbSAnLi9ldmVudHMvc2V0LWVkaXRvci1ldmVudHMnO1xuaW1wb3J0IHR5cGUge1xuICAgIEN1aUJsb2NrRGF0YSxcbiAgICBDdWlCbG9ja3NSZXF1ZXN0RGF0YSxcbiAgICBDdWlDb21iaW5lZEJsb2NrQWRkaW5nRXZlbnQsXG4gICAgQ3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhLFxuICAgIEN1aUNvbWJpbmVkUGFydEJsb2NrLFxuICAgIEN1aUVkaXRvckNvbmZpZyxcbiAgICBDdWlFdmVudEFjdGlvbkRhdGEsXG4gICAgQ3VpRnVsbEJsb2NrRGF0YVxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ3VpRWRpdG9yU2VydmljZSwgRXZlbnRBY3Rpb25zIH0gZnJvbSAnLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyByZWNhbGN1bGF0ZUluZGV4ZXMgfSBmcm9tICcuL3V0aWxzL3JlY2FsY3VsYXRlLWluZGV4ZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2N1aS1lZGl0b3InLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbQ3VpRWRpdG9yU2VydmljZSwgQ3VpSlRleHRBcGlTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBDdWlFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1aUlkU2VydmljZSA9IGluamVjdChDdWlJZFNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWRpdG9yU2VydmljZSA9IGluamVjdChDdWlFZGl0b3JTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGpUZXh0U2VydmljZSA9IGluamVjdChDdWlKVGV4dEFwaVNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBQT09MSU5HX0RFTEFZID0gMTAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgRUxFTUVOVF9TUEFDRV9UT19CT1RUT00gPSAxNTA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBTQ1JPTExfVEhST1RUTEVfVElNRSA9IDIwMDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW1wdHlRdWV1ZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIHBvb2xpbmdTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBzY3JvbGxTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBpc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2U6IGJvb2xlYW5bXSA9IFtdO1xuICAgIHByaXZhdGUgaXNGaXJzdCA9IHRydWU7XG4gICAgcHJpdmF0ZSBpc0NoYW5naW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc1NraXAgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIC8vINCd0YPQttC10L0g0LTQu9GPINGB0L7QvtGC0L3QvtGI0LXQvdC40Y8g0LvQvtC60LDQu9GM0L3QvtCz0L4gSUQg0Lgg0L7RgdC90L7QstC90L7Qs9C+IElEINC/0L7RgdC70LUg0YHQvtC30LTQsNC90LjRjyDRjdC70LXQvNC10L3RgtCwXG4gICAgcHJpdmF0ZSBibG9ja0lkc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSBjb21iaW5lZEJsb2NrcyA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIGluZGV4ID0gMDtcbiAgICBwcml2YXRlIHBhZ2UgPSAwO1xuICAgIHByaXZhdGUgYWRkZWRCbG9ja3M6IEN1aUJsb2NrRGF0YVtdID0gW107XG4gICAgcHJpdmF0ZSB1cGRhdGVkQmxvY2tzOiBDdWlCbG9ja1tdID0gW107XG4gICAgcHJpdmF0ZSByZW1vdmVkQmxvY2tzSWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgY2hhbmdlc1F1ZXVlOiBCbG9ja011dGF0aW9uRXZlbnRbXVtdID0gW107XG4gICAgcHJpdmF0ZSBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZWRpdG9ySWQgPSB0aGlzLmN1aUlkU2VydmljZS5nZW5lcmF0ZSgpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBpc1JlYWRvbmx5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKT8ucmVhZE9ubHkpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVkaXRvclJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ2VkaXRvcicpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvckFwaUlkID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICAgIHB1YmxpYyByZWFkb25seSBjb25maWcgPSBpbnB1dDxDdWlFZGl0b3JDb25maWc+KERFRkFVTFRfQ09ORklHKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVxdWVzdFNpemUgPSBpbnB1dDxudW1iZXI+KDQwKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBlZGl0b3JFbXB0eSA9IG91dHB1dDxib29sZWFuPigpO1xuXG4gICAgcHVibGljIGVkaXRvciE6IEVkaXRvckpTO1xuICAgIHB1YmxpYyBlZGl0b3JFbGVtZW50ITogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0RWRpdG9yRWZmZWN0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmRlc3Ryb3lFZGl0b3IoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2Nyb2xsRXZlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3ZlcmFsbEhlaWdodCA9IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5FTEVNRU5UX1NQQUNFX1RPX0JPVFRPTTtcbiAgICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IGVsZW1lbnQuc2Nyb2xsVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgPCBvdmVyYWxsSGVpZ2h0IHx8IHRoaXMuaXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnJlcXVlc3RTaXplKCk7XG4gICAgICAgIGxldCBibG9ja3NDb3VudCA9IDA7XG5cbiAgICAgICAgdGhpcy5nZXRCbG9ja3ModGhpcy5wYWdlLCBzaXplKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChibG9ja3MpID0+IChibG9ja3NDb3VudCA9IGJsb2Nrcy5sZW5ndGgpKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tzQ291bnQgPj0gc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAgIHRoaXMucGFnZSsrO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25FZGl0b3JDaGFuZ2UoXzogQVBJLCBldmVudDogQmxvY2tNdXRhdGlvbkV2ZW50IHwgQmxvY2tNdXRhdGlvbkV2ZW50W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkb25seSgpIHx8IHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICAgIGV2ZW50ID0gW2V2ZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY2FsY3VsYXRlSW5kZXhlcyh0aGlzLmVkaXRvci5ibG9ja3MpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlc1F1ZXVlLnVuc2hpZnQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGFydENoYW5nZXMoZXZlbnQpO1xuICAgICAgICB0aGlzLmVkaXRvckVtcHR5LmVtaXQodGhpcy5jaGVja0lzRW1wdHkoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFkZGVkQ29tYmluZWRCbG9jayhkYXRhOiBDdWlDb21iaW5lZEJsb2NrQWRkaW5nRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UucG9wKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJsb2Nrc1dpdGhvdXRJZCA9IGRhdGEuYmxvY2tzLm1hcCgoYmxvY2spID0+ICh7XG4gICAgICAgICAgICBibG9jazogeyAuLi5ibG9jaywgaWQ6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgaWQ6IGJsb2NrLmlkIVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5hZGRlZEJsb2Nrcy5wdXNoKC4uLmJsb2Nrc1dpdGhvdXRJZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblVwZGF0ZWRDb21iaW5lZEJsb2NrKHVwZGF0ZWRCbG9ja3M6IEN1aUJsb2NrW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1cGRhdGVkQmxvY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVkQmxvY2tzLnB1c2goLi4udXBkYXRlZEJsb2Nrcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblJlbW92ZWRDb21iaW5lZEJsb2NrKGJsb2NrSWRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIWJsb2NrSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzLnB1c2goLi4uYmxvY2tJZHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEVkaXRvckVmZmVjdCgpOiB2b2lkIHtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvckFwaUlkKCkgfHwgdGhpcy5jb25maWcoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRFZGl0b3JDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEVkaXRvckNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMualRleHRTZXJ2aWNlLmFkZE9wdGlvbnModGhpcy5jb25maWcoKT8ucmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuZWRpdG9yID0gdGhpcy5pbml0RWRpdG9yKHRoaXMuZWRpdG9ySWQpO1xuICAgICAgICB0aGlzLmVkaXRvci5pc1JlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuZWRpdG9yUmVmKCkubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgdGhpcy5pbml0RWRpdG9yRXZlbnRzKHRoaXMuZWRpdG9yRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmluaXRTY3JvbGxPYnNlcnZlcigpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFBvb2xpbmcodGhpcy5yZXF1ZXN0U2l6ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2V0TGlzdGVuZXJzT25DdXN0b21CbG9ja0NoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yKGlkOiBzdHJpbmcpOiBFZGl0b3JKUyB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG5cbiAgICAgICAgdGhpcy5kZXN0cm95RWRpdG9yKCk7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvckpTKHtcbiAgICAgICAgICAgIC4uLmdldEVkaXRvckNvbmZpZyhpZCwgY29uZmlnKSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uRWRpdG9yQ2hhbmdlLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFNjcm9sbE9ic2VydmVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jb25maWcoKT8uZWxlbWVudCA/PyB0aGlzLmVkaXRvckVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNjcm9sbE9ic2VydmVyID0gZnJvbUV2ZW50KGVsZW1lbnQsICdzY3JvbGwnKTtcblxuICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbiA9IHNjcm9sbE9ic2VydmVyXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSxcbiAgICAgICAgICAgICAgICB0aHJvdHRsZVRpbWUodGhpcy5TQ1JPTExfVEhST1RUTEVfVElNRSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgICAgIGxlYWRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nOiB0cnVlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMub25TY3JvbGxFdmVudChlbGVtZW50KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3JFdmVudHMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVhZE9ubHkgPSB0aGlzLmlzUmVhZG9ubHkoKTtcblxuICAgICAgICBpZiAocmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldEVkaXRvckV2ZW50cyhlbGVtZW50LCB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnRQb29saW5nKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy5jb25maWcoKT8uZWxlbWVudCA/PyB0aGlzLmVkaXRvckVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHdpdGhvdXRQcmVsb2FkID0gdGhpcy5jb25maWcoKT8ud2l0aG91dFByZWxvYWQ7XG5cbiAgICAgICAgdGhpcy5wb29saW5nU3Vic2NyaXB0aW9uID0gdGltZXIoMCwgdGhpcy5QT09MSU5HX0RFTEFZKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuZ2V0QmxvY2tzKHRoaXMucGFnZSwgc2l6ZSkucGlwZShkZWxheSh0aGlzLlBPT0xJTkdfREVMQVkpKSksXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMucGFnZSsrKSxcbiAgICAgICAgICAgICAgICB0YWtlV2hpbGUoXG4gICAgICAgICAgICAgICAgICAgIChibG9ja3MpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAhd2l0aG91dFByZWxvYWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IDw9IHNjcm9sbEVsZW1lbnQuY2xpZW50SGVpZ2h0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3MubGVuZ3RoID49IHNpemVcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhcnRCbG9jaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95RWRpdG9yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgICAvLyBUT0RPOiDQsiDRgNCw0L3QtNC+0Lwg0LrQtdC50YHQsNGFINC/0LDQtNCw0LXRgiDQvtGI0LjQsdC60LAg0LXRgdC70Lgg0YPQsdGA0LDRgtGMINC/0YDQvtCy0LXRgNC60YMg0L3QsCDQstGL0LfQvtCyIGRlc3Ryb3lcbiAgICAgICAgdGhpcy5lZGl0b3I/LmRlc3Ryb3k/LigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGlzdGVuZXJzT25DdXN0b21CbG9ja0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcyh0aGlzLmVkaXRvciwge1xuICAgICAgICAgICAgcmVtb3ZlZENhbGxiYWNrOiB0aGlzLm9uUmVtb3ZlZENvbWJpbmVkQmxvY2suYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHVwZGF0ZWRDYWxsYmFjazogdGhpcy5vblVwZGF0ZWRDb21iaW5lZEJsb2NrLmJpbmQodGhpcyksXG4gICAgICAgICAgICBhZGRlZENhbGxiYWNrOiB0aGlzLm9uQWRkZWRDb21iaW5lZEJsb2NrLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydENoYW5nZXMoZXZlbnQ6IEJsb2NrTXV0YXRpb25FdmVudFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmlzU2tpcCB8fCB0aGlzLmlzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDaGFuZ2luZyA9IHRydWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvck91dHB1dCA9IGF3YWl0IHRoaXMuZWRpdG9yLnNhdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGV2ZW50LmZpbHRlcigoZGF0YSkgPT4gZGF0YS5kZXRhaWwudGFyZ2V0Lm5hbWUgIT09IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja3MgPSB0aGlzLmVkaXRvclNlcnZpY2Uuc29ydEV2ZW50c0J5VHlwZXMoZXZlbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IHsgYWRkQmxvY2tzJCwgYWRkZWRCbG9ja3MgfSA9IHRoaXMuY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChibG9ja3MsIGVkaXRvck91dHB1dCk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkZWRCbG9ja3MgPSBbXTtcblxuICAgICAgICAgICAgYWRkQmxvY2tzJFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKGJsb2NrSWRzKSA9PiB0aGlzLnNldEJsb2NrSWRzVG9NYXAoYmxvY2tJZHMsIGFkZGVkQmxvY2tzKSksXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChibG9ja3MsIGVkaXRvck91dHB1dCkpLFxuICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5jb2xsZWN0UmVtb3ZlZEJsb2Nrc1JlcXVlc3QoYmxvY2tzKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB0aGlzLnN0YXJ0TmV4dENoYW5nZSgpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy5zdGFydE5leHRDaGFuZ2UoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0TmV4dENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbmV4dEV2ZW50cyA9IHRoaXMuY2hhbmdlc1F1ZXVlLnBvcCgpO1xuXG4gICAgICAgIGlmIChuZXh0RXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q2hhbmdlcyhuZXh0RXZlbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1wdHlRdWV1ZS5uZXh0KG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSwgZWRpdG9yT3V0cHV0OiBPdXRwdXREYXRhKTogQ3VpQmxvY2tzUmVxdWVzdERhdGEge1xuICAgICAgICBjb25zdCBkZWZhdWx0QmxvY2tzV2l0aEluZGV4ID0gYmxvY2tzW0V2ZW50QWN0aW9ucy5hZGRdLm1hcCgoYWRkZWRCbG9jaykgPT5cbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5nZXRGdWxsQmxvY2tEYXRhKGFkZGVkQmxvY2ssIGVkaXRvck91dHB1dClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29tYmluZWRCbG9ja3NXaXRoSW5kZXggPSB0aGlzLmFkZGVkQmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtaWQ9XCIke2Jsb2NrLmlkfVwiXWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIoZWxlbWVudD8uZGF0YXNldFsnaW5kZXgnXSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCBpbmRleCB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhZGRlZEJsb2NrcyA9IFsuLi5kZWZhdWx0QmxvY2tzV2l0aEluZGV4LCAuLi5jb21iaW5lZEJsb2Nrc1dpdGhJbmRleF0uc29ydChcbiAgICAgICAgICAgIChmaXJzdCwgc2Vjb25kKSA9PiBmaXJzdC5pbmRleCAtIHNlY29uZC5pbmRleFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBhZGRCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RBZGRlZEJsb2Nrc1JlcXVlc3QodGhpcy5lZGl0b3JBcGlJZCgpLCBhZGRlZEJsb2Nrcyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFkZGVkQmxvY2tzLFxuICAgICAgICAgICAgYWRkQmxvY2tzJFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY29sbGVjdFVwZGF0ZWRCbG9ja3NSZXF1ZXN0KGJsb2NrczogQ3VpRXZlbnRBY3Rpb25EYXRhLCBlZGl0b3JPdXRwdXQ6IE91dHB1dERhdGEpOiBPYnNlcnZhYmxlPEN1aUJsb2NrW10+IHtcbiAgICAgICAgYmxvY2tzW0V2ZW50QWN0aW9ucy51cGRhdGVdLmZvckVhY2goKHVwZGF0ZUJsb2NrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGlkLCBibG9jayB9ID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmdldEZ1bGxCbG9ja0RhdGEodXBkYXRlQmxvY2ssIGVkaXRvck91dHB1dCk7XG4gICAgICAgICAgICBibG9jay5pZCA9IGlkO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MucHVzaChibG9jayk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHVwZGF0ZUJsb2NrcyQgPSB0aGlzLmVkaXRvclNlcnZpY2UuY29sbGVjdFVwZGF0ZWRCbG9ja3NSZXF1ZXN0KHRoaXMudXBkYXRlZEJsb2NrcywgdGhpcy5ibG9ja0lkc01hcCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVkQmxvY2tzID0gW107XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUJsb2NrcyQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb2xsZWN0UmVtb3ZlZEJsb2Nrc1JlcXVlc3QoYmxvY2tzOiBDdWlFdmVudEFjdGlvbkRhdGEpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgYmxvY2tzW0V2ZW50QWN0aW9ucy5yZW1vdmVdLmZvckVhY2goKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGJsb2NrLmRldGFpbC50YXJnZXQuaWQ7XG5cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZEJsb2Nrc0lkcy5wdXNoKGlkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlQmxvY2tzJCA9IHRoaXMuZWRpdG9yU2VydmljZS5jb2xsZWN0UmVtb3ZlZEJsb2Nrc1JlcXVlc3QoXG4gICAgICAgICAgICB0aGlzLmVkaXRvckFwaUlkKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRCbG9ja3NJZHMsXG4gICAgICAgICAgICB0aGlzLmJsb2NrSWRzTWFwXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVtb3ZlZEJsb2Nrc0lkcyA9IFtdO1xuXG4gICAgICAgIHJldHVybiByZW1vdmVCbG9ja3MkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QmxvY2tzKHBhZ2UgPSAwLCBzaXplID0gNDApOiBPYnNlcnZhYmxlPEN1aUJsb2NrW10+IHtcbiAgICAgICAgbGV0IGNvbWJpbmVkQmxvY2s6IEN1aU51bGxhYmxlPEN1aUJsb2NrPjtcblxuICAgICAgICByZXR1cm4gdGhpcy5qVGV4dFNlcnZpY2UuZ2V0QmxvY2tzKHRoaXMuZWRpdG9yQXBpSWQoKSwgcGFnZSwgc2l6ZSkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3kpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb21iaW5lZEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRCbG9jayA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVJbmRleGVzKHRoaXMuZWRpdG9yLmJsb2Nrcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gQ09NQklORURfVEVYVF9CTE9DS19QQVJUKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrRGF0YSA9IGJsb2NrLmRhdGEgYXMgeyBwYXJlbnRJZDogc3RyaW5nIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbWJpbmVkQmxvY2sgJiYgYmxvY2tEYXRhLnBhcmVudElkISAhPT0gY29tYmluZWRCbG9jaz8uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRCbG9jayA9IHRoaXMuc2V0Q29tYmluZWRCbG9jayhibG9jayk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb21iaW5lZEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRCbG9jayA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRCbG9jayhibG9jayk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRvQXJyYXkoKVxuICAgICAgICApIGFzIHVua25vd24gYXMgT2JzZXJ2YWJsZTxDdWlCbG9ja1tdPjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEJsb2NrKGJsb2NrOiBDdWlCbG9jayk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIGJsb2NrLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsb2NrSWRzTWFwLnNldChibG9jay5pZCEsIGJsb2NrLmlkISk7XG4gICAgICAgIHRoaXMuaW5zZXJ0KGJsb2NrKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jazogQ3VpQmxvY2spOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UucHVzaCh0cnVlKTtcbiAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmVkaXRvci5ibG9ja3MuZ2V0QnlJZChjb21iaW5lZEJsb2NrLmlkIHx8ICcnKTtcblxuICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmJsb2Nrcy51cGRhdGUoYmxvY2suaWQsIGNvbWJpbmVkQmxvY2suZGF0YSBhcyBDdWlDb21iaW5lZFBhcnRCbG9jayk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5zZXJ0KGNvbWJpbmVkQmxvY2spO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5zZXJ0KGJsb2NrOiBDdWlCbG9jayk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoZWNrRmlyc3QoYmxvY2spO1xuICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0ZpcnN0KGJsb2NrOiBDdWlCbG9jayk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNGaXJzdCkge1xuICAgICAgICAgICAgdGhpcy5pc1NraXAgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuYmxvY2tzLmluc2VydChibG9jay50eXBlLCBibG9jay5kYXRhLCB7fSwgdGhpcy5pbmRleCwgZmFsc2UsIGZhbHNlLCBibG9jay5pZCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86INC10YHRgtGMINCy0LDRgNC40Log0YfRgtC+INGH0YLQviDRgtC+INC/0L7QudC00LXRgiDQvdC1INGC0LDQulxuICAgICAgICB0aGlzLmVkaXRvci5ibG9ja3MucmVuZGVyKHsgYmxvY2tzOiBbYmxvY2tdIH0pLnRoZW4oKCkgPT4gKHRoaXMuaXNTa2lwID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDb21iaW5lZEJsb2NrKGJsb2NrOiBDdWlCbG9jayk6IEN1aUJsb2NrIHtcbiAgICAgICAgY29uc3QgY29tYmluZWRCbG9ja0RhdGEgPSBibG9jay5kYXRhIGFzIHsgcGFyZW50SWQ6IHN0cmluZyB9O1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmNvbWJpbmVkQmxvY2tzLmdldChjb21iaW5lZEJsb2NrRGF0YS5wYXJlbnRJZCk7XG5cbiAgICAgICAgdGhpcy5ibG9ja0lkc01hcC5zZXQoYmxvY2suaWQhLCBibG9jay5pZCEpO1xuXG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudERhdGEgPSBwYXJlbnQuZGF0YSBhcyB7IHRleHRCbG9ja3M6IEN1aUJsb2NrW10gfTtcbiAgICAgICAgICAgIHBhcmVudERhdGEudGV4dEJsb2Nrcy5wdXNoKGJsb2NrKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudE9iamVjdDogQ3VpQmxvY2sgPSB7XG4gICAgICAgICAgICBpZDogY29tYmluZWRCbG9ja0RhdGEucGFyZW50SWQsXG4gICAgICAgICAgICB0eXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGNvbWJpbmVkQmxvY2tEYXRhLnBhcmVudElkLFxuICAgICAgICAgICAgICAgIHRleHRCbG9ja3M6IFtibG9ja11cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmNvbWJpbmVkQmxvY2tzLnNldChjb21iaW5lZEJsb2NrRGF0YS5wYXJlbnRJZCwgcGFyZW50T2JqZWN0KTtcblxuICAgICAgICByZXR1cm4gcGFyZW50T2JqZWN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0QmxvY2tJZHNUb01hcChibG9ja0lkczogc3RyaW5nW10sIGFkZGVkQmxvY2tzOiBDdWlGdWxsQmxvY2tEYXRhW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFibG9ja0lkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudExvY2FsSWRXaXRoTWFpbklkKGJsb2NrSWRzLCBhZGRlZEJsb2Nrcyk7XG4gICAgICAgIGFkZGVkQmxvY2tzLmZvckVhY2goKGJsb2NrRGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tJZHNNYXAuc2V0KGJsb2NrRGF0YS5pZCwgYmxvY2tJZHNbaW5kZXhdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVFbGVtZW50TG9jYWxJZFdpdGhNYWluSWQoYmxvY2tJZHM6IHN0cmluZ1tdLCBibG9ja3M6IEN1aUZ1bGxCbG9ja0RhdGFbXSk6IHZvaWQge1xuICAgICAgICBibG9ja3MuZm9yRWFjaCgoYmxvY2ssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lZGl0b3JFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGBbZGF0YS1pZD1cIiR7YmxvY2suaWR9XCJdYCk7XG5cbiAgICAgICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWxlbWVudC5kYXRhc2V0WydpZCddID0gYmxvY2tJZHNbaW5kZXhdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFN0YXJ0QmxvY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmJsb2NrSWRzTWFwLnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yRW1wdHkuZW1pdCh0aGlzLmNoZWNrSXNFbXB0eSgpKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkb25seSgpKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5yZW5kZXIoeyBibG9ja3M6IFtdIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0U3RhcnRCbG9jayhcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yQXBpSWQoKSxcbiAgICAgICAgICAgIGFzeW5jIChibG9jazogQ3VpQmxvY2s8Q3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhPiwgaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tJZHNNYXAuc2V0KGlkLCBpZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UucHVzaCh0cnVlKTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZWRpdG9yLnJlbmRlcih7IGJsb2NrczogW2Jsb2NrXSB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoKTtcbiAgICAgICAgICAgICAgICByZWNhbGN1bGF0ZUluZGV4ZXModGhpcy5lZGl0b3IuYmxvY2tzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnKCk/LmF1dG9mb2N1cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lZGl0b3IuY2FyZXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgTUlOX0JMT0NLU19DT1VOVCA9IDE7XG4gICAgICAgIGNvbnN0IFJFREFDVE9SX1NFTEVDVE9SID0gJy5jb2RleC1lZGl0b3JfX3JlZGFjdG9yJztcbiAgICAgICAgY29uc3QgcmVkYWN0b3IgPSB0aGlzLmVkaXRvckVsZW1lbnQucXVlcnlTZWxlY3RvcihSRURBQ1RPUl9TRUxFQ1RPUik7XG4gICAgICAgIGNvbnN0IGJsb2Nrc0NvdW50ID0gcmVkYWN0b3I/LmNoaWxkRWxlbWVudENvdW50ID8/IDA7XG5cbiAgICAgICAgcmV0dXJuIGJsb2Nrc0NvdW50IDw9IE1JTl9CTE9DS1NfQ09VTlQgJiYgIXJlZGFjdG9yPy50ZXh0Q29udGVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucG9vbGluZ1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UgPSBbXTtcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTa2lwID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ibG9ja0lkc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgIHRoaXMuY29tYmluZWRCbG9ja3MgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLnBhZ2UgPSAwO1xuICAgICAgICB0aGlzLmFkZGVkQmxvY2tzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlZEJsb2NrcyA9IFtdO1xuICAgICAgICB0aGlzLnJlbW92ZWRCbG9ja3NJZHMgPSBbXTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgICNlZGl0b3JcbiAgICBbaWRdPVwiZWRpdG9ySWRcIlxuICAgIGRhdGEtZWRpdG9yXG4gICAgW2NsYXNzLl9yZWFkb25seV09XCJjb25maWcoKS5yZWFkT25seVwiXG4+PC9kaXY+XG4iXX0=
|
|
412
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUMsT0FBTyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxHQUFHLEVBQ0gsT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFHLEVBQ0gsWUFBWSxFQUNaLEtBQUssRUFDTCxPQUFPLEVBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUscUJBQXFCLEVBQVksa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBVzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBaUJqRSxNQUFNLE9BQU8s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LGdCQUFnQjt3QkFDaEI7NEJBQ0csT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUNaLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRTt5QkFDcEc7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgRGVzdHJveVJlZixcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbiAgICB2aWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgdHlwZSB7IEN1aU51bGxhYmxlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcbmltcG9ydCB7IEN1aUlkU2VydmljZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgdHlwZSB7IEFQSSwgQmxvY2tNdXRhdGlvbkV2ZW50LCBPdXRwdXREYXRhIH0gZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcbmltcG9ydCBFZGl0b3JKUyBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xuaW1wb3J0IHR5cGUgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgY29uY2F0TWFwLFxuICAgIGRlbGF5LFxuICAgIGZpbmFsaXplLFxuICAgIGZyb21FdmVudCxcbiAgICBtYXAsXG4gICAgU3ViamVjdCxcbiAgICB0YWtlV2hpbGUsXG4gICAgdGFwLFxuICAgIHRocm90dGxlVGltZSxcbiAgICB0aW1lcixcbiAgICB0b0FycmF5XG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ1VJX0pURVhUX0FQSV9TRVJWSUNFLCBDdWlCbG9jaywgQ3VpSlRleHRBcGlTZXJ2aWNlIH0gZnJvbSAnQGN1YnktdWkvYXBpJztcblxuaW1wb3J0IHsgZ2V0RWRpdG9yQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQ09NQklORURfVEVYVF9CTE9DS19OQU1FLCBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsIERFRkFVTFRfQ09ORklHIH0gZnJvbSAnLi9jb25zdGFudHMvZWRpdG9yLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBzZXRFZGl0b3JFdmVudHMgfSBmcm9tICcuL2V2ZW50cy9zZXQtZWRpdG9yLWV2ZW50cyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQ3VpQmxvY2tEYXRhLFxuICAgIEN1aUJsb2Nrc1JlcXVlc3REYXRhLFxuICAgIEN1aUNvbWJpbmVkQmxvY2tBZGRpbmdFdmVudCxcbiAgICBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGEsXG4gICAgQ3VpQ29tYmluZWRQYXJ0QmxvY2ssXG4gICAgQ3VpRWRpdG9yQ29uZmlnLFxuICAgIEN1aUV2ZW50QWN0aW9uRGF0YSxcbiAgICBDdWlGdWxsQmxvY2tEYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDdWlFZGl0b3JTZXJ2aWNlLCBFdmVudEFjdGlvbnMgfSBmcm9tICcuL3NlcnZpY2VzJztcbmltcG9ydCB7IHJlY2FsY3VsYXRlSW5kZXhlcyB9IGZyb20gJy4vdXRpbHMvcmVjYWxjdWxhdGUtaW5kZXhlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY3VpLWVkaXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgQ3VpRWRpdG9yU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgICBwcm92aWRlOiBDVUlfSlRFWFRfQVBJX1NFUlZJQ0UsXG4gICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+XG4gICAgICAgICAgICAgICAgaW5qZWN0KENVSV9KVEVYVF9BUElfU0VSVklDRSwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSkgPz8gbmV3IEN1aUpUZXh0QXBpU2VydmljZSgpXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEN1aUVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95ID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VpSWRTZXJ2aWNlID0gaW5qZWN0KEN1aUlkU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlZGl0b3JTZXJ2aWNlID0gaW5qZWN0KEN1aUVkaXRvclNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgalRleHRTZXJ2aWNlID0gaW5qZWN0KENVSV9KVEVYVF9BUElfU0VSVklDRSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IFBPT0xJTkdfREVMQVkgPSAxMDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBFTEVNRU5UX1NQQUNFX1RPX0JPVFRPTSA9IDE1MDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IFNDUk9MTF9USFJPVFRMRV9USU1FID0gMjAwO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbXB0eVF1ZXVlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByaXZhdGUgcG9vbGluZ1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHNjcm9sbFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZTogYm9vbGVhbltdID0gW107XG4gICAgcHJpdmF0ZSBpc0ZpcnN0ID0gdHJ1ZTtcbiAgICBwcml2YXRlIGlzQ2hhbmdpbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzU2tpcCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgLy8g0J3Rg9C20LXQvSDQtNC70Y8g0YHQvtC+0YLQvdC+0YjQtdC90LjRjyDQu9C+0LrQsNC70YzQvdC+0LPQviBJRCDQuCDQvtGB0L3QvtCy0L3QvtCz0L4gSUQg0L/QvtGB0LvQtSDRgdC+0LfQtNCw0L3QuNGPINGN0LvQtdC80LXQvdGC0LBcbiAgICBwcml2YXRlIGJsb2NrSWRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGNvbWJpbmVkQmxvY2tzID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgaW5kZXggPSAwO1xuICAgIHByaXZhdGUgcGFnZSA9IDA7XG4gICAgcHJpdmF0ZSBhZGRlZEJsb2NrczogQ3VpQmxvY2tEYXRhW10gPSBbXTtcbiAgICBwcml2YXRlIHVwZGF0ZWRCbG9ja3M6IEN1aUJsb2NrW10gPSBbXTtcbiAgICBwcml2YXRlIHJlbW92ZWRCbG9ja3NJZHM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBjaGFuZ2VzUXVldWU6IEJsb2NrTXV0YXRpb25FdmVudFtdW10gPSBbXTtcbiAgICBwcml2YXRlIGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JJZCA9IHRoaXMuY3VpSWRTZXJ2aWNlLmdlbmVyYXRlKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzUmVhZG9ubHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpPy5yZWFkT25seSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZWRpdG9yUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignZWRpdG9yJyk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgZWRpdG9yQXBpSWQgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmZpZyA9IGlucHV0PEN1aUVkaXRvckNvbmZpZz4oREVGQVVMVF9DT05GSUcpO1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1ZXN0U2l6ZSA9IGlucHV0PG51bWJlcj4oNDApO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvckVtcHR5ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG5cbiAgICBwdWJsaWMgZWRpdG9yITogRWRpdG9ySlM7XG4gICAgcHVibGljIGVkaXRvckVsZW1lbnQhOiBIVE1MRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluaXRFZGl0b3JFZmZlY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZGVzdHJveUVkaXRvcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TY3JvbGxFdmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvdmVyYWxsSGVpZ2h0ID0gZWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLkVMRU1FTlRfU1BBQ0VfVE9fQk9UVE9NO1xuICAgICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gZWxlbWVudC5zY3JvbGxUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgICBpZiAoY3VycmVudEhlaWdodCA8IG92ZXJhbGxIZWlnaHQgfHwgdGhpcy5pc1JlcXVlc3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1JlcXVlc3RlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucmVxdWVzdFNpemUoKTtcbiAgICAgICAgbGV0IGJsb2Nrc0NvdW50ID0gMDtcblxuICAgICAgICB0aGlzLmdldEJsb2Nrcyh0aGlzLnBhZ2UsIHNpemUpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKGJsb2NrcykgPT4gKGJsb2Nrc0NvdW50ID0gYmxvY2tzLmxlbmd0aCkpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1JlcXVlc3RlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChibG9ja3NDb3VudCA+PSBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5wYWdlKys7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkVkaXRvckNoYW5nZShfOiBBUEksIGV2ZW50OiBCbG9ja011dGF0aW9uRXZlbnQgfCBCbG9ja011dGF0aW9uRXZlbnRbXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JlYWRvbmx5KCkgfHwgdGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgICAgZXZlbnQgPSBbZXZlbnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVjYWxjdWxhdGVJbmRleGVzKHRoaXMuZWRpdG9yLmJsb2Nrcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDaGFuZ2luZykge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VzUXVldWUudW5zaGlmdChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXJ0Q2hhbmdlcyhldmVudCk7XG4gICAgICAgIHRoaXMuZWRpdG9yRW1wdHkuZW1pdCh0aGlzLmNoZWNrSXNFbXB0eSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQWRkZWRDb21iaW5lZEJsb2NrKGRhdGE6IEN1aUNvbWJpbmVkQmxvY2tBZGRpbmdFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5wb3AoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmxvY2tzV2l0aG91dElkID0gZGF0YS5ibG9ja3MubWFwKChibG9jaykgPT4gKHtcbiAgICAgICAgICAgIGJsb2NrOiB7IC4uLmJsb2NrLCBpZDogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICBpZDogYmxvY2suaWQhXG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLmFkZGVkQmxvY2tzLnB1c2goLi4uYmxvY2tzV2l0aG91dElkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uVXBkYXRlZENvbWJpbmVkQmxvY2sodXBkYXRlZEJsb2NrczogQ3VpQmxvY2tbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXVwZGF0ZWRCbG9ja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MucHVzaCguLi51cGRhdGVkQmxvY2tzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uUmVtb3ZlZENvbWJpbmVkQmxvY2soYmxvY2tJZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghYmxvY2tJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbW92ZWRCbG9ja3NJZHMucHVzaCguLi5ibG9ja0lkcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yRWZmZWN0KCk6IHZvaWQge1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yQXBpSWQoKSB8fCB0aGlzLmNvbmZpZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdEVkaXRvckNoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5qVGV4dFNlcnZpY2UuYWRkT3B0aW9ucyh0aGlzLmNvbmZpZygpPy5yZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5lZGl0b3IgPSB0aGlzLmluaXRFZGl0b3IodGhpcy5lZGl0b3JJZCk7XG4gICAgICAgIHRoaXMuZWRpdG9yLmlzUmVhZHkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50ID0gdGhpcy5lZGl0b3JSZWYoKS5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICB0aGlzLmluaXRFZGl0b3JFdmVudHModGhpcy5lZGl0b3JFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuaW5pdFNjcm9sbE9ic2VydmVyKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0UG9vbGluZyh0aGlzLnJlcXVlc3RTaXplKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3IoaWQ6IHN0cmluZyk6IEVkaXRvckpTIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcblxuICAgICAgICB0aGlzLmRlc3Ryb3lFZGl0b3IoKTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9ySlMoe1xuICAgICAgICAgICAgLi4uZ2V0RWRpdG9yQ29uZmlnKGlkLCBjb25maWcpLFxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25FZGl0b3JDaGFuZ2UuYmluZCh0aGlzKVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3I7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2Nyb2xsT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNvbmZpZygpPy5lbGVtZW50ID8/IHRoaXMuZWRpdG9yRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsT2JzZXJ2ZXIgPSBmcm9tRXZlbnQoZWxlbWVudCwgJ3Njcm9sbCcpO1xuXG4gICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uID0gc2Nyb2xsT2JzZXJ2ZXJcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3kpLFxuICAgICAgICAgICAgICAgIHRocm90dGxlVGltZSh0aGlzLlNDUk9MTF9USFJPVFRMRV9USU1FLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgICAgICAgbGVhZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmc6IHRydWVcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5vblNjcm9sbEV2ZW50KGVsZW1lbnQpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEVkaXRvckV2ZW50cyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWFkT25seSA9IHRoaXMuaXNSZWFkb25seSgpO1xuXG4gICAgICAgIGlmIChyZWFkT25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0RWRpdG9yRXZlbnRzKGVsZW1lbnQsIHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydFBvb2xpbmcoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLmNvbmZpZygpPy5lbGVtZW50ID8/IHRoaXMuZWRpdG9yRWxlbWVudDtcbiAgICAgICAgY29uc3Qgd2l0aG91dFByZWxvYWQgPSB0aGlzLmNvbmZpZygpPy53aXRob3V0UHJlbG9hZDtcblxuICAgICAgICB0aGlzLnBvb2xpbmdTdWJzY3JpcHRpb24gPSB0aW1lcigwLCB0aGlzLlBPT0xJTkdfREVMQVkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5nZXRCbG9ja3ModGhpcy5wYWdlLCBzaXplKS5waXBlKGRlbGF5KHRoaXMuUE9PTElOR19ERUxBWSkpKSxcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5wYWdlKyspLFxuICAgICAgICAgICAgICAgIHRha2VXaGlsZShcbiAgICAgICAgICAgICAgICAgICAgKGJsb2NrcykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICF3aXRob3V0UHJlbG9hZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsRWxlbWVudC5zY3JvbGxIZWlnaHQgPD0gc2Nyb2xsRWxlbWVudC5jbGllbnRIZWlnaHQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5sZW5ndGggPj0gc2l6ZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGFydEJsb2NrKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lFZGl0b3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgIC8vIFRPRE86INCyINGA0LDQvdC00L7QvCDQutC10LnRgdCw0YUg0L/QsNC00LDQtdGCINC+0YjQuNCx0LrQsCDQtdGB0LvQuCDRg9Cx0YDQsNGC0Ywg0L/RgNC+0LLQtdGA0LrRgyDQvdCwINCy0YvQt9C+0LIgZGVzdHJveVxuICAgICAgICB0aGlzLmVkaXRvcj8uZGVzdHJveT8uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNldExpc3RlbmVyc09uQ3VzdG9tQmxvY2tDaGFuZ2VzKHRoaXMuZWRpdG9yLCB7XG4gICAgICAgICAgICByZW1vdmVkQ2FsbGJhY2s6IHRoaXMub25SZW1vdmVkQ29tYmluZWRCbG9jay5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdXBkYXRlZENhbGxiYWNrOiB0aGlzLm9uVXBkYXRlZENvbWJpbmVkQmxvY2suYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGFkZGVkQ2FsbGJhY2s6IHRoaXMub25BZGRlZENvbWJpbmVkQmxvY2suYmluZCh0aGlzKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHN0YXJ0Q2hhbmdlcyhldmVudDogQmxvY2tNdXRhdGlvbkV2ZW50W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNTa2lwIHx8IHRoaXMuaXNDaGFuZ2luZykge1xuICAgICAgICAgICAgdGhpcy5pc1NraXAgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gdHJ1ZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yT3V0cHV0ID0gYXdhaXQgdGhpcy5lZGl0b3Iuc2F2ZSgpO1xuICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gZXZlbnQuZmlsdGVyKChkYXRhKSA9PiBkYXRhLmRldGFpbC50YXJnZXQubmFtZSAhPT0gQ09NQklORURfVEVYVF9CTE9DS19OQU1FKTtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMuZWRpdG9yU2VydmljZS5zb3J0RXZlbnRzQnlUeXBlcyhldmVudHMpO1xuICAgICAgICAgICAgY29uc3QgeyBhZGRCbG9ja3MkLCBhZGRlZEJsb2NrcyB9ID0gdGhpcy5jb2xsZWN0QWRkZWRCbG9ja3NSZXF1ZXN0KGJsb2NrcywgZWRpdG9yT3V0cHV0KTtcblxuICAgICAgICAgICAgdGhpcy5hZGRlZEJsb2NrcyA9IFtdO1xuXG4gICAgICAgICAgICBhZGRCbG9ja3MkXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoYmxvY2tJZHMpID0+IHRoaXMuc2V0QmxvY2tJZHNUb01hcChibG9ja0lkcywgYWRkZWRCbG9ja3MpKSxcbiAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuY29sbGVjdFVwZGF0ZWRCbG9ja3NSZXF1ZXN0KGJsb2NrcywgZWRpdG9yT3V0cHV0KSksXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChibG9ja3MpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHRoaXMuc3RhcnROZXh0Q2hhbmdlKCksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB0aGlzLnN0YXJ0TmV4dENoYW5nZSgpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnROZXh0Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzQ2hhbmdpbmcgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBuZXh0RXZlbnRzID0gdGhpcy5jaGFuZ2VzUXVldWUucG9wKCk7XG5cbiAgICAgICAgaWYgKG5leHRFdmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDaGFuZ2VzKG5leHRFdmVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbXB0eVF1ZXVlLm5leHQobnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb2xsZWN0QWRkZWRCbG9ja3NSZXF1ZXN0KGJsb2NrczogQ3VpRXZlbnRBY3Rpb25EYXRhLCBlZGl0b3JPdXRwdXQ6IE91dHB1dERhdGEpOiBDdWlCbG9ja3NSZXF1ZXN0RGF0YSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRCbG9ja3NXaXRoSW5kZXggPSBibG9ja3NbRXZlbnRBY3Rpb25zLmFkZF0ubWFwKChhZGRlZEJsb2NrKSA9PlxuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmdldEZ1bGxCbG9ja0RhdGEoYWRkZWRCbG9jaywgZWRpdG9yT3V0cHV0KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjb21iaW5lZEJsb2Nrc1dpdGhJbmRleCA9IHRoaXMuYWRkZWRCbG9ja3MubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWRpdG9yRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1pZD1cIiR7YmxvY2suaWR9XCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IE51bWJlcihlbGVtZW50Py5kYXRhc2V0WydpbmRleCddKTtcblxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIGluZGV4IH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFkZGVkQmxvY2tzID0gWy4uLmRlZmF1bHRCbG9ja3NXaXRoSW5kZXgsIC4uLmNvbWJpbmVkQmxvY2tzV2l0aEluZGV4XS5zb3J0KFxuICAgICAgICAgICAgKGZpcnN0LCBzZWNvbmQpID0+IGZpcnN0LmluZGV4IC0gc2Vjb25kLmluZGV4XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGFkZEJsb2NrcyQgPSB0aGlzLmVkaXRvclNlcnZpY2UuY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdCh0aGlzLmVkaXRvckFwaUlkKCksIGFkZGVkQmxvY2tzKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkZWRCbG9ja3MsXG4gICAgICAgICAgICBhZGRCbG9ja3MkXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb2xsZWN0VXBkYXRlZEJsb2Nrc1JlcXVlc3QoYmxvY2tzOiBDdWlFdmVudEFjdGlvbkRhdGEsIGVkaXRvck91dHB1dDogT3V0cHV0RGF0YSk6IE9ic2VydmFibGU8Q3VpQmxvY2tbXT4ge1xuICAgICAgICBibG9ja3NbRXZlbnRBY3Rpb25zLnVwZGF0ZV0uZm9yRWFjaCgodXBkYXRlQmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgaWQsIGJsb2NrIH0gPSB0aGlzLmVkaXRvclNlcnZpY2UuZ2V0RnVsbEJsb2NrRGF0YSh1cGRhdGVCbG9jaywgZWRpdG9yT3V0cHV0KTtcbiAgICAgICAgICAgIGJsb2NrLmlkID0gaWQ7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlZEJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlQmxvY2tzJCA9IHRoaXMuZWRpdG9yU2VydmljZS5jb2xsZWN0VXBkYXRlZEJsb2Nrc1JlcXVlc3QodGhpcy51cGRhdGVkQmxvY2tzLCB0aGlzLmJsb2NrSWRzTWFwKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MgPSBbXTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlQmxvY2tzJDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBibG9ja3NbRXZlbnRBY3Rpb25zLnJlbW92ZV0uZm9yRWFjaCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gYmxvY2suZGV0YWlsLnRhcmdldC5pZDtcblxuICAgICAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzLnB1c2goaWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZW1vdmVCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yQXBpSWQoKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZEJsb2Nrc0lkcyxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tJZHNNYXBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzID0gW107XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZUJsb2NrcyQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja3MocGFnZSA9IDAsIHNpemUgPSA0MCk6IE9ic2VydmFibGU8Q3VpQmxvY2tbXT4ge1xuICAgICAgICBsZXQgY29tYmluZWRCbG9jazogQ3VpTnVsbGFibGU8Q3VpQmxvY2s+O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmpUZXh0U2VydmljZS5nZXRCbG9ja3ModGhpcy5lZGl0b3JBcGlJZCgpLCBwYWdlLCBzaXplKS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbWJpbmVkQmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDb21iaW5lZEJsb2NrKGNvbWJpbmVkQmxvY2spO1xuICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJsb2NrID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWNhbGN1bGF0ZUluZGV4ZXModGhpcy5lZGl0b3IuYmxvY2tzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChibG9jay50eXBlID09PSBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tEYXRhID0gYmxvY2suZGF0YSBhcyB7IHBhcmVudElkOiBzdHJpbmcgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tYmluZWRCbG9jayAmJiBibG9ja0RhdGEucGFyZW50SWQhICE9PSBjb21iaW5lZEJsb2NrPy5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDb21iaW5lZEJsb2NrKGNvbWJpbmVkQmxvY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZWRCbG9jayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJsb2NrID0gdGhpcy5zZXRDb21iaW5lZEJsb2NrKGJsb2NrKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbWJpbmVkQmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDb21iaW5lZEJsb2NrKGNvbWJpbmVkQmxvY2spO1xuICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJsb2NrID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmFkZEJsb2NrKGJsb2NrKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdG9BcnJheSgpXG4gICAgICAgICkgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPEN1aUJsb2NrW10+O1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQmxvY2soYmxvY2s6IEN1aUJsb2NrKTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgYmxvY2sudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmxvY2tJZHNNYXAuc2V0KGJsb2NrLmlkISwgYmxvY2suaWQhKTtcbiAgICAgICAgdGhpcy5pbnNlcnQoYmxvY2spO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrOiBDdWlCbG9jayk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5wdXNoKHRydWUpO1xuICAgICAgICBjb25zdCBibG9jayA9IHRoaXMuZWRpdG9yLmJsb2Nrcy5nZXRCeUlkKGNvbWJpbmVkQmxvY2suaWQgfHwgJycpO1xuXG4gICAgICAgIGlmIChibG9jaykge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuYmxvY2tzLnVwZGF0ZShibG9jay5pZCwgY29tYmluZWRCbG9jay5kYXRhIGFzIEN1aUNvbWJpbmVkUGFydEJsb2NrKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnNlcnQoY29tYmluZWRCbG9jayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnNlcnQoYmxvY2s6IEN1aUJsb2NrKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hlY2tGaXJzdChibG9jayk7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrRmlyc3QoYmxvY2s6IEN1aUJsb2NrKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLmlzU2tpcCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5ibG9ja3MuaW5zZXJ0KGJsb2NrLnR5cGUsIGJsb2NrLmRhdGEsIHt9LCB0aGlzLmluZGV4LCBmYWxzZSwgZmFsc2UsIGJsb2NrLmlkKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzog0LXRgdGC0Ywg0LLQsNGA0LjQuiDRh9GC0L4g0YfRgtC+INGC0L4g0L/QvtC50LTQtdGCINC90LUg0YLQsNC6XG4gICAgICAgIHRoaXMuZWRpdG9yLmJsb2Nrcy5yZW5kZXIoeyBibG9ja3M6IFtibG9ja10gfSkudGhlbigoKSA9PiAodGhpcy5pc1NraXAgPSBmYWxzZSkpO1xuICAgICAgICB0aGlzLmlzRmlyc3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENvbWJpbmVkQmxvY2soYmxvY2s6IEN1aUJsb2NrKTogQ3VpQmxvY2sge1xuICAgICAgICBjb25zdCBjb21iaW5lZEJsb2NrRGF0YSA9IGJsb2NrLmRhdGEgYXMgeyBwYXJlbnRJZDogc3RyaW5nIH07XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuY29tYmluZWRCbG9ja3MuZ2V0KGNvbWJpbmVkQmxvY2tEYXRhLnBhcmVudElkKTtcblxuICAgICAgICB0aGlzLmJsb2NrSWRzTWFwLnNldChibG9jay5pZCEsIGJsb2NrLmlkISk7XG5cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50RGF0YSA9IHBhcmVudC5kYXRhIGFzIHsgdGV4dEJsb2NrczogQ3VpQmxvY2tbXSB9O1xuICAgICAgICAgICAgcGFyZW50RGF0YS50ZXh0QmxvY2tzLnB1c2goYmxvY2spO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50T2JqZWN0OiBDdWlCbG9jayA9IHtcbiAgICAgICAgICAgIGlkOiBjb21iaW5lZEJsb2NrRGF0YS5wYXJlbnRJZCxcbiAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBpZDogY29tYmluZWRCbG9ja0RhdGEucGFyZW50SWQsXG4gICAgICAgICAgICAgICAgdGV4dEJsb2NrczogW2Jsb2NrXVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY29tYmluZWRCbG9ja3Muc2V0KGNvbWJpbmVkQmxvY2tEYXRhLnBhcmVudElkLCBwYXJlbnRPYmplY3QpO1xuXG4gICAgICAgIHJldHVybiBwYXJlbnRPYmplY3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRCbG9ja0lkc1RvTWFwKGJsb2NrSWRzOiBzdHJpbmdbXSwgYWRkZWRCbG9ja3M6IEN1aUZ1bGxCbG9ja0RhdGFbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIWJsb2NrSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50TG9jYWxJZFdpdGhNYWluSWQoYmxvY2tJZHMsIGFkZGVkQmxvY2tzKTtcbiAgICAgICAgYWRkZWRCbG9ja3MuZm9yRWFjaCgoYmxvY2tEYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ibG9ja0lkc01hcC5zZXQoYmxvY2tEYXRhLmlkLCBibG9ja0lkc1tpbmRleF0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUVsZW1lbnRMb2NhbElkV2l0aE1haW5JZChibG9ja0lkczogc3RyaW5nW10sIGJsb2NrczogQ3VpRnVsbEJsb2NrRGF0YVtdKTogdm9pZCB7XG4gICAgICAgIGJsb2Nrcy5mb3JFYWNoKChibG9jaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYFtkYXRhLWlkPVwiJHtibG9jay5pZH1cIl1gKTtcblxuICAgICAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbGVtZW50LmRhdGFzZXRbJ2lkJ10gPSBibG9ja0lkc1tpbmRleF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3RhcnRCbG9jaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tJZHNNYXAuc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JFbXB0eS5lbWl0KHRoaXMuY2hlY2tJc0VtcHR5KCkpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnJlbmRlcih7IGJsb2NrczogW10gfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRTdGFydEJsb2NrKFxuICAgICAgICAgICAgdGhpcy5lZGl0b3JBcGlJZCgpLFxuICAgICAgICAgICAgYXN5bmMgKGJsb2NrOiBDdWlCbG9jazxDdWlDb21iaW5lZEJsb2NrVG9vbERhdGE+LCBpZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0lkc01hcC5zZXQoaWQsIGlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5wdXNoKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lZGl0b3IucmVuZGVyKHsgYmxvY2tzOiBbYmxvY2tdIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgICAgICAgICAgICAgIHJlY2FsY3VsYXRlSW5kZXhlcyh0aGlzLmVkaXRvci5ibG9ja3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcoKT8uYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVkaXRvci5jYXJldC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBibG9ja3NDb3VudCA9IHRoaXMuZWRpdG9yLmJsb2Nrcz8uZ2V0QmxvY2tzQ291bnQoKSA/PyAwO1xuXG4gICAgICAgIGlmICghYmxvY2tzQ291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgUkVEQUNUT1JfU0VMRUNUT1IgPSAnLmNvZGV4LWVkaXRvcl9fcmVkYWN0b3InO1xuICAgICAgICBjb25zdCByZWRhY3RvclRleHRDb250ZW50ID0gdGhpcy5lZGl0b3JFbGVtZW50XG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvcihSRURBQ1RPUl9TRUxFQ1RPUilcbiAgICAgICAgICAgID8udGV4dENvbnRlbnQ/LnRyaW0oKTtcblxuICAgICAgICByZXR1cm4gIXJlZGFjdG9yVGV4dENvbnRlbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnBvb2xpbmdTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlID0gW107XG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzU2tpcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYmxvY2tJZHNNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgICB0aGlzLmNvbWJpbmVkQmxvY2tzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5wYWdlID0gMDtcbiAgICAgICAgdGhpcy5hZGRlZEJsb2NrcyA9IFtdO1xuICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MgPSBbXTtcbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzID0gW107XG4gICAgICAgIHRoaXMuY2hhbmdlc1F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIH1cbn1cbiIsIjxkaXZcclxuICAgICNlZGl0b3JcclxuICAgIFtpZF09XCJlZGl0b3JJZFwiXHJcbiAgICBkYXRhLWVkaXRvclxyXG4gICAgW2NsYXNzLl9yZWFkb25seV09XCJjb25maWcoKS5yZWFkT25seVwiXHJcbj48L2Rpdj5cclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1lbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9lZGl0b3IvaW50ZXJmYWNlcy9hbmd1bGFyLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTmdFbGVtZW50LCBXaXRoUHJvcGVydGllcyB9IGZyb20gJ0Bhbmd1bGFyL2VsZW1lbnRzJztcclxuXHJcbmV4cG9ydCB0eXBlIEN1aUFuZ3VsYXJFbGVtZW50PFQ+ID0gTmdFbGVtZW50ICYgV2l0aFByb3BlcnRpZXM8VD47XHJcbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2h1bmstZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL2ludGVyZmFjZXMvY2h1bmstZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBDaHVua0Rlc2NyaXB0b3Ige1xyXG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZztcclxuICAgIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaHVua0Rlc2NyaXB0b3JzTWVyZ2VSZXN1bHQge1xyXG4gICAgcmVhZG9ubHkgY2h1bmtzOiBDaHVua0Rlc2NyaXB0b3JbXTtcclxuICAgIHJlYWRvbmx5IHJlbW92ZWRJZHM6IHN0cmluZ1tdO1xyXG59XHJcbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9pbnRlcmZhY2VzL2N1c3RvbS1lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VpQ3VzdG9tRWxlbWVudCB7XHJcbiAgICByZWFkb25seSBzZWxlY3Rvcjogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgY29tcG9uZW50OiBUeXBlPHVua25vd24+O1xyXG59XHJcbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9pbnRlcmZhY2VzL2VkaXRvci1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdWlUb29scyB9IGZyb20gJy4vdG9vbHMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFZGl0b3JEYXRhIHtcclxuICAgIHJlYWRvbmx5IHRvb2xzOiBDdWlUb29scztcclxufVxyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './editor.provider';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9wcm92aWRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZWRpdG9yLnByb3ZpZGVyJztcclxuIl19
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { DestroyRef, Injectable, inject } from '@angular/core';
|
|
2
2
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
3
|
import { forkJoin, of } from 'rxjs';
|
|
4
|
-
import {
|
|
4
|
+
import { CUI_JTEXT_API_SERVICE } from '@cuby-ui/api';
|
|
5
5
|
import { COMBINED_TEXT_BLOCK_ADDED, COMBINED_TEXT_BLOCK_NAME, COMBINED_TEXT_BLOCK_PART, COMBINED_TEXT_BLOCK_REMOVED, COMBINED_TEXT_BLOCK_UPDATED } from '../constants';
|
|
6
6
|
import { generateId } from '../utils/generate-id';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export class CuiEditorService {
|
|
9
9
|
constructor() {
|
|
10
10
|
this.destroyRef = inject(DestroyRef);
|
|
11
|
-
this.jtextService = inject(
|
|
11
|
+
this.jtextService = inject(CUI_JTEXT_API_SERVICE);
|
|
12
12
|
}
|
|
13
13
|
sortEventsByTypes(events) {
|
|
14
14
|
const blocks = {
|
|
@@ -136,4 +136,4 @@ export class CuiEditorService {
|
|
|
136
136
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiEditorService, decorators: [{
|
|
137
137
|
type: Injectable
|
|
138
138
|
}] });
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9zZXJ2aWNlcy9lZGl0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFZLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTVELE9BQU8sRUFDSCx5QkFBeUIsRUFDekIsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4QiwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzlCLE1BQU0sY0FBYyxDQUFDO0FBUXRCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFJbEQsTUFBTSxPQUFPLGdCQUFnQjtJQUQ3QjtRQUVxQixlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLGlCQUFZLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0E2SzlEO0lBM0tVLGlCQUFpQixDQUFDLE1BQTRCO1FBQ2pELE1BQU0sTUFBTSxHQUF1QjtZQUMvQixlQUFlLEVBQUUsRUFBRTtZQUNuQixhQUFhLEVBQUUsRUFBRTtZQUNqQixlQUFlLEVBQUUsRUFBRTtTQUN0QixDQUFDO1FBRUYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzNCLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLHdCQUF3QixFQUFFLENBQUM7Z0JBQzlELE9BQU87WUFDWCxDQUFDO1lBRUQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFD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QyxVQUFVLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBRW5CLE1BQU0sS0FBSyxHQUF1QztnQkFDOUMsRUFBRSxFQUFFLE9BQU87Z0JBQ1gsSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsSUFBSSxFQUFFO29CQUNGLEVBQUUsRUFBRSxPQUFPO29CQUNYLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQztpQkFDM0I7YUFDSixDQUFDO1lBRUYsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7K0dBOUtRLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHR5cGUgRWRpdG9ySlMgZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcclxuaW1wb3J0IHR5cGUgeyBCbG9ja011dGF0aW9uRXZlbnQsIE91dHB1dERhdGEgfSBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xyXG5pbXBvcnQgdHlwZSB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEN1aUJsb2NrLCBDdWlKVGV4dEFwaVNlcnZpY2UgfSBmcm9tICdAY3VieS11aS9hcGknO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsXHJcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsXHJcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsXHJcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1JFTU9WRUQsXHJcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1VQREFURURcclxufSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgICBDdWlDb21iaW5lZEJsb2NrQWRkaW5nRXZlbnQsXHJcbiAgICBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGEsXHJcbiAgICBDdWlDb21iaW5lZFBhcnRCbG9jayxcclxuICAgIEN1aUV2ZW50QWN0aW9uRGF0YSxcclxuICAgIEN1aUZ1bGxCbG9ja0RhdGFcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJy4uL3V0aWxzL2dlbmVyYXRlLWlkJztcclxuaW1wb3J0IHsgRXZlbnRBY3Rpb25zIH0gZnJvbSAnLi9lZGl0b3Itc2VydmljZS5vcHRpb25zJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEN1aUVkaXRvclNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBqdGV4dFNlcnZpY2UgPSBpbmplY3QoQ3VpSlRleHRBcGlTZXJ2aWNlKTtcclxuXHJcbiAgICBwdWJsaWMgc29ydEV2ZW50c0J5VHlwZXMoZXZlbnRzOiBCbG9ja011dGF0aW9uRXZlbnRbXSk6IEN1aUV2ZW50QWN0aW9uRGF0YSB7XHJcbiAgICAgICAgY29uc3QgYmxvY2tzOiBDdWlFdmVudEFjdGlvbkRhdGEgPSB7XHJcbiAgICAgICAgICAgICdibG9jay1yZW1vdmVkJzogW10sXHJcbiAgICAgICAgICAgICdibG9jay1hZGRlZCc6IFtdLFxyXG4gICAgICAgICAgICAnYmxvY2stY2hhbmdlZCc6IFtdXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZXZlbnRzLmZvckVhY2goKGVkaXRvckV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlZGl0b3JFdmVudC5kZXRhaWwudGFyZ2V0Lm5hbWUgPT09IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBldmVudFR5cGUgPSBlZGl0b3JFdmVudC50eXBlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRBY3Rpb25zLnVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZEJsb2NrID0gYmxvY2tzW0V2ZW50QWN0aW9ucy5hZGRdLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgKGJsb2NrKSA9PiBibG9jay5kZXRhaWwudGFyZ2V0LmlkID09PSBlZGl0b3JFdmVudC5kZXRhaWwudGFyZ2V0LmlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkQmxvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT09IEV2ZW50QWN0aW9ucy5yZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlbiA9IGJsb2Nrc1tFdmVudEFjdGlvbnMuYWRkXS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgYmxvY2tzW0V2ZW50QWN0aW9ucy5hZGRdID0gYmxvY2tzW0V2ZW50QWN0aW9ucy5hZGRdLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoYmxvY2spID0+IGJsb2NrLmRldGFpbC50YXJnZXQuaWQgIT09IGVkaXRvckV2ZW50LmRldGFpbC50YXJnZXQuaWRcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IGJsb2Nrc1tFdmVudEFjdGlvbnMuYWRkXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJsb2Nrc1tldmVudFR5cGUgYXMgRXZlbnRBY3Rpb25zXS5wdXNoKGVkaXRvckV2ZW50KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGJsb2NrcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChlZGl0b3JJZDogc3RyaW5nLCBhZGRlZEJsb2NrczogQ3VpRnVsbEJsb2NrRGF0YVtdKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xyXG4gICAgICAgIGNvbnN0IGFkZEJsb2Nrc0JvZHkgPSB7XHJcbiAgICAgICAgICAgIGp0ZXh0Q29udGFpbmVySWQ6IGVkaXRvcklkLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWRkZWRCbG9ja3NbMF0/LmluZGV4LFxyXG4gICAgICAgICAgICBibG9jazogYWRkZWRCbG9ja3MubWFwKChlKSA9PiBlLmJsb2NrKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgYWRkQmxvY2tzJCA9IGFkZGVkQmxvY2tzLmxlbmd0aCA/IHRoaXMuanRleHRTZXJ2aWNlLmNyZWF0ZUJsb2NrcyhhZGRCbG9ja3NCb2R5KSA6IG9mKFtdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGFkZEJsb2NrcyQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChcclxuICAgICAgICB1cGRhdGVkQmxvY2tzOiBDdWlCbG9ja1tdLFxyXG4gICAgICAgIGJsb2NrSWRzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+XHJcbiAgICApOiBPYnNlcnZhYmxlPEN1aUJsb2NrW10+IHtcclxuICAgICAgICBjb25zdCB1cGRhdGVkQmxvY2tzV2l0aElkID0gdXBkYXRlZEJsb2Nrcy5yZWR1Y2UoKGFjYywgYmxvY2spID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYmxvY2tXaXRoSWQgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5ibG9jayxcclxuICAgICAgICAgICAgICAgIGlkOiBibG9ja0lkc01hcC5nZXQoYmxvY2suaWQhKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGJsb2NrV2l0aElkLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBhY2MucHVzaChibG9ja1dpdGhJZCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwgW10gYXMgQ3VpQmxvY2tbXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZUJsb2Nrc0FycmF5ID0gdXBkYXRlZEJsb2Nrc1dpdGhJZC5tYXAoKGJsb2NrKSA9PiB0aGlzLmp0ZXh0U2VydmljZS51cGRhdGVCbG9jayhibG9jaykpO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZUJsb2NrcyQgPSB1cGRhdGVkQmxvY2tzV2l0aElkLmxlbmd0aCA/IGZvcmtKb2luKHVwZGF0ZUJsb2Nrc0FycmF5KSA6IG9mKFtdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUJsb2NrcyQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChcclxuICAgICAgICBlZGl0b3JJZDogc3RyaW5nLFxyXG4gICAgICAgIHJlbW92ZWRCbG9ja3NJZHM6IHN0cmluZ1tdLFxyXG4gICAgICAgIGJsb2NrSWRzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+XHJcbiAgICApOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCByZW1vdmVkQmxvY2tzOiBzdHJpbmdbXSA9IHJlbW92ZWRCbG9ja3NJZHMucmVkdWNlKChibG9ja0lkcywgYmxvY2tJZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBiYWNrZW5kSUQgPSBibG9ja0lkc01hcC5nZXQoYmxvY2tJZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYmFja2VuZElEKSB7XHJcbiAgICAgICAgICAgICAgICBibG9ja0lkcy5wdXNoKGJhY2tlbmRJRCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBibG9ja0lkcztcclxuICAgICAgICB9LCBbXSBhcyBzdHJpbmdbXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVuaXF1ZUJhY2tlbmRJZHMgPSBbLi4ubmV3IFNldChyZW1vdmVkQmxvY2tzKV07XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlQmxvY2tzJCA9XHJcbiAgICAgICAgICAgIHVuaXF1ZUJhY2tlbmRJZHMubGVuZ3RoID8gdGhpcy5qdGV4dFNlcnZpY2UuZGVsZXRlQmxvY2tzKGVkaXRvcklkLCB1bmlxdWVCYWNrZW5kSWRzKSA6IG9mKCk7XHJcblxyXG4gICAgICAgIHJlbW92ZWRCbG9ja3MuZm9yRWFjaCgocmVtb3ZlZEJsb2NrKSA9PiB7XHJcbiAgICAgICAgICAgIGJsb2NrSWRzTWFwLmRlbGV0ZShyZW1vdmVkQmxvY2spO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVtb3ZlQmxvY2tzJDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RnVsbEJsb2NrRGF0YShldmVudDogQmxvY2tNdXRhdGlvbkV2ZW50LCBlZGl0b3JEYXRhOiBPdXRwdXREYXRhKTogQ3VpRnVsbEJsb2NrRGF0YSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuZGV0YWlsLnRhcmdldDtcclxuICAgICAgICBjb25zdCBpbmRleCA9IE51bWJlcih0YXJnZXQuaG9sZGVyLmRhdGFzZXRbJ2luZGV4J10pO1xyXG4gICAgICAgIGNvbnN0IGJsb2NrSW5kZXggPSAoZXZlbnQuZGV0YWlsIGFzIHVua25vd24gYXMgeyBpbmRleDogbnVtYmVyIH0pLmluZGV4O1xyXG4gICAgICAgIGNvbnN0IGJsb2NrVHlwZSA9IHRhcmdldC5uYW1lO1xyXG4gICAgICAgIGNvbnN0IGJsb2NrSWQgPSB0YXJnZXQuaWQ7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEJsb2NrQnlJbmRleCA9IGVkaXRvckRhdGEuYmxvY2tzW2Jsb2NrSW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IGJsb2NrRGF0YSA9IGN1cnJlbnRCbG9ja0J5SW5kZXg/LmlkID09PSBibG9ja0lkID8gZWRpdG9yRGF0YS5ibG9ja3NbYmxvY2tJbmRleF0uZGF0YSA6IHsgdGV4dDogJycgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaW5kZXgsXHJcbiAgICAgICAgICAgIGlkOiBibG9ja0lkLFxyXG4gICAgICAgICAgICBibG9jazoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYmxvY2tUeXBlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogYmxvY2tEYXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcyhcclxuICAgICAgICBlZGl0b3I6IEVkaXRvckpTLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgcmVtb3ZlZENhbGxiYWNrOiAoYmxvY2tJZHM6IHN0cmluZ1tdKSA9PiB2b2lkO1xyXG4gICAgICAgICAgICB1cGRhdGVkQ2FsbGJhY2s6ICh1cGRhdGVkQmxvY2tzOiBDdWlCbG9ja1tdKSA9PiB2b2lkO1xyXG4gICAgICAgICAgICBhZGRlZENhbGxiYWNrOiAoZGF0YTogQ3VpQ29tYmluZWRCbG9ja0FkZGluZ0V2ZW50KSA9PiB2b2lkO1xyXG4gICAgICAgIH1cclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIGVkaXRvci5vbihDT01CSU5FRF9URVhUX0JMT0NLX0FEREVELCBkYXRhLmFkZGVkQ2FsbGJhY2spO1xyXG4gICAgICAgIGVkaXRvci5vbihDT01CSU5FRF9URVhUX0JMT0NLX1VQREFURUQsIGRhdGEudXBkYXRlZENhbGxiYWNrKTtcclxuICAgICAgICBlZGl0b3Iub24oQ09NQklORURfVEVYVF9CTE9DS19SRU1PVkVELCBkYXRhLnJlbW92ZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFN0YXJ0QmxvY2soXHJcbiAgICAgICAgZWRpdG9ySWQ6IHN0cmluZyxcclxuICAgICAgICBjYWxsYmFjazogKGJsb2NrOiBDdWlCbG9jazxDdWlDb21iaW5lZEJsb2NrVG9vbERhdGE+LCBpZDogc3RyaW5nKSA9PiB2b2lkXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBibG9ja0lkID0gZ2VuZXJhdGVJZCgpO1xyXG4gICAgICAgIGNvbnN0IGVtcHR5QmxvY2s6IEN1aUNvbWJpbmVkUGFydEJsb2NrID0ge1xyXG4gICAgICAgICAgICB0eXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIHRleHQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IGJsb2NrSWQsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRUeXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX05BTUVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgYm9keSA9IHtcclxuICAgICAgICAgICAgcG9zaXRpb246IDAsXHJcbiAgICAgICAgICAgIGJsb2NrOiBlbXB0eUJsb2NrLFxyXG4gICAgICAgICAgICBqdGV4dENvbnRhaW5lcklkOiBlZGl0b3JJZFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuanRleHRTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5jcmVhdGVCbG9jayhib2R5KVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaWQpID0+IHtcclxuICAgICAgICAgICAgICAgIGVtcHR5QmxvY2suaWQgPSBpZDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jazogQ3VpQmxvY2s8Q3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhPiA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogYmxvY2tJZCxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogYmxvY2tJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJsb2NrczogW2VtcHR5QmxvY2tdXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhibG9jaywgaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9zZXJ2aWNlcy9lZGl0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFZLE1BQU0sY0FBYyxDQUFDO0FBRS9ELE9BQU8sRUFDSCx5QkFBeUIsRUFDekIsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4QiwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzlCLE1BQU0sY0FBYyxDQUFDO0FBUXRCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFJbEQsTUFBTSxPQUFPLGdCQUFnQjtJQUQ3QjtRQUVxQixlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLGlCQUFZLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7S0E2S2pFO0lBM0tVLGlCQUFpQixDQUFDLE1BQTRCO1FBQ2pELE1BQU0sTUFBTSxHQUF1QjtZQUMvQixlQUFlLEVBQUUsRUFBRTtZQUNuQixhQUFhLEVBQUUsRUFBRTtZQUNqQixlQUFlLEVBQUUsRUFBRTtTQUN0QixDQUFDO1FBRUYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzNCLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLHdCQUF3QixFQUFFLENBQUM7Z0JBQzlELE9BQU87WUFDWCxDQUFDO1lBRUQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFD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QyxVQUFVLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBRW5CLE1BQU0sS0FBSyxHQUF1QztnQkFDOUMsRUFBRSxFQUFFLE9BQU87Z0JBQ1gsSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsSUFBSSxFQUFFO29CQUNGLEVBQUUsRUFBRSxPQUFPO29CQUNYLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQztpQkFDM0I7YUFDSixDQUFDO1lBRUYsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7K0dBOUtRLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHR5cGUgRWRpdG9ySlMgZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcclxuaW1wb3J0IHR5cGUgeyBCbG9ja011dGF0aW9uRXZlbnQsIE91dHB1dERhdGEgfSBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xyXG5pbXBvcnQgdHlwZSB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENVSV9KVEVYVF9BUElfU0VSVklDRSwgQ3VpQmxvY2sgfSBmcm9tICdAY3VieS11aS9hcGknO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsXHJcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsXHJcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsXHJcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1JFTU9WRUQsXHJcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1VQREFURURcclxufSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgICBDdWlDb21iaW5lZEJsb2NrQWRkaW5nRXZlbnQsXHJcbiAgICBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGEsXHJcbiAgICBDdWlDb21iaW5lZFBhcnRCbG9jayxcclxuICAgIEN1aUV2ZW50QWN0aW9uRGF0YSxcclxuICAgIEN1aUZ1bGxCbG9ja0RhdGFcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJy4uL3V0aWxzL2dlbmVyYXRlLWlkJztcclxuaW1wb3J0IHsgRXZlbnRBY3Rpb25zIH0gZnJvbSAnLi9lZGl0b3Itc2VydmljZS5vcHRpb25zJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEN1aUVkaXRvclNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBqdGV4dFNlcnZpY2UgPSBpbmplY3QoQ1VJX0pURVhUX0FQSV9TRVJWSUNFKTtcclxuXHJcbiAgICBwdWJsaWMgc29ydEV2ZW50c0J5VHlwZXMoZXZlbnRzOiBCbG9ja011dGF0aW9uRXZlbnRbXSk6IEN1aUV2ZW50QWN0aW9uRGF0YSB7XHJcbiAgICAgICAgY29uc3QgYmxvY2tzOiBDdWlFdmVudEFjdGlvbkRhdGEgPSB7XHJcbiAgICAgICAgICAgICdibG9jay1yZW1vdmVkJzogW10sXHJcbiAgICAgICAgICAgICdibG9jay1hZGRlZCc6IFtdLFxyXG4gICAgICAgICAgICAnYmxvY2stY2hhbmdlZCc6IFtdXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZXZlbnRzLmZvckVhY2goKGVkaXRvckV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlZGl0b3JFdmVudC5kZXRhaWwudGFyZ2V0Lm5hbWUgPT09IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBldmVudFR5cGUgPSBlZGl0b3JFdmVudC50eXBlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRBY3Rpb25zLnVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZEJsb2NrID0gYmxvY2tzW0V2ZW50QWN0aW9ucy5hZGRdLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgKGJsb2NrKSA9PiBibG9jay5kZXRhaWwudGFyZ2V0LmlkID09PSBlZGl0b3JFdmVudC5kZXRhaWwudGFyZ2V0LmlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkQmxvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT09IEV2ZW50QWN0aW9ucy5yZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlbiA9IGJsb2Nrc1tFdmVudEFjdGlvbnMuYWRkXS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgYmxvY2tzW0V2ZW50QWN0aW9ucy5hZGRdID0gYmxvY2tzW0V2ZW50QWN0aW9ucy5hZGRdLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoYmxvY2spID0+IGJsb2NrLmRldGFpbC50YXJnZXQuaWQgIT09IGVkaXRvckV2ZW50LmRldGFpbC50YXJnZXQuaWRcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IGJsb2Nrc1tFdmVudEFjdGlvbnMuYWRkXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJsb2Nrc1tldmVudFR5cGUgYXMgRXZlbnRBY3Rpb25zXS5wdXNoKGVkaXRvckV2ZW50KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGJsb2NrcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChlZGl0b3JJZDogc3RyaW5nLCBhZGRlZEJsb2NrczogQ3VpRnVsbEJsb2NrRGF0YVtdKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xyXG4gICAgICAgIGNvbnN0IGFkZEJsb2Nrc0JvZHkgPSB7XHJcbiAgICAgICAgICAgIGp0ZXh0Q29udGFpbmVySWQ6IGVkaXRvcklkLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWRkZWRCbG9ja3NbMF0/LmluZGV4LFxyXG4gICAgICAgICAgICBibG9jazogYWRkZWRCbG9ja3MubWFwKChlKSA9PiBlLmJsb2NrKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgYWRkQmxvY2tzJCA9IGFkZGVkQmxvY2tzLmxlbmd0aCA/IHRoaXMuanRleHRTZXJ2aWNlLmNyZWF0ZUJsb2NrcyhhZGRCbG9ja3NCb2R5KSA6IG9mKFtdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGFkZEJsb2NrcyQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChcclxuICAgICAgICB1cGRhdGVkQmxvY2tzOiBDdWlCbG9ja1tdLFxyXG4gICAgICAgIGJsb2NrSWRzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+XHJcbiAgICApOiBPYnNlcnZhYmxlPEN1aUJsb2NrW10+IHtcclxuICAgICAgICBjb25zdCB1cGRhdGVkQmxvY2tzV2l0aElkID0gdXBkYXRlZEJsb2Nrcy5yZWR1Y2UoKGFjYywgYmxvY2spID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYmxvY2tXaXRoSWQgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5ibG9jayxcclxuICAgICAgICAgICAgICAgIGlkOiBibG9ja0lkc01hcC5nZXQoYmxvY2suaWQhKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGJsb2NrV2l0aElkLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBhY2MucHVzaChibG9ja1dpdGhJZCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwgW10gYXMgQ3VpQmxvY2tbXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZUJsb2Nrc0FycmF5ID0gdXBkYXRlZEJsb2Nrc1dpdGhJZC5tYXAoKGJsb2NrKSA9PiB0aGlzLmp0ZXh0U2VydmljZS51cGRhdGVCbG9jayhibG9jaykpO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZUJsb2NrcyQgPSB1cGRhdGVkQmxvY2tzV2l0aElkLmxlbmd0aCA/IGZvcmtKb2luKHVwZGF0ZUJsb2Nrc0FycmF5KSA6IG9mKFtdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUJsb2NrcyQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChcclxuICAgICAgICBlZGl0b3JJZDogc3RyaW5nLFxyXG4gICAgICAgIHJlbW92ZWRCbG9ja3NJZHM6IHN0cmluZ1tdLFxyXG4gICAgICAgIGJsb2NrSWRzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+XHJcbiAgICApOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCByZW1vdmVkQmxvY2tzOiBzdHJpbmdbXSA9IHJlbW92ZWRCbG9ja3NJZHMucmVkdWNlKChibG9ja0lkcywgYmxvY2tJZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBiYWNrZW5kSUQgPSBibG9ja0lkc01hcC5nZXQoYmxvY2tJZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYmFja2VuZElEKSB7XHJcbiAgICAgICAgICAgICAgICBibG9ja0lkcy5wdXNoKGJhY2tlbmRJRCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBibG9ja0lkcztcclxuICAgICAgICB9LCBbXSBhcyBzdHJpbmdbXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVuaXF1ZUJhY2tlbmRJZHMgPSBbLi4ubmV3IFNldChyZW1vdmVkQmxvY2tzKV07XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlQmxvY2tzJCA9XHJcbiAgICAgICAgICAgIHVuaXF1ZUJhY2tlbmRJZHMubGVuZ3RoID8gdGhpcy5qdGV4dFNlcnZpY2UuZGVsZXRlQmxvY2tzKGVkaXRvcklkLCB1bmlxdWVCYWNrZW5kSWRzKSA6IG9mKCk7XHJcblxyXG4gICAgICAgIHJlbW92ZWRCbG9ja3MuZm9yRWFjaCgocmVtb3ZlZEJsb2NrKSA9PiB7XHJcbiAgICAgICAgICAgIGJsb2NrSWRzTWFwLmRlbGV0ZShyZW1vdmVkQmxvY2spO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVtb3ZlQmxvY2tzJDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RnVsbEJsb2NrRGF0YShldmVudDogQmxvY2tNdXRhdGlvbkV2ZW50LCBlZGl0b3JEYXRhOiBPdXRwdXREYXRhKTogQ3VpRnVsbEJsb2NrRGF0YSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuZGV0YWlsLnRhcmdldDtcclxuICAgICAgICBjb25zdCBpbmRleCA9IE51bWJlcih0YXJnZXQuaG9sZGVyLmRhdGFzZXRbJ2luZGV4J10pO1xyXG4gICAgICAgIGNvbnN0IGJsb2NrSW5kZXggPSAoZXZlbnQuZGV0YWlsIGFzIHVua25vd24gYXMgeyBpbmRleDogbnVtYmVyIH0pLmluZGV4O1xyXG4gICAgICAgIGNvbnN0IGJsb2NrVHlwZSA9IHRhcmdldC5uYW1lO1xyXG4gICAgICAgIGNvbnN0IGJsb2NrSWQgPSB0YXJnZXQuaWQ7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEJsb2NrQnlJbmRleCA9IGVkaXRvckRhdGEuYmxvY2tzW2Jsb2NrSW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IGJsb2NrRGF0YSA9IGN1cnJlbnRCbG9ja0J5SW5kZXg/LmlkID09PSBibG9ja0lkID8gZWRpdG9yRGF0YS5ibG9ja3NbYmxvY2tJbmRleF0uZGF0YSA6IHsgdGV4dDogJycgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaW5kZXgsXHJcbiAgICAgICAgICAgIGlkOiBibG9ja0lkLFxyXG4gICAgICAgICAgICBibG9jazoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYmxvY2tUeXBlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogYmxvY2tEYXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcyhcclxuICAgICAgICBlZGl0b3I6IEVkaXRvckpTLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgcmVtb3ZlZENhbGxiYWNrOiAoYmxvY2tJZHM6IHN0cmluZ1tdKSA9PiB2b2lkO1xyXG4gICAgICAgICAgICB1cGRhdGVkQ2FsbGJhY2s6ICh1cGRhdGVkQmxvY2tzOiBDdWlCbG9ja1tdKSA9PiB2b2lkO1xyXG4gICAgICAgICAgICBhZGRlZENhbGxiYWNrOiAoZGF0YTogQ3VpQ29tYmluZWRCbG9ja0FkZGluZ0V2ZW50KSA9PiB2b2lkO1xyXG4gICAgICAgIH1cclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIGVkaXRvci5vbihDT01CSU5FRF9URVhUX0JMT0NLX0FEREVELCBkYXRhLmFkZGVkQ2FsbGJhY2spO1xyXG4gICAgICAgIGVkaXRvci5vbihDT01CSU5FRF9URVhUX0JMT0NLX1VQREFURUQsIGRhdGEudXBkYXRlZENhbGxiYWNrKTtcclxuICAgICAgICBlZGl0b3Iub24oQ09NQklORURfVEVYVF9CTE9DS19SRU1PVkVELCBkYXRhLnJlbW92ZWRDYWxsYmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFN0YXJ0QmxvY2soXHJcbiAgICAgICAgZWRpdG9ySWQ6IHN0cmluZyxcclxuICAgICAgICBjYWxsYmFjazogKGJsb2NrOiBDdWlCbG9jazxDdWlDb21iaW5lZEJsb2NrVG9vbERhdGE+LCBpZDogc3RyaW5nKSA9PiB2b2lkXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBibG9ja0lkID0gZ2VuZXJhdGVJZCgpO1xyXG4gICAgICAgIGNvbnN0IGVtcHR5QmxvY2s6IEN1aUNvbWJpbmVkUGFydEJsb2NrID0ge1xyXG4gICAgICAgICAgICB0eXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIHRleHQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IGJsb2NrSWQsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRUeXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX05BTUVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgYm9keSA9IHtcclxuICAgICAgICAgICAgcG9zaXRpb246IDAsXHJcbiAgICAgICAgICAgIGJsb2NrOiBlbXB0eUJsb2NrLFxyXG4gICAgICAgICAgICBqdGV4dENvbnRhaW5lcklkOiBlZGl0b3JJZFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuanRleHRTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5jcmVhdGVCbG9jayhib2R5KVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaWQpID0+IHtcclxuICAgICAgICAgICAgICAgIGVtcHR5QmxvY2suaWQgPSBpZDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jazogQ3VpQmxvY2s8Q3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhPiA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogYmxvY2tJZCxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogYmxvY2tJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJsb2NrczogW2VtcHR5QmxvY2tdXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhibG9jaywgaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|