ngx-sfc-components 0.0.19 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/esm2020/lib/components/avatar/avatar.component.mjs +14 -20
- package/esm2020/lib/components/avatar/models/avatar-data.model.mjs +1 -1
- package/esm2020/lib/components/avatar/models/avatar-image.model.mjs +3 -2
- package/esm2020/lib/components/avatar/parts/badge/avatar-badge.component.mjs +17 -8
- package/esm2020/lib/components/avatar/parts/badge/avatar-badge.constants.mjs +3 -3
- package/esm2020/lib/components/avatar/parts/badge/avatar-badge.model.mjs +2 -0
- package/esm2020/lib/components/carousel/carousel.component.mjs +2 -2
- package/esm2020/lib/components/index.mjs +3 -2
- package/esm2020/lib/components/menu/dropdown/dropdown-menu.component.mjs +21 -6
- package/esm2020/lib/components/menu/dropdown/parts/item/dropdown-menu-item.component.mjs +2 -2
- package/esm2020/lib/components/menu/navigation/navigation-menu.component.mjs +2 -2
- package/esm2020/lib/components/menu/navigation/parts/item/navigation-menu-item.component.mjs +2 -2
- package/esm2020/lib/components/menu/side/parts/header/side-menu-header.component.mjs +2 -2
- package/esm2020/lib/components/menu/side/parts/item/content/side-menu-item-content.component.mjs +2 -2
- package/esm2020/lib/components/menu/side/parts/title/side-menu-title.component.mjs +2 -2
- package/esm2020/lib/components/no-export-index.mjs +3 -1
- package/esm2020/lib/components/progress/circle/progress-circle.component.mjs +2 -2
- package/esm2020/lib/components/progress/line/progress-line.component.mjs +2 -2
- package/esm2020/lib/components/progress/semi-circle/progress-semi-circle.component.mjs +2 -2
- package/esm2020/lib/components/stars/stars.component.mjs +2 -2
- package/esm2020/lib/components/table/models/table.model.mjs +1 -1
- package/esm2020/lib/components/table/parts/columns/default/default-table-column.component.mjs +3 -3
- package/esm2020/lib/components/table/parts/columns/selectable/selectable-table-column.component.mjs +11 -4
- package/esm2020/lib/components/table/parts/columns/selectable/selectable-table-column.constants.mjs +5 -0
- package/esm2020/lib/components/table/parts/columns/sorting/sorting-column.component.mjs +69 -0
- package/esm2020/lib/components/table/parts/columns/sorting/sorting-column.constants.mjs +6 -0
- package/esm2020/lib/components/table/parts/columns/sorting/sorting-column.model.mjs +2 -0
- package/esm2020/lib/components/table/parts/columns/table-column.model.mjs +1 -1
- package/esm2020/lib/components/table/parts/content/base-default-table-content.component.mjs +16 -18
- package/esm2020/lib/components/table/parts/content/cards/default/default-table-card.component.mjs +3 -3
- package/esm2020/lib/components/table/parts/content/rows/default/default-table-row.component.mjs +4 -7
- package/esm2020/lib/components/table/parts/content/rows/expanded/expanded-table-row.component.mjs +3 -4
- package/esm2020/lib/components/table/parts/content/rows/expanded/expanded-table-row.model.mjs +1 -1
- package/esm2020/lib/components/table/parts/toggle/columns-toggle.component.mjs +15 -10
- package/esm2020/lib/components/table/parts/toggle/columns-toggle.constants.mjs +3 -10
- package/esm2020/lib/components/table/parts/toggle/service/columns-toggle.service.mjs +10 -20
- package/esm2020/lib/components/table/service/select/table-select.service.mjs +14 -1
- package/esm2020/lib/components/table/table.component.mjs +198 -140
- package/esm2020/lib/components/table/table.constants.mjs +5 -6
- package/esm2020/lib/components/tabs/parts/labels/tab-label-icon/tab-label-icon.component.mjs +2 -2
- package/esm2020/lib/components/tabs/parts/labels/tab-label-line/tab-label-line.component.mjs +2 -2
- package/esm2020/lib/components/tabs/tabs.component.mjs +2 -2
- package/esm2020/lib/components/tags/parts/tag/tag.component.mjs +2 -2
- package/esm2020/lib/components/tags/tags.component.mjs +3 -3
- package/esm2020/lib/components/timeline/parts/item/timeline-item.component.mjs +2 -2
- package/esm2020/lib/ngx-sfc-components.module.mjs +5 -5
- package/fesm2015/ngx-sfc-components.mjs +426 -281
- package/fesm2015/ngx-sfc-components.mjs.map +1 -1
- package/fesm2020/ngx-sfc-components.mjs +425 -279
- package/fesm2020/ngx-sfc-components.mjs.map +1 -1
- package/lib/components/avatar/avatar.component.d.ts +8 -7
- package/lib/components/avatar/models/avatar-data.model.d.ts +5 -4
- package/lib/components/avatar/models/avatar-image.model.d.ts +2 -1
- package/lib/components/avatar/parts/badge/avatar-badge.component.d.ts +3 -3
- package/lib/components/avatar/parts/badge/avatar-badge.model.d.ts +14 -0
- package/lib/components/index.d.ts +6 -4
- package/lib/components/menu/dropdown/dropdown-menu.component.d.ts +5 -2
- package/lib/components/no-export-index.d.ts +2 -0
- package/lib/components/table/models/table.model.d.ts +2 -5
- package/lib/components/table/parts/columns/default/default-table-column.component.d.ts +2 -2
- package/lib/components/table/parts/columns/selectable/selectable-table-column.component.d.ts +3 -0
- package/lib/components/table/parts/columns/selectable/selectable-table-column.constants.d.ts +4 -0
- package/lib/components/table/parts/columns/sorting/sorting-column.component.d.ts +21 -0
- package/lib/components/table/parts/columns/sorting/sorting-column.constants.d.ts +4 -0
- package/lib/components/table/parts/columns/sorting/sorting-column.model.d.ts +12 -0
- package/lib/components/table/parts/columns/table-column.model.d.ts +8 -5
- package/lib/components/table/parts/content/base-default-table-content.component.d.ts +10 -9
- package/lib/components/table/parts/content/rows/default/default-table-row.component.d.ts +0 -3
- package/lib/components/table/parts/content/rows/expanded/expanded-table-row.model.d.ts +2 -3
- package/lib/components/table/parts/toggle/columns-toggle.component.d.ts +3 -1
- package/lib/components/table/parts/toggle/columns-toggle.constants.d.ts +2 -8
- package/lib/components/table/parts/toggle/service/columns-toggle.service.d.ts +2 -8
- package/lib/components/table/service/select/table-select.service.d.ts +2 -0
- package/lib/components/table/table.component.d.ts +57 -32
- package/lib/components/table/table.constants.d.ts +8 -9
- package/lib/ngx-sfc-components.module.d.ts +11 -10
- package/package.json +2 -2
- package/esm2020/lib/components/table/models/table-pagination.model.mjs +0 -2
- package/lib/components/table/models/table-pagination.model.d.ts +0 -5
|
@@ -1,64 +1,95 @@
|
|
|
1
|
-
import { Component, ContentChildren, HostBinding, Inject, Input } from '@angular/core';
|
|
2
|
-
import { all, firstOrDefault, getCalcValue,
|
|
3
|
-
import { BehaviorSubject,
|
|
1
|
+
import { Component, ContentChildren, EventEmitter, HostBinding, Inject, Input, Output } from '@angular/core';
|
|
2
|
+
import { all, firstOrDefault, getCalcValue, getCssLikeValue, isDefined, MediaLimits, Position, ResizeService, SortingDirection, TemplateReferenceDirective, WINDOW, UIConstants, LoadContainerType, LoadContainerLoadType, PaginationConstants, generateGuid, any, hasItem, SortingService, UIClass } from 'ngx-sfc-common';
|
|
3
|
+
import { BehaviorSubject, filter, map } from 'rxjs';
|
|
4
4
|
import { TableColumnType } from './parts/columns/table-column-type.enum';
|
|
5
5
|
import { ColumnsToggleService } from './parts/toggle/service/columns-toggle.service';
|
|
6
6
|
import { TableSelectService } from './service/select/table-select.service';
|
|
7
7
|
import { TableDataType } from './enums/table-data-type.enum';
|
|
8
8
|
import { TableConstants } from './table.constants';
|
|
9
9
|
import { TableTemplate } from './enums/table-template.enum';
|
|
10
|
+
import { faTableList, faBorderAll } from '@fortawesome/free-solid-svg-icons';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "
|
|
12
|
+
import * as i1 from "./parts/toggle/service/columns-toggle.service";
|
|
12
13
|
import * as i2 from "./service/select/table-select.service";
|
|
13
|
-
import * as i3 from "
|
|
14
|
+
import * as i3 from "ngx-sfc-common";
|
|
14
15
|
import * as i4 from "@angular/common";
|
|
15
16
|
import * as i5 from "./parts/columns/default/default-table-column.component";
|
|
16
17
|
import * as i6 from "./parts/columns/selectable/selectable-table-column.component";
|
|
17
18
|
import * as i7 from "./parts/toggle/columns-toggle.component";
|
|
18
|
-
import * as i8 from "./parts/
|
|
19
|
-
import * as i9 from "./parts/content/
|
|
19
|
+
import * as i8 from "./parts/columns/sorting/sorting-column.component";
|
|
20
|
+
import * as i9 from "./parts/content/rows/default/default-table-row.component";
|
|
21
|
+
import * as i10 from "./parts/content/cards/default/default-table-card.component";
|
|
20
22
|
export class TableComponent {
|
|
21
|
-
constructor(
|
|
23
|
+
constructor(columnsToggleService, window, selectedService, sortingService, changeDetector, resizeService, iterableDiffers) {
|
|
24
|
+
this.columnsToggleService = columnsToggleService;
|
|
22
25
|
this.window = window;
|
|
23
|
-
this.paginationService = paginationService;
|
|
24
26
|
this.selectedService = selectedService;
|
|
25
27
|
this.sortingService = sortingService;
|
|
26
28
|
this.changeDetector = changeDetector;
|
|
27
29
|
this.resizeService = resizeService;
|
|
28
|
-
this.columnsToggleService = columnsToggleService;
|
|
29
30
|
this.iterableDiffers = iterableDiffers;
|
|
30
31
|
this.TableDataType = TableDataType;
|
|
31
32
|
this.TableColumnType = TableColumnType;
|
|
32
33
|
this.TableTemplate = TableTemplate;
|
|
33
34
|
this.Constants = TableConstants;
|
|
35
|
+
this.LoadContainerType = LoadContainerType;
|
|
34
36
|
this.position = Position.Center;
|
|
35
37
|
this.delimeter = false;
|
|
36
38
|
this.dataType = TableDataType.Rows;
|
|
37
39
|
this.dataToggle = true;
|
|
38
40
|
this.showColumns = true;
|
|
39
|
-
this.
|
|
41
|
+
this.columnsToggle = false;
|
|
42
|
+
this.pagination = PaginationConstants.DEFAULT_PAGINATION;
|
|
40
43
|
this.sequence = false;
|
|
41
44
|
this.expanded = false;
|
|
42
|
-
this.
|
|
43
|
-
this.
|
|
45
|
+
this.notFoundLabel = this.Constants.NOT_FOUND_LABEL_DEFAULT;
|
|
46
|
+
this.showTotal = false;
|
|
47
|
+
this.totalLabel = this.Constants.TOTAL_LABEL_DEFAULT;
|
|
48
|
+
this.paginationCount = PaginationConstants.DEFAULT_COUNT;
|
|
49
|
+
this.paginationLimits = false;
|
|
50
|
+
this.showLoading = true;
|
|
44
51
|
// End Template references
|
|
45
52
|
//Data
|
|
46
53
|
this.data = [];
|
|
47
54
|
// End Data
|
|
48
55
|
// Columns
|
|
49
56
|
this.columns = [];
|
|
57
|
+
this.resize = true;
|
|
50
58
|
this.columnsSubject = new BehaviorSubject(this.columns);
|
|
59
|
+
this.tableColumns = [];
|
|
51
60
|
// End Columns
|
|
52
|
-
|
|
61
|
+
// Load container
|
|
62
|
+
this.loadType = LoadContainerLoadType.Pagination;
|
|
63
|
+
this.loadContainerId = generateGuid();
|
|
64
|
+
this.items = [];
|
|
65
|
+
this.total = 0;
|
|
66
|
+
this.page = PaginationConstants.DEFAULT_PAGE;
|
|
67
|
+
this.loading = false;
|
|
68
|
+
// End Load container
|
|
69
|
+
// Selection
|
|
70
|
+
this.selectable = false;
|
|
71
|
+
this.selectOnClick = false;
|
|
72
|
+
this.selected = new EventEmitter();
|
|
73
|
+
this.allSelected = false;
|
|
74
|
+
// End Selection
|
|
75
|
+
// Data toggle
|
|
76
|
+
this.dataListLabel = this.Constants.DATA_LIST_LABEL;
|
|
77
|
+
this.dataCardsLabel = this.Constants.DATA_CARDS_LABEL;
|
|
53
78
|
this.dataDiffer = iterableDiffers.find([]).create(undefined);
|
|
54
79
|
this.columnsDiffer = iterableDiffers.find([]).create(undefined);
|
|
55
80
|
}
|
|
56
|
-
|
|
57
|
-
this.
|
|
58
|
-
|
|
81
|
+
get allRowsSelected() {
|
|
82
|
+
return (this.allSelected || this.total == this.selectedService.selectedItems.length)
|
|
83
|
+
&& !any(this.selectedService.unselectedItems)
|
|
84
|
+
&& any(this.items);
|
|
59
85
|
}
|
|
60
|
-
|
|
61
|
-
|
|
86
|
+
;
|
|
87
|
+
get initialSorting() {
|
|
88
|
+
const activeSortingColumn = firstOrDefault(this.columns, column => column.sorting?.active);
|
|
89
|
+
if (activeSortingColumn)
|
|
90
|
+
return { id: activeSortingColumn.field, direction: activeSortingColumn.sorting?.direction };
|
|
91
|
+
const enabledSortingColumn = firstOrDefault(this.columns, column => column.sorting?.enabled);
|
|
92
|
+
return enabledSortingColumn ? { id: enabledSortingColumn.field, direction: enabledSortingColumn.sorting?.direction } : null;
|
|
62
93
|
}
|
|
63
94
|
ngOnInit() {
|
|
64
95
|
// if data is static, make it observable
|
|
@@ -66,67 +97,24 @@ export class TableComponent {
|
|
|
66
97
|
this.dataSubject = new BehaviorSubject(this.data);
|
|
67
98
|
this.data$ = this.dataSubject.asObservable();
|
|
68
99
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
// set up
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
this.
|
|
87
|
-
columns.forEach(column => {
|
|
88
|
-
if (column.sorting?.enabled) {
|
|
89
|
-
column.sorting.active = column.field == event?.id || false;
|
|
90
|
-
if (!column.sorting.active)
|
|
91
|
-
column.sorting.direction = SortingDirection.Ascending;
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
return columns;
|
|
95
|
-
}));
|
|
96
|
-
// set up main data observable
|
|
97
|
-
this.dataValue$ = combineLatest([
|
|
98
|
-
dataIndexed$,
|
|
99
|
-
this.paginationService.pagination$,
|
|
100
|
-
sorting$,
|
|
101
|
-
selection$
|
|
102
|
-
]).pipe(map(([data, paginationEvent, sortingEvent, selectionEvent]) => {
|
|
103
|
-
// handle selection
|
|
104
|
-
this.handleSelectionEvent(data, selectionEvent);
|
|
105
|
-
// handle pagination and sorting
|
|
106
|
-
let sortedData = this.sortData(data, sortingEvent), paginatedData = this.paginateData(sortedData, paginationEvent);
|
|
107
|
-
// handle data sequence
|
|
108
|
-
if (this.sequence) {
|
|
109
|
-
this.updateRowSequenceValues(paginationEvent.page, paginatedData);
|
|
110
|
-
}
|
|
111
|
-
return paginatedData;
|
|
112
|
-
}));
|
|
113
|
-
}
|
|
114
|
-
ngAfterViewInit() {
|
|
115
|
-
// combine all observable to view model
|
|
116
|
-
this.vm$ = combineLatest([
|
|
117
|
-
this.columnsSorting$,
|
|
118
|
-
this.dataValue$,
|
|
119
|
-
this.columnsToggleService.showColumns$,
|
|
120
|
-
this.columnWidth$
|
|
121
|
-
]).pipe(map(([columns, data, showColumns, columnWidth]) => {
|
|
122
|
-
return {
|
|
123
|
-
columns,
|
|
124
|
-
data,
|
|
125
|
-
columnWidth,
|
|
126
|
-
showColumns: this.showColumns && showColumns,
|
|
127
|
-
columnStyle: { width: getCalcValue(columnWidth), justifyContent: this.position }
|
|
128
|
-
};
|
|
129
|
-
}));
|
|
100
|
+
if (this.selectable)
|
|
101
|
+
this.selectionSubscribe();
|
|
102
|
+
// set up columns (conditionally add sequence, selectable and expand columns)
|
|
103
|
+
this.columnsSubscribe();
|
|
104
|
+
if (this.resize)
|
|
105
|
+
this.resizeSubscribe();
|
|
106
|
+
this.sortingSubscribe();
|
|
107
|
+
this.loadModel = {
|
|
108
|
+
predicate$: this.predicate$,
|
|
109
|
+
data$: this.data$,
|
|
110
|
+
loader: this.loader,
|
|
111
|
+
filter: this.filter,
|
|
112
|
+
loadType: this.loadType,
|
|
113
|
+
pagination: this.pagination,
|
|
114
|
+
sorting: this.initialSorting
|
|
115
|
+
};
|
|
116
|
+
this.toggleSwitcherLeftModel = { label: this.dataListLabel, icon: faTableList };
|
|
117
|
+
this.toggleSwitcherRightModel = { label: this.dataCardsLabel, icon: faBorderAll };
|
|
130
118
|
}
|
|
131
119
|
ngAfterViewChecked() {
|
|
132
120
|
this.changeDetector.detectChanges();
|
|
@@ -142,73 +130,106 @@ export class TableComponent {
|
|
|
142
130
|
ngAfterContentChecked() {
|
|
143
131
|
this.changeDetector.detectChanges();
|
|
144
132
|
}
|
|
145
|
-
|
|
146
|
-
this.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
133
|
+
ngOnDestroy() {
|
|
134
|
+
this._allSelectionSubscription?.unsubscribe();
|
|
135
|
+
this._columnsResizeSubscription?.unsubscribe();
|
|
136
|
+
this._columnsSubscription?.unsubscribe();
|
|
137
|
+
this._sortingSubscription?.unsubscribe();
|
|
150
138
|
}
|
|
151
139
|
onDataTypeToggle() {
|
|
152
|
-
this.dataType = this.dataType == TableDataType.Rows
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
140
|
+
this.dataType = this.dataType == TableDataType.Rows
|
|
141
|
+
? TableDataType.Cards
|
|
142
|
+
: TableDataType.Rows;
|
|
143
|
+
}
|
|
144
|
+
handleSuccess(result) {
|
|
145
|
+
this.page = result.page;
|
|
146
|
+
this.total = result.total;
|
|
147
|
+
const items = result.items.map((item, index) => {
|
|
148
|
+
const sequence = (index + 1) + ((this.page * this.pagination.size) - this.pagination.size);
|
|
149
|
+
return {
|
|
150
|
+
index: index,
|
|
151
|
+
sequence: sequence,
|
|
152
|
+
selected: this.getItemSelected(sequence),
|
|
153
|
+
data: item
|
|
154
|
+
};
|
|
155
|
+
});
|
|
156
|
+
if (result.reset)
|
|
157
|
+
this.items = items;
|
|
158
|
+
else
|
|
159
|
+
this.items = this.items.concat(items);
|
|
160
|
+
}
|
|
161
|
+
selectionSubscribe() {
|
|
162
|
+
this._allSelectionSubscription = this.selectedService.select$
|
|
163
|
+
.subscribe((event) => {
|
|
164
|
+
if (event.index == null) {
|
|
165
|
+
this.allSelected = event.selected;
|
|
166
|
+
this.items.forEach(item => item.selected = event.selected);
|
|
179
167
|
}
|
|
180
|
-
|
|
181
|
-
this.allRowsSelected = all(data, item => Boolean(item.dataModel.selected));
|
|
182
|
-
}
|
|
183
|
-
paginateData(data, paginationEvent) {
|
|
184
|
-
let pagedData = this.pagination.enabled
|
|
185
|
-
? data.slice((paginationEvent.page - 1) * this.pagination.size, paginationEvent.page * this.pagination.size)
|
|
186
|
-
: data;
|
|
187
|
-
return pagedData;
|
|
188
|
-
}
|
|
189
|
-
sortData(data, sortingEvent) {
|
|
190
|
-
const sortedData = sortingEvent && hasItemBy(this.columns, col => col.field == sortingEvent.id)
|
|
191
|
-
? sortByPath(data, `dataModel.data.${sortingEvent.id}`, sortingEvent.direction)
|
|
192
|
-
: data;
|
|
193
|
-
return sortedData;
|
|
194
|
-
}
|
|
195
|
-
updateRowSequenceValues(page, data) {
|
|
196
|
-
let from = (page - 1) * this.pagination.size;
|
|
197
|
-
data.forEach(item => {
|
|
198
|
-
item.sequence = from + 1;
|
|
199
|
-
from++;
|
|
168
|
+
this.selected.emit(event);
|
|
200
169
|
});
|
|
201
170
|
}
|
|
171
|
+
resizeSubscribe() {
|
|
172
|
+
this._columnsResizeSubscription = this.resizeService.onResize$
|
|
173
|
+
.subscribe(() => this.tableColumns.forEach(column => column.calculatedWidth = this.calculateColumnWidth(column, this.tableColumns.length)));
|
|
174
|
+
}
|
|
175
|
+
columnsSubscribe() {
|
|
176
|
+
this._columnsSubscription = this.columnsSubject.asObservable().pipe(filter(columns => any(columns)), map((columns) => {
|
|
177
|
+
let tableColumns = JSON.parse(JSON.stringify(columns));
|
|
178
|
+
if (this.sequence)
|
|
179
|
+
tableColumns.unshift(TableConstants.SEQUENCE_COLUMN);
|
|
180
|
+
if (this.selectable)
|
|
181
|
+
tableColumns.unshift(TableConstants.SELECTABLE_COLUMN);
|
|
182
|
+
if (this.expanded)
|
|
183
|
+
tableColumns.push(TableConstants.EXPANDED_COLUMN);
|
|
184
|
+
// calculated width not work without deep copy
|
|
185
|
+
return JSON.parse(JSON.stringify(tableColumns));
|
|
186
|
+
})).subscribe((columns) => {
|
|
187
|
+
columns.forEach((column) => {
|
|
188
|
+
column.calculatedWidth = this.calculateColumnWidth(column, columns.length);
|
|
189
|
+
const sortingColumn = this.initialSorting;
|
|
190
|
+
if (this.initialSorting) {
|
|
191
|
+
this.setColumnSorting(column, sortingColumn?.id);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
this.tableColumns = columns;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
sortingSubscribe() {
|
|
198
|
+
this._sortingSubscription = this.sortingService.sorting$.subscribe((sortingEvent) => this.tableColumns.forEach((column) => this.setColumnSorting(column, sortingEvent?.id)));
|
|
199
|
+
}
|
|
200
|
+
calculateColumnWidth(column, columnsLength) {
|
|
201
|
+
// defined width for all columns
|
|
202
|
+
if (all(this.columns, column => isDefined(column.width)))
|
|
203
|
+
return getCssLikeValue(column.width, UIConstants.CSS_PERCENTAGE);
|
|
204
|
+
let width = columnsLength;
|
|
205
|
+
if (this.window.innerWidth <= MediaLimits.MobileLarge)
|
|
206
|
+
width = 1;
|
|
207
|
+
else if (this.window.innerWidth <= MediaLimits.Tablet)
|
|
208
|
+
width = Math.ceil(columnsLength / 2);
|
|
209
|
+
return getCalcValue(width);
|
|
210
|
+
}
|
|
211
|
+
setColumnSorting(column, sortingId) {
|
|
212
|
+
if (column.sorting?.enabled) {
|
|
213
|
+
column.sorting.active = column.field == sortingId;
|
|
214
|
+
if (!column.sorting.active)
|
|
215
|
+
column.sorting.direction = SortingDirection.Ascending;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
getItemSelected(sequence) {
|
|
219
|
+
return this.allSelected
|
|
220
|
+
? !hasItem(this.selectedService.unselectedItems, sequence)
|
|
221
|
+
: hasItem(this.selectedService.selectedItems, sequence);
|
|
222
|
+
}
|
|
202
223
|
}
|
|
203
|
-
TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TableComponent, deps: [{ token:
|
|
204
|
-
TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TableComponent, selector: "sfc-table", inputs: { position: "position", delimeter: "delimeter", dataType: "dataType", dataToggle: "dataToggle", showColumns: "showColumns", pagination: "pagination", sequence: "sequence", expanded: "expanded", selectable: "selectable", selectOnClick: "selectOnClick", columnContent: "columnContent", rowContent: "rowContent", cardContent: "cardContent", data: "data", data$: "data$", columns: "columns" }, host: { properties: { "class": "this.dataType" } }, providers: [PaginationService, SortingService, TableSelectService, ColumnsToggleService, ResizeService], queries: [{ propertyName: "templates", predicate: TemplateReferenceDirective, read: TemplateReferenceDirective }], ngImport: i0, template: "<div class=\"container\" *ngIf=\"vm$ | async as vm\">\r\n <div class=\"columns-container\">\r\n <div class=\"columns-actions\">\r\n <sfc-columns-toggle *ngIf=\"showColumns\"></sfc-columns-toggle>\r\n <sfc-toggle-switcher *ngIf=\"dataToggle\" [active]=\"dataType === TableDataType.Cards\"\r\n [leftModel]=\"Constants.TOGGLE_SWITCHER_LEFT_MODEL\" [rightModel]=\"Constants.TOGGLE_SWITCHER_RIGHT_MODEL\"\r\n (click)=\"onDataTypeToggle()\">\r\n </sfc-toggle-switcher>\r\n </div>\r\n\r\n <div *ngIf=\"vm.showColumns\" class=\"columns\">\r\n <div class=\"column\" [ngStyle]=\"vm.columnStyle\" *ngFor=\"let column of vm.columns\">\r\n <ng-container [ngSwitch]=\"column.type\">\r\n <sfc-selectable-table-column *ngSwitchCase=\"TableColumnType.Selectable\"\r\n [selected]=\"allRowsSelected\">\r\n </sfc-selectable-table-column>\r\n\r\n <sfc-sorting *ngSwitchDefault [model]=\"column.sorting\" [id]=\"column.field\">\r\n\r\n <sfc-template-content [referenceContent]=\"columnContent\" [templatesContent]=\"templates\"\r\n [templateType]=\"TableTemplate.Column\" [defaultContent]=\"defaultColumn\"\r\n [contextData]=\"column\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultColumn>\r\n <sfc-default-table-column [model]=\"column\"></sfc-default-table-column>\r\n </ng-template>\r\n\r\n </sfc-sorting>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <sfc-delimeter *ngIf=\"delimeter\"></sfc-delimeter>\r\n\r\n <div class=\"rows-container\">\r\n <div class=\"row\" *ngFor=\"let item of vm.data\">\r\n\r\n <ng-container [ngSwitch]=\"dataType\">\r\n <sfc-template-content *ngSwitchCase=\"TableDataType.Rows\" [referenceContent]=\"rowContent\"\r\n [templatesContent]=\"templates\" [templateType]=\"TableTemplate.Row\" [defaultContent]=\"defaultRow\"\r\n [contextData]=\"{model: item, columns: vm.columns, columnWidth: vm.columnWidth, position: position}\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultRow>\r\n <sfc-default-table-row [columns]=\"vm.columns\" [model]=\"item\" [position]=\"position\"\r\n [columnWidth]=\"vm.columnWidth\" [selectOnClick]=\"selectOnClick\" (selected)=\"selectRow($event)\">\r\n </sfc-default-table-row>\r\n </ng-template>\r\n\r\n <sfc-template-content *ngSwitchCase=\"TableDataType.Cards\" [referenceContent]=\"cardContent\"\r\n [templatesContent]=\"templates\" [templateType]=\"TableTemplate.Card\" [defaultContent]=\"defaultCard\"\r\n [contextData]=\"{model: item, columns: vm.columns}\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultCard>\r\n <sfc-default-table-card [columns]=\"vm.columns\" [model]=\"item\" [selectOnClick]=\"selectOnClick\"\r\n (selected)=\"selectRow($event)\">\r\n </sfc-default-table-card>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"pagination-container\">\r\n <sfc-pagination *ngIf=\"pagination.enabled\" [limits]=\"false\" [full]=\"false\" [data$]=\"data$\"></sfc-pagination>\r\n </div>\r\n</div>", styles: [":host .container{display:block;margin:2em auto;width:90%}:host .container .columns-container{display:flex;flex-flow:row wrap;transition:.5s;justify-content:space-between}:host .container .columns-container .columns-actions{display:flex;align-items:center;width:100%}:host .container .columns-container .columns-actions sfc-toggle-switcher{margin-left:auto}:host .container .columns-container .columns{text-align:center;padding:.5em;width:100%;display:flex;flex-flow:row wrap}:host .container .columns-container .columns .column{text-align:center;padding:.5em;display:flex;align-items:center;justify-content:center;box-sizing:border-box}:host .container .rows-container{display:flex;flex-wrap:wrap;justify-content:center;transition:.5s;gap:1em;margin-block:1em 2em}:host .container .rows-container .row{display:contents}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i1.DelimeterComponent, selector: "sfc-delimeter", inputs: ["label", "direction"] }, { kind: "component", type: i1.TemplateContentComponent, selector: "sfc-template-content", inputs: ["contextData", "referenceContent", "templateType", "templatesContent", "defaultContent"] }, { kind: "component", type: i1.ToggleSwitcherComponent, selector: "sfc-toggle-switcher", inputs: ["active", "disabled", "leftModel", "rightModel"] }, { kind: "component", type: i1.PaginationComponent, selector: "sfc-pagination", inputs: ["count", "full", "limits", "data$"] }, { kind: "component", type: i1.SortingComponent, selector: "sfc-sorting", inputs: ["id", "model"] }, { kind: "component", type: i5.DefaultTableColumnComponent, selector: "sfc-default-table-column", inputs: ["model"] }, { kind: "component", type: i6.SelectableTableColumnComponent, selector: "sfc-selectable-table-column", inputs: ["selected"] }, { kind: "component", type: i7.ColumnsToggleComponent, selector: "sfc-columns-toggle" }, { kind: "component", type: i8.DefaultTableRowComponent, selector: "sfc-default-table-row" }, { kind: "component", type: i9.DefaultTableCardComponent, selector: "sfc-default-table-card" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
|
|
224
|
+
TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TableComponent, deps: [{ token: i1.ColumnsToggleService }, { token: WINDOW }, { token: i2.TableSelectService }, { token: i3.SortingService }, { token: i0.ChangeDetectorRef }, { token: i3.ResizeService }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
|
|
225
|
+
TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TableComponent, selector: "sfc-table", inputs: { position: "position", delimeter: "delimeter", dataType: "dataType", dataToggle: "dataToggle", showColumns: "showColumns", columnsToggle: "columnsToggle", pagination: "pagination", sequence: "sequence", expanded: "expanded", notFoundLabel: "notFoundLabel", showTotal: "showTotal", totalLabel: "totalLabel", paginationCount: "paginationCount", paginationLimits: "paginationLimits", showLoading: "showLoading", columnContent: "columnContent", rowContent: "rowContent", cardContent: "cardContent", data: "data", data$: "data$", columns: "columns", showColumnsLabel: "showColumnsLabel", hideColumnsLabel: "hideColumnsLabel", resize: "resize", loadType: "loadType", loader: "loader", filter: "filter", predicate$: "predicate$", selectable: "selectable", selectOnClick: "selectOnClick", dataListLabel: "dataListLabel", dataCardsLabel: "dataCardsLabel" }, outputs: { selected: "selected" }, host: { properties: { "class": "this.dataType", "class.loading": "this.loading" } }, providers: [SortingService, TableSelectService, ColumnsToggleService, ResizeService], queries: [{ propertyName: "templates", predicate: TemplateReferenceDirective, read: TemplateReferenceDirective }], ngImport: i0, template: "<div class=\"container\">\r\n <div *ngIf=\"showLoading\" class=\"table-loader\"></div>\r\n <div class=\"columns-container\">\r\n <div class=\"columns-actions\">\r\n <div class=\"left\">\r\n <sfc-columns-toggle *ngIf=\"columnsToggle\" [showLabel]=\"showColumnsLabel\" [hideLabel]=\"hideColumnsLabel\">\r\n </sfc-columns-toggle>\r\n </div>\r\n\r\n <div class=\"right\">\r\n <p *ngIf=\"showTotal\">{{totalLabel}}: <span>{{total}}</span></p>\r\n <sfc-toggle-switcher *ngIf=\"dataToggle\" [active]=\"dataType === TableDataType.Cards\"\r\n [leftModel]=\"toggleSwitcherLeftModel\" [rightModel]=\"toggleSwitcherRightModel\"\r\n (click)=\"onDataTypeToggle()\">\r\n </sfc-toggle-switcher>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showColumns && columnsToggleService.show\" class=\"columns\">\r\n <div class=\"column\" [style.justifyContent]=\"position\" [style.minWidth]=\"column.calculatedWidth\"\r\n *ngFor=\"let column of tableColumns\">\r\n <ng-container [ngSwitch]=\"column.type\">\r\n <sfc-selectable-table-column *ngSwitchCase=\"TableColumnType.Selectable\"\r\n [selected]=\"allRowsSelected\">\r\n </sfc-selectable-table-column>\r\n\r\n <sfc-sorting-column *ngSwitchDefault [model]=\"column.sorting!\" [id]=\"column.field\">\r\n\r\n <sfc-template-content [referenceContent]=\"columnContent\" [templatesContent]=\"templates\"\r\n [templateType]=\"TableTemplate.Column\" [defaultContent]=\"defaultColumn\"\r\n [contextData]=\"column\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultColumn>\r\n <sfc-default-table-column [model]=\"column\"></sfc-default-table-column>\r\n </ng-template>\r\n\r\n </sfc-sorting-column>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <sfc-delimeter *ngIf=\"delimeter\" class=\"table-delimeter\"></sfc-delimeter>\r\n\r\n <div class=\"rows-container\">\r\n <sfc-load-container [id]=\"loadContainerId\" [type]=\"LoadContainerType.Table\" [model]=\"loadModel\"\r\n [paginationCount]=\"paginationCount\" [paginationLimits]=\"paginationLimits\" [showLoading]=\"showLoading\"\r\n (handleSuccess)=\"handleSuccess($event)\" (handleLoading)=\"loading = $event\" [emptyLabel]=\"notFoundLabel\">\r\n <div class=\"row\" *ngFor=\"let item of items; index as i;\">\r\n <ng-container [ngSwitch]=\"dataType\">\r\n <sfc-template-content *ngSwitchCase=\"TableDataType.Rows\" [referenceContent]=\"rowContent\"\r\n [templatesContent]=\"templates\" [templateType]=\"TableTemplate.Row\" [defaultContent]=\"defaultRow\"\r\n [contextData]=\"{model: item, columns: tableColumns, position: position}\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultRow>\r\n <sfc-default-table-row [columns]=\"tableColumns\" [model]=\"item\" [position]=\"position\"\r\n [selectOnClick]=\"selectOnClick\">\r\n </sfc-default-table-row>\r\n </ng-template>\r\n\r\n <sfc-template-content *ngSwitchCase=\"TableDataType.Cards\" [referenceContent]=\"cardContent\"\r\n [templatesContent]=\"templates\" [templateType]=\"TableTemplate.Card\"\r\n [defaultContent]=\"defaultCard\" [contextData]=\"{model: item, columns: tableColumns}\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultCard>\r\n <sfc-default-table-card [columns]=\"tableColumns\" [model]=\"item\" [selectOnClick]=\"selectOnClick\">\r\n </sfc-default-table-card>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n </sfc-load-container>\r\n </div>\r\n</div>", styles: [":host .container{display:block;margin:2em auto;width:90%;position:relative}:host .container .columns-container{display:flex;flex-flow:row wrap;transition:.5s;justify-content:space-between}:host .container .columns-container .columns-actions{display:flex;align-items:center;width:100%}:host .container .columns-container .columns-actions .right{display:inline-flex;align-items:center;flex-wrap:wrap;justify-content:center;margin-left:auto}:host .container .columns-container .columns-actions .right>p{transition:color .5s ease;margin:0;font-size:.8em;padding-right:1em;font-weight:700;-webkit-user-select:none;user-select:none;text-align:center}:host .container .columns-container .columns-actions .right>p,:host-context(.sfc-default-theme) :host .container .columns-container .columns-actions .right>p{color:#545e61}:host-context(.sfc-dark-theme) :host .container .columns-container .columns-actions .right>p{color:#fff}:host .container .columns-container .columns-actions .right>p span{font-size:1.1em;color:#ffce54}:host .container .columns-container .columns{text-align:center;padding:.5em;width:100%;display:flex;flex-flow:row wrap}:host .container .columns-container .columns .column{text-align:center;padding:.5em;display:flex;align-items:center;justify-content:center;box-sizing:border-box}:host .container .rows-container{display:flex;flex-wrap:wrap;justify-content:center;transition:.5s;gap:1em;margin-block:1em 2em}:host .container .rows-container sfc-load-container ::ng-deep>.content{background:transparent}:host .container .rows-container sfc-load-container.loading{cursor:initial;z-index:9999}:host .container .rows-container sfc-load-container.loading .preloader{transition:background .5s ease}:host .container .rows-container sfc-load-container.loading .preloader,:host-context(.sfc-default-theme) :host .container .rows-container sfc-load-container.loading .preloader{background:#fff}:host-context(.sfc-dark-theme) :host .container .rows-container sfc-load-container.loading .preloader{background:transparent}:host .container .rows-container .row{display:contents}:host.loading .container .table-loader{position:relative;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;z-index:9998;position:absolute;transition:background-color .5s ease;opacity:.7}:host.loading .container .table-loader,:host-context(.sfc-default-theme) :host.loading .container .table-loader{background-color:#fff}:host-context(.sfc-dark-theme) :host.loading .container .table-loader{background-color:transparent}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.DelimeterComponent, selector: "sfc-delimeter", inputs: ["label", "direction"] }, { kind: "component", type: i3.TemplateContentComponent, selector: "sfc-template-content", inputs: ["contextData", "referenceContent", "templateType", "templatesContent", "defaultContent"] }, { kind: "component", type: i3.ToggleSwitcherComponent, selector: "sfc-toggle-switcher", inputs: ["active", "disabled", "leftModel", "rightModel"] }, { kind: "component", type: i3.LoadContainerComponent, selector: "sfc-load-container", inputs: ["id", "type", "open", "loadMore", "loadMoreLabel", "showEmpty", "emptyLabel", "model", "scrollTarget", "paginationCount", "paginationLimits", "showLoading"], outputs: ["handleError", "handleSuccess", "handleLoading"] }, { kind: "component", type: i5.DefaultTableColumnComponent, selector: "sfc-default-table-column", inputs: ["model"] }, { kind: "component", type: i6.SelectableTableColumnComponent, selector: "sfc-selectable-table-column", inputs: ["selected"] }, { kind: "component", type: i7.ColumnsToggleComponent, selector: "sfc-columns-toggle", inputs: ["showLabel", "hideLabel"] }, { kind: "component", type: i8.SortingColumnComponent, selector: "sfc-sorting-column", inputs: ["id", "model"] }, { kind: "component", type: i9.DefaultTableRowComponent, selector: "sfc-default-table-row" }, { kind: "component", type: i10.DefaultTableCardComponent, selector: "sfc-default-table-card" }] });
|
|
205
226
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TableComponent, decorators: [{
|
|
206
227
|
type: Component,
|
|
207
|
-
args: [{ selector: 'sfc-table', providers: [
|
|
208
|
-
}], ctorParameters: function () { return [{ type: Window, decorators: [{
|
|
228
|
+
args: [{ selector: 'sfc-table', providers: [SortingService, TableSelectService, ColumnsToggleService, ResizeService], template: "<div class=\"container\">\r\n <div *ngIf=\"showLoading\" class=\"table-loader\"></div>\r\n <div class=\"columns-container\">\r\n <div class=\"columns-actions\">\r\n <div class=\"left\">\r\n <sfc-columns-toggle *ngIf=\"columnsToggle\" [showLabel]=\"showColumnsLabel\" [hideLabel]=\"hideColumnsLabel\">\r\n </sfc-columns-toggle>\r\n </div>\r\n\r\n <div class=\"right\">\r\n <p *ngIf=\"showTotal\">{{totalLabel}}: <span>{{total}}</span></p>\r\n <sfc-toggle-switcher *ngIf=\"dataToggle\" [active]=\"dataType === TableDataType.Cards\"\r\n [leftModel]=\"toggleSwitcherLeftModel\" [rightModel]=\"toggleSwitcherRightModel\"\r\n (click)=\"onDataTypeToggle()\">\r\n </sfc-toggle-switcher>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showColumns && columnsToggleService.show\" class=\"columns\">\r\n <div class=\"column\" [style.justifyContent]=\"position\" [style.minWidth]=\"column.calculatedWidth\"\r\n *ngFor=\"let column of tableColumns\">\r\n <ng-container [ngSwitch]=\"column.type\">\r\n <sfc-selectable-table-column *ngSwitchCase=\"TableColumnType.Selectable\"\r\n [selected]=\"allRowsSelected\">\r\n </sfc-selectable-table-column>\r\n\r\n <sfc-sorting-column *ngSwitchDefault [model]=\"column.sorting!\" [id]=\"column.field\">\r\n\r\n <sfc-template-content [referenceContent]=\"columnContent\" [templatesContent]=\"templates\"\r\n [templateType]=\"TableTemplate.Column\" [defaultContent]=\"defaultColumn\"\r\n [contextData]=\"column\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultColumn>\r\n <sfc-default-table-column [model]=\"column\"></sfc-default-table-column>\r\n </ng-template>\r\n\r\n </sfc-sorting-column>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <sfc-delimeter *ngIf=\"delimeter\" class=\"table-delimeter\"></sfc-delimeter>\r\n\r\n <div class=\"rows-container\">\r\n <sfc-load-container [id]=\"loadContainerId\" [type]=\"LoadContainerType.Table\" [model]=\"loadModel\"\r\n [paginationCount]=\"paginationCount\" [paginationLimits]=\"paginationLimits\" [showLoading]=\"showLoading\"\r\n (handleSuccess)=\"handleSuccess($event)\" (handleLoading)=\"loading = $event\" [emptyLabel]=\"notFoundLabel\">\r\n <div class=\"row\" *ngFor=\"let item of items; index as i;\">\r\n <ng-container [ngSwitch]=\"dataType\">\r\n <sfc-template-content *ngSwitchCase=\"TableDataType.Rows\" [referenceContent]=\"rowContent\"\r\n [templatesContent]=\"templates\" [templateType]=\"TableTemplate.Row\" [defaultContent]=\"defaultRow\"\r\n [contextData]=\"{model: item, columns: tableColumns, position: position}\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultRow>\r\n <sfc-default-table-row [columns]=\"tableColumns\" [model]=\"item\" [position]=\"position\"\r\n [selectOnClick]=\"selectOnClick\">\r\n </sfc-default-table-row>\r\n </ng-template>\r\n\r\n <sfc-template-content *ngSwitchCase=\"TableDataType.Cards\" [referenceContent]=\"cardContent\"\r\n [templatesContent]=\"templates\" [templateType]=\"TableTemplate.Card\"\r\n [defaultContent]=\"defaultCard\" [contextData]=\"{model: item, columns: tableColumns}\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultCard>\r\n <sfc-default-table-card [columns]=\"tableColumns\" [model]=\"item\" [selectOnClick]=\"selectOnClick\">\r\n </sfc-default-table-card>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n </sfc-load-container>\r\n </div>\r\n</div>", styles: [":host .container{display:block;margin:2em auto;width:90%;position:relative}:host .container .columns-container{display:flex;flex-flow:row wrap;transition:.5s;justify-content:space-between}:host .container .columns-container .columns-actions{display:flex;align-items:center;width:100%}:host .container .columns-container .columns-actions .right{display:inline-flex;align-items:center;flex-wrap:wrap;justify-content:center;margin-left:auto}:host .container .columns-container .columns-actions .right>p{transition:color .5s ease;margin:0;font-size:.8em;padding-right:1em;font-weight:700;-webkit-user-select:none;user-select:none;text-align:center}:host .container .columns-container .columns-actions .right>p,:host-context(.sfc-default-theme) :host .container .columns-container .columns-actions .right>p{color:#545e61}:host-context(.sfc-dark-theme) :host .container .columns-container .columns-actions .right>p{color:#fff}:host .container .columns-container .columns-actions .right>p span{font-size:1.1em;color:#ffce54}:host .container .columns-container .columns{text-align:center;padding:.5em;width:100%;display:flex;flex-flow:row wrap}:host .container .columns-container .columns .column{text-align:center;padding:.5em;display:flex;align-items:center;justify-content:center;box-sizing:border-box}:host .container .rows-container{display:flex;flex-wrap:wrap;justify-content:center;transition:.5s;gap:1em;margin-block:1em 2em}:host .container .rows-container sfc-load-container ::ng-deep>.content{background:transparent}:host .container .rows-container sfc-load-container.loading{cursor:initial;z-index:9999}:host .container .rows-container sfc-load-container.loading .preloader{transition:background .5s ease}:host .container .rows-container sfc-load-container.loading .preloader,:host-context(.sfc-default-theme) :host .container .rows-container sfc-load-container.loading .preloader{background:#fff}:host-context(.sfc-dark-theme) :host .container .rows-container sfc-load-container.loading .preloader{background:transparent}:host .container .rows-container .row{display:contents}:host.loading .container .table-loader{position:relative;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;z-index:9998;position:absolute;transition:background-color .5s ease;opacity:.7}:host.loading .container .table-loader,:host-context(.sfc-default-theme) :host.loading .container .table-loader{background-color:#fff}:host-context(.sfc-dark-theme) :host.loading .container .table-loader{background-color:transparent}\n"] }]
|
|
229
|
+
}], ctorParameters: function () { return [{ type: i1.ColumnsToggleService }, { type: Window, decorators: [{
|
|
209
230
|
type: Inject,
|
|
210
231
|
args: [WINDOW]
|
|
211
|
-
}] }, { type:
|
|
232
|
+
}] }, { type: i2.TableSelectService }, { type: i3.SortingService }, { type: i0.ChangeDetectorRef }, { type: i3.ResizeService }, { type: i0.IterableDiffers }]; }, propDecorators: { position: [{
|
|
212
233
|
type: Input
|
|
213
234
|
}], delimeter: [{
|
|
214
235
|
type: Input
|
|
@@ -221,15 +242,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
221
242
|
type: Input
|
|
222
243
|
}], showColumns: [{
|
|
223
244
|
type: Input
|
|
245
|
+
}], columnsToggle: [{
|
|
246
|
+
type: Input
|
|
224
247
|
}], pagination: [{
|
|
225
248
|
type: Input
|
|
226
249
|
}], sequence: [{
|
|
227
250
|
type: Input
|
|
228
251
|
}], expanded: [{
|
|
229
252
|
type: Input
|
|
230
|
-
}],
|
|
253
|
+
}], notFoundLabel: [{
|
|
231
254
|
type: Input
|
|
232
|
-
}],
|
|
255
|
+
}], showTotal: [{
|
|
256
|
+
type: Input
|
|
257
|
+
}], totalLabel: [{
|
|
258
|
+
type: Input
|
|
259
|
+
}], paginationCount: [{
|
|
260
|
+
type: Input
|
|
261
|
+
}], paginationLimits: [{
|
|
262
|
+
type: Input
|
|
263
|
+
}], showLoading: [{
|
|
233
264
|
type: Input
|
|
234
265
|
}], columnContent: [{
|
|
235
266
|
type: Input
|
|
@@ -243,8 +274,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
243
274
|
type: Input
|
|
244
275
|
}], columns: [{
|
|
245
276
|
type: Input
|
|
277
|
+
}], showColumnsLabel: [{
|
|
278
|
+
type: Input
|
|
279
|
+
}], hideColumnsLabel: [{
|
|
280
|
+
type: Input
|
|
281
|
+
}], resize: [{
|
|
282
|
+
type: Input
|
|
283
|
+
}], loadType: [{
|
|
284
|
+
type: Input
|
|
285
|
+
}], loader: [{
|
|
286
|
+
type: Input
|
|
287
|
+
}], filter: [{
|
|
288
|
+
type: Input
|
|
289
|
+
}], predicate$: [{
|
|
290
|
+
type: Input
|
|
291
|
+
}], loading: [{
|
|
292
|
+
type: HostBinding,
|
|
293
|
+
args: [`class.${UIClass.Loading}`]
|
|
294
|
+
}], selectable: [{
|
|
295
|
+
type: Input
|
|
296
|
+
}], selectOnClick: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], selected: [{
|
|
299
|
+
type: Output
|
|
300
|
+
}], dataListLabel: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], dataCardsLabel: [{
|
|
303
|
+
type: Input
|
|
246
304
|
}], templates: [{
|
|
247
305
|
type: ContentChildren,
|
|
248
306
|
args: [TemplateReferenceDirective, { read: TemplateReferenceDirective }]
|
|
249
307
|
}] } });
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNmYy1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2ZjLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNkYsU0FBUyxFQUFFLGVBQWUsRUFBVyxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBbUUsTUFBTSxlQUFlLENBQUM7QUFDNVAsT0FBTyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwTyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUVyRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7QUFTNUQsTUFBTSxPQUFPLGNB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TUFBTTt1UUE1RmhCLFFBQVE7c0JBRFAsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sUUFBUTtzQkFGUCxLQUFLOztzQkFDTCxXQUFXO3VCQUFDLE9BQU87Z0JBSXBCLFVBQVU7c0JBRFQsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFNTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFRTixJQUFJO3NCQURILEtBQUs7Z0JBSUYsS0FBSztzQkFEUixLQUFLO2dCQXNCTixPQUFPO3NCQUROLEtBQUs7Z0JBb0JOLFNBQVM7c0JBRFIsZUFBZTt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRG9DaGVjaywgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIEl0ZXJhYmxlRGlmZmVyLCBJdGVyYWJsZURpZmZlcnMsIE9uSW5pdCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBhbGwsIGZpcnN0T3JEZWZhdWx0LCBnZXRDYWxjVmFsdWUsIGhhc0l0ZW1CeSwgaXNEZWZpbmVkLCBNZWRpYUxpbWl0cywgUGFnaW5hdGlvblNlcnZpY2UsIFBvc2l0aW9uLCBSZXNpemVTZXJ2aWNlLCBzb3J0QnlQYXRoLCBTb3J0aW5nRGlyZWN0aW9uLCBTb3J0aW5nU2VydmljZSwgVGVtcGxhdGVSZWZlcmVuY2VEaXJlY3RpdmUsIFdJTkRPVyB9IGZyb20gJ25neC1zZmMtY29tbW9uJztcclxuaW1wb3J0IHsgSVBhZ2luYXRpb25FdmVudCB9IGZyb20gJ25neC1zZmMtY29tbW9uJztcclxuaW1wb3J0IHsgSVNvcnRpbmdFdmVudCB9IGZyb20gJ25neC1zZmMtY29tbW9uJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtblR5cGUgfSBmcm9tICcuL3BhcnRzL2NvbHVtbnMvdGFibGUtY29sdW1uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IElEZWZhdWx0VGFibGVDb2x1bW5Jbm5lck1vZGVsLCBJRGVmYXVsdFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuL3BhcnRzL2NvbHVtbnMvdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgQ29sdW1uc1RvZ2dsZVNlcnZpY2UgfSBmcm9tICcuL3BhcnRzL3RvZ2dsZS9zZXJ2aWNlL2NvbHVtbnMtdG9nZ2xlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJVGFibGVTZWxlY3RFdmVudCB9IGZyb20gJy4vc2VydmljZS9zZWxlY3QvdGFibGUtc2VsZWN0LmV2ZW50JztcclxuaW1wb3J0IHsgVGFibGVTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3NlbGVjdC90YWJsZS1zZWxlY3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFRhYmxlRGF0YVR5cGUgfSBmcm9tICcuL2VudW1zL3RhYmxlLWRhdGEtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgSVRhYmxlUGFnaW5hdGlvbk1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtcGFnaW5hdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFRhYmxlQ29uc3RhbnRzIH0gZnJvbSAnLi90YWJsZS5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBUYWJsZVRlbXBsYXRlIH0gZnJvbSAnLi9lbnVtcy90YWJsZS10ZW1wbGF0ZS5lbnVtJztcclxuaW1wb3J0IHsgSVRhYmxlRGF0YU1vZGVsLCBJVGFibGVNb2RlbCB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ZjLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbUGFnaW5hdGlvblNlcnZpY2UsIFNvcnRpbmdTZXJ2aWNlLCBUYWJsZVNlbGVjdFNlcnZpY2UsIENvbHVtbnNUb2dnbGVTZXJ2aWNlLCBSZXNpemVTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0NoZWNrZWQsIERvQ2hlY2sge1xyXG5cclxuICBUYWJsZURhdGFUeXBlID0gVGFibGVEYXRhVHlwZTtcclxuICBUYWJsZUNvbHVtblR5cGUgPSBUYWJsZUNvbHVtblR5cGU7XHJcbiAgVGFibGVUZW1wbGF0ZSA9IFRhYmxlVGVtcGxhdGU7XHJcbiAgQ29uc3RhbnRzID0gVGFibGVDb25zdGFudHM7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcG9zaXRpb246IFBvc2l0aW9uID0gUG9zaXRpb24uQ2VudGVyO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGRlbGltZXRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxyXG4gIGRhdGFUeXBlOiBUYWJsZURhdGFUeXBlID0gVGFibGVEYXRhVHlwZS5Sb3dzO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGRhdGFUb2dnbGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNob3dDb2x1bW5zOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwYWdpbmF0aW9uOiBJVGFibGVQYWdpbmF0aW9uTW9kZWwgPSB7IGVuYWJsZWQ6IHRydWUsIHBhZ2U6IFRhYmxlQ29uc3RhbnRzLkRFRkFVTFRfUEFHRSwgc2l6ZTogVGFibGVDb25zdGFudHMuREVGQVVMVF9QQUdFX1NJWkUgfTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXF1ZW5jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNlbGVjdE9uQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gVGVtcGxhdGUgcmVmZXJlbmNlcyBcclxuXHJcbiAgQElucHV0KClcclxuICBjb2x1bW5Db250ZW50PzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQElucHV0KClcclxuICByb3dDb250ZW50PzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQElucHV0KClcclxuICBjYXJkQ29udGVudD86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8vIEVuZCBUZW1wbGF0ZSByZWZlcmVuY2VzXHJcblxyXG4gIC8vRGF0YVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGRhdGE6IElUYWJsZURhdGFNb2RlbFtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRhdGEkKHZhbHVlOiBPYnNlcnZhYmxlPElUYWJsZURhdGFNb2RlbFtdPikge1xyXG4gICAgdGhpcy5fZGF0YSQgPSB2YWx1ZTtcclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuaW5pdCh0aGlzLl9kYXRhJCwgdGhpcy5wYWdpbmF0aW9uLnBhZ2UsIHRoaXMucGFnaW5hdGlvbi5zaXplKTtcclxuICB9XHJcblxyXG4gIGdldCBkYXRhJCgpOiBPYnNlcnZhYmxlPElUYWJsZURhdGFNb2RlbFtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YSQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2RhdGEkITogT2JzZXJ2YWJsZTxJVGFibGVEYXRhTW9kZWxbXT5cclxuXHJcbiAgcHJpdmF0ZSBkYXRhRGlmZmVyITogSXRlcmFibGVEaWZmZXI8YW55PjtcclxuXHJcbiAgcHJpdmF0ZSBkYXRhU3ViamVjdCE6IEJlaGF2aW9yU3ViamVjdDxJVGFibGVEYXRhTW9kZWxbXT47XHJcblxyXG4gIHByaXZhdGUgZGF0YVZhbHVlJCE6IE9ic2VydmFibGU8SVRhYmxlTW9kZWxbXT47XHJcblxyXG4gIC8vIEVuZCBEYXRhXHJcblxyXG4gIC8vIENvbHVtbnNcclxuXHJcbiAgQElucHV0KClcclxuICBjb2x1bW5zOiBJRGVmYXVsdFRhYmxlQ29sdW1uTW9kZWxbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGNvbHVtbnNEaWZmZXIhOiBJdGVyYWJsZURpZmZlcjxJRGVmYXVsdFRhYmxlQ29sdW1uTW9kZWw+O1xyXG5cclxuICBwcml2YXRlIGNvbHVtbnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8SURlZmF1bHRUYWJsZUNvbHVtbk1vZGVsW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRGVmYXVsdFRhYmxlQ29sdW1uTW9kZWxbXT4odGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgcHJpdmF0ZSBjb2x1bW5zJCE6IE9ic2VydmFibGU8SURlZmF1bHRUYWJsZUNvbHVtbklubmVyTW9kZWxbXT47XHJcblxyXG4gIHByaXZhdGUgY29sdW1uc1NvcnRpbmckITogT2JzZXJ2YWJsZTxJRGVmYXVsdFRhYmxlQ29sdW1uSW5uZXJNb2RlbFtdPjtcclxuXHJcbiAgcHJpdmF0ZSBjb2x1bW5XaWR0aCQhOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcblxyXG4gIC8vIEVuZCBDb2x1bW5zICBcclxuXHJcbiAgcHVibGljIGFsbFJvd3NTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgdm0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlUmVmZXJlbmNlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmZXJlbmNlRGlyZWN0aXZlIH0pXHJcbiAgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWZlcmVuY2VEaXJlY3RpdmU+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoV0lORE9XKSBwcml2YXRlIHdpbmRvdzogV2luZG93LFxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlbGVjdGVkU2VydmljZTogVGFibGVTZWxlY3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzb3J0aW5nU2VydmljZTogU29ydGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcmVzaXplU2VydmljZTogUmVzaXplU2VydmljZSxcclxuICAgIHByaXZhdGUgY29sdW1uc1RvZ2dsZVNlcnZpY2U6IENvbHVtbnNUb2dnbGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpdGVyYWJsZURpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycykge1xyXG4gICAgdGhpcy5kYXRhRGlmZmVyID0gaXRlcmFibGVEaWZmZXJzLmZpbmQoW10pLmNyZWF0ZTxJdGVyYWJsZURpZmZlcjxJVGFibGVEYXRhTW9kZWw+Pih1bmRlZmluZWQpO1xyXG4gICAgdGhpcy5jb2x1bW5zRGlmZmVyID0gaXRlcmFibGVEaWZmZXJzLmZpbmQoW10pLmNyZWF0ZTxJRGVmYXVsdFRhYmxlQ29sdW1uTW9kZWw+KHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIGlmIGRhdGEgaXMgc3RhdGljLCBtYWtlIGl0IG9ic2VydmFibGVcclxuICAgIGlmICghaXNEZWZpbmVkKHRoaXMuZGF0YSQpKSB7XHJcbiAgICAgIHRoaXMuZGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuZGF0YSk7XHJcbiAgICAgIHRoaXMuZGF0YSQgPSB0aGlzLmRhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldCB1cCBkYXRhIG1vZGVscyB3aXRoIGluZGV4ZXNcclxuICAgIGNvbnN0IGRhdGFJbmRleGVkJDogT2JzZXJ2YWJsZTxJVGFibGVNb2RlbFtdPiA9IHRoaXMuZGF0YSQucGlwZShtYXAoKGRhdGEpID0+IGRhdGEubWFwKChkYXRhTW9kZWwsIGluZGV4KSA9PiB7IHJldHVybiB7IGluZGV4LCBkYXRhTW9kZWwgfSB9KSkpLFxyXG4gICAgICAvLyBzZXQgdXAgc29ydGluZyBvYnNlcnZhYmxlXHJcbiAgICAgIHNvcnRpbmckOiBPYnNlcnZhYmxlPElTb3J0aW5nRXZlbnQgfCBudWxsPiA9IHRoaXMuZ2V0U29ydGluZ09ic2VydmFibGUoKSxcclxuICAgICAgLy8gc2V0IHVwIHNlbGVjdGlvbiBvYnNlcnZhYmxlXHJcbiAgICAgIHNlbGVjdGlvbiQ6IE9ic2VydmFibGU8SVRhYmxlU2VsZWN0RXZlbnQgfCBudWxsPiA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLnNlbGVjdCQucGlwZShcclxuICAgICAgICBzdGFydFdpdGgobnVsbClcclxuICAgICAgKTtcclxuXHJcbiAgICAvLyBzZXQgdXAgY29sdW1ucyAoY29uZGl0aW9uYWxseSBhZGQgc2VxdWVuY2Ugb3Igc2VsZWN0YWJsZSBjb2x1bW5zKVxyXG4gICAgdGhpcy5jb2x1bW5zJCA9IHRoaXMuY29sdW1uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgbWFwKGNvbHVtbnMgPT4ge1xyXG4gICAgICAgIGxldCB0YWJsZUNvbHVtbnMgPSBjb2x1bW5zLnNsaWNlKDApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXF1ZW5jZSlcclxuICAgICAgICAgIHRhYmxlQ29sdW1ucy51bnNoaWZ0KFRhYmxlQ29uc3RhbnRzLlNFUVVFTkNFX0NPTFVNTik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpXHJcbiAgICAgICAgICB0YWJsZUNvbHVtbnMudW5zaGlmdChUYWJsZUNvbnN0YW50cy5TRUxFQ1RBQkxFX0NPTFVNTik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKVxyXG4gICAgICAgICAgdGFibGVDb2x1bW5zLnB1c2goVGFibGVDb25zdGFudHMuRVhQQU5ERURfQ09MVU1OKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlQ29sdW1ucztcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zU29ydGluZyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmNvbHVtbnMkLCBzb3J0aW5nJF0pLnBpcGUoXHJcbiAgICAgIG1hcCgoW2NvbHVtbnMsIGV2ZW50XSkgPT4ge1xyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbHVtbi5zb3J0aW5nPy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5zb3J0aW5nLmFjdGl2ZSA9IGNvbHVtbi5maWVsZCA9PSBldmVudD8uaWQgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbHVtbi5zb3J0aW5nLmFjdGl2ZSlcclxuICAgICAgICAgICAgICBjb2x1bW4uc29ydGluZy5kaXJlY3Rpb24gPSBTb3J0aW5nRGlyZWN0aW9uLkFzY2VuZGluZztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIHNldCB1cCBtYWluIGRhdGEgb2JzZXJ2YWJsZVxyXG4gICAgdGhpcy5kYXRhVmFsdWUkID0gY29tYmluZUxhdGVzdChbXHJcbiAgICAgIGRhdGFJbmRleGVkJCxcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYWdpbmF0aW9uJCxcclxuICAgICAgc29ydGluZyQsXHJcbiAgICAgIHNlbGVjdGlvbiRcclxuICAgIF0pLnBpcGUoXHJcbiAgICAgIG1hcCgoW2RhdGEsIHBhZ2luYXRpb25FdmVudCwgc29ydGluZ0V2ZW50LCBzZWxlY3Rpb25FdmVudF0pID0+IHtcclxuICAgICAgICAvLyBoYW5kbGUgc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb25FdmVudChkYXRhLCBzZWxlY3Rpb25FdmVudCk7XHJcblxyXG4gICAgICAgIC8vIGhhbmRsZSBwYWdpbmF0aW9uIGFuZCBzb3J0aW5nXHJcbiAgICAgICAgbGV0IHNvcnRlZERhdGEgPSB0aGlzLnNvcnREYXRhKGRhdGEsIHNvcnRpbmdFdmVudCksXHJcbiAgICAgICAgICBwYWdpbmF0ZWREYXRhID0gdGhpcy5wYWdpbmF0ZURhdGEoc29ydGVkRGF0YSwgcGFnaW5hdGlvbkV2ZW50KTtcclxuXHJcbiAgICAgICAgLy8gaGFuZGxlIGRhdGEgc2VxdWVuY2UgIFxyXG4gICAgICAgIGlmICh0aGlzLnNlcXVlbmNlKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVJvd1NlcXVlbmNlVmFsdWVzKHBhZ2luYXRpb25FdmVudC5wYWdlLCBwYWdpbmF0ZWREYXRhKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBhZ2luYXRlZERhdGE7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gY29tYmluZSBhbGwgb2JzZXJ2YWJsZSB0byB2aWV3IG1vZGVsXHJcbiAgICB0aGlzLnZtJCA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLmNvbHVtbnNTb3J0aW5nJCxcclxuICAgICAgdGhpcy5kYXRhVmFsdWUkLFxyXG4gICAgICB0aGlzLmNvbHVtbnNUb2dnbGVTZXJ2aWNlLnNob3dDb2x1bW5zJCxcclxuICAgICAgdGhpcy5jb2x1bW5XaWR0aCRcclxuICAgIF0pLnBpcGUoXHJcbiAgICAgIG1hcCgoW2NvbHVtbnMsIGRhdGEsIHNob3dDb2x1bW5zLCBjb2x1bW5XaWR0aF0pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICBjb2x1bW5XaWR0aCxcclxuICAgICAgICAgIHNob3dDb2x1bW5zOiB0aGlzLnNob3dDb2x1bW5zICYmIHNob3dDb2x1bW5zLFxyXG4gICAgICAgICAgY29sdW1uU3R5bGU6IHsgd2lkdGg6IGdldENhbGNWYWx1ZShjb2x1bW5XaWR0aCksIGp1c3RpZnlDb250ZW50OiB0aGlzLnBvc2l0aW9uIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgKSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nRG9DaGVjaygpIHtcclxuICAgIGlmICh0aGlzLmRhdGFEaWZmZXIuZGlmZih0aGlzLmRhdGEpKSB7XHJcbiAgICAgIHRoaXMuZGF0YVN1YmplY3QubmV4dCh0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbHVtbnNEaWZmZXIuZGlmZih0aGlzLmNvbHVtbnMpKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1N1YmplY3QubmV4dCh0aGlzLmNvbHVtbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbHVtbldpZHRoJCA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLnJlc2l6ZVNlcnZpY2Uub25SZXNpemUkLnBpcGUoc3RhcnRXaXRoKHt9KSksXHJcbiAgICAgIHRoaXMuY29sdW1ucyRcclxuICAgIF0pLnBpcGUobWFwKChbXywgY29sdW1uc10pID0+IHRoaXMuZ2V0Q29sdW1uV2lkdGgodGhpcy53aW5kb3cuaW5uZXJXaWR0aCwgY29sdW1ucy5sZW5ndGgpKSk7XHJcbiAgfVxyXG5cclxuICBvbkRhdGFUeXBlVG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhVHlwZSA9IHRoaXMuZGF0YVR5cGUgPT0gVGFibGVEYXRhVHlwZS5Sb3dzID8gVGFibGVEYXRhVHlwZS5DYXJkcyA6IFRhYmxlRGF0YVR5cGUuUm93cztcclxuICB9XHJcblxyXG4gIHNlbGVjdFJvdyhtb2RlbDogSVRhYmxlU2VsZWN0RXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLnNlbGVjdChtb2RlbC5pbmRleCwgbW9kZWwuc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTb3J0aW5nT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPElTb3J0aW5nRXZlbnQgfCBudWxsPiB7XHJcbiAgICBjb25zdCBmaXJzdFNvcnRpbmdDb2x1bW46IElEZWZhdWx0VGFibGVDb2x1bW5Nb2RlbCB8IHVuZGVmaW5lZCA9IGZpcnN0T3JEZWZhdWx0KHRoaXMuY29sdW1ucywgY29sdW1uID0+IGNvbHVtbj8uc29ydGluZz8uZW5hYmxlZCB8fCBmYWxzZSk7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0aW5nU2VydmljZS5zb3J0aW5nJC5waXBlKFxyXG4gICAgICBzdGFydFdpdGgoZmlyc3RTb3J0aW5nQ29sdW1uID8geyBpZDogZmlyc3RTb3J0aW5nQ29sdW1uLmZpZWxkLCBkaXJlY3Rpb246IGZpcnN0U29ydGluZ0NvbHVtbi5zb3J0aW5nPy5kaXJlY3Rpb24gfHwgU29ydGluZ0RpcmVjdGlvbi5Bc2NlbmRpbmcgfSA6IG51bGwpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb2x1bW5XaWR0aCh3aW5kb3dXaWR0aDogbnVtYmVyLCBjb2x1bW5zTGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHdpbmRvd1dpZHRoIDw9IE1lZGlhTGltaXRzLk1vYmlsZUxhcmdlKVxyXG4gICAgICByZXR1cm4gMTtcclxuXHJcbiAgICBpZiAod2luZG93V2lkdGggPD0gTWVkaWFMaW1pdHMuVGFibGV0KVxyXG4gICAgICByZXR1cm4gTWF0aC5jZWlsKGNvbHVtbnNMZW5ndGggLyAyKTtcclxuXHJcbiAgICByZXR1cm4gY29sdW1uc0xlbmd0aDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uRXZlbnQoZGF0YTogSVRhYmxlTW9kZWxbXSwgc2VsZWN0aW9uRXZlbnQ6IElUYWJsZVNlbGVjdEV2ZW50IHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHNlbGVjdGlvbkV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgaWYgKHNlbGVjdGlvbkV2ZW50LmluZGV4ID09IG51bGwpIHtcclxuICAgICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiBpdGVtLmRhdGFNb2RlbC5zZWxlY3RlZCA9IHNlbGVjdGlvbkV2ZW50LnNlbGVjdGVkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uRXZlbnQuaW5kZXggPT09IGl0ZW0uaW5kZXgpIHtcclxuICAgICAgICAgICAgaXRlbS5kYXRhTW9kZWwuc2VsZWN0ZWQgPSBzZWxlY3Rpb25FdmVudC5zZWxlY3RlZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWxsUm93c1NlbGVjdGVkID0gYWxsKGRhdGEsIGl0ZW0gPT4gQm9vbGVhbihpdGVtLmRhdGFNb2RlbC5zZWxlY3RlZCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYWdpbmF0ZURhdGEoZGF0YTogSVRhYmxlTW9kZWxbXSwgcGFnaW5hdGlvbkV2ZW50OiBJUGFnaW5hdGlvbkV2ZW50KTogSVRhYmxlTW9kZWxbXSB7XHJcbiAgICBsZXQgcGFnZWREYXRhID0gdGhpcy5wYWdpbmF0aW9uLmVuYWJsZWRcclxuICAgICAgPyBkYXRhLnNsaWNlKChwYWdpbmF0aW9uRXZlbnQucGFnZSAtIDEpICogdGhpcy5wYWdpbmF0aW9uLnNpemUsIHBhZ2luYXRpb25FdmVudC5wYWdlICogdGhpcy5wYWdpbmF0aW9uLnNpemUpXHJcbiAgICAgIDogZGF0YTtcclxuXHJcbiAgICByZXR1cm4gcGFnZWREYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzb3J0RGF0YShkYXRhOiBJVGFibGVNb2RlbFtdLCBzb3J0aW5nRXZlbnQ6IElTb3J0aW5nRXZlbnQgfCBudWxsKTogSVRhYmxlTW9kZWxbXSB7XHJcbiAgICBjb25zdCBzb3J0ZWREYXRhID0gc29ydGluZ0V2ZW50ICYmIGhhc0l0ZW1CeSh0aGlzLmNvbHVtbnMsIGNvbCA9PiBjb2wuZmllbGQgPT0gc29ydGluZ0V2ZW50LmlkKVxyXG4gICAgICA/IHNvcnRCeVBhdGgoZGF0YSwgYGRhdGFNb2RlbC5kYXRhLiR7c29ydGluZ0V2ZW50LmlkfWAsIHNvcnRpbmdFdmVudC5kaXJlY3Rpb24pXHJcbiAgICAgIDogZGF0YTtcclxuXHJcbiAgICByZXR1cm4gc29ydGVkRGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUm93U2VxdWVuY2VWYWx1ZXMocGFnZTogbnVtYmVyLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgbGV0IGZyb20gPSAocGFnZSAtIDEpICogdGhpcy5wYWdpbmF0aW9uLnNpemU7XHJcbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGl0ZW0uc2VxdWVuY2UgPSBmcm9tICsgMTtcclxuICAgICAgZnJvbSsrO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAqbmdJZj1cInZtJCB8IGFzeW5jIGFzIHZtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucy1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucy1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIDxzZmMtY29sdW1ucy10b2dnbGUgKm5nSWY9XCJzaG93Q29sdW1uc1wiPjwvc2ZjLWNvbHVtbnMtdG9nZ2xlPlxyXG4gICAgICAgICAgICA8c2ZjLXRvZ2dsZS1zd2l0Y2hlciAqbmdJZj1cImRhdGFUb2dnbGVcIiBbYWN0aXZlXT1cImRhdGFUeXBlID09PSBUYWJsZURhdGFUeXBlLkNhcmRzXCJcclxuICAgICAgICAgICAgICAgIFtsZWZ0TW9kZWxdPVwiQ29uc3RhbnRzLlRPR0dMRV9TV0lUQ0hFUl9MRUZUX01PREVMXCIgW3JpZ2h0TW9kZWxdPVwiQ29uc3RhbnRzLlRPR0dMRV9TV0lUQ0hFUl9SSUdIVF9NT0RFTFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EYXRhVHlwZVRvZ2dsZSgpXCI+XHJcbiAgICAgICAgICAgIDwvc2ZjLXRvZ2dsZS1zd2l0Y2hlcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInZtLnNob3dDb2x1bW5zXCIgY2xhc3M9XCJjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiBbbmdTdHlsZV09XCJ2bS5jb2x1bW5TdHlsZVwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygdm0uY29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c2ZjLXNlbGVjdGFibGUtdGFibGUtY29sdW1uICpuZ1N3aXRjaENhc2U9XCJUYWJsZUNvbHVtblR5cGUuU2VsZWN0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJhbGxSb3dzU2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NmYy1zZWxlY3RhYmxlLXRhYmxlLWNvbHVtbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHNmYy1zb3J0aW5nICpuZ1N3aXRjaERlZmF1bHQgW21vZGVsXT1cImNvbHVtbi5zb3J0aW5nXCIgW2lkXT1cImNvbHVtbi5maWVsZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNmYy10ZW1wbGF0ZS1jb250ZW50IFtyZWZlcmVuY2VDb250ZW50XT1cImNvbHVtbkNvbnRlbnRcIiBbdGVtcGxhdGVzQ29udGVudF09XCJ0ZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlVHlwZV09XCJUYWJsZVRlbXBsYXRlLkNvbHVtblwiIFtkZWZhdWx0Q29udGVudF09XCJkZWZhdWx0Q29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZXh0RGF0YV09XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZmMtdGVtcGxhdGUtY29udGVudD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZmMtZGVmYXVsdC10YWJsZS1jb2x1bW4gW21vZGVsXT1cImNvbHVtblwiPjwvc2ZjLWRlZmF1bHQtdGFibGUtY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L3NmYy1zb3J0aW5nPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHNmYy1kZWxpbWV0ZXIgKm5nSWY9XCJkZWxpbWV0ZXJcIj48L3NmYy1kZWxpbWV0ZXI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvd3MtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZtLmRhdGFcIj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImRhdGFUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICA8c2ZjLXRlbXBsYXRlLWNvbnRlbnQgKm5nU3dpdGNoQ2FzZT1cIlRhYmxlRGF0YVR5cGUuUm93c1wiIFtyZWZlcmVuY2VDb250ZW50XT1cInJvd0NvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZXNDb250ZW50XT1cInRlbXBsYXRlc1wiIFt0ZW1wbGF0ZVR5cGVdPVwiVGFibGVUZW1wbGF0ZS5Sb3dcIiBbZGVmYXVsdENvbnRlbnRdPVwiZGVmYXVsdFJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRleHREYXRhXT1cInttb2RlbDogaXRlbSwgY29sdW1uczogdm0uY29sdW1ucywgY29sdW1uV2lkdGg6IHZtLmNvbHVtbldpZHRoLCBwb3NpdGlvbjogcG9zaXRpb259XCI+XHJcbiAgICAgICAgICAgICAgICA8L3NmYy10ZW1wbGF0ZS1jb250ZW50PlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8c2ZjLWRlZmF1bHQtdGFibGUtcm93IFtjb2x1bW5zXT1cInZtLmNvbHVtbnNcIiBbbW9kZWxdPVwiaXRlbVwiIFtwb3NpdGlvbl09XCJwb3NpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5XaWR0aF09XCJ2bS5jb2x1bW5XaWR0aFwiIFtzZWxlY3RPbkNsaWNrXT1cInNlbGVjdE9uQ2xpY2tcIiAoc2VsZWN0ZWQpPVwic2VsZWN0Um93KCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NmYy1kZWZhdWx0LXRhYmxlLXJvdz5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPHNmYy10ZW1wbGF0ZS1jb250ZW50ICpuZ1N3aXRjaENhc2U9XCJUYWJsZURhdGFUeXBlLkNhcmRzXCIgW3JlZmVyZW5jZUNvbnRlbnRdPVwiY2FyZENvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZXNDb250ZW50XT1cInRlbXBsYXRlc1wiIFt0ZW1wbGF0ZVR5cGVdPVwiVGFibGVUZW1wbGF0ZS5DYXJkXCIgW2RlZmF1bHRDb250ZW50XT1cImRlZmF1bHRDYXJkXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29udGV4dERhdGFdPVwie21vZGVsOiBpdGVtLCBjb2x1bW5zOiB2bS5jb2x1bW5zfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9zZmMtdGVtcGxhdGUtY29udGVudD5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDYXJkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZmMtZGVmYXVsdC10YWJsZS1jYXJkIFtjb2x1bW5zXT1cInZtLmNvbHVtbnNcIiBbbW9kZWxdPVwiaXRlbVwiIFtzZWxlY3RPbkNsaWNrXT1cInNlbGVjdE9uQ2xpY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwic2VsZWN0Um93KCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NmYy1kZWZhdWx0LXRhYmxlLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxzZmMtcGFnaW5hdGlvbiAqbmdJZj1cInBhZ2luYXRpb24uZW5hYmxlZFwiIFtsaW1pdHNdPVwiZmFsc2VcIiBbZnVsbF09XCJmYWxzZVwiIFtkYXRhJF09XCJkYXRhJFwiPjwvc2ZjLXBhZ2luYXRpb24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
308
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNmYy1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2ZjLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDcUQsU0FBUyxFQUFFLGVBQWUsRUFDM0UsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUN6QyxNQUFNLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLEdBQUcsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQzdELFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sRUFDMUYsV0FBVyxFQUFFLGlCQUFpQixFQUFrQixxQkFBcUIsRUFDeEIsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBb0UsT0FBTyxFQUNuRyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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QUFVO3NCQURULEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQU1OLGFBQWE7c0JBRFosS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQVFOLElBQUk7c0JBREgsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBWU4sT0FBTztzQkFETixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFjTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBY0MsT0FBTztzQkFEYixXQUFXO3VCQUFDLFNBQVMsT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFRdkMsVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFJTixRQUFRO3NCQURQLE1BQU07Z0JBa0JQLGFBQWE7c0JBRFosS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBNkJOLFNBQVM7c0JBRFIsZUFBZTt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLFxyXG4gIERvQ2hlY2ssIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIEl0ZXJhYmxlRGlmZmVyLCBJdGVyYWJsZURpZmZlcnMsIE9uRGVzdHJveSxcclxuICBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIGFsbCwgZmlyc3RPckRlZmF1bHQsIGdldENhbGNWYWx1ZSwgZ2V0Q3NzTGlrZVZhbHVlLCBpc0RlZmluZWQsXHJcbiAgTWVkaWFMaW1pdHMsIFBvc2l0aW9uLCBSZXNpemVTZXJ2aWNlLCBTb3J0aW5nRGlyZWN0aW9uLCBUZW1wbGF0ZVJlZmVyZW5jZURpcmVjdGl2ZSwgV0lORE9XLFxyXG4gIFVJQ29uc3RhbnRzLCBMb2FkQ29udGFpbmVyVHlwZSwgTG9hZGVyRnVuY3Rpb24sIExvYWRDb250YWluZXJMb2FkVHlwZSwgSUxvYWRDb250YWluZXJNb2RlbCxcclxuICBJTG9hZENvbnRhaW5lclJlc3VsdE1vZGVsLCBJUGFnaW5hdGlvbk1vZGVsLCBQYWdpbmF0aW9uQ29uc3RhbnRzLCBnZW5lcmF0ZUd1aWQsIGFueSxcclxuICBoYXNJdGVtLCBTb3J0aW5nU2VydmljZSwgSVNvcnRpbmdNb2RlbCwgSUxvYWRDb250YWluZXJQcmVkaWNhdGVQYXJhbWV0ZXJzLCBGaWx0ZXJGdW5jdGlvbiwgVUlDbGFzcywgSVRvZ2dsZVN3aXRjaGVyTW9kZWxcclxufSBmcm9tICduZ3gtc2ZjLWNvbW1vbic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtblR5cGUgfSBmcm9tICcuL3BhcnRzL2NvbHVtbnMvdGFibGUtY29sdW1uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IElUYWJsZUNvbHVtbkV4dGVuZGVkTW9kZWwsIElUYWJsZUNvbHVtbk1vZGVsIH0gZnJvbSAnLi9wYXJ0cy9jb2x1bW5zL3RhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IENvbHVtbnNUb2dnbGVTZXJ2aWNlIH0gZnJvbSAnLi9wYXJ0cy90b2dnbGUvc2VydmljZS9jb2x1bW5zLXRvZ2dsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSVRhYmxlU2VsZWN0RXZlbnQgfSBmcm9tICcuL3NlcnZpY2Uvc2VsZWN0L3RhYmxlLXNlbGVjdC5ldmVudCc7XHJcbmltcG9ydCB7IFRhYmxlU2VsZWN0U2VydmljZSB9IGZyb20gJy4vc2VydmljZS9zZWxlY3QvdGFibGUtc2VsZWN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZURhdGFUeXBlIH0gZnJvbSAnLi9lbnVtcy90YWJsZS1kYXRhLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFRhYmxlQ29uc3RhbnRzIH0gZnJvbSAnLi90YWJsZS5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBUYWJsZVRlbXBsYXRlIH0gZnJvbSAnLi9lbnVtcy90YWJsZS10ZW1wbGF0ZS5lbnVtJztcclxuaW1wb3J0IHsgSVRhYmxlTW9kZWwgfSBmcm9tICcuL21vZGVscy90YWJsZS5tb2RlbCc7XHJcbmltcG9ydCB7IGZhVGFibGVMaXN0LCBmYUJvcmRlckFsbCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NmYy10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1NvcnRpbmdTZXJ2aWNlLCBUYWJsZVNlbGVjdFNlcnZpY2UsIENvbHVtbnNUb2dnbGVTZXJ2aWNlLCBSZXNpemVTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0NoZWNrZWQsIERvQ2hlY2ssIE9uRGVzdHJveSB7XHJcblxyXG4gIFRhYmxlRGF0YVR5cGUgPSBUYWJsZURhdGFUeXBlO1xyXG4gIFRhYmxlQ29sdW1uVHlwZSA9IFRhYmxlQ29sdW1uVHlwZTtcclxuICBUYWJsZVRlbXBsYXRlID0gVGFibGVUZW1wbGF0ZTtcclxuICBDb25zdGFudHMgPSBUYWJsZUNvbnN0YW50cztcclxuICBMb2FkQ29udGFpbmVyVHlwZSA9IExvYWRDb250YWluZXJUeXBlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHBvc2l0aW9uOiBQb3NpdGlvbiA9IFBvc2l0aW9uLkNlbnRlcjtcclxuXHJcbiAgQElucHV0KClcclxuICBkZWxpbWV0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcclxuICBkYXRhVHlwZTogVGFibGVEYXRhVHlwZSA9IFRhYmxlRGF0YVR5cGUuUm93cztcclxuXHJcbiAgQElucHV0KClcclxuICBkYXRhVG9nZ2xlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzaG93Q29sdW1uczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgY29sdW1uc1RvZ2dsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHBhZ2luYXRpb246IElQYWdpbmF0aW9uTW9kZWwgPSBQYWdpbmF0aW9uQ29uc3RhbnRzLkRFRkFVTFRfUEFHSU5BVElPTjtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXF1ZW5jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgbm90Rm91bmRMYWJlbDogc3RyaW5nID0gdGhpcy5Db25zdGFudHMuTk9UX0ZPVU5EX0xBQkVMX0RFRkFVTFQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2hvd1RvdGFsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgdG90YWxMYWJlbDogc3RyaW5nID0gdGhpcy5Db25zdGFudHMuVE9UQUxfTEFCRUxfREVGQVVMVDtcclxuXHJcbiAgQElucHV0KClcclxuICBwYWdpbmF0aW9uQ291bnQ6IG51bWJlciA9IFBhZ2luYXRpb25Db25zdGFudHMuREVGQVVMVF9DT1VOVDtcclxuXHJcbiAgQElucHV0KClcclxuICBwYWdpbmF0aW9uTGltaXRzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2hvd0xvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBUZW1wbGF0ZSByZWZlcmVuY2VzIFxyXG5cclxuICBASW5wdXQoKVxyXG4gIGNvbHVtbkNvbnRlbnQ/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJvd0NvbnRlbnQ/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGNhcmRDb250ZW50PzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8gRW5kIFRlbXBsYXRlIHJlZmVyZW5jZXNcclxuXHJcbiAgLy9EYXRhXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBkYXRhJCE6IE9ic2VydmFibGU8YW55W10+O1xyXG5cclxuICBwcml2YXRlIGRhdGFEaWZmZXIhOiBJdGVyYWJsZURpZmZlcjxhbnk+O1xyXG5cclxuICBwcml2YXRlIGRhdGFTdWJqZWN0ITogQmVoYXZpb3JTdWJqZWN0PGFueVtdPjtcclxuXHJcbiAgLy8gRW5kIERhdGFcclxuXHJcbiAgLy8gQ29sdW1uc1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGNvbHVtbnM6IElUYWJsZUNvbHVtbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBzaG93Q29sdW1uc0xhYmVsITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGhpZGVDb2x1bW5zTGFiZWwhOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVzaXplOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBjb2x1bW5zRGlmZmVyITogSXRlcmFibGVEaWZmZXI8SVRhYmxlQ29sdW1uTW9kZWw+O1xyXG5cclxuICBwcml2YXRlIGNvbHVtbnNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8SVRhYmxlQ29sdW1uTW9kZWxbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElUYWJsZUNvbHVtbk1vZGVsW10+KHRoaXMuY29sdW1ucyk7XHJcblxyXG4gIHB1YmxpYyB0YWJsZUNvbHVtbnM6IElUYWJsZUNvbHVtbkV4dGVuZGVkTW9kZWxbXSA9IFtdO1xyXG5cclxuICAvLyBFbmQgQ29sdW1ucyAgXHJcblxyXG4gIC8vIExvYWQgY29udGFpbmVyXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgbG9hZFR5cGU6IExvYWRDb250YWluZXJMb2FkVHlwZSA9IExvYWRDb250YWluZXJMb2FkVHlwZS5QYWdpbmF0aW9uO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGxvYWRlciE6IExvYWRlckZ1bmN0aW9uO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGZpbHRlcj86IEZpbHRlckZ1bmN0aW9uO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHByZWRpY2F0ZSQhOiBPYnNlcnZhYmxlPElMb2FkQ29udGFpbmVyUHJlZGljYXRlUGFyYW1ldGVycyB8IG51bGw+O1xyXG5cclxuICBwdWJsaWMgbG9hZE1vZGVsITogSUxvYWRDb250YWluZXJNb2RlbDtcclxuXHJcbiAgcHVibGljIGxvYWRDb250YWluZXJJZDogc3RyaW5nID0gZ2VuZXJhdGVHdWlkKCk7XHJcblxyXG4gIHB1YmxpYyBpdGVtczogSVRhYmxlTW9kZWxbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgdG90YWw6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgcGFnZTogbnVtYmVyID0gUGFnaW5hdGlvbkNvbnN0YW50cy5ERUZBVUxUX1BBR0U7XHJcblxyXG4gIEBIb3N0QmluZGluZyhgY2xhc3MuJHtVSUNsYXNzLkxvYWRpbmd9YClcclxuICBwdWJsaWMgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBFbmQgTG9hZCBjb250YWluZXJcclxuXHJcbiAgLy8gU2VsZWN0aW9uXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNlbGVjdE9uQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxJVGFibGVTZWxlY3RFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElUYWJsZVNlbGVjdEV2ZW50PigpO1xyXG5cclxuICBwdWJsaWMgZ2V0IGFsbFJvd3NTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5hbGxTZWxlY3RlZCB8fCB0aGlzLnRvdGFsID09IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLnNlbGVjdGVkSXRlbXMubGVuZ3RoKVxyXG4gICAgICAmJiAhYW55KHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLnVuc2VsZWN0ZWRJdGVtcylcclxuICAgICAgJiYgYW55KHRoaXMuaXRlbXMpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgYWxsU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfYWxsU2VsZWN0aW9uU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvLyBFbmQgU2VsZWN0aW9uXHJcblxyXG4gIC8vIERhdGEgdG9nZ2xlXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZGF0YUxpc3RMYWJlbDogc3RyaW5nID0gdGhpcy5Db25zdGFudHMuREFUQV9MSVNUX0xBQkVMO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGRhdGFDYXJkc0xhYmVsOiBzdHJpbmcgPSB0aGlzLkNvbnN0YW50cy5EQVRBX0NBUkRTX0xBQkVMO1xyXG5cclxuICBwdWJsaWMgdG9nZ2xlU3dpdGNoZXJMZWZ0TW9kZWwhOiBJVG9nZ2xlU3dpdGNoZXJNb2RlbDtcclxuXHJcbiAgcHVibGljIHRvZ2dsZVN3aXRjaGVyUmlnaHRNb2RlbCE6IElUb2dnbGVTd2l0Y2hlck1vZGVsO1xyXG5cclxuICAvLyBFbmQgZGF0YSB0b2dnbGVcclxuXHJcbiAgcHVibGljIHZtJCE6IE9ic2VydmFibGU8YW55PjtcclxuXHJcbiAgcHJpdmF0ZSBfY29sdW1uc1Jlc2l6ZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgcHJpdmF0ZSBfY29sdW1uc1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgcHJpdmF0ZSBfc29ydGluZ1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgcHJpdmF0ZSBnZXQgaW5pdGlhbFNvcnRpbmcoKTogSVNvcnRpbmdNb2RlbCB8IG51bGwge1xyXG4gICAgY29uc3QgYWN0aXZlU29ydGluZ0NvbHVtbiA9IGZpcnN0T3JEZWZhdWx0KHRoaXMuY29sdW1ucywgY29sdW1uID0+IGNvbHVtbi5zb3J0aW5nPy5hY3RpdmUhKTtcclxuXHJcbiAgICBpZiAoYWN0aXZlU29ydGluZ0NvbHVtbilcclxuICAgICAgcmV0dXJuIHsgaWQ6IGFjdGl2ZVNvcnRpbmdDb2x1bW4uZmllbGQsIGRpcmVjdGlvbjogYWN0aXZlU29ydGluZ0NvbHVtbi5zb3J0aW5nPy5kaXJlY3Rpb24hIH07XHJcblxyXG4gICAgY29uc3QgZW5hYmxlZFNvcnRpbmdDb2x1bW4gPSBmaXJzdE9yRGVmYXVsdCh0aGlzLmNvbHVtbnMsIGNvbHVtbiA9PiBjb2x1bW4uc29ydGluZz8uZW5hYmxlZCEpO1xyXG5cclxuICAgIHJldHVybiBlbmFibGVkU29ydGluZ0NvbHVtbiA/IHsgaWQ6IGVuYWJsZWRTb3J0aW5nQ29sdW1uLmZpZWxkLCBkaXJlY3Rpb246IGVuYWJsZWRTb3J0aW5nQ29sdW1uLnNvcnRpbmc/LmRpcmVjdGlvbiEgfSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlUmVmZXJlbmNlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmZXJlbmNlRGlyZWN0aXZlIH0pXHJcbiAgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWZlcmVuY2VEaXJlY3RpdmU+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjb2x1bW5zVG9nZ2xlU2VydmljZTogQ29sdW1uc1RvZ2dsZVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFdJTkRPVykgcHJpdmF0ZSB3aW5kb3c6IFdpbmRvdyxcclxuICAgIHByaXZhdGUgc2VsZWN0ZWRTZXJ2aWNlOiBUYWJsZVNlbGVjdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNvcnRpbmdTZXJ2aWNlOiBTb3J0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByZXNpemVTZXJ2aWNlOiBSZXNpemVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpdGVyYWJsZURpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycykge1xyXG4gICAgdGhpcy5kYXRhRGlmZmVyID0gaXRlcmFibGVEaWZmZXJzLmZpbmQoW10pLmNyZWF0ZTxJdGVyYWJsZURpZmZlcjxhbnk+Pih1bmRlZmluZWQpO1xyXG4gICAgdGhpcy5jb2x1bW5zRGlmZmVyID0gaXRlcmFibGVEaWZmZXJzLmZpbmQoW10pLmNyZWF0ZTxJVGFibGVDb2x1bW5Nb2RlbD4odW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gaWYgZGF0YSBpcyBzdGF0aWMsIG1ha2UgaXQgb2JzZXJ2YWJsZVxyXG4gICAgaWYgKCFpc0RlZmluZWQodGhpcy5kYXRhJCkpIHtcclxuICAgICAgdGhpcy5kYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5kYXRhKTtcclxuICAgICAgdGhpcy5kYXRhJCA9IHRoaXMuZGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0YWJsZSlcclxuICAgICAgdGhpcy5zZWxlY3Rpb25TdWJzY3JpYmUoKTtcclxuXHJcbiAgICAvLyBzZXQgdXAgY29sdW1ucyAoY29uZGl0aW9uYWxseSBhZGQgc2VxdWVuY2UsIHNlbGVjdGFibGUgYW5kIGV4cGFuZCBjb2x1bW5zKVxyXG4gICAgdGhpcy5jb2x1bW5zU3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVzaXplKVxyXG4gICAgICB0aGlzLnJlc2l6ZVN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuc29ydGluZ1N1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMubG9hZE1vZGVsID0ge1xyXG4gICAgICBwcmVkaWNhdGUkOiB0aGlzLnByZWRpY2F0ZSQsXHJcbiAgICAgIGRhdGEkOiB0aGlzLmRhdGEkLFxyXG4gICAgICBsb2FkZXI6IHRoaXMubG9hZGVyLFxyXG4gICAgICBmaWx0ZXI6IHRoaXMuZmlsdGVyLFxyXG4gICAgICBsb2FkVHlwZTogdGhpcy5sb2FkVHlwZSxcclxuICAgICAgcGFnaW5hdGlvbjogdGhpcy5wYWdpbmF0aW9uLFxyXG4gICAgICBzb3J0aW5nOiB0aGlzLmluaXRpYWxTb3J0aW5nXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudG9nZ2xlU3dpdGNoZXJMZWZ0TW9kZWwgPSB7IGxhYmVsOiB0aGlzLmRhdGFMaXN0TGFiZWwsIGljb246IGZhVGFibGVMaXN0IH07XHJcbiAgICB0aGlzLnRvZ2dsZVN3aXRjaGVyUmlnaHRNb2RlbCA9IHsgbGFiZWw6IHRoaXMuZGF0YUNhcmRzTGFiZWwsIGljb246IGZhQm9yZGVyQWxsIH07XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRhdGFEaWZmZXIuZGlmZih0aGlzLmRhdGEpKSB7XHJcbiAgICAgIHRoaXMuZGF0YVN1YmplY3QubmV4dCh0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbHVtbnNEaWZmZXIuZGlmZih0aGlzLmNvbHVtbnMpKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1N1YmplY3QubmV4dCh0aGlzLmNvbHVtbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FsbFNlbGVjdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX2NvbHVtbnNSZXNpemVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLl9jb2x1bW5zU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5fc29ydGluZ1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkRhdGFUeXBlVG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhVHlwZSA9IHRoaXMuZGF0YVR5cGUgPT0gVGFibGVEYXRhVHlwZS5Sb3dzXHJcbiAgICAgID8gVGFibGVEYXRhVHlwZS5DYXJkc1xyXG4gICAgICA6IFRhYmxlRGF0YVR5cGUuUm93cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVTdWNjZXNzKHJlc3VsdDogSUxvYWRDb250YWluZXJSZXN1bHRNb2RlbDxhbnk+KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2UgPSByZXN1bHQucGFnZTtcclxuICAgIHRoaXMudG90YWwgPSByZXN1bHQudG90YWw7XHJcblxyXG4gICAgY29uc3QgaXRlbXM6IElUYWJsZU1vZGVsW10gPSByZXN1bHQuaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBzZXF1ZW5jZSA9IChpbmRleCArIDEpICsgKCh0aGlzLnBhZ2UgKiB0aGlzLnBhZ2luYXRpb24uc2l6ZSkgLSB0aGlzLnBhZ2luYXRpb24uc2l6ZSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaW5kZXg6IGluZGV4LFxyXG4gICAgICAgIHNlcXVlbmNlOiBzZXF1ZW5jZSxcclxuICAgICAgICBzZWxlY3RlZDogdGhpcy5nZXRJdGVtU2VsZWN0ZWQoc2VxdWVuY2UpLFxyXG4gICAgICAgIGRhdGE6IGl0ZW1cclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChyZXN1bHQucmVzZXQpXHJcbiAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuY29uY2F0KGl0ZW1zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0aW9uU3Vic2NyaWJlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fYWxsU2VsZWN0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5zZWxlY3RlZFNlcnZpY2Uuc2VsZWN0JFxyXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogSVRhYmxlU2VsZWN0RXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQuaW5kZXggPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IGV2ZW50LnNlbGVjdGVkO1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCA9IGV2ZW50LnNlbGVjdGVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdChldmVudCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVTdWJzY3JpYmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb2x1bW5zUmVzaXplU3Vic2NyaXB0aW9uID0gdGhpcy5yZXNpemVTZXJ2aWNlLm9uUmVzaXplJFxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMudGFibGVDb2x1bW5zLmZvckVhY2goY29sdW1uID0+XHJcbiAgICAgICAgY29sdW1uLmNhbGN1bGF0ZWRXaWR0aCA9IHRoaXMuY2FsY3VsYXRlQ29sdW1uV2lkdGgoY29sdW1uLCB0aGlzLnRhYmxlQ29sdW1ucy5sZW5ndGgpKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbHVtbnNTdWJzY3JpYmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb2x1bW5zU3Vic2NyaXB0aW9uID0gdGhpcy5jb2x1bW5zU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICBmaWx0ZXIoY29sdW1ucyA9PiBhbnkoY29sdW1ucykpLFxyXG4gICAgICBtYXAoKGNvbHVtbnM6IElUYWJsZUNvbHVtbk1vZGVsW10pID0+IHtcclxuICAgICAgICBsZXQgdGFibGVDb2x1bW5zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb2x1bW5zKSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNlcXVlbmNlKVxyXG4gICAgICAgICAgdGFibGVDb2x1bW5zLnVuc2hpZnQoVGFibGVDb25zdGFudHMuU0VRVUVOQ0VfQ09MVU1OKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSlcclxuICAgICAgICAgIHRhYmxlQ29sdW1ucy51bnNoaWZ0KFRhYmxlQ29uc3RhbnRzLlNFTEVDVEFCTEVfQ09MVU1OKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpXHJcbiAgICAgICAgICB0YWJsZUNvbHVtbnMucHVzaChUYWJsZUNvbnN0YW50cy5FWFBBTkRFRF9DT0xVTU4pO1xyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGVkIHdpZHRoIG5vdCB3b3JrIHdpdGhvdXQgZGVlcCBjb3B5XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGFibGVDb2x1bW5zKSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgoY29sdW1uczogSVRhYmxlQ29sdW1uRXh0ZW5kZWRNb2RlbFtdKSA9PiB7XHJcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBJVGFibGVDb2x1bW5FeHRlbmRlZE1vZGVsKSA9PiB7XHJcbiAgICAgICAgY29sdW1uLmNhbGN1bGF0ZWRXaWR0aCA9IHRoaXMuY2FsY3VsYXRlQ29sdW1uV2lkdGgoY29sdW1uLCBjb2x1bW5zLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNvcnRpbmdDb2x1bW4gPSB0aGlzLmluaXRpYWxTb3J0aW5nO1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxTb3J0aW5nKSB7XHJcbiAgICAgICAgICB0aGlzLnNldENvbHVtblNvcnRpbmcoY29sdW1uLCBzb3J0aW5nQ29sdW1uPy5pZCEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMudGFibGVDb2x1bW5zID0gY29sdW1ucztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzb3J0aW5nU3Vic2NyaWJlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc29ydGluZ1N1YnNjcmlwdGlvbiA9IHRoaXMuc29ydGluZ1NlcnZpY2Uuc29ydGluZyQuc3Vic2NyaWJlKChzb3J0aW5nRXZlbnQpID0+XHJcbiAgICAgIHRoaXMudGFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSVRhYmxlQ29sdW1uRXh0ZW5kZWRNb2RlbCkgPT4gdGhpcy5zZXRDb2x1bW5Tb3J0aW5nKGNvbHVtbiwgc29ydGluZ0V2ZW50Py5pZCkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlQ29sdW1uV2lkdGgoY29sdW1uOiBJVGFibGVDb2x1bW5FeHRlbmRlZE1vZGVsLCBjb2x1bW5zTGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgLy8gZGVmaW5lZCB3aWR0aCBmb3IgYWxsIGNvbHVtbnNcclxuICAgIGlmIChhbGwodGhpcy5jb2x1bW5zLCBjb2x1bW4gPT4gaXNEZWZpbmVkKGNvbHVtbi53aWR0aCkpKVxyXG4gICAgICByZXR1cm4gZ2V0Q3NzTGlrZVZhbHVlKGNvbHVtbi53aWR0aCEsIFVJQ29uc3RhbnRzLkNTU19QRVJDRU5UQUdFKTtcclxuXHJcbiAgICBsZXQgd2lkdGg6IG51bWJlciA9IGNvbHVtbnNMZW5ndGg7XHJcblxyXG4gICAgaWYgKHRoaXMud2luZG93LmlubmVyV2lkdGggPD0gTWVkaWFMaW1pdHMuTW9iaWxlTGFyZ2UpXHJcbiAgICAgIHdpZHRoID0gMTtcclxuICAgIGVsc2UgaWYgKHRoaXMud2luZG93LmlubmVyV2lkdGggPD0gTWVkaWFMaW1pdHMuVGFibGV0KVxyXG4gICAgICB3aWR0aCA9IE1hdGguY2VpbChjb2x1bW5zTGVuZ3RoIC8gMik7XHJcblxyXG4gICAgcmV0dXJuIGdldENhbGNWYWx1ZSh3aWR0aCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtblNvcnRpbmcoY29sdW1uOiBJVGFibGVDb2x1bW5FeHRlbmRlZE1vZGVsLCBzb3J0aW5nSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGNvbHVtbi5zb3J0aW5nPy5lbmFibGVkKSB7XHJcbiAgICAgIGNvbHVtbi5zb3J0aW5nLmFjdGl2ZSA9IGNvbHVtbi5maWVsZCA9PSBzb3J0aW5nSWQ7XHJcblxyXG4gICAgICBpZiAoIWNvbHVtbi5zb3J0aW5nLmFjdGl2ZSlcclxuICAgICAgICBjb2x1bW4uc29ydGluZy5kaXJlY3Rpb24gPSBTb3J0aW5nRGlyZWN0aW9uLkFzY2VuZGluZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXRlbVNlbGVjdGVkKHNlcXVlbmNlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFsbFNlbGVjdGVkXHJcbiAgICAgID8gIWhhc0l0ZW0odGhpcy5zZWxlY3RlZFNlcnZpY2UudW5zZWxlY3RlZEl0ZW1zLCBzZXF1ZW5jZSlcclxuICAgICAgOiBoYXNJdGVtKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLnNlbGVjdGVkSXRlbXMsIHNlcXVlbmNlKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dMb2FkaW5nXCIgY2xhc3M9XCJ0YWJsZS1sb2FkZXJcIj48L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgIDxzZmMtY29sdW1ucy10b2dnbGUgKm5nSWY9XCJjb2x1bW5zVG9nZ2xlXCIgW3Nob3dMYWJlbF09XCJzaG93Q29sdW1uc0xhYmVsXCIgW2hpZGVMYWJlbF09XCJoaWRlQ29sdW1uc0xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8L3NmYy1jb2x1bW5zLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwic2hvd1RvdGFsXCI+e3t0b3RhbExhYmVsfX06IDxzcGFuPnt7dG90YWx9fTwvc3Bhbj48L3A+XHJcbiAgICAgICAgICAgICAgICA8c2ZjLXRvZ2dsZS1zd2l0Y2hlciAqbmdJZj1cImRhdGFUb2dnbGVcIiBbYWN0aXZlXT1cImRhdGFUeXBlID09PSBUYWJsZURhdGFUeXBlLkNhcmRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGVmdE1vZGVsXT1cInRvZ2dsZVN3aXRjaGVyTGVmdE1vZGVsXCIgW3JpZ2h0TW9kZWxdPVwidG9nZ2xlU3dpdGNoZXJSaWdodE1vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EYXRhVHlwZVRvZ2dsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L3NmYy10b2dnbGUtc3dpdGNoZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0NvbHVtbnMgJiYgY29sdW1uc1RvZ2dsZVNlcnZpY2Uuc2hvd1wiIGNsYXNzPVwiY29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgW3N0eWxlLmp1c3RpZnlDb250ZW50XT1cInBvc2l0aW9uXCIgW3N0eWxlLm1pbldpZHRoXT1cImNvbHVtbi5jYWxjdWxhdGVkV2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0YWJsZUNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNmYy1zZWxlY3RhYmxlLXRhYmxlLWNvbHVtbiAqbmdTd2l0Y2hDYXNlPVwiVGFibGVDb2x1bW5UeXBlLlNlbGVjdGFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiYWxsUm93c1NlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZmMtc2VsZWN0YWJsZS10YWJsZS1jb2x1bW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxzZmMtc29ydGluZy1jb2x1bW4gKm5nU3dpdGNoRGVmYXVsdCBbbW9kZWxdPVwiY29sdW1uLnNvcnRpbmchXCIgW2lkXT1cImNvbHVtbi5maWVsZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNmYy10ZW1wbGF0ZS1jb250ZW50IFtyZWZlcmVuY2VDb250ZW50XT1cImNvbHVtbkNvbnRlbnRcIiBbdGVtcGxhdGVzQ29udGVudF09XCJ0ZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlVHlwZV09XCJUYWJsZVRlbXBsYXRlLkNvbHVtblwiIFtkZWZhdWx0Q29udGVudF09XCJkZWZhdWx0Q29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZXh0RGF0YV09XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZmMtdGVtcGxhdGUtY29udGVudD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZmMtZGVmYXVsdC10YWJsZS1jb2x1bW4gW21vZGVsXT1cImNvbHVtblwiPjwvc2ZjLWRlZmF1bHQtdGFibGUtY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L3NmYy1zb3J0aW5nLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxzZmMtZGVsaW1ldGVyICpuZ0lmPVwiZGVsaW1ldGVyXCIgY2xhc3M9XCJ0YWJsZS1kZWxpbWV0ZXJcIj48L3NmYy1kZWxpbWV0ZXI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvd3MtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPHNmYy1sb2FkLWNvbnRhaW5lciBbaWRdPVwibG9hZENvbnRhaW5lcklkXCIgW3R5cGVdPVwiTG9hZENvbnRhaW5lclR5cGUuVGFibGVcIiBbbW9kZWxdPVwibG9hZE1vZGVsXCJcclxuICAgICAgICAgICAgW3BhZ2luYXRpb25Db3VudF09XCJwYWdpbmF0aW9uQ291bnRcIiBbcGFnaW5hdGlvbkxpbWl0c109XCJwYWdpbmF0aW9uTGltaXRzXCIgW3Nob3dMb2FkaW5nXT1cInNob3dMb2FkaW5nXCJcclxuICAgICAgICAgICAgKGhhbmRsZVN1Y2Nlc3MpPVwiaGFuZGxlU3VjY2VzcygkZXZlbnQpXCIgKGhhbmRsZUxvYWRpbmcpPVwibG9hZGluZyA9ICRldmVudFwiIFtlbXB0eUxhYmVsXT1cIm5vdEZvdW5kTGFiZWxcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBpbmRleCBhcyBpO1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZGF0YVR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c2ZjLXRlbXBsYXRlLWNvbnRlbnQgKm5nU3dpdGNoQ2FzZT1cIlRhYmxlRGF0YVR5cGUuUm93c1wiIFtyZWZlcmVuY2VDb250ZW50XT1cInJvd0NvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVzQ29udGVudF09XCJ0ZW1wbGF0ZXNcIiBbdGVtcGxhdGVUeXBlXT1cIlRhYmxlVGVtcGxhdGUuUm93XCIgW2RlZmF1bHRDb250ZW50XT1cImRlZmF1bHRSb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGV4dERhdGFdPVwie21vZGVsOiBpdGVtLCBjb2x1bW5zOiB0YWJsZUNvbHVtbnMsIHBvc2l0aW9uOiBwb3NpdGlvbn1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NmYy10ZW1wbGF0ZS1jb250ZW50PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRSb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZmMtZGVmYXVsdC10YWJsZS1yb3cgW2NvbHVtbnNdPVwidGFibGVDb2x1bW5zXCIgW21vZGVsXT1cIml0ZW1cIiBbcG9zaXRpb25dPVwicG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdE9uQ2xpY2tdPVwic2VsZWN0T25DbGlja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NmYy1kZWZhdWx0LXRhYmxlLXJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8c2ZjLXRlbXBsYXRlLWNvbnRlbnQgKm5nU3dpdGNoQ2FzZT1cIlRhYmxlRGF0YVR5cGUuQ2FyZHNcIiBbcmVmZXJlbmNlQ29udGVudF09XCJjYXJkQ29udGVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZXNDb250ZW50XT1cInRlbXBsYXRlc1wiIFt0ZW1wbGF0ZVR5cGVdPVwiVGFibGVUZW1wbGF0ZS5DYXJkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRDb250ZW50XT1cImRlZmF1bHRDYXJkXCIgW2NvbnRleHREYXRhXT1cInttb2RlbDogaXRlbSwgY29sdW1uczogdGFibGVDb2x1bW5zfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2ZjLXRlbXBsYXRlLWNvbnRlbnQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENhcmQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZmMtZGVmYXVsdC10YWJsZS1jYXJkIFtjb2x1bW5zXT1cInRhYmxlQ29sdW1uc1wiIFttb2RlbF09XCJpdGVtXCIgW3NlbGVjdE9uQ2xpY2tdPVwic2VsZWN0T25DbGlja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NmYy1kZWZhdWx0LXRhYmxlLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9zZmMtbG9hZC1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|