@tsi-developpement/tsi-shared-ui 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/consts/app-providers.mjs +11 -0
- package/esm2022/lib/consts/html-template.const.mjs +40 -0
- package/esm2022/lib/consts/index.mjs +8 -0
- package/esm2022/lib/consts/localization-key.mjs +12 -0
- package/esm2022/lib/consts/locals.const.mjs +8 -0
- package/esm2022/lib/consts/queryParamNames.const.mjs +11 -0
- package/esm2022/lib/consts/themes.mjs +5 -0
- package/esm2022/lib/consts/tsi-consts.mjs +45 -0
- package/esm2022/lib/end-points/authorization-endpoints.mjs +35 -0
- package/esm2022/lib/end-points/baseuri.mjs +11 -0
- package/esm2022/lib/end-points/endpoints.mjs +208 -0
- package/esm2022/lib/end-points/import-export-endpoint.mjs +35 -0
- package/esm2022/lib/end-points/index.mjs +7 -0
- package/esm2022/lib/end-points/presentation-settings-endpoints.mjs +13 -0
- package/esm2022/lib/end-points/reporting-endpoints.mjs +55 -0
- package/esm2022/lib/end-points/shared-endpoint.mjs +12 -0
- package/esm2022/lib/end-points/user-identity-endpoints.mjs +61 -0
- package/esm2022/lib/enums/Language.mjs +9 -0
- package/esm2022/lib/enums/auto-complete.mjs +6 -0
- package/esm2022/lib/enums/button-type.enum.mjs +6 -0
- package/esm2022/lib/enums/claim-types.mjs +15 -0
- package/esm2022/lib/enums/code-format.mjs +6 -0
- package/esm2022/lib/enums/component-use-modes-enum.mjs +19 -0
- package/esm2022/lib/enums/css-units.mjs +10 -0
- package/esm2022/lib/enums/decimal-format.mjs +8 -0
- package/esm2022/lib/enums/display-types.mjs +35 -0
- package/esm2022/lib/enums/filter-operator-type.mjs +34 -0
- package/esm2022/lib/enums/form-validation-error.mjs +7 -0
- package/esm2022/lib/enums/grid-selection-mode.mjs +7 -0
- package/esm2022/lib/enums/grid-sort-mode.mjs +7 -0
- package/esm2022/lib/enums/http-method-types.mjs +6 -0
- package/esm2022/lib/enums/index.mjs +25 -0
- package/esm2022/lib/enums/input-types.mjs +20 -0
- package/esm2022/lib/enums/layout-orientation.mjs +6 -0
- package/esm2022/lib/enums/logout-reason-enum.mjs +8 -0
- package/esm2022/lib/enums/modal-size-enum.mjs +10 -0
- package/esm2022/lib/enums/report-type.mjs +9 -0
- package/esm2022/lib/enums/status.mjs +9 -0
- package/esm2022/lib/enums/text-box-type.mjs +7 -0
- package/esm2022/lib/enums/tooltipPosition.enum.mjs +8 -0
- package/esm2022/lib/enums/tsi-component-enum.mjs +40 -0
- package/esm2022/lib/enums/type-import.mjs +6 -0
- package/esm2022/lib/functions/array.functions.mjs +8 -0
- package/esm2022/lib/functions/index.mjs +3 -0
- package/esm2022/lib/functions/modal-open.function.mjs +69 -0
- package/esm2022/lib/guards/admin.guard.mjs +37 -0
- package/esm2022/lib/guards/auth.guard.mjs +30 -0
- package/esm2022/lib/guards/index.mjs +4 -0
- package/esm2022/lib/guards/permission.guard.mjs +32 -0
- package/esm2022/lib/interfaces/configuration/configuration.mjs +2 -0
- package/esm2022/lib/interfaces/generic-form/generic-form.mjs +118 -0
- package/esm2022/lib/interfaces/generic-types/dictionary.mjs +2 -0
- package/esm2022/lib/interfaces/grid/grid-configuration.mjs +2 -0
- package/esm2022/lib/interfaces/index.mjs +12 -0
- package/esm2022/lib/interfaces/modal/dynamic.component.mjs +7 -0
- package/esm2022/lib/interfaces/modal/modal-size.mjs +2 -0
- package/esm2022/lib/interfaces/pagination/pagination-base.mjs +2 -0
- package/esm2022/lib/interfaces/select-list/combo-status-model.mjs +10 -0
- package/esm2022/lib/interfaces/settings/app-settings.mjs +2 -0
- package/esm2022/lib/interfaces/styles/css-size-property.mjs +17 -0
- package/esm2022/lib/interfaces/translation/translation.mjs +2 -0
- package/esm2022/lib/models/Notes/Note.mjs +7 -0
- package/esm2022/lib/models/application/configuration/endpoint-infos.mjs +3 -0
- package/esm2022/lib/models/application/configuration/entity-delete-behavior.mjs +2 -0
- package/esm2022/lib/models/authorization/authorization-token-mapper.mjs +24 -0
- package/esm2022/lib/models/authorization/authorization-token.mjs +2 -0
- package/esm2022/lib/models/common/component-descriminator.mjs +2 -0
- package/esm2022/lib/models/common/entity-properties.mjs +2 -0
- package/esm2022/lib/models/common/entity-validations.mjs +2 -0
- package/esm2022/lib/models/common/event-schema.mjs +2 -0
- package/esm2022/lib/models/common/key-value-pair.mjs +2 -0
- package/esm2022/lib/models/entity-info/entity-info.mjs +29 -0
- package/esm2022/lib/models/filter/filter-by-existing-values.mjs +7 -0
- package/esm2022/lib/models/filter/paged-result-request-base.mjs +13 -0
- package/esm2022/lib/models/filter/search-field.mjs +2 -0
- package/esm2022/lib/models/import-export/import-export.mjs +15 -0
- package/esm2022/lib/models/index.mjs +38 -0
- package/esm2022/lib/models/journalisation-application/journalisation-application.mjs +10 -0
- package/esm2022/lib/models/journalisation-application/status-history.mjs +3 -0
- package/esm2022/lib/models/layout/layout-config.mjs +2 -0
- package/esm2022/lib/models/modal/bs-modal.mjs +6 -0
- package/esm2022/lib/models/presentation-settings/presentation-settings.mjs +8 -0
- package/esm2022/lib/models/progress-bar/progress-bar-create-request.mjs +2 -0
- package/esm2022/lib/models/progress-bar/progress-bar-response.mjs +8 -0
- package/esm2022/lib/models/progress-bar/progress-bar-update-request.mjs +3 -0
- package/esm2022/lib/models/remote-services-utility/subscription-result.mjs +17 -0
- package/esm2022/lib/models/reporting/json-data-connection.mjs +2 -0
- package/esm2022/lib/models/reporting/optional-endpoints.mjs +2 -0
- package/esm2022/lib/models/reporting/report-template-response.mjs +2 -0
- package/esm2022/lib/models/reporting/report-to-edit-template.mjs +2 -0
- package/esm2022/lib/models/reporting/report-to-print.mjs +2 -0
- package/esm2022/lib/models/reporting/report-to-template.mjs +2 -0
- package/esm2022/lib/models/settings/devise.mjs +3 -0
- package/esm2022/lib/models/settings/fichier.mjs +6 -0
- package/esm2022/lib/models/settings/type-fichier.mjs +3 -0
- package/esm2022/lib/models/tsi-card/tsi-card.mjs +3 -0
- package/esm2022/lib/models/user-identity/login-response.mjs +7 -0
- package/esm2022/lib/models/user-identity/tenant.mjs +3 -0
- package/esm2022/lib/models/user-identity/user-identity.mjs +3 -0
- package/esm2022/lib/models/workflow/workflow.mjs +14 -0
- package/esm2022/lib/package-initializer.mjs +7 -0
- package/esm2022/lib/pipes/cut-label.pipe.mjs +23 -0
- package/esm2022/lib/pipes/index.mjs +8 -0
- package/esm2022/lib/pipes/localize.pipe.mjs +51 -0
- package/esm2022/lib/pipes/modal-label.pipe.mjs +37 -0
- package/esm2022/lib/pipes/shorten.pipe.mjs +20 -0
- package/esm2022/lib/pipes/to-number.pipe.mjs +20 -0
- package/esm2022/lib/pipes/tsi-currency.pipe.mjs +29 -0
- package/esm2022/lib/pipes/tsi-decimal.pipe.mjs +21 -0
- package/esm2022/lib/providers/index.mjs +2 -0
- package/esm2022/lib/providers/shared-ui-tsi.provider.mjs +15 -0
- package/esm2022/lib/routes/admin.routes.mjs +5 -0
- package/esm2022/lib/routes/app.routes.mjs +7 -0
- package/esm2022/lib/routes/identity.routes.mjs +4 -0
- package/esm2022/lib/routes/index.mjs +5 -0
- package/esm2022/lib/routes/manage-reporting.routes.mjs +5 -0
- package/esm2022/lib/services/Component-Finder/tsi-component-finder.service.mjs +22 -0
- package/esm2022/lib/services/Import-Export/modele-import.service.mjs +59 -0
- package/esm2022/lib/services/Note/Note.service.mjs +35 -0
- package/esm2022/lib/services/UserIdentity/identity-platform-authentication.service.mjs +29 -0
- package/esm2022/lib/services/UserIdentity/user-identity.service.mjs +40 -0
- package/esm2022/lib/services/application/api-explorer.service.mjs +24 -0
- package/esm2022/lib/services/application/app.layout.service.mjs +97 -0
- package/esm2022/lib/services/application/parametres-application-parambase.service.mjs +20 -0
- package/esm2022/lib/services/authorization/authorization.service.mjs +124 -0
- package/esm2022/lib/services/authorization/identity-manager.service.mjs +97 -0
- package/esm2022/lib/services/base/crud-base.service.mjs +38 -0
- package/esm2022/lib/services/configuration/entity-configuration.service.mjs +49 -0
- package/esm2022/lib/services/currentUser/currentUser.service.mjs +49 -0
- package/esm2022/lib/services/date-helper.service.mjs +133 -0
- package/esm2022/lib/services/dialog-data.service.mjs +32 -0
- package/esm2022/lib/services/fichier/fichier-upload.service.mjs +44 -0
- package/esm2022/lib/services/fichier/fichier.service.mjs +20 -0
- package/esm2022/lib/services/formula.service.mjs +20 -0
- package/esm2022/lib/services/generator/html-template-generator.service.mjs +196 -0
- package/esm2022/lib/services/index.mjs +41 -0
- package/esm2022/lib/services/journalisation/journalisation-application.service.mjs +23 -0
- package/esm2022/lib/services/journalisation/status-history.service.mjs +23 -0
- package/esm2022/lib/services/layout/layout-helper.service.mjs +72 -0
- package/esm2022/lib/services/modal/tsi-bs-modal.service.mjs +37 -0
- package/esm2022/lib/services/modal/tsi-modal.service.mjs +21 -0
- package/esm2022/lib/services/module-code/module-code.service.mjs +31 -0
- package/esm2022/lib/services/module-main-parameter.service.mjs +31 -0
- package/esm2022/lib/services/notification/error-response-manager.service.mjs +57 -0
- package/esm2022/lib/services/notification/tsi-confirmation.service.mjs +37 -0
- package/esm2022/lib/services/notification/tsi-message.service.mjs +54 -0
- package/esm2022/lib/services/notification/tsi-notification.service.mjs +47 -0
- package/esm2022/lib/services/presentation-setting/presentation-designer-base.service.mjs +26 -0
- package/esm2022/lib/services/presentation-setting/presentation-designer.service.mjs +58 -0
- package/esm2022/lib/services/presentation-setting/presentation-setting.service.mjs +39 -0
- package/esm2022/lib/services/progress-bar/progress-bar-helper.service.mjs +39 -0
- package/esm2022/lib/services/progress-bar/progress-bar.service.mjs +30 -0
- package/esm2022/lib/services/record-info-popup.service.mjs +21 -0
- package/esm2022/lib/services/reporting/dashboard-module.service.mjs +24 -0
- package/esm2022/lib/services/reporting/reporting.service.mjs +111 -0
- package/esm2022/lib/services/settings/app-settings.service.mjs +47 -0
- package/esm2022/lib/services/settings/keyboard-shortcut.service.mjs +30 -0
- package/esm2022/lib/services/status/entityStatus.service.mjs +21 -0
- package/esm2022/lib/services/translation/translation.service.mjs +71 -0
- package/esm2022/lib/services/validation/entity-validations.service.mjs +21 -0
- package/esm2022/lib/services/validation/generic-validation-state.service.mjs +30 -0
- package/esm2022/lib/services/validation/input-registry.service.mjs +25 -0
- package/esm2022/lib/services/workflow/workflow-configuration.service.mjs +80 -0
- package/esm2022/lib/shared.module.mjs +643 -0
- package/esm2022/lib/tsi-base/components/app-base/app-base.component.mjs +101 -0
- package/esm2022/lib/tsi-base/components/tsi-base/tsi-base.component.mjs +25 -0
- package/esm2022/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.mjs +645 -0
- package/esm2022/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.mjs +514 -0
- package/esm2022/lib/tsi-base/index.mjs +6 -0
- package/esm2022/lib/tsi-base/tsi-input-base/tsi-input-base.component.mjs +141 -0
- package/esm2022/lib/tsi-components/alert-import-message/alert-import-message.component.mjs +19 -0
- package/esm2022/lib/tsi-components/button-components/Tsi-Submit-Button/tsi-submit-button.component.mjs +40 -0
- package/esm2022/lib/tsi-components/button-components/tsi-button/tsi-button.component.mjs +75 -0
- package/esm2022/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.mjs +173 -0
- package/esm2022/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.mjs +201 -0
- package/esm2022/lib/tsi-components/index.mjs +80 -0
- package/esm2022/lib/tsi-components/input-components/editable-grid/editable-grid.component.mjs +643 -0
- package/esm2022/lib/tsi-components/input-components/tsi-checkbox/tsi-checkbox.component.mjs +120 -0
- package/esm2022/lib/tsi-components/input-components/tsi-currency-other-input/tsi-currency-other-input.component.mjs +53 -0
- package/esm2022/lib/tsi-components/input-components/tsi-currency-societe-input/tsi-currency-societe-input.component.mjs +62 -0
- package/esm2022/lib/tsi-components/input-components/tsi-date-picker/tsi-date-picker.component.mjs +116 -0
- package/esm2022/lib/tsi-components/input-components/tsi-decimal-input/tsi-decimal-input.component.mjs +51 -0
- package/esm2022/lib/tsi-components/input-components/tsi-file-manager/tsi-file-manager.component.mjs +195 -0
- package/esm2022/lib/tsi-components/input-components/tsi-formula-box/tsi-formula-box.component.mjs +54 -0
- package/esm2022/lib/tsi-components/input-components/tsi-integer/tsi-integer.component.mjs +55 -0
- package/esm2022/lib/tsi-components/input-components/tsi-radio-button/tsi-radio-button.component.mjs +43 -0
- package/esm2022/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.mjs +56 -0
- package/esm2022/lib/tsi-components/input-components/tsi-search-combo/tsi-search-combo.component.mjs +649 -0
- package/esm2022/lib/tsi-components/input-components/tsi-text-area/tsi-text-area.component.mjs +44 -0
- package/esm2022/lib/tsi-components/input-components/tsi-text-box/tsi-text-box.component.mjs +50 -0
- package/esm2022/lib/tsi-components/input-components/tsi-time-picker/tsi-time-picker.component.mjs +65 -0
- package/esm2022/lib/tsi-components/logout-popup/logout-popup.component.mjs +12 -0
- package/esm2022/lib/tsi-components/manage-import-export/manage-import-export.component.mjs +435 -0
- package/esm2022/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.mjs +148 -0
- package/esm2022/lib/tsi-components/manage-reporting/manage-reporting.component.mjs +1075 -0
- package/esm2022/lib/tsi-components/message-components/tsi-error-message/tsi-error-message.component.mjs +31 -0
- package/esm2022/lib/tsi-components/message-components/tsi-info-message/tsi-info-message.component.mjs +24 -0
- package/esm2022/lib/tsi-components/message-components/tsi-redirection-message/tsi-redirection-message.component.mjs +19 -0
- package/esm2022/lib/tsi-components/message-components/tsi-success-message/tsi-success-message.component.mjs +22 -0
- package/esm2022/lib/tsi-components/modal-component/modal.component.mjs +138 -0
- package/esm2022/lib/tsi-components/modal-loader/modal-loader.component.mjs +58 -0
- package/esm2022/lib/tsi-components/output-components/display-nested-prop/display-nested-prop.component.mjs +32 -0
- package/esm2022/lib/tsi-components/output-components/tsi-checkbox-display/tsi-checkbox-display.component.mjs +18 -0
- package/esm2022/lib/tsi-components/output-components/tsi-currency-other-display/tsi-currency-other-display.component.mjs +17 -0
- package/esm2022/lib/tsi-components/output-components/tsi-currency-societe-display/tsi-currency-societe-display.component.mjs +57 -0
- package/esm2022/lib/tsi-components/output-components/tsi-date-display/tsi-date-display.component.mjs +27 -0
- package/esm2022/lib/tsi-components/output-components/tsi-decimal-display/tsi-decimal-display.component.mjs +25 -0
- package/esm2022/lib/tsi-components/output-components/tsi-display-grid/tsi-display-grid.component.mjs +139 -0
- package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +1509 -0
- package/esm2022/lib/tsi-components/output-components/tsi-image-display/tsi-image-display.component.mjs +144 -0
- package/esm2022/lib/tsi-components/output-components/tsi-integer-display/tsi-integer-display.component.mjs +13 -0
- package/esm2022/lib/tsi-components/output-components/tsi-label/tsi-label.component.mjs +24 -0
- package/esm2022/lib/tsi-components/output-components/tsi-label-legend/tsi-label-legend.component.mjs +18 -0
- package/esm2022/lib/tsi-components/output-components/tsi-legend/tsi-legend.component.mjs +20 -0
- package/esm2022/lib/tsi-components/output-components/tsi-paragraph/tsi-paragraph.component.mjs +17 -0
- package/esm2022/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.mjs +30 -0
- package/esm2022/lib/tsi-components/output-components/tsi-time-display/tsi-time-display.component.mjs +17 -0
- package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +427 -0
- package/esm2022/lib/tsi-components/reporting/reporting.component.mjs +667 -0
- package/esm2022/lib/tsi-components/spinner/spinner.component.mjs +15 -0
- package/esm2022/lib/tsi-components/tsi-bubble-info/tsi-bubble-info.component.mjs +21 -0
- package/esm2022/lib/tsi-components/tsi-calender/context-menu/context-menu.component.mjs +46 -0
- package/esm2022/lib/tsi-components/tsi-calender/tsi-calender.component.mjs +297 -0
- package/esm2022/lib/tsi-components/tsi-card/tsi-card.component.mjs +64 -0
- package/esm2022/lib/tsi-components/tsi-card-list/tsi-card-list.component.mjs +112 -0
- package/esm2022/lib/tsi-components/tsi-change-password/tsi-change-password.component.mjs +39 -0
- package/esm2022/lib/tsi-components/tsi-code-generator/tsi-code-generator.component.mjs +83 -0
- package/esm2022/lib/tsi-components/tsi-divider/tsi-divider.component.mjs +18 -0
- package/esm2022/lib/tsi-components/tsi-form/tsi-form.component.mjs +305 -0
- package/esm2022/lib/tsi-components/tsi-form-modal-footer/tsi-form-modal-footer.component.mjs +15 -0
- package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +883 -0
- package/esm2022/lib/tsi-components/tsi-generic-form/tsi-generic-form.component.mjs +149 -0
- package/esm2022/lib/tsi-components/tsi-kanban/tsi-kanban.component.mjs +231 -0
- package/esm2022/lib/tsi-components/tsi-log-event-history/tsi-log-event-history.component.mjs +119 -0
- package/esm2022/lib/tsi-components/tsi-modal/tsi-modal.component.mjs +25 -0
- package/esm2022/lib/tsi-components/tsi-modal-footer/tsi-modal-footer.component.mjs +119 -0
- package/esm2022/lib/tsi-components/tsi-modal-header/tsi-modal-header.component.mjs +54 -0
- package/esm2022/lib/tsi-components/tsi-notes-avertir/tsi-notes-avertir.component.mjs +27 -0
- package/esm2022/lib/tsi-components/tsi-notes-createoredit/tsi-notes.component.mjs +123 -0
- package/esm2022/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.mjs +41 -0
- package/esm2022/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.mjs +187 -0
- package/esm2022/lib/tsi-components/tsi-progress-bar/tsi-progress-bar.component.mjs +170 -0
- package/esm2022/lib/tsi-components/tsi-search-box/tsi-search-box.component.mjs +142 -0
- package/esm2022/lib/tsi-components/tsi-send-mail/tsi-send-mail.component.mjs +37 -0
- package/esm2022/lib/tsi-components/tsi-tab-panel/tsi-tab-panel.component.mjs +52 -0
- package/esm2022/lib/tsi-components/tsi-tab-view/tsi-tab-view.component.mjs +46 -0
- package/esm2022/lib/tsi-components/tsi-tenants/tsi-tenants.component.mjs +122 -0
- package/esm2022/lib/tsi-components/tsi-tooltip/tsi-tooltip.component.mjs +21 -0
- package/esm2022/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.mjs +186 -0
- package/esm2022/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.mjs +54 -0
- package/esm2022/lib/tsi-directives/auto-select.directive.mjs +33 -0
- package/esm2022/lib/tsi-directives/busy.directive.mjs +32 -0
- package/esm2022/lib/tsi-directives/dynamic-component-loader/ad.directive.mjs +16 -0
- package/esm2022/lib/tsi-directives/index.mjs +8 -0
- package/esm2022/lib/tsi-directives/module-main-parameter.directive.mjs +16 -0
- package/esm2022/lib/tsi-directives/presentation-designer-base.directive.mjs +238 -0
- package/esm2022/lib/tsi-directives/presentation-designer.directive.mjs +205 -0
- package/esm2022/lib/tsi-directives/validation.directive.mjs +85 -0
- package/esm2022/lib/tsi-helpers/compoent-reference.helper.mjs +7 -0
- package/esm2022/lib/tsi-helpers/date-helper.mjs +21 -0
- package/esm2022/lib/tsi-helpers/export-excel.helper.mjs +40 -0
- package/esm2022/lib/tsi-helpers/filter-helper.mjs +126 -0
- package/esm2022/lib/tsi-helpers/grid-col-style.helper.mjs +7 -0
- package/esm2022/lib/tsi-helpers/guid.helper.mjs +19 -0
- package/esm2022/lib/tsi-helpers/helpers.mjs +9 -0
- package/esm2022/lib/tsi-helpers/index.mjs +13 -0
- package/esm2022/lib/tsi-helpers/mapping-helper.mjs +10 -0
- package/esm2022/lib/tsi-helpers/object.helper.mjs +6 -0
- package/esm2022/lib/tsi-helpers/primeng-translate-config.mjs +55 -0
- package/esm2022/lib/tsi-helpers/storage-manager.mjs +33 -0
- package/esm2022/lib/tsi-helpers/type-registry.helper.mjs +49 -0
- package/esm2022/lib/types/enum-description.type.mjs +2 -0
- package/esm2022/lib/types/index.mjs +3 -0
- package/esm2022/lib/types/time-only.mjs +42 -0
- package/esm2022/public-api.mjs +21 -0
- package/esm2022/tsi-developpement-tsi-shared-ui.mjs +5 -0
- package/esm2022/tsi-tsi-shared-ui.mjs +5 -0
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +17486 -0
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -0
- package/fesm2022/tsi-tsi-shared-ui.mjs +17486 -0
- package/fesm2022/tsi-tsi-shared-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/consts/app-providers.d.ts +4 -0
- package/lib/consts/html-template.const.d.ts +12 -0
- package/lib/consts/index.d.ts +7 -0
- package/lib/consts/localization-key.d.ts +11 -0
- package/lib/consts/locals.const.d.ts +7 -0
- package/lib/consts/queryParamNames.const.d.ts +10 -0
- package/lib/consts/themes.d.ts +4 -0
- package/lib/consts/tsi-consts.d.ts +40 -0
- package/lib/end-points/authorization-endpoints.d.ts +31 -0
- package/lib/end-points/baseuri.d.ts +10 -0
- package/lib/end-points/endpoints.d.ts +205 -0
- package/lib/end-points/import-export-endpoint.d.ts +33 -0
- package/lib/end-points/index.d.ts +6 -0
- package/lib/end-points/presentation-settings-endpoints.d.ts +11 -0
- package/lib/end-points/reporting-endpoints.d.ts +53 -0
- package/lib/end-points/shared-endpoint.d.ts +9 -0
- package/lib/end-points/user-identity-endpoints.d.ts +59 -0
- package/lib/enums/Language.d.ts +9 -0
- package/lib/enums/auto-complete.d.ts +4 -0
- package/lib/enums/button-type.enum.d.ts +4 -0
- package/lib/enums/claim-types.d.ts +13 -0
- package/lib/enums/code-format.d.ts +4 -0
- package/lib/enums/component-use-modes-enum.d.ts +17 -0
- package/lib/enums/css-units.d.ts +8 -0
- package/lib/enums/decimal-format.d.ts +6 -0
- package/lib/enums/display-types.d.ts +17 -0
- package/lib/enums/filter-operator-type.d.ts +18 -0
- package/lib/enums/form-validation-error.d.ts +11 -0
- package/lib/enums/grid-selection-mode.d.ts +5 -0
- package/lib/enums/grid-sort-mode.d.ts +5 -0
- package/lib/enums/http-method-types.d.ts +4 -0
- package/lib/enums/index.d.ts +24 -0
- package/lib/enums/input-types.d.ts +18 -0
- package/lib/enums/layout-orientation.d.ts +4 -0
- package/lib/enums/logout-reason-enum.d.ts +6 -0
- package/lib/enums/modal-size-enum.d.ts +10 -0
- package/lib/enums/report-type.d.ts +7 -0
- package/lib/enums/status.d.ts +7 -0
- package/lib/enums/text-box-type.d.ts +5 -0
- package/lib/enums/tooltipPosition.enum.d.ts +6 -0
- package/lib/enums/tsi-component-enum.d.ts +37 -0
- package/lib/enums/type-import.d.ts +4 -0
- package/lib/functions/array.functions.d.ts +1 -0
- package/lib/functions/index.d.ts +1 -0
- package/lib/functions/modal-open.function.d.ts +9 -0
- package/lib/guards/admin.guard.d.ts +14 -0
- package/lib/guards/auth.guard.d.ts +12 -0
- package/lib/guards/index.d.ts +3 -0
- package/lib/guards/permission.guard.d.ts +2 -0
- package/lib/interfaces/configuration/configuration.d.ts +10 -0
- package/lib/interfaces/generic-form/generic-form.d.ts +45 -0
- package/lib/interfaces/generic-types/dictionary.d.ts +3 -0
- package/lib/interfaces/grid/grid-configuration.d.ts +116 -0
- package/lib/interfaces/index.d.ts +11 -0
- package/lib/interfaces/modal/dynamic.component.d.ts +18 -0
- package/lib/interfaces/modal/modal-size.d.ts +4 -0
- package/lib/interfaces/pagination/pagination-base.d.ts +46 -0
- package/lib/interfaces/select-list/combo-status-model.d.ts +8 -0
- package/lib/interfaces/settings/app-settings.d.ts +4 -0
- package/lib/interfaces/styles/css-size-property.d.ts +10 -0
- package/lib/interfaces/translation/translation.d.ts +10 -0
- package/lib/models/Notes/Note.d.ts +25 -0
- package/lib/models/application/configuration/endpoint-infos.d.ts +6 -0
- package/lib/models/application/configuration/entity-delete-behavior.d.ts +6 -0
- package/lib/models/authorization/authorization-token-mapper.d.ts +4 -0
- package/lib/models/authorization/authorization-token.d.ts +16 -0
- package/lib/models/common/component-descriminator.d.ts +4 -0
- package/lib/models/common/entity-properties.d.ts +5 -0
- package/lib/models/common/entity-validations.d.ts +7 -0
- package/lib/models/common/event-schema.d.ts +6 -0
- package/lib/models/common/key-value-pair.d.ts +4 -0
- package/lib/models/entity-info/entity-info.d.ts +37 -0
- package/lib/models/filter/filter-by-existing-values.d.ts +6 -0
- package/lib/models/filter/paged-result-request-base.d.ts +16 -0
- package/lib/models/filter/search-field.d.ts +35 -0
- package/lib/models/import-export/import-export.d.ts +28 -0
- package/lib/models/index.d.ts +37 -0
- package/lib/models/journalisation-application/journalisation-application.d.ts +39 -0
- package/lib/models/journalisation-application/status-history.d.ts +12 -0
- package/lib/models/layout/layout-config.d.ts +3 -0
- package/lib/models/modal/bs-modal.d.ts +5 -0
- package/lib/models/presentation-settings/presentation-settings.d.ts +14 -0
- package/lib/models/progress-bar/progress-bar-create-request.d.ts +8 -0
- package/lib/models/progress-bar/progress-bar-response.d.ts +10 -0
- package/lib/models/progress-bar/progress-bar-update-request.d.ts +9 -0
- package/lib/models/remote-services-utility/subscription-result.d.ts +15 -0
- package/lib/models/reporting/json-data-connection.d.ts +6 -0
- package/lib/models/reporting/optional-endpoints.d.ts +8 -0
- package/lib/models/reporting/report-template-response.d.ts +13 -0
- package/lib/models/reporting/report-to-edit-template.d.ts +29 -0
- package/lib/models/reporting/report-to-print.d.ts +18 -0
- package/lib/models/reporting/report-to-template.d.ts +19 -0
- package/lib/models/settings/devise.d.ts +9 -0
- package/lib/models/settings/fichier.d.ts +14 -0
- package/lib/models/settings/type-fichier.d.ts +4 -0
- package/lib/models/tsi-card/tsi-card.d.ts +9 -0
- package/lib/models/user-identity/login-response.d.ts +8 -0
- package/lib/models/user-identity/tenant.d.ts +5 -0
- package/lib/models/user-identity/user-identity.d.ts +5 -0
- package/lib/models/workflow/workflow.d.ts +36 -0
- package/lib/package-initializer.d.ts +1 -0
- package/lib/pipes/cut-label.pipe.d.ts +7 -0
- package/lib/pipes/index.d.ts +7 -0
- package/lib/pipes/localize.pipe.d.ts +11 -0
- package/lib/pipes/modal-label.pipe.d.ts +10 -0
- package/lib/pipes/shorten.pipe.d.ts +7 -0
- package/lib/pipes/to-number.pipe.d.ts +7 -0
- package/lib/pipes/tsi-currency.pipe.d.ts +10 -0
- package/lib/pipes/tsi-decimal.pipe.d.ts +7 -0
- package/lib/providers/index.d.ts +1 -0
- package/lib/providers/shared-ui-tsi.provider.d.ts +8 -0
- package/lib/routes/admin.routes.d.ts +4 -0
- package/lib/routes/app.routes.d.ts +6 -0
- package/lib/routes/identity.routes.d.ts +3 -0
- package/lib/routes/index.d.ts +4 -0
- package/lib/routes/manage-reporting.routes.d.ts +4 -0
- package/lib/services/Component-Finder/tsi-component-finder.service.d.ts +10 -0
- package/lib/services/Import-Export/modele-import.service.d.ts +21 -0
- package/lib/services/Note/Note.service.d.ts +15 -0
- package/lib/services/UserIdentity/identity-platform-authentication.service.d.ts +13 -0
- package/lib/services/UserIdentity/user-identity.service.d.ts +15 -0
- package/lib/services/application/api-explorer.service.d.ts +13 -0
- package/lib/services/application/app.layout.service.d.ts +47 -0
- package/lib/services/application/parametres-application-parambase.service.d.ts +10 -0
- package/lib/services/authorization/authorization.service.d.ts +46 -0
- package/lib/services/authorization/identity-manager.service.d.ts +23 -0
- package/lib/services/base/crud-base.service.d.ts +20 -0
- package/lib/services/configuration/entity-configuration.service.d.ts +22 -0
- package/lib/services/currentUser/currentUser.service.d.ts +26 -0
- package/lib/services/date-helper.service.d.ts +32 -0
- package/lib/services/dialog-data.service.d.ts +12 -0
- package/lib/services/fichier/fichier-upload.service.d.ts +15 -0
- package/lib/services/fichier/fichier.service.d.ts +10 -0
- package/lib/services/formula.service.d.ts +10 -0
- package/lib/services/generator/html-template-generator.service.d.ts +28 -0
- package/lib/services/index.d.ts +40 -0
- package/lib/services/journalisation/journalisation-application.service.d.ts +12 -0
- package/lib/services/journalisation/status-history.service.d.ts +12 -0
- package/lib/services/layout/layout-helper.service.d.ts +25 -0
- package/lib/services/modal/tsi-bs-modal.service.d.ts +16 -0
- package/lib/services/modal/tsi-modal.service.d.ts +9 -0
- package/lib/services/module-code/module-code.service.d.ts +18 -0
- package/lib/services/module-main-parameter.service.d.ts +12 -0
- package/lib/services/notification/error-response-manager.service.d.ts +13 -0
- package/lib/services/notification/tsi-confirmation.service.d.ts +11 -0
- package/lib/services/notification/tsi-message.service.d.ts +13 -0
- package/lib/services/notification/tsi-notification.service.d.ts +18 -0
- package/lib/services/presentation-setting/presentation-designer-base.service.d.ts +14 -0
- package/lib/services/presentation-setting/presentation-designer.service.d.ts +19 -0
- package/lib/services/presentation-setting/presentation-setting.service.d.ts +16 -0
- package/lib/services/progress-bar/progress-bar-helper.service.d.ts +19 -0
- package/lib/services/progress-bar/progress-bar.service.d.ts +16 -0
- package/lib/services/record-info-popup.service.d.ts +10 -0
- package/lib/services/reporting/dashboard-module.service.d.ts +11 -0
- package/lib/services/reporting/reporting.service.d.ts +32 -0
- package/lib/services/settings/app-settings.service.d.ts +13 -0
- package/lib/services/settings/keyboard-shortcut.service.d.ts +9 -0
- package/lib/services/status/entityStatus.service.d.ts +11 -0
- package/lib/services/translation/translation.service.d.ts +20 -0
- package/lib/services/validation/entity-validations.service.d.ts +10 -0
- package/lib/services/validation/generic-validation-state.service.d.ts +15 -0
- package/lib/services/validation/input-registry.service.d.ts +11 -0
- package/lib/services/workflow/workflow-configuration.service.d.ts +28 -0
- package/lib/shared.module.d.ts +141 -0
- package/lib/tsi-base/components/app-base/app-base.component.d.ts +28 -0
- package/lib/tsi-base/components/tsi-base/tsi-base.component.d.ts +11 -0
- package/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.d.ts +118 -0
- package/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.d.ts +85 -0
- package/lib/tsi-base/index.d.ts +5 -0
- package/lib/tsi-base/tsi-input-base/tsi-input-base.component.d.ts +34 -0
- package/lib/tsi-components/alert-import-message/alert-import-message.component.d.ts +10 -0
- package/lib/tsi-components/button-components/Tsi-Submit-Button/tsi-submit-button.component.d.ts +16 -0
- package/lib/tsi-components/button-components/tsi-button/tsi-button.component.d.ts +26 -0
- package/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.d.ts +31 -0
- package/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.d.ts +52 -0
- package/lib/tsi-components/index.d.ts +79 -0
- package/lib/tsi-components/input-components/editable-grid/editable-grid.component.d.ts +127 -0
- package/lib/tsi-components/input-components/tsi-checkbox/tsi-checkbox.component.d.ts +30 -0
- package/lib/tsi-components/input-components/tsi-currency-other-input/tsi-currency-other-input.component.d.ts +18 -0
- package/lib/tsi-components/input-components/tsi-currency-societe-input/tsi-currency-societe-input.component.d.ts +21 -0
- package/lib/tsi-components/input-components/tsi-date-picker/tsi-date-picker.component.d.ts +38 -0
- package/lib/tsi-components/input-components/tsi-decimal-input/tsi-decimal-input.component.d.ts +14 -0
- package/lib/tsi-components/input-components/tsi-file-manager/tsi-file-manager.component.d.ts +45 -0
- package/lib/tsi-components/input-components/tsi-formula-box/tsi-formula-box.component.d.ts +17 -0
- package/lib/tsi-components/input-components/tsi-integer/tsi-integer.component.d.ts +19 -0
- package/lib/tsi-components/input-components/tsi-radio-button/tsi-radio-button.component.d.ts +16 -0
- package/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.d.ts +16 -0
- package/lib/tsi-components/input-components/tsi-search-combo/tsi-search-combo.component.d.ts +92 -0
- package/lib/tsi-components/input-components/tsi-text-area/tsi-text-area.component.d.ts +17 -0
- package/lib/tsi-components/input-components/tsi-text-box/tsi-text-box.component.d.ts +21 -0
- package/lib/tsi-components/input-components/tsi-time-picker/tsi-time-picker.component.d.ts +23 -0
- package/lib/tsi-components/logout-popup/logout-popup.component.d.ts +5 -0
- package/lib/tsi-components/manage-import-export/manage-import-export.component.d.ts +64 -0
- package/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.d.ts +151 -0
- package/lib/tsi-components/manage-reporting/manage-reporting.component.d.ts +109 -0
- package/lib/tsi-components/message-components/tsi-error-message/tsi-error-message.component.d.ts +15 -0
- package/lib/tsi-components/message-components/tsi-info-message/tsi-info-message.component.d.ts +13 -0
- package/lib/tsi-components/message-components/tsi-redirection-message/tsi-redirection-message.component.d.ts +9 -0
- package/lib/tsi-components/message-components/tsi-success-message/tsi-success-message.component.d.ts +13 -0
- package/lib/tsi-components/modal-component/modal.component.d.ts +25 -0
- package/lib/tsi-components/modal-loader/modal-loader.component.d.ts +27 -0
- package/lib/tsi-components/output-components/display-nested-prop/display-nested-prop.component.d.ts +14 -0
- package/lib/tsi-components/output-components/tsi-checkbox-display/tsi-checkbox-display.component.d.ts +6 -0
- package/lib/tsi-components/output-components/tsi-currency-other-display/tsi-currency-other-display.component.d.ts +7 -0
- package/lib/tsi-components/output-components/tsi-currency-societe-display/tsi-currency-societe-display.component.d.ts +19 -0
- package/lib/tsi-components/output-components/tsi-date-display/tsi-date-display.component.d.ts +10 -0
- package/lib/tsi-components/output-components/tsi-decimal-display/tsi-decimal-display.component.d.ts +9 -0
- package/lib/tsi-components/output-components/tsi-display-grid/tsi-display-grid.component.d.ts +41 -0
- package/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.d.ts +231 -0
- package/lib/tsi-components/output-components/tsi-image-display/tsi-image-display.component.d.ts +46 -0
- package/lib/tsi-components/output-components/tsi-integer-display/tsi-integer-display.component.d.ts +6 -0
- package/lib/tsi-components/output-components/tsi-label/tsi-label.component.d.ts +8 -0
- package/lib/tsi-components/output-components/tsi-label-legend/tsi-label-legend.component.d.ts +6 -0
- package/lib/tsi-components/output-components/tsi-legend/tsi-legend.component.d.ts +9 -0
- package/lib/tsi-components/output-components/tsi-paragraph/tsi-paragraph.component.d.ts +6 -0
- package/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.d.ts +10 -0
- package/lib/tsi-components/output-components/tsi-time-display/tsi-time-display.component.d.ts +7 -0
- package/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.d.ts +97 -0
- package/lib/tsi-components/reporting/reporting.component.d.ts +103 -0
- package/lib/tsi-components/spinner/spinner.component.d.ts +8 -0
- package/lib/tsi-components/tsi-bubble-info/tsi-bubble-info.component.d.ts +9 -0
- package/lib/tsi-components/tsi-calender/context-menu/context-menu.component.d.ts +25 -0
- package/lib/tsi-components/tsi-calender/tsi-calender.component.d.ts +50 -0
- package/lib/tsi-components/tsi-card/tsi-card.component.d.ts +25 -0
- package/lib/tsi-components/tsi-card-list/tsi-card-list.component.d.ts +35 -0
- package/lib/tsi-components/tsi-change-password/tsi-change-password.component.d.ts +21 -0
- package/lib/tsi-components/tsi-code-generator/tsi-code-generator.component.d.ts +23 -0
- package/lib/tsi-components/tsi-divider/tsi-divider.component.d.ts +6 -0
- package/lib/tsi-components/tsi-form/tsi-form.component.d.ts +91 -0
- package/lib/tsi-components/tsi-form-modal-footer/tsi-form-modal-footer.component.d.ts +8 -0
- package/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.d.ts +156 -0
- package/lib/tsi-components/tsi-generic-form/tsi-generic-form.component.d.ts +28 -0
- package/lib/tsi-components/tsi-kanban/tsi-kanban.component.d.ts +68 -0
- package/lib/tsi-components/tsi-log-event-history/tsi-log-event-history.component.d.ts +35 -0
- package/lib/tsi-components/tsi-modal/tsi-modal.component.d.ts +10 -0
- package/lib/tsi-components/tsi-modal-footer/tsi-modal-footer.component.d.ts +38 -0
- package/lib/tsi-components/tsi-modal-header/tsi-modal-header.component.d.ts +19 -0
- package/lib/tsi-components/tsi-notes-avertir/tsi-notes-avertir.component.d.ts +13 -0
- package/lib/tsi-components/tsi-notes-createoredit/tsi-notes.component.d.ts +21 -0
- package/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.d.ts +12 -0
- package/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.d.ts +41 -0
- package/lib/tsi-components/tsi-progress-bar/tsi-progress-bar.component.d.ts +38 -0
- package/lib/tsi-components/tsi-search-box/tsi-search-box.component.d.ts +44 -0
- package/lib/tsi-components/tsi-send-mail/tsi-send-mail.component.d.ts +21 -0
- package/lib/tsi-components/tsi-tab-panel/tsi-tab-panel.component.d.ts +18 -0
- package/lib/tsi-components/tsi-tab-view/tsi-tab-view.component.d.ts +17 -0
- package/lib/tsi-components/tsi-tenants/tsi-tenants.component.d.ts +39 -0
- package/lib/tsi-components/tsi-tooltip/tsi-tooltip.component.d.ts +9 -0
- package/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.d.ts +35 -0
- package/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.d.ts +13 -0
- package/lib/tsi-directives/auto-select.directive.d.ts +9 -0
- package/lib/tsi-directives/busy.directive.d.ts +11 -0
- package/lib/tsi-directives/dynamic-component-loader/ad.directive.d.ts +8 -0
- package/lib/tsi-directives/index.d.ts +7 -0
- package/lib/tsi-directives/module-main-parameter.directive.d.ts +8 -0
- package/lib/tsi-directives/presentation-designer-base.directive.d.ts +41 -0
- package/lib/tsi-directives/presentation-designer.directive.d.ts +37 -0
- package/lib/tsi-directives/validation.directive.d.ts +18 -0
- package/lib/tsi-helpers/compoent-reference.helper.d.ts +5 -0
- package/lib/tsi-helpers/date-helper.d.ts +6 -0
- package/lib/tsi-helpers/export-excel.helper.d.ts +5 -0
- package/lib/tsi-helpers/filter-helper.d.ts +12 -0
- package/lib/tsi-helpers/grid-col-style.helper.d.ts +5 -0
- package/lib/tsi-helpers/guid.helper.d.ts +6 -0
- package/lib/tsi-helpers/helpers.d.ts +4 -0
- package/lib/tsi-helpers/index.d.ts +12 -0
- package/lib/tsi-helpers/mapping-helper.d.ts +5 -0
- package/lib/tsi-helpers/object.helper.d.ts +3 -0
- package/lib/tsi-helpers/primeng-translate-config.d.ts +54 -0
- package/lib/tsi-helpers/storage-manager.d.ts +8 -0
- package/lib/tsi-helpers/type-registry.helper.d.ts +34 -0
- package/lib/types/enum-description.type.d.ts +3 -0
- package/lib/types/index.d.ts +2 -0
- package/lib/types/time-only.d.ts +17 -0
- package/package.json +24 -0
- package/public-api.d.ts +17 -0
|
@@ -0,0 +1,667 @@
|
|
|
1
|
+
import { HttpStatusCode } from '@angular/common/http';
|
|
2
|
+
import { Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import { firstValueFrom } from 'rxjs';
|
|
4
|
+
import { TooltipPosition } from '../../enums/tooltipPosition.enum';
|
|
5
|
+
import { Segment } from '../../end-points';
|
|
6
|
+
import { ModalSizeEnum, HttpMethodType, TsiReportType } from '../../enums';
|
|
7
|
+
import { Fichier } from '../../models';
|
|
8
|
+
import { queryParamNamesConst } from '../../consts/queryParamNames.const';
|
|
9
|
+
import { LocalizePipe } from '../../pipes/localize.pipe';
|
|
10
|
+
import { openManageImportExportModal, openManageReportingComponent, openModalUploadGrid, openNotesList, openTsiPopupTextViewerComponent } from '../../functions/modal-open.function';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "../../services/reporting/reporting.service";
|
|
13
|
+
import * as i2 from "../../services/authorization/identity-manager.service";
|
|
14
|
+
import * as i3 from "../../services/notification/tsi-notification.service";
|
|
15
|
+
import * as i4 from "../../services/notification/tsi-message.service";
|
|
16
|
+
import * as i5 from "../../services/record-info-popup.service";
|
|
17
|
+
import * as i6 from "../../services/layout/layout-helper.service";
|
|
18
|
+
import * as i7 from "../../services/fichier/fichier.service";
|
|
19
|
+
import * as i8 from "@angular/common";
|
|
20
|
+
import * as i9 from "../button-components/tsi-button/tsi-button.component";
|
|
21
|
+
import * as i10 from "../../tsi-directives/presentation-designer-base.directive";
|
|
22
|
+
export class ReportingComponent {
|
|
23
|
+
get isReportingToolbarDisabled() {
|
|
24
|
+
return this._isReportingToolbarDisabled;
|
|
25
|
+
}
|
|
26
|
+
set isReportingToolbarDisabled(value) {
|
|
27
|
+
this._isReportingToolbarDisabled = value;
|
|
28
|
+
}
|
|
29
|
+
get reportDiscriminator() {
|
|
30
|
+
return this._reportDiscriminator;
|
|
31
|
+
}
|
|
32
|
+
set reportDiscriminator(value) {
|
|
33
|
+
this._reportDiscriminator = value;
|
|
34
|
+
}
|
|
35
|
+
/* nombreDocumentsJoints: number = 5;
|
|
36
|
+
*/
|
|
37
|
+
set id(value) {
|
|
38
|
+
this._id = value;
|
|
39
|
+
}
|
|
40
|
+
get id() {
|
|
41
|
+
return this._id;
|
|
42
|
+
}
|
|
43
|
+
set selectedItemUids(listUids) {
|
|
44
|
+
this._selectedItemUids = listUids;
|
|
45
|
+
}
|
|
46
|
+
get selectedItemUids() {
|
|
47
|
+
return this._selectedItemUids;
|
|
48
|
+
}
|
|
49
|
+
get isReportForFiche() {
|
|
50
|
+
return !this.formEndpoint?.includes('getallpaged');
|
|
51
|
+
}
|
|
52
|
+
//#region ctor
|
|
53
|
+
constructor(reportingService, identityManagerService, notificationService, messageService, recordInfoPopupService, _layoutHelperService, _fichierService, _injector) {
|
|
54
|
+
this.reportingService = reportingService;
|
|
55
|
+
this.identityManagerService = identityManagerService;
|
|
56
|
+
this.notificationService = notificationService;
|
|
57
|
+
this.messageService = messageService;
|
|
58
|
+
this.recordInfoPopupService = recordInfoPopupService;
|
|
59
|
+
this._layoutHelperService = _layoutHelperService;
|
|
60
|
+
this._fichierService = _fichierService;
|
|
61
|
+
this._injector = _injector;
|
|
62
|
+
this.localize = inject(LocalizePipe);
|
|
63
|
+
this.errorMessageKey = 'shared_reporting_error_occured';
|
|
64
|
+
this.modalSize = ModalSizeEnum.Large;
|
|
65
|
+
// parametre: ParametresApplicationPaie = new ParametresApplicationPaie();
|
|
66
|
+
this.showImportExportButton = true;
|
|
67
|
+
this.showNoteButton = true;
|
|
68
|
+
this.showInfoButton = true;
|
|
69
|
+
this.showUploadButton = true;
|
|
70
|
+
this.showPresentationDesignerConfigButton = true;
|
|
71
|
+
this._isReportingToolbarDisabled = false;
|
|
72
|
+
//#endregion
|
|
73
|
+
this.onSave = new EventEmitter();
|
|
74
|
+
this.isFormEndpointPaged = false;
|
|
75
|
+
this.httpMethodType = HttpMethodType.POST;
|
|
76
|
+
this.configModeButtonId = 'show-hide-config-button';
|
|
77
|
+
this._selectedItemUids = [];
|
|
78
|
+
//#endregion
|
|
79
|
+
//#region Output properties
|
|
80
|
+
this.refreshData = new EventEmitter();
|
|
81
|
+
this.toggleDesignMode = new EventEmitter();
|
|
82
|
+
this.reports = [];
|
|
83
|
+
this.showContextMenu = false;
|
|
84
|
+
this.contextMenuPosition = { x: 0, y: 0 };
|
|
85
|
+
this.tooltipPosition = TooltipPosition.Top;
|
|
86
|
+
}
|
|
87
|
+
//#endregion
|
|
88
|
+
//handle Lifecycle Hooks
|
|
89
|
+
ngOnInit() { }
|
|
90
|
+
ngOnDestroy() { }
|
|
91
|
+
//#endregion
|
|
92
|
+
//#region handle events
|
|
93
|
+
onPrintDefault(event) {
|
|
94
|
+
if (this.formName) {
|
|
95
|
+
this.reportingService
|
|
96
|
+
.getDefaultReport(this.formName, this.reportDiscriminator)
|
|
97
|
+
.subscribe({
|
|
98
|
+
next: (data) => {
|
|
99
|
+
console.log(data);
|
|
100
|
+
// let defaultReportId: string = data;
|
|
101
|
+
this._viewReport(data?.uid, data);
|
|
102
|
+
},
|
|
103
|
+
error: (response) => {
|
|
104
|
+
if (response.status == HttpStatusCode.NotFound) {
|
|
105
|
+
this.messageService.infoMessage('shared_reporting_no_default_report_found');
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
onExportPdf(event) {
|
|
112
|
+
if (this.formName) {
|
|
113
|
+
this.reportingService.getDefaultReport(this.formName).subscribe({
|
|
114
|
+
next: (data) => {
|
|
115
|
+
console.log(data);
|
|
116
|
+
// let defaultReportId: string = data;
|
|
117
|
+
this._exportPdf(data.uid, data);
|
|
118
|
+
},
|
|
119
|
+
error: (response) => {
|
|
120
|
+
if (response.status == HttpStatusCode.NotFound) {
|
|
121
|
+
this.messageService.infoMessage('shared_reporting_no_default_report_found');
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
getFormName(formName) {
|
|
128
|
+
if (this.reportDiscriminator)
|
|
129
|
+
return `${formName}_${this.reportDiscriminator}`;
|
|
130
|
+
else
|
|
131
|
+
return formName;
|
|
132
|
+
}
|
|
133
|
+
onSendPdf(event) {
|
|
134
|
+
// if (this.formName == 'app-create-or-edit-gesc-documents') {
|
|
135
|
+
// this._documentService.getById(this.id!).subscribe({
|
|
136
|
+
// next: (data: any) => {
|
|
137
|
+
// this._tierService.getById(data.tier).subscribe({
|
|
138
|
+
// next: (data: any) => {
|
|
139
|
+
// this.toSendEmail = data.email;
|
|
140
|
+
// },
|
|
141
|
+
// error: (response: HttpErrorResponse) => {
|
|
142
|
+
// if (response.status == HttpStatusCode.NotFound) {
|
|
143
|
+
// this.messageService.infoMessage('selected_tier_not_found');
|
|
144
|
+
// }
|
|
145
|
+
// },
|
|
146
|
+
// });
|
|
147
|
+
// },
|
|
148
|
+
// error: (response: HttpErrorResponse) => {
|
|
149
|
+
// if (response.status == HttpStatusCode.NotFound) {
|
|
150
|
+
// this.messageService.infoMessage('selected_document_not_found');
|
|
151
|
+
// }
|
|
152
|
+
// },
|
|
153
|
+
// });
|
|
154
|
+
// }
|
|
155
|
+
// if (this.formName) {
|
|
156
|
+
// this.reportingService
|
|
157
|
+
// .getDefaultReport(this.formName, this.reportDiscriminator)
|
|
158
|
+
// .subscribe({
|
|
159
|
+
// next: (data) => {
|
|
160
|
+
// console.log(data);
|
|
161
|
+
// // let defaultReportId: string = data;
|
|
162
|
+
// this._sendPdf(data.uid, data);
|
|
163
|
+
// },
|
|
164
|
+
// error: (response: HttpErrorResponse) => {
|
|
165
|
+
// if (response.status == HttpStatusCode.NotFound) {
|
|
166
|
+
// this.messageService.infoMessage(
|
|
167
|
+
// 'shared_reporting_no_default_report_found'
|
|
168
|
+
// );
|
|
169
|
+
// }
|
|
170
|
+
// },
|
|
171
|
+
// });
|
|
172
|
+
// }
|
|
173
|
+
}
|
|
174
|
+
_sendPdf(id, reportInformation) {
|
|
175
|
+
// if (id != undefined && id != null) {
|
|
176
|
+
// //get email parameters
|
|
177
|
+
// this._parametresApplicationPaieService
|
|
178
|
+
// .getParametreApplicationPaie()
|
|
179
|
+
// .subscribe((data) => {
|
|
180
|
+
// this.parametre = data;
|
|
181
|
+
// });
|
|
182
|
+
// // case there is default report
|
|
183
|
+
// if (this.formEndpoint != undefined && this.formEndpoint != null) {
|
|
184
|
+
// if (!reportInformation) {
|
|
185
|
+
// reportInformation = this.reports.find((x) => x.uid == id);
|
|
186
|
+
// }
|
|
187
|
+
// this.reportingService
|
|
188
|
+
// .addReportToPrint(
|
|
189
|
+
// this._newReportToPrint(
|
|
190
|
+
// id,
|
|
191
|
+
// reportInformation?.reportType,
|
|
192
|
+
// reportInformation?.restEndpoint
|
|
193
|
+
// )
|
|
194
|
+
// )
|
|
195
|
+
// .subscribe({
|
|
196
|
+
// next: (data: any) => {
|
|
197
|
+
// if (data != null && data != undefined) {
|
|
198
|
+
// this.reportToPrintId = data.uid;
|
|
199
|
+
// let saveSubject: Subject<any> = new Subject();
|
|
200
|
+
// let modalSize = ModalSizeEnum.ExtraLarge;
|
|
201
|
+
// let conf: DynamicDialogConfig = {
|
|
202
|
+
// data: { saveSubject, email: this.toSendEmail },
|
|
203
|
+
// maximizable: true,
|
|
204
|
+
// width: modalSize.width,
|
|
205
|
+
// height: modalSize.height,
|
|
206
|
+
// };
|
|
207
|
+
// this._dialogRef = this._dialogService.open(
|
|
208
|
+
// TsiSendMailComponent,
|
|
209
|
+
// conf
|
|
210
|
+
// );
|
|
211
|
+
// saveSubject.subscribe((val: any) => {
|
|
212
|
+
// this.reportingService
|
|
213
|
+
// .exportReportFileToPdf(this.reportToPrintId!.toString())
|
|
214
|
+
// .subscribe(
|
|
215
|
+
// (blob) => {
|
|
216
|
+
// if (!this.parametre.attachments) {
|
|
217
|
+
// this.parametre.attachments = [];
|
|
218
|
+
// }
|
|
219
|
+
// const newFile = new File([blob], 'Report.pdf', {
|
|
220
|
+
// type: blob.type,
|
|
221
|
+
// });
|
|
222
|
+
// this.parametre.attachments.push(newFile);
|
|
223
|
+
// this._parametresApplicationPaieService
|
|
224
|
+
// .sendMail(
|
|
225
|
+
// this.parametre.fromAddress,
|
|
226
|
+
// this._dialogDataService.getData()?.toAddress,
|
|
227
|
+
// this._dialogDataService.getData()?.objet,
|
|
228
|
+
// this._dialogDataService.getData()?.message,
|
|
229
|
+
// this.parametre.attachments,
|
|
230
|
+
// this.parametre.host,
|
|
231
|
+
// this.parametre.credentialUser,
|
|
232
|
+
// this.parametre.credentialPWD,
|
|
233
|
+
// this.parametre.port,
|
|
234
|
+
// this.parametre.fromName,
|
|
235
|
+
// this._dialogDataService.getData()?.ccAddress
|
|
236
|
+
// )
|
|
237
|
+
// .subscribe({
|
|
238
|
+
// next: () => {
|
|
239
|
+
// this.notificationService.info(
|
|
240
|
+
// this.localization.transform(
|
|
241
|
+
// LocalizationKeys.savedSuccessfully
|
|
242
|
+
// )
|
|
243
|
+
// );
|
|
244
|
+
// },
|
|
245
|
+
// error: (response: HttpErrorResponse) => {
|
|
246
|
+
// console.log(response);
|
|
247
|
+
// this._errorResponseManagerService.showErrorMessage(
|
|
248
|
+
// response
|
|
249
|
+
// );
|
|
250
|
+
// },
|
|
251
|
+
// });
|
|
252
|
+
// },
|
|
253
|
+
// (error) => {
|
|
254
|
+
// console.error('Error downloading the PDF', error);
|
|
255
|
+
// }
|
|
256
|
+
// );
|
|
257
|
+
// this.notificationService.success(
|
|
258
|
+
// 'shared_reporting_redirected_to_print_report_successfully'
|
|
259
|
+
// );
|
|
260
|
+
// });
|
|
261
|
+
// this._dialogRef.onClose.subscribe((val?: any) => {
|
|
262
|
+
// this._closeModal(val);
|
|
263
|
+
// });
|
|
264
|
+
// }
|
|
265
|
+
// },
|
|
266
|
+
// error: (error) => {
|
|
267
|
+
// this.notificationService.error(this.errorMessageKey);
|
|
268
|
+
// },
|
|
269
|
+
// complete: () => { },
|
|
270
|
+
// });
|
|
271
|
+
// }
|
|
272
|
+
// } else {
|
|
273
|
+
// this.messageService.infoMessage(
|
|
274
|
+
// 'shared_reporting_no_default_report_found'
|
|
275
|
+
// );
|
|
276
|
+
// }
|
|
277
|
+
}
|
|
278
|
+
_exportPdf(id, reportInformation) {
|
|
279
|
+
if (id != undefined && id != null) {
|
|
280
|
+
if (this.formEndpoint != undefined && this.formEndpoint != null) {
|
|
281
|
+
if (!reportInformation) {
|
|
282
|
+
reportInformation = this.reports.find((x) => x.uid == id);
|
|
283
|
+
}
|
|
284
|
+
this.reportingService
|
|
285
|
+
.addReportToPrint(this._newReportToPrint(id, reportInformation?.reportType, reportInformation?.restEndpoint))
|
|
286
|
+
.subscribe({
|
|
287
|
+
next: (data) => {
|
|
288
|
+
if (data != null && data != undefined) {
|
|
289
|
+
this.reportToPrintId = data.uid;
|
|
290
|
+
this.reportingService
|
|
291
|
+
.exportReportFileToPdf(this.reportToPrintId.toString())
|
|
292
|
+
.subscribe((blob) => {
|
|
293
|
+
const url = window.URL.createObjectURL(blob);
|
|
294
|
+
const a = document.createElement('a');
|
|
295
|
+
a.href = url;
|
|
296
|
+
a.download = 'Report.pdf';
|
|
297
|
+
document.body.appendChild(a);
|
|
298
|
+
a.click();
|
|
299
|
+
document.body.removeChild(a);
|
|
300
|
+
window.URL.revokeObjectURL(url);
|
|
301
|
+
}, (error) => {
|
|
302
|
+
console.error('Error downloading the PDF', error);
|
|
303
|
+
});
|
|
304
|
+
this.notificationService.success('shared_reporting_redirected_to_print_report_successfully');
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
error: (error) => {
|
|
308
|
+
this.notificationService.error(this.errorMessageKey);
|
|
309
|
+
},
|
|
310
|
+
complete: () => { },
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
this.messageService.infoMessage('shared_reporting_no_default_report_found');
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
async showUploadDialog() {
|
|
319
|
+
const conf = {
|
|
320
|
+
data: {},
|
|
321
|
+
styleClass: '',
|
|
322
|
+
width: this.modalSize.width,
|
|
323
|
+
height: this.modalSize.height,
|
|
324
|
+
maximizable: true,
|
|
325
|
+
};
|
|
326
|
+
const ref = await openModalUploadGrid(this._injector, conf);
|
|
327
|
+
ref.onClose.subscribe((val) => this._closeModal(val));
|
|
328
|
+
}
|
|
329
|
+
onDragOver(event) {
|
|
330
|
+
event.preventDefault();
|
|
331
|
+
event.stopPropagation();
|
|
332
|
+
}
|
|
333
|
+
onDrop(event) {
|
|
334
|
+
event.preventDefault();
|
|
335
|
+
event.stopPropagation();
|
|
336
|
+
const files = event.dataTransfer?.files;
|
|
337
|
+
if (files && files.length > 0) {
|
|
338
|
+
const file = files[0];
|
|
339
|
+
const reader = new FileReader();
|
|
340
|
+
reader.onload = (e) => {
|
|
341
|
+
const arrayBuffer = e.target?.result;
|
|
342
|
+
if (!arrayBuffer)
|
|
343
|
+
return;
|
|
344
|
+
const base64Content = this.arrayBufferToBase64(arrayBuffer);
|
|
345
|
+
const fichierToSend = new Fichier();
|
|
346
|
+
fichierToSend.dateFichier = new Date();
|
|
347
|
+
fichierToSend.nom = file.name;
|
|
348
|
+
fichierToSend.objet = '';
|
|
349
|
+
fichierToSend.nomFichierComplet = file.name;
|
|
350
|
+
fichierToSend.description = '';
|
|
351
|
+
fichierToSend.contenu = base64Content;
|
|
352
|
+
fichierToSend.tableLiee = this.businessClass;
|
|
353
|
+
fichierToSend.pkey = this.id;
|
|
354
|
+
fichierToSend.typeFichier = '437C08D5-C169-4167-8D37-F8AC6C905E23'; // TODO: Momo
|
|
355
|
+
this._fichierService.create(fichierToSend).subscribe({
|
|
356
|
+
next: () => {
|
|
357
|
+
this.notificationService.success(this.l("Fichier enregistré !"));
|
|
358
|
+
this.onSave.emit();
|
|
359
|
+
},
|
|
360
|
+
error: (err) => {
|
|
361
|
+
this.notificationService.error(this.l("Erreur lors de l’enregistrement !"));
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
};
|
|
365
|
+
reader.readAsArrayBuffer(file);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
showDialog() {
|
|
369
|
+
this._openModal();
|
|
370
|
+
}
|
|
371
|
+
async showExportImportDialog() {
|
|
372
|
+
this._dialogRef = await openManageImportExportModal(this._injector, this.businessClass, this.formName);
|
|
373
|
+
this._dialogRef.onClose.subscribe((val) => this._closeModal(val, true));
|
|
374
|
+
}
|
|
375
|
+
presentationDesignerConfig() {
|
|
376
|
+
if (this._layoutHelperService.isDesignMode)
|
|
377
|
+
return;
|
|
378
|
+
this._layoutHelperService.isDesignMode = true;
|
|
379
|
+
if (this.cudComponent == undefined) {
|
|
380
|
+
this.toggleDesignMode.emit(true);
|
|
381
|
+
this._layoutHelperService._designModeFormSubject.next(true);
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
this._layoutHelperService._designModeListSubject.next(true);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
//#region private methods
|
|
388
|
+
_viewReport(id, reportInformation) {
|
|
389
|
+
if (id != undefined && id != null) {
|
|
390
|
+
// case there is default report
|
|
391
|
+
if (this.formEndpoint != undefined && this.formEndpoint != null) {
|
|
392
|
+
if (!reportInformation) {
|
|
393
|
+
reportInformation = this.reports.find((x) => x.uid == id);
|
|
394
|
+
}
|
|
395
|
+
this.reportingService
|
|
396
|
+
.addReportToPrint(this._newReportToPrint(id, reportInformation?.reportType, reportInformation?.restEndpoint))
|
|
397
|
+
.subscribe({
|
|
398
|
+
next: (data) => {
|
|
399
|
+
// console.log("data",data);
|
|
400
|
+
if (data != null && data != undefined) {
|
|
401
|
+
this.reportToPrintId = data.uid;
|
|
402
|
+
let reportType = 1;
|
|
403
|
+
this.reportingService.getReportTemplateById(id).subscribe({
|
|
404
|
+
next: (data) => {
|
|
405
|
+
reportType = data.reportType;
|
|
406
|
+
let tenantUid = this.identityManagerService.parseMyAuthToken()?.tenantUid;
|
|
407
|
+
let urlViewer = `${Segment.reportingServiceBase}/report-viewer/${this.reportToPrintId}?${queryParamNamesConst.tenantUid}=${tenantUid}`;
|
|
408
|
+
if (reportType === TsiReportType.RTF) {
|
|
409
|
+
urlViewer = `${Segment.reportingServiceBase}/mailmerge-readonlymode/${this.reportToPrintId}?${queryParamNamesConst.tenantUid}=${tenantUid}`;
|
|
410
|
+
}
|
|
411
|
+
window.open(urlViewer, '_blank');
|
|
412
|
+
this.notificationService.success('shared_reporting_redirected_to_print_report_successfully');
|
|
413
|
+
},
|
|
414
|
+
error: (error) => {
|
|
415
|
+
this.notificationService.error(this.errorMessageKey);
|
|
416
|
+
},
|
|
417
|
+
complete: () => { },
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
error: (error) => {
|
|
422
|
+
this.notificationService.error(this.errorMessageKey);
|
|
423
|
+
},
|
|
424
|
+
complete: () => { },
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// no default report
|
|
429
|
+
else {
|
|
430
|
+
this.messageService.infoMessage('shared_reporting_no_default_report_found');
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
_newReportToPrint(uid, reportType, restEndpoint) {
|
|
434
|
+
let token = this.identityManagerService.getAuthToken();
|
|
435
|
+
let username = this.identityManagerService.parseMyAuthToken().name;
|
|
436
|
+
// alert("otherFormName "+this.formName+"otherFormEndpoint"+this.formEndpoint+ "this.formEndpointBody"+this.formEndpointBody+ "usernme"+username)
|
|
437
|
+
if (username) {
|
|
438
|
+
if (uid != null &&
|
|
439
|
+
uid != undefined &&
|
|
440
|
+
this.formEndpoint != null &&
|
|
441
|
+
this.formEndpoint != undefined &&
|
|
442
|
+
this.formName != null &&
|
|
443
|
+
this.formName != undefined &&
|
|
444
|
+
token != null &&
|
|
445
|
+
token != undefined) {
|
|
446
|
+
let newReportToPrint = {
|
|
447
|
+
reportTemplateUid: uid,
|
|
448
|
+
restEndpoint: this.isReportForFiche
|
|
449
|
+
? this.reportingService.insertNewUidInRestEndPoint(restEndpoint, this.id) ?? this.formEndpoint
|
|
450
|
+
: this.formEndpoint,
|
|
451
|
+
requestData: this.formEndpointBody,
|
|
452
|
+
formName: this.formName,
|
|
453
|
+
reportType: reportType,
|
|
454
|
+
username: username,
|
|
455
|
+
userToken: reportType == TsiReportType.Dashboard ? undefined : token,
|
|
456
|
+
isPaged: this.isFormEndpointPaged == true ? true : false,
|
|
457
|
+
htmlFiltersText: this.filtersHtmlTemplate,
|
|
458
|
+
optionalEndpointsJson: this.optionalEndpoints,
|
|
459
|
+
};
|
|
460
|
+
return newReportToPrint;
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
throw Error('some of the required properties : user token, formName, formEndpoint or selectedReport have not been set !');
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
throw Error("property 'UserName ' of current user have not been set !");
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
async _openModal() {
|
|
471
|
+
let conf;
|
|
472
|
+
conf = {
|
|
473
|
+
data: {
|
|
474
|
+
otherFormName: this.formName,
|
|
475
|
+
otherFormEndpoint: this.formEndpoint,
|
|
476
|
+
formEndpointBody: this.formEndpointBody,
|
|
477
|
+
isFormEndpointPaged: this.isFormEndpointPaged,
|
|
478
|
+
filtersHtmlTemplate: this.filtersHtmlTemplate,
|
|
479
|
+
optionalEndpoints: this.optionalEndpoints,
|
|
480
|
+
businessClass: this.businessClass,
|
|
481
|
+
reportDiscriminator: this.reportDiscriminator,
|
|
482
|
+
id: this.id,
|
|
483
|
+
requestData: this.requestData,
|
|
484
|
+
customReportingMode: this.customReportingMode,
|
|
485
|
+
httpMethodType: this.getHttpMethodType(),
|
|
486
|
+
},
|
|
487
|
+
styleClass: '',
|
|
488
|
+
width: this.modalSize.width,
|
|
489
|
+
height: this.modalSize.height,
|
|
490
|
+
maximizable: true,
|
|
491
|
+
};
|
|
492
|
+
this._dialogRef = await openManageReportingComponent(this._injector, conf);
|
|
493
|
+
this._dialogRef.onClose.subscribe((val) => this._closeModal(val));
|
|
494
|
+
}
|
|
495
|
+
getHttpMethodType() {
|
|
496
|
+
if (this.isReportForFiche && !this.customReportingMode) {
|
|
497
|
+
return HttpMethodType.GET;
|
|
498
|
+
}
|
|
499
|
+
else if (this.httpMethodType && this.customReportingMode) {
|
|
500
|
+
return this.httpMethodType;
|
|
501
|
+
}
|
|
502
|
+
return HttpMethodType.POST;
|
|
503
|
+
}
|
|
504
|
+
_closeModal(val, refreshData = false) {
|
|
505
|
+
this.refreshData.emit(refreshData);
|
|
506
|
+
this._dialogRef?.destroy();
|
|
507
|
+
}
|
|
508
|
+
//#endregion
|
|
509
|
+
onRightClick(event) {
|
|
510
|
+
event.preventDefault();
|
|
511
|
+
this._getAllReports(event.clientX, event.clientY);
|
|
512
|
+
}
|
|
513
|
+
hideContextMenu() {
|
|
514
|
+
this.showContextMenu = false;
|
|
515
|
+
this.contextMenuPosition = { x: 0, y: 0 };
|
|
516
|
+
// this.reports = [];
|
|
517
|
+
}
|
|
518
|
+
onSelectContextOption(item) {
|
|
519
|
+
this._viewReport(item.uid);
|
|
520
|
+
this.hideContextMenu();
|
|
521
|
+
}
|
|
522
|
+
async getReports() {
|
|
523
|
+
try {
|
|
524
|
+
this.reports = await firstValueFrom(this.reportingService.getReports(this.formName ?? '', this.reportDiscriminator));
|
|
525
|
+
}
|
|
526
|
+
catch (error) {
|
|
527
|
+
console.error(error);
|
|
528
|
+
this.hideContextMenu();
|
|
529
|
+
this.notificationService.error(this.errorMessageKey);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
async _getAllReports(clickX, clickY) {
|
|
533
|
+
await this.getReports();
|
|
534
|
+
if (this.reports.length > 0) {
|
|
535
|
+
const rect = this.wrapperRef.nativeElement.getBoundingClientRect();
|
|
536
|
+
this.contextMenuPosition = {
|
|
537
|
+
x: clickX - rect.left,
|
|
538
|
+
y: clickY - rect.top,
|
|
539
|
+
};
|
|
540
|
+
this.showContextMenu = true;
|
|
541
|
+
}
|
|
542
|
+
else {
|
|
543
|
+
this.showContextMenu = false;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
async viewNotes() {
|
|
547
|
+
const ref = await openNotesList(this._injector);
|
|
548
|
+
ref.onClose.subscribe((val) => this._closeModal(val));
|
|
549
|
+
}
|
|
550
|
+
viewInfo(event) {
|
|
551
|
+
if (this.id != undefined && this.id != null) {
|
|
552
|
+
this.recordInfoPopupService
|
|
553
|
+
.getInfo(this.businessClass, this.id)
|
|
554
|
+
.subscribe(async (data) => {
|
|
555
|
+
let modalSize = ModalSizeEnum.ExtraLarge;
|
|
556
|
+
let text = 'UID : ' +
|
|
557
|
+
this.id +
|
|
558
|
+
'<BR>Created by : ' +
|
|
559
|
+
data.creationUser +
|
|
560
|
+
'<BR>Modified by : ' +
|
|
561
|
+
data.modifUser +
|
|
562
|
+
'<BR>Created on : ' +
|
|
563
|
+
data.dateSaisie +
|
|
564
|
+
'<BR>Modified on : ' +
|
|
565
|
+
data.dateModif;
|
|
566
|
+
let conf = {
|
|
567
|
+
data: {
|
|
568
|
+
Uid: this.id,
|
|
569
|
+
creationUser: data.creationUser,
|
|
570
|
+
modifUser: data.modifUser,
|
|
571
|
+
dateSaisie: data.dateSaisie,
|
|
572
|
+
dateModif: data.dateModif,
|
|
573
|
+
},
|
|
574
|
+
maximizable: true,
|
|
575
|
+
width: '90rem',
|
|
576
|
+
height: '80rem',
|
|
577
|
+
};
|
|
578
|
+
this._dialogRef = await openTsiPopupTextViewerComponent(this._injector, conf);
|
|
579
|
+
this._dialogRef.onClose.subscribe((val) => this._closeModal(val));
|
|
580
|
+
}, (error) => {
|
|
581
|
+
console.log(error);
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
arrayBufferToBase64(buffer) {
|
|
586
|
+
let binary = '';
|
|
587
|
+
const bytes = new Uint8Array(buffer);
|
|
588
|
+
const len = bytes.byteLength;
|
|
589
|
+
for (let i = 0; i < len; i++) {
|
|
590
|
+
binary += String.fromCharCode(bytes[i]);
|
|
591
|
+
}
|
|
592
|
+
return btoa(binary);
|
|
593
|
+
}
|
|
594
|
+
hide(val) {
|
|
595
|
+
if (this._dialogRef != null && this._dialogRef != undefined) {
|
|
596
|
+
if (val == false) {
|
|
597
|
+
this._dialogRef.destroy();
|
|
598
|
+
}
|
|
599
|
+
else {
|
|
600
|
+
this._dialogRef.close(val);
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
l(key) {
|
|
605
|
+
if (this.localize != null
|
|
606
|
+
&& this.localize != undefined) {
|
|
607
|
+
return this.localize.transform(key);
|
|
608
|
+
}
|
|
609
|
+
return key;
|
|
610
|
+
}
|
|
611
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReportingComponent, deps: [{ token: i1.ReportingService }, { token: i2.IdentityManagerService }, { token: i3.TsiNotificationService }, { token: i4.TsiMessageService }, { token: i5.RecordInfoPopupService }, { token: i6.LayoutHelperService }, { token: i7.FichierService }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
612
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReportingComponent, selector: "app-reporting", inputs: { showImportExportButton: "showImportExportButton", showNoteButton: "showNoteButton", showInfoButton: "showInfoButton", showUploadButton: "showUploadButton", isReportingToolbarDisabled: "isReportingToolbarDisabled", formName: "formName", formEndpoint: "formEndpoint", formEndpointBody: "formEndpointBody", isFormEndpointPaged: "isFormEndpointPaged", filtersHtmlTemplate: "filtersHtmlTemplate", optionalEndpoints: "optionalEndpoints", businessClass: "businessClass", cudComponent: "cudComponent", httpMethodType: "httpMethodType", requestData: "requestData", customReportingMode: "customReportingMode", reportDiscriminator: "reportDiscriminator", id: "id", configModeButtonId: "configModeButtonId", selectedItemUids: "selectedItemUids" }, outputs: { onSave: "onSave", refreshData: "refreshData", toggleDesignMode: "toggleDesignMode" }, viewQueries: [{ propertyName: "wrapperRef", first: true, predicate: ["wrapper"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex gap-2 mx-2\">\r\n <div\r\n *ngIf=\"formEndpoint || businessClass\"\r\n presentationDesignerBase=\"manage_reports_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n [iconSrc]=\"'./assets/icons/icon-printer-group-white.png'\"\r\n [iconWidth]=\"20\"\r\n [tooltipText]=\"'shared_reporting_manage_reports'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"formEndpoint || businessClass\"\r\n presentationDesignerBase=\"print_default_report_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n #wrapper\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-print p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_rightClick'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onPrintDefault($event)\"\r\n (rightClick)=\"onRightClick($event)\"\r\n >\r\n </Tsi-Button>\r\n <!-- `shared_reporting_print_report` key for `Imprimer` text (replace it as value or tooltip if need it) -->\r\n\r\n <div\r\n *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\"\r\n >\r\n <div\r\n *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\"\r\n >\r\n {{ report.name }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showUploadButton\"\r\n presentationDesignerBase=\"attachment_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-paperclip p-button-icon\"\r\n [tooltipText]=\"'shared_actions_attachment'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showUploadDialog()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n </Tsi-Button>\r\n<!-- <span *ngIf=\"nombreDocumentsJoints > 0\" class=\"custom-badge\">\r\n {{ nombreDocumentsJoints }}\r\n </span> -->\r\n </div>\r\n\r\n <div\r\n *ngIf=\"formEndpoint || businessClass\"\r\n presentationDesignerBase=\"send_report_by_email_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-send p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_send_mail'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onSendPdf($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n <div\r\n *ngIf=\"businessClass && showImportExportButton\"\r\n presentationDesignerBase=\"import_export_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-arrow-right-arrow-left p-button-icon\"\r\n [tooltipText]=\"'shared_reporting_manage_export_import'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showExportImportDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showNoteButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_notes_button\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-comment p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_notes'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewNotes()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n <div\r\n *ngIf=\"showInfoButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_info_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-info-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-info p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_actions_info'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewInfo($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showPresentationDesignerConfigButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-eye p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_config_show_hide'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"presentationDesignerConfig()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <div *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\">\r\n <div *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\">\r\n {{report.name}}\r\n </div>\r\n</div> -->\r\n", styles: [".p-fileupload-content{display:none!important}.btn-wrapper{position:relative;display:inline-block}.context-menu{position:absolute;background:#fff;border:.125rem solid #ccc;border-radius:1rem;z-index:1000;box-shadow:0 .25rem .75rem #0003;min-width:15rem;max-height:25rem;padding:.5rem 0;overflow-y:auto}.menu-item{padding:.5rem;cursor:pointer;text-transform:capitalize}.menu-item:hover{background-color:#f0f0f0}::ng-deep .header-title{flex-shrink:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 .5rem}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i9.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "directive", type: i10.PresentationDesignerDirectiveBase, selector: "[presentationDesignerBase]", inputs: ["presentationDesigner", "presentationDesignerBase"] }] }); }
|
|
613
|
+
}
|
|
614
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReportingComponent, decorators: [{
|
|
615
|
+
type: Component,
|
|
616
|
+
args: [{ selector: 'app-reporting', template: "<div class=\"flex gap-2 mx-2\">\r\n <div\r\n *ngIf=\"formEndpoint || businessClass\"\r\n presentationDesignerBase=\"manage_reports_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n [iconSrc]=\"'./assets/icons/icon-printer-group-white.png'\"\r\n [iconWidth]=\"20\"\r\n [tooltipText]=\"'shared_reporting_manage_reports'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"formEndpoint || businessClass\"\r\n presentationDesignerBase=\"print_default_report_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n #wrapper\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-print p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_rightClick'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onPrintDefault($event)\"\r\n (rightClick)=\"onRightClick($event)\"\r\n >\r\n </Tsi-Button>\r\n <!-- `shared_reporting_print_report` key for `Imprimer` text (replace it as value or tooltip if need it) -->\r\n\r\n <div\r\n *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\"\r\n >\r\n <div\r\n *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\"\r\n >\r\n {{ report.name }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showUploadButton\"\r\n presentationDesignerBase=\"attachment_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-paperclip p-button-icon\"\r\n [tooltipText]=\"'shared_actions_attachment'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showUploadDialog()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n </Tsi-Button>\r\n<!-- <span *ngIf=\"nombreDocumentsJoints > 0\" class=\"custom-badge\">\r\n {{ nombreDocumentsJoints }}\r\n </span> -->\r\n </div>\r\n\r\n <div\r\n *ngIf=\"formEndpoint || businessClass\"\r\n presentationDesignerBase=\"send_report_by_email_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-send p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_send_mail'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onSendPdf($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n <div\r\n *ngIf=\"businessClass && showImportExportButton\"\r\n presentationDesignerBase=\"import_export_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-arrow-right-arrow-left p-button-icon\"\r\n [tooltipText]=\"'shared_reporting_manage_export_import'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showExportImportDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showNoteButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_notes_button\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-comment p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_notes'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewNotes()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n <div\r\n *ngIf=\"showInfoButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_info_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-info-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-info p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_actions_info'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewInfo($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showPresentationDesignerConfigButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-eye p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_config_show_hide'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"presentationDesignerConfig()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <div *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\">\r\n <div *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\">\r\n {{report.name}}\r\n </div>\r\n</div> -->\r\n", styles: [".p-fileupload-content{display:none!important}.btn-wrapper{position:relative;display:inline-block}.context-menu{position:absolute;background:#fff;border:.125rem solid #ccc;border-radius:1rem;z-index:1000;box-shadow:0 .25rem .75rem #0003;min-width:15rem;max-height:25rem;padding:.5rem 0;overflow-y:auto}.menu-item{padding:.5rem;cursor:pointer;text-transform:capitalize}.menu-item:hover{background-color:#f0f0f0}::ng-deep .header-title{flex-shrink:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 .5rem}\n"] }]
|
|
617
|
+
}], ctorParameters: () => [{ type: i1.ReportingService }, { type: i2.IdentityManagerService }, { type: i3.TsiNotificationService }, { type: i4.TsiMessageService }, { type: i5.RecordInfoPopupService }, { type: i6.LayoutHelperService }, { type: i7.FichierService }, { type: i0.EnvironmentInjector }], propDecorators: { showImportExportButton: [{
|
|
618
|
+
type: Input
|
|
619
|
+
}], showNoteButton: [{
|
|
620
|
+
type: Input
|
|
621
|
+
}], showInfoButton: [{
|
|
622
|
+
type: Input
|
|
623
|
+
}], showUploadButton: [{
|
|
624
|
+
type: Input
|
|
625
|
+
}], isReportingToolbarDisabled: [{
|
|
626
|
+
type: Input
|
|
627
|
+
}], onSave: [{
|
|
628
|
+
type: Output
|
|
629
|
+
}], formName: [{
|
|
630
|
+
type: Input
|
|
631
|
+
}], formEndpoint: [{
|
|
632
|
+
type: Input
|
|
633
|
+
}], formEndpointBody: [{
|
|
634
|
+
type: Input
|
|
635
|
+
}], isFormEndpointPaged: [{
|
|
636
|
+
type: Input
|
|
637
|
+
}], filtersHtmlTemplate: [{
|
|
638
|
+
type: Input
|
|
639
|
+
}], optionalEndpoints: [{
|
|
640
|
+
type: Input
|
|
641
|
+
}], businessClass: [{
|
|
642
|
+
type: Input
|
|
643
|
+
}], cudComponent: [{
|
|
644
|
+
type: Input
|
|
645
|
+
}], httpMethodType: [{
|
|
646
|
+
type: Input
|
|
647
|
+
}], requestData: [{
|
|
648
|
+
type: Input
|
|
649
|
+
}], customReportingMode: [{
|
|
650
|
+
type: Input
|
|
651
|
+
}], reportDiscriminator: [{
|
|
652
|
+
type: Input
|
|
653
|
+
}], id: [{
|
|
654
|
+
type: Input
|
|
655
|
+
}], configModeButtonId: [{
|
|
656
|
+
type: Input
|
|
657
|
+
}], selectedItemUids: [{
|
|
658
|
+
type: Input
|
|
659
|
+
}], refreshData: [{
|
|
660
|
+
type: Output
|
|
661
|
+
}], toggleDesignMode: [{
|
|
662
|
+
type: Output
|
|
663
|
+
}], wrapperRef: [{
|
|
664
|
+
type: ViewChild,
|
|
665
|
+
args: ['wrapper', { read: ElementRef }]
|
|
666
|
+
}] } });
|
|
667
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQXVCLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0UsT0FBTyxFQUE2QyxPQUFPLEVBQWlCLE1BQU0sY0FBYyxDQUFDO0FBRWpHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU96RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLCtCQUErQixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7Ozs7OztBQU9yTCxNQUFNLE9BQU8sa0JBQWtCO0lBa0I3QixJQUNJLDBC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SUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzsrR0E3dUJVLGtCQUFrQjttR0FBbEIsa0JBQWtCLGs5QkFpRkMsVUFBVSw2QkN6RzFDLDR0TUFtTEE7OzRGRDNKYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZUFBZTtxVUFjaEIsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBTUYsMEJBQTBCO3NCQUQ3QixLQUFLO2dCQVNJLE1BQU07c0JBQWYsTUFBTTtnQkFFRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFhRixFQUFFO3NCQURMLEtBQUs7Z0JBU0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUlLLGdCQUFnQjtzQkFEMUIsS0FBSztnQkFZSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFLUCxVQUFVO3NCQURULFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFbnZpcm9ubWVudEluamVjdG9yLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy90b29sdGlwUG9zaXRpb24uZW51bSc7XHJcbmltcG9ydCB7IFNlZ21lbnQgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzJztcclxuaW1wb3J0IHsgTW9kYWxTaXplRW51bSwgSHR0cE1ldGhvZFR5cGUsIFRzaVJlcG9ydFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IElNb2RhbFNpemUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgT3B0aW9uYWxFbmRwb2ludHMsIFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UsIEZpY2hpZXIsIFJlcG9ydFRvUHJpbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWNoaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpY2hpZXIvZmljaGllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgcXVlcnlQYXJhbU5hbWVzQ29uc3QgfSBmcm9tICcuLi8uLi9jb25zdHMvcXVlcnlQYXJhbU5hbWVzLmNvbnN0JztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZSc7XHJcbmltcG9ydCB7IExheW91dEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQvbGF5b3V0LWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVjb3JkSW5mb1BvcHVwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlY29yZC1pbmZvLXBvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJZGVudGl0eU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aG9yaXphdGlvbi9pZGVudGl0eS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXBvcnRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0aW5nL3JlcG9ydGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgb3Blbk1hbmFnZUltcG9ydEV4cG9ydE1vZGFsLCBvcGVuTWFuYWdlUmVwb3J0aW5nQ29tcG9uZW50LCBvcGVuTW9kYWxVcGxvYWRHcmlkLCBvcGVuTm90ZXNMaXN0LCBvcGVuVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL21vZGFsLW9wZW4uZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcmVwb3J0aW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXBvcnRpbmcuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcG9ydGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG4gIHJlcG9ydFRvUHJpbnRJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIHRvU2VuZEVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIGxvY2FsaXplPyA9IGluamVjdChMb2NhbGl6ZVBpcGUpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvck1lc3NhZ2VLZXk6IHN0cmluZyA9ICdzaGFyZWRfcmVwb3J0aW5nX2Vycm9yX29jY3VyZWQnO1xyXG4gIG1vZGFsU2l6ZTogSU1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uTGFyZ2U7XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBwcml2YXRlIF9yZXBvcnREaXNjcmltaW5hdG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gcGFyYW1ldHJlOiBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllID0gbmV3IFBhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWUoKTtcclxuICBASW5wdXQoKSBzaG93SW1wb3J0RXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Tm90ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0luZm9CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dVcGxvYWRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBzaG93UHJlc2VudGF0aW9uRGVzaWduZXJDb25maWdCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgX2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IGlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCA9IHZhbHVlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLy8jcmVnaW9uIElucHV0IHByb3BlcnRpZXNcclxuICBASW5wdXQoKSBmb3JtTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyAvL2Zvcm1JZGVudGlmaWVyXHJcbiAgQElucHV0KCkgZm9ybUVuZHBvaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vPSBgJHtHZXN0aW9uQ29tbWVyY2lhbGVTZWdtZW50cy5mYWN0dXJlVmVudGV9LzE2NWVjNWZkLTRkMzQtNDU0Ni1hZTE1LTAwNDRlNzA4YjlkOWA7XHJcbiAgQElucHV0KCkgZm9ybUVuZHBvaW50Qm9keTogc3RyaW5nIHwgdW5kZWZpbmVkOyAvL2Zvcm1JZGVudGlmaWVyXHJcbiAgQElucHV0KCkgaXNGb3JtRW5kcG9pbnRQYWdlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZpbHRlcnNIdG1sVGVtcGxhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBvcHRpb25hbEVuZHBvaW50cz86IE9wdGlvbmFsRW5kcG9pbnRzO1xyXG4gIEBJbnB1dCgpIGJ1c2luZXNzQ2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY3VkQ29tcG9uZW50OiBhbnk7XHJcbiAgQElucHV0KCkgaHR0cE1ldGhvZFR5cGU/OiBIdHRwTWV0aG9kVHlwZSA9IEh0dHBNZXRob2RUeXBlLlBPU1Q7XHJcbiAgQElucHV0KCkgcmVxdWVzdERhdGE/OiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tUmVwb3J0aW5nTW9kZT86IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBnZXQgcmVwb3J0RGlzY3JpbWluYXRvcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydERpc2NyaW1pbmF0b3I7XHJcbiAgfVxyXG5cclxuICBzZXQgcmVwb3J0RGlzY3JpbWluYXRvcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9yZXBvcnREaXNjcmltaW5hdG9yID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8qICAgbm9tYnJlRG9jdW1lbnRzSm9pbnRzOiBudW1iZXIgPSA1O1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2lkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ01vZGVCdXR0b25JZDogc3RyaW5nID0gJ3Nob3ctaGlkZS1jb25maWctYnV0dG9uJztcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtVWlkczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBzZWxlY3RlZEl0ZW1VaWRzKGxpc3RVaWRzOiBBcnJheTxhbnk+W10pIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkSXRlbVVpZHMgPSBsaXN0VWlkcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtVWlkcygpOiBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1VaWRzO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXQgcHJvcGVydGllc1xyXG4gIEBPdXRwdXQoKSByZWZyZXNoRGF0YTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSB0b2dnbGVEZXNpZ25Nb2RlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBAVmlld0NoaWxkKCd3cmFwcGVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXHJcbiAgd3JhcHBlclJlZiE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICByZXBvcnRzOiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlW10gPSBbXTtcclxuICBzaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICBjb250ZXh0TWVudVBvc2l0aW9uID0geyB4OiAwLCB5OiAwIH07XHJcblxyXG4gIHRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5Ub3A7XHJcblxyXG4gIGdldCBpc1JlcG9ydEZvckZpY2hlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmZvcm1FbmRwb2ludD8uaW5jbHVkZXMoJ2dldGFsbHBhZ2VkJyk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZXBvcnRpbmdTZXJ2aWNlOiBSZXBvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpZGVudGl0eU1hbmFnZXJTZXJ2aWNlOiBJZGVudGl0eU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogVHNpTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY29yZEluZm9Qb3B1cFNlcnZpY2U6IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlOiBMYXlvdXRIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIF9maWNoaWVyU2VydmljZTogRmljaGllclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvclxyXG4gICkgeyB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvL2hhbmRsZSBMaWZlY3ljbGUgSG9va3NcclxuICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHsgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGV2ZW50c1xyXG4gIG9uUHJpbnREZWZhdWx0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC5nZXREZWZhdWx0UmVwb3J0KHRoaXMuZm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhOiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLl92aWV3UmVwb3J0KGRhdGE/LnVpZCwgZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBIdHRwU3RhdHVzQ29kZS5Ob3RGb3VuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FeHBvcnRQZGYoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldERlZmF1bHRSZXBvcnQodGhpcy5mb3JtTmFtZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5fZXhwb3J0UGRmKGRhdGEudWlkLCBkYXRhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZvcm1OYW1lKGZvcm1OYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgIHJldHVybiBgJHtmb3JtTmFtZX1fJHt0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3J9YDtcclxuICAgIGVsc2UgcmV0dXJuIGZvcm1OYW1lO1xyXG4gIH1cclxuXHJcbiAgb25TZW5kUGRmKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIGlmICh0aGlzLmZvcm1OYW1lID09ICdhcHAtY3JlYXRlLW9yLWVkaXQtZ2VzYy1kb2N1bWVudHMnKSB7XHJcbiAgICAvLyAgIHRoaXMuX2RvY3VtZW50U2VydmljZS5nZXRCeUlkKHRoaXMuaWQhKS5zdWJzY3JpYmUoe1xyXG4gICAgLy8gICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgIHRoaXMuX3RpZXJTZXJ2aWNlLmdldEJ5SWQoZGF0YS50aWVyKS5zdWJzY3JpYmUoe1xyXG4gICAgLy8gICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgdGhpcy50b1NlbmRFbWFpbCA9IGRhdGEuZW1haWw7XHJcbiAgICAvLyAgICAgICAgIH0sXHJcbiAgICAvLyAgICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBIdHRwU3RhdHVzQ29kZS5Ob3RGb3VuZCkge1xyXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvTWVzc2FnZSgnc2VsZWN0ZWRfdGllcl9ub3RfZm91bmQnKTtcclxuICAgIC8vICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIH0sXHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICB9LFxyXG4gICAgLy8gICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAvLyAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kKSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoJ3NlbGVjdGVkX2RvY3VtZW50X25vdF9mb3VuZCcpO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH0sXHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgIC8vICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAvLyAgICAgLmdldERlZmF1bHRSZXBvcnQodGhpcy5mb3JtTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgLy8gICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgLy8gICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAvLyAgICAgICAgIC8vIGxldCBkZWZhdWx0UmVwb3J0SWQ6IHN0cmluZyA9IGRhdGE7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuX3NlbmRQZGYoZGF0YS51aWQsIGRhdGEpO1xyXG4gICAgLy8gICAgICAgfSxcclxuICAgIC8vICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gSHR0cFN0YXR1c0NvZGUuTm90Rm91bmQpIHtcclxuICAgIC8vICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgLy8gICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAvLyAgICAgICAgICAgKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfSxcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbmRQZGYoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0SW5mb3JtYXRpb24/OiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICAvLyBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGlkICE9IG51bGwpIHtcclxuICAgIC8vICAgLy9nZXQgZW1haWwgcGFyYW1ldGVyc1xyXG4gICAgLy8gICB0aGlzLl9wYXJhbWV0cmVzQXBwbGljYXRpb25QYWllU2VydmljZVxyXG4gICAgLy8gICAgIC5nZXRQYXJhbWV0cmVBcHBsaWNhdGlvblBhaWUoKVxyXG4gICAgLy8gICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgIHRoaXMucGFyYW1ldHJlID0gZGF0YTtcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vICAgLy8gY2FzZSB0aGVyZSBpcyBkZWZhdWx0IHJlcG9ydFxyXG4gICAgLy8gICBpZiAodGhpcy5mb3JtRW5kcG9pbnQgIT0gdW5kZWZpbmVkICYmIHRoaXMuZm9ybUVuZHBvaW50ICE9IG51bGwpIHtcclxuICAgIC8vICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uKSB7XHJcbiAgICAvLyAgICAgICByZXBvcnRJbmZvcm1hdGlvbiA9IHRoaXMucmVwb3J0cy5maW5kKCh4KSA9PiB4LnVpZCA9PSBpZCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgLy8gICAgICAgLmFkZFJlcG9ydFRvUHJpbnQoXHJcbiAgICAvLyAgICAgICAgIHRoaXMuX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICAvLyAgICAgICAgICAgaWQsXHJcbiAgICAvLyAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24/LnJlcG9ydFR5cGUsXHJcbiAgICAvLyAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24/LnJlc3RFbmRwb2ludFxyXG4gICAgLy8gICAgICAgICApXHJcbiAgICAvLyAgICAgICApXHJcbiAgICAvLyAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgIC8vICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMucmVwb3J0VG9QcmludElkID0gZGF0YS51aWQ7XHJcbiAgICAvLyAgICAgICAgICAgICBsZXQgc2F2ZVN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAvLyAgICAgICAgICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlO1xyXG4gICAgLy8gICAgICAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGRhdGE6IHsgc2F2ZVN1YmplY3QsIGVtYWlsOiB0aGlzLnRvU2VuZEVtYWlsIH0sXHJcbiAgICAvLyAgICAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgLy8gICAgICAgICAgICAgICB3aWR0aDogbW9kYWxTaXplLndpZHRoLFxyXG4gICAgLy8gICAgICAgICAgICAgICBoZWlnaHQ6IG1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICAvLyAgICAgICAgICAgICB9O1xyXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKFxyXG4gICAgLy8gICAgICAgICAgICAgICBUc2lTZW5kTWFpbENvbXBvbmVudCxcclxuICAgIC8vICAgICAgICAgICAgICAgY29uZlxyXG4gICAgLy8gICAgICAgICAgICAgKTtcclxuICAgIC8vICAgICAgICAgICAgIHNhdmVTdWJqZWN0LnN1YnNjcmliZSgodmFsOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgLmV4cG9ydFJlcG9ydEZpbGVUb1BkZih0aGlzLnJlcG9ydFRvUHJpbnRJZCEudG9TdHJpbmcoKSlcclxuICAgIC8vICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgKGJsb2IpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBhcmFtZXRyZS5hdHRhY2htZW50cykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJlLmF0dGFjaG1lbnRzID0gW107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgJ1JlcG9ydC5wZGYnLCB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYmxvYi50eXBlLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJlLmF0dGFjaG1lbnRzLnB1c2gobmV3RmlsZSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWVTZXJ2aWNlXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLnNlbmRNYWlsKFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0cmUuZnJvbUFkZHJlc3MsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFsb2dEYXRhU2VydmljZS5nZXREYXRhKCk/LnRvQWRkcmVzcyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWxvZ0RhdGFTZXJ2aWNlLmdldERhdGEoKT8ub2JqZXQsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFsb2dEYXRhU2VydmljZS5nZXREYXRhKCk/Lm1lc3NhZ2UsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmFtZXRyZS5hdHRhY2htZW50cyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJlLmhvc3QsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmFtZXRyZS5jcmVkZW50aWFsVXNlcixcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJlLmNyZWRlbnRpYWxQV0QsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmFtZXRyZS5wb3J0LFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0cmUuZnJvbU5hbWUsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFsb2dEYXRhU2VydmljZS5nZXREYXRhKCk/LmNjQWRkcmVzc1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8oXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24udHJhbnNmb3JtKFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkb3dubG9hZGluZyB0aGUgUERGJywgZXJyb3IpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgIC8vICAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAvLyAgICAgICAgICAgICAgICk7XHJcbiAgICAvLyAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKTtcclxuICAgIC8vICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfSxcclxuXHJcbiAgICAvLyAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgIC8vICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgLy8gICAgICAgICB9LFxyXG5cclxuICAgIC8vICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgLy8gICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgLy8gICApO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXhwb3J0UGRmKFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydEluZm9ybWF0aW9uPzogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKGlkICE9IHVuZGVmaW5lZCAmJiBpZCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1FbmRwb2ludCAhPSB1bmRlZmluZWQgJiYgdGhpcy5mb3JtRW5kcG9pbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24pIHtcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uID0gdGhpcy5yZXBvcnRzLmZpbmQoKHgpID0+IHgudWlkID09IGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAuYWRkUmVwb3J0VG9QcmludChcclxuICAgICAgICAgICAgdGhpcy5fbmV3UmVwb3J0VG9QcmludChcclxuICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbj8ucmVwb3J0VHlwZSxcclxuICAgICAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbj8ucmVzdEVuZHBvaW50XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCAmJiBkYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRUb1ByaW50SWQgPSBkYXRhLnVpZDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgLmV4cG9ydFJlcG9ydEZpbGVUb1BkZih0aGlzLnJlcG9ydFRvUHJpbnRJZCEudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICAoYmxvYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYS5ocmVmID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9ICdSZXBvcnQucGRmJztcclxuICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIHRoZSBQREYnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiBhc3luYyBzaG93VXBsb2FkRGlhbG9nKCkge1xyXG5cclxuICAgIGNvbnN0IGNvbmYgPSB7XHJcbiAgICAgIGRhdGE6IHt9LFxyXG4gICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgd2lkdGg6IHRoaXMubW9kYWxTaXplIS53aWR0aCxcclxuICAgICAgaGVpZ2h0OiB0aGlzLm1vZGFsU2l6ZSEuaGVpZ2h0LFxyXG4gICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuTW9kYWxVcGxvYWRHcmlkKHRoaXMuX2luamVjdG9yLGNvbmYpXHJcblxyXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcclxuICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogUHJvZ3Jlc3NFdmVudDxGaWxlUmVhZGVyPikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gZS50YXJnZXQ/LnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoYXJyYXlCdWZmZXIpO1xyXG5cclxuICAgICAgICBjb25zdCBmaWNoaWVyVG9TZW5kID0gbmV3IEZpY2hpZXIoKTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLmRhdGVGaWNoaWVyID0gbmV3IERhdGUoKTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLm5vbSA9IGZpbGUubmFtZTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLm9iamV0ID0gJyc7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5ub21GaWNoaWVyQ29tcGxldCA9IGZpbGUubmFtZTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLmRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5jb250ZW51ID0gYmFzZTY0Q29udGVudDtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLnRhYmxlTGllZSA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLnBrZXkgPSB0aGlzLmlkO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQudHlwZUZpY2hpZXIgPSAnNDM3QzA4RDUtQzE2OS00MTY3LThEMzctRjhBQzZDOTA1RTIzJzsgLy8gVE9ETzogTW9tb1xyXG5cclxuICAgICAgICB0aGlzLl9maWNoaWVyU2VydmljZS5jcmVhdGUoZmljaGllclRvU2VuZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKFwiRmljaGllciBlbnJlZ2lzdHLDqSAhXCIpKTtcclxuICAgICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmwoXCJFcnJldXIgbG9ycyBkZSBs4oCZZW5yZWdpc3RyZW1lbnQgIVwiKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93RGlhbG9nKCkge1xyXG4gICAgdGhpcy5fb3Blbk1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzaG93RXhwb3J0SW1wb3J0RGlhbG9nKCkge1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gYXdhaXQgb3Blbk1hbmFnZUltcG9ydEV4cG9ydE1vZGFsKHRoaXMuX2luamVjdG9yLHRoaXMuYnVzaW5lc3NDbGFzcywgdGhpcy5mb3JtTmFtZSlcclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PlxyXG4gICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCwgdHJ1ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZygpIHtcclxuICAgIGlmICh0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5jdWRDb21wb25lbnQgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlRGVzaWduTW9kZS5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlRm9ybVN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVMaXN0U3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgX3ZpZXdSZXBvcnQoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0SW5mb3JtYXRpb24/OiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGlkICE9IG51bGwpIHtcclxuICAgICAgLy8gY2FzZSB0aGVyZSBpcyBkZWZhdWx0IHJlcG9ydFxyXG4gICAgICBpZiAodGhpcy5mb3JtRW5kcG9pbnQgIT0gdW5kZWZpbmVkICYmIHRoaXMuZm9ybUVuZHBvaW50ICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uKSB7XHJcbiAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiA9IHRoaXMucmVwb3J0cy5maW5kKCh4KSA9PiB4LnVpZCA9PSBpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgLmFkZFJlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICAgIHRoaXMuX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24/LnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24/LnJlc3RFbmRwb2ludFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZGF0YVwiLGRhdGEpO1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0VG9QcmludElkID0gZGF0YS51aWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHJlcG9ydFR5cGU6IG51bWJlciA9IDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0VGVtcGxhdGVCeUlkKGlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0VHlwZSA9IGRhdGEucmVwb3J0VHlwZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGVuYW50VWlkID1cclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybFZpZXdlcjogc3RyaW5nID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LXZpZXdlci8ke3RoaXMucmVwb3J0VG9QcmludElkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuUlRGKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB1cmxWaWV3ZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9tYWlsbWVyZ2UtcmVhZG9ubHltb2RlLyR7dGhpcy5yZXBvcnRUb1ByaW50SWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsVmlld2VyLCAnX2JsYW5rJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIG5vIGRlZmF1bHQgcmVwb3J0XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvTWVzc2FnZShcclxuICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICB1aWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydFR5cGU/OiBUc2lSZXBvcnRUeXBlLFxyXG4gICAgcmVzdEVuZHBvaW50Pzogc3RyaW5nXHJcbiAgKTogUmVwb3J0VG9QcmludCB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UuZ2V0QXV0aFRva2VuKCk7XHJcblxyXG4gICAgbGV0IHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxyXG4gICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpLm5hbWU7XHJcblxyXG4gICAgLy8gYWxlcnQoXCJvdGhlckZvcm1OYW1lIFwiK3RoaXMuZm9ybU5hbWUrXCJvdGhlckZvcm1FbmRwb2ludFwiK3RoaXMuZm9ybUVuZHBvaW50KyBcInRoaXMuZm9ybUVuZHBvaW50Qm9keVwiK3RoaXMuZm9ybUVuZHBvaW50Qm9keSsgXCJ1c2Vybm1lXCIrdXNlcm5hbWUpXHJcblxyXG4gICAgaWYgKHVzZXJuYW1lKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB1aWQgIT0gbnVsbCAmJlxyXG4gICAgICAgIHVpZCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICB0aGlzLmZvcm1FbmRwb2ludCAhPSBudWxsICYmXHJcbiAgICAgICAgdGhpcy5mb3JtRW5kcG9pbnQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgdGhpcy5mb3JtTmFtZSAhPSBudWxsICYmXHJcbiAgICAgICAgdGhpcy5mb3JtTmFtZSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICB0b2tlbiAhPSBudWxsICYmXHJcbiAgICAgICAgdG9rZW4gIT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBuZXdSZXBvcnRUb1ByaW50OiBSZXBvcnRUb1ByaW50ID0ge1xyXG4gICAgICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHVpZCxcclxuICAgICAgICAgIHJlc3RFbmRwb2ludDogdGhpcy5pc1JlcG9ydEZvckZpY2hlXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmluc2VydE5ld1VpZEluUmVzdEVuZFBvaW50KFxyXG4gICAgICAgICAgICAgIHJlc3RFbmRwb2ludCxcclxuICAgICAgICAgICAgICB0aGlzLmlkXHJcbiAgICAgICAgICAgICkgPz8gdGhpcy5mb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgOiB0aGlzLmZvcm1FbmRwb2ludCxcclxuICAgICAgICAgIHJlcXVlc3REYXRhOiB0aGlzLmZvcm1FbmRwb2ludEJvZHksXHJcbiAgICAgICAgICBmb3JtTmFtZTogdGhpcy5mb3JtTmFtZSxcclxuICAgICAgICAgIHJlcG9ydFR5cGU6IHJlcG9ydFR5cGUsXHJcbiAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXHJcbiAgICAgICAgICB1c2VyVG9rZW46IHJlcG9ydFR5cGUgPT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQgPyB1bmRlZmluZWQgOiB0b2tlbixcclxuICAgICAgICAgIGlzUGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ld1JlcG9ydFRvUHJpbnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAnc29tZSBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyA6IHVzZXIgdG9rZW4sIGZvcm1OYW1lLCBmb3JtRW5kcG9pbnQgb3Igc2VsZWN0ZWRSZXBvcnQgaGF2ZSBub3QgYmVlbiBzZXQgISdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihcInByb3BlcnR5ICdVc2VyTmFtZSAnIG9mIGN1cnJlbnQgdXNlciBoYXZlIG5vdCBiZWVuIHNldCAhXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfb3Blbk1vZGFsKCkge1xyXG4gICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWc7XHJcbiAgICBjb25mID0ge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgb3RoZXJGb3JtTmFtZTogdGhpcy5mb3JtTmFtZSxcclxuICAgICAgICBvdGhlckZvcm1FbmRwb2ludDogdGhpcy5mb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgZm9ybUVuZHBvaW50Qm9keTogdGhpcy5mb3JtRW5kcG9pbnRCb2R5LFxyXG4gICAgICAgIGlzRm9ybUVuZHBvaW50UGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCxcclxuICAgICAgICBmaWx0ZXJzSHRtbFRlbXBsYXRlOiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgb3B0aW9uYWxFbmRwb2ludHM6IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgYnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICAgIHJlcG9ydERpc2NyaW1pbmF0b3I6IHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcixcclxuICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICByZXF1ZXN0RGF0YTogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICBjdXN0b21SZXBvcnRpbmdNb2RlOiB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUsXHJcbiAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuZ2V0SHR0cE1ldGhvZFR5cGUoKSxcclxuICAgICAgfSxcclxuICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgaGVpZ2h0OiB0aGlzLm1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYgPSBhd2FpdCBvcGVuTWFuYWdlUmVwb3J0aW5nQ29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBjb25mKTtcclxuXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICB9XHJcblxyXG4gIGdldEh0dHBNZXRob2RUeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXBvcnRGb3JGaWNoZSAmJiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlKSB7XHJcbiAgICAgIHJldHVybiBIdHRwTWV0aG9kVHlwZS5HRVQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaHR0cE1ldGhvZFR5cGUgJiYgdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBNZXRob2RUeXBlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEh0dHBNZXRob2RUeXBlLlBPU1Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9zZU1vZGFsKHZhbD86IGFueSwgcmVmcmVzaERhdGE6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWZyZXNoRGF0YS5lbWl0KHJlZnJlc2hEYXRhKTtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZj8uZGVzdHJveSgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgb25SaWdodENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMuX2dldEFsbFJlcG9ydHMoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XHJcbiAgfVxyXG5cclxuICBoaWRlQ29udGV4dE1lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uID0geyB4OiAwLCB5OiAwIH07XHJcbiAgICAvLyB0aGlzLnJlcG9ydHMgPSBbXTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0Q29udGV4dE9wdGlvbihpdGVtOiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl92aWV3UmVwb3J0KGl0ZW0udWlkKTtcclxuICAgIHRoaXMuaGlkZUNvbnRleHRNZW51KCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRSZXBvcnRzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5yZXBvcnRzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldFJlcG9ydHMoXHJcbiAgICAgICAgICB0aGlzLmZvcm1OYW1lID8/ICcnLFxyXG4gICAgICAgICAgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgdGhpcy5oaWRlQ29udGV4dE1lbnUoKTtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2dldEFsbFJlcG9ydHMoY2xpY2tYOiBudW1iZXIsIGNsaWNrWTogbnVtYmVyKSB7XHJcbiAgICBhd2FpdCB0aGlzLmdldFJlcG9ydHMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5yZXBvcnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgcmVjdCA9IHRoaXMud3JhcHBlclJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uID0ge1xyXG4gICAgICAgIHg6IGNsaWNrWCAtIHJlY3QubGVmdCxcclxuICAgICAgICB5OiBjbGlja1kgLSByZWN0LnRvcCxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgdmlld05vdGVzKCkge1xyXG4gICAgY29uc3QgcmVmID0gYXdhaXQgb3Blbk5vdGVzTGlzdCh0aGlzLl9pbmplY3RvcilcclxuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gIH1cclxuXHJcbiAgdmlld0luZm8oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaWQgIT0gdW5kZWZpbmVkICYmIHRoaXMuaWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlY29yZEluZm9Qb3B1cFNlcnZpY2VcclxuICAgICAgICAuZ2V0SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MhLCB0aGlzLmlkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9XHJcbiAgICAgICAgICAgICAgJ1VJRCA6ICAnICtcclxuICAgICAgICAgICAgICB0aGlzLmlkICtcclxuICAgICAgICAgICAgICAnPEJSPkNyZWF0ZWQgYnkgOiAgJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5jcmVhdGlvblVzZXIgK1xyXG4gICAgICAgICAgICAgICc8QlI+TW9kaWZpZWQgYnkgOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLm1vZGlmVXNlciArXHJcbiAgICAgICAgICAgICAgJzxCUj5DcmVhdGVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlU2Fpc2llICtcclxuICAgICAgICAgICAgICAnPEJSPk1vZGlmaWVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlTW9kaWY7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBVaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGlvblVzZXI6IGRhdGEuY3JlYXRpb25Vc2VyLFxyXG4gICAgICAgICAgICAgICAgbW9kaWZVc2VyOiBkYXRhLm1vZGlmVXNlcixcclxuICAgICAgICAgICAgICAgIGRhdGVTYWlzaWU6IGRhdGEuZGF0ZVNhaXNpZSxcclxuICAgICAgICAgICAgICAgIGRhdGVNb2RpZjogZGF0YS5kYXRlTW9kaWYsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aWR0aDogJzkwcmVtJyxcclxuICAgICAgICAgICAgICBoZWlnaHQ6ICc4MHJlbScsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSBhd2FpdCBvcGVuVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBjb25mKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBiaW5hcnkgPSAnJztcclxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmJ5dGVMZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBidG9hKGJpbmFyeSk7XHJcbiAgfVxyXG5cclxuICBoaWRlKHZhbD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZiAhPSBudWxsICYmIHRoaXMuX2RpYWxvZ1JlZiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHZhbCA9PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubG9jYWxpemUgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmxvY2FsaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oa2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIG14LTJcIj5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cImZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cIm1hbmFnZV9yZXBvcnRzX2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbaWNvblNyY109XCInLi9hc3NldHMvaWNvbnMvaWNvbi1wcmludGVyLWdyb3VwLXdoaXRlLnBuZydcIlxyXG4gICAgICBbaWNvbldpZHRoXT1cIjIwXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX21hbmFnZV9yZXBvcnRzJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dEaWFsb2coKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiZm9ybUVuZHBvaW50IHx8IGJ1c2luZXNzQ2xhc3NcIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwicHJpbnRfZGVmYXVsdF9yZXBvcnRfYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBidG4td3JhcHBlclwiXHJcbiAgICAjd3JhcHBlclxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBpY29uPVwicGkgcGktcHJpbnQgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfcmlnaHRDbGljaydcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJvblByaW50RGVmYXVsdCgkZXZlbnQpXCJcclxuICAgICAgKHJpZ2h0Q2xpY2spPVwib25SaWdodENsaWNrKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gICAgPCEtLSBgc2hhcmVkX3JlcG9ydGluZ19wcmludF9yZXBvcnRgIGtleSBmb3IgYEltcHJpbWVyYCB0ZXh0ICAocmVwbGFjZSBpdCBhcyB2YWx1ZSBvciB0b29sdGlwIGlmIG5lZWQgaXQpIC0tPlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzaG93Q29udGV4dE1lbnVcIlxyXG4gICAgICBjbGFzcz1cImNvbnRleHQtbWVudVwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAndG9wLnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi55LFxyXG4gICAgICAgICdsZWZ0LnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi54XHJcbiAgICAgIH1cIlxyXG4gICAgICAobW91c2VsZWF2ZSk9XCJoaWRlQ29udGV4dE1lbnUoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdGb3I9XCJsZXQgcmVwb3J0IG9mIHJlcG9ydHNcIlxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25TZWxlY3RDb250ZXh0T3B0aW9uKHJlcG9ydClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgcmVwb3J0Lm5hbWUgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJidXNpbmVzc0NsYXNzICYmIHNob3dVcGxvYWRCdXR0b25cIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiYXR0YWNobWVudF9idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXBhcGVyY2xpcCBwLWJ1dHRvbi1pY29uXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfYWN0aW9uc19hdHRhY2htZW50J1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dVcGxvYWREaWFsb2coKVwiXHJcbiAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbjwhLS0gICAgIDxzcGFuICpuZ0lmPVwibm9tYnJlRG9jdW1lbnRzSm9pbnRzID4gMFwiIGNsYXNzPVwiY3VzdG9tLWJhZGdlXCI+XHJcbiAgICAgIHt7IG5vbWJyZURvY3VtZW50c0pvaW50cyB9fVxyXG4gICAgPC9zcGFuPiAtLT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJmb3JtRW5kcG9pbnQgfHwgYnVzaW5lc3NDbGFzc1wiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzZW5kX3JlcG9ydF9ieV9lbWFpbF9idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXNlbmQgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfc2VuZF9tYWlsJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cIm9uU2VuZFBkZigkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cImJ1c2luZXNzQ2xhc3MgJiYgc2hvd0ltcG9ydEV4cG9ydEJ1dHRvblwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJpbXBvcnRfZXhwb3J0X2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBpY29uPVwicGkgcGktYXJyb3ctcmlnaHQtYXJyb3ctbGVmdCBwLWJ1dHRvbi1pY29uXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX21hbmFnZV9leHBvcnRfaW1wb3J0J1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJzaG93RXhwb3J0SW1wb3J0RGlhbG9nKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dOb3RlQnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzaGFyZWRfc2hvd19ub3Rlc19idXR0b25cIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwie3sgY29uZmlnTW9kZUJ1dHRvbklkIH19XCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1jb21tZW50IHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfdHNpX2NvbXBvbmVudF9nZXN0aW9uX2Rlc19ub3RlcydcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi13YXJuaW5nIGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHkgdGV4dC13aGl0ZVwiXHJcbiAgICAgIChjbGljayk9XCJ2aWV3Tm90ZXMoKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJzaG93SW5mb0J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2hhcmVkX3Nob3dfaW5mb19idXR0b25cIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwiJ3Nob3ctaW5mby1idXR0b24nXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1pbmZvIHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfYWN0aW9uc19pbmZvJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLWluZm8gaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSB0ZXh0LXdoaXRlXCJcclxuICAgICAgKGNsaWNrKT1cInZpZXdJbmZvKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dQcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZ0J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwie3sgY29uZmlnTW9kZUJ1dHRvbklkIH19XCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1leWUgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF90c2lfY29tcG9uZW50X2NvbmZpZ19zaG93X2hpZGUnXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48IS0tIDxkaXYgKm5nSWY9XCJzaG93Q29udGV4dE1lbnVcIlxyXG4gIGNsYXNzPVwiY29udGV4dC1tZW51XCJcclxuICBbbmdTdHlsZV09XCJ7XHJcbiAgICAndG9wLnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi55LFxyXG4gICAgJ2xlZnQucHgnOiBjb250ZXh0TWVudVBvc2l0aW9uLnhcclxuICB9XCJcclxuICAobW91c2VsZWF2ZSk9XCJoaWRlQ29udGV4dE1lbnUoKVwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRzXCJcclxuICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgIChjbGljayk9XCJvblNlbGVjdENvbnRleHRPcHRpb24ocmVwb3J0KVwiPlxyXG4gICAge3tyZXBvcnQubmFtZX19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuIl19
|