new-front-common-library 0.0.75 → 0.0.77-ERGO-ROBOTO
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 +648 -648
- package/assets/css/_flex.scss +55 -55
- package/assets/css/_global.scss +692 -692
- package/assets/css/_light-theme.scss +651 -651
- package/assets/css/_mat-palettes.scss +96 -96
- package/assets/css/_themes.scss +52 -52
- package/assets/i18n/front-common/de.json +24 -24
- package/assets/i18n/front-common/en.json +24 -24
- package/assets/i18n/front-common/fr.json +24 -24
- package/bundles/new-front-common-library.umd.js +4903 -4900
- package/bundles/new-front-common-library.umd.js.map +1 -1
- package/esm2015/lib/util/array.service.js +19 -19
- package/esm2015/lib/util/component/header/header.component.js +189 -189
- package/esm2015/lib/util/component/overlay/overlay.component.js +44 -44
- package/esm2015/lib/util/component/overlay/overlay.service.js +24 -24
- package/esm2015/lib/util/component/popup/popup-login/popup-login.component.js +90 -90
- package/esm2015/lib/util/component/sub-header/sub-header.component.js +48 -48
- package/esm2015/lib/util/config.js +8 -8
- package/esm2015/lib/util/date/PeriodModel.js +8 -8
- package/esm2015/lib/util/date/date-adapter.js +41 -41
- package/esm2015/lib/util/date/date-format-constants.js +12 -12
- package/esm2015/lib/util/date/date.util.js +218 -218
- package/esm2015/lib/util/decorators/theme.decorator.js +22 -22
- package/esm2015/lib/util/decorators/user.decorator.js +25 -25
- package/esm2015/lib/util/directives/my-number-formatter-directive.js +34 -34
- package/esm2015/lib/util/directives/show-if-truncated.directive.js +25 -25
- package/esm2015/lib/util/enums/rapid-search-item-type.enum.js +10 -10
- package/esm2015/lib/util/enums/status-color.enum.js +11 -11
- package/esm2015/lib/util/event/header/header-events.service.js +21 -21
- package/esm2015/lib/util/event/storage/local-storage-events.service.js +17 -17
- package/esm2015/lib/util/event/storage/session-storage-events.service.js +18 -18
- package/esm2015/lib/util/http/http-params.builder.js +27 -27
- package/esm2015/lib/util/i18n/de.js +60 -59
- package/esm2015/lib/util/i18n/en.js +60 -59
- package/esm2015/lib/util/i18n/fr.js +60 -59
- package/esm2015/lib/util/i18n/multi-translate-http-loader.js +21 -21
- package/esm2015/lib/util/interfaces/permissions.interface.js +2 -2
- package/esm2015/lib/util/models/any-line.model.js +37 -37
- package/esm2015/lib/util/models/audio-content.model.js +27 -27
- package/esm2015/lib/util/models/authPermission.model.js +16 -16
- package/esm2015/lib/util/models/authUser.model.js +20 -20
- package/esm2015/lib/util/models/basic.model.js +14 -14
- package/esm2015/lib/util/models/box-set-item.model.js +19 -19
- package/esm2015/lib/util/models/disc-program.model.js +26 -26
- package/esm2015/lib/util/models/disc.model.js +22 -22
- package/esm2015/lib/util/models/eventType.model.js +7 -7
- package/esm2015/lib/util/models/expenditure-commitment/purchase-order-file.model.js +22 -22
- package/esm2015/lib/util/models/expenditure-commitment/purchase-order-rapid-search.model.js +3 -3
- package/esm2015/lib/util/models/index.js +98 -98
- package/esm2015/lib/util/models/lang-line.model.js +27 -27
- package/esm2015/lib/util/models/legal/contract-work.model.js +23 -23
- package/esm2015/lib/util/models/legal/contract-work2.model.js +21 -21
- package/esm2015/lib/util/models/media-line.model.js +18 -18
- package/esm2015/lib/util/models/menu-language.model.js +15 -15
- package/esm2015/lib/util/models/permission.model.js +20 -20
- package/esm2015/lib/util/models/product-box-set.model.js +16 -16
- package/esm2015/lib/util/models/product-disc-detail.model.js +22 -22
- package/esm2015/lib/util/models/product-disc.model.js +27 -27
- package/esm2015/lib/util/models/product-division.model.js +29 -29
- package/esm2015/lib/util/models/product-type.model.js +22 -22
- package/esm2015/lib/util/models/product.model.js +62 -62
- package/esm2015/lib/util/models/program.model.js +28 -28
- package/esm2015/lib/util/models/purchase-order/purchase-order.model.js +53 -53
- package/esm2015/lib/util/models/referential/WorkVersionArticleDto.js +17 -17
- package/esm2015/lib/util/models/referential/adress-type.model.js +14 -14
- package/esm2015/lib/util/models/referential/adress.model.js +28 -28
- package/esm2015/lib/util/models/referential/attached-file.model.js +17 -17
- package/esm2015/lib/util/models/referential/bank-account.model.js +24 -24
- package/esm2015/lib/util/models/referential/bank-accounts.model.js +31 -31
- package/esm2015/lib/util/models/referential/basic-hierarchy.model.js +8 -8
- package/esm2015/lib/util/models/referential/broadcast-list-item.model.js +13 -13
- package/esm2015/lib/util/models/referential/color.model.js +16 -16
- package/esm2015/lib/util/models/referential/company.model.js +16 -16
- package/esm2015/lib/util/models/referential/content-type.model.js +17 -17
- package/esm2015/lib/util/models/referential/content.model.js +22 -22
- package/esm2015/lib/util/models/referential/cost-center-criteria-values.model.js +14 -14
- package/esm2015/lib/util/models/referential/cost-center-criteria.model.js +13 -13
- package/esm2015/lib/util/models/referential/cost-center.model.js +28 -28
- package/esm2015/lib/util/models/referential/coutry.model.js +16 -16
- package/esm2015/lib/util/models/referential/currency.model.js +20 -20
- package/esm2015/lib/util/models/referential/editorial-content.model.js +18 -18
- package/esm2015/lib/util/models/referential/fixing.model.js +16 -16
- package/esm2015/lib/util/models/referential/flat-media.model.js +18 -18
- package/esm2015/lib/util/models/referential/format-image.model.js +16 -16
- package/esm2015/lib/util/models/referential/format-type.model.js +16 -16
- package/esm2015/lib/util/models/referential/format.model.js +17 -17
- package/esm2015/lib/util/models/referential/fsk-index.model.js +20 -20
- package/esm2015/lib/util/models/referential/fsk.model.js +22 -22
- package/esm2015/lib/util/models/referential/function.model.js +23 -23
- package/esm2015/lib/util/models/referential/genre.model.js +17 -17
- package/esm2015/lib/util/models/referential/invoice-product-type.model.js +22 -22
- package/esm2015/lib/util/models/referential/keywords.model.js +2 -2
- package/esm2015/lib/util/models/referential/language.model.js +18 -18
- package/esm2015/lib/util/models/referential/media-filter.model.js +3 -3
- package/esm2015/lib/util/models/referential/media.model.js +20 -20
- package/esm2015/lib/util/models/referential/module.model.js +20 -20
- package/esm2015/lib/util/models/referential/parameter.model.js +2 -2
- package/esm2015/lib/util/models/referential/participant.model.js +20 -20
- package/esm2015/lib/util/models/referential/person.model.js +23 -23
- package/esm2015/lib/util/models/referential/project-status.model.js +16 -16
- package/esm2015/lib/util/models/referential/quota.model.js +17 -17
- package/esm2015/lib/util/models/referential/referential-entity-state.model.js +16 -16
- package/esm2015/lib/util/models/referential/referential-value.model.js +16 -16
- package/esm2015/lib/util/models/referential/referentiel.model.js +26 -26
- package/esm2015/lib/util/models/referential/restriction.model.js +20 -20
- package/esm2015/lib/util/models/referential/sap-order.model.js +20 -20
- package/esm2015/lib/util/models/referential/service-error.model.js +15 -15
- package/esm2015/lib/util/models/referential/sound.model.js +16 -16
- package/esm2015/lib/util/models/referential/territories-languages.model.js +16 -16
- package/esm2015/lib/util/models/referential/territory-filter.model.js +3 -3
- package/esm2015/lib/util/models/referential/territory.model.js +17 -17
- package/esm2015/lib/util/models/referential/theme.model.js +17 -17
- package/esm2015/lib/util/models/referential/third-party-creation-request.model.js +44 -44
- package/esm2015/lib/util/models/referential/third-party-module.model.js +20 -20
- package/esm2015/lib/util/models/referential/third-party.model.js +83 -83
- package/esm2015/lib/util/models/referential/translated-value-model.js +16 -16
- package/esm2015/lib/util/models/referential/tva.model.js +16 -16
- package/esm2015/lib/util/models/referential/type-export.model.js +16 -16
- package/esm2015/lib/util/models/referential/type-tva-company-territory.model.js +32 -32
- package/esm2015/lib/util/models/referential/type-tva.model.js +25 -25
- package/esm2015/lib/util/models/referential/work-addons-model.js +16 -16
- package/esm2015/lib/util/models/referential/work-appartenance.model.js +17 -17
- package/esm2015/lib/util/models/referential/work-genre.model.js +16 -16
- package/esm2015/lib/util/models/referential/work-language.model.js +16 -16
- package/esm2015/lib/util/models/referential/work-milo.model.js +61 -61
- package/esm2015/lib/util/models/referential/work-participant.model.js +21 -21
- package/esm2015/lib/util/models/referential/work-restrictions-model.js +13 -13
- package/esm2015/lib/util/models/referential/work-theme.model.js +16 -16
- package/esm2015/lib/util/models/referential/work-title.model.js +20 -20
- package/esm2015/lib/util/models/referential/work-version-origin.model.js +16 -16
- package/esm2015/lib/util/models/referential/work-version-rapid-search.model.js +3 -3
- package/esm2015/lib/util/models/referential/work-versions-used.model.js +19 -19
- package/esm2015/lib/util/models/referential/work-versions.model.js +27 -27
- package/esm2015/lib/util/models/referential/work-year-production.model.js +13 -13
- package/esm2015/lib/util/models/referential/work.model.js +22 -22
- package/esm2015/lib/util/models/referential/zone.model.js +14 -14
- package/esm2015/lib/util/models/referentiel.model.js +26 -26
- package/esm2015/lib/util/models/search-response.model.js +10 -10
- package/esm2015/lib/util/models/section.model.js +8 -8
- package/esm2015/lib/util/models/select/options.model.js +8 -8
- package/esm2015/lib/util/models/select/select.model.js +7 -7
- package/esm2015/lib/util/models/subtitle-content.model.js +28 -28
- package/esm2015/lib/util/models/user-video.model.js +22 -22
- package/esm2015/lib/util/models/user.model.js +34 -34
- package/esm2015/lib/util/models/video/product-rapid-search.model.js +3 -3
- package/esm2015/lib/util/models/video/support-rapid-search.model.js +3 -3
- package/esm2015/lib/util/models/video-content.model.js +18 -18
- package/esm2015/lib/util/number.validator.js +129 -129
- package/esm2015/lib/util/permissions/permissions.service.js +41 -41
- package/esm2015/lib/util/pipes/capitalizefirst.pipe.js +41 -41
- package/esm2015/lib/util/pipes/comma-separated-number.pipe.js +15 -15
- package/esm2015/lib/util/pipes/common-translate.pipe.js +38 -38
- package/esm2015/lib/util/pipes/display-html.pipe.js +20 -20
- package/esm2015/lib/util/pipes/display-null.pipe.js +24 -24
- package/esm2015/lib/util/pipes/format-duration.pipe.js +23 -23
- package/esm2015/lib/util/pipes/format-number-input.pipe.js +22 -22
- package/esm2015/lib/util/pipes/local-date.pipe.js +27 -27
- package/esm2015/lib/util/pipes/my-number.pipe.js +44 -44
- package/esm2015/lib/util/pipes/third-party-address.pipe.js +17 -17
- package/esm2015/lib/util/pipes/trim-string.pipe.js +25 -25
- package/esm2015/lib/util/regex/regex.service.js +94 -94
- package/esm2015/lib/util/services/api/common-api.service.js +98 -98
- package/esm2015/lib/util/services/elasticsearch/elasticsearch.service.js +65 -65
- package/esm2015/lib/util/services/form-action/form-actions-events.service.js +25 -25
- package/esm2015/lib/util/services/guard/auth.guard.js +43 -43
- package/esm2015/lib/util/services/guard/login.guard.js +34 -34
- package/esm2015/lib/util/services/history/history.service.js +39 -39
- package/esm2015/lib/util/services/interceptor/auth.interceptor.js +53 -53
- package/esm2015/lib/util/services/jwt-security/aes.service.js +34 -34
- package/esm2015/lib/util/services/jwt-security/interceptorhttp.service.js +18 -18
- package/esm2015/lib/util/services/jwt-security/jwt.helpher.js +34 -34
- package/esm2015/lib/util/services/storage/local-storage.service.js +36 -36
- package/esm2015/lib/util/services/storage/session-storage.service.js +38 -38
- package/esm2015/lib/util/services/translate-language/lang.service.js +31 -31
- package/esm2015/lib/util/sort.js +22 -22
- package/esm2015/lib/util/theme/theme-event.service.js +17 -17
- package/esm2015/lib/util/toaster/toaster-events.service.js +32 -32
- package/esm2015/lib/util/util.module.js +270 -270
- package/esm2015/new-front-common-library.js +4 -4
- package/esm2015/public-api.js +56 -56
- package/fesm2015/new-front-common-library.js +4228 -4225
- package/fesm2015/new-front-common-library.js.map +1 -1
- package/lib/util/array.service.d.ts +7 -7
- package/lib/util/component/header/header.component.d.ts +65 -65
- 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 +32 -32
- 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-adapter.d.ts +8 -8
- 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/rapid-search-item-type.enum.d.ts +8 -8
- 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 +51 -50
- package/lib/util/i18n/en.d.ts +51 -50
- package/lib/util/i18n/fr.d.ts +51 -50
- 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 +14 -14
- 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/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/index.d.ts +97 -97
- package/lib/util/models/lang-line.model.d.ts +18 -18
- 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/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 -11
- package/lib/util/models/referential/theme.model.d.ts +7 -7
- 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.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/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/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 +25 -25
- 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/permissions/permissions.service.d.ts +12 -12
- 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-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.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/common-api.service.d.ts +27 -27
- package/lib/util/services/elasticsearch/elasticsearch.service.d.ts +17 -17
- package/lib/util/services/form-action/form-actions-events.service.d.ts +14 -14
- package/lib/util/services/guard/auth.guard.d.ts +18 -18
- package/lib/util/services/guard/login.guard.d.ts +18 -18
- 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/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 +50 -50
- package/new-front-common-library.d.ts +5 -5
- package/package.json +1 -1
- package/public-api.d.ts +53 -53
- package/esm2015/lib/util/models/milo/territory.model.js +0 -18
- package/lib/util/models/milo/territory.model.d.ts +0 -9
|
@@ -1,189 +1,189 @@
|
|
|
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/toolbar";
|
|
24
|
-
import * as i14 from "@angular/material/menu";
|
|
25
|
-
import * as i15 from "@angular/material/form-field";
|
|
26
|
-
import * as i16 from "@angular/material/button";
|
|
27
|
-
import * as i17 from "@angular/material/autocomplete";
|
|
28
|
-
import * as i18 from "@angular/material/core";
|
|
29
|
-
import * as i19 from "@angular/material/icon";
|
|
30
|
-
import * as i20 from "@angular/common";
|
|
31
|
-
import * as i21 from "ngx-permissions";
|
|
32
|
-
import * as i22 from "@angular/material/input";
|
|
33
|
-
import * as i23 from "@angular/forms";
|
|
34
|
-
import * as i24 from "../../pipes/common-translate.pipe";
|
|
35
|
-
export class HeaderComponent {
|
|
36
|
-
constructor(router, localStorageEvents, localStorage, toasterService, translate, commonApiService, sessionStorageService, permissionsService, overlayContainer, cookieService, langService, elasticsearchService, config) {
|
|
37
|
-
this.router = router;
|
|
38
|
-
this.localStorageEvents = localStorageEvents;
|
|
39
|
-
this.localStorage = localStorage;
|
|
40
|
-
this.toasterService = toasterService;
|
|
41
|
-
this.translate = translate;
|
|
42
|
-
this.commonApiService = commonApiService;
|
|
43
|
-
this.sessionStorageService = sessionStorageService;
|
|
44
|
-
this.permissionsService = permissionsService;
|
|
45
|
-
this.overlayContainer = overlayContainer;
|
|
46
|
-
this.cookieService = cookieService;
|
|
47
|
-
this.langService = langService;
|
|
48
|
-
this.elasticsearchService = elasticsearchService;
|
|
49
|
-
this.config = config;
|
|
50
|
-
this.toogleMenuEvent = new EventEmitter();
|
|
51
|
-
this.labelLang = 'labelFr';
|
|
52
|
-
this.isHide = false;
|
|
53
|
-
this.currentScroll = 0;
|
|
54
|
-
this.historyList = [];
|
|
55
|
-
this.RapidSearchItemType = RapidSearchItemType;
|
|
56
|
-
this.apiUrl = this.config.api_url;
|
|
57
|
-
}
|
|
58
|
-
ngOnInit() {
|
|
59
|
-
this.formControlSearch = new FormControl(null);
|
|
60
|
-
this.initPermissionsService();
|
|
61
|
-
this.lang = this.localStorage.get('lang') || 'fr';
|
|
62
|
-
this.updateLabelLang(this.lang);
|
|
63
|
-
this.env = this.config.env.toLowerCase();
|
|
64
|
-
this.localStorageEvents.localStorageEvent.subscribe(() => {
|
|
65
|
-
this.lang = this.localStorage.get('lang');
|
|
66
|
-
this.updateLabelLang(this.lang);
|
|
67
|
-
});
|
|
68
|
-
this.documents$ = this.formControlSearch.valueChanges.pipe(debounceTime(500), switchMap(term => {
|
|
69
|
-
if (!term) {
|
|
70
|
-
return of([]);
|
|
71
|
-
}
|
|
72
|
-
return this.elasticsearchService
|
|
73
|
-
.getSearchResponse(term)
|
|
74
|
-
.pipe(map(searchResponse => {
|
|
75
|
-
return this.elasticsearchService.getDocuments(searchResponse);
|
|
76
|
-
}));
|
|
77
|
-
}));
|
|
78
|
-
}
|
|
79
|
-
onWindowScroll() {
|
|
80
|
-
const numberVar = document.documentElement.scrollTop;
|
|
81
|
-
if (numberVar > this.currentScroll) {
|
|
82
|
-
this.isHide = true;
|
|
83
|
-
}
|
|
84
|
-
if (numberVar < this.currentScroll) {
|
|
85
|
-
this.isHide = false;
|
|
86
|
-
}
|
|
87
|
-
this.currentScroll = numberVar;
|
|
88
|
-
}
|
|
89
|
-
initPermissionsService() {
|
|
90
|
-
this.permissionsService.init();
|
|
91
|
-
}
|
|
92
|
-
switchTheme() {
|
|
93
|
-
if (this.theme === 'dark') {
|
|
94
|
-
this.localStorage.post('newTheme', 'light');
|
|
95
|
-
this.overlayContainer
|
|
96
|
-
.getContainerElement()
|
|
97
|
-
.classList.remove('dark-theme');
|
|
98
|
-
this.overlayContainer.getContainerElement().classList.add('light-theme');
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
this.localStorage.post('newTheme', 'dark');
|
|
102
|
-
this.overlayContainer
|
|
103
|
-
.getContainerElement()
|
|
104
|
-
.classList.remove('light-theme');
|
|
105
|
-
this.overlayContainer.getContainerElement().classList.add('dark-theme');
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
stopIdentityTheft() {
|
|
109
|
-
sessionStorage.removeItem('authTokenSecondary');
|
|
110
|
-
}
|
|
111
|
-
navigate(module = '', route) {
|
|
112
|
-
if (!route.startsWith('/')) {
|
|
113
|
-
route = '/' + route;
|
|
114
|
-
}
|
|
115
|
-
const url = this.config.api_url + (module ? `/${module}` : '') + route;
|
|
116
|
-
if (window.location.href === url) {
|
|
117
|
-
window.location.reload();
|
|
118
|
-
}
|
|
119
|
-
else if (window.location.pathname.startsWith(`/${module}`)) {
|
|
120
|
-
this.router.navigateByUrl(route);
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
window.location.href = url;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
getHistory() {
|
|
127
|
-
this.historyList = [];
|
|
128
|
-
if (this.localStorage.exist('history')) {
|
|
129
|
-
this.historyList = this.localStorage.get('history');
|
|
130
|
-
}
|
|
131
|
-
if (this.historyList.length === 0) {
|
|
132
|
-
this.historyList.push({ type: 'NO_HISTORY_AVAILABLE', id: null, ref: null });
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
switchLang(lang) {
|
|
136
|
-
this.localStorage.post('lang', lang);
|
|
137
|
-
this.translate.use(lang);
|
|
138
|
-
this.langService.switchLang();
|
|
139
|
-
}
|
|
140
|
-
updateLabelLang(lang) {
|
|
141
|
-
if ('en' === lang) {
|
|
142
|
-
this.labelLang = 'labelEn';
|
|
143
|
-
}
|
|
144
|
-
else if ('de' === lang) {
|
|
145
|
-
this.labelLang = 'labelDe';
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
this.labelLang = 'labelFr';
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
onSelectSearch($event, doc) {
|
|
152
|
-
switch (doc.docType) {
|
|
153
|
-
case RapidSearchItemType.PURCHASE_ORDER:
|
|
154
|
-
this.navigate('expenditure-commitment', '/purchase-orders/' + doc.poId);
|
|
155
|
-
break;
|
|
156
|
-
case RapidSearchItemType.PRODUCT:
|
|
157
|
-
this.navigate('video', '/product/consult/' + doc.productId);
|
|
158
|
-
break;
|
|
159
|
-
case RapidSearchItemType.WORK_VERSION:
|
|
160
|
-
this.navigate(null, '/work-summary/' + doc.id + '/info');
|
|
161
|
-
break;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.2", 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 });
|
|
166
|
-
HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.2", type: HeaderComponent, selector: "sc-header", outputs: { toogleMenuEvent: "toogleMenuEvent" }, host: { listeners: { "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<mat-toolbar [ngClass]=\"{ 'light-header': theme !== 'dark' }\"\n class=\"sc-header d-flex align-items-center\">\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 <span class=\"header-separator\"></span>\n <span [matMenuTriggerFor]=\"menu_global\" class=\"material-icons header-icon max-width-5\">apps</span>\n <mat-menu #menu_global=\"matMenu\" class=\"action-menu\">\n <!--DASHBOARD-->\n <button (click)=\"navigate(null, '/dashboard')\" mat-menu-item>\n <span class=\"material-icons-outlined\">apps</span>\n <span>{{ 'COMMON.HEADER.MENU.DASHBOARD' | commonTranslate: lang }}</span>\n </button>\n <!--COMMERCIAL-->\n <span *ngxPermissionsOnly=\"['COMMERCIAL']\">\n <button (click)=\"navigate('commercial', '/deal/search')\" mat-menu-item>\n <span class=\"material-icons-outlined\">local_offer</span>\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.DEAL' | commonTranslate: lang }}</span>\n </button>\n <button (click)=\"navigate('commercial', '/work-record/search')\" mat-menu-item>\n <span class=\"material-icons-outlined\">theaters</span>\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.WORK_RECORD' | commonTranslate: lang }}</span>\n </button>\n <button (click)=\"navigate('commercial', '/vod/search')\" mat-menu-item>\n <span class=\"material-icons-outlined\">manage_search</span>\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.VOD_SEARCH' | commonTranslate: lang }}</span>\n </button>\n <button (click)=\"navigate('commercial', '/accounting-closing/consult')\"\n *ngxPermissionsOnly=\"['ACCOUNTANT', 'ADMINISTRATIVE_CONTROLLER']\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">account_balance_wallet</span>\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.ACCOUNTING_CLOSING' | commonTranslate: lang }}</span>\n </button>\n <button (click)=\"navigate('commercial', '/invoice/search')\" mat-menu-item>\n <span class=\"material-icons-outlined\">receipt</span>\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.INVOICE' | commonTranslate: lang }}</span>\n </button>\n <button (click)=\"navigate('commercial', '/turnover/search')\"\n *ngxPermissionsOnly=\"['ACCOUNTANT', 'ADMINISTRATIVE_CONTROLLER']\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">request_quote</span>\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.TURNOVER' | commonTranslate: lang }}</span>\n </button>\n </span>\n <!--USER-->\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\n <span class=\"material-icons-outlined\">manage_accounts</span>\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\n </button>\n <!--MY PREFERENCES-->\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\n <span class=\"material-icons-outlined\">settings</span>\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\n </button>\n <!--BATCH-->\n <button (click)=\"navigate('batch', '/jobs/referential')\" *ngxPermissionsOnly=\"['MODULE REF']\" mat-menu-item>\n <span class=\"material-icons-outlined\">autorenew</span>\n <span>{{ 'COMMON.HEADER.MENU.REFERENTIAL.BATCH' | commonTranslate: lang }}</span>\n </button>\n <!--TV DATA-->\n <button (click)=\"navigate('tvdata', '/infos-center')\" *ngxPermissionsOnly=\"['TVDATA']\" mat-menu-item>\n <span class=\"material-icons-outlined\">source</span>\n <span>{{ 'COMMON.HEADER.MENU.TV-DATA' | commonTranslate: lang }}</span>\n </button>\n <!--EXPENDITURE COMMITMENT-->\n <button (click)=\"navigate('expenditure-commitment', '/home/commands')\" *ngxPermissionsExcept=\"['UNIVERSAL_ROLE']\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">receipt_long</span>\n <span>{{ 'COMMON.HEADER.MENU.EXPENDITURE_COMMITMENT' | commonTranslate: lang }}</span>\n </button>\n <!--BI-->\n <button (click)=\"navigate('bi', '/simple-search/form')\" *ngxPermissionsOnly=\"['MODULE BI']\" mat-menu-item>\n <span class=\"material-icons-outlined\">travel_explore</span>\n <span>{{ 'COMMON.HEADER.MENU.BI.SEARCH' | commonTranslate: lang }}</span>\n </button>\n <!--LEGAL-->\n <button (click)=\"navigate('legal', '/contracts/menu/legals-det')\" *ngxPermissionsOnly=\"['LEGAL']\" mat-menu-item>\n <span class=\"material-icons-outlined\">gavel</span>\n <span>{{ 'COMMON.HEADER.MENU.LEGAL' | commonTranslate: lang }}</span>\n </button>\n <!--CALENDAR-->\n <button (click)=\"navigate('calendar', '')\" mat-menu-item>\n <span class=\"material-icons-outlined\">calendar_month</span>\n <span>{{ 'COMMON.HEADER.MENU.CALENDAR' | commonTranslate: lang }}</span>\n </button>\n </mat-menu>\n <span class=\"header-separator\"></span>\n <span [matMenuTriggerFor]=\"menu\" class=\"material-icons-outlined header-icon max-width-5\">add_box</span>\n <mat-menu #menu=\"matMenu\" class=\"action-menu\">\n <button (click)=\"navigate('video', '/product/form')\" mat-menu-item>\n <span class=\"material-icons-outlined\">theaters</span>\n {{ 'COMMON.HEADER.CREATION.PRODUCT' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/form')\" mat-menu-item>\n <span class=\"material-icons-outlined\">receipt_long</span>\n {{ 'COMMON.HEADER.CREATION.PO' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('commercial', '/deal/form')\" mat-menu-item>\n <span class=\"material-icons-outlined\">local_offer</span>\n {{ 'COMMON.HEADER.CREATION.DEAL' | commonTranslate: lang }}\n </button>\n\n <button (click)=\"navigate('legal', '/createContract/acq')\" mat-menu-item>\n <span class=\"material-icons-outlined\">shop_two</span>\n {{ 'COMMON.HEADER.CREATION.CREATION_ACQ' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('legal', '/createContract/sales')\" mat-menu-item>\n <span class=\"material-icons-outlined\">article</span>\n {{ 'COMMON.HEADER.CREATION.CREATION_CESS' | commonTranslate: lang }}\n </button>\n\t<button (click)=\"navigate('legal', '/createContract/auth')\" mat-menu-item>\n <span class=\"material-icons-outlined\">account_circle</span>\n {{ 'COMMON.HEADER.CREATION.CREATION_AUTH' | commonTranslate: lang }}\n </button>\n </mat-menu>\n <span class=\"header-separator\"></span>\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 <span class=\"material-icons-outlined\">theaters</span>\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 <span class=\"material-icons-outlined\">receipt_long</span>\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 <span class=\"material-icons-outlined\">local_offer</span>\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 <span class=\"material-icons-outlined\">theaters</span>\n {{ 'COMMON.HEADER.HISTORY.WORK' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('legal', '/contracts/contract-acq/consult/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">assignment</span>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT-ACQ' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('legal', '/contracts/contract-cess/consult/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_CESS'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">article</span>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT-CESS' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/budget/form/' + history.id)\" *ngSwitchCase=\"'BUDGET'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">payments</span>\n {{ 'COMMON.HEADER.HISTORY.BUDGET' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button *ngSwitchCase=\"'NO_HISTORY_AVAILABLE'\" mat-menu-item>\n <span class=\"material-icons-outlined\">not_interested</span>\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\n </button>\n </ng-container>\n </mat-menu>\n\n <div class=\"global-search d-flex max-width-60\">\n <i class=\"material-icons global-search-icon header-icon\">search</i>\n <span class=\"global-search-separator\"></span>\n <mat-form-field class=\"max-width-100\" floatLabel=\"never\">\n <div class=\"d-flex\">\n <input [formControl]=\"formControlSearch\" [matAutocomplete]=\"autoSearch\"\n class=\"global-search-input max-width-85\"\n id=\"search-input\"\n matInput\n placeholder=\"search ...\"/>\n <button (click)=\"navigate(null, '/advanced-search')\"\n class=\"btn advanced-button\" mat-raised-button>\n <span class=\"material-icons icon\">flash_on</span>\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ADVANCED' | commonTranslate: lang }}\n </button>\n\n <mat-autocomplete #autoSearch=\"matAutocomplete\" class=\"mat-autocomplete-global-search\" panelWidth=\"56vw\">\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 </mat-option>\n </mat-autocomplete>\n </div>\n\n </mat-form-field>\n\n </div>\n\n <span class=\"d-flex flex-column max-width-15\"></span>\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 <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=\"action-menu\">\n <button (click)=\"switchTheme()\" mat-menu-item>\n <mat-icon class=\"menu-icon mat-icon\">toggle_on</mat-icon>\n <span>{{'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang}}</span>\n </button>\n <button (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\n <img src=\"assets/img/flag/en-flag.png\">\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}\n </button>\n <button (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\n <img src=\"assets/img/flag/fr-flag.png\">\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}\n </button>\n <button (click)='switchLang(\"de\")' *ngIf='lang !== \"de\" ' mat-menu-item>\n <img src=\"assets/img/flag/de-flag.png\">\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}\n </button>\n </mat-menu>\n</mat-toolbar>\n\n", styles: [".sc-header{height:64px;position:fixed;z-index:999}mat-toolbar{width:100%}.logo-unity{height:48px;width:48px}.header-icon{width:22px;height:20px}.global-search{height:40px;background:#EFF3F6;padding:0;margin-left:30px;border-radius:8px}.global-search-icon{width:18px;height:18px;margin:10px 12px 10px 10px}.global-search-input{background:#EFF3F6;border:none;margin-left:10px;font-size:14px!important}.global-search-input:focus{outline:none}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC;margin-top:6px}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{width:90px!important;min-width:90px!important;height:24px!important;background:#7C87FF;border:none;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;border-radius:4px;line-height:12px;color:#fff;margin:auto 5px auto auto;cursor:pointer;padding:0!important}.advanced-button .icon{font-size:12px;vertical-align:middle}.sc-header .header-icon{color:#009ef7;cursor:pointer;text-align:center}.header-separator{display:inline-block;height:25%;margin-top:6px}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-uat{background-color:#809ec1;color:#fff}#env-dev{background-color:#809ec1;color:#fff}#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}:host ::ng-deep .global-search .mat-form-field-appearance-legacy .mat-form-field-label{top:2.2em!important;margin-left:10px;font-family:Sofia Pro;font-style:italic;font-weight:bold;font-size:14px;line-height:14px}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}.center{text-align:center}.mr-10{margin-right:10px}.mr-20{margin-right:20px}.mr-30{margin-right:30px}.mb-2{margin-bottom:2px}.mat-menu-item img{height:12px!important;margin-right:13px;margin-bottom:-2px;margin-left:3px}.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-60{flex:1 1 60%;max-width:60%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}\n"], components: [{ type: i13.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i15.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i16.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i17.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i18.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i19.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i20.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i20.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i21.NgxPermissionsDirective, selector: "[ngxPermissionsOnly],[ngxPermissionsExcept]", inputs: ["ngxPermissionsOnly", "ngxPermissionsOnlyThen", "ngxPermissionsOnlyElse", "ngxPermissionsExcept", "ngxPermissionsExceptElse", "ngxPermissionsExceptThen", "ngxPermissionsThen", "ngxPermissionsElse", "ngxPermissionsOnlyAuthorisedStrategy", "ngxPermissionsOnlyUnauthorisedStrategy", "ngxPermissionsExceptUnauthorisedStrategy", "ngxPermissionsExceptAuthorisedStrategy", "ngxPermissionsUnauthorisedStrategy", "ngxPermissionsAuthorisedStrategy"], outputs: ["permissionsAuthorized", "permissionsUnauthorized"] }, { type: i20.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i20.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i20.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i22.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i23.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i17.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i23.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i23.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "commonTranslate": i24.CommonTranslatePipe, "async": i20.AsyncPipe, "currency": i20.CurrencyPipe } });
|
|
167
|
-
__decorate([
|
|
168
|
-
Theme()
|
|
169
|
-
], HeaderComponent.prototype, "theme", void 0);
|
|
170
|
-
__decorate([
|
|
171
|
-
User()
|
|
172
|
-
], HeaderComponent.prototype, "user", void 0);
|
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.2", ngImport: i0, type: HeaderComponent, decorators: [{
|
|
174
|
-
type: Component,
|
|
175
|
-
args: [{
|
|
176
|
-
selector: 'sc-header',
|
|
177
|
-
styleUrls: ['./header.component.scss'],
|
|
178
|
-
templateUrl: './header.component.html'
|
|
179
|
-
}]
|
|
180
|
-
}], 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: [{
|
|
181
|
-
type: Inject,
|
|
182
|
-
args: [WEB_CONFIG]
|
|
183
|
-
}] }]; }, propDecorators: { theme: [], user: [], toogleMenuEvent: [{
|
|
184
|
-
type: Output
|
|
185
|
-
}], onWindowScroll: [{
|
|
186
|
-
type: HostListener,
|
|
187
|
-
args: ['window:scroll', []]
|
|
188
|
-
}] } });
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldy1mcm9udC1jb21tb24tbGlicmFyeS9zcmMvbGliL3V0aWwvY29tcG9uZW50L2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV3LWZyb250LWNvbW1vbi1saWJyYXJ5L3NyYy9saWIvdXRpbC9jb21wb25lbnQvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNOUYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQVF2RCxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBS2xELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVN0QyxNQUFNLE9BQU8sZUFBZTtJQWtCMUIsWUFDVSxNQUFjLEVBQ2Qsa0JBQTZDLEVBQzdDLFlBQWlDLEVBQ2pDLGNBQW9DLEVBQ3BDLFNBQTJCLEVBQzNCLGdCQUFrQyxFQUNsQyxxQkFBNEMsRUFDNUMsa0JBQXNDLEVBQ3RDLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixXQUF3QixFQUN4QixvQkFBMEMsRUFDdEIsTUFBYztRQVpsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEyQjtRQUM3QyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQXNCO1FBQ3BDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBM0JoQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHMUMsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN0QixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2Ysa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFFbEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFHakIsd0JBQW1CLEdBQUcsbUJBQW1CLENBQUM7UUFtQi9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDcEMsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN2RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDeEQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2Y7WUFDRCxPQUFPLElBQUksQ0FBQyxvQkFBb0I7aUJBQzdCLGlCQUFpQixDQUFDLElBQUksQ0FBQztpQkFDdkIsSUFBSSxDQUNILEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDbkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDTixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUdRLGNBQWM7UUFDakIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7UUFDckQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtRQUNELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDdkI7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBR00sc0JBQXNCO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxnQkFBZ0I7aUJBQ2hCLG1CQUFtQixFQUFFO2lCQUNyQixTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDNUU7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsZ0JBQWdCO2lCQUNoQixtQkFBbUIsRUFBRTtpQkFDckIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzNFO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtRQUNiLGNBQWMsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsS0FBYTtRQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN4QixLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztTQUN2QjtRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFdkUsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDOUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUM1QjthQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQzthQUFNO1lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUVNLFVBQVU7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdkQ7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1NBQzlFO0lBQ0wsQ0FBQztJQUVJLFVBQVUsQ0FBQyxJQUFJO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxlQUFlLENBQUMsSUFBWTtRQUNsQyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7U0FDNUI7YUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7U0FDNUI7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFnQyxFQUFFLEdBQVE7UUFDdkQsUUFBTyxHQUFHLENBQUMsT0FBTyxFQUFDO1lBQ2pCLEtBQUssbUJBQW1CLENBQUMsY0FBYztnQkFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxtQkFBbUIsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hFLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLE9BQU87Z0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUQsTUFBTTtZQUNSLEtBQUssbUJBQW1CLENBQUMsWUFBWTtnQkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDekQsTUFBTTtTQUNUO0lBQ0gsQ0FBQzs7NEdBN0pVLGVBQWUsOFpBK0JoQixVQUFVO2dHQS9CVCxlQUFlLGdLQ2pDNUIsMDJoQkFrVEE7QURoUmE7SUFBUixLQUFLLEVBQUU7OENBQXNCO0FBQ3RCO0lBQVAsSUFBSSxFQUFFOzZDQUE0QjsyRkFGMUIsZUFBZTtrQkFMM0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsV0FBVztvQkFDckIsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQ3RDLFdBQVcsRUFBRSx5QkFBeUI7aUJBQ3pDOzswQkFnQ0ksTUFBTTsyQkFBQyxVQUFVOzRDQTlCRixLQUFLLE1BQ04sSUFBSSxNQUVULGVBQWU7c0JBQXhCLE1BQU07Z0JBOERBLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBPdmVybGF5Q29udGFpbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNJbnRlcmZhY2UgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9wZXJtaXNzaW9ucy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IFRoZW1lIH0gZnJvbSBcIi4uLy4uL2RlY29yYXRvcnMvdGhlbWUuZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSBcIi4uLy4uL2RlY29yYXRvcnMvdXNlci5kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEF1dGhVc2VyTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VFdmVudHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2V2ZW50L3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS1ldmVudHMuc2VydmljZVwiO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlL2xvY2FsLXN0b3JhZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgVG9hc3RlckV2ZW50c1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdG9hc3Rlci90b2FzdGVyLWV2ZW50cy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBDb21tb25BcGlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2FwaS9jb21tb24tYXBpLnNlcnZpY2VcIjtcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuc2VydmljZVwiO1xuaW1wb3J0IHsgQ29uZmlnLCBXRUJfQ09ORklHIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ1wiO1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLWxhbmd1YWdlL2xhbmcuc2VydmljZVwiO1xuaW1wb3J0IHsgRWxhc3RpY3NlYXJjaFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZWxhc3RpY3NlYXJjaC9lbGFzdGljc2VhcmNoLnNlcnZpY2VcIjtcbmltcG9ydCB7IFB1cmNoYXNlT3JkZXJSYXBpZFNlYXJjaE1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9leHBlbmRpdHVyZS1jb21taXRtZW50L3B1cmNoYXNlLW9yZGVyLXJhcGlkLXNlYXJjaC5tb2RlbFwiO1xuaW1wb3J0IHsgUHJvZHVjdFJhcGlkU2VhcmNoTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3ZpZGVvL3Byb2R1Y3QtcmFwaWQtc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQgeyBSYXBpZFNlYXJjaEl0ZW1UeXBlIH0gZnJvbSBcIi4uLy4uL2VudW1zL3JhcGlkLXNlYXJjaC1pdGVtLXR5cGUuZW51bVwiXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFdvcmtWZXJzaW9uUmFwaWRTZWFyY2hNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcmVmZXJlbnRpYWwvd29yay12ZXJzaW9uLXJhcGlkLXNlYXJjaC5tb2RlbFwiO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNYXRPcHRpb25TZWxlY3Rpb25DaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLWhlYWRlcicsXG4gICAgc3R5bGVVcmxzOiBbJy4vaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBQZXJtaXNzaW9uc0ludGVyZmFjZSB7XG4gICAgQFRoZW1lKCkgcHVibGljIHRoZW1lOiBzdHJpbmc7XG4gICAgQFVzZXIoKSBwdWJsaWMgdXNlcjogQXV0aFVzZXJNb2RlbDtcblxuICAgIEBPdXRwdXQoKSB0b29nbGVNZW51RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIGxhbmc6IHN0cmluZztcbiAgcHVibGljIGxhYmVsTGFuZyA9ICdsYWJlbEZyJztcbiAgcHVibGljIGlzSGlkZSA9IGZhbHNlO1xuICBwdWJsaWMgY3VycmVudFNjcm9sbCA9IDA7XG4gIHB1YmxpYyBlbnY6IHN0cmluZztcbiAgcHVibGljIGhpc3RvcnlMaXN0ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpVXJsOiBzdHJpbmc7XG5cbiAgcHVibGljIFJhcGlkU2VhcmNoSXRlbVR5cGUgPSBSYXBpZFNlYXJjaEl0ZW1UeXBlO1xuICBwdWJsaWMgZm9ybUNvbnRyb2xTZWFyY2g6IEZvcm1Db250cm9sO1xuICBwdWJsaWMgZG9jdW1lbnRzJDogT2JzZXJ2YWJsZTwoUHVyY2hhc2VPcmRlclJhcGlkU2VhcmNoTW9kZWwgfCBQcm9kdWN0UmFwaWRTZWFyY2hNb2RlbCB8IFdvcmtWZXJzaW9uUmFwaWRTZWFyY2hNb2RlbClbXT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZUV2ZW50czogTG9jYWxTdG9yYWdlRXZlbnRzU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyRXZlbnRzU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1vbkFwaVNlcnZpY2U6IENvbW1vbkFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheUNvbnRhaW5lcjogT3ZlcmxheUNvbnRhaW5lcixcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5nU2VydmljZTogTGFuZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGFzdGljc2VhcmNoU2VydmljZTogRWxhc3RpY3NlYXJjaFNlcnZpY2UsXG4gICAgQEluamVjdChXRUJfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogQ29uZmlnXG4gICkge1xuICAgIHRoaXMuYXBpVXJsID0gdGhpcy5jb25maWcuYXBpX3VybDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sU2VhcmNoID0gbmV3IEZvcm1Db250cm9sKG51bGwpO1xuXG4gICAgdGhpcy5pbml0UGVybWlzc2lvbnNTZXJ2aWNlKCk7XG4gICAgdGhpcy5sYW5nID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0KCdsYW5nJykgfHwgJ2ZyJztcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTGFuZyh0aGlzLmxhbmcpO1xuICAgIHRoaXMuZW52ID0gdGhpcy5jb25maWcuZW52LnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VFdmVudHMubG9jYWxTdG9yYWdlRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubGFuZyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldCgnbGFuZycpO1xuICAgICAgdGhpcy51cGRhdGVMYWJlbExhbmcodGhpcy5sYW5nKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZG9jdW1lbnRzJCA9IHRoaXMuZm9ybUNvbnRyb2xTZWFyY2gudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgIHN3aXRjaE1hcCh0ZXJtID0+IHtcbiAgICAgICAgaWYgKCF0ZXJtKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lbGFzdGljc2VhcmNoU2VydmljZVxuICAgICAgICAgIC5nZXRTZWFyY2hSZXNwb25zZSh0ZXJtKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKHNlYXJjaFJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxhc3RpY3NlYXJjaFNlcnZpY2UuZ2V0RG9jdW1lbnRzKHNlYXJjaFJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFtdKVxuICAgIHB1YmxpYyBvbldpbmRvd1Njcm9sbCgpIHtcbiAgICAgICAgY29uc3QgbnVtYmVyVmFyID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgaWYgKG51bWJlclZhciA+IHRoaXMuY3VycmVudFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5pc0hpZGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW1iZXJWYXIgPCB0aGlzLmN1cnJlbnRTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNIaWRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50U2Nyb2xsID0gbnVtYmVyVmFyO1xuICAgIH1cblxuXG4gICAgcHVibGljIGluaXRQZXJtaXNzaW9uc1NlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmluaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3dpdGNoVGhlbWUoKSB7XG4gICAgICAgIGlmICh0aGlzLnRoZW1lID09PSAnZGFyaycpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnBvc3QoJ25ld1RoZW1lJywgJ2xpZ2h0Jyk7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlDb250YWluZXJcbiAgICAgICAgICAgICAgICAuZ2V0Q29udGFpbmVyRWxlbWVudCgpXG4gICAgICAgICAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2RhcmstdGhlbWUnKTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnbGlnaHQtdGhlbWUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnBvc3QoJ25ld1RoZW1lJywgJ2RhcmsnKTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lclxuICAgICAgICAgICAgICAgIC5nZXRDb250YWluZXJFbGVtZW50KClcbiAgICAgICAgICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnbGlnaHQtdGhlbWUnKTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnZGFyay10aGVtZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RvcElkZW50aXR5VGhlZnQoKSB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2F1dGhUb2tlblNlY29uZGFyeScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuYXZpZ2F0ZShtb2R1bGUgPSAnJywgcm91dGU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXJvdXRlLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgcm91dGUgPSAnLycgKyByb3V0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmFwaV91cmwgKyAobW9kdWxlID8gYC8ke21vZHVsZX1gIDogJycpICsgcm91dGU7XG5cbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmID09PSB1cmwpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aChgLyR7bW9kdWxlfWApKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhpc3RvcnkoKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeUxpc3QgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlLmV4aXN0KCdoaXN0b3J5JykpIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeUxpc3QgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXQoJ2hpc3RvcnknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhpc3RvcnlMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5TGlzdC5wdXNoKHt0eXBlOiAnTk9fSElTVE9SWV9BVkFJTEFCTEUnLCBpZDogbnVsbCwgcmVmOiBudWxsfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcHVibGljIHN3aXRjaExhbmcobGFuZykge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnBvc3QoJ2xhbmcnLCBsYW5nKTtcbiAgICB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZyk7XG4gICAgdGhpcy5sYW5nU2VydmljZS5zd2l0Y2hMYW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxhYmVsTGFuZyhsYW5nOiBzdHJpbmcpIHtcbiAgICBpZiAoJ2VuJyA9PT0gbGFuZykge1xuICAgICAgdGhpcy5sYWJlbExhbmcgPSAnbGFiZWxFbic7XG4gICAgfSBlbHNlIGlmICgnZGUnID09PSBsYW5nKSB7XG4gICAgICB0aGlzLmxhYmVsTGFuZyA9ICdsYWJlbERlJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYWJlbExhbmcgPSAnbGFiZWxGcic7XG4gICAgfVxuICB9XG5cbiAgb25TZWxlY3RTZWFyY2goJGV2ZW50OiBNYXRPcHRpb25TZWxlY3Rpb25DaGFuZ2UsIGRvYzogYW55KSB7XG4gICAgc3dpdGNoKGRvYy5kb2NUeXBlKXtcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5QVVJDSEFTRV9PUkRFUjpcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvcHVyY2hhc2Utb3JkZXJzLycgKyBkb2MucG9JZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlBST0RVQ1Q6XG4gICAgICAgIHRoaXMubmF2aWdhdGUoJ3ZpZGVvJywgJy9wcm9kdWN0L2NvbnN1bHQvJyArIGRvYy5wcm9kdWN0SWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5XT1JLX1ZFUlNJT046XG4gICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy93b3JrLXN1bW1hcnkvJyArIGRvYy5pZCArICcvaW5mbycpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cbiIsIjxtYXQtdG9vbGJhciBbbmdDbGFzc109XCJ7ICdsaWdodC1oZWFkZXInOiB0aGVtZSAhPT0gJ2RhcmsnIH1cIlxuICAgICAgICAgICAgIGNsYXNzPVwic2MtaGVhZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgPHNwYW4gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kXCI+XG4gICAgPGFcbiAgICAgIFtocmVmXT1cImVudiA9PT0gJ3Byb2QnID8gJ2h0dHBzOi8vdW5pdHkuc3R1ZGlvY2FuYWwuY29tL2Rhc2hib2FyZCcgOiAoZW52ID09PSAnc2J4JyA/ICdodHRwczovL3VuaXR5LXNieC5jcGx1cy9kYXNoYm9hcmQnIDogJ2h0dHBzOi8vdW5pdHktJyArIGVudiArICcuc3R1ZGlvY2FuYWwuY29tL2Rhc2hib2FyZCcpXCI+XG4gICAgICA8aW1nIGNsYXNzPVwibG9nby11bml0eVwiIHNyYz1cIi4vYXNzZXRzL2ltZy91bml0eV9sb2dvXzQ4eDQ4LnBuZ1wiPlxuICAgIDwvYT5cbiAgICA8c3BhbiAqbmdJZj1cImVudiAhPSAncHJvZCdcIiBbYXR0ci5pZF09XCInZW52LScgKyBlbnZcIiBjbGFzcz1cImVudlwiPnt7ZW52fX08L3NwYW4+XG4gIDwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2VwYXJhdG9yXCI+PC9zcGFuPlxuICA8c3BhbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudV9nbG9iYWxcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGhlYWRlci1pY29uIG1heC13aWR0aC01XCI+YXBwczwvc3Bhbj5cbiAgPG1hdC1tZW51ICNtZW51X2dsb2JhbD1cIm1hdE1lbnVcIiBjbGFzcz1cImFjdGlvbi1tZW51XCI+XG4gICAgPCEtLURBU0hCT0FSRC0tPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKG51bGwsICcvZGFzaGJvYXJkJylcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmFwcHM8L3NwYW4+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkRBU0hCT0FSRCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPCEtLUNPTU1FUkNJQUwtLT5cbiAgICA8c3BhbiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydDT01NRVJDSUFMJ11cIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL2RlYWwvc2VhcmNoJylcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+bG9jYWxfb2ZmZXI8L3NwYW4+XG4gICAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuQ09NTUVSQ0lBTC5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL3dvcmstcmVjb3JkL3NlYXJjaCcpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnRoZWF0ZXJzPC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkNPTU1FUkNJQUwuV09SS19SRUNPUkQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnY29tbWVyY2lhbCcsICcvdm9kL3NlYXJjaCcpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPm1hbmFnZV9zZWFyY2g8L3NwYW4+XG4gICAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuQ09NTUVSQ0lBTC5WT0RfU0VBUkNIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL2FjY291bnRpbmctY2xvc2luZy9jb25zdWx0JylcIlxuICAgICAgICAgICAgICAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydBQ0NPVU5UQU5UJywgJ0FETUlOSVNUUkFUSVZFX0NPTlRST0xMRVInXVwiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5hY2NvdW50X2JhbGFuY2Vfd2FsbGV0PC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkNPTU1FUkNJQUwuQUNDT1VOVElOR19DTE9TSU5HJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL2ludm9pY2Uvc2VhcmNoJylcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+cmVjZWlwdDwvc3Bhbj5cbiAgICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5DT01NRVJDSUFMLklOVk9JQ0UnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnY29tbWVyY2lhbCcsICcvdHVybm92ZXIvc2VhcmNoJylcIlxuICAgICAgICAgICAgICAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydBQ0NPVU5UQU5UJywgJ0FETUlOSVNUUkFUSVZFX0NPTlRST0xMRVInXVwiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5yZXF1ZXN0X3F1b3RlPC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkNPTU1FUkNJQUwuVFVSTk9WRVInIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgPCEtLVVTRVItLT5cbiAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgndXNlcicsICcvYWNjb3VudC9hdXRob3JpemF0aW9uL3NlYXJjaCcpXCIgKm5nSWY9XCJ1c2VyICYmIHVzZXIuYWRtaW5cIiBtYXQtbWVudS1pdGVtPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPm1hbmFnZV9hY2NvdW50czwvc3Bhbj5cbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuVVNFUi5TRUNUSU9OX1RJVExFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8IS0tTVkgUFJFRkVSRU5DRVMtLT5cbiAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgndXNlcicsICcvYWNjb3VudC9zZXR0aW5ncycpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5zZXR0aW5nczwvc3Bhbj5cbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuVVNFUi5TRVRUSU5HUycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPCEtLUJBVENILS0+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2JhdGNoJywgJy9qb2JzL3JlZmVyZW50aWFsJylcIiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydNT0RVTEUgUkVGJ11cIiBtYXQtbWVudS1pdGVtPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmF1dG9yZW5ldzwvc3Bhbj5cbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuUkVGRVJFTlRJQUwuQkFUQ0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS1UViBEQVRBLS0+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ3R2ZGF0YScsICcvaW5mb3MtY2VudGVyJylcIiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydUVkRBVEEnXVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+c291cmNlPC9zcGFuPlxuICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5UVi1EQVRBJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8IS0tRVhQRU5ESVRVUkUgQ09NTUlUTUVOVC0tPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdleHBlbmRpdHVyZS1jb21taXRtZW50JywgJy9ob21lL2NvbW1hbmRzJylcIiAqbmd4UGVybWlzc2lvbnNFeGNlcHQ9XCJbJ1VOSVZFUlNBTF9ST0xFJ11cIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5yZWNlaXB0X2xvbmc8L3NwYW4+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkVYUEVORElUVVJFX0NPTU1JVE1FTlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS1CSS0tPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdiaScsICcvc2ltcGxlLXNlYXJjaC9mb3JtJylcIiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydNT0RVTEUgQkknXVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+dHJhdmVsX2V4cGxvcmU8L3NwYW4+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkJJLlNFQVJDSCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPCEtLUxFR0FMLS0+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jb250cmFjdHMvbWVudS9sZWdhbHMtZGV0JylcIiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydMRUdBTCddXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5nYXZlbDwvc3Bhbj5cbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuTEVHQUwnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS1DQUxFTkRBUi0tPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdjYWxlbmRhcicsICcnKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+Y2FsZW5kYXJfbW9udGg8L3NwYW4+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkNBTEVOREFSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtbWVudT5cbiAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2VwYXJhdG9yXCI+PC9zcGFuPlxuICA8c3BhbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgaGVhZGVyLWljb24gbWF4LXdpZHRoLTVcIj5hZGRfYm94PC9zcGFuPlxuICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJhY3Rpb24tbWVudVwiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCd2aWRlbycsICcvcHJvZHVjdC9mb3JtJylcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnRoZWF0ZXJzPC9zcGFuPlxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuQ1JFQVRJT04uUFJPRFVDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvcHVyY2hhc2Utb3JkZXJzL2Zvcm0nKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+cmVjZWlwdF9sb25nPC9zcGFuPlxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuQ1JFQVRJT04uUE8nIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL2RlYWwvZm9ybScpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5sb2NhbF9vZmZlcjwvc3Bhbj5cbiAgICAgIHt7ICdDT01NT04uSEVBREVSLkNSRUFUSU9OLkRFQUwnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnbGVnYWwnLCAnL2NyZWF0ZUNvbnRyYWN0L2FjcScpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5zaG9wX3R3bzwvc3Bhbj5cbiAgICAgIHt7ICdDT01NT04uSEVBREVSLkNSRUFUSU9OLkNSRUFUSU9OX0FDUScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnbGVnYWwnLCAnL2NyZWF0ZUNvbnRyYWN0L3NhbGVzJylcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmFydGljbGU8L3NwYW4+XG4gICAgICB7eyAnQ09NTU9OLkhFQURFUi5DUkVBVElPTi5DUkVBVElPTl9DRVNTJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgIDwvYnV0dG9uPlxuXHQ8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnbGVnYWwnLCAnL2NyZWF0ZUNvbnRyYWN0L2F1dGgnKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+YWNjb3VudF9jaXJjbGU8L3NwYW4+XG4gICAgICB7eyAnQ09NTU9OLkhFQURFUi5DUkVBVElPTi5DUkVBVElPTl9BVVRIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1tZW51PlxuICA8c3BhbiBjbGFzcz1cImhlYWRlci1zZXBhcmF0b3JcIj48L3NwYW4+XG4gIDxzcGFuIChjbGljayk9XCJnZXRIaXN0b3J5KClcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudUhpc3RvcnlcIlxuICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGhlYWRlci1pY29uIG1heC13aWR0aC01XCI+aGlzdG9yeTwvc3Bhbj5cbiAgPG1hdC1tZW51ICNtZW51SGlzdG9yeT1cIm1hdE1lbnVcIiBjbGFzcz1cImFjdGlvbi1tZW51XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGlzdG9yeSBvZiBoaXN0b3J5TGlzdFwiIFtuZ1N3aXRjaF09XCJoaXN0b3J5LnR5cGVcIj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdleHBlbmRpdHVyZS1jb21taXRtZW50JywgJy9wdXJjaGFzZS1vcmRlcnMvJyArIGhpc3RvcnkuaWQpXCIgKm5nU3dpdGNoQ2FzZT1cIidQUk9EVUNUJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj50aGVhdGVyczwvc3Bhbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5QUk9EVUNUJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX17e2hpc3RvcnkudHlwZX19IHt7aGlzdG9yeS5yZWZ9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvcHVyY2hhc2Utb3JkZXJzLycgKyBoaXN0b3J5LmlkKVwiICpuZ1N3aXRjaENhc2U9XCInUE8nXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnJlY2VpcHRfbG9uZzwvc3Bhbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5QTycgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nICB9fSB7e2hpc3RvcnkucmVmfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL2RlYWwvY29uc3VsdC8nICsgaGlzdG9yeS5pZClcIiAqbmdTd2l0Y2hDYXNlPVwiJ0RFQUwnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmxvY2FsX29mZmVyPC9zcGFuPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkRFQUwnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyAgfX0ge3toaXN0b3J5LnJlZn19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdjb21tZXJjaWFsJywgJy93b3JrLXJlY29yZC9jb25zdWx0LycrIGhpc3RvcnkuaWQgKycvZ2VuZXJhbCcpXCIgKm5nU3dpdGNoQ2FzZT1cIidXT1JLJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj50aGVhdGVyczwvc3Bhbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5XT1JLJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3toaXN0b3J5LnJlZn19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdsZWdhbCcsICcvY29udHJhY3RzL2NvbnRyYWN0LWFjcS9jb25zdWx0LycgKyBoaXN0b3J5LmlkKVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInQ09OVFJBQ1RfQUNRJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5hc3NpZ25tZW50PC9zcGFuPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkNPTlRSQUNULUFDUScgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nICB9fSB7e2hpc3RvcnkucmVmfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jb250cmFjdHMvY29udHJhY3QtY2Vzcy9jb25zdWx0LycgKyBoaXN0b3J5LmlkKVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInQ09OVFJBQ1RfQ0VTUydcIlxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+YXJ0aWNsZTwvc3Bhbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5DT05UUkFDVC1DRVNTJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgIH19IHt7aGlzdG9yeS5yZWZ9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvYnVkZ2V0L2Zvcm0vJyArIGhpc3RvcnkuaWQpXCIgKm5nU3dpdGNoQ2FzZT1cIidCVURHRVQnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnBheW1lbnRzPC9zcGFuPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkJVREdFVCcgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nICB9fSB7e2hpc3RvcnkucmVmfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAqbmdTd2l0Y2hDYXNlPVwiJ05PX0hJU1RPUllfQVZBSUxBQkxFJ1wiIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5ub3RfaW50ZXJlc3RlZDwvc3Bhbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5OT19ISVNUT1JZX0FWQUlMQUJMRScgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nICB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbWF0LW1lbnU+XG5cbiAgPGRpdiBjbGFzcz1cImdsb2JhbC1zZWFyY2ggZC1mbGV4IG1heC13aWR0aC02MFwiPlxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgZ2xvYmFsLXNlYXJjaC1pY29uIGhlYWRlci1pY29uXCI+c2VhcmNoPC9pPlxuICAgIDxzcGFuIGNsYXNzPVwiZ2xvYmFsLXNlYXJjaC1zZXBhcmF0b3JcIj48L3NwYW4+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF4LXdpZHRoLTEwMFwiIGZsb2F0TGFiZWw9XCJuZXZlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICA8aW5wdXQgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sU2VhcmNoXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvU2VhcmNoXCJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiZ2xvYmFsLXNlYXJjaC1pbnB1dCBtYXgtd2lkdGgtODVcIlxuICAgICAgICAgICAgICAgaWQ9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwic2VhcmNoIC4uLlwiLz5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUobnVsbCwgJy9hZHZhbmNlZC1zZWFyY2gnKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYWR2YW5jZWQtYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBpY29uXCI+Zmxhc2hfb248L3NwYW4+XG4gICAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5BRFZBTkNFRCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG9TZWFyY2g9XCJtYXRBdXRvY29tcGxldGVcIiBjbGFzcz1cIm1hdC1hdXRvY29tcGxldGUtZ2xvYmFsLXNlYXJjaFwiIHBhbmVsV2lkdGg9XCI1NnZ3XCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKG9uU2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudCwgZG9jKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRvYyBvZiBkb2N1bWVudHMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LW9wdGlvbi1nbG9iYWwtc2VhcmNoXCI+XG4gICAgICAgICAgICA8IS0tUFVSQ0hBU0VfT1JERVItLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5QVVJDSEFTRV9PUkRFUlwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5yZWNlaXB0X2xvbmc8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTcwXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFVSQ0hBU0VfT1JERVInIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLnBvTnVtYmVyIH19XG4gICAgICAgICAgICAgICAgICAgIC0ge3sgZG9jLnRvdGFsQW1vdW50IHwgY3VycmVuY3k6IGRvYy5jdXJyZW5jeUNvZGU6J3N5bWJvbCc6dW5kZWZpbmVkOidmci1GUid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkJBU0tFVF9OVU1CRVInIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jPy5iYXNrZXROdW1iZXIgPyBkb2MuYmFza2V0TnVtYmVyIDogJy0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uRUFOJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYz8uZWFuID8gZG9jLmVhbiA6ICctJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS1QUk9EVUNULS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuUFJPRFVDVFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5tb3ZpZTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVsbGlwc2lzIGQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNjBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5QUk9EVUNUJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5TVVBQT1JUJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZG9jLnN1cHBvcnRbbGFiZWxMYW5nXX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uRUFOJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5lYW4gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5SRUxFQVNFX0RBVEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jPy5yZWxlYXNlRGF0ZSA/IGRvYy5yZWxlYXNlRGF0ZSA6ICctJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS1XT1JLLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuV09SS19WRVJTSU9OXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnRoZWF0ZXJzPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC03NSBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLldPUksnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy50aXRsZSB9fSAoe3tkb2MuY29kZUlzb319KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xMFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLk1JTE9fQ09ERScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57e2RvYy5taWxvQ29kZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFJPRFVDVElPTl9ZRUFSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy55ZWFyT2ZQcm9kdWN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDwvZGl2PlxuXG4gIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPjwvc3Bhbj5cbiAgPGRpdiAqbmdJZj1cInVzZXIgJiYgdXNlci5zZWNvbmRhcnlcIiBjbGFzcz1cImNvbm5lY3RlZC1hcyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweFwiPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5DT05ORUNURURfQVMnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19ICB7e3VzZXIubG9naW4gKyAnIC0gJyArIHVzZXIuZmlyc3ROYW1lICsgJyAnICsgdXNlci5uYW1lIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICA8YnV0dG9uIChjbGljayk9XCJzdG9wSWRlbnRpdHlUaGVmdCgpXCIgKm5nSWY9XCJ1c2VyLnNlY29uZGFyeVwiIGNvbG9yPVwid2FyblwiIG1hdC1yYWlzZWQtYnV0dG9uPlxuICAgICAge3sgJ0NPUkUuU1RPUCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxzcGFuIGNsYXNzPVwiaGVhZGVyLXNlcGFyYXRvclwiPjwvc3Bhbj5cblxuICA8c3BhbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwic2V0dGluZ3NcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIGhlYWRlci1pY29uIG1heC13aWR0aC01XCI+c2V0dGluZ3M8L3NwYW4+XG5cbiAgPCEtLSAjZW5kZG9jcmVnaW9uIG1hdC1tZW51LXRyaWdnZXItZm9yIC0tPlxuICA8bWF0LW1lbnUgI3NldHRpbmdzPVwibWF0TWVudVwiIGNsYXNzPVwiYWN0aW9uLW1lbnVcIj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJzd2l0Y2hUaGVtZSgpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1lbnUtaWNvbiBtYXQtaWNvblwiPnRvZ2dsZV9vbjwvbWF0LWljb24+XG4gICAgICA8c3Bhbj57eydDT01NT04uSEVBREVSLlBBUkFNRVRFUlMuVEhFTUUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPSdzd2l0Y2hMYW5nKFwiZW5cIiknICpuZ0lmPSdsYW5nICE9PSBcImVuXCInIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWcvZmxhZy9lbi1mbGFnLnBuZ1wiPlxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuUEFSQU1FVEVSUy5USVRMRS5MQU5HVUFHRVMuRU5HTElTSCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIChjbGljayk9J3N3aXRjaExhbmcoXCJmclwiKScgKm5nSWY9J2xhbmcgIT09IFwiZnJcIicgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ltZy9mbGFnL2ZyLWZsYWcucG5nXCI+XG4gICAgICB7eyAnQ09NTU9OLkhFQURFUi5QQVJBTUVURVJTLlRJVExFLkxBTkdVQUdFUy5GUkVOQ0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPSdzd2l0Y2hMYW5nKFwiZGVcIiknICpuZ0lmPSdsYW5nICE9PSBcImRlXCIgJyBtYXQtbWVudS1pdGVtPlxuICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1nL2ZsYWcvZGUtZmxhZy5wbmdcIj5cbiAgICAgIHt7ICdDT01NT04uSEVBREVSLlBBUkFNRVRFUlMuVElUTEUuTEFOR1VBR0VTLkRFVVRDSCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtbWVudT5cbjwvbWF0LXRvb2xiYXI+XG5cbiJdfQ==
|
|
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/toolbar";
|
|
24
|
+
import * as i14 from "@angular/material/menu";
|
|
25
|
+
import * as i15 from "@angular/material/form-field";
|
|
26
|
+
import * as i16 from "@angular/material/button";
|
|
27
|
+
import * as i17 from "@angular/material/autocomplete";
|
|
28
|
+
import * as i18 from "@angular/material/core";
|
|
29
|
+
import * as i19 from "@angular/material/icon";
|
|
30
|
+
import * as i20 from "@angular/common";
|
|
31
|
+
import * as i21 from "ngx-permissions";
|
|
32
|
+
import * as i22 from "@angular/material/input";
|
|
33
|
+
import * as i23 from "@angular/forms";
|
|
34
|
+
import * as i24 from "../../pipes/common-translate.pipe";
|
|
35
|
+
export class HeaderComponent {
|
|
36
|
+
constructor(router, localStorageEvents, localStorage, toasterService, translate, commonApiService, sessionStorageService, permissionsService, overlayContainer, cookieService, langService, elasticsearchService, config) {
|
|
37
|
+
this.router = router;
|
|
38
|
+
this.localStorageEvents = localStorageEvents;
|
|
39
|
+
this.localStorage = localStorage;
|
|
40
|
+
this.toasterService = toasterService;
|
|
41
|
+
this.translate = translate;
|
|
42
|
+
this.commonApiService = commonApiService;
|
|
43
|
+
this.sessionStorageService = sessionStorageService;
|
|
44
|
+
this.permissionsService = permissionsService;
|
|
45
|
+
this.overlayContainer = overlayContainer;
|
|
46
|
+
this.cookieService = cookieService;
|
|
47
|
+
this.langService = langService;
|
|
48
|
+
this.elasticsearchService = elasticsearchService;
|
|
49
|
+
this.config = config;
|
|
50
|
+
this.toogleMenuEvent = new EventEmitter();
|
|
51
|
+
this.labelLang = 'labelFr';
|
|
52
|
+
this.isHide = false;
|
|
53
|
+
this.currentScroll = 0;
|
|
54
|
+
this.historyList = [];
|
|
55
|
+
this.RapidSearchItemType = RapidSearchItemType;
|
|
56
|
+
this.apiUrl = this.config.api_url;
|
|
57
|
+
}
|
|
58
|
+
ngOnInit() {
|
|
59
|
+
this.formControlSearch = new FormControl(null);
|
|
60
|
+
this.initPermissionsService();
|
|
61
|
+
this.lang = this.localStorage.get('lang') || 'fr';
|
|
62
|
+
this.updateLabelLang(this.lang);
|
|
63
|
+
this.env = this.config.env.toLowerCase();
|
|
64
|
+
this.localStorageEvents.localStorageEvent.subscribe(() => {
|
|
65
|
+
this.lang = this.localStorage.get('lang');
|
|
66
|
+
this.updateLabelLang(this.lang);
|
|
67
|
+
});
|
|
68
|
+
this.documents$ = this.formControlSearch.valueChanges.pipe(debounceTime(500), switchMap(term => {
|
|
69
|
+
if (!term) {
|
|
70
|
+
return of([]);
|
|
71
|
+
}
|
|
72
|
+
return this.elasticsearchService
|
|
73
|
+
.getSearchResponse(term)
|
|
74
|
+
.pipe(map(searchResponse => {
|
|
75
|
+
return this.elasticsearchService.getDocuments(searchResponse);
|
|
76
|
+
}));
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
onWindowScroll() {
|
|
80
|
+
const numberVar = document.documentElement.scrollTop;
|
|
81
|
+
if (numberVar > this.currentScroll) {
|
|
82
|
+
this.isHide = true;
|
|
83
|
+
}
|
|
84
|
+
if (numberVar < this.currentScroll) {
|
|
85
|
+
this.isHide = false;
|
|
86
|
+
}
|
|
87
|
+
this.currentScroll = numberVar;
|
|
88
|
+
}
|
|
89
|
+
initPermissionsService() {
|
|
90
|
+
this.permissionsService.init();
|
|
91
|
+
}
|
|
92
|
+
switchTheme() {
|
|
93
|
+
if (this.theme === 'dark') {
|
|
94
|
+
this.localStorage.post('newTheme', 'light');
|
|
95
|
+
this.overlayContainer
|
|
96
|
+
.getContainerElement()
|
|
97
|
+
.classList.remove('dark-theme');
|
|
98
|
+
this.overlayContainer.getContainerElement().classList.add('light-theme');
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.localStorage.post('newTheme', 'dark');
|
|
102
|
+
this.overlayContainer
|
|
103
|
+
.getContainerElement()
|
|
104
|
+
.classList.remove('light-theme');
|
|
105
|
+
this.overlayContainer.getContainerElement().classList.add('dark-theme');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
stopIdentityTheft() {
|
|
109
|
+
sessionStorage.removeItem('authTokenSecondary');
|
|
110
|
+
}
|
|
111
|
+
navigate(module = '', route) {
|
|
112
|
+
if (!route.startsWith('/')) {
|
|
113
|
+
route = '/' + route;
|
|
114
|
+
}
|
|
115
|
+
const url = this.config.api_url + (module ? `/${module}` : '') + route;
|
|
116
|
+
if (window.location.href === url) {
|
|
117
|
+
window.location.reload();
|
|
118
|
+
}
|
|
119
|
+
else if (window.location.pathname.startsWith(`/${module}`)) {
|
|
120
|
+
this.router.navigateByUrl(route);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
window.location.href = url;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
getHistory() {
|
|
127
|
+
this.historyList = [];
|
|
128
|
+
if (this.localStorage.exist('history')) {
|
|
129
|
+
this.historyList = this.localStorage.get('history');
|
|
130
|
+
}
|
|
131
|
+
if (this.historyList.length === 0) {
|
|
132
|
+
this.historyList.push({ type: 'NO_HISTORY_AVAILABLE', id: null, ref: null });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
switchLang(lang) {
|
|
136
|
+
this.localStorage.post('lang', lang);
|
|
137
|
+
this.translate.use(lang);
|
|
138
|
+
this.langService.switchLang();
|
|
139
|
+
}
|
|
140
|
+
updateLabelLang(lang) {
|
|
141
|
+
if ('en' === lang) {
|
|
142
|
+
this.labelLang = 'labelEn';
|
|
143
|
+
}
|
|
144
|
+
else if ('de' === lang) {
|
|
145
|
+
this.labelLang = 'labelDe';
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
this.labelLang = 'labelFr';
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
onSelectSearch($event, doc) {
|
|
152
|
+
switch (doc.docType) {
|
|
153
|
+
case RapidSearchItemType.PURCHASE_ORDER:
|
|
154
|
+
this.navigate('expenditure-commitment', '/purchase-orders/' + doc.poId);
|
|
155
|
+
break;
|
|
156
|
+
case RapidSearchItemType.PRODUCT:
|
|
157
|
+
this.navigate('video', '/product/consult/' + doc.productId);
|
|
158
|
+
break;
|
|
159
|
+
case RapidSearchItemType.WORK_VERSION:
|
|
160
|
+
this.navigate(null, '/work-summary/' + doc.id + '/info');
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.2", 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 });
|
|
166
|
+
HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.2", type: HeaderComponent, selector: "sc-header", outputs: { toogleMenuEvent: "toogleMenuEvent" }, host: { listeners: { "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<mat-toolbar [ngClass]=\"{ 'light-header': theme !== 'dark' }\"\r\n class=\"sc-header d-flex align-items-center\">\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 <span class=\"header-separator\"></span>\r\n <span [matMenuTriggerFor]=\"menu_global\" class=\"material-icons header-icon max-width-5\">apps</span>\r\n <mat-menu #menu_global=\"matMenu\" class=\"action-menu\">\r\n <!--DASHBOARD-->\r\n <button (click)=\"navigate(null, '/dashboard')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">apps</span>\r\n <span>{{ 'COMMON.HEADER.MENU.DASHBOARD' | commonTranslate: lang }}</span>\r\n </button>\r\n <!--COMMERCIAL-->\r\n <span *ngxPermissionsOnly=\"['COMMERCIAL']\">\r\n <button (click)=\"navigate('commercial', '/deal/search')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">local_offer</span>\r\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.DEAL' | commonTranslate: lang }}</span>\r\n </button>\r\n <button (click)=\"navigate('commercial', '/work-record/search')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">theaters</span>\r\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.WORK_RECORD' | commonTranslate: lang }}</span>\r\n </button>\r\n <button (click)=\"navigate('commercial', '/vod/search')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">manage_search</span>\r\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.VOD_SEARCH' | commonTranslate: lang }}</span>\r\n </button>\r\n <button (click)=\"navigate('commercial', '/accounting-closing/consult')\"\r\n *ngxPermissionsOnly=\"['ACCOUNTANT', 'ADMINISTRATIVE_CONTROLLER']\"\r\n mat-menu-item>\r\n <span class=\"material-icons-outlined\">account_balance_wallet</span>\r\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.ACCOUNTING_CLOSING' | commonTranslate: lang }}</span>\r\n </button>\r\n <button (click)=\"navigate('commercial', '/invoice/search')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">receipt</span>\r\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.INVOICE' | commonTranslate: lang }}</span>\r\n </button>\r\n <button (click)=\"navigate('commercial', '/turnover/search')\"\r\n *ngxPermissionsOnly=\"['ACCOUNTANT', 'ADMINISTRATIVE_CONTROLLER']\"\r\n mat-menu-item>\r\n <span class=\"material-icons-outlined\">request_quote</span>\r\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.TURNOVER' | commonTranslate: lang }}</span>\r\n </button>\r\n </span>\r\n <!--USER-->\r\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">manage_accounts</span>\r\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\r\n </button>\r\n <!--MY PREFERENCES-->\r\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">settings</span>\r\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\r\n </button>\r\n <!--BATCH-->\r\n <button (click)=\"navigate('batch', '/jobs/referential')\" *ngxPermissionsOnly=\"['MODULE REF']\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">autorenew</span>\r\n <span>{{ 'COMMON.HEADER.MENU.REFERENTIAL.BATCH' | commonTranslate: lang }}</span>\r\n </button>\r\n <!--TV DATA-->\r\n <button (click)=\"navigate('tvdata', '/infos-center')\" *ngxPermissionsOnly=\"['TVDATA']\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">source</span>\r\n <span>{{ 'COMMON.HEADER.MENU.TV-DATA' | commonTranslate: lang }}</span>\r\n </button>\r\n <!--EXPENDITURE COMMITMENT-->\r\n <button (click)=\"navigate('expenditure-commitment', '/home/commands')\" *ngxPermissionsExcept=\"['UNIVERSAL_ROLE']\"\r\n mat-menu-item>\r\n <span class=\"material-icons-outlined\">receipt_long</span>\r\n <span>{{ 'COMMON.HEADER.MENU.EXPENDITURE_COMMITMENT' | commonTranslate: lang }}</span>\r\n </button>\r\n <!--BI-->\r\n <button (click)=\"navigate('bi', '/simple-search/form')\" *ngxPermissionsOnly=\"['MODULE BI']\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">travel_explore</span>\r\n <span>{{ 'COMMON.HEADER.MENU.BI.SEARCH' | commonTranslate: lang }}</span>\r\n </button>\r\n <!--LEGAL-->\r\n <button (click)=\"navigate('legal', '/contracts/menu/legals-det')\" *ngxPermissionsOnly=\"['LEGAL']\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">gavel</span>\r\n <span>{{ 'COMMON.HEADER.MENU.LEGAL' | commonTranslate: lang }}</span>\r\n </button>\r\n <!--CALENDAR-->\r\n <button (click)=\"navigate('calendar', '')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">calendar_month</span>\r\n <span>{{ 'COMMON.HEADER.MENU.CALENDAR' | commonTranslate: lang }}</span>\r\n </button>\r\n </mat-menu>\r\n <span class=\"header-separator\"></span>\r\n <span [matMenuTriggerFor]=\"menu\" class=\"material-icons-outlined header-icon max-width-5\">add_box</span>\r\n <mat-menu #menu=\"matMenu\" class=\"action-menu\">\r\n <button (click)=\"navigate('video', '/product/form')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">theaters</span>\r\n {{ 'COMMON.HEADER.CREATION.PRODUCT' | commonTranslate: lang }}\r\n </button>\r\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/form')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">receipt_long</span>\r\n {{ 'COMMON.HEADER.CREATION.PO' | commonTranslate: lang }}\r\n </button>\r\n <button (click)=\"navigate('commercial', '/deal/form')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">local_offer</span>\r\n {{ 'COMMON.HEADER.CREATION.DEAL' | commonTranslate: lang }}\r\n </button>\r\n <button (click)=\"navigate('legal', '/createContract/acq')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">shop_two</span>\r\n {{ 'COMMON.HEADER.CREATION.CREATION_ACQ' | commonTranslate: lang }}\r\n </button>\r\n <button (click)=\"navigate('legal', '/createContract/sales')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">article</span>\r\n {{ 'COMMON.HEADER.CREATION.CREATION_CESS' | commonTranslate: lang }}\r\n </button>\r\n\t <button (click)=\"navigate('legal', '/createContract/auth')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">account_circle</span>\r\n {{ 'COMMON.HEADER.CREATION.CREATION_AUTH' | commonTranslate: lang }}\r\n </button>\r\n <button (click)=\"navigate('pa', '/campaign/form')\" mat-menu-item>\r\n <span class=\"material-icons-outlined\">campaign</span>\r\n {{ 'COMMON.HEADER.CREATION.CAMPAIGN' | commonTranslate: lang }}\r\n </button>\r\n </mat-menu>\r\n <span class=\"header-separator\"></span>\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 <span class=\"material-icons-outlined\">theaters</span>\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 <span class=\"material-icons-outlined\">receipt_long</span>\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 <span class=\"material-icons-outlined\">local_offer</span>\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 <span class=\"material-icons-outlined\">theaters</span>\r\n {{ 'COMMON.HEADER.HISTORY.WORK' | commonTranslate : lang }} {{history.ref}}\r\n </button>\r\n <button (click)=\"navigate('legal', '/contracts/contract-acq/consult/' + history.id)\"\r\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\r\n mat-menu-item>\r\n <span class=\"material-icons-outlined\">assignment</span>\r\n {{ 'COMMON.HEADER.HISTORY.CONTRACT-ACQ' | commonTranslate : lang }} {{history.ref}}\r\n </button>\r\n <button (click)=\"navigate('legal', '/contracts/contract-cess/consult/' + history.id)\"\r\n *ngSwitchCase=\"'CONTRACT_CESS'\"\r\n mat-menu-item>\r\n <span class=\"material-icons-outlined\">article</span>\r\n {{ 'COMMON.HEADER.HISTORY.CONTRACT-CESS' | 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 <span class=\"material-icons-outlined\">payments</span>\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 <span class=\"material-icons-outlined\">not_interested</span>\r\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\r\n </button>\r\n </ng-container>\r\n </mat-menu>\r\n\r\n <div class=\"global-search d-flex max-width-60\">\r\n <i class=\"material-icons global-search-icon header-icon\">search</i>\r\n <span class=\"global-search-separator\"></span>\r\n <mat-form-field class=\"max-width-100\" floatLabel=\"never\">\r\n <div class=\"d-flex\">\r\n <input [formControl]=\"formControlSearch\" [matAutocomplete]=\"autoSearch\"\r\n class=\"global-search-input max-width-85\"\r\n id=\"search-input\"\r\n matInput\r\n placeholder=\"search ...\"/>\r\n <button (click)=\"navigate(null, '/advanced-search')\"\r\n class=\"btn advanced-button\" mat-raised-button>\r\n <span class=\"material-icons icon\">flash_on</span>\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=\"56vw\">\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 </mat-option>\r\n </mat-autocomplete>\r\n </div>\r\n\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n <span class=\"d-flex flex-column max-width-15\"></span>\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 <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=\"action-menu\">\r\n <button (click)=\"switchTheme()\" mat-menu-item>\r\n <mat-icon class=\"menu-icon mat-icon\">toggle_on</mat-icon>\r\n <span>{{'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang}}</span>\r\n </button>\r\n <button (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\r\n <img src=\"assets/img/flag/en-flag.png\">\r\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}\r\n </button>\r\n <button (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\r\n <img src=\"assets/img/flag/fr-flag.png\">\r\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}\r\n </button>\r\n <button (click)='switchLang(\"de\")' *ngIf='lang !== \"de\" ' mat-menu-item>\r\n <img src=\"assets/img/flag/de-flag.png\">\r\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}\r\n </button>\r\n </mat-menu>\r\n</mat-toolbar>\r\n\r\n", styles: [".sc-header{height:64px;position:fixed;z-index:999}mat-toolbar{width:100%}.logo-unity{height:48px;width:48px}.header-icon{width:22px;height:20px}.global-search{height:40px;background:#EFF3F6;padding:0;margin-left:30px;border-radius:8px}.global-search-icon{width:18px;height:18px;margin:10px 12px 10px 10px}.global-search-input{background:#EFF3F6;border:none;margin-left:10px;font-size:14px!important}.global-search-input:focus{outline:none}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC;margin-top:6px}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{width:90px!important;min-width:90px!important;height:24px!important;background:#7C87FF;border:none;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;border-radius:4px;line-height:12px;color:#fff;margin:auto 5px auto auto;cursor:pointer;padding:0!important}.advanced-button .icon{font-size:12px;vertical-align:middle}.sc-header .header-icon{color:#009ef7;cursor:pointer;text-align:center}.header-separator{display:inline-block;height:25%;margin-top:6px}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-uat{background-color:#809ec1;color:#fff}#env-dev{background-color:#809ec1;color:#fff}#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}:host ::ng-deep .global-search .mat-form-field-appearance-legacy .mat-form-field-label{top:2.2em!important;margin-left:10px;font-family:Roboto;font-style:italic;font-weight:bold;font-size:14px;line-height:14px}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}.center{text-align:center}.mr-10{margin-right:10px}.mr-20{margin-right:20px}.mr-30{margin-right:30px}.mb-2{margin-bottom:2px}.mat-menu-item img{height:12px!important;margin-right:13px;margin-bottom:-2px;margin-left:3px}.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-60{flex:1 1 60%;max-width:60%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}\n"], components: [{ type: i13.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i15.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i16.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i17.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i18.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i19.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i20.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i20.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i21.NgxPermissionsDirective, selector: "[ngxPermissionsOnly],[ngxPermissionsExcept]", inputs: ["ngxPermissionsOnly", "ngxPermissionsOnlyThen", "ngxPermissionsOnlyElse", "ngxPermissionsExcept", "ngxPermissionsExceptElse", "ngxPermissionsExceptThen", "ngxPermissionsThen", "ngxPermissionsElse", "ngxPermissionsOnlyAuthorisedStrategy", "ngxPermissionsOnlyUnauthorisedStrategy", "ngxPermissionsExceptUnauthorisedStrategy", "ngxPermissionsExceptAuthorisedStrategy", "ngxPermissionsUnauthorisedStrategy", "ngxPermissionsAuthorisedStrategy"], outputs: ["permissionsAuthorized", "permissionsUnauthorized"] }, { type: i20.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i20.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i20.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i22.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i23.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i17.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i23.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i23.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "commonTranslate": i24.CommonTranslatePipe, "async": i20.AsyncPipe, "currency": i20.CurrencyPipe } });
|
|
167
|
+
__decorate([
|
|
168
|
+
Theme()
|
|
169
|
+
], HeaderComponent.prototype, "theme", void 0);
|
|
170
|
+
__decorate([
|
|
171
|
+
User()
|
|
172
|
+
], HeaderComponent.prototype, "user", void 0);
|
|
173
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.2", ngImport: i0, type: HeaderComponent, decorators: [{
|
|
174
|
+
type: Component,
|
|
175
|
+
args: [{
|
|
176
|
+
selector: 'sc-header',
|
|
177
|
+
styleUrls: ['./header.component.scss'],
|
|
178
|
+
templateUrl: './header.component.html'
|
|
179
|
+
}]
|
|
180
|
+
}], 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: [{
|
|
181
|
+
type: Inject,
|
|
182
|
+
args: [WEB_CONFIG]
|
|
183
|
+
}] }]; }, propDecorators: { theme: [], user: [], toogleMenuEvent: [{
|
|
184
|
+
type: Output
|
|
185
|
+
}], onWindowScroll: [{
|
|
186
|
+
type: HostListener,
|
|
187
|
+
args: ['window:scroll', []]
|
|
188
|
+
}] } });
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldy1mcm9udC1jb21tb24tbGlicmFyeS9zcmMvbGliL3V0aWwvY29tcG9uZW50L2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV3LWZyb250LWNvbW1vbi1saWJyYXJ5L3NyYy9saWIvdXRpbC9jb21wb25lbnQvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNOUYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQVF2RCxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBS2xELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVN0QyxNQUFNLE9BQU8sZUFBZTtJQWtCMUIsWUFDVSxNQUFjLEVBQ2Qsa0JBQTZDLEVBQzdDLFlBQWlDLEVBQ2pDLGNBQW9DLEVBQ3BDLFNBQTJCLEVBQzNCLGdCQUFrQyxFQUNsQyxxQkFBNEMsRUFDNUMsa0JBQXNDLEVBQ3RDLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixXQUF3QixFQUN4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SSxNQUVULGVBQWU7c0JBQXhCLE1BQU07Z0JBOERBLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlDb250YWluZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25zSW50ZXJmYWNlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvcGVybWlzc2lvbnMuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IFRoZW1lIH0gZnJvbSBcIi4uLy4uL2RlY29yYXRvcnMvdGhlbWUuZGVjb3JhdG9yXCI7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tIFwiLi4vLi4vZGVjb3JhdG9ycy91c2VyLmRlY29yYXRvclwiO1xyXG5pbXBvcnQgeyBBdXRoVXNlck1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VFdmVudHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2V2ZW50L3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS1ldmVudHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRvYXN0ZXJFdmVudHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3RvYXN0ZXIvdG9hc3Rlci1ldmVudHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb21tb25BcGlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2FwaS9jb21tb24tYXBpLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ29uZmlnLCBXRUJfQ09ORklHIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ1wiO1xyXG5pbXBvcnQgeyBMYW5nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUtbGFuZ3VhZ2UvbGFuZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEVsYXN0aWNzZWFyY2hTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2VsYXN0aWNzZWFyY2gvZWxhc3RpY3NlYXJjaC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFB1cmNoYXNlT3JkZXJSYXBpZFNlYXJjaE1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9leHBlbmRpdHVyZS1jb21taXRtZW50L3B1cmNoYXNlLW9yZGVyLXJhcGlkLXNlYXJjaC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBQcm9kdWN0UmFwaWRTZWFyY2hNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvdmlkZW8vcHJvZHVjdC1yYXBpZC1zZWFyY2gubW9kZWxcIjtcclxuaW1wb3J0IHsgUmFwaWRTZWFyY2hJdGVtVHlwZSB9IGZyb20gXCIuLi8uLi9lbnVtcy9yYXBpZC1zZWFyY2gtaXRlbS10eXBlLmVudW1cIlxyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgV29ya1ZlcnNpb25SYXBpZFNlYXJjaE1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9yZWZlcmVudGlhbC93b3JrLXZlcnNpb24tcmFwaWQtc2VhcmNoLm1vZGVsXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdE9wdGlvblNlbGVjdGlvbkNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzYy1oZWFkZXInLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vaGVhZGVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBQZXJtaXNzaW9uc0ludGVyZmFjZSB7XHJcbiAgICBAVGhlbWUoKSBwdWJsaWMgdGhlbWU6IHN0cmluZztcclxuICAgIEBVc2VyKCkgcHVibGljIHVzZXI6IEF1dGhVc2VyTW9kZWw7XHJcblxyXG4gICAgQE91dHB1dCgpIHRvb2dsZU1lbnVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHVibGljIGxhbmc6IHN0cmluZztcclxuICBwdWJsaWMgbGFiZWxMYW5nID0gJ2xhYmVsRnInO1xyXG4gIHB1YmxpYyBpc0hpZGUgPSBmYWxzZTtcclxuICBwdWJsaWMgY3VycmVudFNjcm9sbCA9IDA7XHJcbiAgcHVibGljIGVudjogc3RyaW5nO1xyXG4gIHB1YmxpYyBoaXN0b3J5TGlzdCA9IFtdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpVXJsOiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBSYXBpZFNlYXJjaEl0ZW1UeXBlID0gUmFwaWRTZWFyY2hJdGVtVHlwZTtcclxuICBwdWJsaWMgZm9ybUNvbnRyb2xTZWFyY2g6IEZvcm1Db250cm9sO1xyXG4gIHB1YmxpYyBkb2N1bWVudHMkOiBPYnNlcnZhYmxlPChQdXJjaGFzZU9yZGVyUmFwaWRTZWFyY2hNb2RlbCB8IFByb2R1Y3RSYXBpZFNlYXJjaE1vZGVsIHwgV29ya1ZlcnNpb25SYXBpZFNlYXJjaE1vZGVsKVtdPjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VFdmVudHM6IExvY2FsU3RvcmFnZUV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJFdmVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbW1vbkFwaVNlcnZpY2U6IENvbW1vbkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgb3ZlcmxheUNvbnRhaW5lcjogT3ZlcmxheUNvbnRhaW5lcixcclxuICAgIHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcclxuICAgIHByaXZhdGUgbGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbGFzdGljc2VhcmNoU2VydmljZTogRWxhc3RpY3NlYXJjaFNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFdFQl9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBDb25maWdcclxuICApIHtcclxuICAgIHRoaXMuYXBpVXJsID0gdGhpcy5jb25maWcuYXBpX3VybDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2xTZWFyY2ggPSBuZXcgRm9ybUNvbnRyb2wobnVsbCk7XHJcblxyXG4gICAgdGhpcy5pbml0UGVybWlzc2lvbnNTZXJ2aWNlKCk7XHJcbiAgICB0aGlzLmxhbmcgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXQoJ2xhbmcnKSB8fCAnZnInO1xyXG4gICAgdGhpcy51cGRhdGVMYWJlbExhbmcodGhpcy5sYW5nKTtcclxuICAgIHRoaXMuZW52ID0gdGhpcy5jb25maWcuZW52LnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZUV2ZW50cy5sb2NhbFN0b3JhZ2VFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxhbmcgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXQoJ2xhbmcnKTtcclxuICAgICAgdGhpcy51cGRhdGVMYWJlbExhbmcodGhpcy5sYW5nKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZG9jdW1lbnRzJCA9IHRoaXMuZm9ybUNvbnRyb2xTZWFyY2gudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIGRlYm91bmNlVGltZSg1MDApLFxyXG4gICAgICBzd2l0Y2hNYXAodGVybSA9PiB7XHJcbiAgICAgICAgaWYgKCF0ZXJtKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5lbGFzdGljc2VhcmNoU2VydmljZVxyXG4gICAgICAgICAgLmdldFNlYXJjaFJlc3BvbnNlKHRlcm0pXHJcbiAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgbWFwKHNlYXJjaFJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGFzdGljc2VhcmNoU2VydmljZS5nZXREb2N1bWVudHMoc2VhcmNoUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbXSlcclxuICAgIHB1YmxpYyBvbldpbmRvd1Njcm9sbCgpIHtcclxuICAgICAgICBjb25zdCBudW1iZXJWYXIgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xyXG4gICAgICAgIGlmIChudW1iZXJWYXIgPiB0aGlzLmN1cnJlbnRTY3JvbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hpZGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobnVtYmVyVmFyIDwgdGhpcy5jdXJyZW50U2Nyb2xsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIaWRlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3VycmVudFNjcm9sbCA9IG51bWJlclZhcjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGluaXRQZXJtaXNzaW9uc1NlcnZpY2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzd2l0Y2hUaGVtZSgpIHtcclxuICAgICAgICBpZiAodGhpcy50aGVtZSA9PT0gJ2RhcmsnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnBvc3QoJ25ld1RoZW1lJywgJ2xpZ2h0Jyk7XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgLmdldENvbnRhaW5lckVsZW1lbnQoKVxyXG4gICAgICAgICAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2RhcmstdGhlbWUnKTtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKCdsaWdodC10aGVtZScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnBvc3QoJ25ld1RoZW1lJywgJ2RhcmsnKTtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5Q29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAuZ2V0Q29udGFpbmVyRWxlbWVudCgpXHJcbiAgICAgICAgICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnbGlnaHQtdGhlbWUnKTtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKCdkYXJrLXRoZW1lJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3BJZGVudGl0eVRoZWZ0KCkge1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2F1dGhUb2tlblNlY29uZGFyeScpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuYXZpZ2F0ZShtb2R1bGUgPSAnJywgcm91dGU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghcm91dGUuc3RhcnRzV2l0aCgnLycpKSB7XHJcbiAgICAgICAgICAgIHJvdXRlID0gJy8nICsgcm91dGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5hcGlfdXJsICsgKG1vZHVsZSA/IGAvJHttb2R1bGV9YCA6ICcnKSArIHJvdXRlO1xyXG5cclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYgPT09IHVybCkge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aChgLyR7bW9kdWxlfWApKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocm91dGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SGlzdG9yeSgpIHtcclxuICAgICAgICB0aGlzLmhpc3RvcnlMaXN0ID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlLmV4aXN0KCdoaXN0b3J5JykpIHtcclxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5TGlzdCA9IHRoaXMubG9jYWxTdG9yYWdlLmdldCgnaGlzdG9yeScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaGlzdG9yeUxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeUxpc3QucHVzaCh7dHlwZTogJ05PX0hJU1RPUllfQVZBSUxBQkxFJywgaWQ6IG51bGwsIHJlZjogbnVsbH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgcHVibGljIHN3aXRjaExhbmcobGFuZykge1xyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UucG9zdCgnbGFuZycsIGxhbmcpO1xyXG4gICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpO1xyXG4gICAgdGhpcy5sYW5nU2VydmljZS5zd2l0Y2hMYW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUxhYmVsTGFuZyhsYW5nOiBzdHJpbmcpIHtcclxuICAgIGlmICgnZW4nID09PSBsYW5nKSB7XHJcbiAgICAgIHRoaXMubGFiZWxMYW5nID0gJ2xhYmVsRW4nO1xyXG4gICAgfSBlbHNlIGlmICgnZGUnID09PSBsYW5nKSB7XHJcbiAgICAgIHRoaXMubGFiZWxMYW5nID0gJ2xhYmVsRGUnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sYWJlbExhbmcgPSAnbGFiZWxGcic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdFNlYXJjaCgkZXZlbnQ6IE1hdE9wdGlvblNlbGVjdGlvbkNoYW5nZSwgZG9jOiBhbnkpIHtcclxuICAgIHN3aXRjaChkb2MuZG9jVHlwZSl7XHJcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5QVVJDSEFTRV9PUkRFUjpcclxuICAgICAgICB0aGlzLm5hdmlnYXRlKCdleHBlbmRpdHVyZS1jb21taXRtZW50JywgJy9wdXJjaGFzZS1vcmRlcnMvJyArIGRvYy5wb0lkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlBST0RVQ1Q6XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZSgndmlkZW8nLCAnL3Byb2R1Y3QvY29uc3VsdC8nICsgZG9jLnByb2R1Y3RJZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5XT1JLX1ZFUlNJT046XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL3dvcmstc3VtbWFyeS8nICsgZG9jLmlkICsgJy9pbmZvJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtdG9vbGJhciBbbmdDbGFzc109XCJ7ICdsaWdodC1oZWFkZXInOiB0aGVtZSAhPT0gJ2RhcmsnIH1cIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJzYy1oZWFkZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZFwiPlxyXG4gICAgPGFcclxuICAgICAgW2hyZWZdPVwiZW52ID09PSAncHJvZCcgPyAnaHR0cHM6Ly91bml0eS5zdHVkaW9jYW5hbC5jb20vZGFzaGJvYXJkJyA6IChlbnYgPT09ICdzYngnID8gJ2h0dHBzOi8vdW5pdHktc2J4LmNwbHVzL2Rhc2hib2FyZCcgOiAnaHR0cHM6Ly91bml0eS0nICsgZW52ICsgJy5zdHVkaW9jYW5hbC5jb20vZGFzaGJvYXJkJylcIj5cclxuICAgICAgPGltZyBjbGFzcz1cImxvZ28tdW5pdHlcIiBzcmM9XCIuL2Fzc2V0cy9pbWcvdW5pdHlfbG9nb180OHg0OC5wbmdcIj5cclxuICAgIDwvYT5cclxuICAgIDxzcGFuICpuZ0lmPVwiZW52ICE9ICdwcm9kJ1wiIFthdHRyLmlkXT1cIidlbnYtJyArIGVudlwiIGNsYXNzPVwiZW52XCI+e3tlbnZ9fTwvc3Bhbj5cclxuICA8L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2VwYXJhdG9yXCI+PC9zcGFuPlxyXG4gIDxzcGFuIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51X2dsb2JhbFwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaGVhZGVyLWljb24gbWF4LXdpZHRoLTVcIj5hcHBzPC9zcGFuPlxyXG4gIDxtYXQtbWVudSAjbWVudV9nbG9iYWw9XCJtYXRNZW51XCIgY2xhc3M9XCJhY3Rpb24tbWVudVwiPlxyXG4gICAgPCEtLURBU0hCT0FSRC0tPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUobnVsbCwgJy9kYXNoYm9hcmQnKVwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5hcHBzPC9zcGFuPlxyXG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkRBU0hCT0FSRCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDwhLS1DT01NRVJDSUFMLS0+XHJcbiAgICA8c3BhbiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydDT01NRVJDSUFMJ11cIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnY29tbWVyY2lhbCcsICcvZGVhbC9zZWFyY2gnKVwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmxvY2FsX29mZmVyPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuQ09NTUVSQ0lBTC5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdjb21tZXJjaWFsJywgJy93b3JrLXJlY29yZC9zZWFyY2gnKVwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnRoZWF0ZXJzPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuQ09NTUVSQ0lBTC5XT1JLX1JFQ09SRCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnY29tbWVyY2lhbCcsICcvdm9kL3NlYXJjaCcpXCIgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+bWFuYWdlX3NlYXJjaDwvc3Bhbj5cclxuICAgICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkNPTU1FUkNJQUwuVk9EX1NFQVJDSCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnY29tbWVyY2lhbCcsICcvYWNjb3VudGluZy1jbG9zaW5nL2NvbnN1bHQnKVwiXHJcbiAgICAgICAgICAgICAgKm5neFBlcm1pc3Npb25zT25seT1cIlsnQUNDT1VOVEFOVCcsICdBRE1JTklTVFJBVElWRV9DT05UUk9MTEVSJ11cIlxyXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmFjY291bnRfYmFsYW5jZV93YWxsZXQ8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5DT01NRVJDSUFMLkFDQ09VTlRJTkdfQ0xPU0lORycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnY29tbWVyY2lhbCcsICcvaW52b2ljZS9zZWFyY2gnKVwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnJlY2VpcHQ8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5DT01NRVJDSUFMLklOVk9JQ0UnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL3R1cm5vdmVyL3NlYXJjaCcpXCJcclxuICAgICAgICAgICAgICAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydBQ0NPVU5UQU5UJywgJ0FETUlOSVNUUkFUSVZFX0NPTlRST0xMRVInXVwiXHJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+cmVxdWVzdF9xdW90ZTwvc3Bhbj5cclxuICAgICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkNPTU1FUkNJQUwuVFVSTk9WRVInIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPCEtLVVTRVItLT5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCd1c2VyJywgJy9hY2NvdW50L2F1dGhvcml6YXRpb24vc2VhcmNoJylcIiAqbmdJZj1cInVzZXIgJiYgdXNlci5hZG1pblwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5tYW5hZ2VfYWNjb3VudHM8L3NwYW4+XHJcbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuVVNFUi5TRUNUSU9OX1RJVExFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPCEtLU1ZIFBSRUZFUkVOQ0VTLS0+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgndXNlcicsICcvYWNjb3VudC9zZXR0aW5ncycpXCIgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnNldHRpbmdzPC9zcGFuPlxyXG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLlVTRVIuU0VUVElOR1MnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8IS0tQkFUQ0gtLT5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdiYXRjaCcsICcvam9icy9yZWZlcmVudGlhbCcpXCIgKm5neFBlcm1pc3Npb25zT25seT1cIlsnTU9EVUxFIFJFRiddXCIgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmF1dG9yZW5ldzwvc3Bhbj5cclxuICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5SRUZFUkVOVElBTC5CQVRDSCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDwhLS1UViBEQVRBLS0+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgndHZkYXRhJywgJy9pbmZvcy1jZW50ZXInKVwiICpuZ3hQZXJtaXNzaW9uc09ubHk9XCJbJ1RWREFUQSddXCIgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnNvdXJjZTwvc3Bhbj5cclxuICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5UVi1EQVRBJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPCEtLUVYUEVORElUVVJFIENPTU1JVE1FTlQtLT5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdleHBlbmRpdHVyZS1jb21taXRtZW50JywgJy9ob21lL2NvbW1hbmRzJylcIiAqbmd4UGVybWlzc2lvbnNFeGNlcHQ9XCJbJ1VOSVZFUlNBTF9ST0xFJ11cIlxyXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+cmVjZWlwdF9sb25nPC9zcGFuPlxyXG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkVYUEVORElUVVJFX0NPTU1JVE1FTlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8IS0tQkktLT5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdiaScsICcvc2ltcGxlLXNlYXJjaC9mb3JtJylcIiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydNT0RVTEUgQkknXVwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj50cmF2ZWxfZXhwbG9yZTwvc3Bhbj5cclxuICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5CSS5TRUFSQ0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8IS0tTEVHQUwtLT5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdsZWdhbCcsICcvY29udHJhY3RzL21lbnUvbGVnYWxzLWRldCcpXCIgKm5neFBlcm1pc3Npb25zT25seT1cIlsnTEVHQUwnXVwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5nYXZlbDwvc3Bhbj5cclxuICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5MRUdBTCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDwhLS1DQUxFTkRBUi0tPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NhbGVuZGFyJywgJycpXCIgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmNhbGVuZGFyX21vbnRoPC9zcGFuPlxyXG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkNBTEVOREFSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbWF0LW1lbnU+XHJcbiAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2VwYXJhdG9yXCI+PC9zcGFuPlxyXG4gIDxzcGFuIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCBoZWFkZXItaWNvbiBtYXgtd2lkdGgtNVwiPmFkZF9ib3g8L3NwYW4+XHJcbiAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIGNsYXNzPVwiYWN0aW9uLW1lbnVcIj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCd2aWRlbycsICcvcHJvZHVjdC9mb3JtJylcIiBtYXQtbWVudS1pdGVtPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+dGhlYXRlcnM8L3NwYW4+XHJcbiAgICAgIHt7ICdDT01NT04uSEVBREVSLkNSRUFUSU9OLlBST0RVQ1QnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdleHBlbmRpdHVyZS1jb21taXRtZW50JywgJy9wdXJjaGFzZS1vcmRlcnMvZm9ybScpXCIgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnJlY2VpcHRfbG9uZzwvc3Bhbj5cclxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuQ1JFQVRJT04uUE8nIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdjb21tZXJjaWFsJywgJy9kZWFsL2Zvcm0nKVwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5sb2NhbF9vZmZlcjwvc3Bhbj5cclxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuQ1JFQVRJT04uREVBTCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jcmVhdGVDb250cmFjdC9hY3EnKVwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5zaG9wX3R3bzwvc3Bhbj5cclxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuQ1JFQVRJT04uQ1JFQVRJT05fQUNRJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnbGVnYWwnLCAnL2NyZWF0ZUNvbnRyYWN0L3NhbGVzJylcIiBtYXQtbWVudS1pdGVtPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+YXJ0aWNsZTwvc3Bhbj5cclxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuQ1JFQVRJT04uQ1JFQVRJT05fQ0VTUycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cclxuICAgIDwvYnV0dG9uPlxyXG5cdCAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jcmVhdGVDb250cmFjdC9hdXRoJylcIiBtYXQtbWVudS1pdGVtPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+YWNjb3VudF9jaXJjbGU8L3NwYW4+XHJcbiAgICAgIHt7ICdDT01NT04uSEVBREVSLkNSRUFUSU9OLkNSRUFUSU9OX0FVVEgnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdwYScsICcvY2FtcGFpZ24vZm9ybScpXCIgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmNhbXBhaWduPC9zcGFuPlxyXG4gICAgICB7eyAnQ09NTU9OLkhFQURFUi5DUkVBVElPTi5DQU1QQUlHTicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbWF0LW1lbnU+XHJcbiAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2VwYXJhdG9yXCI+PC9zcGFuPlxyXG4gIDxzcGFuIChjbGljayk9XCJnZXRIaXN0b3J5KClcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudUhpc3RvcnlcIlxyXG4gICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaGVhZGVyLWljb24gbWF4LXdpZHRoLTVcIj5oaXN0b3J5PC9zcGFuPlxyXG4gIDxtYXQtbWVudSAjbWVudUhpc3Rvcnk9XCJtYXRNZW51XCIgY2xhc3M9XCJhY3Rpb24tbWVudVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGlzdG9yeSBvZiBoaXN0b3J5TGlzdFwiIFtuZ1N3aXRjaF09XCJoaXN0b3J5LnR5cGVcIj5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQnLCAnL3B1cmNoYXNlLW9yZGVycy8nICsgaGlzdG9yeS5pZClcIiAqbmdTd2l0Y2hDYXNlPVwiJ1BST0RVQ1QnXCJcclxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj50aGVhdGVyczwvc3Bhbj5cclxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLlBST0RVQ1QnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyB9fXt7aGlzdG9yeS50eXBlfX0ge3toaXN0b3J5LnJlZn19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvcHVyY2hhc2Utb3JkZXJzLycgKyBoaXN0b3J5LmlkKVwiICpuZ1N3aXRjaENhc2U9XCInUE8nXCJcclxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5yZWNlaXB0X2xvbmc8L3NwYW4+XHJcbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5QTycgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nICB9fSB7e2hpc3RvcnkucmVmfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdjb21tZXJjaWFsJywgJy9kZWFsL2NvbnN1bHQvJyArIGhpc3RvcnkuaWQpXCIgKm5nU3dpdGNoQ2FzZT1cIidERUFMJ1wiXHJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+bG9jYWxfb2ZmZXI8L3NwYW4+XHJcbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgIH19IHt7aGlzdG9yeS5yZWZ9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL3dvcmstcmVjb3JkL2NvbnN1bHQvJysgaGlzdG9yeS5pZCArJy9nZW5lcmFsJylcIiAqbmdTd2l0Y2hDYXNlPVwiJ1dPUksnXCJcclxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj50aGVhdGVyczwvc3Bhbj5cclxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLldPUksnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyB9fSB7e2hpc3RvcnkucmVmfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdsZWdhbCcsICcvY29udHJhY3RzL2NvbnRyYWN0LWFjcS9jb25zdWx0LycgKyBoaXN0b3J5LmlkKVwiXHJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidDT05UUkFDVF9BQ1EnXCJcclxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5hc3NpZ25tZW50PC9zcGFuPlxyXG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuQ09OVFJBQ1QtQUNRJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgIH19IHt7aGlzdG9yeS5yZWZ9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jb250cmFjdHMvY29udHJhY3QtY2Vzcy9jb25zdWx0LycgKyBoaXN0b3J5LmlkKVwiXHJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidDT05UUkFDVF9DRVNTJ1wiXHJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+YXJ0aWNsZTwvc3Bhbj5cclxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkNPTlRSQUNULUNFU1MnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyAgfX0ge3toaXN0b3J5LnJlZn19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvYnVkZ2V0L2Zvcm0vJyArIGhpc3RvcnkuaWQpXCIgKm5nU3dpdGNoQ2FzZT1cIidCVURHRVQnXCJcclxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5wYXltZW50czwvc3Bhbj5cclxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkJVREdFVCcgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nICB9fSB7e2hpc3RvcnkucmVmfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKm5nU3dpdGNoQ2FzZT1cIidOT19ISVNUT1JZX0FWQUlMQUJMRSdcIiBtYXQtbWVudS1pdGVtPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5ub3RfaW50ZXJlc3RlZDwvc3Bhbj5cclxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLk5PX0hJU1RPUllfQVZBSUxBQkxFJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9tYXQtbWVudT5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImdsb2JhbC1zZWFyY2ggZC1mbGV4IG1heC13aWR0aC02MFwiPlxyXG4gICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBnbG9iYWwtc2VhcmNoLWljb24gaGVhZGVyLWljb25cIj5zZWFyY2g8L2k+XHJcbiAgICA8c3BhbiBjbGFzcz1cImdsb2JhbC1zZWFyY2gtc2VwYXJhdG9yXCI+PC9zcGFuPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF4LXdpZHRoLTEwMFwiIGZsb2F0TGFiZWw9XCJuZXZlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFNlYXJjaFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1NlYXJjaFwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiZ2xvYmFsLXNlYXJjaC1pbnB1dCBtYXgtd2lkdGgtODVcIlxyXG4gICAgICAgICAgICAgICBpZD1cInNlYXJjaC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwic2VhcmNoIC4uLlwiLz5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZShudWxsLCAnL2FkdmFuY2VkLXNlYXJjaCcpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGFkdmFuY2VkLWJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBpY29uXCI+Zmxhc2hfb248L3NwYW4+XHJcbiAgICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILkFEVkFOQ0VEJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0b1NlYXJjaD1cIm1hdEF1dG9jb21wbGV0ZVwiIGNsYXNzPVwibWF0LWF1dG9jb21wbGV0ZS1nbG9iYWwtc2VhcmNoXCIgcGFuZWxXaWR0aD1cIjU2dndcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIChvblNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQsIGRvYylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRvYyBvZiBkb2N1bWVudHMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtb3B0aW9uLWdsb2JhbC1zZWFyY2hcIj5cclxuICAgICAgICAgICAgPCEtLVBVUkNIQVNFX09SREVSLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5QVVJDSEFTRV9PUkRFUlwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+cmVjZWlwdF9sb25nPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC03MFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5QVVJDSEFTRV9PUkRFUicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5wb051bWJlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgIC0ge3sgZG9jLnRvdGFsQW1vdW50IHwgY3VycmVuY3k6IGRvYy5jdXJyZW5jeUNvZGU6J3N5bWJvbCc6dW5kZWZpbmVkOidmci1GUid9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQkFTS0VUX05VTUJFUicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYz8uYmFza2V0TnVtYmVyID8gZG9jLmJhc2tldE51bWJlciA6ICctJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uRUFOJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jPy5lYW4gPyBkb2MuZWFuIDogJy0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tUFJPRFVDVC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuUFJPRFVDVFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+bW92aWU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGxpcHNpcyBkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTYwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlBST0RVQ1QnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5TVVBQT1JUJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tkb2Muc3VwcG9ydFtsYWJlbExhbmddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkVBTicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5lYW4gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlJFTEVBU0VfREFURScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYz8ucmVsZWFzZURhdGUgPyBkb2MucmVsZWFzZURhdGUgOiAnLScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS1XT1JLLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5XT1JLX1ZFUlNJT05cIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnRoZWF0ZXJzPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC03NSBlbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5XT1JLJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy50aXRsZSB9fSAoe3tkb2MuY29kZUlzb319KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uTUlMT19DT0RFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tkb2MubWlsb0NvZGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFJPRFVDVElPTl9ZRUFSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLnllYXJPZlByb2R1Y3Rpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHNwYW4gY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+PC9zcGFuPlxyXG4gIDxkaXYgKm5nSWY9XCJ1c2VyICYmIHVzZXIuc2Vjb25kYXJ5XCIgY2xhc3M9XCJjb25uZWN0ZWQtYXMgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweFwiPlxyXG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkNPTk5FQ1RFRF9BUycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX0gIHt7dXNlci5sb2dpbiArICcgLSAnICsgdXNlci5maXJzdE5hbWUgKyAnICcgKyB1c2VyLm5hbWUgfX1cclxuICAgICAgPC9zcGFuPlxyXG5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cInN0b3BJZGVudGl0eVRoZWZ0KClcIiAqbmdJZj1cInVzZXIuc2Vjb25kYXJ5XCIgY29sb3I9XCJ3YXJuXCIgbWF0LXJhaXNlZC1idXR0b24+XHJcbiAgICAgIHt7ICdDT1JFLlNUT1AnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8c3BhbiBjbGFzcz1cImhlYWRlci1zZXBhcmF0b3JcIj48L3NwYW4+XHJcblxyXG4gIDxzcGFuIFttYXRNZW51VHJpZ2dlckZvcl09XCJzZXR0aW5nc1wiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgaGVhZGVyLWljb24gbWF4LXdpZHRoLTVcIj5zZXR0aW5nczwvc3Bhbj5cclxuXHJcbiAgPCEtLSAjZW5kZG9jcmVnaW9uIG1hdC1tZW51LXRyaWdnZXItZm9yIC0tPlxyXG4gIDxtYXQtbWVudSAjc2V0dGluZ3M9XCJtYXRNZW51XCIgY2xhc3M9XCJhY3Rpb24tbWVudVwiPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic3dpdGNoVGhlbWUoKVwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1lbnUtaWNvbiBtYXQtaWNvblwiPnRvZ2dsZV9vbjwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuPnt7J0NPTU1PTi5IRUFERVIuUEFSQU1FVEVSUy5USEVNRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmd9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPSdzd2l0Y2hMYW5nKFwiZW5cIiknICpuZ0lmPSdsYW5nICE9PSBcImVuXCInIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ltZy9mbGFnL2VuLWZsYWcucG5nXCI+XHJcbiAgICAgIHt7ICdDT01NT04uSEVBREVSLlBBUkFNRVRFUlMuVElUTEUuTEFOR1VBR0VTLkVOR0xJU0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKGNsaWNrKT0nc3dpdGNoTGFuZyhcImZyXCIpJyAqbmdJZj0nbGFuZyAhPT0gXCJmclwiJyBtYXQtbWVudS1pdGVtPlxyXG4gICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWcvZmxhZy9mci1mbGFnLnBuZ1wiPlxyXG4gICAgICB7eyAnQ09NTU9OLkhFQURFUi5QQVJBTUVURVJTLlRJVExFLkxBTkdVQUdFUy5GUkVOQ0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKGNsaWNrKT0nc3dpdGNoTGFuZyhcImRlXCIpJyAqbmdJZj0nbGFuZyAhPT0gXCJkZVwiICcgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1nL2ZsYWcvZGUtZmxhZy5wbmdcIj5cclxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuUEFSQU1FVEVSUy5USVRMRS5MQU5HVUFHRVMuREVVVENIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9tYXQtbWVudT5cclxuPC9tYXQtdG9vbGJhcj5cclxuXHJcbiJdfQ==
|