new-front-common-library 16.1.32-LEG → 16.1.32-ROY-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -28
- package/assets/css/_dark-theme.scss +243 -243
- package/assets/css/_flex.scss +55 -55
- package/assets/css/_global.scss +417 -417
- package/assets/css/_light-theme.scss +221 -221
- package/assets/css/_mat-palettes.scss +98 -98
- package/assets/css/_themes.scss +56 -56
- package/assets/css/_themes_v18.scss +55 -55
- package/assets/css/material/_mdc-dark-theme.scss +265 -265
- package/assets/css/material/_mdc-light-theme.scss +264 -264
- package/assets/css/material/_mdc.scss +408 -408
- package/assets/css/old-themes/_dark-theme.scss +639 -639
- package/assets/css/old-themes/_global.scss +689 -689
- package/assets/css/old-themes/_light-theme.scss +646 -646
- package/assets/css/old-themes/_themes-deprecated.scss +65 -65
- package/assets/i18n/front-common/de.json +30 -30
- package/assets/i18n/front-common/en.json +30 -30
- package/assets/i18n/front-common/fr.json +30 -30
- package/esm2022/lib/util/array.service.mjs +19 -19
- package/esm2022/lib/util/component/header/header.component.mjs +221 -221
- package/esm2022/lib/util/component/header/menu/menu.component.mjs +96 -96
- package/esm2022/lib/util/component/header/menu/menu.const.mjs +544 -544
- package/esm2022/lib/util/component/header/menu/menu.model.mjs +2 -2
- package/esm2022/lib/util/component/overlay/overlay.component.mjs +40 -40
- package/esm2022/lib/util/component/overlay/overlay.service.mjs +24 -24
- package/esm2022/lib/util/component/popup/popup-login/popup-login.component.mjs +90 -90
- package/esm2022/lib/util/component/sub-header/sub-header.component.mjs +44 -44
- package/esm2022/lib/util/config.mjs +8 -8
- package/esm2022/lib/util/date/PeriodModel.mjs +8 -8
- package/esm2022/lib/util/date/date-format-constants.mjs +12 -12
- package/esm2022/lib/util/date/date.util.mjs +218 -218
- package/esm2022/lib/util/decorators/theme.decorator.mjs +22 -22
- package/esm2022/lib/util/decorators/user.decorator.mjs +25 -25
- package/esm2022/lib/util/directives/my-number-formatter-directive.mjs +34 -34
- package/esm2022/lib/util/directives/show-if-truncated.directive.mjs +25 -25
- package/esm2022/lib/util/enums/family.enum.mjs +6 -6
- package/esm2022/lib/util/enums/rapid-search-item-type.enum.mjs +12 -12
- package/esm2022/lib/util/enums/status-color.enum.mjs +11 -11
- package/esm2022/lib/util/event/header/header-events.service.mjs +21 -21
- package/esm2022/lib/util/event/storage/local-storage-events.service.mjs +17 -17
- package/esm2022/lib/util/event/storage/session-storage-events.service.mjs +18 -18
- package/esm2022/lib/util/http/http-params.builder.mjs +27 -27
- package/esm2022/lib/util/i18n/de.mjs +158 -158
- package/esm2022/lib/util/i18n/en.mjs +158 -158
- package/esm2022/lib/util/i18n/fr.mjs +158 -158
- package/esm2022/lib/util/i18n/multi-translate-http-loader.mjs +21 -21
- package/esm2022/lib/util/interfaces/permissions.interface.mjs +2 -2
- package/esm2022/lib/util/models/any-line.model.mjs +37 -37
- package/esm2022/lib/util/models/audio-content.model.mjs +27 -27
- package/esm2022/lib/util/models/authPermission.model.mjs +16 -16
- package/esm2022/lib/util/models/authUser.model.mjs +21 -21
- package/esm2022/lib/util/models/basic.model.mjs +14 -14
- package/esm2022/lib/util/models/box-set-item.model.mjs +19 -19
- package/esm2022/lib/util/models/commercial/deal-rapid-search-model.mjs +3 -3
- package/esm2022/lib/util/models/commercial/invoice-rapid-search-model.mjs +9 -9
- package/esm2022/lib/util/models/commercial/work-record-rapid-search-model.mjs +13 -13
- package/esm2022/lib/util/models/disc-program.model.mjs +26 -26
- package/esm2022/lib/util/models/disc.model.mjs +22 -22
- package/esm2022/lib/util/models/eventType.model.mjs +7 -7
- package/esm2022/lib/util/models/expenditure-commitment/purchase-order-file.model.mjs +22 -22
- package/esm2022/lib/util/models/expenditure-commitment/purchase-order-rapid-search.model.mjs +3 -3
- package/esm2022/lib/util/models/family.model.mjs +7 -7
- package/esm2022/lib/util/models/index.mjs +101 -101
- package/esm2022/lib/util/models/lang-line.model.mjs +27 -27
- package/esm2022/lib/util/models/legal/contract-rapid-search-model.mjs +3 -3
- package/esm2022/lib/util/models/legal/contract-work.model.mjs +23 -23
- package/esm2022/lib/util/models/legal/contract-work2.model.mjs +21 -21
- package/esm2022/lib/util/models/legal/type-status-rapid-search.model.mjs +3 -3
- package/esm2022/lib/util/models/media-line.model.mjs +18 -18
- package/esm2022/lib/util/models/menu-language.model.mjs +15 -15
- package/esm2022/lib/util/models/permission.model.mjs +20 -20
- package/esm2022/lib/util/models/product-box-set.model.mjs +16 -16
- package/esm2022/lib/util/models/product-disc-detail.model.mjs +22 -22
- package/esm2022/lib/util/models/product-disc.model.mjs +27 -27
- package/esm2022/lib/util/models/product-division.model.mjs +29 -29
- package/esm2022/lib/util/models/product-type.model.mjs +22 -22
- package/esm2022/lib/util/models/product.model.mjs +62 -62
- package/esm2022/lib/util/models/program.model.mjs +28 -28
- package/esm2022/lib/util/models/purchase-order/purchase-order.model.mjs +53 -53
- package/esm2022/lib/util/models/referential/WorkVersionArticleDto.mjs +17 -17
- package/esm2022/lib/util/models/referential/adress-type.model.mjs +14 -14
- package/esm2022/lib/util/models/referential/adress.model.mjs +28 -28
- package/esm2022/lib/util/models/referential/attached-file.model.mjs +17 -17
- package/esm2022/lib/util/models/referential/bank-account.model.mjs +24 -24
- package/esm2022/lib/util/models/referential/bank-accounts.model.mjs +31 -31
- package/esm2022/lib/util/models/referential/basic-hierarchy.model.mjs +8 -8
- package/esm2022/lib/util/models/referential/broadcast-list-item.model.mjs +13 -13
- package/esm2022/lib/util/models/referential/color.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/company.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/content-type.model.mjs +17 -17
- package/esm2022/lib/util/models/referential/content.model.mjs +22 -22
- package/esm2022/lib/util/models/referential/cost-center-criteria-values.model.mjs +14 -14
- package/esm2022/lib/util/models/referential/cost-center-criteria.model.mjs +13 -13
- package/esm2022/lib/util/models/referential/cost-center.model.mjs +28 -28
- package/esm2022/lib/util/models/referential/coutry.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/currency.model.mjs +20 -20
- package/esm2022/lib/util/models/referential/editorial-content.model.mjs +18 -18
- package/esm2022/lib/util/models/referential/fixing.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/flat-media.model.mjs +18 -18
- package/esm2022/lib/util/models/referential/format-image.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/format-type.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/format.model.mjs +17 -17
- package/esm2022/lib/util/models/referential/fsk-index.model.mjs +20 -20
- package/esm2022/lib/util/models/referential/fsk.model.mjs +22 -22
- package/esm2022/lib/util/models/referential/function.model.mjs +23 -23
- package/esm2022/lib/util/models/referential/genre.model.mjs +17 -17
- package/esm2022/lib/util/models/referential/invoice-product-type.model.mjs +22 -22
- package/esm2022/lib/util/models/referential/keywords.model.mjs +13 -13
- package/esm2022/lib/util/models/referential/language.model.mjs +18 -18
- package/esm2022/lib/util/models/referential/media-filter.model.mjs +3 -3
- package/esm2022/lib/util/models/referential/media.model.mjs +20 -20
- package/esm2022/lib/util/models/referential/module.model.mjs +20 -20
- package/esm2022/lib/util/models/referential/parameter.model.mjs +2 -2
- package/esm2022/lib/util/models/referential/participant.model.mjs +20 -20
- package/esm2022/lib/util/models/referential/person.model.mjs +23 -23
- package/esm2022/lib/util/models/referential/project-status.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/quota.model.mjs +17 -17
- package/esm2022/lib/util/models/referential/referential-entity-state.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/referential-value.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/referentiel.model.mjs +26 -26
- package/esm2022/lib/util/models/referential/restriction.model.mjs +20 -20
- package/esm2022/lib/util/models/referential/sap-order.model.mjs +20 -20
- package/esm2022/lib/util/models/referential/service-error.model.mjs +15 -15
- package/esm2022/lib/util/models/referential/sound.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/territories-languages.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/territory-filter.model.mjs +3 -3
- package/esm2022/lib/util/models/referential/territory.model.mjs +17 -17
- package/esm2022/lib/util/models/referential/theme.model.mjs +17 -17
- package/esm2022/lib/util/models/referential/third-party-address-rapid-search.model.mjs +3 -3
- package/esm2022/lib/util/models/referential/third-party-creation-request.model.mjs +44 -44
- package/esm2022/lib/util/models/referential/third-party-module.model.mjs +20 -20
- package/esm2022/lib/util/models/referential/third-party-rapid-search.model.mjs +3 -3
- package/esm2022/lib/util/models/referential/third-party.model.mjs +83 -83
- package/esm2022/lib/util/models/referential/translated-value-model.mjs +16 -16
- package/esm2022/lib/util/models/referential/tva.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/type-export.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/type-tva-company-territory.model.mjs +32 -32
- package/esm2022/lib/util/models/referential/type-tva.model.mjs +25 -25
- package/esm2022/lib/util/models/referential/user-form.model.mjs +2 -2
- package/esm2022/lib/util/models/referential/work-addons-model.mjs +16 -16
- package/esm2022/lib/util/models/referential/work-appartenance.model.mjs +17 -17
- package/esm2022/lib/util/models/referential/work-genre.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/work-language.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/work-milo.model.mjs +61 -61
- package/esm2022/lib/util/models/referential/work-participant.model.mjs +21 -21
- package/esm2022/lib/util/models/referential/work-restrictions-model.mjs +13 -13
- package/esm2022/lib/util/models/referential/work-theme.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/work-title.model.mjs +20 -20
- package/esm2022/lib/util/models/referential/work-version-origin.model.mjs +16 -16
- package/esm2022/lib/util/models/referential/work-version-rapid-search.model.mjs +3 -3
- package/esm2022/lib/util/models/referential/work-versions-used.model.mjs +19 -19
- package/esm2022/lib/util/models/referential/work-versions.model.mjs +27 -27
- package/esm2022/lib/util/models/referential/work-year-production.model.mjs +13 -13
- package/esm2022/lib/util/models/referential/work.model.mjs +22 -22
- package/esm2022/lib/util/models/referential/zone.model.mjs +14 -14
- package/esm2022/lib/util/models/referentiel.model.mjs +26 -26
- package/esm2022/lib/util/models/search-response.model.mjs +10 -10
- package/esm2022/lib/util/models/section.model.mjs +8 -8
- package/esm2022/lib/util/models/select/options.model.mjs +8 -8
- package/esm2022/lib/util/models/select/select.model.mjs +7 -7
- package/esm2022/lib/util/models/subsidiary.model.mjs +8 -8
- package/esm2022/lib/util/models/subtitle-content.model.mjs +28 -28
- package/esm2022/lib/util/models/user-video.model.mjs +22 -22
- package/esm2022/lib/util/models/user.model.mjs +35 -36
- package/esm2022/lib/util/models/video/product-rapid-search.model.mjs +3 -3
- package/esm2022/lib/util/models/video/support-rapid-search.model.mjs +3 -3
- package/esm2022/lib/util/models/video-content.model.mjs +18 -18
- package/esm2022/lib/util/number.validator.mjs +129 -129
- package/esm2022/lib/util/paginator/custom-paginator-configuration.mjs +59 -59
- package/esm2022/lib/util/permissions/permissions.service.mjs +49 -49
- package/esm2022/lib/util/pipes/capitalizefirst.pipe.mjs +41 -41
- package/esm2022/lib/util/pipes/comma-separated-number.pipe.mjs +15 -15
- package/esm2022/lib/util/pipes/common-translate.pipe.mjs +38 -38
- package/esm2022/lib/util/pipes/display-html.pipe.mjs +20 -20
- package/esm2022/lib/util/pipes/display-null.pipe.mjs +24 -24
- package/esm2022/lib/util/pipes/format-currency.pipe.mjs +31 -31
- package/esm2022/lib/util/pipes/format-duration.pipe.mjs +23 -23
- package/esm2022/lib/util/pipes/format-number-input.pipe.mjs +22 -22
- package/esm2022/lib/util/pipes/local-date.pipe.mjs +27 -27
- package/esm2022/lib/util/pipes/my-number.pipe.mjs +44 -44
- package/esm2022/lib/util/pipes/third-party-address-search.pipe.mjs +15 -15
- package/esm2022/lib/util/pipes/third-party-address.pipe.mjs +16 -16
- package/esm2022/lib/util/pipes/trim-string.pipe.mjs +25 -25
- package/esm2022/lib/util/regex/regex.service.mjs +94 -94
- package/esm2022/lib/util/services/api/commercial-api.service.mjs +28 -28
- package/esm2022/lib/util/services/api/common-api.service.mjs +98 -98
- package/esm2022/lib/util/services/api/legal-api.service.mjs +32 -32
- package/esm2022/lib/util/services/api/video-api.service.mjs +45 -45
- package/esm2022/lib/util/services/auth/auth.service.mjs +18 -18
- package/esm2022/lib/util/services/elasticsearch/elasticsearch.service.mjs +166 -158
- package/esm2022/lib/util/services/elasticsearch/subsidiaries.service.mjs +48 -48
- package/esm2022/lib/util/services/form-action/form-actions-events.service.mjs +25 -25
- package/esm2022/lib/util/services/guard/auth.guard.mjs +32 -32
- package/esm2022/lib/util/services/guard/login.guard.mjs +23 -23
- package/esm2022/lib/util/services/history/history.service.mjs +39 -39
- package/esm2022/lib/util/services/interceptor/auth.interceptor.mjs +53 -53
- package/esm2022/lib/util/services/jwt-security/aes.service.mjs +34 -34
- package/esm2022/lib/util/services/jwt-security/interceptorhttp.service.mjs +18 -18
- package/esm2022/lib/util/services/jwt-security/jwt.helpher.mjs +34 -34
- package/esm2022/lib/util/services/storage/local-storage.service.mjs +36 -36
- package/esm2022/lib/util/services/storage/session-storage.service.mjs +38 -38
- package/esm2022/lib/util/services/translate-language/lang.service.mjs +31 -31
- package/esm2022/lib/util/services/user/user-subsidiary.service.mjs +22 -22
- package/esm2022/lib/util/sort.mjs +22 -22
- package/esm2022/lib/util/theme/theme-event.service.mjs +17 -17
- package/esm2022/lib/util/toaster/toaster-events.service.mjs +32 -32
- package/esm2022/lib/util/util.module.mjs +281 -281
- package/esm2022/new-front-common-library.mjs +4 -4
- package/esm2022/public-api.mjs +59 -59
- package/fesm2022/new-front-common-library.mjs +5522 -5515
- package/fesm2022/new-front-common-library.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/util/array.service.d.ts +7 -7
- package/lib/util/component/header/header.component.d.ts +74 -74
- package/lib/util/component/header/menu/menu.component.d.ts +27 -27
- package/lib/util/component/header/menu/menu.const.d.ts +2 -2
- package/lib/util/component/header/menu/menu.model.d.ts +23 -23
- package/lib/util/component/overlay/overlay.component.d.ts +17 -17
- package/lib/util/component/overlay/overlay.service.d.ts +13 -13
- package/lib/util/component/popup/popup-login/popup-login.component.d.ts +35 -35
- package/lib/util/component/sub-header/sub-header.component.d.ts +13 -13
- package/lib/util/config.d.ts +8 -8
- package/lib/util/date/PeriodModel.d.ts +6 -6
- package/lib/util/date/date-format-constants.d.ts +25 -25
- package/lib/util/date/date.util.d.ts +16 -16
- package/lib/util/decorators/theme.decorator.d.ts +1 -1
- package/lib/util/decorators/user.decorator.d.ts +1 -1
- package/lib/util/directives/my-number-formatter-directive.d.ts +15 -15
- package/lib/util/directives/show-if-truncated.directive.d.ts +11 -11
- package/lib/util/enums/family.enum.d.ts +4 -4
- package/lib/util/enums/rapid-search-item-type.enum.d.ts +10 -10
- package/lib/util/enums/status-color.enum.d.ts +9 -9
- package/lib/util/event/header/header-events.service.d.ts +11 -11
- package/lib/util/event/storage/local-storage-events.service.d.ts +9 -9
- package/lib/util/event/storage/session-storage-events.service.d.ts +10 -10
- package/lib/util/http/http-params.builder.d.ts +9 -9
- package/lib/util/i18n/de.d.ts +141 -141
- package/lib/util/i18n/en.d.ts +141 -141
- package/lib/util/i18n/fr.d.ts +141 -141
- package/lib/util/i18n/multi-translate-http-loader.d.ts +14 -14
- package/lib/util/interfaces/permissions.interface.d.ts +3 -3
- package/lib/util/models/any-line.model.d.ts +24 -24
- package/lib/util/models/audio-content.model.d.ts +27 -27
- package/lib/util/models/authPermission.model.d.ts +7 -7
- package/lib/util/models/authUser.model.d.ts +16 -16
- package/lib/util/models/basic.model.d.ts +11 -11
- package/lib/util/models/box-set-item.model.d.ts +12 -12
- package/lib/util/models/commercial/deal-rapid-search-model.d.ts +10 -10
- package/lib/util/models/commercial/invoice-rapid-search-model.d.ts +18 -18
- package/lib/util/models/commercial/work-record-rapid-search-model.d.ts +21 -21
- package/lib/util/models/disc-program.model.d.ts +9 -9
- package/lib/util/models/disc.model.d.ts +15 -15
- package/lib/util/models/eventType.model.d.ts +5 -5
- package/lib/util/models/expenditure-commitment/purchase-order-file.model.d.ts +8 -8
- package/lib/util/models/expenditure-commitment/purchase-order-rapid-search.model.d.ts +10 -10
- package/lib/util/models/family.model.d.ts +5 -5
- package/lib/util/models/index.d.ts +100 -100
- package/lib/util/models/lang-line.model.d.ts +18 -18
- package/lib/util/models/legal/contract-rapid-search-model.d.ts +10 -10
- package/lib/util/models/legal/contract-work.model.d.ts +27 -27
- package/lib/util/models/legal/contract-work2.model.d.ts +23 -23
- package/lib/util/models/legal/type-status-rapid-search.model.d.ts +5 -5
- package/lib/util/models/media-line.model.d.ts +9 -9
- package/lib/util/models/menu-language.model.d.ts +6 -6
- package/lib/util/models/permission.model.d.ts +12 -12
- package/lib/util/models/product-box-set.model.d.ts +8 -8
- package/lib/util/models/product-disc-detail.model.d.ts +14 -14
- package/lib/util/models/product-disc.model.d.ts +11 -11
- package/lib/util/models/product-division.model.d.ts +15 -15
- package/lib/util/models/product-type.model.d.ts +7 -7
- package/lib/util/models/product.model.d.ts +52 -52
- package/lib/util/models/program.model.d.ts +21 -21
- package/lib/util/models/purchase-order/purchase-order.model.d.ts +40 -40
- package/lib/util/models/referential/WorkVersionArticleDto.d.ts +10 -10
- package/lib/util/models/referential/adress-type.model.d.ts +5 -5
- package/lib/util/models/referential/adress.model.d.ts +20 -20
- package/lib/util/models/referential/attached-file.model.d.ts +11 -11
- package/lib/util/models/referential/bank-account.model.d.ts +15 -15
- package/lib/util/models/referential/bank-accounts.model.d.ts +17 -17
- package/lib/util/models/referential/basic-hierarchy.model.d.ts +6 -6
- package/lib/util/models/referential/broadcast-list-item.model.d.ts +8 -8
- package/lib/util/models/referential/color.model.d.ts +6 -6
- package/lib/util/models/referential/company.model.d.ts +7 -7
- package/lib/util/models/referential/content-type.model.d.ts +12 -12
- package/lib/util/models/referential/content.model.d.ts +7 -7
- package/lib/util/models/referential/cost-center-criteria-values.model.d.ts +7 -7
- package/lib/util/models/referential/cost-center-criteria.model.d.ts +12 -12
- package/lib/util/models/referential/cost-center.model.d.ts +18 -18
- package/lib/util/models/referential/coutry.model.d.ts +7 -7
- package/lib/util/models/referential/currency.model.d.ts +11 -11
- package/lib/util/models/referential/editorial-content.model.d.ts +25 -25
- package/lib/util/models/referential/fixing.model.d.ts +10 -10
- package/lib/util/models/referential/flat-media.model.d.ts +9 -9
- package/lib/util/models/referential/format-image.model.d.ts +7 -7
- package/lib/util/models/referential/format-type.model.d.ts +6 -6
- package/lib/util/models/referential/format.model.d.ts +7 -7
- package/lib/util/models/referential/fsk-index.model.d.ts +22 -22
- package/lib/util/models/referential/fsk.model.d.ts +37 -37
- package/lib/util/models/referential/function.model.d.ts +8 -8
- package/lib/util/models/referential/genre.model.d.ts +7 -7
- package/lib/util/models/referential/invoice-product-type.model.d.ts +7 -7
- package/lib/util/models/referential/keywords.model.d.ts +6 -6
- package/lib/util/models/referential/language.model.d.ts +11 -11
- package/lib/util/models/referential/media-filter.model.d.ts +10 -10
- package/lib/util/models/referential/media.model.d.ts +11 -11
- package/lib/util/models/referential/module.model.d.ts +11 -11
- package/lib/util/models/referential/parameter.model.d.ts +6 -6
- package/lib/util/models/referential/participant.model.d.ts +11 -11
- package/lib/util/models/referential/person.model.d.ts +13 -13
- package/lib/util/models/referential/project-status.model.d.ts +6 -6
- package/lib/util/models/referential/quota.model.d.ts +7 -7
- package/lib/util/models/referential/referential-entity-state.model.d.ts +11 -11
- package/lib/util/models/referential/referential-value.model.d.ts +11 -11
- package/lib/util/models/referential/referentiel.model.d.ts +12 -12
- package/lib/util/models/referential/restriction.model.d.ts +9 -9
- package/lib/util/models/referential/sap-order.model.d.ts +27 -27
- package/lib/util/models/referential/service-error.model.d.ts +13 -13
- package/lib/util/models/referential/sound.model.d.ts +6 -6
- package/lib/util/models/referential/territories-languages.model.d.ts +8 -8
- package/lib/util/models/referential/territory-filter.model.d.ts +6 -6
- package/lib/util/models/referential/territory.model.d.ts +12 -12
- package/lib/util/models/referential/theme.model.d.ts +7 -7
- package/lib/util/models/referential/third-party-address-rapid-search.model.d.ts +8 -8
- package/lib/util/models/referential/third-party-creation-request.model.d.ts +48 -48
- package/lib/util/models/referential/third-party-module.model.d.ts +11 -11
- package/lib/util/models/referential/third-party-rapid-search.model.d.ts +8 -8
- package/lib/util/models/referential/third-party.model.d.ts +45 -45
- package/lib/util/models/referential/translated-value-model.d.ts +10 -10
- package/lib/util/models/referential/tva.model.d.ts +7 -7
- package/lib/util/models/referential/type-export.model.d.ts +7 -7
- package/lib/util/models/referential/type-tva-company-territory.model.d.ts +18 -18
- package/lib/util/models/referential/type-tva.model.d.ts +10 -10
- package/lib/util/models/referential/user-form.model.d.ts +5 -5
- package/lib/util/models/referential/work-addons-model.d.ts +25 -25
- package/lib/util/models/referential/work-appartenance.model.d.ts +7 -7
- package/lib/util/models/referential/work-genre.model.d.ts +11 -11
- package/lib/util/models/referential/work-language.model.d.ts +11 -11
- package/lib/util/models/referential/work-milo.model.d.ts +46 -46
- package/lib/util/models/referential/work-participant.model.d.ts +10 -10
- package/lib/util/models/referential/work-restrictions-model.d.ts +18 -18
- package/lib/util/models/referential/work-theme.model.d.ts +11 -11
- package/lib/util/models/referential/work-title.model.d.ts +10 -10
- package/lib/util/models/referential/work-version-origin.model.d.ts +10 -10
- package/lib/util/models/referential/work-version-rapid-search.model.d.ts +9 -9
- package/lib/util/models/referential/work-versions-used.model.d.ts +12 -12
- package/lib/util/models/referential/work-versions.model.d.ts +29 -29
- package/lib/util/models/referential/work-year-production.model.d.ts +6 -6
- package/lib/util/models/referential/work.model.d.ts +74 -74
- package/lib/util/models/referential/zone.model.d.ts +6 -6
- package/lib/util/models/referentiel.model.d.ts +12 -12
- package/lib/util/models/search-response.model.d.ts +7 -7
- package/lib/util/models/section.model.d.ts +7 -7
- package/lib/util/models/select/options.model.d.ts +6 -6
- package/lib/util/models/select/select.model.d.ts +5 -5
- package/lib/util/models/subsidiary.model.d.ts +7 -7
- package/lib/util/models/subtitle-content.model.d.ts +26 -26
- package/lib/util/models/user-video.model.d.ts +10 -10
- package/lib/util/models/user.model.d.ts +27 -28
- package/lib/util/models/video/product-rapid-search.model.d.ts +8 -8
- package/lib/util/models/video/support-rapid-search.model.d.ts +6 -6
- package/lib/util/models/video-content.model.d.ts +24 -24
- package/lib/util/number.validator.d.ts +14 -14
- package/lib/util/paginator/custom-paginator-configuration.d.ts +16 -16
- package/lib/util/permissions/permissions.service.d.ts +15 -15
- package/lib/util/pipes/capitalizefirst.pipe.d.ts +8 -8
- package/lib/util/pipes/comma-separated-number.pipe.d.ts +7 -7
- package/lib/util/pipes/common-translate.pipe.d.ts +12 -12
- package/lib/util/pipes/display-html.pipe.d.ts +10 -10
- package/lib/util/pipes/display-null.pipe.d.ts +8 -8
- package/lib/util/pipes/format-currency.pipe.d.ts +10 -10
- package/lib/util/pipes/format-duration.pipe.d.ts +7 -7
- package/lib/util/pipes/format-number-input.pipe.d.ts +7 -7
- package/lib/util/pipes/local-date.pipe.d.ts +9 -9
- package/lib/util/pipes/my-number.pipe.d.ts +11 -11
- package/lib/util/pipes/third-party-address-search.pipe.d.ts +8 -8
- package/lib/util/pipes/third-party-address.pipe.d.ts +8 -8
- package/lib/util/pipes/trim-string.pipe.d.ts +7 -7
- package/lib/util/regex/regex.service.d.ts +12 -12
- package/lib/util/services/api/commercial-api.service.d.ts +12 -12
- package/lib/util/services/api/common-api.service.d.ts +27 -27
- package/lib/util/services/api/legal-api.service.d.ts +15 -15
- package/lib/util/services/api/video-api.service.d.ts +17 -17
- package/lib/util/services/auth/auth.service.d.ts +9 -9
- package/lib/util/services/elasticsearch/elasticsearch.service.d.ts +35 -34
- package/lib/util/services/elasticsearch/subsidiaries.service.d.ts +12 -12
- package/lib/util/services/form-action/form-actions-events.service.d.ts +14 -14
- package/lib/util/services/guard/auth.guard.d.ts +2 -2
- package/lib/util/services/guard/login.guard.d.ts +1 -1
- package/lib/util/services/history/history.service.d.ts +10 -10
- package/lib/util/services/interceptor/auth.interceptor.d.ts +16 -16
- package/lib/util/services/jwt-security/aes.service.d.ts +12 -12
- package/lib/util/services/jwt-security/interceptorhttp.service.d.ts +8 -8
- package/lib/util/services/jwt-security/jwt.helpher.d.ts +4 -4
- package/lib/util/services/storage/local-storage.service.d.ts +13 -13
- package/lib/util/services/storage/session-storage.service.d.ts +13 -13
- package/lib/util/services/translate-language/lang.service.d.ts +14 -14
- package/lib/util/services/user/user-subsidiary.service.d.ts +9 -9
- package/lib/util/sort.d.ts +4 -4
- package/lib/util/theme/theme-event.service.d.ts +9 -9
- package/lib/util/toaster/toaster-events.service.d.ts +15 -15
- package/lib/util/util.module.d.ts +49 -49
- package/package.json +1 -1
- package/public-api.d.ts +56 -56
|
@@ -1,221 +1,221 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Component, EventEmitter, HostListener, Inject, Output } from '@angular/core';
|
|
3
|
-
import { Theme } from "../../decorators/theme.decorator";
|
|
4
|
-
import { User } from "../../decorators/user.decorator";
|
|
5
|
-
import { WEB_CONFIG } from "../../config";
|
|
6
|
-
import { RapidSearchItemType } from "../../enums/rapid-search-item-type.enum";
|
|
7
|
-
import { FormControl } from '@angular/forms';
|
|
8
|
-
import { debounceTime, map, switchMap } from 'rxjs/operators';
|
|
9
|
-
import { of } from 'rxjs';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/router";
|
|
12
|
-
import * as i2 from "../../event/storage/local-storage-events.service";
|
|
13
|
-
import * as i3 from "../../services/storage/local-storage.service";
|
|
14
|
-
import * as i4 from "../../toaster/toaster-events.service";
|
|
15
|
-
import * as i5 from "@ngx-translate/core";
|
|
16
|
-
import * as i6 from "../../services/api/common-api.service";
|
|
17
|
-
import * as i7 from "../../services/storage/session-storage.service";
|
|
18
|
-
import * as i8 from "../../permissions/permissions.service";
|
|
19
|
-
import * as i9 from "@angular/cdk/overlay";
|
|
20
|
-
import * as i10 from "ngx-cookie-service";
|
|
21
|
-
import * as i11 from "../../services/translate-language/lang.service";
|
|
22
|
-
import * as i12 from "../../services/elasticsearch/elasticsearch.service";
|
|
23
|
-
import * as i13 from "@angular/material/input";
|
|
24
|
-
import * as i14 from "@angular/material/form-field";
|
|
25
|
-
import * as i15 from "@angular/material/button";
|
|
26
|
-
import * as i16 from "@angular/material/toolbar";
|
|
27
|
-
import * as i17 from "@angular/common";
|
|
28
|
-
import * as i18 from "ngx-permissions";
|
|
29
|
-
import * as i19 from "@angular/forms";
|
|
30
|
-
import * as i20 from "@angular/material/icon";
|
|
31
|
-
import * as i21 from "@angular/material/menu";
|
|
32
|
-
import * as i22 from "@angular/material/autocomplete";
|
|
33
|
-
import * as i23 from "@angular/material/core";
|
|
34
|
-
import * as i24 from "./menu/menu.component";
|
|
35
|
-
import * as i25 from "../../pipes/common-translate.pipe";
|
|
36
|
-
import * as i26 from "../../pipes/third-party-address-search.pipe";
|
|
37
|
-
export class HeaderComponent {
|
|
38
|
-
constructor(router, localStorageEvents, localStorage, toasterService, translate, commonApiService, sessionStorageService, permissionsService, overlayContainer, cookieService, langService, elasticsearchService, config) {
|
|
39
|
-
this.router = router;
|
|
40
|
-
this.localStorageEvents = localStorageEvents;
|
|
41
|
-
this.localStorage = localStorage;
|
|
42
|
-
this.toasterService = toasterService;
|
|
43
|
-
this.translate = translate;
|
|
44
|
-
this.commonApiService = commonApiService;
|
|
45
|
-
this.sessionStorageService = sessionStorageService;
|
|
46
|
-
this.permissionsService = permissionsService;
|
|
47
|
-
this.overlayContainer = overlayContainer;
|
|
48
|
-
this.cookieService = cookieService;
|
|
49
|
-
this.langService = langService;
|
|
50
|
-
this.elasticsearchService = elasticsearchService;
|
|
51
|
-
this.config = config;
|
|
52
|
-
this.toogleMenuEvent = new EventEmitter();
|
|
53
|
-
this.restrictions = ['CANAL_PLUS_INTERNATIONAL_RESTRICTION'];
|
|
54
|
-
this.labelLang = 'labelFr';
|
|
55
|
-
this.isHide = false;
|
|
56
|
-
this.currentScroll = 0;
|
|
57
|
-
this.historyList = [];
|
|
58
|
-
this.activeButton = '';
|
|
59
|
-
this.RapidSearchItemType = RapidSearchItemType;
|
|
60
|
-
this.apiUrl = this.config.api_url;
|
|
61
|
-
}
|
|
62
|
-
ngOnInit() {
|
|
63
|
-
this.formControlSearch = new FormControl(null);
|
|
64
|
-
this.initPermissionsService();
|
|
65
|
-
this.lang = this.localStorage.get('lang') || 'fr';
|
|
66
|
-
this.updateLabelLang(this.lang);
|
|
67
|
-
this.env = this.config.env.toLowerCase();
|
|
68
|
-
this.localStorageEvents.localStorageEvent.subscribe(() => {
|
|
69
|
-
this.lang = this.localStorage.get('lang');
|
|
70
|
-
this.updateLabelLang(this.lang);
|
|
71
|
-
});
|
|
72
|
-
this.documents$ = this.formControlSearch.valueChanges.pipe(debounceTime(500), switchMap(term => {
|
|
73
|
-
if (!term) {
|
|
74
|
-
return of([]);
|
|
75
|
-
}
|
|
76
|
-
return this.elasticsearchService
|
|
77
|
-
.getSearchResponse(term, this.user)
|
|
78
|
-
.pipe(map(searchResponse => {
|
|
79
|
-
return this.elasticsearchService.getDocuments(searchResponse);
|
|
80
|
-
}));
|
|
81
|
-
}));
|
|
82
|
-
}
|
|
83
|
-
onWindowScroll() {
|
|
84
|
-
const numberVar = document.documentElement.scrollTop;
|
|
85
|
-
if (numberVar > this.currentScroll) {
|
|
86
|
-
this.isHide = true;
|
|
87
|
-
}
|
|
88
|
-
if (numberVar < this.currentScroll) {
|
|
89
|
-
this.isHide = false;
|
|
90
|
-
}
|
|
91
|
-
this.currentScroll = numberVar;
|
|
92
|
-
}
|
|
93
|
-
initPermissionsService() {
|
|
94
|
-
this.permissionsService.init();
|
|
95
|
-
}
|
|
96
|
-
switchTheme() {
|
|
97
|
-
if (this.theme === 'dark') {
|
|
98
|
-
this.localStorage.post('newTheme', 'light');
|
|
99
|
-
this.overlayContainer
|
|
100
|
-
.getContainerElement()
|
|
101
|
-
.classList.remove('dark-theme');
|
|
102
|
-
this.overlayContainer.getContainerElement().classList.add('light-theme');
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
this.localStorage.post('newTheme', 'dark');
|
|
106
|
-
this.overlayContainer
|
|
107
|
-
.getContainerElement()
|
|
108
|
-
.classList.remove('light-theme');
|
|
109
|
-
this.overlayContainer.getContainerElement().classList.add('dark-theme');
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
stopIdentityTheft() {
|
|
113
|
-
sessionStorage.removeItem('authTokenSecondary');
|
|
114
|
-
}
|
|
115
|
-
navigate(module = '', route, queryParamString) {
|
|
116
|
-
if (!route.startsWith('/')) {
|
|
117
|
-
route = '/' + route;
|
|
118
|
-
}
|
|
119
|
-
const url = this.config.api_url + (module ? `/${module}` : '') + route;
|
|
120
|
-
let queryParams = null;
|
|
121
|
-
if (queryParamString != null) {
|
|
122
|
-
queryParams = JSON.parse(queryParamString);
|
|
123
|
-
}
|
|
124
|
-
if (window.location.href === url && queryParams == null) {
|
|
125
|
-
window.location.reload();
|
|
126
|
-
}
|
|
127
|
-
else if (window.location.pathname.startsWith(`/${module}`)) {
|
|
128
|
-
this.router
|
|
129
|
-
.navigateByUrl('/', { skipLocationChange: true })
|
|
130
|
-
.then(() => this.router.navigate([route], queryParams ? { queryParams } : {}));
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
window.location.href = url;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
redirect(route) {
|
|
137
|
-
window.location.href = route;
|
|
138
|
-
}
|
|
139
|
-
getHistory() {
|
|
140
|
-
this.historyList = [];
|
|
141
|
-
if (this.localStorage.exist('history')) {
|
|
142
|
-
this.historyList = this.localStorage.get('history');
|
|
143
|
-
}
|
|
144
|
-
if (this.historyList.length === 0) {
|
|
145
|
-
this.historyList.push({ type: 'NO_HISTORY_AVAILABLE', id: null, ref: null });
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
switchLang(lang) {
|
|
149
|
-
this.localStorage.post('lang', lang);
|
|
150
|
-
this.translate.use(lang);
|
|
151
|
-
this.langService.switchLang();
|
|
152
|
-
}
|
|
153
|
-
updateLabelLang(lang) {
|
|
154
|
-
if ('en' === lang) {
|
|
155
|
-
this.labelLang = 'labelEn';
|
|
156
|
-
}
|
|
157
|
-
else if ('de' === lang) {
|
|
158
|
-
this.labelLang = 'labelDe';
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
this.labelLang = 'labelFr';
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
getContractType(type) {
|
|
165
|
-
return type === 'Sale' ? 'cess' : type === 'Acquisition' ? 'acq' : 'auth';
|
|
166
|
-
}
|
|
167
|
-
onSelectSearch($event, doc) {
|
|
168
|
-
switch (doc.docType) {
|
|
169
|
-
case RapidSearchItemType.PURCHASE_ORDER:
|
|
170
|
-
this.navigate('expenditure-commitment', '/purchase-orders/' + doc.poId);
|
|
171
|
-
break;
|
|
172
|
-
case RapidSearchItemType.PRODUCT:
|
|
173
|
-
this.navigate('video', '/product/consult/' + doc.productId);
|
|
174
|
-
break;
|
|
175
|
-
case RapidSearchItemType.WORK_VERSION:
|
|
176
|
-
this.navigate(null, '/work-summary/' + doc.id + '/info');
|
|
177
|
-
break;
|
|
178
|
-
case RapidSearchItemType.DEAL:
|
|
179
|
-
this.navigate(null, '/commercial/deal/consult/' + doc.id);
|
|
180
|
-
break;
|
|
181
|
-
case RapidSearchItemType.THIRD_PARTY:
|
|
182
|
-
this.navigate(null, '/referential/third-party/' + doc.id);
|
|
183
|
-
break;
|
|
184
|
-
case RapidSearchItemType.WORK_RECORD:
|
|
185
|
-
this.navigate(null, '/commercial/work-record/consult/' + doc.id + '/general');
|
|
186
|
-
break;
|
|
187
|
-
case RapidSearchItemType.CONTRACT:
|
|
188
|
-
this.navigate(null, '/legal/contracts-details/' + this.getContractType(doc.type.labelEn) + '/' + doc.contractId);
|
|
189
|
-
break;
|
|
190
|
-
case RapidSearchItemType.INVOICE:
|
|
191
|
-
if (doc.right) {
|
|
192
|
-
this.navigate(null, '/commercial/invoice/right-payment-consult?idEcheance=' + doc.invoiceId);
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
this.navigate(null, '/commercial/invoice/material-payment-consult?idEcheance=' + doc.invoiceId);
|
|
196
|
-
}
|
|
197
|
-
break;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.Router }, { token: i2.LocalStorageEventsService }, { token: i3.LocalStorageService }, { token: i4.ToasterEventsService }, { token: i5.TranslateService }, { token: i6.CommonApiService }, { token: i7.SessionStorageService }, { token: i8.PermissionsService }, { token: i9.OverlayContainer }, { token: i10.CookieService }, { token: i11.LangService }, { token: i12.ElasticsearchService }, { token: WEB_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
201
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HeaderComponent, selector: "sc-header", outputs: { toogleMenuEvent: "toogleMenuEvent" }, host: { listeners: { "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<mat-toolbar class=\"d-flex align-items-center toolbar-header toolbar-padding\">\r\n <span class=\"d-flex align-items-end\">\r\n <a\r\n [href]=\"env === 'prod' ? 'https://unity.studiocanal.com/dashboard' : (env === 'sbx' ? 'https://unity-sbx.cplus/dashboard' : 'https://unity-' + env + '.studiocanal.com/dashboard')\">\r\n <img class=\"logo-unity\" src=\"./assets/img/unity_logo_48x48.png\">\r\n </a>\r\n <span *ngIf=\"env != 'prod'\" [attr.id]=\"'env-' + env\" class=\"env\">{{ env }}</span>\r\n </span>\r\n\r\n <sc-menu [lang]=\"lang\" (navigate)=\"navigate($event.module, $event.route, $event.queryParams)\"\r\n (redirect)=\"redirect($event.route)\" class=\"menu-header\" />\r\n\r\n <div class=\"global-search\">\r\n <mat-icon class=\"header-icon\">search</mat-icon>\r\n <span class=\"global-search-separator\"></span>\r\n <mat-form-field class=\"max-width-100\" subscriptSizing=\"dynamic\">\r\n <input [formControl]=\"formControlSearch\"\r\n [matAutocomplete]=\"autoSearch\"\r\n class=\"global-search-input max-width-85\"\r\n matInput\r\n placeholder=\"search ...\" />\r\n\r\n <button (click)=\"navigate(null, '/advanced-search')\"\r\n matSuffix\r\n class=\"btn advanced-button\" mat-raised-button>\r\n <mat-icon>flash_on</mat-icon>\r\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ADVANCED' | commonTranslate: lang }}\r\n </button>\r\n\r\n <mat-autocomplete #autoSearch=\"matAutocomplete\" class=\"mat-autocomplete-global-search\" panelWidth=\"54vw\">\r\n <mat-option (onSelectionChange)=\"onSelectSearch($event, doc)\"\r\n *ngFor=\"let doc of documents$ | async\"\r\n class=\"mat-option-global-search\">\r\n <!--PURCHASE_ORDER-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.PURCHASE_ORDER\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt_long</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-70\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PURCHASE_ORDER' | commonTranslate: lang }}</span>\r\n <span>{{ doc.poNumber }}\r\n - {{ doc.totalAmount | currency: doc.currencyCode:'symbol':undefined:'fr-FR' }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.BASKET_NUMBER' | commonTranslate: lang }}</span>\r\n <span>{{ doc?.basketNumber ? doc.basketNumber : '-' }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\r\n <span>{{ doc?.ean ? doc.ean : '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--PRODUCT-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.PRODUCT\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">movie</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"ellipsis d-flex flex-column max-width-60\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCT' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.title }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-10\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.SUPPORT' | commonTranslate: lang }}</span>\r\n <span>{{ doc.support[labelLang] }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\r\n <span>{{ doc.ean }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.RELEASE_DATE' | commonTranslate: lang }}</span>\r\n <span>{{ doc?.releaseDate ? doc.releaseDate : '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--WORK-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_VERSION\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">theaters</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-75 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.title }} ({{ doc.codeIso }})</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-10\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }}</span>\r\n <span>{{ doc.miloCode }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCTION_YEAR' | commonTranslate: lang }}</span>\r\n <span>{{ doc.yearOfProduction }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--DEAL-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.DEAL\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">local_offer</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-70 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.dealNumber }} - {{ doc.thirdPartyClientName }}\r\n ({{ doc.thirdPartyClientSap }})</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.calculatedAmount | currency: doc.currencyCode:'symbol' }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.VALIDATION_DATE' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.validationDate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--WORK_RECORD-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_RECORD\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">assignment</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK_RECORD' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.id }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-35\">\r\n <span class=\"auto-complete-label\">\r\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\r\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\r\n </span>\r\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--INVOICE-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.INVOICE\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.number }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-35\">\r\n <span class=\"auto-complete-label\">\r\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\r\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\r\n </span>\r\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--THIRD_PARTY-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.THIRD_PARTY\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">person</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-85 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.THIRD_PARTY' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.companyOrPersonName }} ({{ doc.address | thirdPartyAddressSearch: lang }}\r\n )</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CODE' | commonTranslate: lang }}</span>\r\n <span>{{ doc.code }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--CONTRACT-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.CONTRACT\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'cess'\"\r\n class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\r\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'acq'\"\r\n class=\"material-icons-outlined rapid-search-type-icon\">shop_two</span>\r\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'auth'\"\r\n class=\"material-icons-outlined rapid-search-type-icon\">account_circle</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.lisaId }} </span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-10\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TYPE' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.type[labelLang] }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-30\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.STATUS' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.status[labelLang] }}</span>\r\n </div>\r\n <div *ngIf=\"doc.type.labelEn !== 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.LICENSOR' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.licensor ? doc.licensor : '-' }}</span>\r\n </div>\r\n <div *ngIf=\"doc.type.labelEn === 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CUSTOMER' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.customer ? doc.customer : '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"user && user.secondary\" class=\"connected-as d-flex justify-content-between align-items-center\">\r\n <span style=\"margin-right: 10px\">\r\n {{ 'COMMON.HEADER.CONNECTED_AS' | commonTranslate: lang }} {{ user.login + ' - ' + user.firstName + ' ' + user.name }}\r\n </span>\r\n\r\n <button (click)=\"stopIdentityTheft()\" *ngIf=\"user.secondary\" color=\"warn\" mat-raised-button>\r\n {{ 'CORE.STOP' | commonTranslate: lang }}\r\n </button>\r\n </div>\r\n\r\n <span (click)=\"getHistory()\" [matMenuTriggerFor]=\"menuHistory\"\r\n class=\"material-icons header-icon max-width-5\">history</span>\r\n <mat-menu #menuHistory=\"matMenu\" class=\"action-menu\">\r\n <ng-container *ngFor=\"let history of historyList\" [ngSwitch]=\"history.type\">\r\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PRODUCT'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">theaters</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.PRODUCT' | commonTranslate : lang }}{{ history.type }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PO'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">receipt_long</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.PO' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('commercial', '/deal/consult/' + history.id)\" *ngSwitchCase=\"'DEAL'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">local_offer</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.DEAL' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('commercial', '/work-record/consult/'+ history.id +'/general')\" *ngSwitchCase=\"'WORK'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">assignment</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.WORK_RECORD' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('legal', '/contracts-details/acq/' + history.id)\"\r\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">shop_two</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_ACQ' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('legal', '/contracts-details/cess/' + history.id)\"\r\n *ngSwitchCase=\"'CONTRACT_CESS'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">receipt</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_CESS' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('legal', '/contracts-details/auth/' + history.id)\"\r\n *ngSwitchCase=\"'CONTRACT_AUTH'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">account_circle</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_AUTH' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('expenditure-commitment', '/budget/form/' + history.id)\" *ngSwitchCase=\"'BUDGET'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">payments</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.BUDGET' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button *ngSwitchCase=\"'NO_HISTORY_AVAILABLE'\" mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">not_interested</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\r\n </button>\r\n </ng-container>\r\n </mat-menu>\r\n <span class=\"header-separator\"></span>\r\n\r\n <span [matMenuTriggerFor]=\"settings\" class=\"material-icons-outlined header-icon max-width-5\">settings</span>\r\n\r\n <!-- #enddocregion mat-menu-trigger-for -->\r\n <mat-menu #settings=\"matMenu\" class=\"settings-menu\">\r\n <button (click)=\"switchTheme()\" mat-menu-item>\r\n <mat-icon class=\"theme-icon\">toggle_on</mat-icon>\r\n <span>{{ 'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang }}</span>\r\n </button>\r\n <button class=\"img-btn\" (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\r\n <img class=\"mat-icon\" src=\"assets/img/flag/en-flag.png\">\r\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}</span>\r\n </button>\r\n <button class=\"img-btn\" (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\r\n <img class=\"mat-icon\" src=\"assets/img/flag/fr-flag.png\">\r\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}</span>\r\n </button>\r\n <button class=\"img-btn\" (click)='switchLang(\"de\")' *ngIf='lang !== \"de\"' mat-menu-item>\r\n <img class=\"mat-icon\" src=\"assets/img/flag/de-flag.png\">\r\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}</span>\r\n </button>\r\n <ng-container *ngxPermissionsExcept=\"restrictions\">\r\n <!--USER-->\r\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">manage_accounts</mat-icon>\r\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\r\n </button>\r\n </ng-container>\r\n <!--MY PREFERENCES-->\r\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">settings</mat-icon>\r\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\r\n </button>\r\n </mat-menu>\r\n</mat-toolbar>\r\n\r\n", styles: [".header-icon{color:#009ef7;cursor:pointer;text-align:center;margin:0 4px}.header-separator{display:inline-block;height:25%}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC}:host-context(.dark-theme){background-color:#2a2d3e}:host-context(.dark-theme) .global-search{background:#34384c}:host-context(.dark-theme) .global-search-input{background:#34384c}:host-context(.dark-theme) .global-search-separator{border-right:2px solid #2A2D3E}:host-context(.dark-theme) .header-separator{border-right:2px solid #111219}::ng-deep .dark-theme .mat-autocomplete-global-search{background:#2a2d3e!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search:focus:not(.mat-option-disabled){background:#212332!important;color:#fff!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search{color:#fff!important}::ng-deep .dark-theme .global-search-input::placeholder{color:#a1b7d4!important}:host-context(.light-theme){background-color:#fff}:host-context(.light-theme) .global-search{background:#eff3f6}:host-context(.light-theme) .global-search-input{background:#eff3f6}:host-context(.light-theme) .global-search-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .header-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .global-search-input::placeholder{color:#445d7b!important}:host-context(.light-theme) .mat-toolbar{background-color:#fff}::ng-deep .light-theme .mat-mdc-option.mat-option-global-search:hover:not(.mdc-list-item--disabled){background:#d3dfec!important}.logo-unity{height:48px;width:48px}.global-search .header-icon{margin:0 10px}.global-search{display:flex;align-items:center;height:40px;background:#eff3f6;margin-left:5px;border-radius:8px;flex:1 1 0;width:auto;min-width:0}.global-search-input{background:#f3f6f9;border:none;margin-left:10px;font-size:14px!important}.global-search-input :focus{outline:none}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{background:#7c87ff!important;color:#fff!important;width:90px;min-width:90px!important;height:24px!important;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;margin-right:5px;padding:0}.advanced-button .mat-icon{color:#fff!important;font-size:14px!important;height:unset;width:unset;margin-right:0}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-dev,#env-uat,#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}.global-search-input::placeholder{font-style:italic!important;font-weight:700!important}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}::ng-deep .global-search .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .global-search .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:transparent!important}::ng-deep .global-search .mat-mdc-form-field.mat-form-field-appearance-fill .mat-mdc-form-field-focus-overlay{opacity:0!important}::ng-deep .global-search .mdc-line-ripple{display:none!important}::ng-deep .global-search .mat-mdc-form-field-infix{min-height:40px!important;padding-top:8px!important;padding-bottom:8px!important}.max-width-0{flex:1 1 0%;max-width:0%}.max-width-5{flex:1 1 5%;max-width:5%}.max-width-10{flex:1 1 10%;max-width:10%}.max-width-15{flex:1 1 15%;max-width:15%}.max-width-20{flex:1 1 20%;max-width:20%}.max-width-25{flex:1 1 25%;max-width:25%}.max-width-30{flex:1 1 30%;max-width:30%}.max-width-35{flex:1 1 35%;max-width:35%}.max-width-40{flex:1 1 40%;max-width:40%}.max-width-45{flex:1 1 45%;max-width:45%}.max-width-50{flex:1 1 50%;max-width:50%}.max-width-55{flex:1 1 55%;max-width:55%}.max-width-60{flex:1 1 60%;max-width:60%}.max-width-65{flex:1 1 65%;max-width:65%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-80{flex:1 1 80%;max-width:80%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-90{flex:1 1 90%;max-width:90%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}.spacer{flex:1 1 auto}.toolbar-header{height:64px;position:absolute;padding:0 16px!important;z-index:999}.menu-header{max-width:70%;overflow:hidden;max-height:60px}::ng-deep .settings-menu.mat-mdc-menu-panel .mat-mdc-menu-item .mat-icon{height:24px;width:24px;display:flex;justify-content:center;align-items:center;margin-right:15px;font-size:18px}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn .mat-mdc-menu-item-text{display:flex;justify-content:start;align-items:center}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn img{height:12px!important;width:auto!important;display:block!important;padding-left:3px;margin-right:17px!important}.theme-icon{font-size:24px!important}\n"], dependencies: [{ kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i14.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i15.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i16.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i17.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i17.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i17.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i17.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i18.NgxPermissionsDirective, selector: "[ngxPermissionsOnly],[ngxPermissionsExcept]", inputs: ["ngxPermissionsOnly", "ngxPermissionsOnlyThen", "ngxPermissionsOnlyElse", "ngxPermissionsExcept", "ngxPermissionsExceptElse", "ngxPermissionsExceptThen", "ngxPermissionsThen", "ngxPermissionsElse", "ngxPermissionsOnlyAuthorisedStrategy", "ngxPermissionsOnlyUnauthorisedStrategy", "ngxPermissionsExceptUnauthorisedStrategy", "ngxPermissionsExceptAuthorisedStrategy", "ngxPermissionsUnauthorisedStrategy", "ngxPermissionsAuthorisedStrategy"], outputs: ["permissionsAuthorized", "permissionsUnauthorized"] }, { kind: "directive", type: i19.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i19.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i19.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i20.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i21.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i21.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i21.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i22.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i23.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i22.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i24.MenuComponent, selector: "sc-menu", inputs: ["lang"], outputs: ["navigate", "redirect"] }, { kind: "pipe", type: i17.AsyncPipe, name: "async" }, { kind: "pipe", type: i17.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i25.CommonTranslatePipe, name: "commonTranslate" }, { kind: "pipe", type: i26.ThirdPartyAddressSearchPipe, name: "thirdPartyAddressSearch" }] }); }
|
|
202
|
-
}
|
|
203
|
-
__decorate([
|
|
204
|
-
Theme()
|
|
205
|
-
], HeaderComponent.prototype, "theme", void 0);
|
|
206
|
-
__decorate([
|
|
207
|
-
User()
|
|
208
|
-
], HeaderComponent.prototype, "user", void 0);
|
|
209
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeaderComponent, decorators: [{
|
|
210
|
-
type: Component,
|
|
211
|
-
args: [{ selector: 'sc-header', template: "<mat-toolbar class=\"d-flex align-items-center toolbar-header toolbar-padding\">\r\n <span class=\"d-flex align-items-end\">\r\n <a\r\n [href]=\"env === 'prod' ? 'https://unity.studiocanal.com/dashboard' : (env === 'sbx' ? 'https://unity-sbx.cplus/dashboard' : 'https://unity-' + env + '.studiocanal.com/dashboard')\">\r\n <img class=\"logo-unity\" src=\"./assets/img/unity_logo_48x48.png\">\r\n </a>\r\n <span *ngIf=\"env != 'prod'\" [attr.id]=\"'env-' + env\" class=\"env\">{{ env }}</span>\r\n </span>\r\n\r\n <sc-menu [lang]=\"lang\" (navigate)=\"navigate($event.module, $event.route, $event.queryParams)\"\r\n (redirect)=\"redirect($event.route)\" class=\"menu-header\" />\r\n\r\n <div class=\"global-search\">\r\n <mat-icon class=\"header-icon\">search</mat-icon>\r\n <span class=\"global-search-separator\"></span>\r\n <mat-form-field class=\"max-width-100\" subscriptSizing=\"dynamic\">\r\n <input [formControl]=\"formControlSearch\"\r\n [matAutocomplete]=\"autoSearch\"\r\n class=\"global-search-input max-width-85\"\r\n matInput\r\n placeholder=\"search ...\" />\r\n\r\n <button (click)=\"navigate(null, '/advanced-search')\"\r\n matSuffix\r\n class=\"btn advanced-button\" mat-raised-button>\r\n <mat-icon>flash_on</mat-icon>\r\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ADVANCED' | commonTranslate: lang }}\r\n </button>\r\n\r\n <mat-autocomplete #autoSearch=\"matAutocomplete\" class=\"mat-autocomplete-global-search\" panelWidth=\"54vw\">\r\n <mat-option (onSelectionChange)=\"onSelectSearch($event, doc)\"\r\n *ngFor=\"let doc of documents$ | async\"\r\n class=\"mat-option-global-search\">\r\n <!--PURCHASE_ORDER-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.PURCHASE_ORDER\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt_long</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-70\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PURCHASE_ORDER' | commonTranslate: lang }}</span>\r\n <span>{{ doc.poNumber }}\r\n - {{ doc.totalAmount | currency: doc.currencyCode:'symbol':undefined:'fr-FR' }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.BASKET_NUMBER' | commonTranslate: lang }}</span>\r\n <span>{{ doc?.basketNumber ? doc.basketNumber : '-' }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\r\n <span>{{ doc?.ean ? doc.ean : '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--PRODUCT-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.PRODUCT\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">movie</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"ellipsis d-flex flex-column max-width-60\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCT' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.title }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-10\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.SUPPORT' | commonTranslate: lang }}</span>\r\n <span>{{ doc.support[labelLang] }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\r\n <span>{{ doc.ean }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.RELEASE_DATE' | commonTranslate: lang }}</span>\r\n <span>{{ doc?.releaseDate ? doc.releaseDate : '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--WORK-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_VERSION\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">theaters</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-75 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.title }} ({{ doc.codeIso }})</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-10\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }}</span>\r\n <span>{{ doc.miloCode }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCTION_YEAR' | commonTranslate: lang }}</span>\r\n <span>{{ doc.yearOfProduction }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--DEAL-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.DEAL\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">local_offer</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-70 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.dealNumber }} - {{ doc.thirdPartyClientName }}\r\n ({{ doc.thirdPartyClientSap }})</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.calculatedAmount | currency: doc.currencyCode:'symbol' }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.VALIDATION_DATE' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.validationDate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--WORK_RECORD-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_RECORD\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">assignment</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK_RECORD' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.id }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-35\">\r\n <span class=\"auto-complete-label\">\r\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\r\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\r\n </span>\r\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--INVOICE-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.INVOICE\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.number }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-35\">\r\n <span class=\"auto-complete-label\">\r\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\r\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\r\n </span>\r\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--THIRD_PARTY-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.THIRD_PARTY\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span class=\"material-icons-outlined rapid-search-type-icon\">person</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-85 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.THIRD_PARTY' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.companyOrPersonName }} ({{ doc.address | thirdPartyAddressSearch: lang }}\r\n )</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-15\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CODE' | commonTranslate: lang }}</span>\r\n <span>{{ doc.code }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--CONTRACT-->\r\n <div *ngIf=\"doc.docType === RapidSearchItemType.CONTRACT\" class=\"d-flex align-items-center\">\r\n <div class=\"max-width-5\">\r\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'cess'\"\r\n class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\r\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'acq'\"\r\n class=\"material-icons-outlined rapid-search-type-icon\">shop_two</span>\r\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'auth'\"\r\n class=\"material-icons-outlined rapid-search-type-icon\">account_circle</span>\r\n </div>\r\n <div class=\"d-flex max-width-95\">\r\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\r\n <span\r\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\r\n <span class=\"ellipsis\">{{ doc.lisaId }} </span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-10\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TYPE' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.type[labelLang] }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column max-width-30\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.STATUS' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.status[labelLang] }}</span>\r\n </div>\r\n <div *ngIf=\"doc.type.labelEn !== 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.LICENSOR' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.licensor ? doc.licensor : '-' }}</span>\r\n </div>\r\n <div *ngIf=\"doc.type.labelEn === 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\r\n <span class=\"auto-complete-label\">{{\r\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CUSTOMER' | commonTranslate: lang\r\n }}</span>\r\n <span>{{ doc.customer ? doc.customer : '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"user && user.secondary\" class=\"connected-as d-flex justify-content-between align-items-center\">\r\n <span style=\"margin-right: 10px\">\r\n {{ 'COMMON.HEADER.CONNECTED_AS' | commonTranslate: lang }} {{ user.login + ' - ' + user.firstName + ' ' + user.name }}\r\n </span>\r\n\r\n <button (click)=\"stopIdentityTheft()\" *ngIf=\"user.secondary\" color=\"warn\" mat-raised-button>\r\n {{ 'CORE.STOP' | commonTranslate: lang }}\r\n </button>\r\n </div>\r\n\r\n <span (click)=\"getHistory()\" [matMenuTriggerFor]=\"menuHistory\"\r\n class=\"material-icons header-icon max-width-5\">history</span>\r\n <mat-menu #menuHistory=\"matMenu\" class=\"action-menu\">\r\n <ng-container *ngFor=\"let history of historyList\" [ngSwitch]=\"history.type\">\r\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PRODUCT'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">theaters</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.PRODUCT' | commonTranslate : lang }}{{ history.type }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PO'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">receipt_long</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.PO' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('commercial', '/deal/consult/' + history.id)\" *ngSwitchCase=\"'DEAL'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">local_offer</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.DEAL' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('commercial', '/work-record/consult/'+ history.id +'/general')\" *ngSwitchCase=\"'WORK'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">assignment</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.WORK_RECORD' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('legal', '/contracts-details/acq/' + history.id)\"\r\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">shop_two</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_ACQ' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('legal', '/contracts-details/cess/' + history.id)\"\r\n *ngSwitchCase=\"'CONTRACT_CESS'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">receipt</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_CESS' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('legal', '/contracts-details/auth/' + history.id)\"\r\n *ngSwitchCase=\"'CONTRACT_AUTH'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">account_circle</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_AUTH' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button (click)=\"navigate('expenditure-commitment', '/budget/form/' + history.id)\" *ngSwitchCase=\"'BUDGET'\"\r\n mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">payments</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.BUDGET' | commonTranslate : lang }} {{ history.ref }}\r\n </button>\r\n <button *ngSwitchCase=\"'NO_HISTORY_AVAILABLE'\" mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">not_interested</mat-icon>\r\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\r\n </button>\r\n </ng-container>\r\n </mat-menu>\r\n <span class=\"header-separator\"></span>\r\n\r\n <span [matMenuTriggerFor]=\"settings\" class=\"material-icons-outlined header-icon max-width-5\">settings</span>\r\n\r\n <!-- #enddocregion mat-menu-trigger-for -->\r\n <mat-menu #settings=\"matMenu\" class=\"settings-menu\">\r\n <button (click)=\"switchTheme()\" mat-menu-item>\r\n <mat-icon class=\"theme-icon\">toggle_on</mat-icon>\r\n <span>{{ 'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang }}</span>\r\n </button>\r\n <button class=\"img-btn\" (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\r\n <img class=\"mat-icon\" src=\"assets/img/flag/en-flag.png\">\r\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}</span>\r\n </button>\r\n <button class=\"img-btn\" (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\r\n <img class=\"mat-icon\" src=\"assets/img/flag/fr-flag.png\">\r\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}</span>\r\n </button>\r\n <button class=\"img-btn\" (click)='switchLang(\"de\")' *ngIf='lang !== \"de\"' mat-menu-item>\r\n <img class=\"mat-icon\" src=\"assets/img/flag/de-flag.png\">\r\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}</span>\r\n </button>\r\n <ng-container *ngxPermissionsExcept=\"restrictions\">\r\n <!--USER-->\r\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">manage_accounts</mat-icon>\r\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\r\n </button>\r\n </ng-container>\r\n <!--MY PREFERENCES-->\r\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\r\n <mat-icon class=\"material-icons-outlined\">settings</mat-icon>\r\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\r\n </button>\r\n </mat-menu>\r\n</mat-toolbar>\r\n\r\n", styles: [".header-icon{color:#009ef7;cursor:pointer;text-align:center;margin:0 4px}.header-separator{display:inline-block;height:25%}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC}:host-context(.dark-theme){background-color:#2a2d3e}:host-context(.dark-theme) .global-search{background:#34384c}:host-context(.dark-theme) .global-search-input{background:#34384c}:host-context(.dark-theme) .global-search-separator{border-right:2px solid #2A2D3E}:host-context(.dark-theme) .header-separator{border-right:2px solid #111219}::ng-deep .dark-theme .mat-autocomplete-global-search{background:#2a2d3e!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search:focus:not(.mat-option-disabled){background:#212332!important;color:#fff!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search{color:#fff!important}::ng-deep .dark-theme .global-search-input::placeholder{color:#a1b7d4!important}:host-context(.light-theme){background-color:#fff}:host-context(.light-theme) .global-search{background:#eff3f6}:host-context(.light-theme) .global-search-input{background:#eff3f6}:host-context(.light-theme) .global-search-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .header-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .global-search-input::placeholder{color:#445d7b!important}:host-context(.light-theme) .mat-toolbar{background-color:#fff}::ng-deep .light-theme .mat-mdc-option.mat-option-global-search:hover:not(.mdc-list-item--disabled){background:#d3dfec!important}.logo-unity{height:48px;width:48px}.global-search .header-icon{margin:0 10px}.global-search{display:flex;align-items:center;height:40px;background:#eff3f6;margin-left:5px;border-radius:8px;flex:1 1 0;width:auto;min-width:0}.global-search-input{background:#f3f6f9;border:none;margin-left:10px;font-size:14px!important}.global-search-input :focus{outline:none}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{background:#7c87ff!important;color:#fff!important;width:90px;min-width:90px!important;height:24px!important;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;margin-right:5px;padding:0}.advanced-button .mat-icon{color:#fff!important;font-size:14px!important;height:unset;width:unset;margin-right:0}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-dev,#env-uat,#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}.global-search-input::placeholder{font-style:italic!important;font-weight:700!important}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}::ng-deep .global-search .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .global-search .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:transparent!important}::ng-deep .global-search .mat-mdc-form-field.mat-form-field-appearance-fill .mat-mdc-form-field-focus-overlay{opacity:0!important}::ng-deep .global-search .mdc-line-ripple{display:none!important}::ng-deep .global-search .mat-mdc-form-field-infix{min-height:40px!important;padding-top:8px!important;padding-bottom:8px!important}.max-width-0{flex:1 1 0%;max-width:0%}.max-width-5{flex:1 1 5%;max-width:5%}.max-width-10{flex:1 1 10%;max-width:10%}.max-width-15{flex:1 1 15%;max-width:15%}.max-width-20{flex:1 1 20%;max-width:20%}.max-width-25{flex:1 1 25%;max-width:25%}.max-width-30{flex:1 1 30%;max-width:30%}.max-width-35{flex:1 1 35%;max-width:35%}.max-width-40{flex:1 1 40%;max-width:40%}.max-width-45{flex:1 1 45%;max-width:45%}.max-width-50{flex:1 1 50%;max-width:50%}.max-width-55{flex:1 1 55%;max-width:55%}.max-width-60{flex:1 1 60%;max-width:60%}.max-width-65{flex:1 1 65%;max-width:65%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-80{flex:1 1 80%;max-width:80%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-90{flex:1 1 90%;max-width:90%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}.spacer{flex:1 1 auto}.toolbar-header{height:64px;position:absolute;padding:0 16px!important;z-index:999}.menu-header{max-width:70%;overflow:hidden;max-height:60px}::ng-deep .settings-menu.mat-mdc-menu-panel .mat-mdc-menu-item .mat-icon{height:24px;width:24px;display:flex;justify-content:center;align-items:center;margin-right:15px;font-size:18px}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn .mat-mdc-menu-item-text{display:flex;justify-content:start;align-items:center}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn img{height:12px!important;width:auto!important;display:block!important;padding-left:3px;margin-right:17px!important}.theme-icon{font-size:24px!important}\n"] }]
|
|
212
|
-
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.LocalStorageEventsService }, { type: i3.LocalStorageService }, { type: i4.ToasterEventsService }, { type: i5.TranslateService }, { type: i6.CommonApiService }, { type: i7.SessionStorageService }, { type: i8.PermissionsService }, { type: i9.OverlayContainer }, { type: i10.CookieService }, { type: i11.LangService }, { type: i12.ElasticsearchService }, { type: undefined, decorators: [{
|
|
213
|
-
type: Inject,
|
|
214
|
-
args: [WEB_CONFIG]
|
|
215
|
-
}] }]; }, propDecorators: { theme: [], user: [], toogleMenuEvent: [{
|
|
216
|
-
type: Output
|
|
217
|
-
}], onWindowScroll: [{
|
|
218
|
-
type: HostListener,
|
|
219
|
-
args: ['window:scroll', []]
|
|
220
|
-
}] } });
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldy1mcm9udC1jb21tb24tbGlicmFyeS9zcmMvbGliL3V0aWwvY29tcG9uZW50L2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV3LWZyb250LWNvbW1vbi1saWJyYXJ5L3NyYy9saWIvdXRpbC9jb21wb25lbnQvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNNUYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQVFyRCxPQUFPLEVBQVMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBS2hELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFBO0FBQzNFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY3BDLE1BQU0sT0FBTyxlQUFlO0lBMkIxQixZQUNtQixNQUFjLEVBQ2Qsa0JBQTZDLEVBQzdDLFlBQWlDLEVBQ2pDLGNBQW9DLEVBQ3BDLFNBQTJCLEVBQzNCLGdCQUFrQyxFQUNsQyxxQkFBNEMsRUFDNUMsa0JBQXNDLEVBQ3RDLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixXQUF3QixF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QUFLLG1CQUFtQixDQUFDLE9BQU87Z0JBQzlCLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtvQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSx1REFBdUQsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzlGO3FCQUFNO29CQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLDBEQUEwRCxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDakc7Z0JBQ0QsTUFBTTtTQUNUO0lBQ0gsQ0FBQzsrR0F4TVUsZUFBZSw4WkF3Q2hCLFVBQVU7bUdBeENULGVBQWUsZ0tDdEM1QiwwbXJCQXFYQTs7QUQ5VVc7SUFBUixLQUFLLEVBQUU7OENBQXNCO0FBQ3RCO0lBQVAsSUFBSSxFQUFFOzZDQUE0Qjs0RkFGeEIsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxXQUFXOzswQkE0Q2xCLE1BQU07MkJBQUMsVUFBVTs0Q0F2Q0osS0FBSyxNQUNOLElBQUksTUFFVCxlQUFlO3NCQUF4QixNQUFNO2dCQXdFQSxjQUFjO3NCQURwQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7Q29va2llU2VydmljZX0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcclxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtPdmVybGF5Q29udGFpbmVyfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNJbnRlcmZhY2V9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL3Blcm1pc3Npb25zLmludGVyZmFjZVwiO1xyXG5pbXBvcnQge1RoZW1lfSBmcm9tIFwiLi4vLi4vZGVjb3JhdG9ycy90aGVtZS5kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHtVc2VyfSBmcm9tIFwiLi4vLi4vZGVjb3JhdG9ycy91c2VyLmRlY29yYXRvclwiO1xyXG5pbXBvcnQge0F1dGhVc2VyTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHNcIjtcclxuaW1wb3J0IHtMb2NhbFN0b3JhZ2VFdmVudHNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZXZlbnQvc3RvcmFnZS9sb2NhbC1zdG9yYWdlLWV2ZW50cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7TG9jYWxTdG9yYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7VG9hc3RlckV2ZW50c1NlcnZpY2V9IGZyb20gXCIuLi8uLi90b2FzdGVyL3RvYXN0ZXItZXZlbnRzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb21tb25BcGlTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXBpL2NvbW1vbi1hcGkuc2VydmljZVwiO1xyXG5pbXBvcnQge1Nlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29uZmlnLCBXRUJfQ09ORklHfSBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcbmltcG9ydCB7TGFuZ1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUtbGFuZ3VhZ2UvbGFuZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7RWxhc3RpY3NlYXJjaFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9lbGFzdGljc2VhcmNoL2VsYXN0aWNzZWFyY2guc2VydmljZVwiO1xyXG5pbXBvcnQge1B1cmNoYXNlT3JkZXJSYXBpZFNlYXJjaE1vZGVsfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQvcHVyY2hhc2Utb3JkZXItcmFwaWQtc2VhcmNoLm1vZGVsXCI7XHJcbmltcG9ydCB7UHJvZHVjdFJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvdmlkZW8vcHJvZHVjdC1yYXBpZC1zZWFyY2gubW9kZWxcIjtcclxuaW1wb3J0IHtSYXBpZFNlYXJjaEl0ZW1UeXBlfSBmcm9tIFwiLi4vLi4vZW51bXMvcmFwaWQtc2VhcmNoLWl0ZW0tdHlwZS5lbnVtXCJcclxuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1dvcmtWZXJzaW9uUmFwaWRTZWFyY2hNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy9yZWZlcmVudGlhbC93b3JrLXZlcnNpb24tcmFwaWQtc2VhcmNoLm1vZGVsXCI7XHJcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBtYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtNYXRPcHRpb25TZWxlY3Rpb25DaGFuZ2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQge0RlYWxSYXBpZFNlYXJjaE1vZGVsfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tbWVyY2lhbC9kZWFsLXJhcGlkLXNlYXJjaC1tb2RlbCc7XHJcbmltcG9ydCB7VGhpcmRQYXJ0eVJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvcmVmZXJlbnRpYWwvdGhpcmQtcGFydHktcmFwaWQtc2VhcmNoLm1vZGVsXCI7XHJcbmltcG9ydCB7V29ya1JlY29yZFJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29tbWVyY2lhbC93b3JrLXJlY29yZC1yYXBpZC1zZWFyY2gtbW9kZWxcIjtcclxuaW1wb3J0IHtDb250cmFjdFJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvbGVnYWwvY29udHJhY3QtcmFwaWQtc2VhcmNoLW1vZGVsXCI7XHJcbmltcG9ydCB7SW52b2ljZVJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29tbWVyY2lhbC9pbnZvaWNlLXJhcGlkLXNlYXJjaC1tb2RlbFwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2MtaGVhZGVyJyxcclxuICBzdHlsZVVybHM6IFsnLi9oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaGVhZGVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBQZXJtaXNzaW9uc0ludGVyZmFjZSB7XHJcbiAgQFRoZW1lKCkgcHVibGljIHRoZW1lOiBzdHJpbmc7XHJcbiAgQFVzZXIoKSBwdWJsaWMgdXNlcjogQXV0aFVzZXJNb2RlbDtcclxuXHJcbiAgQE91dHB1dCgpIHRvb2dsZU1lbnVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcmVzdHJpY3Rpb25zID0gWydDQU5BTF9QTFVTX0lOVEVSTkFUSU9OQUxfUkVTVFJJQ1RJT04nXTtcclxuXHJcbiAgcHVibGljIGxhbmc6IHN0cmluZztcclxuICBwdWJsaWMgbGFiZWxMYW5nID0gJ2xhYmVsRnInO1xyXG4gIHB1YmxpYyBpc0hpZGUgPSBmYWxzZTtcclxuICBwdWJsaWMgY3VycmVudFNjcm9sbCA9IDA7XHJcbiAgcHVibGljIGVudjogc3RyaW5nO1xyXG4gIHB1YmxpYyBoaXN0b3J5TGlzdCA9IFtdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpVXJsOiBzdHJpbmc7XHJcbiAgcHVibGljIGFjdGl2ZUJ1dHRvbjogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIFJhcGlkU2VhcmNoSXRlbVR5cGUgPSBSYXBpZFNlYXJjaEl0ZW1UeXBlO1xyXG4gIHB1YmxpYyBmb3JtQ29udHJvbFNlYXJjaDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcclxuICBwdWJsaWMgZG9jdW1lbnRzJDogT2JzZXJ2YWJsZTwoUHVyY2hhc2VPcmRlclJhcGlkU2VhcmNoTW9kZWxcclxuICAgIHwgUHJvZHVjdFJhcGlkU2VhcmNoTW9kZWxcclxuICAgIHwgV29ya1ZlcnNpb25SYXBpZFNlYXJjaE1vZGVsXHJcbiAgICB8IERlYWxSYXBpZFNlYXJjaE1vZGVsXHJcbiAgICB8IFdvcmtSZWNvcmRSYXBpZFNlYXJjaE1vZGVsXHJcbiAgICB8IFRoaXJkUGFydHlSYXBpZFNlYXJjaE1vZGVsXHJcbiAgICB8IENvbnRyYWN0UmFwaWRTZWFyY2hNb2RlbFxyXG4gICAgfCBJbnZvaWNlUmFwaWRTZWFyY2hNb2RlbClbXT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlRXZlbnRzOiBMb2NhbFN0b3JhZ2VFdmVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyRXZlbnRzU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25BcGlTZXJ2aWNlOiBDb21tb25BcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXlDb250YWluZXI6IE92ZXJsYXlDb250YWluZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxhc3RpY3NlYXJjaFNlcnZpY2U6IEVsYXN0aWNzZWFyY2hTZXJ2aWNlLFxyXG4gICAgQEluamVjdChXRUJfQ09ORklHKSBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlnXHJcbiAgKSB7XHJcbiAgICB0aGlzLmFwaVVybCA9IHRoaXMuY29uZmlnLmFwaV91cmw7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbFNlYXJjaCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpO1xyXG5cclxuICAgIHRoaXMuaW5pdFBlcm1pc3Npb25zU2VydmljZSgpO1xyXG4gICAgdGhpcy5sYW5nID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0KCdsYW5nJykgfHwgJ2ZyJztcclxuICAgIHRoaXMudXBkYXRlTGFiZWxMYW5nKHRoaXMubGFuZyk7XHJcbiAgICB0aGlzLmVudiA9IHRoaXMuY29uZmlnLmVudi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VFdmVudHMubG9jYWxTdG9yYWdlRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5sYW5nID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0KCdsYW5nJyk7XHJcbiAgICAgIHRoaXMudXBkYXRlTGFiZWxMYW5nKHRoaXMubGFuZyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRvY3VtZW50cyQgPSB0aGlzLmZvcm1Db250cm9sU2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcclxuICAgICAgc3dpdGNoTWFwKHRlcm0gPT4ge1xyXG4gICAgICAgIGlmICghdGVybSkge1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxhc3RpY3NlYXJjaFNlcnZpY2VcclxuICAgICAgICAgIC5nZXRTZWFyY2hSZXNwb25zZSh0ZXJtLCB0aGlzLnVzZXIpXHJcbiAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgbWFwKHNlYXJjaFJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGFzdGljc2VhcmNoU2VydmljZS5nZXREb2N1bWVudHMoc2VhcmNoUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgW10pXHJcbiAgcHVibGljIG9uV2luZG93U2Nyb2xsKCkge1xyXG4gICAgY29uc3QgbnVtYmVyVmFyID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcclxuICAgIGlmIChudW1iZXJWYXIgPiB0aGlzLmN1cnJlbnRTY3JvbGwpIHtcclxuICAgICAgdGhpcy5pc0hpZGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKG51bWJlclZhciA8IHRoaXMuY3VycmVudFNjcm9sbCkge1xyXG4gICAgICB0aGlzLmlzSGlkZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50U2Nyb2xsID0gbnVtYmVyVmFyO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBpbml0UGVybWlzc2lvbnNTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN3aXRjaFRoZW1lKCkge1xyXG4gICAgaWYgKHRoaXMudGhlbWUgPT09ICdkYXJrJykge1xyXG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZS5wb3N0KCduZXdUaGVtZScsICdsaWdodCcpO1xyXG4gICAgICB0aGlzLm92ZXJsYXlDb250YWluZXJcclxuICAgICAgICAuZ2V0Q29udGFpbmVyRWxlbWVudCgpXHJcbiAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2RhcmstdGhlbWUnKTtcclxuICAgICAgdGhpcy5vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKCdsaWdodC10aGVtZScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UucG9zdCgnbmV3VGhlbWUnLCAnZGFyaycpO1xyXG4gICAgICB0aGlzLm92ZXJsYXlDb250YWluZXJcclxuICAgICAgICAuZ2V0Q29udGFpbmVyRWxlbWVudCgpXHJcbiAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2xpZ2h0LXRoZW1lJyk7XHJcbiAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnZGFyay10aGVtZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RvcElkZW50aXR5VGhlZnQoKSB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdhdXRoVG9rZW5TZWNvbmRhcnknKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuYXZpZ2F0ZShtb2R1bGUgPSAnJywgcm91dGU6IHN0cmluZywgcXVlcnlQYXJhbVN0cmluZz86IHN0cmluZyB8IG51bGwpIHtcclxuICAgIGlmICghcm91dGUuc3RhcnRzV2l0aCgnLycpKSB7XHJcbiAgICAgIHJvdXRlID0gJy8nICsgcm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXJsID0gdGhpcy5jb25maWcuYXBpX3VybCArIChtb2R1bGUgPyBgLyR7bW9kdWxlfWAgOiAnJykgKyByb3V0ZTtcclxuICAgIGxldCBxdWVyeVBhcmFtcyA9IG51bGw7XHJcbiAgICBpZihxdWVyeVBhcmFtU3RyaW5nICE9IG51bGwpIHtcclxuICAgICAgcXVlcnlQYXJhbXMgPSBKU09OLnBhcnNlKHF1ZXJ5UGFyYW1TdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZiA9PT0gdXJsICYmIHF1ZXJ5UGFyYW1zID09IG51bGwpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKGAvJHttb2R1bGV9YCkpIHtcclxuICAgICAgdGhpcy5yb3V0ZXJcclxuICAgICAgICAubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pXHJcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlXSwgcXVlcnlQYXJhbXMgPyB7cXVlcnlQYXJhbXN9IDoge30pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVkaXJlY3Qocm91dGU6IHN0cmluZykge1xyXG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByb3V0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRIaXN0b3J5KCkge1xyXG4gICAgdGhpcy5oaXN0b3J5TGlzdCA9IFtdO1xyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlLmV4aXN0KCdoaXN0b3J5JykpIHtcclxuICAgICAgdGhpcy5oaXN0b3J5TGlzdCA9IHRoaXMubG9jYWxTdG9yYWdlLmdldCgnaGlzdG9yeScpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhpc3RvcnlMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmhpc3RvcnlMaXN0LnB1c2goe3R5cGU6ICdOT19ISVNUT1JZX0FWQUlMQUJMRScsIGlkOiBudWxsLCByZWY6IG51bGx9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzd2l0Y2hMYW5nKGxhbmcpIHtcclxuICAgIHRoaXMubG9jYWxTdG9yYWdlLnBvc3QoJ2xhbmcnLCBsYW5nKTtcclxuICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKTtcclxuICAgIHRoaXMubGFuZ1NlcnZpY2Uuc3dpdGNoTGFuZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVMYWJlbExhbmcobGFuZzogc3RyaW5nKSB7XHJcbiAgICBpZiAoJ2VuJyA9PT0gbGFuZykge1xyXG4gICAgICB0aGlzLmxhYmVsTGFuZyA9ICdsYWJlbEVuJztcclxuICAgIH0gZWxzZSBpZiAoJ2RlJyA9PT0gbGFuZykge1xyXG4gICAgICB0aGlzLmxhYmVsTGFuZyA9ICdsYWJlbERlJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubGFiZWxMYW5nID0gJ2xhYmVsRnInO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbnRyYWN0VHlwZSh0eXBlKSB7XHJcbiAgICByZXR1cm4gdHlwZSA9PT0gJ1NhbGUnID8gJ2Nlc3MnIDogdHlwZSA9PT0nQWNxdWlzaXRpb24nID8gJ2FjcScgOiAnYXV0aCc7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdFNlYXJjaCgkZXZlbnQ6IE1hdE9wdGlvblNlbGVjdGlvbkNoYW5nZSwgZG9jOiBhbnkpIHtcclxuICAgIHN3aXRjaCAoZG9jLmRvY1R5cGUpIHtcclxuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlBVUkNIQVNFX09SREVSOlxyXG4gICAgICAgIHRoaXMubmF2aWdhdGUoJ2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQnLCAnL3B1cmNoYXNlLW9yZGVycy8nICsgZG9jLnBvSWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuUFJPRFVDVDpcclxuICAgICAgICB0aGlzLm5hdmlnYXRlKCd2aWRlbycsICcvcHJvZHVjdC9jb25zdWx0LycgKyBkb2MucHJvZHVjdElkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLldPUktfVkVSU0lPTjpcclxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvd29yay1zdW1tYXJ5LycgKyBkb2MuaWQgKyAnL2luZm8nKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLkRFQUw6XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL2NvbW1lcmNpYWwvZGVhbC9jb25zdWx0LycgKyBkb2MuaWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuVEhJUkRfUEFSVFk6XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL3JlZmVyZW50aWFsL3RoaXJkLXBhcnR5LycgKyBkb2MuaWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuV09SS19SRUNPUkQ6XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL2NvbW1lcmNpYWwvd29yay1yZWNvcmQvY29uc3VsdC8nICsgZG9jLmlkICsgJy9nZW5lcmFsJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuQ09OVFJBQ1Q6XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL2xlZ2FsL2NvbnRyYWN0cy1kZXRhaWxzLycgKyB0aGlzLmdldENvbnRyYWN0VHlwZShkb2MudHlwZS5sYWJlbEVuKSArICcvJysgZG9jLmNvbnRyYWN0SWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuSU5WT0lDRTpcclxuICAgICAgICBpZiAoZG9jLnJpZ2h0KSB7XHJcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvY29tbWVyY2lhbC9pbnZvaWNlL3JpZ2h0LXBheW1lbnQtY29uc3VsdD9pZEVjaGVhbmNlPScgKyBkb2MuaW52b2ljZUlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL2NvbW1lcmNpYWwvaW52b2ljZS9tYXRlcmlhbC1wYXltZW50LWNvbnN1bHQ/aWRFY2hlYW5jZT0nICsgZG9jLmludm9pY2VJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxtYXQtdG9vbGJhciBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdG9vbGJhci1oZWFkZXIgdG9vbGJhci1wYWRkaW5nXCI+XHJcbiAgPHNwYW4gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kXCI+XHJcbiAgICA8YVxyXG4gICAgICBbaHJlZl09XCJlbnYgPT09ICdwcm9kJyA/ICdodHRwczovL3VuaXR5LnN0dWRpb2NhbmFsLmNvbS9kYXNoYm9hcmQnIDogKGVudiA9PT0gJ3NieCcgPyAnaHR0cHM6Ly91bml0eS1zYnguY3BsdXMvZGFzaGJvYXJkJyA6ICdodHRwczovL3VuaXR5LScgKyBlbnYgKyAnLnN0dWRpb2NhbmFsLmNvbS9kYXNoYm9hcmQnKVwiPlxyXG4gICAgICA8aW1nIGNsYXNzPVwibG9nby11bml0eVwiIHNyYz1cIi4vYXNzZXRzL2ltZy91bml0eV9sb2dvXzQ4eDQ4LnBuZ1wiPlxyXG4gICAgPC9hPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJlbnYgIT0gJ3Byb2QnXCIgW2F0dHIuaWRdPVwiJ2Vudi0nICsgZW52XCIgY2xhc3M9XCJlbnZcIj57eyBlbnYgfX08L3NwYW4+XHJcbiAgPC9zcGFuPlxyXG5cclxuICA8c2MtbWVudSBbbGFuZ109XCJsYW5nXCIgKG5hdmlnYXRlKT1cIm5hdmlnYXRlKCRldmVudC5tb2R1bGUsICRldmVudC5yb3V0ZSwgJGV2ZW50LnF1ZXJ5UGFyYW1zKVwiXHJcbiAgICAgICAgICAgKHJlZGlyZWN0KT1cInJlZGlyZWN0KCRldmVudC5yb3V0ZSlcIiBjbGFzcz1cIm1lbnUtaGVhZGVyXCIgLz5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImdsb2JhbC1zZWFyY2hcIj5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImhlYWRlci1pY29uXCI+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZ2xvYmFsLXNlYXJjaC1zZXBhcmF0b3JcIj48L3NwYW4+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXgtd2lkdGgtMTAwXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxyXG4gICAgICA8aW5wdXQgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sU2VhcmNoXCJcclxuICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1NlYXJjaFwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cImdsb2JhbC1zZWFyY2gtaW5wdXQgbWF4LXdpZHRoLTg1XCJcclxuICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInNlYXJjaCAuLi5cIiAvPlxyXG5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUobnVsbCwgJy9hZHZhbmNlZC1zZWFyY2gnKVwiXHJcbiAgICAgICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYWR2YW5jZWQtYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24+XHJcbiAgICAgICAgPG1hdC1pY29uPmZsYXNoX29uPC9tYXQtaWNvbj5cclxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILkFEVkFOQ0VEJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvU2VhcmNoPVwibWF0QXV0b2NvbXBsZXRlXCIgY2xhc3M9XCJtYXQtYXV0b2NvbXBsZXRlLWdsb2JhbC1zZWFyY2hcIiBwYW5lbFdpZHRoPVwiNTR2d1wiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIChvblNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQsIGRvYylcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkb2Mgb2YgZG9jdW1lbnRzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1vcHRpb24tZ2xvYmFsLXNlYXJjaFwiPlxyXG4gICAgICAgICAgPCEtLVBVUkNIQVNFX09SREVSLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuUFVSQ0hBU0VfT1JERVJcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+cmVjZWlwdF9sb25nPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC03MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFVSQ0hBU0VfT1JERVInIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLnBvTnVtYmVyIH19XHJcbiAgICAgICAgICAgICAgICAgIC0ge3sgZG9jLnRvdGFsQW1vdW50IHwgY3VycmVuY3k6IGRvYy5jdXJyZW5jeUNvZGU6J3N5bWJvbCc6dW5kZWZpbmVkOidmci1GUicgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkJBU0tFVF9OVU1CRVInIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jPy5iYXNrZXROdW1iZXIgPyBkb2MuYmFza2V0TnVtYmVyIDogJy0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5FQU4nIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jPy5lYW4gPyBkb2MuZWFuIDogJy0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLVBST0RVQ1QtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5QUk9EVUNUXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPm1vdmllPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxsaXBzaXMgZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC02MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFJPRFVDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5TVVBQT1JUJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5zdXBwb3J0W2xhYmVsTGFuZ10gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkVBTicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MuZWFuIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5SRUxFQVNFX0RBVEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jPy5yZWxlYXNlRGF0ZSA/IGRvYy5yZWxlYXNlRGF0ZSA6ICctJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS1XT1JLLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuV09SS19WRVJTSU9OXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnRoZWF0ZXJzPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC03NSBlbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uV09SSycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLnRpdGxlIH19ICh7eyBkb2MuY29kZUlzbyB9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLk1JTE9fQ09ERScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MubWlsb0NvZGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlBST0RVQ1RJT05fWUVBUicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MueWVhck9mUHJvZHVjdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS1ERUFMLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuREVBTFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5sb2NhbF9vZmZlcjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNzAgZWxsaXBzaXNcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuZGVhbE51bWJlciB9fSAtIHt7IGRvYy50aGlyZFBhcnR5Q2xpZW50TmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAoe3sgZG9jLnRoaXJkUGFydHlDbGllbnRTYXAgfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkFNT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcclxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmNhbGN1bGF0ZWRBbW91bnQgfCBjdXJyZW5jeTogZG9jLmN1cnJlbmN5Q29kZTonc3ltYm9sJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5WQUxJREFUSU9OX0RBVEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy52YWxpZGF0aW9uRGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS1XT1JLX1JFQ09SRC0tPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLldPUktfUkVDT1JEXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPmFzc2lnbm1lbnQ8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwIGVsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uV09SS19SRUNPUkQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5pZCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xMCBlbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkRFQUwnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5kZWFsTnVtYmVyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTMwIGVsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ0xJRU5UJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MudGhpcmRQYXJ0eUNsaWVudE5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5USVRMRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICh7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uTUlMT19DT0RFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fSlcclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmdldFRpdGxlKGxhbmcpIH19ICh7eyBkb2MubWlsb0NvZGUgfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkFNT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcclxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmFtb3VudCB8IGN1cnJlbmN5OiBkb2MuY3VycmVuY3lDb2RlOidzeW1ib2wnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLUlOVk9JQ0UtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5JTlZPSUNFXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnJlY2VpcHQ8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1IGVsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uSU5WT0lDRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLm51bWJlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNSBlbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkRFQUwnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5kZWFsTnVtYmVyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTIwIGVsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ0xJRU5UJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MudGhpcmRQYXJ0eUNsaWVudE5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5USVRMRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICh7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uTUlMT19DT0RFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fSlcclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmdldFRpdGxlKGxhbmcpIH19ICh7eyBkb2MubWlsb0NvZGUgfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkFNT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcclxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmFtb3VudCB8IGN1cnJlbmN5OiBkb2MuY3VycmVuY3lDb2RlOidzeW1ib2wnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLVRISVJEX1BBUlRZLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuVEhJUkRfUEFSVFlcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+cGVyc29uPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC04NSBlbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uVEhJUkRfUEFSVFknIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jb21wYW55T3JQZXJzb25OYW1lIH19ICh7eyBkb2MuYWRkcmVzcyB8IHRoaXJkUGFydHlBZGRyZXNzU2VhcmNoOiBsYW5nIH19XHJcbiAgICAgICAgICAgICAgICAgICk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNPREUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmNvZGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tQ09OVFJBQ1QtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5DT05UUkFDVFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdldENvbnRyYWN0VHlwZShkb2MudHlwZS5sYWJlbEVuKSA9PT0gJ2Nlc3MnXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5yZWNlaXB0PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q29udHJhY3RUeXBlKGRvYy50eXBlLmxhYmVsRW4pID09PSAnYWNxJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+c2hvcF90d288L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnZXRDb250cmFjdFR5cGUoZG9jLnR5cGUubGFiZWxFbikgPT09ICdhdXRoJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+YWNjb3VudF9jaXJjbGU8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwIGVsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ09OVFJBQ1QnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5saXNhSWQgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlRZUEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy50eXBlW2xhYmVsTGFuZ10gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uU1RBVFVTJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2Muc3RhdHVzW2xhYmVsTGFuZ10gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy50eXBlLmxhYmVsRW4gIT09ICdTYWxlJ1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC00MCBlbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5MSUNFTlNPUicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcclxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmxpY2Vuc29yID8gZG9jLmxpY2Vuc29yIDogJy0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MudHlwZS5sYWJlbEVuID09PSAnU2FsZSdcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNDAgZWxsaXBzaXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ1VTVE9NRVInIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5jdXN0b21lciA/IGRvYy5jdXN0b21lciA6ICctJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuXHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwidXNlciAmJiB1c2VyLnNlY29uZGFyeVwiIGNsYXNzPVwiY29ubmVjdGVkLWFzIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIj5cclxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5DT05ORUNURURfQVMnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19ICB7eyB1c2VyLmxvZ2luICsgJyAtICcgKyB1c2VyLmZpcnN0TmFtZSArICcgJyArIHVzZXIubmFtZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcblxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic3RvcElkZW50aXR5VGhlZnQoKVwiICpuZ0lmPVwidXNlci5zZWNvbmRhcnlcIiBjb2xvcj1cIndhcm5cIiBtYXQtcmFpc2VkLWJ1dHRvbj5cclxuICAgICAge3sgJ0NPUkUuU1RPUCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8c3BhbiAoY2xpY2spPVwiZ2V0SGlzdG9yeSgpXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVIaXN0b3J5XCJcclxuICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGhlYWRlci1pY29uIG1heC13aWR0aC01XCI+aGlzdG9yeTwvc3Bhbj5cclxuICA8bWF0LW1lbnUgI21lbnVIaXN0b3J5PVwibWF0TWVudVwiIGNsYXNzPVwiYWN0aW9uLW1lbnVcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhpc3Rvcnkgb2YgaGlzdG9yeUxpc3RcIiBbbmdTd2l0Y2hdPVwiaGlzdG9yeS50eXBlXCI+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdleHBlbmRpdHVyZS1jb21taXRtZW50JywgJy9wdXJjaGFzZS1vcmRlcnMvJyArIGhpc3RvcnkuaWQpXCIgKm5nU3dpdGNoQ2FzZT1cIidQUk9EVUNUJ1wiXHJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnRoZWF0ZXJzPC9tYXQtaWNvbj5cclxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLlBST0RVQ1QnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyB9fXt7IGhpc3RvcnkudHlwZSB9fSB7eyBoaXN0b3J5LnJlZiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQnLCAnL3B1cmNoYXNlLW9yZGVycy8nICsgaGlzdG9yeS5pZClcIiAqbmdTd2l0Y2hDYXNlPVwiJ1BPJ1wiXHJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnJlY2VpcHRfbG9uZzwvbWF0LWljb24+XHJcbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5QTycgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19IHt7IGhpc3RvcnkucmVmIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnY29tbWVyY2lhbCcsICcvZGVhbC9jb25zdWx0LycgKyBoaXN0b3J5LmlkKVwiICpuZ1N3aXRjaENhc2U9XCInREVBTCdcIlxyXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5sb2NhbF9vZmZlcjwvbWF0LWljb24+XHJcbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3sgaGlzdG9yeS5yZWYgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdjb21tZXJjaWFsJywgJy93b3JrLXJlY29yZC9jb25zdWx0LycrIGhpc3RvcnkuaWQgKycvZ2VuZXJhbCcpXCIgKm5nU3dpdGNoQ2FzZT1cIidXT1JLJ1wiXHJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmFzc2lnbm1lbnQ8L21hdC1pY29uPlxyXG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuV09SS19SRUNPUkQnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyB9fSB7eyBoaXN0b3J5LnJlZiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jb250cmFjdHMtZGV0YWlscy9hY3EvJyArIGhpc3RvcnkuaWQpXCJcclxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0NPTlRSQUNUX0FDUSdcIlxyXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5zaG9wX3R3bzwvbWF0LWljb24+XHJcbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5DT05UUkFDVF9BQ1EnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyB9fSB7eyBoaXN0b3J5LnJlZiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jb250cmFjdHMtZGV0YWlscy9jZXNzLycgKyBoaXN0b3J5LmlkKVwiXHJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidDT05UUkFDVF9DRVNTJ1wiXHJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnJlY2VpcHQ8L21hdC1pY29uPlxyXG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuQ09OVFJBQ1RfQ0VTUycgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19IHt7IGhpc3RvcnkucmVmIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnbGVnYWwnLCAnL2NvbnRyYWN0cy1kZXRhaWxzL2F1dGgvJyArIGhpc3RvcnkuaWQpXCJcclxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0NPTlRSQUNUX0FVVEgnXCJcclxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+YWNjb3VudF9jaXJjbGU8L21hdC1pY29uPlxyXG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuQ09OVFJBQ1RfQVVUSCcgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19IHt7IGhpc3RvcnkucmVmIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvYnVkZ2V0L2Zvcm0vJyArIGhpc3RvcnkuaWQpXCIgKm5nU3dpdGNoQ2FzZT1cIidCVURHRVQnXCJcclxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+cGF5bWVudHM8L21hdC1pY29uPlxyXG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuQlVER0VUJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3sgaGlzdG9yeS5yZWYgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKm5nU3dpdGNoQ2FzZT1cIidOT19ISVNUT1JZX0FWQUlMQUJMRSdcIiBtYXQtbWVudS1pdGVtPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+bm90X2ludGVyZXN0ZWQ8L21hdC1pY29uPlxyXG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuTk9fSElTVE9SWV9BVkFJTEFCTEUnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbWF0LW1lbnU+XHJcbiAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2VwYXJhdG9yXCI+PC9zcGFuPlxyXG5cclxuICA8c3BhbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwic2V0dGluZ3NcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIGhlYWRlci1pY29uIG1heC13aWR0aC01XCI+c2V0dGluZ3M8L3NwYW4+XHJcblxyXG4gIDwhLS0gI2VuZGRvY3JlZ2lvbiBtYXQtbWVudS10cmlnZ2VyLWZvciAtLT5cclxuICA8bWF0LW1lbnUgI3NldHRpbmdzPVwibWF0TWVudVwiIGNsYXNzPVwic2V0dGluZ3MtbWVudVwiPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic3dpdGNoVGhlbWUoKVwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRoZW1lLWljb25cIj50b2dnbGVfb248L21hdC1pY29uPlxyXG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5QQVJBTUVURVJTLlRIRU1FJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImltZy1idG5cIiAoY2xpY2spPSdzd2l0Y2hMYW5nKFwiZW5cIiknICpuZ0lmPSdsYW5nICE9PSBcImVuXCInIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxpbWcgY2xhc3M9XCJtYXQtaWNvblwiIHNyYz1cImFzc2V0cy9pbWcvZmxhZy9lbi1mbGFnLnBuZ1wiPlxyXG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5QQVJBTUVURVJTLlRJVExFLkxBTkdVQUdFUy5FTkdMSVNIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImltZy1idG5cIiAoY2xpY2spPSdzd2l0Y2hMYW5nKFwiZnJcIiknICpuZ0lmPSdsYW5nICE9PSBcImZyXCInIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxpbWcgY2xhc3M9XCJtYXQtaWNvblwiIHNyYz1cImFzc2V0cy9pbWcvZmxhZy9mci1mbGFnLnBuZ1wiPlxyXG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5QQVJBTUVURVJTLlRJVExFLkxBTkdVQUdFUy5GUkVOQ0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiaW1nLWJ0blwiIChjbGljayk9J3N3aXRjaExhbmcoXCJkZVwiKScgKm5nSWY9J2xhbmcgIT09IFwiZGVcIicgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgPGltZyBjbGFzcz1cIm1hdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ltZy9mbGFnL2RlLWZsYWcucG5nXCI+XHJcbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLlBBUkFNRVRFUlMuVElUTEUuTEFOR1VBR0VTLkRFVVRDSCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxuZy1jb250YWluZXIgKm5neFBlcm1pc3Npb25zRXhjZXB0PVwicmVzdHJpY3Rpb25zXCI+XHJcbiAgICAgIDwhLS1VU0VSLS0+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCd1c2VyJywgJy9hY2NvdW50L2F1dGhvcml6YXRpb24vc2VhcmNoJylcIiAqbmdJZj1cInVzZXIgJiYgdXNlci5hZG1pblwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5tYW5hZ2VfYWNjb3VudHM8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuVVNFUi5TRUNUSU9OX1RJVExFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLU1ZIFBSRUZFUkVOQ0VTLS0+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCd1c2VyJywgJy9hY2NvdW50L3NldHRpbmdzJylcIiBtYXQtbWVudS1pdGVtPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+c2V0dGluZ3M8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuVVNFUi5TRVRUSU5HUycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gIDwvbWF0LW1lbnU+XHJcbjwvbWF0LXRvb2xiYXI+XHJcblxyXG4iXX0=
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, EventEmitter, HostListener, Inject, Output } from '@angular/core';
|
|
3
|
+
import { Theme } from "../../decorators/theme.decorator";
|
|
4
|
+
import { User } from "../../decorators/user.decorator";
|
|
5
|
+
import { WEB_CONFIG } from "../../config";
|
|
6
|
+
import { RapidSearchItemType } from "../../enums/rapid-search-item-type.enum";
|
|
7
|
+
import { FormControl } from '@angular/forms';
|
|
8
|
+
import { debounceTime, map, switchMap } from 'rxjs/operators';
|
|
9
|
+
import { of } from 'rxjs';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@angular/router";
|
|
12
|
+
import * as i2 from "../../event/storage/local-storage-events.service";
|
|
13
|
+
import * as i3 from "../../services/storage/local-storage.service";
|
|
14
|
+
import * as i4 from "../../toaster/toaster-events.service";
|
|
15
|
+
import * as i5 from "@ngx-translate/core";
|
|
16
|
+
import * as i6 from "../../services/api/common-api.service";
|
|
17
|
+
import * as i7 from "../../services/storage/session-storage.service";
|
|
18
|
+
import * as i8 from "../../permissions/permissions.service";
|
|
19
|
+
import * as i9 from "@angular/cdk/overlay";
|
|
20
|
+
import * as i10 from "ngx-cookie-service";
|
|
21
|
+
import * as i11 from "../../services/translate-language/lang.service";
|
|
22
|
+
import * as i12 from "../../services/elasticsearch/elasticsearch.service";
|
|
23
|
+
import * as i13 from "@angular/material/input";
|
|
24
|
+
import * as i14 from "@angular/material/form-field";
|
|
25
|
+
import * as i15 from "@angular/material/button";
|
|
26
|
+
import * as i16 from "@angular/material/toolbar";
|
|
27
|
+
import * as i17 from "@angular/common";
|
|
28
|
+
import * as i18 from "ngx-permissions";
|
|
29
|
+
import * as i19 from "@angular/forms";
|
|
30
|
+
import * as i20 from "@angular/material/icon";
|
|
31
|
+
import * as i21 from "@angular/material/menu";
|
|
32
|
+
import * as i22 from "@angular/material/autocomplete";
|
|
33
|
+
import * as i23 from "@angular/material/core";
|
|
34
|
+
import * as i24 from "./menu/menu.component";
|
|
35
|
+
import * as i25 from "../../pipes/common-translate.pipe";
|
|
36
|
+
import * as i26 from "../../pipes/third-party-address-search.pipe";
|
|
37
|
+
export class HeaderComponent {
|
|
38
|
+
constructor(router, localStorageEvents, localStorage, toasterService, translate, commonApiService, sessionStorageService, permissionsService, overlayContainer, cookieService, langService, elasticsearchService, config) {
|
|
39
|
+
this.router = router;
|
|
40
|
+
this.localStorageEvents = localStorageEvents;
|
|
41
|
+
this.localStorage = localStorage;
|
|
42
|
+
this.toasterService = toasterService;
|
|
43
|
+
this.translate = translate;
|
|
44
|
+
this.commonApiService = commonApiService;
|
|
45
|
+
this.sessionStorageService = sessionStorageService;
|
|
46
|
+
this.permissionsService = permissionsService;
|
|
47
|
+
this.overlayContainer = overlayContainer;
|
|
48
|
+
this.cookieService = cookieService;
|
|
49
|
+
this.langService = langService;
|
|
50
|
+
this.elasticsearchService = elasticsearchService;
|
|
51
|
+
this.config = config;
|
|
52
|
+
this.toogleMenuEvent = new EventEmitter();
|
|
53
|
+
this.restrictions = ['CANAL_PLUS_INTERNATIONAL_RESTRICTION'];
|
|
54
|
+
this.labelLang = 'labelFr';
|
|
55
|
+
this.isHide = false;
|
|
56
|
+
this.currentScroll = 0;
|
|
57
|
+
this.historyList = [];
|
|
58
|
+
this.activeButton = '';
|
|
59
|
+
this.RapidSearchItemType = RapidSearchItemType;
|
|
60
|
+
this.apiUrl = this.config.api_url;
|
|
61
|
+
}
|
|
62
|
+
ngOnInit() {
|
|
63
|
+
this.formControlSearch = new FormControl(null);
|
|
64
|
+
this.initPermissionsService();
|
|
65
|
+
this.lang = this.localStorage.get('lang') || 'fr';
|
|
66
|
+
this.updateLabelLang(this.lang);
|
|
67
|
+
this.env = this.config.env.toLowerCase();
|
|
68
|
+
this.localStorageEvents.localStorageEvent.subscribe(() => {
|
|
69
|
+
this.lang = this.localStorage.get('lang');
|
|
70
|
+
this.updateLabelLang(this.lang);
|
|
71
|
+
});
|
|
72
|
+
this.documents$ = this.formControlSearch.valueChanges.pipe(debounceTime(500), switchMap(term => {
|
|
73
|
+
if (!term) {
|
|
74
|
+
return of([]);
|
|
75
|
+
}
|
|
76
|
+
return this.elasticsearchService
|
|
77
|
+
.getSearchResponse(term, this.user)
|
|
78
|
+
.pipe(map(searchResponse => {
|
|
79
|
+
return this.elasticsearchService.getDocuments(searchResponse);
|
|
80
|
+
}));
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
onWindowScroll() {
|
|
84
|
+
const numberVar = document.documentElement.scrollTop;
|
|
85
|
+
if (numberVar > this.currentScroll) {
|
|
86
|
+
this.isHide = true;
|
|
87
|
+
}
|
|
88
|
+
if (numberVar < this.currentScroll) {
|
|
89
|
+
this.isHide = false;
|
|
90
|
+
}
|
|
91
|
+
this.currentScroll = numberVar;
|
|
92
|
+
}
|
|
93
|
+
initPermissionsService() {
|
|
94
|
+
this.permissionsService.init();
|
|
95
|
+
}
|
|
96
|
+
switchTheme() {
|
|
97
|
+
if (this.theme === 'dark') {
|
|
98
|
+
this.localStorage.post('newTheme', 'light');
|
|
99
|
+
this.overlayContainer
|
|
100
|
+
.getContainerElement()
|
|
101
|
+
.classList.remove('dark-theme');
|
|
102
|
+
this.overlayContainer.getContainerElement().classList.add('light-theme');
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.localStorage.post('newTheme', 'dark');
|
|
106
|
+
this.overlayContainer
|
|
107
|
+
.getContainerElement()
|
|
108
|
+
.classList.remove('light-theme');
|
|
109
|
+
this.overlayContainer.getContainerElement().classList.add('dark-theme');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
stopIdentityTheft() {
|
|
113
|
+
sessionStorage.removeItem('authTokenSecondary');
|
|
114
|
+
}
|
|
115
|
+
navigate(module = '', route, queryParamString) {
|
|
116
|
+
if (!route.startsWith('/')) {
|
|
117
|
+
route = '/' + route;
|
|
118
|
+
}
|
|
119
|
+
const url = this.config.api_url + (module ? `/${module}` : '') + route;
|
|
120
|
+
let queryParams = null;
|
|
121
|
+
if (queryParamString != null) {
|
|
122
|
+
queryParams = JSON.parse(queryParamString);
|
|
123
|
+
}
|
|
124
|
+
if (window.location.href === url && queryParams == null) {
|
|
125
|
+
window.location.reload();
|
|
126
|
+
}
|
|
127
|
+
else if (window.location.pathname.startsWith(`/${module}`)) {
|
|
128
|
+
this.router
|
|
129
|
+
.navigateByUrl('/', { skipLocationChange: true })
|
|
130
|
+
.then(() => this.router.navigate([route], queryParams ? { queryParams } : {}));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
window.location.href = url;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
redirect(route) {
|
|
137
|
+
window.location.href = route;
|
|
138
|
+
}
|
|
139
|
+
getHistory() {
|
|
140
|
+
this.historyList = [];
|
|
141
|
+
if (this.localStorage.exist('history')) {
|
|
142
|
+
this.historyList = this.localStorage.get('history');
|
|
143
|
+
}
|
|
144
|
+
if (this.historyList.length === 0) {
|
|
145
|
+
this.historyList.push({ type: 'NO_HISTORY_AVAILABLE', id: null, ref: null });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
switchLang(lang) {
|
|
149
|
+
this.localStorage.post('lang', lang);
|
|
150
|
+
this.translate.use(lang);
|
|
151
|
+
this.langService.switchLang();
|
|
152
|
+
}
|
|
153
|
+
updateLabelLang(lang) {
|
|
154
|
+
if ('en' === lang) {
|
|
155
|
+
this.labelLang = 'labelEn';
|
|
156
|
+
}
|
|
157
|
+
else if ('de' === lang) {
|
|
158
|
+
this.labelLang = 'labelDe';
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
this.labelLang = 'labelFr';
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
getContractType(type) {
|
|
165
|
+
return type === 'Sale' ? 'cess' : type === 'Acquisition' ? 'acq' : 'auth';
|
|
166
|
+
}
|
|
167
|
+
onSelectSearch($event, doc) {
|
|
168
|
+
switch (doc.docType) {
|
|
169
|
+
case RapidSearchItemType.PURCHASE_ORDER:
|
|
170
|
+
this.navigate('expenditure-commitment', '/purchase-orders/' + doc.poId);
|
|
171
|
+
break;
|
|
172
|
+
case RapidSearchItemType.PRODUCT:
|
|
173
|
+
this.navigate('video', '/product/consult/' + doc.productId);
|
|
174
|
+
break;
|
|
175
|
+
case RapidSearchItemType.WORK_VERSION:
|
|
176
|
+
this.navigate(null, '/work-summary/' + doc.id + '/info');
|
|
177
|
+
break;
|
|
178
|
+
case RapidSearchItemType.DEAL:
|
|
179
|
+
this.navigate(null, '/commercial/deal/consult/' + doc.id);
|
|
180
|
+
break;
|
|
181
|
+
case RapidSearchItemType.THIRD_PARTY:
|
|
182
|
+
this.navigate(null, '/referential/third-party/' + doc.id);
|
|
183
|
+
break;
|
|
184
|
+
case RapidSearchItemType.WORK_RECORD:
|
|
185
|
+
this.navigate(null, '/commercial/work-record/consult/' + doc.id + '/general');
|
|
186
|
+
break;
|
|
187
|
+
case RapidSearchItemType.CONTRACT:
|
|
188
|
+
this.navigate(null, '/legal/contracts-details/' + this.getContractType(doc.type.labelEn) + '/' + doc.contractId);
|
|
189
|
+
break;
|
|
190
|
+
case RapidSearchItemType.INVOICE:
|
|
191
|
+
if (doc.right) {
|
|
192
|
+
this.navigate(null, '/commercial/invoice/right-payment-consult?idEcheance=' + doc.invoiceId);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
this.navigate(null, '/commercial/invoice/material-payment-consult?idEcheance=' + doc.invoiceId);
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.Router }, { token: i2.LocalStorageEventsService }, { token: i3.LocalStorageService }, { token: i4.ToasterEventsService }, { token: i5.TranslateService }, { token: i6.CommonApiService }, { token: i7.SessionStorageService }, { token: i8.PermissionsService }, { token: i9.OverlayContainer }, { token: i10.CookieService }, { token: i11.LangService }, { token: i12.ElasticsearchService }, { token: WEB_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
201
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HeaderComponent, selector: "sc-header", outputs: { toogleMenuEvent: "toogleMenuEvent" }, host: { listeners: { "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<mat-toolbar class=\"d-flex align-items-center toolbar-header toolbar-padding\">\n <span class=\"d-flex align-items-end\">\n <a\n [href]=\"env === 'prod' ? 'https://unity.studiocanal.com/dashboard' : (env === 'sbx' ? 'https://unity-sbx.cplus/dashboard' : 'https://unity-' + env + '.studiocanal.com/dashboard')\">\n <img class=\"logo-unity\" src=\"./assets/img/unity_logo_48x48.png\">\n </a>\n <span *ngIf=\"env != 'prod'\" [attr.id]=\"'env-' + env\" class=\"env\">{{ env }}</span>\n </span>\n\n <sc-menu [lang]=\"lang\" (navigate)=\"navigate($event.module, $event.route, $event.queryParams)\"\n (redirect)=\"redirect($event.route)\" class=\"menu-header\" />\n\n <div class=\"global-search\">\n <mat-icon class=\"header-icon\">search</mat-icon>\n <span class=\"global-search-separator\"></span>\n <mat-form-field class=\"max-width-100\" subscriptSizing=\"dynamic\">\n <input [formControl]=\"formControlSearch\"\n [matAutocomplete]=\"autoSearch\"\n class=\"global-search-input max-width-85\"\n matInput\n placeholder=\"search ...\" />\n\n <button (click)=\"navigate(null, '/advanced-search')\"\n matSuffix\n class=\"btn advanced-button\" mat-raised-button>\n <mat-icon>flash_on</mat-icon>\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ADVANCED' | commonTranslate: lang }}\n </button>\n\n <mat-autocomplete #autoSearch=\"matAutocomplete\" class=\"mat-autocomplete-global-search\" panelWidth=\"54vw\">\n <mat-option (onSelectionChange)=\"onSelectSearch($event, doc)\"\n *ngFor=\"let doc of documents$ | async\"\n class=\"mat-option-global-search\">\n <!--PURCHASE_ORDER-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PURCHASE_ORDER\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt_long</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PURCHASE_ORDER' | commonTranslate: lang }}</span>\n <span>{{ doc.poNumber }}\n - {{ doc.totalAmount | currency: doc.currencyCode:'symbol':undefined:'fr-FR' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.BASKET_NUMBER' | commonTranslate: lang }}</span>\n <span>{{ doc?.basketNumber ? doc.basketNumber : '-' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc?.ean ? doc.ean : '-' }}</span>\n </div>\n </div>\n </div>\n <!--PRODUCT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PRODUCT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">movie</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"ellipsis d-flex flex-column max-width-60\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.SUPPORT' | commonTranslate: lang }}</span>\n <span>{{ doc.support[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc.ean }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.RELEASE_DATE' | commonTranslate: lang }}</span>\n <span>{{ doc?.releaseDate ? doc.releaseDate : '-' }}</span>\n </div>\n </div>\n </div>\n <!--WORK-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_VERSION\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">theaters</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-75 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }} ({{ doc.codeIso }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.miloCode }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCTION_YEAR' | commonTranslate: lang }}</span>\n <span>{{ doc.yearOfProduction }}</span>\n </div>\n </div>\n </div>\n <!--DEAL-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.DEAL\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">local_offer</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }} - {{ doc.thirdPartyClientName }}\n ({{ doc.thirdPartyClientSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.calculatedAmount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.VALIDATION_DATE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.validationDate }}</span>\n </div>\n </div>\n </div>\n <!--WORK_RECORD-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_RECORD\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">assignment</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK_RECORD' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.id }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--INVOICE-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.number }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--THIRD_PARTY-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.THIRD_PARTY\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">person</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-85 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.THIRD_PARTY' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.companyOrPersonName }} ({{ doc.address | thirdPartyAddressSearch: lang }}\n )</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.code }}</span>\n </div>\n </div>\n </div>\n <!--CONTRACT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'cess'\"\n class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'acq'\"\n class=\"material-icons-outlined rapid-search-type-icon\">shop_two</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'auth'\"\n class=\"material-icons-outlined rapid-search-type-icon\">account_circle</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.lisaId }} </span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TYPE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.type[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.STATUS' | commonTranslate: lang\n }}</span>\n <span>{{ doc.status[labelLang] }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn !== 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.LICENSOR' | commonTranslate: lang\n }}</span>\n <span>{{ doc.licensor ? doc.licensor : '-' }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn === 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CUSTOMER' | commonTranslate: lang\n }}</span>\n <span>{{ doc.customer ? doc.customer : '-' }}</span>\n </div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n\n </mat-form-field>\n </div>\n\n <div *ngIf=\"user && user.secondary\" class=\"connected-as d-flex justify-content-between align-items-center\">\n <span style=\"margin-right: 10px\">\n {{ 'COMMON.HEADER.CONNECTED_AS' | commonTranslate: lang }} {{ user.login + ' - ' + user.firstName + ' ' + user.name }}\n </span>\n\n <button (click)=\"stopIdentityTheft()\" *ngIf=\"user.secondary\" color=\"warn\" mat-raised-button>\n {{ 'CORE.STOP' | commonTranslate: lang }}\n </button>\n </div>\n\n <span (click)=\"getHistory()\" [matMenuTriggerFor]=\"menuHistory\"\n class=\"material-icons header-icon max-width-5\">history</span>\n <mat-menu #menuHistory=\"matMenu\" class=\"action-menu\">\n <ng-container *ngFor=\"let history of historyList\" [ngSwitch]=\"history.type\">\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PRODUCT'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">theaters</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PRODUCT' | commonTranslate : lang }}{{ history.type }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PO'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt_long</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PO' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/deal/consult/' + history.id)\" *ngSwitchCase=\"'DEAL'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">local_offer</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.DEAL' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/work-record/consult/'+ history.id +'/general')\" *ngSwitchCase=\"'WORK'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">assignment</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.WORK_RECORD' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/acq/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">shop_two</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_ACQ' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/cess/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_CESS'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_CESS' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/auth/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_AUTH'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">account_circle</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_AUTH' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/budget/form/' + history.id)\" *ngSwitchCase=\"'BUDGET'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">payments</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.BUDGET' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button *ngSwitchCase=\"'NO_HISTORY_AVAILABLE'\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">not_interested</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\n </button>\n </ng-container>\n </mat-menu>\n <span class=\"header-separator\"></span>\n\n <span [matMenuTriggerFor]=\"settings\" class=\"material-icons-outlined header-icon max-width-5\">settings</span>\n\n <!-- #enddocregion mat-menu-trigger-for -->\n <mat-menu #settings=\"matMenu\" class=\"settings-menu\">\n <button (click)=\"switchTheme()\" mat-menu-item>\n <mat-icon class=\"theme-icon\">toggle_on</mat-icon>\n <span>{{ 'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/en-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/fr-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"de\")' *ngIf='lang !== \"de\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/de-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}</span>\n </button>\n <ng-container *ngxPermissionsExcept=\"restrictions\">\n <!--USER-->\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">manage_accounts</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\n </button>\n </ng-container>\n <!--MY PREFERENCES-->\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">settings</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\n </button>\n </mat-menu>\n</mat-toolbar>\n\n", styles: [".header-icon{color:#009ef7;cursor:pointer;text-align:center;margin:0 4px}.header-separator{display:inline-block;height:25%}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC}:host-context(.dark-theme){background-color:#2a2d3e}:host-context(.dark-theme) .global-search{background:#34384c}:host-context(.dark-theme) .global-search-input{background:#34384c}:host-context(.dark-theme) .global-search-separator{border-right:2px solid #2A2D3E}:host-context(.dark-theme) .header-separator{border-right:2px solid #111219}::ng-deep .dark-theme .mat-autocomplete-global-search{background:#2a2d3e!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search:focus:not(.mat-option-disabled){background:#212332!important;color:#fff!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search{color:#fff!important}::ng-deep .dark-theme .global-search-input::placeholder{color:#a1b7d4!important}:host-context(.light-theme){background-color:#fff}:host-context(.light-theme) .global-search{background:#eff3f6}:host-context(.light-theme) .global-search-input{background:#eff3f6}:host-context(.light-theme) .global-search-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .header-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .global-search-input::placeholder{color:#445d7b!important}:host-context(.light-theme) .mat-toolbar{background-color:#fff}::ng-deep .light-theme .mat-mdc-option.mat-option-global-search:hover:not(.mdc-list-item--disabled){background:#d3dfec!important}.logo-unity{height:48px;width:48px}.global-search .header-icon{margin:0 10px}.global-search{display:flex;align-items:center;height:40px;background:#eff3f6;margin-left:5px;border-radius:8px;flex:1 1 0;width:auto;min-width:0}.global-search-input{background:#f3f6f9;border:none;margin-left:10px;font-size:14px!important}.global-search-input :focus{outline:none}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{background:#7c87ff!important;color:#fff!important;width:90px;min-width:90px!important;height:24px!important;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;margin-right:5px;padding:0}.advanced-button .mat-icon{color:#fff!important;font-size:14px!important;height:unset;width:unset;margin-right:0}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-dev,#env-uat,#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}.global-search-input::placeholder{font-style:italic!important;font-weight:700!important}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}::ng-deep .global-search .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .global-search .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:transparent!important}::ng-deep .global-search .mat-mdc-form-field.mat-form-field-appearance-fill .mat-mdc-form-field-focus-overlay{opacity:0!important}::ng-deep .global-search .mdc-line-ripple{display:none!important}::ng-deep .global-search .mat-mdc-form-field-infix{min-height:40px!important;padding-top:8px!important;padding-bottom:8px!important}.max-width-0{flex:1 1 0%;max-width:0%}.max-width-5{flex:1 1 5%;max-width:5%}.max-width-10{flex:1 1 10%;max-width:10%}.max-width-15{flex:1 1 15%;max-width:15%}.max-width-20{flex:1 1 20%;max-width:20%}.max-width-25{flex:1 1 25%;max-width:25%}.max-width-30{flex:1 1 30%;max-width:30%}.max-width-35{flex:1 1 35%;max-width:35%}.max-width-40{flex:1 1 40%;max-width:40%}.max-width-45{flex:1 1 45%;max-width:45%}.max-width-50{flex:1 1 50%;max-width:50%}.max-width-55{flex:1 1 55%;max-width:55%}.max-width-60{flex:1 1 60%;max-width:60%}.max-width-65{flex:1 1 65%;max-width:65%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-80{flex:1 1 80%;max-width:80%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-90{flex:1 1 90%;max-width:90%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}.spacer{flex:1 1 auto}.toolbar-header{height:64px;position:absolute;padding:0 16px!important;z-index:999}.menu-header{max-width:70%;overflow:hidden;max-height:60px}::ng-deep .settings-menu.mat-mdc-menu-panel .mat-mdc-menu-item .mat-icon{height:24px;width:24px;display:flex;justify-content:center;align-items:center;margin-right:15px;font-size:18px}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn .mat-mdc-menu-item-text{display:flex;justify-content:start;align-items:center}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn img{height:12px!important;width:auto!important;display:block!important;padding-left:3px;margin-right:17px!important}.theme-icon{font-size:24px!important}\n"], dependencies: [{ kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i14.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i15.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i16.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i17.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i17.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i17.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i17.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i18.NgxPermissionsDirective, selector: "[ngxPermissionsOnly],[ngxPermissionsExcept]", inputs: ["ngxPermissionsOnly", "ngxPermissionsOnlyThen", "ngxPermissionsOnlyElse", "ngxPermissionsExcept", "ngxPermissionsExceptElse", "ngxPermissionsExceptThen", "ngxPermissionsThen", "ngxPermissionsElse", "ngxPermissionsOnlyAuthorisedStrategy", "ngxPermissionsOnlyUnauthorisedStrategy", "ngxPermissionsExceptUnauthorisedStrategy", "ngxPermissionsExceptAuthorisedStrategy", "ngxPermissionsUnauthorisedStrategy", "ngxPermissionsAuthorisedStrategy"], outputs: ["permissionsAuthorized", "permissionsUnauthorized"] }, { kind: "directive", type: i19.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i19.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i19.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i20.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i21.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i21.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i21.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i22.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i23.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i22.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i24.MenuComponent, selector: "sc-menu", inputs: ["lang"], outputs: ["navigate", "redirect"] }, { kind: "pipe", type: i17.AsyncPipe, name: "async" }, { kind: "pipe", type: i17.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i25.CommonTranslatePipe, name: "commonTranslate" }, { kind: "pipe", type: i26.ThirdPartyAddressSearchPipe, name: "thirdPartyAddressSearch" }] }); }
|
|
202
|
+
}
|
|
203
|
+
__decorate([
|
|
204
|
+
Theme()
|
|
205
|
+
], HeaderComponent.prototype, "theme", void 0);
|
|
206
|
+
__decorate([
|
|
207
|
+
User()
|
|
208
|
+
], HeaderComponent.prototype, "user", void 0);
|
|
209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeaderComponent, decorators: [{
|
|
210
|
+
type: Component,
|
|
211
|
+
args: [{ selector: 'sc-header', template: "<mat-toolbar class=\"d-flex align-items-center toolbar-header toolbar-padding\">\n <span class=\"d-flex align-items-end\">\n <a\n [href]=\"env === 'prod' ? 'https://unity.studiocanal.com/dashboard' : (env === 'sbx' ? 'https://unity-sbx.cplus/dashboard' : 'https://unity-' + env + '.studiocanal.com/dashboard')\">\n <img class=\"logo-unity\" src=\"./assets/img/unity_logo_48x48.png\">\n </a>\n <span *ngIf=\"env != 'prod'\" [attr.id]=\"'env-' + env\" class=\"env\">{{ env }}</span>\n </span>\n\n <sc-menu [lang]=\"lang\" (navigate)=\"navigate($event.module, $event.route, $event.queryParams)\"\n (redirect)=\"redirect($event.route)\" class=\"menu-header\" />\n\n <div class=\"global-search\">\n <mat-icon class=\"header-icon\">search</mat-icon>\n <span class=\"global-search-separator\"></span>\n <mat-form-field class=\"max-width-100\" subscriptSizing=\"dynamic\">\n <input [formControl]=\"formControlSearch\"\n [matAutocomplete]=\"autoSearch\"\n class=\"global-search-input max-width-85\"\n matInput\n placeholder=\"search ...\" />\n\n <button (click)=\"navigate(null, '/advanced-search')\"\n matSuffix\n class=\"btn advanced-button\" mat-raised-button>\n <mat-icon>flash_on</mat-icon>\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ADVANCED' | commonTranslate: lang }}\n </button>\n\n <mat-autocomplete #autoSearch=\"matAutocomplete\" class=\"mat-autocomplete-global-search\" panelWidth=\"54vw\">\n <mat-option (onSelectionChange)=\"onSelectSearch($event, doc)\"\n *ngFor=\"let doc of documents$ | async\"\n class=\"mat-option-global-search\">\n <!--PURCHASE_ORDER-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PURCHASE_ORDER\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt_long</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PURCHASE_ORDER' | commonTranslate: lang }}</span>\n <span>{{ doc.poNumber }}\n - {{ doc.totalAmount | currency: doc.currencyCode:'symbol':undefined:'fr-FR' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.BASKET_NUMBER' | commonTranslate: lang }}</span>\n <span>{{ doc?.basketNumber ? doc.basketNumber : '-' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc?.ean ? doc.ean : '-' }}</span>\n </div>\n </div>\n </div>\n <!--PRODUCT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PRODUCT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">movie</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"ellipsis d-flex flex-column max-width-60\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.SUPPORT' | commonTranslate: lang }}</span>\n <span>{{ doc.support[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc.ean }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.RELEASE_DATE' | commonTranslate: lang }}</span>\n <span>{{ doc?.releaseDate ? doc.releaseDate : '-' }}</span>\n </div>\n </div>\n </div>\n <!--WORK-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_VERSION\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">theaters</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-75 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }} ({{ doc.codeIso }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.miloCode }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCTION_YEAR' | commonTranslate: lang }}</span>\n <span>{{ doc.yearOfProduction }}</span>\n </div>\n </div>\n </div>\n <!--DEAL-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.DEAL\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">local_offer</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }} - {{ doc.thirdPartyClientName }}\n ({{ doc.thirdPartyClientSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.calculatedAmount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.VALIDATION_DATE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.validationDate }}</span>\n </div>\n </div>\n </div>\n <!--WORK_RECORD-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_RECORD\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">assignment</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK_RECORD' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.id }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--INVOICE-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.number }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--THIRD_PARTY-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.THIRD_PARTY\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">person</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-85 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.THIRD_PARTY' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.companyOrPersonName }} ({{ doc.address | thirdPartyAddressSearch: lang }}\n )</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.code }}</span>\n </div>\n </div>\n </div>\n <!--CONTRACT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'cess'\"\n class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'acq'\"\n class=\"material-icons-outlined rapid-search-type-icon\">shop_two</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'auth'\"\n class=\"material-icons-outlined rapid-search-type-icon\">account_circle</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.lisaId }} </span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TYPE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.type[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.STATUS' | commonTranslate: lang\n }}</span>\n <span>{{ doc.status[labelLang] }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn !== 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.LICENSOR' | commonTranslate: lang\n }}</span>\n <span>{{ doc.licensor ? doc.licensor : '-' }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn === 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CUSTOMER' | commonTranslate: lang\n }}</span>\n <span>{{ doc.customer ? doc.customer : '-' }}</span>\n </div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n\n </mat-form-field>\n </div>\n\n <div *ngIf=\"user && user.secondary\" class=\"connected-as d-flex justify-content-between align-items-center\">\n <span style=\"margin-right: 10px\">\n {{ 'COMMON.HEADER.CONNECTED_AS' | commonTranslate: lang }} {{ user.login + ' - ' + user.firstName + ' ' + user.name }}\n </span>\n\n <button (click)=\"stopIdentityTheft()\" *ngIf=\"user.secondary\" color=\"warn\" mat-raised-button>\n {{ 'CORE.STOP' | commonTranslate: lang }}\n </button>\n </div>\n\n <span (click)=\"getHistory()\" [matMenuTriggerFor]=\"menuHistory\"\n class=\"material-icons header-icon max-width-5\">history</span>\n <mat-menu #menuHistory=\"matMenu\" class=\"action-menu\">\n <ng-container *ngFor=\"let history of historyList\" [ngSwitch]=\"history.type\">\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PRODUCT'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">theaters</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PRODUCT' | commonTranslate : lang }}{{ history.type }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PO'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt_long</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PO' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/deal/consult/' + history.id)\" *ngSwitchCase=\"'DEAL'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">local_offer</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.DEAL' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/work-record/consult/'+ history.id +'/general')\" *ngSwitchCase=\"'WORK'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">assignment</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.WORK_RECORD' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/acq/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">shop_two</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_ACQ' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/cess/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_CESS'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_CESS' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/auth/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_AUTH'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">account_circle</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_AUTH' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/budget/form/' + history.id)\" *ngSwitchCase=\"'BUDGET'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">payments</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.BUDGET' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button *ngSwitchCase=\"'NO_HISTORY_AVAILABLE'\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">not_interested</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\n </button>\n </ng-container>\n </mat-menu>\n <span class=\"header-separator\"></span>\n\n <span [matMenuTriggerFor]=\"settings\" class=\"material-icons-outlined header-icon max-width-5\">settings</span>\n\n <!-- #enddocregion mat-menu-trigger-for -->\n <mat-menu #settings=\"matMenu\" class=\"settings-menu\">\n <button (click)=\"switchTheme()\" mat-menu-item>\n <mat-icon class=\"theme-icon\">toggle_on</mat-icon>\n <span>{{ 'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/en-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/fr-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"de\")' *ngIf='lang !== \"de\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/de-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}</span>\n </button>\n <ng-container *ngxPermissionsExcept=\"restrictions\">\n <!--USER-->\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">manage_accounts</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\n </button>\n </ng-container>\n <!--MY PREFERENCES-->\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">settings</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\n </button>\n </mat-menu>\n</mat-toolbar>\n\n", styles: [".header-icon{color:#009ef7;cursor:pointer;text-align:center;margin:0 4px}.header-separator{display:inline-block;height:25%}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC}:host-context(.dark-theme){background-color:#2a2d3e}:host-context(.dark-theme) .global-search{background:#34384c}:host-context(.dark-theme) .global-search-input{background:#34384c}:host-context(.dark-theme) .global-search-separator{border-right:2px solid #2A2D3E}:host-context(.dark-theme) .header-separator{border-right:2px solid #111219}::ng-deep .dark-theme .mat-autocomplete-global-search{background:#2a2d3e!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search:focus:not(.mat-option-disabled){background:#212332!important;color:#fff!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search{color:#fff!important}::ng-deep .dark-theme .global-search-input::placeholder{color:#a1b7d4!important}:host-context(.light-theme){background-color:#fff}:host-context(.light-theme) .global-search{background:#eff3f6}:host-context(.light-theme) .global-search-input{background:#eff3f6}:host-context(.light-theme) .global-search-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .header-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .global-search-input::placeholder{color:#445d7b!important}:host-context(.light-theme) .mat-toolbar{background-color:#fff}::ng-deep .light-theme .mat-mdc-option.mat-option-global-search:hover:not(.mdc-list-item--disabled){background:#d3dfec!important}.logo-unity{height:48px;width:48px}.global-search .header-icon{margin:0 10px}.global-search{display:flex;align-items:center;height:40px;background:#eff3f6;margin-left:5px;border-radius:8px;flex:1 1 0;width:auto;min-width:0}.global-search-input{background:#f3f6f9;border:none;margin-left:10px;font-size:14px!important}.global-search-input :focus{outline:none}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{background:#7c87ff!important;color:#fff!important;width:90px;min-width:90px!important;height:24px!important;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;margin-right:5px;padding:0}.advanced-button .mat-icon{color:#fff!important;font-size:14px!important;height:unset;width:unset;margin-right:0}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-dev,#env-uat,#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}.global-search-input::placeholder{font-style:italic!important;font-weight:700!important}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}::ng-deep .global-search .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .global-search .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:transparent!important}::ng-deep .global-search .mat-mdc-form-field.mat-form-field-appearance-fill .mat-mdc-form-field-focus-overlay{opacity:0!important}::ng-deep .global-search .mdc-line-ripple{display:none!important}::ng-deep .global-search .mat-mdc-form-field-infix{min-height:40px!important;padding-top:8px!important;padding-bottom:8px!important}.max-width-0{flex:1 1 0%;max-width:0%}.max-width-5{flex:1 1 5%;max-width:5%}.max-width-10{flex:1 1 10%;max-width:10%}.max-width-15{flex:1 1 15%;max-width:15%}.max-width-20{flex:1 1 20%;max-width:20%}.max-width-25{flex:1 1 25%;max-width:25%}.max-width-30{flex:1 1 30%;max-width:30%}.max-width-35{flex:1 1 35%;max-width:35%}.max-width-40{flex:1 1 40%;max-width:40%}.max-width-45{flex:1 1 45%;max-width:45%}.max-width-50{flex:1 1 50%;max-width:50%}.max-width-55{flex:1 1 55%;max-width:55%}.max-width-60{flex:1 1 60%;max-width:60%}.max-width-65{flex:1 1 65%;max-width:65%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-80{flex:1 1 80%;max-width:80%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-90{flex:1 1 90%;max-width:90%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}.spacer{flex:1 1 auto}.toolbar-header{height:64px;position:absolute;padding:0 16px!important;z-index:999}.menu-header{max-width:70%;overflow:hidden;max-height:60px}::ng-deep .settings-menu.mat-mdc-menu-panel .mat-mdc-menu-item .mat-icon{height:24px;width:24px;display:flex;justify-content:center;align-items:center;margin-right:15px;font-size:18px}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn .mat-mdc-menu-item-text{display:flex;justify-content:start;align-items:center}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn img{height:12px!important;width:auto!important;display:block!important;padding-left:3px;margin-right:17px!important}.theme-icon{font-size:24px!important}\n"] }]
|
|
212
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.LocalStorageEventsService }, { type: i3.LocalStorageService }, { type: i4.ToasterEventsService }, { type: i5.TranslateService }, { type: i6.CommonApiService }, { type: i7.SessionStorageService }, { type: i8.PermissionsService }, { type: i9.OverlayContainer }, { type: i10.CookieService }, { type: i11.LangService }, { type: i12.ElasticsearchService }, { type: undefined, decorators: [{
|
|
213
|
+
type: Inject,
|
|
214
|
+
args: [WEB_CONFIG]
|
|
215
|
+
}] }]; }, propDecorators: { theme: [], user: [], toogleMenuEvent: [{
|
|
216
|
+
type: Output
|
|
217
|
+
}], onWindowScroll: [{
|
|
218
|
+
type: HostListener,
|
|
219
|
+
args: ['window:scroll', []]
|
|
220
|
+
}] } });
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldy1mcm9udC1jb21tb24tbGlicmFyeS9zcmMvbGliL3V0aWwvY29tcG9uZW50L2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV3LWZyb250LWNvbW1vbi1saWJyYXJ5L3NyYy9saWIvdXRpbC9jb21wb25lbnQvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNNUYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQVFyRCxPQUFPLEVBQVMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBS2hELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFBO0FBQzNFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY3BDLE1BQU0sT0FBTyxlQUFlO0lBMkIxQixZQUNtQixNQUFjLEVBQ2Qsa0JBQTZDLEVBQzdDLFlBQWlDLEVBQ2pDLGNBQW9DLEVBQ3BDLFNBQTJCLEVBQzNCLGdCQUFrQyxFQUNsQyxxQkFBNEMsRUFDNUMsa0JBQXNDLEVBQ3RDLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixXQUF3QixF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QUFLLG1CQUFtQixDQUFDLE9BQU87Z0JBQzlCLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtvQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSx1REFBdUQsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzlGO3FCQUFNO29CQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLDBEQUEwRCxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDakc7Z0JBQ0QsTUFBTTtTQUNUO0lBQ0gsQ0FBQzsrR0F4TVUsZUFBZSw4WkF3Q2hCLFVBQVU7bUdBeENULGVBQWUsZ0tDdEM1QixnNHBCQXFYQTs7QUQ5VVc7SUFBUixLQUFLLEVBQUU7OENBQXNCO0FBQ3RCO0lBQVAsSUFBSSxFQUFFOzZDQUE0Qjs0RkFGeEIsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxXQUFXOzswQkE0Q2xCLE1BQU07MkJBQUMsVUFBVTs0Q0F2Q0osS0FBSyxNQUNOLElBQUksTUFFVCxlQUFlO3NCQUF4QixNQUFNO2dCQXdFQSxjQUFjO3NCQURwQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtDb29raWVTZXJ2aWNlfSBmcm9tICduZ3gtY29va2llLXNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T3ZlcmxheUNvbnRhaW5lcn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtQZXJtaXNzaW9uc0ludGVyZmFjZX0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvcGVybWlzc2lvbnMuaW50ZXJmYWNlXCI7XG5pbXBvcnQge1RoZW1lfSBmcm9tIFwiLi4vLi4vZGVjb3JhdG9ycy90aGVtZS5kZWNvcmF0b3JcIjtcbmltcG9ydCB7VXNlcn0gZnJvbSBcIi4uLy4uL2RlY29yYXRvcnMvdXNlci5kZWNvcmF0b3JcIjtcbmltcG9ydCB7QXV0aFVzZXJNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVsc1wiO1xuaW1wb3J0IHtMb2NhbFN0b3JhZ2VFdmVudHNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZXZlbnQvc3RvcmFnZS9sb2NhbC1zdG9yYWdlLWV2ZW50cy5zZXJ2aWNlXCI7XG5pbXBvcnQge0xvY2FsU3RvcmFnZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlL2xvY2FsLXN0b3JhZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHtUb2FzdGVyRXZlbnRzU2VydmljZX0gZnJvbSBcIi4uLy4uL3RvYXN0ZXIvdG9hc3Rlci1ldmVudHMuc2VydmljZVwiO1xuaW1wb3J0IHtDb21tb25BcGlTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXBpL2NvbW1vbi1hcGkuc2VydmljZVwiO1xuaW1wb3J0IHtTZXNzaW9uU3RvcmFnZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlXCI7XG5pbXBvcnQge1Blcm1pc3Npb25zU2VydmljZX0gZnJvbSBcIi4uLy4uL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLnNlcnZpY2VcIjtcbmltcG9ydCB7Q29uZmlnLCBXRUJfQ09ORklHfSBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XG5pbXBvcnQge0xhbmdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLWxhbmd1YWdlL2xhbmcuc2VydmljZVwiO1xuaW1wb3J0IHtFbGFzdGljc2VhcmNoU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2VsYXN0aWNzZWFyY2gvZWxhc3RpY3NlYXJjaC5zZXJ2aWNlXCI7XG5pbXBvcnQge1B1cmNoYXNlT3JkZXJSYXBpZFNlYXJjaE1vZGVsfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQvcHVyY2hhc2Utb3JkZXItcmFwaWQtc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQge1Byb2R1Y3RSYXBpZFNlYXJjaE1vZGVsfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3ZpZGVvL3Byb2R1Y3QtcmFwaWQtc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQge1JhcGlkU2VhcmNoSXRlbVR5cGV9IGZyb20gXCIuLi8uLi9lbnVtcy9yYXBpZC1zZWFyY2gtaXRlbS10eXBlLmVudW1cIlxuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtXb3JrVmVyc2lvblJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvcmVmZXJlbnRpYWwvd29yay12ZXJzaW9uLXJhcGlkLXNlYXJjaC5tb2RlbFwiO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIG1hcCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7TWF0T3B0aW9uU2VsZWN0aW9uQ2hhbmdlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7RGVhbFJhcGlkU2VhcmNoTW9kZWx9IGZyb20gJy4uLy4uL21vZGVscy9jb21tZXJjaWFsL2RlYWwtcmFwaWQtc2VhcmNoLW1vZGVsJztcbmltcG9ydCB7VGhpcmRQYXJ0eVJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvcmVmZXJlbnRpYWwvdGhpcmQtcGFydHktcmFwaWQtc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQge1dvcmtSZWNvcmRSYXBpZFNlYXJjaE1vZGVsfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbW1lcmNpYWwvd29yay1yZWNvcmQtcmFwaWQtc2VhcmNoLW1vZGVsXCI7XG5pbXBvcnQge0NvbnRyYWN0UmFwaWRTZWFyY2hNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy9sZWdhbC9jb250cmFjdC1yYXBpZC1zZWFyY2gtbW9kZWxcIjtcbmltcG9ydCB7SW52b2ljZVJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29tbWVyY2lhbC9pbnZvaWNlLXJhcGlkLXNlYXJjaC1tb2RlbFwiO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NjLWhlYWRlcicsXG4gIHN0eWxlVXJsczogWycuL2hlYWRlci5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vaGVhZGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIFBlcm1pc3Npb25zSW50ZXJmYWNlIHtcbiAgQFRoZW1lKCkgcHVibGljIHRoZW1lOiBzdHJpbmc7XG4gIEBVc2VyKCkgcHVibGljIHVzZXI6IEF1dGhVc2VyTW9kZWw7XG5cbiAgQE91dHB1dCgpIHRvb2dsZU1lbnVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICByZXN0cmljdGlvbnMgPSBbJ0NBTkFMX1BMVVNfSU5URVJOQVRJT05BTF9SRVNUUklDVElPTiddO1xuXG4gIHB1YmxpYyBsYW5nOiBzdHJpbmc7XG4gIHB1YmxpYyBsYWJlbExhbmcgPSAnbGFiZWxGcic7XG4gIHB1YmxpYyBpc0hpZGUgPSBmYWxzZTtcbiAgcHVibGljIGN1cnJlbnRTY3JvbGwgPSAwO1xuICBwdWJsaWMgZW52OiBzdHJpbmc7XG4gIHB1YmxpYyBoaXN0b3J5TGlzdCA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaVVybDogc3RyaW5nO1xuICBwdWJsaWMgYWN0aXZlQnV0dG9uOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIFJhcGlkU2VhcmNoSXRlbVR5cGUgPSBSYXBpZFNlYXJjaEl0ZW1UeXBlO1xuICBwdWJsaWMgZm9ybUNvbnRyb2xTZWFyY2g6IEZvcm1Db250cm9sPHN0cmluZz47XG4gIHB1YmxpYyBkb2N1bWVudHMkOiBPYnNlcnZhYmxlPChQdXJjaGFzZU9yZGVyUmFwaWRTZWFyY2hNb2RlbFxuICAgIHwgUHJvZHVjdFJhcGlkU2VhcmNoTW9kZWxcbiAgICB8IFdvcmtWZXJzaW9uUmFwaWRTZWFyY2hNb2RlbFxuICAgIHwgRGVhbFJhcGlkU2VhcmNoTW9kZWxcbiAgICB8IFdvcmtSZWNvcmRSYXBpZFNlYXJjaE1vZGVsXG4gICAgfCBUaGlyZFBhcnR5UmFwaWRTZWFyY2hNb2RlbFxuICAgIHwgQ29udHJhY3RSYXBpZFNlYXJjaE1vZGVsXG4gICAgfCBJbnZvaWNlUmFwaWRTZWFyY2hNb2RlbClbXT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsU3RvcmFnZUV2ZW50czogTG9jYWxTdG9yYWdlRXZlbnRzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyRXZlbnRzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1vbkFwaVNlcnZpY2U6IENvbW1vbkFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheUNvbnRhaW5lcjogT3ZlcmxheUNvbnRhaW5lcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYW5nU2VydmljZTogTGFuZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGFzdGljc2VhcmNoU2VydmljZTogRWxhc3RpY3NlYXJjaFNlcnZpY2UsXG4gICAgQEluamVjdChXRUJfQ09ORklHKSBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlnXG4gICkge1xuICAgIHRoaXMuYXBpVXJsID0gdGhpcy5jb25maWcuYXBpX3VybDtcbiAgfVxuXG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm9ybUNvbnRyb2xTZWFyY2ggPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihudWxsKTtcblxuICAgIHRoaXMuaW5pdFBlcm1pc3Npb25zU2VydmljZSgpO1xuICAgIHRoaXMubGFuZyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldCgnbGFuZycpIHx8ICdmcic7XG4gICAgdGhpcy51cGRhdGVMYWJlbExhbmcodGhpcy5sYW5nKTtcbiAgICB0aGlzLmVudiA9IHRoaXMuY29uZmlnLmVudi50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMubG9jYWxTdG9yYWdlRXZlbnRzLmxvY2FsU3RvcmFnZUV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmxhbmcgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXQoJ2xhbmcnKTtcbiAgICAgIHRoaXMudXBkYXRlTGFiZWxMYW5nKHRoaXMubGFuZyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRvY3VtZW50cyQgPSB0aGlzLmZvcm1Db250cm9sU2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICBzd2l0Y2hNYXAodGVybSA9PiB7XG4gICAgICAgIGlmICghdGVybSkge1xuICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZWxhc3RpY3NlYXJjaFNlcnZpY2VcbiAgICAgICAgICAuZ2V0U2VhcmNoUmVzcG9uc2UodGVybSwgdGhpcy51c2VyKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKHNlYXJjaFJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxhc3RpY3NlYXJjaFNlcnZpY2UuZ2V0RG9jdW1lbnRzKHNlYXJjaFJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbXSlcbiAgcHVibGljIG9uV2luZG93U2Nyb2xsKCkge1xuICAgIGNvbnN0IG51bWJlclZhciA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgaWYgKG51bWJlclZhciA+IHRoaXMuY3VycmVudFNjcm9sbCkge1xuICAgICAgdGhpcy5pc0hpZGUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAobnVtYmVyVmFyIDwgdGhpcy5jdXJyZW50U2Nyb2xsKSB7XG4gICAgICB0aGlzLmlzSGlkZSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRTY3JvbGwgPSBudW1iZXJWYXI7XG4gIH1cblxuXG4gIHB1YmxpYyBpbml0UGVybWlzc2lvbnNTZXJ2aWNlKCk6IHZvaWQge1xuICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmluaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBzd2l0Y2hUaGVtZSgpIHtcbiAgICBpZiAodGhpcy50aGVtZSA9PT0gJ2RhcmsnKSB7XG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZS5wb3N0KCduZXdUaGVtZScsICdsaWdodCcpO1xuICAgICAgdGhpcy5vdmVybGF5Q29udGFpbmVyXG4gICAgICAgIC5nZXRDb250YWluZXJFbGVtZW50KClcbiAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2RhcmstdGhlbWUnKTtcbiAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnbGlnaHQtdGhlbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UucG9zdCgnbmV3VGhlbWUnLCAnZGFyaycpO1xuICAgICAgdGhpcy5vdmVybGF5Q29udGFpbmVyXG4gICAgICAgIC5nZXRDb250YWluZXJFbGVtZW50KClcbiAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2xpZ2h0LXRoZW1lJyk7XG4gICAgICB0aGlzLm92ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmNsYXNzTGlzdC5hZGQoJ2RhcmstdGhlbWUnKTtcbiAgICB9XG4gIH1cblxuICBzdG9wSWRlbnRpdHlUaGVmdCgpIHtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdhdXRoVG9rZW5TZWNvbmRhcnknKTtcbiAgfVxuXG4gIHB1YmxpYyBuYXZpZ2F0ZShtb2R1bGUgPSAnJywgcm91dGU6IHN0cmluZywgcXVlcnlQYXJhbVN0cmluZz86IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAoIXJvdXRlLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcm91dGUgPSAnLycgKyByb3V0ZTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5hcGlfdXJsICsgKG1vZHVsZSA/IGAvJHttb2R1bGV9YCA6ICcnKSArIHJvdXRlO1xuICAgIGxldCBxdWVyeVBhcmFtcyA9IG51bGw7XG4gICAgaWYocXVlcnlQYXJhbVN0cmluZyAhPSBudWxsKSB7XG4gICAgICBxdWVyeVBhcmFtcyA9IEpTT04ucGFyc2UocXVlcnlQYXJhbVN0cmluZyk7XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmID09PSB1cmwgJiYgcXVlcnlQYXJhbXMgPT0gbnVsbCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfSBlbHNlIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aChgLyR7bW9kdWxlfWApKSB7XG4gICAgICB0aGlzLnJvdXRlclxuICAgICAgICAubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0sIHF1ZXJ5UGFyYW1zID8ge3F1ZXJ5UGFyYW1zfSA6IHt9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZGlyZWN0KHJvdXRlOiBzdHJpbmcpIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJvdXRlO1xuICB9XG5cbiAgcHVibGljIGdldEhpc3RvcnkoKSB7XG4gICAgdGhpcy5oaXN0b3J5TGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZS5leGlzdCgnaGlzdG9yeScpKSB7XG4gICAgICB0aGlzLmhpc3RvcnlMaXN0ID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0KCdoaXN0b3J5Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlzdG9yeUxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmhpc3RvcnlMaXN0LnB1c2goe3R5cGU6ICdOT19ISVNUT1JZX0FWQUlMQUJMRScsIGlkOiBudWxsLCByZWY6IG51bGx9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3dpdGNoTGFuZyhsYW5nKSB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UucG9zdCgnbGFuZycsIGxhbmcpO1xuICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKTtcbiAgICB0aGlzLmxhbmdTZXJ2aWNlLnN3aXRjaExhbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGFiZWxMYW5nKGxhbmc6IHN0cmluZykge1xuICAgIGlmICgnZW4nID09PSBsYW5nKSB7XG4gICAgICB0aGlzLmxhYmVsTGFuZyA9ICdsYWJlbEVuJztcbiAgICB9IGVsc2UgaWYgKCdkZScgPT09IGxhbmcpIHtcbiAgICAgIHRoaXMubGFiZWxMYW5nID0gJ2xhYmVsRGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhYmVsTGFuZyA9ICdsYWJlbEZyJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29udHJhY3RUeXBlKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ1NhbGUnID8gJ2Nlc3MnIDogdHlwZSA9PT0nQWNxdWlzaXRpb24nID8gJ2FjcScgOiAnYXV0aCc7XG4gIH1cblxuICBvblNlbGVjdFNlYXJjaCgkZXZlbnQ6IE1hdE9wdGlvblNlbGVjdGlvbkNoYW5nZSwgZG9jOiBhbnkpIHtcbiAgICBzd2l0Y2ggKGRvYy5kb2NUeXBlKSB7XG4gICAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuUFVSQ0hBU0VfT1JERVI6XG4gICAgICAgIHRoaXMubmF2aWdhdGUoJ2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQnLCAnL3B1cmNoYXNlLW9yZGVycy8nICsgZG9jLnBvSWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5QUk9EVUNUOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKCd2aWRlbycsICcvcHJvZHVjdC9jb25zdWx0LycgKyBkb2MucHJvZHVjdElkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuV09SS19WRVJTSU9OOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvd29yay1zdW1tYXJ5LycgKyBkb2MuaWQgKyAnL2luZm8nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuREVBTDpcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL2NvbW1lcmNpYWwvZGVhbC9jb25zdWx0LycgKyBkb2MuaWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5USElSRF9QQVJUWTpcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL3JlZmVyZW50aWFsL3RoaXJkLXBhcnR5LycgKyBkb2MuaWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5XT1JLX1JFQ09SRDpcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL2NvbW1lcmNpYWwvd29yay1yZWNvcmQvY29uc3VsdC8nICsgZG9jLmlkICsgJy9nZW5lcmFsJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5DT05UUkFDVDpcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL2xlZ2FsL2NvbnRyYWN0cy1kZXRhaWxzLycgKyB0aGlzLmdldENvbnRyYWN0VHlwZShkb2MudHlwZS5sYWJlbEVuKSArICcvJysgZG9jLmNvbnRyYWN0SWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5JTlZPSUNFOlxuICAgICAgICBpZiAoZG9jLnJpZ2h0KSB7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL2NvbW1lcmNpYWwvaW52b2ljZS9yaWdodC1wYXltZW50LWNvbnN1bHQ/aWRFY2hlYW5jZT0nICsgZG9jLmludm9pY2VJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL2NvbW1lcmNpYWwvaW52b2ljZS9tYXRlcmlhbC1wYXltZW50LWNvbnN1bHQ/aWRFY2hlYW5jZT0nICsgZG9jLmludm9pY2VJZCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cblxufVxuIiwiPG1hdC10b29sYmFyIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB0b29sYmFyLWhlYWRlciB0b29sYmFyLXBhZGRpbmdcIj5cbiAgPHNwYW4gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kXCI+XG4gICAgPGFcbiAgICAgIFtocmVmXT1cImVudiA9PT0gJ3Byb2QnID8gJ2h0dHBzOi8vdW5pdHkuc3R1ZGlvY2FuYWwuY29tL2Rhc2hib2FyZCcgOiAoZW52ID09PSAnc2J4JyA/ICdodHRwczovL3VuaXR5LXNieC5jcGx1cy9kYXNoYm9hcmQnIDogJ2h0dHBzOi8vdW5pdHktJyArIGVudiArICcuc3R1ZGlvY2FuYWwuY29tL2Rhc2hib2FyZCcpXCI+XG4gICAgICA8aW1nIGNsYXNzPVwibG9nby11bml0eVwiIHNyYz1cIi4vYXNzZXRzL2ltZy91bml0eV9sb2dvXzQ4eDQ4LnBuZ1wiPlxuICAgIDwvYT5cbiAgICA8c3BhbiAqbmdJZj1cImVudiAhPSAncHJvZCdcIiBbYXR0ci5pZF09XCInZW52LScgKyBlbnZcIiBjbGFzcz1cImVudlwiPnt7IGVudiB9fTwvc3Bhbj5cbiAgPC9zcGFuPlxuXG4gIDxzYy1tZW51IFtsYW5nXT1cImxhbmdcIiAobmF2aWdhdGUpPVwibmF2aWdhdGUoJGV2ZW50Lm1vZHVsZSwgJGV2ZW50LnJvdXRlLCAkZXZlbnQucXVlcnlQYXJhbXMpXCJcbiAgICAgICAgICAgKHJlZGlyZWN0KT1cInJlZGlyZWN0KCRldmVudC5yb3V0ZSlcIiBjbGFzcz1cIm1lbnUtaGVhZGVyXCIgLz5cblxuICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLXNlYXJjaFwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImhlYWRlci1pY29uXCI+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cImdsb2JhbC1zZWFyY2gtc2VwYXJhdG9yXCI+PC9zcGFuPlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1heC13aWR0aC0xMDBcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICA8aW5wdXQgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sU2VhcmNoXCJcbiAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9TZWFyY2hcIlxuICAgICAgICAgICAgIGNsYXNzPVwiZ2xvYmFsLXNlYXJjaC1pbnB1dCBtYXgtd2lkdGgtODVcIlxuICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJzZWFyY2ggLi4uXCIgLz5cblxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUobnVsbCwgJy9hZHZhbmNlZC1zZWFyY2gnKVwiXG4gICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBhZHZhbmNlZC1idXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbj5cbiAgICAgICAgPG1hdC1pY29uPmZsYXNoX29uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5BRFZBTkNFRCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0b1NlYXJjaD1cIm1hdEF1dG9jb21wbGV0ZVwiIGNsYXNzPVwibWF0LWF1dG9jb21wbGV0ZS1nbG9iYWwtc2VhcmNoXCIgcGFuZWxXaWR0aD1cIjU0dndcIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKG9uU2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudCwgZG9jKVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkb2Mgb2YgZG9jdW1lbnRzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtb3B0aW9uLWdsb2JhbC1zZWFyY2hcIj5cbiAgICAgICAgICA8IS0tUFVSQ0hBU0VfT1JERVItLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuUFVSQ0hBU0VfT1JERVJcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5yZWNlaXB0X2xvbmc8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTcwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlBVUkNIQVNFX09SREVSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MucG9OdW1iZXIgfX1cbiAgICAgICAgICAgICAgICAgIC0ge3sgZG9jLnRvdGFsQW1vdW50IHwgY3VycmVuY3k6IGRvYy5jdXJyZW5jeUNvZGU6J3N5bWJvbCc6dW5kZWZpbmVkOidmci1GUicgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5CQVNLRVRfTlVNQkVSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2M/LmJhc2tldE51bWJlciA/IGRvYy5iYXNrZXROdW1iZXIgOiAnLScgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5FQU4nIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYz8uZWFuID8gZG9jLmVhbiA6ICctJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tUFJPRFVDVC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5QUk9EVUNUXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+bW92aWU8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGxpcHNpcyBkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTYwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlBST0RVQ1QnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5TVVBQT1JUJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2Muc3VwcG9ydFtsYWJlbExhbmddIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uRUFOJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MuZWFuIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUkVMRUFTRV9EQVRFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2M/LnJlbGVhc2VEYXRlID8gZG9jLnJlbGVhc2VEYXRlIDogJy0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS1XT1JLLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLldPUktfVkVSU0lPTlwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnRoZWF0ZXJzPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC03NSBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5XT1JLJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLnRpdGxlIH19ICh7eyBkb2MuY29kZUlzbyB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5NSUxPX0NPREUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5taWxvQ29kZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlBST0RVQ1RJT05fWUVBUicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLnllYXJPZlByb2R1Y3Rpb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLURFQUwtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuREVBTFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPmxvY2FsX29mZmVyPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC03MCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uREVBTCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5kZWFsTnVtYmVyIH19IC0ge3sgZG9jLnRoaXJkUGFydHlDbGllbnROYW1lIH19XG4gICAgICAgICAgICAgICAgICAoe3sgZG9jLnRoaXJkUGFydHlDbGllbnRTYXAgfX0pPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5BTU9VTlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmNhbGN1bGF0ZWRBbW91bnQgfCBjdXJyZW5jeTogZG9jLmN1cnJlbmN5Q29kZTonc3ltYm9sJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uVkFMSURBVElPTl9EQVRFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZ1xuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy52YWxpZGF0aW9uRGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tV09SS19SRUNPUkQtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuV09SS19SRUNPUkRcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5hc3NpZ25tZW50PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uV09SS19SRUNPUkQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuaWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uREVBTCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5kZWFsTnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNMSUVOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy50aGlyZFBhcnR5Q2xpZW50TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTM1XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5USVRMRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAoe3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLk1JTE9fQ09ERScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX0pXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmdldFRpdGxlKGxhbmcpIH19ICh7eyBkb2MubWlsb0NvZGUgfX0pPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5BTU9VTlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmFtb3VudCB8IGN1cnJlbmN5OiBkb2MuY3VycmVuY3lDb2RlOidzeW1ib2wnIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS1JTlZPSUNFLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLklOVk9JQ0VcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5yZWNlaXB0PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNSBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uSU5WT0lDRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5udW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNSBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uREVBTCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5kZWFsTnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMjAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNMSUVOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy50aGlyZFBhcnR5Q2xpZW50TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTM1XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5USVRMRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAoe3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLk1JTE9fQ09ERScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX0pXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmdldFRpdGxlKGxhbmcpIH19ICh7eyBkb2MubWlsb0NvZGUgfX0pPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5BTU9VTlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmFtb3VudCB8IGN1cnJlbmN5OiBkb2MuY3VycmVuY3lDb2RlOidzeW1ib2wnIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS1USElSRF9QQVJUWS0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5USElSRF9QQVJUWVwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnBlcnNvbjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtODUgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uVEhJUkRfUEFSVFknIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuY29tcGFueU9yUGVyc29uTmFtZSB9fSAoe3sgZG9jLmFkZHJlc3MgfCB0aGlyZFBhcnR5QWRkcmVzc1NlYXJjaDogbGFuZyB9fVxuICAgICAgICAgICAgICAgICAgKTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNPREUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5jb2RlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS1DT05UUkFDVC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5DT05UUkFDVFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q29udHJhY3RUeXBlKGRvYy50eXBlLmxhYmVsRW4pID09PSAnY2VzcydcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5yZWNlaXB0PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdldENvbnRyYWN0VHlwZShkb2MudHlwZS5sYWJlbEVuKSA9PT0gJ2FjcSdcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5zaG9wX3R3bzwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnZXRDb250cmFjdFR5cGUoZG9jLnR5cGUubGFiZWxFbikgPT09ICdhdXRoJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPmFjY291bnRfY2lyY2xlPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ09OVFJBQ1QnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MubGlzYUlkIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uVFlQRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MudHlwZVtsYWJlbExhbmddIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5TVEFUVVMnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLnN0YXR1c1tsYWJlbExhbmddIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy50eXBlLmxhYmVsRW4gIT09ICdTYWxlJ1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC00MCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkxJQ0VOU09SJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZ1xuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5saWNlbnNvciA/IGRvYy5saWNlbnNvciA6ICctJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MudHlwZS5sYWJlbEVuID09PSAnU2FsZSdcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNDAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DVVNUT01FUicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MuY3VzdG9tZXIgPyBkb2MuY3VzdG9tZXIgOiAnLScgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cblxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJ1c2VyICYmIHVzZXIuc2Vjb25kYXJ5XCIgY2xhc3M9XCJjb25uZWN0ZWQtYXMgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuQ09OTkVDVEVEX0FTJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fSAge3sgdXNlci5sb2dpbiArICcgLSAnICsgdXNlci5maXJzdE5hbWUgKyAnICcgKyB1c2VyLm5hbWUgfX1cbiAgICAgIDwvc3Bhbj5cblxuICAgIDxidXR0b24gKGNsaWNrKT1cInN0b3BJZGVudGl0eVRoZWZ0KClcIiAqbmdJZj1cInVzZXIuc2Vjb25kYXJ5XCIgY29sb3I9XCJ3YXJuXCIgbWF0LXJhaXNlZC1idXR0b24+XG4gICAgICB7eyAnQ09SRS5TVE9QJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8c3BhbiAoY2xpY2spPVwiZ2V0SGlzdG9yeSgpXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVIaXN0b3J5XCJcbiAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBoZWFkZXItaWNvbiBtYXgtd2lkdGgtNVwiPmhpc3Rvcnk8L3NwYW4+XG4gIDxtYXQtbWVudSAjbWVudUhpc3Rvcnk9XCJtYXRNZW51XCIgY2xhc3M9XCJhY3Rpb24tbWVudVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhpc3Rvcnkgb2YgaGlzdG9yeUxpc3RcIiBbbmdTd2l0Y2hdPVwiaGlzdG9yeS50eXBlXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvcHVyY2hhc2Utb3JkZXJzLycgKyBoaXN0b3J5LmlkKVwiICpuZ1N3aXRjaENhc2U9XCInUFJPRFVDVCdcIlxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnRoZWF0ZXJzPC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5QUk9EVUNUJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX17eyBoaXN0b3J5LnR5cGUgfX0ge3sgaGlzdG9yeS5yZWYgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQnLCAnL3B1cmNoYXNlLW9yZGVycy8nICsgaGlzdG9yeS5pZClcIiAqbmdTd2l0Y2hDYXNlPVwiJ1BPJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+cmVjZWlwdF9sb25nPC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5QTycgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19IHt7IGhpc3RvcnkucmVmIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdjb21tZXJjaWFsJywgJy9kZWFsL2NvbnN1bHQvJyArIGhpc3RvcnkuaWQpXCIgKm5nU3dpdGNoQ2FzZT1cIidERUFMJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+bG9jYWxfb2ZmZXI8L21hdC1pY29uPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkRFQUwnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyB9fSB7eyBoaXN0b3J5LnJlZiB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnY29tbWVyY2lhbCcsICcvd29yay1yZWNvcmQvY29uc3VsdC8nKyBoaXN0b3J5LmlkICsnL2dlbmVyYWwnKVwiICpuZ1N3aXRjaENhc2U9XCInV09SSydcIlxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmFzc2lnbm1lbnQ8L21hdC1pY29uPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLldPUktfUkVDT1JEJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3sgaGlzdG9yeS5yZWYgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jb250cmFjdHMtZGV0YWlscy9hY3EvJyArIGhpc3RvcnkuaWQpXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidDT05UUkFDVF9BQ1EnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5zaG9wX3R3bzwvbWF0LWljb24+XG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuQ09OVFJBQ1RfQUNRJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3sgaGlzdG9yeS5yZWYgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jb250cmFjdHMtZGV0YWlscy9jZXNzLycgKyBoaXN0b3J5LmlkKVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInQ09OVFJBQ1RfQ0VTUydcIlxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnJlY2VpcHQ8L21hdC1pY29uPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkNPTlRSQUNUX0NFU1MnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyB9fSB7eyBoaXN0b3J5LnJlZiB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnbGVnYWwnLCAnL2NvbnRyYWN0cy1kZXRhaWxzL2F1dGgvJyArIGhpc3RvcnkuaWQpXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidDT05UUkFDVF9BVVRIJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+YWNjb3VudF9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkNPTlRSQUNUX0FVVEgnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyB9fSB7eyBoaXN0b3J5LnJlZiB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvYnVkZ2V0L2Zvcm0vJyArIGhpc3RvcnkuaWQpXCIgKm5nU3dpdGNoQ2FzZT1cIidCVURHRVQnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5wYXltZW50czwvbWF0LWljb24+XG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuQlVER0VUJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3sgaGlzdG9yeS5yZWYgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAqbmdTd2l0Y2hDYXNlPVwiJ05PX0hJU1RPUllfQVZBSUxBQkxFJ1wiIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+bm90X2ludGVyZXN0ZWQ8L21hdC1pY29uPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLk5PX0hJU1RPUllfQVZBSUxBQkxFJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L21hdC1tZW51PlxuICA8c3BhbiBjbGFzcz1cImhlYWRlci1zZXBhcmF0b3JcIj48L3NwYW4+XG5cbiAgPHNwYW4gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInNldHRpbmdzXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCBoZWFkZXItaWNvbiBtYXgtd2lkdGgtNVwiPnNldHRpbmdzPC9zcGFuPlxuXG4gIDwhLS0gI2VuZGRvY3JlZ2lvbiBtYXQtbWVudS10cmlnZ2VyLWZvciAtLT5cbiAgPG1hdC1tZW51ICNzZXR0aW5ncz1cIm1hdE1lbnVcIiBjbGFzcz1cInNldHRpbmdzLW1lbnVcIj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJzd2l0Y2hUaGVtZSgpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRoZW1lLWljb25cIj50b2dnbGVfb248L21hdC1pY29uPlxuICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuUEFSQU1FVEVSUy5USEVNRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImltZy1idG5cIiAoY2xpY2spPSdzd2l0Y2hMYW5nKFwiZW5cIiknICpuZ0lmPSdsYW5nICE9PSBcImVuXCInIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8aW1nIGNsYXNzPVwibWF0LWljb25cIiBzcmM9XCJhc3NldHMvaW1nL2ZsYWcvZW4tZmxhZy5wbmdcIj5cbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLlBBUkFNRVRFUlMuVElUTEUuTEFOR1VBR0VTLkVOR0xJU0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJpbWctYnRuXCIgKGNsaWNrKT0nc3dpdGNoTGFuZyhcImZyXCIpJyAqbmdJZj0nbGFuZyAhPT0gXCJmclwiJyBtYXQtbWVudS1pdGVtPlxuICAgICAgPGltZyBjbGFzcz1cIm1hdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ltZy9mbGFnL2ZyLWZsYWcucG5nXCI+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5QQVJBTUVURVJTLlRJVExFLkxBTkdVQUdFUy5GUkVOQ0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJpbWctYnRuXCIgKGNsaWNrKT0nc3dpdGNoTGFuZyhcImRlXCIpJyAqbmdJZj0nbGFuZyAhPT0gXCJkZVwiJyBtYXQtbWVudS1pdGVtPlxuICAgICAgPGltZyBjbGFzcz1cIm1hdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ltZy9mbGFnL2RlLWZsYWcucG5nXCI+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5QQVJBTUVURVJTLlRJVExFLkxBTkdVQUdFUy5ERVVUQ0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxuZy1jb250YWluZXIgKm5neFBlcm1pc3Npb25zRXhjZXB0PVwicmVzdHJpY3Rpb25zXCI+XG4gICAgICA8IS0tVVNFUi0tPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ3VzZXInLCAnL2FjY291bnQvYXV0aG9yaXphdGlvbi9zZWFyY2gnKVwiICpuZ0lmPVwidXNlciAmJiB1c2VyLmFkbWluXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5tYW5hZ2VfYWNjb3VudHM8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLlVTRVIuU0VDVElPTl9USVRMRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwhLS1NWSBQUkVGRVJFTkNFUy0tPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ3VzZXInLCAnL2FjY291bnQvc2V0dGluZ3MnKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+c2V0dGluZ3M8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLlVTRVIuU0VUVElOR1MnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gIDwvbWF0LW1lbnU+XG48L21hdC10b29sYmFyPlxuXG4iXX0=
|