@energycap/components 0.30.1 → 0.30.2
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/bundles/energycap-components.umd.js +87 -33
- package/bundles/energycap-components.umd.js.map +1 -1
- package/bundles/energycap-components.umd.min.js +1 -1
- package/bundles/energycap-components.umd.min.js.map +1 -1
- package/energycap-components.metadata.json +1 -1
- package/esm2015/lib/controls/item-picker/item-picker.component.js +34 -9
- package/esm2015/lib/display/table/table-selectable-row.component.js +45 -28
- package/fesm2015/energycap-components.js +74 -32
- package/fesm2015/energycap-components.js.map +1 -1
- package/lib/controls/item-picker/item-picker.component.d.ts +10 -2
- package/lib/display/table/table-selectable-row.component.d.ts +26 -11
- package/package.json +1 -1
|
@@ -15,6 +15,10 @@ export class ItemPickerSelectableContext extends TableSelectableRowContext {
|
|
|
15
15
|
* the available/selected lists
|
|
16
16
|
*/
|
|
17
17
|
this.selectedItemsMapChanged = new Subject();
|
|
18
|
+
/**
|
|
19
|
+
* AdvancedRowClickBehavior is disabled for ItemPicker.
|
|
20
|
+
*/
|
|
21
|
+
this.disableAdvancedRowClickBehavior = true;
|
|
18
22
|
}
|
|
19
23
|
}
|
|
20
24
|
export class ItemPickerComponent {
|
|
@@ -39,6 +43,8 @@ export class ItemPickerComponent {
|
|
|
39
43
|
* update this gets set to the values
|
|
40
44
|
*/
|
|
41
45
|
this.selectedItems = [];
|
|
46
|
+
/** True if there are selected items and at least one can be removed */
|
|
47
|
+
this.selectedItemsClearable = false;
|
|
42
48
|
/** Track by used for the searchable table rows */
|
|
43
49
|
this.trackByIndex = (index) => index;
|
|
44
50
|
this.tableStatus = new Overlay('pending');
|
|
@@ -60,26 +66,44 @@ export class ItemPickerComponent {
|
|
|
60
66
|
this.destroyed.unsubscribe();
|
|
61
67
|
}
|
|
62
68
|
/**
|
|
63
|
-
* Called by the searchable table when a new set of items are returned from the getItems call
|
|
64
|
-
*
|
|
69
|
+
* Called by the searchable table when a new set of items are returned from the getItems call.
|
|
70
|
+
* If any of the items have `preventRemove` set, their indices are added to the context.
|
|
65
71
|
*/
|
|
66
72
|
onItemsChange(results) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
results.items.forEach(item => {
|
|
73
|
+
let newNonDependentCheckboxes = [];
|
|
74
|
+
results.items.forEach((item, index) => {
|
|
70
75
|
var _a, _b;
|
|
76
|
+
// Check to see if any of the items are marked to be selected by default and if so
|
|
77
|
+
// add them to the map.
|
|
71
78
|
if (item.defaultSelected && !((_a = this.selectionContext) === null || _a === void 0 ? void 0 : _a.selectedItemsMap.has(item.id))) {
|
|
72
79
|
(_b = this.selectionContext) === null || _b === void 0 ? void 0 : _b.selectedItemsMap.set(item.id, item);
|
|
73
80
|
}
|
|
81
|
+
// Check to see if any of the items are marked to prevent Removal, and if so
|
|
82
|
+
// add them to the non-dependent checkboxes array. This will prevent the master
|
|
83
|
+
// checkbox from toggling them.
|
|
84
|
+
if (item.preventRemove) {
|
|
85
|
+
newNonDependentCheckboxes.push(index);
|
|
86
|
+
}
|
|
74
87
|
});
|
|
88
|
+
this.selectionContext.nonDependentCheckboxes = newNonDependentCheckboxes;
|
|
75
89
|
this.availableItems = results.items;
|
|
76
90
|
}
|
|
77
91
|
/**
|
|
78
92
|
* Called when the clear selection link button is clicked
|
|
79
93
|
*/
|
|
80
94
|
onClearSelectionClick() {
|
|
81
|
-
|
|
82
|
-
|
|
95
|
+
// Remove removable items from map
|
|
96
|
+
// This is safe. See https://stackoverflow.com/questions/35940216/es6-is-it-dangerous-to-delete-elements-from-set-map-during-set-map-iteration
|
|
97
|
+
for (const [key, val] of this.selectionContext.selectedItemsMap) {
|
|
98
|
+
if (!val.preventRemove) {
|
|
99
|
+
this.selectionContext.selectedItemsMap.delete(key);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
this.selectionContext.rowCheckboxes.controls.forEach((control, index) => {
|
|
103
|
+
if (!this.availableItems[index].preventRemove) {
|
|
104
|
+
control.setValue(false);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
83
107
|
this.selectedItems = Array.from(this.selectionContext.selectedItemsMap.values());
|
|
84
108
|
}
|
|
85
109
|
/**
|
|
@@ -122,6 +146,7 @@ export class ItemPickerComponent {
|
|
|
122
146
|
}
|
|
123
147
|
});
|
|
124
148
|
this.selectedItems = Array.from((_a = this.selectionContext) === null || _a === void 0 ? void 0 : _a.selectedItemsMap.values());
|
|
149
|
+
this.selectedItemsClearable = this.selectedItems.length > 0 && this.selectedItems.some(i => !i.preventRemove);
|
|
125
150
|
});
|
|
126
151
|
}
|
|
127
152
|
/**
|
|
@@ -165,7 +190,7 @@ export class ItemPickerComponent {
|
|
|
165
190
|
ItemPickerComponent.decorators = [
|
|
166
191
|
{ type: Component, args: [{
|
|
167
192
|
selector: 'ec-item-picker',
|
|
168
|
-
template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"
|
|
193
|
+
template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isCheckboxDisabled]=\"item.preventRemove\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section id=\"{{id}}_selectedItems\" class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItemsClearable\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"pl-2 ml-auto font-size-base\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>ClearSelection_TC</a>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngIf=\"selectedItems.length\">\r\n <tr *ngFor=\"let item of selectedItems; last as isLast\"\r\n id=\"selected_row_{{item.id}}\"\r\n [class.border-bottom]=\"!isLast\">\r\n <td class=\"p-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </td>\r\n\r\n <td class=\"actions-col text-right\"\r\n style=\"vertical-align: middle;\">\r\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\r\n *ngIf=\"!item.preventRemove\"\r\n type=\"icon\"\r\n icon=\"ec-icon icon-cancel\"\r\n (clicked)=\"removeSelectedItem(item)\">\r\n </ec-button>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <tr *ngIf=\"!selectedItems.length\">\r\n <td *ngIf=\"!noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate\r\n [translateParams]=\"{itemName: itemName | translate}\">ItemPickerNoItemsSelected_SC</td>\r\n <td *ngIf=\"noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate>{{noSelectedItemsMessage}}</td>\r\n </tr>\r\n </tbody>\r\n </ec-table>\r\n\r\n <footer id=\"selectedItemsFooter\"\r\n *ngIf=\"selectedItems.length\"\r\n class=\"d-flex flex-shrink px-2 border-top align-items-center\"\r\n style=\"height: calc(2.5rem + 1px);\">\r\n <span class=\"ml-auto text-caption-1 font-color-hint\">\r\n {{selectedItems.length}} {{itemName | translate}}\r\n </span>\r\n </footer>\r\n </section>\r\n</div>\r\n\r\n<ng-template #defaultAvailableHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">{{availableTitle | translate}}</th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableItemTemplate\r\n let-item>\r\n <td>{{item.label}}</td>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectedItemTemplate\r\n let-item>\r\n {{item.label}}\r\n</ng-template>",
|
|
169
194
|
styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:flex}ec-searchable-table{border-right:2px solid var(--ec-border-color)}.selected-items{max-width:var(--ec-item-picker-max-width-selected-items,50%)}.no-data-message{white-space:normal}"]
|
|
170
195
|
},] }
|
|
171
196
|
];
|
|
@@ -188,4 +213,4 @@ ItemPickerComponent.propDecorators = {
|
|
|
188
213
|
defaultAvailableItemTemplate: [{ type: ViewChild, args: ['defaultAvailableItemTemplate', { static: true },] }],
|
|
189
214
|
defaultSelectedItemTemplate: [{ type: ViewChild, args: ['defaultSelectedItemTemplate', { static: true },] }]
|
|
190
215
|
};
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2l0ZW0tcGlja2VyL2l0ZW0tcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBZ0MsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFVM0UsQ0FBQztBQUVGLE1BQU0sT0FBTywyQkFBK0IsU0FBUSx5QkFBeUI7SUFBN0U7O1FBQ0UscUZBQXFGO1FBQzlFLHFCQUFnQixHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRWhFOzs7V0FHRztRQUNJLDRCQUF1QixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ2hFLENBQUM7Q0FBQTtBQU9ELE1BQU0sT0FBTyxtQkFBbUI7SUEyRTlCO1FBekVBLHdHQUF3RztRQUN4RixPQUFFLEdBQVksRUFBRSxDQUFDO1FBRWpDLHNEQUFzRDtRQUN0QyxtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUU1QyxvREFBb0Q7UUFDcEMsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFFM0MsNkRBQTZEO1FBQzdDLGFBQVEsR0FBVyxFQUFFLENBQUM7UUF1QnRDOztXQUVHO1FBQ2Esa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFRM0Ms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WUE1TUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLGs1TUFBMkM7O2FBRTVDOzs7O2lCQUlFLEtBQUs7NkJBR0wsS0FBSzs0QkFHTCxLQUFLO3VCQUdMLEtBQUs7d0JBR0wsS0FBSzs0Q0FHTCxLQUFLOzBDQUdMLEtBQUs7eUNBR0wsS0FBSztvQkFHTCxLQUFLO3VCQUdMLEtBQUs7K0JBR0wsS0FBSzs0QkFLTCxLQUFLO3FDQU1MLEtBQUs7NkNBd0JMLFNBQVMsU0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7MkNBQzVELFNBQVMsU0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7MENBQzFELFNBQVMsU0FBQyw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVGFibGVTZWFyY2hSZXN1bHRzIH0gZnJvbSAnLi4vLi4vZGlzcGxheS90YWJsZS9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBhZ2luZ0luZm8gfSBmcm9tICcuLi8uLi9kaXNwbGF5L3RhYmxlL3RhYmxlLXBhZ2luYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dCB9IGZyb20gJy4uLy4uL2Rpc3BsYXkvdGFibGUvdGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uLy4uL2Rpc3BsYXkvdmlldy1vdmVybGF5L3ZpZXctb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uL21lbnUvbWVudS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJJdGVtPFRWYWx1ZSA9IGFueSwgU0l0ZW1zID0gYW55PiBleHRlbmRzIE1lbnVJdGVtIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIC8qKiBXaGVuIHNldCB0byB0cnVlIHRoZSBhdmFpbGFibGUgaXRlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIGxpc3QgKi9cclxuICBkZWZhdWx0U2VsZWN0ZWQ/OiBib29sZWFuO1xyXG5cclxuICAvKiogUmVkZWZpbmluZyB0byBnZXQgdGhlIHR5cGluZyAqL1xyXG4gIHZhbHVlOiBUVmFsdWU7XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVBpY2tlclNlbGVjdGFibGVDb250ZXh0PFQ+IGV4dGVuZHMgVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dCB7XHJcbiAgLyoqIGlkL3ZhbHVlIG1hcCBvZiB0aGUgc2VsZWN0ZWQgaXRlbXMuIFVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2Ygd2hhdCBpcyBzZWxlY3RlZCAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zTWFwOiBNYXA8c3RyaW5nLCBQaWNrZXJJdGVtPFQ+PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogR2l2ZXMgYSB3YXkgdG8gdGVsbCB0aGUgcGlja2VyIGNvbXBvbmVudCB0aGF0IHRoZSBtYXAgd2FzIG1vZGlmaWVkIGV4dGVybmFsbHkgYW5kIHRvIHVwZGF0ZVxyXG4gICAqIHRoZSBhdmFpbGFibGUvc2VsZWN0ZWQgbGlzdHNcclxuICAgKi9cclxuICBwdWJsaWMgc2VsZWN0ZWRJdGVtc01hcENoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLWl0ZW0tcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2l0ZW0tcGlja2VyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEl0ZW1QaWNrZXJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgLyoqIElkZW50aWZpZXIgZm9yIHRoZSBjb21wb25lbnQuIFRoaXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgYmVnaW5uaW5nIG9mIGFsbCBpbnRlcm5hbCBhY3Rpb24gZWxlbWVudHMgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaWQ/OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFRpdGxlIGRpc3BsYXllZCBhYm92ZSB0aGUgYXZhaWxhYmxlIGl0ZW1zIHRhYmxlICovXHJcbiAgQElucHV0KCkgcHVibGljIGF2YWlsYWJsZVRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFRpdGxlIGRpc3BsYXllZCBhYm92ZSB0aGUgc2VsZWN0ZWQgaXRlbXMgbGlzdCAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZFRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFRoZSB0eXBlIG9mIGl0ZW0gYmVpbmcgc2VsZWN0ZWQuIEV4LiBNZXRlcnMsIEFkZHJlc3NlcyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpdGVtTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBGb3JtIGdyb3VwIHRoYXQgaXMgZ2l2ZW4gdG8gdGhlIGludGVybmFsIFNlYXJjaGFibGUgVGFibGUgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZm9ybU1vZGVsPzogRm9ybUdyb3VwO1xyXG5cclxuICAvKiogVGVtcGxhdGUgZm9yIHdoZW4gYSBjdXN0b20gaGVhZGVyIGlzIG5lZWRlZCBmb3IgdGhlIGF2YWlsYWJsZSBpdGVtcyB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21BdmFpbGFibGVIZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBUZW1wbGF0ZSBmb3Igd2hlbiBhIGN1c3RvbSBhdmFpbGFibGUgaXRlbSBpcyBuZWVkZWQuIERlZmF1bHQgdGVtcGxhdGUgaXMgYSBsYWJlbCBvbmx5ICovXHJcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUF2YWlsYWJsZUl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBUZW1wbGF0ZSBmb3Igd2hlbiBhIGN1c3RvbSBzZWxlY3RlZCBpdGVtIGlzIG5lZWRlZC4gRGVmYXVsdCB0ZW1wbGF0ZSBpcyBhIGxhYmVsIG9ubHkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tU2VsZWN0ZWRJdGVtVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKiogVXNlZCBieSB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSB0byBrbm93IHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcmVhZHk/OiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG5cclxuICAvKiogVXNlZCBieSBTZWFyY2hhYmxlIFRhYmxlIHRvIHJldHJpZXZlIHRoZSBhdmFpbGFibGUgaXRlbXMgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZ2V0SXRlbXM/OiAoc2VhcmNoPzogc3RyaW5nLCBwYWdlQ2hhbmdlSW5mbz86IFBhZ2luZ0luZm8pID0+IE9ic2VydmFibGU8VGFibGVTZWFyY2hSZXN1bHRzPjtcclxuXHJcbiAgLyoqIFVzZWQgdG8gbWFpbnRhaW4gdGhlIGF2YWlsYWJsZSBpdGVtcyBjaGVja2JveCBzZWxlY3Rpb24gYXMgd2VsbCBhcyB0aGUgc2VsZWN0ZWQgaXRlbXMgbGlzdCAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3Rpb25Db250ZXh0ITogSXRlbVBpY2tlclNlbGVjdGFibGVDb250ZXh0PFQ+O1xyXG5cclxuICAvKiogVXNlZCBieSB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSB3aGVuIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBpdGVtcyB0byBjaG9vc2UgZnJvbSBiYXNlZCBvbiB0aGUgZ2V0SXRlbXMgcmVzdWx0cy4gRG8gbm90IHN1cHBseVxyXG4gICAqICB0byBpbmhlcml0IHRoZSBkZWZhdWx0IG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG5vRGF0YU1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5vIHNlbGVjdGVkIGl0ZW1zIG1lc3NhZ2UuIElmIHByb3ZpZGVkIHRoaXMgd2lsbCBiZSB1c2VkLCBvdGhlcndpc2UgdGhlIGRlZmF1bHQgbWVzc2FnZSB3aXRoIHRoZSBpdGVtIG5hbWVcclxuICAgKiBpbnRlcnBvbGF0aW9uIHdpbGwgYmUgdXNlZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbm9TZWxlY3RlZEl0ZW1zTWVzc2FnZT86IHN0cmluZztcclxuXHJcbiAgLyoqIExpc3Qgb2YgYXZhaWxhYmxlIGl0ZW1zIHRvIHBpY2sgZnJvbSAqL1xyXG4gIHB1YmxpYyBhdmFpbGFibGVJdGVtczogUGlja2VySXRlbVtdID0gW107XHJcbiAgLyoqIFxyXG4gICAqIFNlbGVjdGVkIGl0ZW1zIGFycmF5LiBDcmVhdGVkIGZyb20gdGhlIHNlbGVjdGVkIGl0ZW1zIG1hcC4gQmluZGluZyB0byB0aGUgXHJcbiAgICogbWFwIGl0ZXJhdGUgdmFsdWVzIGNhdXNlZCBhbmd1bGFyIFwiZXhwcmVzc2lvbiBjaGFuZ2VkXCIgZXJyb3JzIHNvIGFmdGVyIGEgbWFwXHJcbiAgICogdXBkYXRlIHRoaXMgZ2V0cyBzZXQgdG8gdGhlIHZhbHVlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBQaWNrZXJJdGVtW10gPSBbXTtcclxuXHJcbiAgLyoqIFRyYWNrIGJ5IHVzZWQgZm9yIHRoZSBzZWFyY2hhYmxlIHRhYmxlIHJvd3MgKi9cclxuICBwdWJsaWMgdHJhY2tCeUluZGV4ID0gKGluZGV4OiBudW1iZXIpID0+IGluZGV4O1xyXG5cclxuICBwdWJsaWMgdGFibGVTdGF0dXM6IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgncGVuZGluZycpO1xyXG4gIC8qKlxyXG4gICAqIFRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB0aGUgYXZhaWxhYmxlIGFuZCBzZWxlY3RlZCBpdGVtcyBhcyB3ZWxsIGFzIHRoZSBhdmFpbGFibGUgaXRlbSBoZWFkZXIuIFxyXG4gICAqIFRoaXMgd2lsbCBiZSBzZXQgdG8gdGhlIGRlZmF1bHQgdGVtcGxhdGUgaWYgYSBjdXN0b20gaXMgbm90IHByb3ZpZGVkXHJcbiAgICovXHJcbiAgcHVibGljIGludGVybmFsaXplZEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwdWJsaWMgaW50ZXJuYWxpemVkQXZhaWxhYmxlSXRlbVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwdWJsaWMgaW50ZXJuYWxpemVkU2VsZWN0ZWRJdGVtVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKiogRGVmYXVsdCB0ZW1wbGF0ZXMgdXNlZCBpZiBhIGN1c3RvbSB0ZW1wbGF0ZSBpcyBub3QgcHJvdmlkZWQgKi9cclxuICBAVmlld0NoaWxkKCdkZWZhdWx0QXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIGRlZmF1bHRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdFNlbGVjdGVkSXRlbVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0ZWRJdGVtVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKiogVXNlZCB0byBzaHV0IGRvd24gb3VyIHN1YnNjcmlwdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZCAqL1xyXG4gIHByaXZhdGUgZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXR1cFJvd0NoZWNrYm94ZXNXYXRjaGVyKCk7XHJcbiAgICB0aGlzLnNldHVwU2VsZWN0ZWRJdGVtc0NoYW5nZWRXYXRjaGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXYXRjaCBmb3IgY2hhbmdlcyBhbmQgcmVhY3QgaWYgdGhlIGN1c3RvbSBpdGVtIHRlbXBsYXRlIHZhbHVlIGNoYW5nZXNcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEludGVybmFsaXplZFRlbXBsYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCBieSB0aGUgc2VhcmNoYWJsZSB0YWJsZSB3aGVuIGEgbmV3IHNldCBvZiBpdGVtcyBhcmUgcmV0dXJuZWQgZnJvbSB0aGUgZ2V0SXRlbXMgY2FsbFxyXG4gICAqIEBwYXJhbSByZXN1bHRzIFxyXG4gICAqL1xyXG4gIHB1YmxpYyBvbkl0ZW1zQ2hhbmdlKHJlc3VsdHM6IFRhYmxlU2VhcmNoUmVzdWx0cykge1xyXG4gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aGUgaXRlbXMgYXJlIG1hcmtlZCB0byBiZSBzZWxlY3RlZCBieSBkZWZhdWx0IGFuZCBpZiBzb1xyXG4gICAgLy8gYWRkIHRoZW0gdG8gdGhlIG1hcC5cclxuICAgICg8UGlja2VySXRlbVtdPnJlc3VsdHMuaXRlbXMpLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLmRlZmF1bHRTZWxlY3RlZCAmJiAhdGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLmhhcyhpdGVtLmlkKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5zZXQoaXRlbS5pZCwgaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9ICg8UGlja2VySXRlbVtdPnJlc3VsdHMuaXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNsZWFyIHNlbGVjdGlvbiBsaW5rIGJ1dHRvbiBpcyBjbGlja2VkXHJcbiAgICovXHJcbiAgcHVibGljIG9uQ2xlYXJTZWxlY3Rpb25DbGljaygpIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnJvd0NoZWNrYm94ZXMuY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IGNvbnRyb2wuc2V0VmFsdWUoZmFsc2UpKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXAudmFsdWVzKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHJlbW92ZSBpdGVtIGJ1dHRvbiBpcyBjbGlja2VkIGZvciBhIHNlbGVjdGVkIGl0ZW1cclxuICAgKiBAcGFyYW0gcmVtb3ZlSXRlbSBcclxuICAgKi9cclxuICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtKHJlbW92ZUl0ZW06IFBpY2tlckl0ZW0pOiB2b2lkIHtcclxuICAgIGxldCBmb3VuZEluZGV4ID0gdGhpcy5hdmFpbGFibGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSByZW1vdmVJdGVtLmlkKTtcclxuICAgIGlmIChmb3VuZEluZGV4ID4gLTEpIHtcclxuICAgICAgLy8gVXBkYXRlIHRoZSByb3cgY2hlY2tib3ggc2luY2UgdGhlIGl0ZW0gZXhpc3RzIGluIHRoZSBwYWdlIGJlaW5nIHZpZXdlZFxyXG4gICAgICAvLyBUaGUgdmFsdWUgY2hhbmdlIGhhbmRsZXIgZm9yIHJvdyBjaGVja2JveGVzIHdpbGwgdXBkYXRlIHRoZSBtYXAvc2VsZWN0ZWQgaXRlbXNcclxuICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnJvd0NoZWNrYm94ZXMuYXQoZm91bmRJbmRleCkuc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gVGhlIGl0ZW0gYmVpbmcgcmVtb3ZlZCBpcyBub3Qgb24gdGhlIGN1cnJlbnQgcGFnZSBzbyBqdXN0IHVwZGF0ZSB0aGVcclxuICAgICAgLy8gbWFwL3NlbGVjdGVkIGl0ZW1zXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwLmRlbGV0ZShyZW1vdmVJdGVtLmlkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcC52YWx1ZXMoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXYXRjaCBmb3IgY2hhbmdlcyB0byB0aGUgcm93IGNoZWNrYm94ZXMgZm9ybSBhcnJheSBhbmQgdXBkYXRlIHRoZSBzZWxlY3RlZCBpdGVtc1xyXG4gICAqIGxpc3RcclxuICAgKi9cclxuICBwcml2YXRlIHNldHVwUm93Q2hlY2tib3hlc1dhdGNoZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnJvd0NoZWNrYm94ZXMudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIC8vIERlYm91bmNlIDEwIGlzIHNpbXBseSB0byBub3Qgc3BhbSB0aGUgY2hhbmdlIGhhbmRsZXIgb24gbG9hZC9wYWdlIGNoYW5nZVxyXG4gICAgICAvLyBPdGhlcndpc2UgdGhpcyB3aWxsIGdldCBjYWxsZWQgZXZlcnkgdGltZSBhIG5ldyByb3cgaXMgYWRkZWQgdG8gdGhlIHRhYmxlXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKChyb3dWYWx1ZXM6IGJvb2xlYW5bXSkgPT4ge1xyXG4gICAgICByb3dWYWx1ZXMuZm9yRWFjaCgoc2VsZWN0ZWQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGF2YWlsYWJsZUl0ZW0gPSB0aGlzLmF2YWlsYWJsZUl0ZW1zW2luZGV4XTtcclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuaGFzKGF2YWlsYWJsZUl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuZGVsZXRlKGF2YWlsYWJsZUl0ZW0uaWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5oYXMoYXZhaWxhYmxlSXRlbS5pZCkpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5zZXQoYXZhaWxhYmxlSXRlbS5pZCwgYXZhaWxhYmxlSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLnZhbHVlcygpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2F0Y2ggdG8gYmUgdG9sZCBpZiBjaGFuZ2VzIHRvIHRoZSBtYXAgd2VyZSBtYWRlIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCBhbmQgaWYgc28gdXBkYXRlXHJcbiAgICogdGhlIGFycmF5IGRpc3BsYXllZCBpbiB0aGUgc2VsZWN0ZWQgbGlzdCBhbmQgc2VsZWN0IGNoZWNrYm94ZXMgZm9yIHZpc2libGUgYXZhaWxhYmxlIGl0ZW1zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXR1cFNlbGVjdGVkSXRlbXNDaGFuZ2VkV2F0Y2hlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwQ2hhbmdlZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkNvbnRleHQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC52YWx1ZXMoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcC5oYXMoaXRlbS5pZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnJvd0NoZWNrYm94ZXMuYXQoaW5kZXgpLnNldFZhbHVlKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW50ZXJuYWxpemVkVGVtcGxhdGVzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VzdG9tQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSA9IHRoaXMuY3VzdG9tQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludGVybmFsaXplZEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlID0gdGhpcy5kZWZhdWx0QXZhaWxhYmxlSGVhZGVyVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY3VzdG9tQXZhaWxhYmxlSXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkQXZhaWxhYmxlSXRlbVRlbXBsYXRlID0gdGhpcy5jdXN0b21BdmFpbGFibGVJdGVtVGVtcGxhdGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludGVybmFsaXplZEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jdXN0b21TZWxlY3RlZEl0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLmludGVybmFsaXplZFNlbGVjdGVkSXRlbVRlbXBsYXRlID0gdGhpcy5jdXN0b21TZWxlY3RlZEl0ZW1UZW1wbGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkU2VsZWN0ZWRJdGVtVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRTZWxlY3RlZEl0ZW1UZW1wbGF0ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2l0ZW0tcGlja2VyL2l0ZW0tcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBZ0MsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFjM0UsQ0FBQztBQUVGLE1BQU0sT0FBTywyQkFBK0IsU0FBUSx5QkFBeUI7SUFBN0U7O1FBQ0UscUZBQXFGO1FBQzlFLHFCQUFnQixHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRWhFOzs7V0FHRztRQUNJLDRCQUF1QixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRTlEOztXQUVHO1FBQ2Esb0NBQStCLEdBQVksSUFBSSxDQUFDO0lBQ2xFLENBQUM7Q0FBQTtBQU9ELE1BQU0sT0FBTyxtQkFBbUI7SUErRTlCO1FBN0VBLHdHQUF3RztRQUN4RixPQUFFLEdBQVksRUFBRSxDQUFDO1FBRWpDLHNEQUFzRDtRQUN0QyxtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUU1QyxvREFBb0Q7UUFDcEMsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFFM0MsNkRBQTZEO1FBQzdDLGFBQVEsR0FBVyxFQUFFLENBQUM7UUF1QnRD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cUNBTUwsS0FBSzs2Q0E0QkwsU0FBUyxTQUFDLGdDQUFnQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTsyQ0FDNUQsU0FBUyxTQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTswQ0FDMUQsU0FBUyxTQUFDLDZCQUE2QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgVGFibGVTZWFyY2hSZXN1bHRzIH0gZnJvbSAnLi4vLi4vZGlzcGxheS90YWJsZS9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBhZ2luZ0luZm8gfSBmcm9tICcuLi8uLi9kaXNwbGF5L3RhYmxlL3RhYmxlLXBhZ2luYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dCB9IGZyb20gJy4uLy4uL2Rpc3BsYXkvdGFibGUvdGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uLy4uL2Rpc3BsYXkvdmlldy1vdmVybGF5L3ZpZXctb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uL21lbnUvbWVudS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJJdGVtPFRWYWx1ZSA9IGFueSwgU0l0ZW1zID0gYW55PiBleHRlbmRzIE1lbnVJdGVtIHtcclxuICBpZDogc3RyaW5nO1xyXG5cclxuICAvKiogV2hlbiBzZXQgdG8gdHJ1ZSB0aGUgYXZhaWxhYmxlIGl0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBsaXN0ICovXHJcbiAgZGVmYXVsdFNlbGVjdGVkPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBpdGVtIHdpbGwgbm90IGJlIGFsbG93ZWQgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3RlZCBsaXN0ICovXHJcbiAgcHJldmVudFJlbW92ZT86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBSZWRlZmluaW5nIHRvIGdldCB0aGUgdHlwaW5nICovXHJcbiAgdmFsdWU6IFRWYWx1ZTtcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUGlja2VyU2VsZWN0YWJsZUNvbnRleHQ8VD4gZXh0ZW5kcyBUYWJsZVNlbGVjdGFibGVSb3dDb250ZXh0IHtcclxuICAvKiogaWQvdmFsdWUgbWFwIG9mIHRoZSBzZWxlY3RlZCBpdGVtcy4gVXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiB3aGF0IGlzIHNlbGVjdGVkICovXHJcbiAgcHVibGljIHNlbGVjdGVkSXRlbXNNYXA6IE1hcDxzdHJpbmcsIFBpY2tlckl0ZW08VD4+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAvKipcclxuICAgKiBHaXZlcyBhIHdheSB0byB0ZWxsIHRoZSBwaWNrZXIgY29tcG9uZW50IHRoYXQgdGhlIG1hcCB3YXMgbW9kaWZpZWQgZXh0ZXJuYWxseSBhbmQgdG8gdXBkYXRlXHJcbiAgICogdGhlIGF2YWlsYWJsZS9zZWxlY3RlZCBsaXN0c1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zTWFwQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkdmFuY2VkUm93Q2xpY2tCZWhhdmlvciBpcyBkaXNhYmxlZCBmb3IgSXRlbVBpY2tlci5cclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZUFkdmFuY2VkUm93Q2xpY2tCZWhhdmlvcjogYm9vbGVhbiA9IHRydWU7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtaXRlbS1waWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pdGVtLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaXRlbS1waWNrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXRlbVBpY2tlckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICAvKiogSWRlbnRpZmllciBmb3IgdGhlIGNvbXBvbmVudC4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgYWxsIGludGVybmFsIGFjdGlvbiBlbGVtZW50cyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpZD86IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGl0bGUgZGlzcGxheWVkIGFib3ZlIHRoZSBhdmFpbGFibGUgaXRlbXMgdGFibGUgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYXZhaWxhYmxlVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGl0bGUgZGlzcGxheWVkIGFib3ZlIHRoZSBzZWxlY3RlZCBpdGVtcyBsaXN0ICovXHJcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGhlIHR5cGUgb2YgaXRlbSBiZWluZyBzZWxlY3RlZC4gRXguIE1ldGVycywgQWRkcmVzc2VzICovXHJcbiAgQElucHV0KCkgcHVibGljIGl0ZW1OYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEZvcm0gZ3JvdXAgdGhhdCBpcyBnaXZlbiB0byB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtTW9kZWw/OiBGb3JtR3JvdXA7XHJcblxyXG4gIC8qKiBUZW1wbGF0ZSBmb3Igd2hlbiBhIGN1c3RvbSBoZWFkZXIgaXMgbmVlZGVkIGZvciB0aGUgYXZhaWxhYmxlIGl0ZW1zIHRhYmxlICovXHJcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUF2YWlsYWJsZUhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqIFRlbXBsYXRlIGZvciB3aGVuIGEgY3VzdG9tIGF2YWlsYWJsZSBpdGVtIGlzIG5lZWRlZC4gRGVmYXVsdCB0ZW1wbGF0ZSBpcyBhIGxhYmVsIG9ubHkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tQXZhaWxhYmxlSXRlbVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqIFRlbXBsYXRlIGZvciB3aGVuIGEgY3VzdG9tIHNlbGVjdGVkIGl0ZW0gaXMgbmVlZGVkLiBEZWZhdWx0IHRlbXBsYXRlIGlzIGEgbGFiZWwgb25seSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWxlY3RlZEl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBVc2VkIGJ5IHRoZSBpbnRlcm5hbCBTZWFyY2hhYmxlIFRhYmxlIHRvIGtub3cgd2hlbiB0aGUgcGFnZSBpcyByZWFkeSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkeT86IE9ic2VydmFibGU8dm9pZD47XHJcblxyXG4gIC8qKiBVc2VkIGJ5IFNlYXJjaGFibGUgVGFibGUgdG8gcmV0cmlldmUgdGhlIGF2YWlsYWJsZSBpdGVtcyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBnZXRJdGVtcz86IChzZWFyY2g/OiBzdHJpbmcsIHBhZ2VDaGFuZ2VJbmZvPzogUGFnaW5nSW5mbykgPT4gT2JzZXJ2YWJsZTxUYWJsZVNlYXJjaFJlc3VsdHM+O1xyXG5cclxuICAvKiogVXNlZCB0byBtYWludGFpbiB0aGUgYXZhaWxhYmxlIGl0ZW1zIGNoZWNrYm94IHNlbGVjdGlvbiBhcyB3ZWxsIGFzIHRoZSBzZWxlY3RlZCBpdGVtcyBsaXN0ICovXHJcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGlvbkNvbnRleHQhOiBJdGVtUGlja2VyU2VsZWN0YWJsZUNvbnRleHQ8VD47XHJcblxyXG4gIC8qKiBVc2VkIGJ5IHRoZSBpbnRlcm5hbCBTZWFyY2hhYmxlIFRhYmxlIHdoZW4gdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGl0ZW1zIHRvIGNob29zZSBmcm9tIGJhc2VkIG9uIHRoZSBnZXRJdGVtcyByZXN1bHRzLiBEbyBub3Qgc3VwcGx5XHJcbiAgICogIHRvIGluaGVyaXQgdGhlIGRlZmF1bHQgbWVzc2FnZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbm9EYXRhTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbm8gc2VsZWN0ZWQgaXRlbXMgbWVzc2FnZS4gSWYgcHJvdmlkZWQgdGhpcyB3aWxsIGJlIHVzZWQsIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBtZXNzYWdlIHdpdGggdGhlIGl0ZW0gbmFtZVxyXG4gICAqIGludGVycG9sYXRpb24gd2lsbCBiZSB1c2VkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBub1NlbGVjdGVkSXRlbXNNZXNzYWdlPzogc3RyaW5nO1xyXG5cclxuICAvKiogTGlzdCBvZiBhdmFpbGFibGUgaXRlbXMgdG8gcGljayBmcm9tICovXHJcbiAgcHVibGljIGF2YWlsYWJsZUl0ZW1zOiBQaWNrZXJJdGVtW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0ZWQgaXRlbXMgYXJyYXkuIENyZWF0ZWQgZnJvbSB0aGUgc2VsZWN0ZWQgaXRlbXMgbWFwLiBCaW5kaW5nIHRvIHRoZVxyXG4gICAqIG1hcCBpdGVyYXRlIHZhbHVlcyBjYXVzZWQgYW5ndWxhciBcImV4cHJlc3Npb24gY2hhbmdlZFwiIGVycm9ycyBzbyBhZnRlciBhIG1hcFxyXG4gICAqIHVwZGF0ZSB0aGlzIGdldHMgc2V0IHRvIHRoZSB2YWx1ZXNcclxuICAgKi9cclxuICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogUGlja2VySXRlbVtdID0gW107XHJcblxyXG4gIC8qKiBUcnVlIGlmIHRoZXJlIGFyZSBzZWxlY3RlZCBpdGVtcyBhbmQgYXQgbGVhc3Qgb25lIGNhbiBiZSByZW1vdmVkICovXHJcbiAgcHVibGljIHNlbGVjdGVkSXRlbXNDbGVhcmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFRyYWNrIGJ5IHVzZWQgZm9yIHRoZSBzZWFyY2hhYmxlIHRhYmxlIHJvd3MgKi9cclxuICBwdWJsaWMgdHJhY2tCeUluZGV4ID0gKGluZGV4OiBudW1iZXIpID0+IGluZGV4O1xyXG5cclxuICBwdWJsaWMgdGFibGVTdGF0dXM6IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgncGVuZGluZycpO1xyXG4gIC8qKlxyXG4gICAqIFRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB0aGUgYXZhaWxhYmxlIGFuZCBzZWxlY3RlZCBpdGVtcyBhcyB3ZWxsIGFzIHRoZSBhdmFpbGFibGUgaXRlbSBoZWFkZXIuXHJcbiAgICogVGhpcyB3aWxsIGJlIHNldCB0byB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSBpZiBhIGN1c3RvbSBpcyBub3QgcHJvdmlkZWRcclxuICAgKi9cclxuICBwdWJsaWMgaW50ZXJuYWxpemVkQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHB1YmxpYyBpbnRlcm5hbGl6ZWRBdmFpbGFibGVJdGVtVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHB1YmxpYyBpbnRlcm5hbGl6ZWRTZWxlY3RlZEl0ZW1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBEZWZhdWx0IHRlbXBsYXRlcyB1c2VkIGlmIGEgY3VzdG9tIHRlbXBsYXRlIGlzIG5vdCBwcm92aWRlZCAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2RlZmF1bHRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgZGVmYXVsdEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdkZWZhdWx0QXZhaWxhYmxlSXRlbVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBkZWZhdWx0QXZhaWxhYmxlSXRlbVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdkZWZhdWx0U2VsZWN0ZWRJdGVtVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIGRlZmF1bHRTZWxlY3RlZEl0ZW1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBVc2VkIHRvIHNodXQgZG93biBvdXIgc3Vic2NyaXB0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkICovXHJcbiAgcHJpdmF0ZSBkZXN0cm95ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldHVwUm93Q2hlY2tib3hlc1dhdGNoZXIoKTtcclxuICAgIHRoaXMuc2V0dXBTZWxlY3RlZEl0ZW1zQ2hhbmdlZFdhdGNoZXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdhdGNoIGZvciBjaGFuZ2VzIGFuZCByZWFjdCBpZiB0aGUgY3VzdG9tIGl0ZW0gdGVtcGxhdGUgdmFsdWUgY2hhbmdlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0SW50ZXJuYWxpemVkVGVtcGxhdGVzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIGJ5IHRoZSBzZWFyY2hhYmxlIHRhYmxlIHdoZW4gYSBuZXcgc2V0IG9mIGl0ZW1zIGFyZSByZXR1cm5lZCBmcm9tIHRoZSBnZXRJdGVtcyBjYWxsLlxyXG4gICAqIElmIGFueSBvZiB0aGUgaXRlbXMgaGF2ZSBgcHJldmVudFJlbW92ZWAgc2V0LCB0aGVpciBpbmRpY2VzIGFyZSBhZGRlZCB0byB0aGUgY29udGV4dC5cclxuICAgKi9cclxuICBwdWJsaWMgb25JdGVtc0NoYW5nZShyZXN1bHRzOiBUYWJsZVNlYXJjaFJlc3VsdHMpIHtcclxuICAgIGxldCBuZXdOb25EZXBlbmRlbnRDaGVja2JveGVzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAgICg8UGlja2VySXRlbVtdPnJlc3VsdHMuaXRlbXMpLmZvckVhY2goKGl0ZW0sIGluZGV4KSAgPT4ge1xyXG4gICAgICAvLyBDaGVjayB0byBzZWUgaWYgYW55IG9mIHRoZSBpdGVtcyBhcmUgbWFya2VkIHRvIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQgYW5kIGlmIHNvXHJcbiAgICAgIC8vIGFkZCB0aGVtIHRvIHRoZSBtYXAuXHJcbiAgICAgIGlmIChpdGVtLmRlZmF1bHRTZWxlY3RlZCAmJiAhdGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLmhhcyhpdGVtLmlkKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5zZXQoaXRlbS5pZCwgaXRlbSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhbnkgb2YgdGhlIGl0ZW1zIGFyZSBtYXJrZWQgdG8gcHJldmVudCBSZW1vdmFsLCBhbmQgaWYgc29cclxuICAgICAgLy8gYWRkIHRoZW0gdG8gdGhlIG5vbi1kZXBlbmRlbnQgY2hlY2tib3hlcyBhcnJheS4gIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBtYXN0ZXJcclxuICAgICAgLy8gY2hlY2tib3ggZnJvbSB0b2dnbGluZyB0aGVtLlxyXG4gICAgICBpZiAoaXRlbS5wcmV2ZW50UmVtb3ZlKSB7XHJcbiAgICAgICAgbmV3Tm9uRGVwZW5kZW50Q2hlY2tib3hlcy5wdXNoKGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0Lm5vbkRlcGVuZGVudENoZWNrYm94ZXMgPSBuZXdOb25EZXBlbmRlbnRDaGVja2JveGVzO1xyXG5cclxuICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSAoPFBpY2tlckl0ZW1bXT5yZXN1bHRzLml0ZW1zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIHRoZSBjbGVhciBzZWxlY3Rpb24gbGluayBidXR0b24gaXMgY2xpY2tlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBvbkNsZWFyU2VsZWN0aW9uQ2xpY2soKSB7XHJcbiAgICAvLyBSZW1vdmUgcmVtb3ZhYmxlIGl0ZW1zIGZyb20gbWFwXHJcbiAgICAvLyBUaGlzIGlzIHNhZmUuICBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU5NDAyMTYvZXM2LWlzLWl0LWRhbmdlcm91cy10by1kZWxldGUtZWxlbWVudHMtZnJvbS1zZXQtbWFwLWR1cmluZy1zZXQtbWFwLWl0ZXJhdGlvblxyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwKSB7XHJcbiAgICAgIGlmICghdmFsLnByZXZlbnRSZW1vdmUpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcC5kZWxldGUoa2V5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5yb3dDaGVja2JveGVzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgaWYoIXRoaXMuYXZhaWxhYmxlSXRlbXNbaW5kZXhdLnByZXZlbnRSZW1vdmUpe1xyXG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZmFsc2UpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXAudmFsdWVzKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHJlbW92ZSBpdGVtIGJ1dHRvbiBpcyBjbGlja2VkIGZvciBhIHNlbGVjdGVkIGl0ZW1cclxuICAgKiBAcGFyYW0gcmVtb3ZlSXRlbVxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW1vdmVTZWxlY3RlZEl0ZW0ocmVtb3ZlSXRlbTogUGlja2VySXRlbSk6IHZvaWQge1xyXG4gICAgbGV0IGZvdW5kSW5kZXggPSB0aGlzLmF2YWlsYWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IHJlbW92ZUl0ZW0uaWQpO1xyXG4gICAgaWYgKGZvdW5kSW5kZXggPiAtMSkge1xyXG4gICAgICAvLyBVcGRhdGUgdGhlIHJvdyBjaGVja2JveCBzaW5jZSB0aGUgaXRlbSBleGlzdHMgaW4gdGhlIHBhZ2UgYmVpbmcgdmlld2VkXHJcbiAgICAgIC8vIFRoZSB2YWx1ZSBjaGFuZ2UgaGFuZGxlciBmb3Igcm93IGNoZWNrYm94ZXMgd2lsbCB1cGRhdGUgdGhlIG1hcC9zZWxlY3RlZCBpdGVtc1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQucm93Q2hlY2tib3hlcy5hdChmb3VuZEluZGV4KS5zZXRWYWx1ZShmYWxzZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUaGUgaXRlbSBiZWluZyByZW1vdmVkIGlzIG5vdCBvbiB0aGUgY3VycmVudCBwYWdlIHNvIGp1c3QgdXBkYXRlIHRoZVxyXG4gICAgICAvLyBtYXAvc2VsZWN0ZWQgaXRlbXNcclxuICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXAuZGVsZXRlKHJlbW92ZUl0ZW0uaWQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwLnZhbHVlcygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdhdGNoIGZvciBjaGFuZ2VzIHRvIHRoZSByb3cgY2hlY2tib3hlcyBmb3JtIGFycmF5IGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkIGl0ZW1zXHJcbiAgICogbGlzdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0dXBSb3dDaGVja2JveGVzV2F0Y2hlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8ucm93Q2hlY2tib3hlcy52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgLy8gRGVib3VuY2UgMTAgaXMgc2ltcGx5IHRvIG5vdCBzcGFtIHRoZSBjaGFuZ2UgaGFuZGxlciBvbiBsb2FkL3BhZ2UgY2hhbmdlXHJcbiAgICAgIC8vIE90aGVyd2lzZSB0aGlzIHdpbGwgZ2V0IGNhbGxlZCBldmVyeSB0aW1lIGEgbmV3IHJvdyBpcyBhZGRlZCB0byB0aGUgdGFibGVcclxuICAgICAgZGVib3VuY2VUaW1lKDEwKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUoKHJvd1ZhbHVlczogYm9vbGVhbltdKSA9PiB7XHJcbiAgICAgIHJvd1ZhbHVlcy5mb3JFYWNoKChzZWxlY3RlZCwgaW5kZXgpID0+IHtcclxuICAgICAgICBsZXQgYXZhaWxhYmxlSXRlbSA9IHRoaXMuYXZhaWxhYmxlSXRlbXNbaW5kZXhdO1xyXG5cclxuICAgICAgICBpZiAoIXNlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5oYXMoYXZhaWxhYmxlSXRlbS5pZCkpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5kZWxldGUoYXZhaWxhYmxlSXRlbS5pZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZCAmJiAhdGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLmhhcyhhdmFpbGFibGVJdGVtLmlkKSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLnNldChhdmFpbGFibGVJdGVtLmlkLCBhdmFpbGFibGVJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAudmFsdWVzKCkpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDbGVhcmFibGUgPSB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkSXRlbXMuc29tZShpID0+ICFpLnByZXZlbnRSZW1vdmUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXYXRjaCB0byBiZSB0b2xkIGlmIGNoYW5nZXMgdG8gdGhlIG1hcCB3ZXJlIG1hZGUgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50IGFuZCBpZiBzbyB1cGRhdGVcclxuICAgKiB0aGUgYXJyYXkgZGlzcGxheWVkIGluIHRoZSBzZWxlY3RlZCBsaXN0IGFuZCBzZWxlY3QgY2hlY2tib3hlcyBmb3IgdmlzaWJsZSBhdmFpbGFibGUgaXRlbXNcclxuICAgKi9cclxuICBwcml2YXRlIHNldHVwU2VsZWN0ZWRJdGVtc0NoYW5nZWRXYXRjaGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXBDaGFuZ2VkLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uQ29udGV4dCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLnZhbHVlcygpKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwLmhhcyhpdGVtLmlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQucm93Q2hlY2tib3hlcy5hdChpbmRleCkuc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRJbnRlcm5hbGl6ZWRUZW1wbGF0ZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXN0b21BdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLmludGVybmFsaXplZEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlID0gdGhpcy5jdXN0b21BdmFpbGFibGVIZWFkZXJUZW1wbGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jdXN0b21BdmFpbGFibGVJdGVtVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRBdmFpbGFibGVJdGVtVGVtcGxhdGUgPSB0aGlzLmN1c3RvbUF2YWlsYWJsZUl0ZW1UZW1wbGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkQXZhaWxhYmxlSXRlbVRlbXBsYXRlID0gdGhpcy5kZWZhdWx0QXZhaWxhYmxlSXRlbVRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdGVkSXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkU2VsZWN0ZWRJdGVtVGVtcGxhdGUgPSB0aGlzLmN1c3RvbVNlbGVjdGVkSXRlbVRlbXBsYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRTZWxlY3RlZEl0ZW1UZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbVRlbXBsYXRlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Component,
|
|
2
|
-
import {
|
|
3
|
-
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
1
|
+
import { Component, HostBinding, HostListener, Input } from '@angular/core';
|
|
2
|
+
import { FormArray, FormControl } from '@angular/forms';
|
|
4
3
|
import { Subject } from 'rxjs';
|
|
4
|
+
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
5
5
|
export class TableSelectableRowContext {
|
|
6
6
|
constructor() {
|
|
7
7
|
/**specify the form control to use for the selectAll checkbox or provide your own.
|
|
@@ -26,13 +26,21 @@ export class TableSelectableRowContext {
|
|
|
26
26
|
* without replacing the actual FormArray that the hosting component may be subscribed to for changes
|
|
27
27
|
*/
|
|
28
28
|
this.rowAddedOrRemoved = new Subject();
|
|
29
|
+
/**
|
|
30
|
+
* Set to true to disable Shift-Click/Ctrl-Click functionality
|
|
31
|
+
*/
|
|
32
|
+
this.disableAdvancedRowClickBehavior = false;
|
|
33
|
+
/**
|
|
34
|
+
* Set to list of indices of controls that should not toggle when master/header checkbox toggles
|
|
35
|
+
*/
|
|
36
|
+
this.nonDependentCheckboxes = [];
|
|
29
37
|
}
|
|
30
38
|
}
|
|
31
39
|
export class TableSelectableRowComponent {
|
|
32
40
|
constructor() {
|
|
33
41
|
/**The ID root to use for the checkbox and table cell */
|
|
34
42
|
this.id = '';
|
|
35
|
-
this.
|
|
43
|
+
this._selectionEnabled = true;
|
|
36
44
|
/*Required for all rows. The row index this component represents, to allow it to know how to handle shift+clicks.
|
|
37
45
|
Defaults to -1 which will cause the directive to behave as a header row*/
|
|
38
46
|
this.rowIndex = -1;
|
|
@@ -40,10 +48,17 @@ export class TableSelectableRowComponent {
|
|
|
40
48
|
* if the checkbox is not the first column in the table
|
|
41
49
|
*/
|
|
42
50
|
this.lockedColOptions = { border: false, left: 0 };
|
|
43
|
-
/**Automatically set to true based on checkbox state, used to highlight the row to match our table selected row styles */
|
|
51
|
+
/** Automatically set to true based on checkbox state, used to highlight the row to match our table selected row styles */
|
|
44
52
|
this.isSelected = false;
|
|
45
|
-
/**
|
|
53
|
+
/** Automatically set to true if no rowIndex is provided or the row index is less than zero */
|
|
46
54
|
this.isHeader = false;
|
|
55
|
+
/**
|
|
56
|
+
* Set to true if you want the checkbox to be disabled.
|
|
57
|
+
*
|
|
58
|
+
* When you use this property, make sure you set `disableAdvancedRowClickBehavior: true`
|
|
59
|
+
* in the `TableSelectableRowContext`, or undesired side-effects will occur.
|
|
60
|
+
*/
|
|
61
|
+
this.isCheckboxDisabled = false;
|
|
47
62
|
/* A reference that we can change when a control is replaced to force the master checkbox reference to update
|
|
48
63
|
without also replacing the form array that the host component may be watching for selected row changes */
|
|
49
64
|
this.dependentCheckboxesReference = { controls: [] };
|
|
@@ -52,13 +67,13 @@ export class TableSelectableRowComponent {
|
|
|
52
67
|
this.destroyed = new Subject();
|
|
53
68
|
}
|
|
54
69
|
/** Disables the selection functionality when false */
|
|
55
|
-
set
|
|
56
|
-
get
|
|
70
|
+
set isSelectionEnabled(value) { this._selectionEnabled = value !== false; }
|
|
71
|
+
get isSelectionEnabled() { return this._selectionEnabled; }
|
|
57
72
|
/**Validate and populate the context as the table is dynamically built. Because the context is shared between the
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
73
|
+
* header and each of the rows, changes to it can be used to determine what is happening and hook up the correct
|
|
74
|
+
* subscriptions for selectAll. The user can provide an existing formArray for the rows and form control for the header,
|
|
75
|
+
* or it can just be the default empty ones created by the context class.
|
|
76
|
+
*/
|
|
62
77
|
ngOnInit() {
|
|
63
78
|
var _a, _b, _c;
|
|
64
79
|
this.isHeader = this.rowIndex < 0;
|
|
@@ -84,7 +99,7 @@ export class TableSelectableRowComponent {
|
|
|
84
99
|
this.formControl = this.context.rowCheckboxes.at(this.rowIndex);
|
|
85
100
|
this.checkboxAttributeID = `${this.id}_row${this.rowIndex}_ecCheckbox`;
|
|
86
101
|
}
|
|
87
|
-
if (changes.
|
|
102
|
+
if (changes.isSelectionEnabled && !this.isSelectionEnabled && ((_a = this.formControl) === null || _a === void 0 ? void 0 : _a.value) === true) {
|
|
88
103
|
this.formControl.setValue(false);
|
|
89
104
|
}
|
|
90
105
|
if (changes.isSelected && this.formControl) {
|
|
@@ -107,19 +122,13 @@ export class TableSelectableRowComponent {
|
|
|
107
122
|
* Handle shift and control select as well as checkbox click like windows explorer or the original bill lists do.
|
|
108
123
|
*/
|
|
109
124
|
rowClicked(event) {
|
|
110
|
-
|
|
111
|
-
if (!this.isHeader && this.enabled) {
|
|
125
|
+
if (!this.isHeader && this.isSelectionEnabled && !this.isCheckboxDisabled) {
|
|
112
126
|
let targetEl = event === null || event === void 0 ? void 0 : event.target;
|
|
113
|
-
let isCheckboxClick = (_c = (_b = (_a = targetEl === null || targetEl === void 0 ? void 0 : targetEl.classList) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === null || _c === void 0 ? void 0 : _c.includes('row-checkbox');
|
|
114
|
-
//normally clicking on a row checks only that row and unchecks everything else.
|
|
115
|
-
//If the user wants to instead add that row to the current selection, they can either hold the control key or
|
|
116
|
-
//use the row checkbox.
|
|
117
|
-
if (!event.ctrlKey && !isCheckboxClick) {
|
|
118
|
-
this.clearAllRows();
|
|
119
|
-
}
|
|
120
127
|
//clicking on a row always toggles that row. Sometimes the shift-select will toggle it back
|
|
121
128
|
this.formControl.setValue(!this.formControl.value);
|
|
122
|
-
this.
|
|
129
|
+
if (!this.context.disableAdvancedRowClickBehavior) {
|
|
130
|
+
this.handleShiftSelect(event);
|
|
131
|
+
}
|
|
123
132
|
}
|
|
124
133
|
}
|
|
125
134
|
watchForChanges() {
|
|
@@ -129,13 +138,20 @@ export class TableSelectableRowComponent {
|
|
|
129
138
|
if (this.isHeader) {
|
|
130
139
|
this.context.rowAddedOrRemoved.pipe(debounceTime(10), takeUntil(this.destroyed)).subscribe(() => {
|
|
131
140
|
this.context.lastClickedIndex = -1;
|
|
132
|
-
|
|
141
|
+
// exclude nonDependentCheckboxes (some may not be allowed to be deselected)
|
|
142
|
+
let dependentCheckboxes = [];
|
|
143
|
+
this.context.rowCheckboxes.controls.forEach((control, index) => {
|
|
144
|
+
if (!this.context.nonDependentCheckboxes.includes(index)) {
|
|
145
|
+
dependentCheckboxes.push(control);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
this.dependentCheckboxesReference = { controls: dependentCheckboxes };
|
|
133
149
|
});
|
|
134
150
|
}
|
|
135
151
|
else {
|
|
136
152
|
this.context.rowAddedOrRemoved.next();
|
|
137
153
|
//watch for the checkbox state to change on a child row and set the row isSelected class / highlight to match
|
|
138
|
-
//this way the rows match even if external code updates the form model
|
|
154
|
+
//this way the rows match even if external code updates the form model
|
|
139
155
|
(_a = this.formControl) === null || _a === void 0 ? void 0 : _a.valueChanges.pipe(takeUntil(this.destroyed)).subscribe((value) => {
|
|
140
156
|
this.isSelected = value;
|
|
141
157
|
});
|
|
@@ -182,18 +198,19 @@ export class TableSelectableRowComponent {
|
|
|
182
198
|
TableSelectableRowComponent.decorators = [
|
|
183
199
|
{ type: Component, args: [{
|
|
184
200
|
selector: '[ecTableSelectableRow]',
|
|
185
|
-
template: "<!-- any elements of the existing table row that must go before the row selection checkbox can be marked with a class of before-checkbox -->\r\n<ng-content select=\".before-checkbox\"></ng-content>\r\n<ng-container *ngIf=\"
|
|
201
|
+
template: "<!-- any elements of the existing table row that must go before the row selection checkbox can be marked with a class of before-checkbox -->\r\n<ng-content select=\".before-checkbox\"></ng-content>\r\n<ng-container *ngIf=\"isSelectionEnabled\">\r\n <th *ngIf=\"isHeader\"\r\n class=\"checkbox\"\r\n [ecTableLockedColumn]=\"lockedColOptions\">\r\n <ec-checkbox id=\"{{id}}_selectAll\"\r\n class=\"m-0\"\r\n *ngIf=\"context?.selectAllCheckbox\"\r\n [formModel]=\"context?.selectAllCheckbox\"\r\n [dependentCheckboxesGroup]=\"dependentCheckboxesReference\"\r\n [ignoreDisabledDependents]=\"false\">\r\n </ec-checkbox>\r\n </th>\r\n <td *ngIf=\"!isHeader && formControl\"\r\n class=\"checkbox\"\r\n [ecTableLockedColumn]=\"lockedColOptions\">\r\n <!-- Use [readonly] and not [disabled] for isCheckboxDisabled to prevent user interaction\r\n and allow the value to be visible to other components (for example, when they subscribe\r\n to valueChanges on the FormArray that contains all the checkbox FormControls). -->\r\n <ec-checkbox id=\"{{id}}_row{{rowIndex}}_checkbox\"\r\n [readonly]=\"isCheckboxDisabled\"\r\n [attr.id]=\"checkboxAttributeID\"\r\n class=\"m-0 row-checkbox\"\r\n [formModel]=\"formControl\">\r\n </ec-checkbox>\r\n </td>\r\n</ng-container>\r\n<!-- The rest of the table row -->\r\n<ng-content></ng-content>",
|
|
186
202
|
styles: [":host.is-enabled:not(.is-header){cursor:pointer}:host .checkbox{padding-left:1px;padding-right:1px;width:1.125rem}:host .checkbox:first-child{padding-left:.5rem;width:1.5625rem}:host.border-bottom-0 .checkbox{border-bottom:0}td.checkbox ec-checkbox ::ng-deep *{pointer-events:none}th.checkbox{vertical-align:var(--ec-table-selectable-row-vertical-align-checkbox-th,middle)}td.checkbox{vertical-align:var(--ec-table-selectable-row-vertical-align-checkbox-td,top)}"]
|
|
187
203
|
},] }
|
|
188
204
|
];
|
|
189
205
|
TableSelectableRowComponent.propDecorators = {
|
|
190
206
|
id: [{ type: HostBinding, args: ['attr.id',] }, { type: Input }],
|
|
191
|
-
|
|
207
|
+
isSelectionEnabled: [{ type: HostBinding, args: ['class.is-enabled',] }, { type: Input, args: ['ecTableSelectableRow',] }],
|
|
192
208
|
context: [{ type: Input, args: ['selectionContext',] }],
|
|
193
209
|
rowIndex: [{ type: Input }],
|
|
194
210
|
lockedColOptions: [{ type: Input }],
|
|
195
211
|
isSelected: [{ type: HostBinding, args: ['class.is-selected',] }, { type: Input }],
|
|
196
212
|
isHeader: [{ type: HostBinding, args: ['class.is-header',] }],
|
|
213
|
+
isCheckboxDisabled: [{ type: Input }],
|
|
197
214
|
rowClicked: [{ type: HostListener, args: ['click', ['$event'],] }]
|
|
198
215
|
};
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdGFibGUvdGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQXVDLE1BQU0sZUFBZSxDQUFDO0FBQ3pILE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixNQUFNLE9BQU8seUJBQXlCO0lBQXRDO1FBQ0U7OztXQUdHO1FBQ0ksc0JBQWlCLEdBQW9CLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5FOzs7OztXQUtHO1FBQ0ksa0JBQWEsR0FBYyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwRDs7O1dBR0c7UUFDSSxxQkFBZ0IsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUVyQzs7O1dBR0c7UUFDSSxzQkFBaUIsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMxRCxDQUFDO0NBQUE7QUFPRCxNQUFNLE9BQU8sMkJBQTJCO0lBTHhDO1FBTUUsd0RBQXdEO1FBR2pELE9BQUUsR0FBVyxFQUFFLENBQUM7UUFPZixhQUFRLEdBQVksSUFBSSxDQUFDO1FBT2pDO21GQUMyRTtRQUVwRSxhQUFRLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFN0I7O1dBRUc7UUFFSSxxQkFBZ0IsR0FBc0QsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUMsQ0FBQztR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Q3JELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3JEO2FBQ0Y7aUJBQU0sSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQztZQUVELE1BQUEsUUFBUSxDQUFDLFlBQVksRUFBRSwwQ0FBRSxlQUFlLEdBQUc7U0FDNUM7YUFBTTtZQUNMLHVGQUF1RjtZQUN2RixtR0FBbUc7WUFDbkcsd0ZBQXdGO1lBQ3hGLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFBLEVBQUUsQ0FBQSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEYsQ0FBQzs7O1lBekxGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2dCQUNsQywrbENBQW9EOzthQUVyRDs7O2lCQUdFLFdBQVcsU0FBQyxTQUFTLGNBQ3JCLEtBQUs7c0JBSUwsV0FBVyxTQUFDLGtCQUFrQixjQUM5QixLQUFLLFNBQUMsc0JBQXNCO3NCQU81QixLQUFLLFNBQUMsa0JBQWtCO3VCQUt4QixLQUFLOytCQU1MLEtBQUs7eUJBSUwsV0FBVyxTQUFDLG1CQUFtQixjQUMvQixLQUFLO3VCQUlMLFdBQVcsU0FBQyxpQkFBaUI7eUJBd0U3QixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUFycmF5LCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dCB7XHJcbiAgLyoqc3BlY2lmeSB0aGUgZm9ybSBjb250cm9sIHRvIHVzZSBmb3IgdGhlIHNlbGVjdEFsbCBjaGVja2JveCBvciBwcm92aWRlIHlvdXIgb3duLlxyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBzdWJzY3JpYmUgdG8gY2hhbmdlcyB0byBjaGFuZ2UgYnV0dG9uIHN0YXRlcyBhcyB0aGUgc2VsZWN0aW9uIGNoYW5nZXNcclxuICAgKiBvciBpZiB5b3Ugd2FudCB0byBhZGQgaXQgdG8gYW4gYWxyZWFkeS1leGlzdGluZyBmb3JtIGdyb3VwXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdEFsbENoZWNrYm94OiBBYnN0cmFjdENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woZmFsc2UpO1xyXG5cclxuICAvKipzcGVjaWZ5IHRoZSBGb3JtQXJyYXkgdG8gdXNlIGZvciB0aGUgZGVwZW5kZW50IGNoZWNrYm94ZXMgb2YgdGhlIHNlbGVjdEFsbCBjaGVja2JveFxyXG4gICAqIFRoZSBkZXBlbmRlbnQgY2hlY2tib3hlcyB3aWxsIGFkZCBhbmQgcmVtb3ZlIHRoZW1zZWx2ZXMgYXV0b21hdGljYWxseSBhbmQgdGhlIHNlbGVjdEFsbFxyXG4gICAqIGJveCB3aWxsIHJlYWN0IGFjY29yZGluZ2x5LiBEbyBub3QgcHJvdmlkZSB5b3VyIG93biBjb250cm9sc1xyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBzdWJzY3JpYmUgdG8gY2hhbmdlcyB0byBjaGFuZ2UgYnV0dG9uIHN0YXRlcyBhcyB0aGUgc2VsZWN0aW9uIGNoYW5nZXNcclxuICAgKiBvciBpZiB5b3Ugd2FudCB0byBhZGQgaXQgdG8gYW4gYWxyZWFkeS1leGlzdGluZyBmb3JtIGdyb3VwXHJcbiAgICovXHJcbiAgcHVibGljIHJvd0NoZWNrYm94ZXM6IEZvcm1BcnJheSA9IG5ldyBGb3JtQXJyYXkoW10pO1xyXG5cclxuICAvKipUaGUgaW5kZXggb2YgdGhlIGxhc3Qgcm93IHRoZSB1c2VyIGNsaWNrZWQuIFRoaXMgYWxsb3dzIG11bHRpcGxlIGRpcmVjdGl2ZXMgb24gYSBzY3JlZW4gdG8gY29vcmRpbmF0ZVxyXG4gICAqIGZvciByZWFjdGluZyB0byBzaGlmdCtjbGljayBhY3Rpb25zIHRoYXQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgc2VsZWN0IG11bHRpcGxlIHJvd3MgYmV0d2VlbiB0aGUgY2xpY2tlZCByb3dzXHJcbiAgICogZGVmYXVsdHMgdG8gLTEgdG8gaW5kaWNhdGUgdGhhdCBubyB1c2VyIGNsaWNrIGhhcyBiZWVuIGNhcHR1cmVkXHJcbiAgICovXHJcbiAgcHVibGljIGxhc3RDbGlja2VkSW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuICAvKipBIHN1YmplY3QgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiBhIHJvdy1iYXNlZCBkaXJlY3RpdmUgaXMgYWRkZWQgb3IgcmVtb3ZlZC4gSXQgYWxsb3dzXHJcbiAgICogdGhlIG1hc3RlciBjaGVja2JveCBpbiB0aGUgaGVhZGVyIHRvIGtub3cgdGhhdCBpdCBuZWVkcyB0byByZXNldCB0cmFja2luZyBpbmZvcm1hdGlvblxyXG4gICAqIHdpdGhvdXQgcmVwbGFjaW5nIHRoZSBhY3R1YWwgRm9ybUFycmF5IHRoYXQgdGhlIGhvc3RpbmcgY29tcG9uZW50IG1heSBiZSBzdWJzY3JpYmVkIHRvIGZvciBjaGFuZ2VzXHJcbiAgICovXHJcbiAgcHVibGljIHJvd0FkZGVkT3JSZW1vdmVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdbZWNUYWJsZVNlbGVjdGFibGVSb3ddJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLXNlbGVjdGFibGUtcm93LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlU2VsZWN0YWJsZVJvd0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIC8qKlRoZSBJRCByb290IHRvIHVzZSBmb3IgdGhlIGNoZWNrYm94IGFuZCB0YWJsZSBjZWxsICovXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcclxuICBASW5wdXQoKSBcclxuICBwdWJsaWMgaWQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogRGlzYWJsZXMgdGhlIHNlbGVjdGlvbiBmdW5jdGlvbmFsaXR5IHdoZW4gZmFsc2UgKi9cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLWVuYWJsZWQnKVxyXG4gIEBJbnB1dCgnZWNUYWJsZVNlbGVjdGFibGVSb3cnKVxyXG4gIHB1YmxpYyBzZXQgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpIHsgdGhpcy5fZW5hYmxlZCA9IHZhbHVlICE9PSBmYWxzZTsgfVxyXG4gIHB1YmxpYyBnZXQgZW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7IH1cclxuICBwcml2YXRlIF9lbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqU2hhcmVkIGNvbnRleHQgYmV0d2VlbiBtYXN0ZXIgYW5kIGNoaWxkcmVuLiBDaGlsZCBkaXJlY3RpdmUgYWRkcyBpdHMgb3duIEZvcm1Db250cm9sIHRvIHRoaXNcclxuXHRhbmQgcmVtb3ZlcyBpdCBvbkRlc3Ryb3kuIFRoZSBzYW1lIGNvbnRleHQgb2JqZWN0IG11c3QgYmUgdXNlZCBmb3IgYWxsIGRpcmVjdGl2ZXMgaW4gYSBzaW5nbGUgdGFibGUqL1xyXG4gIEBJbnB1dCgnc2VsZWN0aW9uQ29udGV4dCcpIFxyXG4gIHB1YmxpYyBjb250ZXh0ITogVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dDtcclxuXHRcclxuICAvKlJlcXVpcmVkIGZvciBhbGwgcm93cy4gVGhlIHJvdyBpbmRleCB0aGlzIGNvbXBvbmVudCByZXByZXNlbnRzLCB0byBhbGxvdyBpdCB0byBrbm93IGhvdyB0byBoYW5kbGUgc2hpZnQrY2xpY2tzLiBcclxuICAgIERlZmF1bHRzIHRvIC0xIHdoaWNoIHdpbGwgY2F1c2UgdGhlIGRpcmVjdGl2ZSB0byBiZWhhdmUgYXMgYSBoZWFkZXIgcm93Ki9cclxuICBASW5wdXQoKSBcclxuICBwdWJsaWMgcm93SW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuICAvKipUaGUgb3B0aW9ucyB1c2VkIHRvIGxvY2sgdGhlIGNoZWNrYm94IGNvbHVtbiB0byB0aGUgbGVmdCBvZiB0aGUgdGFibGUsIG11c3QgYmUgbW9kaWZpZWQgYnkgaG9zdFxyXG4gICAqIGlmIHRoZSBjaGVja2JveCBpcyBub3QgdGhlIGZpcnN0IGNvbHVtbiBpbiB0aGUgdGFibGVcclxuICAgKi9cclxuICBASW5wdXQoKSBcclxuICBwdWJsaWMgbG9ja2VkQ29sT3B0aW9ucyA6IHtib3JkZXI6IGJvb2xlYW4sIGxlZnQ/OiBudW1iZXIsIHJpZ2h0PzogbnVtYmVyfSA9IHtib3JkZXI6IGZhbHNlLCBsZWZ0OiAwfTtcclxuXHJcbiAgLyoqQXV0b21hdGljYWxseSBzZXQgdG8gdHJ1ZSBiYXNlZCBvbiBjaGVja2JveCBzdGF0ZSwgdXNlZCB0byBoaWdobGlnaHQgdGhlIHJvdyB0byBtYXRjaCBvdXIgdGFibGUgc2VsZWN0ZWQgcm93IHN0eWxlcyAqL1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaXMtc2VsZWN0ZWQnKSBcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpc1NlbGVjdGVkID0gZmFsc2U7XHJcblxyXG4gIC8qKmF1dG9tYXRpY2FsbHkgc2V0IHRvIHRydWUgaWYgbm8gcm93SW5kZXggaXMgcHJvdmlkZWQgb3IgdGhlIHJvdyBpbmRleCBpcyBsZXNzIHRoYW4gemVybyAqL1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaXMtaGVhZGVyJylcclxuICBwdWJsaWMgaXNIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKiBBIHJlZmVyZW5jZSB0aGF0IHdlIGNhbiBjaGFuZ2Ugd2hlbiBhIGNvbnRyb2wgaXMgcmVwbGFjZWQgdG8gZm9yY2UgdGhlIG1hc3RlciBjaGVja2JveCByZWZlcmVuY2UgdG8gdXBkYXRlXHJcbiAgICAgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgZm9ybSBhcnJheSB0aGF0IHRoZSBob3N0IGNvbXBvbmVudCBtYXkgYmUgd2F0Y2hpbmcgZm9yIHNlbGVjdGVkIHJvdyBjaGFuZ2VzICovXHJcbiAgcHVibGljIGRlcGVuZGVudENoZWNrYm94ZXNSZWZlcmVuY2U6IHtjb250cm9sczogQWJzdHJhY3RDb250cm9sW119ID0ge2NvbnRyb2xzOiBbXX07XHJcblxyXG5cdC8qQ2FwdHVyZSB0aGUgZm9ybSBjb250cm9sIHRoaXMgY29tcG9uZW50IGNyZWF0ZXMgdG8gYWxsb3cgY2xlYW51cCBsYXRlciBvbiBhbmQgZXhwb3NlIGl0IHRvIHRoZSByb3cqL1xyXG5cdHB1YmxpYyBmb3JtQ29udHJvbCE6IEFic3RyYWN0Q29udHJvbDtcclxuXHJcbiAgcHVibGljIGNoZWNrYm94QXR0cmlidXRlSUQ6IHN0cmluZyA9ICcnO1xyXG4gIFxyXG4gIC8qKlNlbmRzIGFuIGV2ZW50IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgc28gdGhhdCBpdCBjYW4gdW5zdWJzY3JpYmUgZnJvbSBhbnkgb2JzZXJ2YWJsZXMgKi9cclxuICBwcml2YXRlIGRlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG5cdC8qKlZhbGlkYXRlIGFuZCBwb3B1bGF0ZSB0aGUgY29udGV4dCBhcyB0aGUgdGFibGUgaXMgZHluYW1pY2FsbHkgYnVpbHQuIEJlY2F1c2UgdGhlIGNvbnRleHQgaXMgc2hhcmVkIGJldHdlZW4gdGhlXHJcbiAgICogaGVhZGVyIGFuZCBlYWNoIG9mIHRoZSByb3dzLCBjaGFuZ2VzIHRvIGl0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGF0IGlzIGhhcHBlbmluZyBhbmQgaG9vayB1cCB0aGUgY29ycmVjdFxyXG4gICAqIHN1YnNjcmlwdGlvbnMgZm9yIHNlbGVjdEFsbC4gVGhlIHVzZXIgY2FuIHByb3ZpZGUgYW4gZXhpc3RpbmcgZm9ybUFycmF5IGZvciB0aGUgcm93cyBhbmQgZm9ybSBjb250cm9sIGZvciB0aGUgaGVhZGVyLCBcclxuICAgKiBvciBpdCBjYW4ganVzdCBiZSB0aGUgZGVmYXVsdCBlbXB0eSBvbmVzIGNyZWF0ZWQgYnkgdGhlIGNvbnRleHQgY2xhc3MuXHJcbiAgKi9cclxuXHRwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzSGVhZGVyID0gdGhpcy5yb3dJbmRleCA8IDA7XHJcbiAgICBpZighdGhpcy5jb250ZXh0KSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2VjVGFibGVTZWxlY3RhYmxlUm93IHJlcXVpcmVzIGEgZGVmaW5lZCBTZWxlY3RhYmxlVGFibGVSb3dDb250ZXh0IHRvIGJlIHNoYXJlZCB3aXRoIGFsbCBpbnN0YW5jZXMgaW4gb25lIHRhYmxlLicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHJvd0NoZWNrYm94ID0gdGhpcy5jb250ZXh0Py5yb3dDaGVja2JveGVzPy5hdCh0aGlzLnJvd0luZGV4KTtcclxuICAgICAgXHJcbiAgICAgIGlmKCF0aGlzLmlzSGVhZGVyICYmICFyb3dDaGVja2JveCl7XHJcbiAgICAgICAgcm93Q2hlY2tib3ggPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5pc1NlbGVjdGVkKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQ/LnJvd0NoZWNrYm94ZXMucHVzaChyb3dDaGVja2JveCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmlzSGVhZGVyID8gdGhpcy5jb250ZXh0LnNlbGVjdEFsbENoZWNrYm94OiByb3dDaGVja2JveDtcclxuICAgICAgdGhpcy53YXRjaEZvckNoYW5nZXMoKTtcclxuICAgIH1cclxuXHR9XHJcbiAgXHJcbiAgLyoqV2F0Y2ggZm9yIGNoYW5nZXMgdG8gdGhlIHJvdyBpbmRleCB0aGF0IGNhbiBvY2N1ciBpZiB0aGUgdGFibGUgaXMgcmVvcmRlcmVkIGluLXBsYWNlIGluc3RlYWQgb2ZcclxuICAgKiByZWNyZWF0ZWQgZnJvbSBzY3JhdGNoLiBSZS1jYXB0dXJlIHRoZSBjb3JyZWN0IGZvcm0gY29udHJvbCB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gc3luY1xyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKXtcclxuICAgIGlmKGNoYW5nZXMucm93SW5kZXggJiYgIXRoaXMuaXNIZWFkZXIpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuY29udGV4dC5yb3dDaGVja2JveGVzLmF0KHRoaXMucm93SW5kZXgpO1xyXG4gICAgICB0aGlzLmNoZWNrYm94QXR0cmlidXRlSUQgPSBgJHt0aGlzLmlkfV9yb3cke3RoaXMucm93SW5kZXh9X2VjQ2hlY2tib3hgO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLmVuYWJsZWQgJiYgIXRoaXMuZW5hYmxlZCAmJiB0aGlzLmZvcm1Db250cm9sPy52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy5pc1NlbGVjdGVkICYmIHRoaXMuZm9ybUNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmlzU2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblx0LyoqIFRlbGwgdGhlIGhlYWRlciBjaGVja2JveCB0byByZWZyZXNoIHRoZSBzZWxlY3RBbGwgc3Vic2NyaXB0aW9uIGJlY2F1c2UgYSByb3cgd2FzIHJlbW92ZWQqL1xyXG5cdHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuXHRcdGlmKCF0aGlzLmlzSGVhZGVyICYmIHRoaXMuZm9ybUNvbnRyb2wpe1xyXG4gICAgICB0aGlzLmNvbnRleHQucm93QWRkZWRPclJlbW92ZWQubmV4dCgpO1xyXG5cclxuICAgICAgLy9maW5kIHRoZSBsb2NhdGlvbiBpbiB0aGUgYXJyYXkgdGhhdCBtYXRjaGVzIHRoZSBjaGVja2JveC4gSWYgbWFueSByb3dzIGFyZSBiZWluZyByZW1vdmVkIGl0IG1heSBub3QgbWF0Y2ggcm93SW5kZXggeWV0XHJcbiAgICAgIGxldCBtYXRjaEluZGV4ID0gdGhpcy5jb250ZXh0LnJvd0NoZWNrYm94ZXMuY29udHJvbHMuZmluZEluZGV4KGM9PmMgPT0gdGhpcy5mb3JtQ29udHJvbCk7XHJcbiAgICAgIGlmKG1hdGNoSW5kZXggPj0gMCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5yb3dDaGVja2JveGVzLnJlbW92ZUF0KG1hdGNoSW5kZXgpO1xyXG4gICAgICB9XHJcblx0XHR9XHJcbiAgfVxyXG4gIFxyXG4gIC8qKkhhbmRsZSB3aGVuIGEgdXNlciBjbGlja3Mgb24gYSB0YWJsZSByb3cgKG9yIHNvbWV0aGluZyBpbnNpZGUgaXQgd2hpY2ggYnViYmxlcyB1cCkgdG8gaW5jcmVhc2UgdGhlIGhpdCBhcmVhIGZvciByb3cgc2VsZWN0aW9uXHJcbiAgICogT25seSB3b3JrIG9uIHRoZSB0YWJsZSBib2R5IChub3QgdGhlIGhlYWRlcikgYmVjYXVzZSB0aGUgaGVhZGVyIG1heSBoYXZlIG90aGVyIGNsaWNrIGhhbmRsZXJzIGZvciBzb3J0IGV0YyB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQuXHJcbiAgICogSGFuZGxlIHNoaWZ0IGFuZCBjb250cm9sIHNlbGVjdCBhcyB3ZWxsIGFzIGNoZWNrYm94IGNsaWNrIGxpa2Ugd2luZG93cyBleHBsb3JlciBvciB0aGUgb3JpZ2luYWwgYmlsbCBsaXN0cyBkby5cclxuICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgcm93Q2xpY2tlZChldmVudDogTW91c2VFdmVudCl7XHJcbiAgICBpZighdGhpcy5pc0hlYWRlciAmJiB0aGlzLmVuYWJsZWQpe1xyXG4gICAgICBsZXQgdGFyZ2V0RWwgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBsZXQgaXNDaGVja2JveENsaWNrID0gdGFyZ2V0RWw/LmNsYXNzTGlzdD8udmFsdWU/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKCdyb3ctY2hlY2tib3gnKTtcclxuXHJcbiAgICAgIC8vbm9ybWFsbHkgY2xpY2tpbmcgb24gYSByb3cgY2hlY2tzIG9ubHkgdGhhdCByb3cgYW5kIHVuY2hlY2tzIGV2ZXJ5dGhpbmcgZWxzZS4gXHJcbiAgICAgIC8vSWYgdGhlIHVzZXIgd2FudHMgdG8gaW5zdGVhZCBhZGQgdGhhdCByb3cgdG8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCB0aGV5IGNhbiBlaXRoZXIgaG9sZCB0aGUgY29udHJvbCBrZXkgb3JcclxuICAgICAgLy91c2UgdGhlIHJvdyBjaGVja2JveC5cclxuICAgICAgaWYoIWV2ZW50LmN0cmxLZXkgJiYgIWlzQ2hlY2tib3hDbGljaykge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBbGxSb3dzKCk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vY2xpY2tpbmcgb24gYSByb3cgYWx3YXlzIHRvZ2dsZXMgdGhhdCByb3cuIFNvbWV0aW1lcyB0aGUgc2hpZnQtc2VsZWN0IHdpbGwgdG9nZ2xlIGl0IGJhY2tcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSghdGhpcy5mb3JtQ29udHJvbC52YWx1ZSk7XHJcbiAgICAgIHRoaXMuaGFuZGxlU2hpZnRTZWxlY3QoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXRjaEZvckNoYW5nZXMoKXtcclxuICAgIC8vd2F0Y2ggZm9yIHJvd3MgYmVpbmcgcmVwbGFjZWQgc28gdGhhdCB0aGUgbWFzdGVyIGNoZWNrYm94IGFuZCBzaGlmdC1zZWxlY3Qgc3VwcG9ydCBjYW4gYmUgcmVzZXQgdG8gbWF0Y2hcclxuICAgIC8vdGhpcyBrZWVwcyB0aGUgbWFzdGVyIGluIHN5bmMgYXMgdGhlIHRhYmxlIGNoYW5nZXMgcGFnZXMgZXRjIGFuZCBzdG9wcyB1bmV4cGVjdGVkIHJvd3MgZnJvbSBiZWluZyBzZWxlY3RlZCBhZnRlciByZWRyYXdcclxuICAgIGlmKHRoaXMuaXNIZWFkZXIpe1xyXG4gICAgICB0aGlzLmNvbnRleHQucm93QWRkZWRPclJlbW92ZWQucGlwZShkZWJvdW5jZVRpbWUoMTApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PntcclxuICAgICAgICB0aGlzLmNvbnRleHQubGFzdENsaWNrZWRJbmRleCA9IC0xO1xyXG4gICAgICAgIHRoaXMuZGVwZW5kZW50Q2hlY2tib3hlc1JlZmVyZW5jZSA9IHtjb250cm9sczogdGhpcy5jb250ZXh0LnJvd0NoZWNrYm94ZXMuY29udHJvbHN9O1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udGV4dC5yb3dBZGRlZE9yUmVtb3ZlZC5uZXh0KCk7XHJcbiAgICAgIFxyXG4gICAgICAvL3dhdGNoIGZvciB0aGUgY2hlY2tib3ggc3RhdGUgdG8gY2hhbmdlIG9uIGEgY2hpbGQgcm93IGFuZCBzZXQgdGhlIHJvdyBpc1NlbGVjdGVkIGNsYXNzIC8gaGlnaGxpZ2h0IHRvIG1hdGNoXHJcbiAgICAgIC8vdGhpcyB3YXkgdGhlIHJvd3MgbWF0Y2ggZXZlbiBpZiBleHRlcm5hbCBjb2RlIHVwZGF0ZXMgdGhlIGZvcm0gbW9kZWwgXHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2w/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpLnN1YnNjcmliZSgodmFsdWU6IGJvb2xlYW4pPT57XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gdmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBJZiB0aGV5IGFyZSBob2xkaW5nIHRoZSBzaGlmdCBrZXksIHRyeSB0byBzZWxlY3QgYWxsIHRoZSBjaGVja2JveGVzIGJldHdlZW4gdGhlaXIgbGFzdCBzZWxlY3Rpb25cclxuICAgICogYW5kIG1vc3QgcmVjZW50IHNlbGVjdGlvbi4gVGhlIGxvZ2ljIGlzIHNldHVwIHRvIGJlaGF2ZSB0aGUgd2F5IHdpbmRvd3MgZXhwbG9yZXIgYmVoYXZlc1xyXG4gICAgKiBXZSBkb24ndCBhbGxvdyBkcmFnLXRvLXNlbGVjdCBsaWtlIHRoZSBrZW5kbyB0YWJsZXMsIGJ1dCBpdCBtZWFucyB1c2VycyBjYW4gaGlnaGxpZ2h0IHRleHQgYW5kIGNvcHkrcGFzdGUgdG8gZXhjZWwgZXRjXHJcbiAgICAqIHNvIEkgdGhpbmsgdGhpcyBpcyBhY3R1YWxseSBwcmVmZXJhYmxlXHJcbiAgICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlU2hpZnRTZWxlY3QoZXZlbnQ6IE1vdXNlRXZlbnQpe1xyXG4gICAgbGV0IGxhc3RJbmRleCA9IHRoaXMuY29udGV4dC5sYXN0Q2xpY2tlZEluZGV4O1xyXG4gICAgbGV0IGN1ckluZGV4ID0gdGhpcy5yb3dJbmRleDtcclxuICAgIGlmKGV2ZW50LnNoaWZ0S2V5ICYmIGxhc3RJbmRleCA+PSAwKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJBbGxSb3dzKCk7XHJcbiAgICAgIGlmKGN1ckluZGV4ID4gbGFzdEluZGV4KSB7XHJcbiAgICAgICAgZm9yKHZhciBpbmRleCA9IGxhc3RJbmRleDsgaW5kZXggPD0gY3VySW5kZXg7IGluZGV4KyspIHtcclxuICAgICAgICAgIHRoaXMuY29udGV4dC5yb3dDaGVja2JveGVzLmF0KGluZGV4KS5zZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY3VySW5kZXggPCBsYXN0SW5kZXgpIHtcclxuICAgICAgICBmb3IodmFyIGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBjdXJJbmRleDsgaW5kZXgtLSkge1xyXG4gICAgICAgICAgdGhpcy5jb250ZXh0LnJvd0NoZWNrYm94ZXMuYXQoaW5kZXgpLnNldFZhbHVlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjdXJJbmRleCA9PT0gbGFzdEluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk/LnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9yZWNvcmQgdGhlIGN1cnJlbnQgcm93IGluZGV4IGZvciBmdXR1cmUgcm93IGNsaWNrcyB0byBrbm93IHdoZXJlIHRoZXkgbGFzdCBpbnRlcmFjdGVkXHJcbiAgICAgIC8vYnV0IG9ubHkgaWYgdGhleSBkb24ndCBoYXZlIHNoaWZ0IGRvd24gZm9yIHRoaXMgY2xpY2suIElmIHNoaWZ0IGlzIGRvd24gdGhlbiB0aGUgbmV4dCBzaGlmdCtjbGlja1xyXG4gICAgICAvL3Nob3VsZCBiZSBjb25zaWRlcmVkIGFuIGV4dGVuc2lvbiAob3IgY29udHJhY3Rpb24pIG9mIHRoZSBvcmlnaW5hbCBtdWx0aS1yb3cgc2VsZWN0aW9uXHJcbiAgICAgIHRoaXMuY29udGV4dC5sYXN0Q2xpY2tlZEluZGV4ID0gdGhpcy5yb3dJbmRleDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJBbGxSb3dzKCl7XHJcbiAgICB0aGlzLmNvbnRleHQucm93Q2hlY2tib3hlcy5jb250cm9scy5mb3JFYWNoKGNvbnRyb2w9PmNvbnRyb2wuc2V0VmFsdWUoZmFsc2UpKTtcclxuICB9XHJcbn1cclxuIl19
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdGFibGUvdGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQStDLE1BQU0sZUFBZSxDQUFDO0FBQ3pILE9BQU8sRUFBbUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxNQUFNLE9BQU8seUJBQXlCO0lBQXRDO1FBQ0U7OztXQUdHO1FBQ0ksc0JBQWlCLEdBQW9CLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5FOzs7OztXQUtHO1FBQ0ksa0JBQWEsR0FBYyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwRDs7O1dBR0c7UUFDSSxxQkFBZ0IsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUVyQzs7O1dBR0c7UUFDSSxzQkFBaUIsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUV4RDs7V0FFRztRQUNJLG9DQUErQixHQUFZLEtBQUssQ0FBQztRQUV4RDs7V0FFRztRQUNJLDJCQUFzQixHQUFhLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0NBQUE7QUFPRCxNQUFNLE9BQU8sMkJBQTJCO0lBTHhDO1FBTUUsd0RBQXdEO1FBR2pELE9BQUUsR0FBVyxFQUFFLENBQUM7UUFPZixzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFPMUM7bUZBQzJFO1FBRXBFLGFBQVEsR0FBVyxDQUFDLENBQUMsQ0FBQztR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SzsrQkFNTCxLQUFLO3lCQUlMLFdBQVcsU0FBQyxtQkFBbUIsY0FDL0IsS0FBSzt1QkFJTCxXQUFXLFNBQUMsaUJBQWlCO2lDQVM3QixLQUFLO3lCQXdFTCxZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dCB7XHJcbiAgLyoqc3BlY2lmeSB0aGUgZm9ybSBjb250cm9sIHRvIHVzZSBmb3IgdGhlIHNlbGVjdEFsbCBjaGVja2JveCBvciBwcm92aWRlIHlvdXIgb3duLlxyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBzdWJzY3JpYmUgdG8gY2hhbmdlcyB0byBjaGFuZ2UgYnV0dG9uIHN0YXRlcyBhcyB0aGUgc2VsZWN0aW9uIGNoYW5nZXNcclxuICAgKiBvciBpZiB5b3Ugd2FudCB0byBhZGQgaXQgdG8gYW4gYWxyZWFkeS1leGlzdGluZyBmb3JtIGdyb3VwXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdEFsbENoZWNrYm94OiBBYnN0cmFjdENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woZmFsc2UpO1xyXG5cclxuICAvKipzcGVjaWZ5IHRoZSBGb3JtQXJyYXkgdG8gdXNlIGZvciB0aGUgZGVwZW5kZW50IGNoZWNrYm94ZXMgb2YgdGhlIHNlbGVjdEFsbCBjaGVja2JveFxyXG4gICAqIFRoZSBkZXBlbmRlbnQgY2hlY2tib3hlcyB3aWxsIGFkZCBhbmQgcmVtb3ZlIHRoZW1zZWx2ZXMgYXV0b21hdGljYWxseSBhbmQgdGhlIHNlbGVjdEFsbFxyXG4gICAqIGJveCB3aWxsIHJlYWN0IGFjY29yZGluZ2x5LiBEbyBub3QgcHJvdmlkZSB5b3VyIG93biBjb250cm9sc1xyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBzdWJzY3JpYmUgdG8gY2hhbmdlcyB0byBjaGFuZ2UgYnV0dG9uIHN0YXRlcyBhcyB0aGUgc2VsZWN0aW9uIGNoYW5nZXNcclxuICAgKiBvciBpZiB5b3Ugd2FudCB0byBhZGQgaXQgdG8gYW4gYWxyZWFkeS1leGlzdGluZyBmb3JtIGdyb3VwXHJcbiAgICovXHJcbiAgcHVibGljIHJvd0NoZWNrYm94ZXM6IEZvcm1BcnJheSA9IG5ldyBGb3JtQXJyYXkoW10pO1xyXG5cclxuICAvKipUaGUgaW5kZXggb2YgdGhlIGxhc3Qgcm93IHRoZSB1c2VyIGNsaWNrZWQuIFRoaXMgYWxsb3dzIG11bHRpcGxlIGRpcmVjdGl2ZXMgb24gYSBzY3JlZW4gdG8gY29vcmRpbmF0ZVxyXG4gICAqIGZvciByZWFjdGluZyB0byBzaGlmdCtjbGljayBhY3Rpb25zIHRoYXQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgc2VsZWN0IG11bHRpcGxlIHJvd3MgYmV0d2VlbiB0aGUgY2xpY2tlZCByb3dzXHJcbiAgICogZGVmYXVsdHMgdG8gLTEgdG8gaW5kaWNhdGUgdGhhdCBubyB1c2VyIGNsaWNrIGhhcyBiZWVuIGNhcHR1cmVkXHJcbiAgICovXHJcbiAgcHVibGljIGxhc3RDbGlja2VkSW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuICAvKipBIHN1YmplY3QgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiBhIHJvdy1iYXNlZCBkaXJlY3RpdmUgaXMgYWRkZWQgb3IgcmVtb3ZlZC4gSXQgYWxsb3dzXHJcbiAgICogdGhlIG1hc3RlciBjaGVja2JveCBpbiB0aGUgaGVhZGVyIHRvIGtub3cgdGhhdCBpdCBuZWVkcyB0byByZXNldCB0cmFja2luZyBpbmZvcm1hdGlvblxyXG4gICAqIHdpdGhvdXQgcmVwbGFjaW5nIHRoZSBhY3R1YWwgRm9ybUFycmF5IHRoYXQgdGhlIGhvc3RpbmcgY29tcG9uZW50IG1heSBiZSBzdWJzY3JpYmVkIHRvIGZvciBjaGFuZ2VzXHJcbiAgICovXHJcbiAgcHVibGljIHJvd0FkZGVkT3JSZW1vdmVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRvIHRydWUgdG8gZGlzYWJsZSBTaGlmdC1DbGljay9DdHJsLUNsaWNrIGZ1bmN0aW9uYWxpdHlcclxuICAgKi9cclxuICBwdWJsaWMgZGlzYWJsZUFkdmFuY2VkUm93Q2xpY2tCZWhhdmlvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgdG8gbGlzdCBvZiBpbmRpY2VzIG9mIGNvbnRyb2xzIHRoYXQgc2hvdWxkIG5vdCB0b2dnbGUgd2hlbiBtYXN0ZXIvaGVhZGVyIGNoZWNrYm94IHRvZ2dsZXNcclxuICAgKi9cclxuICBwdWJsaWMgbm9uRGVwZW5kZW50Q2hlY2tib3hlczogbnVtYmVyW10gPSBbXTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdbZWNUYWJsZVNlbGVjdGFibGVSb3ddJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLXNlbGVjdGFibGUtcm93LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlU2VsZWN0YWJsZVJvd0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIC8qKlRoZSBJRCByb290IHRvIHVzZSBmb3IgdGhlIGNoZWNrYm94IGFuZCB0YWJsZSBjZWxsICovXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBEaXNhYmxlcyB0aGUgc2VsZWN0aW9uIGZ1bmN0aW9uYWxpdHkgd2hlbiBmYWxzZSAqL1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaXMtZW5hYmxlZCcpXHJcbiAgQElucHV0KCdlY1RhYmxlU2VsZWN0YWJsZVJvdycpXHJcbiAgcHVibGljIHNldCBpc1NlbGVjdGlvbkVuYWJsZWQodmFsdWU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKSB7IHRoaXMuX3NlbGVjdGlvbkVuYWJsZWQgPSB2YWx1ZSAhPT0gZmFsc2U7IH1cclxuICBwdWJsaWMgZ2V0IGlzU2VsZWN0aW9uRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkVuYWJsZWQ7IH1cclxuICBwcml2YXRlIF9zZWxlY3Rpb25FbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqU2hhcmVkIGNvbnRleHQgYmV0d2VlbiBtYXN0ZXIgYW5kIGNoaWxkcmVuLiBDaGlsZCBkaXJlY3RpdmUgYWRkcyBpdHMgb3duIEZvcm1Db250cm9sIHRvIHRoaXNcclxuICBhbmQgcmVtb3ZlcyBpdCBvbkRlc3Ryb3kuIFRoZSBzYW1lIGNvbnRleHQgb2JqZWN0IG11c3QgYmUgdXNlZCBmb3IgYWxsIGRpcmVjdGl2ZXMgaW4gYSBzaW5nbGUgdGFibGUqL1xyXG4gIEBJbnB1dCgnc2VsZWN0aW9uQ29udGV4dCcpXHJcbiAgcHVibGljIGNvbnRleHQhOiBUYWJsZVNlbGVjdGFibGVSb3dDb250ZXh0O1xyXG5cclxuICAvKlJlcXVpcmVkIGZvciBhbGwgcm93cy4gVGhlIHJvdyBpbmRleCB0aGlzIGNvbXBvbmVudCByZXByZXNlbnRzLCB0byBhbGxvdyBpdCB0byBrbm93IGhvdyB0byBoYW5kbGUgc2hpZnQrY2xpY2tzLlxyXG4gICAgRGVmYXVsdHMgdG8gLTEgd2hpY2ggd2lsbCBjYXVzZSB0aGUgZGlyZWN0aXZlIHRvIGJlaGF2ZSBhcyBhIGhlYWRlciByb3cqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJvd0luZGV4OiBudW1iZXIgPSAtMTtcclxuXHJcbiAgLyoqVGhlIG9wdGlvbnMgdXNlZCB0byBsb2NrIHRoZSBjaGVja2JveCBjb2x1bW4gdG8gdGhlIGxlZnQgb2YgdGhlIHRhYmxlLCBtdXN0IGJlIG1vZGlmaWVkIGJ5IGhvc3RcclxuICAgKiBpZiB0aGUgY2hlY2tib3ggaXMgbm90IHRoZSBmaXJzdCBjb2x1bW4gaW4gdGhlIHRhYmxlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbG9ja2VkQ29sT3B0aW9uczogeyBib3JkZXI6IGJvb2xlYW4sIGxlZnQ/OiBudW1iZXIsIHJpZ2h0PzogbnVtYmVyIH0gPSB7IGJvcmRlcjogZmFsc2UsIGxlZnQ6IDAgfTtcclxuXHJcbiAgLyoqIEF1dG9tYXRpY2FsbHkgc2V0IHRvIHRydWUgYmFzZWQgb24gY2hlY2tib3ggc3RhdGUsIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSByb3cgdG8gbWF0Y2ggb3VyIHRhYmxlIHNlbGVjdGVkIHJvdyBzdHlsZXMgKi9cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLXNlbGVjdGVkJylcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpc1NlbGVjdGVkID0gZmFsc2U7XHJcblxyXG4gIC8qKiBBdXRvbWF0aWNhbGx5IHNldCB0byB0cnVlIGlmIG5vIHJvd0luZGV4IGlzIHByb3ZpZGVkIG9yIHRoZSByb3cgaW5kZXggaXMgbGVzcyB0aGFuIHplcm8gKi9cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLWhlYWRlcicpXHJcbiAgcHVibGljIGlzSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRoZSBjaGVja2JveCB0byBiZSBkaXNhYmxlZC5cclxuICAgKlxyXG4gICAqIFdoZW4geW91IHVzZSB0aGlzIHByb3BlcnR5LCBtYWtlIHN1cmUgeW91IHNldCBgZGlzYWJsZUFkdmFuY2VkUm93Q2xpY2tCZWhhdmlvcjogdHJ1ZWBcclxuICAgKiBpbiB0aGUgYFRhYmxlU2VsZWN0YWJsZVJvd0NvbnRleHRgLCBvciB1bmRlc2lyZWQgc2lkZS1lZmZlY3RzIHdpbGwgb2NjdXIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaXNDaGVja2JveERpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiBBIHJlZmVyZW5jZSB0aGF0IHdlIGNhbiBjaGFuZ2Ugd2hlbiBhIGNvbnRyb2wgaXMgcmVwbGFjZWQgdG8gZm9yY2UgdGhlIG1hc3RlciBjaGVja2JveCByZWZlcmVuY2UgdG8gdXBkYXRlXHJcbiAgICAgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgZm9ybSBhcnJheSB0aGF0IHRoZSBob3N0IGNvbXBvbmVudCBtYXkgYmUgd2F0Y2hpbmcgZm9yIHNlbGVjdGVkIHJvdyBjaGFuZ2VzICovXHJcbiAgcHVibGljIGRlcGVuZGVudENoZWNrYm94ZXNSZWZlcmVuY2U6IHsgY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdIH0gPSB7IGNvbnRyb2xzOiBbXSB9O1xyXG5cclxuICAvKkNhcHR1cmUgdGhlIGZvcm0gY29udHJvbCB0aGlzIGNvbXBvbmVudCBjcmVhdGVzIHRvIGFsbG93IGNsZWFudXAgbGF0ZXIgb24gYW5kIGV4cG9zZSBpdCB0byB0aGUgcm93Ki9cclxuICBwdWJsaWMgZm9ybUNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XHJcblxyXG4gIHB1YmxpYyBjaGVja2JveEF0dHJpYnV0ZUlEOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqU2VuZHMgYW4gZXZlbnQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBzbyB0aGF0IGl0IGNhbiB1bnN1YnNjcmliZSBmcm9tIGFueSBvYnNlcnZhYmxlcyAqL1xyXG4gIHByaXZhdGUgZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgLyoqVmFsaWRhdGUgYW5kIHBvcHVsYXRlIHRoZSBjb250ZXh0IGFzIHRoZSB0YWJsZSBpcyBkeW5hbWljYWxseSBidWlsdC4gQmVjYXVzZSB0aGUgY29udGV4dCBpcyBzaGFyZWQgYmV0d2VlbiB0aGVcclxuICAgKiBoZWFkZXIgYW5kIGVhY2ggb2YgdGhlIHJvd3MsIGNoYW5nZXMgdG8gaXQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgaGFwcGVuaW5nIGFuZCBob29rIHVwIHRoZSBjb3JyZWN0XHJcbiAgICogc3Vic2NyaXB0aW9ucyBmb3Igc2VsZWN0QWxsLiBUaGUgdXNlciBjYW4gcHJvdmlkZSBhbiBleGlzdGluZyBmb3JtQXJyYXkgZm9yIHRoZSByb3dzIGFuZCBmb3JtIGNvbnRyb2wgZm9yIHRoZSBoZWFkZXIsXHJcbiAgICogb3IgaXQgY2FuIGp1c3QgYmUgdGhlIGRlZmF1bHQgZW1wdHkgb25lcyBjcmVhdGVkIGJ5IHRoZSBjb250ZXh0IGNsYXNzLlxyXG4gICovXHJcbiAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pc0hlYWRlciA9IHRoaXMucm93SW5kZXggPCAwO1xyXG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignZWNUYWJsZVNlbGVjdGFibGVSb3cgcmVxdWlyZXMgYSBkZWZpbmVkIFNlbGVjdGFibGVUYWJsZVJvd0NvbnRleHQgdG8gYmUgc2hhcmVkIHdpdGggYWxsIGluc3RhbmNlcyBpbiBvbmUgdGFibGUuJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcm93Q2hlY2tib3ggPSB0aGlzLmNvbnRleHQ/LnJvd0NoZWNrYm94ZXM/LmF0KHRoaXMucm93SW5kZXgpO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmlzSGVhZGVyICYmICFyb3dDaGVja2JveCkge1xyXG4gICAgICAgIHJvd0NoZWNrYm94ID0gbmV3IEZvcm1Db250cm9sKHRoaXMuaXNTZWxlY3RlZCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Py5yb3dDaGVja2JveGVzLnB1c2gocm93Q2hlY2tib3gpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5pc0hlYWRlciA/IHRoaXMuY29udGV4dC5zZWxlY3RBbGxDaGVja2JveCA6IHJvd0NoZWNrYm94O1xyXG4gICAgICB0aGlzLndhdGNoRm9yQ2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqV2F0Y2ggZm9yIGNoYW5nZXMgdG8gdGhlIHJvdyBpbmRleCB0aGF0IGNhbiBvY2N1ciBpZiB0aGUgdGFibGUgaXMgcmVvcmRlcmVkIGluLXBsYWNlIGluc3RlYWQgb2ZcclxuICAgKiByZWNyZWF0ZWQgZnJvbSBzY3JhdGNoLiBSZS1jYXB0dXJlIHRoZSBjb3JyZWN0IGZvcm0gY29udHJvbCB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gc3luY1xyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlcy5yb3dJbmRleCAmJiAhdGhpcy5pc0hlYWRlcikge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5jb250ZXh0LnJvd0NoZWNrYm94ZXMuYXQodGhpcy5yb3dJbmRleCk7XHJcbiAgICAgIHRoaXMuY2hlY2tib3hBdHRyaWJ1dGVJRCA9IGAke3RoaXMuaWR9X3JvdyR7dGhpcy5yb3dJbmRleH1fZWNDaGVja2JveGA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXMuaXNTZWxlY3Rpb25FbmFibGVkICYmICF0aGlzLmlzU2VsZWN0aW9uRW5hYmxlZCAmJiB0aGlzLmZvcm1Db250cm9sPy52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy5pc1NlbGVjdGVkICYmIHRoaXMuZm9ybUNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmlzU2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFRlbGwgdGhlIGhlYWRlciBjaGVja2JveCB0byByZWZyZXNoIHRoZSBzZWxlY3RBbGwgc3Vic2NyaXB0aW9uIGJlY2F1c2UgYSByb3cgd2FzIHJlbW92ZWQqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICghdGhpcy5pc0hlYWRlciAmJiB0aGlzLmZvcm1Db250cm9sKSB7XHJcbiAgICAgIHRoaXMuY29udGV4dC5yb3dBZGRlZE9yUmVtb3ZlZC5uZXh0KCk7XHJcblxyXG4gICAgICAvL2ZpbmQgdGhlIGxvY2F0aW9uIGluIHRoZSBhcnJheSB0aGF0IG1hdGNoZXMgdGhlIGNoZWNrYm94LiBJZiBtYW55IHJvd3MgYXJlIGJlaW5nIHJlbW92ZWQgaXQgbWF5IG5vdCBtYXRjaCByb3dJbmRleCB5ZXRcclxuICAgICAgbGV0IG1hdGNoSW5kZXggPSB0aGlzLmNvbnRleHQucm93Q2hlY2tib3hlcy5jb250cm9scy5maW5kSW5kZXgoYyA9PiBjID09IHRoaXMuZm9ybUNvbnRyb2wpO1xyXG4gICAgICBpZiAobWF0Y2hJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnJvd0NoZWNrYm94ZXMucmVtb3ZlQXQobWF0Y2hJbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKkhhbmRsZSB3aGVuIGEgdXNlciBjbGlja3Mgb24gYSB0YWJsZSByb3cgKG9yIHNvbWV0aGluZyBpbnNpZGUgaXQgd2hpY2ggYnViYmxlcyB1cCkgdG8gaW5jcmVhc2UgdGhlIGhpdCBhcmVhIGZvciByb3cgc2VsZWN0aW9uXHJcbiAgICogT25seSB3b3JrIG9uIHRoZSB0YWJsZSBib2R5IChub3QgdGhlIGhlYWRlcikgYmVjYXVzZSB0aGUgaGVhZGVyIG1heSBoYXZlIG90aGVyIGNsaWNrIGhhbmRsZXJzIGZvciBzb3J0IGV0YyB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQuXHJcbiAgICogSGFuZGxlIHNoaWZ0IGFuZCBjb250cm9sIHNlbGVjdCBhcyB3ZWxsIGFzIGNoZWNrYm94IGNsaWNrIGxpa2Ugd2luZG93cyBleHBsb3JlciBvciB0aGUgb3JpZ2luYWwgYmlsbCBsaXN0cyBkby5cclxuICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgcm93Q2xpY2tlZChldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSGVhZGVyICYmIHRoaXMuaXNTZWxlY3Rpb25FbmFibGVkICYmICF0aGlzLmlzQ2hlY2tib3hEaXNhYmxlZCkge1xyXG4gICAgICBsZXQgdGFyZ2V0RWwgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgLy9jbGlja2luZyBvbiBhIHJvdyBhbHdheXMgdG9nZ2xlcyB0aGF0IHJvdy4gU29tZXRpbWVzIHRoZSBzaGlmdC1zZWxlY3Qgd2lsbCB0b2dnbGUgaXQgYmFja1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKCF0aGlzLmZvcm1Db250cm9sLnZhbHVlKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5jb250ZXh0LmRpc2FibGVBZHZhbmNlZFJvd0NsaWNrQmVoYXZpb3IpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVNoaWZ0U2VsZWN0KGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXRjaEZvckNoYW5nZXMoKSB7XHJcbiAgICAvL3dhdGNoIGZvciByb3dzIGJlaW5nIHJlcGxhY2VkIHNvIHRoYXQgdGhlIG1hc3RlciBjaGVja2JveCBhbmQgc2hpZnQtc2VsZWN0IHN1cHBvcnQgY2FuIGJlIHJlc2V0IHRvIG1hdGNoXHJcbiAgICAvL3RoaXMga2VlcHMgdGhlIG1hc3RlciBpbiBzeW5jIGFzIHRoZSB0YWJsZSBjaGFuZ2VzIHBhZ2VzIGV0YyBhbmQgc3RvcHMgdW5leHBlY3RlZCByb3dzIGZyb20gYmVpbmcgc2VsZWN0ZWQgYWZ0ZXIgcmVkcmF3XHJcbiAgICBpZiAodGhpcy5pc0hlYWRlcikge1xyXG4gICAgICB0aGlzLmNvbnRleHQucm93QWRkZWRPclJlbW92ZWQucGlwZShkZWJvdW5jZVRpbWUoMTApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5sYXN0Q2xpY2tlZEluZGV4ID0gLTE7XHJcblxyXG4gICAgICAgIC8vIGV4Y2x1ZGUgbm9uRGVwZW5kZW50Q2hlY2tib3hlcyAoc29tZSBtYXkgbm90IGJlIGFsbG93ZWQgdG8gYmUgZGVzZWxlY3RlZClcclxuICAgICAgICBsZXQgZGVwZW5kZW50Q2hlY2tib3hlczogQWJzdHJhY3RDb250cm9sW10gPSBbXTtcclxuICAgICAgICB0aGlzLmNvbnRleHQucm93Q2hlY2tib3hlcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQubm9uRGVwZW5kZW50Q2hlY2tib3hlcy5pbmNsdWRlcyhpbmRleCkpIHtcclxuICAgICAgICAgICAgZGVwZW5kZW50Q2hlY2tib3hlcy5wdXNoKGNvbnRyb2wpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRlcGVuZGVudENoZWNrYm94ZXNSZWZlcmVuY2UgPSB7IGNvbnRyb2xzOiBkZXBlbmRlbnRDaGVja2JveGVzIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250ZXh0LnJvd0FkZGVkT3JSZW1vdmVkLm5leHQoKTtcclxuXHJcbiAgICAgIC8vd2F0Y2ggZm9yIHRoZSBjaGVja2JveCBzdGF0ZSB0byBjaGFuZ2Ugb24gYSBjaGlsZCByb3cgYW5kIHNldCB0aGUgcm93IGlzU2VsZWN0ZWQgY2xhc3MgLyBoaWdobGlnaHQgdG8gbWF0Y2hcclxuICAgICAgLy90aGlzIHdheSB0aGUgcm93cyBtYXRjaCBldmVuIGlmIGV4dGVybmFsIGNvZGUgdXBkYXRlcyB0aGUgZm9ybSBtb2RlbFxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sPy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHZhbHVlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gdmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBJZiB0aGV5IGFyZSBob2xkaW5nIHRoZSBzaGlmdCBrZXksIHRyeSB0byBzZWxlY3QgYWxsIHRoZSBjaGVja2JveGVzIGJldHdlZW4gdGhlaXIgbGFzdCBzZWxlY3Rpb25cclxuICAgICogYW5kIG1vc3QgcmVjZW50IHNlbGVjdGlvbi4gVGhlIGxvZ2ljIGlzIHNldHVwIHRvIGJlaGF2ZSB0aGUgd2F5IHdpbmRvd3MgZXhwbG9yZXIgYmVoYXZlc1xyXG4gICAgKiBXZSBkb24ndCBhbGxvdyBkcmFnLXRvLXNlbGVjdCBsaWtlIHRoZSBrZW5kbyB0YWJsZXMsIGJ1dCBpdCBtZWFucyB1c2VycyBjYW4gaGlnaGxpZ2h0IHRleHQgYW5kIGNvcHkrcGFzdGUgdG8gZXhjZWwgZXRjXHJcbiAgICAqIHNvIEkgdGhpbmsgdGhpcyBpcyBhY3R1YWxseSBwcmVmZXJhYmxlXHJcbiAgICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlU2hpZnRTZWxlY3QoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGxldCBsYXN0SW5kZXggPSB0aGlzLmNvbnRleHQubGFzdENsaWNrZWRJbmRleDtcclxuICAgIGxldCBjdXJJbmRleCA9IHRoaXMucm93SW5kZXg7XHJcbiAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgbGFzdEluZGV4ID49IDApIHtcclxuICAgICAgdGhpcy5jbGVhckFsbFJvd3MoKTtcclxuICAgICAgaWYgKGN1ckluZGV4ID4gbGFzdEluZGV4KSB7XHJcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSBsYXN0SW5kZXg7IGluZGV4IDw9IGN1ckluZGV4OyBpbmRleCsrKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRleHQucm93Q2hlY2tib3hlcy5hdChpbmRleCkuc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGN1ckluZGV4IDwgbGFzdEluZGV4KSB7XHJcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSBsYXN0SW5kZXg7IGluZGV4ID49IGN1ckluZGV4OyBpbmRleC0tKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRleHQucm93Q2hlY2tib3hlcy5hdChpbmRleCkuc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGN1ckluZGV4ID09PSBsYXN0SW5kZXgpIHtcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRydWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvL3JlY29yZCB0aGUgY3VycmVudCByb3cgaW5kZXggZm9yIGZ1dHVyZSByb3cgY2xpY2tzIHRvIGtub3cgd2hlcmUgdGhleSBsYXN0IGludGVyYWN0ZWRcclxuICAgICAgLy9idXQgb25seSBpZiB0aGV5IGRvbid0IGhhdmUgc2hpZnQgZG93biBmb3IgdGhpcyBjbGljay4gSWYgc2hpZnQgaXMgZG93biB0aGVuIHRoZSBuZXh0IHNoaWZ0K2NsaWNrXHJcbiAgICAgIC8vc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gZXh0ZW5zaW9uIChvciBjb250cmFjdGlvbikgb2YgdGhlIG9yaWdpbmFsIG11bHRpLXJvdyBzZWxlY3Rpb25cclxuICAgICAgdGhpcy5jb250ZXh0Lmxhc3RDbGlja2VkSW5kZXggPSB0aGlzLnJvd0luZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckFsbFJvd3MoKSB7XHJcbiAgICB0aGlzLmNvbnRleHQucm93Q2hlY2tib3hlcy5jb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4gY29udHJvbC5zZXRWYWx1ZShmYWxzZSkpO1xyXG4gIH1cclxufVxyXG4iXX0=
|