cps-ui-kit 0.73.0 → 0.74.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +69 -22
- package/fesm2015/cps-ui-kit.mjs +71 -21
- package/fesm2015/cps-ui-kit.mjs.map +1 -1
- package/fesm2020/cps-ui-kit.mjs +68 -21
- package/fesm2020/cps-ui-kit.mjs.map +1 -1
- package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +2 -1
- package/package.json +1 -1
|
@@ -61,15 +61,13 @@ export class CpsTreeTableComponent {
|
|
|
61
61
|
this.emptyBodyHeight = '';
|
|
62
62
|
this.lazy = false;
|
|
63
63
|
this.lazyLoadOnInit = true;
|
|
64
|
-
|
|
65
|
-
this.showRowMenu = false; // TODO
|
|
64
|
+
this.showRowMenu = false;
|
|
66
65
|
this.loading = false;
|
|
67
66
|
this.scrollable = true;
|
|
68
67
|
this.scrollHeight = ''; // 'flex' or value+'px'
|
|
69
68
|
this.virtualScroll = false; // works only if scrollable is true
|
|
70
69
|
this.numToleratedItems = 10;
|
|
71
|
-
|
|
72
|
-
this.showRemoveBtnOnSelect = false; // TODO
|
|
70
|
+
this.showRemoveBtnOnSelect = true;
|
|
73
71
|
this.showActionBtn = false;
|
|
74
72
|
this.actionBtnTitle = 'Action';
|
|
75
73
|
this.showColumnsToggle = false; // if external body template is provided, use columnsSelected event emitter
|
|
@@ -242,18 +240,16 @@ export class CpsTreeTableComponent {
|
|
|
242
240
|
this.actionBtnClicked.emit();
|
|
243
241
|
}
|
|
244
242
|
removeSelected() {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
//
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
// );
|
|
256
|
-
// this.selectedRows = [];
|
|
243
|
+
this.selectedRows.forEach((row) => this._removeNodeFromData(row, false));
|
|
244
|
+
this.data = [...this.data];
|
|
245
|
+
this.rowsRemoved.emit(this.selectedRows.map(
|
|
246
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
247
|
+
({ _defaultSortOrder, expanded, partialSelected, ...rest }) => rest));
|
|
248
|
+
this.selectedRows = [];
|
|
249
|
+
setTimeout(() => {
|
|
250
|
+
this._recalcVirtualHeight();
|
|
251
|
+
this.cdRef.markForCheck();
|
|
252
|
+
});
|
|
257
253
|
}
|
|
258
254
|
onEditRowClicked(node) {
|
|
259
255
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -261,14 +257,61 @@ export class CpsTreeTableComponent {
|
|
|
261
257
|
this.editRowBtnClicked.emit(rest);
|
|
262
258
|
}
|
|
263
259
|
onRemoveRowClicked(node) {
|
|
264
|
-
// TODO remove children of nodes
|
|
265
|
-
// find by default sort order in object itself or in nested parent
|
|
266
|
-
// then find the node itself
|
|
267
260
|
this.selectedRows = this.selectedRows.filter((v) => v !== node);
|
|
268
|
-
this.
|
|
261
|
+
this._removeNodeFromData(node);
|
|
269
262
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
270
263
|
const { _defaultSortOrder, expanded, partialSelected, ...rest } = node;
|
|
271
264
|
this.rowsRemoved.emit([rest]);
|
|
265
|
+
setTimeout(() => {
|
|
266
|
+
this._recalcVirtualHeight();
|
|
267
|
+
this.cdRef.markForCheck();
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
_removeNodeFromData(nodeToRemove, single = true) {
|
|
271
|
+
const _findTopSortOrder = (_node) => {
|
|
272
|
+
if (!_node)
|
|
273
|
+
return undefined;
|
|
274
|
+
if (typeof _node._defaultSortOrder === 'number')
|
|
275
|
+
return _node._defaultSortOrder;
|
|
276
|
+
return _findTopSortOrder(_node.parent);
|
|
277
|
+
};
|
|
278
|
+
const _removeFromChildren = (_node) => {
|
|
279
|
+
if (!_node?.children)
|
|
280
|
+
return false;
|
|
281
|
+
const idx = _node.children.indexOf(nodeToRemove);
|
|
282
|
+
if (idx >= 0) {
|
|
283
|
+
_node.children.splice(idx, 1);
|
|
284
|
+
if (_node.children.length === 0) {
|
|
285
|
+
delete _node.children;
|
|
286
|
+
}
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
for (const child of _node.children) {
|
|
291
|
+
if (_removeFromChildren(child))
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
// locate top level node
|
|
298
|
+
const sortOrder = _findTopSortOrder(nodeToRemove);
|
|
299
|
+
if (sortOrder === undefined)
|
|
300
|
+
return;
|
|
301
|
+
const node = this.data.find((n) => n._defaultSortOrder === sortOrder);
|
|
302
|
+
if (!node)
|
|
303
|
+
return;
|
|
304
|
+
// remove the node itself or remove its child
|
|
305
|
+
if (nodeToRemove === node) {
|
|
306
|
+
this.data = this.data.filter((v) => v !== nodeToRemove);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
if (node.children) {
|
|
310
|
+
_removeFromChildren(node);
|
|
311
|
+
if (single)
|
|
312
|
+
this.data = [...this.data];
|
|
313
|
+
}
|
|
314
|
+
}
|
|
272
315
|
}
|
|
273
316
|
toggleAllColumns() {
|
|
274
317
|
this.selectedColumns =
|
|
@@ -355,7 +398,7 @@ export class CpsTreeTableComponent {
|
|
|
355
398
|
}
|
|
356
399
|
}
|
|
357
400
|
CpsTreeTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTreeTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
358
|
-
CpsTreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsTreeTableComponent, isStandalone: true, selector: "cps-tree-table", inputs: { data: "data", columns: "columns", colHeaderName: "colHeaderName", colFieldName: "colFieldName", size: "size", striped: "striped", bordered: "bordered", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", selectable: "selectable", sortable: "sortable", sortMode: "sortMode", customSort: "customSort", hasToolbar: "hasToolbar", toolbarSize: "toolbarSize", toolbarTitle: "toolbarTitle", rowHover: "rowHover", showGlobalFilter: "showGlobalFilter", globalFilterPlaceholder: "globalFilterPlaceholder", globalFilterFields: "globalFilterFields", paginator: "paginator", alwaysShowPaginator: "alwaysShowPaginator", rowsPerPageOptions: "rowsPerPageOptions", first: "first", rows: "rows", resetPageOnRowsChange: "resetPageOnRowsChange", resetPageOnSort: "resetPageOnSort", emptyMessage: "emptyMessage", emptyBodyHeight: "emptyBodyHeight", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", loading: "loading", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", numToleratedItems: "numToleratedItems", showActionBtn: "showActionBtn", actionBtnTitle: "actionBtnTitle", showColumnsToggle: "showColumnsToggle" }, outputs: { actionBtnClicked: "actionBtnClicked", columnsSelected: "columnsSelected", pageChanged: "pageChanged", lazyLoaded: "lazyLoaded", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed", nodeSelected: "nodeSelected", nodeUnselected: "nodeUnselected", sorted: "sorted", editRowBtnClicked: "editRowBtnClicked", rowsRemoved: "rowsRemoved", customSortFunction: "customSortFunction" }, providers: [
|
|
401
|
+
CpsTreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsTreeTableComponent, isStandalone: true, selector: "cps-tree-table", inputs: { data: "data", columns: "columns", colHeaderName: "colHeaderName", colFieldName: "colFieldName", size: "size", striped: "striped", bordered: "bordered", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", selectable: "selectable", sortable: "sortable", sortMode: "sortMode", customSort: "customSort", hasToolbar: "hasToolbar", toolbarSize: "toolbarSize", toolbarTitle: "toolbarTitle", rowHover: "rowHover", showGlobalFilter: "showGlobalFilter", globalFilterPlaceholder: "globalFilterPlaceholder", globalFilterFields: "globalFilterFields", paginator: "paginator", alwaysShowPaginator: "alwaysShowPaginator", rowsPerPageOptions: "rowsPerPageOptions", first: "first", rows: "rows", resetPageOnRowsChange: "resetPageOnRowsChange", resetPageOnSort: "resetPageOnSort", emptyMessage: "emptyMessage", emptyBodyHeight: "emptyBodyHeight", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", showRowMenu: "showRowMenu", loading: "loading", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", numToleratedItems: "numToleratedItems", showRemoveBtnOnSelect: "showRemoveBtnOnSelect", showActionBtn: "showActionBtn", actionBtnTitle: "actionBtnTitle", showColumnsToggle: "showColumnsToggle" }, outputs: { actionBtnClicked: "actionBtnClicked", columnsSelected: "columnsSelected", pageChanged: "pageChanged", lazyLoaded: "lazyLoaded", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed", nodeSelected: "nodeSelected", nodeUnselected: "nodeUnselected", sorted: "sorted", editRowBtnClicked: "editRowBtnClicked", rowsRemoved: "rowsRemoved", customSortFunction: "customSortFunction" }, providers: [
|
|
359
402
|
TreeTableService,
|
|
360
403
|
{
|
|
361
404
|
provide: TreeTable,
|
|
@@ -454,6 +497,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
454
497
|
type: Input
|
|
455
498
|
}], lazyLoadOnInit: [{
|
|
456
499
|
type: Input
|
|
500
|
+
}], showRowMenu: [{
|
|
501
|
+
type: Input
|
|
457
502
|
}], loading: [{
|
|
458
503
|
type: Input
|
|
459
504
|
}], scrollable: [{
|
|
@@ -464,6 +509,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
464
509
|
type: Input
|
|
465
510
|
}], numToleratedItems: [{
|
|
466
511
|
type: Input
|
|
512
|
+
}], showRemoveBtnOnSelect: [{
|
|
513
|
+
type: Input
|
|
467
514
|
}], showActionBtn: [{
|
|
468
515
|
type: Input
|
|
469
516
|
}], actionBtnTitle: [{
|
|
@@ -510,4 +557,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
510
557
|
type: ViewChild,
|
|
511
558
|
args: ['primengTreeTable', { static: true }]
|
|
512
559
|
}] } });
|
|
513
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNoQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFB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LGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQU9HLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHQSxlQUFlO3NCQURyQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSW5DLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJbEMsb0JBQW9CO3NCQUQxQixZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXhDLFlBQVk7c0JBRGxCLFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJdkMsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBUcmVlVGFibGUsXG4gIFRyZWVUYWJsZVNlcnZpY2UsXG4gIFRyZWVUYWJsZU1vZHVsZVxufSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAncHJpbWVuZy9kb20nO1xuaW1wb3J0IHsgQ3BzSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtaW5wdXQvY3BzLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9jcHMtYnV0dG9uL2Nwcy1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc01lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtbWVudS9jcHMtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmluZCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1zZWxlY3QvY3BzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBbmdsZURvdWJsZUxlZnRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvdWJsZWxlZnQnO1xuaW1wb3J0IHsgQW5nbGVMZWZ0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVsZWZ0JztcbmltcG9ydCB7IEFuZ2xlUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZXJpZ2h0JztcbmltcG9ydCB7IEFuZ2xlRG91YmxlUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvdWJsZXJpZ2h0JztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJuYWwvc2l6ZS11dGlscyc7XG5pbXBvcnQgeyBDcHNMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtbG9hZGVyL2Nwcy1sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNvcnRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IENwc1RyZWVUYWJsZUNvbHVtblNvcnRhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLWNvbHVtbi1zb3J0YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVHJlZVRhYmxlVW5zb3J0RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2ludGVybmFsL3RyZWUtdGFibGUtdW5zb3J0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUYWJsZVJvd01lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtdGFibGUvdGFibGUtcm93LW1lbnUvdGFibGUtcm93LW1lbnUuY29tcG9uZW50JztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyZWVUYWJsZUZhY3RvcnkodGFibGVDb21wb25lbnQ6IENwc1RyZWVUYWJsZUNvbXBvbmVudCkge1xuICByZXR1cm4gdGFibGVDb21wb25lbnQucHJpbWVuZ1RyZWVUYWJsZTtcbn1cblxuZXhwb3J0IHR5cGUgQ3BzVHJlZVRhYmxlU2l6ZSA9ICdzbWFsbCcgfCAnbm9ybWFsJyB8ICdsYXJnZSc7XG5leHBvcnQgdHlwZSBDcHNUcmVlVGFibGVUb29sYmFyU2l6ZSA9ICdzbWFsbCcgfCAnbm9ybWFsJztcbmV4cG9ydCB0eXBlIENwc1RyZWVUYWJsZVNvcnRNb2RlID0gJ3NpbmdsZScgfCAnbXVsdGlwbGUnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3BzLXRyZWUtdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmVlVGFibGVNb2R1bGUsXG4gICAgQ3BzSW5wdXRDb21wb25lbnQsXG4gICAgQ3BzQnV0dG9uQ29tcG9uZW50LFxuICAgIENwc01lbnVDb21wb25lbnQsXG4gICAgQ3BzSWNvbkNvbXBvbmVudCxcbiAgICBDcHNTZWxlY3RDb21wb25lbnQsXG4gICAgQ3BzTG9hZGVyQ29tcG9uZW50LFxuICAgIEFuZ2xlRG91YmxlTGVmdEljb24sXG4gICAgQW5nbGVMZWZ0SWNvbixcbiAgICBBbmdsZVJpZ2h0SWNvbixcbiAgICBBbmdsZURvdWJsZVJpZ2h0SWNvbixcbiAgICBDcHNUcmVlVGFibGVDb2x1bW5Tb3J0YWJsZURpcmVjdGl2ZSxcbiAgICBUcmVlVGFibGVVbnNvcnREaXJlY3RpdmUsXG4gICAgVGFibGVSb3dNZW51Q29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jcHMtdHJlZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nwcy10cmVlLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIFRyZWVUYWJsZVNlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogVHJlZVRhYmxlLFxuICAgICAgdXNlRmFjdG9yeTogdHJlZVRhYmxlRmFjdG9yeSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgZGVwczogW0Nwc1RyZWVUYWJsZUNvbXBvbmVudF1cbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ3BzVHJlZVRhYmxlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWRcbntcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG4gIEBJbnB1dCgpIGNvbEhlYWRlck5hbWUgPSAnaGVhZGVyJztcbiAgQElucHV0KCkgY29sRmllbGROYW1lID0gJ2ZpZWxkJztcblxuICBASW5wdXQoKSBzaXplOiBDcHNUcmVlVGFibGVTaXplID0gJ25vcm1hbCc7XG4gIEBJbnB1dCgpIHN0cmlwZWQgPSB0cnVlO1xuICBASW5wdXQoKSBib3JkZXJlZCA9IHRydWU7XG4gIEBJbnB1dCgpIHRhYmxlU3R5bGUgPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHRhYmxlU3R5bGVDbGFzcyA9ICcnO1xuICBASW5wdXQoKSBzZWxlY3RhYmxlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc29ydGFibGUgPSBmYWxzZTsgLy8gbWFrZXMgYWxsIHNvcnRhYmxlIGlmIGNvbHVtbnMgYXJlIHByb3ZpZGVkXG4gIEBJbnB1dCgpIHNvcnRNb2RlOiBDcHNUcmVlVGFibGVTb3J0TW9kZSA9ICdzaW5nbGUnO1xuICBASW5wdXQoKSBjdXN0b21Tb3J0ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGFzVG9vbGJhciA9IHRydWU7XG4gIEBJbnB1dCgpIHRvb2xiYXJTaXplOiBDcHNUcmVlVGFibGVUb29sYmFyU2l6ZSA9ICdub3JtYWwnO1xuICBASW5wdXQoKSB0b29sYmFyVGl0bGUgPSAnJztcblxuICBASW5wdXQoKSByb3dIb3ZlciA9IHRydWU7XG5cbiAgQElucHV0KCkgc2hvd0dsb2JhbEZpbHRlciA9IHRydWU7XG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlclBsYWNlaG9sZGVyID0gJ1NlYXJjaCc7XG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuICBASW5wdXQoKSBwYWdpbmF0b3IgPSBmYWxzZTtcbiAgQElucHV0KCkgYWx3YXlzU2hvd1BhZ2luYXRvciA9IHRydWU7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbXTtcbiAgQElucHV0KCkgZmlyc3QgPSAwO1xuICBASW5wdXQoKSByb3dzID0gMDtcbiAgQElucHV0KCkgcmVzZXRQYWdlT25Sb3dzQ2hhbmdlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlc2V0UGFnZU9uU29ydCA9IHRydWU7XG5cbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlID0gJ05vIGRhdGEnO1xuICBASW5wdXQoKSBlbXB0eUJvZHlIZWlnaHQ6IG51bWJlciB8IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIGxhenkgPSBmYWxzZTtcbiAgQElucHV0KCkgbGF6eUxvYWRPbkluaXQgPSB0cnVlO1xuXG4gIC8vIEBJbnB1dCgpIHNob3dSb3dNZW51ID0gZmFsc2U7IC8vIFRPRE9cbiAgc2hvd1Jvd01lbnUgPSBmYWxzZTsgLy8gVE9ET1xuXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzY3JvbGxhYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJyc7IC8vICdmbGV4JyBvciB2YWx1ZSsncHgnXG4gIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTsgLy8gd29ya3Mgb25seSBpZiBzY3JvbGxhYmxlIGlzIHRydWVcbiAgQElucHV0KCkgbnVtVG9sZXJhdGVkSXRlbXMgPSAxMDtcblxuICAvLyBASW5wdXQoKSBzaG93UmVtb3ZlQnRuT25TZWxlY3QgPSBmYWxzZTsgLy8gVE9ET1xuICBzaG93UmVtb3ZlQnRuT25TZWxlY3QgPSBmYWxzZTsgLy8gVE9ET1xuXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdG4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWN0aW9uQnRuVGl0bGUgPSAnQWN0aW9uJztcblxuICBASW5wdXQoKSBzaG93Q29sdW1uc1RvZ2dsZSA9IGZhbHNlOyAvLyBpZiBleHRlcm5hbCBib2R5IHRlbXBsYXRlIGlzIHByb3ZpZGVkLCB1c2UgY29sdW1uc1NlbGVjdGVkIGV2ZW50IGVtaXR0ZXJcblxuICBAT3V0cHV0KCkgYWN0aW9uQnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNvbHVtbnNTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBhbnkgfVtdPigpO1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGxhenlMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG5vZGVFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbm9kZUNvbGxhcHNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbm9kZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBub2RlVW5zZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc29ydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBlZGl0Um93QnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcm93c1JlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBjdXN0b20gc29ydGluZy4gY3VzdG9tU29ydCBtdXN0IGJlIHRydWUuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBzb3J0IG1ldGEuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGN1c3RvbVNvcnRGdW5jdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAQ29udGVudENoaWxkKCd0b29sYmFyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyB0b29sYmFyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ25lc3RlZEhlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgbmVzdGVkSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2JvZHknLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIGJvZHlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgncHJpbWVuZ1RyZWVUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaW1lbmdUcmVlVGFibGUhOiBUcmVlVGFibGU7XG5cbiAgc2VsZWN0ZWRDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10gPSBbXTtcblxuICByb3dPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfVtdID0gW107XG5cbiAgc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG4gIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZSA9IDA7XG4gIGRlZlNjcm9sbEhlaWdodFB4ID0gMDtcbiAgZGVmU2Nyb2xsSGVpZ2h0ID0gJyc7XG5cbiAgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICBoZWFkZXJCb3g6IGFueTtcbiAgc2Nyb2xsYWJsZUJvZHk6IGFueTtcbiAgc2Nyb2xsYmFyV2lkdGggPSAwO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gZW50cnkudGFyZ2V0O1xuICAgICAgICBjb25zdCBzYmFyVmlzaWJsZSA9IGJvZHkuc2Nyb2xsSGVpZ2h0ID4gYm9keS5jbGllbnRIZWlnaHQ7XG5cbiAgICAgICAgbGV0IHdTY3JvbGwgPSBzYmFyVmlzaWJsZSA/IHRoaXMuc2Nyb2xsYmFyV2lkdGggOiAwO1xuICAgICAgICBpZiAod1Njcm9sbCA+IDApIHdTY3JvbGwgLT0gMTtcblxuICAgICAgICB0aGlzLmhlYWRlckJveC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHt3U2Nyb2xsfXB4YDtcbiAgICAgICAgdGhpcy5oZWFkZXJCb3guc3R5bGUuYm9yZGVyUmlnaHQgPVxuICAgICAgICAgIHdTY3JvbGwgPiAwID8gJzFweCBzb2xpZCAjZDdkNWQ1JyA6ICd1bnNldCc7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZW1wdHlCb2R5SGVpZ2h0ID0gY29udmVydFNpemUodGhpcy5lbXB0eUJvZHlIZWlnaHQpO1xuICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSB0aGlzLnZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID0gdGhpcy5zY3JvbGxIZWlnaHQ7XG5cbiAgICAgIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUuYmluZCh0aGlzKSk7XG5cbiAgICAgIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCAhPT0gJ2ZsZXgnKSB7XG4gICAgICAgIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0UHggPSBwYXJzZUludCh0aGlzLnNjcm9sbEhlaWdodCwgMTApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgaWYgKHRoaXMucm93c1BlclBhZ2VPcHRpb25zLmxlbmd0aCA8IDEpXG4gICAgICAgIHRoaXMucm93c1BlclBhZ2VPcHRpb25zID0gWzUsIDEwLCAyNSwgNTBdO1xuXG4gICAgICBpZiAoIXRoaXMucm93cykgdGhpcy5yb3dzID0gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF07XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5pbmNsdWRlcyh0aGlzLnJvd3MpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3dzUGVyUGFnZU9wdGlvbnMgbXVzdCBpbmNsdWRlIHJvd3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJvd09wdGlvbnMgPSB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5tYXAoKHYpID0+ICh7XG4gICAgICAgIGxhYmVsOiAnJyArIHYsXG4gICAgICAgIHZhbHVlOiB2XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zaG93R2xvYmFsRmlsdGVyICYmXG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcz8ubGVuZ3RoIDwgMSAmJlxuICAgICAgdGhpcy5kYXRhPy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVswXS5kYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbGFibGVCb2R5ID0gdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcucC10cmVldGFibGUtc2Nyb2xsYWJsZS1ib2R5J1xuICAgICk7XG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZUJvZHkpIHtcbiAgICAgIHRoaXMuaGVhZGVyQm94ID0gdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5wLXRyZWV0YWJsZS1zY3JvbGxhYmxlLWhlYWRlci1ib3gnXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgICAgICB0aGlzLmRlZlNjcm9sbEhlaWdodFB4ID0gdGhpcy5zY3JvbGxhYmxlQm9keS5jbGllbnRIZWlnaHQ7XG5cbiAgICAgIGlmICh0aGlzLmhlYWRlckJveCkge1xuICAgICAgICB0aGlzLnNjcm9sbGJhcldpZHRoID0gRG9tSGFuZGxlci5jYWxjdWxhdGVTY3JvbGxiYXJXaWR0aCgpO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5zY3JvbGxhYmxlQm9keSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsIHx8IHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplKSByZXR1cm47XG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPVxuICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlPy5lbD8ubmF0aXZlRWxlbWVudFxuICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy5wLXRyZWV0YWJsZS10Ym9keScpXG4gICAgICAgID8ucXVlcnlTZWxlY3RvcigndHInKT8uY2xpZW50SGVpZ2h0IHx8IDA7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uV2luZG93UmVzaXplLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25XaW5kb3dSZXNpemUoKSB7XG4gICAgdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCA9IHRoaXMuc2Nyb2xsYWJsZUJvZHkuY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgZ2V0IHN0eWxlQ2xhc3MoKSB7XG4gICAgY29uc3QgY2xhc3Nlc0xpc3QgPSBbXTtcbiAgICBzd2l0Y2ggKHRoaXMuc2l6ZSkge1xuICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdwLXRyZWV0YWJsZS1zbScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtbGcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1Rvb2xiYXIpIHtcbiAgICAgIHN3aXRjaCAodGhpcy50b29sYmFyU2l6ZSkge1xuICAgICAgICBjYXNlICdzbWFsbCc6XG4gICAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgnY3BzLXRiYXItc21hbGwnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbm9ybWFsJzpcbiAgICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdjcHMtdGJhci1ub3JtYWwnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaXBlZCkge1xuICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtc3RyaXBlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib3JkZXJlZCkge1xuICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtZ3JpZGxpbmVzJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Nyb2xsSGVpZ2h0ICYmICF0aGlzLmxvYWRpbmcgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ2Nwcy10cmVldGFibGUtYm90dG9tLWJvcmRlcmVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXNMaXN0LmpvaW4oJyAnKTtcbiAgfVxuXG4gIG9uU29ydEZ1bmN0aW9uKGV2ZW50OiBTb3J0RXZlbnQpIHtcbiAgICB0aGlzLmN1c3RvbVNvcnRGdW5jdGlvbi5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKSB7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCkge1xuICAgICAgY29uc3QgaXRlbXNMZW4gPSB0aGlzLnByaW1lbmdUcmVlVGFibGUuc2VyaWFsaXplZFZhbHVlLmxlbmd0aDtcbiAgICAgIGlmIChpdGVtc0xlbiA8IDEpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLmVtcHR5Qm9keUhlaWdodFxuICAgICAgICAgID8gKGBjYWxjKCR7dGhpcy5lbXB0eUJvZHlIZWlnaHR9ICsgMXB4KWAgYXMgc3RyaW5nKVxuICAgICAgICAgIDogdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKyAxICsgJ3B4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1ckhlaWdodCA9IHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplICogaXRlbXNMZW4gKyAyO1xuICAgICAgICBpZiAodGhpcy5kZWZTY3JvbGxIZWlnaHQgPT09ICdmbGV4Jykge1xuICAgICAgICAgIGlmIChjdXJIZWlnaHQgPj0gdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSAnZmxleCc7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxhYmxlQm9keS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSBNYXRoLm1pbih0aGlzLmRlZlNjcm9sbEhlaWdodFB4LCBjdXJIZWlnaHQpICsgJ3B4JztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkZpbHRlckdsb2JhbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmZpbHRlckdsb2JhbCh2YWx1ZSwgJ2NvbnRhaW5zJyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICBvbkNsaWNrQWN0aW9uQnRuKCkge1xuICAgIHRoaXMuYWN0aW9uQnRuQ2xpY2tlZC5lbWl0KCk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICAvLyBUT0RPXG4gICAgLy8gY29uc3QgaW5kZXhlczogbnVtYmVyW10gPSB0aGlzLnByaW1lbmdUcmVlVGFibGUuc2VsZWN0aW9uLm1hcChcbiAgICAvLyAgIChzOiBhbnkpID0+IHMuX2RlZmF1bHRTb3J0T3JkZXJcbiAgICAvLyApO1xuICAgIC8vIGluZGV4ZXMuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgIC8vIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoXG4gICAgLy8gICAodjogYW55KSA9PiAhaW5kZXhlcy5pbmNsdWRlcyh2Ll9kZWZhdWx0U29ydE9yZGVyKVxuICAgIC8vICk7XG4gICAgLy8gdGhpcy5yb3dzUmVtb3ZlZC5lbWl0KFxuICAgIC8vICAgdGhpcy5zZWxlY3RlZFJvd3MubWFwKCh7IF9kZWZhdWx0U29ydE9yZGVyLCAuLi5yZXN0IH0pID0+IHJlc3QpXG4gICAgLy8gKTtcbiAgICAvLyB0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuICB9XG5cbiAgb25FZGl0Um93Q2xpY2tlZChub2RlOiBhbnkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3QgeyBfZGVmYXVsdFNvcnRPcmRlciwgZXhwYW5kZWQsIHBhcnRpYWxTZWxlY3RlZCwgLi4ucmVzdCB9ID0gbm9kZTtcbiAgICB0aGlzLmVkaXRSb3dCdG5DbGlja2VkLmVtaXQocmVzdCk7XG4gIH1cblxuICBvblJlbW92ZVJvd0NsaWNrZWQobm9kZTogYW55KSB7XG4gICAgLy8gVE9ETyByZW1vdmUgY2hpbGRyZW4gb2Ygbm9kZXNcblxuICAgIC8vIGZpbmQgYnkgZGVmYXVsdCBzb3J0IG9yZGVyIGluIG9iamVjdCBpdHNlbGYgb3IgaW4gbmVzdGVkIHBhcmVudFxuICAgIC8vIHRoZW4gZmluZCB0aGUgbm9kZSBpdHNlbGZcbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IHRoaXMuc2VsZWN0ZWRSb3dzLmZpbHRlcigodjogYW55KSA9PiB2ICE9PSBub2RlKTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IG5vZGUpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7IF9kZWZhdWx0U29ydE9yZGVyLCBleHBhbmRlZCwgcGFydGlhbFNlbGVjdGVkLCAuLi5yZXN0IH0gPSBub2RlO1xuICAgIHRoaXMucm93c1JlbW92ZWQuZW1pdChbcmVzdF0pO1xuICB9XG5cbiAgdG9nZ2xlQWxsQ29sdW1ucygpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPCB0aGlzLmNvbHVtbnMubGVuZ3RoID8gdGhpcy5jb2x1bW5zIDogW107XG4gICAgdGhpcy5jb2x1bW5zU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkQ29sdW1ucyk7XG4gIH1cblxuICBpc0NvbHVtblNlbGVjdGVkKGNvbDogYW55KSB7XG4gICAgcmV0dXJuICEhZmluZCh0aGlzLnNlbGVjdGVkQ29sdW1ucywgKGl0ZW0pID0+IGlzRXF1YWwoaXRlbSwgY29sKSk7XG4gIH1cblxuICBvblJvd3NQZXJQYWdlQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5yZXNldFBhZ2VPblJvd3NDaGFuZ2UpIHtcbiAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5maXJzdCA9IDA7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlUGFnZSh0aGlzLmdldFBhZ2UoKSk7XG4gIH1cblxuICBnZXRQYWdlQ291bnQoKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnByaW1lbmdUcmVlVGFibGUudG90YWxSZWNvcmRzIC8gdGhpcy5yb3dzKTtcbiAgfVxuXG4gIGdldFBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlyc3QgLyB0aGlzLnJvd3MpO1xuICB9XG5cbiAgY2hhbmdlUGFnZShwOiBudW1iZXIpIHtcbiAgICBjb25zdCBwYyA9IE1hdGguY2VpbCh0aGlzLmdldFBhZ2VDb3VudCgpKTtcblxuICAgIGlmIChwID49IDAgJiYgcCA8IHBjKSB7XG4gICAgICB0aGlzLmZpcnN0ID0gdGhpcy5yb3dzICogcDtcbiAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5vblBhZ2VDaGFuZ2Uoe1xuICAgICAgICBmaXJzdDogdGhpcy5maXJzdCxcbiAgICAgICAgcm93czogdGhpcy5yb3dzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlyc3QgPSBldmVudC5maXJzdDtcbiAgICB0aGlzLnJvd3MgPSBldmVudC5yb3dzO1xuXG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBwYWdlOiB0aGlzLmdldFBhZ2UoKSxcbiAgICAgIGZpcnN0OiB0aGlzLmZpcnN0LFxuICAgICAgcm93czogdGhpcy5yb3dzLFxuICAgICAgcGFnZUNvdW50OiBNYXRoLmNlaWwodGhpcy5nZXRQYWdlQ291bnQoKSlcbiAgICB9O1xuXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHN0YXRlKTtcbiAgfVxuXG4gIG9uTGF6eUxvYWRlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5sYXp5TG9hZGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Ob2RlRXhwYW5kZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm9kZUV4cGFuZGVkLmVtaXQoZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uTm9kZUNvbGxhcHNlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5ub2RlQ29sbGFwc2VkLmVtaXQoZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uTm9kZVNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVTZWxlY3RlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uTm9kZVVuc2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm9kZVVuc2VsZWN0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvblNvcnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc29ydGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25TZWxlY3RDb2x1bW4oY29sOiBhbnkpIHtcbiAgICBsZXQgcmVzID0gW10gYXMgYW55O1xuICAgIGlmICh0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoY29sKSkge1xuICAgICAgcmVzID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmlsdGVyKCh2OiBhbnkpID0+ICFpc0VxdWFsKHYsIGNvbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgodjogYW55KSA9PiBpc0VxdWFsKHYsIG8pKSB8fFxuICAgICAgICAgIGlzRXF1YWwoY29sLCBvKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXMucHVzaChvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcmVzO1xuICAgIHRoaXMuY29sdW1uc1NlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZENvbHVtbnMpO1xuICB9XG59XG4iLCI8cC10cmVlVGFibGVcbiAgI3ByaW1lbmdUcmVlVGFibGVcbiAgdHRXaXRoVW5zb3J0XG4gIFtuZ0NsYXNzXT1cInsgJ2Nwcy10cmVldGFibGUtbG9hZGluZyc6IGxvYWRpbmcgfVwiXG4gIFt2YWx1ZV09XCJkYXRhXCJcbiAgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiXG4gIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcbiAgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXG4gIFt2aXJ0dWFsU2Nyb2xsSXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplXCJcbiAgW3ZpcnR1YWxTY3JvbGxPcHRpb25zXT1cIntcbiAgICBudW1Ub2xlcmF0ZWRJdGVtczogbnVtVG9sZXJhdGVkSXRlbXMsXG4gICAgYXV0b1NpemU6IGZhbHNlXG4gIH1cIlxuICBbY29sdW1uc109XCJzZWxlY3RlZENvbHVtbnNcIlxuICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgW3Jvd0hvdmVyXT1cInJvd0hvdmVyXCJcbiAgW2xhenldPVwibGF6eVwiXG4gIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZFJvd3NcIlxuICBjb21wYXJlU2VsZWN0aW9uQnk9XCJlcXVhbHNcIlxuICBbbGF6eUxvYWRPbkluaXRdPVwibGF6eUxvYWRPbkluaXRcIlxuICBbc3R5bGVDbGFzc109XCJzdHlsZUNsYXNzXCJcbiAgW3RhYmxlU3R5bGVdPVwidGFibGVTdHlsZVwiXG4gIFt0YWJsZVN0eWxlQ2xhc3NdPVwidGFibGVTdHlsZUNsYXNzXCJcbiAgW2N1c3RvbVNvcnRdPVwiY3VzdG9tU29ydFwiXG4gIFtzb3J0TW9kZV09XCJzb3J0TW9kZVwiXG4gIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcbiAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxuICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICBbYWx3YXlzU2hvd1BhZ2luYXRvcl09XCJhbHdheXNTaG93UGFnaW5hdG9yXCJcbiAgW3Jvd3NdPVwicm93c1wiXG4gIFtmaXJzdF09XCJmaXJzdFwiXG4gIFtyZXNldFBhZ2VPblNvcnRdPVwicmVzZXRQYWdlT25Tb3J0XCJcbiAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gb2Yge3RvdGFsUmVjb3Jkc31cIlxuICAob25QYWdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgKG9uU29ydCk9XCJvblNvcnQoJGV2ZW50KVwiXG4gIChvbkxhenlMb2FkKT1cIm9uTGF6eUxvYWRlZCgkZXZlbnQpXCJcbiAgKHNvcnRGdW5jdGlvbik9XCJvblNvcnRGdW5jdGlvbigkZXZlbnQpXCJcbiAgKG9uTm9kZUV4cGFuZCk9XCJvbk5vZGVFeHBhbmRlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZUNvbGxhcHNlKT1cIm9uTm9kZUNvbGxhcHNlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZVNlbGVjdCk9XCJvbk5vZGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZVVuc2VsZWN0KT1cIm9uTm9kZVVuc2VsZWN0ZWQoJGV2ZW50KVwiPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiICpuZ0lmPVwiaGFzVG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sYmFyVGVtcGxhdGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRvb2xiYXJUZW1wbGF0ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1sZWZ0XCI+XG4gICAgICAgIDxkaXY+e3sgdG9vbGJhclRpdGxlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R2xvYmFsRmlsdGVyXCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItZ2xvYmFsLWZpbHRlclwiPlxuICAgICAgICAgIDxjcHMtaW5wdXRcbiAgICAgICAgICAgIHByZWZpeEljb249XCJzZWFyY2hcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdsb2JhbEZpbHRlclBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25GaWx0ZXJHbG9iYWwoJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwidG9vbGJhclNpemUgPT09ICdzbWFsbCcgPyAndW5kZXJsaW5lZCcgOiAnb3V0bGluZWQnXCJcbiAgICAgICAgICAgIFtoaWRlRGV0YWlsc109XCJ0cnVlXCI+XG4gICAgICAgICAgPC9jcHMtaW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXJpZ2h0XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dSZW1vdmVCdG5PblNlbGVjdCAmJiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItcmVtb3ZlLWJ0blwiPlxuICAgICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgICBsYWJlbD1cIlJlbW92ZVwiXG4gICAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICAgIHR5cGU9XCJib3JkZXJsZXNzXCJcbiAgICAgICAgICAgIGljb249XCJyZW1vdmVcIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlU2VsZWN0ZWQoKVwiPlxuICAgICAgICAgIDwvY3BzLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWN0aW9uQnRuXCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItYWN0aW9uLWJ0blwiPlxuICAgICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgICBbbGFiZWxdPVwiYWN0aW9uQnRuVGl0bGVcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DbGlja0FjdGlvbkJ0bigpXCI+XG4gICAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0NvbHVtbnNUb2dnbGUgJiYgY29sdW1ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1jb2x0b2dnbGUtYnRuXCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwiY29sdW1uc1wiXG4gICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJlcGFyZWQtbGlnaHRlbjFcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNvbFRvZ2dsZU1lbnUudG9nZ2xlKCRldmVudClcIj48L2Nwcy1pY29uPlxuICAgICAgICAgIDxjcHMtbWVudSAjY29sVG9nZ2xlTWVudSBbd2l0aEFycm93XT1cImZhbHNlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0gc2VsZWN0LWFsbC1vcHRpb25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hbGxzZWxlY3RlZF09XCJzZWxlY3RlZENvbHVtbnMubGVuZ3RoID09PSBjb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbENvbHVtbnMoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWNoZWNrXCI+IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPlNob3cgYWxsIGNvbHVtbnM8L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0Q29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc0NvbHVtblNlbGVjdGVkKGNvbClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbS1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbS1jaGVja1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgY29sW2NvbEhlYWRlck5hbWVdXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9jcHMtbWVudT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgKm5nSWY9XCJuZXN0ZWRIZWFkZXJUZW1wbGF0ZVwiIGxldC1jb2x1bW5zPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICBuZXN0ZWRIZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICRpbXBsaWNpdDogY29sdW1ucyxcbiAgICAgICAgfVxuICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiICpuZ0lmPVwiIW5lc3RlZEhlYWRlclRlbXBsYXRlXCIgbGV0LWNvbHVtbnM+XG4gICAgPHRyPlxuICAgICAgPCEtLSA8dGggc3R5bGU9XCJ3aWR0aDogM3JlbVwiICpuZ0lmPVwicmVvcmRlcmFibGVSb3dzXCI+PC90aD4gLS0+XG4gICAgICA8dGggc3R5bGU9XCJ3aWR0aDogNTVweFwiICpuZ0lmPVwic2VsZWN0YWJsZVwiPlxuICAgICAgICA8cC10cmVlVGFibGVIZWFkZXJDaGVja2JveD48L3AtdHJlZVRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICA8L3RoPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1ucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoZWFkZXJUZW1wbGF0ZSAmJiBjb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNvcnRhYmxlXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgW2Nwc1RUQ29sU29ydGFibGVdPVwiY29sW2NvbEZpZWxkTmFtZV1cIj5cbiAgICAgICAgICAgIHt7IGNvbFtjb2xIZWFkZXJOYW1lXSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNvcnRhYmxlXCI+XG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAge3sgY29sW2NvbEhlYWRlck5hbWVdIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0aCBjbGFzcz1cImNwcy10cmVldGFibGUtcm93LW1lbnUtY2VsbFwiICpuZ0lmPVwic2hvd1Jvd01lbnVcIj48L3RoPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1yb3dOb2RlXG4gICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICA8dHJcbiAgICAgIFt0dFJvd109XCJyb3dOb2RlXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Nwcy10cmVldGFibGUtcm93LXNlbGVjdGVkJzpcbiAgICAgICAgICBzZWxlY3RhYmxlICYmIHByaW1lbmdUcmVlVGFibGUuaXNTZWxlY3RlZChyb3dOb2RlLm5vZGUpXG4gICAgICB9XCI+XG4gICAgICA8IS0tIDx0ZCAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZS1jZWxsXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZVwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT7imLA8L3NwYW4+XG4gICAgICA8L3RkPiAtLT5cbiAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiA1NXB4XCIgKm5nSWY9XCJzZWxlY3RhYmxlXCI+XG4gICAgICAgIDxwLXRyZWVUYWJsZUNoZWNrYm94IFt2YWx1ZV09XCJyb3dOb2RlXCI+PC9wLXRyZWVUYWJsZUNoZWNrYm94PlxuICAgICAgPC90ZD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJib2R5VGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBib2R5VGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogcm93Tm9kZSxcbiAgICAgICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgICAgICByb3dEYXRhOiByb3dEYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWJvZHlUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlciBbcm93Tm9kZV09XCJyb3dOb2RlXCIgKm5nSWY9XCJpID09PSAwXCI+XG4gICAgICAgICAgICA8L3AtdHJlZVRhYmxlVG9nZ2xlcj5cbiAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sW2NvbEZpZWxkTmFtZV1dIH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0ZCAqbmdJZj1cInNob3dSb3dNZW51XCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXJvdy1tZW51LWNlbGxcIj5cbiAgICAgICAgPHRhYmxlLXJvdy1tZW51XG4gICAgICAgICAgKGVkaXRSb3dCdG5DbGlja2VkKT1cIm9uRWRpdFJvd0NsaWNrZWQocm93Tm9kZS5ub2RlKVwiXG4gICAgICAgICAgKHJlbW92ZVJvd0J0bkNsaWNrZWQpPVwib25SZW1vdmVSb3dDbGlja2VkKHJvd05vZGUubm9kZSlcIj5cbiAgICAgICAgPC90YWJsZS1yb3ctbWVudT5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgIDx0cj5cbiAgICAgIDx0ZFxuICAgICAgICBjb2xzcGFuPVwiMTAwXCJcbiAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWVtcHR5LW1lc3NhZ2UtdGRcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7IGhlaWdodDogZW1wdHlCb2R5SGVpZ2h0IH1cIj5cbiAgICAgICAge3sgZW1wdHlNZXNzYWdlIH19XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsb2FkaW5naWNvblwiPlxuICAgIDxjcHMtbG9hZGVyIFtmdWxsU2NyZWVuXT1cImZhbHNlXCIgb3BhY2l0eT1cIjBcIj48L2Nwcy1sb2FkZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JsZWZ0XCI+XG4gICAgPGRpdiBjbGFzcz1cImNwcy10YWJsZS1wYWdpbmF0b3ItaXRtcy1wZXItcGFnZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdGFibGUtcGFnaW5hdG9yLWl0ZW1zLXBlci1wYWdlLXRpdGxlXCJcbiAgICAgICAgPlJvd3MgcGVyIHBhZ2U6XG4gICAgICA8L3NwYW4+XG4gICAgICA8Y3BzLXNlbGVjdFxuICAgICAgICBbb3B0aW9uc109XCJyb3dPcHRpb25zXCJcbiAgICAgICAgW2hpZGVEZXRhaWxzXT1cInRydWVcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInJvd3NcIlxuICAgICAgICAodmFsdWVDaGFuZ2VkKT1cIm9uUm93c1BlclBhZ2VDaGFuZ2VkKClcIlxuICAgICAgICBbcmV0dXJuT2JqZWN0XT1cImZhbHNlXCJcbiAgICAgICAgb3B0aW9uc0NsYXNzPVwiY3BzLXBhZ2luYXRvci1wYWdlLW9wdGlvbnNcIj5cbiAgICAgIDwvY3BzLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9yZmlyc3RwYWdlbGlua2ljb25cIj5cbiAgICA8QW5nbGVEb3VibGVMZWZ0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ycHJldmlvdXNwYWdlbGlua2ljb25cIj5cbiAgICA8QW5nbGVMZWZ0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ybmV4dHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZVJpZ2h0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ybGFzdHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZURvdWJsZVJpZ2h0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLXRyZWVUYWJsZT5cbiJdfQ==
|
|
560
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNoQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFB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QUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQU9HLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHQSxlQUFlO3NCQURyQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSW5DLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJbEMsb0JBQW9CO3NCQUQxQixZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXhDLFlBQVk7c0JBRGxCLFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJdkMsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBUcmVlVGFibGUsXG4gIFRyZWVUYWJsZVNlcnZpY2UsXG4gIFRyZWVUYWJsZU1vZHVsZVxufSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAncHJpbWVuZy9kb20nO1xuaW1wb3J0IHsgQ3BzSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtaW5wdXQvY3BzLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9jcHMtYnV0dG9uL2Nwcy1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc01lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtbWVudS9jcHMtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmluZCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1zZWxlY3QvY3BzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBbmdsZURvdWJsZUxlZnRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvdWJsZWxlZnQnO1xuaW1wb3J0IHsgQW5nbGVMZWZ0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVsZWZ0JztcbmltcG9ydCB7IEFuZ2xlUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZXJpZ2h0JztcbmltcG9ydCB7IEFuZ2xlRG91YmxlUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvdWJsZXJpZ2h0JztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJuYWwvc2l6ZS11dGlscyc7XG5pbXBvcnQgeyBDcHNMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtbG9hZGVyL2Nwcy1sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNvcnRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IENwc1RyZWVUYWJsZUNvbHVtblNvcnRhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLWNvbHVtbi1zb3J0YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVHJlZVRhYmxlVW5zb3J0RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2ludGVybmFsL3RyZWUtdGFibGUtdW5zb3J0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUYWJsZVJvd01lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtdGFibGUvdGFibGUtcm93LW1lbnUvdGFibGUtcm93LW1lbnUuY29tcG9uZW50JztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyZWVUYWJsZUZhY3RvcnkodGFibGVDb21wb25lbnQ6IENwc1RyZWVUYWJsZUNvbXBvbmVudCkge1xuICByZXR1cm4gdGFibGVDb21wb25lbnQucHJpbWVuZ1RyZWVUYWJsZTtcbn1cblxuZXhwb3J0IHR5cGUgQ3BzVHJlZVRhYmxlU2l6ZSA9ICdzbWFsbCcgfCAnbm9ybWFsJyB8ICdsYXJnZSc7XG5leHBvcnQgdHlwZSBDcHNUcmVlVGFibGVUb29sYmFyU2l6ZSA9ICdzbWFsbCcgfCAnbm9ybWFsJztcbmV4cG9ydCB0eXBlIENwc1RyZWVUYWJsZVNvcnRNb2RlID0gJ3NpbmdsZScgfCAnbXVsdGlwbGUnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3BzLXRyZWUtdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmVlVGFibGVNb2R1bGUsXG4gICAgQ3BzSW5wdXRDb21wb25lbnQsXG4gICAgQ3BzQnV0dG9uQ29tcG9uZW50LFxuICAgIENwc01lbnVDb21wb25lbnQsXG4gICAgQ3BzSWNvbkNvbXBvbmVudCxcbiAgICBDcHNTZWxlY3RDb21wb25lbnQsXG4gICAgQ3BzTG9hZGVyQ29tcG9uZW50LFxuICAgIEFuZ2xlRG91YmxlTGVmdEljb24sXG4gICAgQW5nbGVMZWZ0SWNvbixcbiAgICBBbmdsZVJpZ2h0SWNvbixcbiAgICBBbmdsZURvdWJsZVJpZ2h0SWNvbixcbiAgICBDcHNUcmVlVGFibGVDb2x1bW5Tb3J0YWJsZURpcmVjdGl2ZSxcbiAgICBUcmVlVGFibGVVbnNvcnREaXJlY3RpdmUsXG4gICAgVGFibGVSb3dNZW51Q29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jcHMtdHJlZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nwcy10cmVlLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIFRyZWVUYWJsZVNlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogVHJlZVRhYmxlLFxuICAgICAgdXNlRmFjdG9yeTogdHJlZVRhYmxlRmFjdG9yeSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgZGVwczogW0Nwc1RyZWVUYWJsZUNvbXBvbmVudF1cbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ3BzVHJlZVRhYmxlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWRcbntcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG4gIEBJbnB1dCgpIGNvbEhlYWRlck5hbWUgPSAnaGVhZGVyJztcbiAgQElucHV0KCkgY29sRmllbGROYW1lID0gJ2ZpZWxkJztcblxuICBASW5wdXQoKSBzaXplOiBDcHNUcmVlVGFibGVTaXplID0gJ25vcm1hbCc7XG4gIEBJbnB1dCgpIHN0cmlwZWQgPSB0cnVlO1xuICBASW5wdXQoKSBib3JkZXJlZCA9IHRydWU7XG4gIEBJbnB1dCgpIHRhYmxlU3R5bGUgPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHRhYmxlU3R5bGVDbGFzcyA9ICcnO1xuICBASW5wdXQoKSBzZWxlY3RhYmxlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc29ydGFibGUgPSBmYWxzZTsgLy8gbWFrZXMgYWxsIHNvcnRhYmxlIGlmIGNvbHVtbnMgYXJlIHByb3ZpZGVkXG4gIEBJbnB1dCgpIHNvcnRNb2RlOiBDcHNUcmVlVGFibGVTb3J0TW9kZSA9ICdzaW5nbGUnO1xuICBASW5wdXQoKSBjdXN0b21Tb3J0ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGFzVG9vbGJhciA9IHRydWU7XG4gIEBJbnB1dCgpIHRvb2xiYXJTaXplOiBDcHNUcmVlVGFibGVUb29sYmFyU2l6ZSA9ICdub3JtYWwnO1xuICBASW5wdXQoKSB0b29sYmFyVGl0bGUgPSAnJztcblxuICBASW5wdXQoKSByb3dIb3ZlciA9IHRydWU7XG5cbiAgQElucHV0KCkgc2hvd0dsb2JhbEZpbHRlciA9IHRydWU7XG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlclBsYWNlaG9sZGVyID0gJ1NlYXJjaCc7XG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuICBASW5wdXQoKSBwYWdpbmF0b3IgPSBmYWxzZTtcbiAgQElucHV0KCkgYWx3YXlzU2hvd1BhZ2luYXRvciA9IHRydWU7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbXTtcbiAgQElucHV0KCkgZmlyc3QgPSAwO1xuICBASW5wdXQoKSByb3dzID0gMDtcbiAgQElucHV0KCkgcmVzZXRQYWdlT25Sb3dzQ2hhbmdlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlc2V0UGFnZU9uU29ydCA9IHRydWU7XG5cbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlID0gJ05vIGRhdGEnO1xuICBASW5wdXQoKSBlbXB0eUJvZHlIZWlnaHQ6IG51bWJlciB8IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIGxhenkgPSBmYWxzZTtcbiAgQElucHV0KCkgbGF6eUxvYWRPbkluaXQgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHNob3dSb3dNZW51ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQgPSAnJzsgLy8gJ2ZsZXgnIG9yIHZhbHVlKydweCdcbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbCA9IGZhbHNlOyAvLyB3b3JrcyBvbmx5IGlmIHNjcm9sbGFibGUgaXMgdHJ1ZVxuICBASW5wdXQoKSBudW1Ub2xlcmF0ZWRJdGVtcyA9IDEwO1xuXG4gIEBJbnB1dCgpIHNob3dSZW1vdmVCdG5PblNlbGVjdCA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdG4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWN0aW9uQnRuVGl0bGUgPSAnQWN0aW9uJztcblxuICBASW5wdXQoKSBzaG93Q29sdW1uc1RvZ2dsZSA9IGZhbHNlOyAvLyBpZiBleHRlcm5hbCBib2R5IHRlbXBsYXRlIGlzIHByb3ZpZGVkLCB1c2UgY29sdW1uc1NlbGVjdGVkIGV2ZW50IGVtaXR0ZXJcblxuICBAT3V0cHV0KCkgYWN0aW9uQnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNvbHVtbnNTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBhbnkgfVtdPigpO1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGxhenlMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG5vZGVFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbm9kZUNvbGxhcHNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbm9kZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBub2RlVW5zZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc29ydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBlZGl0Um93QnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcm93c1JlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBjdXN0b20gc29ydGluZy4gY3VzdG9tU29ydCBtdXN0IGJlIHRydWUuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBzb3J0IG1ldGEuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGN1c3RvbVNvcnRGdW5jdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAQ29udGVudENoaWxkKCd0b29sYmFyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyB0b29sYmFyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ25lc3RlZEhlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgbmVzdGVkSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2JvZHknLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIGJvZHlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgncHJpbWVuZ1RyZWVUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaW1lbmdUcmVlVGFibGUhOiBUcmVlVGFibGU7XG5cbiAgc2VsZWN0ZWRDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10gPSBbXTtcblxuICByb3dPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfVtdID0gW107XG5cbiAgc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG4gIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZSA9IDA7XG4gIGRlZlNjcm9sbEhlaWdodFB4ID0gMDtcbiAgZGVmU2Nyb2xsSGVpZ2h0ID0gJyc7XG5cbiAgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICBoZWFkZXJCb3g6IGFueTtcbiAgc2Nyb2xsYWJsZUJvZHk6IGFueTtcbiAgc2Nyb2xsYmFyV2lkdGggPSAwO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gZW50cnkudGFyZ2V0O1xuICAgICAgICBjb25zdCBzYmFyVmlzaWJsZSA9IGJvZHkuc2Nyb2xsSGVpZ2h0ID4gYm9keS5jbGllbnRIZWlnaHQ7XG5cbiAgICAgICAgbGV0IHdTY3JvbGwgPSBzYmFyVmlzaWJsZSA/IHRoaXMuc2Nyb2xsYmFyV2lkdGggOiAwO1xuICAgICAgICBpZiAod1Njcm9sbCA+IDApIHdTY3JvbGwgLT0gMTtcblxuICAgICAgICB0aGlzLmhlYWRlckJveC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHt3U2Nyb2xsfXB4YDtcbiAgICAgICAgdGhpcy5oZWFkZXJCb3guc3R5bGUuYm9yZGVyUmlnaHQgPVxuICAgICAgICAgIHdTY3JvbGwgPiAwID8gJzFweCBzb2xpZCAjZDdkNWQ1JyA6ICd1bnNldCc7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZW1wdHlCb2R5SGVpZ2h0ID0gY29udmVydFNpemUodGhpcy5lbXB0eUJvZHlIZWlnaHQpO1xuICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSB0aGlzLnZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID0gdGhpcy5zY3JvbGxIZWlnaHQ7XG5cbiAgICAgIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUuYmluZCh0aGlzKSk7XG5cbiAgICAgIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCAhPT0gJ2ZsZXgnKSB7XG4gICAgICAgIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0UHggPSBwYXJzZUludCh0aGlzLnNjcm9sbEhlaWdodCwgMTApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgaWYgKHRoaXMucm93c1BlclBhZ2VPcHRpb25zLmxlbmd0aCA8IDEpXG4gICAgICAgIHRoaXMucm93c1BlclBhZ2VPcHRpb25zID0gWzUsIDEwLCAyNSwgNTBdO1xuXG4gICAgICBpZiAoIXRoaXMucm93cykgdGhpcy5yb3dzID0gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF07XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5pbmNsdWRlcyh0aGlzLnJvd3MpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3dzUGVyUGFnZU9wdGlvbnMgbXVzdCBpbmNsdWRlIHJvd3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJvd09wdGlvbnMgPSB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5tYXAoKHYpID0+ICh7XG4gICAgICAgIGxhYmVsOiAnJyArIHYsXG4gICAgICAgIHZhbHVlOiB2XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zaG93R2xvYmFsRmlsdGVyICYmXG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcz8ubGVuZ3RoIDwgMSAmJlxuICAgICAgdGhpcy5kYXRhPy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVswXS5kYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbGFibGVCb2R5ID0gdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcucC10cmVldGFibGUtc2Nyb2xsYWJsZS1ib2R5J1xuICAgICk7XG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZUJvZHkpIHtcbiAgICAgIHRoaXMuaGVhZGVyQm94ID0gdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5wLXRyZWV0YWJsZS1zY3JvbGxhYmxlLWhlYWRlci1ib3gnXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgICAgICB0aGlzLmRlZlNjcm9sbEhlaWdodFB4ID0gdGhpcy5zY3JvbGxhYmxlQm9keS5jbGllbnRIZWlnaHQ7XG5cbiAgICAgIGlmICh0aGlzLmhlYWRlckJveCkge1xuICAgICAgICB0aGlzLnNjcm9sbGJhcldpZHRoID0gRG9tSGFuZGxlci5jYWxjdWxhdGVTY3JvbGxiYXJXaWR0aCgpO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5zY3JvbGxhYmxlQm9keSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsIHx8IHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplKSByZXR1cm47XG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPVxuICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlPy5lbD8ubmF0aXZlRWxlbWVudFxuICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy5wLXRyZWV0YWJsZS10Ym9keScpXG4gICAgICAgID8ucXVlcnlTZWxlY3RvcigndHInKT8uY2xpZW50SGVpZ2h0IHx8IDA7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uV2luZG93UmVzaXplLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25XaW5kb3dSZXNpemUoKSB7XG4gICAgdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCA9IHRoaXMuc2Nyb2xsYWJsZUJvZHkuY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgZ2V0IHN0eWxlQ2xhc3MoKSB7XG4gICAgY29uc3QgY2xhc3Nlc0xpc3QgPSBbXTtcbiAgICBzd2l0Y2ggKHRoaXMuc2l6ZSkge1xuICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdwLXRyZWV0YWJsZS1zbScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtbGcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1Rvb2xiYXIpIHtcbiAgICAgIHN3aXRjaCAodGhpcy50b29sYmFyU2l6ZSkge1xuICAgICAgICBjYXNlICdzbWFsbCc6XG4gICAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgnY3BzLXRiYXItc21hbGwnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbm9ybWFsJzpcbiAgICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdjcHMtdGJhci1ub3JtYWwnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaXBlZCkge1xuICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtc3RyaXBlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib3JkZXJlZCkge1xuICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtZ3JpZGxpbmVzJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Nyb2xsSGVpZ2h0ICYmICF0aGlzLmxvYWRpbmcgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ2Nwcy10cmVldGFibGUtYm90dG9tLWJvcmRlcmVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXNMaXN0LmpvaW4oJyAnKTtcbiAgfVxuXG4gIG9uU29ydEZ1bmN0aW9uKGV2ZW50OiBTb3J0RXZlbnQpIHtcbiAgICB0aGlzLmN1c3RvbVNvcnRGdW5jdGlvbi5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKSB7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCkge1xuICAgICAgY29uc3QgaXRlbXNMZW4gPSB0aGlzLnByaW1lbmdUcmVlVGFibGUuc2VyaWFsaXplZFZhbHVlLmxlbmd0aDtcbiAgICAgIGlmIChpdGVtc0xlbiA8IDEpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLmVtcHR5Qm9keUhlaWdodFxuICAgICAgICAgID8gKGBjYWxjKCR7dGhpcy5lbXB0eUJvZHlIZWlnaHR9ICsgMXB4KWAgYXMgc3RyaW5nKVxuICAgICAgICAgIDogdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKyAxICsgJ3B4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1ckhlaWdodCA9IHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplICogaXRlbXNMZW4gKyAyO1xuICAgICAgICBpZiAodGhpcy5kZWZTY3JvbGxIZWlnaHQgPT09ICdmbGV4Jykge1xuICAgICAgICAgIGlmIChjdXJIZWlnaHQgPj0gdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSAnZmxleCc7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxhYmxlQm9keS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSBNYXRoLm1pbih0aGlzLmRlZlNjcm9sbEhlaWdodFB4LCBjdXJIZWlnaHQpICsgJ3B4JztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkZpbHRlckdsb2JhbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmZpbHRlckdsb2JhbCh2YWx1ZSwgJ2NvbnRhaW5zJyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICBvbkNsaWNrQWN0aW9uQnRuKCkge1xuICAgIHRoaXMuYWN0aW9uQnRuQ2xpY2tlZC5lbWl0KCk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkUm93cy5mb3JFYWNoKChyb3cpID0+IHRoaXMuX3JlbW92ZU5vZGVGcm9tRGF0YShyb3csIGZhbHNlKSk7XG4gICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5yb3dzUmVtb3ZlZC5lbWl0KFxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubWFwKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICh7IF9kZWZhdWx0U29ydE9yZGVyLCBleHBhbmRlZCwgcGFydGlhbFNlbGVjdGVkLCAuLi5yZXN0IH0pID0+IHJlc3RcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgb25FZGl0Um93Q2xpY2tlZChub2RlOiBhbnkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3QgeyBfZGVmYXVsdFNvcnRPcmRlciwgZXhwYW5kZWQsIHBhcnRpYWxTZWxlY3RlZCwgLi4ucmVzdCB9ID0gbm9kZTtcbiAgICB0aGlzLmVkaXRSb3dCdG5DbGlja2VkLmVtaXQocmVzdCk7XG4gIH1cblxuICBvblJlbW92ZVJvd0NsaWNrZWQobm9kZTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSB0aGlzLnNlbGVjdGVkUm93cy5maWx0ZXIoKHY6IGFueSkgPT4gdiAhPT0gbm9kZSk7XG4gICAgdGhpcy5fcmVtb3ZlTm9kZUZyb21EYXRhKG5vZGUpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7IF9kZWZhdWx0U29ydE9yZGVyLCBleHBhbmRlZCwgcGFydGlhbFNlbGVjdGVkLCAuLi5yZXN0IH0gPSBub2RlO1xuICAgIHRoaXMucm93c1JlbW92ZWQuZW1pdChbcmVzdF0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZU5vZGVGcm9tRGF0YShub2RlVG9SZW1vdmU6IGFueSwgc2luZ2xlID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IF9maW5kVG9wU29ydE9yZGVyID0gKF9ub2RlOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKCFfbm9kZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmICh0eXBlb2YgX25vZGUuX2RlZmF1bHRTb3J0T3JkZXIgPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gX25vZGUuX2RlZmF1bHRTb3J0T3JkZXI7XG4gICAgICByZXR1cm4gX2ZpbmRUb3BTb3J0T3JkZXIoX25vZGUucGFyZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3QgX3JlbW92ZUZyb21DaGlsZHJlbiA9IChfbm9kZTogYW55KSA9PiB7XG4gICAgICBpZiAoIV9ub2RlPy5jaGlsZHJlbikgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgaWR4ID0gX25vZGUuY2hpbGRyZW4uaW5kZXhPZihub2RlVG9SZW1vdmUpO1xuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIF9ub2RlLmNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xuICAgICAgICBpZiAoX25vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIF9ub2RlLmNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBfbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgIGlmIChfcmVtb3ZlRnJvbUNoaWxkcmVuKGNoaWxkKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBsb2NhdGUgdG9wIGxldmVsIG5vZGVcbiAgICBjb25zdCBzb3J0T3JkZXIgPSBfZmluZFRvcFNvcnRPcmRlcihub2RlVG9SZW1vdmUpO1xuICAgIGlmIChzb3J0T3JkZXIgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmRhdGEuZmluZCgobikgPT4gbi5fZGVmYXVsdFNvcnRPcmRlciA9PT0gc29ydE9yZGVyKTtcbiAgICBpZiAoIW5vZGUpIHJldHVybjtcblxuICAgIC8vIHJlbW92ZSB0aGUgbm9kZSBpdHNlbGYgb3IgcmVtb3ZlIGl0cyBjaGlsZFxuICAgIGlmIChub2RlVG9SZW1vdmUgPT09IG5vZGUpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoKHY6IGFueSkgPT4gdiAhPT0gbm9kZVRvUmVtb3ZlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgX3JlbW92ZUZyb21DaGlsZHJlbihub2RlKTtcbiAgICAgICAgaWYgKHNpbmdsZSkgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQWxsQ29sdW1ucygpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPCB0aGlzLmNvbHVtbnMubGVuZ3RoID8gdGhpcy5jb2x1bW5zIDogW107XG4gICAgdGhpcy5jb2x1bW5zU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkQ29sdW1ucyk7XG4gIH1cblxuICBpc0NvbHVtblNlbGVjdGVkKGNvbDogYW55KSB7XG4gICAgcmV0dXJuICEhZmluZCh0aGlzLnNlbGVjdGVkQ29sdW1ucywgKGl0ZW0pID0+IGlzRXF1YWwoaXRlbSwgY29sKSk7XG4gIH1cblxuICBvblJvd3NQZXJQYWdlQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5yZXNldFBhZ2VPblJvd3NDaGFuZ2UpIHtcbiAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5maXJzdCA9IDA7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlUGFnZSh0aGlzLmdldFBhZ2UoKSk7XG4gIH1cblxuICBnZXRQYWdlQ291bnQoKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnByaW1lbmdUcmVlVGFibGUudG90YWxSZWNvcmRzIC8gdGhpcy5yb3dzKTtcbiAgfVxuXG4gIGdldFBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlyc3QgLyB0aGlzLnJvd3MpO1xuICB9XG5cbiAgY2hhbmdlUGFnZShwOiBudW1iZXIpIHtcbiAgICBjb25zdCBwYyA9IE1hdGguY2VpbCh0aGlzLmdldFBhZ2VDb3VudCgpKTtcblxuICAgIGlmIChwID49IDAgJiYgcCA8IHBjKSB7XG4gICAgICB0aGlzLmZpcnN0ID0gdGhpcy5yb3dzICogcDtcbiAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5vblBhZ2VDaGFuZ2Uoe1xuICAgICAgICBmaXJzdDogdGhpcy5maXJzdCxcbiAgICAgICAgcm93czogdGhpcy5yb3dzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlyc3QgPSBldmVudC5maXJzdDtcbiAgICB0aGlzLnJvd3MgPSBldmVudC5yb3dzO1xuXG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBwYWdlOiB0aGlzLmdldFBhZ2UoKSxcbiAgICAgIGZpcnN0OiB0aGlzLmZpcnN0LFxuICAgICAgcm93czogdGhpcy5yb3dzLFxuICAgICAgcGFnZUNvdW50OiBNYXRoLmNlaWwodGhpcy5nZXRQYWdlQ291bnQoKSlcbiAgICB9O1xuXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHN0YXRlKTtcbiAgfVxuXG4gIG9uTGF6eUxvYWRlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5sYXp5TG9hZGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Ob2RlRXhwYW5kZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm9kZUV4cGFuZGVkLmVtaXQoZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uTm9kZUNvbGxhcHNlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5ub2RlQ29sbGFwc2VkLmVtaXQoZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uTm9kZVNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVTZWxlY3RlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uTm9kZVVuc2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm9kZVVuc2VsZWN0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvblNvcnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc29ydGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25TZWxlY3RDb2x1bW4oY29sOiBhbnkpIHtcbiAgICBsZXQgcmVzID0gW10gYXMgYW55O1xuICAgIGlmICh0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoY29sKSkge1xuICAgICAgcmVzID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmlsdGVyKCh2OiBhbnkpID0+ICFpc0VxdWFsKHYsIGNvbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgodjogYW55KSA9PiBpc0VxdWFsKHYsIG8pKSB8fFxuICAgICAgICAgIGlzRXF1YWwoY29sLCBvKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXMucHVzaChvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcmVzO1xuICAgIHRoaXMuY29sdW1uc1NlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZENvbHVtbnMpO1xuICB9XG59XG4iLCI8cC10cmVlVGFibGVcbiAgI3ByaW1lbmdUcmVlVGFibGVcbiAgdHRXaXRoVW5zb3J0XG4gIFtuZ0NsYXNzXT1cInsgJ2Nwcy10cmVldGFibGUtbG9hZGluZyc6IGxvYWRpbmcgfVwiXG4gIFt2YWx1ZV09XCJkYXRhXCJcbiAgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiXG4gIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcbiAgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXG4gIFt2aXJ0dWFsU2Nyb2xsSXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplXCJcbiAgW3ZpcnR1YWxTY3JvbGxPcHRpb25zXT1cIntcbiAgICBudW1Ub2xlcmF0ZWRJdGVtczogbnVtVG9sZXJhdGVkSXRlbXMsXG4gICAgYXV0b1NpemU6IGZhbHNlXG4gIH1cIlxuICBbY29sdW1uc109XCJzZWxlY3RlZENvbHVtbnNcIlxuICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgW3Jvd0hvdmVyXT1cInJvd0hvdmVyXCJcbiAgW2xhenldPVwibGF6eVwiXG4gIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZFJvd3NcIlxuICBjb21wYXJlU2VsZWN0aW9uQnk9XCJlcXVhbHNcIlxuICBbbGF6eUxvYWRPbkluaXRdPVwibGF6eUxvYWRPbkluaXRcIlxuICBbc3R5bGVDbGFzc109XCJzdHlsZUNsYXNzXCJcbiAgW3RhYmxlU3R5bGVdPVwidGFibGVTdHlsZVwiXG4gIFt0YWJsZVN0eWxlQ2xhc3NdPVwidGFibGVTdHlsZUNsYXNzXCJcbiAgW2N1c3RvbVNvcnRdPVwiY3VzdG9tU29ydFwiXG4gIFtzb3J0TW9kZV09XCJzb3J0TW9kZVwiXG4gIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcbiAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxuICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICBbYWx3YXlzU2hvd1BhZ2luYXRvcl09XCJhbHdheXNTaG93UGFnaW5hdG9yXCJcbiAgW3Jvd3NdPVwicm93c1wiXG4gIFtmaXJzdF09XCJmaXJzdFwiXG4gIFtyZXNldFBhZ2VPblNvcnRdPVwicmVzZXRQYWdlT25Tb3J0XCJcbiAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gb2Yge3RvdGFsUmVjb3Jkc31cIlxuICAob25QYWdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgKG9uU29ydCk9XCJvblNvcnQoJGV2ZW50KVwiXG4gIChvbkxhenlMb2FkKT1cIm9uTGF6eUxvYWRlZCgkZXZlbnQpXCJcbiAgKHNvcnRGdW5jdGlvbik9XCJvblNvcnRGdW5jdGlvbigkZXZlbnQpXCJcbiAgKG9uTm9kZUV4cGFuZCk9XCJvbk5vZGVFeHBhbmRlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZUNvbGxhcHNlKT1cIm9uTm9kZUNvbGxhcHNlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZVNlbGVjdCk9XCJvbk5vZGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZVVuc2VsZWN0KT1cIm9uTm9kZVVuc2VsZWN0ZWQoJGV2ZW50KVwiPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiICpuZ0lmPVwiaGFzVG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sYmFyVGVtcGxhdGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRvb2xiYXJUZW1wbGF0ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1sZWZ0XCI+XG4gICAgICAgIDxkaXY+e3sgdG9vbGJhclRpdGxlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R2xvYmFsRmlsdGVyXCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItZ2xvYmFsLWZpbHRlclwiPlxuICAgICAgICAgIDxjcHMtaW5wdXRcbiAgICAgICAgICAgIHByZWZpeEljb249XCJzZWFyY2hcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdsb2JhbEZpbHRlclBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25GaWx0ZXJHbG9iYWwoJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwidG9vbGJhclNpemUgPT09ICdzbWFsbCcgPyAndW5kZXJsaW5lZCcgOiAnb3V0bGluZWQnXCJcbiAgICAgICAgICAgIFtoaWRlRGV0YWlsc109XCJ0cnVlXCI+XG4gICAgICAgICAgPC9jcHMtaW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXJpZ2h0XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dSZW1vdmVCdG5PblNlbGVjdCAmJiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItcmVtb3ZlLWJ0blwiPlxuICAgICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgICBsYWJlbD1cIlJlbW92ZVwiXG4gICAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICAgIHR5cGU9XCJib3JkZXJsZXNzXCJcbiAgICAgICAgICAgIGljb249XCJyZW1vdmVcIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlU2VsZWN0ZWQoKVwiPlxuICAgICAgICAgIDwvY3BzLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWN0aW9uQnRuXCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItYWN0aW9uLWJ0blwiPlxuICAgICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgICBbbGFiZWxdPVwiYWN0aW9uQnRuVGl0bGVcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DbGlja0FjdGlvbkJ0bigpXCI+XG4gICAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0NvbHVtbnNUb2dnbGUgJiYgY29sdW1ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1jb2x0b2dnbGUtYnRuXCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwiY29sdW1uc1wiXG4gICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJlcGFyZWQtbGlnaHRlbjFcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNvbFRvZ2dsZU1lbnUudG9nZ2xlKCRldmVudClcIj48L2Nwcy1pY29uPlxuICAgICAgICAgIDxjcHMtbWVudSAjY29sVG9nZ2xlTWVudSBbd2l0aEFycm93XT1cImZhbHNlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0gc2VsZWN0LWFsbC1vcHRpb25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hbGxzZWxlY3RlZF09XCJzZWxlY3RlZENvbHVtbnMubGVuZ3RoID09PSBjb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbENvbHVtbnMoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWNoZWNrXCI+IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPlNob3cgYWxsIGNvbHVtbnM8L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0Q29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc0NvbHVtblNlbGVjdGVkKGNvbClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbS1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbS1jaGVja1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgY29sW2NvbEhlYWRlck5hbWVdXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9jcHMtbWVudT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgKm5nSWY9XCJuZXN0ZWRIZWFkZXJUZW1wbGF0ZVwiIGxldC1jb2x1bW5zPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICBuZXN0ZWRIZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICRpbXBsaWNpdDogY29sdW1ucyxcbiAgICAgICAgfVxuICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiICpuZ0lmPVwiIW5lc3RlZEhlYWRlclRlbXBsYXRlXCIgbGV0LWNvbHVtbnM+XG4gICAgPHRyPlxuICAgICAgPCEtLSA8dGggc3R5bGU9XCJ3aWR0aDogM3JlbVwiICpuZ0lmPVwicmVvcmRlcmFibGVSb3dzXCI+PC90aD4gLS0+XG4gICAgICA8dGggc3R5bGU9XCJ3aWR0aDogNTVweFwiICpuZ0lmPVwic2VsZWN0YWJsZVwiPlxuICAgICAgICA8cC10cmVlVGFibGVIZWFkZXJDaGVja2JveD48L3AtdHJlZVRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICA8L3RoPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1ucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoZWFkZXJUZW1wbGF0ZSAmJiBjb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNvcnRhYmxlXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgW2Nwc1RUQ29sU29ydGFibGVdPVwiY29sW2NvbEZpZWxkTmFtZV1cIj5cbiAgICAgICAgICAgIHt7IGNvbFtjb2xIZWFkZXJOYW1lXSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNvcnRhYmxlXCI+XG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAge3sgY29sW2NvbEhlYWRlck5hbWVdIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0aCBjbGFzcz1cImNwcy10cmVldGFibGUtcm93LW1lbnUtY2VsbFwiICpuZ0lmPVwic2hvd1Jvd01lbnVcIj48L3RoPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1yb3dOb2RlXG4gICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICA8dHJcbiAgICAgIFt0dFJvd109XCJyb3dOb2RlXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Nwcy10cmVldGFibGUtcm93LXNlbGVjdGVkJzpcbiAgICAgICAgICBzZWxlY3RhYmxlICYmIHByaW1lbmdUcmVlVGFibGUuaXNTZWxlY3RlZChyb3dOb2RlLm5vZGUpXG4gICAgICB9XCI+XG4gICAgICA8IS0tIDx0ZCAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZS1jZWxsXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZVwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT7imLA8L3NwYW4+XG4gICAgICA8L3RkPiAtLT5cbiAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiA1NXB4XCIgKm5nSWY9XCJzZWxlY3RhYmxlXCI+XG4gICAgICAgIDxwLXRyZWVUYWJsZUNoZWNrYm94IFt2YWx1ZV09XCJyb3dOb2RlXCI+PC9wLXRyZWVUYWJsZUNoZWNrYm94PlxuICAgICAgPC90ZD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJib2R5VGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBib2R5VGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogcm93Tm9kZSxcbiAgICAgICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgICAgICByb3dEYXRhOiByb3dEYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWJvZHlUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlciBbcm93Tm9kZV09XCJyb3dOb2RlXCIgKm5nSWY9XCJpID09PSAwXCI+XG4gICAgICAgICAgICA8L3AtdHJlZVRhYmxlVG9nZ2xlcj5cbiAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sW2NvbEZpZWxkTmFtZV1dIH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0ZCAqbmdJZj1cInNob3dSb3dNZW51XCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXJvdy1tZW51LWNlbGxcIj5cbiAgICAgICAgPHRhYmxlLXJvdy1tZW51XG4gICAgICAgICAgKGVkaXRSb3dCdG5DbGlja2VkKT1cIm9uRWRpdFJvd0NsaWNrZWQocm93Tm9kZS5ub2RlKVwiXG4gICAgICAgICAgKHJlbW92ZVJvd0J0bkNsaWNrZWQpPVwib25SZW1vdmVSb3dDbGlja2VkKHJvd05vZGUubm9kZSlcIj5cbiAgICAgICAgPC90YWJsZS1yb3ctbWVudT5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgIDx0cj5cbiAgICAgIDx0ZFxuICAgICAgICBjb2xzcGFuPVwiMTAwXCJcbiAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWVtcHR5LW1lc3NhZ2UtdGRcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7IGhlaWdodDogZW1wdHlCb2R5SGVpZ2h0IH1cIj5cbiAgICAgICAge3sgZW1wdHlNZXNzYWdlIH19XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsb2FkaW5naWNvblwiPlxuICAgIDxjcHMtbG9hZGVyIFtmdWxsU2NyZWVuXT1cImZhbHNlXCIgb3BhY2l0eT1cIjBcIj48L2Nwcy1sb2FkZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JsZWZ0XCI+XG4gICAgPGRpdiBjbGFzcz1cImNwcy10YWJsZS1wYWdpbmF0b3ItaXRtcy1wZXItcGFnZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdGFibGUtcGFnaW5hdG9yLWl0ZW1zLXBlci1wYWdlLXRpdGxlXCJcbiAgICAgICAgPlJvd3MgcGVyIHBhZ2U6XG4gICAgICA8L3NwYW4+XG4gICAgICA8Y3BzLXNlbGVjdFxuICAgICAgICBbb3B0aW9uc109XCJyb3dPcHRpb25zXCJcbiAgICAgICAgW2hpZGVEZXRhaWxzXT1cInRydWVcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInJvd3NcIlxuICAgICAgICAodmFsdWVDaGFuZ2VkKT1cIm9uUm93c1BlclBhZ2VDaGFuZ2VkKClcIlxuICAgICAgICBbcmV0dXJuT2JqZWN0XT1cImZhbHNlXCJcbiAgICAgICAgb3B0aW9uc0NsYXNzPVwiY3BzLXBhZ2luYXRvci1wYWdlLW9wdGlvbnNcIj5cbiAgICAgIDwvY3BzLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9yZmlyc3RwYWdlbGlua2ljb25cIj5cbiAgICA8QW5nbGVEb3VibGVMZWZ0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ycHJldmlvdXNwYWdlbGlua2ljb25cIj5cbiAgICA8QW5nbGVMZWZ0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ybmV4dHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZVJpZ2h0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ybGFzdHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZURvdWJsZVJpZ2h0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLXRyZWVUYWJsZT5cbiJdfQ==
|
package/fesm2015/cps-ui-kit.mjs
CHANGED
|
@@ -5331,15 +5331,13 @@ class CpsTreeTableComponent {
|
|
|
5331
5331
|
this.emptyBodyHeight = '';
|
|
5332
5332
|
this.lazy = false;
|
|
5333
5333
|
this.lazyLoadOnInit = true;
|
|
5334
|
-
|
|
5335
|
-
this.showRowMenu = false; // TODO
|
|
5334
|
+
this.showRowMenu = false;
|
|
5336
5335
|
this.loading = false;
|
|
5337
5336
|
this.scrollable = true;
|
|
5338
5337
|
this.scrollHeight = ''; // 'flex' or value+'px'
|
|
5339
5338
|
this.virtualScroll = false; // works only if scrollable is true
|
|
5340
5339
|
this.numToleratedItems = 10;
|
|
5341
|
-
|
|
5342
|
-
this.showRemoveBtnOnSelect = false; // TODO
|
|
5340
|
+
this.showRemoveBtnOnSelect = true;
|
|
5343
5341
|
this.showActionBtn = false;
|
|
5344
5342
|
this.actionBtnTitle = 'Action';
|
|
5345
5343
|
this.showColumnsToggle = false; // if external body template is provided, use columnsSelected event emitter
|
|
@@ -5513,18 +5511,19 @@ class CpsTreeTableComponent {
|
|
|
5513
5511
|
this.actionBtnClicked.emit();
|
|
5514
5512
|
}
|
|
5515
5513
|
removeSelected() {
|
|
5516
|
-
|
|
5517
|
-
|
|
5518
|
-
|
|
5519
|
-
//
|
|
5520
|
-
|
|
5521
|
-
|
|
5522
|
-
|
|
5523
|
-
|
|
5524
|
-
|
|
5525
|
-
|
|
5526
|
-
|
|
5527
|
-
|
|
5514
|
+
this.selectedRows.forEach((row) => this._removeNodeFromData(row, false));
|
|
5515
|
+
this.data = [...this.data];
|
|
5516
|
+
this.rowsRemoved.emit(this.selectedRows.map(
|
|
5517
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5518
|
+
(_a) => {
|
|
5519
|
+
var { _defaultSortOrder, expanded, partialSelected } = _a, rest = __rest(_a, ["_defaultSortOrder", "expanded", "partialSelected"]);
|
|
5520
|
+
return rest;
|
|
5521
|
+
}));
|
|
5522
|
+
this.selectedRows = [];
|
|
5523
|
+
setTimeout(() => {
|
|
5524
|
+
this._recalcVirtualHeight();
|
|
5525
|
+
this.cdRef.markForCheck();
|
|
5526
|
+
});
|
|
5528
5527
|
}
|
|
5529
5528
|
onEditRowClicked(node) {
|
|
5530
5529
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -5532,14 +5531,61 @@ class CpsTreeTableComponent {
|
|
|
5532
5531
|
this.editRowBtnClicked.emit(rest);
|
|
5533
5532
|
}
|
|
5534
5533
|
onRemoveRowClicked(node) {
|
|
5535
|
-
// TODO remove children of nodes
|
|
5536
|
-
// find by default sort order in object itself or in nested parent
|
|
5537
|
-
// then find the node itself
|
|
5538
5534
|
this.selectedRows = this.selectedRows.filter((v) => v !== node);
|
|
5539
|
-
this.
|
|
5535
|
+
this._removeNodeFromData(node);
|
|
5540
5536
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5541
5537
|
const { _defaultSortOrder, expanded, partialSelected } = node, rest = __rest(node, ["_defaultSortOrder", "expanded", "partialSelected"]);
|
|
5542
5538
|
this.rowsRemoved.emit([rest]);
|
|
5539
|
+
setTimeout(() => {
|
|
5540
|
+
this._recalcVirtualHeight();
|
|
5541
|
+
this.cdRef.markForCheck();
|
|
5542
|
+
});
|
|
5543
|
+
}
|
|
5544
|
+
_removeNodeFromData(nodeToRemove, single = true) {
|
|
5545
|
+
const _findTopSortOrder = (_node) => {
|
|
5546
|
+
if (!_node)
|
|
5547
|
+
return undefined;
|
|
5548
|
+
if (typeof _node._defaultSortOrder === 'number')
|
|
5549
|
+
return _node._defaultSortOrder;
|
|
5550
|
+
return _findTopSortOrder(_node.parent);
|
|
5551
|
+
};
|
|
5552
|
+
const _removeFromChildren = (_node) => {
|
|
5553
|
+
if (!(_node === null || _node === void 0 ? void 0 : _node.children))
|
|
5554
|
+
return false;
|
|
5555
|
+
const idx = _node.children.indexOf(nodeToRemove);
|
|
5556
|
+
if (idx >= 0) {
|
|
5557
|
+
_node.children.splice(idx, 1);
|
|
5558
|
+
if (_node.children.length === 0) {
|
|
5559
|
+
delete _node.children;
|
|
5560
|
+
}
|
|
5561
|
+
return true;
|
|
5562
|
+
}
|
|
5563
|
+
else {
|
|
5564
|
+
for (const child of _node.children) {
|
|
5565
|
+
if (_removeFromChildren(child))
|
|
5566
|
+
return true;
|
|
5567
|
+
}
|
|
5568
|
+
return false;
|
|
5569
|
+
}
|
|
5570
|
+
};
|
|
5571
|
+
// locate top level node
|
|
5572
|
+
const sortOrder = _findTopSortOrder(nodeToRemove);
|
|
5573
|
+
if (sortOrder === undefined)
|
|
5574
|
+
return;
|
|
5575
|
+
const node = this.data.find((n) => n._defaultSortOrder === sortOrder);
|
|
5576
|
+
if (!node)
|
|
5577
|
+
return;
|
|
5578
|
+
// remove the node itself or remove its child
|
|
5579
|
+
if (nodeToRemove === node) {
|
|
5580
|
+
this.data = this.data.filter((v) => v !== nodeToRemove);
|
|
5581
|
+
}
|
|
5582
|
+
else {
|
|
5583
|
+
if (node.children) {
|
|
5584
|
+
_removeFromChildren(node);
|
|
5585
|
+
if (single)
|
|
5586
|
+
this.data = [...this.data];
|
|
5587
|
+
}
|
|
5588
|
+
}
|
|
5543
5589
|
}
|
|
5544
5590
|
toggleAllColumns() {
|
|
5545
5591
|
this.selectedColumns =
|
|
@@ -5626,7 +5672,7 @@ class CpsTreeTableComponent {
|
|
|
5626
5672
|
}
|
|
5627
5673
|
}
|
|
5628
5674
|
CpsTreeTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTreeTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5629
|
-
CpsTreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsTreeTableComponent, isStandalone: true, selector: "cps-tree-table", inputs: { data: "data", columns: "columns", colHeaderName: "colHeaderName", colFieldName: "colFieldName", size: "size", striped: "striped", bordered: "bordered", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", selectable: "selectable", sortable: "sortable", sortMode: "sortMode", customSort: "customSort", hasToolbar: "hasToolbar", toolbarSize: "toolbarSize", toolbarTitle: "toolbarTitle", rowHover: "rowHover", showGlobalFilter: "showGlobalFilter", globalFilterPlaceholder: "globalFilterPlaceholder", globalFilterFields: "globalFilterFields", paginator: "paginator", alwaysShowPaginator: "alwaysShowPaginator", rowsPerPageOptions: "rowsPerPageOptions", first: "first", rows: "rows", resetPageOnRowsChange: "resetPageOnRowsChange", resetPageOnSort: "resetPageOnSort", emptyMessage: "emptyMessage", emptyBodyHeight: "emptyBodyHeight", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", loading: "loading", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", numToleratedItems: "numToleratedItems", showActionBtn: "showActionBtn", actionBtnTitle: "actionBtnTitle", showColumnsToggle: "showColumnsToggle" }, outputs: { actionBtnClicked: "actionBtnClicked", columnsSelected: "columnsSelected", pageChanged: "pageChanged", lazyLoaded: "lazyLoaded", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed", nodeSelected: "nodeSelected", nodeUnselected: "nodeUnselected", sorted: "sorted", editRowBtnClicked: "editRowBtnClicked", rowsRemoved: "rowsRemoved", customSortFunction: "customSortFunction" }, providers: [
|
|
5675
|
+
CpsTreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsTreeTableComponent, isStandalone: true, selector: "cps-tree-table", inputs: { data: "data", columns: "columns", colHeaderName: "colHeaderName", colFieldName: "colFieldName", size: "size", striped: "striped", bordered: "bordered", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", selectable: "selectable", sortable: "sortable", sortMode: "sortMode", customSort: "customSort", hasToolbar: "hasToolbar", toolbarSize: "toolbarSize", toolbarTitle: "toolbarTitle", rowHover: "rowHover", showGlobalFilter: "showGlobalFilter", globalFilterPlaceholder: "globalFilterPlaceholder", globalFilterFields: "globalFilterFields", paginator: "paginator", alwaysShowPaginator: "alwaysShowPaginator", rowsPerPageOptions: "rowsPerPageOptions", first: "first", rows: "rows", resetPageOnRowsChange: "resetPageOnRowsChange", resetPageOnSort: "resetPageOnSort", emptyMessage: "emptyMessage", emptyBodyHeight: "emptyBodyHeight", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", showRowMenu: "showRowMenu", loading: "loading", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", numToleratedItems: "numToleratedItems", showRemoveBtnOnSelect: "showRemoveBtnOnSelect", showActionBtn: "showActionBtn", actionBtnTitle: "actionBtnTitle", showColumnsToggle: "showColumnsToggle" }, outputs: { actionBtnClicked: "actionBtnClicked", columnsSelected: "columnsSelected", pageChanged: "pageChanged", lazyLoaded: "lazyLoaded", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed", nodeSelected: "nodeSelected", nodeUnselected: "nodeUnselected", sorted: "sorted", editRowBtnClicked: "editRowBtnClicked", rowsRemoved: "rowsRemoved", customSortFunction: "customSortFunction" }, providers: [
|
|
5630
5676
|
TreeTableService,
|
|
5631
5677
|
{
|
|
5632
5678
|
provide: TreeTable,
|
|
@@ -5725,6 +5771,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
5725
5771
|
type: Input
|
|
5726
5772
|
}], lazyLoadOnInit: [{
|
|
5727
5773
|
type: Input
|
|
5774
|
+
}], showRowMenu: [{
|
|
5775
|
+
type: Input
|
|
5728
5776
|
}], loading: [{
|
|
5729
5777
|
type: Input
|
|
5730
5778
|
}], scrollable: [{
|
|
@@ -5735,6 +5783,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
5735
5783
|
type: Input
|
|
5736
5784
|
}], numToleratedItems: [{
|
|
5737
5785
|
type: Input
|
|
5786
|
+
}], showRemoveBtnOnSelect: [{
|
|
5787
|
+
type: Input
|
|
5738
5788
|
}], showActionBtn: [{
|
|
5739
5789
|
type: Input
|
|
5740
5790
|
}], actionBtnTitle: [{
|