ca-components 1.0.72 → 1.0.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,4 +21,4 @@ Run `ng test ca-components` to execute the unit tests via [Karma](https://karma-
21
21
 
22
22
  ## Further help
23
23
 
24
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,205 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { CommonModule } from '@angular/common';
4
+ import { ObserversModule } from '@angular/cdk/observers';
5
+ import { Subject } from 'rxjs';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "@angular/cdk/observers";
9
+ export class CaCustomScrollbarComponent {
10
+ constructor(ngZone, elRef, chng) {
11
+ this.ngZone = ngZone;
12
+ this.elRef = elRef;
13
+ this.chng = chng;
14
+ this.scrollEvent = new EventEmitter();
15
+ this.scrollTop = 5;
16
+ this.showScrollbar = false;
17
+ this.scrollHeight = 0;
18
+ this.scrollRatio = 0;
19
+ this.scrollRatioFull = 0;
20
+ this.isMouseDown = false;
21
+ this.barClickPosition = 0;
22
+ this.barClickRestHeight = 0;
23
+ this.destroy$ = new Subject();
24
+ this.tableBarClickPosition = 0;
25
+ this.tableBarClickRestWidth = 0;
26
+ this.tableScrollRatio = 0;
27
+ this.tableScrollRatioFull = 0;
28
+ this.tableScrollWidth = 0;
29
+ this.setScrollEvent = (e) => {
30
+ if (!this.isMouseDown) {
31
+ this.calculateBarSizeAndPosition(this.elRef.nativeElement.children[0]);
32
+ }
33
+ };
34
+ this.onMouseUpHandler = () => {
35
+ this.isMouseDown = false;
36
+ };
37
+ this.onResizeHandler = () => {
38
+ if (!this.isMouseDown) {
39
+ clearTimeout(this.resizeHandlerCount);
40
+ this.resizeHandlerCount = setTimeout(() => {
41
+ this.calculateBarSizeAndPosition(this.elRef.nativeElement.children[0]);
42
+ }, 150);
43
+ }
44
+ };
45
+ this.onMouseMoveHandler = (e) => {
46
+ if (this.isMouseDown) {
47
+ // Regular Scroll
48
+ if (this.scrollBarOptions.showVerticalScrollBar) {
49
+ const offsetBar = e.clientY - this.barClickPosition;
50
+ if (offsetBar > -1 &&
51
+ e.clientY + this.barClickRestHeight < window.innerHeight) {
52
+ this.bar.nativeElement.style.transform = `translateY(${offsetBar}px)`;
53
+ }
54
+ this.elRef.nativeElement.children[0].scrollTop =
55
+ (e.clientY - this.barClickPosition) * this.scrollRatioFull;
56
+ }
57
+ // Table Scroll
58
+ else {
59
+ let offsetBar = e.clientX - this.tableBarClickPosition;
60
+ const maxWidth = this.tableNotPinedBoundingRect.width;
61
+ offsetBar = offsetBar < 0 ? 0 : offsetBar;
62
+ offsetBar =
63
+ e.clientX + this.tableBarClickRestWidth > maxWidth
64
+ ? maxWidth - this.tableScrollWidth
65
+ : offsetBar;
66
+ this.bar.nativeElement.style.transform = `translateX(${offsetBar}px)`;
67
+ this.scrollEvent.emit({
68
+ eventAction: 'scrolling',
69
+ scrollPosition: offsetBar * this.tableScrollRatioFull,
70
+ });
71
+ }
72
+ }
73
+ };
74
+ }
75
+ ngOnInit() {
76
+ this.ngZone.runOutsideAngular(() => {
77
+ document.addEventListener('mouseup', this.onMouseUpHandler);
78
+ document.addEventListener('mousemove', this.onMouseMoveHandler);
79
+ this.elRef.nativeElement.children[0].addEventListener('scroll', this.setScrollEvent);
80
+ window.addEventListener('resize', this.onResizeHandler);
81
+ this.calculateBarSizeAndPosition(this.elRef.nativeElement.children[0]);
82
+ });
83
+ }
84
+ ngOnChanges(changes) {
85
+ if (!changes?.['horizontalScrollHeight']?.firstChange &&
86
+ changes?.['horizontalScrollHeight']) {
87
+ this.horizontalScrollHeight =
88
+ changes['horizontalScrollHeight'].currentValue;
89
+ }
90
+ if (!changes?.['scrollBarOptions']?.firstChange &&
91
+ changes?.['scrollBarOptions']) {
92
+ this.scrollBarOptions = changes['scrollBarOptions'].currentValue;
93
+ }
94
+ }
95
+ ngAfterViewInit() {
96
+ // Table Scroll
97
+ if (this.scrollBarOptions.showHorizontalScrollBar) {
98
+ setTimeout(() => {
99
+ this.tableNotPinedContainer =
100
+ document.querySelector('.not-pined-columns');
101
+ this.tableNotPinedBoundingRect =
102
+ this.tableNotPinedContainer?.getBoundingClientRect()
103
+ ? this.tableNotPinedContainer.getBoundingClientRect()
104
+ : null;
105
+ }, 100);
106
+ }
107
+ }
108
+ setDraggingStart(e) {
109
+ const style = window.getComputedStyle(this.bar.nativeElement);
110
+ const matrix = new DOMMatrixReadOnly(style.transform);
111
+ this.barClickPosition = e.clientY - matrix.m42;
112
+ this.barClickRestHeight = this.scrollHeight - this.barClickPosition;
113
+ this.isMouseDown = true;
114
+ // Table Scroll
115
+ this.tableBarClickPosition = e.clientX - matrix.m41;
116
+ this.tableBarClickRestWidth =
117
+ this.tableScrollWidth - this.tableBarClickPosition;
118
+ }
119
+ calculateBarSizeAndPosition(elem, pageHeight) {
120
+ setTimeout(() => {
121
+ // Table Scroll
122
+ if (this.scrollBarOptions.showHorizontalScrollBar) {
123
+ const scrollWrapper = document.querySelector('.not-pined-columns');
124
+ this.tableNotPinedBoundingRect =
125
+ scrollWrapper?.getBoundingClientRect()
126
+ ? scrollWrapper.getBoundingClientRect()
127
+ : null;
128
+ const tableFullWidth = scrollWrapper?.scrollWidth
129
+ ? scrollWrapper.scrollWidth
130
+ : 0;
131
+ const tableVisibleWidth = scrollWrapper?.getBoundingClientRect()
132
+ .width
133
+ ? Math.ceil(scrollWrapper.getBoundingClientRect().width)
134
+ : 0;
135
+ this.tableScrollRatio = tableVisibleWidth / tableFullWidth;
136
+ this.tableScrollRatioFull = tableFullWidth / tableVisibleWidth;
137
+ this.tableScrollWidth =
138
+ this.tableScrollRatio * tableVisibleWidth;
139
+ if (tableFullWidth <= tableVisibleWidth) {
140
+ this.showScrollbar = false;
141
+ this.chng.detectChanges();
142
+ }
143
+ else {
144
+ this.showScrollbar = true;
145
+ this.chng.detectChanges();
146
+ }
147
+ this.scrollEvent.emit({
148
+ eventAction: 'isScrollShowing',
149
+ isScrollBarShowing: this.showScrollbar,
150
+ });
151
+ }
152
+ // Regular Scroll
153
+ else {
154
+ const content_height = this.elRef.nativeElement.children[0].scrollHeight - 1;
155
+ const visible_height = window.innerHeight;
156
+ if (content_height <= visible_height) {
157
+ this.showScrollbar = false;
158
+ this.chng.detectChanges();
159
+ return;
160
+ }
161
+ else {
162
+ this.showScrollbar = true;
163
+ this.chng.detectChanges();
164
+ }
165
+ this.scrollRatio = visible_height / content_height;
166
+ this.scrollRatioFull = content_height / visible_height;
167
+ this.scrollTop = elem.scrollTop * this.scrollRatio;
168
+ if (this.bar) {
169
+ this.bar.nativeElement.style.transform = `translateY(${this.scrollTop}px)`;
170
+ }
171
+ this.scrollHeight = this.scrollRatio * visible_height;
172
+ }
173
+ this.chng.detectChanges();
174
+ }, 100);
175
+ }
176
+ ngOnDestroy() {
177
+ document.removeEventListener('mouseup', this.onMouseUpHandler);
178
+ document.removeEventListener('mousemove', this.onMouseMoveHandler);
179
+ window.removeEventListener('resize', this.onResizeHandler);
180
+ this.destroy$.next();
181
+ this.destroy$.complete();
182
+ }
183
+ projectContentChanged(e) {
184
+ clearTimeout(this.calculateSizeHeightTimer);
185
+ this.calculateSizeHeightTimer = setTimeout(() => {
186
+ this.calculateBarSizeAndPosition(this.elRef.nativeElement.children[0]);
187
+ }, 100);
188
+ }
189
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaCustomScrollbarComponent, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
190
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CaCustomScrollbarComponent, isStandalone: true, selector: "app-ca-custom-scrollbar", inputs: { scrollBarOptions: "scrollBarOptions", horizontalScrollHeight: "horizontalScrollHeight" }, outputs: { scrollEvent: "scrollEvent" }, viewQueries: [{ propertyName: "bar", first: true, predicate: ["bar"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"custom-scrollbar-holder\"\n #contentHolder\n (cdkObserveContent)=\"projectContentChanged($event)\"\n [class.activeToolbar]=\"showScrollbar\"\n [ngStyle]=\"{\n height: scrollBarOptions.showHorizontalScrollBar\n ? horizontalScrollHeight + 'px'\n : 100 + 'vh',\n 'overflow-y': scrollBarOptions.showHorizontalScrollBar\n ? 'visible'\n : 'auto',\n }\"\n>\n <ng-content></ng-content>\n <!-- Vertical Scroll Bar -->\n <div\n class=\"right-bar-scroll\"\n *ngIf=\"showScrollbar && scrollBarOptions.showVerticalScrollBar\"\n >\n <div\n class=\"right-bar\"\n #bar\n [ngStyle]=\"{ height: scrollHeight + 'px' }\"\n (mousedown)=\"setDraggingStart($event)\"\n (mouseup)=\"isMouseDown = false\"\n ></div>\n </div>\n\n <!-- Horizontal Scroll Bar -->\n <div\n class=\"horizontal-scroll-bar\"\n [ngStyle]=\"{\n 'left.px':\n scrollBarOptions?.modalStyle?.horizontalScrollBarLeft === 0 ||\n scrollBarOptions?.modalStyle?.horizontalScrollBarLeft\n ? scrollBarOptions.modalStyle.horizontalScrollBarLeft\n : tableNotPinedBoundingRect?.left - 74,\n 'width.px': scrollBarOptions?.modalStyle?.horizontalScrollBarWidth\n ? scrollBarOptions.modalStyle.horizontalScrollBarWidth\n : tableNotPinedBoundingRect?.width,\n 'margin-top.px': scrollBarOptions?.modalStyle\n ?.horizontalScrollBarMarginTop\n ? scrollBarOptions.modalStyle.horizontalScrollBarMarginTop\n : -15,\n }\"\n [ngClass]=\"{\n 'modal-horizontal-scroll-bar':\n scrollBarOptions?.modalStyle?.modalScrollClassActive,\n }\"\n *ngIf=\"showScrollbar && scrollBarOptions.showHorizontalScrollBar\"\n >\n <div\n class=\"horizontal-bar\"\n #bar\n [ngStyle]=\"{\n 'width.px': scrollBarOptions?.modalStyle?.additionalWidth\n ? tableScrollWidth +\n scrollBarOptions.modalStyle.additionalWidth\n : tableScrollWidth,\n }\"\n [ngClass]=\"{\n 'horizontal-bar-sticky': scrollBarOptions.dataLength >= 23,\n }\"\n (mousedown)=\"setDraggingStart($event)\"\n (mouseup)=\"isMouseDown = false\"\n ></div>\n </div>\n</div>\n", styles: [".custom-scrollbar-holder{position:relative;transition:height .25s ease-in-out;scrollbar-width:none!important;-ms-overflow-style:none!important}.custom-scrollbar-holder::-webkit-scrollbar{display:none!important}.custom-scrollbar-holder ::-webkit-scrollbar-thumb,.custom-scrollbar-holder ::-webkit-scrollbar{width:1px!important;display:none!important}.custom-scrollbar-holder .overflow-unset{overflow-y:unset!important;overflow-x:unset!important}.custom-scrollbar-holder .right-bar-scroll{height:100%;position:fixed;right:0;top:0;-webkit-user-select:none;user-select:none}.custom-scrollbar-holder .right-bar-scroll .right-bar{position:absolute;right:3px;width:6px;min-height:30px;border-radius:1px;background-color:#aaa}.custom-scrollbar-holder .right-bar-scroll .right-bar:hover{background:#0000008c}.custom-scrollbar-holder .modal-horizontal-scroll-bar{height:6px;background:#eee;border-radius:2px}.custom-scrollbar-holder .horizontal-scroll-bar{width:100%;position:absolute;left:0;-webkit-user-select:none;user-select:none}.custom-scrollbar-holder .horizontal-scroll-bar .horizontal-bar{width:6px;position:relative!important;height:6px;min-width:30px;border-radius:1px;background-color:#aaa}.custom-scrollbar-holder .horizontal-scroll-bar .horizontal-bar:hover{background:#0000008c}.custom-scrollbar-holder .horizontal-scroll-bar .horizontal-bar-sticky{position:fixed;bottom:calc(0% + 14px)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ObserversModule }, { kind: "directive", type: i2.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }] }); }
191
+ }
192
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaCustomScrollbarComponent, decorators: [{
193
+ type: Component,
194
+ args: [{ selector: 'app-ca-custom-scrollbar', standalone: true, imports: [FormsModule, CommonModule, ObserversModule], template: "<div\n class=\"custom-scrollbar-holder\"\n #contentHolder\n (cdkObserveContent)=\"projectContentChanged($event)\"\n [class.activeToolbar]=\"showScrollbar\"\n [ngStyle]=\"{\n height: scrollBarOptions.showHorizontalScrollBar\n ? horizontalScrollHeight + 'px'\n : 100 + 'vh',\n 'overflow-y': scrollBarOptions.showHorizontalScrollBar\n ? 'visible'\n : 'auto',\n }\"\n>\n <ng-content></ng-content>\n <!-- Vertical Scroll Bar -->\n <div\n class=\"right-bar-scroll\"\n *ngIf=\"showScrollbar && scrollBarOptions.showVerticalScrollBar\"\n >\n <div\n class=\"right-bar\"\n #bar\n [ngStyle]=\"{ height: scrollHeight + 'px' }\"\n (mousedown)=\"setDraggingStart($event)\"\n (mouseup)=\"isMouseDown = false\"\n ></div>\n </div>\n\n <!-- Horizontal Scroll Bar -->\n <div\n class=\"horizontal-scroll-bar\"\n [ngStyle]=\"{\n 'left.px':\n scrollBarOptions?.modalStyle?.horizontalScrollBarLeft === 0 ||\n scrollBarOptions?.modalStyle?.horizontalScrollBarLeft\n ? scrollBarOptions.modalStyle.horizontalScrollBarLeft\n : tableNotPinedBoundingRect?.left - 74,\n 'width.px': scrollBarOptions?.modalStyle?.horizontalScrollBarWidth\n ? scrollBarOptions.modalStyle.horizontalScrollBarWidth\n : tableNotPinedBoundingRect?.width,\n 'margin-top.px': scrollBarOptions?.modalStyle\n ?.horizontalScrollBarMarginTop\n ? scrollBarOptions.modalStyle.horizontalScrollBarMarginTop\n : -15,\n }\"\n [ngClass]=\"{\n 'modal-horizontal-scroll-bar':\n scrollBarOptions?.modalStyle?.modalScrollClassActive,\n }\"\n *ngIf=\"showScrollbar && scrollBarOptions.showHorizontalScrollBar\"\n >\n <div\n class=\"horizontal-bar\"\n #bar\n [ngStyle]=\"{\n 'width.px': scrollBarOptions?.modalStyle?.additionalWidth\n ? tableScrollWidth +\n scrollBarOptions.modalStyle.additionalWidth\n : tableScrollWidth,\n }\"\n [ngClass]=\"{\n 'horizontal-bar-sticky': scrollBarOptions.dataLength >= 23,\n }\"\n (mousedown)=\"setDraggingStart($event)\"\n (mouseup)=\"isMouseDown = false\"\n ></div>\n </div>\n</div>\n", styles: [".custom-scrollbar-holder{position:relative;transition:height .25s ease-in-out;scrollbar-width:none!important;-ms-overflow-style:none!important}.custom-scrollbar-holder::-webkit-scrollbar{display:none!important}.custom-scrollbar-holder ::-webkit-scrollbar-thumb,.custom-scrollbar-holder ::-webkit-scrollbar{width:1px!important;display:none!important}.custom-scrollbar-holder .overflow-unset{overflow-y:unset!important;overflow-x:unset!important}.custom-scrollbar-holder .right-bar-scroll{height:100%;position:fixed;right:0;top:0;-webkit-user-select:none;user-select:none}.custom-scrollbar-holder .right-bar-scroll .right-bar{position:absolute;right:3px;width:6px;min-height:30px;border-radius:1px;background-color:#aaa}.custom-scrollbar-holder .right-bar-scroll .right-bar:hover{background:#0000008c}.custom-scrollbar-holder .modal-horizontal-scroll-bar{height:6px;background:#eee;border-radius:2px}.custom-scrollbar-holder .horizontal-scroll-bar{width:100%;position:absolute;left:0;-webkit-user-select:none;user-select:none}.custom-scrollbar-holder .horizontal-scroll-bar .horizontal-bar{width:6px;position:relative!important;height:6px;min-width:30px;border-radius:1px;background-color:#aaa}.custom-scrollbar-holder .horizontal-scroll-bar .horizontal-bar:hover{background:#0000008c}.custom-scrollbar-holder .horizontal-scroll-bar .horizontal-bar-sticky{position:fixed;bottom:calc(0% + 14px)}\n"] }]
195
+ }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { bar: [{
196
+ type: ViewChild,
197
+ args: ['bar', { static: false }]
198
+ }], scrollEvent: [{
199
+ type: Output
200
+ }], scrollBarOptions: [{
201
+ type: Input
202
+ }], horizontalScrollHeight: [{
203
+ type: Input
204
+ }] } });
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1jdXN0b20tc2Nyb2xsYmFyL2NhLWN1c3RvbS1zY3JvbGxiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY3VzdG9tLXNjcm9sbGJhci9jYS1jdXN0b20tc2Nyb2xsYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFTL0IsTUFBTSxPQUFPLDBCQUEwQjtJQTZCbkMsWUFDWSxNQUFjLEVBQ2QsS0FBaUIsRUFDakIsSUFBdUI7UUFGdkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUE1QnpCLGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFJOUQsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUN6QixnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUN4QixvQkFBZSxHQUFXLENBQUMsQ0FBQztRQUU1QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixxQkFBZ0IsR0FBVyxDQUFDLENBQUM7UUFDN0IsdUJBQWtCLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBTXZDLDBCQUFxQixHQUFXLENBQUMsQ0FBQztRQUNsQywyQkFBc0IsR0FBVyxDQUFDLENBQUM7UUFDbkMscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBQzdCLHlCQUFvQixHQUFXLENBQUMsQ0FBQztRQUNqQyxxQkFBZ0IsR0FBVyxDQUFDLENBQUM7UUEyRHRCLG1CQUFjLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsMkJBQTJCLENBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDdkMsQ0FBQztZQUNOLENBQUM7UUFDTCxDQUFDLENBQUM7UUF3RkYscUJBQWdCLEdBQUcsR0FBRyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQzdCLENBQUMsQ0FBQztRQUdGLG9CQUFlLEdBQUcsR0FBRyxFQUFFO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ3RDLElBQUksQ0FBQywyQkFBMkIsQ0FDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUN2QyxDQUFDO2dCQUNOLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRix1QkFBa0IsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixpQkFBaUI7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLENBQUM7b0JBQzlDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO29CQUNwRCxJQUNJLFNBQVMsR0FBRyxDQUFDLENBQUM7d0JBQ2QsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFDMUQsQ0FBQzt3QkFDQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGNBQWMsU0FBUyxLQUFLLENBQUM7b0JBQzFFLENBQUM7b0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7d0JBQzFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO2dCQUNuRSxDQUFDO2dCQUNELGVBQWU7cUJBQ1YsQ0FBQztvQkFDRixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztvQkFDdkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQztvQkFFdEQsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUMxQyxTQUFTO3dCQUNMLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFFBQVE7NEJBQzlDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjs0QkFDbEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFFcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxjQUFjLFNBQVMsS0FBSyxDQUFDO29CQUV0RSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQzt3QkFDbEIsV0FBVyxFQUFFLFdBQVc7d0JBQ3hCLGNBQWMsRUFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQjtxQkFDeEQsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDO0lBcE1DLENBQUM7SUFFSixRQUFRO1FBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUU1RCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRWhFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDakQsUUFBUSxFQUNSLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQUM7WUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUV4RCxJQUFJLENBQUMsMkJBQTJCLENBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDdkMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUNJLENBQUMsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUMsRUFBRSxXQUFXO1lBQ2pELE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDLEVBQ3JDLENBQUM7WUFDQyxJQUFJLENBQUMsc0JBQXNCO2dCQUN2QixPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDdkQsQ0FBQztRQUVELElBQ0ksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLFdBQVc7WUFDM0MsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFDL0IsQ0FBQztZQUNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDckUsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ1gsZUFBZTtRQUNmLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDaEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsc0JBQXNCO29CQUN2QixRQUFRLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBRWpELElBQUksQ0FBQyx5QkFBeUI7b0JBQzFCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRTt3QkFDaEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUIsRUFBRTt3QkFDckQsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDWixDQUFDO0lBQ0wsQ0FBQztJQVVELGdCQUFnQixDQUFDLENBQWE7UUFDMUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUMvQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFeEIsZUFBZTtRQUNmLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDcEQsSUFBSSxDQUFDLHNCQUFzQjtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQzNELENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxJQUFTLEVBQUUsVUFBbUI7UUFDdEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLGVBQWU7WUFDZixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLGFBQWEsR0FDZixRQUFRLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBRWpELElBQUksQ0FBQyx5QkFBeUI7b0JBQzFCLGFBQWEsRUFBRSxxQkFBcUIsRUFBRTt3QkFDbEMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRTt3QkFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFFZixNQUFNLGNBQWMsR0FBRyxhQUFhLEVBQUUsV0FBVztvQkFDN0MsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxXQUFXO29CQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVSLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxFQUFFLHFCQUFxQixFQUFFO3FCQUMzRCxLQUFLO29CQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQztvQkFDeEQsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFUixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsaUJBQWlCLEdBQUcsY0FBYyxDQUFDO2dCQUUzRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsY0FBYyxHQUFHLGlCQUFpQixDQUFDO2dCQUUvRCxJQUFJLENBQUMsZ0JBQWdCO29CQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7Z0JBRTlDLElBQUksY0FBYyxJQUFJLGlCQUFpQixFQUFFLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO29CQUUzQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUM5QixDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7b0JBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzlCLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBQ2xCLFdBQVcsRUFBRSxpQkFBaUI7b0JBQzlCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxhQUFhO2lCQUN6QyxDQUFDLENBQUM7WUFDUCxDQUFDO1lBQ0QsaUJBQWlCO2lCQUNaLENBQUM7Z0JBQ0YsTUFBTSxjQUFjLEdBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2dCQUMxRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO2dCQUUxQyxJQUFJLGNBQWMsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQzFCLE9BQU87Z0JBQ1gsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUM5QixDQUFDO2dCQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxHQUFHLGNBQWMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLEdBQUcsY0FBYyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFFbkQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxjQUFjLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQztnQkFDL0UsQ0FBQztnQkFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDO1lBQzFELENBQUM7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFxREQsV0FBVztRQUNQLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0QsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELHFCQUFxQixDQUFDLENBQU07UUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzVDLElBQUksQ0FBQywyQkFBMkIsQ0FDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUN2QyxDQUFDO1FBQ04sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQzsrR0F0UFEsMEJBQTBCO21HQUExQiwwQkFBMEIsaVZDM0J2Qyw0Z0ZBcUVBLDI2Q0Q5Q2MsV0FBVyw4QkFBRSxZQUFZLHFUQUFFLGVBQWU7OzRGQUkzQywwQkFBMEI7a0JBUHRDLFNBQVM7K0JBQ0kseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDO29JQU9SLEdBQUc7c0JBQS9DLFNBQVM7dUJBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDekIsV0FBVztzQkFBcEIsTUFBTTtnQkFDRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgT2JzZXJ2ZXJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL29ic2VydmVycyc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtY2EtY3VzdG9tLXNjcm9sbGJhcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIENvbW1vbk1vZHVsZSwgT2JzZXJ2ZXJzTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2NhLWN1c3RvbS1zY3JvbGxiYXIuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBDYUN1c3RvbVNjcm9sbGJhckNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICAgIEBWaWV3Q2hpbGQoJ2JhcicsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIGJhciE6IEVsZW1lbnRSZWY7XG4gICAgQE91dHB1dCgpIHNjcm9sbEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBASW5wdXQoKSBzY3JvbGxCYXJPcHRpb25zOiBhbnk7XG4gICAgQElucHV0KCkgaG9yaXpvbnRhbFNjcm9sbEhlaWdodCE6IG51bWJlcjtcblxuICAgIHNjcm9sbFRvcDogbnVtYmVyID0gNTtcbiAgICBzaG93U2Nyb2xsYmFyOiBib29sZWFuID0gZmFsc2U7XG4gICAgc2Nyb2xsSGVpZ2h0OiBudW1iZXIgPSAwO1xuICAgIHNjcm9sbFJhdGlvOiBudW1iZXIgPSAwO1xuICAgIHNjcm9sbFJhdGlvRnVsbDogbnVtYmVyID0gMDtcblxuICAgIGlzTW91c2VEb3duOiBib29sZWFuID0gZmFsc2U7XG4gICAgYmFyQ2xpY2tQb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgICBiYXJDbGlja1Jlc3RIZWlnaHQ6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgY2FsY3VsYXRlU2l6ZUhlaWdodFRpbWVyOiBhbnk7XG5cbiAgICAvLyBUYWJsZSBIb3Jpem9udGFsIFNjcm9sbFxuICAgIHRhYmxlTm90UGluZWRDb250YWluZXI6IGFueTtcbiAgICB0YWJsZU5vdFBpbmVkQm91bmRpbmdSZWN0OiBhbnk7XG4gICAgdGFibGVCYXJDbGlja1Bvc2l0aW9uOiBudW1iZXIgPSAwO1xuICAgIHRhYmxlQmFyQ2xpY2tSZXN0V2lkdGg6IG51bWJlciA9IDA7XG4gICAgdGFibGVTY3JvbGxSYXRpbzogbnVtYmVyID0gMDtcbiAgICB0YWJsZVNjcm9sbFJhdGlvRnVsbDogbnVtYmVyID0gMDtcbiAgICB0YWJsZVNjcm9sbFdpZHRoOiBudW1iZXIgPSAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgY2huZzogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Nb3VzZVVwSGFuZGxlcik7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmVIYW5kbGVyKTtcblxuICAgICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTY3JvbGxFdmVudFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMub25SZXNpemVIYW5kbGVyKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVCYXJTaXplQW5kUG9zaXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFjaGFuZ2VzPy5bJ2hvcml6b250YWxTY3JvbGxIZWlnaHQnXT8uZmlyc3RDaGFuZ2UgJiZcbiAgICAgICAgICAgIGNoYW5nZXM/LlsnaG9yaXpvbnRhbFNjcm9sbEhlaWdodCddXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsU2Nyb2xsSGVpZ2h0ID1cbiAgICAgICAgICAgICAgICBjaGFuZ2VzWydob3Jpem9udGFsU2Nyb2xsSGVpZ2h0J10uY3VycmVudFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWNoYW5nZXM/Llsnc2Nyb2xsQmFyT3B0aW9ucyddPy5maXJzdENoYW5nZSAmJlxuICAgICAgICAgICAgY2hhbmdlcz8uWydzY3JvbGxCYXJPcHRpb25zJ11cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEJhck9wdGlvbnMgPSBjaGFuZ2VzWydzY3JvbGxCYXJPcHRpb25zJ10uY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBUYWJsZSBTY3JvbGxcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQmFyT3B0aW9ucy5zaG93SG9yaXpvbnRhbFNjcm9sbEJhcikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZU5vdFBpbmVkQ29udGFpbmVyID1cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5vdC1waW5lZC1jb2x1bW5zJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTm90UGluZWRCb3VuZGluZ1JlY3QgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTm90UGluZWRDb250YWluZXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMudGFibGVOb3RQaW5lZENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTY3JvbGxFdmVudCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTW91c2VEb3duKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUJhclNpemVBbmRQb3NpdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgc2V0RHJhZ2dpbmdTdGFydChlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5iYXIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IG5ldyBET01NYXRyaXhSZWFkT25seShzdHlsZS50cmFuc2Zvcm0pO1xuXG4gICAgICAgIHRoaXMuYmFyQ2xpY2tQb3NpdGlvbiA9IGUuY2xpZW50WSAtIG1hdHJpeC5tNDI7XG4gICAgICAgIHRoaXMuYmFyQ2xpY2tSZXN0SGVpZ2h0ID0gdGhpcy5zY3JvbGxIZWlnaHQgLSB0aGlzLmJhckNsaWNrUG9zaXRpb247XG4gICAgICAgIHRoaXMuaXNNb3VzZURvd24gPSB0cnVlO1xuXG4gICAgICAgIC8vIFRhYmxlIFNjcm9sbFxuICAgICAgICB0aGlzLnRhYmxlQmFyQ2xpY2tQb3NpdGlvbiA9IGUuY2xpZW50WCAtIG1hdHJpeC5tNDE7XG4gICAgICAgIHRoaXMudGFibGVCYXJDbGlja1Jlc3RXaWR0aCA9XG4gICAgICAgICAgICB0aGlzLnRhYmxlU2Nyb2xsV2lkdGggLSB0aGlzLnRhYmxlQmFyQ2xpY2tQb3NpdGlvbjtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVCYXJTaXplQW5kUG9zaXRpb24oZWxlbTogYW55LCBwYWdlSGVpZ2h0PzogbnVtYmVyKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gVGFibGUgU2Nyb2xsXG4gICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxCYXJPcHRpb25zLnNob3dIb3Jpem9udGFsU2Nyb2xsQmFyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsV3JhcHBlciA9XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ub3QtcGluZWQtY29sdW1ucycpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZU5vdFBpbmVkQm91bmRpbmdSZWN0ID1cbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsV3JhcHBlcj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2Nyb2xsV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVGdWxsV2lkdGggPSBzY3JvbGxXcmFwcGVyPy5zY3JvbGxXaWR0aFxuICAgICAgICAgICAgICAgICAgICA/IHNjcm9sbFdyYXBwZXIuc2Nyb2xsV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgOiAwO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVWaXNpYmxlV2lkdGggPSBzY3JvbGxXcmFwcGVyPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgICAgICAgICAud2lkdGhcbiAgICAgICAgICAgICAgICAgICAgPyBNYXRoLmNlaWwoc2Nyb2xsV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcbiAgICAgICAgICAgICAgICAgICAgOiAwO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVNjcm9sbFJhdGlvID0gdGFibGVWaXNpYmxlV2lkdGggLyB0YWJsZUZ1bGxXaWR0aDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVTY3JvbGxSYXRpb0Z1bGwgPSB0YWJsZUZ1bGxXaWR0aCAvIHRhYmxlVmlzaWJsZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVNjcm9sbFdpZHRoID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVNjcm9sbFJhdGlvICogdGFibGVWaXNpYmxlV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBpZiAodGFibGVGdWxsV2lkdGggPD0gdGFibGVWaXNpYmxlV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U2Nyb2xsYmFyID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaG5nLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTY3JvbGxiYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNobmcuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50QWN0aW9uOiAnaXNTY3JvbGxTaG93aW5nJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTY3JvbGxCYXJTaG93aW5nOiB0aGlzLnNob3dTY3JvbGxiYXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZWd1bGFyIFNjcm9sbFxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudF9oZWlnaHQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0uc2Nyb2xsSGVpZ2h0IC0gMTtcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpYmxlX2hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50X2hlaWdodCA8PSB2aXNpYmxlX2hlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTY3JvbGxiYXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaG5nLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1Njcm9sbGJhciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2huZy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxSYXRpbyA9IHZpc2libGVfaGVpZ2h0IC8gY29udGVudF9oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxSYXRpb0Z1bGwgPSBjb250ZW50X2hlaWdodCAvIHZpc2libGVfaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9wID0gZWxlbS5zY3JvbGxUb3AgKiB0aGlzLnNjcm9sbFJhdGlvO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHt0aGlzLnNjcm9sbFRvcH1weClgO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gdGhpcy5zY3JvbGxSYXRpbyAqIHZpc2libGVfaGVpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNobmcuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LCAxMDApO1xuICAgIH1cblxuICAgIG9uTW91c2VVcEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNNb3VzZURvd24gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmVzaXplSGFuZGxlckNvdW50OiBhbnk7XG4gICAgb25SZXNpemVIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNNb3VzZURvd24pIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZUhhbmRsZXJDb3VudCk7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUhhbmRsZXJDb3VudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQmFyU2l6ZUFuZFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSwgMTUwKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBvbk1vdXNlTW92ZUhhbmRsZXIgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzTW91c2VEb3duKSB7XG4gICAgICAgICAgICAvLyBSZWd1bGFyIFNjcm9sbFxuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQmFyT3B0aW9ucy5zaG93VmVydGljYWxTY3JvbGxCYXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRCYXIgPSBlLmNsaWVudFkgLSB0aGlzLmJhckNsaWNrUG9zaXRpb247XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRCYXIgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICBlLmNsaWVudFkgKyB0aGlzLmJhckNsaWNrUmVzdEhlaWdodCA8IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhci5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7b2Zmc2V0QmFyfXB4KWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5zY3JvbGxUb3AgPVxuICAgICAgICAgICAgICAgICAgICAoZS5jbGllbnRZIC0gdGhpcy5iYXJDbGlja1Bvc2l0aW9uKSAqIHRoaXMuc2Nyb2xsUmF0aW9GdWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGFibGUgU2Nyb2xsXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0QmFyID0gZS5jbGllbnRYIC0gdGhpcy50YWJsZUJhckNsaWNrUG9zaXRpb247XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnRhYmxlTm90UGluZWRCb3VuZGluZ1JlY3Qud2lkdGg7XG5cbiAgICAgICAgICAgICAgICBvZmZzZXRCYXIgPSBvZmZzZXRCYXIgPCAwID8gMCA6IG9mZnNldEJhcjtcbiAgICAgICAgICAgICAgICBvZmZzZXRCYXIgPVxuICAgICAgICAgICAgICAgICAgICBlLmNsaWVudFggKyB0aGlzLnRhYmxlQmFyQ2xpY2tSZXN0V2lkdGggPiBtYXhXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXhXaWR0aCAtIHRoaXMudGFibGVTY3JvbGxXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBvZmZzZXRCYXI7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmJhci5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7b2Zmc2V0QmFyfXB4KWA7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbEV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBldmVudEFjdGlvbjogJ3Njcm9sbGluZycsXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uOiBvZmZzZXRCYXIgKiB0aGlzLnRhYmxlU2Nyb2xsUmF0aW9GdWxsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXBIYW5kbGVyKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZUhhbmRsZXIpO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vblJlc2l6ZUhhbmRsZXIpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHByb2plY3RDb250ZW50Q2hhbmdlZChlOiBhbnkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2FsY3VsYXRlU2l6ZUhlaWdodFRpbWVyKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVTaXplSGVpZ2h0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQmFyU2l6ZUFuZFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJjdXN0b20tc2Nyb2xsYmFyLWhvbGRlclwiXG4gICAgI2NvbnRlbnRIb2xkZXJcbiAgICAoY2RrT2JzZXJ2ZUNvbnRlbnQpPVwicHJvamVjdENvbnRlbnRDaGFuZ2VkKCRldmVudClcIlxuICAgIFtjbGFzcy5hY3RpdmVUb29sYmFyXT1cInNob3dTY3JvbGxiYXJcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgaGVpZ2h0OiBzY3JvbGxCYXJPcHRpb25zLnNob3dIb3Jpem9udGFsU2Nyb2xsQmFyXG4gICAgICAgICAgICA/IGhvcml6b250YWxTY3JvbGxIZWlnaHQgKyAncHgnXG4gICAgICAgICAgICA6IDEwMCArICd2aCcsXG4gICAgICAgICdvdmVyZmxvdy15Jzogc2Nyb2xsQmFyT3B0aW9ucy5zaG93SG9yaXpvbnRhbFNjcm9sbEJhclxuICAgICAgICAgICAgPyAndmlzaWJsZSdcbiAgICAgICAgICAgIDogJ2F1dG8nLFxuICAgIH1cIlxuPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8IS0tIFZlcnRpY2FsIFNjcm9sbCBCYXIgLS0+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cInJpZ2h0LWJhci1zY3JvbGxcIlxuICAgICAgICAqbmdJZj1cInNob3dTY3JvbGxiYXIgJiYgc2Nyb2xsQmFyT3B0aW9ucy5zaG93VmVydGljYWxTY3JvbGxCYXJcIlxuICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJyaWdodC1iYXJcIlxuICAgICAgICAgICAgI2JhclxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyBoZWlnaHQ6IHNjcm9sbEhlaWdodCArICdweCcgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cInNldERyYWdnaW5nU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAobW91c2V1cCk9XCJpc01vdXNlRG93biA9IGZhbHNlXCJcbiAgICAgICAgPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBIb3Jpem9udGFsIFNjcm9sbCBCYXIgLS0+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImhvcml6b250YWwtc2Nyb2xsLWJhclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICdsZWZ0LnB4JzpcbiAgICAgICAgICAgICAgICBzY3JvbGxCYXJPcHRpb25zPy5tb2RhbFN0eWxlPy5ob3Jpem9udGFsU2Nyb2xsQmFyTGVmdCA9PT0gMCB8fFxuICAgICAgICAgICAgICAgIHNjcm9sbEJhck9wdGlvbnM/Lm1vZGFsU3R5bGU/Lmhvcml6b250YWxTY3JvbGxCYXJMZWZ0XG4gICAgICAgICAgICAgICAgICAgID8gc2Nyb2xsQmFyT3B0aW9ucy5tb2RhbFN0eWxlLmhvcml6b250YWxTY3JvbGxCYXJMZWZ0XG4gICAgICAgICAgICAgICAgICAgIDogdGFibGVOb3RQaW5lZEJvdW5kaW5nUmVjdD8ubGVmdCAtIDc0LFxuICAgICAgICAgICAgJ3dpZHRoLnB4Jzogc2Nyb2xsQmFyT3B0aW9ucz8ubW9kYWxTdHlsZT8uaG9yaXpvbnRhbFNjcm9sbEJhcldpZHRoXG4gICAgICAgICAgICAgICAgPyBzY3JvbGxCYXJPcHRpb25zLm1vZGFsU3R5bGUuaG9yaXpvbnRhbFNjcm9sbEJhcldpZHRoXG4gICAgICAgICAgICAgICAgOiB0YWJsZU5vdFBpbmVkQm91bmRpbmdSZWN0Py53aWR0aCxcbiAgICAgICAgICAgICdtYXJnaW4tdG9wLnB4Jzogc2Nyb2xsQmFyT3B0aW9ucz8ubW9kYWxTdHlsZVxuICAgICAgICAgICAgICAgID8uaG9yaXpvbnRhbFNjcm9sbEJhck1hcmdpblRvcFxuICAgICAgICAgICAgICAgID8gc2Nyb2xsQmFyT3B0aW9ucy5tb2RhbFN0eWxlLmhvcml6b250YWxTY3JvbGxCYXJNYXJnaW5Ub3BcbiAgICAgICAgICAgICAgICA6IC0xNSxcbiAgICAgICAgfVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdtb2RhbC1ob3Jpem9udGFsLXNjcm9sbC1iYXInOlxuICAgICAgICAgICAgICAgIHNjcm9sbEJhck9wdGlvbnM/Lm1vZGFsU3R5bGU/Lm1vZGFsU2Nyb2xsQ2xhc3NBY3RpdmUsXG4gICAgICAgIH1cIlxuICAgICAgICAqbmdJZj1cInNob3dTY3JvbGxiYXIgJiYgc2Nyb2xsQmFyT3B0aW9ucy5zaG93SG9yaXpvbnRhbFNjcm9sbEJhclwiXG4gICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImhvcml6b250YWwtYmFyXCJcbiAgICAgICAgICAgICNiYXJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAnd2lkdGgucHgnOiBzY3JvbGxCYXJPcHRpb25zPy5tb2RhbFN0eWxlPy5hZGRpdGlvbmFsV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgPyB0YWJsZVNjcm9sbFdpZHRoICtcbiAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxCYXJPcHRpb25zLm1vZGFsU3R5bGUuYWRkaXRpb25hbFdpZHRoXG4gICAgICAgICAgICAgICAgICAgIDogdGFibGVTY3JvbGxXaWR0aCxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdob3Jpem9udGFsLWJhci1zdGlja3knOiBzY3JvbGxCYXJPcHRpb25zLmRhdGFMZW5ndGggPj0gMjMsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwic2V0RHJhZ2dpbmdTdGFydCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChtb3VzZXVwKT1cImlzTW91c2VEb3duID0gZmFsc2VcIlxuICAgICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -5,6 +5,8 @@ import { Component, Input } from '@angular/core';
5
5
  import { FormsModule } from '@angular/forms';
6
6
  import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
7
7
  import { AngularSvgIconModule } from 'angular-svg-icon';
8
+ // components
9
+ import { CaCustomScrollbarComponent } from '../ca-custom-scrollbar/ca-custom-scrollbar.component';
8
10
  import * as i0 from "@angular/core";
9
11
  import * as i1 from "@angular/common";
10
12
  import * as i2 from "@angular/cdk/drag-drop";
@@ -15,7 +17,9 @@ export class CaModalComponent {
15
17
  this.modalTitle = '';
16
18
  }
17
19
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CaModalComponent, isStandalone: true, selector: "app-ca-modal", inputs: { customClass: "customClass", partClass: "partClass", modalTitle: "modalTitle", leftHeaderTemplate: "leftHeaderTemplate", rightHeaderTemplate: "rightHeaderTemplate", footerTemplate: "footerTemplate", additionalPartTemplate: "additionalPartTemplate" }, ngImport: i0, template: "<div cdkDrag class=\"modal-container {{ customClass }}\" ngBAutofocus>\n <div class=\"modal-original-part {{ partClass }}\">\n <div cdkDragHandle class=\"modal-header d-flex justify-content-between\">\n <div class=\"modal-header-leftside\">\n <!-- Header title -->\n\n <h5 class=\"modal-title\">{{ modalTitle }}</h5>\n <!-- Haeder left side template -->\n\n <ng-container *ngTemplateOutlet=\"leftHeaderTemplate\"></ng-container>\n </div>\n <div class=\"modal-header-rightside\">\n <!-- Haeder right side -->\n\n <ng-container *ngTemplateOutlet=\"rightHeaderTemplate\"></ng-container>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <!-- Modal content -->\n\n <ng-content select=\"[origin]\"></ng-content>\n </div>\n <!-- Footer Template Content -->\n\n <div cdkDragHandle>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n \n </div>\n <!-- Additional Part Content -->\n\n <ng-container *ngTemplateOutlet=\"additionalPartTemplate\"></ng-container>\n</div>", styles: ["@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.modal-open{overflow:hidden!important}.modal-open::-webkit-scrollbar-track{background-color:#0000004d}.modal-open::-webkit-scrollbar-thumb{background-color:#0000004d}.modal-date-logo{height:26px;width:26px;cursor:pointer!important;position:relative}.modal-date-logo svg:hover{cursor:pointer}.modal-date-logo svg:hover path{fill:#919191}.modal-date-border{height:18px;margin-right:4px;border-right:1px solid #cccccc}.modal-container{width:480px;height:auto;overflow:hidden;position:relative;transition:width .3s}.modal-container .drop-zone-active{width:100%;height:100%;position:absolute;top:0%;left:0%;z-index:99999999999}.modal-container .drop-zone-active .drop-zone-title{position:absolute;z-index:9999;top:16px;left:14px;color:#6c6c6c;font-size:18px;font-weight:800;margin:0}.modal-container .drop-zone-active .ta-modal-dropzone{position:absolute;top:0;border:4px dashed #e5e5e5}.modal-container .drop-zone-active-hovered .ta-modal-dropzone{position:absolute;top:0;border:4px dashed #dadada;background-color:#eee}.modal-container .drop-zone-active-hovered .ta-modal-dropzone .ta-modal-dropzone-label{background-color:#eee}.modal-container .drop-zone-active-hovered .ta-modal-dropzone .ta-modal-dropzone-text{color:#6c6c6c}.modal-container .drop-zone-active .ta-modal-dropzone-area{transform:scale(2)}.modal-container .drop-zone-active .ta-modal-dropzone-text{position:absolute!important;top:84%!important;text-align:center;left:50%!important;transform:translate(-50%,-50%)}.modal-container.modal-container-load{width:1280px;display:flex}.modal-container.modal-container-load .divider{width:615px}.modal-container.modal-container-load .modal-additional-part{width:640px}.modal-container.modal-container-load .modal-additional-part-load{background-color:#f7f7f7;height:650px}.modal-container.modal-container-load .modal-additional-part-load .divider{background-color:#dadada;height:1px}.modal-container.modal-container-load .modal-additional-part-load-modal{max-width:640px;width:calc(100vw - 640px)}.modal-container .load-modal-origin-part{width:640px!important}.modal-container.modal-container-XS{width:390px}.modal-container.modal-container-XS .divider{width:366px}.modal-container.modal-container-XS .confirmation-modal-body{padding:22px 6px}.modal-container.modal-container-S{width:366px}.modal-container.modal-container-S .divider{width:341px}.modal-container.modal-container-M{width:640px}.modal-container.modal-container-M .divider{height:1px;background-color:#dadada;width:616px;margin:0 auto}.modal-container.modal-container-L{width:710px}.modal-container.modal-container-L .divider{width:685px}.modal-container.modal-container-XL{width:860px}.modal-container.modal-container-XL .divider{width:836px}.modal-container.modal-container-XL-2{width:800px;overflow:visible!important}.modal-container.modal-container-XL-2 .divider{width:775px}.modal-container .divider-bottom{margin-bottom:12px!important}.modal-container .card-divider{background-color:#dadada!important;height:1px!important}.modal-container.modal-container-sph-applicant{width:940px;height:960px;overflow-y:scroll;scrollbar-width:none!important}.modal-container.modal-container-sph-applicant::-webkit-scrollbar{width:2px}.modal-container.modal-container-sph-applicant::-webkit-scrollbar-thumb{background-color:transparent;border:6px solid transparent;border-radius:1px}.modal-container.modal-container-sph-applicant::-webkit-scrollbar-track{padding:0;position:relative;right:0;top:0;background:transparent}.modal-container.modal-container-sph-applicant .divider{display:none}.modal-container .divider{width:455px;height:2px;content:\"\";border-radius:1px;background-color:#f3f3f3;margin:0 auto}.modal-container .modal-spinner{position:absolute;bottom:7px;right:8px}.modal-container .form-container .row>*:nth-child(odd){padding-left:12px;padding-right:12px}.modal-container .form-container .row>*:nth-child(2n){padding-left:0;padding-right:12px}.modal-container .not-clickable{pointer-events:none;cursor:not-allowed;background:#f7f7f7!important;color:#ccc!important}.modal-container .modal-footer>*{margin:0!important}.modal-container .modal-footer .ta-modal-footer-right-side,.modal-container .modal-footer .ta-modal-footer-left-side{gap:12px;padding-left:1px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: AngularSvgIconModule }, { kind: "ngmodule", type: NgbModule }], animations: [
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CaModalComponent, isStandalone: true, selector: "app-ca-modal", inputs: { customClass: "customClass", partClass: "partClass", modalTitle: "modalTitle", leftHeaderTemplate: "leftHeaderTemplate", rightHeaderTemplate: "rightHeaderTemplate", footerTemplate: "footerTemplate", additionalPartTemplate: "additionalPartTemplate" }, ngImport: i0, template: "<app-ca-custom-scrollbar\n [scrollBarOptions]=\"{\n showVerticalScrollBar: true,\n showHorizontalScrollBar: false,\n }\"\n>\n <div cdkDrag class=\"modal-container {{ customClass }}\" ngBAutofocus>\n <div class=\"modal-original-part {{ partClass }}\">\n <div\n cdkDragHandle\n class=\"modal-header d-flex justify-content-between\"\n >\n <div class=\"modal-header-leftside\">\n <!-- Header title -->\n\n <h5 class=\"modal-title\">{{ modalTitle }}</h5>\n <!-- Haeder left side template -->\n\n <ng-container\n *ngTemplateOutlet=\"leftHeaderTemplate\"\n ></ng-container>\n </div>\n <div class=\"modal-header-rightside\">\n <!-- Haeder right side -->\n\n <ng-container\n *ngTemplateOutlet=\"rightHeaderTemplate\"\n ></ng-container>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <!-- Modal content -->\n\n <ng-content select=\"[origin]\"></ng-content>\n </div>\n <!-- Footer Template Content -->\n\n <div cdkDragHandle>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n </div>\n <!-- Additional Part Content -->\n\n <ng-container *ngTemplateOutlet=\"additionalPartTemplate\"></ng-container>\n </div>\n</app-ca-custom-scrollbar>\n", styles: ["@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.modal-open{overflow:hidden!important}.modal-open::-webkit-scrollbar-track{background-color:#0000004d}.modal-open::-webkit-scrollbar-thumb{background-color:#0000004d}.modal-date-logo{height:26px;width:26px;cursor:pointer!important;position:relative}.modal-date-logo svg:hover{cursor:pointer}.modal-date-logo svg:hover path{fill:#919191}.modal-date-border{height:18px;margin-right:4px;border-right:1px solid #cccccc}.modal-container{width:480px;height:auto;overflow:hidden;position:relative;transition:width .3s}.modal-container .drop-zone-active{width:100%;height:100%;position:absolute;top:0%;left:0%;z-index:99999999999}.modal-container .drop-zone-active .drop-zone-title{position:absolute;z-index:9999;top:16px;left:14px;color:#6c6c6c;font-size:18px;font-weight:800;margin:0}.modal-container .drop-zone-active .ta-modal-dropzone{position:absolute;top:0;border:4px dashed #e5e5e5}.modal-container .drop-zone-active-hovered .ta-modal-dropzone{position:absolute;top:0;border:4px dashed #dadada;background-color:#eee}.modal-container .drop-zone-active-hovered .ta-modal-dropzone .ta-modal-dropzone-label{background-color:#eee}.modal-container .drop-zone-active-hovered .ta-modal-dropzone .ta-modal-dropzone-text{color:#6c6c6c}.modal-container .drop-zone-active .ta-modal-dropzone-area{transform:scale(2)}.modal-container .drop-zone-active .ta-modal-dropzone-text{position:absolute!important;top:84%!important;text-align:center;left:50%!important;transform:translate(-50%,-50%)}.modal-container.modal-container-load{width:1280px;display:flex}.modal-container.modal-container-load .divider{width:615px}.modal-container.modal-container-load .modal-additional-part{width:640px}.modal-container.modal-container-load .modal-additional-part-load{background-color:#f7f7f7;height:650px}.modal-container.modal-container-load .modal-additional-part-load .divider{background-color:#dadada;height:1px}.modal-container.modal-container-load .modal-additional-part-load-modal{max-width:640px;width:calc(100vw - 640px)}.modal-container .load-modal-origin-part{width:640px!important}.modal-container.modal-container-XS{width:390px}.modal-container.modal-container-XS .divider{width:366px}.modal-container.modal-container-XS .confirmation-modal-body{padding:22px 6px}.modal-container.modal-container-S{width:366px}.modal-container.modal-container-S .divider{width:341px}.modal-container.modal-container-M{width:640px}.modal-container.modal-container-M .divider{height:1px;background-color:#dadada;width:616px;margin:0 auto}.modal-container.modal-container-L{width:710px}.modal-container.modal-container-L .divider{width:685px}.modal-container.modal-container-XL{width:860px}.modal-container.modal-container-XL .divider{width:836px}.modal-container.modal-container-XL-2{width:800px;overflow:visible!important}.modal-container.modal-container-XL-2 .divider{width:775px}.modal-container .divider-bottom{margin-bottom:12px!important}.modal-container .card-divider{background-color:#dadada!important;height:1px!important}.modal-container.modal-container-sph-applicant{width:940px;height:960px;overflow-y:scroll;scrollbar-width:none!important}.modal-container.modal-container-sph-applicant::-webkit-scrollbar{width:2px}.modal-container.modal-container-sph-applicant::-webkit-scrollbar-thumb{background-color:transparent;border:6px solid transparent;border-radius:1px}.modal-container.modal-container-sph-applicant::-webkit-scrollbar-track{padding:0;position:relative;right:0;top:0;background:transparent}.modal-container.modal-container-sph-applicant .divider{display:none}.modal-container .divider{width:455px;height:2px;content:\"\";border-radius:1px;background-color:#f3f3f3;margin:0 auto}.modal-container .modal-spinner{position:absolute;bottom:7px;right:8px}.modal-container .form-container .row>*:nth-child(odd){padding-left:12px;padding-right:12px}.modal-container .form-container .row>*:nth-child(2n){padding-left:0;padding-right:12px}.modal-container .not-clickable{pointer-events:none;cursor:not-allowed;background:#f7f7f7!important;color:#ccc!important}.modal-container .modal-footer>*{margin:0!important}.modal-container .modal-footer .ta-modal-footer-right-side,.modal-container .modal-footer .ta-modal-footer-left-side{gap:12px;padding-left:1px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: AngularSvgIconModule }, { kind: "ngmodule", type: NgbModule }, { kind: "component", type:
21
+ // components
22
+ CaCustomScrollbarComponent, selector: "app-ca-custom-scrollbar", inputs: ["scrollBarOptions", "horizontalScrollHeight"], outputs: ["scrollEvent"] }], animations: [
19
23
  trigger('widthGrow', [
20
24
  state('closed', style({
21
25
  transform: 'scale(0)',
@@ -35,6 +39,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
35
39
  DragDropModule,
36
40
  AngularSvgIconModule,
37
41
  NgbModule,
42
+ // components
43
+ CaCustomScrollbarComponent,
38
44
  ], animations: [
39
45
  trigger('widthGrow', [
40
46
  state('closed', style({
@@ -45,7 +51,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
45
51
  })),
46
52
  transition('closed => open', animate(100)),
47
53
  ]),
48
- ], template: "<div cdkDrag class=\"modal-container {{ customClass }}\" ngBAutofocus>\n <div class=\"modal-original-part {{ partClass }}\">\n <div cdkDragHandle class=\"modal-header d-flex justify-content-between\">\n <div class=\"modal-header-leftside\">\n <!-- Header title -->\n\n <h5 class=\"modal-title\">{{ modalTitle }}</h5>\n <!-- Haeder left side template -->\n\n <ng-container *ngTemplateOutlet=\"leftHeaderTemplate\"></ng-container>\n </div>\n <div class=\"modal-header-rightside\">\n <!-- Haeder right side -->\n\n <ng-container *ngTemplateOutlet=\"rightHeaderTemplate\"></ng-container>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <!-- Modal content -->\n\n <ng-content select=\"[origin]\"></ng-content>\n </div>\n <!-- Footer Template Content -->\n\n <div cdkDragHandle>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n \n </div>\n <!-- Additional Part Content -->\n\n <ng-container *ngTemplateOutlet=\"additionalPartTemplate\"></ng-container>\n</div>", styles: ["@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.modal-open{overflow:hidden!important}.modal-open::-webkit-scrollbar-track{background-color:#0000004d}.modal-open::-webkit-scrollbar-thumb{background-color:#0000004d}.modal-date-logo{height:26px;width:26px;cursor:pointer!important;position:relative}.modal-date-logo svg:hover{cursor:pointer}.modal-date-logo svg:hover path{fill:#919191}.modal-date-border{height:18px;margin-right:4px;border-right:1px solid #cccccc}.modal-container{width:480px;height:auto;overflow:hidden;position:relative;transition:width .3s}.modal-container .drop-zone-active{width:100%;height:100%;position:absolute;top:0%;left:0%;z-index:99999999999}.modal-container .drop-zone-active .drop-zone-title{position:absolute;z-index:9999;top:16px;left:14px;color:#6c6c6c;font-size:18px;font-weight:800;margin:0}.modal-container .drop-zone-active .ta-modal-dropzone{position:absolute;top:0;border:4px dashed #e5e5e5}.modal-container .drop-zone-active-hovered .ta-modal-dropzone{position:absolute;top:0;border:4px dashed #dadada;background-color:#eee}.modal-container .drop-zone-active-hovered .ta-modal-dropzone .ta-modal-dropzone-label{background-color:#eee}.modal-container .drop-zone-active-hovered .ta-modal-dropzone .ta-modal-dropzone-text{color:#6c6c6c}.modal-container .drop-zone-active .ta-modal-dropzone-area{transform:scale(2)}.modal-container .drop-zone-active .ta-modal-dropzone-text{position:absolute!important;top:84%!important;text-align:center;left:50%!important;transform:translate(-50%,-50%)}.modal-container.modal-container-load{width:1280px;display:flex}.modal-container.modal-container-load .divider{width:615px}.modal-container.modal-container-load .modal-additional-part{width:640px}.modal-container.modal-container-load .modal-additional-part-load{background-color:#f7f7f7;height:650px}.modal-container.modal-container-load .modal-additional-part-load .divider{background-color:#dadada;height:1px}.modal-container.modal-container-load .modal-additional-part-load-modal{max-width:640px;width:calc(100vw - 640px)}.modal-container .load-modal-origin-part{width:640px!important}.modal-container.modal-container-XS{width:390px}.modal-container.modal-container-XS .divider{width:366px}.modal-container.modal-container-XS .confirmation-modal-body{padding:22px 6px}.modal-container.modal-container-S{width:366px}.modal-container.modal-container-S .divider{width:341px}.modal-container.modal-container-M{width:640px}.modal-container.modal-container-M .divider{height:1px;background-color:#dadada;width:616px;margin:0 auto}.modal-container.modal-container-L{width:710px}.modal-container.modal-container-L .divider{width:685px}.modal-container.modal-container-XL{width:860px}.modal-container.modal-container-XL .divider{width:836px}.modal-container.modal-container-XL-2{width:800px;overflow:visible!important}.modal-container.modal-container-XL-2 .divider{width:775px}.modal-container .divider-bottom{margin-bottom:12px!important}.modal-container .card-divider{background-color:#dadada!important;height:1px!important}.modal-container.modal-container-sph-applicant{width:940px;height:960px;overflow-y:scroll;scrollbar-width:none!important}.modal-container.modal-container-sph-applicant::-webkit-scrollbar{width:2px}.modal-container.modal-container-sph-applicant::-webkit-scrollbar-thumb{background-color:transparent;border:6px solid transparent;border-radius:1px}.modal-container.modal-container-sph-applicant::-webkit-scrollbar-track{padding:0;position:relative;right:0;top:0;background:transparent}.modal-container.modal-container-sph-applicant .divider{display:none}.modal-container .divider{width:455px;height:2px;content:\"\";border-radius:1px;background-color:#f3f3f3;margin:0 auto}.modal-container .modal-spinner{position:absolute;bottom:7px;right:8px}.modal-container .form-container .row>*:nth-child(odd){padding-left:12px;padding-right:12px}.modal-container .form-container .row>*:nth-child(2n){padding-left:0;padding-right:12px}.modal-container .not-clickable{pointer-events:none;cursor:not-allowed;background:#f7f7f7!important;color:#ccc!important}.modal-container .modal-footer>*{margin:0!important}.modal-container .modal-footer .ta-modal-footer-right-side,.modal-container .modal-footer .ta-modal-footer-left-side{gap:12px;padding-left:1px}\n"] }]
54
+ ], template: "<app-ca-custom-scrollbar\n [scrollBarOptions]=\"{\n showVerticalScrollBar: true,\n showHorizontalScrollBar: false,\n }\"\n>\n <div cdkDrag class=\"modal-container {{ customClass }}\" ngBAutofocus>\n <div class=\"modal-original-part {{ partClass }}\">\n <div\n cdkDragHandle\n class=\"modal-header d-flex justify-content-between\"\n >\n <div class=\"modal-header-leftside\">\n <!-- Header title -->\n\n <h5 class=\"modal-title\">{{ modalTitle }}</h5>\n <!-- Haeder left side template -->\n\n <ng-container\n *ngTemplateOutlet=\"leftHeaderTemplate\"\n ></ng-container>\n </div>\n <div class=\"modal-header-rightside\">\n <!-- Haeder right side -->\n\n <ng-container\n *ngTemplateOutlet=\"rightHeaderTemplate\"\n ></ng-container>\n </div>\n </div>\n\n <div class=\"modal-body\">\n <!-- Modal content -->\n\n <ng-content select=\"[origin]\"></ng-content>\n </div>\n <!-- Footer Template Content -->\n\n <div cdkDragHandle>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n </div>\n <!-- Additional Part Content -->\n\n <ng-container *ngTemplateOutlet=\"additionalPartTemplate\"></ng-container>\n </div>\n</app-ca-custom-scrollbar>\n", styles: ["@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.modal-open{overflow:hidden!important}.modal-open::-webkit-scrollbar-track{background-color:#0000004d}.modal-open::-webkit-scrollbar-thumb{background-color:#0000004d}.modal-date-logo{height:26px;width:26px;cursor:pointer!important;position:relative}.modal-date-logo svg:hover{cursor:pointer}.modal-date-logo svg:hover path{fill:#919191}.modal-date-border{height:18px;margin-right:4px;border-right:1px solid #cccccc}.modal-container{width:480px;height:auto;overflow:hidden;position:relative;transition:width .3s}.modal-container .drop-zone-active{width:100%;height:100%;position:absolute;top:0%;left:0%;z-index:99999999999}.modal-container .drop-zone-active .drop-zone-title{position:absolute;z-index:9999;top:16px;left:14px;color:#6c6c6c;font-size:18px;font-weight:800;margin:0}.modal-container .drop-zone-active .ta-modal-dropzone{position:absolute;top:0;border:4px dashed #e5e5e5}.modal-container .drop-zone-active-hovered .ta-modal-dropzone{position:absolute;top:0;border:4px dashed #dadada;background-color:#eee}.modal-container .drop-zone-active-hovered .ta-modal-dropzone .ta-modal-dropzone-label{background-color:#eee}.modal-container .drop-zone-active-hovered .ta-modal-dropzone .ta-modal-dropzone-text{color:#6c6c6c}.modal-container .drop-zone-active .ta-modal-dropzone-area{transform:scale(2)}.modal-container .drop-zone-active .ta-modal-dropzone-text{position:absolute!important;top:84%!important;text-align:center;left:50%!important;transform:translate(-50%,-50%)}.modal-container.modal-container-load{width:1280px;display:flex}.modal-container.modal-container-load .divider{width:615px}.modal-container.modal-container-load .modal-additional-part{width:640px}.modal-container.modal-container-load .modal-additional-part-load{background-color:#f7f7f7;height:650px}.modal-container.modal-container-load .modal-additional-part-load .divider{background-color:#dadada;height:1px}.modal-container.modal-container-load .modal-additional-part-load-modal{max-width:640px;width:calc(100vw - 640px)}.modal-container .load-modal-origin-part{width:640px!important}.modal-container.modal-container-XS{width:390px}.modal-container.modal-container-XS .divider{width:366px}.modal-container.modal-container-XS .confirmation-modal-body{padding:22px 6px}.modal-container.modal-container-S{width:366px}.modal-container.modal-container-S .divider{width:341px}.modal-container.modal-container-M{width:640px}.modal-container.modal-container-M .divider{height:1px;background-color:#dadada;width:616px;margin:0 auto}.modal-container.modal-container-L{width:710px}.modal-container.modal-container-L .divider{width:685px}.modal-container.modal-container-XL{width:860px}.modal-container.modal-container-XL .divider{width:836px}.modal-container.modal-container-XL-2{width:800px;overflow:visible!important}.modal-container.modal-container-XL-2 .divider{width:775px}.modal-container .divider-bottom{margin-bottom:12px!important}.modal-container .card-divider{background-color:#dadada!important;height:1px!important}.modal-container.modal-container-sph-applicant{width:940px;height:960px;overflow-y:scroll;scrollbar-width:none!important}.modal-container.modal-container-sph-applicant::-webkit-scrollbar{width:2px}.modal-container.modal-container-sph-applicant::-webkit-scrollbar-thumb{background-color:transparent;border:6px solid transparent;border-radius:1px}.modal-container.modal-container-sph-applicant::-webkit-scrollbar-track{padding:0;position:relative;right:0;top:0;background:transparent}.modal-container.modal-container-sph-applicant .divider{display:none}.modal-container .divider{width:455px;height:2px;content:\"\";border-radius:1px;background-color:#f3f3f3;margin:0 auto}.modal-container .modal-spinner{position:absolute;bottom:7px;right:8px}.modal-container .form-container .row>*:nth-child(odd){padding-left:12px;padding-right:12px}.modal-container .form-container .row>*:nth-child(2n){padding-left:0;padding-right:12px}.modal-container .not-clickable{pointer-events:none;cursor:not-allowed;background:#f7f7f7!important;color:#ccc!important}.modal-container .modal-footer>*{margin:0!important}.modal-container .modal-footer .ta-modal-footer-right-side,.modal-container .modal-footer .ta-modal-footer-left-side{gap:12px;padding-left:1px}\n"] }]
49
55
  }], propDecorators: { customClass: [{
50
56
  type: Input
51
57
  }], partClass: [{
@@ -61,4 +67,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
61
67
  }], additionalPartTemplate: [{
62
68
  type: Input
63
69
  }] } });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtbW9kYWwvY2EtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtbW9kYWwvY2EtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFnQ3hELE1BQU0sT0FBTyxnQkFBZ0I7SUE5QjdCO1FBK0JXLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsZUFBVSxHQUFXLEVBQUUsQ0FBQztLQU9sQzsrR0FWWSxnQkFBZ0I7bUdBQWhCLGdCQUFnQiw0VUM1QzdCLHdrQ0FpQ00sdzdJRGJGLFlBQVkscU1BQ1osV0FBVyw4QkFDWCxjQUFjLCtsQkFDZCxvQkFBb0IsOEJBQ3BCLFNBQVMsaUJBRUM7WUFDVixPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUNuQixLQUFLLENBQ0gsUUFBUSxFQUNSLEtBQUssQ0FBQztvQkFDSixTQUFTLEVBQUUsVUFBVTtpQkFDdEIsQ0FBQyxDQUNIO2dCQUNELEtBQUssQ0FDSCxNQUFNLEVBQ04sS0FBSyxDQUFDO29CQUNKLFNBQVMsRUFBRSxVQUFVO2lCQUN0QixDQUFDLENBQ0g7Z0JBQ0QsVUFBVSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMzQyxDQUFDO1NBQ0g7OzRGQUVVLGdCQUFnQjtrQkE5QjVCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGNBQWMsV0FHZjt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxvQkFBb0I7d0JBQ3BCLFNBQVM7cUJBQ1YsY0FDVzt3QkFDVixPQUFPLENBQUMsV0FBVyxFQUFFOzRCQUNuQixLQUFLLENBQ0gsUUFBUSxFQUNSLEtBQUssQ0FBQztnQ0FDSixTQUFTLEVBQUUsVUFBVTs2QkFDdEIsQ0FBQyxDQUNIOzRCQUNELEtBQUssQ0FDSCxNQUFNLEVBQ04sS0FBSyxDQUFDO2dDQUNKLFNBQVMsRUFBRSxVQUFVOzZCQUN0QixDQUFDLENBQ0g7NEJBQ0QsVUFBVSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzt5QkFDM0MsQ0FBQztxQkFDSDs4QkFHUSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgc3RhdGUsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uLFxuICB0cmlnZ2VyLFxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdiTW9kdWxlIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgQW5ndWxhclN2Z0ljb25Nb2R1bGUgfSBmcm9tICdhbmd1bGFyLXN2Zy1pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnYXBwLWNhLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2EtbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICBBbmd1bGFyU3ZnSWNvbk1vZHVsZSxcbiAgICBOZ2JNb2R1bGUsXG4gIF0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCd3aWR0aEdyb3cnLCBbXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ2Nsb3NlZCcsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwKScsXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdvcGVuJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyxcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICB0cmFuc2l0aW9uKCdjbG9zZWQgPT4gb3BlbicsIGFuaW1hdGUoMTAwKSksXG4gICAgXSksXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENhTW9kYWxDb21wb25lbnQge1xuICBASW5wdXQoKSBjdXN0b21DbGFzczogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHBhcnRDbGFzczogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIG1vZGFsVGl0bGU6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIGxlZnRIZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPG51bGw+O1xuICBASW5wdXQoKSByaWdodEhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8bnVsbD47XG4gIEBJbnB1dCgpIGZvb3RlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8bnVsbD47XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxQYXJ0VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxudWxsPjtcbiAgXG59XG4iLCI8ZGl2IGNka0RyYWcgY2xhc3M9XCJtb2RhbC1jb250YWluZXIge3sgY3VzdG9tQ2xhc3MgfX1cIiBuZ0JBdXRvZm9jdXM+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1vcmlnaW5hbC1wYXJ0IHt7IHBhcnRDbGFzcyB9fVwiPlxuICAgIDxkaXYgY2RrRHJhZ0hhbmRsZSBjbGFzcz1cIm1vZGFsLWhlYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXItbGVmdHNpZGVcIj5cbiAgICAgICAgPCEtLSBIZWFkZXIgdGl0bGUgLS0+XG5cbiAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+e3sgbW9kYWxUaXRsZSB9fTwvaDU+XG4gICAgICAgIDwhLS0gSGFlZGVyIGxlZnQgc2lkZSB0ZW1wbGF0ZSAtLT5cblxuICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxlZnRIZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyLXJpZ2h0c2lkZVwiPlxuICAgICAgICA8IS0tIEhhZWRlciByaWdodCBzaWRlIC0tPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyaWdodEhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICA8IS0tIE1vZGFsIGNvbnRlbnQgLS0+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvcmlnaW5dXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gRm9vdGVyIFRlbXBsYXRlIENvbnRlbnQgLS0+XG5cbiAgICA8ZGl2IGNka0RyYWdIYW5kbGU+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgPC9kaXY+XG4gIDwhLS0gQWRkaXRpb25hbCBQYXJ0IENvbnRlbnQgLS0+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkZGl0aW9uYWxQYXJ0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtbW9kYWwvY2EtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtbW9kYWwvY2EtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1YsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEQsYUFBYTtBQUNiLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOzs7O0FBbUNsRyxNQUFNLE9BQU8sZ0JBQWdCO0lBakM3QjtRQWtDYSxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBQ3ZCLGVBQVUsR0FBVyxFQUFFLENBQUM7S0FNcEM7K0dBVFksZ0JBQWdCO21HQUFoQixnQkFBZ0IsNFVDbEQ3QixtbURBK0NBLHc3SUR4QlEsWUFBWSxxTUFDWixXQUFXLDhCQUNYLGNBQWMsK2xCQUNkLG9CQUFvQiw4QkFDcEIsU0FBUztnQkFFVCxhQUFhO2dCQUNiLDBCQUEwQix3SUFFbEI7WUFDUixPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUNqQixLQUFLLENBQ0QsUUFBUSxFQUNSLEtBQUssQ0FBQztvQkFDRixTQUFTLEVBQUUsVUFBVTtpQkFDeEIsQ0FBQyxDQUNMO2dCQUNELEtBQUssQ0FDRCxNQUFNLEVBQ04sS0FBSyxDQUFDO29CQUNGLFNBQVMsRUFBRSxVQUFVO2lCQUN4QixDQUFDLENBQ0w7Z0JBQ0QsVUFBVSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM3QyxDQUFDO1NBQ0w7OzRGQUVRLGdCQUFnQjtrQkFqQzVCLFNBQVM7aUNBQ00sSUFBSSxZQUNOLGNBQWMsV0FHZjt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxvQkFBb0I7d0JBQ3BCLFNBQVM7d0JBRVQsYUFBYTt3QkFDYiwwQkFBMEI7cUJBQzdCLGNBQ1c7d0JBQ1IsT0FBTyxDQUFDLFdBQVcsRUFBRTs0QkFDakIsS0FBSyxDQUNELFFBQVEsRUFDUixLQUFLLENBQUM7Z0NBQ0YsU0FBUyxFQUFFLFVBQVU7NkJBQ3hCLENBQUMsQ0FDTDs0QkFDRCxLQUFLLENBQ0QsTUFBTSxFQUNOLEtBQUssQ0FBQztnQ0FDRixTQUFTLEVBQUUsVUFBVTs2QkFDeEIsQ0FBQyxDQUNMOzRCQUNELFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQzdDLENBQUM7cUJBQ0w7OEJBR1EsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgYW5pbWF0ZSxcbiAgICBzdGF0ZSxcbiAgICBzdHlsZSxcbiAgICB0cmFuc2l0aW9uLFxuICAgIHRyaWdnZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ2JNb2R1bGUgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgeyBDYUN1c3RvbVNjcm9sbGJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NhLWN1c3RvbS1zY3JvbGxiYXIvY2EtY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnYXBwLWNhLW1vZGFsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICAgICAgQW5ndWxhclN2Z0ljb25Nb2R1bGUsXG4gICAgICAgIE5nYk1vZHVsZSxcblxuICAgICAgICAvLyBjb21wb25lbnRzXG4gICAgICAgIENhQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50LFxuICAgIF0sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCd3aWR0aEdyb3cnLCBbXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAnY2xvc2VkJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdvcGVuJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2Nsb3NlZCA9PiBvcGVuJywgYW5pbWF0ZSgxMDApKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FNb2RhbENvbXBvbmVudCB7XG4gICAgQElucHV0KCkgY3VzdG9tQ2xhc3M6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHBhcnRDbGFzczogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgbW9kYWxUaXRsZTogc3RyaW5nID0gJyc7XG5cbiAgICBASW5wdXQoKSBsZWZ0SGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxudWxsPjtcbiAgICBASW5wdXQoKSByaWdodEhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8bnVsbD47XG4gICAgQElucHV0KCkgZm9vdGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxudWxsPjtcbiAgICBASW5wdXQoKSBhZGRpdGlvbmFsUGFydFRlbXBsYXRlITogVGVtcGxhdGVSZWY8bnVsbD47XG59XG4iLCI8YXBwLWNhLWN1c3RvbS1zY3JvbGxiYXJcbiAgICBbc2Nyb2xsQmFyT3B0aW9uc109XCJ7XG4gICAgICAgIHNob3dWZXJ0aWNhbFNjcm9sbEJhcjogdHJ1ZSxcbiAgICAgICAgc2hvd0hvcml6b250YWxTY3JvbGxCYXI6IGZhbHNlLFxuICAgIH1cIlxuPlxuICAgIDxkaXYgY2RrRHJhZyBjbGFzcz1cIm1vZGFsLWNvbnRhaW5lciB7eyBjdXN0b21DbGFzcyB9fVwiIG5nQkF1dG9mb2N1cz5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLW9yaWdpbmFsLXBhcnQge3sgcGFydENsYXNzIH19XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgICAgICAgICAgIGNsYXNzPVwibW9kYWwtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlci1sZWZ0c2lkZVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIEhlYWRlciB0aXRsZSAtLT5cblxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPnt7IG1vZGFsVGl0bGUgfX08L2g1PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIEhhZWRlciBsZWZ0IHNpZGUgdGVtcGxhdGUgLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsZWZ0SGVhZGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlci1yaWdodHNpZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBIYWVkZXIgcmlnaHQgc2lkZSAtLT5cblxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInJpZ2h0SGVhZGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8IS0tIE1vZGFsIGNvbnRlbnQgLS0+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbb3JpZ2luXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBGb290ZXIgVGVtcGxhdGUgQ29udGVudCAtLT5cblxuICAgICAgICAgICAgPGRpdiBjZGtEcmFnSGFuZGxlPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIEFkZGl0aW9uYWwgUGFydCBDb250ZW50IC0tPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRpdGlvbmFsUGFydFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2FwcC1jYS1jdXN0b20tc2Nyb2xsYmFyPlxuIl19