cps-ui-kit 0.165.0 → 17.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +824 -0
- package/esm2022/lib/components/cps-button/cps-button.component.mjs +190 -0
- package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +235 -0
- package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +149 -0
- package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +94 -0
- package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +382 -0
- package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +209 -0
- package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +138 -0
- package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +193 -0
- package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +61 -0
- package/esm2022/lib/components/cps-input/cps-input.component.mjs +386 -0
- package/{esm2020 → esm2022}/lib/components/cps-loader/cps-loader.component.mjs +5 -5
- package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +552 -0
- package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +114 -0
- package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +30 -0
- package/{esm2020 → esm2022}/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +7 -7
- package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +55 -0
- package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +158 -0
- package/esm2022/lib/components/cps-select/cps-select.component.mjs +615 -0
- package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +110 -0
- package/{esm2020 → esm2022}/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +4 -4
- package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +303 -0
- package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +79 -0
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +408 -0
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +149 -0
- package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +88 -0
- package/esm2022/lib/components/cps-table/cps-table.component.mjs +941 -0
- package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +181 -0
- package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +5 -5
- package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +220 -0
- package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +136 -0
- package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +291 -0
- package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +351 -0
- package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +251 -0
- package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +87 -0
- package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +1196 -0
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +5 -5
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +43 -0
- package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +354 -0
- package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +619 -0
- package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +257 -0
- package/{esm2020 → esm2022}/lib/pipes/internal/check-option-selected.pipe.mjs +4 -4
- package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +25 -0
- package/{esm2020 → esm2022}/lib/pipes/internal/label-by-value.pipe.mjs +4 -4
- package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +99 -0
- package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +5 -5
- package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +470 -0
- package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +5 -5
- package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +3 -0
- package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +126 -0
- package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +91 -0
- package/{esm2020 → esm2022}/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +23 -23
- package/esm2022/lib/utils/colors-utils.mjs +57 -0
- package/esm2022/lib/utils/internal/size-utils.mjs +24 -0
- package/{esm2020 → esm2022}/public-api.mjs +2 -2
- package/{fesm2020 → fesm2022}/cps-ui-kit.mjs +481 -391
- package/fesm2022/cps-ui-kit.mjs.map +1 -0
- package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
- package/lib/components/cps-button/cps-button.component.d.ts +1 -1
- package/lib/components/cps-button-toggle/cps-button-toggle.component.d.ts +2 -2
- package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +2 -2
- package/lib/components/cps-chip/cps-chip.component.d.ts +1 -1
- package/lib/components/cps-datepicker/cps-datepicker.component.d.ts +2 -2
- package/lib/components/cps-expansion-panel/cps-expansion-panel.component.d.ts +1 -1
- package/lib/components/cps-file-upload/cps-file-upload.component.d.ts +1 -1
- package/lib/components/cps-icon/cps-icon.component.d.ts +1 -1
- package/lib/components/cps-info-circle/cps-info-circle.component.d.ts +2 -2
- package/lib/components/cps-input/cps-input.component.d.ts +2 -2
- package/lib/components/cps-loader/cps-loader.component.d.ts +1 -1
- package/lib/components/cps-menu/cps-menu.component.d.ts +1 -1
- package/lib/components/cps-paginator/cps-paginator.component.d.ts +1 -1
- package/lib/components/cps-progress-circular/cps-progress-circular.component.d.ts +1 -1
- package/lib/components/cps-progress-linear/cps-progress-linear.component.d.ts +1 -1
- package/lib/components/cps-radio-group/cps-radio/cps-radio.component.d.ts +1 -1
- package/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.d.ts +1 -1
- package/lib/components/cps-radio-group/cps-radio-group.component.d.ts +2 -2
- package/lib/components/cps-select/cps-select.component.d.ts +2 -2
- package/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.d.ts +1 -1
- package/lib/components/cps-tab-group/cps-tab/cps-tab.component.d.ts +1 -1
- package/lib/components/cps-tab-group/cps-tab-group.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.d.ts +1 -1
- package/lib/components/cps-table/cps-table.component.d.ts +1 -1
- package/lib/components/cps-table/directives/cps-table-column-filter.directive.d.ts +1 -1
- package/lib/components/cps-table/directives/cps-table-column-sortable.directive.d.ts +1 -1
- package/lib/components/cps-table/directives/cps-table-row-selectable.directive.d.ts +1 -1
- package/lib/components/cps-tag/cps-tag.component.d.ts +1 -1
- package/lib/components/cps-textarea/cps-textarea.component.d.ts +2 -2
- package/lib/components/cps-timepicker/cps-timepicker.component.d.ts +2 -2
- package/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.d.ts +1 -1
- package/lib/components/cps-tree-select/cps-tree-select.component.d.ts +1 -1
- package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +4 -4
- package/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.d.ts +1 -1
- package/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.d.ts +1 -1
- package/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.d.ts +1 -1
- package/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.d.ts +1 -1
- package/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.d.ts +2 -2
- package/lib/directives/{cps-tooltip.directive.d.ts → cps-tooltip/cps-tooltip.directive.d.ts} +2 -2
- package/lib/services/cps-dialog/cps-dialog.service.d.ts +13 -0
- package/lib/services/cps-dialog/utils/cps-dialog-config.d.ts +1 -1
- package/lib/services/cps-notification/cps-notification.service.d.ts +32 -0
- package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +1 -1
- package/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.d.ts +1 -1
- package/package.json +12 -18
- package/public-api.d.ts +1 -1
- package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -824
- package/esm2020/lib/components/cps-button/cps-button.component.mjs +0 -190
- package/esm2020/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -235
- package/esm2020/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -149
- package/esm2020/lib/components/cps-chip/cps-chip.component.mjs +0 -94
- package/esm2020/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
- package/esm2020/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -209
- package/esm2020/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -138
- package/esm2020/lib/components/cps-icon/cps-icon.component.mjs +0 -193
- package/esm2020/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
- package/esm2020/lib/components/cps-input/cps-input.component.mjs +0 -386
- package/esm2020/lib/components/cps-menu/cps-menu.component.mjs +0 -552
- package/esm2020/lib/components/cps-paginator/cps-paginator.component.mjs +0 -113
- package/esm2020/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
- package/esm2020/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -55
- package/esm2020/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -158
- package/esm2020/lib/components/cps-select/cps-select.component.mjs +0 -615
- package/esm2020/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
- package/esm2020/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -299
- package/esm2020/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
- package/esm2020/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -408
- package/esm2020/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -148
- package/esm2020/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -88
- package/esm2020/lib/components/cps-table/cps-table.component.mjs +0 -940
- package/esm2020/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
- package/esm2020/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -210
- package/esm2020/lib/components/cps-tag/cps-tag.component.mjs +0 -136
- package/esm2020/lib/components/cps-textarea/cps-textarea.component.mjs +0 -291
- package/esm2020/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -351
- package/esm2020/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -250
- package/esm2020/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
- package/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1192
- package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -43
- package/esm2020/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -334
- package/esm2020/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -616
- package/esm2020/lib/directives/cps-tooltip.directive.mjs +0 -257
- package/esm2020/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
- package/esm2020/lib/services/cps-dialog/cps-dialog.service.mjs +0 -86
- package/esm2020/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
- package/esm2020/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
- package/esm2020/lib/services/cps-notification/cps-notification.service.mjs +0 -94
- package/esm2020/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -91
- package/esm2020/lib/utils/colors-utils.mjs +0 -57
- package/esm2020/lib/utils/internal/size-utils.mjs +0 -24
- package/fesm2015/cps-ui-kit.mjs +0 -12086
- package/fesm2015/cps-ui-kit.mjs.map +0 -1
- package/fesm2020/cps-ui-kit.mjs.map +0 -1
- /package/{esm2020 → esm2022}/cps-ui-kit.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/cps-table/cps-column-filter-types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -0
package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs
ADDED
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
import { animate, animation, style, transition, trigger, useAnimation } from '@angular/animations';
|
|
2
|
+
import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, PLATFORM_ID, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
4
|
+
import { SharedModule } from 'primeng/api';
|
|
5
|
+
import { DomHandler } from 'primeng/dom';
|
|
6
|
+
import { ZIndexUtils } from 'primeng/utils';
|
|
7
|
+
import { CpsDialogContentDirective } from '../../directives/cps-dialog-content.directive';
|
|
8
|
+
import { CpsButtonComponent } from '../../../../../components/cps-button/cps-button.component';
|
|
9
|
+
import { CpsInfoCircleComponent } from '../../../../../components/cps-info-circle/cps-info-circle.component';
|
|
10
|
+
import { CpsIconComponent } from '../../../../../components/cps-icon/cps-icon.component';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "../../../utils/cps-dialog-ref";
|
|
13
|
+
import * as i2 from "../../../utils/cps-dialog-config";
|
|
14
|
+
import * as i3 from "primeng/api";
|
|
15
|
+
import * as i4 from "@angular/common";
|
|
16
|
+
const showAnimation = animation([
|
|
17
|
+
style({ transform: '{{transform}}', opacity: 0 }),
|
|
18
|
+
animate('{{transition}}', style({ transform: 'none', opacity: 1 }))
|
|
19
|
+
]);
|
|
20
|
+
const hideAnimation = animation([
|
|
21
|
+
animate('{{transition}}', style({ transform: '{{transform}}', opacity: 0 }))
|
|
22
|
+
]);
|
|
23
|
+
export class CpsDialogComponent {
|
|
24
|
+
get minX() {
|
|
25
|
+
return this.config.minX ? this.config.minX : 0;
|
|
26
|
+
}
|
|
27
|
+
get minY() {
|
|
28
|
+
return this.config.minY ? this.config.minY : 0;
|
|
29
|
+
}
|
|
30
|
+
get keepInViewport() {
|
|
31
|
+
return this.config.keepInViewport || false;
|
|
32
|
+
}
|
|
33
|
+
get maximizable() {
|
|
34
|
+
return this.config.maximizable || false;
|
|
35
|
+
}
|
|
36
|
+
get draggable() {
|
|
37
|
+
return this.config.draggable || false;
|
|
38
|
+
}
|
|
39
|
+
get resizable() {
|
|
40
|
+
return this.config.resizable || false;
|
|
41
|
+
}
|
|
42
|
+
get style() {
|
|
43
|
+
return this._style;
|
|
44
|
+
}
|
|
45
|
+
set style(value) {
|
|
46
|
+
if (value) {
|
|
47
|
+
this._style = { ...value };
|
|
48
|
+
this.originalStyle = value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
get position() {
|
|
52
|
+
return this.config.position || '';
|
|
53
|
+
}
|
|
54
|
+
get parent() {
|
|
55
|
+
const domElements = Array.from(this.document.getElementsByClassName('cps-dialog'));
|
|
56
|
+
return domElements.length > 1 ? domElements.pop() : undefined;
|
|
57
|
+
}
|
|
58
|
+
// eslint-disable-next-line no-useless-constructor
|
|
59
|
+
constructor(document, platformId, _dialogRef, _cdRef, renderer, config, zone, primeNGConfig) {
|
|
60
|
+
this.document = document;
|
|
61
|
+
this.platformId = platformId;
|
|
62
|
+
this._dialogRef = _dialogRef;
|
|
63
|
+
this._cdRef = _cdRef;
|
|
64
|
+
this.renderer = renderer;
|
|
65
|
+
this.config = config;
|
|
66
|
+
this.zone = zone;
|
|
67
|
+
this.primeNGConfig = primeNGConfig;
|
|
68
|
+
this.visible = true;
|
|
69
|
+
this._style = {};
|
|
70
|
+
this.transformOptions = 'scale(0.7)';
|
|
71
|
+
this._openStateChanged = new EventEmitter();
|
|
72
|
+
this._dragStarted = new EventEmitter();
|
|
73
|
+
this._dragEnded = new EventEmitter();
|
|
74
|
+
this._resizeStarted = new EventEmitter();
|
|
75
|
+
this._resizeEnded = new EventEmitter();
|
|
76
|
+
this._maximizedStateChanged = new EventEmitter();
|
|
77
|
+
}
|
|
78
|
+
ngAfterViewInit() {
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
80
|
+
this.loadChildComponent(this.childComponentType);
|
|
81
|
+
if (this.config.maximized && this.maximizable) {
|
|
82
|
+
this.toggleMaximized();
|
|
83
|
+
}
|
|
84
|
+
this._cdRef.detectChanges();
|
|
85
|
+
}
|
|
86
|
+
loadChildComponent(componentType) {
|
|
87
|
+
const viewContainerRef = this.insertionPoint?.viewContainerRef;
|
|
88
|
+
viewContainerRef?.clear();
|
|
89
|
+
this.componentRef = viewContainerRef?.createComponent(componentType);
|
|
90
|
+
if (this._dialogRef)
|
|
91
|
+
this._dialogRef.componentInstance = this.componentRef?.instance;
|
|
92
|
+
}
|
|
93
|
+
moveOnTop() {
|
|
94
|
+
if (this.config.autoZIndex !== false) {
|
|
95
|
+
ZIndexUtils.set('modal', this.container, (this.config.baseZIndex || 0) + this.primeNGConfig.zIndex.modal);
|
|
96
|
+
this.wrapper.style.zIndex = String(parseInt(this.container.style.zIndex, 10) - 1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
onAnimationStart(event) {
|
|
100
|
+
switch (event.toState) {
|
|
101
|
+
case 'visible':
|
|
102
|
+
this.container = event.element;
|
|
103
|
+
this.wrapper = this.container.parentElement;
|
|
104
|
+
this.moveOnTop();
|
|
105
|
+
if (this.parent) {
|
|
106
|
+
this.unbindGlobalListeners();
|
|
107
|
+
}
|
|
108
|
+
this.bindGlobalListeners();
|
|
109
|
+
if (this.config.modal !== false) {
|
|
110
|
+
this.enableModality();
|
|
111
|
+
}
|
|
112
|
+
this.focus();
|
|
113
|
+
break;
|
|
114
|
+
case 'void':
|
|
115
|
+
if (this.wrapper && this.config.modal !== false) {
|
|
116
|
+
if (this.config.blurredBackground) {
|
|
117
|
+
DomHandler.addClass(this.wrapper, 'cps-dialog-blurred-overlay-leave');
|
|
118
|
+
}
|
|
119
|
+
else
|
|
120
|
+
DomHandler.addClass(this.wrapper, 'cps-dialog-overlay-leave');
|
|
121
|
+
}
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
onAnimationEnd(event) {
|
|
126
|
+
if (event.toState === 'void') {
|
|
127
|
+
this.onContainerDestroy();
|
|
128
|
+
this._dialogRef.destroy();
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
this._openStateChanged.emit();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
onContainerDestroy() {
|
|
135
|
+
this.unbindGlobalListeners();
|
|
136
|
+
if (this.container && this.config.autoZIndex !== false) {
|
|
137
|
+
ZIndexUtils.clear(this.container);
|
|
138
|
+
}
|
|
139
|
+
if (this.config.modal !== false) {
|
|
140
|
+
this.disableModality();
|
|
141
|
+
}
|
|
142
|
+
this.container = null;
|
|
143
|
+
}
|
|
144
|
+
close() {
|
|
145
|
+
if (this.config?.disableClose || this._dialogRef?.disableClose)
|
|
146
|
+
return;
|
|
147
|
+
this.visible = false;
|
|
148
|
+
this._cdRef.markForCheck();
|
|
149
|
+
}
|
|
150
|
+
hide() {
|
|
151
|
+
if (this.config?.disableClose)
|
|
152
|
+
return;
|
|
153
|
+
if (this._dialogRef) {
|
|
154
|
+
if (!this._dialogRef.disableClose)
|
|
155
|
+
this._dialogRef.close();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
enableModality() {
|
|
159
|
+
if (!this.config.disableClose) {
|
|
160
|
+
this.maskClickListener = this.renderer.listen(this.wrapper, 'mousedown', (event) => {
|
|
161
|
+
if (this.wrapper && this.wrapper.isSameNode(event.target)) {
|
|
162
|
+
this.hide();
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
if (this.config.modal !== false) {
|
|
167
|
+
DomHandler.addClass(this.document.body, 'cps-overflow-hidden');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
disableModality() {
|
|
171
|
+
if (this.wrapper) {
|
|
172
|
+
if (!this.config.disableClose) {
|
|
173
|
+
this.unbindMaskClickListener();
|
|
174
|
+
}
|
|
175
|
+
if (this.config.modal !== false) {
|
|
176
|
+
DomHandler.removeClass(this.document.body, 'cps-overflow-hidden');
|
|
177
|
+
}
|
|
178
|
+
if (!this._cdRef.destroyed) {
|
|
179
|
+
this._cdRef.detectChanges();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
focus() {
|
|
184
|
+
const focusable = DomHandler.getFocusableElements(this.container);
|
|
185
|
+
if (focusable && focusable.length > 0) {
|
|
186
|
+
this.zone.runOutsideAngular(() => {
|
|
187
|
+
setTimeout(() => focusable[0].focus(), 5);
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
toggleMaximized(value) {
|
|
192
|
+
if (!this.maximizable)
|
|
193
|
+
return;
|
|
194
|
+
if (typeof value === 'boolean') {
|
|
195
|
+
if (value === this.maximized || (!value && !this.maximized))
|
|
196
|
+
return;
|
|
197
|
+
this.maximized = value;
|
|
198
|
+
}
|
|
199
|
+
else
|
|
200
|
+
this.maximized = !this.maximized;
|
|
201
|
+
if (this.maximized) {
|
|
202
|
+
DomHandler.addClass(this.document.body, 'cps-overflow-hidden');
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
DomHandler.removeClass(this.document.body, 'cps-overflow-hidden');
|
|
206
|
+
}
|
|
207
|
+
this._maximizedStateChanged.emit(this.maximized);
|
|
208
|
+
}
|
|
209
|
+
initResize(event) {
|
|
210
|
+
if (this.resizable) {
|
|
211
|
+
if (!this.documentResizeListener) {
|
|
212
|
+
this.bindDocumentResizeListeners();
|
|
213
|
+
}
|
|
214
|
+
this.resizing = true;
|
|
215
|
+
this.lastPageX = event.pageX;
|
|
216
|
+
this.lastPageY = event.pageY;
|
|
217
|
+
DomHandler.addClass(this.document.body, 'cps-unselectable-text');
|
|
218
|
+
this._resizeStarted.emit(event);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
onResize(event) {
|
|
222
|
+
if (this.resizing) {
|
|
223
|
+
const deltaX = event.pageX - this.lastPageX;
|
|
224
|
+
const deltaY = event.pageY - this.lastPageY;
|
|
225
|
+
const containerWidth = DomHandler.getOuterWidth(this.container);
|
|
226
|
+
const containerHeight = DomHandler.getOuterHeight(this.container);
|
|
227
|
+
const contentHeight = DomHandler.getOuterHeight(this.contentViewChild.nativeElement);
|
|
228
|
+
const contentWidth = DomHandler.getOuterWidth(this.contentViewChild.nativeElement);
|
|
229
|
+
const headerHeight = this.headerViewChild
|
|
230
|
+
? DomHandler.getOuterHeight(this.headerViewChild.nativeElement)
|
|
231
|
+
: 0;
|
|
232
|
+
const headerWidth = this.headerViewChild
|
|
233
|
+
? DomHandler.getOuterWidth(this.headerViewChild.nativeElement)
|
|
234
|
+
: 0;
|
|
235
|
+
let newWidth = containerWidth + deltaX;
|
|
236
|
+
let newHeight = containerHeight + deltaY;
|
|
237
|
+
const minWidth = this.container.style.minWidth;
|
|
238
|
+
const minHeight = this.container.style.minHeight;
|
|
239
|
+
const offset = this.container.getBoundingClientRect();
|
|
240
|
+
const viewport = DomHandler.getViewport();
|
|
241
|
+
const hasBeenDragged = !parseInt(this.container.style.top) ||
|
|
242
|
+
!parseInt(this.container.style.left);
|
|
243
|
+
if (hasBeenDragged) {
|
|
244
|
+
newWidth += deltaX;
|
|
245
|
+
newHeight += deltaY;
|
|
246
|
+
}
|
|
247
|
+
if ((!minWidth || newWidth > parseInt(minWidth)) &&
|
|
248
|
+
offset.left + newWidth < viewport.width) {
|
|
249
|
+
const newContentWidth = contentWidth + newWidth - containerWidth;
|
|
250
|
+
const newHeaderWidth = headerWidth + newWidth - containerWidth;
|
|
251
|
+
this._style.width =
|
|
252
|
+
Math.max(newWidth, newContentWidth, newHeaderWidth) + 'px';
|
|
253
|
+
this.container.style.width = this._style.width;
|
|
254
|
+
}
|
|
255
|
+
if ((!minHeight || newHeight > parseInt(minHeight)) &&
|
|
256
|
+
offset.top + newHeight < viewport.height) {
|
|
257
|
+
const newContentHeight = contentHeight + newHeight - containerHeight;
|
|
258
|
+
this._style.height =
|
|
259
|
+
Math.max(newHeight, headerHeight + newContentHeight) + 'px';
|
|
260
|
+
this.container.style.height = this._style.height;
|
|
261
|
+
}
|
|
262
|
+
this.lastPageX = event.pageX;
|
|
263
|
+
this.lastPageY = event.pageY;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
resizeEnd(event) {
|
|
267
|
+
if (this.resizing) {
|
|
268
|
+
this.resizing = false;
|
|
269
|
+
DomHandler.removeClass(this.document.body, 'cps-unselectable-text');
|
|
270
|
+
this._resizeEnded.emit(event);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
initDrag(event) {
|
|
274
|
+
function isHeaderActionButton(element) {
|
|
275
|
+
while (element &&
|
|
276
|
+
!element.classList.contains('cps-dialog-header-action-button') &&
|
|
277
|
+
!element.classList.contains('cps-dialog-header-info-circle')) {
|
|
278
|
+
element = element.parentElement;
|
|
279
|
+
}
|
|
280
|
+
return !!element;
|
|
281
|
+
}
|
|
282
|
+
if (!this.draggable || this.maximized)
|
|
283
|
+
return;
|
|
284
|
+
if (isHeaderActionButton(event.target))
|
|
285
|
+
return;
|
|
286
|
+
this.dragging = true;
|
|
287
|
+
this.lastPageX = event.pageX;
|
|
288
|
+
this.lastPageY = event.pageY;
|
|
289
|
+
this.container.style.margin = '0';
|
|
290
|
+
DomHandler.addClass(this.document.body, 'cps-unselectable-text');
|
|
291
|
+
this._dragStarted.emit(event);
|
|
292
|
+
}
|
|
293
|
+
onDrag(event) {
|
|
294
|
+
if (this.dragging) {
|
|
295
|
+
const containerWidth = DomHandler.getOuterWidth(this.container);
|
|
296
|
+
const containerHeight = DomHandler.getOuterHeight(this.container);
|
|
297
|
+
const deltaX = event.pageX - this.lastPageX;
|
|
298
|
+
const deltaY = event.pageY - this.lastPageY;
|
|
299
|
+
const offset = this.container.getBoundingClientRect();
|
|
300
|
+
const leftPos = offset.left + deltaX;
|
|
301
|
+
const topPos = offset.top + deltaY;
|
|
302
|
+
const viewport = DomHandler.getViewport();
|
|
303
|
+
this.container.style.position = 'fixed';
|
|
304
|
+
if (this.keepInViewport) {
|
|
305
|
+
if (leftPos >= this.minX && leftPos + containerWidth < viewport.width) {
|
|
306
|
+
this._style.left = leftPos + 'px';
|
|
307
|
+
this.lastPageX = event.pageX;
|
|
308
|
+
this.container.style.left = leftPos + 'px';
|
|
309
|
+
}
|
|
310
|
+
if (topPos >= this.minY && topPos + containerHeight < viewport.height) {
|
|
311
|
+
this._style.top = topPos + 'px';
|
|
312
|
+
this.lastPageY = event.pageY;
|
|
313
|
+
this.container.style.top = topPos + 'px';
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
this.lastPageX = event.pageX;
|
|
318
|
+
this.container.style.left = leftPos + 'px';
|
|
319
|
+
this.lastPageY = event.pageY;
|
|
320
|
+
this.container.style.top = topPos + 'px';
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
endDrag(event) {
|
|
325
|
+
if (this.dragging) {
|
|
326
|
+
this.dragging = false;
|
|
327
|
+
DomHandler.removeClass(this.document.body, 'cps-unselectable-text');
|
|
328
|
+
this._dragEnded.emit(event);
|
|
329
|
+
this._cdRef.detectChanges();
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
resetPosition() {
|
|
333
|
+
this.container.style.position = '';
|
|
334
|
+
this.container.style.left = '';
|
|
335
|
+
this.container.style.top = '';
|
|
336
|
+
this.container.style.margin = '';
|
|
337
|
+
}
|
|
338
|
+
bindDocumentDragListener() {
|
|
339
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
340
|
+
this.zone.runOutsideAngular(() => {
|
|
341
|
+
this.documentDragListener = this.renderer.listen(this.document, 'mousemove', this.onDrag.bind(this));
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
bindDocumentDragEndListener() {
|
|
346
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
347
|
+
this.zone.runOutsideAngular(() => {
|
|
348
|
+
this.documentDragEndListener = this.renderer.listen(this.document, 'mouseup', this.endDrag.bind(this));
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
unbindDocumentDragEndListener() {
|
|
353
|
+
if (this.documentDragEndListener) {
|
|
354
|
+
this.documentDragEndListener();
|
|
355
|
+
this.documentDragListener = null;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
unbindDocumentDragListener() {
|
|
359
|
+
if (this.documentDragListener) {
|
|
360
|
+
this.documentDragListener();
|
|
361
|
+
this.documentDragListener = null;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
bindDocumentResizeListeners() {
|
|
365
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
366
|
+
this.zone.runOutsideAngular(() => {
|
|
367
|
+
this.documentResizeListener = this.renderer.listen(this.document, 'mousemove', this.onResize.bind(this));
|
|
368
|
+
this.documentResizeEndListener = this.renderer.listen(this.document, 'mouseup', this.resizeEnd.bind(this));
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
unbindDocumentResizeListeners() {
|
|
373
|
+
if (this.documentResizeListener && this.documentResizeEndListener) {
|
|
374
|
+
this.documentResizeListener();
|
|
375
|
+
this.documentResizeEndListener();
|
|
376
|
+
this.documentResizeListener = null;
|
|
377
|
+
this.documentResizeEndListener = null;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
bindGlobalListeners() {
|
|
381
|
+
if (this.config.closeOnEscape !== false &&
|
|
382
|
+
this.config.disableClose !== false) {
|
|
383
|
+
this.bindDocumentEscapeListener();
|
|
384
|
+
}
|
|
385
|
+
if (this.resizable) {
|
|
386
|
+
this.bindDocumentResizeListeners();
|
|
387
|
+
}
|
|
388
|
+
if (this.draggable) {
|
|
389
|
+
this.bindDocumentDragListener();
|
|
390
|
+
this.bindDocumentDragEndListener();
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
unbindGlobalListeners() {
|
|
394
|
+
this.unbindDocumentEscapeListener();
|
|
395
|
+
this.unbindDocumentResizeListeners();
|
|
396
|
+
this.unbindDocumentDragListener();
|
|
397
|
+
this.unbindDocumentDragEndListener();
|
|
398
|
+
}
|
|
399
|
+
bindDocumentEscapeListener() {
|
|
400
|
+
const documentTarget = this.maskViewChild
|
|
401
|
+
? this.maskViewChild.nativeElement.ownerDocument
|
|
402
|
+
: 'document';
|
|
403
|
+
this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {
|
|
404
|
+
if (event.which === 27) {
|
|
405
|
+
if (parseInt(this.container.style.zIndex) ===
|
|
406
|
+
ZIndexUtils.getCurrent()) {
|
|
407
|
+
this.hide();
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
unbindDocumentEscapeListener() {
|
|
413
|
+
if (this.documentEscapeListener) {
|
|
414
|
+
this.documentEscapeListener();
|
|
415
|
+
this.documentEscapeListener = null;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
unbindMaskClickListener() {
|
|
419
|
+
if (this.maskClickListener) {
|
|
420
|
+
this.maskClickListener();
|
|
421
|
+
this.maskClickListener = null;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
ngOnDestroy() {
|
|
425
|
+
this.onContainerDestroy();
|
|
426
|
+
this.componentRef?.destroy();
|
|
427
|
+
}
|
|
428
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsDialogComponent, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i1.CpsDialogRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.CpsDialogConfig }, { token: i0.NgZone }, { token: i3.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
429
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: CpsDialogComponent, isStandalone: true, selector: "cps-dialog", viewQueries: [{ propertyName: "insertionPoint", first: true, predicate: CpsDialogContentDirective, descendants: true }, { propertyName: "maskViewChild", first: true, predicate: ["mask"], descendants: true }, { propertyName: "contentViewChild", first: true, predicate: ["content"], descendants: true }, { propertyName: "headerViewChild", first: true, predicate: ["header"], descendants: true }], ngImport: i0, template: "<div\n #mask\n [ngClass]=\"{\n 'cps-dialog-mask': true,\n 'cps-dialog-overlay': config.modal !== false,\n 'cps-dialog-overlay-enter':\n config.modal !== false && !config.blurredBackground,\n 'cps-dialog-blurred-overlay cps-dialog-blurred-overlay-enter':\n config.modal !== false && config.blurredBackground,\n 'cps-dialog-left': position === 'left',\n 'cps-dialog-right': position === 'right',\n 'cps-dialog-top': position === 'top',\n 'cps-dialog-bottom': position === 'bottom',\n 'cps-dialog-top-left': position === 'topleft' || position === 'top-left',\n 'cps-dialog-top-right': position === 'topright' || position === 'top-right',\n 'cps-dialog-bottom-left':\n position === 'bottomleft' || position === 'bottom-left',\n 'cps-dialog-bottom-right':\n position === 'bottomright' || position === 'bottom-right'\n }\"\n [class]=\"config.maskStyleClass || ''\">\n <div\n #container\n [ngClass]=\"{\n 'cps-dialog': true,\n 'cps-dialog-resizable': resizable,\n 'cps-dialog-draggable': draggable && !maximized,\n 'cps-dialog-dragging': dragging,\n 'cps-dialog-maximized': maximized\n }\"\n [ngStyle]=\"config.style\"\n [class]=\"config.styleClass || ''\"\n [@animation]=\"{\n value: 'visible',\n params: {\n transform: transformOptions,\n transition:\n config.transitionOptions || '150ms cubic-bezier(0, 0, 0.2, 1)'\n }\n }\"\n (@animation.start)=\"onAnimationStart($event)\"\n (@animation.done)=\"onAnimationEnd($event)\"\n role=\"dialog\"\n *ngIf=\"visible\"\n [style.width]=\"config.width\"\n [style.height]=\"config.height\"\n [style.minWidth]=\"config.minWidth\"\n [style.minHeight]=\"config.minHeight\"\n [style.maxWidth]=\"maximized ? '' : config.maxWidth\"\n [style.maxHeight]=\"maximized ? '' : config.maxHeight\">\n <div\n *ngIf=\"resizable && !maximized\"\n class=\"cps-dialog-resizable-handle\"\n style=\"z-index: 90\"\n (mousedown)=\"initResize($event)\"></div>\n <div\n #header\n *ngIf=\"config.showHeader !== false\"\n class=\"cps-dialog-header\"\n [ngClass]=\"{\n 'cps-dialog-header-left-bordered':\n config.showHeaderLeftBorder !== false,\n 'cps-dialog-header-bottom-bordered':\n config.showHeaderBottomBorder !== false\n }\"\n (mousedown)=\"initDrag($event)\">\n <div class=\"cps-dialog-header-left\">\n <div class=\"cps-dialog-header-icon\">\n <cps-icon\n *ngIf=\"config.headerIcon\"\n [icon]=\"config.headerIcon\"\n [color]=\"config.headerIconColor || 'currentColor'\">\n </cps-icon>\n </div>\n <span class=\"cps-dialog-header-title\">{{ config.headerTitle }}</span>\n <div class=\"cps-dialog-header-info-circle\">\n <cps-info-circle\n *ngIf=\"config.headerInfoTooltip\"\n size=\"small\"\n [tooltipPosition]=\"config.headerInfoTooltipPosition || 'top'\"\n [tooltipText]=\"config.headerInfoTooltip\">\n </cps-info-circle>\n </div>\n </div>\n <div class=\"cps-dialog-header-action-buttons\">\n <cps-button\n *ngIf=\"maximizable\"\n class=\"cps-dialog-header-action-button\"\n [icon]=\"maximized ? 'minimize' : 'maximize'\"\n size=\"small\"\n width=\"32\"\n color=\"graphite\"\n type=\"borderless\"\n (clicked)=\"toggleMaximized()\">\n </cps-button>\n <cps-button\n *ngIf=\"config.showCloseBtn !== false\"\n class=\"cps-dialog-header-action-button\"\n icon=\"close-x-2\"\n size=\"small\"\n width=\"32\"\n color=\"graphite\"\n type=\"borderless\"\n (clicked)=\"hide()\">\n </cps-button>\n </div>\n </div>\n <div\n #content\n class=\"cps-dialog-content\"\n [ngStyle]=\"config.contentStyle\"\n [class]=\"config.contentStyleClass || ''\">\n <ng-template cpsDialogContent></ng-template>\n </div>\n </div>\n</div>\n", styles: [".cps-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.cps-dialog-mask.cps-dialog-overlay{pointer-events:auto}.cps-dialog-overlay-enter{animation:cps-dialog-overlay-enter-animation .15s forwards}.cps-dialog-overlay-leave{animation:cps-dialog-overlay-leave-animation .15s forwards}.cps-dialog-blurred-overlay-enter{animation:cps-dialog-blurred-overlay-enter-animation .15s forwards}.cps-dialog-blurred-overlay-leave{animation:cps-dialog-blurred-overlay-leave-animation .15s forwards}.cps-dialog-overlay{background-color:#0003;transition-duration:.2s}.cps-dialog-blurred-overlay{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}@keyframes cps-dialog-overlay-enter-animation{0%{background-color:transparent}to{background-color:#0003}}@keyframes cps-dialog-overlay-leave-animation{0%{background-color:#0003}to{background-color:transparent}}@keyframes cps-dialog-blurred-overlay-enter-animation{0%{background-color:transparent;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}to{background-color:#0003;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}}@keyframes cps-dialog-blurred-overlay-leave-animation{0%{background-color:#0003;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}to{background-color:transparent;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}}.cps-dialog{box-sizing:border-box;display:flex;flex-direction:column;pointer-events:auto;transform:scale(1);position:relative;border-radius:4px;box-shadow:0 1px 3px #0000004d;border:0 none;font-family:Source Sans Pro,sans-serif;font-size:1rem;font-weight:400}.cps-dialog .cps-dialog-header{overflow:hidden;border-bottom:0 none;background:#fff;color:var(--cps-color-text-dark);padding:1rem;border-top-right-radius:4px;border-top-left-radius:4px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.cps-dialog .cps-dialog-header.cps-dialog-header-left-bordered{border-left:4px solid var(--cps-color-surprise)}.cps-dialog .cps-dialog-header.cps-dialog-header-bottom-bordered{border-bottom:1px solid var(--cps-color-line-mid)}.cps-dialog .cps-dialog-header .cps-dialog-header-left{display:flex;align-items:center}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-icon{margin-right:8px;display:flex}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-title{cursor:default;font-weight:700;font-size:1.25rem}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-info-circle{margin-left:8px;cursor:default;display:flex}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-info-circle cps-info-circle{margin-top:2px}.cps-dialog .cps-dialog-content{background:#fff;color:var(--cps-color-text-dark);padding:1rem}.cps-dialog .cps-dialog-content:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cps-dialog-content{overflow-y:auto;flex-grow:1}.cps-dialog-dragging .cps-dialog-header{background-color:var(--cps-color-highlight-active)!important}.cps-dialog-draggable .cps-dialog-header{cursor:move}.cps-dialog-draggable .cps-dialog-header:hover{background-color:var(--cps-color-highlight-hover)}.cps-dialog-draggable .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-title{cursor:unset}.cps-dialog .cps-dialog-header-action-buttons{display:flex;align-items:center}.cps-dialog-top .cps-dialog,.cps-dialog-bottom .cps-dialog,.cps-dialog-left .cps-dialog,.cps-dialog-right .cps-dialog,.cps-dialog-top-left .cps-dialog,.cps-dialog-top-right .cps-dialog,.cps-dialog-bottom-left .cps-dialog,.cps-dialog-bottom-right .cps-dialog{margin:.75rem;transform:translateZ(0)}.cps-dialog-maximized{-webkit-transition:none;transition:none;transform:none;width:100vw!important;height:100vh!important;top:0!important;left:0!important;max-height:100%;height:100%}.cps-dialog-maximized .cps-dialog-content{flex-grow:1;border-radius:0!important}.cps-dialog-maximized .cps-dialog-header{border-radius:0!important}.cps-dialog-left{justify-content:flex-start}.cps-dialog-right{justify-content:flex-end}.cps-dialog-top{align-items:flex-start}.cps-dialog-top-left{justify-content:flex-start;align-items:flex-start}.cps-dialog-top-right{justify-content:flex-end;align-items:flex-start}.cps-dialog-bottom{align-items:flex-end}.cps-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.cps-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.cps-dialog .cps-dialog-resizable-handle{position:absolute;display:block;cursor:nwse-resize;width:12px;height:12px;right:0;bottom:0;overflow:hidden}.cps-dialog .cps-dialog-resizable-handle:after{content:\"\";position:absolute;display:block;width:40px;height:0;box-shadow:0 0 0 1px var(--cps-color-calm),0 7px 0 1px var(--cps-color-calm),0 14px 0 1px var(--cps-color-calm);transform:translate(-50%,-50%) rotate(-45deg) scale(.5);top:50%;left:50%}.cps-unselectable-text{-webkit-user-select:none;user-select:none}.cps-overflow-hidden{overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: SharedModule }, { kind: "directive", type: CpsDialogContentDirective, selector: "[cpsDialogContent]" }, { kind: "component", type: CpsButtonComponent, selector: "cps-button", inputs: ["color", "contentColor", "type", "label", "icon", "iconPosition", "size", "width", "height", "disabled", "loading"], outputs: ["clicked"] }, { kind: "component", type: CpsInfoCircleComponent, selector: "cps-info-circle", inputs: ["size", "tooltipText", "tooltipPosition", "tooltipContentClass", "tooltipMaxWidth", "tooltipPersistent"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }], animations: [
|
|
430
|
+
trigger('animation', [
|
|
431
|
+
transition('void => visible', [useAnimation(showAnimation)]),
|
|
432
|
+
transition('visible => void', [useAnimation(hideAnimation)])
|
|
433
|
+
])
|
|
434
|
+
], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
|
|
435
|
+
}
|
|
436
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsDialogComponent, decorators: [{
|
|
437
|
+
type: Component,
|
|
438
|
+
args: [{ selector: 'cps-dialog', standalone: true, imports: [
|
|
439
|
+
CommonModule,
|
|
440
|
+
SharedModule,
|
|
441
|
+
CpsDialogContentDirective,
|
|
442
|
+
CpsButtonComponent,
|
|
443
|
+
CpsInfoCircleComponent,
|
|
444
|
+
CpsIconComponent
|
|
445
|
+
], animations: [
|
|
446
|
+
trigger('animation', [
|
|
447
|
+
transition('void => visible', [useAnimation(showAnimation)]),
|
|
448
|
+
transition('visible => void', [useAnimation(hideAnimation)])
|
|
449
|
+
])
|
|
450
|
+
], changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, template: "<div\n #mask\n [ngClass]=\"{\n 'cps-dialog-mask': true,\n 'cps-dialog-overlay': config.modal !== false,\n 'cps-dialog-overlay-enter':\n config.modal !== false && !config.blurredBackground,\n 'cps-dialog-blurred-overlay cps-dialog-blurred-overlay-enter':\n config.modal !== false && config.blurredBackground,\n 'cps-dialog-left': position === 'left',\n 'cps-dialog-right': position === 'right',\n 'cps-dialog-top': position === 'top',\n 'cps-dialog-bottom': position === 'bottom',\n 'cps-dialog-top-left': position === 'topleft' || position === 'top-left',\n 'cps-dialog-top-right': position === 'topright' || position === 'top-right',\n 'cps-dialog-bottom-left':\n position === 'bottomleft' || position === 'bottom-left',\n 'cps-dialog-bottom-right':\n position === 'bottomright' || position === 'bottom-right'\n }\"\n [class]=\"config.maskStyleClass || ''\">\n <div\n #container\n [ngClass]=\"{\n 'cps-dialog': true,\n 'cps-dialog-resizable': resizable,\n 'cps-dialog-draggable': draggable && !maximized,\n 'cps-dialog-dragging': dragging,\n 'cps-dialog-maximized': maximized\n }\"\n [ngStyle]=\"config.style\"\n [class]=\"config.styleClass || ''\"\n [@animation]=\"{\n value: 'visible',\n params: {\n transform: transformOptions,\n transition:\n config.transitionOptions || '150ms cubic-bezier(0, 0, 0.2, 1)'\n }\n }\"\n (@animation.start)=\"onAnimationStart($event)\"\n (@animation.done)=\"onAnimationEnd($event)\"\n role=\"dialog\"\n *ngIf=\"visible\"\n [style.width]=\"config.width\"\n [style.height]=\"config.height\"\n [style.minWidth]=\"config.minWidth\"\n [style.minHeight]=\"config.minHeight\"\n [style.maxWidth]=\"maximized ? '' : config.maxWidth\"\n [style.maxHeight]=\"maximized ? '' : config.maxHeight\">\n <div\n *ngIf=\"resizable && !maximized\"\n class=\"cps-dialog-resizable-handle\"\n style=\"z-index: 90\"\n (mousedown)=\"initResize($event)\"></div>\n <div\n #header\n *ngIf=\"config.showHeader !== false\"\n class=\"cps-dialog-header\"\n [ngClass]=\"{\n 'cps-dialog-header-left-bordered':\n config.showHeaderLeftBorder !== false,\n 'cps-dialog-header-bottom-bordered':\n config.showHeaderBottomBorder !== false\n }\"\n (mousedown)=\"initDrag($event)\">\n <div class=\"cps-dialog-header-left\">\n <div class=\"cps-dialog-header-icon\">\n <cps-icon\n *ngIf=\"config.headerIcon\"\n [icon]=\"config.headerIcon\"\n [color]=\"config.headerIconColor || 'currentColor'\">\n </cps-icon>\n </div>\n <span class=\"cps-dialog-header-title\">{{ config.headerTitle }}</span>\n <div class=\"cps-dialog-header-info-circle\">\n <cps-info-circle\n *ngIf=\"config.headerInfoTooltip\"\n size=\"small\"\n [tooltipPosition]=\"config.headerInfoTooltipPosition || 'top'\"\n [tooltipText]=\"config.headerInfoTooltip\">\n </cps-info-circle>\n </div>\n </div>\n <div class=\"cps-dialog-header-action-buttons\">\n <cps-button\n *ngIf=\"maximizable\"\n class=\"cps-dialog-header-action-button\"\n [icon]=\"maximized ? 'minimize' : 'maximize'\"\n size=\"small\"\n width=\"32\"\n color=\"graphite\"\n type=\"borderless\"\n (clicked)=\"toggleMaximized()\">\n </cps-button>\n <cps-button\n *ngIf=\"config.showCloseBtn !== false\"\n class=\"cps-dialog-header-action-button\"\n icon=\"close-x-2\"\n size=\"small\"\n width=\"32\"\n color=\"graphite\"\n type=\"borderless\"\n (clicked)=\"hide()\">\n </cps-button>\n </div>\n </div>\n <div\n #content\n class=\"cps-dialog-content\"\n [ngStyle]=\"config.contentStyle\"\n [class]=\"config.contentStyleClass || ''\">\n <ng-template cpsDialogContent></ng-template>\n </div>\n </div>\n</div>\n", styles: [".cps-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.cps-dialog-mask.cps-dialog-overlay{pointer-events:auto}.cps-dialog-overlay-enter{animation:cps-dialog-overlay-enter-animation .15s forwards}.cps-dialog-overlay-leave{animation:cps-dialog-overlay-leave-animation .15s forwards}.cps-dialog-blurred-overlay-enter{animation:cps-dialog-blurred-overlay-enter-animation .15s forwards}.cps-dialog-blurred-overlay-leave{animation:cps-dialog-blurred-overlay-leave-animation .15s forwards}.cps-dialog-overlay{background-color:#0003;transition-duration:.2s}.cps-dialog-blurred-overlay{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}@keyframes cps-dialog-overlay-enter-animation{0%{background-color:transparent}to{background-color:#0003}}@keyframes cps-dialog-overlay-leave-animation{0%{background-color:#0003}to{background-color:transparent}}@keyframes cps-dialog-blurred-overlay-enter-animation{0%{background-color:transparent;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}to{background-color:#0003;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}}@keyframes cps-dialog-blurred-overlay-leave-animation{0%{background-color:#0003;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}to{background-color:transparent;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}}.cps-dialog{box-sizing:border-box;display:flex;flex-direction:column;pointer-events:auto;transform:scale(1);position:relative;border-radius:4px;box-shadow:0 1px 3px #0000004d;border:0 none;font-family:Source Sans Pro,sans-serif;font-size:1rem;font-weight:400}.cps-dialog .cps-dialog-header{overflow:hidden;border-bottom:0 none;background:#fff;color:var(--cps-color-text-dark);padding:1rem;border-top-right-radius:4px;border-top-left-radius:4px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.cps-dialog .cps-dialog-header.cps-dialog-header-left-bordered{border-left:4px solid var(--cps-color-surprise)}.cps-dialog .cps-dialog-header.cps-dialog-header-bottom-bordered{border-bottom:1px solid var(--cps-color-line-mid)}.cps-dialog .cps-dialog-header .cps-dialog-header-left{display:flex;align-items:center}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-icon{margin-right:8px;display:flex}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-title{cursor:default;font-weight:700;font-size:1.25rem}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-info-circle{margin-left:8px;cursor:default;display:flex}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-info-circle cps-info-circle{margin-top:2px}.cps-dialog .cps-dialog-content{background:#fff;color:var(--cps-color-text-dark);padding:1rem}.cps-dialog .cps-dialog-content:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cps-dialog-content{overflow-y:auto;flex-grow:1}.cps-dialog-dragging .cps-dialog-header{background-color:var(--cps-color-highlight-active)!important}.cps-dialog-draggable .cps-dialog-header{cursor:move}.cps-dialog-draggable .cps-dialog-header:hover{background-color:var(--cps-color-highlight-hover)}.cps-dialog-draggable .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-title{cursor:unset}.cps-dialog .cps-dialog-header-action-buttons{display:flex;align-items:center}.cps-dialog-top .cps-dialog,.cps-dialog-bottom .cps-dialog,.cps-dialog-left .cps-dialog,.cps-dialog-right .cps-dialog,.cps-dialog-top-left .cps-dialog,.cps-dialog-top-right .cps-dialog,.cps-dialog-bottom-left .cps-dialog,.cps-dialog-bottom-right .cps-dialog{margin:.75rem;transform:translateZ(0)}.cps-dialog-maximized{-webkit-transition:none;transition:none;transform:none;width:100vw!important;height:100vh!important;top:0!important;left:0!important;max-height:100%;height:100%}.cps-dialog-maximized .cps-dialog-content{flex-grow:1;border-radius:0!important}.cps-dialog-maximized .cps-dialog-header{border-radius:0!important}.cps-dialog-left{justify-content:flex-start}.cps-dialog-right{justify-content:flex-end}.cps-dialog-top{align-items:flex-start}.cps-dialog-top-left{justify-content:flex-start;align-items:flex-start}.cps-dialog-top-right{justify-content:flex-end;align-items:flex-start}.cps-dialog-bottom{align-items:flex-end}.cps-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.cps-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.cps-dialog .cps-dialog-resizable-handle{position:absolute;display:block;cursor:nwse-resize;width:12px;height:12px;right:0;bottom:0;overflow:hidden}.cps-dialog .cps-dialog-resizable-handle:after{content:\"\";position:absolute;display:block;width:40px;height:0;box-shadow:0 0 0 1px var(--cps-color-calm),0 7px 0 1px var(--cps-color-calm),0 14px 0 1px var(--cps-color-calm);transform:translate(-50%,-50%) rotate(-45deg) scale(.5);top:50%;left:50%}.cps-unselectable-text{-webkit-user-select:none;user-select:none}.cps-overflow-hidden{overflow:hidden}\n"] }]
|
|
451
|
+
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
452
|
+
type: Inject,
|
|
453
|
+
args: [DOCUMENT]
|
|
454
|
+
}] }, { type: undefined, decorators: [{
|
|
455
|
+
type: Inject,
|
|
456
|
+
args: [PLATFORM_ID]
|
|
457
|
+
}] }, { type: i1.CpsDialogRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i2.CpsDialogConfig }, { type: i0.NgZone }, { type: i3.PrimeNGConfig }], propDecorators: { insertionPoint: [{
|
|
458
|
+
type: ViewChild,
|
|
459
|
+
args: [CpsDialogContentDirective]
|
|
460
|
+
}], maskViewChild: [{
|
|
461
|
+
type: ViewChild,
|
|
462
|
+
args: ['mask']
|
|
463
|
+
}], contentViewChild: [{
|
|
464
|
+
type: ViewChild,
|
|
465
|
+
args: ['content']
|
|
466
|
+
}], headerViewChild: [{
|
|
467
|
+
type: ViewChild,
|
|
468
|
+
args: ['header']
|
|
469
|
+
}] } });
|
|
470
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvc2VydmljZXMvY3BzLWRpYWxvZy9pbnRlcm5hbC9jb21wb25lbnRzL2Nwcy1kaWFsb2cvY3BzLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvc2VydmljZXMvY3BzLWRpYWxvZy9pbnRlcm5hbC9jb21wb25lbnRzL2Nwcy1kaWFsb2cvY3BzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsT0FBTyxFQUNQLFNBQVMsRUFFVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUCxZQUFZLEVBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVFLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUdULFlBQVksRUFDWixNQUFNLEVBR04sV0FBVyxFQUdYLFNBQVMsRUFDVCxpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFpQixZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7Ozs7QUFFekYsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0lBQzlCLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2pELE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3BFLENBQUMsQ0FBQztBQUVILE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUM5QixPQUFPLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUM3RSxDQUFDLENBQUM7QUEyQkgsTUFBTSxPQUFPLGtCQUFrQjtJQXFEN0IsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEtBQVU7UUFDbEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQ25ELENBQUM7UUFDRixPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELFlBQzRCLFFBQWtCLEVBQ2YsVUFBZSxFQUNwQyxVQUF3QixFQUN4QixNQUF5QixFQUMxQixRQUFtQixFQUNuQixNQUF1QixFQUN2QixJQUFZLEVBQ1osYUFBNEI7UUFQVCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2YsZUFBVSxHQUFWLFVBQVUsQ0FBSztRQUNwQyxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDdkIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBM0dyQyxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBVWYsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQXlCakIscUJBQWdCLEdBQUcsWUFBWSxDQUFDO1FBVWhDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDN0MsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBQzlDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBQzVDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUNoRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFDOUMsMkJBQXNCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQTBEbEQsQ0FBQztJQUVKLGVBQWU7UUFDYixvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxDQUFDO1FBRWxELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsYUFBd0I7UUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDO1FBQy9ELGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDO1FBRTFCLElBQUksQ0FBQyxZQUFZLEdBQUcsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JFLElBQUksSUFBSSxDQUFDLFVBQVU7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQztJQUNwRSxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDckMsV0FBVyxDQUFDLEdBQUcsQ0FDYixPQUFPLEVBQ1AsSUFBSSxDQUFDLFNBQVMsRUFDZCxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDaEUsQ0FBQztZQUNELElBQUksQ0FBQyxPQUF1QixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUNqRCxRQUFRLENBQUUsSUFBSSxDQUFDLFNBQTRCLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQ2xFLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQXFCO1FBQ3BDLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLEtBQUssU0FBUztnQkFDWixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUksSUFBSSxDQUFDLFNBQTRCLENBQUMsYUFBYSxDQUFDO2dCQUNoRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNoQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFFM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4QixDQUFDO2dCQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixNQUFNO1lBRVIsS0FBSyxNQUFNO2dCQUNULElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDaEQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7d0JBQ2xDLFVBQVUsQ0FBQyxRQUFRLENBQ2pCLElBQUksQ0FBQyxPQUFPLEVBQ1osa0NBQWtDLENBQ25DLENBQUM7b0JBQ0osQ0FBQzs7d0JBQU0sVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDBCQUEwQixDQUFDLENBQUM7Z0JBQ3ZFLENBQUM7Z0JBQ0QsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXFCO1FBQ2xDLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTdCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN2RCxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVk7WUFBRSxPQUFPO1FBRXZFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWTtZQUFFLE9BQU87UUFFdEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWTtnQkFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDM0MsSUFBSSxDQUFDLE9BQU8sRUFDWixXQUFXLEVBQ1gsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDYixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQzFELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNoQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDakUsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNoQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELElBQUksQ0FBRSxJQUFJLENBQUMsTUFBa0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixDQUMvQyxJQUFJLENBQUMsU0FBMkIsQ0FDakMsQ0FBQztRQUNGLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFlO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDOUIsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUFFLE9BQU87WUFDcEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQzs7WUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUV4QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDakUsQ0FBQzthQUFNLENBQUM7WUFDTixVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxVQUFVLENBQUMsS0FBaUI7UUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztZQUNyQyxDQUFDO1lBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM3QixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsS0FBaUI7UUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBSSxJQUFJLENBQUMsU0FBb0IsQ0FBQztZQUN4RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFJLElBQUksQ0FBQyxTQUFvQixDQUFDO1lBQ3hELE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQ2hDLElBQUksQ0FBQyxnQkFBaUIsQ0FBQyxhQUFhLENBQ2xELENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsYUFBYSxDQUM5QixJQUFJLENBQUMsZ0JBQWlCLENBQUMsYUFBYSxDQUNsRCxDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWU7Z0JBQ3ZDLENBQUMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUNWLElBQUksQ0FBQyxlQUFnQixDQUFDLGFBQWEsQ0FDakQ7Z0JBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNOLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlO2dCQUN0QyxDQUFDLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FDVCxJQUFJLENBQUMsZUFBZ0IsQ0FBQyxhQUFhLENBQ2pEO2dCQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDTixJQUFJLFFBQVEsR0FBRyxjQUFjLEdBQUcsTUFBTSxDQUFDO1lBQ3ZDLElBQUksU0FBUyxHQUFHLGVBQWUsR0FBRyxNQUFNLENBQUM7WUFDekMsTUFBTSxRQUFRLEdBQUksSUFBSSxDQUFDLFNBQTRCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNuRSxNQUFNLFNBQVMsR0FBSSxJQUFJLENBQUMsU0FBNEIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ3JFLE1BQU0sTUFBTSxHQUFJLElBQUksQ0FBQyxTQUE0QixDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDMUUsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFDLE1BQU0sY0FBYyxHQUNsQixDQUFDLFFBQVEsQ0FBRSxJQUFJLENBQUMsU0FBNEIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN2RCxDQUFDLFFBQVEsQ0FBRSxJQUFJLENBQUMsU0FBNEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFM0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsUUFBUSxJQUFJLE1BQU0sQ0FBQztnQkFDbkIsU0FBUyxJQUFJLE1BQU0sQ0FBQztZQUN0QixDQUFDO1lBRUQsSUFDRSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzVDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQ3ZDLENBQUM7Z0JBQ0QsTUFBTSxlQUFlLEdBQUcsWUFBWSxHQUFHLFFBQVEsR0FBRyxjQUFjLENBQUM7Z0JBQ2pFLE1BQU0sY0FBYyxHQUFHLFdBQVcsR0FBRyxRQUFRLEdBQUcsY0FBYyxDQUFDO2dCQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7b0JBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDNUQsSUFBSSxDQUFDLFNBQTRCLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNyRSxDQUFDO1lBRUQsSUFDRSxDQUFDLENBQUMsU0FBUyxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQ3hDLENBQUM7Z0JBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLEdBQUcsU0FBUyxHQUFHLGVBQWUsQ0FBQztnQkFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO29CQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQzdELElBQUksQ0FBQyxTQUE0QixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDdkUsQ0FBQztZQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBaUI7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWlCO1FBQ3hCLFNBQVMsb0JBQW9CLENBQUMsT0FBMkI7WUFDdkQsT0FDRSxPQUFPO2dCQUNQLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsaUNBQWlDLENBQUM7Z0JBQzlELENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUMsRUFDNUQsQ0FBQztnQkFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUNsQyxDQUFDO1lBRUQsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ25CLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFOUMsSUFBSSxvQkFBb0IsQ0FBYyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTztRQUU1RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRTVCLElBQUksQ0FBQyxTQUE0QixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ3RELFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWlCO1FBQ3RCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUksSUFBSSxDQUFDLFNBQW9CLENBQUM7WUFDeEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBSSxJQUFJLENBQUMsU0FBb0IsQ0FBQztZQUN4RCxNQUFNLE1BQU0sR0FBSSxJQUFJLENBQUMsU0FBNEIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzFFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ25DLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV6QyxJQUFJLENBQUMsU0FBNEIsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUU1RCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLEdBQUcsY0FBYyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUM1QixJQUFJLENBQUMsU0FBNEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ2pFLENBQUM7Z0JBRUQsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEdBQUcsZUFBZSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUM1QixJQUFJLENBQUMsU0FBNEIsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQy9ELENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUM1QixJQUFJLENBQUMsU0FBNEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFNBQTRCLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQy9ELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDVixJQUFJLENBQUMsU0FBNEIsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBNEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBNEIsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBNEIsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDOUMsSUFBSSxDQUFDLFFBQVEsRUFDYixXQUFXLEVBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ3ZCLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsMkJBQTJCO1FBQ3pCLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDakQsSUFBSSxDQUFDLFFBQVEsRUFDYixTQUFTLEVBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ3hCLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsNkJBQTZCO1FBQzNCLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRCwyQkFBMkI7UUFDekIsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNoRCxJQUFJLENBQUMsUUFBUSxFQUNiLFdBQVcsRUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDekIsQ0FBQztnQkFDRixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ25ELElBQUksQ0FBQyxRQUFRLEVBQ2IsU0FBUyxFQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUMxQixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELDZCQUE2QjtRQUMzQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFDRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsS0FBSyxLQUFLO1lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxLQUFLLEtBQUssRUFDbEMsQ0FBQztZQUNELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixNQUFNLGNBQWMsR0FBUSxJQUFJLENBQUMsYUFBYTtZQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYTtZQUNoRCxDQUFDLENBQUMsVUFBVSxDQUFDO1FBRWYsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNoRCxjQUFjLEVBQ2QsU0FBUyxFQUNULENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ3ZCLElBQ0UsUUFBUSxDQUFFLElBQUksQ0FBQyxTQUE0QixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7b0JBQ3pELFdBQVcsQ0FBQyxVQUFVLEVBQUUsRUFDeEIsQ0FBQztvQkFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7OEdBL2lCVSxrQkFBa0Isa0JBcUduQixRQUFRLGFBQ1IsV0FBVztrR0F0R1Ysa0JBQWtCLHNIQW1CbEIseUJBQXlCLGtVQzNGdEMsaWtJQW9IQSwwOUpEOURJLFlBQVkscVRBQ1osWUFBWSwrQkFDWix5QkFBeUIsK0RBQ3pCLGtCQUFrQiwyTUFDbEIsc0JBQXNCLCtLQUN0QixnQkFBZ0IsMEVBSU47WUFDVixPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUNuQixVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDNUQsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7YUFDN0QsQ0FBQztTQUNIOzsyRkFJVSxrQkFBa0I7a0JBdEI5QixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixZQUFZO3dCQUNaLHlCQUF5Qjt3QkFDekIsa0JBQWtCO3dCQUNsQixzQkFBc0I7d0JBQ3RCLGdCQUFnQjtxQkFDakIsY0FHVzt3QkFDVixPQUFPLENBQUMsV0FBVyxFQUFFOzRCQUNuQixVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs0QkFDNUQsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7eUJBQzdELENBQUM7cUJBQ0gsbUJBQ2dCLHVCQUF1QixDQUFDLE9BQU8saUJBQ2pDLGlCQUFpQixDQUFDLElBQUk7OzBCQXVHbEMsTUFBTTsyQkFBQyxRQUFROzswQkFDZixNQUFNOzJCQUFDLFdBQVc7Mk1BbEZyQixjQUFjO3NCQURiLFNBQVM7dUJBQUMseUJBQXlCO2dCQUdqQixhQUFhO3NCQUEvQixTQUFTO3VCQUFDLE1BQU07Z0JBQ0ssZ0JBQWdCO3NCQUFyQyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ0MsZUFBZTtzQkFBbkMsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgYW5pbWF0aW9uLFxuICBBbmltYXRpb25FdmVudCxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIHRyaWdnZXIsXG4gIHVzZUFuaW1hdGlvblxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgUExBVEZPUk1fSUQsXG4gIFJlbmRlcmVyMixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgVmlld1JlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByaW1lTkdDb25maWcsIFNoYXJlZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICdwcmltZW5nL2RvbSc7XG5pbXBvcnQgeyBaSW5kZXhVdGlscyB9IGZyb20gJ3ByaW1lbmcvdXRpbHMnO1xuaW1wb3J0IHsgQ3BzRGlhbG9nQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY3BzLWRpYWxvZy1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcHNEaWFsb2dDb25maWcgfSBmcm9tICcuLi8uLi8uLi91dGlscy9jcHMtZGlhbG9nLWNvbmZpZyc7XG5pbXBvcnQgeyBDcHNEaWFsb2dSZWYgfSBmcm9tICcuLi8uLi8uLi91dGlscy9jcHMtZGlhbG9nLXJlZic7XG5pbXBvcnQgeyBDcHNCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnRzL2Nwcy1idXR0b24vY3BzLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzSW5mb0NpcmNsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY3BzLWluZm8tY2lyY2xlL2Nwcy1pbmZvLWNpcmNsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcblxuY29uc3Qgc2hvd0FuaW1hdGlvbiA9IGFuaW1hdGlvbihbXG4gIHN0eWxlKHsgdHJhbnNmb3JtOiAne3t0cmFuc2Zvcm19fScsIG9wYWNpdHk6IDAgfSksXG4gIGFuaW1hdGUoJ3t7dHJhbnNpdGlvbn19Jywgc3R5bGUoeyB0cmFuc2Zvcm06ICdub25lJywgb3BhY2l0eTogMSB9KSlcbl0pO1xuXG5jb25zdCBoaWRlQW5pbWF0aW9uID0gYW5pbWF0aW9uKFtcbiAgYW5pbWF0ZSgne3t0cmFuc2l0aW9ufX0nLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3t7dHJhbnNmb3JtfX0nLCBvcGFjaXR5OiAwIH0pKVxuXSk7XG5cbnR5cGUgTnVsbGFibGU8VCA9IHZvaWQ+ID0gVCB8IG51bGwgfCB1bmRlZmluZWQ7XG50eXBlIFZvaWRMaXN0ZW5lciA9ICgpID0+IHZvaWQgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcHMtZGlhbG9nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTaGFyZWRNb2R1bGUsXG4gICAgQ3BzRGlhbG9nQ29udGVudERpcmVjdGl2ZSxcbiAgICBDcHNCdXR0b25Db21wb25lbnQsXG4gICAgQ3BzSW5mb0NpcmNsZUNvbXBvbmVudCxcbiAgICBDcHNJY29uQ29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jcHMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3BzLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignYW5pbWF0aW9uJywgW1xuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiB2aXNpYmxlJywgW3VzZUFuaW1hdGlvbihzaG93QW5pbWF0aW9uKV0pLFxuICAgICAgdHJhbnNpdGlvbigndmlzaWJsZSA9PiB2b2lkJywgW3VzZUFuaW1hdGlvbihoaWRlQW5pbWF0aW9uKV0pXG4gICAgXSlcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENwc0RpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHZpc2libGUgPSB0cnVlO1xuXG4gIGNvbXBvbmVudFJlZjogTnVsbGFibGU8Q29tcG9uZW50UmVmPGFueT4+O1xuXG4gIHJlc2l6aW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIGRyYWdnaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIG1heGltaXplZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBfc3R5bGU6IGFueSA9IHt9O1xuXG4gIG9yaWdpbmFsU3R5bGU6IGFueTtcblxuICBsYXN0UGFnZVg6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBsYXN0UGFnZVk6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKENwc0RpYWxvZ0NvbnRlbnREaXJlY3RpdmUpXG4gIGluc2VydGlvblBvaW50OiBOdWxsYWJsZTxDcHNEaWFsb2dDb250ZW50RGlyZWN0aXZlPjtcblxuICBAVmlld0NoaWxkKCdtYXNrJykgbWFza1ZpZXdDaGlsZDogTnVsbGFibGU8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnQnKSBjb250ZW50Vmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnaGVhZGVyJykgaGVhZGVyVmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICBjaGlsZENvbXBvbmVudFR5cGU6IE51bGxhYmxlPFR5cGU8YW55Pj47XG5cbiAgY29udGFpbmVyOiBOdWxsYWJsZTxIVE1MRGl2RWxlbWVudD47XG5cbiAgd3JhcHBlcjogTnVsbGFibGU8SFRNTEVsZW1lbnQ+O1xuXG4gIGRvY3VtZW50RXNjYXBlTGlzdGVuZXIhOiBWb2lkTGlzdGVuZXIgfCBudWxsO1xuXG4gIG1hc2tDbGlja0xpc3RlbmVyITogVm9pZExpc3RlbmVyIHwgbnVsbDtcblxuICB0cmFuc2Zvcm1PcHRpb25zID0gJ3NjYWxlKDAuNyknO1xuXG4gIGRvY3VtZW50UmVzaXplTGlzdGVuZXIhOiBWb2lkTGlzdGVuZXIgfCBudWxsO1xuXG4gIGRvY3VtZW50UmVzaXplRW5kTGlzdGVuZXIhOiBWb2lkTGlzdGVuZXIgfCBudWxsO1xuXG4gIGRvY3VtZW50RHJhZ0xpc3RlbmVyITogVm9pZExpc3RlbmVyIHwgbnVsbDtcblxuICBkb2N1bWVudERyYWdFbmRMaXN0ZW5lciE6IFZvaWRMaXN0ZW5lciB8IG51bGw7XG5cbiAgX29wZW5TdGF0ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIF9kcmFnU3RhcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgX2RyYWdFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgX3Jlc2l6ZVN0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG4gIF9yZXNpemVFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgX21heGltaXplZFN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBnZXQgbWluWCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5taW5YID8gdGhpcy5jb25maWcubWluWCA6IDA7XG4gIH1cblxuICBnZXQgbWluWSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5taW5ZID8gdGhpcy5jb25maWcubWluWSA6IDA7XG4gIH1cblxuICBnZXQga2VlcEluVmlld3BvcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmtlZXBJblZpZXdwb3J0IHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0IG1heGltaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5tYXhpbWl6YWJsZSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBkcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRyYWdnYWJsZSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCByZXNpemFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlc2l6YWJsZSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBzdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgfVxuXG4gIHNldCBzdHlsZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zdHlsZSA9IHsgLi4udmFsdWUgfTtcbiAgICAgIHRoaXMub3JpZ2luYWxTdHlsZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwb3NpdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wb3NpdGlvbiB8fCAnJztcbiAgfVxuXG4gIGdldCBwYXJlbnQoKSB7XG4gICAgY29uc3QgZG9tRWxlbWVudHMgPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjcHMtZGlhbG9nJylcbiAgICApO1xuICAgIHJldHVybiBkb21FbGVtZW50cy5sZW5ndGggPiAxID8gZG9tRWxlbWVudHMucG9wKCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSxcbiAgICBwcml2YXRlIF9kaWFsb2dSZWY6IENwc0RpYWxvZ1JlZixcbiAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHVibGljIGNvbmZpZzogQ3BzRGlhbG9nQ29uZmlnLFxuICAgIHB1YmxpYyB6b25lOiBOZ1pvbmUsXG4gICAgcHVibGljIHByaW1lTkdDb25maWc6IFByaW1lTkdDb25maWdcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIHRoaXMubG9hZENoaWxkQ29tcG9uZW50KHRoaXMuY2hpbGRDb21wb25lbnRUeXBlISk7XG5cbiAgICBpZiAodGhpcy5jb25maWcubWF4aW1pemVkICYmIHRoaXMubWF4aW1pemFibGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlTWF4aW1pemVkKCk7XG4gICAgfVxuICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGxvYWRDaGlsZENvbXBvbmVudChjb21wb25lbnRUeXBlOiBUeXBlPGFueT4pIHtcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gdGhpcy5pbnNlcnRpb25Qb2ludD8udmlld0NvbnRhaW5lclJlZjtcbiAgICB2aWV3Q29udGFpbmVyUmVmPy5jbGVhcigpO1xuXG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmPy5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZilcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZTtcbiAgfVxuXG4gIG1vdmVPblRvcCgpIHtcbiAgICBpZiAodGhpcy5jb25maWcuYXV0b1pJbmRleCAhPT0gZmFsc2UpIHtcbiAgICAgIFpJbmRleFV0aWxzLnNldChcbiAgICAgICAgJ21vZGFsJyxcbiAgICAgICAgdGhpcy5jb250YWluZXIsXG4gICAgICAgICh0aGlzLmNvbmZpZy5iYXNlWkluZGV4IHx8IDApICsgdGhpcy5wcmltZU5HQ29uZmlnLnpJbmRleC5tb2RhbFxuICAgICAgKTtcbiAgICAgICh0aGlzLndyYXBwZXIgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnpJbmRleCA9IFN0cmluZyhcbiAgICAgICAgcGFyc2VJbnQoKHRoaXMuY29udGFpbmVyIGFzIEhUTUxEaXZFbGVtZW50KS5zdHlsZS56SW5kZXgsIDEwKSAtIDFcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgb25BbmltYXRpb25TdGFydChldmVudDogQW5pbWF0aW9uRXZlbnQpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnRvU3RhdGUpIHtcbiAgICAgIGNhc2UgJ3Zpc2libGUnOlxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGV2ZW50LmVsZW1lbnQ7XG4gICAgICAgIHRoaXMud3JhcHBlciA9ICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkucGFyZW50RWxlbWVudDtcbiAgICAgICAgdGhpcy5tb3ZlT25Ub3AoKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgdGhpcy51bmJpbmRHbG9iYWxMaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJpbmRHbG9iYWxMaXN0ZW5lcnMoKTtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcubW9kYWwgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5lbmFibGVNb2RhbGl0eSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3ZvaWQnOlxuICAgICAgICBpZiAodGhpcy53cmFwcGVyICYmIHRoaXMuY29uZmlnLm1vZGFsICE9PSBmYWxzZSkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5ibHVycmVkQmFja2dyb3VuZCkge1xuICAgICAgICAgICAgRG9tSGFuZGxlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLFxuICAgICAgICAgICAgICAnY3BzLWRpYWxvZy1ibHVycmVkLW92ZXJsYXktbGVhdmUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBEb21IYW5kbGVyLmFkZENsYXNzKHRoaXMud3JhcHBlciwgJ2Nwcy1kaWFsb2ctb3ZlcmxheS1sZWF2ZScpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIGlmIChldmVudC50b1N0YXRlID09PSAndm9pZCcpIHtcbiAgICAgIHRoaXMub25Db250YWluZXJEZXN0cm95KCk7XG4gICAgICB0aGlzLl9kaWFsb2dSZWYuZGVzdHJveSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcGVuU3RhdGVDaGFuZ2VkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbnRhaW5lckRlc3Ryb3koKSB7XG4gICAgdGhpcy51bmJpbmRHbG9iYWxMaXN0ZW5lcnMoKTtcblxuICAgIGlmICh0aGlzLmNvbnRhaW5lciAmJiB0aGlzLmNvbmZpZy5hdXRvWkluZGV4ICE9PSBmYWxzZSkge1xuICAgICAgWkluZGV4VXRpbHMuY2xlYXIodGhpcy5jb250YWluZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5tb2RhbCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZGlzYWJsZU1vZGFsaXR5KCk7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyID0gbnVsbDtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZz8uZGlzYWJsZUNsb3NlIHx8IHRoaXMuX2RpYWxvZ1JlZj8uZGlzYWJsZUNsb3NlKSByZXR1cm47XG5cbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnPy5kaXNhYmxlQ2xvc2UpIHJldHVybjtcblxuICAgIGlmICh0aGlzLl9kaWFsb2dSZWYpIHtcbiAgICAgIGlmICghdGhpcy5fZGlhbG9nUmVmLmRpc2FibGVDbG9zZSkgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZW5hYmxlTW9kYWxpdHkoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5kaXNhYmxlQ2xvc2UpIHtcbiAgICAgIHRoaXMubWFza0NsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgdGhpcy53cmFwcGVyLFxuICAgICAgICAnbW91c2Vkb3duJyxcbiAgICAgICAgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy53cmFwcGVyICYmIHRoaXMud3JhcHBlci5pc1NhbWVOb2RlKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcubW9kYWwgIT09IGZhbHNlKSB7XG4gICAgICBEb21IYW5kbGVyLmFkZENsYXNzKHRoaXMuZG9jdW1lbnQuYm9keSwgJ2Nwcy1vdmVyZmxvdy1oaWRkZW4nKTtcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTW9kYWxpdHkoKSB7XG4gICAgaWYgKHRoaXMud3JhcHBlcikge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5kaXNhYmxlQ2xvc2UpIHtcbiAgICAgICAgdGhpcy51bmJpbmRNYXNrQ2xpY2tMaXN0ZW5lcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25maWcubW9kYWwgIT09IGZhbHNlKSB7XG4gICAgICAgIERvbUhhbmRsZXIucmVtb3ZlQ2xhc3ModGhpcy5kb2N1bWVudC5ib2R5LCAnY3BzLW92ZXJmbG93LWhpZGRlbicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoISh0aGlzLl9jZFJlZiBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGNvbnN0IGZvY3VzYWJsZSA9IERvbUhhbmRsZXIuZ2V0Rm9jdXNhYmxlRWxlbWVudHMoXG4gICAgICB0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudFxuICAgICk7XG4gICAgaWYgKGZvY3VzYWJsZSAmJiBmb2N1c2FibGUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBmb2N1c2FibGVbMF0uZm9jdXMoKSwgNSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVNYXhpbWl6ZWQodmFsdWU/OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLm1heGltaXphYmxlKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHRoaXMubWF4aW1pemVkIHx8ICghdmFsdWUgJiYgIXRoaXMubWF4aW1pemVkKSkgcmV0dXJuO1xuICAgICAgdGhpcy5tYXhpbWl6ZWQgPSB2YWx1ZTtcbiAgICB9IGVsc2UgdGhpcy5tYXhpbWl6ZWQgPSAhdGhpcy5tYXhpbWl6ZWQ7XG5cbiAgICBpZiAodGhpcy5tYXhpbWl6ZWQpIHtcbiAgICAgIERvbUhhbmRsZXIuYWRkQ2xhc3ModGhpcy5kb2N1bWVudC5ib2R5LCAnY3BzLW92ZXJmbG93LWhpZGRlbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBEb21IYW5kbGVyLnJlbW92ZUNsYXNzKHRoaXMuZG9jdW1lbnQuYm9keSwgJ2Nwcy1vdmVyZmxvdy1oaWRkZW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tYXhpbWl6ZWRTdGF0ZUNoYW5nZWQuZW1pdCh0aGlzLm1heGltaXplZCk7XG4gIH1cblxuICBpbml0UmVzaXplKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMucmVzaXphYmxlKSB7XG4gICAgICBpZiAoIXRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lcikge1xuICAgICAgICB0aGlzLmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVycygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc2l6aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubGFzdFBhZ2VYID0gZXZlbnQucGFnZVg7XG4gICAgICB0aGlzLmxhc3RQYWdlWSA9IGV2ZW50LnBhZ2VZO1xuICAgICAgRG9tSGFuZGxlci5hZGRDbGFzcyh0aGlzLmRvY3VtZW50LmJvZHksICdjcHMtdW5zZWxlY3RhYmxlLXRleHQnKTtcbiAgICAgIHRoaXMuX3Jlc2l6ZVN0YXJ0ZWQuZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgb25SZXNpemUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5yZXNpemluZykge1xuICAgICAgY29uc3QgZGVsdGFYID0gZXZlbnQucGFnZVggLSAodGhpcy5sYXN0UGFnZVggYXMgbnVtYmVyKTtcbiAgICAgIGNvbnN0IGRlbHRhWSA9IGV2ZW50LnBhZ2VZIC0gKHRoaXMubGFzdFBhZ2VZIGFzIG51bWJlcik7XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IERvbUhhbmRsZXIuZ2V0T3V0ZXJXaWR0aCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSBEb21IYW5kbGVyLmdldE91dGVySGVpZ2h0KHRoaXMuY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSBEb21IYW5kbGVyLmdldE91dGVySGVpZ2h0KFxuICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5jb250ZW50Vmlld0NoaWxkKS5uYXRpdmVFbGVtZW50XG4gICAgICApO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gRG9tSGFuZGxlci5nZXRPdXRlcldpZHRoKFxuICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5jb250ZW50Vmlld0NoaWxkKS5uYXRpdmVFbGVtZW50XG4gICAgICApO1xuICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gdGhpcy5oZWFkZXJWaWV3Q2hpbGRcbiAgICAgICAgPyBEb21IYW5kbGVyLmdldE91dGVySGVpZ2h0KFxuICAgICAgICAgICAgKDxFbGVtZW50UmVmPnRoaXMuaGVhZGVyVmlld0NoaWxkKS5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgKVxuICAgICAgICA6IDA7XG4gICAgICBjb25zdCBoZWFkZXJXaWR0aCA9IHRoaXMuaGVhZGVyVmlld0NoaWxkXG4gICAgICAgID8gRG9tSGFuZGxlci5nZXRPdXRlcldpZHRoKFxuICAgICAgICAgICAgKDxFbGVtZW50UmVmPnRoaXMuaGVhZGVyVmlld0NoaWxkKS5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgKVxuICAgICAgICA6IDA7XG4gICAgICBsZXQgbmV3V2lkdGggPSBjb250YWluZXJXaWR0aCArIGRlbHRhWDtcbiAgICAgIGxldCBuZXdIZWlnaHQgPSBjb250YWluZXJIZWlnaHQgKyBkZWx0YVk7XG4gICAgICBjb25zdCBtaW5XaWR0aCA9ICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUubWluV2lkdGg7XG4gICAgICBjb25zdCBtaW5IZWlnaHQgPSAodGhpcy5jb250YWluZXIgYXMgSFRNTERpdkVsZW1lbnQpLnN0eWxlLm1pbkhlaWdodDtcbiAgICAgIGNvbnN0IG9mZnNldCA9ICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IERvbUhhbmRsZXIuZ2V0Vmlld3BvcnQoKTtcbiAgICAgIGNvbnN0IGhhc0JlZW5EcmFnZ2VkID1cbiAgICAgICAgIXBhcnNlSW50KCh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUudG9wKSB8fFxuICAgICAgICAhcGFyc2VJbnQoKHRoaXMuY29udGFpbmVyIGFzIEhUTUxEaXZFbGVtZW50KS5zdHlsZS5sZWZ0KTtcblxuICAgICAgaWYgKGhhc0JlZW5EcmFnZ2VkKSB7XG4gICAgICAgIG5ld1dpZHRoICs9IGRlbHRhWDtcbiAgICAgICAgbmV3SGVpZ2h0ICs9IGRlbHRhWTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAoIW1pbldpZHRoIHx8IG5ld1dpZHRoID4gcGFyc2VJbnQobWluV2lkdGgpKSAmJlxuICAgICAgICBvZmZzZXQubGVmdCArIG5ld1dpZHRoIDwgdmlld3BvcnQud2lkdGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBuZXdDb250ZW50V2lkdGggPSBjb250ZW50V2lkdGggKyBuZXdXaWR0aCAtIGNvbnRhaW5lcldpZHRoO1xuICAgICAgICBjb25zdCBuZXdIZWFkZXJXaWR0aCA9IGhlYWRlcldpZHRoICsgbmV3V2lkdGggLSBjb250YWluZXJXaWR0aDtcbiAgICAgICAgdGhpcy5fc3R5bGUud2lkdGggPVxuICAgICAgICAgIE1hdGgubWF4KG5ld1dpZHRoLCBuZXdDb250ZW50V2lkdGgsIG5ld0hlYWRlcldpZHRoKSArICdweCc7XG4gICAgICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUud2lkdGggPSB0aGlzLl9zdHlsZS53aWR0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAoIW1pbkhlaWdodCB8fCBuZXdIZWlnaHQgPiBwYXJzZUludChtaW5IZWlnaHQpKSAmJlxuICAgICAgICBvZmZzZXQudG9wICsgbmV3SGVpZ2h0IDwgdmlld3BvcnQuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGVudEhlaWdodCA9IGNvbnRlbnRIZWlnaHQgKyBuZXdIZWlnaHQgLSBjb250YWluZXJIZWlnaHQ7XG4gICAgICAgIHRoaXMuX3N0eWxlLmhlaWdodCA9XG4gICAgICAgICAgTWF0aC5tYXgobmV3SGVpZ2h0LCBoZWFkZXJIZWlnaHQgKyBuZXdDb250ZW50SGVpZ2h0KSArICdweCc7XG4gICAgICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUuaGVpZ2h0ID0gdGhpcy5fc3R5bGUuaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RQYWdlWCA9IGV2ZW50LnBhZ2VYO1xuICAgICAgdGhpcy5sYXN0UGFnZVkgPSBldmVudC5wYWdlWTtcbiAgICB9XG4gIH1cblxuICByZXNpemVFbmQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5yZXNpemluZykge1xuICAgICAgdGhpcy5yZXNpemluZyA9IGZhbHNlO1xuICAgICAgRG9tSGFuZGxlci5yZW1vdmVDbGFzcyh0aGlzLmRvY3VtZW50LmJvZHksICdjcHMtdW5zZWxlY3RhYmxlLXRleHQnKTtcbiAgICAgIHRoaXMuX3Jlc2l6ZUVuZGVkLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGluaXREcmFnKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZnVuY3Rpb24gaXNIZWFkZXJBY3Rpb25CdXR0b24oZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIGVsZW1lbnQgJiZcbiAgICAgICAgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjcHMtZGlhbG9nLWhlYWRlci1hY3Rpb24tYnV0dG9uJykgJiZcbiAgICAgICAgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjcHMtZGlhbG9nLWhlYWRlci1pbmZvLWNpcmNsZScpXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICEhZWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMubWF4aW1pemVkKSByZXR1cm47XG5cbiAgICBpZiAoaXNIZWFkZXJBY3Rpb25CdXR0b24oPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkpIHJldHVybjtcblxuICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMubGFzdFBhZ2VYID0gZXZlbnQucGFnZVg7XG4gICAgdGhpcy5sYXN0UGFnZVkgPSBldmVudC5wYWdlWTtcblxuICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUubWFyZ2luID0gJzAnO1xuICAgIERvbUhhbmRsZXIuYWRkQ2xhc3ModGhpcy5kb2N1bWVudC5ib2R5LCAnY3BzLXVuc2VsZWN0YWJsZS10ZXh0Jyk7XG4gICAgdGhpcy5fZHJhZ1N0YXJ0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkRyYWcoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kcmFnZ2luZykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBEb21IYW5kbGVyLmdldE91dGVyV2lkdGgodGhpcy5jb250YWluZXIpO1xuICAgICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gRG9tSGFuZGxlci5nZXRPdXRlckhlaWdodCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBjb25zdCBkZWx0YVggPSBldmVudC5wYWdlWCAtICh0aGlzLmxhc3RQYWdlWCBhcyBudW1iZXIpO1xuICAgICAgY29uc3QgZGVsdGFZID0gZXZlbnQucGFnZVkgLSAodGhpcy5sYXN0UGFnZVkgYXMgbnVtYmVyKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9ICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBsZWZ0UG9zID0gb2Zmc2V0LmxlZnQgKyBkZWx0YVg7XG4gICAgICBjb25zdCB0b3BQb3MgPSBvZmZzZXQudG9wICsgZGVsdGFZO1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSBEb21IYW5kbGVyLmdldFZpZXdwb3J0KCk7XG5cbiAgICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuXG4gICAgICBpZiAodGhpcy5rZWVwSW5WaWV3cG9ydCkge1xuICAgICAgICBpZiAobGVmdFBvcyA+PSB0aGlzLm1pblggJiYgbGVmdFBvcyArIGNvbnRhaW5lcldpZHRoIDwgdmlld3BvcnQud2lkdGgpIHtcbiAgICAgICAgICB0aGlzLl9zdHlsZS5sZWZ0ID0gbGVmdFBvcyArICdweCc7XG4gICAgICAgICAgdGhpcy5sYXN0UGFnZVggPSBldmVudC5wYWdlWDtcbiAgICAgICAgICAodGhpcy5jb250YWluZXIgYXMgSFRNTERpdkVsZW1lbnQpLnN0eWxlLmxlZnQgPSBsZWZ0UG9zICsgJ3B4JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b3BQb3MgPj0gdGhpcy5taW5ZICYmIHRvcFBvcyArIGNvbnRhaW5lckhlaWdodCA8IHZpZXdwb3J0LmhlaWdodCkge1xuICAgICAgICAgIHRoaXMuX3N0eWxlLnRvcCA9IHRvcFBvcyArICdweCc7XG4gICAgICAgICAgdGhpcy5sYXN0UGFnZVkgPSBldmVudC5wYWdlWTtcbiAgICAgICAgICAodGhpcy5jb250YWluZXIgYXMgSFRNTERpdkVsZW1lbnQpLnN0eWxlLnRvcCA9IHRvcFBvcyArICdweCc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFzdFBhZ2VYID0gZXZlbnQucGFnZVg7XG4gICAgICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUubGVmdCA9IGxlZnRQb3MgKyAncHgnO1xuICAgICAgICB0aGlzLmxhc3RQYWdlWSA9IGV2ZW50LnBhZ2VZO1xuICAgICAgICAodGhpcy5jb250YWluZXIgYXMgSFRNTERpdkVsZW1lbnQpLnN0eWxlLnRvcCA9IHRvcFBvcyArICdweCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZW5kRHJhZyhldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgICBEb21IYW5kbGVyLnJlbW92ZUNsYXNzKHRoaXMuZG9jdW1lbnQuYm9keSwgJ2Nwcy11bnNlbGVjdGFibGUtdGV4dCcpO1xuICAgICAgdGhpcy5fZHJhZ0VuZGVkLmVtaXQoZXZlbnQpO1xuICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0UG9zaXRpb24oKSB7XG4gICAgKHRoaXMuY29udGFpbmVyIGFzIEhUTUxEaXZFbGVtZW50KS5zdHlsZS5wb3NpdGlvbiA9ICcnO1xuICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUubGVmdCA9ICcnO1xuICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUudG9wID0gJyc7XG4gICAgKHRoaXMuY29udGFpbmVyIGFzIEhUTUxEaXZFbGVtZW50KS5zdHlsZS5tYXJnaW4gPSAnJztcbiAgfVxuXG4gIGJpbmREb2N1bWVudERyYWdMaXN0ZW5lcigpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgdGhpcy5kb2N1bWVudERyYWdMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgIHRoaXMuZG9jdW1lbnQsXG4gICAgICAgICAgJ21vdXNlbW92ZScsXG4gICAgICAgICAgdGhpcy5vbkRyYWcuYmluZCh0aGlzKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYmluZERvY3VtZW50RHJhZ0VuZExpc3RlbmVyKCkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50RHJhZ0VuZExpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgdGhpcy5kb2N1bWVudCxcbiAgICAgICAgICAnbW91c2V1cCcsXG4gICAgICAgICAgdGhpcy5lbmREcmFnLmJpbmQodGhpcylcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVuYmluZERvY3VtZW50RHJhZ0VuZExpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLmRvY3VtZW50RHJhZ0VuZExpc3RlbmVyKSB7XG4gICAgICB0aGlzLmRvY3VtZW50RHJhZ0VuZExpc3RlbmVyKCk7XG4gICAgICB0aGlzLmRvY3VtZW50RHJhZ0xpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB1bmJpbmREb2N1bWVudERyYWdMaXN0ZW5lcigpIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudERyYWdMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kb2N1bWVudERyYWdMaXN0ZW5lcigpO1xuICAgICAgdGhpcy5kb2N1bWVudERyYWdMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXJzKCkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICdtb3VzZW1vdmUnLFxuICAgICAgICAgIHRoaXMub25SZXNpemUuYmluZCh0aGlzKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmRvY3VtZW50UmVzaXplRW5kTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICdtb3VzZXVwJyxcbiAgICAgICAgICB0aGlzLnJlc2l6ZUVuZC5iaW5kKHRoaXMpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1bmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyICYmIHRoaXMuZG9jdW1lbnRSZXNpemVFbmRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICB0aGlzLmRvY3VtZW50UmVzaXplRW5kTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lciA9IG51bGw7XG4gICAgICB0aGlzLmRvY3VtZW50UmVzaXplRW5kTGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGJpbmRHbG9iYWxMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWcuY2xvc2VPbkVzY2FwZSAhPT0gZmFsc2UgJiZcbiAgICAgIHRoaXMuY29uZmlnLmRpc2FibGVDbG9zZSAhPT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHRoaXMuYmluZERvY3VtZW50RXNjYXBlTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXNpemFibGUpIHtcbiAgICAgIHRoaXMuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhZ2dhYmxlKSB7XG4gICAgICB0aGlzLmJpbmREb2N1bWVudERyYWdMaXN0ZW5lcigpO1xuICAgICAgdGhpcy5iaW5kRG9jdW1lbnREcmFnRW5kTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICB1bmJpbmRHbG9iYWxMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy51bmJpbmREb2N1bWVudEVzY2FwZUxpc3RlbmVyKCk7XG4gICAgdGhpcy51bmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVycygpO1xuICAgIHRoaXMudW5iaW5kRG9jdW1lbnREcmFnTGlzdGVuZXIoKTtcbiAgICB0aGlzLnVuYmluZERvY3VtZW50RHJhZ0VuZExpc3RlbmVyKCk7XG4gIH1cblxuICBiaW5kRG9jdW1lbnRFc2NhcGVMaXN0ZW5lcigpIHtcbiAgICBjb25zdCBkb2N1bWVudFRhcmdldDogYW55ID0gdGhpcy5tYXNrVmlld0NoaWxkXG4gICAgICA/IHRoaXMubWFza1ZpZXdDaGlsZC5uYXRpdmVFbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgICAgIDogJ2RvY3VtZW50JztcblxuICAgIHRoaXMuZG9jdW1lbnRFc2NhcGVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgZG9jdW1lbnRUYXJnZXQsXG4gICAgICAna2V5ZG93bicsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LndoaWNoID09PSAyNykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcnNlSW50KCh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUuekluZGV4KSA9PT1cbiAgICAgICAgICAgIFpJbmRleFV0aWxzLmdldEN1cnJlbnQoKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHVuYmluZERvY3VtZW50RXNjYXBlTGlzdGVuZXIoKSB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRFc2NhcGVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kb2N1bWVudEVzY2FwZUxpc3RlbmVyKCk7XG4gICAgICB0aGlzLmRvY3VtZW50RXNjYXBlTGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHVuYmluZE1hc2tDbGlja0xpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLm1hc2tDbGlja0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLm1hc2tDbGlja0xpc3RlbmVyKCk7XG4gICAgICB0aGlzLm1hc2tDbGlja0xpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uQ29udGFpbmVyRGVzdHJveSgpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmPy5kZXN0cm95KCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI21hc2tcbiAgW25nQ2xhc3NdPVwie1xuICAgICdjcHMtZGlhbG9nLW1hc2snOiB0cnVlLFxuICAgICdjcHMtZGlhbG9nLW92ZXJsYXknOiBjb25maWcubW9kYWwgIT09IGZhbHNlLFxuICAgICdjcHMtZGlhbG9nLW92ZXJsYXktZW50ZXInOlxuICAgICAgY29uZmlnLm1vZGFsICE9PSBmYWxzZSAmJiAhY29uZmlnLmJsdXJyZWRCYWNrZ3JvdW5kLFxuICAgICdjcHMtZGlhbG9nLWJsdXJyZWQtb3ZlcmxheSBjcHMtZGlhbG9nLWJsdXJyZWQtb3ZlcmxheS1lbnRlcic6XG4gICAgICBjb25maWcubW9kYWwgIT09IGZhbHNlICYmIGNvbmZpZy5ibHVycmVkQmFja2dyb3VuZCxcbiAgICAnY3BzLWRpYWxvZy1sZWZ0JzogcG9zaXRpb24gPT09ICdsZWZ0JyxcbiAgICAnY3BzLWRpYWxvZy1yaWdodCc6IHBvc2l0aW9uID09PSAncmlnaHQnLFxuICAgICdjcHMtZGlhbG9nLXRvcCc6IHBvc2l0aW9uID09PSAndG9wJyxcbiAgICAnY3BzLWRpYWxvZy1ib3R0b20nOiBwb3NpdGlvbiA9PT0gJ2JvdHRvbScsXG4gICAgJ2Nwcy1kaWFsb2ctdG9wLWxlZnQnOiBwb3NpdGlvbiA9PT0gJ3RvcGxlZnQnIHx8IHBvc2l0aW9uID09PSAndG9wLWxlZnQnLFxuICAgICdjcHMtZGlhbG9nLXRvcC1yaWdodCc6IHBvc2l0aW9uID09PSAndG9wcmlnaHQnIHx8IHBvc2l0aW9uID09PSAndG9wLXJpZ2h0JyxcbiAgICAnY3BzLWRpYWxvZy1ib3R0b20tbGVmdCc6XG4gICAgICBwb3NpdGlvbiA9PT0gJ2JvdHRvbWxlZnQnIHx8IHBvc2l0aW9uID09PSAnYm90dG9tLWxlZnQnLFxuICAgICdjcHMtZGlhbG9nLWJvdHRvbS1yaWdodCc6XG4gICAgICBwb3NpdGlvbiA9PT0gJ2JvdHRvbXJpZ2h0JyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbS1yaWdodCdcbiAgfVwiXG4gIFtjbGFzc109XCJjb25maWcubWFza1N0eWxlQ2xhc3MgfHwgJydcIj5cbiAgPGRpdlxuICAgICNjb250YWluZXJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnY3BzLWRpYWxvZyc6IHRydWUsXG4gICAgICAnY3BzLWRpYWxvZy1yZXNpemFibGUnOiByZXNpemFibGUsXG4gICAgICAnY3BzLWRpYWxvZy1kcmFnZ2FibGUnOiBkcmFnZ2FibGUgJiYgIW1heGltaXplZCxcbiAgICAgICdjcHMtZGlhbG9nLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgICAnY3BzLWRpYWxvZy1tYXhpbWl6ZWQnOiBtYXhpbWl6ZWRcbiAgICB9XCJcbiAgICBbbmdTdHlsZV09XCJjb25maWcuc3R5bGVcIlxuICAgIFtjbGFzc109XCJjb25maWcuc3R5bGVDbGFzcyB8fCAnJ1wiXG4gICAgW0BhbmltYXRpb25dPVwie1xuICAgICAgdmFsdWU6ICd2aXNpYmxlJyxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybU9wdGlvbnMsXG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgY29uZmlnLnRyYW5zaXRpb25PcHRpb25zIHx8ICcxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSdcbiAgICAgIH1cbiAgICB9XCJcbiAgICAoQGFuaW1hdGlvbi5zdGFydCk9XCJvbkFuaW1hdGlvblN0YXJ0KCRldmVudClcIlxuICAgIChAYW5pbWF0aW9uLmRvbmUpPVwib25BbmltYXRpb25FbmQoJGV2ZW50KVwiXG4gICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgKm5nSWY9XCJ2aXNpYmxlXCJcbiAgICBbc3R5bGUud2lkdGhdPVwiY29uZmlnLndpZHRoXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNvbmZpZy5oZWlnaHRcIlxuICAgIFtzdHlsZS5taW5XaWR0aF09XCJjb25maWcubWluV2lkdGhcIlxuICAgIFtzdHlsZS5taW5IZWlnaHRdPVwiY29uZmlnLm1pbkhlaWdodFwiXG4gICAgW3N0eWxlLm1heFdpZHRoXT1cIm1heGltaXplZCA/ICcnIDogY29uZmlnLm1heFdpZHRoXCJcbiAgICBbc3R5bGUubWF4SGVpZ2h0XT1cIm1heGltaXplZCA/ICcnIDogY29uZmlnLm1heEhlaWdodFwiPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwicmVzaXphYmxlICYmICFtYXhpbWl6ZWRcIlxuICAgICAgY2xhc3M9XCJjcHMtZGlhbG9nLXJlc2l6YWJsZS1oYW5kbGVcIlxuICAgICAgc3R5bGU9XCJ6LWluZGV4OiA5MFwiXG4gICAgICAobW91c2Vkb3duKT1cImluaXRSZXNpemUoJGV2ZW50KVwiPjwvZGl2PlxuICAgIDxkaXZcbiAgICAgICNoZWFkZXJcbiAgICAgICpuZ0lmPVwiY29uZmlnLnNob3dIZWFkZXIgIT09IGZhbHNlXCJcbiAgICAgIGNsYXNzPVwiY3BzLWRpYWxvZy1oZWFkZXJcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnY3BzLWRpYWxvZy1oZWFkZXItbGVmdC1ib3JkZXJlZCc6XG4gICAgICAgICAgY29uZmlnLnNob3dIZWFkZXJMZWZ0Qm9yZGVyICE9PSBmYWxzZSxcbiAgICAgICAgJ2Nwcy1kaWFsb2ctaGVhZGVyLWJvdHRvbS1ib3JkZXJlZCc6XG4gICAgICAgICAgY29uZmlnLnNob3dIZWFkZXJCb3R0b21Cb3JkZXIgIT09IGZhbHNlXG4gICAgICB9XCJcbiAgICAgIChtb3VzZWRvd24pPVwiaW5pdERyYWcoJGV2ZW50KVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy1kaWFsb2ctaGVhZGVyLWxlZnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNwcy1kaWFsb2ctaGVhZGVyLWljb25cIj5cbiAgICAgICAgICA8Y3BzLWljb25cbiAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmhlYWRlckljb25cIlxuICAgICAgICAgICAgW2ljb25dPVwiY29uZmlnLmhlYWRlckljb25cIlxuICAgICAgICAgICAgW2NvbG9yXT1cImNvbmZpZy5oZWFkZXJJY29uQ29sb3IgfHwgJ2N1cnJlbnRDb2xvcidcIj5cbiAgICAgICAgICA8L2Nwcy1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtZGlhbG9nLWhlYWRlci10aXRsZVwiPnt7IGNvbmZpZy5oZWFkZXJUaXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNwcy1kaWFsb2ctaGVhZGVyLWluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgPGNwcy1pbmZvLWNpcmNsZVxuICAgICAgICAgICAgKm5nSWY9XCJjb25maWcuaGVhZGVySW5mb1Rvb2x0aXBcIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiY29uZmlnLmhlYWRlckluZm9Ub29sdGlwUG9zaXRpb24gfHwgJ3RvcCdcIlxuICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cImNvbmZpZy5oZWFkZXJJbmZvVG9vbHRpcFwiPlxuICAgICAgICAgIDwvY3BzLWluZm8tY2lyY2xlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy1kaWFsb2ctaGVhZGVyLWFjdGlvbi1idXR0b25zXCI+XG4gICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJtYXhpbWl6YWJsZVwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtZGlhbG9nLWhlYWRlci1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICBbaWNvbl09XCJtYXhpbWl6ZWQgPyAnbWluaW1pemUnIDogJ21heGltaXplJ1wiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICB3aWR0aD1cIjMyXCJcbiAgICAgICAgICBjb2xvcj1cImdyYXBoaXRlXCJcbiAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwidG9nZ2xlTWF4aW1pemVkKClcIj5cbiAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiY29uZmlnLnNob3dDbG9zZUJ0biAhPT0gZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLWRpYWxvZy1oZWFkZXItYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgaWNvbj1cImNsb3NlLXgtMlwiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICB3aWR0aD1cIjMyXCJcbiAgICAgICAgICBjb2xvcj1cImdyYXBoaXRlXCJcbiAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiaGlkZSgpXCI+XG4gICAgICAgIDwvY3BzLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgICNjb250ZW50XG4gICAgICBjbGFzcz1cImNwcy1kaWFsb2ctY29udGVudFwiXG4gICAgICBbbmdTdHlsZV09XCJjb25maWcuY29udGVudFN0eWxlXCJcbiAgICAgIFtjbGFzc109XCJjb25maWcuY29udGVudFN0eWxlQ2xhc3MgfHwgJydcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBjcHNEaWFsb2dDb250ZW50PjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|