ontimize-web-ngx 15.6.0-next.5 → 15.6.0-next.6
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/esm2020/lib/components/o-form-data-component.class.mjs +2 -2
- package/esm2020/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.mjs +2 -2
- package/esm2020/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.mjs +1 -1
- package/esm2020/lib/components/table/column/o-column.class.mjs +2 -1
- package/esm2020/lib/components/table/column/o-table-column.component.mjs +9 -4
- package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +24 -6
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +75 -87
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.mjs +52 -0
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +12 -4
- package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
- package/esm2020/lib/components/table/o-table.component.mjs +89 -8
- package/esm2020/lib/components/table/o-table.module.mjs +4 -1
- package/esm2020/lib/interfaces/o-table-column.interface.mjs +1 -1
- package/esm2020/lib/services/state/o-table-component-state.class.mjs +7 -1
- package/esm2020/lib/services/state/o-table-component-state.service.mjs +8 -2
- package/esm2020/lib/types/table/index.mjs +2 -1
- package/esm2020/lib/types/table/o-column-value-filter.type.mjs +1 -1
- package/esm2020/lib/types/table/o-table-expandable-row-state.type.mjs +2 -0
- package/esm2020/lib/util/util.mjs +11 -1
- package/fesm2015/ontimize-web-ngx.mjs +282 -100
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +265 -98
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.d.ts +1 -1
- package/lib/components/table/column/o-column.class.d.ts +2 -1
- package/lib/components/table/column/o-table-column.component.d.ts +2 -2
- package/lib/components/table/extensions/contextmenu/o-table-context-menu.component.d.ts +2 -0
- package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.d.ts +9 -6
- package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.d.ts +12 -0
- package/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.d.ts +1 -1
- package/lib/components/table/o-table-base.class.d.ts +2 -0
- package/lib/components/table/o-table.component.d.ts +11 -2
- package/lib/interfaces/o-table-column.interface.d.ts +2 -1
- package/lib/services/state/o-table-component-state.class.d.ts +3 -0
- package/lib/types/table/index.d.ts +1 -0
- package/lib/types/table/o-column-value-filter.type.d.ts +3 -0
- package/lib/types/table/o-table-expandable-row-state.type.d.ts +5 -0
- package/lib/util/util.d.ts +1 -0
- package/package.json +1 -1
|
@@ -8,29 +8,33 @@ import { ColumnValueFilterOperator } from '../../../../../types/table/o-column-v
|
|
|
8
8
|
import { TableFilterByColumnDialogResult } from '../../../../../types/table/o-table-filter-by-column-data.type';
|
|
9
9
|
import { Codes } from '../../../../../util/codes';
|
|
10
10
|
import { Util } from '../../../../../util/util';
|
|
11
|
+
import { OTableFilterByColumnService } from './o-table-filter-by-column.service';
|
|
12
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
11
13
|
import * as i0 from "@angular/core";
|
|
12
14
|
import * as i1 from "@angular/material/dialog";
|
|
13
|
-
import * as i2 from "
|
|
14
|
-
import * as i3 from "@angular/
|
|
15
|
-
import * as i4 from "@angular/
|
|
16
|
-
import * as i5 from "@angular/
|
|
17
|
-
import * as i6 from "@angular/material/
|
|
18
|
-
import * as i7 from "@angular/material/
|
|
19
|
-
import * as i8 from "@angular/material/
|
|
20
|
-
import * as i9 from "@angular/material/
|
|
21
|
-
import * as i10 from "@angular/material/
|
|
22
|
-
import * as i11 from "@angular/material/
|
|
23
|
-
import * as i12 from "@angular/material/
|
|
24
|
-
import * as i13 from "@angular/material/
|
|
25
|
-
import * as i14 from "@angular/material/
|
|
26
|
-
import * as i15 from "@angular/material/
|
|
27
|
-
import * as i16 from "@angular/
|
|
28
|
-
import * as i17 from "
|
|
29
|
-
import * as i18 from "../../../../../pipes/
|
|
15
|
+
import * as i2 from "./o-table-filter-by-column.service";
|
|
16
|
+
import * as i3 from "@angular/common";
|
|
17
|
+
import * as i4 from "@angular/flex-layout/flex";
|
|
18
|
+
import * as i5 from "@angular/forms";
|
|
19
|
+
import * as i6 from "@angular/material/button";
|
|
20
|
+
import * as i7 from "@angular/material/checkbox";
|
|
21
|
+
import * as i8 from "@angular/material/datepicker";
|
|
22
|
+
import * as i9 from "@angular/material/icon";
|
|
23
|
+
import * as i10 from "@angular/material/input";
|
|
24
|
+
import * as i11 from "@angular/material/form-field";
|
|
25
|
+
import * as i12 from "@angular/material/list";
|
|
26
|
+
import * as i13 from "@angular/material/divider";
|
|
27
|
+
import * as i14 from "@angular/material/menu";
|
|
28
|
+
import * as i15 from "@angular/material/radio";
|
|
29
|
+
import * as i16 from "@angular/material/slide-toggle";
|
|
30
|
+
import * as i17 from "@angular/cdk/scrolling";
|
|
31
|
+
import * as i18 from "../../../../../pipes/o-translate.pipe";
|
|
32
|
+
import * as i19 from "../../../../../pipes/is-empty-value.pipe";
|
|
30
33
|
const CUSTOM_FILTERS_OPERATORS = [ColumnValueFilterOperator.LESS_EQUAL, ColumnValueFilterOperator.MORE_EQUAL, ColumnValueFilterOperator.BETWEEN, ColumnValueFilterOperator.EQUAL];
|
|
31
34
|
export class OTableFilterByColumnDataDialogComponent {
|
|
32
|
-
constructor(dialogRef, data) {
|
|
35
|
+
constructor(dialogRef, filterService, data) {
|
|
33
36
|
this.dialogRef = dialogRef;
|
|
37
|
+
this.filterService = filterService;
|
|
34
38
|
this.acceptAction = TableFilterByColumnDialogResult.ACCEPT;
|
|
35
39
|
this.cancelAction = TableFilterByColumnDialogResult.CANCEL;
|
|
36
40
|
this.clearAction = TableFilterByColumnDialogResult.CLEAR;
|
|
@@ -47,6 +51,7 @@ export class OTableFilterByColumnDataDialogComponent {
|
|
|
47
51
|
this.tableData = [];
|
|
48
52
|
this.listDataSubject = new BehaviorSubject([]);
|
|
49
53
|
this._listData = this.listDataSubject.asObservable();
|
|
54
|
+
this.selection = new SelectionModel(true, [], true, this.compareOptions());
|
|
50
55
|
if (data.column) {
|
|
51
56
|
this.column = data.column;
|
|
52
57
|
}
|
|
@@ -55,21 +60,20 @@ export class OTableFilterByColumnDataDialogComponent {
|
|
|
55
60
|
}
|
|
56
61
|
initialize() {
|
|
57
62
|
this.showFilterValuesOption = this.table.paginationControls;
|
|
58
|
-
this.sourceData =
|
|
59
|
-
this.table.oTableColumnsFilterComponent?.getFilterValuesInData(this.column.attr) ||
|
|
60
|
-
this.table.oTableColumnsFilterComponent?.filterValuesInData ||
|
|
61
|
-
(this.table.pageable ? 'current-page' : 'all-data');
|
|
63
|
+
this.sourceData = this.table.getSourceDataByFilterColumn(this.column);
|
|
62
64
|
this.mode = this.table.oTableColumnsFilterComponent ? this.table.oTableColumnsFilterComponent.mode : 'default';
|
|
63
65
|
this.isDefaultFilterSubject.next(this.mode === 'default');
|
|
64
66
|
this.isCustomFilterSubject.next(this.mode === 'custom');
|
|
65
|
-
|
|
67
|
+
this.previousFilter = this.table.dataSource.getColumnValueFilterByAttr(this.column.attr) || {
|
|
66
68
|
attr: undefined,
|
|
67
69
|
operator: undefined,
|
|
68
70
|
values: undefined,
|
|
69
|
-
availableValues: undefined
|
|
71
|
+
availableValues: undefined,
|
|
72
|
+
filterExpresion: undefined,
|
|
73
|
+
filterValuesInData: this.sourceData
|
|
70
74
|
};
|
|
71
|
-
if (Util.isDefined(previousFilter.operator)) {
|
|
72
|
-
this.isCustomFilterSubject.next(CUSTOM_FILTERS_OPERATORS.indexOf(previousFilter.operator) !== -1);
|
|
75
|
+
if (Util.isDefined(this.previousFilter.operator)) {
|
|
76
|
+
this.isCustomFilterSubject.next(CUSTOM_FILTERS_OPERATORS.indexOf(this.previousFilter.operator) !== -1);
|
|
73
77
|
}
|
|
74
78
|
this.preloadValues = this.table.oTableColumnsFilterComponent ? this.table.oTableColumnsFilterComponent.preloadValues : true;
|
|
75
79
|
this.activeSortDirection = this.table.getSortFilterColumn(this.column) || '';
|
|
@@ -82,7 +86,10 @@ export class OTableFilterByColumnDataDialogComponent {
|
|
|
82
86
|
this.getData(this.sourceData);
|
|
83
87
|
}
|
|
84
88
|
parseDataAndInitializeDataList(previousFilter) {
|
|
85
|
-
this.parseListData(previousFilter);
|
|
89
|
+
this.columnData = this.filterService.parseListData(previousFilter, this.column, this.tableData, this.table.pageable, this.sourceData);
|
|
90
|
+
if (previousFilter.values && previousFilter.values.length > 0) {
|
|
91
|
+
this.selection.select(...this.columnData.filter(item => previousFilter.values.indexOf(item.value) !== -1));
|
|
92
|
+
}
|
|
86
93
|
if (Util.isDefined(previousFilter)) {
|
|
87
94
|
this.initializeCustomFilterValues(previousFilter);
|
|
88
95
|
}
|
|
@@ -145,74 +152,52 @@ export class OTableFilterByColumnDataDialogComponent {
|
|
|
145
152
|
break;
|
|
146
153
|
}
|
|
147
154
|
}
|
|
148
|
-
get selectedValues() {
|
|
149
|
-
return this.filterValueList ? this.filterValueList.selectedOptions.selected.map(selected => selected.value) : [];
|
|
150
|
-
}
|
|
151
155
|
areAllSelected() {
|
|
152
|
-
return this.
|
|
156
|
+
return this.selection.selected.length === this.columnData.length;
|
|
153
157
|
}
|
|
154
158
|
isIndeterminate() {
|
|
155
|
-
const selectedValues = this.
|
|
159
|
+
const selectedValues = this.selection.selected;
|
|
156
160
|
return selectedValues.length > 0 && selectedValues.length !== this.columnData.length;
|
|
157
161
|
}
|
|
158
162
|
onSelect(event) {
|
|
159
|
-
event.options.forEach(option =>
|
|
163
|
+
event.options.forEach(option => {
|
|
164
|
+
const value = option.value;
|
|
165
|
+
value.selected = option.selected;
|
|
166
|
+
if (option.selected) {
|
|
167
|
+
this.selection.select(value);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.selection.deselect(value);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
160
173
|
}
|
|
161
174
|
onSelectAllChange(event) {
|
|
162
175
|
if (event.checked) {
|
|
163
|
-
this.
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
this.
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
parseListData(filter) {
|
|
170
|
-
this.columnData = [];
|
|
171
|
-
if (Util.isDefined(filter?.availableValues)) {
|
|
172
|
-
this.columnData = filter.availableValues;
|
|
176
|
+
this.listDataSubject.getValue().forEach(item => {
|
|
177
|
+
item.selected = true;
|
|
178
|
+
});
|
|
179
|
+
this.selection.select(...this.listDataSubject.getValue());
|
|
173
180
|
}
|
|
174
181
|
else {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
this.addIntoColumnData(renderedValue, colValues, i, filter);
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
colRenderedValues.forEach((renderedValue, i) => {
|
|
184
|
-
if (renderedValue === null || renderedValue === undefined) {
|
|
185
|
-
renderedValue = '';
|
|
186
|
-
}
|
|
187
|
-
if (!this.columnData.find(item => item.renderedValue === renderedValue)) {
|
|
188
|
-
this.addIntoColumnData(renderedValue, colValues, i, filter);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
}
|
|
182
|
+
this.listDataSubject.getValue().forEach(item => {
|
|
183
|
+
item.selected = false;
|
|
184
|
+
});
|
|
185
|
+
this.selection.clear();
|
|
192
186
|
}
|
|
193
187
|
}
|
|
194
|
-
addIntoColumnData(renderedValue, colValues, i, filter) {
|
|
195
|
-
this.columnData.push({
|
|
196
|
-
renderedValue: renderedValue,
|
|
197
|
-
value: colValues[i],
|
|
198
|
-
rowValue: this.tableData[i],
|
|
199
|
-
selected: filter?.operator === ColumnValueFilterOperator.IN && (filter?.values || []).indexOf(colValues[i]) !== -1,
|
|
200
|
-
tableIndex: i
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
188
|
getColumnValuesFilter() {
|
|
204
189
|
const filter = {
|
|
205
190
|
attr: this.column.attr,
|
|
206
191
|
operator: undefined,
|
|
207
192
|
values: undefined,
|
|
208
|
-
availableValues: undefined
|
|
193
|
+
availableValues: this.previousFilter?.availableValues || undefined,
|
|
194
|
+
filterExpresion: this.previousFilter?.filterExpresion || undefined,
|
|
195
|
+
filterValuesInData: this.sourceData
|
|
209
196
|
};
|
|
210
197
|
if (!this.isCustomFilterSubject.getValue()) {
|
|
211
|
-
const selectedValues = this.
|
|
198
|
+
const selectedValues = this.selection.selected;
|
|
212
199
|
if (selectedValues.length) {
|
|
213
|
-
filter.
|
|
214
|
-
filter.values = selectedValues.map((item) => item.value);
|
|
215
|
-
filter.availableValues = this.columnData;
|
|
200
|
+
this.filterService.applySelectedValuesToFilter(this.column, this.tableData, filter, selectedValues, this.sourceData, this.table.pageable, () => this.table.getComponentFilter());
|
|
216
201
|
}
|
|
217
202
|
}
|
|
218
203
|
else {
|
|
@@ -332,8 +317,8 @@ export class OTableFilterByColumnDataDialogComponent {
|
|
|
332
317
|
}
|
|
333
318
|
getData(sourceData) {
|
|
334
319
|
if (sourceData === 'current-page') {
|
|
335
|
-
this.tableData = this.table.
|
|
336
|
-
this.parseDataAndInitializeDataList(
|
|
320
|
+
this.tableData = this.table.getValue();
|
|
321
|
+
this.parseDataAndInitializeDataList(this.previousFilter);
|
|
337
322
|
}
|
|
338
323
|
else if (this.table.pageable) {
|
|
339
324
|
this.queryByFilterColumnSubscription = this.queryByFilterColumn(this.column.attr).subscribe((res) => {
|
|
@@ -342,16 +327,19 @@ export class OTableFilterByColumnDataDialogComponent {
|
|
|
342
327
|
data = res.data;
|
|
343
328
|
}
|
|
344
329
|
this.tableData = data;
|
|
345
|
-
this.parseDataAndInitializeDataList(
|
|
330
|
+
this.parseDataAndInitializeDataList(this.previousFilter);
|
|
346
331
|
});
|
|
347
332
|
}
|
|
348
333
|
else {
|
|
349
334
|
this.tableData = this.table.getAllValues();
|
|
350
|
-
this.parseDataAndInitializeDataList(
|
|
335
|
+
this.parseDataAndInitializeDataList(this.previousFilter);
|
|
351
336
|
}
|
|
352
337
|
}
|
|
338
|
+
isSelected(item) {
|
|
339
|
+
return item.selected;
|
|
340
|
+
}
|
|
353
341
|
queryByFilterColumn(attr) {
|
|
354
|
-
const kv = this.table.getComponentFilter();
|
|
342
|
+
const kv = this.previousFilter.filterExpresion || this.table.getComponentFilter();
|
|
355
343
|
const av = [attr];
|
|
356
344
|
let sqlTypes = {};
|
|
357
345
|
if (Util.isDefined(kv) && !Util.isObjectEmpty(kv)) {
|
|
@@ -365,19 +353,19 @@ export class OTableFilterByColumnDataDialogComponent {
|
|
|
365
353
|
}
|
|
366
354
|
return of({});
|
|
367
355
|
}
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
return this.tableData.map((row) => useRenderer ? this.column.renderer.getCellData(row[this.column.attr], row) : row[this.column.attr]);
|
|
356
|
+
compareOptions() {
|
|
357
|
+
return (o1, o2) => o1?.value === o2?.value;
|
|
371
358
|
}
|
|
359
|
+
;
|
|
372
360
|
}
|
|
373
|
-
OTableFilterByColumnDataDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableFilterByColumnDataDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
374
|
-
OTableFilterByColumnDataDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTableFilterByColumnDataDialogComponent, selector: "o-table-filter-by-column-data-dialog", host: { properties: { "class.o-filter-by-column-dialog": "true" } }, viewQueries: [{ propertyName: "filter", first: true, predicate: ["filter"], descendants: true }, { propertyName: "filterValueList", first: true, predicate: ["filterValueList"], descendants: true }], ngImport: i0, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.FILTER_BY_COLUMN' | oTranslate }}: {{ column.title | oTranslate }}</span>\n<div mat-dialog-content class=\"dialog-list-container\">\n <div fxLayout=\"column\" class=\"content-wrapper\" [class.content-wrapper-fixed-dimension]=\"getFixedDimensionClass()\">\n <mat-slide-toggle #customFilterSlide (change)=\"onSlideChange($event)\" [checked]=\"(isCustomFilter | async)\" *ngIf=\"isDefaultFilter | async\">\n {{ 'TABLE.FILTER_BY_COLUMN.CUSTOM_FILTER' | oTranslate }}\n </mat-slide-toggle>\n <div fxFlex=\"1 1 100%\" *ngIf=\"!(isCustomFilter | async);else customFilterTemplate\" fxLayout=\"column\">\n <mat-form-field class=\"hinted\">\n <mat-icon matPrefix svgIcon=\"ontimize:search\"></mat-icon>\n <input matInput #filter placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n </mat-form-field>\n <div *ngIf=\"(listData | async).length > 0; else emptyListData\" fxLayout=\"row\" fxLayoutAlign=\"space-between start\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <mat-checkbox (change)=\"onSelectAllChange($event)\" [checked]=\"areAllSelected()\" [indeterminate]=\"isIndeterminate()\" [disabled]=\"!listData\"\n class=\"select-all-checkbox\">\n {{ 'TABLE.FILTER_BY_COLUMN.CHECK_ALL' | oTranslate }}\n </mat-checkbox>\n <span *ngIf=\"!listData\" class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY_FILTER' | oTranslate }}\n </span>\n </div>\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <button type=\"button\" mat-icon-button (click)=\"onClickSortValues()\">\n <mat-icon [svgIcon]=\"getSortByAlphaIcon()\"></mat-icon>\n </button>\n <button type=\"button\" mat-icon-button [matMenuTriggerFor]=\"menu\" *ngIf=\"showFilterValuesOption\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <div fxLayout=\"column\" class=\"filtervalues-container\">\n <div mat-subheader>\n {{'TABLE.FILTER_BY_COLUMN.LABEL_DATA' | oTranslate}}\n </div>\n <mat-divider></mat-divider>\n <mat-radio-group aria-label=\"Data\" fxLayout=\"column\" fxLayoutGap=\"12px\" [(ngModel)]=\"sourceData\" (change)=\"onChangeDataSource($event)\">\n <mat-radio-button value=\"current-page\">{{'TABLE.FILTER_BY_COLUMN.CURRENT_PAGE' | oTranslate}}</mat-radio-button>\n <mat-radio-button value=\"all-data\">{{'TABLE.FILTER_BY_COLUMN.ALL_PAGE' | oTranslate}}</mat-radio-button>\n </mat-radio-group>\n </div>\n </mat-menu>\n </div>\n </div>\n\n <ng-template #emptyListData>\n <span class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY' | oTranslate }}\n </span>\n </ng-template>\n\n <cdk-virtual-scroll-viewport itemSize=\"25\" fxFlex>\n <mat-selection-list *ngIf=\"preloadValues || listData\" #filterValueList class=\"select-values-list\" (selectionChange)=\"onSelect($event)\">\n\n <ng-container *cdkVirtualFor=\"let record of (listData | async); let i = index\">\n <mat-list-option checkboxPosition=\"before\" [selected]=\"record.selected\" [value]=\"record\">\n <ng-container *ngIf=\"record.value | isEmptyValue; else showValue\">\n {{ 'TABLE.FILTER_BY_COLUMN.EMPTY_VALUE' | oTranslate }}\n </ng-container>\n <ng-template #showValue>\n <ng-container *ngIf=\"!column.renderer\">\n {{ record.value }}\n </ng-container>\n <ng-template *ngIf=\"column.renderer\" [ngTemplateOutlet]=\"column.renderer.templateref\"\n [ngTemplateOutletContext]=\"{ cellvalue: record.value, rowvalue: record.rowValue }\">\n </ng-template>\n </ng-template>\n </mat-list-option>\n </ng-container>\n </mat-selection-list>\n </cdk-virtual-scroll-viewport>\n\n </div>\n </div>\n</div>\n\n\n<mat-dialog-actions fxLayoutAlign=\"space-between center\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"clearAction\" class=\"o-button-info\">\n {{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate }} </button>\n <span align=\"end\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"cancelAction\" class=\"o-button-default cancel\">\n {{ 'CANCEL' | oTranslate }} </button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"acceptAction\" class=\"o-button-primary\">\n {{ 'ACCEPT' | oTranslate }} </button>\n </span>\n</mat-dialog-actions>\n\n<!-- TEMPLATE CUSTOM FILTER-->\n<ng-template #customFilterTemplate>\n <div *ngIf=\"isTextType()\">\n <mat-form-field fxFlex class=\"hinted\">\n <input matInput #filterText [formControl]=\"fcText\" placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </mat-form-field>\n </div>\n <div *ngIf=\"isNumericType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [formControl]=\"fcFrom\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n </mat-form-field>\n <mat-form-field>\n <input matInput [formControl]=\"fcTo\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n <div *ngIf=\"isDateType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerFrom\" [max]=\"fcTo.value\" [formControl]=\"fcFrom\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerFrom\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerFrom [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerTo\" [min]=\"fcFrom.value\" [formControl]=\"fcTo\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerTo\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerTo [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n\n</ng-template>\n", styles: [".filtervalues-container{padding:12px}.filtervalues-container .mat-divider{margin:8px}.filtervalues-container .mdc-list-group__subheader{font-weight:400;margin-top:0;margin-bottom:0}.filtervalues-container mat-radio-group.mat-mdc-radio-group{margin:12px 12px 0}.o-filter-by-column-dialog .mat-mdc-slide-toggle{padding-bottom:24px;padding-left:14px}.o-filter-by-column-dialog .content-wrapper{padding-top:12px;margin:0}.o-filter-by-column-dialog .content-wrapper.content-wrapper-fixed-dimension{max-height:430px;min-height:430px;min-width:250px;width:100%}.o-filter-by-column-dialog .content-wrapper .mat-mdc-form-field.hinted{margin-bottom:24px}.o-filter-by-column-dialog .content-wrapper .select-values-list{padding-top:0;overflow-y:auto;overflow-x:hidden;outline:none}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item{height:30px}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item .mat-icon{font-size:24px}.o-filter-by-column-dialog .content-wrapper .column-filter-empty-list{text-align:center}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i7.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i11.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i11.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: i11.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i13.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i13.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i14.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i14.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i15.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i16.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i16.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i16.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i17.OTranslatePipe, name: "oTranslate" }, { kind: "pipe", type: i18.IsEmptyValuePipe, name: "isEmptyValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
361
|
+
OTableFilterByColumnDataDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableFilterByColumnDataDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.OTableFilterByColumnService }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
362
|
+
OTableFilterByColumnDataDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTableFilterByColumnDataDialogComponent, selector: "o-table-filter-by-column-data-dialog", host: { properties: { "class.o-filter-by-column-dialog": "true" } }, viewQueries: [{ propertyName: "filter", first: true, predicate: ["filter"], descendants: true }, { propertyName: "filterValueList", first: true, predicate: ["filterValueList"], descendants: true }], ngImport: i0, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.FILTER_BY_COLUMN' | oTranslate }}: {{ column.title | oTranslate }}</span>\n<div mat-dialog-content class=\"dialog-list-container\">\n <div fxLayout=\"column\" class=\"content-wrapper\" [class.content-wrapper-fixed-dimension]=\"getFixedDimensionClass()\">\n <mat-slide-toggle #customFilterSlide (change)=\"onSlideChange($event)\" [checked]=\"(isCustomFilter | async)\" *ngIf=\"isDefaultFilter | async\">\n {{ 'TABLE.FILTER_BY_COLUMN.CUSTOM_FILTER' | oTranslate }}\n </mat-slide-toggle>\n <div fxFlex=\"1 1 100%\" *ngIf=\"!(isCustomFilter | async);else customFilterTemplate\" fxLayout=\"column\">\n <mat-form-field class=\"hinted\">\n <mat-icon matPrefix svgIcon=\"ontimize:search\"></mat-icon>\n <input matInput #filter placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n </mat-form-field>\n <div *ngIf=\"(listData | async).length > 0; else emptyListData\" fxLayout=\"row\" fxLayoutAlign=\"space-between start\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <mat-checkbox (change)=\"onSelectAllChange($event)\" [checked]=\"areAllSelected()\" [indeterminate]=\"isIndeterminate()\" [disabled]=\"!listData\"\n class=\"select-all-checkbox\">\n {{ 'TABLE.FILTER_BY_COLUMN.CHECK_ALL' | oTranslate }}\n </mat-checkbox>\n <span *ngIf=\"!listData\" class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY_FILTER' | oTranslate }}\n </span>\n </div>\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <button type=\"button\" mat-icon-button (click)=\"onClickSortValues()\">\n <mat-icon [svgIcon]=\"getSortByAlphaIcon()\"></mat-icon>\n </button>\n <button type=\"button\" mat-icon-button [matMenuTriggerFor]=\"menu\" *ngIf=\"showFilterValuesOption\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <div fxLayout=\"column\" class=\"filtervalues-container\">\n <div mat-subheader>\n {{'TABLE.FILTER_BY_COLUMN.LABEL_DATA' | oTranslate}}\n </div>\n <mat-divider></mat-divider>\n <mat-radio-group aria-label=\"Data\" fxLayout=\"column\" fxLayoutGap=\"12px\" [(ngModel)]=\"sourceData\" (change)=\"onChangeDataSource($event)\">\n <mat-radio-button value=\"current-page\">{{'TABLE.FILTER_BY_COLUMN.CURRENT_PAGE' | oTranslate}}</mat-radio-button>\n <mat-radio-button value=\"all-data\">{{'TABLE.FILTER_BY_COLUMN.ALL_PAGE' | oTranslate}}</mat-radio-button>\n </mat-radio-group>\n </div>\n </mat-menu>\n </div>\n </div>\n\n <ng-template #emptyListData>\n <span class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY' | oTranslate }}\n </span>\n </ng-template>\n <cdk-virtual-scroll-viewport itemSize=\"30\" fxFlex>\n <mat-selection-list *ngIf=\"preloadValues || listData\" #filterValueList class=\"select-values-list\" (selectionChange)=\"onSelect($event)\">\n <ng-container *cdkVirtualFor=\"let record of (listData | async); let i = index;templateCacheSize: 0\">\n <mat-list-option checkboxPosition=\"before\" [selected]=\"selection.isSelected(record)\" [value]=\"record\">\n <ng-container *ngIf=\"record.value | isEmptyValue; else showValue\">\n {{ 'TABLE.FILTER_BY_COLUMN.EMPTY_VALUE' | oTranslate }}\n </ng-container>\n <ng-template #showValue>\n <ng-container *ngIf=\"!column.renderer\">\n {{ record.value }}\n </ng-container>\n <ng-template *ngIf=\"column.renderer\" [ngTemplateOutlet]=\"column.renderer.templateref\"\n [ngTemplateOutletContext]=\"{ cellvalue: record.value, rowvalue: record.rowValue }\">\n </ng-template>\n </ng-template>\n </mat-list-option>\n </ng-container>\n </mat-selection-list>\n </cdk-virtual-scroll-viewport>\n </div>\n </div>\n</div>\n\n\n<mat-dialog-actions fxLayoutAlign=\"space-between center\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"clearAction\" class=\"o-button-info\">\n {{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate }} </button>\n <span align=\"end\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"cancelAction\" class=\"o-button-default cancel\">\n {{ 'CANCEL' | oTranslate }} </button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"acceptAction\" class=\"o-button-primary\">\n {{ 'ACCEPT' | oTranslate }} </button>\n </span>\n</mat-dialog-actions>\n\n<!-- TEMPLATE CUSTOM FILTER-->\n<ng-template #customFilterTemplate>\n <div *ngIf=\"isTextType()\">\n <mat-form-field fxFlex class=\"hinted\">\n <input matInput #filterText [formControl]=\"fcText\" placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </mat-form-field>\n </div>\n <div *ngIf=\"isNumericType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [formControl]=\"fcFrom\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n </mat-form-field>\n <mat-form-field>\n <input matInput [formControl]=\"fcTo\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n <div *ngIf=\"isDateType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerFrom\" [max]=\"fcTo.value\" [formControl]=\"fcFrom\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerFrom\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerFrom [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerTo\" [min]=\"fcFrom.value\" [formControl]=\"fcTo\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerTo\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerTo [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n\n</ng-template>\n", styles: [".filtervalues-container{padding:12px}.filtervalues-container .mat-divider{margin:8px}.filtervalues-container .mdc-list-group__subheader{font-weight:400;margin-top:0;margin-bottom:0}.filtervalues-container mat-radio-group.mat-mdc-radio-group{margin:12px 12px 0}.o-filter-by-column-dialog .mat-mdc-slide-toggle{padding-bottom:24px;padding-left:14px}.o-filter-by-column-dialog .content-wrapper{padding-top:12px;margin:0}.o-filter-by-column-dialog .content-wrapper.content-wrapper-fixed-dimension{max-height:430px;min-height:430px;min-width:250px;width:100%}.o-filter-by-column-dialog .content-wrapper .mat-mdc-form-field.hinted{margin-bottom:24px}.o-filter-by-column-dialog .content-wrapper .select-values-list{padding-top:0;overflow-y:auto;overflow-x:hidden;outline:none}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item{height:30px}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item .mat-icon{font-size:24px}.o-filter-by-column-dialog .content-wrapper .column-filter-empty-list{text-align:center}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i4.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i4.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i4.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i8.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i8.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i8.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i8.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i11.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i11.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i12.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i12.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: i12.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "component", type: i13.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i15.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i15.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i16.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i17.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i17.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i17.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i18.OTranslatePipe, name: "oTranslate" }, { kind: "pipe", type: i19.IsEmptyValuePipe, name: "isEmptyValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
375
363
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableFilterByColumnDataDialogComponent, decorators: [{
|
|
376
364
|
type: Component,
|
|
377
365
|
args: [{ selector: 'o-table-filter-by-column-data-dialog', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
378
366
|
'[class.o-filter-by-column-dialog]': 'true'
|
|
379
|
-
}, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.FILTER_BY_COLUMN' | oTranslate }}: {{ column.title | oTranslate }}</span>\n<div mat-dialog-content class=\"dialog-list-container\">\n <div fxLayout=\"column\" class=\"content-wrapper\" [class.content-wrapper-fixed-dimension]=\"getFixedDimensionClass()\">\n <mat-slide-toggle #customFilterSlide (change)=\"onSlideChange($event)\" [checked]=\"(isCustomFilter | async)\" *ngIf=\"isDefaultFilter | async\">\n {{ 'TABLE.FILTER_BY_COLUMN.CUSTOM_FILTER' | oTranslate }}\n </mat-slide-toggle>\n <div fxFlex=\"1 1 100%\" *ngIf=\"!(isCustomFilter | async);else customFilterTemplate\" fxLayout=\"column\">\n <mat-form-field class=\"hinted\">\n <mat-icon matPrefix svgIcon=\"ontimize:search\"></mat-icon>\n <input matInput #filter placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n </mat-form-field>\n <div *ngIf=\"(listData | async).length > 0; else emptyListData\" fxLayout=\"row\" fxLayoutAlign=\"space-between start\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <mat-checkbox (change)=\"onSelectAllChange($event)\" [checked]=\"areAllSelected()\" [indeterminate]=\"isIndeterminate()\" [disabled]=\"!listData\"\n class=\"select-all-checkbox\">\n {{ 'TABLE.FILTER_BY_COLUMN.CHECK_ALL' | oTranslate }}\n </mat-checkbox>\n <span *ngIf=\"!listData\" class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY_FILTER' | oTranslate }}\n </span>\n </div>\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <button type=\"button\" mat-icon-button (click)=\"onClickSortValues()\">\n <mat-icon [svgIcon]=\"getSortByAlphaIcon()\"></mat-icon>\n </button>\n <button type=\"button\" mat-icon-button [matMenuTriggerFor]=\"menu\" *ngIf=\"showFilterValuesOption\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <div fxLayout=\"column\" class=\"filtervalues-container\">\n <div mat-subheader>\n {{'TABLE.FILTER_BY_COLUMN.LABEL_DATA' | oTranslate}}\n </div>\n <mat-divider></mat-divider>\n <mat-radio-group aria-label=\"Data\" fxLayout=\"column\" fxLayoutGap=\"12px\" [(ngModel)]=\"sourceData\" (change)=\"onChangeDataSource($event)\">\n <mat-radio-button value=\"current-page\">{{'TABLE.FILTER_BY_COLUMN.CURRENT_PAGE' | oTranslate}}</mat-radio-button>\n <mat-radio-button value=\"all-data\">{{'TABLE.FILTER_BY_COLUMN.ALL_PAGE' | oTranslate}}</mat-radio-button>\n </mat-radio-group>\n </div>\n </mat-menu>\n </div>\n </div>\n\n <ng-template #emptyListData>\n <span class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY' | oTranslate }}\n </span>\n </ng-template>\n
|
|
380
|
-
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
367
|
+
}, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.FILTER_BY_COLUMN' | oTranslate }}: {{ column.title | oTranslate }}</span>\n<div mat-dialog-content class=\"dialog-list-container\">\n <div fxLayout=\"column\" class=\"content-wrapper\" [class.content-wrapper-fixed-dimension]=\"getFixedDimensionClass()\">\n <mat-slide-toggle #customFilterSlide (change)=\"onSlideChange($event)\" [checked]=\"(isCustomFilter | async)\" *ngIf=\"isDefaultFilter | async\">\n {{ 'TABLE.FILTER_BY_COLUMN.CUSTOM_FILTER' | oTranslate }}\n </mat-slide-toggle>\n <div fxFlex=\"1 1 100%\" *ngIf=\"!(isCustomFilter | async);else customFilterTemplate\" fxLayout=\"column\">\n <mat-form-field class=\"hinted\">\n <mat-icon matPrefix svgIcon=\"ontimize:search\"></mat-icon>\n <input matInput #filter placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n </mat-form-field>\n <div *ngIf=\"(listData | async).length > 0; else emptyListData\" fxLayout=\"row\" fxLayoutAlign=\"space-between start\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <mat-checkbox (change)=\"onSelectAllChange($event)\" [checked]=\"areAllSelected()\" [indeterminate]=\"isIndeterminate()\" [disabled]=\"!listData\"\n class=\"select-all-checkbox\">\n {{ 'TABLE.FILTER_BY_COLUMN.CHECK_ALL' | oTranslate }}\n </mat-checkbox>\n <span *ngIf=\"!listData\" class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY_FILTER' | oTranslate }}\n </span>\n </div>\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <button type=\"button\" mat-icon-button (click)=\"onClickSortValues()\">\n <mat-icon [svgIcon]=\"getSortByAlphaIcon()\"></mat-icon>\n </button>\n <button type=\"button\" mat-icon-button [matMenuTriggerFor]=\"menu\" *ngIf=\"showFilterValuesOption\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <div fxLayout=\"column\" class=\"filtervalues-container\">\n <div mat-subheader>\n {{'TABLE.FILTER_BY_COLUMN.LABEL_DATA' | oTranslate}}\n </div>\n <mat-divider></mat-divider>\n <mat-radio-group aria-label=\"Data\" fxLayout=\"column\" fxLayoutGap=\"12px\" [(ngModel)]=\"sourceData\" (change)=\"onChangeDataSource($event)\">\n <mat-radio-button value=\"current-page\">{{'TABLE.FILTER_BY_COLUMN.CURRENT_PAGE' | oTranslate}}</mat-radio-button>\n <mat-radio-button value=\"all-data\">{{'TABLE.FILTER_BY_COLUMN.ALL_PAGE' | oTranslate}}</mat-radio-button>\n </mat-radio-group>\n </div>\n </mat-menu>\n </div>\n </div>\n\n <ng-template #emptyListData>\n <span class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY' | oTranslate }}\n </span>\n </ng-template>\n <cdk-virtual-scroll-viewport itemSize=\"30\" fxFlex>\n <mat-selection-list *ngIf=\"preloadValues || listData\" #filterValueList class=\"select-values-list\" (selectionChange)=\"onSelect($event)\">\n <ng-container *cdkVirtualFor=\"let record of (listData | async); let i = index;templateCacheSize: 0\">\n <mat-list-option checkboxPosition=\"before\" [selected]=\"selection.isSelected(record)\" [value]=\"record\">\n <ng-container *ngIf=\"record.value | isEmptyValue; else showValue\">\n {{ 'TABLE.FILTER_BY_COLUMN.EMPTY_VALUE' | oTranslate }}\n </ng-container>\n <ng-template #showValue>\n <ng-container *ngIf=\"!column.renderer\">\n {{ record.value }}\n </ng-container>\n <ng-template *ngIf=\"column.renderer\" [ngTemplateOutlet]=\"column.renderer.templateref\"\n [ngTemplateOutletContext]=\"{ cellvalue: record.value, rowvalue: record.rowValue }\">\n </ng-template>\n </ng-template>\n </mat-list-option>\n </ng-container>\n </mat-selection-list>\n </cdk-virtual-scroll-viewport>\n </div>\n </div>\n</div>\n\n\n<mat-dialog-actions fxLayoutAlign=\"space-between center\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"clearAction\" class=\"o-button-info\">\n {{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate }} </button>\n <span align=\"end\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"cancelAction\" class=\"o-button-default cancel\">\n {{ 'CANCEL' | oTranslate }} </button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"acceptAction\" class=\"o-button-primary\">\n {{ 'ACCEPT' | oTranslate }} </button>\n </span>\n</mat-dialog-actions>\n\n<!-- TEMPLATE CUSTOM FILTER-->\n<ng-template #customFilterTemplate>\n <div *ngIf=\"isTextType()\">\n <mat-form-field fxFlex class=\"hinted\">\n <input matInput #filterText [formControl]=\"fcText\" placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </mat-form-field>\n </div>\n <div *ngIf=\"isNumericType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [formControl]=\"fcFrom\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n </mat-form-field>\n <mat-form-field>\n <input matInput [formControl]=\"fcTo\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n <div *ngIf=\"isDateType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerFrom\" [max]=\"fcTo.value\" [formControl]=\"fcFrom\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerFrom\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerFrom [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerTo\" [min]=\"fcFrom.value\" [formControl]=\"fcTo\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerTo\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerTo [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n\n</ng-template>\n", styles: [".filtervalues-container{padding:12px}.filtervalues-container .mat-divider{margin:8px}.filtervalues-container .mdc-list-group__subheader{font-weight:400;margin-top:0;margin-bottom:0}.filtervalues-container mat-radio-group.mat-mdc-radio-group{margin:12px 12px 0}.o-filter-by-column-dialog .mat-mdc-slide-toggle{padding-bottom:24px;padding-left:14px}.o-filter-by-column-dialog .content-wrapper{padding-top:12px;margin:0}.o-filter-by-column-dialog .content-wrapper.content-wrapper-fixed-dimension{max-height:430px;min-height:430px;min-width:250px;width:100%}.o-filter-by-column-dialog .content-wrapper .mat-mdc-form-field.hinted{margin-bottom:24px}.o-filter-by-column-dialog .content-wrapper .select-values-list{padding-top:0;overflow-y:auto;overflow-x:hidden;outline:none}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item{height:30px}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item .mat-icon{font-size:24px}.o-filter-by-column-dialog .content-wrapper .column-filter-empty-list{text-align:center}\n"] }]
|
|
368
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i2.OTableFilterByColumnService }, { type: undefined, decorators: [{
|
|
381
369
|
type: Inject,
|
|
382
370
|
args: [MAT_DIALOG_DATA]
|
|
383
371
|
}] }]; }, propDecorators: { filter: [{
|
|
@@ -387,4 +375,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
387
375
|
type: ViewChild,
|
|
388
376
|
args: ['filterValueList']
|
|
389
377
|
}] } });
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL2ZpbHRlci1ieS1jb2x1bW4vby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL2ZpbHRlci1ieS1jb2x1bW4vby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMEIsTUFBTSx3QkFBd0IsQ0FBQztBQUdsRixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3BFLE9BQU8sRUFBRSx5QkFBeUIsRUFBc0IsTUFBTSx1REFBdUQsQ0FBQztBQUN0SCxPQUFPLEVBQTJCLCtCQUErQixFQUFFLE1BQU0sK0RBQStE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UzsrQkFDRSxzQ0FBc0MsaUJBR2pDLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0osbUNBQW1DLEVBQUUsTUFBTTtxQkFDNUM7OzBCQXlDRSxNQUFNOzJCQUFDLGVBQWU7NENBWEosTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNXLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdENoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U2VsZWN0aW9uTGlzdCwgTWF0U2VsZWN0aW9uTGlzdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHsgTWF0UmFkaW9DaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9yYWRpbyc7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvc2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvciwgT0NvbHVtblZhbHVlRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tdmFsdWUtZmlsdGVyLnR5cGUnO1xuaW1wb3J0IHsgVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGEsIFRhYmxlRmlsdGVyQnlDb2x1bW5EaWFsb2dSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL28tdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9GaWx0ZXJDb2x1bW4gfSBmcm9tICcuLi8uLi9oZWFkZXIvdGFibGUtY29sdW1ucy1maWx0ZXIvY29sdW1ucy9vLXRhYmxlLWNvbHVtbnMtZmlsdGVyLWNvbHVtbi5jb21wb25lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IE9Db2x1bW4gfSBmcm9tICcuLi8uLi8uLi9jb2x1bW4vby1jb2x1bW4uY2xhc3MnO1xuXG5jb25zdCBDVVNUT01fRklMVEVSU19PUEVSQVRPUlMgPSBbQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMLCBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUwsIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuQkVUV0VFTiwgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5FUVVBTF07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdGFibGUtZmlsdGVyLWJ5LWNvbHVtbi1kYXRhLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ28tdGFibGUtZmlsdGVyLWJ5LWNvbHVtbi1kYXRhLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby1maWx0ZXItYnktY29sdW1uLWRpYWxvZ10nOiAndHJ1ZSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblxuICBwdWJsaWMgYWNjZXB0QWN0aW9uID0gVGFibGVGaWx0ZXJCeUNvbHVtbkRpYWxvZ1Jlc3VsdC5BQ0NFUFQ7XG4gIHB1YmxpYyBjYW5jZWxBY3Rpb24gPSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkNBTkNFTDtcbiAgcHVibGljIGNsZWFyQWN0aW9uID0gVGFibGVGaWx0ZXJCeUNvbHVtbkRpYWxvZ1Jlc3VsdC5DTEVBUjtcblxuICBjb2x1bW46IE9Db2x1bW47XG4gIHByZWxvYWRWYWx1ZXM6IGJvb2xlYW4gPSB0cnVlO1xuICBtb2RlOiBzdHJpbmc7XG4gIHN0YXJ0VmlldzogJ21vbnRoJyB8ICd5ZWFyJyB8ICdtdWx0aS15ZWFyJyB8ICcnO1xuXG4gIHB1YmxpYyBvblNvcnRGaWx0ZXJWYWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxPRmlsdGVyQ29sdW1uPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc0N1c3RvbUZpbHRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNDdXN0b21GaWx0ZXI6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmlzQ3VzdG9tRmlsdGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlzRGVmYXVsdEZpbHRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNEZWZhdWx0RmlsdGVyOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5pc0RlZmF1bHRGaWx0ZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGZjVGV4dCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgZmNGcm9tID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBmY1RvID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuXG4gIHByb3RlY3RlZCBjb2x1bW5EYXRhOiBUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdID0gW107XG4gIHByb3RlY3RlZCB0YWJsZURhdGE6IGFueVtdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0RGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhW10+KFtdKTtcbiAgcHJvdGVjdGVkIF9saXN0RGF0YTogT2JzZXJ2YWJsZTxUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdPiA9IHRoaXMubGlzdERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlcicpIGZpbHRlcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZmlsdGVyVmFsdWVMaXN0JykgZmlsdGVyVmFsdWVMaXN0OiBNYXRTZWxlY3Rpb25MaXN0O1xuICBwdWJsaWMgYWN0aXZlU29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCAnJztcbiAgc291cmNlRGF0YTtcbiAgcXVlcnlCeUZpbHRlckNvbHVtblN1YnNjcmlwdGlvbjogYW55O1xuICB0YWJsZTogT1RhYmxlQ29tcG9uZW50O1xuICBzaG93RmlsdGVyVmFsdWVzT3B0aW9uOiBib29sZWFuO1xuICBxdWVyeU1ldGhvZE5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8T1RhYmxlRmlsdGVyQnlDb2x1bW5EYXRhRGlhbG9nQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgZGF0YTogeyBjb2x1bW46IE9Db2x1bW47IHRhYmxlOiBPVGFibGVDb21wb25lbnQgfVxuICApIHtcblxuICAgIGlmIChkYXRhLmNvbHVtbikge1xuICAgICAgdGhpcy5jb2x1bW4gPSBkYXRhLmNvbHVtbjtcbiAgICB9XG4gICAgdGhpcy50YWJsZSA9IGRhdGEudGFibGU7XG5cbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpIHtcbiAgICB0aGlzLnNob3dGaWx0ZXJWYWx1ZXNPcHRpb24gPSB0aGlzLnRhYmxlLnBhZ2luYXRpb25Db250cm9scztcbiAgICB0aGlzLnNvdXJjZURhdGEgPVxuICAgICAgdGhpcy50YWJsZS5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50Py5nZXRGaWx0ZXJWYWx1ZXNJbkRhdGEodGhpcy5jb2x1bW4uYXR0cikgfHxcbiAgICAgIHRoaXMudGFibGUub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudD8uZmlsdGVyVmFsdWVzSW5EYXRhIHx8XG4gICAgICAodGhpcy50YWJsZS5wYWdlYWJsZSA/ICdjdXJyZW50LXBhZ2UnIDogJ2FsbC1kYXRhJyk7XG5cbiAgICB0aGlzLm1vZGUgPSB0aGlzLnRhYmxlLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgPyB0aGlzLnRhYmxlLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQubW9kZSA6ICdkZWZhdWx0JztcbiAgICB0aGlzLmlzRGVmYXVsdEZpbHRlclN1YmplY3QubmV4dCh0aGlzLm1vZGUgPT09ICdkZWZhdWx0Jyk7XG4gICAgdGhpcy5pc0N1c3RvbUZpbHRlclN1YmplY3QubmV4dCh0aGlzLm1vZGUgPT09ICdjdXN0b20nKTtcblxuICAgIGxldCBwcmV2aW91c0ZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyID0gdGhpcy50YWJsZS5kYXRhU291cmNlLmdldENvbHVtblZhbHVlRmlsdGVyQnlBdHRyKHRoaXMuY29sdW1uLmF0dHIpIHx8IHtcbiAgICAgIGF0dHI6IHVuZGVmaW5lZCxcbiAgICAgIG9wZXJhdG9yOiB1bmRlZmluZWQsXG4gICAgICB2YWx1ZXM6IHVuZGVmaW5lZCxcbiAgICAgIGF2YWlsYWJsZVZhbHVlczogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChwcmV2aW91c0ZpbHRlci5vcGVyYXRvcikpIHtcbiAgICAgIHRoaXMuaXNDdXN0b21GaWx0ZXJTdWJqZWN0Lm5leHQoQ1VTVE9NX0ZJTFRFUlNfT1BFUkFUT1JTLmluZGV4T2YocHJldmlvdXNGaWx0ZXIub3BlcmF0b3IpICE9PSAtMSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcmVsb2FkVmFsdWVzID0gdGhpcy50YWJsZS5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50ID8gdGhpcy50YWJsZS5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LnByZWxvYWRWYWx1ZXMgOiB0cnVlO1xuICAgIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9IHRoaXMudGFibGUuZ2V0U29ydEZpbHRlckNvbHVtbih0aGlzLmNvbHVtbikgfHwgJyc7XG4gICAgdGhpcy5zdGFydFZpZXcgPSB0aGlzLnRhYmxlLmdldFN0YXJ0Vmlld0ZpbHRlckNvbHVtbih0aGlzLmNvbHVtbikgfHwgJ21vbnRoJ1xuXG4gICAgY29uc3QgcXVlcnlNZXRob2QgPSB0aGlzLnRhYmxlLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQ/LmdldFF1ZXJ5TWV0aG9kT2ZGaWx0ZXJDb2x1bW4odGhpcy5jb2x1bW4uYXR0cik7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHF1ZXJ5TWV0aG9kKSkge1xuICAgICAgdGhpcy5xdWVyeU1ldGhvZE5hbWUgPSBxdWVyeU1ldGhvZDtcbiAgICAgIHRoaXMuc291cmNlRGF0YSA9ICdhbGwtZGF0YSc7XG4gICAgfVxuICAgIHRoaXMuZ2V0RGF0YSh0aGlzLnNvdXJjZURhdGEpO1xuICB9XG5cblxuICBwcml2YXRlIHBhcnNlRGF0YUFuZEluaXRpYWxpemVEYXRhTGlzdChwcmV2aW91c0ZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyKSB7XG5cbiAgICB0aGlzLnBhcnNlTGlzdERhdGEocHJldmlvdXNGaWx0ZXIpO1xuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHByZXZpb3VzRmlsdGVyKSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplQ3VzdG9tRmlsdGVyVmFsdWVzKHByZXZpb3VzRmlsdGVyKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplRGF0YUxpc3QocHJldmlvdXNGaWx0ZXIpO1xuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplRmlsdGVyRXZlbnQoKTtcbiAgfVxuXG4gIGdldCBsaXN0RGF0YSgpOiBPYnNlcnZhYmxlPFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhW10+IHtcbiAgICByZXR1cm4gdGhpcy5fbGlzdERhdGE7XG4gIH1cblxuICBzZXQgbGlzdERhdGEoYXJnOiBPYnNlcnZhYmxlPFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhW10+KSB7XG4gICAgdGhpcy5fbGlzdERhdGEgPSBhcmc7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZURhdGFMaXN0KGZpbHRlcj86IE9Db2x1bW5WYWx1ZUZpbHRlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnByZWxvYWRWYWx1ZXMgfHwgKGZpbHRlciAmJiBmaWx0ZXIub3BlcmF0b3IgPT09IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU4pKSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uID09PSBDb2Rlcy5BU0NfU09SVCB8fCB0aGlzLmFjdGl2ZVNvcnREaXJlY3Rpb24gPT09IENvZGVzLkRFU0NfU09SVCkge1xuICAgICAgICB0aGlzLnNvcnREYXRhKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhU3ViamVjdC5uZXh0KHRoaXMuY29sdW1uRGF0YS5zbGljZSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZUZpbHRlckV2ZW50KCkge1xuICAgIGlmICh0aGlzLmZpbHRlcikge1xuICAgICAgZnJvbUV2ZW50KHRoaXMuZmlsdGVyLm5hdGl2ZUVsZW1lbnQsICdrZXl1cCcpXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxNTApKVxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBsZXQgZmlsdGVyVmFsdWU6IHN0cmluZyA9IHRoaXMuZmlsdGVyLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgICAgZmlsdGVyVmFsdWUgPSBVdGlsLm5vcm1hbGl6ZVN0cmluZyhmaWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmluZGV4T2YoJyonKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdERhdGFTdWJqZWN0Lm5leHQodGhpcy5jb2x1bW5EYXRhLmZpbHRlcihpdGVtID0+IG5ldyBSZWdFeHAoJ14nICsgVXRpbC5ub3JtYWxpemVTdHJpbmcoZmlsdGVyVmFsdWUpLnNwbGl0KCcqJykuam9pbignLionKSArICckJykudGVzdChVdGlsLm5vcm1hbGl6ZVN0cmluZyhpdGVtLnJlbmRlcmVkVmFsdWUpKSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhU3ViamVjdC5uZXh0KHRoaXMuY29sdW1uRGF0YS5maWx0ZXIoaXRlbSA9PiAoVXRpbC5ub3JtYWxpemVTdHJpbmcoaXRlbS5yZW5kZXJlZFZhbHVlKS5pbmRleE9mKGZpbHRlclZhbHVlKSAhPT0gLTEpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZUN1c3RvbUZpbHRlclZhbHVlcyhmaWx0ZXI6IE9Db2x1bW5WYWx1ZUZpbHRlcik6IHZvaWQge1xuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSBmaWx0ZXIub3BlcmF0b3IgPT09IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuRVFVQUw6XG4gICAgICAgIGlmICh0aGlzLmlzVGV4dFR5cGUoKSkge1xuICAgICAgICAgIHRoaXMuZmNUZXh0LnNldFZhbHVlKGZpbHRlci52YWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBmaWx0ZXIub3BlcmF0b3IgPT09IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuQkVUV0VFTjpcbiAgICAgICAgdGhpcy5mY0Zyb20uc2V0VmFsdWUodGhpcy5pc0RhdGVUeXBlKCkgPyBuZXcgRGF0ZShmaWx0ZXIudmFsdWVzWzBdKSA6IGZpbHRlci52YWx1ZXNbMF0pO1xuICAgICAgICB0aGlzLmZjVG8uc2V0VmFsdWUodGhpcy5pc0RhdGVUeXBlKCkgPyBuZXcgRGF0ZShmaWx0ZXIudmFsdWVzWzFdKSA6IGZpbHRlci52YWx1ZXNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZmlsdGVyLm9wZXJhdG9yID09PSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUw6XG4gICAgICAgIHRoaXMuZmNGcm9tLnNldFZhbHVlKHRoaXMuaXNEYXRlVHlwZSgpID8gbmV3IERhdGUoZmlsdGVyLnZhbHVlcykgOiBmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGZpbHRlci5vcGVyYXRvciA9PT0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMOlxuICAgICAgICB0aGlzLmZjVG8uc2V0VmFsdWUodGhpcy5pc0RhdGVUeXBlKCkgPyBuZXcgRGF0ZShmaWx0ZXIudmFsdWVzKSA6IGZpbHRlci52YWx1ZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzZWxlY3RlZFZhbHVlcygpOiBUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJWYWx1ZUxpc3QgPyB0aGlzLmZpbHRlclZhbHVlTGlzdC5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQubWFwKHNlbGVjdGVkID0+IHNlbGVjdGVkLnZhbHVlKSA6IFtdO1xuICB9XG5cbiAgYXJlQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSB0aGlzLmNvbHVtbkRhdGEubGVuZ3RoO1xuICB9XG5cbiAgaXNJbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gdGhpcy5zZWxlY3RlZFZhbHVlcztcbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZFZhbHVlcy5sZW5ndGggIT09IHRoaXMuY29sdW1uRGF0YS5sZW5ndGg7XG4gIH1cblxuICBvblNlbGVjdChldmVudDogTWF0U2VsZWN0aW9uTGlzdENoYW5nZSkge1xuICAgIGV2ZW50Lm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4gb3B0aW9uLnZhbHVlLnNlbGVjdGVkID0gb3B0aW9uLnNlbGVjdGVkKTtcbiAgfVxuXG4gIG9uU2VsZWN0QWxsQ2hhbmdlKGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgIGlmIChldmVudC5jaGVja2VkKSB7XG4gICAgICB0aGlzLmZpbHRlclZhbHVlTGlzdC5zZWxlY3RBbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJWYWx1ZUxpc3QuZGVzZWxlY3RBbGwoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0RGF0YShmaWx0ZXI6IE9Db2x1bW5WYWx1ZUZpbHRlcik6IHZvaWQge1xuICAgIHRoaXMuY29sdW1uRGF0YSA9IFtdO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChmaWx0ZXI/LmF2YWlsYWJsZVZhbHVlcykpIHtcbiAgICAgIHRoaXMuY29sdW1uRGF0YSA9IGZpbHRlci5hdmFpbGFibGVWYWx1ZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbFJlbmRlcmVkVmFsdWVzID0gdGhpcy5nZXRDb2x1bW5EYXRhVXNpbmdSZW5kZXJlcigpO1xuICAgICAgY29uc3QgY29sVmFsdWVzOiBhbnlbXSA9IHRoaXMudGFibGVEYXRhLm1hcChlbGVtID0+IGVsZW1bdGhpcy5jb2x1bW4uYXR0cl0pO1xuXG4gICAgICBpZiAodGhpcy50YWJsZS5wYWdlYWJsZSAmJiB0aGlzLnNvdXJjZURhdGEgPT09ICdhbGwtZGF0YScpIHtcbiAgICAgICAgY29sUmVuZGVyZWRWYWx1ZXMuZm9yRWFjaCgocmVuZGVyZWRWYWx1ZSwgaSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkSW50b0NvbHVtbkRhdGEocmVuZGVyZWRWYWx1ZSwgY29sVmFsdWVzLCBpLCBmaWx0ZXIpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbFJlbmRlcmVkVmFsdWVzLmZvckVhY2goKHJlbmRlcmVkVmFsdWUsIGkpID0+IHtcbiAgICAgICAgICAvKlNlbGVjdGlvbiBkaXN0aW50IHZhbHVlcyAqL1xuICAgICAgICAgIGlmIChyZW5kZXJlZFZhbHVlID09PSBudWxsIHx8IHJlbmRlcmVkVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVuZGVyZWRWYWx1ZSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMuY29sdW1uRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5yZW5kZXJlZFZhbHVlID09PSByZW5kZXJlZFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRJbnRvQ29sdW1uRGF0YShyZW5kZXJlZFZhbHVlLCBjb2xWYWx1ZXMsIGksIGZpbHRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEludG9Db2x1bW5EYXRhKHJlbmRlcmVkVmFsdWU6IGFueSwgY29sVmFsdWVzOiBhbnlbXSwgaTogbnVtYmVyLCBmaWx0ZXI6IE9Db2x1bW5WYWx1ZUZpbHRlcikge1xuICAgIHRoaXMuY29sdW1uRGF0YS5wdXNoKHtcbiAgICAgIHJlbmRlcmVkVmFsdWU6IHJlbmRlcmVkVmFsdWUsXG4gICAgICB2YWx1ZTogY29sVmFsdWVzW2ldLFxuICAgICAgcm93VmFsdWU6IHRoaXMudGFibGVEYXRhW2ldLFxuICAgICAgc2VsZWN0ZWQ6IGZpbHRlcj8ub3BlcmF0b3IgPT09IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU4gJiYgKGZpbHRlcj8udmFsdWVzIHx8IFtdKS5pbmRleE9mKGNvbFZhbHVlc1tpXSkgIT09IC0xLFxuICAgICAgLy8gc3RvcmluZyB0aGUgZmlyc3QgaW5kZXggd2hlcmUgdGhpcyByZW5kZXJlZFZhbHVlIGlzIG9idGFpbmVkLiBJbiB0aGUgdGVtcGxhdGUgb2YgdGhpcyBjb21wb25lbnQgdGhlIGNvbHVtbiByZW5kZXJlciB3aWxsIG9idGFpbiB0aGVcbiAgICAgIC8vIHJvdyB2YWx1ZSBvZiB0aGlzIGluZGV4XG4gICAgICB0YWJsZUluZGV4OiBpXG4gICAgfSk7XG4gIH1cblxuICBnZXRDb2x1bW5WYWx1ZXNGaWx0ZXIoKTogT0NvbHVtblZhbHVlRmlsdGVyIHtcbiAgICBjb25zdCBmaWx0ZXI6IE9Db2x1bW5WYWx1ZUZpbHRlciA9IHtcbiAgICAgIGF0dHI6IHRoaXMuY29sdW1uLmF0dHIsXG4gICAgICBvcGVyYXRvcjogdW5kZWZpbmVkLFxuICAgICAgdmFsdWVzOiB1bmRlZmluZWQsXG4gICAgICBhdmFpbGFibGVWYWx1ZXM6IHVuZGVmaW5lZFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuaXNDdXN0b21GaWx0ZXJTdWJqZWN0LmdldFZhbHVlKCkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gdGhpcy5zZWxlY3RlZFZhbHVlcztcbiAgICAgIGlmIChzZWxlY3RlZFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5JTjtcbiAgICAgICAgZmlsdGVyLnZhbHVlcyA9IHNlbGVjdGVkVmFsdWVzLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSk7XG4gICAgICAgIGZpbHRlci5hdmFpbGFibGVWYWx1ZXMgPSB0aGlzLmNvbHVtbkRhdGE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmZjVGV4dC52YWx1ZSkge1xuICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMO1xuICAgICAgICBmaWx0ZXIudmFsdWVzID0gdGhpcy5nZXRUeXBlZFZhbHVlKHRoaXMuZmNUZXh0KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZjRnJvbS52YWx1ZSAmJiB0aGlzLmZjVG8udmFsdWUpIHtcbiAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5CRVRXRUVOO1xuICAgICAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLmdldFR5cGVkVmFsdWUodGhpcy5mY0Zyb20pO1xuICAgICAgICBjb25zdCB0b1ZhbHVlID0gdGhpcy5nZXRUeXBlZFZhbHVlKHRoaXMuZmNUbyk7XG4gICAgICAgIGZpbHRlci52YWx1ZXMgPSBmcm9tVmFsdWUgPD0gdG9WYWx1ZSA/IFtmcm9tVmFsdWUsIHRvVmFsdWVdIDogW3RvVmFsdWUsIGZyb21WYWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5mY0Zyb20udmFsdWUpIHtcbiAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUw7XG4gICAgICAgICAgZmlsdGVyLnZhbHVlcyA9IHRoaXMuZ2V0VHlwZWRWYWx1ZSh0aGlzLmZjRnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmNUby52YWx1ZSkge1xuICAgICAgICAgIGZpbHRlci5vcGVyYXRvciA9IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTEVTU19FUVVBTDtcbiAgICAgICAgICBmaWx0ZXIudmFsdWVzID0gdGhpcy5nZXRUeXBlZFZhbHVlKHRoaXMuZmNUbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIGNsZWFyVmFsdWVzKCkge1xuICAgIGlmICh0aGlzLmlzVGV4dFR5cGUoKSkge1xuICAgICAgdGhpcy5mY1RleHQuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNEYXRlVHlwZSgpIHx8IHRoaXMuaXNOdW1lcmljVHlwZSgpKSB7XG4gICAgICB0aGlzLmZjRnJvbS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5mY1RvLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGlja1NvcnRWYWx1ZXMoKSB7XG4gICAgc3dpdGNoICh0aGlzLmFjdGl2ZVNvcnREaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2FzYyc6XG4gICAgICAgIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9ICdkZXNjJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkZXNjJzpcbiAgICAgICAgdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uID0gJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLm9uU29ydEZpbHRlclZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuZ2V0RmlsdGVyQ29sdW1uKCkpO1xuICAgIHRoaXMuc29ydERhdGEoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzb3J0RGF0YSgpIHtcbiAgICBjb25zdCBzb3J0ZWREYXRhID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5jb2x1bW5EYXRhKTtcbiAgICBpZiAodGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uICE9PSAnJykge1xuICAgICAgdGhpcy5saXN0RGF0YVN1YmplY3QubmV4dChzb3J0ZWREYXRhLnNvcnQodGhpcy5zb3J0RnVuY3Rpb24uYmluZCh0aGlzKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3REYXRhU3ViamVjdC5uZXh0KHNvcnRlZERhdGEpO1xuICAgIH1cblxuICB9XG5cbiAgcHJvdGVjdGVkIHNvcnRGdW5jdGlvbihhOiBhbnksIGI6IGFueSk6IG51bWJlciB7XG4gICAgbGV0IHByb3BlcnR5QTogbnVtYmVyIHwgc3RyaW5nID0gJyc7XG4gICAgbGV0IHByb3BlcnR5QjogbnVtYmVyIHwgc3RyaW5nID0gJyc7XG4gICAgW3Byb3BlcnR5QSwgcHJvcGVydHlCXSA9IFthWyd2YWx1ZSddLCBiWyd2YWx1ZSddXTtcblxuICAgIHJldHVybiBVdGlsLnNvcnRGdW5jdGlvbihwcm9wZXJ0eUEsIHByb3BlcnR5QiwgdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uKTtcbiAgfVxuXG4gIG9uU2xpZGVDaGFuZ2UoZTogTWF0U2xpZGVUb2dnbGVDaGFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ3VzdG9tRmlsdGVyU3ViamVjdC5uZXh0KGUuY2hlY2tlZCk7XG5cbiAgICBpZiAoIWUuY2hlY2tlZCkge1xuICAgICAgLy8gU2VsZWN0aW9uIG1vZGVcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURhdGFMaXN0KCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRmlsdGVyRXZlbnQoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIGlzVGV4dFR5cGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzTnVtZXJpY1R5cGUoKSAmJiAhdGhpcy5pc0RhdGVUeXBlKCk7XG4gIH1cblxuICBpc051bWVyaWNUeXBlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBbJ2ludGVnZXInLCAncmVhbCcsICdjdXJyZW5jeSddLmluZGV4T2YodGhpcy5jb2x1bW4udHlwZSkgIT09IC0xO1xuICB9XG5cbiAgaXNEYXRlVHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gJ2RhdGUnID09PSB0aGlzLmNvbHVtbi50eXBlO1xuICB9XG5cbiAgZ2V0Rml4ZWREaW1lbnNpb25DbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnc2VsZWN0aW9uJyB8fCB0aGlzLm1vZGUgPT09ICdkZWZhdWx0JztcbiAgfVxuXG4gIGdldFNvcnRCeUFscGhhSWNvbigpIHtcbiAgICBsZXQgaWNvbiA9ICdvbnRpbWl6ZTpzb3J0X2J5X2FscGhhJztcbiAgICBpZiAodGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uICE9PSAnJykge1xuICAgICAgaWNvbiArPSAnXycgKyB0aGlzLmFjdGl2ZVNvcnREaXJlY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBpY29uO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEZpbHRlckNvbHVtbigpOiBPRmlsdGVyQ29sdW1uIHtcbiAgICBsZXQgb2JqOiBPRmlsdGVyQ29sdW1uID0geyBhdHRyOiAnJywgc29ydDogJycsIHN0YXJ0VmlldzogJycgfTtcbiAgICBvYmouYXR0ciA9IHRoaXMuY29sdW1uLmF0dHI7XG4gICAgb2JqLnNvcnQgPSB0aGlzLmFjdGl2ZVNvcnREaXJlY3Rpb247XG4gICAgb2JqLnN0YXJ0VmlldyA9IHRoaXMuc3RhcnRWaWV3O1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhcnRlZFZpZXdEYXRlcGlja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRWaWV3O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFR5cGVkVmFsdWUoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogYW55IHtcbiAgICBsZXQgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh0aGlzLmlzTnVtZXJpY1R5cGUoKSkge1xuICAgICAgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0RhdGVUeXBlKCkpIHtcbiAgICAgIHZhbHVlID0gY29udHJvbC52YWx1ZS52YWx1ZU9mKCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBvbkNoYW5nZURhdGFTb3VyY2UoZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKSB7XG4gICAgdGhpcy50YWJsZS5jbGVhckNvbHVtbkZpbHRlcih0aGlzLmNvbHVtbi5hdHRyKTtcbiAgICB0aGlzLmdldERhdGEoZXZlbnQudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRhKHNvdXJjZURhdGE6IHN0cmluZykge1xuICAgIGlmIChzb3VyY2VEYXRhID09PSAnY3VycmVudC1wYWdlJykge1xuICAgICAgLypHZXQgZmlsdGVyIHZhbHVlcyBvbiB0aGUgY3VycmVudCBwYWdlKi9cbiAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy50YWJsZS5kYXRhU291cmNlLmdldEN1cnJlbnREYXRhKCk7XG4gICAgICB0aGlzLnBhcnNlRGF0YUFuZEluaXRpYWxpemVEYXRhTGlzdChudWxsKTtcblxuICAgIH0gZWxzZSBpZiAodGhpcy50YWJsZS5wYWdlYWJsZSkge1xuICAgICAgLypHZXQgZmlsdGVyIHZhbHVlcyBvbiB0aGUgYWxsIHBhZ2VzKi9cbiAgICAgIHRoaXMucXVlcnlCeUZpbHRlckNvbHVtblN1YnNjcmlwdGlvbiA9IHRoaXMucXVlcnlCeUZpbHRlckNvbHVtbih0aGlzLmNvbHVtbi5hdHRyKS5zdWJzY3JpYmUoKHJlczogU2VydmljZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGxldCBkYXRhID0gW107XG4gICAgICAgIGlmIChyZXMuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgICBkYXRhID0gcmVzLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnBhcnNlRGF0YUFuZEluaXRpYWxpemVEYXRhTGlzdChudWxsKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMudGFibGUuZ2V0QWxsVmFsdWVzKCk7XG4gICAgICB0aGlzLnBhcnNlRGF0YUFuZEluaXRpYWxpemVEYXRhTGlzdChudWxsKTtcbiAgICB9XG4gIH1cblxuICBxdWVyeUJ5RmlsdGVyQ29sdW1uKGF0dHI6IHN0cmluZyk6IE9ic2VydmFibGU8U2VydmljZVJlc3BvbnNlPiB8IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICBjb25zdCBrdiA9IHRoaXMudGFibGUuZ2V0Q29tcG9uZW50RmlsdGVyKCk7XG4gICAgY29uc3QgYXYgPSBbYXR0cl07XG4gICAgbGV0IHNxbFR5cGVzID0ge307XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGt2KSAmJiAhVXRpbC5pc09iamVjdEVtcHR5KGt2KSkge1xuICAgICAgc3FsVHlwZXMgPSB0aGlzLnRhYmxlLmdldFNxbFR5cGVzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uUXVlcnlBcmdzID0gW2t2LCBhdiwgdGhpcy50YWJsZS5lbnRpdHksIHNxbFR5cGVzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICBjb25zdCBxdWVyeU1ldGhvZE5hbWUgPSB0aGlzLnF1ZXJ5TWV0aG9kTmFtZSB8fCBDb2Rlcy5RVUVSWV9NRVRIT0Q7XG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMudGFibGUuZ2V0U2VydmljZSgpO1xuICAgIGlmIChzZXJ2aWNlICYmIChxdWVyeU1ldGhvZE5hbWUgaW4gc2VydmljZSkgJiYgdGhpcy50YWJsZS5lbnRpdHkpIHtcbiAgICAgIHJldHVybiBzZXJ2aWNlW3F1ZXJ5TWV0aG9kTmFtZV0oLi4uY29sdW1uUXVlcnlBcmdzKVxuICAgIH1cbiAgICByZXR1cm4gb2Yoe30pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldENvbHVtbkRhdGFVc2luZ1JlbmRlcmVyKCkge1xuICAgIGNvbnN0IHVzZVJlbmRlcmVyID0gdGhpcy5jb2x1bW4ucmVuZGVyZXIgJiYgdGhpcy5jb2x1bW4ucmVuZGVyZXIuZ2V0Q2VsbERhdGE7XG4gICAgcmV0dXJuIHRoaXMudGFibGVEYXRhLm1hcCgocm93KSA9PiB1c2VSZW5kZXJlciA/IHRoaXMuY29sdW1uLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1t0aGlzLmNvbHVtbi5hdHRyXSwgcm93KSA6IHJvd1t0aGlzLmNvbHVtbi5hdHRyXSk7XG4gIH1cbn1cbiIsIjxzcGFuIG1hdC1kaWFsb2ctdGl0bGU+e3sgJ1RBQkxFLkJVVFRPTlMuRklMVEVSX0JZX0NPTFVNTicgfCBvVHJhbnNsYXRlIH19OiB7eyBjb2x1bW4udGl0bGUgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJkaWFsb2ctbGlzdC1jb250YWluZXJcIj5cbiAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGNsYXNzPVwiY29udGVudC13cmFwcGVyXCIgW2NsYXNzLmNvbnRlbnQtd3JhcHBlci1maXhlZC1kaW1lbnNpb25dPVwiZ2V0Rml4ZWREaW1lbnNpb25DbGFzcygpXCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgI2N1c3RvbUZpbHRlclNsaWRlIChjaGFuZ2UpPVwib25TbGlkZUNoYW5nZSgkZXZlbnQpXCIgW2NoZWNrZWRdPVwiKGlzQ3VzdG9tRmlsdGVyIHwgYXN5bmMpXCIgKm5nSWY9XCJpc0RlZmF1bHRGaWx0ZXIgfCBhc3luY1wiPlxuICAgICAge3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uQ1VTVE9NX0ZJTFRFUicgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxkaXYgZnhGbGV4PVwiMSAxIDEwMCVcIiAqbmdJZj1cIiEoaXNDdXN0b21GaWx0ZXIgfCBhc3luYyk7ZWxzZSBjdXN0b21GaWx0ZXJUZW1wbGF0ZVwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJoaW50ZWRcIj5cbiAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeCBzdmdJY29uPVwib250aW1pemU6c2VhcmNoXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0ICNmaWx0ZXIgcGxhY2Vob2xkZXI9XCJ7eyAnVEFCTEUuRklMVEVSJyB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICAgICAgPG1hdC1oaW50Pnt7ICdUQUJMRS5GSUxURVJfQllfQ09MVU1OLkhJTlRfU1RBUicgfCBvVHJhbnNsYXRlIH19PC9tYXQtaGludD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8ZGl2ICpuZ0lmPVwiKGxpc3REYXRhIHwgYXN5bmMpLmxlbmd0aCA+IDA7IGVsc2UgZW1wdHlMaXN0RGF0YVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gc3RhcnRcIj5cbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdGFydFwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvblNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCIgW2NoZWNrZWRdPVwiYXJlQWxsU2VsZWN0ZWQoKVwiIFtpbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZSgpXCIgW2Rpc2FibGVkXT1cIiFsaXN0RGF0YVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3hcIj5cbiAgICAgICAgICAgIHt7ICdUQUJMRS5GSUxURVJfQllfQ09MVU1OLkNIRUNLX0FMTCcgfCBvVHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbGlzdERhdGFcIiBjbGFzcz1cImNvbHVtbi1maWx0ZXItZW1wdHktbGlzdFwiPlxuICAgICAgICAgICAge3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uTElTVF9FTVBUWV9GSUxURVInIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RhcnRcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9uQ2xpY2tTb3J0VmFsdWVzKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCJnZXRTb3J0QnlBbHBoYUljb24oKVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgKm5nSWY9XCJzaG93RmlsdGVyVmFsdWVzT3B0aW9uXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJmaWx0ZXJ2YWx1ZXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgbWF0LXN1YmhlYWRlcj5cbiAgICAgICAgICAgICAgICB7eydUQUJMRS5GSUxURVJfQllfQ09MVU1OLkxBQkVMX0RBVEEnIHwgb1RyYW5zbGF0ZX19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBhcmlhLWxhYmVsPVwiRGF0YVwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIxMnB4XCIgWyhuZ01vZGVsKV09XCJzb3VyY2VEYXRhXCIgKGNoYW5nZSk9XCJvbkNoYW5nZURhdGFTb3VyY2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIHZhbHVlPVwiY3VycmVudC1wYWdlXCI+e3snVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5DVVJSRU5UX1BBR0UnIHwgb1RyYW5zbGF0ZX19PC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIHZhbHVlPVwiYWxsLWRhdGFcIj57eydUQUJMRS5GSUxURVJfQllfQ09MVU1OLkFMTF9QQUdFJyB8IG9UcmFuc2xhdGV9fTwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2VtcHR5TGlzdERhdGE+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWZpbHRlci1lbXB0eS1saXN0XCI+XG4gICAgICAgICAge3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uTElTVF9FTVBUWScgfCBvVHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgaXRlbVNpemU9XCIyNVwiIGZ4RmxleD5cbiAgICAgICAgPG1hdC1zZWxlY3Rpb24tbGlzdCAqbmdJZj1cInByZWxvYWRWYWx1ZXMgfHwgbGlzdERhdGFcIiAjZmlsdGVyVmFsdWVMaXN0IGNsYXNzPVwic2VsZWN0LXZhbHVlcy1saXN0XCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdCgkZXZlbnQpXCI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpjZGtWaXJ0dWFsRm9yPVwibGV0IHJlY29yZCBvZiAobGlzdERhdGEgfCBhc3luYyk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxtYXQtbGlzdC1vcHRpb24gY2hlY2tib3hQb3NpdGlvbj1cImJlZm9yZVwiIFtzZWxlY3RlZF09XCJyZWNvcmQuc2VsZWN0ZWRcIiBbdmFsdWVdPVwicmVjb3JkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZWNvcmQudmFsdWUgfCBpc0VtcHR5VmFsdWU7IGVsc2Ugc2hvd1ZhbHVlXCI+XG4gICAgICAgICAgICAgICAge3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uRU1QVFlfVkFMVUUnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93VmFsdWU+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4ucmVuZGVyZXJcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHJlY29yZC52YWx1ZSB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNvbHVtbi5yZW5kZXJlclwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5yZW5kZXJlci50ZW1wbGF0ZXJlZlwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjZWxsdmFsdWU6IHJlY29yZC52YWx1ZSwgcm93dmFsdWU6IHJlY29yZC5yb3dWYWx1ZSB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWxpc3Qtb3B0aW9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L21hdC1zZWxlY3Rpb24tbGlzdD5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cImNsZWFyQWN0aW9uXCIgY2xhc3M9XCJvLWJ1dHRvbi1pbmZvXCI+XG4gICAge3sgJ1RBQkxFLkJVVFRPTlMuRklMVEVSX0NMRUFSJyB8IG9UcmFuc2xhdGUgfX0gPC9idXR0b24+XG4gIDxzcGFuIGFsaWduPVwiZW5kXCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cImNhbmNlbEFjdGlvblwiIGNsYXNzPVwiby1idXR0b24tZGVmYXVsdCBjYW5jZWxcIj5cbiAgICAgIHt7ICdDQU5DRUwnIHwgb1RyYW5zbGF0ZSB9fSA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwiYWNjZXB0QWN0aW9uXCIgY2xhc3M9XCJvLWJ1dHRvbi1wcmltYXJ5XCI+XG4gICAgICB7eyAnQUNDRVBUJyB8IG9UcmFuc2xhdGUgfX0gPC9idXR0b24+XG4gIDwvc3Bhbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuXG48IS0tIFRFTVBMQVRFIENVU1RPTSBGSUxURVItLT5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tRmlsdGVyVGVtcGxhdGU+XG4gIDxkaXYgKm5nSWY9XCJpc1RleHRUeXBlKClcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGNsYXNzPVwiaGludGVkXCI+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgI2ZpbHRlclRleHQgW2Zvcm1Db250cm9sXT1cImZjVGV4dFwiIHBsYWNlaG9sZGVyPVwie3sgJ1RBQkxFLkZJTFRFUicgfCBvVHJhbnNsYXRlIH19XCI+XG4gICAgICA8bWF0LWhpbnQ+e3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uSElOVF9TVEFSJyB8IG9UcmFuc2xhdGUgfX08L21hdC1oaW50PlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXJWYWx1ZXMoKVwiPlxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiaXNOdW1lcmljVHlwZSgpXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeExheW91dEdhcD1cIjEycHhcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImZjRnJvbVwiIHBsYWNlaG9sZGVyPVwie3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uRlJPTScgfCBvVHJhbnNsYXRlIH19XCI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImZjVG9cIiBwbGFjZWhvbGRlcj1cInt7ICdUQUJMRS5GSUxURVJfQllfQ09MVU1OLlRPJyB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXJWYWx1ZXMoKVwiPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTpjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiaXNEYXRlVHlwZSgpXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeExheW91dEdhcD1cIjEycHhcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwiZGF0ZXBpY2tlckZyb21cIiBbbWF4XT1cImZjVG8udmFsdWVcIiBbZm9ybUNvbnRyb2xdPVwiZmNGcm9tXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5GUk9NJyB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZGF0ZXBpY2tlckZyb21cIj5cbiAgICAgICAgPG1hdC1pY29uIG1hdERhdGVwaWNrZXJUb2dnbGVJY29uPnRvZGF5PC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgPG1hdC1kYXRlcGlja2VyICNkYXRlcGlja2VyRnJvbSBbc3RhcnRWaWV3XT1cImdldFN0YXJ0ZWRWaWV3RGF0ZXBpY2tlcigpXCI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJkYXRlcGlja2VyVG9cIiBbbWluXT1cImZjRnJvbS52YWx1ZVwiIFtmb3JtQ29udHJvbF09XCJmY1RvXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5UTycgfCBvVHJhbnNsYXRlIH19XCI+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImRhdGVwaWNrZXJUb1wiPlxuICAgICAgICA8bWF0LWljb24gbWF0RGF0ZXBpY2tlclRvZ2dsZUljb24+dG9kYXk8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICA8bWF0LWRhdGVwaWNrZXIgI2RhdGVwaWNrZXJUbyBbc3RhcnRWaWV3XT1cImdldFN0YXJ0ZWRWaWV3RGF0ZXBpY2tlcigpXCI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNsZWFyVmFsdWVzKClcIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6Y2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL2ZpbHRlci1ieS1jb2x1bW4vby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL2ZpbHRlci1ieS1jb2x1bW4vby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMEIsTUFBTSx3QkFBd0IsQ0FBQztBQUdsRixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3BFLE9BQU8sRUFBRSx5QkFBeUIsRUFBc0IsTUFBTSx1REFBdUQsQ0FBQztBQUN0SCxPQUFPLEVBQTJCLCtCQUErQixFQUFFLE1BQU0sK0RBQStE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S0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXhDLElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2hFLE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUE7U0FDcEQ7UUFFRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sQ0FBQyxFQUEyQixFQUFFLEVBQTJCLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQztJQUMvRixDQUFDO0lBQUEsQ0FBQzs7b0lBellTLHVDQUF1Qyx5RkEwQ3hDLGVBQWU7d0hBMUNkLHVDQUF1Qyx3VkNuQ3BELG1sT0FpSUE7MkZEOUZhLHVDQUF1QztrQkFWbkQsU0FBUzsrQkFDRSxzQ0FBc0MsaUJBR2pDLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0osbUNBQW1DLEVBQUUsTUFBTTtxQkFDNUM7OzBCQTRDRSxNQUFNOzJCQUFDLGVBQWU7NENBZEosTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNXLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdENoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U2VsZWN0aW9uTGlzdCwgTWF0U2VsZWN0aW9uTGlzdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHsgTWF0UmFkaW9DaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9yYWRpbyc7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvc2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvciwgT0NvbHVtblZhbHVlRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tdmFsdWUtZmlsdGVyLnR5cGUnO1xuaW1wb3J0IHsgVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGEsIFRhYmxlRmlsdGVyQnlDb2x1bW5EaWFsb2dSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL28tdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9GaWx0ZXJDb2x1bW4gfSBmcm9tICcuLi8uLi9oZWFkZXIvdGFibGUtY29sdW1ucy1maWx0ZXIvY29sdW1ucy9vLXRhYmxlLWNvbHVtbnMtZmlsdGVyLWNvbHVtbi5jb21wb25lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IE9Db2x1bW4gfSBmcm9tICcuLi8uLi8uLi9jb2x1bW4vby1jb2x1bW4uY2xhc3MnO1xuaW1wb3J0IHsgT1F1ZXJ5UGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvcXVlcnktcGFyYW1zLnR5cGUnO1xuaW1wb3J0IHsgT1RhYmxlRmlsdGVyQnlDb2x1bW5TZXJ2aWNlIH0gZnJvbSAnLi9vLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4uc2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5cbmNvbnN0IENVU1RPTV9GSUxURVJTX09QRVJBVE9SUyA9IFtDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkxFU1NfRVFVQUwsIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTU9SRV9FUVVBTCwgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5CRVRXRUVOLCBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICdvLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLWZpbHRlci1ieS1jb2x1bW4tZGlhbG9nXSc6ICd0cnVlJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIHB1YmxpYyBhY2NlcHRBY3Rpb24gPSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkFDQ0VQVDtcbiAgcHVibGljIGNhbmNlbEFjdGlvbiA9IFRhYmxlRmlsdGVyQnlDb2x1bW5EaWFsb2dSZXN1bHQuQ0FOQ0VMO1xuICBwdWJsaWMgY2xlYXJBY3Rpb24gPSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkNMRUFSO1xuXG4gIGNvbHVtbjogT0NvbHVtbjtcbiAgcHJlbG9hZFZhbHVlczogYm9vbGVhbiA9IHRydWU7XG4gIG1vZGU6IHN0cmluZztcbiAgc3RhcnRWaWV3OiAnbW9udGgnIHwgJ3llYXInIHwgJ211bHRpLXllYXInIHwgJyc7XG5cbiAgcHVibGljIG9uU29ydEZpbHRlclZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPE9GaWx0ZXJDb2x1bW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzQ3VzdG9tRmlsdGVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0N1c3RvbUZpbHRlcjogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuaXNDdXN0b21GaWx0ZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNEZWZhdWx0RmlsdGVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0RlZmF1bHRGaWx0ZXI6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmlzRGVmYXVsdEZpbHRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgZmNUZXh0ID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBmY0Zyb20gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG4gIGZjVG8gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG5cbiAgcHJvdGVjdGVkIGNvbHVtbkRhdGE6IFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhW10gPSBbXTtcbiAgcHJvdGVjdGVkIHRhYmxlRGF0YTogYW55W10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3REYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFbXT4oW10pO1xuICBwcm90ZWN0ZWQgX2xpc3REYXRhOiBPYnNlcnZhYmxlPFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhW10+ID0gdGhpcy5saXN0RGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgQFZpZXdDaGlsZCgnZmlsdGVyJykgZmlsdGVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdmaWx0ZXJWYWx1ZUxpc3QnKSBmaWx0ZXJWYWx1ZUxpc3Q6IE1hdFNlbGVjdGlvbkxpc3Q7XG4gIHB1YmxpYyBhY3RpdmVTb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB8ICcnO1xuICBzb3VyY2VEYXRhOiAnY3VycmVudC1wYWdlJyB8ICdhbGwtZGF0YSc7XG4gIHF1ZXJ5QnlGaWx0ZXJDb2x1bW5TdWJzY3JpcHRpb246IGFueTtcbiAgdGFibGU6IE9UYWJsZUNvbXBvbmVudDtcbiAgc2hvd0ZpbHRlclZhbHVlc09wdGlvbjogYm9vbGVhbjtcbiAgcXVlcnlNZXRob2ROYW1lOiBzdHJpbmc7XG4gIHByZXZpb3VzRmlsdGVyOiBPQ29sdW1uVmFsdWVGaWx0ZXI7XG4gIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YT4odHJ1ZSwgW10sIHRydWUsIHRoaXMuY29tcGFyZU9wdGlvbnMoKSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWx0ZXJTZXJ2aWNlOiBPVGFibGVGaWx0ZXJCeUNvbHVtblNlcnZpY2UsXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIGRhdGE6IHsgY29sdW1uOiBPQ29sdW1uOyB0YWJsZTogT1RhYmxlQ29tcG9uZW50IH1cbiAgKSB7XG5cbiAgICBpZiAoZGF0YS5jb2x1bW4pIHtcbiAgICAgIHRoaXMuY29sdW1uID0gZGF0YS5jb2x1bW47XG4gICAgfVxuICAgIHRoaXMudGFibGUgPSBkYXRhLnRhYmxlO1xuXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemUoKSB7XG4gICAgdGhpcy5zaG93RmlsdGVyVmFsdWVzT3B0aW9uID0gdGhpcy50YWJsZS5wYWdpbmF0aW9uQ29udHJvbHM7XG4gICAgdGhpcy5zb3VyY2VEYXRhID0gdGhpcy50YWJsZS5nZXRTb3VyY2VEYXRhQnlGaWx0ZXJDb2x1bW4odGhpcy5jb2x1bW4pO1xuXG4gICAgdGhpcy5tb2RlID0gdGhpcy50YWJsZS5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50ID8gdGhpcy50YWJsZS5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50Lm1vZGUgOiAnZGVmYXVsdCc7XG4gICAgdGhpcy5pc0RlZmF1bHRGaWx0ZXJTdWJqZWN0Lm5leHQodGhpcy5tb2RlID09PSAnZGVmYXVsdCcpO1xuICAgIHRoaXMuaXNDdXN0b21GaWx0ZXJTdWJqZWN0Lm5leHQodGhpcy5tb2RlID09PSAnY3VzdG9tJyk7XG5cbiAgICB0aGlzLnByZXZpb3VzRmlsdGVyID0gdGhpcy50YWJsZS5kYXRhU291cmNlLmdldENvbHVtblZhbHVlRmlsdGVyQnlBdHRyKHRoaXMuY29sdW1uLmF0dHIpIHx8IHtcbiAgICAgIGF0dHI6IHVuZGVmaW5lZCxcbiAgICAgIG9wZXJhdG9yOiB1bmRlZmluZWQsXG4gICAgICB2YWx1ZXM6IHVuZGVmaW5lZCxcbiAgICAgIGF2YWlsYWJsZVZhbHVlczogdW5kZWZpbmVkLFxuICAgICAgZmlsdGVyRXhwcmVzaW9uOiB1bmRlZmluZWQsXG4gICAgICBmaWx0ZXJWYWx1ZXNJbkRhdGE6IHRoaXMuc291cmNlRGF0YVxuICAgIH07XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5wcmV2aW91c0ZpbHRlci5vcGVyYXRvcikpIHtcbiAgICAgIHRoaXMuaXNDdXN0b21GaWx0ZXJTdWJqZWN0Lm5leHQoQ1VTVE9NX0ZJTFRFUlNfT1BFUkFUT1JTLmluZGV4T2YodGhpcy5wcmV2aW91c0ZpbHRlci5vcGVyYXRvcikgIT09IC0xKTtcbiAgICB9XG5cbiAgICB0aGlzLnByZWxvYWRWYWx1ZXMgPSB0aGlzLnRhYmxlLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgPyB0aGlzLnRhYmxlLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQucHJlbG9hZFZhbHVlcyA6IHRydWU7XG4gICAgdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uID0gdGhpcy50YWJsZS5nZXRTb3J0RmlsdGVyQ29sdW1uKHRoaXMuY29sdW1uKSB8fCAnJztcbiAgICB0aGlzLnN0YXJ0VmlldyA9IHRoaXMudGFibGUuZ2V0U3RhcnRWaWV3RmlsdGVyQ29sdW1uKHRoaXMuY29sdW1uKSB8fCAnbW9udGgnXG5cbiAgICBjb25zdCBxdWVyeU1ldGhvZCA9IHRoaXMudGFibGUub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudD8uZ2V0UXVlcnlNZXRob2RPZkZpbHRlckNvbHVtbih0aGlzLmNvbHVtbi5hdHRyKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocXVlcnlNZXRob2QpKSB7XG4gICAgICB0aGlzLnF1ZXJ5TWV0aG9kTmFtZSA9IHF1ZXJ5TWV0aG9kO1xuICAgICAgdGhpcy5zb3VyY2VEYXRhID0gJ2FsbC1kYXRhJztcbiAgICB9XG4gICAgdGhpcy5nZXREYXRhKHRoaXMuc291cmNlRGF0YSk7XG4gIH1cblxuXG4gIHByaXZhdGUgcGFyc2VEYXRhQW5kSW5pdGlhbGl6ZURhdGFMaXN0KHByZXZpb3VzRmlsdGVyOiBPQ29sdW1uVmFsdWVGaWx0ZXIpIHtcblxuICAgIHRoaXMuY29sdW1uRGF0YSA9IHRoaXMuZmlsdGVyU2VydmljZS5wYXJzZUxpc3REYXRhKHByZXZpb3VzRmlsdGVyLCB0aGlzLmNvbHVtbiwgdGhpcy50YWJsZURhdGEsIHRoaXMudGFibGUucGFnZWFibGUsIHRoaXMuc291cmNlRGF0YSk7XG4gICAgaWYocHJldmlvdXNGaWx0ZXIudmFsdWVzICYmIHByZXZpb3VzRmlsdGVyLnZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoLi4udGhpcy5jb2x1bW5EYXRhLmZpbHRlcihpdGVtID0+IHByZXZpb3VzRmlsdGVyLnZhbHVlcy5pbmRleE9mKGl0ZW0udmFsdWUpICE9PSAtMSkpO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChwcmV2aW91c0ZpbHRlcikpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUN1c3RvbUZpbHRlclZhbHVlcyhwcmV2aW91c0ZpbHRlcik7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGFMaXN0KHByZXZpb3VzRmlsdGVyKTtcblxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZpbHRlckV2ZW50KCk7XG4gIH1cblxuICBnZXQgbGlzdERhdGEoKTogT2JzZXJ2YWJsZTxUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3REYXRhO1xuICB9XG5cbiAgc2V0IGxpc3REYXRhKGFyZzogT2JzZXJ2YWJsZTxUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdPikge1xuICAgIHRoaXMuX2xpc3REYXRhID0gYXJnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVEYXRhTGlzdChmaWx0ZXI/OiBPQ29sdW1uVmFsdWVGaWx0ZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcmVsb2FkVmFsdWVzIHx8IChmaWx0ZXIgJiYgZmlsdGVyLm9wZXJhdG9yID09PSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLklOKSkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9PT0gQ29kZXMuQVNDX1NPUlQgfHwgdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uID09PSBDb2Rlcy5ERVNDX1NPUlQpIHtcbiAgICAgICAgdGhpcy5zb3J0RGF0YSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YVN1YmplY3QubmV4dCh0aGlzLmNvbHVtbkRhdGEuc2xpY2UoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVGaWx0ZXJFdmVudCgpIHtcbiAgICBpZiAodGhpcy5maWx0ZXIpIHtcbiAgICAgIGZyb21FdmVudCh0aGlzLmZpbHRlci5uYXRpdmVFbGVtZW50LCAna2V5dXAnKVxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTUwKSlcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgbGV0IGZpbHRlclZhbHVlOiBzdHJpbmcgPSB0aGlzLmZpbHRlci5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICAgIGZpbHRlclZhbHVlID0gVXRpbC5ub3JtYWxpemVTdHJpbmcoZmlsdGVyVmFsdWUpO1xuICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCcqJykgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhU3ViamVjdC5uZXh0KHRoaXMuY29sdW1uRGF0YS5maWx0ZXIoaXRlbSA9PiBuZXcgUmVnRXhwKCdeJyArIFV0aWwubm9ybWFsaXplU3RyaW5nKGZpbHRlclZhbHVlKS5zcGxpdCgnKicpLmpvaW4oJy4qJykgKyAnJCcpLnRlc3QoVXRpbC5ub3JtYWxpemVTdHJpbmcoaXRlbS5yZW5kZXJlZFZhbHVlKSkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5saXN0RGF0YVN1YmplY3QubmV4dCh0aGlzLmNvbHVtbkRhdGEuZmlsdGVyKGl0ZW0gPT4gKFV0aWwubm9ybWFsaXplU3RyaW5nKGl0ZW0ucmVuZGVyZWRWYWx1ZSkuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgIT09IC0xKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVDdXN0b21GaWx0ZXJWYWx1ZXMoZmlsdGVyOiBPQ29sdW1uVmFsdWVGaWx0ZXIpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgZmlsdGVyLm9wZXJhdG9yID09PSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMOlxuICAgICAgICBpZiAodGhpcy5pc1RleHRUeXBlKCkpIHtcbiAgICAgICAgICB0aGlzLmZjVGV4dC5zZXRWYWx1ZShmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZmlsdGVyLm9wZXJhdG9yID09PSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkJFVFdFRU46XG4gICAgICAgIHRoaXMuZmNGcm9tLnNldFZhbHVlKHRoaXMuaXNEYXRlVHlwZSgpID8gbmV3IERhdGUoZmlsdGVyLnZhbHVlc1swXSkgOiBmaWx0ZXIudmFsdWVzWzBdKTtcbiAgICAgICAgdGhpcy5mY1RvLnNldFZhbHVlKHRoaXMuaXNEYXRlVHlwZSgpID8gbmV3IERhdGUoZmlsdGVyLnZhbHVlc1sxXSkgOiBmaWx0ZXIudmFsdWVzWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGZpbHRlci5vcGVyYXRvciA9PT0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5NT1JFX0VRVUFMOlxuICAgICAgICB0aGlzLmZjRnJvbS5zZXRWYWx1ZSh0aGlzLmlzRGF0ZVR5cGUoKSA/IG5ldyBEYXRlKGZpbHRlci52YWx1ZXMpIDogZmlsdGVyLnZhbHVlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBmaWx0ZXIub3BlcmF0b3IgPT09IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTEVTU19FUVVBTDpcbiAgICAgICAgdGhpcy5mY1RvLnNldFZhbHVlKHRoaXMuaXNEYXRlVHlwZSgpID8gbmV3IERhdGUoZmlsdGVyLnZhbHVlcykgOiBmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuXG4gIGFyZUFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPT09IHRoaXMuY29sdW1uRGF0YS5sZW5ndGg7XG4gIH1cblxuICBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZDtcbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZFZhbHVlcy5sZW5ndGggIT09IHRoaXMuY29sdW1uRGF0YS5sZW5ndGg7XG4gIH1cblxuICBvblNlbGVjdChldmVudDogTWF0U2VsZWN0aW9uTGlzdENoYW5nZSkge1xuXG4gICAgZXZlbnQub3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbi52YWx1ZTtcblxuICAgICAgdmFsdWUuc2VsZWN0ZWQgPSBvcHRpb24uc2VsZWN0ZWQ7XG4gICAgICBpZiAob3B0aW9uLnNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblNlbGVjdEFsbENoYW5nZShldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5saXN0RGF0YVN1YmplY3QuZ2V0VmFsdWUoKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMubGlzdERhdGFTdWJqZWN0LmdldFZhbHVlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3REYXRhU3ViamVjdC5nZXRWYWx1ZSgpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW5WYWx1ZXNGaWx0ZXIoKTogT0NvbHVtblZhbHVlRmlsdGVyIHtcbiAgICBjb25zdCBmaWx0ZXI6IE9Db2x1bW5WYWx1ZUZpbHRlciA9IHtcbiAgICAgIGF0dHI6IHRoaXMuY29sdW1uLmF0dHIsXG4gICAgICBvcGVyYXRvcjogdW5kZWZpbmVkLFxuICAgICAgdmFsdWVzOiB1bmRlZmluZWQsXG4gICAgICBhdmFpbGFibGVWYWx1ZXM6IHRoaXMucHJldmlvdXNGaWx0ZXI/LmF2YWlsYWJsZVZhbHVlcyB8fCB1bmRlZmluZWQsXG4gICAgICBmaWx0ZXJFeHByZXNpb246IHRoaXMucHJldmlvdXNGaWx0ZXI/LmZpbHRlckV4cHJlc2lvbiB8fCB1bmRlZmluZWQsXG4gICAgICBmaWx0ZXJWYWx1ZXNJbkRhdGE6IHRoaXMuc291cmNlRGF0YVxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuaXNDdXN0b21GaWx0ZXJTdWJqZWN0LmdldFZhbHVlKCkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzOlRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhW10gPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZDtcbiAgICAgIGlmIChzZWxlY3RlZFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLmFwcGx5U2VsZWN0ZWRWYWx1ZXNUb0ZpbHRlcih0aGlzLmNvbHVtbiwgdGhpcy50YWJsZURhdGEsIGZpbHRlciwgc2VsZWN0ZWRWYWx1ZXMsIHRoaXMuc291cmNlRGF0YSwgdGhpcy50YWJsZS5wYWdlYWJsZSwoKSA9PiB0aGlzLnRhYmxlLmdldENvbXBvbmVudEZpbHRlcigpKTtcblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5mY1RleHQudmFsdWUpIHtcbiAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5FUVVBTDtcbiAgICAgICAgZmlsdGVyLnZhbHVlcyA9IHRoaXMuZ2V0VHlwZWRWYWx1ZSh0aGlzLmZjVGV4dCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mY0Zyb20udmFsdWUgJiYgdGhpcy5mY1RvLnZhbHVlKSB7XG4gICAgICAgIGZpbHRlci5vcGVyYXRvciA9IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuQkVUV0VFTjtcbiAgICAgICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5nZXRUeXBlZFZhbHVlKHRoaXMuZmNGcm9tKTtcbiAgICAgICAgY29uc3QgdG9WYWx1ZSA9IHRoaXMuZ2V0VHlwZWRWYWx1ZSh0aGlzLmZjVG8pO1xuICAgICAgICBmaWx0ZXIudmFsdWVzID0gZnJvbVZhbHVlIDw9IHRvVmFsdWUgPyBbZnJvbVZhbHVlLCB0b1ZhbHVlXSA6IFt0b1ZhbHVlLCBmcm9tVmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZmNGcm9tLnZhbHVlKSB7XG4gICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5NT1JFX0VRVUFMO1xuICAgICAgICAgIGZpbHRlci52YWx1ZXMgPSB0aGlzLmdldFR5cGVkVmFsdWUodGhpcy5mY0Zyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZjVG8udmFsdWUpIHtcbiAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkxFU1NfRVFVQUw7XG4gICAgICAgICAgZmlsdGVyLnZhbHVlcyA9IHRoaXMuZ2V0VHlwZWRWYWx1ZSh0aGlzLmZjVG8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBjbGVhclZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5pc1RleHRUeXBlKCkpIHtcbiAgICAgIHRoaXMuZmNUZXh0LnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRGF0ZVR5cGUoKSB8fCB0aGlzLmlzTnVtZXJpY1R5cGUoKSkge1xuICAgICAgdGhpcy5mY0Zyb20uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuZmNUby5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2tTb3J0VmFsdWVzKCkge1xuICAgIHN3aXRjaCAodGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdhc2MnOlxuICAgICAgICB0aGlzLmFjdGl2ZVNvcnREaXJlY3Rpb24gPSAnZGVzYyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVzYyc6XG4gICAgICAgIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5vblNvcnRGaWx0ZXJWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLmdldEZpbHRlckNvbHVtbigpKTtcbiAgICB0aGlzLnNvcnREYXRhKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydERhdGEoKSB7XG4gICAgY29uc3Qgc29ydGVkRGF0YSA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuY29sdW1uRGF0YSk7XG4gICAgaWYgKHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiAhPT0gJycpIHtcbiAgICAgIHRoaXMubGlzdERhdGFTdWJqZWN0Lm5leHQoc29ydGVkRGF0YS5zb3J0KHRoaXMuc29ydEZ1bmN0aW9uLmJpbmQodGhpcykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0RGF0YVN1YmplY3QubmV4dChzb3J0ZWREYXRhKTtcbiAgICB9XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBzb3J0RnVuY3Rpb24oYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuICAgIGxldCBwcm9wZXJ0eUE6IG51bWJlciB8IHN0cmluZyA9ICcnO1xuICAgIGxldCBwcm9wZXJ0eUI6IG51bWJlciB8IHN0cmluZyA9ICcnO1xuICAgIFtwcm9wZXJ0eUEsIHByb3BlcnR5Ql0gPSBbYVsndmFsdWUnXSwgYlsndmFsdWUnXV07XG5cbiAgICByZXR1cm4gVXRpbC5zb3J0RnVuY3Rpb24ocHJvcGVydHlBLCBwcm9wZXJ0eUIsIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbik7XG4gIH1cblxuICBvblNsaWRlQ2hhbmdlKGU6IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5pc0N1c3RvbUZpbHRlclN1YmplY3QubmV4dChlLmNoZWNrZWQpO1xuXG4gICAgaWYgKCFlLmNoZWNrZWQpIHtcbiAgICAgIC8vIFNlbGVjdGlvbiBtb2RlXG4gICAgICB0aGlzLmluaXRpYWxpemVEYXRhTGlzdCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZpbHRlckV2ZW50KCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBpc1RleHRUeXBlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc051bWVyaWNUeXBlKCkgJiYgIXRoaXMuaXNEYXRlVHlwZSgpO1xuICB9XG5cbiAgaXNOdW1lcmljVHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gWydpbnRlZ2VyJywgJ3JlYWwnLCAnY3VycmVuY3knXS5pbmRleE9mKHRoaXMuY29sdW1uLnR5cGUpICE9PSAtMTtcbiAgfVxuXG4gIGlzRGF0ZVR5cGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICdkYXRlJyA9PT0gdGhpcy5jb2x1bW4udHlwZTtcbiAgfVxuXG4gIGdldEZpeGVkRGltZW5zaW9uQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ3NlbGVjdGlvbicgfHwgdGhpcy5tb2RlID09PSAnZGVmYXVsdCc7XG4gIH1cblxuICBnZXRTb3J0QnlBbHBoYUljb24oKSB7XG4gICAgbGV0IGljb24gPSAnb250aW1pemU6c29ydF9ieV9hbHBoYSc7XG4gICAgaWYgKHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiAhPT0gJycpIHtcbiAgICAgIGljb24gKz0gJ18nICsgdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gaWNvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRGaWx0ZXJDb2x1bW4oKTogT0ZpbHRlckNvbHVtbiB7XG4gICAgbGV0IG9iajogT0ZpbHRlckNvbHVtbiA9IHsgYXR0cjogJycsIHNvcnQ6ICcnLCBzdGFydFZpZXc6ICcnIH07XG4gICAgb2JqLmF0dHIgPSB0aGlzLmNvbHVtbi5hdHRyO1xuICAgIG9iai5zb3J0ID0gdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uO1xuICAgIG9iai5zdGFydFZpZXcgPSB0aGlzLnN0YXJ0VmlldztcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcHVibGljIGdldFN0YXJ0ZWRWaWV3RGF0ZXBpY2tlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0VmlldztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUeXBlZFZhbHVlKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IGFueSB7XG4gICAgbGV0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodGhpcy5pc051bWVyaWNUeXBlKCkpIHtcbiAgICAgIHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNEYXRlVHlwZSgpKSB7XG4gICAgICB2YWx1ZSA9IGNvbnRyb2wudmFsdWUudmFsdWVPZigpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgb25DaGFuZ2VEYXRhU291cmNlKGV2ZW50OiBNYXRSYWRpb0NoYW5nZSkge1xuICAgIHRoaXMudGFibGUuY2xlYXJDb2x1bW5GaWx0ZXIodGhpcy5jb2x1bW4uYXR0cik7XG4gICAgdGhpcy5nZXREYXRhKGV2ZW50LnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0YShzb3VyY2VEYXRhOiBzdHJpbmcpIHtcbiAgICBpZiAoc291cmNlRGF0YSA9PT0gJ2N1cnJlbnQtcGFnZScpIHtcbiAgICAgIC8qR2V0IGZpbHRlciB2YWx1ZXMgb24gdGhlIGN1cnJlbnQgcGFnZSovXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMudGFibGUuZ2V0VmFsdWUoKTtcbiAgICAgIHRoaXMucGFyc2VEYXRhQW5kSW5pdGlhbGl6ZURhdGFMaXN0KHRoaXMucHJldmlvdXNGaWx0ZXIpO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG4gICAgICAvKkdldCBmaWx0ZXIgdmFsdWVzIG9uIHRoZSBhbGwgcGFnZXMqL1xuICAgICAgdGhpcy5xdWVyeUJ5RmlsdGVyQ29sdW1uU3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeUJ5RmlsdGVyQ29sdW1uKHRoaXMuY29sdW1uLmF0dHIpLnN1YnNjcmliZSgocmVzOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgbGV0IGRhdGEgPSBbXTtcbiAgICAgICAgaWYgKHJlcy5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMucGFyc2VEYXRhQW5kSW5pdGlhbGl6ZURhdGFMaXN0KHRoaXMucHJldmlvdXNGaWx0ZXIpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy50YWJsZS5nZXRBbGxWYWx1ZXMoKTtcbiAgICAgIHRoaXMucGFyc2VEYXRhQW5kSW5pdGlhbGl6ZURhdGFMaXN0KHRoaXMucHJldmlvdXNGaWx0ZXIpO1xuICAgIH1cbiAgfVxuICBpc1NlbGVjdGVkKGl0ZW06IFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhKSB7XG4gICAgcmV0dXJuIGl0ZW0uc2VsZWN0ZWQ7XG4gIH1cblxuICBxdWVyeUJ5RmlsdGVyQ29sdW1uKGF0dHI6IHN0cmluZyk6IE9ic2VydmFibGU8U2VydmljZVJlc3BvbnNlPiB8IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICBjb25zdCBrdiA9IHRoaXMucHJldmlvdXNGaWx0ZXIuZmlsdGVyRXhwcmVzaW9uIHx8IHRoaXMudGFibGUuZ2V0Q29tcG9uZW50RmlsdGVyKCk7XG4gICAgY29uc3QgYXYgPSBbYXR0cl07XG4gICAgbGV0IHNxbFR5cGVzID0ge307XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGt2KSAmJiAhVXRpbC5pc09iamVjdEVtcHR5KGt2KSkge1xuICAgICAgc3FsVHlwZXMgPSB0aGlzLnRhYmxlLmdldFNxbFR5cGVzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uUXVlcnlBcmdzID0gW2t2LCBhdiwgdGhpcy50YWJsZS5lbnRpdHksIHNxbFR5cGVzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICBjb25zdCBxdWVyeU1ldGhvZE5hbWUgPSB0aGlzLnF1ZXJ5TWV0aG9kTmFtZSB8fCBDb2Rlcy5RVUVSWV9NRVRIT0Q7XG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMudGFibGUuZ2V0U2VydmljZSgpO1xuXG4gICAgaWYgKHNlcnZpY2UgJiYgKHF1ZXJ5TWV0aG9kTmFtZSBpbiBzZXJ2aWNlKSAmJiB0aGlzLnRhYmxlLmVudGl0eSkge1xuICAgICAgcmV0dXJuIHNlcnZpY2VbcXVlcnlNZXRob2ROYW1lXSguLi5jb2x1bW5RdWVyeUFyZ3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHt9KTtcbiAgfVxuXG4gIGNvbXBhcmVPcHRpb25zKCk6ICgobzE6IFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhLCBvMjogVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGEpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKG8xOiBUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YSwgbzI6IFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhKSA9PiBvMT8udmFsdWUgPT09IG8yPy52YWx1ZTtcbiAgfTtcbn1cbiIsIjxzcGFuIG1hdC1kaWFsb2ctdGl0bGU+e3sgJ1RBQkxFLkJVVFRPTlMuRklMVEVSX0JZX0NPTFVNTicgfCBvVHJhbnNsYXRlIH19OiB7eyBjb2x1bW4udGl0bGUgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJkaWFsb2ctbGlzdC1jb250YWluZXJcIj5cbiAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGNsYXNzPVwiY29udGVudC13cmFwcGVyXCIgW2NsYXNzLmNvbnRlbnQtd3JhcHBlci1maXhlZC1kaW1lbnNpb25dPVwiZ2V0Rml4ZWREaW1lbnNpb25DbGFzcygpXCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgI2N1c3RvbUZpbHRlclNsaWRlIChjaGFuZ2UpPVwib25TbGlkZUNoYW5nZSgkZXZlbnQpXCIgW2NoZWNrZWRdPVwiKGlzQ3VzdG9tRmlsdGVyIHwgYXN5bmMpXCIgKm5nSWY9XCJpc0RlZmF1bHRGaWx0ZXIgfCBhc3luY1wiPlxuICAgICAge3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uQ1VTVE9NX0ZJTFRFUicgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxkaXYgZnhGbGV4PVwiMSAxIDEwMCVcIiAqbmdJZj1cIiEoaXNDdXN0b21GaWx0ZXIgfCBhc3luYyk7ZWxzZSBjdXN0b21GaWx0ZXJUZW1wbGF0ZVwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJoaW50ZWRcIj5cbiAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeCBzdmdJY29uPVwib250aW1pemU6c2VhcmNoXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0ICNmaWx0ZXIgcGxhY2Vob2xkZXI9XCJ7eyAnVEFCTEUuRklMVEVSJyB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICAgICAgPG1hdC1oaW50Pnt7ICdUQUJMRS5GSUxURVJfQllfQ09MVU1OLkhJTlRfU1RBUicgfCBvVHJhbnNsYXRlIH19PC9tYXQtaGludD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8ZGl2ICpuZ0lmPVwiKGxpc3REYXRhIHwgYXN5bmMpLmxlbmd0aCA+IDA7IGVsc2UgZW1wdHlMaXN0RGF0YVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gc3RhcnRcIj5cbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdGFydFwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvblNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCIgW2NoZWNrZWRdPVwiYXJlQWxsU2VsZWN0ZWQoKVwiIFtpbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZSgpXCIgW2Rpc2FibGVkXT1cIiFsaXN0RGF0YVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3hcIj5cbiAgICAgICAgICAgIHt7ICdUQUJMRS5GSUxURVJfQllfQ09MVU1OLkNIRUNLX0FMTCcgfCBvVHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbGlzdERhdGFcIiBjbGFzcz1cImNvbHVtbi1maWx0ZXItZW1wdHktbGlzdFwiPlxuICAgICAgICAgICAge3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uTElTVF9FTVBUWV9GSUxURVInIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RhcnRcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9uQ2xpY2tTb3J0VmFsdWVzKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCJnZXRTb3J0QnlBbHBoYUljb24oKVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgKm5nSWY9XCJzaG93RmlsdGVyVmFsdWVzT3B0aW9uXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJmaWx0ZXJ2YWx1ZXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgbWF0LXN1YmhlYWRlcj5cbiAgICAgICAgICAgICAgICB7eydUQUJMRS5GSUxURVJfQllfQ09MVU1OLkxBQkVMX0RBVEEnIHwgb1RyYW5zbGF0ZX19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBhcmlhLWxhYmVsPVwiRGF0YVwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIxMnB4XCIgWyhuZ01vZGVsKV09XCJzb3VyY2VEYXRhXCIgKGNoYW5nZSk9XCJvbkNoYW5nZURhdGFTb3VyY2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIHZhbHVlPVwiY3VycmVudC1wYWdlXCI+e3snVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5DVVJSRU5UX1BBR0UnIHwgb1RyYW5zbGF0ZX19PC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIHZhbHVlPVwiYWxsLWRhdGFcIj57eydUQUJMRS5GSUxURVJfQllfQ09MVU1OLkFMTF9QQUdFJyB8IG9UcmFuc2xhdGV9fTwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2VtcHR5TGlzdERhdGE+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWZpbHRlci1lbXB0eS1saXN0XCI+XG4gICAgICAgICAge3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uTElTVF9FTVBUWScgfCBvVHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiMzBcIiBmeEZsZXg+XG4gICAgICAgIDxtYXQtc2VsZWN0aW9uLWxpc3QgKm5nSWY9XCJwcmVsb2FkVmFsdWVzIHx8IGxpc3REYXRhXCIgI2ZpbHRlclZhbHVlTGlzdCBjbGFzcz1cInNlbGVjdC12YWx1ZXMtbGlzdFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmNka1ZpcnR1YWxGb3I9XCJsZXQgcmVjb3JkIG9mIChsaXN0RGF0YSB8IGFzeW5jKTsgbGV0IGkgPSBpbmRleDt0ZW1wbGF0ZUNhY2hlU2l6ZTogMFwiPlxuICAgICAgICAgICAgPG1hdC1saXN0LW9wdGlvbiBjaGVja2JveFBvc2l0aW9uPVwiYmVmb3JlXCIgW3NlbGVjdGVkXT1cInNlbGVjdGlvbi5pc1NlbGVjdGVkKHJlY29yZClcIiBbdmFsdWVdPVwicmVjb3JkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZWNvcmQudmFsdWUgfCBpc0VtcHR5VmFsdWU7IGVsc2Ugc2hvd1ZhbHVlXCI+XG4gICAgICAgICAgICAgICAge3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uRU1QVFlfVkFMVUUnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93VmFsdWU+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4ucmVuZGVyZXJcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHJlY29yZC52YWx1ZSB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNvbHVtbi5yZW5kZXJlclwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5yZW5kZXJlci50ZW1wbGF0ZXJlZlwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjZWxsdmFsdWU6IHJlY29yZC52YWx1ZSwgcm93dmFsdWU6IHJlY29yZC5yb3dWYWx1ZSB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWxpc3Qtb3B0aW9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L21hdC1zZWxlY3Rpb24tbGlzdD5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG5cbjxtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJjbGVhckFjdGlvblwiIGNsYXNzPVwiby1idXR0b24taW5mb1wiPlxuICAgIHt7ICdUQUJMRS5CVVRUT05TLkZJTFRFUl9DTEVBUicgfCBvVHJhbnNsYXRlIH19IDwvYnV0dG9uPlxuICA8c3BhbiBhbGlnbj1cImVuZFwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJjYW5jZWxBY3Rpb25cIiBjbGFzcz1cIm8tYnV0dG9uLWRlZmF1bHQgY2FuY2VsXCI+XG4gICAgICB7eyAnQ0FOQ0VMJyB8IG9UcmFuc2xhdGUgfX0gPC9idXR0b24+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cImFjY2VwdEFjdGlvblwiIGNsYXNzPVwiby1idXR0b24tcHJpbWFyeVwiPlxuICAgICAge3sgJ0FDQ0VQVCcgfCBvVHJhbnNsYXRlIH19IDwvYnV0dG9uPlxuICA8L3NwYW4+XG48L21hdC1kaWFsb2ctYWN0aW9ucz5cblxuPCEtLSBURU1QTEFURSBDVVNUT00gRklMVEVSLS0+XG48bmctdGVtcGxhdGUgI2N1c3RvbUZpbHRlclRlbXBsYXRlPlxuICA8ZGl2ICpuZ0lmPVwiaXNUZXh0VHlwZSgpXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleCBjbGFzcz1cImhpbnRlZFwiPlxuICAgICAgPGlucHV0IG1hdElucHV0ICNmaWx0ZXJUZXh0IFtmb3JtQ29udHJvbF09XCJmY1RleHRcIiBwbGFjZWhvbGRlcj1cInt7ICdUQUJMRS5GSUxURVInIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgICAgPG1hdC1oaW50Pnt7ICdUQUJMRS5GSUxURVJfQllfQ09MVU1OLkhJTlRfU1RBUicgfCBvVHJhbnNsYXRlIH19PC9tYXQtaGludD5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNsZWFyVmFsdWVzKClcIj5cbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTpjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImlzTnVtZXJpY1R5cGUoKVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhMYXlvdXRHYXA9XCIxMnB4XCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJmY0Zyb21cIiBwbGFjZWhvbGRlcj1cInt7ICdUQUJMRS5GSUxURVJfQllfQ09MVU1OLkZST00nIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJmY1RvXCIgcGxhY2Vob2xkZXI9XCJ7eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5UTycgfCBvVHJhbnNsYXRlIH19XCI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNsZWFyVmFsdWVzKClcIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6Y2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImlzRGF0ZVR5cGUoKVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhMYXlvdXRHYXA9XCIxMnB4XCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPGlucHV0IG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cImRhdGVwaWNrZXJGcm9tXCIgW21heF09XCJmY1RvLnZhbHVlXCIgW2Zvcm1Db250cm9sXT1cImZjRnJvbVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uRlJPTScgfCBvVHJhbnNsYXRlIH19XCI+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImRhdGVwaWNrZXJGcm9tXCI+XG4gICAgICAgIDxtYXQtaWNvbiBtYXREYXRlcGlja2VyVG9nZ2xlSWNvbj50b2RheTwvbWF0LWljb24+XG4gICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZGF0ZXBpY2tlckZyb20gW3N0YXJ0Vmlld109XCJnZXRTdGFydGVkVmlld0RhdGVwaWNrZXIoKVwiPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwiZGF0ZXBpY2tlclRvXCIgW21pbl09XCJmY0Zyb20udmFsdWVcIiBbZm9ybUNvbnRyb2xdPVwiZmNUb1wiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uVE8nIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJkYXRlcGlja2VyVG9cIj5cbiAgICAgICAgPG1hdC1pY29uIG1hdERhdGVwaWNrZXJUb2dnbGVJY29uPnRvZGF5PC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgPG1hdC1kYXRlcGlja2VyICNkYXRlcGlja2VyVG8gW3N0YXJ0Vmlld109XCJnZXRTdGFydGVkVmlld0RhdGVwaWNrZXIoKVwiPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjbGVhclZhbHVlcygpXCI+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|