@elderbyte/ngx-starter 13.5.2 → 13.7.1
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/esm2020/lib/common/enums/elder-enum-translation.service.mjs +3 -3
- package/esm2020/lib/common/forms/form-field-base.component.mjs +3 -3
- package/esm2020/lib/common/forms/multi-model-base.component.mjs +3 -3
- package/esm2020/lib/common/forms/template-composite-control.mjs +3 -3
- package/esm2020/lib/common/forms/value-accessor-base.mjs +3 -3
- package/esm2020/lib/common/http/http-client-builder.service.mjs +3 -3
- package/esm2020/lib/common/http/http-client-pristine.mjs +3 -3
- package/esm2020/lib/common/http/transfer/data-transfer-factory.mjs +3 -3
- package/esm2020/lib/common/url/elder-url-fragment-params.service.mjs +3 -3
- package/esm2020/lib/common/utils/collection-util.mjs +4 -1
- package/esm2020/lib/components/access-denied/elder-access-denied.component.mjs +3 -3
- package/esm2020/lib/components/access-denied/elder-access-denied.module.mjs +4 -4
- package/esm2020/lib/components/auditing/audited-entity/elder-audited-entity.component.mjs +3 -3
- package/esm2020/lib/components/auditing/elder-audit.module.mjs +4 -4
- package/esm2020/lib/components/button-group/elder-button-group/elder-button-group.component.mjs +3 -3
- package/esm2020/lib/components/button-group/elder-button-group.module.mjs +4 -4
- package/esm2020/lib/components/card-organizer/card-organizer/elder-card-organizer.component.mjs +3 -3
- package/esm2020/lib/components/card-organizer/card-organizer/elder-stack-card.directive.mjs +3 -3
- package/esm2020/lib/components/card-organizer/card-stack/elder-card-stack.component.mjs +3 -3
- package/esm2020/lib/components/card-organizer/elder-card-organizer.module.mjs +4 -4
- package/esm2020/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.mjs +3 -3
- package/esm2020/lib/components/cards/elder-card/elder-card.component.mjs +18 -18
- package/esm2020/lib/components/cards/elder-card/elder-card.module.mjs +4 -4
- package/esm2020/lib/components/connectivity/elder-connectivity.module.mjs +4 -4
- package/esm2020/lib/components/connectivity/elder-connectivity.service.mjs +3 -3
- package/esm2020/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.mjs +3 -3
- package/esm2020/lib/components/containers/elder-containers.module.mjs +4 -4
- package/esm2020/lib/components/containers/elder-scroll-container/elder-scroll-container.component.mjs +3 -3
- package/esm2020/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +3 -3
- package/esm2020/lib/components/csv/elder-csv-stream-exporter-builder.service.mjs +3 -3
- package/esm2020/lib/components/csv/elder-csv.module.mjs +4 -4
- package/esm2020/lib/components/currency/elder-currency.module.mjs +4 -4
- package/esm2020/lib/components/currency/elder-currency.pipe.mjs +3 -3
- package/esm2020/lib/components/data-transfer/elder-data-transfer.module.mjs +4 -4
- package/esm2020/lib/components/data-transfer/elder-data-transfer.service.mjs +3 -3
- package/esm2020/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.mjs +3 -3
- package/esm2020/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.mjs +3 -3
- package/esm2020/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.mjs +3 -3
- package/esm2020/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.mjs +3 -3
- package/esm2020/lib/components/data-view/base/elder-data-view-base.mjs +3 -3
- package/esm2020/lib/components/data-view/base/elder-data-view-base.module.mjs +4 -4
- package/esm2020/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.mjs +3 -3
- package/esm2020/lib/components/data-view/common/elder-data-common.module.mjs +4 -4
- package/esm2020/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.mjs +6 -6
- package/esm2020/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.mjs +3 -3
- package/esm2020/lib/components/data-view/common/selection/data-context-selection.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.mjs +3 -3
- package/esm2020/lib/components/data-view/grid/elder-grid/elder-grid.component.mjs +9 -9
- package/esm2020/lib/components/data-view/grid/elder-grid.module.mjs +4 -4
- package/esm2020/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.mjs +3 -3
- package/esm2020/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.module.mjs +4 -4
- package/esm2020/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-number-cell.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-paginator-intl.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table/elder-table-toolbar.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table/elder-table.component.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table-column.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table-extension.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table-root.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table-row.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table-sort.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table.module.mjs +4 -4
- package/esm2020/lib/components/data-view/table/model/elder-table-model.mjs +3 -3
- package/esm2020/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.mjs +3 -3
- package/esm2020/lib/components/dialogs/elder-dialog.module.mjs +7 -7
- package/esm2020/lib/components/dialogs/elder-dialog.service.mjs +3 -3
- package/esm2020/lib/components/dialogs/question-dialog/elder-question-dialog.component.mjs +3 -3
- package/esm2020/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.mjs +3 -3
- package/esm2020/lib/components/dialogs/selection-dialog/elder-selection-dialog.directive.mjs +3 -3
- package/esm2020/lib/components/errors/elder-error.module.mjs +4 -4
- package/esm2020/lib/components/errors/exception-detail/elder-exception-detail.component.mjs +3 -3
- package/esm2020/lib/components/expand-toggle-button/elder-expand-toggle-button.component.mjs +3 -3
- package/esm2020/lib/components/expand-toggle-button/elder-expand-toggle-button.module.mjs +4 -4
- package/esm2020/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +3 -3
- package/esm2020/lib/components/files/elder-file-drop-zone.directive.mjs +3 -3
- package/esm2020/lib/components/files/elder-file-select.directive.mjs +3 -3
- package/esm2020/lib/components/files/elder-file.module.mjs +4 -4
- package/esm2020/lib/components/files/file-select/file-select.component.mjs +3 -3
- package/esm2020/lib/components/files/file-upload/file-upload.component.mjs +3 -3
- package/esm2020/lib/components/forms/clipboard/elder-clipboard.service.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-clipboard-put.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-delayed-focus.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-form-field-dense.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-form-field-label.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-form-field-no-spinner.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-forms-directives.module.mjs +13 -13
- package/esm2020/lib/components/forms/directives/elder-key-event.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-max.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-min.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-next-focusable.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-plug-parent-form.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-stop-event-propagation.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-tab-focus-trap.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-touched.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-triple-state-checkbox.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/validation/elder-multiple-of.validator.mjs +3 -3
- package/esm2020/lib/components/forms/directives/validation/elder-required-ignore-zero.validator.mjs +3 -3
- package/esm2020/lib/components/forms/elder-forms.module.mjs +4 -4
- package/esm2020/lib/components/forms/search/elder-search-context.directive.mjs +3 -3
- package/esm2020/lib/components/forms/search/elder-search-input.directive.mjs +3 -3
- package/esm2020/lib/components/forms/search/elder-search.module.mjs +4 -4
- package/esm2020/lib/components/forms/search/search-box/elder-search-box.component.mjs +3 -3
- package/esm2020/lib/components/forms/search/search-box/elder-search-panel.component.mjs +3 -3
- package/esm2020/lib/components/global-search/elder-global-search.component.mjs +3 -3
- package/esm2020/lib/components/global-search/elder-global-search.module.mjs +4 -4
- package/esm2020/lib/components/global-search/elder-global-search.service.mjs +3 -3
- package/esm2020/lib/components/graph/elder-progress-bar/elder-progress-bar.component.mjs +3 -3
- package/esm2020/lib/components/graph/elder-progress-bar/elder-progress-bar.module.mjs +4 -4
- package/esm2020/lib/components/headers/elder-header/elder-header.component.mjs +3 -3
- package/esm2020/lib/components/headers/elder-header.module.mjs +4 -4
- package/esm2020/lib/components/http-support/elder-http-client.service.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-i18n-entities.module.mjs +4 -4
- package/esm2020/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-localized-input-dialog.service.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-localized-text-column.directive.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-localized-texts.directive.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/picker/i18n-pick-async.pipe.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/picker/i18n-pick.pipe.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/picker/localisation-picker.service.mjs +3 -3
- package/esm2020/lib/components/i18n/language/elder-language-interceptor.mjs +3 -3
- package/esm2020/lib/components/i18n/language/elder-language.module.mjs +4 -4
- package/esm2020/lib/components/i18n/language/elder-language.service.mjs +3 -3
- package/esm2020/lib/components/i18n/language/language-switcher/elder-language-switcher.component.mjs +3 -3
- package/esm2020/lib/components/i18n/locales/elder-locales-de-ch.module.mjs +4 -4
- package/esm2020/lib/components/iframes/elder-iframe.module.mjs +4 -4
- package/esm2020/lib/components/iframes/iframe-close.directive.mjs +3 -3
- package/esm2020/lib/components/iframes/iframe-dialog/iframe-dialog.component.mjs +3 -3
- package/esm2020/lib/components/iframes/iframe-host/iframe-host.component.mjs +3 -3
- package/esm2020/lib/components/iframes/iframe-side-content/iframe-side-content.component.mjs +3 -3
- package/esm2020/lib/components/iframes/iframe.service.mjs +3 -3
- package/esm2020/lib/components/infinitescroll/elder-infinite-autocomplete.directive.mjs +3 -3
- package/esm2020/lib/components/infinitescroll/elder-infinite-scroll.directive.mjs +3 -3
- package/esm2020/lib/components/infinitescroll/elder-infinite-scroll.module.mjs +7 -7
- package/esm2020/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete.component.mjs +3 -3
- package/esm2020/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +3 -3
- package/esm2020/lib/components/input/autocomplete/elder-autocomplete.module.mjs +4 -4
- package/esm2020/lib/components/labels/elder-labels.module.mjs +4 -4
- package/esm2020/lib/components/labels/labels-input/labels-input.component.mjs +3 -3
- package/esm2020/lib/components/measures/dimensions-input/elder-dimensions-input.component.mjs +3 -3
- package/esm2020/lib/components/measures/directives/elder-unit-select.directive.mjs +3 -3
- package/esm2020/lib/components/measures/elder-measures.module.mjs +8 -8
- package/esm2020/lib/components/measures/elder-quantity-transform.pipe.mjs +3 -3
- package/esm2020/lib/components/measures/elder-quantity.pipe.mjs +3 -3
- package/esm2020/lib/components/measures/elder-unit.service.mjs +3 -3
- package/esm2020/lib/components/measures/quantity-input/elder-quantity-input.component.mjs +3 -3
- package/esm2020/lib/components/measures/util/elder-quantity.service.mjs +3 -3
- package/esm2020/lib/components/multi-autocomplete/elder-multi-auto-complete.module.mjs +4 -4
- package/esm2020/lib/components/multi-autocomplete/elder-multi-autocomplete.component.mjs +3 -3
- package/esm2020/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.mjs +3 -3
- package/esm2020/lib/components/navigation/bread-crumbs/elder-bread-crumbs.module.mjs +4 -4
- package/esm2020/lib/components/navigation/nav/elder-nav.module.mjs +4 -4
- package/esm2020/lib/components/navigation/nav/nav-group/elder-nav-group.component.mjs +3 -3
- package/esm2020/lib/components/navigation/nav/nav-link/elder-nav-link.component.mjs +3 -3
- package/esm2020/lib/components/navigation/nav/nav-list/elder-nav-list.component.mjs +3 -3
- package/esm2020/lib/components/navigation/toolbar/elder-toolbar-column.directive.mjs +3 -3
- package/esm2020/lib/components/navigation/toolbar/elder-toolbar.module.mjs +4 -4
- package/esm2020/lib/components/navigation/toolbar/elder-toolbar.service.mjs +3 -3
- package/esm2020/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.mjs +3 -3
- package/esm2020/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.mjs +3 -3
- package/esm2020/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.service.mjs +3 -3
- package/esm2020/lib/components/overlays/elder-overlay-origin.directive.mjs +3 -3
- package/esm2020/lib/components/overlays/elder-overlay-trigger.directive.mjs +3 -3
- package/esm2020/lib/components/overlays/elder-overlay.component.mjs +3 -3
- package/esm2020/lib/components/overlays/elder-overlay.module.mjs +4 -4
- package/esm2020/lib/components/panels/card-panel/elder-card-panel.component.mjs +3 -3
- package/esm2020/lib/components/panels/elder-panel.module.mjs +4 -4
- package/esm2020/lib/components/panels/flat/elder-panel.component.mjs +3 -3
- package/esm2020/lib/components/select/auto-select-first.directive.mjs +126 -0
- package/esm2020/lib/components/select/elder-entity-value-accessor.mjs +12 -0
- package/esm2020/lib/components/select/elder-select/elder-select.component.mjs +109 -159
- package/esm2020/lib/components/select/elder-select-base.mjs +22 -10
- package/esm2020/lib/components/select/elder-select-chip.directive.mjs +3 -3
- package/esm2020/lib/components/select/elder-select-value.directive.mjs +3 -3
- package/esm2020/lib/components/select/elder-select.module.mjs +15 -9
- package/esm2020/lib/components/select/multi/elder-multi-select-base.mjs +102 -44
- package/esm2020/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +15 -15
- package/esm2020/lib/components/select/popup/selection-model-popup.directive.mjs +3 -3
- package/esm2020/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.mjs +3 -3
- package/esm2020/lib/components/select/select-on-tab.directive.mjs +22 -11
- package/esm2020/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.mjs +3 -3
- package/esm2020/lib/components/select-chip-list/elder-chip-list-select.module.mjs +4 -4
- package/esm2020/lib/components/select-list/elder-select-list.module.mjs +4 -4
- package/esm2020/lib/components/select-list/select-list/elder-select-list.component.mjs +3 -3
- package/esm2020/lib/components/select-list/select-list-item/elder-select-list-item.component.mjs +3 -3
- package/esm2020/lib/components/shell/drawers/elder-route-outlet-drawer.service.mjs +3 -3
- package/esm2020/lib/components/shell/drawers/elder-router-outlet.service.mjs +3 -3
- package/esm2020/lib/components/shell/elder-shell-slot.directive.mjs +3 -3
- package/esm2020/lib/components/shell/elder-shell.module.mjs +4 -4
- package/esm2020/lib/components/shell/elder-shell.service.mjs +3 -3
- package/esm2020/lib/components/shell/header/elder-app-header/elder-app-header.component.mjs +3 -3
- package/esm2020/lib/components/shell/shell/elder-shell.component.mjs +12 -12
- package/esm2020/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.mjs +3 -3
- package/esm2020/lib/components/tabs/elder-tab/elder-tab.directive.mjs +3 -3
- package/esm2020/lib/components/tabs/elder-tab-group-routing/elder-tab-group-routing.directive.mjs +3 -3
- package/esm2020/lib/components/tabs/elder-tab.module.mjs +4 -4
- package/esm2020/lib/components/time/date-adapters/custom-date-adapter.mjs +3 -3
- package/esm2020/lib/components/time/duration/elder-duration-input/elder-duration-input.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-date-switcher/elder-date-switcher.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-date-time-input/elder-date-time-input.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-interval-input/elder-interval-input.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-local-date-input/elder-local-date-input.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-local-time-input/elder-local-time-input.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-time.module.mjs +8 -8
- package/esm2020/lib/components/time/period/elder-period-input/elder-period-input.component.mjs +3 -3
- package/esm2020/lib/components/toasts/elder-toast.module.mjs +4 -4
- package/esm2020/lib/components/toasts/elder-toast.service.mjs +9 -9
- package/esm2020/lib/components/toasts/standard-toast/standard-toast.component.mjs +3 -3
- package/esm2020/lib/components/url-fragment/elder-url-fragment.module.mjs +4 -4
- package/esm2020/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.mjs +3 -3
- package/esm2020/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.mjs +3 -3
- package/esm2020/lib/components/viewers/elder-viewers.module.mjs +4 -4
- package/esm2020/lib/features/event-source/elder-event-source.service.mjs +3 -3
- package/esm2020/lib/features/kafent/access-token-provider.mjs +3 -3
- package/esm2020/lib/features/kafent/kafent-config.mjs +3 -3
- package/esm2020/lib/features/kafent/kafent-event-stream.mjs +3 -3
- package/esm2020/lib/features/kafent/kafent-event.service.mjs +3 -3
- package/esm2020/lib/features/kafent/kafent.module.mjs +4 -4
- package/esm2020/lib/features/kafent/sse/kafent-event-stream-sse.service.mjs +3 -3
- package/esm2020/lib/pipes/bytes.pipe.mjs +3 -3
- package/esm2020/lib/pipes/elder-pipes.module.mjs +7 -7
- package/esm2020/lib/pipes/elder-repeat.pipe.mjs +3 -3
- package/esm2020/lib/pipes/elder-round.pipe.mjs +3 -3
- package/esm2020/lib/pipes/elder-safe-url.pipe.mjs +3 -3
- package/esm2020/lib/pipes/iso-duration.pipe.mjs +3 -3
- package/esm2020/lib/pipes/iso-interval-parse.pipe.mjs +3 -3
- package/esm2020/lib/pipes/iso-interval.pipe.mjs +3 -3
- package/esm2020/lib/pipes/time-ago.pipe.mjs +3 -3
- package/esm2020/lib/pipes/time-duration.pipe.mjs +3 -3
- package/esm2020/lib/pipes/weight.pipe.mjs +3 -3
- package/fesm2015/elderbyte-ngx-starter.mjs +1185 -1022
- package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
- package/fesm2020/elderbyte-ngx-starter.mjs +1185 -1020
- package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/common/utils/collection-util.d.ts +1 -0
- package/lib/components/select/auto-select-first.directive.d.ts +54 -0
- package/lib/components/select/elder-entity-value-accessor.d.ts +27 -0
- package/lib/components/select/elder-select/elder-select.component.d.ts +42 -48
- package/lib/components/select/elder-select-base.d.ts +21 -15
- package/lib/components/select/elder-select.module.d.ts +22 -20
- package/lib/components/select/multi/elder-multi-select-base.d.ts +29 -15
- package/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.d.ts +11 -11
- package/lib/components/select/select-on-tab.directive.d.ts +7 -6
- package/package.json +3 -3
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, forwardRef, Input, Output, } from '@angular/core';
|
|
2
2
|
import { buildFormIntegrationProviders } from '../../../common/forms/template-composite-control';
|
|
3
3
|
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
4
|
-
import { BehaviorSubject, combineLatest,
|
|
5
|
-
import {
|
|
4
|
+
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
|
|
5
|
+
import { map, takeUntil, tap, skip, filter, } from 'rxjs/operators';
|
|
6
6
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
7
|
-
import { NgControl } from '@angular/forms';
|
|
8
|
-
import { DataSourceAdapter } from '../../../common/data/datasource/data-source-adapter';
|
|
9
7
|
import { ELDER_SELECT_BASE, ElderSelectBase, ElderSelectComponentState } from '../elder-select-base';
|
|
8
|
+
import { AutoSelectFirstDirective } from '../auto-select-first.directive';
|
|
10
9
|
import * as i0 from "@angular/core";
|
|
11
10
|
import * as i1 from "@angular/material/form-field";
|
|
12
11
|
import * as i2 from "@angular/material/icon";
|
|
@@ -21,7 +20,7 @@ import * as i10 from "../select-on-tab.directive";
|
|
|
21
20
|
import * as i11 from "../../input/autocomplete/elder-autocomplete.directive";
|
|
22
21
|
import * as i12 from "../../forms/directives/elder-stop-event-propagation.directive";
|
|
23
22
|
import * as i13 from "@ngx-translate/core";
|
|
24
|
-
class
|
|
23
|
+
class EntityContext {
|
|
25
24
|
constructor(value, hintText, displayText) {
|
|
26
25
|
this.value = value;
|
|
27
26
|
this.hintText = hintText;
|
|
@@ -44,9 +43,8 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
44
43
|
* Constructor *
|
|
45
44
|
* *
|
|
46
45
|
**************************************************************************/
|
|
47
|
-
constructor(zone
|
|
46
|
+
constructor(zone) {
|
|
48
47
|
super(zone);
|
|
49
|
-
this.injector = injector;
|
|
50
48
|
/***************************************************************************
|
|
51
49
|
* *
|
|
52
50
|
* Fields *
|
|
@@ -59,18 +57,20 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
59
57
|
* String to display for the 'nothing' / null value.
|
|
60
58
|
*/
|
|
61
59
|
this.nullDisplay = '-';
|
|
62
|
-
this.
|
|
63
|
-
this._valueId = null;
|
|
60
|
+
this.entity$ = new BehaviorSubject(undefined);
|
|
64
61
|
this._autocomplete = false;
|
|
65
62
|
this.unsubscribe$ = new Subject();
|
|
66
|
-
this.
|
|
67
|
-
this.
|
|
68
|
-
|
|
69
|
-
|
|
63
|
+
this.entityIdChange = this.valueChange.pipe(map(v => this.entityIdFromValue(v)));
|
|
64
|
+
this.entityChange = this.entity$.pipe(skip(1) // Skip the initial NULL value
|
|
65
|
+
);
|
|
66
|
+
this.entityIdUpdated = this.valueUpdated.pipe(map(value => this.entityIdFromValue(value)));
|
|
67
|
+
this.entityUpdated = combineLatest([this.entityIdUpdated, this.entity$]).pipe(filter(([updatedId, entity]) => this.getEntityId(entity) === updatedId), map(([updatedId, entity]) => entity));
|
|
68
|
+
this.entityWrapped$ = combineLatest([
|
|
69
|
+
this.entity$,
|
|
70
70
|
this.displayPropertyResolver$,
|
|
71
71
|
this.hintPropertyResolver$
|
|
72
|
-
]).pipe(map(([value, dPR, hPR]) => new
|
|
73
|
-
this.inputText$ = this.
|
|
72
|
+
]).pipe(map(([value, dPR, hPR]) => new EntityContext(value, hPR(value), dPR(value))));
|
|
73
|
+
this.inputText$ = this.entityWrapped$.pipe(takeUntil(this.unsubscribe$), tap(valueContext => this.entityContext = valueContext), map(valueContext => {
|
|
74
74
|
if (valueContext.value) {
|
|
75
75
|
return valueContext.displayText;
|
|
76
76
|
}
|
|
@@ -85,17 +85,6 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
85
85
|
* *
|
|
86
86
|
**************************************************************************/
|
|
87
87
|
ngOnInit() {
|
|
88
|
-
// Inject the ngControl/ngModel
|
|
89
|
-
this.ngControl = this.injector.get(NgControl, null);
|
|
90
|
-
this.ensureExistingValueNgControl(this.value);
|
|
91
|
-
if (this.autoSelectFirst) {
|
|
92
|
-
this.handleAutoSelectFirst();
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
ngAfterViewInit() {
|
|
96
|
-
setTimeout(() => {
|
|
97
|
-
this.ngModelInitialized = true;
|
|
98
|
-
}, 10);
|
|
99
88
|
}
|
|
100
89
|
ngOnDestroy() {
|
|
101
90
|
this.unsubscribe$.next();
|
|
@@ -122,39 +111,29 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
122
111
|
get allowNull() {
|
|
123
112
|
return this._allowNull;
|
|
124
113
|
}
|
|
125
|
-
/**
|
|
126
|
-
* After data is loaded into this select, ensure that
|
|
127
|
-
* a value is selected or select the first automatically.
|
|
128
|
-
*/
|
|
129
|
-
set autoSelectFirst(val) {
|
|
130
|
-
this._autoSelectFirst = coerceBooleanProperty(val);
|
|
131
|
-
}
|
|
132
|
-
get autoSelectFirst() {
|
|
133
|
-
return this._autoSelectFirst;
|
|
134
|
-
}
|
|
135
114
|
/***************************************************************************
|
|
136
115
|
* *
|
|
137
116
|
* Properties *
|
|
138
117
|
* *
|
|
139
118
|
**************************************************************************/
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
*/
|
|
144
|
-
set valueId(id) {
|
|
145
|
-
if (id !== this._valueId) {
|
|
146
|
-
this._valueId = id;
|
|
147
|
-
this.selectValueById(id);
|
|
148
|
-
}
|
|
119
|
+
set entity(entity) {
|
|
120
|
+
this.entity$.next(entity);
|
|
121
|
+
this.writeValueInternal(this.entityToValue(entity));
|
|
149
122
|
}
|
|
150
|
-
get
|
|
151
|
-
|
|
152
|
-
|
|
123
|
+
get entity() {
|
|
124
|
+
return this.entity$.getValue();
|
|
125
|
+
}
|
|
126
|
+
set entityId(id) {
|
|
127
|
+
if (this.valueAsId) {
|
|
128
|
+
this.writeValueInternal(id);
|
|
153
129
|
}
|
|
154
130
|
else {
|
|
155
|
-
|
|
131
|
+
this.selectEntityById(id);
|
|
156
132
|
}
|
|
157
133
|
}
|
|
134
|
+
get entityId() {
|
|
135
|
+
return this.entityIdFromValue(this.value);
|
|
136
|
+
}
|
|
158
137
|
set hintProperty(property) {
|
|
159
138
|
this.hintPropertyResolver = (value => this.propertyStringValue(value, property));
|
|
160
139
|
}
|
|
@@ -168,8 +147,8 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
168
147
|
**************************************************************************/
|
|
169
148
|
onInputBlur(event) {
|
|
170
149
|
const input = event.target;
|
|
171
|
-
if (this.
|
|
172
|
-
input.value = this.
|
|
150
|
+
if (this.entityContext.value) {
|
|
151
|
+
input.value = this.entityContext.displayText;
|
|
173
152
|
}
|
|
174
153
|
else {
|
|
175
154
|
input.value = null;
|
|
@@ -177,7 +156,7 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
177
156
|
}
|
|
178
157
|
get isOptionDisabledInternalFn() {
|
|
179
158
|
return (option) => {
|
|
180
|
-
if (!this.
|
|
159
|
+
if (!this.isEntitySelected(option)) {
|
|
181
160
|
if (this.isOptionDisabledFn) {
|
|
182
161
|
return this.isOptionDisabledFn(option);
|
|
183
162
|
}
|
|
@@ -224,15 +203,15 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
224
203
|
this.togglePanel(autoTrigger);
|
|
225
204
|
}
|
|
226
205
|
onOptionSelected(selectedValue) {
|
|
227
|
-
if (this.
|
|
206
|
+
if (this.isEntitySelected(selectedValue)) {
|
|
228
207
|
this.writeValueInternal(null); // HACK: Ensure we trigger view redraw
|
|
229
208
|
}
|
|
230
|
-
this.
|
|
209
|
+
this.updateValueByEntity(selectedValue);
|
|
231
210
|
}
|
|
232
211
|
openSelectionPopup(event) {
|
|
233
212
|
if (this.selectionPopup) {
|
|
234
|
-
this.selectionPopup.choose(this.filters, this.sorts).subscribe(selection => {
|
|
235
|
-
this.
|
|
213
|
+
this.selectionPopup.choose(this.filters, this.sorts).subscribe((selection) => {
|
|
214
|
+
this.updateValueByEntity(selection[0]);
|
|
236
215
|
});
|
|
237
216
|
}
|
|
238
217
|
else {
|
|
@@ -244,58 +223,11 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
244
223
|
}
|
|
245
224
|
forceReloadFirst() {
|
|
246
225
|
this.value = null; // valueId is set to null automatically
|
|
247
|
-
this
|
|
248
|
-
|
|
249
|
-
/***************************************************************************
|
|
250
|
-
* *
|
|
251
|
-
* Private Methods (Auto Select First) *
|
|
252
|
-
* *
|
|
253
|
-
**************************************************************************/
|
|
254
|
-
handleAutoSelectFirst() {
|
|
255
|
-
if (!this._valueId) {
|
|
256
|
-
this.logger.debug('Attempting to auto select first entity...');
|
|
257
|
-
this.trySelectFirst();
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
this.logger.warn('Conflict avoided: Aborted auto selection because value id already present!');
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
trySelectFirst() {
|
|
264
|
-
const dataContextFirstItem = this.suggestionsDc?.isStarted
|
|
265
|
-
? this.firstItemInDataContextSoon(this.suggestionsDc)
|
|
266
|
-
: of(null);
|
|
267
|
-
// TODO takeUntil value-id is set, after that we can cancel.
|
|
268
|
-
dataContextFirstItem.pipe(takeUntil(this.valueIdChange.pipe(filter(id => !!id))), switchMap(firstItem => firstItem ? of(firstItem) : this.firstSuggestionItem())).subscribe(firstItem => {
|
|
269
|
-
if (firstItem && !this._valueId) {
|
|
270
|
-
this.updateValue(firstItem);
|
|
271
|
-
}
|
|
272
|
-
}, err => {
|
|
273
|
-
this.updateState(ElderSelectComponentState.error(err));
|
|
274
|
-
this.logger.error('Failed to load first entity for auto-select-first flow!', err);
|
|
275
|
-
});
|
|
226
|
+
const autoReloadFirst = new AutoSelectFirstDirective(this);
|
|
227
|
+
autoReloadFirst.trySelectFirst();
|
|
276
228
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
this.logger.warn('Gave up waiting for DataContext items, timeout reached. Falling back to sugestion lookup.', timeoutError);
|
|
280
|
-
return of(null);
|
|
281
|
-
}), first());
|
|
282
|
-
}
|
|
283
|
-
firstSuggestionItem() {
|
|
284
|
-
const dataSource = this.suggestionsDc?.dataSource;
|
|
285
|
-
if (dataSource) {
|
|
286
|
-
this.updateState(ElderSelectComponentState.loading());
|
|
287
|
-
return DataSourceAdapter.from(dataSource)
|
|
288
|
-
.findFirst(this.filters, this.sorts).pipe(tap(() => this.updateState(ElderSelectComponentState.idle())), catchError(err => {
|
|
289
|
-
this.logger.error('Failed to load suggestions!', err);
|
|
290
|
-
this.updateState(ElderSelectComponentState.error(err));
|
|
291
|
-
return of(null);
|
|
292
|
-
}));
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
this.logger.warn('Failed to load first suggestion!');
|
|
296
|
-
this.updateState(ElderSelectComponentState.idle());
|
|
297
|
-
return EMPTY;
|
|
298
|
-
}
|
|
229
|
+
updateValueByEntity(entity) {
|
|
230
|
+
this.updateValue(this.entityToValue(entity));
|
|
299
231
|
}
|
|
300
232
|
/***************************************************************************
|
|
301
233
|
* *
|
|
@@ -306,8 +238,8 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
306
238
|
* Occurs when the suggestions data-context has changed
|
|
307
239
|
*/
|
|
308
240
|
onSuggestionsDcChanged(data) {
|
|
309
|
-
if (this.
|
|
310
|
-
this.
|
|
241
|
+
if (this.valueAsId) {
|
|
242
|
+
this.selectEntityById(this.entityId);
|
|
311
243
|
}
|
|
312
244
|
}
|
|
313
245
|
/***************************************************************************
|
|
@@ -316,22 +248,35 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
316
248
|
* *
|
|
317
249
|
**************************************************************************/
|
|
318
250
|
valuesEquals(a, b) {
|
|
319
|
-
return this.
|
|
251
|
+
return this.entityIdFromValue(a) === this.entityIdFromValue(b);
|
|
252
|
+
}
|
|
253
|
+
isEntitySelected(entity) {
|
|
254
|
+
return this.getEntityId(entity) === this.entityId;
|
|
320
255
|
}
|
|
321
|
-
|
|
322
|
-
if (this.
|
|
323
|
-
return;
|
|
256
|
+
entityIdFromValue(value) {
|
|
257
|
+
if (this.valueAsId) {
|
|
258
|
+
return value;
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
const entity = value;
|
|
262
|
+
return this.getEntityId(entity);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
selectEntityById(id) {
|
|
266
|
+
const currentEntity = this.entity;
|
|
267
|
+
if (currentEntity && this.getEntityId(currentEntity) === id) {
|
|
268
|
+
return; // Entity already loaded
|
|
324
269
|
}
|
|
325
270
|
if (id === null || id === undefined) {
|
|
326
|
-
if (
|
|
327
|
-
this.
|
|
271
|
+
if (currentEntity !== null && currentEntity !== undefined) {
|
|
272
|
+
this.entity = null;
|
|
328
273
|
}
|
|
329
274
|
}
|
|
330
275
|
else {
|
|
331
276
|
if (this.suggestionsDc) {
|
|
332
277
|
const existing = this.findInDataContext(id);
|
|
333
278
|
if (existing) {
|
|
334
|
-
this.
|
|
279
|
+
this.entity = existing;
|
|
335
280
|
}
|
|
336
281
|
else {
|
|
337
282
|
this.loadEntityById(id);
|
|
@@ -346,39 +291,49 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
346
291
|
this.suggestionsDc.dataSource.findById(id)
|
|
347
292
|
.subscribe(entity => {
|
|
348
293
|
this.logger.debug('Loaded missing entity by id ' + id + ':', entity);
|
|
349
|
-
this.
|
|
294
|
+
this.entity = entity;
|
|
350
295
|
}, err => {
|
|
351
296
|
this.logger.error('Failed to load entity by id ' + id, err);
|
|
352
297
|
this.updateState(ElderSelectComponentState.error(err));
|
|
353
298
|
});
|
|
354
299
|
}
|
|
355
|
-
writeValueInternalDelayed(value) {
|
|
356
|
-
setTimeout(// HACK: Counter ngModel race condition
|
|
357
|
-
() => this.writeValueInternal(value), 10);
|
|
358
|
-
}
|
|
359
300
|
findInDataContext(id) {
|
|
360
301
|
return this.suggestionsDc.snapshot.data
|
|
361
|
-
.find(v => this.
|
|
362
|
-
}
|
|
363
|
-
writeToControl(value) {
|
|
364
|
-
this._valueId = this.getValueId(value);
|
|
365
|
-
this.ensureExistingValueNgControl(value);
|
|
366
|
-
super.writeToControl(value);
|
|
302
|
+
.find(v => this.getEntityId(v) === id);
|
|
367
303
|
}
|
|
368
|
-
|
|
369
|
-
if (
|
|
370
|
-
|
|
371
|
-
|
|
304
|
+
entityToValue(entity) {
|
|
305
|
+
if (this.valueAsId) {
|
|
306
|
+
const id = this.getEntityId(entity);
|
|
307
|
+
return id;
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
return entity;
|
|
372
311
|
}
|
|
373
312
|
}
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
313
|
+
/**
|
|
314
|
+
* This method is invoked after a value has been written to this control.
|
|
315
|
+
*
|
|
316
|
+
*/
|
|
317
|
+
writeToControl(value) {
|
|
318
|
+
if (this.valueAsId) {
|
|
319
|
+
const entityId = value;
|
|
320
|
+
// Value was written as entity id, ensure we select entity by id
|
|
321
|
+
this.logger.debug('writeToControl: value was written as id: ' + entityId, value);
|
|
322
|
+
this.selectEntityById(entityId);
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
// Value was written as entity, ensure entity is updated
|
|
326
|
+
const currentEntity = this.entity;
|
|
327
|
+
const newEntity = value;
|
|
328
|
+
this.logger.debug('writeToControl: value was written as entity: ' + JSON.stringify(newEntity), value);
|
|
329
|
+
if (!this.isEqual(currentEntity, newEntity)) {
|
|
330
|
+
this.entity$.next(newEntity);
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
this.logger.warn('Ignored written entity as it is already set to entity$!');
|
|
380
334
|
}
|
|
381
335
|
}
|
|
336
|
+
super.writeToControl(value);
|
|
382
337
|
}
|
|
383
338
|
/**
|
|
384
339
|
* @description
|
|
@@ -391,32 +346,21 @@ export class ElderSelectComponent extends ElderSelectBase {
|
|
|
391
346
|
*/
|
|
392
347
|
writeValue(value) {
|
|
393
348
|
// this.logger.debug('ElderSelectBase.writeValue(): Current value-id ' + this._valueId + ', new value: ', value);
|
|
394
|
-
|
|
395
|
-
this.logger.debug('Prevented null/empty write while ngModel is still initializing!');
|
|
396
|
-
}
|
|
397
|
-
else {
|
|
398
|
-
super.writeValue(value);
|
|
399
|
-
}
|
|
349
|
+
super.writeValue(value);
|
|
400
350
|
}
|
|
401
351
|
isNullOrEmpty(value) {
|
|
402
352
|
return (value == null || value === '');
|
|
403
353
|
}
|
|
404
|
-
isNgModelInitializing() {
|
|
405
|
-
if (this.ngControl) {
|
|
406
|
-
return !this.ngModelInitialized;
|
|
407
|
-
}
|
|
408
|
-
return false;
|
|
409
|
-
}
|
|
410
354
|
}
|
|
411
|
-
ElderSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
412
|
-
ElderSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
355
|
+
ElderSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderSelectComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
356
|
+
ElderSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ElderSelectComponent, selector: "elder-select", inputs: { nullDisplay: "nullDisplay", autocomplete: "autocomplete", allowNull: "allowNull", entity: "entity", entityId: "entityId", hintProperty: "hintProperty", hintPropertyResolver: "hintPropertyResolver" }, outputs: { entityIdChange: "entityIdChange", entityChange: "entityChange", entityIdUpdated: "entityIdUpdated", entityUpdated: "entityUpdated" }, providers: [
|
|
413
357
|
{
|
|
414
358
|
provide: ELDER_SELECT_BASE,
|
|
415
359
|
useExisting: forwardRef(() => ElderSelectComponent)
|
|
416
360
|
},
|
|
417
361
|
...buildFormIntegrationProviders(ElderSelectComponent)
|
|
418
|
-
], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(
|
|
419
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
362
|
+
], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\">\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\" (click)=\"onInputClicked(autoTrigger)\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!autocomplete\" class=\"select-arrow noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon{font-size:16px;width:16px;height:16px}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3.ElderAutocompleteComponent, selector: "elder-autocomplete", inputs: ["isOptionDisabledFn", "isOptionHiddenFn", "enabled", "valueTemplate", "suggestionsDc", "displayPropertyResolver"], outputs: ["optionSelected"], exportAs: ["elderAutocomplete"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i1.MatPrefix, selector: "[matPrefix]" }, { type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i10.SelectOnTabDirective, selector: "[elderSelectOnTab]" }, { type: i9.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i11.ElderAutocompleteDirective, selector: "[elderElderAutocomplete]", inputs: ["queryFilter", "filters", "sorts", "elderElderAutocomplete"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.MatSuffix, selector: "[matSuffix]" }, { type: i12.ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i5.AsyncPipe, "translate": i13.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
363
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderSelectComponent, decorators: [{
|
|
420
364
|
type: Component,
|
|
421
365
|
args: [{ selector: 'elder-select', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
422
366
|
{
|
|
@@ -424,22 +368,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
424
368
|
useExisting: forwardRef(() => ElderSelectComponent)
|
|
425
369
|
},
|
|
426
370
|
...buildFormIntegrationProviders(ElderSelectComponent)
|
|
427
|
-
], template: "<mat-form-field *ngIf=\"(
|
|
428
|
-
}], ctorParameters: function () { return [{ type: i0.NgZone }
|
|
371
|
+
], template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\">\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\" (click)=\"onInputClicked(autoTrigger)\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!autocomplete\" class=\"select-arrow noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon{font-size:16px;width:16px;height:16px}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"] }]
|
|
372
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { nullDisplay: [{
|
|
429
373
|
type: Input
|
|
430
|
-
}],
|
|
374
|
+
}], entityIdChange: [{
|
|
375
|
+
type: Output
|
|
376
|
+
}], entityChange: [{
|
|
377
|
+
type: Output
|
|
378
|
+
}], entityIdUpdated: [{
|
|
379
|
+
type: Output
|
|
380
|
+
}], entityUpdated: [{
|
|
431
381
|
type: Output
|
|
432
382
|
}], autocomplete: [{
|
|
433
383
|
type: Input
|
|
434
384
|
}], allowNull: [{
|
|
435
385
|
type: Input
|
|
436
|
-
}],
|
|
386
|
+
}], entity: [{
|
|
437
387
|
type: Input
|
|
438
|
-
}],
|
|
388
|
+
}], entityId: [{
|
|
439
389
|
type: Input
|
|
440
390
|
}], hintProperty: [{
|
|
441
391
|
type: Input
|
|
442
392
|
}], hintPropertyResolver: [{
|
|
443
393
|
type: Input
|
|
444
394
|
}] } });
|
|
445
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L2VsZGVyLXNlbGVjdC9lbGRlci1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvZWxkZXItc2VsZWN0L2VsZGVyLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFBRSxVQUFVLEVBRXJCLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDL0YsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BGLE9BQU8sRUFDTCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEdBQUcsRUFDSCxTQUFTLEVBQ1QsU0FBUyxFQUNULE9BQU8sRUFDUCxLQUFLLEVBQ0wsR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFDLFNBQVMsRUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBRXRGLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQWlCLE1BQU0s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QkFBb0IsQ0FBQztLQUN2RCxpREM3REgscS9GQTZGQTsyRkQ5QmEsb0JBQW9CO2tCQWJoQyxTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzt5QkFDcEQ7d0JBQ0QsR0FBRyw2QkFBNkIsc0JBQXNCO3FCQUN2RDtvSEFvQk0sV0FBVztzQkFEakIsS0FBSztnQkFNVSxhQUFhO3NCQUQ1QixNQUFNO2dCQStGSSxZQUFZO3NCQUR0QixLQUFLO2dCQWFLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBY0ssZUFBZTtzQkFEekIsS0FBSztnQkFvQkssT0FBTztzQkFEakIsS0FBSztnQkFpQkssWUFBWTtzQkFEdEIsS0FBSztnQkFNSyxvQkFBb0I7c0JBRDlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LCBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtidWlsZEZvcm1JbnRlZ3JhdGlvblByb3ZpZGVyc30gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2Zvcm1zL3RlbXBsYXRlLWNvbXBvc2l0ZS1jb250cm9sJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtJRGF0YUNvbnRleHR9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9kYXRhL2RhdGEtY29udGV4dC9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjYXRjaEVycm9yLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG4gIHRpbWVvdXQsXG4gIGZpcnN0LFxuICB0YXAsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtOZ0NvbnRyb2wsIE5nTW9kZWx9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RGF0YVNvdXJjZUFkYXB0ZXJ9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9kYXRhL2RhdGFzb3VyY2UvZGF0YS1zb3VyY2UtYWRhcHRlcic7XG5pbXBvcnQge01hdEF1dG9jb21wbGV0ZVRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge0VMREVSX1NFTEVDVF9CQVNFLCBFbGRlclNlbGVjdEJhc2UsIEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUsIFRleHRSZXNvbHZlckZufSBmcm9tICcuLi9lbGRlci1zZWxlY3QtYmFzZSc7XG5cbmNsYXNzIFZhbHVlQ29udGV4dDxUPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZTogVCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGludFRleHQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZ1xuICApIHtcbiAgfVxufVxuXG5cbi8qKlxuICogVGhlIGVsZGVyLXNlbGVjdCBjb250cm9sIGFsbG93cyB0byBzZWxlY3QgYSBzaW5nbGVcbiAqIGVudGl0eS5cbiAqXG4gKiBQcmltYXJ5IGZvY3VzIGlzIG9uIGVhc3kgdXNhZ2UgZm9yIGNvbW1vbiBzY2VuYXJpb3M6XG4gKlxuICogLSBJbnRlZ3JhdGVkIGludG8gYW5ndWxhciBmb3JtcyBhbmQgdmFsaWRhdGlvblxuICogLSBTdXBwb3J0IGVudGl0eSBpZCBoYW5kbGluZywgaW5wdXQgLyBvdXRwdXQgaXMgdGhlIGVudGl0eSBpZCB2cyBmdWxsIHZhbHVlLlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZWxkZXItc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VsZGVyLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VsZGVyLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogRUxERVJfU0VMRUNUX0JBU0UsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFbGRlclNlbGVjdENvbXBvbmVudClcbiAgICB9LFxuICAgIC4uLmJ1aWxkRm9ybUludGVncmF0aW9uUHJvdmlkZXJzKEVsZGVyU2VsZWN0Q29tcG9uZW50KVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyU2VsZWN0Q29tcG9uZW50PFQgPSBhbnksIFRJZCA9IGFueT4gZXh0ZW5kcyBFbGRlclNlbGVjdEJhc2U8VElkLCBULCBUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoaW50UHJvcGVydHlSZXNvbHZlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRleHRSZXNvbHZlckZuPigodmFsdWU6IFQpID0+IG51bGwpO1xuXG4gIHByaXZhdGUgX2FsbG93TnVsbCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTdHJpbmcgdG8gZGlzcGxheSBmb3IgdGhlICdub3RoaW5nJyAvIG51bGwgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbnVsbERpc3BsYXkgPSAnLSc7XG5cbiAgcHJpdmF0ZSBfYXV0b1NlbGVjdEZpcnN0ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZUlkQ2hhbmdlOiBPYnNlcnZhYmxlPFRJZD47XG5cbiAgcHJpdmF0ZSBfdmFsdWVJZDogVElkID0gbnVsbDtcblxuICBwcml2YXRlIF9hdXRvY29tcGxldGUgPSBmYWxzZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWVXcmFwcGVkJDogT2JzZXJ2YWJsZTxWYWx1ZUNvbnRleHQ8VD4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaW5wdXRUZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHByaXZhdGUgbmdDb250cm9sOiBOZ0NvbnRyb2w7XG4gIHByaXZhdGUgdmFsdWVDb250ZXh0OiBWYWx1ZUNvbnRleHQ8VD47XG5cbiAgcHJpdmF0ZSBuZ01vZGVsSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICB6b25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoem9uZSk7XG5cbiAgICB0aGlzLnZhbHVlSWRDaGFuZ2UgPSB0aGlzLnZhbHVlQ2hhbmdlLnBpcGUoXG4gICAgICBtYXAodiA9PiB0aGlzLmdldFZhbHVlSWQodikpXG4gICAgKTtcblxuICAgIHRoaXMudmFsdWVXcmFwcGVkJCA9IGNvbWJpbmVMYXRlc3QoXG4gICAgICBbXG4gICAgICAgIHRoaXMudmFsdWUkLFxuICAgICAgICB0aGlzLmRpc3BsYXlQcm9wZXJ0eVJlc29sdmVyJCxcbiAgICAgICAgdGhpcy5oaW50UHJvcGVydHlSZXNvbHZlciRcbiAgICAgIF1cbiAgICApLnBpcGUoXG4gICAgICBtYXAoKFt2YWx1ZSwgZFBSLCBoUFJdKSA9PiBuZXcgVmFsdWVDb250ZXh0PFQ+KHZhbHVlLCBoUFIodmFsdWUpLCBkUFIodmFsdWUpKSlcbiAgICApO1xuXG4gICAgdGhpcy5pbnB1dFRleHQkID0gdGhpcy52YWx1ZVdyYXBwZWQkLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgdGFwKHZhbHVlQ29udGV4dCA9PiB0aGlzLnZhbHVlQ29udGV4dCA9IHZhbHVlQ29udGV4dCksXG4gICAgICBtYXAodmFsdWVDb250ZXh0ID0+IHtcbiAgICAgICAgaWYgKHZhbHVlQ29udGV4dC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZUNvbnRleHQuZGlzcGxheVRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMaWZlIEN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgIC8vIEluamVjdCB0aGUgbmdDb250cm9sL25nTW9kZWxcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgdGhpcy5lbnN1cmVFeGlzdGluZ1ZhbHVlTmdDb250cm9sKHRoaXMudmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuYXV0b1NlbGVjdEZpcnN0KSB7XG4gICAgICB0aGlzLmhhbmRsZUF1dG9TZWxlY3RGaXJzdCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dChcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5uZ01vZGVsSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfSwgMTBcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuYXV0b0NsZWFuVXAoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBCZWhhdmlvdXIgUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYXV0b2NvbXBsZXRlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b2NvbXBsZXRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXV0b2NvbXBsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGU7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCAnbm90aGluZycgLyBudWxsLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhbGxvd051bGwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYWxsb3dOdWxsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFsbG93TnVsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dOdWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGRhdGEgaXMgbG9hZGVkIGludG8gdGhpcyBzZWxlY3QsIGVuc3VyZSB0aGF0XG4gICAqIGEgdmFsdWUgaXMgc2VsZWN0ZWQgb3Igc2VsZWN0IHRoZSBmaXJzdCBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhdXRvU2VsZWN0Rmlyc3QodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b1NlbGVjdEZpcnN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF1dG9TZWxlY3RGaXJzdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b1NlbGVjdEZpcnN0O1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFNlbGVjdCB0aGUgdmFsdWUgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqIEBwYXJhbSBpZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2YWx1ZUlkKGlkOiBUSWQpIHtcbiAgICBpZiAoaWQgIT09IHRoaXMuX3ZhbHVlSWQpIHtcbiAgICAgIHRoaXMuX3ZhbHVlSWQgPSBpZDtcbiAgICAgIHRoaXMuc2VsZWN0VmFsdWVCeUlkKGlkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlSWQoKTogVElkIHtcbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVJZCh0aGlzLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlSWQ7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoaW50UHJvcGVydHkocHJvcGVydHk6IHN0cmluZykge1xuICAgIHRoaXMuaGludFByb3BlcnR5UmVzb2x2ZXIgPSAodmFsdWUgPT4gdGhpcy5wcm9wZXJ0eVN0cmluZ1ZhbHVlKHZhbHVlLCBwcm9wZXJ0eSkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoaW50UHJvcGVydHlSZXNvbHZlcihyZXNvbHZlcjogVGV4dFJlc29sdmVyRm4pIHtcbiAgICB0aGlzLmhpbnRQcm9wZXJ0eVJlc29sdmVyJC5uZXh0KHJlc29sdmVyKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBvbklucHV0Qmx1cihldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMudmFsdWVDb250ZXh0LnZhbHVlKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IHRoaXMudmFsdWVDb250ZXh0LmRpc3BsYXlUZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBpc09wdGlvbkRpc2FibGVkSW50ZXJuYWxGbigpOiAob3B0aW9uOiBUKSA9PiBib29sZWFuIHtcbiAgICByZXR1cm4gKG9wdGlvbjogVCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlc0VxdWFscyhvcHRpb24sIHRoaXMudmFsdWUpKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3B0aW9uRGlzYWJsZWRGbikge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzT3B0aW9uRGlzYWJsZWRGbihvcHRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcHRpb25IaWRkZW5JbnRlcm5hbEZuKCk6IChvcHRpb246IFQpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiAob3B0aW9uOiBUKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc09wdGlvbkhpZGRlbkZuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT3B0aW9uSGlkZGVuRm4ob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cblxuICBwdWJsaWMgdG9nZ2xlUGFuZWwoYXV0b1RyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpOiB2b2lkIHtcbiAgICBpZiAoYXV0b1RyaWdnZXIuYXV0b2NvbXBsZXRlLmlzT3Blbikge1xuICAgICAgYXV0b1RyaWdnZXIuY2xvc2VQYW5lbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUmVxdWVzdGluZyB0byBvcGVuIGF1dG8tY29tcGxldGUgcGFuZWwuLi4nLCBhdXRvVHJpZ2dlcik7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uc0RjKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0RjLnN0YXJ0KHRoaXMuc29ydHMsIHRoaXMuZmlsdGVycyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgREMhJywgZXJyKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuZXJyb3IoZXJyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF1dG9UcmlnZ2VyLm9wZW5QYW5lbCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbklucHV0Q2xpY2tlZChhdXRvVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcik6IHZvaWQge1xuXG4gICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ29uSW5wdXRDbGlja2VkLCBsb2NrZWQ6ICcgKyB0aGlzLmlzTG9ja2VkICsgJywgYXV0b2NvbXBsZXRlOiAnICsgdGhpcy5hdXRvY29tcGxldGUsIGF1dG9UcmlnZ2VyKTtcbiAgICBpZiAodGhpcy5pc0xvY2tlZCB8fCB0aGlzLmF1dG9jb21wbGV0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRvZ2dsZVBhbmVsKGF1dG9UcmlnZ2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk9wdGlvblNlbGVjdGVkKHNlbGVjdGVkVmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52YWx1ZXNFcXVhbHMoc2VsZWN0ZWRWYWx1ZSwgdGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZUludGVybmFsKG51bGwpOyAvLyBIQUNLOiBFbnN1cmUgd2UgdHJpZ2dlciB2aWV3IHJlZHJhd1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHNlbGVjdGVkVmFsdWUpO1xuICB9XG5cbiAgcHVibGljIG9wZW5TZWxlY3Rpb25Qb3B1cChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Qb3B1cCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Qb3B1cC5jaG9vc2UoXG4gICAgICAgIHRoaXMuZmlsdGVycyxcbiAgICAgICAgdGhpcy5zb3J0c1xuICAgICAgKS5zdWJzY3JpYmUoXG4gICAgICAgIHNlbGVjdGlvbiA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShzZWxlY3Rpb25bMF0pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdDYW50IG9wZW4gc2VsZWN0aW9uIGJyb3dzZXIgcG9wdXAsIHNpbmNlIFtTZWxlY3Rpb25Nb2RlbFBvcHVwRGlyZWN0aXZlXSB3YXMgbm90IGZvdW5kIScpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGZvcmNlUmVsb2FkRmlyc3QoKSB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7IC8vIHZhbHVlSWQgaXMgc2V0IHRvIG51bGwgYXV0b21hdGljYWxseVxuICAgIHRoaXMuaGFuZGxlQXV0b1NlbGVjdEZpcnN0KCk7XG4gIH1cblxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIE1ldGhvZHMgKEF1dG8gU2VsZWN0IEZpcnN0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgaGFuZGxlQXV0b1NlbGVjdEZpcnN0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdmFsdWVJZCkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0F0dGVtcHRpbmcgdG8gYXV0byBzZWxlY3QgZmlyc3QgZW50aXR5Li4uJyk7XG4gICAgICB0aGlzLnRyeVNlbGVjdEZpcnN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0NvbmZsaWN0IGF2b2lkZWQ6IEFib3J0ZWQgYXV0byBzZWxlY3Rpb24gYmVjYXVzZSB2YWx1ZSBpZCBhbHJlYWR5IHByZXNlbnQhJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cnlTZWxlY3RGaXJzdCgpOiB2b2lkIHtcblxuICAgIGNvbnN0IGRhdGFDb250ZXh0Rmlyc3RJdGVtID0gdGhpcy5zdWdnZXN0aW9uc0RjPy5pc1N0YXJ0ZWRcbiAgICAgID8gdGhpcy5maXJzdEl0ZW1JbkRhdGFDb250ZXh0U29vbih0aGlzLnN1Z2dlc3Rpb25zRGMpXG4gICAgICA6IG9mKG51bGwpO1xuXG4gICAgLy8gVE9ETyB0YWtlVW50aWwgdmFsdWUtaWQgaXMgc2V0LCBhZnRlciB0aGF0IHdlIGNhbiBjYW5jZWwuXG5cbiAgICBkYXRhQ29udGV4dEZpcnN0SXRlbS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMudmFsdWVJZENoYW5nZS5waXBlKGZpbHRlcihpZCA9PiAhIWlkKSkpLFxuICAgICAgc3dpdGNoTWFwKGZpcnN0SXRlbSA9PiBmaXJzdEl0ZW0gPyBvZihmaXJzdEl0ZW0pIDogdGhpcy5maXJzdFN1Z2dlc3Rpb25JdGVtKCkpXG4gICAgKS5zdWJzY3JpYmUoXG4gICAgICBmaXJzdEl0ZW0gPT4ge1xuICAgICAgICBpZiAoZmlyc3RJdGVtICYmICF0aGlzLl92YWx1ZUlkKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShmaXJzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLmVycm9yKGVycikpO1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGxvYWQgZmlyc3QgZW50aXR5IGZvciBhdXRvLXNlbGVjdC1maXJzdCBmbG93IScsIGVycik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlyc3RJdGVtSW5EYXRhQ29udGV4dFNvb24oZGF0YUNvbnRleHQ6IElEYXRhQ29udGV4dDxUPik6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gZGF0YUNvbnRleHQuZGF0YS5waXBlKFxuICAgICAgZmlsdGVyKGRhdGEgPT4gZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApLFxuICAgICAgbWFwKGRhdGEgPT4gZGF0YVswXSksXG4gICAgICB0aW1lb3V0KDI1MCksXG4gICAgICBjYXRjaEVycm9yKHRpbWVvdXRFcnJvciA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0dhdmUgdXAgd2FpdGluZyBmb3IgRGF0YUNvbnRleHQgaXRlbXMsIHRpbWVvdXQgcmVhY2hlZC4gRmFsbGluZyBiYWNrIHRvIHN1Z2VzdGlvbiBsb29rdXAuJywgdGltZW91dEVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlyc3RTdWdnZXN0aW9uSXRlbSgpOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG5cbiAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5zdWdnZXN0aW9uc0RjPy5kYXRhU291cmNlO1xuXG4gICAgaWYgKGRhdGFTb3VyY2UpIHtcblxuICAgICAgdGhpcy51cGRhdGVTdGF0ZShFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLmxvYWRpbmcoKSk7XG5cbiAgICAgIHJldHVybiBEYXRhU291cmNlQWRhcHRlci5mcm9tKGRhdGFTb3VyY2UpXG4gICAgICAgIC5maW5kRmlyc3QodGhpcy5maWx0ZXJzLCB0aGlzLnNvcnRzKS5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRlKEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuaWRsZSgpKSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHN1Z2dlc3Rpb25zIScsIGVycik7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuZXJyb3IoZXJyKSk7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBsb2FkIGZpcnN0IHN1Z2dlc3Rpb24hJyk7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuaWRsZSgpKTtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQWJzdHJhY3QgSW1wbGVtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gdGhlIHN1Z2dlc3Rpb25zIGRhdGEtY29udGV4dCBoYXMgY2hhbmdlZFxuICAgKi9cbiAgcHJvdGVjdGVkIG9uU3VnZ2VzdGlvbnNEY0NoYW5nZWQoZGF0YTogSURhdGFDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZhbHVlSWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0VmFsdWVCeUlkKHRoaXMuX3ZhbHVlSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIE1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByb3RlY3RlZCB2YWx1ZXNFcXVhbHMoYTogVCwgYjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRXF1YWwoYSwgYik7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFZhbHVlQnlJZChpZDogVElkKTogdm9pZCB7XG5cbiAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLmdldFZhbHVlSWQodGhpcy52YWx1ZSkgPT09IGlkKSB7XG4gICAgICByZXR1cm47IC8vIEFscmVhZHkgc2VsZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IG51bGwgfHwgaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMudmFsdWUgIT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZUludGVybmFsKG51bGwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uc0RjKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5maW5kSW5EYXRhQ29udGV4dChpZCk7XG4gICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZUludGVybmFsKGV4aXN0aW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWRFbnRpdHlCeUlkKGlkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignRmFpbGVkIHRvIHNlbGVjdCB2YWx1ZSBieSBJZDogJyArIGlkICsgJyAtIERhdGFDb250ZXh0IG5vdCBhdmFpbGFibGUuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRW50aXR5QnlJZChpZDogVElkKTogdm9pZCB7XG4gICAgdGhpcy5zdWdnZXN0aW9uc0RjLmRhdGFTb3VyY2UuZmluZEJ5SWQoPGFueT5pZClcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIGVudGl0eSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRlZCBtaXNzaW5nIGVudGl0eSBieSBpZCAnICsgaWQgKyAnOicsIGVudGl0eSk7XG4gICAgICAgICAgdGhpcy53cml0ZVZhbHVlSW50ZXJuYWxEZWxheWVkKGVudGl0eSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGVudGl0eSBieSBpZCAnICsgaWQsIGVycik7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShFbGRlclNlbGVjdENvbXBvbmVudFN0YXRlLmVycm9yKGVycikpO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZVZhbHVlSW50ZXJuYWxEZWxheWVkKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCggLy8gSEFDSzogQ291bnRlciBuZ01vZGVsIHJhY2UgY29uZGl0aW9uXG4gICAgICAoKSA9PiB0aGlzLndyaXRlVmFsdWVJbnRlcm5hbCh2YWx1ZSksXG4gICAgICAxMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRJbkRhdGFDb250ZXh0KGlkOiBUSWQpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbnNEYy5zbmFwc2hvdC5kYXRhXG4gICAgICAuZmluZCh2ID0+IHRoaXMuZ2V0VmFsdWVJZCh2KSA9PT0gaWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHdyaXRlVG9Db250cm9sKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWVJZCA9IHRoaXMuZ2V0VmFsdWVJZCh2YWx1ZSk7XG4gICAgdGhpcy5lbnN1cmVFeGlzdGluZ1ZhbHVlTmdDb250cm9sKHZhbHVlKTtcbiAgICBzdXBlci53cml0ZVRvQ29udHJvbCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZUV4aXN0aW5nVmFsdWVOZ0NvbnRyb2wodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIC8vIFBhdGNoIG5nTW9kZWwgdmFsdWUgKGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gdXNpbmcgbmdNb2RlbCAmIHZhbHVlLWlkIGJpbmRpbmcpXG4gICAgICB0aGlzLnRyeVVwZGF0ZU5nQ29udHJvbCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cnlVcGRhdGVOZ0NvbnRyb2wodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgIGNvbnN0IG5nTW9kZWwgPSB0aGlzLm5nQ29udHJvbCBhcyBOZ01vZGVsO1xuICAgICAgaWYgKG5nTW9kZWwpIHtcbiAgICAgICAgbmdNb2RlbC5tb2RlbCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnV3JvdGUgdmFsdWUgZGlyZWN0bHkgaW50byBuZ01vZGVsOicsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdyaXRlcyBhIG5ldyB2YWx1ZSB0byB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBmb3JtcyBBUEkgdG8gd3JpdGUgdG8gdGhlIHZpZXcgd2hlbiBwcm9ncmFtbWF0aWNcbiAgICogY2hhbmdlcyBmcm9tIG1vZGVsIHRvIHZpZXcgYXJlIHJlcXVlc3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBlbGVtZW50XG4gICAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdFbGRlclNlbGVjdEJhc2Uud3JpdGVWYWx1ZSgpOiBDdXJyZW50IHZhbHVlLWlkICcgKyB0aGlzLl92YWx1ZUlkICsgJywgbmV3IHZhbHVlOiAnLCB2YWx1ZSk7XG4gICAgaWYgKHRoaXMuaXNOZ01vZGVsSW5pdGlhbGl6aW5nKCkgJiYgdGhpcy5pc051bGxPckVtcHR5KHZhbHVlKSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1ByZXZlbnRlZCBudWxsL2VtcHR5IHdyaXRlIHdoaWxlIG5nTW9kZWwgaXMgc3RpbGwgaW5pdGlhbGl6aW5nIScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTnVsbE9yRW1wdHkodmFsdWU6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHZhbHVlID09IG51bGwgfHwgKDxhbnk+dmFsdWUpID09PSAnJyk7XG4gIH1cblxuICBwcml2YXRlIGlzTmdNb2RlbEluaXRpYWxpemluZygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgIHJldHVybiAhdGhpcy5uZ01vZGVsSW5pdGlhbGl6ZWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG59XG4iLCI8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIodmFsdWVXcmFwcGVkJCB8IGFzeW5jKSBhcyB2YWx1ZVdyYXBwZXJcIiBmeEZsZXhcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVsZGVyLXN0ZC1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuPlxuXG4gIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuXG5cbiAgPG5nLWNvbnRhaW5lciBtYXRQcmVmaXggKm5nSWY9XCIobWVyZ2VkU3RhdGUkIHwgYXN5bmMpIGFzIHN0YXRlXCI+XG5cbiAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgZGlzYWJsZWRcbiAgICAgICAgICAgICAgY2xhc3M9XCJsZWFkaW5nLWljb24gcHJlZml4LXBhZGRpbmcgbm9zZWxlY3RcIlxuICAgICAgICAgICAgICBbY2xhc3MubG9hZGluZ109XCJzdGF0ZS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cInN0YXRlPy5lcnJvciA/ICd3YXJuJyA6IGNvbG9yXCI+XG4gICAgICB7e2ljb259fVxuICAgIDwvbWF0LWljb24+XG5cblxuICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpY29uICYmIHN0YXRlPy5lcnJvclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVhZGluZy1pY29uIHByZWZpeC1wYWRkaW5nIG5vc2VsZWN0XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCI+XG4gICAgICB3YXJuaW5nXG4gICAgPC9tYXQtaWNvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBBIGR5bmFtaWMgaW5wdXQgLS0+XG4gIDxpbnB1dFxuICAgIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgZnhGbGV4PVwiZ3Jvd1wiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seSB8fCAhYXV0b2NvbXBsZXRlXCJcbiAgICBbbmFtZV09XCJuYW1lICsgJy1pbm5lci1pbnB1dCdcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgW21hdEF1dG9jb21wbGV0ZV0gI2F1dG9UcmlnZ2VyPVwibWF0QXV0b2NvbXBsZXRlVHJpZ2dlclwiXG4gICAgW2VsZGVyRWxkZXJBdXRvY29tcGxldGVdPVwiZWxkZXJBdXRvXCIgW3F1ZXJ5RmlsdGVyXT1cInF1ZXJ5RmlsdGVyXCIgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiIFtzb3J0c109XCJzb3J0c1wiXG4gICAgZWxkZXJTZWxlY3RPblRhYlxuICAgIFtjbGFzcy5zZWxlY3RdPVwiIWF1dG9jb21wbGV0ZVwiIChjbGljayk9XCJvbklucHV0Q2xpY2tlZChhdXRvVHJpZ2dlcilcIlxuICAgIFtuZ01vZGVsXT1cImlucHV0VGV4dCQgfCBhc3luY1wiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZSwgdXBkYXRlT246ICdzdWJtaXQnfVwiXG4gICAgKGJsdXIpPVwib25JbnB1dEJsdXIoJGV2ZW50KVwiXG4gID5cblxuICA8IS0tIFRoaXMgYnJlYWtzIHN0dWZmOiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkIHwgYXN5bmNcIiAtLT5cblxuICA8ZWxkZXItYXV0b2NvbXBsZXRlXG4gICAgI2VsZGVyQXV0bz1cImVsZGVyQXV0b2NvbXBsZXRlXCJcbiAgICBbc3VnZ2VzdGlvbnNEY109XCJzdWdnZXN0aW9uc0RjJCB8IGFzeW5jXCJcbiAgICBbdmFsdWVUZW1wbGF0ZV09XCJ2YWx1ZVRlbXBsYXRlXCJcbiAgICBbZW5hYmxlZF09XCJhdXRvY29tcGxldGVcIlxuICAgIFtkaXNwbGF5UHJvcGVydHlSZXNvbHZlcl09XCJkaXNwbGF5UHJvcGVydHlSZXNvbHZlciQgfCBhc3luY1wiXG4gICAgW2lzT3B0aW9uRGlzYWJsZWRGbl09XCJpc09wdGlvbkRpc2FibGVkSW50ZXJuYWxGblwiXG4gICAgW2lzT3B0aW9uSGlkZGVuRm5dPVwiaXNPcHRpb25IaWRkZW5JbnRlcm5hbEZuXCJcbiAgICAob3B0aW9uU2VsZWN0ZWQpPVwib25PcHRpb25TZWxlY3RlZCgkYW55KCRldmVudCkpXCJcbiAgPjwvZWxkZXItYXV0b2NvbXBsZXRlPlxuXG5cbiAgPG5nLWNvbnRhaW5lciBtYXRTdWZmaXg+XG5cbiAgICA8bWF0LWljb25cbiAgICAgICpuZ0lmPVwiIWF1dG9jb21wbGV0ZVwiIGNsYXNzPVwic2VsZWN0LWFycm93IG5vc2VsZWN0XCJcbiAgICAgIChjbGljayk9XCJvbklucHV0Q2xpY2tlZChhdXRvVHJpZ2dlcilcIj5cbiAgICAgIGFycm93X2Ryb3BfZG93blxuICAgIDwvbWF0LWljb24+XG5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0aW9uUG9wdXAgJiYgKCF2YWx1ZVdyYXBwZXIudmFsdWUgfHwgIWFsbG93TnVsbClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9ja2VkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuU2VsZWN0aW9uUG9wdXAoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJTZWFyY2hcIlxuICAgICAgICAgICAgZWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvblxuICAgICAgICAgICAgdGFiSW5kZXg9XCItMVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICpuZ0lmPVwidmFsdWVXcmFwcGVyLnZhbHVlICYmIGFsbG93TnVsbFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2NrZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudClcIiBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgICAgICAgZWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvblxuICAgICAgICAgICAgdGFiSW5kZXg9XCItMVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bWF0LWhpbnQgKm5nSWY9XCJ2YWx1ZVdyYXBwZXIuaGludFRleHRcIj57e3ZhbHVlV3JhcHBlci5oaW50VGV4dH19PC9tYXQtaGludD5cblxuPC9tYXQtZm9ybS1maWVsZD5cblxuXG5cbiJdfQ==
|
|
395
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L2VsZGVyLXNlbGVjdC9lbGRlci1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvZWxkZXItc2VsZWN0L2VsZGVyLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFBRSxVQUFVLEVBQ3JCLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDL0YsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQ0wsR0FBRyxFQUNILFNBQVMsRUFDVCxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sR0FDbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFpQixNQUFNLHNCQUFzQixDQUFDO0FBQ25ILE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFHeEUsTUFBTSxhQUFhO0lBQ2pCLFlBQ2tCLEtBQVEsRUFDUixRQUFnQixFQUNoQixXQUFtQjtRQUZuQixVQUFL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QVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztTQUNwRDtRQUNELEdBQUcsNkJBQTZCLENBQUMsb0JBQW9CLENBQUM7S0FDdkQsaURDdERILDIvRkE2RkE7MkZEckNhLG9CQUFvQjtrQkFiaEMsU0FBUzsrQkFDRSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUM7eUJBQ3BEO3dCQUNELEdBQUcsNkJBQTZCLHNCQUFzQjtxQkFDdkQ7NkZBc0JNLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSVUsY0FBYztzQkFEN0IsTUFBTTtnQkFJUyxZQUFZO3NCQUQzQixNQUFNO2dCQVFTLGVBQWU7c0JBRDlCLE1BQU07Z0JBUVMsYUFBYTtzQkFENUIsTUFBTTtnQkEyRkksWUFBWTtzQkFEdEIsS0FBSztnQkFhSyxTQUFTO3NCQURuQixLQUFLO2dCQWdCSyxNQUFNO3NCQURoQixLQUFLO2dCQWFLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBY0ssWUFBWTtzQkFEdEIsS0FBSztnQkFNSyxvQkFBb0I7c0JBRDlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LCBmb3J3YXJkUmVmLFxuICBJbnB1dCwgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7YnVpbGRGb3JtSW50ZWdyYXRpb25Qcm92aWRlcnN9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9mb3Jtcy90ZW1wbGF0ZS1jb21wb3NpdGUtY29udHJvbCc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7SURhdGFDb250ZXh0fSBmcm9tICcuLi8uLi8uLi9jb21tb24vZGF0YS9kYXRhLWNvbnRleHQvZGF0YS1jb250ZXh0JztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIG1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsIHNraXAsIGZpbHRlcixcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtjb2VyY2VCb29sZWFuUHJvcGVydHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge01hdEF1dG9jb21wbGV0ZVRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge0VMREVSX1NFTEVDVF9CQVNFLCBFbGRlclNlbGVjdEJhc2UsIEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUsIFRleHRSZXNvbHZlckZufSBmcm9tICcuLi9lbGRlci1zZWxlY3QtYmFzZSc7XG5pbXBvcnQge0F1dG9TZWxlY3RGaXJzdERpcmVjdGl2ZX0gZnJvbSAnLi4vYXV0by1zZWxlY3QtZmlyc3QuZGlyZWN0aXZlJztcbmltcG9ydCB7SUVsZGVyRW50aXR5VmFsdWVBY2Nlc3Nvcn0gZnJvbSAnLi4vZWxkZXItZW50aXR5LXZhbHVlLWFjY2Vzc29yJztcblxuY2xhc3MgRW50aXR5Q29udGV4dDxUPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZTogVCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGludFRleHQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZ1xuICApIHtcbiAgfVxufVxuXG5cbi8qKlxuICogVGhlIGVsZGVyLXNlbGVjdCBjb250cm9sIGFsbG93cyB0byBzZWxlY3QgYSBzaW5nbGVcbiAqIGVudGl0eS5cbiAqXG4gKiBQcmltYXJ5IGZvY3VzIGlzIG9uIGVhc3kgdXNhZ2UgZm9yIGNvbW1vbiBzY2VuYXJpb3M6XG4gKlxuICogLSBJbnRlZ3JhdGVkIGludG8gYW5ndWxhciBmb3JtcyBhbmQgdmFsaWRhdGlvblxuICogLSBTdXBwb3J0IGVudGl0eSBpZCBoYW5kbGluZywgaW5wdXQgLyBvdXRwdXQgaXMgdGhlIGVudGl0eSBpZCB2cyBmdWxsIHZhbHVlLlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZWxkZXItc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VsZGVyLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VsZGVyLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogRUxERVJfU0VMRUNUX0JBU0UsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFbGRlclNlbGVjdENvbXBvbmVudClcbiAgICB9LFxuICAgIC4uLmJ1aWxkRm9ybUludGVncmF0aW9uUHJvdmlkZXJzKEVsZGVyU2VsZWN0Q29tcG9uZW50KVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyU2VsZWN0Q29tcG9uZW50PFRFbnRpdHkgPSBhbnksIFRJZCA9IGFueSwgVFZhbHVlID0gVEVudGl0eSB8IFRJZD5cbiAgZXh0ZW5kcyBFbGRlclNlbGVjdEJhc2U8VElkLCBURW50aXR5LCBUVmFsdWU+XG4gIGltcGxlbWVudHMgSUVsZGVyRW50aXR5VmFsdWVBY2Nlc3NvcjxURW50aXR5LCBUSWQ+LCBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGludFByb3BlcnR5UmVzb2x2ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0UmVzb2x2ZXJGbj4oKHZhbHVlOiBURW50aXR5KSA9PiBudWxsKTtcblxuICBwcml2YXRlIF9hbGxvd051bGwgPSBmYWxzZTtcblxuICAvKipcbiAgICogU3RyaW5nIHRvIGRpc3BsYXkgZm9yIHRoZSAnbm90aGluZycgLyBudWxsIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG51bGxEaXNwbGF5ID0gJy0nO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5SWRDaGFuZ2U6IE9ic2VydmFibGU8VElkPjtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVudGl0eUNoYW5nZTogT2JzZXJ2YWJsZTxURW50aXR5PjtcblxuICAvKipcbiAgICogU2ltaWxhciB0byBlbnRpdHktaWQgY2hhbmdlLCBidXQgZW1pdHMgb25seSB3aGVuIHRoZSB1c2VyXG4gICAqIGhhcyB1cGRhdGVkIHRoZSB2YWx1ZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5SWRVcGRhdGVkOiBPYnNlcnZhYmxlPFRJZD47XG5cbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gZW50aXR5IGNoYW5nZSwgYnV0IGVtaXRzIG9ubHkgd2hlbiB0aGUgdXNlclxuICAgKiBoYXMgdXBkYXRlZCB0aGUgdmFsdWUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVudGl0eVVwZGF0ZWQ6IE9ic2VydmFibGU8VEVudGl0eT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbnRpdHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxURW50aXR5Pih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX2F1dG9jb21wbGV0ZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZWFkb25seSBlbnRpdHlXcmFwcGVkJDogT2JzZXJ2YWJsZTxFbnRpdHlDb250ZXh0PFRFbnRpdHk+PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlucHV0VGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBwcml2YXRlIGVudGl0eUNvbnRleHQ6IEVudGl0eUNvbnRleHQ8VEVudGl0eT47XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgem9uZTogTmdab25lLFxuICApIHtcbiAgICBzdXBlcih6b25lKTtcblxuICAgIHRoaXMuZW50aXR5SWRDaGFuZ2UgPSB0aGlzLnZhbHVlQ2hhbmdlLnBpcGUoXG4gICAgICBtYXAodiA9PiB0aGlzLmVudGl0eUlkRnJvbVZhbHVlKHYpKVxuICAgICk7XG5cbiAgICB0aGlzLmVudGl0eUNoYW5nZSA9IHRoaXMuZW50aXR5JC5waXBlKFxuICAgICAgc2tpcCgxKSAvLyBTa2lwIHRoZSBpbml0aWFsIE5VTEwgdmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5lbnRpdHlJZFVwZGF0ZWQgPSB0aGlzLnZhbHVlVXBkYXRlZC5waXBlKFxuICAgICAgbWFwKHZhbHVlID0+IHRoaXMuZW50aXR5SWRGcm9tVmFsdWUodmFsdWUpKVxuICAgICk7XG5cbiAgICB0aGlzLmVudGl0eVVwZGF0ZWQgPSBjb21iaW5lTGF0ZXN0KFxuICAgICAgW3RoaXMuZW50aXR5SWRVcGRhdGVkLCB0aGlzLmVudGl0eSRdXG4gICAgKS5waXBlKFxuICAgICAgIGZpbHRlcigoW3VwZGF0ZWRJZCwgZW50aXR5XSkgPT4gdGhpcy5nZXRFbnRpdHlJZChlbnRpdHkpID09PSB1cGRhdGVkSWQpLFxuICAgICAgICBtYXAoKFt1cGRhdGVkSWQsIGVudGl0eV0pID0+IGVudGl0eSlcbiAgICApO1xuXG4gICAgdGhpcy5lbnRpdHlXcmFwcGVkJCA9IGNvbWJpbmVMYXRlc3QoXG4gICAgICBbXG4gICAgICAgIHRoaXMuZW50aXR5JCxcbiAgICAgICAgdGhpcy5kaXNwbGF5UHJvcGVydHlSZXNvbHZlciQsXG4gICAgICAgIHRoaXMuaGludFByb3BlcnR5UmVzb2x2ZXIkXG4gICAgICBdXG4gICAgKS5waXBlKFxuICAgICAgbWFwKChbdmFsdWUsIGRQUiwgaFBSXSkgPT4gbmV3IEVudGl0eUNvbnRleHQ8VEVudGl0eT4odmFsdWUsIGhQUih2YWx1ZSksIGRQUih2YWx1ZSkpKVxuICAgICk7XG5cbiAgICB0aGlzLmlucHV0VGV4dCQgPSB0aGlzLmVudGl0eVdyYXBwZWQkLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgdGFwKHZhbHVlQ29udGV4dCA9PiB0aGlzLmVudGl0eUNvbnRleHQgPSB2YWx1ZUNvbnRleHQpLFxuICAgICAgbWFwKHZhbHVlQ29udGV4dCA9PiB7XG4gICAgICAgIGlmICh2YWx1ZUNvbnRleHQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVDb250ZXh0LmRpc3BsYXlUZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogTGlmZSBDeWNsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB0aGlzLmF1dG9DbGVhblVwKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQmVoYXZpb3VyIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGF1dG9jb21wbGV0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2F1dG9jb21wbGV0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgJ25vdGhpbmcnIC8gbnVsbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYWxsb3dOdWxsKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2FsbG93TnVsbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpO1xuICB9XG5cbiAgcHVibGljIGdldCBhbGxvd051bGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93TnVsbDtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZW50aXR5KGVudGl0eTogVEVudGl0eSkge1xuICAgIHRoaXMuZW50aXR5JC5uZXh0KGVudGl0eSk7XG4gICAgdGhpcy53cml0ZVZhbHVlSW50ZXJuYWwoXG4gICAgICB0aGlzLmVudGl0eVRvVmFsdWUoZW50aXR5KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVudGl0eSgpOiBURW50aXR5IHtcbiAgICByZXR1cm4gdGhpcy5lbnRpdHkkLmdldFZhbHVlKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVudGl0eUlkKGlkOiBUSWQpIHtcbiAgICBpZiAodGhpcy52YWx1ZUFzSWQpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZUludGVybmFsKDxhbnk+aWQgYXMgVFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RFbnRpdHlCeUlkKGlkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVudGl0eUlkKCk6IFRJZCB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5SWRGcm9tVmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhpbnRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgdGhpcy5oaW50UHJvcGVydHlSZXNvbHZlciA9ICh2YWx1ZSA9PiB0aGlzLnByb3BlcnR5U3RyaW5nVmFsdWUodmFsdWUsIHByb3BlcnR5KSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhpbnRQcm9wZXJ0eVJlc29sdmVyKHJlc29sdmVyOiBUZXh0UmVzb2x2ZXJGbikge1xuICAgIHRoaXMuaGludFByb3BlcnR5UmVzb2x2ZXIkLm5leHQocmVzb2x2ZXIpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG9uSW5wdXRCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAodGhpcy5lbnRpdHlDb250ZXh0LnZhbHVlKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IHRoaXMuZW50aXR5Q29udGV4dC5kaXNwbGF5VGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQudmFsdWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcHRpb25EaXNhYmxlZEludGVybmFsRm4oKTogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFRFbnRpdHkpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0VudGl0eVNlbGVjdGVkKG9wdGlvbikpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcHRpb25EaXNhYmxlZEZuKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25EaXNhYmxlZEZuKG9wdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldCBpc09wdGlvbkhpZGRlbkludGVybmFsRm4oKTogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFRFbnRpdHkpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzT3B0aW9uSGlkZGVuRm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25IaWRkZW5GbihvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuXG4gIHB1YmxpYyB0b2dnbGVQYW5lbChhdXRvVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcik6IHZvaWQge1xuICAgIGlmIChhdXRvVHJpZ2dlci5hdXRvY29tcGxldGUuaXNPcGVuKSB7XG4gICAgICBhdXRvVHJpZ2dlci5jbG9zZVBhbmVsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdSZXF1ZXN0aW5nIHRvIG9wZW4gYXV0by1jb21wbGV0ZSBwYW5lbC4uLicsIGF1dG9UcmlnZ2VyKTtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zRGMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zRGMuc3RhcnQodGhpcy5zb3J0cywgdGhpcy5maWx0ZXJzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEQyEnLCBlcnIpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoRWxkZXJTZWxlY3RDb21wb25lbnRTdGF0ZS5lcnJvcihlcnIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXV0b1RyaWdnZXIub3BlblBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSW5wdXRDbGlja2VkKGF1dG9UcmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyKTogdm9pZCB7XG5cbiAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1Zygnb25JbnB1dENsaWNrZWQsIGxvY2tlZDogJyArIHRoaXMuaXNMb2NrZWQgKyAnLCBhdXRvY29tcGxldGU6ICcgKyB0aGlzLmF1dG9jb21wbGV0ZSwgYXV0b1RyaWdnZXIpO1xuICAgIGlmICh0aGlzLmlzTG9ja2VkIHx8IHRoaXMuYXV0b2NvbXBsZXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlUGFuZWwoYXV0b1RyaWdnZXIpO1xuICB9XG5cbiAgcHVibGljIG9uT3B0aW9uU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZTogVEVudGl0eSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRW50aXR5U2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZSkpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZUludGVybmFsKG51bGwpOyAvLyBIQUNLOiBFbnN1cmUgd2UgdHJpZ2dlciB2aWV3IHJlZHJhd1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZhbHVlQnlFbnRpdHkoc2VsZWN0ZWRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgb3BlblNlbGVjdGlvblBvcHVwKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvblBvcHVwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvblBvcHVwLmNob29zZShcbiAgICAgICAgdGhpcy5maWx0ZXJzLFxuICAgICAgICB0aGlzLnNvcnRzXG4gICAgICApLnN1YnNjcmliZShcbiAgICAgICAgKHNlbGVjdGlvbjogVEVudGl0eVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZUJ5RW50aXR5KHNlbGVjdGlvblswXSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0NhbnQgb3BlbiBzZWxlY3Rpb24gYnJvd3NlciBwb3B1cCwgc2luY2UgW1NlbGVjdGlvbk1vZGVsUG9wdXBEaXJlY3RpdmVdIHdhcyBub3QgZm91bmQhJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsZWFyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmFsdWUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgZm9yY2VSZWxvYWRGaXJzdCgpIHtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDsgLy8gdmFsdWVJZCBpcyBzZXQgdG8gbnVsbCBhdXRvbWF0aWNhbGx5XG4gICAgY29uc3QgYXV0b1JlbG9hZEZpcnN0ID0gbmV3IEF1dG9TZWxlY3RGaXJzdERpcmVjdGl2ZSh0aGlzKTtcbiAgICBhdXRvUmVsb2FkRmlyc3QudHJ5U2VsZWN0Rmlyc3QoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWYWx1ZUJ5RW50aXR5KGVudGl0eTogVEVudGl0eSk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmFsdWUoXG4gICAgICB0aGlzLmVudGl0eVRvVmFsdWUoZW50aXR5KVxuICAgICk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQWJzdHJhY3QgSW1wbGVtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gdGhlIHN1Z2dlc3Rpb25zIGRhdGEtY29udGV4dCBoYXMgY2hhbmdlZFxuICAgKi9cbiAgcHJvdGVjdGVkIG9uU3VnZ2VzdGlvbnNEY0NoYW5nZWQoZGF0YTogSURhdGFDb250ZXh0PFRFbnRpdHk+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lkKSB7XG4gICAgICB0aGlzLnNlbGVjdEVudGl0eUJ5SWQodGhpcy5lbnRpdHlJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgTWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJvdGVjdGVkIHZhbHVlc0VxdWFscyhhOiBUVmFsdWUsIGI6IFRWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVudGl0eUlkRnJvbVZhbHVlKGEpID09PSB0aGlzLmVudGl0eUlkRnJvbVZhbHVlKGIpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VudGl0eVNlbGVjdGVkKGVudGl0eTogVEVudGl0eSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEVudGl0eUlkKGVudGl0eSkgPT09IHRoaXMuZW50aXR5SWQ7XG4gIH1cblxuICBwcml2YXRlIGVudGl0eUlkRnJvbVZhbHVlKHZhbHVlOiBUVmFsdWUpOiBUSWQge1xuICAgIGlmICh0aGlzLnZhbHVlQXNJZCkge1xuICAgICAgcmV0dXJuIDxhbnk+dmFsdWUgYXMgVElkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSAoPGFueT52YWx1ZSkgYXMgVEVudGl0eTtcbiAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eUlkKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RFbnRpdHlCeUlkKGlkOiBUSWQpOiB2b2lkIHtcblxuICAgIGNvbnN0IGN1cnJlbnRFbnRpdHkgPSB0aGlzLmVudGl0eTtcbiAgICBpZiAoY3VycmVudEVudGl0eSAmJiB0aGlzLmdldEVudGl0eUlkKGN1cnJlbnRFbnRpdHkpID09PSBpZCkge1xuICAgICAgcmV0dXJuOyAvLyBFbnRpdHkgYWxyZWFkeSBsb2FkZWRcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IG51bGwgfHwgaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGN1cnJlbnRFbnRpdHkgIT09IG51bGwgJiYgY3VycmVudEVudGl0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZW50aXR5ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnNEYykge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZmluZEluRGF0YUNvbnRleHQoaWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICB0aGlzLmVudGl0eSA9IGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9hZEVudGl0eUJ5SWQoaWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdGYWlsZWQgdG8gc2VsZWN0IHZhbHVlIGJ5IElkOiAnICsgaWQgKyAnIC0gRGF0YUNvbnRleHQgbm90IGF2YWlsYWJsZS4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRFbnRpdHlCeUlkKGlkOiBUSWQpOiB2b2lkIHtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zRGMuZGF0YVNvdXJjZS5maW5kQnlJZCg8YW55PmlkKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgZW50aXR5ID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGVkIG1pc3NpbmcgZW50aXR5IGJ5IGlkICcgKyBpZCArICc6JywgZW50aXR5KTtcbiAgICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGxvYWQgZW50aXR5IGJ5IGlkICcgKyBpZCwgZXJyKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKEVsZGVyU2VsZWN0Q29tcG9uZW50U3RhdGUuZXJyb3IoZXJyKSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRJbkRhdGFDb250ZXh0KGlkOiBUSWQpOiBURW50aXR5IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbnNEYy5zbmFwc2hvdC5kYXRhXG4gICAgICAuZmluZCh2ID0+IHRoaXMuZ2V0RW50aXR5SWQodikgPT09IGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZW50aXR5VG9WYWx1ZShlbnRpdHk6IFRFbnRpdHkpOiBUVmFsdWUge1xuICAgIGlmICh0aGlzLnZhbHVlQXNJZCkge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEVudGl0eUlkKGVudGl0eSk7XG4gICAgICByZXR1cm4gPGFueT5pZCBhcyBUVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8YW55PmVudGl0eSBhcyBUVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYWZ0ZXIgYSB2YWx1ZSBoYXMgYmVlbiB3cml0dGVuIHRvIHRoaXMgY29udHJvbC5cbiAgICpcbiAgICovXG4gIHByb3RlY3RlZCB3cml0ZVRvQ29udHJvbCh2YWx1ZTogVFZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lkKSB7XG4gICAgICBjb25zdCBlbnRpdHlJZCA9IDxhbnk+dmFsdWUgYXMgVElkO1xuICAgICAgLy8gVmFsdWUgd2FzIHdyaXR0ZW4gYXMgZW50aXR5IGlkLCBlbnN1cmUgd2Ugc2VsZWN0IGVudGl0eSBieSBpZFxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3dyaXRlVG9Db250cm9sOiB2YWx1ZSB3YXMgd3JpdHRlbiBhcyBpZDogJyArIGVudGl0eUlkLCB2YWx1ZSk7XG4gICAgICB0aGlzLnNlbGVjdEVudGl0eUJ5SWQoZW50aXR5SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWYWx1ZSB3YXMgd3JpdHRlbiBhcyBlbnRpdHksIGVuc3VyZSBlbnRpdHkgaXMgdXBkYXRlZFxuICAgICAgY29uc3QgY3VycmVudEVudGl0eSA9IHRoaXMuZW50aXR5O1xuICAgICAgY29uc3QgbmV3RW50aXR5ID0gPGFueT52YWx1ZSBhcyBURW50aXR5O1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3dyaXRlVG9Db250cm9sOiB2YWx1ZSB3YXMgd3JpdHRlbiBhcyBlbnRpdHk6ICcgKyBKU09OLnN0cmluZ2lmeShuZXdFbnRpdHkpLCB2YWx1ZSk7XG4gICAgICBpZiAoIXRoaXMuaXNFcXVhbChjdXJyZW50RW50aXR5LCBuZXdFbnRpdHkpKSB7XG4gICAgICAgIHRoaXMuZW50aXR5JC5uZXh0KG5ld0VudGl0eSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdJZ25vcmVkIHdyaXR0ZW4gZW50aXR5IGFzIGl0IGlzIGFscmVhZHkgc2V0IHRvIGVudGl0eSQhJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLndyaXRlVG9Db250cm9sKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGZvcm1zIEFQSSB0byB3cml0ZSB0byB0aGUgdmlldyB3aGVuIHByb2dyYW1tYXRpY1xuICAgKiBjaGFuZ2VzIGZyb20gbW9kZWwgdG8gdmlldyBhcmUgcmVxdWVzdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIGVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBUVmFsdWUpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygnRWxkZXJTZWxlY3RCYXNlLndyaXRlVmFsdWUoKTogQ3VycmVudCB2YWx1ZS1pZCAnICsgdGhpcy5fdmFsdWVJZCArICcsIG5ldyB2YWx1ZTogJywgdmFsdWUpO1xuICAgIHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc051bGxPckVtcHR5KHZhbHVlOiBUVmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHZhbHVlID09IG51bGwgfHwgKDxhbnk+dmFsdWUpID09PSAnJyk7XG4gIH1cblxufVxuIiwiPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiKGVudGl0eVdyYXBwZWQkIHwgYXN5bmMpIGFzIGVudGl0eVdyYXBwZXJcIiBmeEZsZXhcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVsZGVyLXN0ZC1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuPlxuXG4gIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuXG5cbiAgPG5nLWNvbnRhaW5lciBtYXRQcmVmaXggKm5nSWY9XCIobWVyZ2VkU3RhdGUkIHwgYXN5bmMpIGFzIHN0YXRlXCI+XG5cbiAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgZGlzYWJsZWRcbiAgICAgICAgICAgICAgY2xhc3M9XCJsZWFkaW5nLWljb24gcHJlZml4LXBhZGRpbmcgbm9zZWxlY3RcIlxuICAgICAgICAgICAgICBbY2xhc3MubG9hZGluZ109XCJzdGF0ZS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cInN0YXRlPy5lcnJvciA/ICd3YXJuJyA6IGNvbG9yXCI+XG4gICAgICB7e2ljb259fVxuICAgIDwvbWF0LWljb24+XG5cblxuICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpY29uICYmIHN0YXRlPy5lcnJvclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVhZGluZy1pY29uIHByZWZpeC1wYWRkaW5nIG5vc2VsZWN0XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCI+XG4gICAgICB3YXJuaW5nXG4gICAgPC9tYXQtaWNvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBBIGR5bmFtaWMgaW5wdXQgLS0+XG4gIDxpbnB1dFxuICAgIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgZnhGbGV4PVwiZ3Jvd1wiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seSB8fCAhYXV0b2NvbXBsZXRlXCJcbiAgICBbbmFtZV09XCJuYW1lICsgJy1pbm5lci1pbnB1dCdcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgW21hdEF1dG9jb21wbGV0ZV0gI2F1dG9UcmlnZ2VyPVwibWF0QXV0b2NvbXBsZXRlVHJpZ2dlclwiXG4gICAgW2VsZGVyRWxkZXJBdXRvY29tcGxldGVdPVwiZWxkZXJBdXRvXCIgW3F1ZXJ5RmlsdGVyXT1cInF1ZXJ5RmlsdGVyXCIgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiIFtzb3J0c109XCJzb3J0c1wiXG4gICAgZWxkZXJTZWxlY3RPblRhYlxuICAgIFtjbGFzcy5zZWxlY3RdPVwiIWF1dG9jb21wbGV0ZVwiIChjbGljayk9XCJvbklucHV0Q2xpY2tlZChhdXRvVHJpZ2dlcilcIlxuICAgIFtuZ01vZGVsXT1cImlucHV0VGV4dCQgfCBhc3luY1wiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZSwgdXBkYXRlT246ICdzdWJtaXQnfVwiXG4gICAgKGJsdXIpPVwib25JbnB1dEJsdXIoJGV2ZW50KVwiXG4gID5cblxuICA8IS0tIFRoaXMgYnJlYWtzIHN0dWZmOiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkIHwgYXN5bmNcIiAtLT5cblxuICA8ZWxkZXItYXV0b2NvbXBsZXRlXG4gICAgI2VsZGVyQXV0bz1cImVsZGVyQXV0b2NvbXBsZXRlXCJcbiAgICBbc3VnZ2VzdGlvbnNEY109XCJzdWdnZXN0aW9uc0RjJCB8IGFzeW5jXCJcbiAgICBbdmFsdWVUZW1wbGF0ZV09XCJ2YWx1ZVRlbXBsYXRlXCJcbiAgICBbZW5hYmxlZF09XCJhdXRvY29tcGxldGVcIlxuICAgIFtkaXNwbGF5UHJvcGVydHlSZXNvbHZlcl09XCJkaXNwbGF5UHJvcGVydHlSZXNvbHZlciQgfCBhc3luY1wiXG4gICAgW2lzT3B0aW9uRGlzYWJsZWRGbl09XCJpc09wdGlvbkRpc2FibGVkSW50ZXJuYWxGblwiXG4gICAgW2lzT3B0aW9uSGlkZGVuRm5dPVwiaXNPcHRpb25IaWRkZW5JbnRlcm5hbEZuXCJcbiAgICAob3B0aW9uU2VsZWN0ZWQpPVwib25PcHRpb25TZWxlY3RlZCgkYW55KCRldmVudCkpXCJcbiAgPjwvZWxkZXItYXV0b2NvbXBsZXRlPlxuXG5cbiAgPG5nLWNvbnRhaW5lciBtYXRTdWZmaXg+XG5cbiAgICA8bWF0LWljb25cbiAgICAgICpuZ0lmPVwiIWF1dG9jb21wbGV0ZVwiIGNsYXNzPVwic2VsZWN0LWFycm93IG5vc2VsZWN0XCJcbiAgICAgIChjbGljayk9XCJvbklucHV0Q2xpY2tlZChhdXRvVHJpZ2dlcilcIj5cbiAgICAgIGFycm93X2Ryb3BfZG93blxuICAgIDwvbWF0LWljb24+XG5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0aW9uUG9wdXAgJiYgKCFlbnRpdHlXcmFwcGVyLnZhbHVlIHx8ICFhbGxvd051bGwpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblNlbGVjdGlvblBvcHVwKCRldmVudClcIiBhcmlhLWxhYmVsPVwiU2VhcmNoXCJcbiAgICAgICAgICAgIGVsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25cbiAgICAgICAgICAgIHRhYkluZGV4PVwiLTFcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAqbmdJZj1cImVudGl0eVdyYXBwZXIudmFsdWUgJiYgYWxsb3dOdWxsXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJDbGVhclwiXG4gICAgICAgICAgICBlbGRlclN0b3BFdmVudFByb3BhZ2F0aW9uXG4gICAgICAgICAgICB0YWJJbmRleD1cIi0xXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxtYXQtaGludCAqbmdJZj1cImVudGl0eVdyYXBwZXIuaGludFRleHRcIj57e2VudGl0eVdyYXBwZXIuaGludFRleHR9fTwvbWF0LWhpbnQ+XG5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cblxuXG4iXX0=
|