@alfresco/adf-core 8.1.0-15730481703 → 8.1.0-15782677066
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/adf-core.mjs +5 -0
- package/esm2022/api/alfresco-adf-core-api.mjs +5 -0
- package/esm2022/api/index.mjs +20 -0
- package/esm2022/api/lib/adf-http-client.service.mjs +311 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.param-encoder.mjs +33 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.response-error.mjs +25 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.utils.mjs +80 -0
- package/esm2022/api/lib/interfaces.mjs +18 -0
- package/esm2022/api/lib/types.mjs +18 -0
- package/esm2022/auth/alfresco-adf-core-auth.mjs +5 -0
- package/esm2022/auth/authentication-interceptor/authentication.interceptor.mjs +56 -0
- package/esm2022/auth/authentication.mjs +19 -0
- package/esm2022/auth/index.mjs +19 -0
- package/esm2022/breadcrumbs/alfresco-adf-core-breadcrumbs.mjs +5 -0
- package/esm2022/breadcrumbs/components/breadcrumb/breadcrumb.component.mjs +83 -0
- package/esm2022/breadcrumbs/components/breadcrumb-item/breadcrumb-item.component.mjs +42 -0
- package/esm2022/breadcrumbs/directives/breadcrumb-focus.directive.mjs +44 -0
- package/esm2022/breadcrumbs/index.mjs +19 -0
- package/esm2022/feature-flags/alfresco-adf-core-feature-flags.mjs +5 -0
- package/esm2022/feature-flags/index.mjs +29 -0
- package/esm2022/feature-flags/lib/components/feature-flags-wrapper.mjs +36 -0
- package/esm2022/feature-flags/lib/components/feature-override-indicator.component.mjs +56 -0
- package/esm2022/feature-flags/lib/components/flags/flags.component.mjs +130 -0
- package/esm2022/feature-flags/lib/directives/features.directive.mjs +63 -0
- package/esm2022/feature-flags/lib/directives/not-features.directive.mjs +63 -0
- package/esm2022/feature-flags/lib/guards/is-feature-off.guard.mjs +38 -0
- package/esm2022/feature-flags/lib/guards/is-feature-on.guard.mjs +38 -0
- package/esm2022/feature-flags/lib/guards/is-flags-override-on.guard.mjs +40 -0
- package/esm2022/feature-flags/lib/interfaces/features.interface.mjs +24 -0
- package/esm2022/feature-flags/lib/mocks/features-service-mock.factory.mjs +62 -0
- package/esm2022/feature-flags/lib/providers/debug-feature-flags.provider.mjs +51 -0
- package/esm2022/feature-flags/lib/providers/dummy-feature-flags.provider.mjs +36 -0
- package/esm2022/feature-flags/lib/services/debug-features.service.mjs +94 -0
- package/esm2022/feature-flags/lib/services/dummy-features.service.mjs +40 -0
- package/esm2022/feature-flags/lib/services/flagset.parser.mjs +38 -0
- package/esm2022/feature-flags/lib/services/qa-features.helper.mjs +62 -0
- package/esm2022/feature-flags/lib/services/storage-features.service.mjs +126 -0
- package/esm2022/lib/about/about-extension-list/about-extension-list.component.mjs +52 -0
- package/esm2022/lib/about/about-license-list/about-license-list.component.mjs +52 -0
- package/esm2022/lib/about/about-module-list/module-list.component.mjs +52 -0
- package/esm2022/lib/about/about-package/package-list.component.mjs +66 -0
- package/esm2022/lib/about/about-panel.directive.mjs +37 -0
- package/esm2022/lib/about/about-repository-info/about-repository-info.component.mjs +60 -0
- package/esm2022/lib/about/about-repository-info/repository-info.interface.mjs +18 -0
- package/esm2022/lib/about/about-server-settings/about-server-settings.component.mjs +43 -0
- package/esm2022/lib/about/about-status-list/about-status-list.component.mjs +52 -0
- package/esm2022/lib/about/about.component.mjs +35 -0
- package/esm2022/lib/about/about.module.mjs +75 -0
- package/esm2022/lib/about/index.mjs +18 -0
- package/esm2022/lib/about/interfaces.mjs +18 -0
- package/esm2022/lib/about/public-api.mjs +28 -0
- package/esm2022/lib/app-config/app-config-storage-prefix.factory.mjs +51 -0
- package/esm2022/lib/app-config/app-config.loader.mjs +41 -0
- package/esm2022/lib/app-config/app-config.module.mjs +33 -0
- package/esm2022/lib/app-config/app-config.pipe.mjs +38 -0
- package/esm2022/lib/app-config/app-config.service.mjs +243 -0
- package/esm2022/lib/app-config/debug-app-config.service.mjs +44 -0
- package/esm2022/lib/app-config/index.mjs +18 -0
- package/esm2022/lib/app-config/public-api.mjs +22 -0
- package/esm2022/lib/auth/authentication-interceptor/auth-bearer.interceptor.mjs +67 -0
- package/esm2022/lib/auth/basic-auth/basic-alfresco-auth.service.mjs +356 -0
- package/esm2022/lib/auth/basic-auth/content-auth.mjs +189 -0
- package/esm2022/lib/auth/basic-auth/process-auth.mjs +193 -0
- package/esm2022/lib/auth/guard/auth-guard-bpm.service.mjs +31 -0
- package/esm2022/lib/auth/guard/auth-guard-ecm.service.mjs +31 -0
- package/esm2022/lib/auth/guard/auth-guard-sso-role.service.mjs +57 -0
- package/esm2022/lib/auth/guard/auth-guard.mjs +53 -0
- package/esm2022/lib/auth/guard/auth-guard.service.mjs +113 -0
- package/esm2022/lib/auth/index.mjs +18 -0
- package/esm2022/lib/auth/interfaces/authentication-service.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/authentication.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/identity-group.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/identity-user.service.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/openid-configuration.interface.mjs +18 -0
- package/esm2022/lib/auth/models/application-access.model.mjs +18 -0
- package/esm2022/lib/auth/models/identity-group.model.mjs +18 -0
- package/esm2022/lib/auth/models/identity-role.model.mjs +30 -0
- package/esm2022/lib/auth/models/identity-user.model.mjs +18 -0
- package/esm2022/lib/auth/models/oauth-config.model.mjs +18 -0
- package/esm2022/lib/auth/models/redirection.model.mjs +28 -0
- package/esm2022/lib/auth/models/user-access.model.mjs +18 -0
- package/esm2022/lib/auth/oidc/auth-config.mjs +19 -0
- package/esm2022/lib/auth/oidc/auth-config.service.mjs +110 -0
- package/esm2022/lib/auth/oidc/auth-routing.module.mjs +34 -0
- package/esm2022/lib/auth/oidc/auth.module.mjs +112 -0
- package/esm2022/lib/auth/oidc/auth.service.mjs +22 -0
- package/esm2022/lib/auth/oidc/oidc-auth.guard.mjs +37 -0
- package/esm2022/lib/auth/oidc/oidc-authentication.service.mjs +202 -0
- package/esm2022/lib/auth/oidc/public-api.mjs +24 -0
- package/esm2022/lib/auth/oidc/redirect-auth.service.mjs +267 -0
- package/esm2022/lib/auth/oidc/retry-login.service.mjs +66 -0
- package/esm2022/lib/auth/oidc/token.interceptor.mjs +62 -0
- package/esm2022/lib/auth/oidc/view/authentication-confirmation/authentication-confirmation.component.mjs +31 -0
- package/esm2022/lib/auth/public-api.mjs +44 -0
- package/esm2022/lib/auth/services/authentication.service.mjs +190 -0
- package/esm2022/lib/auth/services/base-authentication.service.mjs +99 -0
- package/esm2022/lib/auth/services/identity-group.service.mjs +269 -0
- package/esm2022/lib/auth/services/identity-role.service.mjs +99 -0
- package/esm2022/lib/auth/services/identity-user.service.mjs +443 -0
- package/esm2022/lib/auth/services/jwt-helper.service.mjs +205 -0
- package/esm2022/lib/auth/services/oauth2.service.mjs +69 -0
- package/esm2022/lib/auth/services/time-sync.service.mjs +83 -0
- package/esm2022/lib/auth/services/user-access.service.mjs +110 -0
- package/esm2022/lib/avatar/avatar.component.mjs +51 -0
- package/esm2022/lib/blank-page/blank-page.component.mjs +31 -0
- package/esm2022/lib/blank-page/blank-page.module.mjs +33 -0
- package/esm2022/lib/blank-page/index.mjs +18 -0
- package/esm2022/lib/blank-page/public-api.mjs +19 -0
- package/esm2022/lib/button/button.component.mjs +61 -0
- package/esm2022/lib/card-view/card-view.module.mjs +80 -0
- package/esm2022/lib/card-view/components/base-card-view.mjs +51 -0
- package/esm2022/lib/card-view/components/card-view/card-view.component.mjs +66 -0
- package/esm2022/lib/card-view/components/card-view-arrayitem/card-view-arrayitem.component.mjs +56 -0
- package/esm2022/lib/card-view/components/card-view-boolitem/card-view-boolitem.component.mjs +40 -0
- package/esm2022/lib/card-view/components/card-view-dateitem/card-view-dateitem.component.mjs +177 -0
- package/esm2022/lib/card-view/components/card-view-item-dispatcher/card-view-item-dispatcher.component.mjs +108 -0
- package/esm2022/lib/card-view/components/card-view-keyvaluepairsitem/card-view-keyvaluepairsitem.component.mjs +65 -0
- package/esm2022/lib/card-view/components/card-view-mapitem/card-view-mapitem.component.mjs +47 -0
- package/esm2022/lib/card-view/components/card-view-selectitem/card-view-selectitem.component.mjs +138 -0
- package/esm2022/lib/card-view/components/card-view-selectitem/select-filter-input/select-filter-input.component.mjs +114 -0
- package/esm2022/lib/card-view/components/card-view-textitem/card-view-textitem.component.mjs +240 -0
- package/esm2022/lib/card-view/components/card-view.components.mjs +28 -0
- package/esm2022/lib/card-view/index.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/base-card-view-update.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-arrayitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-boolitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-dateitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item-validator.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-keyvaluepairsitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-selectitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-textitem-pipe-property.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-textitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view.interfaces.mjs +29 -0
- package/esm2022/lib/card-view/interfaces/click-notification.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/update-notification.interface.mjs +18 -0
- package/esm2022/lib/card-view/models/card-view-arrayitem.model.mjs +28 -0
- package/esm2022/lib/card-view/models/card-view-baseitem.model.mjs +64 -0
- package/esm2022/lib/card-view/models/card-view-boolitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-dateitem.model.mjs +58 -0
- package/esm2022/lib/card-view/models/card-view-datetimeitem.model.mjs +28 -0
- package/esm2022/lib/card-view/models/card-view-floatitem.model.mjs +33 -0
- package/esm2022/lib/card-view/models/card-view-intitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-keyvaluepairs.model.mjs +27 -0
- package/esm2022/lib/card-view/models/card-view-longitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-mapitem.model.mjs +32 -0
- package/esm2022/lib/card-view/models/card-view-selectitem.model.mjs +41 -0
- package/esm2022/lib/card-view/models/card-view-textitem.model.mjs +40 -0
- package/esm2022/lib/card-view/models/card-view.models.mjs +29 -0
- package/esm2022/lib/card-view/public-api.mjs +25 -0
- package/esm2022/lib/card-view/services/card-item-types.service.mjs +54 -0
- package/esm2022/lib/card-view/services/card-view-update.service.mjs +59 -0
- package/esm2022/lib/card-view/services/card-view.services.mjs +19 -0
- package/esm2022/lib/card-view/validators/card-view-item-float.validator.mjs +31 -0
- package/esm2022/lib/card-view/validators/card-view-item-int.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-length.validator.mjs +34 -0
- package/esm2022/lib/card-view/validators/card-view-item-long.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-match.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-minmax.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-only-positive-int.validator.mjs +32 -0
- package/esm2022/lib/card-view/validators/card-view-item-only-positive-long.validator.mjs +31 -0
- package/esm2022/lib/card-view/validators/card-view.validators.mjs +26 -0
- package/esm2022/lib/card-view/validators/validators.map.mjs +26 -0
- package/esm2022/lib/clipboard/clipboard.directive.mjs +99 -0
- package/esm2022/lib/clipboard/clipboard.module.mjs +34 -0
- package/esm2022/lib/clipboard/clipboard.service.mjs +103 -0
- package/esm2022/lib/clipboard/index.mjs +18 -0
- package/esm2022/lib/clipboard/public-api.mjs +21 -0
- package/esm2022/lib/comments/comment-list/comment-list.component.mjs +53 -0
- package/esm2022/lib/comments/comment-list/comment-list.module.mjs +33 -0
- package/esm2022/lib/comments/comment-list/index.mjs +18 -0
- package/esm2022/lib/comments/comment-list/public-api.mjs +19 -0
- package/esm2022/lib/comments/comments.component.mjs +128 -0
- package/esm2022/lib/comments/comments.module.mjs +33 -0
- package/esm2022/lib/comments/index.mjs +18 -0
- package/esm2022/lib/comments/interfaces/comments-service.interface.mjs +18 -0
- package/esm2022/lib/comments/interfaces/comments.token.mjs +19 -0
- package/esm2022/lib/comments/public-api.mjs +22 -0
- package/esm2022/lib/common/index.mjs +35 -0
- package/esm2022/lib/common/interface/search-component.interface.mjs +18 -0
- package/esm2022/lib/common/mock/app-config.service.mock.mjs +47 -0
- package/esm2022/lib/common/models/default-languages.model.mjs +36 -0
- package/esm2022/lib/common/models/log-levels.model.mjs +33 -0
- package/esm2022/lib/common/models/user-info-mode.enum.mjs +25 -0
- package/esm2022/lib/common/services/cookie.service.mjs +82 -0
- package/esm2022/lib/common/services/download.service.mjs +102 -0
- package/esm2022/lib/common/services/dynamic-component-mapper.service.mjs +89 -0
- package/esm2022/lib/common/services/highlight-transform.service.mjs +61 -0
- package/esm2022/lib/common/services/language-item.interface.mjs +18 -0
- package/esm2022/lib/common/services/log.service.mjs +171 -0
- package/esm2022/lib/common/services/page-title.service.mjs +63 -0
- package/esm2022/lib/common/services/sort-by-category.service.mjs +81 -0
- package/esm2022/lib/common/services/storage.service.mjs +143 -0
- package/esm2022/lib/common/services/thumbnail.service.mjs +194 -0
- package/esm2022/lib/common/services/url.service.mjs +45 -0
- package/esm2022/lib/common/services/user-preferences.service.mjs +238 -0
- package/esm2022/lib/common/utils/date-fns-adapter.mjs +115 -0
- package/esm2022/lib/common/utils/date-fns-utils.mjs +222 -0
- package/esm2022/lib/common/utils/datetime-fns-adapter.mjs +134 -0
- package/esm2022/lib/common/utils/file-utils.mjs +65 -0
- package/esm2022/lib/common/utils/index.mjs +18 -0
- package/esm2022/lib/common/utils/moment-date-adapter.mjs +202 -0
- package/esm2022/lib/common/utils/moment-date-formats.model.mjs +32 -0
- package/esm2022/lib/common/utils/object-utils.mjs +107 -0
- package/esm2022/lib/common/utils/public-api.mjs +25 -0
- package/esm2022/lib/common/utils/string-utils.mjs +45 -0
- package/esm2022/lib/context-menu/animations.mjs +33 -0
- package/esm2022/lib/context-menu/context-menu-list.component.mjs +92 -0
- package/esm2022/lib/context-menu/context-menu-overlay.mjs +25 -0
- package/esm2022/lib/context-menu/context-menu-overlay.service.mjs +109 -0
- package/esm2022/lib/context-menu/context-menu.directive.mjs +63 -0
- package/esm2022/lib/context-menu/context-menu.module.mjs +35 -0
- package/esm2022/lib/context-menu/context-menu.tokens.mjs +19 -0
- package/esm2022/lib/context-menu/index.mjs +18 -0
- package/esm2022/lib/context-menu/interfaces.mjs +18 -0
- package/esm2022/lib/context-menu/public-api.mjs +21 -0
- package/esm2022/lib/core.module.mjs +314 -0
- package/esm2022/lib/datatable/components/amount-cell/amount-cell.component.mjs +45 -0
- package/esm2022/lib/datatable/components/boolean-cell/boolean-cell.component.mjs +65 -0
- package/esm2022/lib/datatable/components/columns-selector/columns-search-filter.pipe.mjs +55 -0
- package/esm2022/lib/datatable/components/columns-selector/columns-selector.component.mjs +114 -0
- package/esm2022/lib/datatable/components/data-cell.event.mjs +31 -0
- package/esm2022/lib/datatable/components/data-row-action.event.mjs +34 -0
- package/esm2022/lib/datatable/components/datatable/datatable.component.mjs +915 -0
- package/esm2022/lib/datatable/components/datatable-cell/datatable-cell.component.mjs +126 -0
- package/esm2022/lib/datatable/components/datatable-row/datatable-row.component.mjs +98 -0
- package/esm2022/lib/datatable/components/date-cell/date-cell.component.mjs +78 -0
- package/esm2022/lib/datatable/components/empty-list/empty-list.component.mjs +60 -0
- package/esm2022/lib/datatable/components/filesize-cell/filesize-cell.component.mjs +49 -0
- package/esm2022/lib/datatable/components/icon-cell/icon-cell.component.mjs +67 -0
- package/esm2022/lib/datatable/components/json-cell/json-cell.component.mjs +86 -0
- package/esm2022/lib/datatable/components/location-cell/location-cell.component.mjs +69 -0
- package/esm2022/lib/datatable/components/mocks/datatable.mock.mjs +153 -0
- package/esm2022/lib/datatable/components/number-cell/number-cell.component.mjs +42 -0
- package/esm2022/lib/datatable/data/data-column.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-row-event.model.mjs +26 -0
- package/esm2022/lib/datatable/data/data-row-update.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-row.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-sorting.model.mjs +24 -0
- package/esm2022/lib/datatable/data/data-table.schema.mjs +132 -0
- package/esm2022/lib/datatable/data/datatable-adapter.mjs +18 -0
- package/esm2022/lib/datatable/data/object-datacolumn.model.mjs +46 -0
- package/esm2022/lib/datatable/data/object-datarow.model.mjs +41 -0
- package/esm2022/lib/datatable/data/object-datatable-adapter.mjs +134 -0
- package/esm2022/lib/datatable/data-column/data-column-header.component.mjs +45 -0
- package/esm2022/lib/datatable/data-column/data-column-list.component.mjs +36 -0
- package/esm2022/lib/datatable/data-column/data-column.component.mjs +114 -0
- package/esm2022/lib/datatable/data-column/index.mjs +18 -0
- package/esm2022/lib/datatable/data-column/public-api.mjs +20 -0
- package/esm2022/lib/datatable/datatable.module.mjs +161 -0
- package/esm2022/lib/datatable/directives/custom-empty-content-template.directive.mjs +35 -0
- package/esm2022/lib/datatable/directives/custom-loading-template.directive.mjs +30 -0
- package/esm2022/lib/datatable/directives/custom-no-permission-template.directive.mjs +35 -0
- package/esm2022/lib/datatable/directives/drop-zone.directive.mjs +89 -0
- package/esm2022/lib/datatable/directives/header-filter-template.directive.mjs +43 -0
- package/esm2022/lib/datatable/directives/loading-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/main-data-table-action-template.directive.mjs +43 -0
- package/esm2022/lib/datatable/directives/no-content-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/no-permission-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/resizable/resizable.directive.mjs +173 -0
- package/esm2022/lib/datatable/directives/resizable/resize-handle.directive.mjs +72 -0
- package/esm2022/lib/datatable/directives/resizable/types.mjs +18 -0
- package/esm2022/lib/datatable/index.mjs +18 -0
- package/esm2022/lib/datatable/public-api.mjs +55 -0
- package/esm2022/lib/datatable/services/datatable.service.mjs +33 -0
- package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.mjs +50 -0
- package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.module.mjs +38 -0
- package/esm2022/lib/dialogs/dialog/dialog-data.interface.mjs +18 -0
- package/esm2022/lib/dialogs/dialog/dialog.component.mjs +71 -0
- package/esm2022/lib/dialogs/dialog/dialog.model.mjs +22 -0
- package/esm2022/lib/dialogs/dialog/index.mjs +20 -0
- package/esm2022/lib/dialogs/edit-json/edit-json.dialog.mjs +51 -0
- package/esm2022/lib/dialogs/edit-json/edit-json.dialog.module.mjs +38 -0
- package/esm2022/lib/dialogs/index.mjs +18 -0
- package/esm2022/lib/dialogs/public-api.mjs +25 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.component.mjs +74 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.model.mjs +18 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.module.mjs +33 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes.guard.mjs +64 -0
- package/esm2022/lib/directives/directive.module.mjs +56 -0
- package/esm2022/lib/directives/highlight.directive.mjs +67 -0
- package/esm2022/lib/directives/index.mjs +18 -0
- package/esm2022/lib/directives/infinite-select-scroll.directive.mjs +67 -0
- package/esm2022/lib/directives/logout.directive.mjs +72 -0
- package/esm2022/lib/directives/public-api.mjs +24 -0
- package/esm2022/lib/directives/tooltip-card/tooltip-card.component.mjs +60 -0
- package/esm2022/lib/directives/tooltip-card/tooltip-card.directive.mjs +104 -0
- package/esm2022/lib/directives/upload.directive.mjs +241 -0
- package/esm2022/lib/dynamic-chip-list/chip.mjs +18 -0
- package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.component.mjs +205 -0
- package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.module.mjs +33 -0
- package/esm2022/lib/dynamic-chip-list/index.mjs +18 -0
- package/esm2022/lib/dynamic-chip-list/public-api.mjs +20 -0
- package/esm2022/lib/events/base-ui.event.mjs +21 -0
- package/esm2022/lib/events/base.event.mjs +29 -0
- package/esm2022/lib/events/index.mjs +18 -0
- package/esm2022/lib/events/public-api.mjs +19 -0
- package/esm2022/lib/form/components/form-base.component.mjs +212 -0
- package/esm2022/lib/form/components/form-custom-button.directive.mjs +30 -0
- package/esm2022/lib/form/components/form-field/form-field.component.mjs +142 -0
- package/esm2022/lib/form/components/form-renderer.component.mjs +162 -0
- package/esm2022/lib/form/components/form-section/form-section.component.mjs +46 -0
- package/esm2022/lib/form/components/helpers/buttons-visibility.mjs +37 -0
- package/esm2022/lib/form/components/inplace-form-input/inplace-form-input.component.mjs +37 -0
- package/esm2022/lib/form/components/middlewares/decimal-middleware.service.mjs +48 -0
- package/esm2022/lib/form/components/middlewares/middleware.mjs +19 -0
- package/esm2022/lib/form/components/widgets/amount/amount.widget.mjs +78 -0
- package/esm2022/lib/form/components/widgets/base-viewer/base-viewer.widget.mjs +60 -0
- package/esm2022/lib/form/components/widgets/checkbox/checkbox.widget.mjs +53 -0
- package/esm2022/lib/form/components/widgets/core/container-column.model.mjs +28 -0
- package/esm2022/lib/form/components/widgets/core/container.model.mjs +50 -0
- package/esm2022/lib/form/components/widgets/core/content-link.model.mjs +52 -0
- package/esm2022/lib/form/components/widgets/core/displayable-cm-properties.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/error-message.model.mjs +38 -0
- package/esm2022/lib/form/components/widgets/core/external-content-link.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/external-content.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-file-source.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-metadata.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-option.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-rule.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-selected-folder.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-templates.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-types.mjs +74 -0
- package/esm2022/lib/form/components/widgets/core/form-field-utils.mjs +23 -0
- package/esm2022/lib/form/components/widgets/core/form-field-validator.mjs +268 -0
- package/esm2022/lib/form/components/widgets/core/form-field-variable-options.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field.model.mjs +490 -0
- package/esm2022/lib/form/components/widgets/core/form-outcome-event.model.mjs +32 -0
- package/esm2022/lib/form/components/widgets/core/form-outcome.model.mjs +38 -0
- package/esm2022/lib/form/components/widgets/core/form-values.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-variable.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-widget.model.mjs +33 -0
- package/esm2022/lib/form/components/widgets/core/form.model.mjs +387 -0
- package/esm2022/lib/form/components/widgets/core/group.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/index.mjs +49 -0
- package/esm2022/lib/form/components/widgets/core/predefined-theme.mjs +115 -0
- package/esm2022/lib/form/components/widgets/core/process-form-model.interface.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/process-variable.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/tab.model.mjs +34 -0
- package/esm2022/lib/form/components/widgets/core/theme.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/upload-widget-content-link.model.mjs +27 -0
- package/esm2022/lib/form/components/widgets/core/widget-schema.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/date/date.widget.mjs +163 -0
- package/esm2022/lib/form/components/widgets/date-time/date-time.widget.mjs +154 -0
- package/esm2022/lib/form/components/widgets/decimal/decimal.component.mjs +54 -0
- package/esm2022/lib/form/components/widgets/display-text/display-text.schema.mjs +86 -0
- package/esm2022/lib/form/components/widgets/display-text/display-text.widget.mjs +47 -0
- package/esm2022/lib/form/components/widgets/display-text/index.mjs +19 -0
- package/esm2022/lib/form/components/widgets/error/error.component.mjs +93 -0
- package/esm2022/lib/form/components/widgets/header/header.schema.mjs +86 -0
- package/esm2022/lib/form/components/widgets/header/header.widget.mjs +43 -0
- package/esm2022/lib/form/components/widgets/header/index.mjs +19 -0
- package/esm2022/lib/form/components/widgets/hyperlink/hyperlink.widget.mjs +71 -0
- package/esm2022/lib/form/components/widgets/index.mjs +71 -0
- package/esm2022/lib/form/components/widgets/json/json.widget.mjs +67 -0
- package/esm2022/lib/form/components/widgets/multiline-text/multiline-text.widget.mjs +56 -0
- package/esm2022/lib/form/components/widgets/number/number.widget.mjs +72 -0
- package/esm2022/lib/form/components/widgets/reactive-widget.interface.mjs +18 -0
- package/esm2022/lib/form/components/widgets/text/text-mask.component.mjs +215 -0
- package/esm2022/lib/form/components/widgets/text/text.widget.mjs +66 -0
- package/esm2022/lib/form/components/widgets/unknown/unknown.widget.mjs +63 -0
- package/esm2022/lib/form/components/widgets/widget.component.mjs +110 -0
- package/esm2022/lib/form/events/form-error.event.mjs +24 -0
- package/esm2022/lib/form/events/form-field.event.mjs +24 -0
- package/esm2022/lib/form/events/form-rules.event.mjs +25 -0
- package/esm2022/lib/form/events/form-spinner.event.mjs +23 -0
- package/esm2022/lib/form/events/form.event.mjs +29 -0
- package/esm2022/lib/form/events/index.mjs +24 -0
- package/esm2022/lib/form/events/validate-form-field.event.mjs +24 -0
- package/esm2022/lib/form/events/validate-form.event.mjs +25 -0
- package/esm2022/lib/form/form-base.module.mjs +90 -0
- package/esm2022/lib/form/index.mjs +18 -0
- package/esm2022/lib/form/models/form-rules.model.mjs +77 -0
- package/esm2022/lib/form/models/task-process-variable.model.mjs +19 -0
- package/esm2022/lib/form/models/widget-visibility.model.mjs +104 -0
- package/esm2022/lib/form/pipes/field-style.pipe.mjs +45 -0
- package/esm2022/lib/form/pipes/index.mjs +18 -0
- package/esm2022/lib/form/public-api.mjs +35 -0
- package/esm2022/lib/form/services/form-rendering.service.mjs +53 -0
- package/esm2022/lib/form/services/form-validation-service.interface.mjs +18 -0
- package/esm2022/lib/form/services/form.service.mjs +86 -0
- package/esm2022/lib/form/services/widget-visibility.service.mjs +294 -0
- package/esm2022/lib/header/header.component.mjs +73 -0
- package/esm2022/lib/header/index.mjs +18 -0
- package/esm2022/lib/header/navbar/navbar-item.component.mjs +37 -0
- package/esm2022/lib/header/navbar/navbar.component.mjs +36 -0
- package/esm2022/lib/header/public-api.mjs +20 -0
- package/esm2022/lib/icon/icon.component.mjs +51 -0
- package/esm2022/lib/icon/icon.module.mjs +36 -0
- package/esm2022/lib/icon/index.mjs +18 -0
- package/esm2022/lib/icon/public-api.mjs +19 -0
- package/esm2022/lib/identity-user-info/identity-user-info.component.mjs +87 -0
- package/esm2022/lib/identity-user-info/identity-user-info.module.mjs +33 -0
- package/esm2022/lib/identity-user-info/index.mjs +18 -0
- package/esm2022/lib/identity-user-info/public-api.mjs +19 -0
- package/esm2022/lib/info-drawer/index.mjs +18 -0
- package/esm2022/lib/info-drawer/info-drawer-layout.component.mjs +71 -0
- package/esm2022/lib/info-drawer/info-drawer.component.mjs +114 -0
- package/esm2022/lib/info-drawer/info-drawer.module.mjs +53 -0
- package/esm2022/lib/info-drawer/public-api.mjs +20 -0
- package/esm2022/lib/interface/index.mjs +18 -0
- package/esm2022/lib/interface/injection.tokens.mjs +19 -0
- package/esm2022/lib/interface/public-api.mjs +18 -0
- package/esm2022/lib/language-menu/index.mjs +18 -0
- package/esm2022/lib/language-menu/language-menu.component.mjs +61 -0
- package/esm2022/lib/language-menu/language-menu.module.mjs +35 -0
- package/esm2022/lib/language-menu/language-picker.component.mjs +78 -0
- package/esm2022/lib/language-menu/public-api.mjs +21 -0
- package/esm2022/lib/language-menu/service/language.service.interface.mjs +18 -0
- package/esm2022/lib/language-menu/service/language.service.mjs +34 -0
- package/esm2022/lib/layout/components/header/header.component.mjs +100 -0
- package/esm2022/lib/layout/components/layout-container/layout-container.component.mjs +180 -0
- package/esm2022/lib/layout/components/sidebar-action/sidebar-action-menu.component.mjs +82 -0
- package/esm2022/lib/layout/components/sidenav-layout/sidenav-layout.component.mjs +145 -0
- package/esm2022/lib/layout/directives/sidenav-layout-content.directive.mjs +33 -0
- package/esm2022/lib/layout/directives/sidenav-layout-header.directive.mjs +33 -0
- package/esm2022/lib/layout/directives/sidenav-layout-navigation.directive.mjs +33 -0
- package/esm2022/lib/layout/index.mjs +18 -0
- package/esm2022/lib/layout/layout.module.mjs +72 -0
- package/esm2022/lib/layout/public-api.mjs +25 -0
- package/esm2022/lib/login/components/login/login.component.mjs +368 -0
- package/esm2022/lib/login/components/login-dialog/login-dialog-component-data.interface.mjs +18 -0
- package/esm2022/lib/login/components/login-dialog/login-dialog.component.mjs +58 -0
- package/esm2022/lib/login/components/login-dialog-panel/login-dialog-panel.component.mjs +48 -0
- package/esm2022/lib/login/directives/login-footer.directive.mjs +41 -0
- package/esm2022/lib/login/directives/login-header.directive.mjs +41 -0
- package/esm2022/lib/login/index.mjs +18 -0
- package/esm2022/lib/login/login.module.mjs +54 -0
- package/esm2022/lib/login/models/login-error.event.mjs +22 -0
- package/esm2022/lib/login/models/login-submit.event.mjs +32 -0
- package/esm2022/lib/login/models/login-success.event.mjs +24 -0
- package/esm2022/lib/login/public-api.mjs +27 -0
- package/esm2022/lib/material.module.mjs +254 -0
- package/esm2022/lib/mock/cookie.service.mock.mjs +43 -0
- package/esm2022/lib/mock/data-column.mock.mjs +73 -0
- package/esm2022/lib/mock/event.mock.mjs +39 -0
- package/esm2022/lib/mock/form/form-definition-readonly.mock.mjs +225 -0
- package/esm2022/lib/mock/form/form-definition-visibility.mock.mjs +347 -0
- package/esm2022/lib/mock/form/form-definition.mock.mjs +403 -0
- package/esm2022/lib/mock/form/form.component.mock.mjs +275 -0
- package/esm2022/lib/mock/form/form.service.mock.mjs +248 -0
- package/esm2022/lib/mock/form/widget-visibility.service.mock.mjs +1835 -0
- package/esm2022/lib/mock/index.mjs +18 -0
- package/esm2022/lib/mock/public-api.mjs +27 -0
- package/esm2022/lib/mock/translation.service.mock.mjs +44 -0
- package/esm2022/lib/models/comment.model.mjs +51 -0
- package/esm2022/lib/models/component.model.mjs +24 -0
- package/esm2022/lib/models/decimal-number.model.mjs +26 -0
- package/esm2022/lib/models/general-user.model.mjs +24 -0
- package/esm2022/lib/models/index.mjs +18 -0
- package/esm2022/lib/models/pagination.model.mjs +29 -0
- package/esm2022/lib/models/path.model.mjs +24 -0
- package/esm2022/lib/models/product-version.model.mjs +28 -0
- package/esm2022/lib/models/public-api.mjs +24 -0
- package/esm2022/lib/models/request-pagination.model.mjs +25 -0
- package/esm2022/lib/notifications/components/add-notification.stories.component.mjs +44 -0
- package/esm2022/lib/notifications/components/notification-history.component.mjs +139 -0
- package/esm2022/lib/notifications/helpers/notification.factory.mjs +43 -0
- package/esm2022/lib/notifications/index.mjs +18 -0
- package/esm2022/lib/notifications/models/notification.model.mjs +25 -0
- package/esm2022/lib/notifications/notification-history.module.mjs +35 -0
- package/esm2022/lib/notifications/public-api.mjs +23 -0
- package/esm2022/lib/notifications/services/notification.service.mjs +166 -0
- package/esm2022/lib/pagination/index.mjs +18 -0
- package/esm2022/lib/pagination/infinite-pagination.component.mjs +112 -0
- package/esm2022/lib/pagination/paginated-component.interface.mjs +18 -0
- package/esm2022/lib/pagination/pagination-component.interface.mjs +18 -0
- package/esm2022/lib/pagination/pagination.component.mjs +263 -0
- package/esm2022/lib/pagination/pagination.module.mjs +35 -0
- package/esm2022/lib/pagination/public-api.mjs +22 -0
- package/esm2022/lib/pipes/date-time.pipe.mjs +46 -0
- package/esm2022/lib/pipes/decimal-number.pipe.mjs +78 -0
- package/esm2022/lib/pipes/file-size.pipe.mjs +54 -0
- package/esm2022/lib/pipes/file-type.pipe.mjs +40 -0
- package/esm2022/lib/pipes/format-space.pipe.mjs +39 -0
- package/esm2022/lib/pipes/full-name.pipe.mjs +43 -0
- package/esm2022/lib/pipes/index.mjs +18 -0
- package/esm2022/lib/pipes/localized-date.pipe.mjs +70 -0
- package/esm2022/lib/pipes/multi-value.pipe.mjs +37 -0
- package/esm2022/lib/pipes/pipe.module.mjs +83 -0
- package/esm2022/lib/pipes/public-api.mjs +30 -0
- package/esm2022/lib/pipes/text-highlight.pipe.mjs +39 -0
- package/esm2022/lib/pipes/time-ago.pipe.mjs +65 -0
- package/esm2022/lib/pipes/truncate.pipe.mjs +33 -0
- package/esm2022/lib/pipes/user-initial.pipe.mjs +52 -0
- package/esm2022/lib/pipes/user-like.interface.mjs +18 -0
- package/esm2022/lib/progress/progress.component.mjs +90 -0
- package/esm2022/lib/search-text/animations.mjs +32 -0
- package/esm2022/lib/search-text/index.mjs +18 -0
- package/esm2022/lib/search-text/models/search-text-input.model.mjs +23 -0
- package/esm2022/lib/search-text/public-api.mjs +22 -0
- package/esm2022/lib/search-text/search-text-input.component.mjs +294 -0
- package/esm2022/lib/search-text/search-text-input.module.mjs +35 -0
- package/esm2022/lib/search-text/search-trigger.directive.mjs +181 -0
- package/esm2022/lib/snackbar-content/index.mjs +18 -0
- package/esm2022/lib/snackbar-content/public-api.mjs +20 -0
- package/esm2022/lib/snackbar-content/snack-bar-data.mjs +18 -0
- package/esm2022/lib/snackbar-content/snackbar-content.component.mjs +48 -0
- package/esm2022/lib/snackbar-content/snackbar-content.module.mjs +38 -0
- package/esm2022/lib/sorting-picker/index.mjs +18 -0
- package/esm2022/lib/sorting-picker/public-api.mjs +18 -0
- package/esm2022/lib/sorting-picker/sorting-picker.component.mjs +68 -0
- package/esm2022/lib/templates/empty-content/empty-content.component.mjs +44 -0
- package/esm2022/lib/templates/error-content/error-content.component.mjs +62 -0
- package/esm2022/lib/templates/index.mjs +18 -0
- package/esm2022/lib/templates/public-api.mjs +20 -0
- package/esm2022/lib/templates/template.module.mjs +38 -0
- package/esm2022/lib/testing/core.story.module.mjs +39 -0
- package/esm2022/lib/testing/core.testing.module.mjs +35 -0
- package/esm2022/lib/testing/index.mjs +22 -0
- package/esm2022/lib/testing/noop-auth.module.mjs +80 -0
- package/esm2022/lib/testing/noop-translate.module.mjs +61 -0
- package/esm2022/lib/testing/unit-testing-utils.mjs +364 -0
- package/esm2022/lib/toolbar/index.mjs +18 -0
- package/esm2022/lib/toolbar/public-api.mjs +21 -0
- package/esm2022/lib/toolbar/toolbar-divider.component.mjs +27 -0
- package/esm2022/lib/toolbar/toolbar-title.component.mjs +32 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +40 -0
- package/esm2022/lib/toolbar/toolbar.module.mjs +36 -0
- package/esm2022/lib/translation/index.mjs +18 -0
- package/esm2022/lib/translation/public-api.mjs +19 -0
- package/esm2022/lib/translation/translate-loader.service.mjs +148 -0
- package/esm2022/lib/translation/translation.service.mjs +148 -0
- package/esm2022/lib/viewer/components/download-prompt-dialog/download-prompt-dialog.component.mjs +37 -0
- package/esm2022/lib/viewer/components/img-viewer/img-viewer.component.mjs +221 -0
- package/esm2022/lib/viewer/components/media-player/media-player.component.mjs +64 -0
- package/esm2022/lib/viewer/components/pdf-viewer/pdf-viewer.component.mjs +551 -0
- package/esm2022/lib/viewer/components/pdf-viewer-password-dialog/pdf-viewer-password-dialog.mjs +61 -0
- package/esm2022/lib/viewer/components/pdf-viewer-thumb/pdf-viewer-thumb.component.mjs +49 -0
- package/esm2022/lib/viewer/components/pdf-viewer-thumbnails/pdf-viewer-thumbnails.component.mjs +198 -0
- package/esm2022/lib/viewer/components/txt-viewer/txt-viewer.component.mjs +85 -0
- package/esm2022/lib/viewer/components/unknown-format/unknown-format.component.mjs +33 -0
- package/esm2022/lib/viewer/components/viewer-more-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-open-with.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-render/viewer-render.component.mjs +217 -0
- package/esm2022/lib/viewer/components/viewer-sidebar.component.mjs +46 -0
- package/esm2022/lib/viewer/components/viewer-toolbar-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-toolbar-custom-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-toolbar.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer.component.mjs +487 -0
- package/esm2022/lib/viewer/directives/viewer-extension.directive.mjs +67 -0
- package/esm2022/lib/viewer/index.mjs +18 -0
- package/esm2022/lib/viewer/models/download-prompt.actions.mjs +23 -0
- package/esm2022/lib/viewer/models/viewer.model.mjs +22 -0
- package/esm2022/lib/viewer/public-api.mjs +40 -0
- package/esm2022/lib/viewer/services/rendering-queue.services.mjs +179 -0
- package/esm2022/lib/viewer/services/view-util.service.mjs +149 -0
- package/esm2022/lib/viewer/viewer.module.mjs +112 -0
- package/esm2022/public-api.mjs +60 -0
- package/esm2022/shell/alfresco-adf-core-shell.mjs +5 -0
- package/esm2022/shell/index.mjs +20 -0
- package/esm2022/shell/lib/components/shell/shell.component.mjs +122 -0
- package/esm2022/shell/lib/services/shell-app.service.mjs +22 -0
- package/esm2022/shell/lib/shell.module.mjs +79 -0
- package/esm2022/shell/lib/shell.routes.mjs +25 -0
- package/feature-flags/lib/providers/debug-feature-flags.provider.d.ts +35 -4
- package/fesm2022/adf-core.mjs +973 -942
- package/fesm2022/adf-core.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-api.mjs +4 -4
- package/fesm2022/alfresco-adf-core-api.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-auth.mjs +3 -3
- package/fesm2022/alfresco-adf-core-auth.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-breadcrumbs.mjs +11 -11
- package/fesm2022/alfresco-adf-core-breadcrumbs.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-feature-flags.mjs +56 -51
- package/fesm2022/alfresco-adf-core-feature-flags.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-shell.mjs +9 -9
- package/fesm2022/alfresco-adf-core-shell.mjs.map +1 -1
- package/lib/card-view/components/base-card-view.d.ts +1 -1
- package/lib/datatable/data/data-table.schema.d.ts +1 -1
- package/lib/datatable/data/object-datarow.model.d.ts +1 -0
- package/lib/viewer/components/img-viewer/img-viewer.component.scss +10 -0
- package/lib/viewer/components/unknown-format/unknown-format.component.scss +4 -0
- package/lib/viewer/components/viewer-render/viewer-render.component.scss +16 -0
- package/lib/viewer/components/viewer.component.d.ts +4 -1
- package/lib/viewer/components/viewer.component.scss +12 -0
- package/package.json +15 -3
|
@@ -0,0 +1,915 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/* eslint-disable @angular-eslint/no-conflicting-lifecycle */
|
|
18
|
+
import { Component, ContentChild, DestroyRef, ElementRef, EventEmitter, HostListener, inject, Input, IterableDiffers, Output, QueryList, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
19
|
+
import { ConfigurableFocusTrapFactory, FocusKeyManager } from '@angular/cdk/a11y';
|
|
20
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
21
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
22
|
+
import { Observable } from 'rxjs';
|
|
23
|
+
import { DataColumnListComponent } from '../../data-column/data-column-list.component';
|
|
24
|
+
import { DataRowEvent } from '../../data/data-row-event.model';
|
|
25
|
+
import { DataSorting } from '../../data/data-sorting.model';
|
|
26
|
+
import { DataTableRowComponent } from '../datatable-row/datatable-row.component';
|
|
27
|
+
import { ObjectDataRow } from '../../data/object-datarow.model';
|
|
28
|
+
import { ObjectDataColumn } from '../../data/object-datacolumn.model';
|
|
29
|
+
import { ObjectDataTableAdapter } from '../../data/object-datatable-adapter';
|
|
30
|
+
import { DataCellEvent } from '../data-cell.event';
|
|
31
|
+
import { DataRowActionEvent } from '../data-row-action.event';
|
|
32
|
+
import { buffer, debounceTime, filter, map, share } from 'rxjs/operators';
|
|
33
|
+
import { CdkDrag, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';
|
|
34
|
+
import { MatIconModule, MatIconRegistry } from '@angular/material/icon';
|
|
35
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
36
|
+
import { CommonModule } from '@angular/common';
|
|
37
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
38
|
+
import { FileTypePipe, LocalizedDatePipe } from '../../../pipes';
|
|
39
|
+
import { DropZoneDirective } from '../../directives/drop-zone.directive';
|
|
40
|
+
import { ResizableDirective } from '../../directives/resizable/resizable.directive';
|
|
41
|
+
import { IconComponent } from '../../../icon';
|
|
42
|
+
import { ResizeHandleDirective } from '../../directives/resizable/resize-handle.directive';
|
|
43
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
44
|
+
import { UploadDirective } from '../../../directives';
|
|
45
|
+
import { ContextMenuDirective } from '../../../context-menu';
|
|
46
|
+
import { IconCellComponent } from '../icon-cell/icon-cell.component';
|
|
47
|
+
import { DateCellComponent } from '../date-cell/date-cell.component';
|
|
48
|
+
import { LocationCellComponent } from '../location-cell/location-cell.component';
|
|
49
|
+
import { FileSizeCellComponent } from '../filesize-cell/filesize-cell.component';
|
|
50
|
+
import { DataTableCellComponent } from '../datatable-cell/datatable-cell.component';
|
|
51
|
+
import { BooleanCellComponent } from '../boolean-cell/boolean-cell.component';
|
|
52
|
+
import { JsonCellComponent } from '../json-cell/json-cell.component';
|
|
53
|
+
import { AmountCellComponent } from '../amount-cell/amount-cell.component';
|
|
54
|
+
import { NumberCellComponent } from '../number-cell/number-cell.component';
|
|
55
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
56
|
+
import * as i0 from "@angular/core";
|
|
57
|
+
import * as i1 from "@angular/material/icon";
|
|
58
|
+
import * as i2 from "@angular/platform-browser";
|
|
59
|
+
import * as i3 from "@angular/cdk/a11y";
|
|
60
|
+
import * as i4 from "@angular/common";
|
|
61
|
+
import * as i5 from "@ngx-translate/core";
|
|
62
|
+
import * as i6 from "@angular/material/checkbox";
|
|
63
|
+
import * as i7 from "@angular/material/button";
|
|
64
|
+
import * as i8 from "@angular/material/menu";
|
|
65
|
+
// eslint-disable-next-line no-shadow
|
|
66
|
+
export var ShowHeaderMode;
|
|
67
|
+
(function (ShowHeaderMode) {
|
|
68
|
+
ShowHeaderMode["Never"] = "never";
|
|
69
|
+
ShowHeaderMode["Always"] = "always";
|
|
70
|
+
ShowHeaderMode["Data"] = "data";
|
|
71
|
+
})(ShowHeaderMode || (ShowHeaderMode = {}));
|
|
72
|
+
export class DataTableComponent {
|
|
73
|
+
static { this.MINIMUM_COLUMN_SIZE = 100; }
|
|
74
|
+
onKeydown(event) {
|
|
75
|
+
this.keyManager.onKeydown(event);
|
|
76
|
+
}
|
|
77
|
+
constructor(elementRef, differs, matIconRegistry, sanitizer, focusTrapFactory) {
|
|
78
|
+
this.elementRef = elementRef;
|
|
79
|
+
this.matIconRegistry = matIconRegistry;
|
|
80
|
+
this.sanitizer = sanitizer;
|
|
81
|
+
this.focusTrapFactory = focusTrapFactory;
|
|
82
|
+
/** The rows that the datatable will show. */
|
|
83
|
+
this.rows = [];
|
|
84
|
+
/**
|
|
85
|
+
* Define the sort order of the datatable. Possible values are :
|
|
86
|
+
* [`created`, `desc`], [`created`, `asc`], [`due`, `desc`], [`due`, `asc`]
|
|
87
|
+
*/
|
|
88
|
+
this.sorting = [];
|
|
89
|
+
/** The columns that the datatable will show. */
|
|
90
|
+
this.columns = [];
|
|
91
|
+
/**
|
|
92
|
+
* Row selection mode. Can be none, `single` or `multiple`. For `multiple` mode,
|
|
93
|
+
* you can use Cmd (macOS) or Ctrl (Win) modifier key to toggle selection for multiple rows.
|
|
94
|
+
*/
|
|
95
|
+
this.selectionMode = 'single'; // none|single|multiple
|
|
96
|
+
/** Toggles multiple row selection, which renders checkboxes at the beginning of each row. */
|
|
97
|
+
this.multiselect = false;
|
|
98
|
+
/** Toggles main data table action column. */
|
|
99
|
+
this.mainTableAction = true;
|
|
100
|
+
/** Toggles the data actions column. */
|
|
101
|
+
this.actions = false;
|
|
102
|
+
/** Toggles the main datatable action. */
|
|
103
|
+
this.showMainDatatableActions = false;
|
|
104
|
+
/** Toggles the provided actions. */
|
|
105
|
+
this.showProvidedActions = false;
|
|
106
|
+
/** Position of the actions dropdown menu. Can be "left" or "right". */
|
|
107
|
+
this.actionsPosition = 'right'; // left|right
|
|
108
|
+
/** Toggles whether the actions dropdown should only be visible if the row is hovered over or the dropdown menu is open. */
|
|
109
|
+
this.actionsVisibleOnHover = false;
|
|
110
|
+
/** Toggles custom context menu for the component. */
|
|
111
|
+
this.contextMenu = false;
|
|
112
|
+
/** The CSS class to apply to every row. */
|
|
113
|
+
this.rowStyleClass = '';
|
|
114
|
+
/** Toggles the header. */
|
|
115
|
+
this.showHeader = ShowHeaderMode.Data;
|
|
116
|
+
/** Toggles the sticky header mode. */
|
|
117
|
+
this.stickyHeader = false;
|
|
118
|
+
/** Emitted when the user clicks a row. */
|
|
119
|
+
this.rowClick = new EventEmitter();
|
|
120
|
+
/** Emitted when the user double-clicks a row. */
|
|
121
|
+
this.rowDblClick = new EventEmitter();
|
|
122
|
+
/** Emitted before the context menu is displayed for a row. */
|
|
123
|
+
this.showRowContextMenu = new EventEmitter();
|
|
124
|
+
/** Emitted before the actions menu is displayed for a row. */
|
|
125
|
+
this.showRowActionsMenu = new EventEmitter();
|
|
126
|
+
/** Emitted when the user executes a row action. */
|
|
127
|
+
this.executeRowAction = new EventEmitter();
|
|
128
|
+
/** Emitted when the column order is changed. */
|
|
129
|
+
this.columnOrderChanged = new EventEmitter();
|
|
130
|
+
/** Emitted when the column width is changed. */
|
|
131
|
+
this.columnsWidthChanged = new EventEmitter();
|
|
132
|
+
/** Emitted when the selected row items count in the table changed. */
|
|
133
|
+
this.selectedItemsCountChanged = new EventEmitter();
|
|
134
|
+
/**
|
|
135
|
+
* Flag that indicates if the datatable is in loading state and needs to show the
|
|
136
|
+
* loading template (see the docs to learn how to configure a loading template).
|
|
137
|
+
*/
|
|
138
|
+
this.loading = false;
|
|
139
|
+
/** Flag that indicates if the datatable should show the "no permission" template. */
|
|
140
|
+
this.noPermission = false;
|
|
141
|
+
/**
|
|
142
|
+
* Should the items for the row actions menu be cached for reuse after they are loaded
|
|
143
|
+
* the first time?
|
|
144
|
+
*/
|
|
145
|
+
this.rowMenuCacheEnabled = true;
|
|
146
|
+
/**
|
|
147
|
+
* Custom resolver function which is used to parse dynamic column objects
|
|
148
|
+
* see the docs to learn how to configure a resolverFn.
|
|
149
|
+
*/
|
|
150
|
+
this.resolverFn = null;
|
|
151
|
+
/**
|
|
152
|
+
* Flag that indicate if the datatable allow the use facet widget search for filtering.
|
|
153
|
+
*/
|
|
154
|
+
this.allowFiltering = false;
|
|
155
|
+
/**
|
|
156
|
+
* Flag that indicates if the datatable allows column resizing.
|
|
157
|
+
*/
|
|
158
|
+
this.isResizingEnabled = false;
|
|
159
|
+
/**
|
|
160
|
+
* Flag that indicates if the datatable should be blurred when resizing.
|
|
161
|
+
*/
|
|
162
|
+
this.blurOnResize = true;
|
|
163
|
+
/**
|
|
164
|
+
* Flag that indicates if selection checkboxes inside row should be displayed on hover only.
|
|
165
|
+
*/
|
|
166
|
+
this.displayCheckboxesOnHover = false;
|
|
167
|
+
/**
|
|
168
|
+
* Flag that enables dragging rows
|
|
169
|
+
*/
|
|
170
|
+
this.enableDragRows = false;
|
|
171
|
+
/** Emitted when dragged row is dropped. */
|
|
172
|
+
this.dragDropped = new EventEmitter();
|
|
173
|
+
this.isSelectAllIndeterminate = false;
|
|
174
|
+
this.isSelectAllChecked = false;
|
|
175
|
+
this.selection = new Array();
|
|
176
|
+
this.selectedRowId = '';
|
|
177
|
+
this.isDraggingHeaderColumn = false;
|
|
178
|
+
this.hoveredHeaderColumnIndex = -1;
|
|
179
|
+
this.resizingColumnIndex = -1;
|
|
180
|
+
this.isDraggingRow = false;
|
|
181
|
+
this.rowMenuCache = {};
|
|
182
|
+
this.destroyRef = inject(DestroyRef);
|
|
183
|
+
if (differs) {
|
|
184
|
+
this.differ = differs.find([]).create(null);
|
|
185
|
+
}
|
|
186
|
+
this.click$ = new Observable((observer) => (this.clickObserver = observer)).pipe(share());
|
|
187
|
+
}
|
|
188
|
+
ngOnInit() {
|
|
189
|
+
this.registerDragHandleIcon();
|
|
190
|
+
}
|
|
191
|
+
ngAfterContentInit() {
|
|
192
|
+
if (this.columnList) {
|
|
193
|
+
this.columnList.columns.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
194
|
+
this.setTableSchema();
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
this.setTableSchema();
|
|
198
|
+
}
|
|
199
|
+
ngAfterViewInit() {
|
|
200
|
+
this.keyManager = new FocusKeyManager(this.rowsList).withWrap().skipPredicate((item) => item.disabled);
|
|
201
|
+
}
|
|
202
|
+
ngOnChanges(changes) {
|
|
203
|
+
this.initAndSubscribeClickStream();
|
|
204
|
+
if (this.selectedRowId) {
|
|
205
|
+
this.setRowAsContextSource();
|
|
206
|
+
}
|
|
207
|
+
const dataChanges = changes['data'];
|
|
208
|
+
const rowChanges = changes['rows'];
|
|
209
|
+
const columnChanges = changes['columns'];
|
|
210
|
+
const multiselectChanges = changes['multiselect'];
|
|
211
|
+
if (this.isPropertyChanged(dataChanges) || this.isPropertyChanged(rowChanges) || this.isPropertyChanged(columnChanges)) {
|
|
212
|
+
if (this.isTableEmpty()) {
|
|
213
|
+
this.initTable();
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
if (dataChanges) {
|
|
217
|
+
this.data = changes['data'].currentValue;
|
|
218
|
+
this.resetSelection();
|
|
219
|
+
}
|
|
220
|
+
if (rowChanges) {
|
|
221
|
+
this.setTableRows(changes['rows'].currentValue);
|
|
222
|
+
this.setTableSorting(this.sorting);
|
|
223
|
+
}
|
|
224
|
+
if (columnChanges) {
|
|
225
|
+
this.setTableColumns(changes['columns'].currentValue);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
if (changes.selectionMode && !changes.selectionMode.isFirstChange()) {
|
|
231
|
+
this.resetSelection();
|
|
232
|
+
this.emitRowSelectionEvent('row-unselect', null);
|
|
233
|
+
}
|
|
234
|
+
if (this.isPropertyChanged(changes['sorting'])) {
|
|
235
|
+
this.setTableSorting(changes['sorting'].currentValue);
|
|
236
|
+
}
|
|
237
|
+
if (multiselectChanges?.currentValue === false) {
|
|
238
|
+
this.resetSelection();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
isColumnSortActive(column) {
|
|
242
|
+
if (!column || !this.data.getSorting()) {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
return column.key === this.data.getSorting().key;
|
|
246
|
+
}
|
|
247
|
+
getVisibleColumns() {
|
|
248
|
+
return this.data.getColumns().filter((column) => !column.isHidden);
|
|
249
|
+
}
|
|
250
|
+
onDropHeaderColumn(event) {
|
|
251
|
+
const allColumns = this.data.getColumns();
|
|
252
|
+
const shownColumns = allColumns.filter((column) => !column.isHidden);
|
|
253
|
+
const hiddenColumns = allColumns.filter((column) => column.isHidden);
|
|
254
|
+
moveItemInArray(shownColumns, event.previousIndex, event.currentIndex);
|
|
255
|
+
const allColumnsWithNewOrder = [...shownColumns, ...hiddenColumns];
|
|
256
|
+
this.setTableColumns(allColumnsWithNewOrder);
|
|
257
|
+
this.columnOrderChanged.emit(allColumnsWithNewOrder);
|
|
258
|
+
this.isDraggingHeaderColumn = false;
|
|
259
|
+
}
|
|
260
|
+
ngDoCheck() {
|
|
261
|
+
const changes = this.differ.diff(this.rows);
|
|
262
|
+
if (changes) {
|
|
263
|
+
this.setTableRows(this.rows);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
isPropertyChanged(property) {
|
|
267
|
+
return !!property?.currentValue;
|
|
268
|
+
}
|
|
269
|
+
convertToRowsData(rows) {
|
|
270
|
+
return rows.map((row) => new ObjectDataRow(row, row.isSelected, row?.isSelectable));
|
|
271
|
+
}
|
|
272
|
+
convertToColumnsData(columns) {
|
|
273
|
+
return columns.map((column) => new ObjectDataColumn(column));
|
|
274
|
+
}
|
|
275
|
+
convertToDataSorting(sorting) {
|
|
276
|
+
if (sorting && sorting.length > 0) {
|
|
277
|
+
return new DataSorting(sorting[0], sorting[1], sorting[2]);
|
|
278
|
+
}
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
onMainMenuOpen() {
|
|
282
|
+
if (this.mainMenuTemplate && !this.focusTrap) {
|
|
283
|
+
this.focusTrap = this.focusTrapFactory.create(this.mainMenuTemplate.nativeElement);
|
|
284
|
+
this.focusTrap.focusInitialElement();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
onMainMenuClosed() {
|
|
288
|
+
if (this.focusTrap) {
|
|
289
|
+
this.focusTrap.destroy();
|
|
290
|
+
this.focusTrap = null;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
initAndSubscribeClickStream() {
|
|
294
|
+
this.unsubscribeClickStream();
|
|
295
|
+
const singleClickStream = this.click$.pipe(buffer(this.click$.pipe(debounceTime(250))), map((list) => list), filter((x) => x.length === 1));
|
|
296
|
+
this.singleClickStreamSub = singleClickStream.subscribe((dataRowEvents) => {
|
|
297
|
+
const event = dataRowEvents[0];
|
|
298
|
+
this.handleRowSelection(event.value, event.event);
|
|
299
|
+
this.rowClick.emit(event);
|
|
300
|
+
if (!event.defaultPrevented) {
|
|
301
|
+
this.elementRef.nativeElement.dispatchEvent(new CustomEvent('row-click', {
|
|
302
|
+
detail: event,
|
|
303
|
+
bubbles: true
|
|
304
|
+
}));
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
const multiClickStream = this.click$.pipe(buffer(this.click$.pipe(debounceTime(250))), map((list) => list), filter((x) => x.length >= 2));
|
|
308
|
+
this.multiClickStreamSub = multiClickStream.subscribe((dataRowEvents) => {
|
|
309
|
+
const event = dataRowEvents[0];
|
|
310
|
+
this.rowDblClick.emit(event);
|
|
311
|
+
if (!event.defaultPrevented) {
|
|
312
|
+
this.elementRef.nativeElement.dispatchEvent(new CustomEvent('row-dblclick', {
|
|
313
|
+
detail: event,
|
|
314
|
+
bubbles: true
|
|
315
|
+
}));
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
unsubscribeClickStream() {
|
|
320
|
+
if (this.singleClickStreamSub) {
|
|
321
|
+
this.singleClickStreamSub.unsubscribe();
|
|
322
|
+
this.singleClickStreamSub = null;
|
|
323
|
+
}
|
|
324
|
+
if (this.multiClickStreamSub) {
|
|
325
|
+
this.multiClickStreamSub.unsubscribe();
|
|
326
|
+
this.multiClickStreamSub = null;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
initTable() {
|
|
330
|
+
const runtimeColumns = this.getRuntimeColumns();
|
|
331
|
+
this.data = new ObjectDataTableAdapter(this.rows, runtimeColumns);
|
|
332
|
+
this.setTableSorting(this.sorting);
|
|
333
|
+
this.resetSelection();
|
|
334
|
+
this.rowMenuCache = {};
|
|
335
|
+
}
|
|
336
|
+
isTableEmpty() {
|
|
337
|
+
return this.data === undefined || this.data === null;
|
|
338
|
+
}
|
|
339
|
+
setTableRows(rows) {
|
|
340
|
+
if (this.data) {
|
|
341
|
+
this.resetSelection();
|
|
342
|
+
const rowsData = this.convertToRowsData(rows);
|
|
343
|
+
this.data.setRows(rowsData);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
setTableColumns(columns) {
|
|
347
|
+
if (this.data) {
|
|
348
|
+
this.resetSelection();
|
|
349
|
+
const columnsData = this.convertToColumnsData(columns);
|
|
350
|
+
this.data.setColumns(columnsData);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
getRuntimeColumns() {
|
|
354
|
+
return [...(this.columns || []), ...this.getSchemaFromHtml()];
|
|
355
|
+
}
|
|
356
|
+
setTableSchema() {
|
|
357
|
+
const columns = this.getRuntimeColumns();
|
|
358
|
+
if (this.data && columns.length > 0) {
|
|
359
|
+
this.data.setColumns(columns);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
setTableSorting(sorting) {
|
|
363
|
+
if (this.data) {
|
|
364
|
+
this.data.setSorting(this.convertToDataSorting(sorting));
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
getSchemaFromHtml() {
|
|
368
|
+
let schema = [];
|
|
369
|
+
if (this.columnList?.columns?.length > 0) {
|
|
370
|
+
schema = this.columnList.columns.map((c) => c);
|
|
371
|
+
}
|
|
372
|
+
return schema;
|
|
373
|
+
}
|
|
374
|
+
onRowClick(row, mouseEvent) {
|
|
375
|
+
if (mouseEvent) {
|
|
376
|
+
mouseEvent.preventDefault();
|
|
377
|
+
}
|
|
378
|
+
if (row) {
|
|
379
|
+
const rowIndex = this.data.getRows().indexOf(row) + (this.isHeaderVisible() ? 1 : 0);
|
|
380
|
+
this.keyManager.setActiveItem(rowIndex);
|
|
381
|
+
const dataRowEvent = new DataRowEvent(row, mouseEvent, this);
|
|
382
|
+
this.clickObserver.next(dataRowEvent);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
onEnterKeyPressed(row, e) {
|
|
386
|
+
if (row) {
|
|
387
|
+
this.handleRowSelection(row, e);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
handleRowSelection(row, e) {
|
|
391
|
+
if (!this.data || !row?.isSelectable) {
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
if (this.isSingleSelectionMode()) {
|
|
395
|
+
if (row.isSelected) {
|
|
396
|
+
this.resetSelection();
|
|
397
|
+
this.emitRowSelectionEvent('row-unselect', null);
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
this.resetSelection();
|
|
401
|
+
this.selectRow(row, true);
|
|
402
|
+
this.emitRowSelectionEvent('row-select', row);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if (this.isMultiSelectionMode()) {
|
|
406
|
+
const modifier = e && (e.metaKey || e.ctrlKey);
|
|
407
|
+
let newValue;
|
|
408
|
+
if (this.selection.length === 1) {
|
|
409
|
+
newValue = !row.isSelected;
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
newValue = modifier ? !row.isSelected : true;
|
|
413
|
+
}
|
|
414
|
+
const domEventName = newValue ? 'row-select' : 'row-unselect';
|
|
415
|
+
if (!modifier) {
|
|
416
|
+
this.resetSelection();
|
|
417
|
+
}
|
|
418
|
+
this.selectRow(row, newValue);
|
|
419
|
+
this.emitRowSelectionEvent(domEventName, row);
|
|
420
|
+
this.checkSelectAllCheckboxState();
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
resetSelection() {
|
|
424
|
+
if (this.data) {
|
|
425
|
+
const rows = this.data.getRows();
|
|
426
|
+
if (rows && rows.length > 0) {
|
|
427
|
+
rows.forEach((r) => (r.isSelected = false));
|
|
428
|
+
}
|
|
429
|
+
this.selection = [];
|
|
430
|
+
}
|
|
431
|
+
this.isSelectAllChecked = false;
|
|
432
|
+
this.isSelectAllIndeterminate = false;
|
|
433
|
+
this.selectedItemsCountChanged.emit(0);
|
|
434
|
+
}
|
|
435
|
+
onRowDblClick(row, event) {
|
|
436
|
+
if (event) {
|
|
437
|
+
event.preventDefault();
|
|
438
|
+
}
|
|
439
|
+
const dataRowEvent = new DataRowEvent(row, event, this);
|
|
440
|
+
this.clickObserver.next(dataRowEvent);
|
|
441
|
+
}
|
|
442
|
+
onRowEnterKeyDown(row, keyboardEvent) {
|
|
443
|
+
if (keyboardEvent.key === 'Enter') {
|
|
444
|
+
this.onKeyboardNavigate(row, keyboardEvent);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
onRowKeyUp(row, keyboardEvent) {
|
|
448
|
+
const event = new CustomEvent('row-keyup', {
|
|
449
|
+
detail: {
|
|
450
|
+
row,
|
|
451
|
+
keyboardEvent,
|
|
452
|
+
sender: this
|
|
453
|
+
},
|
|
454
|
+
bubbles: true
|
|
455
|
+
});
|
|
456
|
+
this.elementRef.nativeElement.dispatchEvent(event);
|
|
457
|
+
if (event.defaultPrevented) {
|
|
458
|
+
keyboardEvent.preventDefault();
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
onKeyboardNavigate(row, keyboardEvent) {
|
|
462
|
+
if (keyboardEvent) {
|
|
463
|
+
keyboardEvent.preventDefault();
|
|
464
|
+
}
|
|
465
|
+
const event = new DataRowEvent(row, keyboardEvent, this);
|
|
466
|
+
this.rowDblClick.emit(event);
|
|
467
|
+
this.elementRef.nativeElement.dispatchEvent(new CustomEvent('row-dblclick', {
|
|
468
|
+
detail: event,
|
|
469
|
+
bubbles: true
|
|
470
|
+
}));
|
|
471
|
+
}
|
|
472
|
+
isValidClickEvent(event) {
|
|
473
|
+
if (event instanceof MouseEvent) {
|
|
474
|
+
return event.eventPhase === event.BUBBLING_PHASE;
|
|
475
|
+
}
|
|
476
|
+
else if (event instanceof KeyboardEvent) {
|
|
477
|
+
return event.eventPhase === event.AT_TARGET;
|
|
478
|
+
}
|
|
479
|
+
return false;
|
|
480
|
+
}
|
|
481
|
+
onColumnHeaderClick(column, event) {
|
|
482
|
+
if (this.isValidClickEvent(event) && column && column.sortable) {
|
|
483
|
+
const current = this.data.getSorting();
|
|
484
|
+
let newDirection = 'asc';
|
|
485
|
+
if (current && column.key === current.key) {
|
|
486
|
+
newDirection = current.direction?.toLowerCase() === 'asc' ? 'desc' : 'asc';
|
|
487
|
+
}
|
|
488
|
+
this.sorting = [column.key, newDirection, { numeric: true }];
|
|
489
|
+
this.data.setSorting(new DataSorting(column.key, newDirection, { numeric: true }));
|
|
490
|
+
this.emitSortingChangedEvent(column.key, column.sortingKey, newDirection);
|
|
491
|
+
}
|
|
492
|
+
this.keyManager.updateActiveItem(0);
|
|
493
|
+
}
|
|
494
|
+
onSelectAllClick(matCheckboxChange) {
|
|
495
|
+
this.isSelectAllChecked = matCheckboxChange.checked;
|
|
496
|
+
this.isSelectAllIndeterminate = false;
|
|
497
|
+
if (this.multiselect) {
|
|
498
|
+
const selectableRows = this.data.getRows().filter((row) => row?.isSelectable);
|
|
499
|
+
if (selectableRows && selectableRows.length > 0) {
|
|
500
|
+
for (let i = 0; i < selectableRows.length; i++) {
|
|
501
|
+
this.selectRow(selectableRows[i], matCheckboxChange.checked);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
const domEventName = matCheckboxChange.checked ? 'row-select' : 'row-unselect';
|
|
505
|
+
const row = this.selection.length > 0 ? this.selection[0] : null;
|
|
506
|
+
this.emitRowSelectionEvent(domEventName, row);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
onCheckboxLabelClick(row, event) {
|
|
510
|
+
const target = event.target;
|
|
511
|
+
if (!(target.hasAttribute('data-adf-datatable-row-checkbox') || target.closest('[data-adf-datatable-row-checkbox]'))) {
|
|
512
|
+
this.onRowClick(row, event);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
onCheckboxChange(row, event) {
|
|
516
|
+
const newValue = event.checked;
|
|
517
|
+
this.selectRow(row, newValue);
|
|
518
|
+
const domEventName = newValue ? 'row-select' : 'row-unselect';
|
|
519
|
+
this.emitRowSelectionEvent(domEventName, row);
|
|
520
|
+
this.checkSelectAllCheckboxState();
|
|
521
|
+
}
|
|
522
|
+
checkSelectAllCheckboxState() {
|
|
523
|
+
if (this.multiselect) {
|
|
524
|
+
let numberOfSelectedRows = 0;
|
|
525
|
+
const rows = this.data.getRows();
|
|
526
|
+
rows.forEach((row) => {
|
|
527
|
+
if (row.isSelected) {
|
|
528
|
+
numberOfSelectedRows++;
|
|
529
|
+
}
|
|
530
|
+
});
|
|
531
|
+
if (numberOfSelectedRows === rows.length) {
|
|
532
|
+
this.isSelectAllChecked = true;
|
|
533
|
+
this.isSelectAllIndeterminate = false;
|
|
534
|
+
}
|
|
535
|
+
else if (numberOfSelectedRows > 0 && numberOfSelectedRows < rows.length) {
|
|
536
|
+
this.isSelectAllChecked = false;
|
|
537
|
+
this.isSelectAllIndeterminate = true;
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
this.isSelectAllChecked = false;
|
|
541
|
+
this.isSelectAllIndeterminate = false;
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
onImageLoadingError(event, row) {
|
|
546
|
+
if (event) {
|
|
547
|
+
const element = event.target;
|
|
548
|
+
if (this.fallbackThumbnail) {
|
|
549
|
+
element.src = this.fallbackThumbnail;
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
element.src = row.imageErrorResolver(event);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
isIconValue(row, col) {
|
|
557
|
+
if (row && col) {
|
|
558
|
+
const value = this.data.getValue(row, col);
|
|
559
|
+
return value?.startsWith('material-icons://');
|
|
560
|
+
}
|
|
561
|
+
return false;
|
|
562
|
+
}
|
|
563
|
+
asIconValue(row, col) {
|
|
564
|
+
if (this.isIconValue(row, col)) {
|
|
565
|
+
const value = this.data.getValue(row, col) || '';
|
|
566
|
+
return value.replace('material-icons://', '');
|
|
567
|
+
}
|
|
568
|
+
return null;
|
|
569
|
+
}
|
|
570
|
+
isColumnSorted(col, direction) {
|
|
571
|
+
if (col && direction) {
|
|
572
|
+
const sorting = this.data.getSorting();
|
|
573
|
+
return this.isSortingEqual(col, direction, sorting);
|
|
574
|
+
}
|
|
575
|
+
return false;
|
|
576
|
+
}
|
|
577
|
+
getContextMenuActions(row, col) {
|
|
578
|
+
return () => {
|
|
579
|
+
const event = new DataCellEvent(row, col, []);
|
|
580
|
+
this.showRowContextMenu.emit(event);
|
|
581
|
+
return event.value.actions;
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
getRowActions(row, col) {
|
|
585
|
+
const id = row.getValue('id');
|
|
586
|
+
if (!this.rowMenuCache[id]) {
|
|
587
|
+
const event = new DataCellEvent(row, col, []);
|
|
588
|
+
this.showRowActionsMenu.emit(event);
|
|
589
|
+
if (!this.rowMenuCacheEnabled) {
|
|
590
|
+
return this.getVisibleActions(event.value.actions);
|
|
591
|
+
}
|
|
592
|
+
this.rowMenuCache[id] = event.value.actions;
|
|
593
|
+
}
|
|
594
|
+
return this.getVisibleActions(this.rowMenuCache[id]);
|
|
595
|
+
}
|
|
596
|
+
getVisibleActions(actions) {
|
|
597
|
+
return actions.filter((action) => action.visible || action.visible === undefined);
|
|
598
|
+
}
|
|
599
|
+
onExecuteRowAction(row, action) {
|
|
600
|
+
if (action.disabled || action.disabled) {
|
|
601
|
+
event.stopPropagation();
|
|
602
|
+
}
|
|
603
|
+
else {
|
|
604
|
+
this.executeRowAction.emit(new DataRowActionEvent(row, action));
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
getHideActionsWithoutHoverClass(actionsMenuTrigger) {
|
|
608
|
+
return { 'adf-datatable-hide-actions-without-hover': this.actionsVisibleOnHover && !actionsMenuTrigger.menuOpen };
|
|
609
|
+
}
|
|
610
|
+
rowAllowsDrop(row) {
|
|
611
|
+
return row.isDropTarget === true;
|
|
612
|
+
}
|
|
613
|
+
isSingleSelectionMode() {
|
|
614
|
+
return this.selectionMode && this.selectionMode.toLowerCase() === 'single';
|
|
615
|
+
}
|
|
616
|
+
isMultiSelectionMode() {
|
|
617
|
+
return this.selectionMode && this.selectionMode.toLowerCase() === 'multiple';
|
|
618
|
+
}
|
|
619
|
+
getRowStyle(row) {
|
|
620
|
+
row.cssClass = row.cssClass ? row.cssClass : '';
|
|
621
|
+
this.rowStyleClass = this.rowStyleClass ? this.rowStyleClass : '';
|
|
622
|
+
const contextMenuSourceClass = row.isContextMenuSource ? 'adf-context-menu-source' : '';
|
|
623
|
+
const isDragEnabled = this.enableDragRows ? 'adf-drag-row' : '';
|
|
624
|
+
return `${row.cssClass} ${this.rowStyleClass} ${contextMenuSourceClass} ${isDragEnabled}`;
|
|
625
|
+
}
|
|
626
|
+
markRowAsContextMenuSource(selectedRow) {
|
|
627
|
+
this.selectedRowId = selectedRow.id ? selectedRow.id : '';
|
|
628
|
+
this.data.getRows().forEach((row) => (row.isContextMenuSource = false));
|
|
629
|
+
selectedRow.isContextMenuSource = true;
|
|
630
|
+
}
|
|
631
|
+
setRowAsContextSource() {
|
|
632
|
+
const selectedRow = this.data.getRows().find((row) => this.selectedRowId === row.id);
|
|
633
|
+
if (selectedRow) {
|
|
634
|
+
selectedRow.isContextMenuSource = true;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
selectRow(row, value) {
|
|
638
|
+
if (row) {
|
|
639
|
+
row.isSelected = value;
|
|
640
|
+
const idx = row?.id ? this.findSelectionById(row.id) : this.selection.indexOf(row);
|
|
641
|
+
if (value) {
|
|
642
|
+
if (idx < 0) {
|
|
643
|
+
this.selection.push(row);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
else {
|
|
647
|
+
if (idx > -1) {
|
|
648
|
+
this.selection.splice(idx, 1);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
this.selectedItemsCountChanged.emit(this.selection.length);
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
findSelectionById(id) {
|
|
655
|
+
return this.selection.findIndex((selection) => selection?.id === id);
|
|
656
|
+
}
|
|
657
|
+
getCellTooltip(row, col) {
|
|
658
|
+
if (row && col && col.formatTooltip) {
|
|
659
|
+
const result = col.formatTooltip(row, col);
|
|
660
|
+
if (result) {
|
|
661
|
+
return result;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
return null;
|
|
665
|
+
}
|
|
666
|
+
getSortableColumns() {
|
|
667
|
+
return this.data.getColumns().filter((column) => column.sortable === true);
|
|
668
|
+
}
|
|
669
|
+
isEmpty() {
|
|
670
|
+
return this.data.getRows().length === 0;
|
|
671
|
+
}
|
|
672
|
+
isHeaderVisible() {
|
|
673
|
+
let headerVisibility;
|
|
674
|
+
if (this.showHeader === ShowHeaderMode.Data) {
|
|
675
|
+
headerVisibility = !this.loading && !this.noPermission && !this.isEmpty();
|
|
676
|
+
}
|
|
677
|
+
else if (this.showHeader === ShowHeaderMode.Always) {
|
|
678
|
+
headerVisibility = !this.loading && !this.noPermission;
|
|
679
|
+
}
|
|
680
|
+
else if (this.showHeader === ShowHeaderMode.Never) {
|
|
681
|
+
headerVisibility = false;
|
|
682
|
+
}
|
|
683
|
+
return headerVisibility;
|
|
684
|
+
}
|
|
685
|
+
isStickyHeaderEnabled() {
|
|
686
|
+
return this.stickyHeader && this.isHeaderVisible();
|
|
687
|
+
}
|
|
688
|
+
emitRowSelectionEvent(name, row) {
|
|
689
|
+
const domEvent = new CustomEvent(name, {
|
|
690
|
+
detail: {
|
|
691
|
+
row,
|
|
692
|
+
selection: this.selection
|
|
693
|
+
},
|
|
694
|
+
bubbles: true
|
|
695
|
+
});
|
|
696
|
+
this.elementRef.nativeElement.dispatchEvent(domEvent);
|
|
697
|
+
}
|
|
698
|
+
emitSortingChangedEvent(key, sortingKey, direction) {
|
|
699
|
+
const domEvent = new CustomEvent('sorting-changed', {
|
|
700
|
+
detail: {
|
|
701
|
+
key,
|
|
702
|
+
sortingKey,
|
|
703
|
+
direction
|
|
704
|
+
},
|
|
705
|
+
bubbles: true
|
|
706
|
+
});
|
|
707
|
+
this.elementRef.nativeElement.dispatchEvent(domEvent);
|
|
708
|
+
}
|
|
709
|
+
ngOnDestroy() {
|
|
710
|
+
this.unsubscribeClickStream();
|
|
711
|
+
}
|
|
712
|
+
getNameColumnValue() {
|
|
713
|
+
return this.data.getColumns().find((el) => el.key.includes('name'));
|
|
714
|
+
}
|
|
715
|
+
getAutomationValue(row) {
|
|
716
|
+
const name = this.getNameColumnValue();
|
|
717
|
+
return name ? row.getValue(name.key) : '';
|
|
718
|
+
}
|
|
719
|
+
getAriaSort(column) {
|
|
720
|
+
if (!this.isColumnSortActive(column)) {
|
|
721
|
+
return 'ADF-DATATABLE.ACCESSIBILITY.SORT_NONE';
|
|
722
|
+
}
|
|
723
|
+
return this.isColumnSorted(column, 'asc') ? 'ADF-DATATABLE.ACCESSIBILITY.SORT_ASCENDING' : 'ADF-DATATABLE.ACCESSIBILITY.SORT_DESCENDING';
|
|
724
|
+
}
|
|
725
|
+
getSortLiveAnnouncement(column) {
|
|
726
|
+
if (!this.isColumnSortActive(column)) {
|
|
727
|
+
return 'ADF-DATATABLE.ACCESSIBILITY.SORT_DEFAULT';
|
|
728
|
+
}
|
|
729
|
+
return this.isColumnSorted(column, 'asc')
|
|
730
|
+
? 'ADF-DATATABLE.ACCESSIBILITY.SORT_ASCENDING_BY'
|
|
731
|
+
: 'ADF-DATATABLE.ACCESSIBILITY.SORT_DESCENDING_BY';
|
|
732
|
+
}
|
|
733
|
+
registerDragHandleIcon() {
|
|
734
|
+
const iconUrl = this.sanitizer.bypassSecurityTrustResourceUrl('./assets/images/drag_indicator_24px.svg');
|
|
735
|
+
this.matIconRegistry.addSvgIconInNamespace('adf', 'drag_indicator', iconUrl);
|
|
736
|
+
}
|
|
737
|
+
onResizing({ rectangle: { width } }, colIndex) {
|
|
738
|
+
const timeoutId = setTimeout(() => {
|
|
739
|
+
const allColumns = this.getVisibleColumns();
|
|
740
|
+
allColumns[colIndex].width = width;
|
|
741
|
+
this.data.setColumns(allColumns);
|
|
742
|
+
if (!this.isResizing) {
|
|
743
|
+
clearTimeout(timeoutId);
|
|
744
|
+
}
|
|
745
|
+
});
|
|
746
|
+
}
|
|
747
|
+
onResizingEnd() {
|
|
748
|
+
this.resizingColumnIndex = -1;
|
|
749
|
+
this.updateColumnsWidths();
|
|
750
|
+
}
|
|
751
|
+
getFlexValue({ width = 0 }) {
|
|
752
|
+
return `0 1 ${width < DataTableComponent.MINIMUM_COLUMN_SIZE ? DataTableComponent.MINIMUM_COLUMN_SIZE : width}px`;
|
|
753
|
+
}
|
|
754
|
+
filterDisabledColumns(index, _drag, drop) {
|
|
755
|
+
return !drop.getSortedItems()[index].disabled;
|
|
756
|
+
}
|
|
757
|
+
onDragDrop(droppedEvent) {
|
|
758
|
+
if (this.enableDragRows) {
|
|
759
|
+
this.dragDropped.emit({ previousIndex: droppedEvent.previousIndex, currentIndex: droppedEvent.currentIndex });
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
onDragStart() {
|
|
763
|
+
this.isDraggingRow = true;
|
|
764
|
+
}
|
|
765
|
+
onDragEnd() {
|
|
766
|
+
this.isDraggingRow = false;
|
|
767
|
+
}
|
|
768
|
+
updateColumnsWidths() {
|
|
769
|
+
const allColumns = this.data.getColumns();
|
|
770
|
+
const headerContainer = document.querySelector('.adf-datatable-header');
|
|
771
|
+
if (headerContainer) {
|
|
772
|
+
const headerContainerColumns = headerContainer.querySelectorAll('.adf-datatable-cell-header:not(.adf-datatable-checkbox)');
|
|
773
|
+
headerContainerColumns.forEach((column, index) => {
|
|
774
|
+
if (allColumns[index]) {
|
|
775
|
+
if (index === 0) {
|
|
776
|
+
allColumns[index].width = column.clientWidth - parseInt(window.getComputedStyle(column).paddingLeft, 10);
|
|
777
|
+
}
|
|
778
|
+
else if (index === headerContainerColumns.length - 1) {
|
|
779
|
+
allColumns[index].width = column.clientWidth - parseInt(window.getComputedStyle(column).paddingRight, 10);
|
|
780
|
+
}
|
|
781
|
+
else {
|
|
782
|
+
allColumns[index].width = column.clientWidth;
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
});
|
|
786
|
+
}
|
|
787
|
+
this.data.setColumns(allColumns);
|
|
788
|
+
this.columnsWidthChanged.emit(allColumns);
|
|
789
|
+
}
|
|
790
|
+
isSortingEqual(col, direction, sorting) {
|
|
791
|
+
return sorting && (sorting.key === col.key || sorting.key === col.sortingKey) && sorting.direction?.toLocaleLowerCase() === direction;
|
|
792
|
+
}
|
|
793
|
+
get isResizing() {
|
|
794
|
+
return this.resizingColumnIndex >= 0;
|
|
795
|
+
}
|
|
796
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.IterableDiffers }, { token: i1.MatIconRegistry }, { token: i2.DomSanitizer }, { token: i3.ConfigurableFocusTrapFactory }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
797
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataTableComponent, isStandalone: true, selector: "adf-datatable", inputs: { data: "data", rows: "rows", sorting: "sorting", columns: "columns", selectionMode: "selectionMode", multiselect: "multiselect", mainTableAction: "mainTableAction", actions: "actions", showMainDatatableActions: "showMainDatatableActions", showProvidedActions: "showProvidedActions", actionsPosition: "actionsPosition", actionsVisibleOnHover: "actionsVisibleOnHover", fallbackThumbnail: "fallbackThumbnail", contextMenu: "contextMenu", rowStyle: "rowStyle", rowStyleClass: "rowStyleClass", showHeader: "showHeader", stickyHeader: "stickyHeader", loading: "loading", noPermission: "noPermission", rowMenuCacheEnabled: "rowMenuCacheEnabled", resolverFn: "resolverFn", allowFiltering: "allowFiltering", isResizingEnabled: "isResizingEnabled", blurOnResize: "blurOnResize", displayCheckboxesOnHover: "displayCheckboxesOnHover", enableDragRows: "enableDragRows" }, outputs: { rowClick: "rowClick", rowDblClick: "rowDblClick", showRowContextMenu: "showRowContextMenu", showRowActionsMenu: "showRowActionsMenu", executeRowAction: "executeRowAction", columnOrderChanged: "columnOrderChanged", columnsWidthChanged: "columnsWidthChanged", selectedItemsCountChanged: "selectedItemsCountChanged", dragDropped: "dragDropped" }, host: { listeners: { "keyup": "onKeydown($event)" }, classAttribute: "adf-datatable" }, queries: [{ propertyName: "columnList", first: true, predicate: DataColumnListComponent, descendants: true }], viewQueries: [{ propertyName: "mainMenuTemplate", first: true, predicate: ["mainMenuTemplate"], descendants: true }, { propertyName: "rowsList", predicate: DataTableRowComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n role=\"grid\"\n *ngIf=\"data\"\n class=\"adf-full-width adf-datatable-list\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\"\n>\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n role=\"row\">\n\n\n <!-- Drag -->\n <div *ngIf=\"enableDragRows\" class=\"adf-datatable-cell-header adf-drag-column\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate }}</span>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\"\n [checked]=\"isSelectAllChecked\"\n (change)=\"onSelectAllClick($event)\"\n class=\"adf-checkbox-sr-only\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}\n </mat-checkbox>\n </div>\n\n <ng-container\n *ngFor=\"\n let col of getVisibleColumns();\n let columnIndex = index\n let lastColumn = last\"\n >\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngIf=\"col.title || !showProvidedActions\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"(col.title | translate) + (col.subtitle ? ' ' + col.subtitle : '')\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\"\n [dropColumn]=\"col\"\n >\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span\n *ngIf=\"col.title\"\n title=\"{{col.title | translate}}\"\n class=\"adf-datatable-cell-value\"\n >\n {{col.title | translate}}\n </span>\n\n <span\n *ngIf=\"col.subtitle\"\n title=\"{{col.subtitle | translate}}\"\n class=\"adf-datatable-cell-value adf-datatable-cell-header_subtitle\"\n >\n ({{col.subtitle | translate}})\n </span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n class=\"adf-datatable-cell-header-drag-icon-visible\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\" />\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n tabindex=\"0\"\n role=\"button\"\n (click)=\"$event.stopPropagation()\"\n (keyup.enter)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n </ng-container>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n [class.adf-datatable-actions-menu-provided]=\"showProvidedActions\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n title=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (click)=\"onMainMenuOpen()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu (closed)=\"onMainMenuClosed()\">\n <div #mainMenuTemplate role=\"presentation\" (keydown.tab)=\"$event.stopPropagation()\">\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\" />\n </div>\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n </div>\n\n <div\n *ngIf=\"!loading; else loadingRowTemplate\"\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing), 'adf-datatable-body__draggable': enableDragRows && !isDraggingRow, 'adf-datatable-body__dragging': isDraggingRow }\"\n cdkDropList\n [cdkDropListDisabled]=\"!enableDragRows\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!noPermission; else noPermissionsRowTemplate\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n cdkDrag\n [cdkDragDisabled]=\"!enableDragRows\"\n (cdkDragDropped)=\"onDragDrop($event)\"\n (cdkDragStarted)=\"onDragStart()\"\n (cdkDragEnded)=\"onDragEnd()\"\n [cdkDragBoundary]=\"'.adf-datatable-body'\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [class.adf-datatable-row__dragging]=\"isDraggingRow\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Drag button -->\n <div *ngIf=\"enableDragRows\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-hover-only\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate\">\n <mat-icon>drag_indicator</mat-icon>\n </button>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n (click)=\"onCheckboxLabelClick(row, $event)\"\n [for]=\"'select-file-' + idx\"\n class=\"adf-datatable-cell adf-datatable-checkbox adf-datatable-checkbox-single\"\n tabindex=\"0\">\n <mat-checkbox\n [id]=\"'select-file-' + idx\"\n [disabled]=\"!row?.isSelectable\"\n [class.adf-datatable-checkbox-selected]=\"row.isSelected\"\n [class.adf-datatable-hover-only]=\"displayCheckboxesOnHover\"\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate\"\n data-adf-datatable-row-checkbox\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n\n <div\n *ngFor=\"let col of getVisibleColumns(); let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n tabindex=\"0\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n >\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\" />\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n />\n </div>\n <div\n *ngSwitchCase=\"'date'\"\n class=\"adf-cell-value adf-cell-date\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \">\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\" />\n </div>\n\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\" />\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\" />\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\" />\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\" />\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n !showProvidedActions &&\n ((actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions))\"\n role=\"gridcell\"\n tabindex=\"0\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\" role=\"row\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\" />\n <ng-content select=\"adf-empty-list\" />\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPermissionsRowTemplate>\n <div\n role=\"row\"\n class=\"adf-datatable-row adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\" />\n </div>\n </div>\n </ng-template>\n </div>\n <ng-template #loadingRowTemplate>\n <div class=\"adf-datatable-row adf-datatable-data-loading\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\" />\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-list,.cdk-drag-preview{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie,.cdk-drag-preview .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie,.cdk-drag-preview .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie,.cdk-drag-preview .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header,.cdk-drag-preview .adf-datatable-header{display:flex;flex-direction:column;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row,.cdk-drag-preview .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:not(.adf-datatable-data-loading):hover,.adf-datatable-list .adf-datatable-row:not(.adf-datatable-data-loading):focus,.cdk-drag-preview .adf-datatable-row:not(.adf-datatable-data-loading):hover,.cdk-drag-preview .adf-datatable-row:not(.adf-datatable-data-loading):focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus,.cdk-drag-preview .adf-datatable-row .adf-cell-value:focus,.cdk-drag-preview .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body,.cdk-drag-preview .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body,.cdk-drag-preview .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body.adf-datatable-body__draggable,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__draggable{cursor:grab}.adf-datatable-list .adf-datatable-body.adf-datatable-body__dragging,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__dragging{cursor:grabbing}.adf-datatable-list .adf-datatable-body .adf-datatable-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-drag-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-drag-row{cursor:grab}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child,.cdk-drag-preview .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-body .adf-datatable-row label,.cdk-drag-preview .adf-datatable-body .adf-datatable-row label{cursor:inherit}.adf-datatable-list .adf-datatable-row,.cdk-drag-preview .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row:hover .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row:hover .adf-datatable-hover-only{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only{visibility:hidden}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text,.cdk-drag-preview .adf-datatable-cell--text,.cdk-drag-preview .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date,.cdk-drag-preview .adf-datatable-cell--date,.cdk-drag-preview .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number,.cdk-drag-preview .adf-datatable-cell--number,.cdk-drag-preview .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon,.cdk-drag-preview .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--icon,.cdk-drag-preview .adf-datatable-cell-header--image,.cdk-drag-preview .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize,.cdk-drag-preview .adf-datatable-cell--fileSize,.cdk-drag-preview .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell button .mat-icon,.adf-datatable-list .adf-datatable-cell-header button .mat-icon,.cdk-drag-preview .adf-datatable-cell button .mat-icon,.cdk-drag-preview .adf-datatable-cell-header button .mat-icon{margin-top:-10px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex;align-self:stretch}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child,.cdk-drag-preview .adf-datatable-cell:first-child,.cdk-drag-preview .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell.adf-drag-column,.adf-datatable-list .adf-datatable-cell-header.adf-drag-column,.cdk-drag-preview .adf-datatable-cell.adf-drag-column,.cdk-drag-preview .adf-datatable-cell-header.adf-drag-column{flex:0}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu-provided,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu-provided{max-width:100px!important;justify-content:center;padding-right:0}.adf-datatable-list .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-checkbox{display:flex;justify-content:center}.adf-datatable-list .adf-cell-value,.cdk-drag-preview .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable__actions-cell,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value,.cdk-drag-preview .adf-datatable__actions-cell .adf-cell-value,.cdk-drag-preview .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{visibility:hidden}.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a,.cdk-drag-preview .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover,.cdk-drag-preview .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only,.cdk-drag-preview .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected,.cdk-drag-preview .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link,.cdk-drag-preview .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover,.cdk-drag-preview .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell,.cdk-drag-preview .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after,.cdk-drag-preview .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container,.cdk-drag-preview .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img,.cdk-drag-preview .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover,.cdk-drag-preview .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell,.cdk-drag-preview .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden,.cdk-drag-preview .adf-hidden{display:none}@media all and (width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (device-width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header_subtitle{margin-left:3px;opacity:.6}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon-visible{display:flex}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{min-height:var(--theme-display-3-font-size);display:flex;flex-direction:row;align-items:center;box-sizing:unset;background-color:var(--theme-background-color);border-top:2px solid var(--theme-selected-background-color);opacity:1}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mdc-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (width <= 380px){.adf-datatable-header{max-height:50%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i4.UpperCasePipe, name: "uppercase" }, { kind: "component", type: DataTableRowComponent, selector: "adf-datatable-row", inputs: ["row", "disabled"], outputs: ["select"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: DropZoneDirective, selector: "[adf-drop-zone]", inputs: ["dropTarget", "dropRow", "dropColumn"] }, { kind: "directive", type: ResizableDirective, selector: "[adf-resizable]", inputs: ["coverPadding"], outputs: ["resizeStart", "resizing", "resizeEnd"], exportAs: ["adf-resizable"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "directive", type: ResizeHandleDirective, selector: "[adf-resize-handle]", inputs: ["resizableContainer"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: UploadDirective, selector: "[adf-upload]", inputs: ["adf-upload", "adf-upload-data", "mode", "multiple", "accept", "directory"] }, { kind: "directive", type: ContextMenuDirective, selector: "[adf-context-menu]", inputs: ["adf-context-menu", "adf-context-menu-enabled"] }, { kind: "pipe", type: FileTypePipe, name: "fileType" }, { kind: "component", type: IconCellComponent, selector: "adf-icon-cell" }, { kind: "pipe", type: LocalizedDatePipe, name: "adfLocalizedDate" }, { kind: "component", type: DateCellComponent, selector: "adf-date-cell", inputs: ["dateConfig"] }, { kind: "component", type: LocationCellComponent, selector: "adf-location-cell", inputs: ["link"] }, { kind: "component", type: FileSizeCellComponent, selector: "adf-filesize-cell" }, { kind: "component", type: DataTableCellComponent, selector: "adf-datatable-cell", inputs: ["data", "column", "row", "copyContent", "tooltip", "resolverFn"] }, { kind: "component", type: BooleanCellComponent, selector: "adf-boolean-cell" }, { kind: "component", type: JsonCellComponent, selector: "adf-json-cell", inputs: ["editable"] }, { kind: "component", type: AmountCellComponent, selector: "adf-amount-cell", inputs: ["currencyConfig"] }, { kind: "component", type: NumberCellComponent, selector: "adf-number-cell", inputs: ["decimalConfig"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
798
|
+
}
|
|
799
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
800
|
+
type: Component,
|
|
801
|
+
args: [{ selector: 'adf-datatable', standalone: true, imports: [
|
|
802
|
+
CommonModule,
|
|
803
|
+
DataTableRowComponent,
|
|
804
|
+
CdkDropList,
|
|
805
|
+
TranslateModule,
|
|
806
|
+
MatCheckboxModule,
|
|
807
|
+
CdkDrag,
|
|
808
|
+
DropZoneDirective,
|
|
809
|
+
ResizableDirective,
|
|
810
|
+
CdkDragHandle,
|
|
811
|
+
IconComponent,
|
|
812
|
+
ResizeHandleDirective,
|
|
813
|
+
MatButtonModule,
|
|
814
|
+
MatMenuModule,
|
|
815
|
+
MatIconModule,
|
|
816
|
+
UploadDirective,
|
|
817
|
+
ContextMenuDirective,
|
|
818
|
+
FileTypePipe,
|
|
819
|
+
IconCellComponent,
|
|
820
|
+
LocalizedDatePipe,
|
|
821
|
+
DateCellComponent,
|
|
822
|
+
LocationCellComponent,
|
|
823
|
+
FileSizeCellComponent,
|
|
824
|
+
DataTableCellComponent,
|
|
825
|
+
BooleanCellComponent,
|
|
826
|
+
JsonCellComponent,
|
|
827
|
+
AmountCellComponent,
|
|
828
|
+
NumberCellComponent
|
|
829
|
+
], encapsulation: ViewEncapsulation.None, host: { class: 'adf-datatable' }, template: "<div\n role=\"grid\"\n *ngIf=\"data\"\n class=\"adf-full-width adf-datatable-list\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\"\n>\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n role=\"row\">\n\n\n <!-- Drag -->\n <div *ngIf=\"enableDragRows\" class=\"adf-datatable-cell-header adf-drag-column\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate }}</span>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\"\n [checked]=\"isSelectAllChecked\"\n (change)=\"onSelectAllClick($event)\"\n class=\"adf-checkbox-sr-only\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}\n </mat-checkbox>\n </div>\n\n <ng-container\n *ngFor=\"\n let col of getVisibleColumns();\n let columnIndex = index\n let lastColumn = last\"\n >\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngIf=\"col.title || !showProvidedActions\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"(col.title | translate) + (col.subtitle ? ' ' + col.subtitle : '')\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\"\n [dropColumn]=\"col\"\n >\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span\n *ngIf=\"col.title\"\n title=\"{{col.title | translate}}\"\n class=\"adf-datatable-cell-value\"\n >\n {{col.title | translate}}\n </span>\n\n <span\n *ngIf=\"col.subtitle\"\n title=\"{{col.subtitle | translate}}\"\n class=\"adf-datatable-cell-value adf-datatable-cell-header_subtitle\"\n >\n ({{col.subtitle | translate}})\n </span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n class=\"adf-datatable-cell-header-drag-icon-visible\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\" />\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n tabindex=\"0\"\n role=\"button\"\n (click)=\"$event.stopPropagation()\"\n (keyup.enter)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n </ng-container>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n [class.adf-datatable-actions-menu-provided]=\"showProvidedActions\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n title=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (click)=\"onMainMenuOpen()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu (closed)=\"onMainMenuClosed()\">\n <div #mainMenuTemplate role=\"presentation\" (keydown.tab)=\"$event.stopPropagation()\">\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\" />\n </div>\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n </div>\n\n <div\n *ngIf=\"!loading; else loadingRowTemplate\"\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing), 'adf-datatable-body__draggable': enableDragRows && !isDraggingRow, 'adf-datatable-body__dragging': isDraggingRow }\"\n cdkDropList\n [cdkDropListDisabled]=\"!enableDragRows\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!noPermission; else noPermissionsRowTemplate\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n cdkDrag\n [cdkDragDisabled]=\"!enableDragRows\"\n (cdkDragDropped)=\"onDragDrop($event)\"\n (cdkDragStarted)=\"onDragStart()\"\n (cdkDragEnded)=\"onDragEnd()\"\n [cdkDragBoundary]=\"'.adf-datatable-body'\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [class.adf-datatable-row__dragging]=\"isDraggingRow\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Drag button -->\n <div *ngIf=\"enableDragRows\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-hover-only\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate\">\n <mat-icon>drag_indicator</mat-icon>\n </button>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n (click)=\"onCheckboxLabelClick(row, $event)\"\n [for]=\"'select-file-' + idx\"\n class=\"adf-datatable-cell adf-datatable-checkbox adf-datatable-checkbox-single\"\n tabindex=\"0\">\n <mat-checkbox\n [id]=\"'select-file-' + idx\"\n [disabled]=\"!row?.isSelectable\"\n [class.adf-datatable-checkbox-selected]=\"row.isSelected\"\n [class.adf-datatable-hover-only]=\"displayCheckboxesOnHover\"\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate\"\n data-adf-datatable-row-checkbox\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n\n <div\n *ngFor=\"let col of getVisibleColumns(); let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n tabindex=\"0\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n >\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\" />\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n />\n </div>\n <div\n *ngSwitchCase=\"'date'\"\n class=\"adf-cell-value adf-cell-date\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \">\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\" />\n </div>\n\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\" />\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\" />\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\" />\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\" />\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n !showProvidedActions &&\n ((actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions))\"\n role=\"gridcell\"\n tabindex=\"0\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\" role=\"row\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\" />\n <ng-content select=\"adf-empty-list\" />\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPermissionsRowTemplate>\n <div\n role=\"row\"\n class=\"adf-datatable-row adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\" />\n </div>\n </div>\n </ng-template>\n </div>\n <ng-template #loadingRowTemplate>\n <div class=\"adf-datatable-row adf-datatable-data-loading\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\" />\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-list,.cdk-drag-preview{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie,.cdk-drag-preview .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie,.cdk-drag-preview .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie,.cdk-drag-preview .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header,.cdk-drag-preview .adf-datatable-header{display:flex;flex-direction:column;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row,.cdk-drag-preview .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:not(.adf-datatable-data-loading):hover,.adf-datatable-list .adf-datatable-row:not(.adf-datatable-data-loading):focus,.cdk-drag-preview .adf-datatable-row:not(.adf-datatable-data-loading):hover,.cdk-drag-preview .adf-datatable-row:not(.adf-datatable-data-loading):focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus,.cdk-drag-preview .adf-datatable-row .adf-cell-value:focus,.cdk-drag-preview .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body,.cdk-drag-preview .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body,.cdk-drag-preview .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body.adf-datatable-body__draggable,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__draggable{cursor:grab}.adf-datatable-list .adf-datatable-body.adf-datatable-body__dragging,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__dragging{cursor:grabbing}.adf-datatable-list .adf-datatable-body .adf-datatable-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-drag-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-drag-row{cursor:grab}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child,.cdk-drag-preview .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-body .adf-datatable-row label,.cdk-drag-preview .adf-datatable-body .adf-datatable-row label{cursor:inherit}.adf-datatable-list .adf-datatable-row,.cdk-drag-preview .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row:hover .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row:hover .adf-datatable-hover-only{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only{visibility:hidden}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text,.cdk-drag-preview .adf-datatable-cell--text,.cdk-drag-preview .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date,.cdk-drag-preview .adf-datatable-cell--date,.cdk-drag-preview .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number,.cdk-drag-preview .adf-datatable-cell--number,.cdk-drag-preview .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon,.cdk-drag-preview .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--icon,.cdk-drag-preview .adf-datatable-cell-header--image,.cdk-drag-preview .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize,.cdk-drag-preview .adf-datatable-cell--fileSize,.cdk-drag-preview .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell button .mat-icon,.adf-datatable-list .adf-datatable-cell-header button .mat-icon,.cdk-drag-preview .adf-datatable-cell button .mat-icon,.cdk-drag-preview .adf-datatable-cell-header button .mat-icon{margin-top:-10px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex;align-self:stretch}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child,.cdk-drag-preview .adf-datatable-cell:first-child,.cdk-drag-preview .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell.adf-drag-column,.adf-datatable-list .adf-datatable-cell-header.adf-drag-column,.cdk-drag-preview .adf-datatable-cell.adf-drag-column,.cdk-drag-preview .adf-datatable-cell-header.adf-drag-column{flex:0}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu-provided,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu-provided{max-width:100px!important;justify-content:center;padding-right:0}.adf-datatable-list .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-checkbox{display:flex;justify-content:center}.adf-datatable-list .adf-cell-value,.cdk-drag-preview .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable__actions-cell,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value,.cdk-drag-preview .adf-datatable__actions-cell .adf-cell-value,.cdk-drag-preview .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{visibility:hidden}.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a,.cdk-drag-preview .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover,.cdk-drag-preview .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only,.cdk-drag-preview .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected,.cdk-drag-preview .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link,.cdk-drag-preview .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover,.cdk-drag-preview .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell,.cdk-drag-preview .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after,.cdk-drag-preview .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container,.cdk-drag-preview .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img,.cdk-drag-preview .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover,.cdk-drag-preview .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell,.cdk-drag-preview .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden,.cdk-drag-preview .adf-hidden{display:none}@media all and (width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (device-width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header_subtitle{margin-left:3px;opacity:.6}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon-visible{display:flex}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{min-height:var(--theme-display-3-font-size);display:flex;flex-direction:row;align-items:center;box-sizing:unset;background-color:var(--theme-background-color);border-top:2px solid var(--theme-selected-background-color);opacity:1}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mdc-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (width <= 380px){.adf-datatable-header{max-height:50%}}\n"] }]
|
|
830
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.IterableDiffers }, { type: i1.MatIconRegistry }, { type: i2.DomSanitizer }, { type: i3.ConfigurableFocusTrapFactory }], propDecorators: { rowsList: [{
|
|
831
|
+
type: ViewChildren,
|
|
832
|
+
args: [DataTableRowComponent]
|
|
833
|
+
}], mainMenuTemplate: [{
|
|
834
|
+
type: ViewChild,
|
|
835
|
+
args: ['mainMenuTemplate']
|
|
836
|
+
}], columnList: [{
|
|
837
|
+
type: ContentChild,
|
|
838
|
+
args: [DataColumnListComponent]
|
|
839
|
+
}], data: [{
|
|
840
|
+
type: Input
|
|
841
|
+
}], rows: [{
|
|
842
|
+
type: Input
|
|
843
|
+
}], sorting: [{
|
|
844
|
+
type: Input
|
|
845
|
+
}], columns: [{
|
|
846
|
+
type: Input
|
|
847
|
+
}], selectionMode: [{
|
|
848
|
+
type: Input
|
|
849
|
+
}], multiselect: [{
|
|
850
|
+
type: Input
|
|
851
|
+
}], mainTableAction: [{
|
|
852
|
+
type: Input
|
|
853
|
+
}], actions: [{
|
|
854
|
+
type: Input
|
|
855
|
+
}], showMainDatatableActions: [{
|
|
856
|
+
type: Input
|
|
857
|
+
}], showProvidedActions: [{
|
|
858
|
+
type: Input
|
|
859
|
+
}], actionsPosition: [{
|
|
860
|
+
type: Input
|
|
861
|
+
}], actionsVisibleOnHover: [{
|
|
862
|
+
type: Input
|
|
863
|
+
}], fallbackThumbnail: [{
|
|
864
|
+
type: Input
|
|
865
|
+
}], contextMenu: [{
|
|
866
|
+
type: Input
|
|
867
|
+
}], rowStyle: [{
|
|
868
|
+
type: Input
|
|
869
|
+
}], rowStyleClass: [{
|
|
870
|
+
type: Input
|
|
871
|
+
}], showHeader: [{
|
|
872
|
+
type: Input
|
|
873
|
+
}], stickyHeader: [{
|
|
874
|
+
type: Input
|
|
875
|
+
}], rowClick: [{
|
|
876
|
+
type: Output
|
|
877
|
+
}], rowDblClick: [{
|
|
878
|
+
type: Output
|
|
879
|
+
}], showRowContextMenu: [{
|
|
880
|
+
type: Output
|
|
881
|
+
}], showRowActionsMenu: [{
|
|
882
|
+
type: Output
|
|
883
|
+
}], executeRowAction: [{
|
|
884
|
+
type: Output
|
|
885
|
+
}], columnOrderChanged: [{
|
|
886
|
+
type: Output
|
|
887
|
+
}], columnsWidthChanged: [{
|
|
888
|
+
type: Output
|
|
889
|
+
}], selectedItemsCountChanged: [{
|
|
890
|
+
type: Output
|
|
891
|
+
}], loading: [{
|
|
892
|
+
type: Input
|
|
893
|
+
}], noPermission: [{
|
|
894
|
+
type: Input
|
|
895
|
+
}], rowMenuCacheEnabled: [{
|
|
896
|
+
type: Input
|
|
897
|
+
}], resolverFn: [{
|
|
898
|
+
type: Input
|
|
899
|
+
}], allowFiltering: [{
|
|
900
|
+
type: Input
|
|
901
|
+
}], isResizingEnabled: [{
|
|
902
|
+
type: Input
|
|
903
|
+
}], blurOnResize: [{
|
|
904
|
+
type: Input
|
|
905
|
+
}], displayCheckboxesOnHover: [{
|
|
906
|
+
type: Input
|
|
907
|
+
}], enableDragRows: [{
|
|
908
|
+
type: Input
|
|
909
|
+
}], dragDropped: [{
|
|
910
|
+
type: Output
|
|
911
|
+
}], onKeydown: [{
|
|
912
|
+
type: HostListener,
|
|
913
|
+
args: ['keyup', ['$event']]
|
|
914
|
+
}] } });
|
|
915
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZGF0YXRhYmxlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2RhdGF0YWJsZS9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsNkRBQTZEO0FBRTdELE9BQU8sRUFHSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFFVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFJZixNQUFNLEVBQ04sU0FBUyxFQUlULFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBeUIsNEJBQTRCLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekcsT0FBTyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQWtCLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBMEIsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRS9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNB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RHhCLE1BQU07Z0JBUVAsT0FBTztzQkFETixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFRTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBUU4sVUFBVTtzQkFEVCxLQUFLO2dCQU9OLGNBQWM7c0JBRGIsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLHdCQUF3QjtzQkFEdkIsS0FBSztnQkFPTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sV0FBVztzQkFEVixNQUFNO2dCQWlDUCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlICovXG5cbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGVzdHJveVJlZixcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ3VyYWJsZUZvY3VzVHJhcCwgQ29uZmlndXJhYmxlRm9jdXNUcmFwRmFjdG9yeSwgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UsIE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSwgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGFDb2x1bW5MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGF0YS1jb2x1bW4vZGF0YS1jb2x1bW4tbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YUNvbHVtbiB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YS1jb2x1bW4ubW9kZWwnO1xuaW1wb3J0IHsgRGF0YVJvd0V2ZW50IH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLXJvdy1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhUm93IH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLXJvdy5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhU29ydGluZyB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YS1zb3J0aW5nLm1vZGVsJztcbmltcG9ydCB7IERhdGFUYWJsZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGF0YWJsZS1hZGFwdGVyJztcbmltcG9ydCB7IERhdGFUYWJsZVJvd0NvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1yb3cvZGF0YXRhYmxlLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JqZWN0RGF0YVJvdyB9IGZyb20gJy4uLy4uL2RhdGEvb2JqZWN0LWRhdGFyb3cubW9kZWwnO1xuaW1wb3J0IHsgT2JqZWN0RGF0YUNvbHVtbiB9IGZyb20gJy4uLy4uL2RhdGEvb2JqZWN0LWRhdGFjb2x1bW4ubW9kZWwnO1xuaW1wb3J0IHsgT2JqZWN0RGF0YVRhYmxlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEvb2JqZWN0LWRhdGF0YWJsZS1hZGFwdGVyJztcbmltcG9ydCB7IERhdGFDZWxsRXZlbnQgfSBmcm9tICcuLi9kYXRhLWNlbGwuZXZlbnQnO1xuaW1wb3J0IHsgRGF0YVJvd0FjdGlvbkV2ZW50IH0gZnJvbSAnLi4vZGF0YS1yb3ctYWN0aW9uLmV2ZW50JztcbmltcG9ydCB7IGJ1ZmZlciwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgc2hhcmUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0hhbmRsZSwgQ2RrRHJvcExpc3QsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSwgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFJlc2l6ZUV2ZW50IH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yZXNpemFibGUvdHlwZXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRmlsZVR5cGVQaXBlLCBMb2NhbGl6ZWREYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzJztcbmltcG9ydCB7IERyb3Bab25lRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9kcm9wLXpvbmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJlc2l6YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVzaXphYmxlL3Jlc2l6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgUmVzaXplSGFuZGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yZXNpemFibGUvcmVzaXplLWhhbmRsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFVwbG9hZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0LW1lbnUnO1xuaW1wb3J0IHsgSWNvbkNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9pY29uLWNlbGwvaWNvbi1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtY2VsbC9kYXRlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IExvY2F0aW9uQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2xvY2F0aW9uLWNlbGwvbG9jYXRpb24tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZVNpemVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZXNpemUtY2VsbC9maWxlc2l6ZS1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhVGFibGVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWNlbGwvZGF0YXRhYmxlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2xlYW5DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vYm9vbGVhbi1jZWxsL2Jvb2xlYW4tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSnNvbkNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9qc29uLWNlbGwvanNvbi1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbW91bnRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vYW1vdW50LWNlbGwvYW1vdW50LWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IE51bWJlckNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9udW1iZXItY2VsbC9udW1iZXItY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG5leHBvcnQgZW51bSBTaG93SGVhZGVyTW9kZSB7XG4gICAgTmV2ZXIgPSAnbmV2ZXInLFxuICAgIEFsd2F5cyA9ICdhbHdheXMnLFxuICAgIERhdGEgPSAnZGF0YSdcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtZGF0YXRhYmxlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBEYXRhVGFibGVSb3dDb21wb25lbnQsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBDZGtEcmFnLFxuICAgICAgICBEcm9wWm9uZURpcmVjdGl2ZSxcbiAgICAgICAgUmVzaXphYmxlRGlyZWN0aXZlLFxuICAgICAgICBDZGtEcmFnSGFuZGxlLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBSZXNpemVIYW5kbGVEaXJlY3RpdmUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgVXBsb2FkRGlyZWN0aXZlLFxuICAgICAgICBDb250ZXh0TWVudURpcmVjdGl2ZSxcbiAgICAgICAgRmlsZVR5cGVQaXBlLFxuICAgICAgICBJY29uQ2VsbENvbXBvbmVudCxcbiAgICAgICAgTG9jYWxpemVkRGF0ZVBpcGUsXG4gICAgICAgIERhdGVDZWxsQ29tcG9uZW50LFxuICAgICAgICBMb2NhdGlvbkNlbGxDb21wb25lbnQsXG4gICAgICAgIEZpbGVTaXplQ2VsbENvbXBvbmVudCxcbiAgICAgICAgRGF0YVRhYmxlQ2VsbENvbXBvbmVudCxcbiAgICAgICAgQm9vbGVhbkNlbGxDb21wb25lbnQsXG4gICAgICAgIEpzb25DZWxsQ29tcG9uZW50LFxuICAgICAgICBBbW91bnRDZWxsQ29tcG9uZW50LFxuICAgICAgICBOdW1iZXJDZWxsQ29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdhZGYtZGF0YXRhYmxlJyB9XG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzLCBEb0NoZWNrLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIHByaXZhdGUgc3RhdGljIE1JTklNVU1fQ09MVU1OX1NJWkUgPSAxMDA7XG5cbiAgICBAVmlld0NoaWxkcmVuKERhdGFUYWJsZVJvd0NvbXBvbmVudClcbiAgICByb3dzTGlzdDogUXVlcnlMaXN0PERhdGFUYWJsZVJvd0NvbXBvbmVudD47XG5cbiAgICBAVmlld0NoaWxkKCdtYWluTWVudVRlbXBsYXRlJylcbiAgICBtYWluTWVudVRlbXBsYXRlOiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZChEYXRhQ29sdW1uTGlzdENvbXBvbmVudClcbiAgICBjb2x1bW5MaXN0OiBEYXRhQ29sdW1uTGlzdENvbXBvbmVudDtcblxuICAgIC8qKiBEYXRhIHNvdXJjZSBmb3IgdGhlIHRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBkYXRhOiBEYXRhVGFibGVBZGFwdGVyO1xuXG4gICAgLyoqIFRoZSByb3dzIHRoYXQgdGhlIGRhdGF0YWJsZSB3aWxsIHNob3cuICovXG4gICAgQElucHV0KClcbiAgICByb3dzOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lIHRoZSBzb3J0IG9yZGVyIG9mIHRoZSBkYXRhdGFibGUuIFBvc3NpYmxlIHZhbHVlcyBhcmUgOlxuICAgICAqIFtgY3JlYXRlZGAsIGBkZXNjYF0sIFtgY3JlYXRlZGAsIGBhc2NgXSwgW2BkdWVgLCBgZGVzY2BdLCBbYGR1ZWAsIGBhc2NgXVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc29ydGluZzogYW55W10gPSBbXTtcblxuICAgIC8qKiBUaGUgY29sdW1ucyB0aGF0IHRoZSBkYXRhdGFibGUgd2lsbCBzaG93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uczogYW55W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFJvdyBzZWxlY3Rpb24gbW9kZS4gQ2FuIGJlIG5vbmUsIGBzaW5nbGVgIG9yIGBtdWx0aXBsZWAuIEZvciBgbXVsdGlwbGVgIG1vZGUsXG4gICAgICogeW91IGNhbiB1c2UgQ21kIChtYWNPUykgb3IgQ3RybCAoV2luKSBtb2RpZmllciBrZXkgdG8gdG9nZ2xlIHNlbGVjdGlvbiBmb3IgbXVsdGlwbGUgcm93cy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbk1vZGU6IHN0cmluZyA9ICdzaW5nbGUnOyAvLyBub25lfHNpbmdsZXxtdWx0aXBsZVxuXG4gICAgLyoqIFRvZ2dsZXMgbXVsdGlwbGUgcm93IHNlbGVjdGlvbiwgd2hpY2ggcmVuZGVycyBjaGVja2JveGVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCByb3cuICovXG4gICAgQElucHV0KClcbiAgICBtdWx0aXNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgbWFpbiBkYXRhIHRhYmxlIGFjdGlvbiBjb2x1bW4uICovXG4gICAgQElucHV0KClcbiAgICBtYWluVGFibGVBY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGRhdGEgYWN0aW9ucyBjb2x1bW4uICovXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgbWFpbiBkYXRhdGFibGUgYWN0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd01haW5EYXRhdGFibGVBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgcHJvdmlkZWQgYWN0aW9ucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dQcm92aWRlZEFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBQb3NpdGlvbiBvZiB0aGUgYWN0aW9ucyBkcm9wZG93biBtZW51LiBDYW4gYmUgXCJsZWZ0XCIgb3IgXCJyaWdodFwiLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uc1Bvc2l0aW9uOiBzdHJpbmcgPSAncmlnaHQnOyAvLyBsZWZ0fHJpZ2h0XG5cbiAgICAvKiogVG9nZ2xlcyB3aGV0aGVyIHRoZSBhY3Rpb25zIGRyb3Bkb3duIHNob3VsZCBvbmx5IGJlIHZpc2libGUgaWYgdGhlIHJvdyBpcyBob3ZlcmVkIG92ZXIgb3IgdGhlIGRyb3Bkb3duIG1lbnUgaXMgb3Blbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbnNWaXNpYmxlT25Ib3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEZhbGxiYWNrIGltYWdlIGZvciByb3dzIHdoZXJlIHRoZSB0aHVtYm5haWwgaXMgbWlzc2luZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZhbGxiYWNrVGh1bWJuYWlsOiBzdHJpbmc7XG5cbiAgICAvKiogVG9nZ2xlcyBjdXN0b20gY29udGV4dCBtZW51IGZvciB0aGUgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29udGV4dE1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmxpbmUgc3R5bGUgdG8gYXBwbHkgdG8gZXZlcnkgcm93LiBTZWVcbiAgICAgKiBbTmdTdHlsZV0oaHR0cHM6Ly9hbmd1bGFyLmlvL2RvY3MvdHMvbGF0ZXN0L2FwaS9jb21tb24vaW5kZXgvTmdTdHlsZS1kaXJlY3RpdmUuaHRtbClcbiAgICAgKiBkb2NzIGZvciBtb3JlIGRldGFpbHMgYW5kIHVzYWdlIGV4YW1wbGVzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93U3R5bGU6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgICAvKiogVGhlIENTUyBjbGFzcyB0byBhcHBseSB0byBldmVyeSByb3cuICovXG4gICAgQElucHV0KClcbiAgICByb3dTdHlsZUNsYXNzOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBoZWFkZXIuICovXG4gICAgQElucHV0KClcbiAgICBzaG93SGVhZGVyID0gU2hvd0hlYWRlck1vZGUuRGF0YTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBzdGlja3kgaGVhZGVyIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzdGlja3lIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGEgcm93LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhUm93RXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGRvdWJsZS1jbGlja3MgYSByb3cuICovXG4gICAgQE91dHB1dCgpXG4gICAgcm93RGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFSb3dFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIGRpc3BsYXllZCBmb3IgYSByb3cuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2hvd1Jvd0NvbnRleHRNZW51ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhQ2VsbEV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgYmVmb3JlIHRoZSBhY3Rpb25zIG1lbnUgaXMgZGlzcGxheWVkIGZvciBhIHJvdy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzaG93Um93QWN0aW9uc01lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFDZWxsRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGV4ZWN1dGVzIGEgcm93IGFjdGlvbi4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBleGVjdXRlUm93QWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhUm93QWN0aW9uRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBjb2x1bW4gb3JkZXIgaXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBjb2x1bW5PcmRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFDb2x1bW5bXT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGNvbHVtbiB3aWR0aCBpcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNvbHVtbnNXaWR0aENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFDb2x1bW5bXT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIHJvdyBpdGVtcyBjb3VudCBpbiB0aGUgdGFibGUgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWxlY3RlZEl0ZW1zQ291bnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBkYXRhdGFibGUgaXMgaW4gbG9hZGluZyBzdGF0ZSBhbmQgbmVlZHMgdG8gc2hvdyB0aGVcbiAgICAgKiBsb2FkaW5nIHRlbXBsYXRlIChzZWUgdGhlIGRvY3MgdG8gbGVhcm4gaG93IHRvIGNvbmZpZ3VyZSBhIGxvYWRpbmcgdGVtcGxhdGUpLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGRhdGF0YWJsZSBzaG91bGQgc2hvdyB0aGUgXCJubyBwZXJtaXNzaW9uXCIgdGVtcGxhdGUuICovXG4gICAgQElucHV0KClcbiAgICBub1Blcm1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgaXRlbXMgZm9yIHRoZSByb3cgYWN0aW9ucyBtZW51IGJlIGNhY2hlZCBmb3IgcmV1c2UgYWZ0ZXIgdGhleSBhcmUgbG9hZGVkXG4gICAgICogdGhlIGZpcnN0IHRpbWU/XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dNZW51Q2FjaGVFbmFibGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSByZXNvbHZlciBmdW5jdGlvbiB3aGljaCBpcyB1c2VkIHRvIHBhcnNlIGR5bmFtaWMgY29sdW1uIG9iamVjdHNcbiAgICAgKiBzZWUgdGhlIGRvY3MgdG8gbGVhcm4gaG93IHRvIGNvbmZpZ3VyZSBhIHJlc29sdmVyRm4uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByZXNvbHZlckZuOiAocm93OiBEYXRhUm93LCBjb2w6IERhdGFDb2x1bW4pID0+IGFueSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgaW5kaWNhdGUgaWYgdGhlIGRhdGF0YWJsZSBhbGxvdyB0aGUgdXNlIGZhY2V0IHdpZGdldCBzZWFyY2ggZm9yIGZpbHRlcmluZy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93RmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBkYXRhdGFibGUgYWxsb3dzIGNvbHVtbiByZXNpemluZy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzUmVzaXppbmdFbmFibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBkYXRhdGFibGUgc2hvdWxkIGJlIGJsdXJyZWQgd2hlbiByZXNpemluZy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJsdXJPblJlc2l6ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHNlbGVjdGlvbiBjaGVja2JveGVzIGluc2lkZSByb3cgc2hvdWxkIGJlIGRpc3BsYXllZCBvbiBob3ZlciBvbmx5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUNoZWNrYm94ZXNPbkhvdmVyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgZW5hYmxlcyBkcmFnZ2luZyByb3dzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBlbmFibGVEcmFnUm93cyA9IGZhbHNlO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBkcmFnZ2VkIHJvdyBpcyBkcm9wcGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRyYWdEcm9wcGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7IHByZXZpb3VzSW5kZXg6IG51bWJlcjsgY3VycmVudEluZGV4OiBudW1iZXIgfT4oKTtcblxuICAgIGhlYWRlckZpbHRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIG5vQ29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIG5vUGVybWlzc2lvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIGxvYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBtYWluQWN0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBpc1NlbGVjdEFsbEluZGV0ZXJtaW5hdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpc1NlbGVjdEFsbENoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBzZWxlY3Rpb24gPSBuZXcgQXJyYXk8RGF0YVJvdz4oKTtcbiAgICBzZWxlY3RlZFJvd0lkOiBzdHJpbmcgPSAnJztcblxuICAgIGlzRHJhZ2dpbmdIZWFkZXJDb2x1bW4gPSBmYWxzZTtcbiAgICBob3ZlcmVkSGVhZGVyQ29sdW1uSW5kZXggPSAtMTtcbiAgICByZXNpemluZ0NvbHVtbkluZGV4ID0gLTE7XG4gICAgaXNEcmFnZ2luZ1JvdyA9IGZhbHNlO1xuICAgIGZvY3VzVHJhcDogQ29uZmlndXJhYmxlRm9jdXNUcmFwO1xuXG4gICAgcHJpdmF0ZSBrZXlNYW5hZ2VyOiBGb2N1c0tleU1hbmFnZXI8RGF0YVRhYmxlUm93Q29tcG9uZW50PjtcbiAgICBwcml2YXRlIGNsaWNrT2JzZXJ2ZXI6IE9ic2VydmVyPERhdGFSb3dFdmVudD47XG4gICAgcHJpdmF0ZSBjbGljayQ6IE9ic2VydmFibGU8RGF0YVJvd0V2ZW50PjtcblxuICAgIHByaXZhdGUgZGlmZmVyOiBhbnk7XG4gICAgcHJpdmF0ZSByb3dNZW51Q2FjaGU6IGFueSA9IHt9O1xuXG4gICAgcHJpdmF0ZSBzaW5nbGVDbGlja1N0cmVhbVN1YjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgbXVsdGlDbGlja1N0cmVhbVN1YjogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmtleU1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBkaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbWF0SWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZm9jdXNUcmFwRmFjdG9yeTogQ29uZmlndXJhYmxlRm9jdXNUcmFwRmFjdG9yeVxuICAgICkge1xuICAgICAgICBpZiAoZGlmZmVycykge1xuICAgICAgICAgICAgdGhpcy5kaWZmZXIgPSBkaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xpY2skID0gbmV3IE9ic2VydmFibGU8RGF0YVJvd0V2ZW50Pigob2JzZXJ2ZXIpID0+ICh0aGlzLmNsaWNrT2JzZXJ2ZXIgPSBvYnNlcnZlcikpLnBpcGUoc2hhcmUoKSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEcmFnSGFuZGxlSWNvbigpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5MaXN0LmNvbHVtbnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTY2hlbWEoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VGFibGVTY2hlbWEoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMua2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXIodGhpcy5yb3dzTGlzdCkud2l0aFdyYXAoKS5za2lwUHJlZGljYXRlKChpdGVtKSA9PiBpdGVtLmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuaW5pdEFuZFN1YnNjcmliZUNsaWNrU3RyZWFtKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93SWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Um93QXNDb250ZXh0U291cmNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhQ2hhbmdlcyA9IGNoYW5nZXNbJ2RhdGEnXTtcbiAgICAgICAgY29uc3Qgcm93Q2hhbmdlcyA9IGNoYW5nZXNbJ3Jvd3MnXTtcbiAgICAgICAgY29uc3QgY29sdW1uQ2hhbmdlcyA9IGNoYW5nZXNbJ2NvbHVtbnMnXTtcbiAgICAgICAgY29uc3QgbXVsdGlzZWxlY3RDaGFuZ2VzID0gY2hhbmdlc1snbXVsdGlzZWxlY3QnXTtcblxuICAgICAgICBpZiAodGhpcy5pc1Byb3BlcnR5Q2hhbmdlZChkYXRhQ2hhbmdlcykgfHwgdGhpcy5pc1Byb3BlcnR5Q2hhbmdlZChyb3dDaGFuZ2VzKSB8fCB0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKGNvbHVtbkNoYW5nZXMpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1RhYmxlRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFRhYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBjaGFuZ2VzWydkYXRhJ10uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJvd0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVJvd3MoY2hhbmdlc1sncm93cyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTb3J0aW5nKHRoaXMuc29ydGluZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbkNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUNvbHVtbnMoY2hhbmdlc1snY29sdW1ucyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5zZWxlY3Rpb25Nb2RlICYmICFjaGFuZ2VzLnNlbGVjdGlvbk1vZGUuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudCgncm93LXVuc2VsZWN0JywgbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1Byb3BlcnR5Q2hhbmdlZChjaGFuZ2VzWydzb3J0aW5nJ10pKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlU29ydGluZyhjaGFuZ2VzWydzb3J0aW5nJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtdWx0aXNlbGVjdENoYW5nZXM/LmN1cnJlbnRWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzQ29sdW1uU29ydEFjdGl2ZShjb2x1bW46IERhdGFDb2x1bW4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFjb2x1bW4gfHwgIXRoaXMuZGF0YS5nZXRTb3J0aW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sdW1uLmtleSA9PT0gdGhpcy5kYXRhLmdldFNvcnRpbmcoKS5rZXk7XG4gICAgfVxuXG4gICAgZ2V0VmlzaWJsZUNvbHVtbnMoKTogRGF0YUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRDb2x1bW5zKCkuZmlsdGVyKChjb2x1bW4pID0+ICFjb2x1bW4uaXNIaWRkZW4pO1xuICAgIH1cblxuICAgIG9uRHJvcEhlYWRlckNvbHVtbihldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZGF0YS5nZXRDb2x1bW5zKCk7XG4gICAgICAgIGNvbnN0IHNob3duQ29sdW1ucyA9IGFsbENvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+ICFjb2x1bW4uaXNIaWRkZW4pO1xuICAgICAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gYWxsQ29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLmlzSGlkZGVuKTtcblxuICAgICAgICBtb3ZlSXRlbUluQXJyYXkoc2hvd25Db2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICBjb25zdCBhbGxDb2x1bW5zV2l0aE5ld09yZGVyID0gWy4uLnNob3duQ29sdW1ucywgLi4uaGlkZGVuQ29sdW1uc107XG5cbiAgICAgICAgdGhpcy5zZXRUYWJsZUNvbHVtbnMoYWxsQ29sdW1uc1dpdGhOZXdPcmRlcik7XG4gICAgICAgIHRoaXMuY29sdW1uT3JkZXJDaGFuZ2VkLmVtaXQoYWxsQ29sdW1uc1dpdGhOZXdPcmRlcik7XG5cbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nSGVhZGVyQ29sdW1uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5kaWZmZXIuZGlmZih0aGlzLnJvd3MpO1xuICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVJvd3ModGhpcy5yb3dzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5OiBTaW1wbGVDaGFuZ2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhcHJvcGVydHk/LmN1cnJlbnRWYWx1ZTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9Sb3dzRGF0YShyb3dzOiBhbnlbXSk6IE9iamVjdERhdGFSb3dbXSB7XG4gICAgICAgIHJldHVybiByb3dzLm1hcCgocm93KSA9PiBuZXcgT2JqZWN0RGF0YVJvdyhyb3csIHJvdy5pc1NlbGVjdGVkLCByb3c/LmlzU2VsZWN0YWJsZSkpO1xuICAgIH1cblxuICAgIGNvbnZlcnRUb0NvbHVtbnNEYXRhKGNvbHVtbnM6IGFueVtdKTogT2JqZWN0RGF0YUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4pID0+IG5ldyBPYmplY3REYXRhQ29sdW1uKGNvbHVtbikpO1xuICAgIH1cblxuICAgIGNvbnZlcnRUb0RhdGFTb3J0aW5nKHNvcnRpbmc6IGFueVtdKTogRGF0YVNvcnRpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKHNvcnRpbmcgJiYgc29ydGluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGFTb3J0aW5nKHNvcnRpbmdbMF0sIHNvcnRpbmdbMV0sIHNvcnRpbmdbMl0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG9uTWFpbk1lbnVPcGVuKCkge1xuICAgICAgICBpZiAodGhpcy5tYWluTWVudVRlbXBsYXRlICYmICF0aGlzLmZvY3VzVHJhcCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1RyYXAgPSB0aGlzLmZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMubWFpbk1lbnVUZW1wbGF0ZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTWFpbk1lbnVDbG9zZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzVHJhcCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1RyYXAuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c1RyYXAgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0QW5kU3Vic2NyaWJlQ2xpY2tTdHJlYW0oKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVDbGlja1N0cmVhbSgpO1xuICAgICAgICBjb25zdCBzaW5nbGVDbGlja1N0cmVhbSA9IHRoaXMuY2xpY2skLnBpcGUoXG4gICAgICAgICAgICBidWZmZXIodGhpcy5jbGljayQucGlwZShkZWJvdW5jZVRpbWUoMjUwKSkpLFxuICAgICAgICAgICAgbWFwKChsaXN0KSA9PiBsaXN0KSxcbiAgICAgICAgICAgIGZpbHRlcigoeCkgPT4geC5sZW5ndGggPT09IDEpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1YiA9IHNpbmdsZUNsaWNrU3RyZWFtLnN1YnNjcmliZSgoZGF0YVJvd0V2ZW50czogRGF0YVJvd0V2ZW50W10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50OiBEYXRhUm93RXZlbnQgPSBkYXRhUm93RXZlbnRzWzBdO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSb3dTZWxlY3Rpb24oZXZlbnQudmFsdWUsIGV2ZW50LmV2ZW50IGFzIGFueSk7XG4gICAgICAgICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdyb3ctY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG11bHRpQ2xpY2tTdHJlYW0gPSB0aGlzLmNsaWNrJC5waXBlKFxuICAgICAgICAgICAgYnVmZmVyKHRoaXMuY2xpY2skLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpKSxcbiAgICAgICAgICAgIG1hcCgobGlzdCkgPT4gbGlzdCksXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHgubGVuZ3RoID49IDIpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5tdWx0aUNsaWNrU3RyZWFtU3ViID0gbXVsdGlDbGlja1N0cmVhbS5zdWJzY3JpYmUoKGRhdGFSb3dFdmVudHM6IERhdGFSb3dFdmVudFtdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmVudDogRGF0YVJvd0V2ZW50ID0gZGF0YVJvd0V2ZW50c1swXTtcbiAgICAgICAgICAgIHRoaXMucm93RGJsQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3Jvdy1kYmxjbGljaycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZUNsaWNrU3RyZWFtKCkge1xuICAgICAgICBpZiAodGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1Yikge1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1YiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlDbGlja1N0cmVhbVN1Yikge1xuICAgICAgICAgICAgdGhpcy5tdWx0aUNsaWNrU3RyZWFtU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLm11bHRpQ2xpY2tTdHJlYW1TdWIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VGFibGUoKSB7XG4gICAgICAgIGNvbnN0IHJ1bnRpbWVDb2x1bW5zID0gdGhpcy5nZXRSdW50aW1lQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgT2JqZWN0RGF0YVRhYmxlQWRhcHRlcih0aGlzLnJvd3MsIHJ1bnRpbWVDb2x1bW5zKTtcblxuICAgICAgICB0aGlzLnNldFRhYmxlU29ydGluZyh0aGlzLnNvcnRpbmcpO1xuICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucm93TWVudUNhY2hlID0ge307XG4gICAgfVxuXG4gICAgaXNUYWJsZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID09PSB1bmRlZmluZWQgfHwgdGhpcy5kYXRhID09PSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFibGVSb3dzKHJvd3M6IGFueVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd3NEYXRhID0gdGhpcy5jb252ZXJ0VG9Sb3dzRGF0YShyb3dzKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRSb3dzKHJvd3NEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFibGVDb2x1bW5zKGNvbHVtbnM6IGFueVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnNEYXRhID0gdGhpcy5jb252ZXJ0VG9Db2x1bW5zRGF0YShjb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKGNvbHVtbnNEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UnVudGltZUNvbHVtbnMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gWy4uLih0aGlzLmNvbHVtbnMgfHwgW10pLCAuLi50aGlzLmdldFNjaGVtYUZyb21IdG1sKCldO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFibGVTY2hlbWEoKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldFJ1bnRpbWVDb2x1bW5zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKGNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUYWJsZVNvcnRpbmcoc29ydGluZzogYW55W10pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFNvcnRpbmcodGhpcy5jb252ZXJ0VG9EYXRhU29ydGluZyhzb3J0aW5nKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2NoZW1hRnJvbUh0bWwoKTogYW55IHtcbiAgICAgICAgbGV0IHNjaGVtYSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5MaXN0Py5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzY2hlbWEgPSB0aGlzLmNvbHVtbkxpc3QuY29sdW1ucy5tYXAoKGMpID0+IGMgYXMgRGF0YUNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG5cbiAgICBvblJvd0NsaWNrKHJvdzogRGF0YVJvdywgbW91c2VFdmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAobW91c2VFdmVudCkge1xuICAgICAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmRhdGEuZ2V0Um93cygpLmluZGV4T2Yocm93KSArICh0aGlzLmlzSGVhZGVyVmlzaWJsZSgpID8gMSA6IDApO1xuICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ocm93SW5kZXgpO1xuXG4gICAgICAgICAgICBjb25zdCBkYXRhUm93RXZlbnQgPSBuZXcgRGF0YVJvd0V2ZW50KHJvdywgbW91c2VFdmVudCwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNsaWNrT2JzZXJ2ZXIubmV4dChkYXRhUm93RXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25FbnRlcktleVByZXNzZWQocm93OiBEYXRhUm93LCBlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93U2VsZWN0aW9uKHJvdywgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVJvd1NlbGVjdGlvbihyb3c6IERhdGFSb3csIGU6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhIHx8ICFyb3c/LmlzU2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgIGlmIChyb3cuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudCgncm93LXVuc2VsZWN0JywgbnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KCdyb3ctc2VsZWN0Jywgcm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVyID0gZSAmJiAoZS5tZXRhS2V5IHx8IGUuY3RybEtleSk7XG4gICAgICAgICAgICBsZXQgbmV3VmFsdWU6IGJvb2xlYW47XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAhcm93LmlzU2VsZWN0ZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gbW9kaWZpZXIgPyAhcm93LmlzU2VsZWN0ZWQgOiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZG9tRXZlbnROYW1lID0gbmV3VmFsdWUgPyAncm93LXNlbGVjdCcgOiAncm93LXVuc2VsZWN0JztcblxuICAgICAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQoZG9tRXZlbnROYW1lLCByb3cpO1xuICAgICAgICAgICAgdGhpcy5jaGVja1NlbGVjdEFsbENoZWNrYm94U3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhLmdldFJvd3MoKTtcbiAgICAgICAgICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocikgPT4gKHIuaXNTZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZC5lbWl0KDApO1xuICAgIH1cblxuICAgIG9uUm93RGJsQ2xpY2socm93OiBEYXRhUm93LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhUm93RXZlbnQgPSBuZXcgRGF0YVJvd0V2ZW50KHJvdywgZXZlbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLmNsaWNrT2JzZXJ2ZXIubmV4dChkYXRhUm93RXZlbnQpO1xuICAgIH1cblxuICAgIG9uUm93RW50ZXJLZXlEb3duKHJvdzogRGF0YVJvdywga2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlib2FyZE5hdmlnYXRlKHJvdywga2V5Ym9hcmRFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJvd0tleVVwKHJvdzogRGF0YVJvdywga2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgncm93LWtleXVwJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblxuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbktleWJvYXJkTmF2aWdhdGUocm93OiBEYXRhUm93LCBrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChrZXlib2FyZEV2ZW50KSB7XG4gICAgICAgICAgICBrZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBEYXRhUm93RXZlbnQocm93LCBrZXlib2FyZEV2ZW50LCB0aGlzKTtcblxuICAgICAgICB0aGlzLnJvd0RibENsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdyb3ctZGJsY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiBldmVudCxcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZENsaWNrRXZlbnQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5ldmVudFBoYXNlID09PSBldmVudC5CVUJCTElOR19QSEFTRTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5ldmVudFBoYXNlID09PSBldmVudC5BVF9UQVJHRVQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Db2x1bW5IZWFkZXJDbGljayhjb2x1bW46IERhdGFDb2x1bW4sIGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkQ2xpY2tFdmVudChldmVudCkgJiYgY29sdW1uICYmIGNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZGF0YS5nZXRTb3J0aW5nKCk7XG4gICAgICAgICAgICBsZXQgbmV3RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAmJiBjb2x1bW4ua2V5ID09PSBjdXJyZW50LmtleSkge1xuICAgICAgICAgICAgICAgIG5ld0RpcmVjdGlvbiA9IGN1cnJlbnQuZGlyZWN0aW9uPy50b0xvd2VyQ2FzZSgpID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zb3J0aW5nID0gW2NvbHVtbi5rZXksIG5ld0RpcmVjdGlvbiwgeyBudW1lcmljOiB0cnVlIH1dO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFNvcnRpbmcobmV3IERhdGFTb3J0aW5nKGNvbHVtbi5rZXksIG5ld0RpcmVjdGlvbiwgeyBudW1lcmljOiB0cnVlIH0pKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFNvcnRpbmdDaGFuZ2VkRXZlbnQoY29sdW1uLmtleSwgY29sdW1uLnNvcnRpbmdLZXksIG5ld0RpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmtleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdEFsbENsaWNrKG1hdENoZWNrYm94Q2hhbmdlOiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCA9IG1hdENoZWNrYm94Q2hhbmdlLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGFibGVSb3dzID0gdGhpcy5kYXRhLmdldFJvd3MoKS5maWx0ZXIoKHJvdykgPT4gcm93Py5pc1NlbGVjdGFibGUpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGFibGVSb3dzICYmIHNlbGVjdGFibGVSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGFibGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHNlbGVjdGFibGVSb3dzW2ldLCBtYXRDaGVja2JveENoYW5nZS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRvbUV2ZW50TmFtZSA9IG1hdENoZWNrYm94Q2hhbmdlLmNoZWNrZWQgPyAncm93LXNlbGVjdCcgOiAncm93LXVuc2VsZWN0JztcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuc2VsZWN0aW9uLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGlvblswXSA6IG51bGw7XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KGRvbUV2ZW50TmFtZSwgcm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hlY2tib3hMYWJlbENsaWNrKHJvdzogRGF0YVJvdywgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoISh0YXJnZXQuaGFzQXR0cmlidXRlKCdkYXRhLWFkZi1kYXRhdGFibGUtcm93LWNoZWNrYm94JykgfHwgdGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFkZi1kYXRhdGFibGUtcm93LWNoZWNrYm94XScpKSkge1xuICAgICAgICAgICAgdGhpcy5vblJvd0NsaWNrKHJvdywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGVja2JveENoYW5nZShyb3c6IERhdGFSb3csIGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGV2ZW50LmNoZWNrZWQ7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCBuZXdWYWx1ZSk7XG5cbiAgICAgICAgY29uc3QgZG9tRXZlbnROYW1lID0gbmV3VmFsdWUgPyAncm93LXNlbGVjdCcgOiAncm93LXVuc2VsZWN0JztcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQoZG9tRXZlbnROYW1lLCByb3cpO1xuICAgICAgICB0aGlzLmNoZWNrU2VsZWN0QWxsQ2hlY2tib3hTdGF0ZSgpO1xuICAgIH1cblxuICAgIGNoZWNrU2VsZWN0QWxsQ2hlY2tib3hTdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIGxldCBudW1iZXJPZlNlbGVjdGVkUm93czogbnVtYmVyID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLmRhdGEuZ2V0Um93cygpO1xuICAgICAgICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocm93LmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZTZWxlY3RlZFJvd3MrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChudW1iZXJPZlNlbGVjdGVkUm93cyA9PT0gcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyT2ZTZWxlY3RlZFJvd3MgPiAwICYmIG51bWJlck9mU2VsZWN0ZWRSb3dzIDwgcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbWFnZUxvYWRpbmdFcnJvcihldmVudDogRXZlbnQsIHJvdzogRGF0YVJvdykge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgYW55O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5mYWxsYmFja1RodW1ibmFpbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gdGhpcy5mYWxsYmFja1RodW1ibmFpbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zcmMgPSByb3cuaW1hZ2VFcnJvclJlc29sdmVyKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzSWNvblZhbHVlKHJvdzogRGF0YVJvdywgY29sOiBEYXRhQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChyb3cgJiYgY29sKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS5nZXRWYWx1ZShyb3csIGNvbCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU/LnN0YXJ0c1dpdGgoJ21hdGVyaWFsLWljb25zOi8vJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGFzSWNvblZhbHVlKHJvdzogRGF0YVJvdywgY29sOiBEYXRhQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJY29uVmFsdWUocm93LCBjb2wpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgnbWF0ZXJpYWwtaWNvbnM6Ly8nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaXNDb2x1bW5Tb3J0ZWQoY29sOiBEYXRhQ29sdW1uLCBkaXJlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoY29sICYmIGRpcmVjdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgc29ydGluZyA9IHRoaXMuZGF0YS5nZXRTb3J0aW5nKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1NvcnRpbmdFcXVhbChjb2wsIGRpcmVjdGlvbiwgc29ydGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldENvbnRleHRNZW51QWN0aW9ucyhyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbik6ICgpID0+IGFueVtdIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IERhdGFDZWxsRXZlbnQocm93LCBjb2wsIFtdKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1Jvd0NvbnRleHRNZW51LmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnZhbHVlLmFjdGlvbnM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0Um93QWN0aW9ucyhyb3c6IERhdGFSb3csIGNvbD86IERhdGFDb2x1bW4pOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGlkID0gcm93LmdldFZhbHVlKCdpZCcpO1xuXG4gICAgICAgIGlmICghdGhpcy5yb3dNZW51Q2FjaGVbaWRdKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBEYXRhQ2VsbEV2ZW50KHJvdywgY29sLCBbXSk7XG4gICAgICAgICAgICB0aGlzLnNob3dSb3dBY3Rpb25zTWVudS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3dNZW51Q2FjaGVFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUFjdGlvbnMoZXZlbnQudmFsdWUuYWN0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJvd01lbnVDYWNoZVtpZF0gPSBldmVudC52YWx1ZS5hY3Rpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUFjdGlvbnModGhpcy5yb3dNZW51Q2FjaGVbaWRdKTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQWN0aW9ucyhhY3Rpb25zOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi52aXNpYmxlIHx8IGFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIG9uRXhlY3V0ZVJvd0FjdGlvbihyb3c6IERhdGFSb3csIGFjdGlvbjogYW55KSB7XG4gICAgICAgIGlmIChhY3Rpb24uZGlzYWJsZWQgfHwgYWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVJvd0FjdGlvbi5lbWl0KG5ldyBEYXRhUm93QWN0aW9uRXZlbnQocm93LCBhY3Rpb24pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEhpZGVBY3Rpb25zV2l0aG91dEhvdmVyQ2xhc3MoYWN0aW9uc01lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikge1xuICAgICAgICByZXR1cm4geyAnYWRmLWRhdGF0YWJsZS1oaWRlLWFjdGlvbnMtd2l0aG91dC1ob3Zlcic6IHRoaXMuYWN0aW9uc1Zpc2libGVPbkhvdmVyICYmICFhY3Rpb25zTWVudVRyaWdnZXIubWVudU9wZW4gfTtcbiAgICB9XG5cbiAgICByb3dBbGxvd3NEcm9wKHJvdzogRGF0YVJvdyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcm93LmlzRHJvcFRhcmdldCA9PT0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc1NpbmdsZVNlbGVjdGlvbk1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlLnRvTG93ZXJDYXNlKCkgPT09ICdzaW5nbGUnO1xuICAgIH1cblxuICAgIGlzTXVsdGlTZWxlY3Rpb25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZS50b0xvd2VyQ2FzZSgpID09PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIGdldFJvd1N0eWxlKHJvdzogRGF0YVJvdyk6IHN0cmluZyB7XG4gICAgICAgIHJvdy5jc3NDbGFzcyA9IHJvdy5jc3NDbGFzcyA/IHJvdy5jc3NDbGFzcyA6ICcnO1xuICAgICAgICB0aGlzLnJvd1N0eWxlQ2xhc3MgPSB0aGlzLnJvd1N0eWxlQ2xhc3MgPyB0aGlzLnJvd1N0eWxlQ2xhc3MgOiAnJztcbiAgICAgICAgY29uc3QgY29udGV4dE1lbnVTb3VyY2VDbGFzcyA9IHJvdy5pc0NvbnRleHRNZW51U291cmNlID8gJ2FkZi1jb250ZXh0LW1lbnUtc291cmNlJyA6ICcnO1xuICAgICAgICBjb25zdCBpc0RyYWdFbmFibGVkID0gdGhpcy5lbmFibGVEcmFnUm93cyA/ICdhZGYtZHJhZy1yb3cnIDogJyc7XG4gICAgICAgIHJldHVybiBgJHtyb3cuY3NzQ2xhc3N9ICR7dGhpcy5yb3dTdHlsZUNsYXNzfSAke2NvbnRleHRNZW51U291cmNlQ2xhc3N9ICR7aXNEcmFnRW5hYmxlZH1gO1xuICAgIH1cblxuICAgIG1hcmtSb3dBc0NvbnRleHRNZW51U291cmNlKHNlbGVjdGVkUm93OiBEYXRhUm93KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJZCA9IHNlbGVjdGVkUm93LmlkID8gc2VsZWN0ZWRSb3cuaWQgOiAnJztcbiAgICAgICAgdGhpcy5kYXRhLmdldFJvd3MoKS5mb3JFYWNoKChyb3cpID0+IChyb3cuaXNDb250ZXh0TWVudVNvdXJjZSA9IGZhbHNlKSk7XG4gICAgICAgIHNlbGVjdGVkUm93LmlzQ29udGV4dE1lbnVTb3VyY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Um93QXNDb250ZXh0U291cmNlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvdyA9IHRoaXMuZGF0YS5nZXRSb3dzKCkuZmluZCgocm93KSA9PiB0aGlzLnNlbGVjdGVkUm93SWQgPT09IHJvdy5pZCk7XG4gICAgICAgIGlmIChzZWxlY3RlZFJvdykge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3cuaXNDb250ZXh0TWVudVNvdXJjZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RSb3cocm93OiBEYXRhUm93LCB2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICByb3cuaXNTZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gcm93Py5pZCA/IHRoaXMuZmluZFNlbGVjdGlvbkJ5SWQocm93LmlkKSA6IHRoaXMuc2VsZWN0aW9uLmluZGV4T2Yocm93KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZC5lbWl0KHRoaXMuc2VsZWN0aW9uLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaW5kU2VsZWN0aW9uQnlJZChpZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmZpbmRJbmRleCgoc2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24/LmlkID09PSBpZCk7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbFRvb2x0aXAocm93OiBEYXRhUm93LCBjb2w6IERhdGFDb2x1bW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAocm93ICYmIGNvbCAmJiBjb2wuZm9ybWF0VG9vbHRpcCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgPSBjb2wuZm9ybWF0VG9vbHRpcChyb3csIGNvbCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTb3J0YWJsZUNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Q29sdW1ucygpLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uc29ydGFibGUgPT09IHRydWUpO1xuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Um93cygpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBpc0hlYWRlclZpc2libGUoKSB7XG4gICAgICAgIGxldCBoZWFkZXJWaXNpYmlsaXR5OiBib29sZWFuO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dIZWFkZXIgPT09IFNob3dIZWFkZXJNb2RlLkRhdGEpIHtcbiAgICAgICAgICAgIGhlYWRlclZpc2liaWxpdHkgPSAhdGhpcy5sb2FkaW5nICYmICF0aGlzLm5vUGVybWlzc2lvbiAmJiAhdGhpcy5pc0VtcHR5KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93SGVhZGVyID09PSBTaG93SGVhZGVyTW9kZS5BbHdheXMpIHtcbiAgICAgICAgICAgIGhlYWRlclZpc2liaWxpdHkgPSAhdGhpcy5sb2FkaW5nICYmICF0aGlzLm5vUGVybWlzc2lvbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dIZWFkZXIgPT09IFNob3dIZWFkZXJNb2RlLk5ldmVyKSB7XG4gICAgICAgICAgICBoZWFkZXJWaXNpYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlclZpc2liaWxpdHk7XG4gICAgfVxuXG4gICAgaXNTdGlja3lIZWFkZXJFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGlja3lIZWFkZXIgJiYgdGhpcy5pc0hlYWRlclZpc2libGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRSb3dTZWxlY3Rpb25FdmVudChuYW1lOiBzdHJpbmcsIHJvdzogRGF0YVJvdykge1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdFNvcnRpbmdDaGFuZ2VkRXZlbnQoa2V5OiBzdHJpbmcsIHNvcnRpbmdLZXk6IHN0cmluZywgZGlyZWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3NvcnRpbmctY2hhbmdlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBzb3J0aW5nS2V5LFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlQ2xpY2tTdHJlYW0oKTtcbiAgICB9XG5cbiAgICBnZXROYW1lQ29sdW1uVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Q29sdW1ucygpLmZpbmQoKGVsOiBhbnkpID0+IGVsLmtleS5pbmNsdWRlcygnbmFtZScpKTtcbiAgICB9XG5cbiAgICBnZXRBdXRvbWF0aW9uVmFsdWUocm93OiBEYXRhUm93KTogYW55IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZUNvbHVtblZhbHVlKCk7XG4gICAgICAgIHJldHVybiBuYW1lID8gcm93LmdldFZhbHVlKG5hbWUua2V5KSA6ICcnO1xuICAgIH1cblxuICAgIGdldEFyaWFTb3J0KGNvbHVtbjogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uKSkge1xuICAgICAgICAgICAgcmV0dXJuICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9OT05FJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29sdW1uU29ydGVkKGNvbHVtbiwgJ2FzYycpID8gJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TT1JUX0FTQ0VORElORycgOiAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlNPUlRfREVTQ0VORElORyc7XG4gICAgfVxuXG4gICAgZ2V0U29ydExpdmVBbm5vdW5jZW1lbnQoY29sdW1uOiBEYXRhQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29sdW1uU29ydEFjdGl2ZShjb2x1bW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TT1JUX0RFRkFVTFQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29sdW1uU29ydGVkKGNvbHVtbiwgJ2FzYycpXG4gICAgICAgICAgICA/ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9BU0NFTkRJTkdfQlknXG4gICAgICAgICAgICA6ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9ERVNDRU5ESU5HX0JZJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyRHJhZ0hhbmRsZUljb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGljb25VcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJy4vYXNzZXRzL2ltYWdlcy9kcmFnX2luZGljYXRvcl8yNHB4LnN2ZycpO1xuXG4gICAgICAgIHRoaXMubWF0SWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgnYWRmJywgJ2RyYWdfaW5kaWNhdG9yJywgaWNvblVybCk7XG4gICAgfVxuXG4gICAgb25SZXNpemluZyh7IHJlY3RhbmdsZTogeyB3aWR0aCB9IH06IFJlc2l6ZUV2ZW50LCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgIGFsbENvbHVtbnNbY29sSW5kZXhdLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyhhbGxDb2x1bW5zKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVzaXppbmcpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25SZXNpemluZ0VuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemluZ0NvbHVtbkluZGV4ID0gLTE7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zV2lkdGhzKCk7XG4gICAgfVxuXG4gICAgZ2V0RmxleFZhbHVlKHsgd2lkdGggPSAwIH06IERhdGFDb2x1bW4pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYDAgMSAke3dpZHRoIDwgRGF0YVRhYmxlQ29tcG9uZW50Lk1JTklNVU1fQ09MVU1OX1NJWkUgPyBEYXRhVGFibGVDb21wb25lbnQuTUlOSU1VTV9DT0xVTU5fU0laRSA6IHdpZHRofXB4YDtcbiAgICB9XG5cbiAgICBmaWx0ZXJEaXNhYmxlZENvbHVtbnMoaW5kZXg6IG51bWJlciwgX2RyYWc6IENka0RyYWcsIGRyb3A6IENka0Ryb3BMaXN0KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhZHJvcC5nZXRTb3J0ZWRJdGVtcygpW2luZGV4XS5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBvbkRyYWdEcm9wKGRyb3BwZWRFdmVudDogQ2RrRHJhZ0Ryb3A8YW55Pik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbmFibGVEcmFnUm93cykge1xuICAgICAgICAgICAgdGhpcy5kcmFnRHJvcHBlZC5lbWl0KHsgcHJldmlvdXNJbmRleDogZHJvcHBlZEV2ZW50LnByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleDogZHJvcHBlZEV2ZW50LmN1cnJlbnRJbmRleCB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmdSb3cgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uRHJhZ0VuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nUm93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5zV2lkdGhzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5kYXRhLmdldENvbHVtbnMoKTtcblxuICAgICAgICBjb25zdCBoZWFkZXJDb250YWluZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFkZi1kYXRhdGFibGUtaGVhZGVyJyk7XG5cbiAgICAgICAgaWYgKGhlYWRlckNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyQ29udGFpbmVyQ29sdW1ucyA9IGhlYWRlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlcjpub3QoLmFkZi1kYXRhdGFibGUtY2hlY2tib3gpJyk7XG5cbiAgICAgICAgICAgIGhlYWRlckNvbnRhaW5lckNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBIVE1MRWxlbWVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbGxDb2x1bW5zW2luZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbHVtbnNbaW5kZXhdLndpZHRoID0gY29sdW1uLmNsaWVudFdpZHRoIC0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sdW1uKS5wYWRkaW5nTGVmdCwgMTApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSBoZWFkZXJDb250YWluZXJDb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbHVtbnNbaW5kZXhdLndpZHRoID0gY29sdW1uLmNsaWVudFdpZHRoIC0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sdW1uKS5wYWRkaW5nUmlnaHQsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbHVtbnNbaW5kZXhdLndpZHRoID0gY29sdW1uLmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnMoYWxsQ29sdW1ucyk7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zV2lkdGhDaGFuZ2VkLmVtaXQoYWxsQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NvcnRpbmdFcXVhbChjb2w6IERhdGFDb2x1bW4sIGRpcmVjdGlvbjogc3RyaW5nLCBzb3J0aW5nOiBEYXRhU29ydGluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc29ydGluZyAmJiAoc29ydGluZy5rZXkgPT09IGNvbC5rZXkgfHwgc29ydGluZy5rZXkgPT09IGNvbC5zb3J0aW5nS2V5KSAmJiBzb3J0aW5nLmRpcmVjdGlvbj8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIGdldCBpc1Jlc2l6aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNpemluZ0NvbHVtbkluZGV4ID49IDA7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFUYWJsZURyb3BFdmVudCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICAgIHRhcmdldDogJ2NlbGwnIHwgJ2hlYWRlcic7XG4gICAgICAgIGV2ZW50OiBFdmVudDtcbiAgICAgICAgY29sdW1uOiBEYXRhQ29sdW1uO1xuICAgICAgICByb3c/OiBEYXRhUm93O1xuICAgIH07XG5cbiAgICBwcmV2ZW50RGVmYXVsdCgpOiB2b2lkO1xufVxuIiwiPGRpdlxuICAgIHJvbGU9XCJncmlkXCJcbiAgICAqbmdJZj1cImRhdGFcIlxuICAgIGNsYXNzPVwiYWRmLWZ1bGwtd2lkdGggYWRmLWRhdGF0YWJsZS1saXN0XCJcbiAgICBbY2xhc3MuYWRmLXN0aWNreS1oZWFkZXJdPVwiaXNTdGlja3lIZWFkZXJFbmFibGVkKClcIlxuICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlLS1lbXB0eV09XCIoaXNFbXB0eSgpICYmICFpc0hlYWRlclZpc2libGUoKSkgfHwgbG9hZGluZ1wiXG4gICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtLWVtcHR5LS1oZWFkZXItdmlzaWJsZV09XCJpc0VtcHR5KCkgJiYgaXNIZWFkZXJWaXNpYmxlKClcIlxuPlxuICAgIDxkaXYgKm5nSWY9XCJpc0hlYWRlclZpc2libGUoKVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1oZWFkZXJcIiByb2xlPVwicm93Z3JvdXBcIiBbbmdDbGFzc109XCJ7ICdhZGYtc3Itb25seSc6ICFpc0hlYWRlclZpc2libGUoKSB9XCI+XG4gICAgICAgIDxhZGYtZGF0YXRhYmxlLXJvd1xuICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiZmlsdGVyRGlzYWJsZWRDb2x1bW5zXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImRhdGF0YWJsZS1yb3ctaGVhZGVyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNIZWFkZXJWaXNpYmxlKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLXJvd1wiXG4gICAgICAgICAgICByb2xlPVwicm93XCI+XG5cblxuICAgICAgICAgICAgPCEtLSBEcmFnIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVuYWJsZURyYWdSb3dzXCIgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyIGFkZi1kcmFnLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLXNyLW9ubHlcIj57eyAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLkRSQUcnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQWN0aW9ucyAobGVmdCkgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdsZWZ0J1wiIGNsYXNzPVwiYWRmLWFjdGlvbnMtY29sdW1uIGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5BQ1RJT05TJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIENvbHVtbnMgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlzZWxlY3RcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2luZGV0ZXJtaW5hdGVdPVwiaXNTZWxlY3RBbGxJbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0QWxsQ2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jaGVja2JveC1zci1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cIidBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU0VMRUNUX0FMTCcgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfQUxMJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY29sIG9mIGdldFZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXhcbiAgICAgICAgICAgICAgICBsZXQgbGFzdENvbHVtbiA9IGxhc3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLS17e2NvbC50eXBlIHx8ICd0ZXh0J319IHt7Y29sLmNzc0NsYXNzfX0gYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlciBhZGYtZGF0YXRhYmxlLWNlbGwtZGF0YVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wudGl0bGUgfHwgIXNob3dQcm92aWRlZEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYXV0b19pZF8nICsgY29sLmtleVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnYWRmLXNvcnRhYmxlJzogY29sLnNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLWRhdGF0YWJsZV9fY3Vyc29yLS1wb2ludGVyJzogIWlzUmVzaXppbmcsXG4gICAgICAgICAgICAgICAgICAgICdhZGYtZGF0YXRhYmxlX19oZWFkZXItLXNvcnRlZC1hc2MnOiBpc0NvbHVtblNvcnRlZChjb2wsICdhc2MnKSxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1kYXRhdGFibGVfX2hlYWRlci0tc29ydGVkLWRlc2MnOiBpc0NvbHVtblNvcnRlZChjb2wsICdkZXNjJyl9XCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoY29sLndpZHRoKSAmJiAhbGFzdENvbHVtbiAmJiB7J2ZsZXgnOiBnZXRGbGV4VmFsdWUoY29sKX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbC50aXRsZSB8IHRyYW5zbGF0ZSkgKyAoY29sLnN1YnRpdGxlID8gJyAnICsgY29sLnN1YnRpdGxlIDogJycpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Db2x1bW5IZWFkZXJDbGljayhjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkNvbHVtbkhlYWRlckNsaWNrKGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXNIZWFkZXJWaXNpYmxlKCkgPyAwIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cImNvbC5zb3J0YWJsZSA/IChnZXRBcmlhU29ydChjb2wpIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBjZGtEcmFnTG9ja0F4aXM9XCJ4XCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwiaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiA9IHRydWVcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnRHJvcHBlZCk9XCJvbkRyb3BIZWFkZXJDb2x1bW4oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhY29sLmRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID0gY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9IC0xXCJcbiAgICAgICAgICAgICAgICBhZGYtZHJvcC16b25lIGRyb3BUYXJnZXQ9XCJoZWFkZXJcIlxuICAgICAgICAgICAgICAgIFtkcm9wQ29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICA+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBhZGYtcmVzaXphYmxlXG4gICAgICAgICAgICAgICAgI3Jlc2l6YWJsZUVsZW1lbnQ9XCJhZGYtcmVzaXphYmxlXCJcbiAgICAgICAgICAgICAgICBbY292ZXJQYWRkaW5nXT1cIjEwXCJcbiAgICAgICAgICAgICAgICAocmVzaXppbmcpPVwib25SZXNpemluZygkZXZlbnQsIGNvbHVtbkluZGV4KVwiXG4gICAgICAgICAgICAgICAgKHJlc2l6ZVN0YXJ0KT1cInJlc2l6aW5nQ29sdW1uSW5kZXggPSBjb2x1bW5JbmRleFwiXG4gICAgICAgICAgICAgICAgKHJlc2l6ZUVuZCk9XCJvblJlc2l6aW5nRW5kKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYXV0b19oZWFkZXJfY29udGVudF9pZF8nICsgY29sLmtleVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItY29udGVudC0taG92ZXJlZCc6XG4gICAgICAgICAgICAgICAgICAgIGhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9PT0gY29sdW1uSW5kZXggJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzRHJhZ2dpbmdIZWFkZXJDb2x1bW4gJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzUmVzaXppbmcgJiYgY29sLnNvcnRhYmxlfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2wuaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7Y29sLnRpdGxlIHwgdHJhbnNsYXRlfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbC50aXRsZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuc3VidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7e2NvbC5zdWJ0aXRsZSB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlIGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXJfc3VidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAoe3tjb2wuc3VidGl0bGUgfCB0cmFuc2xhdGV9fSlcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLnRpdGxlICYmIGNvbC5zb3J0YWJsZSAmJiBpc0RyYWdnaW5nSGVhZGVyQ29sdW1uXCIgY2xhc3M9XCJhZGYtc3Itb25seVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U29ydExpdmVBbm5vdW5jZW1lbnQoY29sKSB8IHRyYW5zbGF0ZTogeyBzdHJpbmc6IGNvbC50aXRsZSB8IHRyYW5zbGF0ZSB9IH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2wudGl0bGUgJiYgIWNvbC5zb3J0YWJsZSAmJiAhaGVhZGVyRmlsdGVyVGVtcGxhdGVcIiBbYXR0ci50aXRsZV09XCInQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLkVNUFRZX0hFQURFUicgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmhlYWRlclwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2wuaGVhZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IGNvbH1cIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFkZi1kYXRhdGFibGVfX2hlYWRlci0tc29ydGVkLWFzY109XCJpc0NvbHVtblNvcnRlZChjb2wsICdhc2MnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlX19oZWFkZXItLXNvcnRlZC1kZXNjXT1cImlzQ29sdW1uU29ydGVkKGNvbCwgJ2Rlc2MnKVwiPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImFsbG93RmlsdGVyaW5nXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyRmlsdGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogY29sfVwiIC8+XG5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5kcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgICBjZGtEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItZHJhZy1pY29uJzogIWlzUmVzaXppbmcgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YWRmLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID09PSBjb2x1bW5JbmRleCAmJiAhaXNSZXNpemluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImFkZjpkcmFnX2luZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItZHJhZy1pY29uLXZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyLWRyYWctaWNvbi0nK2NvbC5rZXlcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNSZXNpemluZ0VuYWJsZWQgJiYgY29sLnJlc2l6YWJsZSAmJiAhbGFzdENvbHVtblwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID09PSBjb2x1bW5JbmRleCAmJiAhaXNSZXNpemluZyB8fCByZXNpemluZ0NvbHVtbkluZGV4ID09PSBjb2x1bW5JbmRleCA/ICdhZGYtZGF0YXRhYmxlX19yZXNpemUtaGFuZGxlLXZpc2libGUnIDogJ2FkZi1kYXRhdGFibGVfX3Jlc2l6ZS1oYW5kbGUtaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgYWRmLXJlc2l6ZS1oYW5kbGVcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZV9fcmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgW3Jlc2l6YWJsZUNvbnRhaW5lcl09XCJyZXNpemFibGVFbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1kYXRhdGFibGVfX3Jlc2l6ZS1oYW5kbGUtLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1kcm9wLWhlYWRlci1jZWxsLXBsYWNlaG9sZGVyXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBIZWFkZXIgYWN0aW9ucyAocmlnaHQpIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAncmlnaHQnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAobWFpbkFjdGlvblRlbXBsYXRlICYmIHNob3dNYWluRGF0YXRhYmxlQWN0aW9ucylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWFjdGlvbnMtY29sdW1uIGFkZi1kYXRhdGFibGUtYWN0aW9ucy1tZW51IGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZV9fYWN0aW9ucy1jZWxsXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1hY3Rpb25zLW1lbnUtcHJvdmlkZWRdPVwic2hvd1Byb3ZpZGVkQWN0aW9uc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1haW5BY3Rpb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtZGF0YXRhYmxlLW1haW4tbWVudS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQURGLURBVEFUQUJMRS5DT05URU5ULUFDVElPTlMuU0VMRUNUX0NPTFVNTlMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgI21haW5NZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1haW5NZW51T3BlbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYWluTWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnZpZXdfd2Vla19vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWFpbk1lbnUgKGNsb3NlZCk9XCJvbk1haW5NZW51Q2xvc2VkKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI21haW5NZW51VGVtcGxhdGUgcm9sZT1cInByZXNlbnRhdGlvblwiIChrZXlkb3duLnRhYik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1haW5BY3Rpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG1haW5NZW51VHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5BQ1RJT05TJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvYWRmLWRhdGF0YWJsZS1yb3c+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2UgbG9hZGluZ1Jvd1RlbXBsYXRlXCJcbiAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWJvZHlcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtYmx1ci1kYXRhdGFibGUtYm9keSc6IGJsdXJPblJlc2l6ZSAmJiAoaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiB8fCBpc1Jlc2l6aW5nKSwgJ2FkZi1kYXRhdGFibGUtYm9keV9fZHJhZ2dhYmxlJzogZW5hYmxlRHJhZ1Jvd3MgJiYgIWlzRHJhZ2dpbmdSb3csICdhZGYtZGF0YXRhYmxlLWJvZHlfX2RyYWdnaW5nJzogaXNEcmFnZ2luZ1JvdyB9XCJcbiAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWVuYWJsZURyYWdSb3dzXCJcbiAgICAgICAgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9QZXJtaXNzaW9uOyBlbHNlIG5vUGVybWlzc2lvbnNSb3dUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPGFkZi1kYXRhdGFibGUtcm93ICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YS5nZXRSb3dzKCk7IGxldCBpZHggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIWVuYWJsZURyYWdSb3dzXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ0Ryb3BwZWQpPVwib25EcmFnRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnQoKVwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmQoKVwiXG4gICAgICAgICAgICAgICAgW2Nka0RyYWdCb3VuZGFyeV09XCInLmFkZi1kYXRhdGFibGUtYm9keSdcIlxuICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uRW50ZXJLZXlQcmVzc2VkKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uUm93S2V5VXAocm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvblJvd0VudGVyS2V5RG93bihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgIFthZGYtdXBsb2FkXT1cInJvd0FsbG93c0Ryb3Aocm93KVwiXG4gICAgICAgICAgICAgICAgW2FkZi11cGxvYWQtZGF0YV09XCJyb3dcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInJvd1N0eWxlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRSb3dTdHlsZShyb3cpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1yb3dfX2RyYWdnaW5nXT1cImlzRHJhZ2dpbmdSb3dcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInZGF0YXRhYmxlLXJvdy0nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwibWFya1Jvd0FzQ29udGV4dE1lbnVTb3VyY2Uocm93KVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gRHJhZyBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVuYWJsZURyYWdSb3dzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbCBhZGYtZGF0YXRhYmxlX19hY3Rpb25zLWNlbGwgYWRmLWRhdGF0YWJsZS1ob3Zlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLkRSQUcnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9ucyAobGVmdCkgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAnbGVmdCdcIiByb2xlPVwiZ3JpZGNlbGxcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiICNhY3Rpb25zTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SGlkZUFjdGlvbnNXaXRob3V0SG92ZXJDbGFzcyhhY3Rpb25zTWVudVRyaWdnZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERi1EQVRBVEFCTEUuQ09OVEVOVC1BQ1RJT05TLlRPT0xUSVAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInYWN0aW9uX21lbnVfbGVmdF8nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FjdGlvbl9tZW51XycgKyBpZHhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZ2V0Um93QWN0aW9ucyhyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cImFjdGlvbi50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeGVjdXRlUm93QWN0aW9uKHJvdywgYWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImFjdGlvbi5pY29uXCI+e3sgYWN0aW9uLmljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGFjdGlvbi50aXRsZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25FbnRlcktleVByZXNzZWQocm93LCAkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoZWNrYm94TGFiZWxDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInc2VsZWN0LWZpbGUtJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbCBhZGYtZGF0YXRhYmxlLWNoZWNrYm94IGFkZi1kYXRhdGFibGUtY2hlY2tib3gtc2luZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ3NlbGVjdC1maWxlLScgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFyb3c/LmlzU2VsZWN0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1jaGVja2JveC1zZWxlY3RlZF09XCJyb3cuaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1ob3Zlci1vbmx5XT1cImRpc3BsYXlDaGVja2JveGVzT25Ib3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3cuaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwicm93LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwiJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfRklMRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hZGYtZGF0YXRhYmxlLXJvdy1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jaGVja2JveC1zci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlNFTEVDVF9GSUxFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGdldFZpc2libGVDb2x1bW5zKCk7IGxldCBsYXN0Q29sdW1uID0gbGFzdDtcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbCBhZGYtZGF0YXRhYmxlLWNlbGwtLXt7Y29sLnR5cGUgfHwgJ3RleHQnfX0ge3tjb2wuY3NzQ2xhc3N9fSBhZGYtZGF0YXRhYmxlLWNlbGwtZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImNvbC50aXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJnZXRBdXRvbWF0aW9uVmFsdWUocm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwicm93LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbC50aXRsZSA/IChjb2wudGl0bGUgfCB0cmFuc2xhdGUpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uRW50ZXJLZXlQcmVzc2VkKHJvdywgJGFueSgkZXZlbnQpKVwiXG4gICAgICAgICAgICAgICAgICAgIFthZGYtY29udGV4dC1tZW51XT1cImdldENvbnRleHRNZW51QWN0aW9ucyhyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBbYWRmLWNvbnRleHQtbWVudS1lbmFibGVkXT1cImNvbnRleHRNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgYWRmLWRyb3Atem9uZSBkcm9wVGFyZ2V0PVwiY2VsbFwiIFtkcm9wQ29sdW1uXT1cImNvbFwiIFtkcm9wUm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIihjb2wud2lkdGgpICYmICFsYXN0Q29sdW1uICYmIHsnZmxleCc6IGdldEZsZXhWYWx1ZShjb2wpfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbC50ZW1wbGF0ZVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZGF0YS5nZXRDb2x1bW5UeXBlKHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImlzSWNvblZhbHVlKHJvdywgY29sKTsgZWxzZSBub19pY29udmFsdWVcIj57eyBhc0ljb25WYWx1ZShyb3csIGNvbCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub19pY29udmFsdWU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZGF0YXRhYmxlLXNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93LmlzU2VsZWN0ZWQgJiYgIW11bHRpc2VsZWN0OyBlbHNlIG5vX3NlbGVjdGVkX3Jvd1wiIHN2Z0ljb249XCJzZWxlY3RlZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vX3NlbGVjdGVkX3Jvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZW50ZXItaW1nLWllXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfCBmaWxlVHlwZSkgPT09ICdkaXNhYmxlJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5JQ09OX0RJU0FCTEVEJyB8IHRyYW5zbGF0ZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5JQ09OX1RFWFQnIHwgdHJhbnNsYXRlOntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQURGLURBVEFUQUJMRS5GSUxFX1RZUEUuJyArIChkYXRhLmdldFZhbHVlKHJvdywgY29sKSB8IGZpbGVUeXBlIHwgdXBwZXJjYXNlKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFsdF09XCIoZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfCBmaWxlVHlwZSkgPT09ICdkaXNhYmxlJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5JQ09OX0RJU0FCTEVEJyB8IHRyYW5zbGF0ZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5JQ09OX1RFWFQnIHwgdHJhbnNsYXRlOntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FERi1EQVRBVEFCTEUuRklMRV9UWVBFLicgKyAoZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfCBmaWxlVHlwZSB8IHVwcGVyY2FzZSkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7eyBkYXRhLmdldFZhbHVlKHJvdywgY29sKSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJvbkltYWdlTG9hZGluZ0Vycm9yKCRldmVudCwgcm93KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidpY29uJ1wiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1pY29uLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRDZWxsVG9vbHRpcChyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWUgYWRmLWNlbGwtZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2RhdGVfJyArIChkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKSB8IGFkZkxvY2FsaXplZERhdGU6ICdtZWRpdW0nKSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1kYXRlLWNlbGwgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbnRlci1kYXRlLWNvbHVtbi1pZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRlQ29uZmlnXT1cImNvbC5kYXRlQ29uZmlnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidsb2NhdGlvbidcIiBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCIgIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidsb2NhdGlvbicgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWxvY2F0aW9uLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRDZWxsVG9vbHRpcChyb3csIGNvbClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidmaWxlU2l6ZSdcIiBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2ZpbGVTaXplXycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWZpbGVzaXplLWNlbGwgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbnRlci1zaXplLWNvbHVtbi1pZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIiBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ3RleHRfJyArIGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZGF0YXRhYmxlLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb3B5Q29udGVudF09XCJjb2wuY29weUNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidib29sZWFuXycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWJvb2xlYW4tY2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2pzb24nXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1qc29uLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCJjb2wuZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInYW1vdW50J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhbW91bnRfJyArIGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtYW1vdW50LWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3lDb25maWddPVwiY29sLmN1cnJlbmN5Q29uZmlnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidudW1iZXJfJyArIGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtbnVtYmVyLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVjaW1hbENvbmZpZ109XCJjb2wuZGVjaW1hbENvbmZpZ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdCBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gZW1wdHkgY2VsbCBmb3IgdW5rbm93biBjb2x1bW4gdHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLnRlbXBsYXRlXCIgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIiBbYXR0ci50YWJpbmRleF09XCJjb2wuZm9jdXMgPyAwIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sLnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB7IGRhdGE6IGRhdGEsIHJvdzogcm93LCBjb2w6IGNvbCB9LCB2YWx1ZTogZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbikgfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFJvdyBhY3Rpb25zIChyaWdodCkgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIXNob3dQcm92aWRlZEFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICgoYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdyaWdodCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobWFpbkFjdGlvblRlbXBsYXRlICYmIHNob3dNYWluRGF0YXRhYmxlQWN0aW9ucykpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwgYWRmLWRhdGF0YWJsZV9fYWN0aW9ucy1jZWxsIGFkZi1kYXRhdGFibGUtY2VudGVyLWFjdGlvbnMtY29sdW1uLWllIGFkZi1kYXRhdGFibGUtYWN0aW9ucy1tZW51XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihhY3Rpb25zICYmIGFjdGlvbnNQb3NpdGlvbiA9PT0gJ3JpZ2h0JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgI2FjdGlvbnNNZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SGlkZUFjdGlvbnNXaXRob3V0SG92ZXJDbGFzcyhhY3Rpb25zTWVudVRyaWdnZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlJPV19PUFRJT05fQlVUVE9OJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQURGLURBVEFUQUJMRS5DT05URU5ULUFDVElPTlMuVE9PTFRJUCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInYWN0aW9uX21lbnVfcmlnaHRfJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWN0aW9uX21lbnVfJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFjdGlvbnNNZW51VHJpZ2dlci5vcGVuTWVudSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBnZXRSb3dBY3Rpb25zKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cImFjdGlvbi50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFjdGlvbi50aXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkV4ZWN1dGVSb3dBY3Rpb24ocm93LCBhY3Rpb24pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImFjdGlvbi5pY29uXCI+e3sgYWN0aW9uLmljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBhY3Rpb24udGl0bGUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYWRmLWRhdGF0YWJsZS1yb3c+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFbXB0eSgpXCIgcm9sZT1cInJvd1wiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLW5vLWNvbnRlbnQtY29udGFpbmVyIGFkZi1kYXRhdGFibGUtY2VsbFwiIHJvbGU9XCJncmlkY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJub0NvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ0ZvciBbbmdGb3JPZl09XCJbZGF0YV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nRm9yVGVtcGxhdGVdPVwibm9Db250ZW50VGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhZGYtZW1wdHktbGlzdFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub1Blcm1pc3Npb25zUm93VGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgcm9sZT1cInJvd1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLXJvdyBhZGYtbm8tcGVybWlzc2lvbl9fcm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1uby1wZXJtaXNzaW9uX19jZWxsIGFkZi1uby1jb250ZW50LWNvbnRhaW5lciBhZGYtZGF0YXRhYmxlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwibm9QZXJtaXNzaW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ0ZvciBbbmdGb3JPZl09XCJbZGF0YV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdGb3JUZW1wbGF0ZV09XCJub1Blcm1pc3Npb25UZW1wbGF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdSb3dUZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1kYXRhdGFibGUtcm93IGFkZi1kYXRhdGFibGUtZGF0YS1sb2FkaW5nXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLW5vLWNvbnRlbnQtY29udGFpbmVyIGFkZi1kYXRhdGFibGUtY2VsbFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImxvYWRpbmdUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nRm9yIFtuZ0Zvck9mXT1cIltkYXRhXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0ZvclRlbXBsYXRlXT1cImxvYWRpbmdUZW1wbGF0ZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
|