@rededor/site-front-end-lib 1.3.49 → 1.3.51
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 +114 -114
- package/esm2022/lib/components/algolia-dropdown/algolia-dropdown.component.mjs +3 -3
- package/esm2022/lib/components/banner/content-banner/content-banner.component.mjs +3 -3
- package/esm2022/lib/components/breadcrumbs/breadcrumbs.component.mjs +3 -3
- package/esm2022/lib/components/cards/card-unidade-planos-convenios/card-unidade-planos-convenios.component.mjs +3 -3
- package/esm2022/lib/components/cards/expandable-card/expandable-card.component.mjs +3 -3
- package/esm2022/lib/components/cards/testimonial-card/testimonial-card.component.mjs +3 -3
- package/esm2022/lib/components/carousels/testimonials-carousel/testimonials-carousel.component.mjs +3 -3
- package/esm2022/lib/components/cta-wrapper/cta-wrapper.component.mjs +3 -3
- package/esm2022/lib/components/error/error-service/error.service.mjs +1 -1
- package/esm2022/lib/components/error/error.component.mjs +3 -3
- package/esm2022/lib/components/filter-letter-and-terms/filter-letter-and-terms.component.mjs +3 -3
- package/esm2022/lib/components/filters/filter-generic/filter-generic.component.mjs +82 -121
- package/esm2022/lib/components/filters/filter-planos-convenios/filter-planos-convenios.component.mjs +3 -3
- package/esm2022/lib/components/footer/footer.component.mjs +3 -3
- package/esm2022/lib/components/footer/helpers/footerTheme.func.mjs +1 -1
- package/esm2022/lib/components/footer/models/FooterTheme.model.mjs +1 -1
- package/esm2022/lib/components/header/components/header-action-menu/header-action-menu.component.mjs +3 -3
- package/esm2022/lib/components/header/components/header-aux-menu/header-aux-menu.component.mjs +3 -3
- package/esm2022/lib/components/header/components/header-aux-menu-container/header-aux-menu-container.component.mjs +3 -3
- package/esm2022/lib/components/header/components/header-aux-menu-item/header-aux-menu-item.component.mjs +3 -3
- package/esm2022/lib/components/header/components/header-aux-menu-item-dropdown/header-aux-menu-item-dropdown.component.mjs +3 -3
- package/esm2022/lib/components/header/components/header-logo/header-logo.component.mjs +3 -3
- package/esm2022/lib/components/header/components/header-main-menu/header-main-menu.component.mjs +3 -3
- package/esm2022/lib/components/header/components/header-main-menu-item/header-main-menu-item.component.mjs +3 -3
- package/esm2022/lib/components/header/components/header-main-menu-item-dropdown/header-main-menu-item-dropdown.component.mjs +3 -3
- package/esm2022/lib/components/header/components/header-side-menu/header-side-menu.component.mjs +3 -3
- package/esm2022/lib/components/header/components/header-side-menu-item/header-side-menu-item.component.mjs +3 -3
- package/esm2022/lib/components/header/header.component.mjs +3 -3
- package/esm2022/lib/components/header/helpers/headerTheme.func.mjs +1 -1
- package/esm2022/lib/components/header/models/HeaderTheme.model.mjs +1 -1
- package/esm2022/lib/components/header/services/header.service.mjs +1 -1
- package/esm2022/lib/components/image/image.component.mjs +3 -3
- package/esm2022/lib/components/index.mjs +1 -1
- package/esm2022/lib/components/load-screen/load-screen.component.mjs +3 -3
- package/esm2022/lib/components/overlay/overlay.component.mjs +3 -3
- package/esm2022/lib/components/page-header/page-header.component.mjs +3 -3
- package/esm2022/lib/components/page-template-fullcontent/page-template-fullcontent.component.mjs +3 -3
- package/esm2022/lib/components/page-template-sidebar/page-template-sidebar.component.mjs +3 -3
- package/esm2022/lib/components/pagination/pagination.component.mjs +3 -3
- package/esm2022/lib/components/search/search.component.mjs +3 -3
- package/esm2022/lib/components/section-navigation/section-navigation.component.mjs +3 -3
- package/esm2022/lib/components/side-ctas/components/side-ctas-bottom/side-ctas-bottom.component.mjs +3 -3
- package/esm2022/lib/components/side-ctas/components/side-ctas-right-bottom/side-ctas-right-bottom.component.mjs +3 -3
- package/esm2022/lib/components/side-ctas/components/side-ctas-right-middle/side-ctas-right-middle.component.mjs +3 -3
- package/esm2022/lib/components/side-ctas/components/side-ctas-right-top/side-ctas-right-top.component.mjs +3 -3
- package/esm2022/lib/components/side-ctas/models/SideCta.model.mjs +1 -1
- package/esm2022/lib/components/side-ctas/side-ctas.component.mjs +3 -3
- package/esm2022/lib/components/sidebar-navigation/sidebar-navigation.component.mjs +3 -3
- package/esm2022/lib/components/sticky-navigation/sticky-navigation.component.mjs +3 -3
- package/esm2022/lib/components/whatsapp/whatsapp.component.mjs +3 -3
- package/esm2022/lib/directives/index.mjs +1 -1
- package/esm2022/lib/directives/rdsite-click-outside/rdsite-click-outside.directive.mjs +1 -1
- package/esm2022/lib/directives/rdsite-link/rdsite-link.directive.mjs +1 -1
- package/esm2022/lib/directives/rdsite-phone-modal/rdsite-phone-modal.directive.mjs +1 -1
- package/esm2022/lib/enums/EnumDoencaTaxonomy.enum.mjs +1 -1
- package/esm2022/lib/enums/EnumError.enum.mjs +1 -1
- package/esm2022/lib/enums/EnumThemes.enum.mjs +1 -1
- package/esm2022/lib/enums/Estados.enum.mjs +1 -1
- package/esm2022/lib/enums/Filter.enum.mjs +1 -1
- package/esm2022/lib/enums/IconCuraDefaultType.enum.mjs +1 -1
- package/esm2022/lib/enums/ImageMimeType.enum.mjs +1 -1
- package/esm2022/lib/enums/RdsiteModalComponentStyle.enum.mjs +1 -1
- package/esm2022/lib/enums/UnidadeCoverageType.enum.mjs +1 -1
- package/esm2022/lib/enums/index.mjs +1 -1
- package/esm2022/lib/helpers/check-safari-agent.func.mjs +1 -1
- package/esm2022/lib/helpers/formatPhone.func.mjs +1 -1
- package/esm2022/lib/helpers/getCircularReplacer.func.mjs +1 -1
- package/esm2022/lib/helpers/getSiteUrl.func.mjs +1 -1
- package/esm2022/lib/helpers/index.mjs +1 -1
- package/esm2022/lib/helpers/mediaQueries.mjs +1 -1
- package/esm2022/lib/helpers/removeDuplicateObjectsFromArray.func.mjs +1 -1
- package/esm2022/lib/helpers/removeDuplicateValuesFromArray.func.mjs +1 -1
- package/esm2022/lib/helpers/removeHtmlTags.func.mjs +1 -1
- package/esm2022/lib/helpers/toQueryParams.func.mjs +1 -1
- package/esm2022/lib/interceptors/error.interceptor.mjs +4 -2
- package/esm2022/lib/interceptors/index.mjs +1 -1
- package/esm2022/lib/interceptors/log.interceptor.mjs +6 -3
- package/esm2022/lib/models/algolia-search-api.model.mjs +1 -1
- package/esm2022/lib/models/breadcrumbs/breadcrumbs-items.model.mjs +1 -1
- package/esm2022/lib/models/breadcrumbs/breadcrumbs-json-item.model.mjs +1 -1
- package/esm2022/lib/models/centro-estudos-backend.model.mjs +1 -1
- package/esm2022/lib/models/centro-medico.model.mjs +1 -1
- package/esm2022/lib/models/content-banner.model.mjs +1 -1
- package/esm2022/lib/models/cta-wrapper.model.mjs +1 -1
- package/esm2022/lib/models/doenca-backend.model.mjs +1 -1
- package/esm2022/lib/models/doenca-taxonomy.model.mjs +1 -1
- package/esm2022/lib/models/especialidade-backend.model.mjs +1 -1
- package/esm2022/lib/models/exame-backend.model.mjs +1 -1
- package/esm2022/lib/models/filters/filter-planos-convenios.model.mjs +1 -1
- package/esm2022/lib/models/filters/filter-section.type.mjs +1 -1
- package/esm2022/lib/models/filters/filter-sections.model.mjs +1 -1
- package/esm2022/lib/models/images/rdsite-image.model.mjs +1 -1
- package/esm2022/lib/models/medico-cv.model.mjs +1 -1
- package/esm2022/lib/models/menu-de-unidade.model.mjs +1 -1
- package/esm2022/lib/models/menu-item.model.mjs +1 -1
- package/esm2022/lib/models/privacy-tools/privacy-tools.model.mjs +1 -1
- package/esm2022/lib/models/rdsl-cobertura.model.mjs +1 -1
- package/esm2022/lib/models/rdsl-convenio.model.mjs +1 -1
- package/esm2022/lib/models/rdsl-especialidade.model.mjs +1 -1
- package/esm2022/lib/models/rdsl-planos.model.mjs +1 -1
- package/esm2022/lib/models/rdsl-post-category.model.mjs +1 -1
- package/esm2022/lib/models/rdsl-unidade.model.mjs +1 -1
- package/esm2022/lib/models/section-navigation.model.mjs +1 -1
- package/esm2022/lib/models/seo/seo-data.model.mjs +1 -1
- package/esm2022/lib/models/seo/seo-unidade.model.mjs +1 -1
- package/esm2022/lib/models/social-meta-properties.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/WpResponse.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/category/wpCategory.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/general/content.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/general/excerpt.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/general/featuredMedia.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/general/guid.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/general/index.mjs +1 -1
- package/esm2022/lib/models/wordpress/general/links.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/general/meta.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/general/title.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/general/yoastData.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/general/yoastHeadJson.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/general/yoastMeta.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/page/page.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/post/post.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/unidade/wp-unidade-onco.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/unidade/wp-unidade-site-detalhe.model.mjs +1 -1
- package/esm2022/lib/models/wordpress/unidade/wp-unidade-site.model.mjs +1 -1
- package/esm2022/lib/pipes/index.mjs +1 -1
- package/esm2022/lib/pipes/phone/phone.pipe.mjs +1 -1
- package/esm2022/lib/services/algolia/algolia.service.mjs +1 -1
- package/esm2022/lib/services/algolia-search-api/algolia-search-api.service.mjs +1 -1
- package/esm2022/lib/services/cura/cura.service.mjs +1 -1
- package/esm2022/lib/services/geoloc/geoloc.service.mjs +1 -1
- package/esm2022/lib/services/http-client/http-client.service.mjs +1 -1
- package/esm2022/lib/services/index.mjs +1 -1
- package/esm2022/lib/services/log/log.service.mjs +1 -1
- package/esm2022/lib/services/mapbox/mapbox.service.mjs +1 -1
- package/esm2022/lib/services/modal/modal.service.mjs +1 -1
- package/esm2022/lib/services/modal-drawer/modal-drawer.service.mjs +1 -1
- package/esm2022/lib/services/ngu-carousel/ngu-carousel.service.mjs +1 -1
- package/esm2022/lib/services/phone/phone.service.mjs +1 -1
- package/esm2022/lib/services/privacy-tools/privacy-tools.service.mjs +1 -1
- package/esm2022/lib/services/seo/seo.service.mjs +1 -1
- package/esm2022/lib/services/server-response/server-response.service.mjs +1 -1
- package/esm2022/lib/services/site-back-end/site-back-end.service.mjs +1 -1
- package/esm2022/lib/services/ssr-loading/ssr-loading.service.mjs +1 -1
- package/esm2022/lib/services/transfer-state/transfer-state.service.mjs +1 -1
- package/esm2022/lib/services/youtube/youtube.service.mjs +1 -1
- package/esm2022/lib/tokens/CuraApi.mjs +1 -1
- package/esm2022/lib/tokens/LibConfig.mjs +1 -1
- package/esm2022/lib/tokens/express.tokens.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/rededor-site-front-end-lib.mjs +169 -203
- package/fesm2022/rededor-site-front-end-lib.mjs.map +1 -1
- package/lib/components/filters/filter-generic/filter-generic.component.d.ts +40 -30
- package/lib/models/filters/filter-sections.model.d.ts +1 -0
- package/package.json +1 -1
- package/styles/_breakpoints.scss +5 -5
|
@@ -1,84 +1,99 @@
|
|
|
1
1
|
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
|
2
|
-
import { Component,
|
|
2
|
+
import { ChangeDetectorRef, Component, HostBinding, PLATFORM_ID, input, model, output, inject, computed, signal, CUSTOM_ELEMENTS_SCHEMA, } from '@angular/core';
|
|
3
3
|
import { ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { CuraService } from '../../../services';
|
|
4
5
|
import { MediaQueries } from '../../../helpers/mediaQueries';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "
|
|
7
|
-
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i1 from "@angular/common";
|
|
8
8
|
export class FilterGenericComponent {
|
|
9
|
-
constructor(
|
|
10
|
-
this.
|
|
11
|
-
this.cdr =
|
|
12
|
-
this.platformId =
|
|
13
|
-
this.filterChange =
|
|
14
|
-
this.closeModal =
|
|
15
|
-
this.openMobileFilter =
|
|
16
|
-
this.withContainerStyle = true;
|
|
17
|
-
this.showClearButton = true;
|
|
18
|
-
this.showApplyButton = true;
|
|
19
|
-
this.showCloseButton = false;
|
|
20
|
-
this.
|
|
21
|
-
this.showBadge = true;
|
|
22
|
-
this.showToggleIcon = true;
|
|
23
|
-
this.isFilterOpen = true;
|
|
24
|
-
this.mobileBehavior = false;
|
|
25
|
-
this.forceCollapsed = false;
|
|
26
|
-
this.emitOnReset = false;
|
|
27
|
-
this.textTitle = 'Filtrar por';
|
|
28
|
-
this.sections = [];
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
9
|
+
constructor() {
|
|
10
|
+
this.curaApiService = inject(CuraService);
|
|
11
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
12
|
+
this.platformId = inject(PLATFORM_ID);
|
|
13
|
+
this.filterChange = output();
|
|
14
|
+
this.closeModal = output();
|
|
15
|
+
this.openMobileFilter = output();
|
|
16
|
+
this.withContainerStyle = input(true);
|
|
17
|
+
this.showClearButton = input(true);
|
|
18
|
+
this.showApplyButton = input(true);
|
|
19
|
+
this.showCloseButton = input(false);
|
|
20
|
+
this.disableButtons = input(false);
|
|
21
|
+
this.showBadge = input(true);
|
|
22
|
+
this.showToggleIcon = input(true);
|
|
23
|
+
this.isFilterOpen = model(true);
|
|
24
|
+
this.mobileBehavior = input(false);
|
|
25
|
+
this.forceCollapsed = input(false);
|
|
26
|
+
this.emitOnReset = input(false);
|
|
27
|
+
this.textTitle = input('Filtrar por');
|
|
28
|
+
this.sections = input([]);
|
|
29
|
+
this.windowWidth = signal(0);
|
|
30
|
+
this.selectedFiltersCount = computed(() => {
|
|
31
|
+
return this.sections().reduce((count, section) => {
|
|
32
|
+
if ((section.type !== 'custom' && !section.config?.control) || (section.type === 'custom' && !section.config?.count))
|
|
33
|
+
return count;
|
|
34
|
+
const value = section.config.control?.value || null;
|
|
35
|
+
switch (section.type) {
|
|
36
|
+
case 'checkbox-group':
|
|
37
|
+
return count + (Array.isArray(value) ? value.filter((item) => item?.checked).length : 0);
|
|
38
|
+
case 'radio-group':
|
|
39
|
+
return count + (value?.value ? 1 : 0);
|
|
40
|
+
case 'custom':
|
|
41
|
+
return count + (section.config.count || 0);
|
|
42
|
+
default:
|
|
43
|
+
return count + (value ? 1 : 0);
|
|
44
|
+
}
|
|
45
|
+
}, 0);
|
|
46
|
+
});
|
|
31
47
|
this.styleBinding = {
|
|
32
|
-
'--font-family': this.
|
|
33
|
-
'--neutral-opacity-black': this.
|
|
34
|
-
'--neutral-dark': this.
|
|
35
|
-
'--neutral-darker': this.
|
|
36
|
-
'--neutral-medium': this.
|
|
37
|
-
'--neutral-light': this.
|
|
38
|
-
'--neutral-lighter': this.
|
|
39
|
-
'--neutral-purewhite': this.
|
|
40
|
-
'--primary-base': this.
|
|
41
|
-
'--primary-lighter': this.
|
|
48
|
+
'--font-family': this.curaApiService.getFontFamily(''),
|
|
49
|
+
'--neutral-opacity-black': this.curaApiService.getColor('neutral-black', 0.2),
|
|
50
|
+
'--neutral-dark': this.curaApiService.getColor('neutral-dark'),
|
|
51
|
+
'--neutral-darker': this.curaApiService.getColor('neutral-darker'),
|
|
52
|
+
'--neutral-medium': this.curaApiService.getColor('neutral-medium'),
|
|
53
|
+
'--neutral-light': this.curaApiService.getColor('neutral-light'),
|
|
54
|
+
'--neutral-lighter': this.curaApiService.getColor('neutral-lighter'),
|
|
55
|
+
'--neutral-purewhite': this.curaApiService.getColor('neutral-purewhite'),
|
|
56
|
+
'--primary-base': this.curaApiService.getColor('primary-base'),
|
|
57
|
+
'--primary-lighter': this.curaApiService.getColor('primary-lighter'),
|
|
42
58
|
};
|
|
59
|
+
this.isMobile = computed(() => {
|
|
60
|
+
return this.windowWidth() <= MediaQueries.smallBreakpoint;
|
|
61
|
+
});
|
|
43
62
|
}
|
|
44
63
|
ngOnInit() {
|
|
45
64
|
if (isPlatformBrowser(this.platformId)) {
|
|
46
|
-
this.windowWidth
|
|
65
|
+
this.windowWidth.set(window.innerWidth);
|
|
47
66
|
}
|
|
48
|
-
if (this.forceCollapsed && this.isMobile()) {
|
|
49
|
-
this.isFilterOpen
|
|
67
|
+
if (this.forceCollapsed() && this.isMobile()) {
|
|
68
|
+
this.isFilterOpen.set(false);
|
|
50
69
|
}
|
|
51
70
|
}
|
|
52
71
|
handleInputChange(event, control) {
|
|
53
|
-
control.setValue(event.
|
|
54
|
-
this.updateSelectedFiltersCount();
|
|
72
|
+
control.setValue(event.target.value);
|
|
55
73
|
}
|
|
56
74
|
handleSelectChange(event, control) {
|
|
57
|
-
if (event
|
|
58
|
-
control.setValue(event.
|
|
59
|
-
this.updateSelectedFiltersCount();
|
|
75
|
+
if (event !== undefined) {
|
|
76
|
+
control.setValue(event.target.value);
|
|
60
77
|
}
|
|
61
78
|
}
|
|
62
79
|
handleCheckboxChange(event, options) {
|
|
63
|
-
const changedOption = options.find((opt) => opt.value === event.
|
|
80
|
+
const changedOption = options.find((opt) => opt.value === event.target.value);
|
|
64
81
|
if (changedOption)
|
|
65
|
-
changedOption.checked = event.
|
|
82
|
+
changedOption.checked = event.target.checked;
|
|
66
83
|
this.updateCheckboxGroup(options);
|
|
67
|
-
this.updateSelectedFiltersCount();
|
|
68
84
|
}
|
|
69
85
|
handleRadioChange(event, control) {
|
|
70
|
-
const selectedValue = event.
|
|
86
|
+
const selectedValue = event.target.value;
|
|
71
87
|
control.setValue(control.value?.value === selectedValue ? null : { value: selectedValue });
|
|
72
88
|
}
|
|
73
89
|
filter() {
|
|
74
90
|
this.emitFilterChange('filter');
|
|
75
|
-
if (this.mobileBehavior || this.showCloseButton)
|
|
91
|
+
if (this.mobileBehavior() || this.showCloseButton())
|
|
76
92
|
this.close();
|
|
77
93
|
}
|
|
78
94
|
reset() {
|
|
79
95
|
this.resetAllControls();
|
|
80
|
-
this.
|
|
81
|
-
if (this.emitOnReset) {
|
|
96
|
+
if (this.emitOnReset()) {
|
|
82
97
|
this.emitFilterChange('reset');
|
|
83
98
|
this.close();
|
|
84
99
|
}
|
|
@@ -87,20 +102,16 @@ export class FilterGenericComponent {
|
|
|
87
102
|
this.closeModal.emit(true);
|
|
88
103
|
}
|
|
89
104
|
toggleFilter() {
|
|
90
|
-
if (this.mobileBehavior && this.isMobile()) {
|
|
91
|
-
this.openMobileFilter.emit();
|
|
105
|
+
if (this.mobileBehavior() && this.isMobile()) {
|
|
106
|
+
this.openMobileFilter.emit(undefined);
|
|
92
107
|
}
|
|
93
108
|
else {
|
|
94
|
-
this.isFilterOpen
|
|
109
|
+
this.isFilterOpen.set(!this.isFilterOpen());
|
|
95
110
|
}
|
|
96
111
|
this.cdr.detectChanges();
|
|
97
112
|
}
|
|
98
113
|
hasSelection() {
|
|
99
|
-
this.
|
|
100
|
-
return this.selectedFiltersCount > 0;
|
|
101
|
-
}
|
|
102
|
-
isMobile() {
|
|
103
|
-
return this.windowWidth <= MediaQueries.smallBreakpoint;
|
|
114
|
+
return this.selectedFiltersCount() > 0;
|
|
104
115
|
}
|
|
105
116
|
getRadioGroupValue(control) {
|
|
106
117
|
const value = control?.value;
|
|
@@ -120,7 +131,7 @@ export class FilterGenericComponent {
|
|
|
120
131
|
return this.hasScroll(section) ? 'scrollable' : '';
|
|
121
132
|
}
|
|
122
133
|
shouldHandleMobileClick() {
|
|
123
|
-
return this.mobileBehavior && this.isMobile() && this.forceCollapsed;
|
|
134
|
+
return this.mobileBehavior() && this.isMobile() && this.forceCollapsed();
|
|
124
135
|
}
|
|
125
136
|
handleMobileClick() {
|
|
126
137
|
if (this.shouldHandleMobileClick()) {
|
|
@@ -131,33 +142,18 @@ export class FilterGenericComponent {
|
|
|
131
142
|
const filterData = this.buildFilterData();
|
|
132
143
|
const isEmpty = this.isFilterDataEmpty(filterData);
|
|
133
144
|
this.filterChange.emit({
|
|
134
|
-
data: this.emitOnReset || !isEmpty ? filterData : null,
|
|
145
|
+
data: this.emitOnReset() || !isEmpty ? filterData : null,
|
|
135
146
|
action: action,
|
|
136
147
|
});
|
|
137
148
|
}
|
|
138
|
-
updateSelectedFiltersCount() {
|
|
139
|
-
this.selectedFiltersCount = this.sections.reduce((count, section) => {
|
|
140
|
-
if (!section.config?.control)
|
|
141
|
-
return count;
|
|
142
|
-
const value = section.config.control.value;
|
|
143
|
-
switch (section.type) {
|
|
144
|
-
case 'checkbox-group':
|
|
145
|
-
return count + (Array.isArray(value) ? value.filter((item) => item?.checked).length : 0);
|
|
146
|
-
case 'radio-group':
|
|
147
|
-
return count + (value?.value ? 1 : 0);
|
|
148
|
-
default:
|
|
149
|
-
return count + (value ? 1 : 0);
|
|
150
|
-
}
|
|
151
|
-
}, 0);
|
|
152
|
-
}
|
|
153
149
|
resetAllControls() {
|
|
154
|
-
this.sections.forEach((section) => {
|
|
150
|
+
this.sections().forEach((section) => {
|
|
155
151
|
if (!section.config?.control)
|
|
156
152
|
return;
|
|
157
153
|
if (section.type === 'checkbox-group') {
|
|
158
|
-
const resetOptions = section
|
|
159
|
-
section.config.options = resetOptions;
|
|
160
|
-
section.config.control.setValue(resetOptions
|
|
154
|
+
const resetOptions = section?.config?.options?.map((option) => ({ ...option, checked: false })) || [];
|
|
155
|
+
section.config.options = [...resetOptions];
|
|
156
|
+
section.config.control.setValue([...resetOptions]);
|
|
161
157
|
}
|
|
162
158
|
else {
|
|
163
159
|
section.config.control.reset('', { emitEvent: false });
|
|
@@ -165,7 +161,7 @@ export class FilterGenericComponent {
|
|
|
165
161
|
});
|
|
166
162
|
}
|
|
167
163
|
updateCheckboxGroup(options) {
|
|
168
|
-
this.sections
|
|
164
|
+
this.sections()
|
|
169
165
|
.filter((section) => section.type === 'checkbox-group')
|
|
170
166
|
.forEach((section) => {
|
|
171
167
|
section.config.options = [...options];
|
|
@@ -178,7 +174,7 @@ export class FilterGenericComponent {
|
|
|
178
174
|
estado: '',
|
|
179
175
|
cobertura: [],
|
|
180
176
|
};
|
|
181
|
-
this.sections.forEach((section) => {
|
|
177
|
+
this.sections().forEach((section) => {
|
|
182
178
|
if (!section.config?.control)
|
|
183
179
|
return;
|
|
184
180
|
const value = section.config.control.value;
|
|
@@ -199,49 +195,14 @@ export class FilterGenericComponent {
|
|
|
199
195
|
isFilterDataEmpty(filterData) {
|
|
200
196
|
return Object.values(filterData).every((val) => val === null || val === '' || (Array.isArray(val) && val.length === 0));
|
|
201
197
|
}
|
|
202
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterGenericComponent, deps: [
|
|
203
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FilterGenericComponent, isStandalone: true, selector: "rdsite-filter-generic", inputs: { withContainerStyle: "withContainerStyle", showClearButton: "showClearButton", showApplyButton: "showApplyButton", showCloseButton: "showCloseButton", disableButtonsWithoutSelection: "disableButtonsWithoutSelection", showBadge: "showBadge", showToggleIcon: "showToggleIcon", isFilterOpen: "isFilterOpen", mobileBehavior: "mobileBehavior", forceCollapsed: "forceCollapsed", emitOnReset: "emitOnReset", textTitle: "textTitle", sections: "sections" }, outputs: { filterChange: "filterChange", closeModal: "closeModal", openMobileFilter: "openMobileFilter" }, host: { properties: { "style": "this.styleBinding" } }, ngImport: i0, template: "<div\n class=\"filter-generic\"\n [ngClass]=\"{ 'container-style': withContainerStyle, 'clickable-mobile': shouldHandleMobileClick() }\"\n aria-label=\"Filtros\"\n (click)=\"handleMobileClick()\"\n>\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen, hidden: !isFilterOpen }\">\n <div class=\"filter-title-wrapper\">\n <cura-label size=\"medium\" level=\"4\" color=\"neutral-black\" weight=\"regular\" margin-block=\"0\" line-height=\"16px\">\n {{ textTitle }}\n </cura-label>\n\n @if (showBadge) {\n <cura-badge-counter\n [type]=\"'solid'\"\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\n [number]=\"selectedFiltersCount\"\n class=\"filter-badge\"\n ></cura-badge-counter>\n }\n </div>\n\n @if (showToggleIcon) {\n <cura-button-transparent size=\"small\" font-color=\"dark\" color=\"primary\" text-align=\"center\" (click)=\"toggleFilter()\" [attr.aria-expanded]=\"isFilterOpen\">\n <cura-icon [name]=\"isFilterOpen ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\n </cura-button-transparent>\n }\n </div>\n\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\n @for (section of sections; track section.type) {\n @if (section.visible !== false) {\n <div class=\"filter-section\">\n @switch (section.type) {\n @case ('input') {\n <cura-input-text\n [placeholder]=\"section.config.placeholder || ''\"\n [name]=\"section.config.name || ''\"\n [iconName]=\"section.config.iconName || ''\"\n [attr.value]=\"section.config.control.value\"\n (valueChange)=\"handleInputChange($event, section.config.control)\"\n ></cura-input-text>\n }\n @case ('select') {\n <cura-select\n [label]=\"section.config.label || ''\"\n [placeholder]=\"section.config.placeholder || ''\"\n [attr.value]=\"section.config.control.value\"\n (selected)=\"handleSelectChange($event, section.config.control)\"\n >\n @if (section.config.includeDefaultOption) {\n <cura-select-option [attr.value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\n }\n @for (option of section.config.options || []; track option?.value) {\n <cura-select-option [attr.value]=\"option?.value\">{{ option?.label }}</cura-select-option>\n }\n </cura-select>\n }\n @case ('checkbox-group') {\n @if (section.config.title) {\n <div class=\"filter-header\">\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\n <cura-heading size=\"xsmall\" level=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\n {{ section.config.title }}\n </cura-heading>\n </div>\n }\n @if (section.config.subtitle) {\n <div class=\"filter-subtitle\">\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\">\n {{ section.config.subtitle }}\n </cura-heading>\n </div>\n }\n\n @if (section.config.description) {\n <div class=\"filter-description\">\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\n {{ section.config.description }}\n </cura-paragraph>\n </div>\n }\n\n <div class=\"filter-checkboxes\" [class.scrollable]=\"hasScroll(section)\">\n @for (option of section.config.options || []; track option?.value) {\n <cura-checkbox\n color=\"primary\"\n size=\"small\"\n icon-color=\"light\"\n [attr.name]=\"option?.label\"\n [attr.label]=\"option?.label\"\n [attr.value]=\"option?.value\"\n [attr.checked]=\"option?.checked\"\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\n ></cura-checkbox>\n }\n </div>\n }\n @case ('radio-group') {\n <div class=\"filter-radios\" [class.scrollable]=\"hasScroll(section)\">\n @for (option of section.config.options || []; track option?.value) {\n <cura-radio\n [name]=\"section.config.name || 'radio-group'\"\n [label]=\"option.label\"\n [value]=\"option.value\"\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\n (onchange)=\"handleRadioChange($event, section.config.control)\"\n ></cura-radio>\n }\n </div>\n }\n @case ('custom') {\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\n }\n }\n </div>\n }\n }\n </div>\n\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\n <div class=\"main-actions\">\n @if (showClearButton) {\n <cura-button-transparent\n size=\"small\"\n font-color=\"dark\"\n color=\"primary\"\n text-align=\"center\"\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\n (click)=\"reset()\"\n >\n <span>Limpar todos os filtros</span>\n </cura-button-transparent>\n }\n\n @if (showApplyButton) {\n <cura-button\n size=\"medium\"\n font-color=\"light\"\n color=\"primary\"\n text-align=\"center\"\n (click)=\"filter()\"\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\n class=\"filter-button\"\n >\n Filtrar\n </cura-button>\n }\n </div>\n\n @if (showCloseButton) {\n <div class=\"divider-strong\"></div>\n <div class=\"close-action-wrapper\">\n <div class=\"close-action\" (click)=\"close()\">\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\n <cura-button-transparent size=\"\" type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [":host *{font-family:var(--font-family)}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.clickable-mobile{cursor:pointer}.filter-generic.clickable-mobile:hover{background-color:var(--primary-lighter)}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes.scrollable{max-height:100px;overflow-y:auto;grid-template-columns:1fr;padding-right:8px;gap:12px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-checkboxes.scrollable:after{display:none}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios.scrollable{max-height:100px;overflow-y:auto;padding-right:8px;gap:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-radios.scrollable:after{display:none}@media screen and (max-width: 1024px){.filter-checkboxes.scrollable,.filter-radios.scrollable{max-height:100px}.filter-checkboxes:after{display:none;background-color:transparent}}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions:before{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-bottom:20px}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button-transparent{display:flex;justify-content:flex-start;text-align:left;flex:0 1 auto}.filter-actions cura-button{display:flex;justify-content:flex-start;text-align:left;flex:1 0 auto}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
|
|
198
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterGenericComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
199
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FilterGenericComponent, isStandalone: true, selector: "rdsite-filter-generic", inputs: { withContainerStyle: { classPropertyName: "withContainerStyle", publicName: "withContainerStyle", isSignal: true, isRequired: false, transformFunction: null }, showClearButton: { classPropertyName: "showClearButton", publicName: "showClearButton", isSignal: true, isRequired: false, transformFunction: null }, showApplyButton: { classPropertyName: "showApplyButton", publicName: "showApplyButton", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, disableButtons: { classPropertyName: "disableButtons", publicName: "disableButtons", isSignal: true, isRequired: false, transformFunction: null }, showBadge: { classPropertyName: "showBadge", publicName: "showBadge", isSignal: true, isRequired: false, transformFunction: null }, showToggleIcon: { classPropertyName: "showToggleIcon", publicName: "showToggleIcon", isSignal: true, isRequired: false, transformFunction: null }, isFilterOpen: { classPropertyName: "isFilterOpen", publicName: "isFilterOpen", isSignal: true, isRequired: false, transformFunction: null }, mobileBehavior: { classPropertyName: "mobileBehavior", publicName: "mobileBehavior", isSignal: true, isRequired: false, transformFunction: null }, forceCollapsed: { classPropertyName: "forceCollapsed", publicName: "forceCollapsed", isSignal: true, isRequired: false, transformFunction: null }, emitOnReset: { classPropertyName: "emitOnReset", publicName: "emitOnReset", isSignal: true, isRequired: false, transformFunction: null }, textTitle: { classPropertyName: "textTitle", publicName: "textTitle", isSignal: true, isRequired: false, transformFunction: null }, sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterChange: "filterChange", closeModal: "closeModal", openMobileFilter: "openMobileFilter", isFilterOpen: "isFilterOpenChange" }, host: { properties: { "style": "this.styleBinding" } }, ngImport: i0, template: "<div\r\n class=\"filter-generic\"\r\n [ngClass]=\"{ 'container-style': withContainerStyle(), 'clickable-mobile': shouldHandleMobileClick() }\"\r\n aria-label=\"Filtros\"\r\n (click)=\"handleMobileClick()\"\r\n>\r\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen(), hidden: !isFilterOpen() }\">\r\n <div class=\"filter-title-wrapper\">\r\n <cura-label size=\"medium\" level=\"4\" color=\"neutral-black\" weight=\"regular\" margin-block=\"0\" line-height=\"16px\">\r\n {{ textTitle() }}\r\n </cura-label>\r\n\r\n @if (showBadge()) {\r\n <cura-badge-counter\r\n [type]=\"'solid'\"\r\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\r\n [number]=\"selectedFiltersCount()\"\r\n class=\"filter-badge\"\r\n ></cura-badge-counter>\r\n }\r\n </div>\r\n\r\n @if (showToggleIcon()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n font-color=\"dark\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n (click)=\"toggleFilter()\"\r\n [attr.aria-expanded]=\"isFilterOpen()\"\r\n [aria-label]=\"isFilterOpen() ? 'Fechar filtros' : 'Abrir filtros'\"\r\n >\r\n <cura-icon [name]=\"isFilterOpen() ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\r\n </cura-button-transparent>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n @for (section of sections(); track section.type) {\r\n @if (section.visible !== false) {\r\n <div class=\"filter-section\">\r\n @switch (section.type) {\r\n @case ('input') {\r\n <cura-input-text\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [name]=\"section.config.name || ''\"\r\n [icon-name]=\"section.config.iconName || ''\"\r\n [value]=\"section.config.control.value\"\r\n (valueChange)=\"handleInputChange($event, section.config.control)\"\r\n ></cura-input-text>\r\n }\r\n @case ('select') {\r\n <cura-select\r\n [label]=\"section.config.label || ''\"\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [value]=\"section.config.control.value\"\r\n (selected)=\"handleSelectChange($event, section.config.control)\"\r\n >\r\n @if (section.config.includeDefaultOption) {\r\n <cura-select-option [value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\r\n }\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-select-option [value]=\"option?.value\">{{ option?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n @case ('checkbox-group') {\r\n @if (section.config.title) {\r\n <div class=\"filter-header\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" [level]=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\r\n {{ section.config.title }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.subtitle) {\r\n <div class=\"filter-subtitle\">\r\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\">\r\n {{ section.config.subtitle }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.description) {\r\n <div class=\"filter-description\">\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\r\n {{ section.config.description }}\r\n </cura-paragraph>\r\n </div>\r\n }\r\n\r\n <div class=\"filter-checkboxes\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n icon-color=\"light\"\r\n [name]=\"option.label\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"option.checked || false\"\r\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\r\n ></cura-checkbox>\r\n }\r\n </div>\r\n }\r\n @case ('radio-group') {\r\n <div class=\"filter-radios\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-radio\r\n [name]=\"section.config.name || 'radio-group'\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\r\n (onchange)=\"handleRadioChange($event, section.config.control)\"\r\n ></cura-radio>\r\n }\r\n </div>\r\n }\r\n @case ('custom') {\r\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n <div class=\"main-actions\">\r\n @if (showClearButton()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n font-color=\"dark\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n (click)=\"reset()\"\r\n >\r\n <span>Limpar todos os filtros</span>\r\n </cura-button-transparent>\r\n }\r\n\r\n @if (showApplyButton()) {\r\n <cura-button\r\n size=\"medium\"\r\n font-color=\"light\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n (click)=\"filter()\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n class=\"filter-button\"\r\n >\r\n Filtrar\r\n </cura-button>\r\n }\r\n </div>\r\n\r\n @if (showCloseButton()) {\r\n <div class=\"divider-strong\"></div>\r\n <div class=\"close-action-wrapper\">\r\n <div class=\"close-action\" (click)=\"close()\">\r\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\r\n <cura-button-transparent type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host *{font-family:var(--font-family)}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.clickable-mobile{cursor:pointer}.filter-generic.clickable-mobile:hover{background-color:var(--primary-lighter)}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes.scrollable{max-height:100px;overflow-y:auto;grid-template-columns:1fr;padding-right:8px;gap:12px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-checkboxes.scrollable:after{display:none}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios.scrollable{max-height:100px;overflow-y:auto;padding-right:8px;gap:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-radios.scrollable:after{display:none}@media screen and (max-width: 1024px){.filter-checkboxes.scrollable,.filter-radios.scrollable{max-height:100px}.filter-checkboxes:after{display:none;background-color:transparent}}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions:before{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-bottom:20px}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button-transparent{display:flex;justify-content:flex-start;text-align:left;flex:0 1 auto}.filter-actions cura-button{display:flex;justify-content:flex-start;text-align:left;flex:1 0 auto}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
|
|
204
200
|
}
|
|
205
201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterGenericComponent, decorators: [{
|
|
206
202
|
type: Component,
|
|
207
|
-
args: [{ selector: 'rdsite-filter-generic', standalone: true, imports: [CommonModule, ReactiveFormsModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div\n class=\"filter-generic\"\n [ngClass]=\"{ 'container-style': withContainerStyle, 'clickable-mobile': shouldHandleMobileClick() }\"\n aria-label=\"Filtros\"\n (click)=\"handleMobileClick()\"\n>\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen, hidden: !isFilterOpen }\">\n <div class=\"filter-title-wrapper\">\n <cura-label size=\"medium\" level=\"4\" color=\"neutral-black\" weight=\"regular\" margin-block=\"0\" line-height=\"16px\">\n {{ textTitle }}\n </cura-label>\n\n @if (showBadge) {\n <cura-badge-counter\n [type]=\"'solid'\"\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\n [number]=\"selectedFiltersCount\"\n class=\"filter-badge\"\n ></cura-badge-counter>\n }\n </div>\n\n @if (showToggleIcon) {\n <cura-button-transparent size=\"small\" font-color=\"dark\" color=\"primary\" text-align=\"center\" (click)=\"toggleFilter()\" [attr.aria-expanded]=\"isFilterOpen\">\n <cura-icon [name]=\"isFilterOpen ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\n </cura-button-transparent>\n }\n </div>\n\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\n @for (section of sections; track section.type) {\n @if (section.visible !== false) {\n <div class=\"filter-section\">\n @switch (section.type) {\n @case ('input') {\n <cura-input-text\n [placeholder]=\"section.config.placeholder || ''\"\n [name]=\"section.config.name || ''\"\n [iconName]=\"section.config.iconName || ''\"\n [attr.value]=\"section.config.control.value\"\n (valueChange)=\"handleInputChange($event, section.config.control)\"\n ></cura-input-text>\n }\n @case ('select') {\n <cura-select\n [label]=\"section.config.label || ''\"\n [placeholder]=\"section.config.placeholder || ''\"\n [attr.value]=\"section.config.control.value\"\n (selected)=\"handleSelectChange($event, section.config.control)\"\n >\n @if (section.config.includeDefaultOption) {\n <cura-select-option [attr.value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\n }\n @for (option of section.config.options || []; track option?.value) {\n <cura-select-option [attr.value]=\"option?.value\">{{ option?.label }}</cura-select-option>\n }\n </cura-select>\n }\n @case ('checkbox-group') {\n @if (section.config.title) {\n <div class=\"filter-header\">\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\n <cura-heading size=\"xsmall\" level=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\n {{ section.config.title }}\n </cura-heading>\n </div>\n }\n @if (section.config.subtitle) {\n <div class=\"filter-subtitle\">\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\">\n {{ section.config.subtitle }}\n </cura-heading>\n </div>\n }\n\n @if (section.config.description) {\n <div class=\"filter-description\">\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\n {{ section.config.description }}\n </cura-paragraph>\n </div>\n }\n\n <div class=\"filter-checkboxes\" [class.scrollable]=\"hasScroll(section)\">\n @for (option of section.config.options || []; track option?.value) {\n <cura-checkbox\n color=\"primary\"\n size=\"small\"\n icon-color=\"light\"\n [attr.name]=\"option?.label\"\n [attr.label]=\"option?.label\"\n [attr.value]=\"option?.value\"\n [attr.checked]=\"option?.checked\"\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\n ></cura-checkbox>\n }\n </div>\n }\n @case ('radio-group') {\n <div class=\"filter-radios\" [class.scrollable]=\"hasScroll(section)\">\n @for (option of section.config.options || []; track option?.value) {\n <cura-radio\n [name]=\"section.config.name || 'radio-group'\"\n [label]=\"option.label\"\n [value]=\"option.value\"\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\n (onchange)=\"handleRadioChange($event, section.config.control)\"\n ></cura-radio>\n }\n </div>\n }\n @case ('custom') {\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\n }\n }\n </div>\n }\n }\n </div>\n\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\n <div class=\"main-actions\">\n @if (showClearButton) {\n <cura-button-transparent\n size=\"small\"\n font-color=\"dark\"\n color=\"primary\"\n text-align=\"center\"\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\n (click)=\"reset()\"\n >\n <span>Limpar todos os filtros</span>\n </cura-button-transparent>\n }\n\n @if (showApplyButton) {\n <cura-button\n size=\"medium\"\n font-color=\"light\"\n color=\"primary\"\n text-align=\"center\"\n (click)=\"filter()\"\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\n class=\"filter-button\"\n >\n Filtrar\n </cura-button>\n }\n </div>\n\n @if (showCloseButton) {\n <div class=\"divider-strong\"></div>\n <div class=\"close-action-wrapper\">\n <div class=\"close-action\" (click)=\"close()\">\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\n <cura-button-transparent size=\"\" type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [":host *{font-family:var(--font-family)}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.clickable-mobile{cursor:pointer}.filter-generic.clickable-mobile:hover{background-color:var(--primary-lighter)}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes.scrollable{max-height:100px;overflow-y:auto;grid-template-columns:1fr;padding-right:8px;gap:12px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-checkboxes.scrollable:after{display:none}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios.scrollable{max-height:100px;overflow-y:auto;padding-right:8px;gap:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-radios.scrollable:after{display:none}@media screen and (max-width: 1024px){.filter-checkboxes.scrollable,.filter-radios.scrollable{max-height:100px}.filter-checkboxes:after{display:none;background-color:transparent}}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions:before{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-bottom:20px}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button-transparent{display:flex;justify-content:flex-start;text-align:left;flex:0 1 auto}.filter-actions cura-button{display:flex;justify-content:flex-start;text-align:left;flex:1 0 auto}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"] }]
|
|
208
|
-
}],
|
|
209
|
-
type: Inject,
|
|
210
|
-
args: [PLATFORM_ID]
|
|
211
|
-
}] }], propDecorators: { filterChange: [{
|
|
212
|
-
type: Output
|
|
213
|
-
}], closeModal: [{
|
|
214
|
-
type: Output
|
|
215
|
-
}], openMobileFilter: [{
|
|
216
|
-
type: Output
|
|
217
|
-
}], withContainerStyle: [{
|
|
218
|
-
type: Input
|
|
219
|
-
}], showClearButton: [{
|
|
220
|
-
type: Input
|
|
221
|
-
}], showApplyButton: [{
|
|
222
|
-
type: Input
|
|
223
|
-
}], showCloseButton: [{
|
|
224
|
-
type: Input
|
|
225
|
-
}], disableButtonsWithoutSelection: [{
|
|
226
|
-
type: Input
|
|
227
|
-
}], showBadge: [{
|
|
228
|
-
type: Input
|
|
229
|
-
}], showToggleIcon: [{
|
|
230
|
-
type: Input
|
|
231
|
-
}], isFilterOpen: [{
|
|
232
|
-
type: Input
|
|
233
|
-
}], mobileBehavior: [{
|
|
234
|
-
type: Input
|
|
235
|
-
}], forceCollapsed: [{
|
|
236
|
-
type: Input
|
|
237
|
-
}], emitOnReset: [{
|
|
238
|
-
type: Input
|
|
239
|
-
}], textTitle: [{
|
|
240
|
-
type: Input
|
|
241
|
-
}], sections: [{
|
|
242
|
-
type: Input
|
|
243
|
-
}], styleBinding: [{
|
|
203
|
+
args: [{ selector: 'rdsite-filter-generic', imports: [CommonModule, ReactiveFormsModule], standalone: true, schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div\r\n class=\"filter-generic\"\r\n [ngClass]=\"{ 'container-style': withContainerStyle(), 'clickable-mobile': shouldHandleMobileClick() }\"\r\n aria-label=\"Filtros\"\r\n (click)=\"handleMobileClick()\"\r\n>\r\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen(), hidden: !isFilterOpen() }\">\r\n <div class=\"filter-title-wrapper\">\r\n <cura-label size=\"medium\" level=\"4\" color=\"neutral-black\" weight=\"regular\" margin-block=\"0\" line-height=\"16px\">\r\n {{ textTitle() }}\r\n </cura-label>\r\n\r\n @if (showBadge()) {\r\n <cura-badge-counter\r\n [type]=\"'solid'\"\r\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\r\n [number]=\"selectedFiltersCount()\"\r\n class=\"filter-badge\"\r\n ></cura-badge-counter>\r\n }\r\n </div>\r\n\r\n @if (showToggleIcon()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n font-color=\"dark\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n (click)=\"toggleFilter()\"\r\n [attr.aria-expanded]=\"isFilterOpen()\"\r\n [aria-label]=\"isFilterOpen() ? 'Fechar filtros' : 'Abrir filtros'\"\r\n >\r\n <cura-icon [name]=\"isFilterOpen() ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\r\n </cura-button-transparent>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n @for (section of sections(); track section.type) {\r\n @if (section.visible !== false) {\r\n <div class=\"filter-section\">\r\n @switch (section.type) {\r\n @case ('input') {\r\n <cura-input-text\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [name]=\"section.config.name || ''\"\r\n [icon-name]=\"section.config.iconName || ''\"\r\n [value]=\"section.config.control.value\"\r\n (valueChange)=\"handleInputChange($event, section.config.control)\"\r\n ></cura-input-text>\r\n }\r\n @case ('select') {\r\n <cura-select\r\n [label]=\"section.config.label || ''\"\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [value]=\"section.config.control.value\"\r\n (selected)=\"handleSelectChange($event, section.config.control)\"\r\n >\r\n @if (section.config.includeDefaultOption) {\r\n <cura-select-option [value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\r\n }\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-select-option [value]=\"option?.value\">{{ option?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n @case ('checkbox-group') {\r\n @if (section.config.title) {\r\n <div class=\"filter-header\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" [level]=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\r\n {{ section.config.title }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.subtitle) {\r\n <div class=\"filter-subtitle\">\r\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\">\r\n {{ section.config.subtitle }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.description) {\r\n <div class=\"filter-description\">\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\r\n {{ section.config.description }}\r\n </cura-paragraph>\r\n </div>\r\n }\r\n\r\n <div class=\"filter-checkboxes\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n icon-color=\"light\"\r\n [name]=\"option.label\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"option.checked || false\"\r\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\r\n ></cura-checkbox>\r\n }\r\n </div>\r\n }\r\n @case ('radio-group') {\r\n <div class=\"filter-radios\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-radio\r\n [name]=\"section.config.name || 'radio-group'\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\r\n (onchange)=\"handleRadioChange($event, section.config.control)\"\r\n ></cura-radio>\r\n }\r\n </div>\r\n }\r\n @case ('custom') {\r\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n <div class=\"main-actions\">\r\n @if (showClearButton()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n font-color=\"dark\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n (click)=\"reset()\"\r\n >\r\n <span>Limpar todos os filtros</span>\r\n </cura-button-transparent>\r\n }\r\n\r\n @if (showApplyButton()) {\r\n <cura-button\r\n size=\"medium\"\r\n font-color=\"light\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n (click)=\"filter()\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n class=\"filter-button\"\r\n >\r\n Filtrar\r\n </cura-button>\r\n }\r\n </div>\r\n\r\n @if (showCloseButton()) {\r\n <div class=\"divider-strong\"></div>\r\n <div class=\"close-action-wrapper\">\r\n <div class=\"close-action\" (click)=\"close()\">\r\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\r\n <cura-button-transparent type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host *{font-family:var(--font-family)}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.clickable-mobile{cursor:pointer}.filter-generic.clickable-mobile:hover{background-color:var(--primary-lighter)}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes.scrollable{max-height:100px;overflow-y:auto;grid-template-columns:1fr;padding-right:8px;gap:12px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-checkboxes.scrollable:after{display:none}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios.scrollable{max-height:100px;overflow-y:auto;padding-right:8px;gap:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-radios.scrollable:after{display:none}@media screen and (max-width: 1024px){.filter-checkboxes.scrollable,.filter-radios.scrollable{max-height:100px}.filter-checkboxes:after{display:none;background-color:transparent}}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions:before{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-bottom:20px}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button-transparent{display:flex;justify-content:flex-start;text-align:left;flex:0 1 auto}.filter-actions cura-button{display:flex;justify-content:flex-start;text-align:left;flex:1 0 auto}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"] }]
|
|
204
|
+
}], propDecorators: { styleBinding: [{
|
|
244
205
|
type: HostBinding,
|
|
245
206
|
args: ['style']
|
|
246
207
|
}] } });
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWdlbmVyaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2l0ZS1mcm9udC1lbmQtbGliL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlci1nZW5lcmljL2ZpbHRlci1nZW5lcmljLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpdGUtZnJvbnQtZW5kLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVycy9maWx0ZXItZ2VuZXJpYy9maWx0ZXItZ2VuZXJpYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUFxQixTQUFTLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUosT0FBTyxFQUFlLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7O0FBWTdELE1BQU0sT0FBTyxzQkFBc0I7SUFtQ2pDLFlBQ21CLFdBQXdCLEVBQ3hCLEdBQXNCLEVBQ0QsVUFBa0I7UUFGdkMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDRCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBckNoRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDL0MsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDekMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU3Qyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsb0JBQWUs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QkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtnQixZQUFZO3NCQUFqQyxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDdXJhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE1lZGlhUXVlcmllcyB9IGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvbWVkaWFRdWVyaWVzJztcbmltcG9ydCB7IEZpbHRlckFjdGlvbiwgRmlsdGVyQ29udHJvbFZhbHVlLCBGaWx0ZXJTZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbHRlcnMvZmlsdGVyLXNlY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBGaWx0ZXJFdmVudCwgRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbHRlcnMvZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyZHNpdGUtZmlsdGVyLWdlbmVyaWMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLWdlbmVyaWMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItZ2VuZXJpYy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJHZW5lcmljQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQE91dHB1dCgpIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjbG9zZU1vZGFsID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgb3Blbk1vYmlsZUZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBASW5wdXQoKSB3aXRoQ29udGFpbmVyU3R5bGUgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Q2xlYXJCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93QXBwbHlCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Q2xvc2VCdXR0b24gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZUJ1dHRvbnNXaXRob3V0U2VsZWN0aW9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dCYWRnZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dUb2dnbGVJY29uID0gdHJ1ZTtcbiAgQElucHV0KCkgaXNGaWx0ZXJPcGVuID0gdHJ1ZTtcbiAgQElucHV0KCkgbW9iaWxlQmVoYXZpb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgZm9yY2VDb2xsYXBzZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgZW1pdE9uUmVzZXQgPSBmYWxzZTtcbiAgQElucHV0KCkgdGV4dFRpdGxlID0gJ0ZpbHRyYXIgcG9yJztcbiAgQElucHV0KCkgc2VjdGlvbnM6IEZpbHRlclNlY3Rpb25bXSA9IFtdO1xuXG4gIHNlbGVjdGVkRmlsdGVyc0NvdW50OiBudW1iZXIgPSAwO1xuICB3aW5kb3dXaWR0aDogbnVtYmVyID0gMDtcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlJykgc3R5bGVCaW5kaW5nID0ge1xuICAgICctLWZvbnQtZmFtaWx5JzogdGhpcy5jdXJhU2VydmljZS5nZXRGb250RmFtaWx5KCcnKSxcbiAgICAnLS1uZXV0cmFsLW9wYWNpdHktYmxhY2snOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCduZXV0cmFsLWJsYWNrJywgMC4yKSxcbiAgICAnLS1uZXV0cmFsLWRhcmsnOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCduZXV0cmFsLWRhcmsnKSxcbiAgICAnLS1uZXV0cmFsLWRhcmtlcic6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ25ldXRyYWwtZGFya2VyJyksXG4gICAgJy0tbmV1dHJhbC1tZWRpdW0nOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCduZXV0cmFsLW1lZGl1bScpLFxuICAgICctLW5ldXRyYWwtbGlnaHQnOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCduZXV0cmFsLWxpZ2h0JyksXG4gICAgJy0tbmV1dHJhbC1saWdodGVyJzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1saWdodGVyJyksXG4gICAgJy0tbmV1dHJhbC1wdXJld2hpdGUnOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCduZXV0cmFsLXB1cmV3aGl0ZScpLFxuICAgICctLXByaW1hcnktYmFzZSc6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ3ByaW1hcnktYmFzZScpLFxuICAgICctLXByaW1hcnktbGlnaHRlcic6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ3ByaW1hcnktbGlnaHRlcicpLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VyYVNlcnZpY2U6IEN1cmFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQ6IG9iamVjdCxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLndpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9yY2VDb2xsYXBzZWQgJiYgdGhpcy5pc01vYmlsZSgpKSB7XG4gICAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50OiBhbnksIGNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XG4gICAgY29udHJvbC5zZXRWYWx1ZShldmVudC5kZXRhaWwpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRGaWx0ZXJzQ291bnQoKTtcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdENoYW5nZShldmVudDogYW55LCBjb250cm9sOiBGb3JtQ29udHJvbCk6IHZvaWQge1xuICAgIGlmIChldmVudD8uZGV0YWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZXZlbnQuZGV0YWlsKTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRGaWx0ZXJzQ291bnQoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDaGVja2JveENoYW5nZShldmVudDogYW55LCBvcHRpb25zOiBhbnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IGNoYW5nZWRPcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdCkgPT4gb3B0LnZhbHVlID09PSBldmVudC5kZXRhaWwudmFsdWUpO1xuICAgIGlmIChjaGFuZ2VkT3B0aW9uKSBjaGFuZ2VkT3B0aW9uLmNoZWNrZWQgPSBldmVudC5kZXRhaWwuY2hlY2tlZDtcblxuICAgIHRoaXMudXBkYXRlQ2hlY2tib3hHcm91cChvcHRpb25zKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRmlsdGVyc0NvdW50KCk7XG4gIH1cblxuICBoYW5kbGVSYWRpb0NoYW5nZShldmVudDogYW55LCBjb250cm9sOiBGb3JtQ29udHJvbCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBldmVudC5kZXRhaWwudmFsdWU7XG4gICAgY29udHJvbC5zZXRWYWx1ZShjb250cm9sLnZhbHVlPy52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZSA/IG51bGwgOiB7IHZhbHVlOiBzZWxlY3RlZFZhbHVlIH0pO1xuICB9XG5cbiAgZmlsdGVyKCk6IHZvaWQge1xuICAgIHRoaXMuZW1pdEZpbHRlckNoYW5nZSgnZmlsdGVyJyk7XG4gICAgaWYgKHRoaXMubW9iaWxlQmVoYXZpb3IgfHwgdGhpcy5zaG93Q2xvc2VCdXR0b24pIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRBbGxDb250cm9scygpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRGaWx0ZXJzQ291bnQoKTtcblxuICAgIGlmICh0aGlzLmVtaXRPblJlc2V0KSB7XG4gICAgICB0aGlzLmVtaXRGaWx0ZXJDaGFuZ2UoJ3Jlc2V0Jyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZU1vZGFsLmVtaXQodHJ1ZSk7XG4gIH1cblxuICB0b2dnbGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9iaWxlQmVoYXZpb3IgJiYgdGhpcy5pc01vYmlsZSgpKSB7XG4gICAgICB0aGlzLm9wZW5Nb2JpbGVGaWx0ZXIuZW1pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRmlsdGVyT3BlbiA9ICF0aGlzLmlzRmlsdGVyT3BlbjtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaGFzU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRGaWx0ZXJzQ291bnQoKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbHRlcnNDb3VudCA+IDA7XG4gIH1cblxuICBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53aW5kb3dXaWR0aCA8PSBNZWRpYVF1ZXJpZXMuc21hbGxCcmVha3BvaW50O1xuICB9XG5cbiAgZ2V0UmFkaW9Hcm91cFZhbHVlKGNvbnRyb2w/OiBGb3JtQ29udHJvbDxGaWx0ZXJDb250cm9sVmFsdWU+KTogYW55IHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2w/LnZhbHVlO1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gdmFsdWUgPyB2YWx1ZS52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBoYXNTY3JvbGwoc2VjdGlvbjogRmlsdGVyU2VjdGlvbik6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAoc2VjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdjaGVja2JveC1ncm91cCc6XG4gICAgICAgIHJldHVybiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zICYmIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMubGVuZ3RoID4gNjtcbiAgICAgIGNhc2UgJ3JhZGlvLWdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMgJiYgc2VjdGlvbi5jb25maWcub3B0aW9ucy5sZW5ndGggPiA2O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlY3Rpb25DbGFzcyhzZWN0aW9uOiBGaWx0ZXJTZWN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5oYXNTY3JvbGwoc2VjdGlvbikgPyAnc2Nyb2xsYWJsZScgOiAnJztcbiAgfVxuXG4gIHNob3VsZEhhbmRsZU1vYmlsZUNsaWNrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vYmlsZUJlaGF2aW9yICYmIHRoaXMuaXNNb2JpbGUoKSAmJiB0aGlzLmZvcmNlQ29sbGFwc2VkO1xuICB9XG5cbiAgaGFuZGxlTW9iaWxlQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlTW9iaWxlQ2xpY2soKSkge1xuICAgICAgdGhpcy5vcGVuTW9iaWxlRmlsdGVyLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWx0ZXJDaGFuZ2UoYWN0aW9uOiBGaWx0ZXJBY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJEYXRhID0gdGhpcy5idWlsZEZpbHRlckRhdGEoKTtcbiAgICBjb25zdCBpc0VtcHR5ID0gdGhpcy5pc0ZpbHRlckRhdGFFbXB0eShmaWx0ZXJEYXRhKTtcblxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQoe1xuICAgICAgZGF0YTogdGhpcy5lbWl0T25SZXNldCB8fCAhaXNFbXB0eSA/IGZpbHRlckRhdGEgOiBudWxsLFxuICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkRmlsdGVyc0NvdW50KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzQ291bnQgPSB0aGlzLnNlY3Rpb25zLnJlZHVjZSgoY291bnQsIHNlY3Rpb24pID0+IHtcbiAgICAgIGlmICghc2VjdGlvbi5jb25maWc/LmNvbnRyb2wpIHJldHVybiBjb3VudDtcblxuICAgICAgY29uc3QgdmFsdWUgPSBzZWN0aW9uLmNvbmZpZy5jb250cm9sLnZhbHVlO1xuXG4gICAgICBzd2l0Y2ggKHNlY3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlICdjaGVja2JveC1ncm91cCc6XG4gICAgICAgICAgcmV0dXJuIGNvdW50ICsgKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuZmlsdGVyKChpdGVtKSA9PiBpdGVtPy5jaGVja2VkKS5sZW5ndGggOiAwKTtcbiAgICAgICAgY2FzZSAncmFkaW8tZ3JvdXAnOlxuICAgICAgICAgIHJldHVybiBjb3VudCArICh2YWx1ZT8udmFsdWUgPyAxIDogMCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGNvdW50ICsgKHZhbHVlID8gMSA6IDApO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFsbENvbnRyb2xzKCk6IHZvaWQge1xuICAgIHRoaXMuc2VjdGlvbnMuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgICAgaWYgKCFzZWN0aW9uLmNvbmZpZz8uY29udHJvbCkgcmV0dXJuO1xuXG4gICAgICBpZiAoc2VjdGlvbi50eXBlID09PSAnY2hlY2tib3gtZ3JvdXAnKSB7XG4gICAgICAgIGNvbnN0IHJlc2V0T3B0aW9ucyA9IHNlY3Rpb24uY29uZmlnLm9wdGlvbnMubWFwKChvcHRpb246IGFueSkgPT4gKHsgLi4ub3B0aW9uLCBjaGVja2VkOiBmYWxzZSB9KSk7XG4gICAgICAgIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMgPSByZXNldE9wdGlvbnM7XG4gICAgICAgIHNlY3Rpb24uY29uZmlnLmNvbnRyb2wuc2V0VmFsdWUocmVzZXRPcHRpb25zLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWN0aW9uLmNvbmZpZy5jb250cm9sLnJlc2V0KCcnLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNoZWNrYm94R3JvdXAob3B0aW9uczogYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLnNlY3Rpb25zXG4gICAgICAuZmlsdGVyKChzZWN0aW9uKSA9PiBzZWN0aW9uLnR5cGUgPT09ICdjaGVja2JveC1ncm91cCcpXG4gICAgICAuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgICAgICBzZWN0aW9uLmNvbmZpZy5vcHRpb25zID0gWy4uLm9wdGlvbnNdO1xuICAgICAgICBzZWN0aW9uLmNvbmZpZy5jb250cm9sLnNldFZhbHVlKFsuLi5vcHRpb25zXSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGaWx0ZXJEYXRhKCk6IEZpbHRlclBsYW5vc0NvbnZlbmlvc0NoYW5nZSB8IGFueSB7XG4gICAgY29uc3QgZmlsdGVyRGF0YTogRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlID0ge1xuICAgICAgdW5pZGFkZTogJycsXG4gICAgICBlc3RhZG86ICcnLFxuICAgICAgY29iZXJ0dXJhOiBbXSxcbiAgICB9O1xuXG4gICAgdGhpcy5zZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIXNlY3Rpb24uY29uZmlnPy5jb250cm9sKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gc2VjdGlvbi5jb25maWcuY29udHJvbC52YWx1ZTtcblxuICAgICAgc3dpdGNoIChzZWN0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgICAgIGZpbHRlckRhdGEudW5pZGFkZSA9IHZhbHVlIHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICAgIGZpbHRlckRhdGEuZXN0YWRvID0gdmFsdWUgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NoZWNrYm94LWdyb3VwJzpcbiAgICAgICAgICBmaWx0ZXJEYXRhLmNvYmVydHVyYSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmNoZWNrZWQpIDogW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGaWx0ZXJEYXRhRW1wdHkoZmlsdGVyRGF0YTogRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmlsdGVyRGF0YSkuZXZlcnkoKHZhbCkgPT4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gJycgfHwgKEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID09PSAwKSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJmaWx0ZXItZ2VuZXJpY1wiXG4gIFtuZ0NsYXNzXT1cInsgJ2NvbnRhaW5lci1zdHlsZSc6IHdpdGhDb250YWluZXJTdHlsZSwgJ2NsaWNrYWJsZS1tb2JpbGUnOiBzaG91bGRIYW5kbGVNb2JpbGVDbGljaygpIH1cIlxuICBhcmlhLWxhYmVsPVwiRmlsdHJvc1wiXG4gIChjbGljayk9XCJoYW5kbGVNb2JpbGVDbGljaygpXCJcbj5cbiAgPGRpdiBjbGFzcz1cImZpbHRlci1oZWFkZXItY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieyAnbm8tcGFkZGluZyc6ICFpc0ZpbHRlck9wZW4sIGhpZGRlbjogIWlzRmlsdGVyT3BlbiB9XCI+XG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci10aXRsZS13cmFwcGVyXCI+XG4gICAgICA8Y3VyYS1sYWJlbCBzaXplPVwibWVkaXVtXCIgbGV2ZWw9XCI0XCIgY29sb3I9XCJuZXV0cmFsLWJsYWNrXCIgd2VpZ2h0PVwicmVndWxhclwiIG1hcmdpbi1ibG9jaz1cIjBcIiBsaW5lLWhlaWdodD1cIjE2cHhcIj5cbiAgICAgICAge3sgdGV4dFRpdGxlIH19XG4gICAgICA8L2N1cmEtbGFiZWw+XG5cbiAgICAgIEBpZiAoc2hvd0JhZGdlKSB7XG4gICAgICAgIDxjdXJhLWJhZGdlLWNvdW50ZXJcbiAgICAgICAgICBbdHlwZV09XCInc29saWQnXCJcbiAgICAgICAgICBbY29sb3JdPVwiaGFzU2VsZWN0aW9uKCkgPyAncHJpbWFyeScgOiAnbmV1dHJhbCdcIlxuICAgICAgICAgIFtudW1iZXJdPVwic2VsZWN0ZWRGaWx0ZXJzQ291bnRcIlxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWJhZGdlXCJcbiAgICAgICAgPjwvY3VyYS1iYWRnZS1jb3VudGVyPlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChzaG93VG9nZ2xlSWNvbikge1xuICAgICAgPGN1cmEtYnV0dG9uLXRyYW5zcGFyZW50IHNpemU9XCJzbWFsbFwiIGZvbnQtY29sb3I9XCJkYXJrXCIgY29sb3I9XCJwcmltYXJ5XCIgdGV4dC1hbGlnbj1cImNlbnRlclwiIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIoKVwiIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNGaWx0ZXJPcGVuXCI+XG4gICAgICAgIDxjdXJhLWljb24gW25hbWVdPVwiaXNGaWx0ZXJPcGVuID8gJ3VwJyA6ICdkb3duJ1wiIHNpemU9XCIxNlwiIGNsYXNzPVwiZmlsdGVyLWljb25cIiBjb2xvcj1cInByaW1hcnktZGFya1wiPjwvY3VyYS1pY29uPlxuICAgICAgPC9jdXJhLWJ1dHRvbi10cmFuc3BhcmVudD5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGVudFwiIFtjbGFzcy5oaWRkZW5dPVwiIWlzRmlsdGVyT3BlbiB8fCAoZm9yY2VDb2xsYXBzZWQgJiYgaXNNb2JpbGUoKSlcIj5cbiAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zOyB0cmFjayBzZWN0aW9uLnR5cGUpIHtcbiAgICAgIEBpZiAoc2VjdGlvbi52aXNpYmxlICE9PSBmYWxzZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXNlY3Rpb25cIj5cbiAgICAgICAgICBAc3dpdGNoIChzZWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICAgIEBjYXNlICgnaW5wdXQnKSB7XG4gICAgICAgICAgICAgIDxjdXJhLWlucHV0LXRleHRcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VjdGlvbi5jb25maWcucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cInNlY3Rpb24uY29uZmlnLm5hbWUgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtpY29uTmFtZV09XCJzZWN0aW9uLmNvbmZpZy5pY29uTmFtZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2F0dHIudmFsdWVdPVwic2VjdGlvbi5jb25maWcuY29udHJvbC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudCwgc2VjdGlvbi5jb25maWcuY29udHJvbClcIlxuICAgICAgICAgICAgICA+PC9jdXJhLWlucHV0LXRleHQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgICAgPGN1cmEtc2VsZWN0XG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNlY3Rpb24uY29uZmlnLmxhYmVsIHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VjdGlvbi5jb25maWcucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICAgICAgIFthdHRyLnZhbHVlXT1cInNlY3Rpb24uY29uZmlnLmNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJoYW5kbGVTZWxlY3RDaGFuZ2UoJGV2ZW50LCBzZWN0aW9uLmNvbmZpZy5jb250cm9sKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKHNlY3Rpb24uY29uZmlnLmluY2x1ZGVEZWZhdWx0T3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICA8Y3VyYS1zZWxlY3Qtb3B0aW9uIFthdHRyLnZhbHVlXT1cIicnXCI+e3sgc2VjdGlvbi5jb25maWcuZGVmYXVsdE9wdGlvblRleHQgfHwgJ0Zhw6dhIGEgc3VhIFNlbGXDp8OjbycgfX08L2N1cmEtc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMgfHwgW107IHRyYWNrIG9wdGlvbj8udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIDxjdXJhLXNlbGVjdC1vcHRpb24gW2F0dHIudmFsdWVdPVwib3B0aW9uPy52YWx1ZVwiPnt7IG9wdGlvbj8ubGFiZWwgfX08L2N1cmEtc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvY3VyYS1zZWxlY3Q+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2NoZWNrYm94LWdyb3VwJykge1xuICAgICAgICAgICAgICBAaWYgKHNlY3Rpb24uY29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxjdXJhLWljb24gbmFtZT1cImZpbHRlclwiIHNpemU9XCIyMFwiIGNvbG9yPVwiaW5mby1kYXJrXCI+PC9jdXJhLWljb24+XG4gICAgICAgICAgICAgICAgICA8Y3VyYS1oZWFkaW5nIHNpemU9XCJ4c21hbGxcIiBsZXZlbD1cIjVcIiB3ZWlnaHQ9XCJib2xkXCIgY29sb3I9XCJuZXV0cmFsLWJsYWNrXCIgbWFyZ2luLWJsb2NrPVwiMFwiIGxpbmUtaGVpZ2h0PVwiMTZweFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLmNvbmZpZy50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgPC9jdXJhLWhlYWRpbmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChzZWN0aW9uLmNvbmZpZy5zdWJ0aXRsZSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxjdXJhLWhlYWRpbmcgc2l6ZT1cInhzbWFsbFwiIHdlaWdodD1cImJvbGRcIiBjb2xvcj1cIm5ldXRyYWwtYmxhY2tcIiBtYXJnaW4tYmxvY2s9XCIwXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlY3Rpb24uY29uZmlnLnN1YnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICA8L2N1cmEtaGVhZGluZz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIEBpZiAoc2VjdGlvbi5jb25maWcuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICA8Y3VyYS1wYXJhZ3JhcGggc2l6ZT1cInhzbWFsbFwiIGNvbG9yPVwibmV1dHJhbC1kYXJrXCIgbWFyZ2luLWJsb2NrPVwiMFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLmNvbmZpZy5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgICAgICAgICAgPC9jdXJhLXBhcmFncmFwaD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY2hlY2tib3hlc1wiIFtjbGFzcy5zY3JvbGxhYmxlXT1cImhhc1Njcm9sbChzZWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zIHx8IFtdOyB0cmFjayBvcHRpb24/LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICA8Y3VyYS1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICBpY29uLWNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5uYW1lXT1cIm9wdGlvbj8ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5sYWJlbF09XCJvcHRpb24/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudmFsdWVdPVwib3B0aW9uPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmNoZWNrZWRdPVwib3B0aW9uPy5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uY2hhbmdlKT1cImhhbmRsZUNoZWNrYm94Q2hhbmdlKCRldmVudCwgc2VjdGlvbi5jb25maWcub3B0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgPjwvY3VyYS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdyYWRpby1ncm91cCcpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1yYWRpb3NcIiBbY2xhc3Muc2Nyb2xsYWJsZV09XCJoYXNTY3JvbGwoc2VjdGlvbilcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2Ygc2VjdGlvbi5jb25maWcub3B0aW9ucyB8fCBbXTsgdHJhY2sgb3B0aW9uPy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgPGN1cmEtcmFkaW9cbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwic2VjdGlvbi5jb25maWcubmFtZSB8fCAncmFkaW8tZ3JvdXAnXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRSYWRpb0dyb3VwVmFsdWUoc2VjdGlvbi5jb25maWcuY29udHJvbCkgPT09IG9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChvbmNoYW5nZSk9XCJoYW5kbGVSYWRpb0NoYW5nZSgkZXZlbnQsIHNlY3Rpb24uY29uZmlnLmNvbnRyb2wpXCJcbiAgICAgICAgICAgICAgICAgID48L2N1cmEtcmFkaW8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnY3VzdG9tJykge1xuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VjdGlvbi5jb25maWcudGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZpbHRlci1hY3Rpb25zXCIgW2NsYXNzLmhpZGRlbl09XCIhaXNGaWx0ZXJPcGVuIHx8IChmb3JjZUNvbGxhcHNlZCAmJiBpc01vYmlsZSgpKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYWluLWFjdGlvbnNcIj5cbiAgICAgIEBpZiAoc2hvd0NsZWFyQnV0dG9uKSB7XG4gICAgICAgIDxjdXJhLWJ1dHRvbi10cmFuc3BhcmVudFxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgZm9udC1jb2xvcj1cImRhcmtcIlxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgdGV4dC1hbGlnbj1cImNlbnRlclwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVCdXR0b25zV2l0aG91dFNlbGVjdGlvbiAmJiAhaGFzU2VsZWN0aW9uKClcIlxuICAgICAgICAgIChjbGljayk9XCJyZXNldCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuPkxpbXBhciB0b2RvcyBvcyBmaWx0cm9zPC9zcGFuPlxuICAgICAgICA8L2N1cmEtYnV0dG9uLXRyYW5zcGFyZW50PlxuICAgICAgfVxuXG4gICAgICBAaWYgKHNob3dBcHBseUJ1dHRvbikge1xuICAgICAgICA8Y3VyYS1idXR0b25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBmb250LWNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgdGV4dC1hbGlnbj1cImNlbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImZpbHRlcigpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUJ1dHRvbnNXaXRob3V0U2VsZWN0aW9uICYmICFoYXNTZWxlY3Rpb24oKVwiXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIEZpbHRyYXJcbiAgICAgICAgPC9jdXJhLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoc2hvd0Nsb3NlQnV0dG9uKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlci1zdHJvbmdcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1hY3Rpb24td3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtYWN0aW9uXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgICAgICA8Y3VyYS1pY29uIG5hbWU9XCJjbG9zZVwiIGNvbG9yPVwiZXJyb3ItZGFya1wiIHNpemU9XCJzbWFsbFwiPjwvY3VyYS1pY29uPlxuICAgICAgICAgIDxjdXJhLWJ1dHRvbi10cmFuc3BhcmVudCBzaXplPVwiXCIgdHlwZT1cImJ1dHRvblwiIGNvbG9yPVwiZXJyb3JcIiB0YXJnZXQ9XCJfc2VsZlwiPiBGZWNoYXIgPC9jdXJhLWJ1dHRvbi10cmFuc3BhcmVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWdlbmVyaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2l0ZS1mcm9udC1lbmQtbGliL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlci1nZW5lcmljL2ZpbHRlci1nZW5lcmljLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpdGUtZnJvbnQtZW5kLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVycy9maWx0ZXItZ2VuZXJpYy9maWx0ZXItZ2VuZXJpYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsV0FBVyxFQUVYLFdBQVcsRUFDWCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixzQkFBc0IsR0FDdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBMkI3RCxNQUFNLE9BQU8sc0JBQXNCO0lBUm5DO1FBU21CLG1CQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXpDLGlCQUFZLEdBQUcsTUFBTSxFQUFlLENBQUM7UUFDckMsZUFBVSxHQUFHLE1BQU0sRUFBVyxDQUFDO1FBQy9CLHFCQUFnQixHQUFHLE1BQU0sRUFBUSxDQUFDO1FBRWxDLHVCQUFrQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxvQkFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixvQkFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixvQkFBZSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixtQkFBYyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixjQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLG1CQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLGlCQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLG1CQUFjLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLG1CQUFjLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLGdCQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLGNBQVMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakMsYUFBUSxHQUFHLEtBQUssQ0FBa0IsRUFBRSxDQUFDLENBQUM7UUFFdEMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakMseUJBQW9CLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUVuSSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDO2dCQUVwRCxRQUFRLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDckIsS0FBSyxnQkFBZ0I7d0JBQ25CLE9BQU8sS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNGLEtBQUssYUFBYTt3QkFDaEIsT0FBTyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4QyxLQUFLLFFBQVE7d0JBQ1gsT0FBTyxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDN0M7d0JBQ0UsT0FBTyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQztRQUVtQixpQkFBWSxHQUFHO1lBQ25DLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDdEQseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQztZQUM3RSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7WUFDOUQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7WUFDbEUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7WUFDbEUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO1lBQ2hFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO1lBQ3BFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDO1lBQ3hFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUM5RCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztTQUNyRSxDQUFDO1FBaUVPLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLFlBQVksQ0FBQyxlQUFlLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7S0FnR0o7SUFqS0MsUUFBUTtRQUNOLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWdELEVBQUUsT0FBb0I7UUFDdEYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFpQyxFQUFFLE9BQW9CO1FBQ3hFLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQW1DLEVBQUUsT0FBYztRQUN0RSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUUsSUFBSSxhQUFhO1lBQUUsYUFBYSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUVoRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWdDLEVBQUUsT0FBb0I7UUFDdEUsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDekMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BFLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFNRCxrQkFBa0IsQ0FBQyxPQUF5QztRQUMxRCxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDO1FBQzdCLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckYsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFzQjtRQUM5QixRQUFRLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQixLQUFLLGdCQUFnQjtnQkFDbkIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3JFLEtBQUssYUFBYTtnQkFDaEIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3JFO2dCQUNFLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQXNCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzNFLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBb0I7UUFDM0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDeEQsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPO2dCQUFFLE9BQU87WUFFckMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sWUFBWSxHQUFHLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNyRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxPQUFjO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDWixNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUM7YUFDdEQsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sVUFBVSxHQUFnQztZQUM5QyxPQUFPLEVBQUUsRUFBRTtZQUNYLE1BQU0sRUFBRSxFQUFFO1lBQ1YsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU87Z0JBQUUsT0FBTztZQUVyQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFFM0MsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssT0FBTztvQkFDVixVQUFVLENBQUMsT0FBTyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ2pDLE1BQU07Z0JBQ1IsS0FBSyxRQUFRO29CQUNYLFVBQVUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDaEMsTUFBTTtnQkFDUixLQUFLLGdCQUFnQjtvQkFDbkIsVUFBVSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDeEYsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxVQUF1QztRQUMvRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxSCxDQUFDOytHQXpOVSxzQkFBc0I7bUdBQXRCLHNCQUFzQixpbkVDNUNuQyw0cE9BMEtBLHVvSURwSVksWUFBWSxtU0FBRSxtQkFBbUI7OzRGQU1oQyxzQkFBc0I7a0JBUmxDLFNBQVM7K0JBQ0UsdUJBQXVCLFdBQ3hCLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLGNBQ2hDLElBQUksV0FDUCxDQUFDLHNCQUFzQixDQUFDOzhCQWdEWCxZQUFZO3NCQUFqQyxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgT25Jbml0LFxyXG4gIFBMQVRGT1JNX0lELFxyXG4gIGlucHV0LFxyXG4gIG1vZGVsLFxyXG4gIG91dHB1dCxcclxuICBpbmplY3QsXHJcbiAgY29tcHV0ZWQsXHJcbiAgc2lnbmFsLFxyXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDdXJhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgTWVkaWFRdWVyaWVzIH0gZnJvbSAnLi4vLi4vLi4vaGVscGVycy9tZWRpYVF1ZXJpZXMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFdmVudCwgRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbHRlcnMvZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJBY3Rpb24sIEZpbHRlckNvbnRyb2xWYWx1ZSwgRmlsdGVyU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWx0ZXJzL2ZpbHRlci1zZWN0aW9uLnR5cGUnO1xyXG5pbXBvcnQgeyBDdXJhSW5wdXRUZXh0Q3VzdG9tRXZlbnQsIEN1cmFTZWxlY3RDdXN0b21FdmVudCwgQ3VyYUNoZWNrYm94Q3VzdG9tRXZlbnQsIEN1cmFSYWRpb0N1c3RvbUV2ZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS9kaXN0L3R5cGVzL2NvbXBvbmVudHMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RTZWxlY3RlZEV2ZW50IHtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tib3hDaGFuZ2VFdmVudCB7XHJcbiAgdmFsdWU6IHN0cmluZztcclxuICBjaGVja2VkOiBib29sZWFuO1xyXG4gIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmFkaW9DaGFuZ2VFdmVudCB7XHJcbiAgdmFsdWU6IHN0cmluZztcclxuICBjaGVja2VkOiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Jkc2l0ZS1maWx0ZXItZ2VuZXJpYycsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1nZW5lcmljLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItZ2VuZXJpYy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyR2VuZXJpY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJhQXBpU2VydmljZSA9IGluamVjdChDdXJhU2VydmljZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XHJcblxyXG4gIHJlYWRvbmx5IGZpbHRlckNoYW5nZSA9IG91dHB1dDxGaWx0ZXJFdmVudD4oKTtcclxuICByZWFkb25seSBjbG9zZU1vZGFsID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgb3Blbk1vYmlsZUZpbHRlciA9IG91dHB1dDx2b2lkPigpO1xyXG5cclxuICByZWFkb25seSB3aXRoQ29udGFpbmVyU3R5bGUgPSBpbnB1dCh0cnVlKTtcclxuICByZWFkb25seSBzaG93Q2xlYXJCdXR0b24gPSBpbnB1dCh0cnVlKTtcclxuICByZWFkb25seSBzaG93QXBwbHlCdXR0b24gPSBpbnB1dCh0cnVlKTtcclxuICByZWFkb25seSBzaG93Q2xvc2VCdXR0b24gPSBpbnB1dChmYWxzZSk7XHJcbiAgcmVhZG9ubHkgZGlzYWJsZUJ1dHRvbnMgPSBpbnB1dChmYWxzZSk7XHJcbiAgcmVhZG9ubHkgc2hvd0JhZGdlID0gaW5wdXQodHJ1ZSk7XHJcbiAgcmVhZG9ubHkgc2hvd1RvZ2dsZUljb24gPSBpbnB1dCh0cnVlKTtcclxuICBpc0ZpbHRlck9wZW4gPSBtb2RlbCh0cnVlKTtcclxuICByZWFkb25seSBtb2JpbGVCZWhhdmlvciA9IGlucHV0KGZhbHNlKTtcclxuICByZWFkb25seSBmb3JjZUNvbGxhcHNlZCA9IGlucHV0KGZhbHNlKTtcclxuICByZWFkb25seSBlbWl0T25SZXNldCA9IGlucHV0KGZhbHNlKTtcclxuICByZWFkb25seSB0ZXh0VGl0bGUgPSBpbnB1dCgnRmlsdHJhciBwb3InKTtcclxuICByZWFkb25seSBzZWN0aW9ucyA9IGlucHV0PEZpbHRlclNlY3Rpb25bXT4oW10pO1xyXG5cclxuICByZWFkb25seSB3aW5kb3dXaWR0aCA9IHNpZ25hbCgwKTtcclxuXHJcbiAgc2VsZWN0ZWRGaWx0ZXJzQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWN0aW9ucygpLnJlZHVjZSgoY291bnQsIHNlY3Rpb24pID0+IHtcclxuICAgICAgaWYgKChzZWN0aW9uLnR5cGUgIT09ICdjdXN0b20nICYmICFzZWN0aW9uLmNvbmZpZz8uY29udHJvbCkgfHwgKHNlY3Rpb24udHlwZSA9PT0gJ2N1c3RvbScgJiYgIXNlY3Rpb24uY29uZmlnPy5jb3VudCkpIHJldHVybiBjb3VudDtcclxuXHJcbiAgICAgIGNvbnN0IHZhbHVlID0gc2VjdGlvbi5jb25maWcuY29udHJvbD8udmFsdWUgfHwgbnVsbDtcclxuXHJcbiAgICAgIHN3aXRjaCAoc2VjdGlvbi50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnY2hlY2tib3gtZ3JvdXAnOlxyXG4gICAgICAgICAgcmV0dXJuIGNvdW50ICsgKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuZmlsdGVyKChpdGVtKSA9PiBpdGVtPy5jaGVja2VkKS5sZW5ndGggOiAwKTtcclxuICAgICAgICBjYXNlICdyYWRpby1ncm91cCc6XHJcbiAgICAgICAgICByZXR1cm4gY291bnQgKyAodmFsdWU/LnZhbHVlID8gMSA6IDApO1xyXG4gICAgICAgIGNhc2UgJ2N1c3RvbSc6XHJcbiAgICAgICAgICByZXR1cm4gY291bnQgKyAoc2VjdGlvbi5jb25maWcuY291bnQgfHwgMCk7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiBjb3VudCArICh2YWx1ZSA/IDEgOiAwKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfSk7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUnKSBzdHlsZUJpbmRpbmcgPSB7XHJcbiAgICAnLS1mb250LWZhbWlseSc6IHRoaXMuY3VyYUFwaVNlcnZpY2UuZ2V0Rm9udEZhbWlseSgnJyksXHJcbiAgICAnLS1uZXV0cmFsLW9wYWNpdHktYmxhY2snOiB0aGlzLmN1cmFBcGlTZXJ2aWNlLmdldENvbG9yKCduZXV0cmFsLWJsYWNrJywgMC4yKSxcclxuICAgICctLW5ldXRyYWwtZGFyayc6IHRoaXMuY3VyYUFwaVNlcnZpY2UuZ2V0Q29sb3IoJ25ldXRyYWwtZGFyaycpLFxyXG4gICAgJy0tbmV1dHJhbC1kYXJrZXInOiB0aGlzLmN1cmFBcGlTZXJ2aWNlLmdldENvbG9yKCduZXV0cmFsLWRhcmtlcicpLFxyXG4gICAgJy0tbmV1dHJhbC1tZWRpdW0nOiB0aGlzLmN1cmFBcGlTZXJ2aWNlLmdldENvbG9yKCduZXV0cmFsLW1lZGl1bScpLFxyXG4gICAgJy0tbmV1dHJhbC1saWdodCc6IHRoaXMuY3VyYUFwaVNlcnZpY2UuZ2V0Q29sb3IoJ25ldXRyYWwtbGlnaHQnKSxcclxuICAgICctLW5ldXRyYWwtbGlnaHRlcic6IHRoaXMuY3VyYUFwaVNlcnZpY2UuZ2V0Q29sb3IoJ25ldXRyYWwtbGlnaHRlcicpLFxyXG4gICAgJy0tbmV1dHJhbC1wdXJld2hpdGUnOiB0aGlzLmN1cmFBcGlTZXJ2aWNlLmdldENvbG9yKCduZXV0cmFsLXB1cmV3aGl0ZScpLFxyXG4gICAgJy0tcHJpbWFyeS1iYXNlJzogdGhpcy5jdXJhQXBpU2VydmljZS5nZXRDb2xvcigncHJpbWFyeS1iYXNlJyksXHJcbiAgICAnLS1wcmltYXJ5LWxpZ2h0ZXInOiB0aGlzLmN1cmFBcGlTZXJ2aWNlLmdldENvbG9yKCdwcmltYXJ5LWxpZ2h0ZXInKSxcclxuICB9O1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIHRoaXMud2luZG93V2lkdGguc2V0KHdpbmRvdy5pbm5lcldpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZUNvbGxhcHNlZCgpICYmIHRoaXMuaXNNb2JpbGUoKSkge1xyXG4gICAgICB0aGlzLmlzRmlsdGVyT3Blbi5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQ6IEN1cmFJbnB1dFRleHRDdXN0b21FdmVudDxzdHJpbmcgfCBudW1iZXI+LCBjb250cm9sOiBGb3JtQ29udHJvbCk6IHZvaWQge1xyXG4gICAgY29udHJvbC5zZXRWYWx1ZShldmVudC50YXJnZXQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VsZWN0Q2hhbmdlKGV2ZW50OiBDdXJhU2VsZWN0Q3VzdG9tRXZlbnQ8YW55PiwgY29udHJvbDogRm9ybUNvbnRyb2wpOiB2b2lkIHtcclxuICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNoZWNrYm94Q2hhbmdlKGV2ZW50OiBDdXJhQ2hlY2tib3hDdXN0b21FdmVudDxhbnk+LCBvcHRpb25zOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hhbmdlZE9wdGlvbiA9IG9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQudmFsdWUgPT09IGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICBpZiAoY2hhbmdlZE9wdGlvbikgY2hhbmdlZE9wdGlvbi5jaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcblxyXG4gICAgdGhpcy51cGRhdGVDaGVja2JveEdyb3VwKG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlUmFkaW9DaGFuZ2UoZXZlbnQ6IEN1cmFSYWRpb0N1c3RvbUV2ZW50PGFueT4sIGNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgY29udHJvbC5zZXRWYWx1ZShjb250cm9sLnZhbHVlPy52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZSA/IG51bGwgOiB7IHZhbHVlOiBzZWxlY3RlZFZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbWl0RmlsdGVyQ2hhbmdlKCdmaWx0ZXInKTtcclxuICAgIGlmICh0aGlzLm1vYmlsZUJlaGF2aW9yKCkgfHwgdGhpcy5zaG93Q2xvc2VCdXR0b24oKSkgdGhpcy5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2V0QWxsQ29udHJvbHMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5lbWl0T25SZXNldCgpKSB7XHJcbiAgICAgIHRoaXMuZW1pdEZpbHRlckNoYW5nZSgncmVzZXQnKTtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlTW9kYWwuZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUZpbHRlcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vYmlsZUJlaGF2aW9yKCkgJiYgdGhpcy5pc01vYmlsZSgpKSB7XHJcbiAgICAgIHRoaXMub3Blbk1vYmlsZUZpbHRlci5lbWl0KHVuZGVmaW5lZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzRmlsdGVyT3Blbi5zZXQoIXRoaXMuaXNGaWx0ZXJPcGVuKCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgaGFzU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzQ291bnQoKSA+IDA7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSBpc01vYmlsZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLndpbmRvd1dpZHRoKCkgPD0gTWVkaWFRdWVyaWVzLnNtYWxsQnJlYWtwb2ludDtcclxuICB9KTtcclxuXHJcbiAgZ2V0UmFkaW9Hcm91cFZhbHVlKGNvbnRyb2w/OiBGb3JtQ29udHJvbDxGaWx0ZXJDb250cm9sVmFsdWU+KTogYW55IHtcclxuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbD8udmFsdWU7XHJcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAndmFsdWUnIGluIHZhbHVlID8gdmFsdWUudmFsdWUgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgaGFzU2Nyb2xsKHNlY3Rpb246IEZpbHRlclNlY3Rpb24pOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAoc2VjdGlvbi50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2NoZWNrYm94LWdyb3VwJzpcclxuICAgICAgICByZXR1cm4gc2VjdGlvbi5jb25maWcub3B0aW9ucyAmJiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zLmxlbmd0aCA+IDY7XHJcbiAgICAgIGNhc2UgJ3JhZGlvLWdyb3VwJzpcclxuICAgICAgICByZXR1cm4gc2VjdGlvbi5jb25maWcub3B0aW9ucyAmJiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zLmxlbmd0aCA+IDY7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VjdGlvbkNsYXNzKHNlY3Rpb246IEZpbHRlclNlY3Rpb24pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzU2Nyb2xsKHNlY3Rpb24pID8gJ3Njcm9sbGFibGUnIDogJyc7XHJcbiAgfVxyXG5cclxuICBzaG91bGRIYW5kbGVNb2JpbGVDbGljaygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vYmlsZUJlaGF2aW9yKCkgJiYgdGhpcy5pc01vYmlsZSgpICYmIHRoaXMuZm9yY2VDb2xsYXBzZWQoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU1vYmlsZUNsaWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlTW9iaWxlQ2xpY2soKSkge1xyXG4gICAgICB0aGlzLm9wZW5Nb2JpbGVGaWx0ZXIuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0RmlsdGVyQ2hhbmdlKGFjdGlvbjogRmlsdGVyQWN0aW9uKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWx0ZXJEYXRhID0gdGhpcy5idWlsZEZpbHRlckRhdGEoKTtcclxuICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLmlzRmlsdGVyRGF0YUVtcHR5KGZpbHRlckRhdGEpO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQoe1xyXG4gICAgICBkYXRhOiB0aGlzLmVtaXRPblJlc2V0KCkgfHwgIWlzRW1wdHkgPyBmaWx0ZXJEYXRhIDogbnVsbCxcclxuICAgICAgYWN0aW9uOiBhY3Rpb24sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRBbGxDb250cm9scygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VjdGlvbnMoKS5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XHJcbiAgICAgIGlmICghc2VjdGlvbi5jb25maWc/LmNvbnRyb2wpIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChzZWN0aW9uLnR5cGUgPT09ICdjaGVja2JveC1ncm91cCcpIHtcclxuICAgICAgICBjb25zdCByZXNldE9wdGlvbnMgPSBzZWN0aW9uPy5jb25maWc/Lm9wdGlvbnM/Lm1hcCgob3B0aW9uOiBhbnkpID0+ICh7IC4uLm9wdGlvbiwgY2hlY2tlZDogZmFsc2UgfSkpIHx8IFtdO1xyXG4gICAgICAgIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMgPSBbLi4ucmVzZXRPcHRpb25zXTtcclxuICAgICAgICBzZWN0aW9uLmNvbmZpZy5jb250cm9sLnNldFZhbHVlKFsuLi5yZXNldE9wdGlvbnNdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWN0aW9uLmNvbmZpZy5jb250cm9sLnJlc2V0KCcnLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDaGVja2JveEdyb3VwKG9wdGlvbnM6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlY3Rpb25zKClcclxuICAgICAgLmZpbHRlcigoc2VjdGlvbikgPT4gc2VjdGlvbi50eXBlID09PSAnY2hlY2tib3gtZ3JvdXAnKVxyXG4gICAgICAuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xyXG4gICAgICAgIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMgPSBbLi4ub3B0aW9uc107XHJcbiAgICAgICAgc2VjdGlvbi5jb25maWcuY29udHJvbC5zZXRWYWx1ZShbLi4ub3B0aW9uc10pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRGaWx0ZXJEYXRhKCk6IEZpbHRlclBsYW5vc0NvbnZlbmlvc0NoYW5nZSB8IGFueSB7XHJcbiAgICBjb25zdCBmaWx0ZXJEYXRhOiBGaWx0ZXJQbGFub3NDb252ZW5pb3NDaGFuZ2UgPSB7XHJcbiAgICAgIHVuaWRhZGU6ICcnLFxyXG4gICAgICBlc3RhZG86ICcnLFxyXG4gICAgICBjb2JlcnR1cmE6IFtdLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlY3Rpb25zKCkuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xyXG4gICAgICBpZiAoIXNlY3Rpb24uY29uZmlnPy5jb250cm9sKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCB2YWx1ZSA9IHNlY3Rpb24uY29uZmlnLmNvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgICBzd2l0Y2ggKHNlY3Rpb24udHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ2lucHV0JzpcclxuICAgICAgICAgIGZpbHRlckRhdGEudW5pZGFkZSA9IHZhbHVlIHx8ICcnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnc2VsZWN0JzpcclxuICAgICAgICAgIGZpbHRlckRhdGEuZXN0YWRvID0gdmFsdWUgfHwgJyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdjaGVja2JveC1ncm91cCc6XHJcbiAgICAgICAgICBmaWx0ZXJEYXRhLmNvYmVydHVyYSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmNoZWNrZWQpIDogW107XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZpbHRlckRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRmlsdGVyRGF0YUVtcHR5KGZpbHRlckRhdGE6IEZpbHRlclBsYW5vc0NvbnZlbmlvc0NoYW5nZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmlsdGVyRGF0YSkuZXZlcnkoKHZhbCkgPT4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gJycgfHwgKEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID09PSAwKSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cImZpbHRlci1nZW5lcmljXCJcclxuICBbbmdDbGFzc109XCJ7ICdjb250YWluZXItc3R5bGUnOiB3aXRoQ29udGFpbmVyU3R5bGUoKSwgJ2NsaWNrYWJsZS1tb2JpbGUnOiBzaG91bGRIYW5kbGVNb2JpbGVDbGljaygpIH1cIlxyXG4gIGFyaWEtbGFiZWw9XCJGaWx0cm9zXCJcclxuICAoY2xpY2spPVwiaGFuZGxlTW9iaWxlQ2xpY2soKVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWhlYWRlci1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ICduby1wYWRkaW5nJzogIWlzRmlsdGVyT3BlbigpLCBoaWRkZW46ICFpc0ZpbHRlck9wZW4oKSB9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXRpdGxlLXdyYXBwZXJcIj5cclxuICAgICAgPGN1cmEtbGFiZWwgc2l6ZT1cIm1lZGl1bVwiIGxldmVsPVwiNFwiIGNvbG9yPVwibmV1dHJhbC1ibGFja1wiIHdlaWdodD1cInJlZ3VsYXJcIiBtYXJnaW4tYmxvY2s9XCIwXCIgbGluZS1oZWlnaHQ9XCIxNnB4XCI+XHJcbiAgICAgICAge3sgdGV4dFRpdGxlKCkgfX1cclxuICAgICAgPC9jdXJhLWxhYmVsPlxyXG5cclxuICAgICAgQGlmIChzaG93QmFkZ2UoKSkge1xyXG4gICAgICAgIDxjdXJhLWJhZGdlLWNvdW50ZXJcclxuICAgICAgICAgIFt0eXBlXT1cIidzb2xpZCdcIlxyXG4gICAgICAgICAgW2NvbG9yXT1cImhhc1NlbGVjdGlvbigpID8gJ3ByaW1hcnknIDogJ25ldXRyYWwnXCJcclxuICAgICAgICAgIFtudW1iZXJdPVwic2VsZWN0ZWRGaWx0ZXJzQ291bnQoKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci1iYWRnZVwiXHJcbiAgICAgICAgPjwvY3VyYS1iYWRnZS1jb3VudGVyPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBAaWYgKHNob3dUb2dnbGVJY29uKCkpIHtcclxuICAgICAgPGN1cmEtYnV0dG9uLXRyYW5zcGFyZW50XHJcbiAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICBmb250LWNvbG9yPVwiZGFya1wiXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICB0ZXh0LWFsaWduPVwiY2VudGVyXCJcclxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKClcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNGaWx0ZXJPcGVuKClcIlxyXG4gICAgICAgIFthcmlhLWxhYmVsXT1cImlzRmlsdGVyT3BlbigpID8gJ0ZlY2hhciBmaWx0cm9zJyA6ICdBYnJpciBmaWx0cm9zJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8Y3VyYS1pY29uIFtuYW1lXT1cImlzRmlsdGVyT3BlbigpID8gJ3VwJyA6ICdkb3duJ1wiIHNpemU9XCIxNlwiIGNsYXNzPVwiZmlsdGVyLWljb25cIiBjb2xvcj1cInByaW1hcnktZGFya1wiPjwvY3VyYS1pY29uPlxyXG4gICAgICA8L2N1cmEtYnV0dG9uLXRyYW5zcGFyZW50PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRlbnRcIiBbY2xhc3MuaGlkZGVuXT1cIiFpc0ZpbHRlck9wZW4oKSB8fCAoZm9yY2VDb2xsYXBzZWQoKSAmJiBpc01vYmlsZSgpKVwiPlxyXG4gICAgQGZvciAoc2VjdGlvbiBvZiBzZWN0aW9ucygpOyB0cmFjayBzZWN0aW9uLnR5cGUpIHtcclxuICAgICAgQGlmIChzZWN0aW9uLnZpc2libGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1zZWN0aW9uXCI+XHJcbiAgICAgICAgICBAc3dpdGNoIChzZWN0aW9uLnR5cGUpIHtcclxuICAgICAgICAgICAgQGNhc2UgKCdpbnB1dCcpIHtcclxuICAgICAgICAgICAgICA8Y3VyYS1pbnB1dC10ZXh0XHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VjdGlvbi5jb25maWcucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2VjdGlvbi5jb25maWcubmFtZSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICBbaWNvbi1uYW1lXT1cInNlY3Rpb24uY29uZmlnLmljb25OYW1lIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWN0aW9uLmNvbmZpZy5jb250cm9sLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQsIHNlY3Rpb24uY29uZmlnLmNvbnRyb2wpXCJcclxuICAgICAgICAgICAgICA+PC9jdXJhLWlucHV0LXRleHQ+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGNhc2UgKCdzZWxlY3QnKSB7XHJcbiAgICAgICAgICAgICAgPGN1cmEtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2VjdGlvbi5jb25maWcubGFiZWwgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlY3Rpb24uY29uZmlnLnBsYWNlaG9sZGVyIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWN0aW9uLmNvbmZpZy5jb250cm9sLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJoYW5kbGVTZWxlY3RDaGFuZ2UoJGV2ZW50LCBzZWN0aW9uLmNvbmZpZy5jb250cm9sKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQGlmIChzZWN0aW9uLmNvbmZpZy5pbmNsdWRlRGVmYXVsdE9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICA8Y3VyYS1zZWxlY3Qtb3B0aW9uIFt2YWx1ZV09XCInJ1wiPnt7IHNlY3Rpb24uY29uZmlnLmRlZmF1bHRPcHRpb25UZXh0IHx8ICdGYcOnYSBhIHN1YSBTZWxlw6fDo28nIH19PC9jdXJhLXNlbGVjdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2Ygc2VjdGlvbi5jb25maWcub3B0aW9ucyB8fCBbXTsgdHJhY2sgb3B0aW9uPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICA8Y3VyYS1zZWxlY3Qtb3B0aW9uIFt2YWx1ZV09XCJvcHRpb24/LnZhbHVlXCI+e3sgb3B0aW9uPy5sYWJlbCB9fTwvY3VyYS1zZWxlY3Qtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvY3VyYS1zZWxlY3Q+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGNhc2UgKCdjaGVja2JveC1ncm91cCcpIHtcclxuICAgICAgICAgICAgICBAaWYgKHNlY3Rpb24uY29uZmlnLnRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8Y3VyYS1pY29uIG5hbWU9XCJmaWx0ZXJcIiBzaXplPVwiMjBcIiBjb2xvcj1cImluZm8tZGFya1wiPjwvY3VyYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8Y3VyYS1oZWFkaW5nIHNpemU9XCJ4c21hbGxcIiBbbGV2ZWxdPVwiNVwiIHdlaWdodD1cImJvbGRcIiBjb2xvcj1cIm5ldXRyYWwtYmxhY2tcIiBtYXJnaW4tYmxvY2s9XCIwXCIgbGluZS1oZWlnaHQ9XCIxNnB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgc2VjdGlvbi5jb25maWcudGl0bGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9jdXJhLWhlYWRpbmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIEBpZiAoc2VjdGlvbi5jb25maWcuc3VidGl0bGUpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItc3VidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGN1cmEtaGVhZGluZyBzaXplPVwieHNtYWxsXCIgd2VpZ2h0PVwiYm9sZFwiIGNvbG9yPVwibmV1dHJhbC1ibGFja1wiIG1hcmdpbi1ibG9jaz1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLmNvbmZpZy5zdWJ0aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2N1cmEtaGVhZGluZz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgQGlmIChzZWN0aW9uLmNvbmZpZy5kZXNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8Y3VyYS1wYXJhZ3JhcGggc2l6ZT1cInhzbWFsbFwiIGNvbG9yPVwibmV1dHJhbC1kYXJrXCIgbWFyZ2luLWJsb2NrPVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHNlY3Rpb24uY29uZmlnLmRlc2NyaXB0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvY3VyYS1wYXJhZ3JhcGg+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY2hlY2tib3hlc1wiIFtjbGFzcy5zY3JvbGxhYmxlXT1cImhhc1Njcm9sbChzZWN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMgfHwgW107IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICA8Y3VyYS1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uLWNvbG9yPVwibGlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm9wdGlvbi5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwib3B0aW9uLmNoZWNrZWQgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbmNoYW5nZSk9XCJoYW5kbGVDaGVja2JveENoYW5nZSgkZXZlbnQsIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMpXCJcclxuICAgICAgICAgICAgICAgICAgPjwvY3VyYS1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAY2FzZSAoJ3JhZGlvLWdyb3VwJykge1xyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcmFkaW9zXCIgW2NsYXNzLnNjcm9sbGFibGVdPVwiaGFzU2Nyb2xsKHNlY3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2Ygc2VjdGlvbi5jb25maWcub3B0aW9ucyB8fCBbXTsgdHJhY2sgb3B0aW9uPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICA8Y3VyYS1yYWRpb1xyXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInNlY3Rpb24uY29uZmlnLm5hbWUgfHwgJ3JhZGlvLWdyb3VwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0UmFkaW9Hcm91cFZhbHVlKHNlY3Rpb24uY29uZmlnLmNvbnRyb2wpID09PSBvcHRpb24udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbmNoYW5nZSk9XCJoYW5kbGVSYWRpb0NoYW5nZSgkZXZlbnQsIHNlY3Rpb24uY29uZmlnLmNvbnRyb2wpXCJcclxuICAgICAgICAgICAgICAgICAgPjwvY3VyYS1yYWRpbz5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAY2FzZSAoJ2N1c3RvbScpIHtcclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VjdGlvbi5jb25maWcudGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmaWx0ZXItYWN0aW9uc1wiIFtjbGFzcy5oaWRkZW5dPVwiIWlzRmlsdGVyT3BlbigpIHx8IChmb3JjZUNvbGxhcHNlZCgpICYmIGlzTW9iaWxlKCkpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWFpbi1hY3Rpb25zXCI+XHJcbiAgICAgIEBpZiAoc2hvd0NsZWFyQnV0dG9uKCkpIHtcclxuICAgICAgICA8Y3VyYS1idXR0b24tdHJhbnNwYXJlbnRcclxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICBmb250LWNvbG9yPVwiZGFya1wiXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdGV4dC1hbGlnbj1cImNlbnRlclwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUJ1dHRvbnMoKSB8fCAhaGFzU2VsZWN0aW9uKClcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInJlc2V0KClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuPkxpbXBhciB0b2RvcyBvcyBmaWx0cm9zPC9zcGFuPlxyXG4gICAgICAgIDwvY3VyYS1idXR0b24tdHJhbnNwYXJlbnQ+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIEBpZiAoc2hvd0FwcGx5QnV0dG9uKCkpIHtcclxuICAgICAgICA8Y3VyYS1idXR0b25cclxuICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgZm9udC1jb2xvcj1cImxpZ2h0XCJcclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICB0ZXh0LWFsaWduPVwiY2VudGVyXCJcclxuICAgICAgICAgIChjbGljayk9XCJmaWx0ZXIoKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUJ1dHRvbnMoKSB8fCAhaGFzU2VsZWN0aW9uKClcIlxyXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItYnV0dG9uXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBGaWx0cmFyXHJcbiAgICAgICAgPC9jdXJhLWJ1dHRvbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgQGlmIChzaG93Q2xvc2VCdXR0b24oKSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlci1zdHJvbmdcIj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWFjdGlvbi13cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWFjdGlvblwiIChjbGljayk9XCJjbG9zZSgpXCI+XHJcbiAgICAgICAgICA8Y3VyYS1pY29uIG5hbWU9XCJjbG9zZVwiIGNvbG9yPVwiZXJyb3ItZGFya1wiIHNpemU9XCJzbWFsbFwiPjwvY3VyYS1pY29uPlxyXG4gICAgICAgICAgPGN1cmEtYnV0dG9uLXRyYW5zcGFyZW50IHR5cGU9XCJidXR0b25cIiBjb2xvcj1cImVycm9yXCIgdGFyZ2V0PVwiX3NlbGZcIj4gRmVjaGFyIDwvY3VyYS1idXR0b24tdHJhbnNwYXJlbnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|