@valtimo/components 11.3.2 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/css/carbon.scss +81 -110
- package/assets/css/color.scss +28 -0
- package/assets/css/compatibility.scss +710 -0
- package/assets/css/design-tokens.css +31 -31
- package/assets/css/ng-multiselect-dropdown.theme.scss +1 -1
- package/esm2022/lib/components/alert/alert.component.mjs +7 -8
- package/esm2022/lib/components/alert/alert.module.mjs +6 -6
- package/esm2022/lib/components/alert/alert.service.mjs +6 -6
- package/esm2022/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.mjs +7 -7
- package/esm2022/lib/components/bpmn-js-diagram/bpmn-js-diagram.module.mjs +6 -6
- package/esm2022/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.mjs +36 -12
- package/esm2022/lib/components/breadcrumb-navigation/breadcrumb-navigation.module.mjs +6 -6
- package/esm2022/lib/components/breadcrumb-navigation/breadcrumb.service.mjs +6 -6
- package/esm2022/lib/components/button/button.component.mjs +6 -6
- package/esm2022/lib/components/button/button.module.mjs +6 -6
- package/esm2022/lib/components/camunda/form/camunda-form.components.mjs +7 -7
- package/esm2022/lib/components/camunda/form/camunda-form.module.mjs +6 -6
- package/esm2022/lib/components/camunda/form/custom/camunda-custom-form.component.mjs +7 -7
- package/esm2022/lib/components/camunda/form/custom/camunda-custom-form.module.mjs +6 -6
- package/esm2022/lib/components/camunda/form/generated/camunda-generated-form.component.mjs +7 -7
- package/esm2022/lib/components/camunda/form/generated/camunda-generated-form.module.mjs +6 -6
- package/esm2022/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.mjs +7 -7
- package/esm2022/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.mjs +6 -6
- package/esm2022/lib/components/camunda/form/generated/formfield/camunda-formfield.service.mjs +6 -6
- package/esm2022/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.mjs +13 -13
- package/esm2022/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.mjs +7 -7
- package/esm2022/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.mjs +7 -7
- package/esm2022/lib/components/camunda/form/generated/formfield/formfield.model.mjs +2 -2
- package/esm2022/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.mjs +7 -7
- package/esm2022/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.mjs +7 -7
- package/esm2022/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.mjs +7 -7
- package/esm2022/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.mjs +7 -7
- package/esm2022/lib/components/camunda/form/generated/formfield/validation/date.validators.mjs +2 -2
- package/esm2022/lib/components/carbon-list/CarbonListFilterPipe.directive.mjs +5 -5
- package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +58 -18
- package/esm2022/lib/components/carbon-list/carbon-list.module.mjs +29 -10
- package/esm2022/lib/components/carbon-list/no-results/carbon-no-results.component.mjs +6 -6
- package/esm2022/lib/components/carbon-list/tags-modal/tags-modal.component.mjs +33 -0
- package/esm2022/lib/components/card/card.component.mjs +7 -9
- package/esm2022/lib/components/card/card.module.mjs +6 -6
- package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +41 -16
- package/esm2022/lib/components/confirmation-modal/confirmation-modal.module.mjs +6 -6
- package/esm2022/lib/components/data-list/data-list.component.mjs +7 -9
- package/esm2022/lib/components/data-list/data-list.module.mjs +6 -6
- package/esm2022/lib/components/date-picker/date-picker.component.mjs +15 -9
- package/esm2022/lib/components/date-picker/date-picker.module.mjs +6 -6
- package/esm2022/lib/components/dropzone/dropzone.component.mjs +8 -8
- package/esm2022/lib/components/dropzone/dropzone.module.mjs +6 -6
- package/esm2022/lib/components/editor/editor.component.mjs +59 -13
- package/esm2022/lib/components/editor/editor.module.mjs +8 -7
- package/esm2022/lib/components/editor/editor.service.mjs +35 -11
- package/esm2022/lib/components/expansion-panel/expansion-panel.component.mjs +6 -6
- package/esm2022/lib/components/expansion-panel/expansion-panel.module.mjs +6 -6
- package/esm2022/lib/components/field-auto-focus/field-auto-focus.directive.mjs +6 -6
- package/esm2022/lib/components/field-auto-focus/field-auto-focus.module.mjs +6 -6
- package/esm2022/lib/components/file-size/file-size.module.mjs +6 -6
- package/esm2022/lib/components/file-size/file-size.pipe.mjs +5 -5
- package/esm2022/lib/components/filter-sidebar/filter-sidebar.component.mjs +7 -7
- package/esm2022/lib/components/filter-sidebar/filter-sidebar.module.mjs +6 -6
- package/esm2022/lib/components/form/form.component.mjs +6 -6
- package/esm2022/lib/components/form/form.module.mjs +6 -6
- package/esm2022/lib/components/form-io/form-io-builder.component.mjs +10 -10
- package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user-edit-form.mjs +2 -2
- package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user.component.mjs +6 -6
- package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user.formio.mjs +3 -3
- package/esm2022/lib/components/form-io/form-io-iban/iban.component.mjs +4 -4
- package/esm2022/lib/components/form-io/form-io-iban/iban.formio.mjs +2 -2
- package/esm2022/lib/components/form-io/form-io-iban/iban.validators.mjs +1 -1
- package/esm2022/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.mjs +3 -3
- package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.mjs +2 -2
- package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader.component.mjs +7 -7
- package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader.formio.mjs +3 -3
- package/esm2022/lib/components/form-io/form-io.component.mjs +38 -29
- package/esm2022/lib/components/form-io/form-io.module.mjs +6 -15
- package/esm2022/lib/components/form-io/formio-config.mjs +2 -2
- package/esm2022/lib/components/form-io/services/form-io-dom.service.mjs +6 -6
- package/esm2022/lib/components/form-io/services/form-io-local-storage.service.mjs +4 -4
- package/esm2022/lib/components/form-io/services/form-io-state.service.mjs +5 -5
- package/esm2022/lib/components/input/input.component.mjs +15 -9
- package/esm2022/lib/components/input/input.module.mjs +6 -6
- package/esm2022/lib/components/input-label/input-label.component.mjs +7 -7
- package/esm2022/lib/components/input-label/input-label.module.mjs +6 -6
- package/esm2022/lib/components/left-sidebar/left-sidebar.component.mjs +6 -6
- package/esm2022/lib/components/left-sidebar/left-sidebar.module.mjs +6 -6
- package/esm2022/lib/components/list/ListFilterPipe.directive.mjs +5 -5
- package/esm2022/lib/components/list/list.component.mjs +7 -7
- package/esm2022/lib/components/list/list.module.mjs +6 -6
- package/esm2022/lib/components/menu/menu-item-text.component.mjs +6 -6
- package/esm2022/lib/components/menu/menu-routing.module.mjs +6 -6
- package/esm2022/lib/components/menu/menu.init.mjs +2 -2
- package/esm2022/lib/components/menu/menu.module.mjs +6 -6
- package/esm2022/lib/components/menu/menu.service.mjs +11 -9
- package/esm2022/lib/components/modal/modal.component.mjs +7 -7
- package/esm2022/lib/components/modal/modal.module.mjs +6 -6
- package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +45 -10
- package/esm2022/lib/components/multi-input/carbon-multi-input.module.mjs +6 -6
- package/esm2022/lib/components/multi-input-form/multi-input-form.component.mjs +6 -6
- package/esm2022/lib/components/multi-input-form/multi-input-form.module.mjs +6 -6
- package/esm2022/lib/components/multiselect-dropdown/multiselect-dropdown.component.mjs +6 -6
- package/esm2022/lib/components/multiselect-dropdown/multiselect-dropdown.module.mjs +6 -6
- package/esm2022/lib/components/page/page-container/page-container.component.mjs +6 -6
- package/esm2022/lib/components/page/page-content/page-content.component.mjs +6 -6
- package/esm2022/lib/components/page/page-header/page-header.component.mjs +6 -6
- package/esm2022/lib/components/page/page-header-actions/page-header-actions.component.mjs +6 -6
- package/esm2022/lib/components/page/page-header-introduction/page-header-introduction.component.mjs +6 -6
- package/esm2022/lib/components/page/page.module.mjs +6 -6
- package/esm2022/lib/components/page-actions/page-actions.component.mjs +82 -0
- package/esm2022/lib/components/page-header/page-header.component.mjs +43 -13
- package/esm2022/lib/components/page-header/page-header.module.mjs +27 -7
- package/esm2022/lib/components/page-subtitle/page-subtitle.component.mjs +53 -0
- package/esm2022/lib/components/page-title/page-title.component.mjs +30 -21
- package/esm2022/lib/components/page-title/page-title.module.mjs +8 -8
- package/esm2022/lib/components/paragraph/paragraph.component.mjs +6 -6
- package/esm2022/lib/components/paragraph/paragraph.module.mjs +6 -6
- package/esm2022/lib/components/pending-changes/pending-changes.component.mjs +24 -7
- package/esm2022/lib/components/pending-changes/pending-changes.service.mjs +4 -4
- package/esm2022/lib/components/progress-bar/progress-bar.component.mjs +6 -6
- package/esm2022/lib/components/progress-bar/progress-bar.module.mjs +6 -6
- package/esm2022/lib/components/prompt/prompt.component.mjs +7 -7
- package/esm2022/lib/components/prompt/prompt.module.mjs +6 -6
- package/esm2022/lib/components/radio/radio.component.mjs +6 -6
- package/esm2022/lib/components/radio/radio.module.mjs +6 -6
- package/esm2022/lib/components/right-sidebar/right-sidebar.component.mjs +105 -16
- package/esm2022/lib/components/right-sidebar/right-sidebar.module.mjs +15 -12
- package/esm2022/lib/components/search-fields/search-fields.component.mjs +34 -24
- package/esm2022/lib/components/search-fields/search-fields.module.mjs +24 -9
- package/esm2022/lib/components/searchable-dropdown/searchable-dropdown.component.mjs +6 -6
- package/esm2022/lib/components/searchable-dropdown/searchable-dropdown.module.mjs +6 -6
- package/esm2022/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.mjs +9 -6
- package/esm2022/lib/components/searchable-dropdown-select/searchable-dropdown-select.module.mjs +6 -6
- package/esm2022/lib/components/select/select.component.mjs +12 -8
- package/esm2022/lib/components/select/select.module.mjs +6 -6
- package/esm2022/lib/components/spinner/spinner.component.mjs +6 -6
- package/esm2022/lib/components/spinner/spinner.module.mjs +6 -6
- package/esm2022/lib/components/status-selector/status-selector.component.mjs +86 -0
- package/esm2022/lib/components/stepper/stepper-container/stepper-container.component.mjs +7 -7
- package/esm2022/lib/components/stepper/stepper-content/stepper-content.component.mjs +7 -7
- package/esm2022/lib/components/stepper/stepper-footer/stepper-footer.component.mjs +6 -6
- package/esm2022/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.mjs +7 -7
- package/esm2022/lib/components/stepper/stepper-header/stepper-header.component.mjs +7 -7
- package/esm2022/lib/components/stepper/stepper-step/stepper-step.component.mjs +7 -7
- package/esm2022/lib/components/stepper/stepper.module.mjs +6 -6
- package/esm2022/lib/components/table/table.component.mjs +7 -7
- package/esm2022/lib/components/table/table.module.mjs +6 -6
- package/esm2022/lib/components/timeline/timeline.component.mjs +6 -6
- package/esm2022/lib/components/timeline/timeline.module.mjs +8 -7
- package/esm2022/lib/components/title/title.component.mjs +6 -6
- package/esm2022/lib/components/title/title.module.mjs +6 -6
- package/esm2022/lib/components/tooltip-icon/tooltip-icon.component.mjs +6 -6
- package/esm2022/lib/components/tooltip-icon/tooltip-icon.module.mjs +6 -6
- package/esm2022/lib/components/topbar/topbar.component.mjs +70 -23
- package/esm2022/lib/components/topbar/topbar.module.mjs +6 -6
- package/esm2022/lib/components/uploader/uploader-drag-drop.directive.mjs +5 -5
- package/esm2022/lib/components/uploader/uploader.component.mjs +7 -8
- package/esm2022/lib/components/uploader/uploader.module.mjs +6 -6
- package/esm2022/lib/components/v-card/card.component.mjs +6 -6
- package/esm2022/lib/components/v-card/card.module.mjs +6 -6
- package/esm2022/lib/components/v-modal/modal.component.mjs +7 -7
- package/esm2022/lib/components/v-modal/modal.module.mjs +6 -6
- package/esm2022/lib/components/version/version.service.mjs +6 -6
- package/esm2022/lib/components/view-content/type-converters/booleanTypeConverter.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/dateTypeConverter.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/enumTypeConverter.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/relatedFilesTypeConverter.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/stringTypeConverter.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/type-converters.model.mjs +2 -2
- package/esm2022/lib/components/view-content/view-content.service.mjs +6 -6
- package/esm2022/lib/components/webcam/webcam.component.mjs +6 -6
- package/esm2022/lib/components/webcam/webcam.module.mjs +6 -6
- package/esm2022/lib/components/widget/widget.component.mjs +6 -6
- package/esm2022/lib/components/widget/widget.module.mjs +6 -6
- package/esm2022/lib/constants/carbon.constants.mjs +2 -2
- package/esm2022/lib/constants/index.mjs +3 -2
- package/esm2022/lib/constants/status.constants.mjs +18 -0
- package/esm2022/lib/constants/view-type-converter.constants.mjs +16 -1
- package/esm2022/lib/directives/command-click/command-click-directive.module.mjs +6 -6
- package/esm2022/lib/directives/command-click/command-click.directive.mjs +6 -6
- package/esm2022/lib/directives/digit-only/digit-only.directive.mjs +6 -6
- package/esm2022/lib/directives/fit-page/fit-page-directive.module.mjs +33 -0
- package/esm2022/lib/directives/fit-page/fit-page.directive.mjs +54 -0
- package/esm2022/lib/directives/render-in-page-header/render-in-page-header-directive.module.mjs +6 -6
- package/esm2022/lib/directives/render-in-page-header/render-in-page-header.directive.mjs +23 -10
- package/esm2022/lib/directives/render-page-header/render-page-header-directive.module.mjs +33 -0
- package/esm2022/lib/directives/render-page-header/render-page-header.directive.mjs +56 -0
- package/esm2022/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.mjs +33 -0
- package/esm2022/lib/directives/render-page-subtitle/render-page-subtitle.directive.mjs +57 -0
- package/esm2022/lib/directives/tooltip/tooltip.component.mjs +6 -6
- package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +6 -6
- package/esm2022/lib/directives/tooltip/tooltip.module.mjs +6 -6
- package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.mjs +6 -6
- package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.mjs +7 -7
- package/esm2022/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button-directive.module.mjs +6 -6
- package/esm2022/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button.directive.mjs +7 -7
- package/esm2022/lib/guards/index.mjs +2 -2
- package/esm2022/lib/guards/pending-changes.guard.mjs +1 -1
- package/esm2022/lib/models/alert.model.mjs +2 -2
- package/esm2022/lib/models/button.model.mjs +2 -2
- package/esm2022/lib/models/carbon-list.model.mjs +2 -1
- package/esm2022/lib/models/carbon-pagination.model.mjs +2 -2
- package/esm2022/lib/models/carbon-tag.model.mjs +17 -0
- package/esm2022/lib/models/carbon-theme.model.mjs +24 -0
- package/esm2022/lib/models/choice-field.model.mjs +17 -0
- package/esm2022/lib/models/choicefield-value.model.mjs +17 -0
- package/esm2022/lib/models/documenten-api-metadata.model.mjs +2 -2
- package/esm2022/lib/models/editor.model.mjs +8 -3
- package/esm2022/lib/models/form-io.model.mjs +2 -2
- package/esm2022/lib/models/form.model.mjs +2 -2
- package/esm2022/lib/models/index.mjs +11 -4
- package/esm2022/lib/models/input.model.mjs +2 -2
- package/esm2022/lib/models/modal.model.mjs +2 -2
- package/esm2022/lib/models/multi-input.model.mjs +2 -2
- package/esm2022/lib/models/pagination.model.mjs +2 -2
- package/esm2022/lib/models/radio.model.mjs +2 -2
- package/esm2022/lib/models/right-sidebar.model.mjs +17 -0
- package/esm2022/lib/models/searchable-dropdown.model.mjs +2 -2
- package/esm2022/lib/models/select.model.mjs +2 -2
- package/esm2022/lib/models/sort.model.mjs +2 -2
- package/esm2022/lib/models/stepper.model.mjs +2 -2
- package/esm2022/lib/models/table.model.mjs +2 -2
- package/esm2022/lib/models/theme.model.mjs +28 -0
- package/esm2022/lib/models/timeline.model.mjs +2 -2
- package/esm2022/lib/models/title.model.mjs +2 -2
- package/esm2022/lib/models/topbar.model.mjs +17 -0
- package/esm2022/lib/models/version.model.mjs +2 -2
- package/esm2022/lib/modules/custom-formio-component/create-custom-component.mjs +162 -0
- package/esm2022/lib/modules/custom-formio-component/custom-tags.service.mjs +32 -0
- package/esm2022/lib/modules/custom-formio-component/elements.common.mjs +17 -0
- package/esm2022/lib/modules/custom-formio-component/index.mjs +20 -0
- package/esm2022/lib/modules/custom-formio-component/register-custom-component.mjs +38 -0
- package/esm2022/lib/modules/index.mjs +17 -0
- package/esm2022/lib/pipes/case-count.pipe.mjs +5 -5
- package/esm2022/lib/pipes/components-pipes.module.mjs +6 -6
- package/esm2022/lib/pipes/index.mjs +2 -2
- package/esm2022/lib/pipes/is-array.pipe.mjs +5 -5
- package/esm2022/lib/pipes/menu-item-translation.pipe.mjs +6 -6
- package/esm2022/lib/services/cds-theme.service.mjs +97 -0
- package/esm2022/lib/services/choice-field.service.mjs +70 -0
- package/esm2022/lib/services/index.mjs +21 -1
- package/esm2022/lib/services/modal.service.mjs +6 -6
- package/esm2022/lib/services/page-header.service.mjs +83 -0
- package/esm2022/lib/services/page-subtitle.service.mjs +46 -0
- package/esm2022/lib/services/page-title.service.mjs +121 -0
- package/esm2022/lib/services/prompt.service.mjs +5 -5
- package/esm2022/lib/services/shell.service.mjs +6 -6
- package/esm2022/lib/services/stepper.service.mjs +5 -5
- package/esm2022/lib/services/user-interface.service.mjs +5 -5
- package/esm2022/lib/services/valtimo-modal.service.mjs +5 -5
- package/esm2022/public_api.mjs +17 -7
- package/fesm2022/valtimo-components.mjs +8349 -7434
- package/fesm2022/valtimo-components.mjs.map +1 -1
- package/lib/components/alert/alert.component.d.ts +2 -3
- package/lib/components/alert/alert.component.d.ts.map +1 -1
- package/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.d.ts +11 -2
- package/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.d.ts.map +1 -1
- package/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.d.ts +3 -3
- package/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.d.ts.map +1 -1
- package/lib/components/carbon-list/carbon-list.component.d.ts +12 -3
- package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -1
- package/lib/components/carbon-list/carbon-list.module.d.ts +9 -7
- package/lib/components/carbon-list/carbon-list.module.d.ts.map +1 -1
- package/lib/components/carbon-list/tags-modal/tags-modal.component.d.ts +14 -0
- package/lib/components/carbon-list/tags-modal/tags-modal.component.d.ts.map +1 -0
- package/lib/components/card/card.component.d.ts +1 -4
- package/lib/components/card/card.component.d.ts.map +1 -1
- package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +12 -4
- package/lib/components/confirmation-modal/confirmation-modal.component.d.ts.map +1 -1
- package/lib/components/data-list/data-list.component.d.ts +1 -4
- package/lib/components/data-list/data-list.component.d.ts.map +1 -1
- package/lib/components/date-picker/date-picker.component.d.ts +2 -1
- package/lib/components/date-picker/date-picker.component.d.ts.map +1 -1
- package/lib/components/editor/editor.component.d.ts +7 -2
- package/lib/components/editor/editor.component.d.ts.map +1 -1
- package/lib/components/editor/editor.module.d.ts +2 -1
- package/lib/components/editor/editor.module.d.ts.map +1 -1
- package/lib/components/editor/editor.service.d.ts +11 -2
- package/lib/components/editor/editor.service.d.ts.map +1 -1
- package/lib/components/form-io/form-io-builder.component.d.ts +1 -1
- package/lib/components/form-io/form-io-builder.component.d.ts.map +1 -1
- package/lib/components/form-io/form-io-current-user/form-io-current-user.component.d.ts +1 -1
- package/lib/components/form-io/form-io-current-user/form-io-current-user.component.d.ts.map +1 -1
- package/lib/components/form-io/form-io-iban/iban.component.d.ts +1 -1
- package/lib/components/form-io/form-io-iban/iban.component.d.ts.map +1 -1
- package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts +1 -1
- package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts.map +1 -1
- package/lib/components/form-io/form-io.component.d.ts +8 -5
- package/lib/components/form-io/form-io.component.d.ts.map +1 -1
- package/lib/components/form-io/form-io.module.d.ts +12 -14
- package/lib/components/form-io/form-io.module.d.ts.map +1 -1
- package/lib/components/input/input.component.d.ts +2 -1
- package/lib/components/input/input.component.d.ts.map +1 -1
- package/lib/components/left-sidebar/left-sidebar.component.d.ts.map +1 -1
- package/lib/components/multi-input/carbon-multi-input.component.d.ts +9 -3
- package/lib/components/multi-input/carbon-multi-input.component.d.ts.map +1 -1
- package/lib/components/page-actions/page-actions.component.d.ts +29 -0
- package/lib/components/page-actions/page-actions.component.d.ts.map +1 -0
- package/lib/components/page-header/page-header.component.d.ts +15 -4
- package/lib/components/page-header/page-header.component.d.ts.map +1 -1
- package/lib/components/page-header/page-header.module.d.ts +4 -1
- package/lib/components/page-header/page-header.module.d.ts.map +1 -1
- package/lib/components/page-subtitle/page-subtitle.component.d.ts +20 -0
- package/lib/components/page-subtitle/page-subtitle.component.d.ts.map +1 -0
- package/lib/components/page-title/page-title.component.d.ts +8 -9
- package/lib/components/page-title/page-title.component.d.ts.map +1 -1
- package/lib/components/page-title/page-title.module.d.ts +1 -1
- package/lib/components/pending-changes/pending-changes.component.d.ts +6 -1
- package/lib/components/pending-changes/pending-changes.component.d.ts.map +1 -1
- package/lib/components/right-sidebar/right-sidebar.component.d.ts +27 -4
- package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
- package/lib/components/right-sidebar/right-sidebar.module.d.ts +1 -1
- package/lib/components/right-sidebar/right-sidebar.module.d.ts.map +1 -1
- package/lib/components/search-fields/search-fields.component.d.ts +8 -5
- package/lib/components/search-fields/search-fields.component.d.ts.map +1 -1
- package/lib/components/search-fields/search-fields.module.d.ts +2 -2
- package/lib/components/search-fields/search-fields.module.d.ts.map +1 -1
- package/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.d.ts +2 -1
- package/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.d.ts.map +1 -1
- package/lib/components/select/select.component.d.ts +3 -1
- package/lib/components/select/select.component.d.ts.map +1 -1
- package/lib/components/status-selector/status-selector.component.d.ts +24 -0
- package/lib/components/status-selector/status-selector.component.d.ts.map +1 -0
- package/lib/components/timeline/timeline.module.d.ts +2 -1
- package/lib/components/timeline/timeline.module.d.ts.map +1 -1
- package/lib/components/topbar/topbar.component.d.ts +17 -11
- package/lib/components/topbar/topbar.component.d.ts.map +1 -1
- package/lib/components/uploader/uploader.component.d.ts +3 -4
- package/lib/components/uploader/uploader.component.d.ts.map +1 -1
- package/lib/constants/index.d.ts +1 -0
- package/lib/constants/index.d.ts.map +1 -1
- package/lib/constants/status.constants.d.ts +3 -0
- package/lib/constants/status.constants.d.ts.map +1 -0
- package/lib/constants/view-type-converter.constants.d.ts.map +1 -1
- package/lib/directives/fit-page/fit-page-directive.module.d.ts +9 -0
- package/lib/directives/fit-page/fit-page-directive.module.d.ts.map +1 -0
- package/lib/directives/fit-page/fit-page.directive.d.ts +17 -0
- package/lib/directives/fit-page/fit-page.directive.d.ts.map +1 -0
- package/lib/directives/render-in-page-header/render-in-page-header.directive.d.ts +9 -4
- package/lib/directives/render-in-page-header/render-in-page-header.directive.d.ts.map +1 -1
- package/lib/directives/render-page-header/render-page-header-directive.module.d.ts +9 -0
- package/lib/directives/render-page-header/render-page-header-directive.module.d.ts.map +1 -0
- package/lib/directives/render-page-header/render-page-header.directive.d.ts +14 -0
- package/lib/directives/render-page-header/render-page-header.directive.d.ts.map +1 -0
- package/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.d.ts +9 -0
- package/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.d.ts.map +1 -0
- package/lib/directives/render-page-subtitle/render-page-subtitle.directive.d.ts +15 -0
- package/lib/directives/render-page-subtitle/render-page-subtitle.directive.d.ts.map +1 -0
- package/lib/models/carbon-list.model.d.ts +9 -1
- package/lib/models/carbon-list.model.d.ts.map +1 -1
- package/lib/models/carbon-tag.model.d.ts +6 -0
- package/lib/models/carbon-tag.model.d.ts.map +1 -0
- package/lib/models/carbon-theme.model.d.ts +8 -0
- package/lib/models/carbon-theme.model.d.ts.map +1 -0
- package/lib/models/choice-field.model.d.ts +15 -0
- package/lib/models/choice-field.model.d.ts.map +1 -0
- package/lib/models/choicefield-value.model.d.ts +21 -0
- package/lib/models/choicefield-value.model.d.ts.map +1 -0
- package/lib/models/editor.model.d.ts +11 -4
- package/lib/models/editor.model.d.ts.map +1 -1
- package/lib/models/form-io.model.d.ts +1 -1
- package/lib/models/form-io.model.d.ts.map +1 -1
- package/lib/models/index.d.ts +9 -2
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/multi-input.model.d.ts +8 -4
- package/lib/models/multi-input.model.d.ts.map +1 -1
- package/lib/models/right-sidebar.model.d.ts +6 -0
- package/lib/models/right-sidebar.model.d.ts.map +1 -0
- package/lib/models/theme.model.d.ts +11 -0
- package/lib/models/theme.model.d.ts.map +1 -0
- package/lib/models/topbar.model.d.ts +6 -0
- package/lib/models/topbar.model.d.ts.map +1 -0
- package/lib/modules/custom-formio-component/create-custom-component.d.ts +239 -0
- package/lib/modules/custom-formio-component/create-custom-component.d.ts.map +1 -0
- package/lib/modules/custom-formio-component/custom-tags.service.d.ts +8 -0
- package/lib/modules/custom-formio-component/custom-tags.service.d.ts.map +1 -0
- package/lib/modules/custom-formio-component/elements.common.d.ts +31 -0
- package/lib/modules/custom-formio-component/elements.common.d.ts.map +1 -0
- package/lib/modules/custom-formio-component/index.d.ts +5 -0
- package/lib/modules/custom-formio-component/index.d.ts.map +1 -0
- package/lib/modules/custom-formio-component/register-custom-component.d.ts +7 -0
- package/lib/modules/custom-formio-component/register-custom-component.d.ts.map +1 -0
- package/lib/modules/index.d.ts +2 -0
- package/lib/modules/index.d.ts.map +1 -0
- package/lib/services/cds-theme.service.d.ts +20 -0
- package/lib/services/cds-theme.service.d.ts.map +1 -0
- package/lib/services/choice-field.service.d.ts +27 -0
- package/lib/services/choice-field.service.d.ts.map +1 -0
- package/lib/services/index.d.ts +5 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/page-header.service.d.ts +30 -0
- package/lib/services/page-header.service.d.ts.map +1 -0
- package/lib/services/page-subtitle.service.d.ts +14 -0
- package/lib/services/page-subtitle.service.d.ts.map +1 -0
- package/lib/{components/page-title → services}/page-title.service.d.ts +3 -0
- package/lib/services/page-title.service.d.ts.map +1 -0
- package/package.json +22 -19
- package/public_api.d.ts +11 -5
- package/public_api.d.ts.map +1 -1
- package/assets/css/carbon-beagle-compatibility.scss +0 -188
- package/esm2022/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +0 -223
- package/esm2022/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.mjs +0 -74
- package/esm2022/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.mjs +0 -305
- package/esm2022/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.mjs +0 -147
- package/esm2022/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.mjs +0 -46
- package/esm2022/lib/components/page-title/page-title.service.mjs +0 -117
- package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts +0 -76
- package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +0 -1
- package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts +0 -18
- package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts.map +0 -1
- package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.d.ts +0 -105
- package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.d.ts.map +0 -1
- package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.d.ts +0 -61
- package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.d.ts.map +0 -1
- package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.d.ts +0 -4
- package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.d.ts.map +0 -1
- package/lib/components/page-title/page-title.service.d.ts.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright 2015-
|
|
2
|
+
* Copyright 2015-2024 Ritense BV, the Netherlands.
|
|
3
3
|
*
|
|
4
4
|
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -13,14 +13,14 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { ChangeDetectionStrategy, Component, EventEmitter,
|
|
16
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
17
17
|
import { FormControl } from '@angular/forms';
|
|
18
18
|
import { ArrowDown16, ArrowUp16, SettingsView16 } from '@carbon/icons';
|
|
19
19
|
import { Table, TableHeaderItem, TableItem, TableModel, } from 'carbon-components-angular';
|
|
20
20
|
import { get as _get } from 'lodash';
|
|
21
21
|
import { BehaviorSubject, combineLatest, debounceTime, map, startWith, Subscription, switchMap, take, } from 'rxjs';
|
|
22
22
|
import { filter, tap } from 'rxjs/operators';
|
|
23
|
-
import { BOOLEAN_CONVERTER_VALUES } from '../../constants';
|
|
23
|
+
import { BOOLEAN_CONVERTER_VALUES, CASES_WITHOUT_STATUS_KEY } from '../../constants';
|
|
24
24
|
import { DEFAULT_LIST_TRANSLATIONS, DEFAULT_PAGINATION, DEFAULT_PAGINATOR_CONFIG, MoveRowDirection, ViewType, } from '../../models';
|
|
25
25
|
import { CarbonListFilterPipe } from './CarbonListFilterPipe.directive';
|
|
26
26
|
import * as i0 from "@angular/core";
|
|
@@ -32,6 +32,7 @@ import * as i5 from "../view-content/view-content.service";
|
|
|
32
32
|
import * as i6 from "@angular/common";
|
|
33
33
|
import * as i7 from "@angular/forms";
|
|
34
34
|
import * as i8 from "@ng-bootstrap/ng-bootstrap";
|
|
35
|
+
import * as i9 from "./tags-modal/tags-modal.component";
|
|
35
36
|
export class CarbonListComponent {
|
|
36
37
|
set items(value) {
|
|
37
38
|
this._items = value;
|
|
@@ -76,9 +77,9 @@ export class CarbonListComponent {
|
|
|
76
77
|
this.logger = logger;
|
|
77
78
|
this.translateService = translateService;
|
|
78
79
|
this.viewContentService = viewContentService;
|
|
79
|
-
this.theme = 'g10';
|
|
80
80
|
this._items$ = new BehaviorSubject([]);
|
|
81
81
|
this.items$ = new BehaviorSubject([]);
|
|
82
|
+
this.currentOpenActionId = null;
|
|
82
83
|
this._fields$ = new BehaviorSubject([]);
|
|
83
84
|
this._tableTranslations$ = new BehaviorSubject(DEFAULT_LIST_TRANSLATIONS);
|
|
84
85
|
this.paginatorConfig = DEFAULT_PAGINATOR_CONFIG;
|
|
@@ -98,6 +99,7 @@ export class CarbonListComponent {
|
|
|
98
99
|
this.search = new EventEmitter();
|
|
99
100
|
this.sortChanged = new EventEmitter();
|
|
100
101
|
this.moveRow = new EventEmitter();
|
|
102
|
+
this.itemsReordered = new EventEmitter();
|
|
101
103
|
this.batchText$ = this._tableTranslations$.pipe(switchMap((translations) => combineLatest([
|
|
102
104
|
this.translateService.stream(translations.select.single),
|
|
103
105
|
this.translateService.stream(translations.select.multiple),
|
|
@@ -119,6 +121,9 @@ export class CarbonListComponent {
|
|
|
119
121
|
state: { name: '', direction: 'DESC' },
|
|
120
122
|
isSorting: false,
|
|
121
123
|
});
|
|
124
|
+
this.tagModalOpen$ = new BehaviorSubject(false);
|
|
125
|
+
this.tagModalData$ = new BehaviorSubject([]);
|
|
126
|
+
this.CASES_WITHOUT_STATUS_KEY = CASES_WITHOUT_STATUS_KEY;
|
|
122
127
|
this.ViewType = ViewType;
|
|
123
128
|
this.skeletonModel = Table.skeletonModel(5, 5);
|
|
124
129
|
this.searchFormControl = new FormControl('');
|
|
@@ -156,6 +161,11 @@ export class CarbonListComponent {
|
|
|
156
161
|
data,
|
|
157
162
|
template: this.booleanTemplate,
|
|
158
163
|
});
|
|
164
|
+
case ViewType.TAGS:
|
|
165
|
+
return new TableItem({
|
|
166
|
+
data: { tags: item?.tags ?? [] },
|
|
167
|
+
template: this.tagTemplate,
|
|
168
|
+
});
|
|
159
169
|
default:
|
|
160
170
|
return new TableItem({ data: this.resolveObject(field, item) ?? '-', item });
|
|
161
171
|
}
|
|
@@ -256,7 +266,8 @@ export class CarbonListComponent {
|
|
|
256
266
|
};
|
|
257
267
|
}
|
|
258
268
|
get extraColumns() {
|
|
259
|
-
const emptyHeader = new TableHeaderItem(
|
|
269
|
+
const emptyHeader = new TableHeaderItem();
|
|
270
|
+
emptyHeader.sortable = false;
|
|
260
271
|
return [
|
|
261
272
|
...(this.movingRowsEnabled
|
|
262
273
|
? [
|
|
@@ -287,17 +298,31 @@ export class CarbonListComponent {
|
|
|
287
298
|
}
|
|
288
299
|
onMoveDownClick(event, data) {
|
|
289
300
|
event.stopImmediatePropagation();
|
|
290
|
-
|
|
301
|
+
const moveRowEvent = {
|
|
291
302
|
direction: MoveRowDirection.DOWN,
|
|
292
303
|
index: data.index,
|
|
293
|
-
}
|
|
304
|
+
};
|
|
305
|
+
const orderedItems = this.swapItems(this._items, moveRowEvent.index, moveRowEvent.index + 1);
|
|
306
|
+
this.moveRow.emit(moveRowEvent);
|
|
307
|
+
this.itemsReordered.emit(orderedItems);
|
|
294
308
|
}
|
|
295
309
|
onMoveUpClick(event, data) {
|
|
296
310
|
event.stopImmediatePropagation();
|
|
297
|
-
|
|
311
|
+
const moveRowEvent = {
|
|
298
312
|
direction: MoveRowDirection.UP,
|
|
299
313
|
index: data.index,
|
|
300
|
-
}
|
|
314
|
+
};
|
|
315
|
+
const orderedItems = this.swapItems(this._items, moveRowEvent.index - 1, moveRowEvent.index);
|
|
316
|
+
this.moveRow.emit(moveRowEvent);
|
|
317
|
+
this.itemsReordered.emit(orderedItems);
|
|
318
|
+
}
|
|
319
|
+
onTagClick(event, tags) {
|
|
320
|
+
event.stopImmediatePropagation();
|
|
321
|
+
this.tagModalOpen$.next(true);
|
|
322
|
+
this.tagModalData$.next(tags);
|
|
323
|
+
}
|
|
324
|
+
onCloseEvent() {
|
|
325
|
+
this.tagModalOpen$.next(false);
|
|
301
326
|
}
|
|
302
327
|
getExtraItems(item, index, length) {
|
|
303
328
|
return [
|
|
@@ -363,16 +388,26 @@ export class CarbonListComponent {
|
|
|
363
388
|
const resolvedObjValue = _get(obj, key, null);
|
|
364
389
|
return this.viewContentService.get(resolvedObjValue, definition);
|
|
365
390
|
}
|
|
366
|
-
|
|
367
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CarbonListComponent, selector: "valtimo-carbon-list", inputs: { items: "items", fields: "fields", tableTranslations: "tableTranslations", paginatorConfig: "paginatorConfig", pagination: "pagination", loading: "loading", actions: "actions", actionItems: "actionItems", header: "header", hideColumnHeader: "hideColumnHeader", initialSortState: "initialSortState", isSearchable: "isSearchable", enableSingleSelection: "enableSingleSelection", lastColumnTemplate: "lastColumnTemplate", paginationIdentifier: "paginationIdentifier", showSelectionColumn: "showSelectionColumn", striped: "striped", hideToolbar: "hideToolbar", lockedTooltipTranslationKey: "lockedTooltipTranslationKey", movingRowsEnabled: "movingRowsEnabled" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged", moveRow: "moveRow" }, host: { properties: { "attr.data-carbon-theme": "this.theme" } }, providers: [CarbonListFilterPipe], viewQueries: [{ propertyName: "actionsMenuTemplate", first: true, predicate: ["actionsMenuTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }, { propertyName: "booleanTemplate", first: true, predicate: ["booleanTemplate"], descendants: true }, { propertyName: "moveRowsTemplate", first: true, predicate: ["moveRowsTemplate"], descendants: true }, { propertyName: "rowDisabled", first: true, predicate: ["rowDisabled"], descendants: true }, { propertyName: "_table", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"\n (viewInitialized$ | async) && {\n sort: sort$ | async,\n model: model$ | async\n } as obs\n \"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu (click)=\"$event.stopPropagation()\">\n <cds-overflow-menu-option\n *ngFor=\"let action of data.actions\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"disabled\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child){margin-right:8px}.valtimo-carbon-list label{margin-bottom:0!important}.disabled{cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2.Pagination, selector: "cds-pagination, ibm-pagination", inputs: ["skeleton", "model", "disabled", "pageInputDisabled", "showPageInput", "pagesUnknown", "pageSelectThreshold", "translations", "itemsPerPageOptions"], outputs: ["selectPage"] }, { kind: "component", type: i2.TableToolbar, selector: "cds-table-toolbar, ibm-table-toolbar", inputs: ["model", "batchText", "ariaLabel", "cancelText", "size"], outputs: ["cancel"] }, { kind: "component", type: i2.TableContainer, selector: "cds-table-container, ibm-table-container" }, { kind: "component", type: i2.TableHeader, selector: "cds-table-header, ibm-table-header" }, { kind: "component", type: i2.TableToolbarActions, selector: "cds-table-toolbar-actions, ibm-table-toolbar-actions" }, { kind: "component", type: i2.TableToolbarSearch, selector: "cds-table-toolbar-search, ibm-table-toolbar-search" }, { kind: "component", type: i2.TableToolbarContent, selector: "cds-table-toolbar-content, ibm-table-toolbar-content" }, { kind: "component", type: i2.Table, selector: "cds-table, ibm-table", inputs: ["ariaLabelledby", "ariaDescribedby", "model", "size", "skeleton", "isDataGrid", "sortable", "noBorder", "showSelectionColumn", "enableSingleSelect", "scrollLoadDistance", "expandButtonAriaLabel", "sortDescendingLabel", "sortAscendingLabel", "translations", "striped", "stickyHeader", "footerTemplate", "selectionLabelColumn"], outputs: ["sort", "selectAll", "deselectAll", "selectRow", "deselectRow", "rowClick", "scrollLoad"] }, { kind: "component", type: i2.TableBody, selector: "[cdsTableBody], [ibmTableBody]", inputs: ["model", "enableSingleSelect", "expandButtonAriaLabel", "checkboxRowLabel", "showSelectionColumn", "size", "selectionLabelColumn", "skeleton"], outputs: ["selectRow", "deselectRow", "rowClick"] }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i2.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i2.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i8.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
391
|
+
swapItems(items, index1, index2) {
|
|
392
|
+
const temp = [...items];
|
|
393
|
+
temp[index1] = temp.splice(index2, 1, temp[index1])[0];
|
|
394
|
+
return temp;
|
|
395
|
+
}
|
|
396
|
+
handleActionOpenChange(actionId, isOpen) {
|
|
397
|
+
if (isOpen) {
|
|
398
|
+
this.currentOpenActionId = actionId;
|
|
399
|
+
}
|
|
400
|
+
else if (this.currentOpenActionId === actionId) {
|
|
401
|
+
this.currentOpenActionId = null;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CarbonListComponent, deps: [{ token: i1.CarbonListFilterPipe }, { token: i2.IconService }, { token: i3.NGXLogger }, { token: i4.TranslateService }, { token: i5.ViewContentService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
405
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: CarbonListComponent, selector: "valtimo-carbon-list", inputs: { items: "items", fields: "fields", tableTranslations: "tableTranslations", paginatorConfig: "paginatorConfig", pagination: "pagination", loading: "loading", actions: "actions", actionItems: "actionItems", header: "header", hideColumnHeader: "hideColumnHeader", initialSortState: "initialSortState", isSearchable: "isSearchable", enableSingleSelection: "enableSingleSelection", lastColumnTemplate: "lastColumnTemplate", paginationIdentifier: "paginationIdentifier", showSelectionColumn: "showSelectionColumn", striped: "striped", hideToolbar: "hideToolbar", lockedTooltipTranslationKey: "lockedTooltipTranslationKey", movingRowsEnabled: "movingRowsEnabled" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged", moveRow: "moveRow", itemsReordered: "itemsReordered" }, providers: [CarbonListFilterPipe], viewQueries: [{ propertyName: "actionsMenuTemplate", first: true, predicate: ["actionsMenuTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }, { propertyName: "booleanTemplate", first: true, predicate: ["booleanTemplate"], descendants: true }, { propertyName: "moveRowsTemplate", first: true, predicate: ["moveRowsTemplate"], descendants: true }, { propertyName: "rowDisabled", first: true, predicate: ["rowDisabled"], descendants: true }, { propertyName: "tagTemplate", first: true, predicate: ["tagTemplate"], descendants: true }, { propertyName: "_table", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option [type]=\"action.type\" (selected)=\"action.callback(data.item)\">\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n <ng-container *ngIf=\"!data.tags\">-</ng-container>\n\n <div *ngIf=\"data.tags\" class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n <cds-tag *ngIf=\"!!data.tags[0].content\" class=\"cds-tag--no-margin\" [type]=\"data.tags[0].type\">\n {{ data.tags[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.tags.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2.Pagination, selector: "cds-pagination, ibm-pagination", inputs: ["skeleton", "model", "disabled", "pageInputDisabled", "showPageInput", "pagesUnknown", "pageSelectThreshold", "translations", "itemsPerPageOptions"], outputs: ["selectPage"] }, { kind: "component", type: i2.TableToolbar, selector: "cds-table-toolbar, ibm-table-toolbar", inputs: ["model", "batchText", "ariaLabel", "cancelText", "size"], outputs: ["cancel"] }, { kind: "component", type: i2.TableContainer, selector: "cds-table-container, ibm-table-container" }, { kind: "component", type: i2.TableHeader, selector: "cds-table-header, ibm-table-header" }, { kind: "component", type: i2.TableToolbarActions, selector: "cds-table-toolbar-actions, ibm-table-toolbar-actions" }, { kind: "component", type: i2.TableToolbarSearch, selector: "cds-table-toolbar-search, ibm-table-toolbar-search" }, { kind: "component", type: i2.TableToolbarContent, selector: "cds-table-toolbar-content, ibm-table-toolbar-content" }, { kind: "component", type: i2.Table, selector: "cds-table, ibm-table", inputs: ["ariaLabelledby", "ariaDescribedby", "model", "size", "skeleton", "isDataGrid", "sortable", "noBorder", "showSelectionColumn", "enableSingleSelect", "scrollLoadDistance", "expandButtonAriaLabel", "sortDescendingLabel", "sortAscendingLabel", "translations", "striped", "stickyHeader", "footerTemplate", "selectionLabelColumn"], outputs: ["sort", "selectAll", "deselectAll", "selectRow", "deselectRow", "rowClick", "scrollLoad"] }, { kind: "component", type: i2.TableBody, selector: "[cdsTableBody], [ibmTableBody]", inputs: ["model", "enableSingleSelect", "expandButtonAriaLabel", "checkboxRowLabel", "showSelectionColumn", "size", "selectionLabelColumn", "skeleton"], outputs: ["selectRow", "deselectRow", "rowClick"] }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i2.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i2.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i8.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i9.CarbonTagsModalComponent, selector: "valtimo-tags-modal", inputs: ["open", "tags"], outputs: ["closeEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
368
406
|
}
|
|
369
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
407
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CarbonListComponent, decorators: [{
|
|
370
408
|
type: Component,
|
|
371
|
-
args: [{ selector: 'valtimo-carbon-list', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CarbonListFilterPipe], template: "<!--\n ~ Copyright 2015-
|
|
372
|
-
}], ctorParameters:
|
|
373
|
-
type: HostBinding,
|
|
374
|
-
args: ['attr.data-carbon-theme']
|
|
375
|
-
}], actionsMenuTemplate: [{
|
|
409
|
+
args: [{ selector: 'valtimo-carbon-list', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CarbonListFilterPipe], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option [type]=\"action.type\" (selected)=\"action.callback(data.item)\">\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n <ng-container *ngIf=\"!data.tags\">-</ng-container>\n\n <div *ngIf=\"data.tags\" class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n <cds-tag *ngIf=\"!!data.tags[0].content\" class=\"cds-tag--no-margin\" [type]=\"data.tags[0].type\">\n {{ data.tags[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.tags.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
410
|
+
}], ctorParameters: () => [{ type: i1.CarbonListFilterPipe }, { type: i2.IconService }, { type: i3.NGXLogger }, { type: i4.TranslateService }, { type: i5.ViewContentService }], propDecorators: { actionsMenuTemplate: [{
|
|
376
411
|
type: ViewChild,
|
|
377
412
|
args: ['actionsMenuTemplate']
|
|
378
413
|
}], actionTemplate: [{
|
|
@@ -387,6 +422,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
387
422
|
}], rowDisabled: [{
|
|
388
423
|
type: ViewChild,
|
|
389
424
|
args: ['rowDisabled']
|
|
425
|
+
}], tagTemplate: [{
|
|
426
|
+
type: ViewChild,
|
|
427
|
+
args: ['tagTemplate']
|
|
390
428
|
}], _table: [{
|
|
391
429
|
type: ViewChild,
|
|
392
430
|
args: [Table]
|
|
@@ -442,5 +480,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
442
480
|
type: Output
|
|
443
481
|
}], moveRow: [{
|
|
444
482
|
type: Output
|
|
483
|
+
}], itemsReordered: [{
|
|
484
|
+
type: Output
|
|
445
485
|
}] } });
|
|
446
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmJvbi1saXN0L2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3JFLE9BQU8sRUFLTCxLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsR0FBRyxJQUFJLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVuQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osR0FBRyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQU9MLHlCQUF5QixF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O2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFJRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Fycm93RG93bjE2LCBBcnJvd1VwMTYsIFNldHRpbmdzVmlldzE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1NvcnRTdGF0ZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtcbiAgSWNvblNlcnZpY2UsXG4gIE92ZXJmbG93TWVudSxcbiAgUGFnaW5hdGlvbk1vZGVsLFxuICBQYWdpbmF0aW9uVHJhbnNsYXRpb25zLFxuICBUYWJsZSxcbiAgVGFibGVIZWFkZXJJdGVtLFxuICBUYWJsZUl0ZW0sXG4gIFRhYmxlTW9kZWwsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtnZXQgYXMgX2dldH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVN9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBBY3Rpb25JdGVtLFxuICBDYXJib25MaXN0QmF0Y2hUZXh0LFxuICBDYXJib25MaXN0SXRlbSxcbiAgQ2FyYm9uTGlzdFRyYW5zbGF0aW9ucyxcbiAgQ2FyYm9uUGFnaW5hdG9yQ29uZmlnLFxuICBDb2x1bW5Db25maWcsXG4gIERFRkFVTFRfTElTVF9UUkFOU0xBVElPTlMsXG4gIERFRkFVTFRfUEFHSU5BVElPTixcbiAgREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHLFxuICBNb3ZlUm93RGlyZWN0aW9uLFxuICBNb3ZlUm93RXZlbnQsXG4gIFBhZ2luYXRpb24sXG4gIFZpZXdUeXBlLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtWaWV3Q29udGVudFNlcnZpY2V9IGZyb20gJy4uL3ZpZXctY29udGVudC92aWV3LWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQge0NhcmJvbkxpc3RGaWx0ZXJQaXBlfSBmcm9tICcuL0NhcmJvbkxpc3RGaWx0ZXJQaXBlLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tY2FyYm9uLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyYm9uLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJib24tbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbQ2FyYm9uTGlzdEZpbHRlclBpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJib25MaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1jYXJib24tdGhlbWUnKSB0aGVtZSA9ICdnMTAnO1xuICBAVmlld0NoaWxkKCdhY3Rpb25zTWVudVRlbXBsYXRlJykgYWN0aW9uc01lbnVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8T3ZlcmZsb3dNZW51PjtcbiAgQFZpZXdDaGlsZCgnYWN0aW9uVGVtcGxhdGUnKSBhY3Rpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnYm9vbGVhblRlbXBsYXRlJykgYm9vbGVhblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdtb3ZlUm93c1RlbXBsYXRlJykgbW92ZVJvd3NUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgncm93RGlzYWJsZWQnKSByb3dEaXNhYmxlZDogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZChUYWJsZSkgcHJpdmF0ZSBfdGFibGU6IFRhYmxlO1xuXG4gIHByaXZhdGUgX2NvbXBsZXRlRGF0YVNvdXJjZTogVGFibGVJdGVtW11bXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJib25MaXN0SXRlbVtdPihbXSk7XG4gIHByaXZhdGUgX2l0ZW1zOiBDYXJib25MaXN0SXRlbVtdO1xuICBwdWJsaWMgaXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZUl0ZW1bXVtdPihbXSk7XG4gIEBJbnB1dCgpIHNldCBpdGVtcyh2YWx1ZTogQ2FyYm9uTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMuX2l0ZW1zID0gdmFsdWU7XG4gICAgdGhpcy5faXRlbXMkLm5leHQodmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29sdW1uQ29uZmlnW10+KFtdKTtcbiAgQElucHV0KCkgc2V0IGZpZWxkcyh2YWx1ZTogQ29sdW1uQ29uZmlnW10pIHtcbiAgICB0aGlzLl9maWVsZHMkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGFibGVUcmFuc2xhdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8Q2FyYm9uTGlzdFRyYW5zbGF0aW9ucz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIERFRkFVTFRfTElTVF9UUkFOU0xBVElPTlNcbiAgKTtcbiAgQElucHV0KCkgc2V0IHRhYmxlVHJhbnNsYXRpb25zKHZhbHVlOiBQYXJ0aWFsPENhcmJvbkxpc3RUcmFuc2xhdGlvbnM+KSB7XG4gICAgdGhpcy5fdGFibGVUcmFuc2xhdGlvbnMkLm5leHQoey4uLkRFRkFVTFRfTElTVF9UUkFOU0xBVElPTlMsIC4uLnZhbHVlfSk7XG4gIH1cblxuICBASW5wdXQoKSBwYWdpbmF0b3JDb25maWc6IENhcmJvblBhZ2luYXRvckNvbmZpZyA9IERFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRztcbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbjogUGFnaW5hdGlvbjtcbiAgQElucHV0KCkgcHVibGljIHNldCBwYWdpbmF0aW9uKHZhbHVlOiBQYXJ0aWFsPFBhZ2luYXRpb24+IHwgZmFsc2UpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9wYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLl9wYWdpbmF0aW9uID0gey4uLkRFRkFVTFRfUEFHSU5BVElPTiwgLi4udmFsdWV9O1xuICAgIH1cblxuICAgIHRoaXMuX3BhZ2luYXRpb24gPSB7Li4udGhpcy5fcGFnaW5hdGlvbiwgLi4udmFsdWV9O1xuICAgIHRoaXMuYnVpbGRQYWdpbmF0aW9uTW9kZWwoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhZ2luYXRpb24oKTogUGFnaW5hdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb247XG4gIH1cblxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgYWN0aW9ucyBmaWVsZCBpcyBkZXByZWNhdGVkLiBBY3Rpb25zIGNhbiBiZSBhZGRlZCB0aHJvdWdoIHRoZSAqKkBJbnB1dCBmaWVsZCoqLlxuICAgKi9cbiAgQElucHV0KCkgYWN0aW9uczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgYWN0aW9uSXRlbXM6IEFjdGlvbkl0ZW1bXTtcbiAgQElucHV0KCkgaGVhZGVyOiBib29sZWFuO1xuICBASW5wdXQoKSBoaWRlQ29sdW1uSGVhZGVyOiBib29sZWFuO1xuICBASW5wdXQoKSBpbml0aWFsU29ydFN0YXRlOiBTb3J0U3RhdGU7XG4gIEBJbnB1dCgpIGlzU2VhcmNoYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVTaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBsYXN0Q29sdW1uVGVtcGxhdGUgZmllbGQgaXMgZGVwcmVjYXRlZC4gQW55IHRlbXBsYXRlIGNvbHVtbiBjYW4gYmUgYWRkZWQgdGhyb3VnaCB0aGUgKipASW5wdXQgZmllbGQqKi5cbiAgICovXG4gIEBJbnB1dCgpIGxhc3RDb2x1bW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgcGFnaW5hdGlvbklkZW50aWZpZXI6IHN0cmluZztcbiAgQElucHV0KCkgc2hvd1NlbGVjdGlvbkNvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdHJpcGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVUb29sYmFyID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxvY2tlZFRvb2x0aXBUcmFuc2xhdGlvbktleSA9ICcnO1xuICBASW5wdXQoKSBtb3ZpbmdSb3dzRW5hYmxlZDogYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcGFnaW5hdGlvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25TZXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc29ydENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnRTdGF0ZT4oKTtcbiAgQE91dHB1dCgpIG1vdmVSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdmVSb3dFdmVudD4oKTtcblxuICBwdWJsaWMgYmF0Y2hUZXh0JDogT2JzZXJ2YWJsZTxDYXJib25MaXN0QmF0Y2hUZXh0PiA9IHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5waXBlKFxuICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25zOiBDYXJib25MaXN0VHJhbnNsYXRpb25zKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnNlbGVjdC5zaW5nbGUpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5zZWxlY3QubXVsdGlwbGUpLFxuICAgICAgXSkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRyYW5zbGF0aW9ucy5zZWxlY3Quc2luZ2xlKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0cmFuc2xhdGlvbnMuc2VsZWN0Lm11bHRpcGxlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKFtTSU5HTEUsIE1VTFRJUExFXSkgPT4gKHtTSU5HTEUsIE1VTFRJUExFfSkpXG4gICk7XG5cbiAgcHVibGljIHBhZ2luYXRpb25UcmFuc2xhdGlvbnMkOiBPYnNlcnZhYmxlPFBhcnRpYWw8UGFnaW5hdGlvblRyYW5zbGF0aW9ucz4+ID1cbiAgICB0aGlzLl90YWJsZVRyYW5zbGF0aW9ucyQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25zOiBDYXJib25MaXN0VHJhbnNsYXRpb25zKSA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5wYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMucGFnaW5hdGlvbi50b3RhbEl0ZW0pLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnBhZ2luYXRpb24udG90YWxJdGVtcyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgnaW50ZXJmYWNlLmxpc3Qub2ZMYXN0UGFnZScpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2ludGVyZmFjZS5saXN0Lm9mTGFzdFBhZ2VzJyksXG4gICAgICAgIF0pXG4gICAgICApLFxuICAgICAgbWFwKChbSVRFTVNfUEVSX1BBR0UsIFRPVEFMX0lURU0sIFRPVEFMX0lURU1TLCBPRl9MQVNUX1BBR0UsIE9GX0xBU1RfUEFHRVNdKSA9PiAoe1xuICAgICAgICBJVEVNU19QRVJfUEFHRSxcbiAgICAgICAgVE9UQUxfSVRFTSxcbiAgICAgICAgVE9UQUxfSVRFTVMsXG4gICAgICAgIE9GX0xBU1RfUEFHRSxcbiAgICAgICAgT0ZfTEFTVF9QQUdFUyxcbiAgICAgIH0pKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNvcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3J0U3RhdGU+KHtcbiAgICBzdGF0ZToge25hbWU6ICcnLCBkaXJlY3Rpb246ICdERVNDJ30sXG4gICAgaXNTb3J0aW5nOiBmYWxzZSxcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IFZpZXdUeXBlID0gVmlld1R5cGU7XG4gIHB1YmxpYyBza2VsZXRvbk1vZGVsID0gVGFibGUuc2tlbGV0b25Nb2RlbCg1LCA1KTtcbiAgcHVibGljIHBhZ2luYXRpb25Nb2RlbDogUGFnaW5hdGlvbk1vZGVsO1xuICBwdWJsaWMgc2VhcmNoRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBBR0lOQVRJT05fU0laRSA9ICdQYWdpbmF0aW9uU2l6ZSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6IENhcmJvbkxpc3RJdGVtW10ge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5fdGFibGUubW9kZWw7XG5cbiAgICByZXR1cm4gbW9kZWwuZGF0YS5yZWR1Y2UoXG4gICAgICAoaXRlbXM6IENhcmJvbkxpc3RJdGVtW10sIF8sIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgIG1vZGVsLmlzUm93U2VsZWN0ZWQoaW5kZXgpID8gWy4uLml0ZW1zLCB0aGlzLml0ZW1zW2luZGV4XV0gOiBbLi4uaXRlbXNdLFxuICAgICAgW11cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0luaXRpYWxpemVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBnZXQgdmlld0luaXRpYWxpemVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fdmlld0luaXRpYWxpemVkJC5waXBlKGZpbHRlcihpbml0aWFsaXplZCA9PiBpbml0aWFsaXplZCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlbCgpOiBUYWJsZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGUubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlclBpcGU6IENhcmJvbkxpc3RGaWx0ZXJQaXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRlbnRTZXJ2aWNlOiBWaWV3Q29udGVudFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbQXJyb3dEb3duMTYsIEFycm93VXAxNiwgU2V0dGluZ3NWaWV3MTZdKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmxvYWRQYWdpbmF0aW9uU2l6ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluaXRpYWxTb3J0U3RhdGUpIHtcbiAgICAgIHRoaXMuc29ydCQubmV4dCh0aGlzLmluaXRpYWxTb3J0U3RhdGUpO1xuICAgIH1cblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHNlYXJjaFN0cmluZzogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaC5vYnNlcnZlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2guZW1pdChzZWFyY2hTdHJpbmcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zJC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMkLm5leHQoXG4gICAgICAgICAgICB0aGlzLmZpbHRlclBpcGUudHJhbnNmb3JtKHRoaXMuX2NvbXBsZXRlRGF0YVNvdXJjZSwgc2VhcmNoU3RyaW5nID8/ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdmlld0luaXRpYWxpemVkJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvd0NsaWNrKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5fdGFibGUubW9kZWwuZGF0YVtpbmRleF1bMF1bJ2l0ZW0nXTtcblxuICAgIGlmICghaXRlbSB8fCBpdGVtPy5sb2NrZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQoaXRlbSk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3RQYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5wYWdpbmF0aW9uTW9kZWwucGFnZUxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhZ2luYXRpb24uc2l6ZSAhPT0gdGhpcy5wYWdpbmF0aW9uTW9kZWwucGFnZUxlbmd0aCkge1xuICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uU2l6ZSh0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoLnRvU3RyaW5nKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFnaW5hdGlvbkNsaWNrZWQuZW1pdChwYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNvcnQoaGVhZGVySXRlbTogVGFibGVIZWFkZXJJdGVtICYge2tleTogc3RyaW5nfSk6IHZvaWQge1xuICAgIGNvbnN0IHtrZXksIHNvcnRhYmxlfSA9IGhlYWRlckl0ZW07XG4gICAgaWYgKCFzb3J0YWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc29ydCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoc29ydCA9PiB7XG4gICAgICBsZXQgbmV3U3RhdGU6IFNvcnRTdGF0ZTtcblxuICAgICAgaWYgKHNvcnQuc3RhdGUubmFtZSA9PT0ga2V5KSB7XG4gICAgICAgIGlmICghc29ydC5pc1NvcnRpbmcpIHtcbiAgICAgICAgICBuZXdTdGF0ZSA9IHtzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogJ0RFU0MnfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc29ydC5zdGF0ZS5kaXJlY3Rpb24gPT09ICdERVNDJykge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7Li4uc29ydCwgc3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246ICdBU0MnfX07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiAnREVTQyd9LCBpc1NvcnRpbmc6IGZhbHNlfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7bmFtZToga2V5LCBkaXJlY3Rpb246ICdERVNDJ30sIGlzU29ydGluZzogdHJ1ZX07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ydCQubmV4dChuZXdTdGF0ZSk7XG4gICAgICB0aGlzLnNvcnRDaGFuZ2VkLmVtaXQobmV3U3RhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhZ2luYXRpb25Nb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb25Nb2RlbCA9IHtcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2luYXRpb24ucGFnZSxcbiAgICAgIHRvdGFsRGF0YUxlbmd0aDogK3RoaXMucGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSxcbiAgICAgIHBhZ2VMZW5ndGg6IHRoaXMucGFnaW5hdGlvbi5zaXplLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF90cmFuc2xhdGVkRmllbGRzJDogT2JzZXJ2YWJsZTxDb2x1bW5Db25maWdbXT4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9maWVsZHMkKSxcbiAgICBtYXAoKGZpZWxkczogQ29sdW1uQ29uZmlnW10pID0+XG4gICAgICBmaWVsZHMubWFwKChmaWVsZDogQ29sdW1uQ29uZmlnKSA9PiAoe1xuICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgbGFiZWw6ICFmaWVsZC5sYWJlbCA/ICcnIDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZmllbGQubGFiZWwpLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgX2hlYWRlckl0ZW1zJDogT2JzZXJ2YWJsZTxUYWJsZUhlYWRlckl0ZW1bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl90cmFuc2xhdGVkRmllbGRzJCxcbiAgICB0aGlzLnNvcnQkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3RyYW5zbGF0ZWRGaWVsZHMsIHNvcnRTdGF0ZV0pID0+XG4gICAgICB0cmFuc2xhdGVkRmllbGRzLm1hcChcbiAgICAgICAgKGZpZWxkOiBDb2x1bW5Db25maWcpID0+XG4gICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICBkYXRhOiBmaWVsZC5sYWJlbCxcbiAgICAgICAgICAgIHNvcnRhYmxlOiBmaWVsZC5zb3J0YWJsZSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogZmllbGQuY2xhc3NOYW1lLFxuICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICBzb3J0ZWQ6IHNvcnRTdGF0ZS5pc1NvcnRpbmcgJiYgZmllbGQua2V5ID09PSBzb3J0U3RhdGUuc3RhdGUubmFtZSxcbiAgICAgICAgICAgIGFzY2VuZGluZzogZmllbGQua2V5ID09PSBzb3J0U3RhdGUuc3RhdGUubmFtZSAmJiBzb3J0U3RhdGUuc3RhdGUuZGlyZWN0aW9uID09PSAnQVNDJyxcbiAgICAgICAgICB9KVxuICAgICAgKVxuICAgICksXG4gICAgbWFwKChoZWFkZXI6IFRhYmxlSGVhZGVySXRlbVtdKSA9PiBbLi4uaGVhZGVyLCAuLi50aGlzLmV4dHJhQ29sdW1uc10pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVJdGVtcyQ6IE9ic2VydmFibGU8VGFibGVJdGVtW11bXT4gPSB0aGlzLl92aWV3SW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2ZpZWxkcyQsIHRoaXMuX2l0ZW1zJF0pKSxcbiAgICBmaWx0ZXIoKFtmaWVsZHMsIGl0ZW1zXSkgPT4gISFmaWVsZHMgJiYgISFpdGVtcyksXG4gICAgbWFwKChbZmllbGRzLCBpdGVtc10pID0+XG4gICAgICBpdGVtcy5tYXAoKGl0ZW06IENhcmJvbkxpc3RJdGVtLCBpbmRleDogbnVtYmVyKSA9PiBbXG4gICAgICAgIC4uLmZpZWxkcy5tYXAoKGZpZWxkOiBDb2x1bW5Db25maWcpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLnZpZXdUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFZpZXdUeXBlLlRFTVBMQVRFOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGg6IGl0ZW1zLmxlbmd0aH0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGZpZWxkLnRlbXBsYXRlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuQk9PTEVBTjpcbiAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnJlc29sdmVPYmplY3QoZmllbGQsIGl0ZW0pO1xuICAgICAgICAgICAgICBkYXRhID0gIUJPT0xFQU5fQ09OVkVSVEVSX1ZBTFVFUy5pbmNsdWRlcyhkYXRhKVxuICAgICAgICAgICAgICAgID8gZGF0YVxuICAgICAgICAgICAgICAgIDogYCR7J3ZpZXdUeXBlQ29udmVydGVyLicgKyBkYXRhfWA7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmJvb2xlYW5UZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7ZGF0YTogdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKSA/PyAnLScsIGl0ZW19KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICAuLi50aGlzLmdldEV4dHJhSXRlbXMoaXRlbSwgaW5kZXgsIGl0ZW1zLmxlbmd0aCksXG4gICAgICBdKVxuICAgICksXG4gICAgdGFwKChkYXRhOiBUYWJsZUl0ZW1bXVtdKSA9PiB7XG4gICAgICB0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyZWRJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlSXRlbVtdW10gfCBudWxsPihudWxsKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW9kZWwkOiBPYnNlcnZhYmxlPFRhYmxlTW9kZWw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5faGVhZGVySXRlbXMkLFxuICAgIHRoaXMuX3RhYmxlSXRlbXMkLFxuICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2hlYWRlciwgZGF0YSwgZmlsdGVyZWREYXRhXSkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBuZXcgVGFibGVNb2RlbCgpO1xuICAgICAgbW9kZWwuaGVhZGVyID0gaGVhZGVyO1xuICAgICAgbW9kZWwuZGF0YSA9IGZpbHRlcmVkRGF0YSA/PyBkYXRhO1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pLFxuICAgIHN0YXJ0V2l0aChuZXcgVGFibGVNb2RlbCgpKVxuICApO1xuXG4gIHByaXZhdGUgZ2V0IGV4dHJhQ29sdW1ucygpOiBUYWJsZUhlYWRlckl0ZW1bXSB7XG4gICAgY29uc3QgZW1wdHlIZWFkZXIgPSBuZXcgVGFibGVIZWFkZXJJdGVtKHtzb3J0YWJsZTogZmFsc2V9KTtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKHRoaXMubW92aW5nUm93c0VuYWJsZWRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oISF0aGlzLmFjdGlvbnNcbiAgICAgICAgPyB0aGlzLmFjdGlvbnMubWFwKFxuICAgICAgICAgICAgYWN0aW9uID0+XG4gICAgICAgICAgICAgIG5ldyBUYWJsZUhlYWRlckl0ZW0oe1xuICAgICAgICAgICAgICAgIGRhdGE6IGFjdGlvbi5jb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIGtleTogYWN0aW9uLmNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oISF0aGlzLmxhc3RDb2x1bW5UZW1wbGF0ZSA/IFtlbXB0eUhlYWRlcl0gOiBbXSksXG4gICAgICAuLi4odGhpcy5faXRlbXM/LnNvbWUoaXRlbSA9PiBpdGVtLmxvY2tlZCkgPyBbZW1wdHlIZWFkZXJdIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25JdGVtc1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUhlYWRlckl0ZW0oe1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YWx0aW1vLWNhcmJvbi1saXN0X19hY3Rpb25zJyxcbiAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgcHVibGljIG9uTW92ZURvd25DbGljayhcbiAgICBldmVudDogRXZlbnQsXG4gICAgZGF0YToge2luZGV4OiBudW1iZXI7IGl0ZW06IENhcmJvbkxpc3RJdGVtOyBsZW5ndGg6IG51bWJlcn1cbiAgKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5tb3ZlUm93LmVtaXQoe1xuICAgICAgZGlyZWN0aW9uOiBNb3ZlUm93RGlyZWN0aW9uLkRPV04sXG4gICAgICBpbmRleDogZGF0YS5pbmRleCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVVcENsaWNrKFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBkYXRhOiB7aW5kZXg6IG51bWJlcjsgaXRlbTogQ2FyYm9uTGlzdEl0ZW07IGxlbmd0aDogbnVtYmVyfVxuICApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm1vdmVSb3cuZW1pdCh7XG4gICAgICBkaXJlY3Rpb246IE1vdmVSb3dEaXJlY3Rpb24uVVAsXG4gICAgICBpbmRleDogZGF0YS5pbmRleCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXh0cmFJdGVtcyhpdGVtOiBDYXJib25MaXN0SXRlbSwgaW5kZXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiBUYWJsZUl0ZW1bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uc1xuICAgICAgICA/IHRoaXMuYWN0aW9ucy5tYXAoXG4gICAgICAgICAgICBhY3Rpb24gPT5cbiAgICAgICAgICAgICAgbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YToge2l0ZW0sIGNhbGxiYWNrOiBhY3Rpb24uY2FsbGJhY2ssIGljb25DbGFzczogYWN0aW9uLmljb25DbGFzc30sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuYWN0aW9uVGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLih0aGlzLl9pdGVtcz8uc29tZSh0YWJsZUl0ZW0gPT4gdGFibGVJdGVtLmxvY2tlZClcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgZGF0YToge2xvY2tlZDogaXRlbS5sb2NrZWR9LFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5yb3dEaXNhYmxlZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oISF0aGlzLmxhc3RDb2x1bW5UZW1wbGF0ZVxuICAgICAgICA/IFtuZXcgVGFibGVJdGVtKHtkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aH0sIHRlbXBsYXRlOiB0aGlzLmxhc3RDb2x1bW5UZW1wbGF0ZX0pXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLih0aGlzLm1vdmluZ1Jvd3NFbmFibGVkXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgIGRhdGE6IHtpdGVtLCBpbmRleCwgbGVuZ3RofSxcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMubW92ZVJvd3NUZW1wbGF0ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oISF0aGlzLmFjdGlvbkl0ZW1zXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBkYXRhOiB7YWN0aW9uczogdGhpcy5hY3Rpb25JdGVtcywgaXRlbX0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmFjdGlvbnNNZW51VGVtcGxhdGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGxvYWRQYWdpbmF0aW9uU2l6ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyaWVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXG4gICAgICBgJHt0aGlzLnBhZ2luYXRpb25JZGVudGlmaWVyfSR7Q2FyYm9uTGlzdENvbXBvbmVudC5QQUdJTkFUSU9OX1NJWkV9YFxuICAgICk7XG4gICAgaWYgKGVudHJpZXMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHtzaXplOiArZW50cmllc307XG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdCgrZW50cmllcyk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBsb2FkZWQgZnJvbSBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIGxpc3QuIEN1cnJlbnQ6ICcsIGVudHJpZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgJ1BhZ2luYXRpb24gZG9lcyBOT1QgZXhpc3QgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0LiBXaWxsIHVzZSBkZWZhdWx0LiBDaGFuZ2UgaXQgdG8gY3JlYXRlIGFuIGVudHJ5LidcbiAgICAgICk7XG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdCgxMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRQYWdpbmF0aW9uU2l6ZShudW1iZXJPZkVudHJpZXM6IHN0cmluZyk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgYCR7dGhpcy5wYWdpbmF0aW9uSWRlbnRpZmllcn0ke0NhcmJvbkxpc3RDb21wb25lbnQuUEFHSU5BVElPTl9TSVpFfWAsXG4gICAgICBudW1iZXJPZkVudHJpZXNcbiAgICApO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdQYWdpbmF0aW9uIHNldCBpbiBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIGxpc3Q6ICcsIG51bWJlck9mRW50cmllcyk7XG4gICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQobnVtYmVyT2ZFbnRyaWVzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU9iamVjdChkZWZpbml0aW9uOiBhbnksIG9iajogYW55KSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbktleSA9IGRlZmluaXRpb24ua2V5O1xuICAgIGNvbnN0IGN1c3RvbVByb3BTdHJpbmcgPSAnJC4nO1xuICAgIGNvbnN0IGtleSA9IGRlZmluaXRpb25LZXkuaW5jbHVkZXMoY3VzdG9tUHJvcFN0cmluZylcbiAgICAgID8gZGVmaW5pdGlvbktleS5zcGxpdChjdXN0b21Qcm9wU3RyaW5nKVsxXVxuICAgICAgOiBkZWZpbml0aW9uS2V5O1xuICAgIGNvbnN0IHJlc29sdmVkT2JqVmFsdWUgPSBfZ2V0KG9iaiwga2V5LCBudWxsKTtcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGVudFNlcnZpY2UuZ2V0KHJlc29sdmVkT2JqVmFsdWUsIGRlZmluaXRpb24pO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG48Y2RzLXRhYmxlLWNvbnRhaW5lclxuICAqbmdJZj1cIlxuICAgICh2aWV3SW5pdGlhbGl6ZWQkIHwgYXN5bmMpICYmIHtcbiAgICAgIHNvcnQ6IHNvcnQkIHwgYXN5bmMsXG4gICAgICBtb2RlbDogbW9kZWwkIHwgYXN5bmNcbiAgICB9IGFzIG9ic1xuICBcIlxuICBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RcIlxuPlxuICA8Y2RzLXRhYmxlLWhlYWRlciAqbmdJZj1cImhlYWRlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICA8L2Nkcy10YWJsZS1oZWFkZXI+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3RhYnNdXCI+PC9uZy1jb250ZW50PlxuXG4gIDxjZHMtdGFibGUtdG9vbGJhclxuICAgICpuZ0lmPVwiIWhpZGVUb29sYmFyXCJcbiAgICBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX3Rvb2xiYXJcIlxuICAgIFttb2RlbF09XCJvYnMubW9kZWxcIlxuICAgIFtiYXRjaFRleHRdPVwiYmF0Y2hUZXh0JCB8IGFzeW5jXCJcbiAgPlxuICAgIDxjZHMtdGFibGUtdG9vbGJhci1hY3Rpb25zPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NhcmJvblRvb2xiYXJBY3Rpb25zXVwiPiA8L25nLWNvbnRlbnQ+XG4gICAgPC9jZHMtdGFibGUtdG9vbGJhci1hY3Rpb25zPlxuXG4gICAgPGNkcy10YWJsZS10b29sYmFyLWNvbnRlbnQ+XG4gICAgICA8Y2RzLXRhYmxlLXRvb2xiYXItc2VhcmNoXG4gICAgICAgICpuZ0lmPVwiaXNTZWFyY2hhYmxlXCJcbiAgICAgICAgW2V4cGFuZGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hGb3JtQ29udHJvbFwiXG4gICAgICA+PC9jZHMtdGFibGUtdG9vbGJhci1zZWFyY2g+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjYXJib25Ub29sYmFyQ29udGVudF1cIj4gPC9uZy1jb250ZW50PlxuICAgIDwvY2RzLXRhYmxlLXRvb2xiYXItY29udGVudD5cbiAgPC9jZHMtdGFibGUtdG9vbGJhcj5cblxuICA8Y2RzLXRhYmxlXG4gICAgKm5nSWY9XCIhIW9icy5zb3J0XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAndmFsdGltby1jYXJib24tbGlzdF9faGVhZGVyLS1oaWRkZW4nOiBoaWRlQ29sdW1uSGVhZGVyLFxuICAgICAgJ3ZhbHRpbW8tY2FyYm9uLWxpc3QtLXVuY2xpY2thYmxlJzogIXRoaXMucm93Q2xpY2tlZC5vYnNlcnZlZFxuICAgIH1cIlxuICAgIFtlbmFibGVTaW5nbGVTZWxlY3RdPVwiZW5hYmxlU2luZ2xlU2VsZWN0XCJcbiAgICBbbW9kZWxdPVwibG9hZGluZyA/IHNrZWxldG9uTW9kZWwgOiBvYnMubW9kZWxcIlxuICAgIFtzaG93U2VsZWN0aW9uQ29sdW1uXT1cInNob3dTZWxlY3Rpb25Db2x1bW5cIlxuICAgIFtza2VsZXRvbl09XCJsb2FkaW5nXCJcbiAgICBbc3RyaXBlZF09XCJzdHJpcGVkXCJcbiAgICAoc29ydCk9XCJvblNvcnQob2JzLm1vZGVsLmhlYWRlclskZXZlbnRdKVwiXG4gICAgKHJvd0NsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXG4gID5cbiAgICA8dGJvZHkgY2RzVGFibGVCb2R5PlxuICAgICAgPHRyIGNsYXNzPVwidmFsdGltby1jYXJib24tbGlzdF9fbm8tcmVzdWx0c1wiPlxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvYnMubW9kZWwuaGVhZGVyLmxlbmd0aCArIChzaG93U2VsZWN0aW9uQ29sdW1uID8gMSA6IDApXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cIm9icy5tb2RlbC5oZWFkZXIubGVuZ3RoICsgKHNob3dTZWxlY3Rpb25Db2x1bW4gPyAxIDogMClcIj5cbiAgICAgICAgICB7eyAnbGlzdC5ub1Jlc3VsdHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG4gIDwvY2RzLXRhYmxlPlxuXG4gIDxjZHMtcGFnaW5hdGlvblxuICAgICpuZ0lmPVwicGFnaW5hdGlvbk1vZGVsICYmIGl0ZW1zLmxlbmd0aFwiXG4gICAgW2l0ZW1zUGVyUGFnZU9wdGlvbnNdPVwicGFnaW5hdG9yQ29uZmlnLml0ZW1zUGVyUGFnZU9wdGlvbnNcIlxuICAgIFttb2RlbF09XCJwYWdpbmF0aW9uTW9kZWxcIlxuICAgIFtzaG93UGFnZUlucHV0XT1cInBhZ2luYXRvckNvbmZpZy5zaG93UGFnZUlucHV0XCJcbiAgICBbc2tlbGV0b25dPVwibG9hZGluZ1wiXG4gICAgW3RyYW5zbGF0aW9uc109XCJwYWdpbmF0aW9uVHJhbnNsYXRpb25zJCB8IGFzeW5jXCJcbiAgICAoc2VsZWN0UGFnZSk9XCJvblNlbGVjdFBhZ2UoJGV2ZW50KVwiXG4gID48L2Nkcy1wYWdpbmF0aW9uPlxuPC9jZHMtdGFibGUtY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2FjdGlvblRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8aVxuICAgIGNsYXNzPVwiY2xpY2thYmxlXCJcbiAgICBbbmdDbGFzc109XCJkYXRhLmljb25DbGFzc1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZGF0YS5jYWxsYmFjayhkYXRhLml0ZW0pXCJcbiAgPjwvaT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYm9vbGVhblRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICB7eyBkYXRhIHwgdHJhbnNsYXRlIH19XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjdGlvbnNNZW51VGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxjZHMtb3ZlcmZsb3ctbWVudSAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgPGNkcy1vdmVyZmxvdy1tZW51LW9wdGlvblxuICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBkYXRhLmFjdGlvbnNcIlxuICAgICAgW3R5cGVdPVwiYWN0aW9uLnR5cGVcIlxuICAgICAgKHNlbGVjdGVkKT1cImFjdGlvbi5jYWxsYmFjayhkYXRhLml0ZW0pXCJcbiAgICA+XG4gICAgICA8aSAqbmdJZj1cIiEhYWN0aW9uLmljb25DbGFzc1wiIFtuZ0NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIj48L2k+XG5cbiAgICAgIHt7IGFjdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvY2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uPlxuICA8L2Nkcy1vdmVyZmxvdy1tZW51PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyb3dEaXNhYmxlZCBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiAqbmdJZj1cImRhdGEubG9ja2VkXCIgY2xhc3M9XCJkaXNhYmxlZFwiPlxuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cImZsb2F0LXJpZ2h0IGJhZGdlIGJhZGdlLXBpbGwgYmFkZ2Utc2Vjb25kYXJ5IGJnLWdyZXlcIlxuICAgICAgbmdiVG9vbHRpcD1cInt7IGxvY2tlZFRvb2x0aXBUcmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktbG9ja1wiPjwvaT5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb3ZlUm93c1RlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8ZGl2IGNsYXNzPVwidmFsdGltby1jYXJib24tbGlzdF9fbW92ZS1yb3dzXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2RzQnV0dG9uPVwidGVydGlhcnlcIlxuICAgICAgW2Rpc2FibGVkXT1cImRhdGEuaW5kZXggPT09IDBcIlxuICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgc2l6ZT1cInNtXCJcbiAgICAgIChjbGljayk9XCJvbk1vdmVVcENsaWNrKCRldmVudCwgZGF0YSlcIlxuICAgID5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImFycm93LS11cFwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cInRlcnRpYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkYXRhLmluZGV4ID09PSBkYXRhLmxlbmd0aCAtIDFcIlxuICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgc2l6ZT1cInNtXCJcbiAgICAgIChjbGljayk9XCJvbk1vdmVEb3duQ2xpY2soJGV2ZW50LCBkYXRhKVwiXG4gICAgPlxuICAgICAgPHN2ZyBjZHNJY29uPVwiYXJyb3ctLWRvd25cIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
486
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmJvbi1saXN0L2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHckUsT0FBTyxFQUtMLEtBQUssRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsR0FFWCxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxHQUFHLElBQUksSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRW5DLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLFlBQVksRUFDWixHQUFHLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxHQUNMLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRixPQUFPLEVBUUwseUJBQXlC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aUI7c0JBQXpCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Fycm93RG93bjE2LCBBcnJvd1VwMTYsIFNldHRpbmdzVmlldzE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0ludGVybmFsQ2FzZVN0YXR1cywgSW50ZXJuYWxDYXNlU3RhdHVzVXRpbHMsIFNvcnRTdGF0ZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtcbiAgSWNvblNlcnZpY2UsXG4gIE92ZXJmbG93TWVudSxcbiAgUGFnaW5hdGlvbk1vZGVsLFxuICBQYWdpbmF0aW9uVHJhbnNsYXRpb25zLFxuICBUYWJsZSxcbiAgVGFibGVIZWFkZXJJdGVtLFxuICBUYWJsZUl0ZW0sXG4gIFRhYmxlTW9kZWwsXG4gIFRhZ1R5cGUsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtnZXQgYXMgX2dldH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMsIENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWX0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENhcmJvbkxpc3RCYXRjaFRleHQsXG4gIENhcmJvbkxpc3RJdGVtLFxuICBDYXJib25MaXN0VHJhbnNsYXRpb25zLFxuICBDYXJib25QYWdpbmF0b3JDb25maWcsXG4gIENhcmJvblRhZyxcbiAgQ29sdW1uQ29uZmlnLFxuICBERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TLFxuICBERUZBVUxUX1BBR0lOQVRJT04sXG4gIERFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRyxcbiAgTW92ZVJvd0RpcmVjdGlvbixcbiAgTW92ZVJvd0V2ZW50LFxuICBQYWdpbmF0aW9uLFxuICBWaWV3VHlwZSxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7Vmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRlbnQvdmlldy1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtDYXJib25MaXN0RmlsdGVyUGlwZX0gZnJvbSAnLi9DYXJib25MaXN0RmlsdGVyUGlwZS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWNhcmJvbi1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyYm9uLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW0NhcmJvbkxpc3RGaWx0ZXJQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FyYm9uTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnYWN0aW9uc01lbnVUZW1wbGF0ZScpIGFjdGlvbnNNZW51VGVtcGxhdGU6IFRlbXBsYXRlUmVmPE92ZXJmbG93TWVudT47XG4gIEBWaWV3Q2hpbGQoJ2FjdGlvblRlbXBsYXRlJykgYWN0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ2Jvb2xlYW5UZW1wbGF0ZScpIGJvb2xlYW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnbW92ZVJvd3NUZW1wbGF0ZScpIG1vdmVSb3dzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3Jvd0Rpc2FibGVkJykgcm93RGlzYWJsZWQ6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3RhZ1RlbXBsYXRlJykgdGFnVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoVGFibGUpIHByaXZhdGUgX3RhYmxlOiBUYWJsZTtcblxuICBwcml2YXRlIF9jb21wbGV0ZURhdGFTb3VyY2U6IFRhYmxlSXRlbVtdW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FyYm9uTGlzdEl0ZW1bXT4oW10pO1xuICBwcml2YXRlIF9pdGVtczogQ2FyYm9uTGlzdEl0ZW1bXTtcbiAgcHVibGljIGl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVJdGVtW11bXT4oW10pO1xuICBwdWJsaWMgY3VycmVudE9wZW5BY3Rpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgc2V0IGl0ZW1zKHZhbHVlOiBDYXJib25MaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcbiAgICB0aGlzLl9pdGVtcyQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpdGVtcygpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9maWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5Db25maWdbXT4oW10pO1xuICBASW5wdXQoKSBzZXQgZmllbGRzKHZhbHVlOiBDb2x1bW5Db25maWdbXSkge1xuICAgIHRoaXMuX2ZpZWxkcyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZVRyYW5zbGF0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxDYXJib25MaXN0VHJhbnNsYXRpb25zPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgREVGQVVMVF9MSVNUX1RSQU5TTEFUSU9OU1xuICApO1xuICBASW5wdXQoKSBzZXQgdGFibGVUcmFuc2xhdGlvbnModmFsdWU6IFBhcnRpYWw8Q2FyYm9uTGlzdFRyYW5zbGF0aW9ucz4pIHtcbiAgICB0aGlzLl90YWJsZVRyYW5zbGF0aW9ucyQubmV4dCh7Li4uREVGQVVMVF9MSVNUX1RSQU5TTEFUSU9OUywgLi4udmFsdWV9KTtcbiAgfVxuXG4gIEBJbnB1dCgpIHBhZ2luYXRvckNvbmZpZzogQ2FyYm9uUGFnaW5hdG9yQ29uZmlnID0gREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHO1xuICBwcml2YXRlIF9wYWdpbmF0aW9uOiBQYWdpbmF0aW9uO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHBhZ2luYXRpb24odmFsdWU6IFBhcnRpYWw8UGFnaW5hdGlvbj4gfCBmYWxzZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuX3BhZ2luYXRpb24gPSB7Li4uREVGQVVMVF9QQUdJTkFUSU9OLCAuLi52YWx1ZX07XG4gICAgfVxuXG4gICAgdGhpcy5fcGFnaW5hdGlvbiA9IHsuLi50aGlzLl9wYWdpbmF0aW9uLCAuLi52YWx1ZX07XG4gICAgdGhpcy5idWlsZFBhZ2luYXRpb25Nb2RlbCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFnaW5hdGlvbigpOiBQYWdpbmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbjtcbiAgfVxuXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBhY3Rpb25zIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIEFjdGlvbnMgY2FuIGJlIGFkZGVkIHRocm91Z2ggdGhlICoqQElucHV0IGZpZWxkKiouXG4gICAqL1xuICBASW5wdXQoKSBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBhY3Rpb25JdGVtczogQWN0aW9uSXRlbVtdO1xuICBASW5wdXQoKSBoZWFkZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhpZGVDb2x1bW5IZWFkZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGluaXRpYWxTb3J0U3RhdGU6IFNvcnRTdGF0ZTtcbiAgQElucHV0KCkgaXNTZWFyY2hhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZVNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGxhc3RDb2x1bW5UZW1wbGF0ZSBmaWVsZCBpcyBkZXByZWNhdGVkLiBBbnkgdGVtcGxhdGUgY29sdW1uIGNhbiBiZSBhZGRlZCB0aHJvdWdoIHRoZSAqKkBJbnB1dCBmaWVsZCoqLlxuICAgKi9cbiAgQElucHV0KCkgbGFzdENvbHVtblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBwYWdpbmF0aW9uSWRlbnRpZmllcjogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93U2VsZWN0aW9uQ29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0cmlwZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZVRvb2xiYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9ja2VkVG9vbHRpcFRyYW5zbGF0aW9uS2V5ID0gJyc7XG4gIEBJbnB1dCgpIG1vdmluZ1Jvd3NFbmFibGVkOiBib29sZWFuO1xuXG4gIEBPdXRwdXQoKSByb3dDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgcGFnaW5hdGlvblNldCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydFN0YXRlPigpO1xuICBAT3V0cHV0KCkgbW92ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8TW92ZVJvd0V2ZW50PigpO1xuICBAT3V0cHV0KCkgaXRlbXNSZW9yZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENhcmJvbkxpc3RJdGVtW10+KCk7XG5cbiAgcHVibGljIGJhdGNoVGV4dCQ6IE9ic2VydmFibGU8Q2FyYm9uTGlzdEJhdGNoVGV4dD4gPSB0aGlzLl90YWJsZVRyYW5zbGF0aW9ucyQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHRyYW5zbGF0aW9uczogQ2FyYm9uTGlzdFRyYW5zbGF0aW9ucykgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5zZWxlY3Quc2luZ2xlKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMuc2VsZWN0Lm11bHRpcGxlKSxcbiAgICAgIF0pLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0cmFuc2xhdGlvbnMuc2VsZWN0LnNpbmdsZSksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodHJhbnNsYXRpb25zLnNlbGVjdC5tdWx0aXBsZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwKChbU0lOR0xFLCBNVUxUSVBMRV0pID0+ICh7U0lOR0xFLCBNVUxUSVBMRX0pKVxuICApO1xuXG4gIHB1YmxpYyBwYWdpbmF0aW9uVHJhbnNsYXRpb25zJDogT2JzZXJ2YWJsZTxQYXJ0aWFsPFBhZ2luYXRpb25UcmFuc2xhdGlvbnM+PiA9XG4gICAgdGhpcy5fdGFibGVUcmFuc2xhdGlvbnMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHRyYW5zbGF0aW9uczogQ2FyYm9uTGlzdFRyYW5zbGF0aW9ucykgPT5cbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMucGFnaW5hdGlvbi5pdGVtc1BlclBhZ2UpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnBhZ2luYXRpb24udG90YWxJdGVtKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5wYWdpbmF0aW9uLnRvdGFsSXRlbXMpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2ludGVyZmFjZS5saXN0Lm9mTGFzdFBhZ2UnKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdpbnRlcmZhY2UubGlzdC5vZkxhc3RQYWdlcycpLFxuICAgICAgICBdKVxuICAgICAgKSxcbiAgICAgIG1hcCgoW0lURU1TX1BFUl9QQUdFLCBUT1RBTF9JVEVNLCBUT1RBTF9JVEVNUywgT0ZfTEFTVF9QQUdFLCBPRl9MQVNUX1BBR0VTXSkgPT4gKHtcbiAgICAgICAgSVRFTVNfUEVSX1BBR0UsXG4gICAgICAgIFRPVEFMX0lURU0sXG4gICAgICAgIFRPVEFMX0lURU1TLFxuICAgICAgICBPRl9MQVNUX1BBR0UsXG4gICAgICAgIE9GX0xBU1RfUEFHRVMsXG4gICAgICB9KSlcbiAgICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzb3J0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U29ydFN0YXRlPih7XG4gICAgc3RhdGU6IHtuYW1lOiAnJywgZGlyZWN0aW9uOiAnREVTQyd9LFxuICAgIGlzU29ydGluZzogZmFsc2UsXG4gIH0pO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFnTW9kYWxPcGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFnTW9kYWxEYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FyYm9uVGFnW10+KFtdKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZID0gQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZO1xuICBwdWJsaWMgcmVhZG9ubHkgVmlld1R5cGUgPSBWaWV3VHlwZTtcbiAgcHVibGljIHNrZWxldG9uTW9kZWwgPSBUYWJsZS5za2VsZXRvbk1vZGVsKDUsIDUpO1xuICBwdWJsaWMgcGFnaW5hdGlvbk1vZGVsOiBQYWdpbmF0aW9uTW9kZWw7XG4gIHB1YmxpYyBzZWFyY2hGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUEFHSU5BVElPTl9TSVpFID0gJ1BhZ2luYXRpb25TaXplJztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSXRlbXMoKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLl90YWJsZS5tb2RlbDtcblxuICAgIHJldHVybiBtb2RlbC5kYXRhLnJlZHVjZShcbiAgICAgIChpdGVtczogQ2FyYm9uTGlzdEl0ZW1bXSwgXywgaW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgbW9kZWwuaXNSb3dTZWxlY3RlZChpbmRleCkgPyBbLi4uaXRlbXMsIHRoaXMuaXRlbXNbaW5kZXhdXSA6IFsuLi5pdGVtc10sXG4gICAgICBbXVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF92aWV3SW5pdGlhbGl6ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIGdldCB2aWV3SW5pdGlhbGl6ZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl92aWV3SW5pdGlhbGl6ZWQkLnBpcGUoZmlsdGVyKGluaXRpYWxpemVkID0+IGluaXRpYWxpemVkKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFRhYmxlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLl90YWJsZS5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyUGlwZTogQ2FyYm9uTGlzdEZpbHRlclBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IE5HWExvZ2dlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGVudFNlcnZpY2U6IFZpZXdDb250ZW50U2VydmljZVxuICApIHtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyQWxsKFtBcnJvd0Rvd24xNiwgQXJyb3dVcDE2LCBTZXR0aW5nc1ZpZXcxNl0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMubG9hZFBhZ2luYXRpb25TaXplKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5pdGlhbFNvcnRTdGF0ZSkge1xuICAgICAgdGhpcy5zb3J0JC5uZXh0KHRoaXMuaW5pdGlhbFNvcnRTdGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoc2VhcmNoU3RyaW5nOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoLm9ic2VydmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC5lbWl0KHNlYXJjaFN0cmluZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMkLm5leHQobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyQubmV4dChcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyUGlwZS50cmFuc2Zvcm0odGhpcy5fY29tcGxldGVEYXRhU291cmNlLCBzZWFyY2hTdHJpbmcgPz8gJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl92aWV3SW5pdGlhbGl6ZWQkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9uUm93Q2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl90YWJsZS5tb2RlbC5kYXRhW2luZGV4XVswXVsnaXRlbSddO1xuXG4gICAgaWYgKCFpdGVtIHx8IGl0ZW0/LmxvY2tlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJvd0NsaWNrZWQuZW1pdChpdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbi5zaXplICE9PSB0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldFBhZ2luYXRpb25TaXplKHRoaXMucGFnaW5hdGlvbk1vZGVsLnBhZ2VMZW5ndGgudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYWdpbmF0aW9uQ2xpY2tlZC5lbWl0KHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIG9uU29ydChoZWFkZXJJdGVtOiBUYWJsZUhlYWRlckl0ZW0gJiB7a2V5OiBzdHJpbmd9KTogdm9pZCB7XG4gICAgY29uc3Qge2tleSwgc29ydGFibGV9ID0gaGVhZGVySXRlbTtcbiAgICBpZiAoIXNvcnRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzb3J0ID0+IHtcbiAgICAgIGxldCBuZXdTdGF0ZTogU29ydFN0YXRlO1xuXG4gICAgICBpZiAoc29ydC5zdGF0ZS5uYW1lID09PSBrZXkpIHtcbiAgICAgICAgaWYgKCFzb3J0LmlzU29ydGluZykge1xuICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiAnREVTQyd9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gJ0RFU0MnKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHsuLi5zb3J0LCBzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogJ0FTQyd9fTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246ICdERVNDJ30sIGlzU29ydGluZzogZmFsc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHtuYW1lOiBrZXksIGRpcmVjdGlvbjogJ0RFU0MnfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0JC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChuZXdTdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvbk1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbk1vZGVsID0ge1xuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5wYWdlLFxuICAgICAgdG90YWxEYXRhTGVuZ3RoOiArdGhpcy5wYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplLFxuICAgICAgcGFnZUxlbmd0aDogdGhpcy5wYWdpbmF0aW9uLnNpemUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zbGF0ZWRGaWVsZHMkOiBPYnNlcnZhYmxlPENvbHVtbkNvbmZpZ1tdPiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2ZpZWxkcyQpLFxuICAgIG1hcCgoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT5cbiAgICAgIGZpZWxkcy5tYXAoKGZpZWxkOiBDb2x1bW5Db25maWcpID0+ICh7XG4gICAgICAgIC4uLmZpZWxkLFxuICAgICAgICBsYWJlbDogIWZpZWxkLmxhYmVsID8gJycgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmaWVsZC5sYWJlbCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSBfaGVhZGVySXRlbXMkOiBPYnNlcnZhYmxlPFRhYmxlSGVhZGVySXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX3RyYW5zbGF0ZWRGaWVsZHMkLFxuICAgIHRoaXMuc29ydCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbdHJhbnNsYXRlZEZpZWxkcywgc29ydFN0YXRlXSkgPT5cbiAgICAgIHRyYW5zbGF0ZWRGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IENvbHVtbkNvbmZpZykgPT5cbiAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgIGRhdGE6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgc29ydGFibGU6IGZpZWxkLnNvcnRhYmxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHNvcnRlZDogc29ydFN0YXRlLmlzU29ydGluZyAmJiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lLFxuICAgICAgICAgICAgYXNjZW5kaW5nOiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lICYmIHNvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb24gPT09ICdBU0MnLFxuICAgICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGhlYWRlcjogVGFibGVIZWFkZXJJdGVtW10pID0+IFsuLi5oZWFkZXIsIC4uLnRoaXMuZXh0cmFDb2x1bW5zXSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUl0ZW1zJDogT2JzZXJ2YWJsZTxUYWJsZUl0ZW1bXVtdPiA9IHRoaXMuX3ZpZXdJbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4gY29tYmluZUxhdGVzdChbdGhpcy5fZmllbGRzJCwgdGhpcy5faXRlbXMkXSkpLFxuICAgIGZpbHRlcigoW2ZpZWxkcywgaXRlbXNdKSA9PiAhIWZpZWxkcyAmJiAhIWl0ZW1zKSxcbiAgICBtYXAoKFtmaWVsZHMsIGl0ZW1zXSkgPT5cbiAgICAgIGl0ZW1zLm1hcCgoaXRlbTogQ2FyYm9uTGlzdEl0ZW0sIGluZGV4OiBudW1iZXIpID0+IFtcbiAgICAgICAgLi4uZmllbGRzLm1hcCgoZmllbGQ6IENvbHVtbkNvbmZpZykgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQudmlld1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuVEVNUExBVEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aDogaXRlbXMubGVuZ3RofSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogZmllbGQudGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FzZSBWaWV3VHlwZS5CT09MRUFOOlxuICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMucmVzb2x2ZU9iamVjdChmaWVsZCwgaXRlbSk7XG4gICAgICAgICAgICAgIGRhdGEgPSAhQk9PTEVBTl9DT05WRVJURVJfVkFMVUVTLmluY2x1ZGVzKGRhdGEpXG4gICAgICAgICAgICAgICAgPyBkYXRhXG4gICAgICAgICAgICAgICAgOiBgJHsndmlld1R5cGVDb252ZXJ0ZXIuJyArIGRhdGF9YDtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuYm9vbGVhblRlbXBsYXRlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuVEFHUzpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIGRhdGE6IHt0YWdzOiBpdGVtPy50YWdzID8/IFtdfSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy50YWdUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7ZGF0YTogdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKSA/PyAnLScsIGl0ZW19KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICAuLi50aGlzLmdldEV4dHJhSXRlbXMoaXRlbSwgaW5kZXgsIGl0ZW1zLmxlbmd0aCksXG4gICAgICBdKVxuICAgICksXG4gICAgdGFwKChkYXRhOiBUYWJsZUl0ZW1bXVtdKSA9PiB7XG4gICAgICB0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyZWRJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlSXRlbVtdW10gfCBudWxsPihudWxsKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW9kZWwkOiBPYnNlcnZhYmxlPFRhYmxlTW9kZWw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5faGVhZGVySXRlbXMkLFxuICAgIHRoaXMuX3RhYmxlSXRlbXMkLFxuICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2hlYWRlciwgZGF0YSwgZmlsdGVyZWREYXRhXSkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBuZXcgVGFibGVNb2RlbCgpO1xuICAgICAgbW9kZWwuaGVhZGVyID0gaGVhZGVyO1xuICAgICAgbW9kZWwuZGF0YSA9IGZpbHRlcmVkRGF0YSA/PyBkYXRhO1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pLFxuICAgIHN0YXJ0V2l0aChuZXcgVGFibGVNb2RlbCgpKVxuICApO1xuXG4gIHByaXZhdGUgZ2V0IGV4dHJhQ29sdW1ucygpOiBUYWJsZUhlYWRlckl0ZW1bXSB7XG4gICAgY29uc3QgZW1wdHlIZWFkZXIgPSBuZXcgVGFibGVIZWFkZXJJdGVtKCk7XG5cbiAgICBlbXB0eUhlYWRlci5zb3J0YWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLih0aGlzLm1vdmluZ1Jvd3NFbmFibGVkXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25zXG4gICAgICAgID8gdGhpcy5hY3Rpb25zLm1hcChcbiAgICAgICAgICAgIGFjdGlvbiA9PlxuICAgICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBhY3Rpb24uY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBrZXk6IGFjdGlvbi5jb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGUgPyBbZW1wdHlIZWFkZXJdIDogW10pLFxuICAgICAgLi4uKHRoaXMuX2l0ZW1zPy5zb21lKGl0ZW0gPT4gaXRlbS5sb2NrZWQpID8gW2VtcHR5SGVhZGVyXSA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uSXRlbXNcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVEb3duQ2xpY2soXG4gICAgZXZlbnQ6IEV2ZW50LFxuICAgIGRhdGE6IHtpbmRleDogbnVtYmVyOyBpdGVtOiBDYXJib25MaXN0SXRlbTsgbGVuZ3RoOiBudW1iZXJ9XG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgbW92ZVJvd0V2ZW50ID0ge1xuICAgICAgZGlyZWN0aW9uOiBNb3ZlUm93RGlyZWN0aW9uLkRPV04sXG4gICAgICBpbmRleDogZGF0YS5pbmRleCxcbiAgICB9O1xuICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKHRoaXMuX2l0ZW1zLCBtb3ZlUm93RXZlbnQuaW5kZXgsIG1vdmVSb3dFdmVudC5pbmRleCArIDEpO1xuXG4gICAgdGhpcy5tb3ZlUm93LmVtaXQobW92ZVJvd0V2ZW50KTtcbiAgICB0aGlzLml0ZW1zUmVvcmRlcmVkLmVtaXQob3JkZXJlZEl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVVcENsaWNrKFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBkYXRhOiB7aW5kZXg6IG51bWJlcjsgaXRlbTogQ2FyYm9uTGlzdEl0ZW07IGxlbmd0aDogbnVtYmVyfVxuICApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdmVSb3dFdmVudCA9IHtcbiAgICAgIGRpcmVjdGlvbjogTW92ZVJvd0RpcmVjdGlvbi5VUCxcbiAgICAgIGluZGV4OiBkYXRhLmluZGV4LFxuICAgIH07XG4gICAgY29uc3Qgb3JkZXJlZEl0ZW1zID0gdGhpcy5zd2FwSXRlbXModGhpcy5faXRlbXMsIG1vdmVSb3dFdmVudC5pbmRleCAtIDEsIG1vdmVSb3dFdmVudC5pbmRleCk7XG5cbiAgICB0aGlzLm1vdmVSb3cuZW1pdChtb3ZlUm93RXZlbnQpO1xuICAgIHRoaXMuaXRlbXNSZW9yZGVyZWQuZW1pdChvcmRlcmVkSXRlbXMpO1xuICB9XG5cbiAgcHVibGljIG9uVGFnQ2xpY2soZXZlbnQ6IEV2ZW50LCB0YWdzOiBDYXJib25UYWdbXSk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudGFnTW9kYWxPcGVuJC5uZXh0KHRydWUpO1xuICAgIHRoaXMudGFnTW9kYWxEYXRhJC5uZXh0KHRhZ3MpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xvc2VFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhZ01vZGFsT3BlbiQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGdldEV4dHJhSXRlbXMoaXRlbTogQ2FyYm9uTGlzdEl0ZW0sIGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogVGFibGVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oISF0aGlzLmFjdGlvbnNcbiAgICAgICAgPyB0aGlzLmFjdGlvbnMubWFwKFxuICAgICAgICAgICAgYWN0aW9uID0+XG4gICAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtpdGVtLCBjYWxsYmFjazogYWN0aW9uLmNhbGxiYWNrLCBpY29uQ2xhc3M6IGFjdGlvbi5pY29uQ2xhc3N9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmFjdGlvblRlbXBsYXRlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4odGhpcy5faXRlbXM/LnNvbWUodGFibGVJdGVtID0+IHRhYmxlSXRlbS5sb2NrZWQpXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgIGRhdGE6IHtsb2NrZWQ6IGl0ZW0ubG9ja2VkfSxcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMucm93RGlzYWJsZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGVcbiAgICAgICAgPyBbbmV3IFRhYmxlSXRlbSh7ZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LCB0ZW1wbGF0ZTogdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGV9KV1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4odGhpcy5tb3ZpbmdSb3dzRW5hYmxlZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aH0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLm1vdmVSb3dzVGVtcGxhdGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25JdGVtc1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YWx0aW1vLWNhcmJvbi1saXN0X19hY3Rpb25zJyxcbiAgICAgICAgICAgICAgZGF0YToge2FjdGlvbnM6IHRoaXMuYWN0aW9uSXRlbXMsIGl0ZW19LFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5hY3Rpb25zTWVudVRlbXBsYXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGFnaW5hdGlvblNpemUoKTogdm9pZCB7XG4gICAgY29uc3QgZW50cmllcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgYCR7dGhpcy5wYWdpbmF0aW9uSWRlbnRpZmllcn0ke0NhcmJvbkxpc3RDb21wb25lbnQuUEFHSU5BVElPTl9TSVpFfWBcbiAgICApO1xuICAgIGlmIChlbnRyaWVzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB7c2l6ZTogK2VudHJpZXN9O1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoK2VudHJpZXMpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gbG9hZGVkIGZyb20gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0LiBDdXJyZW50OiAnLCBlbnRyaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdQYWdpbmF0aW9uIGRvZXMgTk9UIGV4aXN0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gV2lsbCB1c2UgZGVmYXVsdC4gQ2hhbmdlIGl0IHRvIGNyZWF0ZSBhbiBlbnRyeS4nXG4gICAgICApO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoMTApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UGFnaW5hdGlvblNpemUobnVtYmVyT2ZFbnRyaWVzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtDYXJib25MaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gLFxuICAgICAgbnVtYmVyT2ZFbnRyaWVzXG4gICAgKTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBzZXQgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0OiAnLCBudW1iZXJPZkVudHJpZXMpO1xuICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KG51bWJlck9mRW50cmllcyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVPYmplY3QoZGVmaW5pdGlvbjogYW55LCBvYmo6IGFueSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25LZXkgPSBkZWZpbml0aW9uLmtleTtcbiAgICBjb25zdCBjdXN0b21Qcm9wU3RyaW5nID0gJyQuJztcbiAgICBjb25zdCBrZXkgPSBkZWZpbml0aW9uS2V5LmluY2x1ZGVzKGN1c3RvbVByb3BTdHJpbmcpXG4gICAgICA/IGRlZmluaXRpb25LZXkuc3BsaXQoY3VzdG9tUHJvcFN0cmluZylbMV1cbiAgICAgIDogZGVmaW5pdGlvbktleTtcbiAgICBjb25zdCByZXNvbHZlZE9ialZhbHVlID0gX2dldChvYmosIGtleSwgbnVsbCk7XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRlbnRTZXJ2aWNlLmdldChyZXNvbHZlZE9ialZhbHVlLCBkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgc3dhcEl0ZW1zKGl0ZW1zOiBDYXJib25MaXN0SXRlbVtdLCBpbmRleDE6IG51bWJlciwgaW5kZXgyOiBudW1iZXIpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICBjb25zdCB0ZW1wID0gWy4uLml0ZW1zXTtcbiAgICB0ZW1wW2luZGV4MV0gPSB0ZW1wLnNwbGljZShpbmRleDIsIDEsIHRlbXBbaW5kZXgxXSlbMF07XG5cbiAgICByZXR1cm4gdGVtcDtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVBY3Rpb25PcGVuQ2hhbmdlKGFjdGlvbklkOiBzdHJpbmcsIGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHRoaXMuY3VycmVudE9wZW5BY3Rpb25JZCA9IGFjdGlvbklkO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50T3BlbkFjdGlvbklkID09PSBhY3Rpb25JZCkge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbkFjdGlvbklkID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cbjxjZHMtdGFibGUtY29udGFpbmVyXG4gICpuZ0lmPVwie1xuICAgIHNvcnQ6IHNvcnQkIHwgYXN5bmMsXG4gICAgbW9kZWw6IG1vZGVsJCB8IGFzeW5jLFxuICAgIHZpZXdJbml0aWFsaXplZDogdmlld0luaXRpYWxpemVkJCB8IGFzeW5jXG4gIH0gYXMgb2JzXCJcbiAgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0XCJcbj5cbiAgPGNkcy10YWJsZS1oZWFkZXIgKm5nSWY9XCJoZWFkZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgPC9jZHMtdGFibGUtaGVhZGVyPlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0YWJzXVwiPjwvbmctY29udGVudD5cblxuICA8Y2RzLXRhYmxlLXRvb2xiYXJcbiAgICAqbmdJZj1cIiFoaWRlVG9vbGJhclwiXG4gICAgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0X190b29sYmFyXCJcbiAgICBbbW9kZWxdPVwib2JzLm1vZGVsXCJcbiAgICBbYmF0Y2hUZXh0XT1cImJhdGNoVGV4dCQgfCBhc3luY1wiXG4gID5cbiAgICA8Y2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjYXJib25Ub29sYmFyQWN0aW9uc11cIj4gPC9uZy1jb250ZW50PlxuICAgIDwvY2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cblxuICAgIDxjZHMtdGFibGUtdG9vbGJhci1jb250ZW50PlxuICAgICAgPGNkcy10YWJsZS10b29sYmFyLXNlYXJjaFxuICAgICAgICAqbmdJZj1cImlzU2VhcmNoYWJsZVwiXG4gICAgICAgIFtleHBhbmRhYmxlXT1cInRydWVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoRm9ybUNvbnRyb2xcIlxuICAgICAgPjwvY2RzLXRhYmxlLXRvb2xiYXItc2VhcmNoPlxuXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY2FyYm9uVG9vbGJhckNvbnRlbnRdXCI+IDwvbmctY29udGVudD5cbiAgICA8L2Nkcy10YWJsZS10b29sYmFyLWNvbnRlbnQ+XG4gIDwvY2RzLXRhYmxlLXRvb2xiYXI+XG5cbiAgPGNkcy10YWJsZVxuICAgICpuZ0lmPVwiISFvYnMuc29ydFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2hlYWRlci0taGlkZGVuJzogaGlkZUNvbHVtbkhlYWRlcixcbiAgICAgICd2YWx0aW1vLWNhcmJvbi1saXN0LS11bmNsaWNrYWJsZSc6ICF0aGlzLnJvd0NsaWNrZWQub2JzZXJ2ZWRcbiAgICB9XCJcbiAgICBbZW5hYmxlU2luZ2xlU2VsZWN0XT1cImVuYWJsZVNpbmdsZVNlbGVjdFwiXG4gICAgW21vZGVsXT1cImxvYWRpbmcgfHwgIW9icy52aWV3SW5pdGlhbGl6ZWQgPyBza2VsZXRvbk1vZGVsIDogb2JzLm1vZGVsXCJcbiAgICBbc2hvd1NlbGVjdGlvbkNvbHVtbl09XCJzaG93U2VsZWN0aW9uQ29sdW1uXCJcbiAgICBbc2tlbGV0b25dPVwibG9hZGluZ1wiXG4gICAgW3N0cmlwZWRdPVwic3RyaXBlZFwiXG4gICAgKHNvcnQpPVwib25Tb3J0KG9icy5tb2RlbC5oZWFkZXJbJGV2ZW50XSlcIlxuICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICA+XG4gICAgPHRib2R5IGNkc1RhYmxlQm9keT5cbiAgICAgIDx0ciBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX25vLXJlc3VsdHNcIj5cbiAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwib2JzLm1vZGVsLmhlYWRlci5sZW5ndGggKyAoc2hvd1NlbGVjdGlvbkNvbHVtbiA/IDEgOiAwKVwiPlxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvYnMubW9kZWwuaGVhZGVyLmxlbmd0aCArIChzaG93U2VsZWN0aW9uQ29sdW1uID8gMSA6IDApXCI+XG4gICAgICAgICAge3sgJ2xpc3Qubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L2Nkcy10YWJsZT5cblxuICA8Y2RzLXBhZ2luYXRpb25cbiAgICAqbmdJZj1cInBhZ2luYXRpb25Nb2RlbCAmJiBpdGVtcy5sZW5ndGhcIlxuICAgIFtpdGVtc1BlclBhZ2VPcHRpb25zXT1cInBhZ2luYXRvckNvbmZpZy5pdGVtc1BlclBhZ2VPcHRpb25zXCJcbiAgICBbbW9kZWxdPVwicGFnaW5hdGlvbk1vZGVsXCJcbiAgICBbc2hvd1BhZ2VJbnB1dF09XCJwYWdpbmF0b3JDb25maWcuc2hvd1BhZ2VJbnB1dFwiXG4gICAgW3NrZWxldG9uXT1cImxvYWRpbmdcIlxuICAgIFt0cmFuc2xhdGlvbnNdPVwicGFnaW5hdGlvblRyYW5zbGF0aW9ucyQgfCBhc3luY1wiXG4gICAgKHNlbGVjdFBhZ2UpPVwib25TZWxlY3RQYWdlKCRldmVudClcIlxuICA+PC9jZHMtcGFnaW5hdGlvbj5cbjwvY2RzLXRhYmxlLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNhY3Rpb25UZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGlcbiAgICBjbGFzcz1cImNsaWNrYWJsZVwiXG4gICAgW25nQ2xhc3NdPVwiZGF0YS5pY29uQ2xhc3NcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRhdGEuY2FsbGJhY2soZGF0YS5pdGVtKVwiXG4gID48L2k+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Jvb2xlYW5UZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAge3sgZGF0YSB8IHRyYW5zbGF0ZSB9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhY3Rpb25zTWVudVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8Y2RzLW92ZXJmbG93LW1lbnVcbiAgICBbb3Blbl09XCJjdXJyZW50T3BlbkFjdGlvbklkID09PSBkYXRhLml0ZW1cIlxuICAgIChvcGVuQ2hhbmdlKT1cImhhbmRsZUFjdGlvbk9wZW5DaGFuZ2UoZGF0YS5pdGVtLCAkZXZlbnQpXCJcbiAgICBbZmxpcF09XCJ0cnVlXCJcbiAgICBbb2Zmc2V0XT1cInt4OiAwLCB5OiA1MH1cIlxuICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICBAZm9yIChhY3Rpb24gb2YgZGF0YS5hY3Rpb25zOyB0cmFjayBhY3Rpb24ubGFiZWwpIHtcbiAgICAgIDxjZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24gW3R5cGVdPVwiYWN0aW9uLnR5cGVcIiAoc2VsZWN0ZWQpPVwiYWN0aW9uLmNhbGxiYWNrKGRhdGEuaXRlbSlcIj5cbiAgICAgICAgPGkgKm5nSWY9XCIhIWFjdGlvbi5pY29uQ2xhc3NcIiBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCI+PC9pPlxuXG4gICAgICAgIHt7IGFjdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9jZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24+XG4gICAgfVxuICA8L2Nkcy1vdmVyZmxvdy1tZW51PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyb3dEaXNhYmxlZCBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiAqbmdJZj1cImRhdGEubG9ja2VkXCIgY2xhc3M9XCJsb2NrZWRcIj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodCBiYWRnZSBiYWRnZS1waWxsIGJhZGdlLXNlY29uZGFyeSBiZy1ncmV5XCJcbiAgICAgIG5nYlRvb2x0aXA9XCJ7eyBsb2NrZWRUb29sdGlwVHJhbnNsYXRpb25LZXkgfCB0cmFuc2xhdGUgfX1cIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLWxvY2tcIj48L2k+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW92ZVJvd3NUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX21vdmUtcm93c1wiPlxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cInRlcnRpYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkYXRhLmluZGV4ID09PSAwXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAoY2xpY2spPVwib25Nb3ZlVXBDbGljaygkZXZlbnQsIGRhdGEpXCJcbiAgICA+XG4gICAgICA8c3ZnIGNkc0ljb249XCJhcnJvdy0tdXBcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJ0ZXJ0aWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGF0YS5pbmRleCA9PT0gZGF0YS5sZW5ndGggLSAxXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAoY2xpY2spPVwib25Nb3ZlRG93bkNsaWNrKCRldmVudCwgZGF0YSlcIlxuICAgID5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImFycm93LS1kb3duXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFnVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGF0YS50YWdzXCI+LTwvbmctY29udGFpbmVyPlxuXG4gIDxkaXYgKm5nSWY9XCJkYXRhLnRhZ3NcIiBjbGFzcz1cInRhZy10ZW1wbGF0ZVwiPlxuICAgIEBpZiAoZGF0YS50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLVxuICAgIH0gQGVsc2Uge1xuICAgICAgPGNkcy10YWcgKm5nSWY9XCIhIWRhdGEudGFnc1swXS5jb250ZW50XCIgY2xhc3M9XCJjZHMtdGFnLS1uby1tYXJnaW5cIiBbdHlwZV09XCJkYXRhLnRhZ3NbMF0udHlwZVwiPlxuICAgICAgICB7eyBkYXRhLnRhZ3NbMF0uY29udGVudCB9fVxuICAgICAgPC9jZHMtdGFnPlxuXG4gICAgICA8Y2RzLXRhZ1xuICAgICAgICAqbmdJZj1cImRhdGEudGFncy5sZW5ndGggPiAxXCJcbiAgICAgICAgY2xhc3M9XCJjZHMtdGFnLS1uby1tYXJnaW4gdmFsdGltby1jYXJib24tbGlzdF9fZXhwYW5kLXRhZ1wiXG4gICAgICAgIHR5cGU9XCJoaWdoLWNvbnRyYXN0XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uVGFnQ2xpY2soJGV2ZW50LCBkYXRhLnRhZ3MpXCJcbiAgICAgID5cbiAgICAgICAge3sgZGF0YS50YWdzLmxlbmd0aCAtIDEgfX0gPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICA8L2Nkcy10YWc+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjx2YWx0aW1vLXRhZ3MtbW9kYWxcbiAgW29wZW5dPVwidGFnTW9kYWxPcGVuJCB8IGFzeW5jXCJcbiAgW3RhZ3NdPVwidGFnTW9kYWxEYXRhJCB8IGFzeW5jXCJcbiAgKGNsb3NlRXZlbnQpPVwib25DbG9zZUV2ZW50KClcIlxuPjwvdmFsdGltby10YWdzLW1vZGFsPlxuIl19
|