@aquera/ngx-smart-table 0.0.17-patch-0.6 → 0.0.17-patch-0.8
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/editors/nile-chip-editor.mjs +5 -2
- package/esm2020/lib/editors/nile-select-editor.mjs +119 -6
- package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +9 -3
- package/esm2020/lib/renderer/components/st-column-menu/st-column-menu.component.mjs +36 -17
- package/esm2020/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.mjs +34 -27
- package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +5 -5
- package/fesm2015/aquera-ngx-smart-table.mjs +212 -58
- package/fesm2015/aquera-ngx-smart-table.mjs.map +1 -1
- package/fesm2020/aquera-ngx-smart-table.mjs +201 -53
- package/fesm2020/aquera-ngx-smart-table.mjs.map +1 -1
- package/lib/editors/nile-chip-editor.d.ts +1 -0
- package/lib/editors/nile-select-editor.d.ts +11 -0
- package/lib/renderer/components/st-column-menu/st-column-menu.component.d.ts +4 -2
- package/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.d.ts +4 -2
- package/lib/renderer/components/st-table/st-table.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -53,6 +53,7 @@ export class NileChipEditor {
|
|
|
53
53
|
this.acceptsInitialKeypress = false;
|
|
54
54
|
this.eventListeners = [];
|
|
55
55
|
this.trackedValues = [];
|
|
56
|
+
this.hasChangeOccurred = false;
|
|
56
57
|
}
|
|
57
58
|
edit(context) {
|
|
58
59
|
if (!context.container) {
|
|
@@ -205,6 +206,7 @@ export class NileChipEditor {
|
|
|
205
206
|
const detail = e.detail;
|
|
206
207
|
const newValue = Array.isArray(detail?.value) ? [...detail.value] : (this.chip?.value ? [...this.chip.value] : []);
|
|
207
208
|
this.trackedValues = newValue;
|
|
209
|
+
this.hasChangeOccurred = true;
|
|
208
210
|
context.onChange(newValue);
|
|
209
211
|
});
|
|
210
212
|
// Keyboard handling on the chip element
|
|
@@ -273,6 +275,7 @@ export class NileChipEditor {
|
|
|
273
275
|
this.chip = undefined;
|
|
274
276
|
this.cellContainer = undefined;
|
|
275
277
|
this.trackedValues = [];
|
|
278
|
+
this.hasChangeOccurred = false;
|
|
276
279
|
}
|
|
277
280
|
focus() {
|
|
278
281
|
try {
|
|
@@ -281,7 +284,7 @@ export class NileChipEditor {
|
|
|
281
284
|
catch { /* ignore */ }
|
|
282
285
|
}
|
|
283
286
|
getCurrentValue() {
|
|
284
|
-
if (this.
|
|
287
|
+
if (this.hasChangeOccurred) {
|
|
285
288
|
return [...this.trackedValues];
|
|
286
289
|
}
|
|
287
290
|
if (!this.chip)
|
|
@@ -290,4 +293,4 @@ export class NileChipEditor {
|
|
|
290
293
|
return Array.isArray(val) ? [...val] : [];
|
|
291
294
|
}
|
|
292
295
|
}
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1jaGlwLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvZWRpdG9ycy9uaWxlLWNoaXAtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBc0ZILElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFNBQVMsZ0JBQWdCO0lBQ3ZCLElBQUksa0JBQWtCO1FBQUUsT0FBTztJQUMvQixrQkFBa0IsR0FBRyxJQUFJLENBQUM7SUFFMUIsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUM7SUFDMUMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qm5CLENBQUM7SUFDRixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sY0FBYztJQVN6QixZQUE2QixPQUErQjtRQUEvQixZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQVI1RCwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFLdkIsbUJBQWMsR0FBOEYsRUFBRSxDQUFDO1FBQy9HLGtCQUFhLEdBQWEsRUFBRSxDQUFDO0lBRTBCLENBQUM7SUFFaEUsSUFBSSxDQUFDLE9BQW9DO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUM1RCxPQUFPO1NBQ1I7UUFFRCxnQkFBZ0IsRUFBRSxDQUFDO1FBRW5CLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUV2Qyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO1FBRTNDLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsb0NBQW9DLENBQUM7UUFFM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwQyxzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLElBQUksQ0FBQztTQUNyRTtRQUVELHlDQUF5QztRQUN6QyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxLQUFLLEtBQUssRUFBRTtZQUNyQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUk7b0JBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztpQkFBRTtnQkFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFO1lBQ3BELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO0lBQ0gsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsZUFBZSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDN0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLFlBQVksSUFBSSxDQUFDO1FBRS9DLCtFQUErRTtRQUMvRSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU87WUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3JELElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDL0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBZTtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQ3RDO2FBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxFQUFFO1lBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQ3RDO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUV4QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztTQUN0QztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDNUM7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUM1QztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1NBQzVDO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7U0FDMUQ7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztTQUNwRDtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQzlDO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDeEM7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztTQUN4RDtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsS0FBSyxTQUFTLEVBQUU7WUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1NBQ2xFO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixLQUFLLFNBQVMsRUFBRTtZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7U0FDbEU7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUMxQztRQUVELGdCQUFnQjtRQUNoQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUMxQztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7U0FDMUM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztTQUNwRDtRQUVELHVCQUF1QjtRQUN2QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUM5QyxNQUFNLFVBQVUsR0FBYSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFVBQVUsQ0FBQztTQUM1QztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7U0FDeEQ7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7WUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1NBQ2hFO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxPQUFvQixFQUFFLEtBQWEsRUFBRSxPQUFzQixFQUFFLE9BQWlCO1FBQ2hHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sbUJBQW1CLENBQUMsT0FBb0M7UUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUV2QixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUU7WUFDM0QsTUFBTSxNQUFNLEdBQUksQ0FBaUIsQ0FBQyxNQUFNLENBQUM7WUFDekMsTUFBTSxRQUFRLEdBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3SCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztZQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFRLEVBQUUsRUFBRTtZQUNsRCxNQUFNLFFBQVEsR0FBRyxDQUFrQixDQUFDO1lBQ3BDLElBQUksUUFBUSxDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUU7Z0JBQzVCLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUM1QjtpQkFBTSxJQUFJLFFBQVEsQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO2dCQUNwQyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzFCLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ3BCO2lCQUFNLElBQUksUUFBUSxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7Z0JBQ2pDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDMUIsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUMzQixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxpRUFBaUU7UUFDakUsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFhLEVBQUUsRUFBRTtZQUN6QyxJQUFJLGFBQWE7Z0JBQUUsT0FBTztZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUUxQixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUIsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUU7Z0JBQ3JCLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPO29CQUFFLE9BQU87Z0JBQ2hDLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJO29CQUFFLE9BQU87Z0JBQzdCLElBQUksRUFBRSxZQUFZLFdBQVcsRUFBRTtvQkFDN0IsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLFdBQVc7d0JBQUUsT0FBTztvQkFDdEQsSUFBSSxFQUFFLENBQUMsU0FBUyxJQUFJLE9BQU8sRUFBRSxDQUFDLFNBQVMsS0FBSyxRQUFRLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO3dCQUFFLE9BQU87aUJBQ3BHO2FBQ0Y7WUFFRCxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBRUYsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5RCxJQUFZLENBQUMseUJBQXlCLEdBQUcsZ0JBQWdCLENBQUM7UUFFM0QscUVBQXFFO1FBQ3JFLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsT0FBTztRQUNMLG9DQUFvQztRQUNwQyxJQUFLLElBQVksQ0FBQyx5QkFBeUIsRUFBRTtZQUMzQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFHLElBQVksQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RixPQUFRLElBQVksQ0FBQyx5QkFBeUIsQ0FBQztTQUNoRDtRQUVELCtCQUErQjtRQUMvQixLQUFLLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFekIsa0NBQWtDO1FBQ2xDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1NBQzFCO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUFFO1FBQUMsTUFBTSxFQUFFLFlBQVksRUFBRTtJQUNwRCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNoQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVDaGlwIGZyb20gQGFxdWVyYS9uaWxlLWVsZW1lbnRzXG4gKiBSZW5kZXJzIHRoZSBjaGlwIGlucHV0IGluIGEgZmxvYXRpbmcgcG9wb3ZlciBiZWxvdyB0aGUgY2VsbCB0byBhdm9pZCByb3cgaGVpZ2h0IG1pc21hdGNoLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9uaWxlLmFxdWVyYWxhYnMuY29tLzEuNi4zL2NoaXA/dGhlbWU9ZW50ZXJwcmlzZVxuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIENoaXAgb3B0aW9uIGZvciBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGlwT3B0aW9uIHtcbiAgLyoqIFRoZSBvcHRpb24ncyB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvbiAoZGVmYXVsdHMgdG8gdmFsdWUgaWYgb21pdHRlZCkgKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBpbnRlcmZhY2UgZm9yIE5pbGVDaGlwRWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmlsZUNoaXBFZGl0b3JPcHRpb25zIHtcbiAgLyoqIEF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uIGxpc3QgKGZ1bGwgc2V0KSAqL1xuICBhdXRvQ29tcGxldGVPcHRpb25zPzogQ2hpcE9wdGlvbltdIHwgc3RyaW5nW107XG5cbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgc2hvd24gaW5zaWRlIHRoZSBpbnB1dCBhcmVhICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIC8qKiBBbGxvdyB1c2VycyB0byB0eXBlIGN1c3RvbSB2YWx1ZXMgbm90IHByZXNlbnQgaW4gdGhlIHN1Z2dlc3Rpb24gbGlzdCAqL1xuICBhY2NlcHRVc2VySW5wdXQ/OiBib29sZWFuO1xuXG4gIC8qKiBQcmV2ZW50IGR1cGxpY2F0ZSBjaGlwIHZhbHVlcyAqL1xuICBub0R1cGxpY2F0ZXM/OiBib29sZWFuO1xuXG4gIC8qKiBEaXNhYmxlIHRoZSBjaGlwIGlucHV0ICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcblxuICAvKiogTWFrZSB0aGUgY2hpcCBpbnB1dCByZWFkb25seSAqL1xuICByZWFkb25seT86IGJvb2xlYW47XG5cbiAgLyoqIFNob3cgYSBjbGVhci1hbGwgYnV0dG9uICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFByZXZlbnQgY2hpcCB0YWdzIGZyb20gd3JhcHBpbmcgdG8gbXVsdGlwbGUgbGluZXMgKi9cbiAgbm9XcmFwPzogYm9vbGVhbjtcblxuICAvKiogUmVtb3ZlIHRoZSBhdXRvY29tcGxldGUgZHJvcGRvd24gZW50aXJlbHkgKi9cbiAgbm9BdXRvQ29tcGxldGU/OiBib29sZWFuO1xuXG4gIC8qKiBFbmFibGUgdmlydHVhbCBzY3JvbGxpbmcgaW4gdGhlIHN1Z2dlc3Rpb24gZHJvcGRvd24gKi9cbiAgZW5hYmxlVmlydHVhbFNjcm9sbD86IGJvb2xlYW47XG5cbiAgLyoqIENvbnRyb2wgd2hldGhlciB0aGUgZHJvcGRvd24gb3BlbnMgb24gZm9jdXMg4oCUICd0cnVlJyB8ICdmYWxzZScgfCAnYWx3YXlzJyAqL1xuICBvcGVuRHJvcGRvd25PbkZvY3VzPzogc3RyaW5nO1xuXG4gIC8qKiBTaG93IGxvYWRpbmcgc3Bpbm5lciBpbnNpZGUgdGhlIGRyb3Bkb3duICovXG4gIGxvYWRpbmc/OiBib29sZWFuO1xuXG4gIC8vIFZpc3VhbCBzdGF0ZXNcbiAgLyoqIFdhcm5pbmcgc3RhdGUgc3R5bGluZyAqL1xuICB3YXJuaW5nPzogYm9vbGVhbjtcbiAgLyoqIEVycm9yIHN0YXRlIHN0eWxpbmcgKi9cbiAgZXJyb3I/OiBib29sZWFuO1xuICAvKiogU3VjY2VzcyBzdGF0ZSBzdHlsaW5nICovXG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICAvKiogRXJyb3IgbWVzc2FnZSBzaG93biBiZWxvdyB0aGUgaW5wdXQgKi9cbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAvKiogSGVscCB0ZXh0IHNob3duIGJlbG93IHRoZSBpbnB1dCAqL1xuICBoZWxwVGV4dD86IHN0cmluZztcbiAgLyoqIExhYmVsIHRleHQgZm9yIHRoZSBjaGlwIGlucHV0ICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogSW5kZXhlcyBvZiBjaGlwcyB0byBoaWdobGlnaHQgYXMgZXJyb3JzICovXG4gIGVycm9ySW5kZXhlcz86IG51bWJlcltdO1xuXG4gIC8qKiBDdXN0b20gZmlsdGVyIGZ1bmN0aW9uIGZvciBhdXRvY29tcGxldGUgKi9cbiAgZmlsdGVyRnVuY3Rpb24/OiAocXVlcnk6IHN0cmluZywgb3B0aW9uOiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbiAgLyoqIEN1c3RvbSByZW5kZXIgZnVuY3Rpb24gZm9yIGRyb3Bkb3duIGl0ZW1zICovXG4gIHJlbmRlckl0ZW1GdW5jdGlvbj86IChvcHRpb246IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIC8qKiBBdXRvLWZvY3VzIHRoZSBpbnB1dCB3aGVuIGVkaXRvciBvcGVucyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcblxuICAvKiogTWluaW11bSB3aWR0aCBvZiB0aGUgcG9wb3ZlciBpbiBweCAoZGVmYXVsdDogd2lkdGggb2YgdGhlIGNlbGwpICovXG4gIHBvcG92ZXJNaW5XaWR0aD86IG51bWJlcjtcblxuICAvKiogTWF4aW11bSBoZWlnaHQgb2YgdGhlIHBvcG92ZXIgaW4gcHggYmVmb3JlIGl0IHNjcm9sbHMgKGRlZmF1bHQ6IDIwMCkgKi9cbiAgcG9wb3Zlck1heEhlaWdodD86IG51bWJlcjtcbn1cblxubGV0IGNoaXBTdHlsZXNJbmplY3RlZCA9IGZhbHNlO1xuZnVuY3Rpb24gaW5qZWN0Q2hpcFN0eWxlcygpOiB2b2lkIHtcbiAgaWYgKGNoaXBTdHlsZXNJbmplY3RlZCkgcmV0dXJuO1xuICBjaGlwU3R5bGVzSW5qZWN0ZWQgPSB0cnVlO1xuXG4gIGNvbnN0IHN0eWxlSWQgPSAnbmlsZS1jaGlwLWVkaXRvci1zdHlsZXMnO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHJldHVybjtcblxuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLmlkID0gc3R5bGVJZDtcbiAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgLnN0LWNoaXAtcG9wb3ZlciB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB6LWluZGV4OiAxMDAwMDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLW5pbGUtY29sb3JzLXdoaXRlLWJhc2UsICNmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbmlsZS1jb2xvcnMtbmV1dHJhbC0yMDAsICNlMmU4ZjApO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgICAgcGFkZGluZzogOHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICB9XG4gICAgLnN0LWNoaXAtcG9wb3ZlciBuaWxlLWNoaXAge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5zdC1jaGlwLXBvcG92ZXIgbmlsZS1jaGlwOjpwYXJ0KGJhc2UpIHtcbiAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgbWluLWhlaWdodDogMzJweDtcbiAgICB9XG4gICAgLnN0LWNoaXAtcG9wb3ZlciBuaWxlLWNoaXA6OnBhcnQoaW5wdXQpIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbmlsZS1mb250LXNpemUtc21hbGwsIDEzcHgpO1xuICAgIH1cbiAgYDtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbi8qKlxuICogQ3VzdG9tIGVkaXRvciB0aGF0IHVzZXMgTmlsZUNoaXAgKHRhZyBpbnB1dCkgY29tcG9uZW50LlxuICogUmVuZGVycyBpbiBhIGZsb2F0aW5nIHBvcG92ZXIgYmVsb3cgdGhlIGNlbGwgdG8gYXZvaWQgZXhwYW5kaW5nIHJvdyBoZWlnaHQuXG4gKlxuICogQ2VsbCB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSBgc3RyaW5nW11gIChhcnJheSBvZiB0YWcgc3RyaW5ncykuXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWxlQ2hpcEVkaXRvciBpbXBsZW1lbnRzIENlbGxFZGl0b3I8c3RyaW5nW10+IHtcbiAgYWNjZXB0c0luaXRpYWxLZXlwcmVzcyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY2hpcD86IGFueTtcbiAgcHJpdmF0ZSBwb3BvdmVyPzogSFRNTERpdkVsZW1lbnQ7XG4gIHByaXZhdGUgY2VsbENvbnRhaW5lcj86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTx7IGVsZW1lbnQ6IEV2ZW50VGFyZ2V0OyBldmVudDogc3RyaW5nOyBoYW5kbGVyOiBFdmVudExpc3RlbmVyOyBjYXB0dXJlPzogYm9vbGVhbiB9PiA9IFtdO1xuICBwcml2YXRlIHRyYWNrZWRWYWx1ZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zPzogTmlsZUNoaXBFZGl0b3JPcHRpb25zKSB7fVxuXG4gIGVkaXQoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8c3RyaW5nW10+KTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0LmNvbnRhaW5lcikge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlQ2hpcEVkaXRvciByZXF1aXJlcyBhIGNvbnRhaW5lciBlbGVtZW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5qZWN0Q2hpcFN0eWxlcygpO1xuXG4gICAgdGhpcy5jZWxsQ29udGFpbmVyID0gY29udGV4dC5jb250YWluZXI7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGZsb2F0aW5nIHBvcG92ZXJcbiAgICB0aGlzLnBvcG92ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLnBvcG92ZXIuY2xhc3NOYW1lID0gJ3N0LWNoaXAtcG9wb3Zlcic7XG5cbiAgICAvLyBDcmVhdGUgbmlsZS1jaGlwIGluc2lkZSB0aGUgcG9wb3ZlclxuICAgIHRoaXMuY2hpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtY2hpcCcpO1xuICAgIHRoaXMuY2hpcC5jbGFzc05hbWUgPSAnc3QtY2VsbC1lZGl0b3Igc3QtbmlsZS1jaGlwLWVkaXRvcic7XG5cbiAgICB0aGlzLnNldEluaXRpYWxWYWx1ZShjb250ZXh0LnZhbHVlKTtcbiAgICB0aGlzLmFwcGx5T3B0aW9ucygpO1xuICAgIHRoaXMucG9wb3Zlci5hcHBlbmRDaGlsZCh0aGlzLmNoaXApO1xuXG4gICAgLy8gQXBwbHkgY3VzdG9tIG1heC1oZWlnaHQgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5vcHRpb25zPy5wb3BvdmVyTWF4SGVpZ2h0KSB7XG4gICAgICB0aGlzLnBvcG92ZXIuc3R5bGUubWF4SGVpZ2h0ID0gYCR7dGhpcy5vcHRpb25zLnBvcG92ZXJNYXhIZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIC8vIEFwcGVuZCBwb3BvdmVyIHRvIGJvZHkgYW5kIHBvc2l0aW9uIGl0XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcG92ZXIpO1xuICAgIHRoaXMucG9zaXRpb25Qb3BvdmVyKCk7XG5cbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5hdXRvRm9jdXMgIT09IGZhbHNlKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdHJ5IHsgdGhpcy5jaGlwPy5mb2N1cygpOyB9IGNhdGNoIHsgLyogaWdub3JlICovIH1cbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25Qb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wb3BvdmVyIHx8ICF0aGlzLmNlbGxDb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmNlbGxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbWluV2lkdGggPSB0aGlzLm9wdGlvbnM/LnBvcG92ZXJNaW5XaWR0aCA/PyByZWN0LndpZHRoO1xuICAgIGNvbnN0IHBvcG92ZXJXaWR0aCA9IE1hdGgubWF4KG1pbldpZHRoLCByZWN0LndpZHRoKTtcblxuICAgIHRoaXMucG9wb3Zlci5zdHlsZS50b3AgPSBgJHtyZWN0LmJvdHRvbSArIDJ9cHhgO1xuICAgIHRoaXMucG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0fXB4YDtcbiAgICB0aGlzLnBvcG92ZXIuc3R5bGUud2lkdGggPSBgJHtwb3BvdmVyV2lkdGh9cHhgO1xuXG4gICAgLy8gQWZ0ZXIgcmVuZGVyaW5nLCBjaGVjayBpZiBpdCBnb2VzIG9mZi1zY3JlZW4gYm90dG9tIGFuZCBmbGlwIGFib3ZlIGlmIG5lZWRlZFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMucG9wb3ZlcikgcmV0dXJuO1xuICAgICAgY29uc3QgcG9wUmVjdCA9IHRoaXMucG9wb3Zlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmIChwb3BSZWN0LmJvdHRvbSA+IHdpbmRvdy5pbm5lckhlaWdodCkge1xuICAgICAgICB0aGlzLnBvcG92ZXIuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgLSBwb3BSZWN0LmhlaWdodCAtIDJ9cHhgO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWUodmFsdWU6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNoaXApIHJldHVybjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFsuLi52YWx1ZV07XG4gICAgICB0aGlzLmNoaXAudmFsdWUgPSB0aGlzLnRyYWNrZWRWYWx1ZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlKSB7XG4gICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbdmFsdWVdO1xuICAgICAgdGhpcy5jaGlwLnZhbHVlID0gdGhpcy50cmFja2VkVmFsdWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuY2hpcC52YWx1ZSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jaGlwIHx8ICF0aGlzLm9wdGlvbnMpIHJldHVybjtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuY2hpcC5wbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsKSB7XG4gICAgICB0aGlzLmNoaXAubGFiZWwgPSB0aGlzLm9wdGlvbnMubGFiZWw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oZWxwVGV4dCkge1xuICAgICAgdGhpcy5jaGlwLmhlbHBUZXh0ID0gdGhpcy5vcHRpb25zLmhlbHBUZXh0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGlwLmRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVhZG9ubHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGlwLnJlYWRvbmx5ID0gdGhpcy5vcHRpb25zLnJlYWRvbmx5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWNjZXB0VXNlcklucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hpcC5hY2NlcHRVc2VySW5wdXQgPSB0aGlzLm9wdGlvbnMuYWNjZXB0VXNlcklucHV0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubm9EdXBsaWNhdGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hpcC5ub0R1cGxpY2F0ZXMgPSB0aGlzLm9wdGlvbnMubm9EdXBsaWNhdGVzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hpcC5jbGVhcmFibGUgPSB0aGlzLm9wdGlvbnMuY2xlYXJhYmxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubm9XcmFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hpcC5ub1dyYXAgPSB0aGlzLm9wdGlvbnMubm9XcmFwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubm9BdXRvQ29tcGxldGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGlwLm5vQXV0b0NvbXBsZXRlID0gdGhpcy5vcHRpb25zLm5vQXV0b0NvbXBsZXRlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaXAuZW5hYmxlVmlydHVhbFNjcm9sbCA9IHRoaXMub3B0aW9ucy5lbmFibGVWaXJ0dWFsU2Nyb2xsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMub3BlbkRyb3Bkb3duT25Gb2N1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaXAub3BlbkRyb3Bkb3duT25Gb2N1cyA9IHRoaXMub3B0aW9ucy5vcGVuRHJvcGRvd25PbkZvY3VzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaXAubG9hZGluZyA9IHRoaXMub3B0aW9ucy5sb2FkaW5nO1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXNcbiAgICBpZiAodGhpcy5vcHRpb25zLndhcm5pbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGlwLndhcm5pbmcgPSB0aGlzLm9wdGlvbnMud2FybmluZztcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaXAuZXJyb3IgPSB0aGlzLm9wdGlvbnMuZXJyb3I7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaXAuc3VjY2VzcyA9IHRoaXMub3B0aW9ucy5zdWNjZXNzO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5jaGlwLmVycm9yTWVzc2FnZSA9IHRoaXMub3B0aW9ucy5lcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXJyb3JJbmRleGVzKSB7XG4gICAgICB0aGlzLmNoaXAuZXJyb3JJbmRleGVzID0gdGhpcy5vcHRpb25zLmVycm9ySW5kZXhlcztcbiAgICB9XG5cbiAgICAvLyBBdXRvY29tcGxldGUgb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b0NvbXBsZXRlT3B0aW9ucykge1xuICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucy5hdXRvQ29tcGxldGVPcHRpb25zO1xuICAgICAgY29uc3Qgc3RyaW5nT3B0czogc3RyaW5nW10gPSBvcHRzLm1hcChvID0+IHR5cGVvZiBvID09PSAnc3RyaW5nJyA/IG8gOiAoby5sYWJlbCA/PyBvLnZhbHVlKSk7XG4gICAgICB0aGlzLmNoaXAuYXV0b0NvbXBsZXRlT3B0aW9ucyA9IHN0cmluZ09wdHM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5maWx0ZXJGdW5jdGlvbikge1xuICAgICAgdGhpcy5jaGlwLmZpbHRlckZ1bmN0aW9uID0gdGhpcy5vcHRpb25zLmZpbHRlckZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVuZGVySXRlbUZ1bmN0aW9uKSB7XG4gICAgICB0aGlzLmNoaXAucmVuZGVySXRlbUZ1bmN0aW9uID0gdGhpcy5vcHRpb25zLnJlbmRlckl0ZW1GdW5jdGlvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZExpc3RlbmVyKGVsZW1lbnQ6IEV2ZW50VGFyZ2V0LCBldmVudDogc3RyaW5nLCBoYW5kbGVyOiBFdmVudExpc3RlbmVyLCBjYXB0dXJlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgY2FwdHVyZSk7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGNhcHR1cmUgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8c3RyaW5nW10+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNoaXApIHJldHVybjtcblxuICAgIC8vIFRyYWNrIGNoaXAgY2hhbmdlc1xuICAgIHRoaXMuYWRkTGlzdGVuZXIodGhpcy5jaGlwLCAnbmlsZS1jaGlwLWNoYW5nZScsIChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgZGV0YWlsID0gKGUgYXMgQ3VzdG9tRXZlbnQpLmRldGFpbDtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkoZGV0YWlsPy52YWx1ZSkgPyBbLi4uZGV0YWlsLnZhbHVlXSA6ICh0aGlzLmNoaXA/LnZhbHVlID8gWy4uLnRoaXMuY2hpcC52YWx1ZV0gOiBbXSk7XG4gICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBuZXdWYWx1ZTtcbiAgICAgIGNvbnRleHQub25DaGFuZ2UobmV3VmFsdWUpO1xuICAgIH0pO1xuXG4gICAgLy8gS2V5Ym9hcmQgaGFuZGxpbmcgb24gdGhlIGNoaXAgZWxlbWVudFxuICAgIHRoaXMuYWRkTGlzdGVuZXIodGhpcy5jaGlwLCAna2V5ZG93bicsIChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBlIGFzIEtleWJvYXJkRXZlbnQ7XG4gICAgICBpZiAoa2V5RXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSBlbHNlIGlmIChrZXlFdmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb250ZXh0Lm9uQ2FuY2VsKCk7XG4gICAgICB9IGVsc2UgaWYgKGtleUV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2xpY2stb3V0c2lkZTogc2F2ZSB3aGVuIGNsaWNraW5nIGFueXdoZXJlIG91dHNpZGUgdGhlIHBvcG92ZXJcbiAgICBsZXQgc2F2ZVRyaWdnZXJlZCA9IGZhbHNlO1xuICAgIGNvbnN0IG1vdXNlZG93bkhhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHNhdmVUcmlnZ2VyZWQpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5wb3BvdmVyKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHBhdGggPSBlLmNvbXBvc2VkUGF0aCgpO1xuICAgICAgZm9yIChjb25zdCBlbCBvZiBwYXRoKSB7XG4gICAgICAgIGlmIChlbCA9PT0gdGhpcy5wb3BvdmVyKSByZXR1cm47XG4gICAgICAgIGlmIChlbCA9PT0gdGhpcy5jaGlwKSByZXR1cm47XG4gICAgICAgIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgaWYgKGVsLnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICduaWxlLWNoaXAnKSByZXR1cm47XG4gICAgICAgICAgaWYgKGVsLmNsYXNzTmFtZSAmJiB0eXBlb2YgZWwuY2xhc3NOYW1lID09PSAnc3RyaW5nJyAmJiBlbC5jbGFzc05hbWUuaW5jbHVkZXMoJ25pbGUtY2hpcCcpKSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2F2ZVRyaWdnZXJlZCA9IHRydWU7XG4gICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKTtcbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgbW91c2Vkb3duSGFuZGxlciwgdHJ1ZSk7XG4gICAgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyID0gbW91c2Vkb3duSGFuZGxlcjtcblxuICAgIC8vIFJlcG9zaXRpb24gb24gc2Nyb2xsL3Jlc2l6ZSBzbyBwb3BvdmVyIHN0YXlzIGFsaWduZWQgd2l0aCB0aGUgY2VsbFxuICAgIGNvbnN0IHJlcG9zaXRpb24gPSAoKSA9PiB0aGlzLnBvc2l0aW9uUG9wb3ZlcigpO1xuICAgIHRoaXMuYWRkTGlzdGVuZXIod2luZG93LCAncmVzaXplJywgcmVwb3NpdGlvbik7XG4gICAgdGhpcy5hZGRMaXN0ZW5lcih3aW5kb3csICdzY3JvbGwnLCByZXBvc2l0aW9uLCB0cnVlKTtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gUmVtb3ZlIGRvY3VtZW50IG1vdXNlZG93biBoYW5kbGVyXG4gICAgaWYgKCh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlcikge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyLCB0cnVlKTtcbiAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpLl9kb2N1bWVudE1vdXNlZG93bkhhbmRsZXI7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFsbCB0cmFja2VkIGxpc3RlbmVyc1xuICAgIGZvciAoY29uc3QgeyBlbGVtZW50LCBldmVudCwgaGFuZGxlciwgY2FwdHVyZSB9IG9mIHRoaXMuZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgY2FwdHVyZSk7XG4gICAgfVxuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcblxuICAgIC8vIFJlbW92ZSB0aGUgcG9wb3ZlciBmcm9tIHRoZSBET01cbiAgICBpZiAodGhpcy5wb3BvdmVyKSB7XG4gICAgICB0aGlzLnBvcG92ZXIucmVtb3ZlKCk7XG4gICAgICB0aGlzLnBvcG92ZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2VsbENvbnRhaW5lciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbXTtcbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRyeSB7IHRoaXMuY2hpcD8uZm9jdXMoKTsgfSBjYXRjaCB7IC8qIGlnbm9yZSAqLyB9XG4gIH1cblxuICBnZXRDdXJyZW50VmFsdWUoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLnRyYWNrZWRWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIFsuLi50aGlzLnRyYWNrZWRWYWx1ZXNdO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hpcCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuY2hpcC52YWx1ZTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpID8gWy4uLnZhbF0gOiBbXTtcbiAgfVxufVxuIl19
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1jaGlwLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvZWRpdG9ycy9uaWxlLWNoaXAtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBc0ZILElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFNBQVMsZ0JBQWdCO0lBQ3ZCLElBQUksa0JBQWtCO1FBQUUsT0FBTztJQUMvQixrQkFBa0IsR0FBRyxJQUFJLENBQUM7SUFFMUIsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUM7SUFDMUMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qm5CLENBQUM7SUFDRixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sY0FBYztJQVV6QixZQUE2QixPQUErQjtRQUEvQixZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQVQ1RCwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFLdkIsbUJBQWMsR0FBOEYsRUFBRSxDQUFDO1FBQy9HLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBQzdCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztJQUU2QixDQUFDO0lBRWhFLElBQUksQ0FBQyxPQUFvQztRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDNUQsT0FBTztT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RUFBRSxDQUFDO1NBQUU7UUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFO0lBQ3BELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEN1c3RvbSBlZGl0b3IgdXNpbmcgTmlsZUNoaXAgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFJlbmRlcnMgdGhlIGNoaXAgaW5wdXQgaW4gYSBmbG9hdGluZyBwb3BvdmVyIGJlbG93IHRoZSBjZWxsIHRvIGF2b2lkIHJvdyBoZWlnaHQgbWlzbWF0Y2guXG4gKlxuICogQHNlZSBodHRwczovL25pbGUuYXF1ZXJhbGFicy5jb20vMS42LjMvY2hpcD90aGVtZT1lbnRlcnByaXNlXG4gKi9cblxuaW1wb3J0IHsgQ2VsbEVkaXRvciwgQ2VsbEVkaXRvckNvbnRleHQgfSBmcm9tICcuLi9tb2RlbHMvY2VsbC1zdHJhdGVnaWVzLmludGVyZmFjZSc7XG5cbi8qKlxuICogQ2hpcCBvcHRpb24gZm9yIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENoaXBPcHRpb24ge1xuICAvKiogVGhlIG9wdGlvbidzIHZhbHVlICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciB0aGUgb3B0aW9uIChkZWZhdWx0cyB0byB2YWx1ZSBpZiBvbWl0dGVkKSAqL1xuICBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGludGVyZmFjZSBmb3IgTmlsZUNoaXBFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOaWxlQ2hpcEVkaXRvck9wdGlvbnMge1xuICAvKiogQXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb24gbGlzdCAoZnVsbCBzZXQpICovXG4gIGF1dG9Db21wbGV0ZU9wdGlvbnM/OiBDaGlwT3B0aW9uW10gfCBzdHJpbmdbXTtcblxuICAvKiogUGxhY2Vob2xkZXIgdGV4dCBzaG93biBpbnNpZGUgdGhlIGlucHV0IGFyZWEgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqIEFsbG93IHVzZXJzIHRvIHR5cGUgY3VzdG9tIHZhbHVlcyBub3QgcHJlc2VudCBpbiB0aGUgc3VnZ2VzdGlvbiBsaXN0ICovXG4gIGFjY2VwdFVzZXJJbnB1dD86IGJvb2xlYW47XG5cbiAgLyoqIFByZXZlbnQgZHVwbGljYXRlIGNoaXAgdmFsdWVzICovXG4gIG5vRHVwbGljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqIERpc2FibGUgdGhlIGNoaXAgaW5wdXQgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKiBNYWtlIHRoZSBjaGlwIGlucHV0IHJlYWRvbmx5ICovXG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcblxuICAvKiogU2hvdyBhIGNsZWFyLWFsbCBidXR0b24gKi9cbiAgY2xlYXJhYmxlPzogYm9vbGVhbjtcblxuICAvKiogUHJldmVudCBjaGlwIHRhZ3MgZnJvbSB3cmFwcGluZyB0byBtdWx0aXBsZSBsaW5lcyAqL1xuICBub1dyYXA/OiBib29sZWFuO1xuXG4gIC8qKiBSZW1vdmUgdGhlIGF1dG9jb21wbGV0ZSBkcm9wZG93biBlbnRpcmVseSAqL1xuICBub0F1dG9Db21wbGV0ZT86IGJvb2xlYW47XG5cbiAgLyoqIEVuYWJsZSB2aXJ0dWFsIHNjcm9sbGluZyBpbiB0aGUgc3VnZ2VzdGlvbiBkcm9wZG93biAqL1xuICBlbmFibGVWaXJ0dWFsU2Nyb2xsPzogYm9vbGVhbjtcblxuICAvKiogQ29udHJvbCB3aGV0aGVyIHRoZSBkcm9wZG93biBvcGVucyBvbiBmb2N1cyDigJQgJ3RydWUnIHwgJ2ZhbHNlJyB8ICdhbHdheXMnICovXG4gIG9wZW5Ecm9wZG93bk9uRm9jdXM/OiBzdHJpbmc7XG5cbiAgLyoqIFNob3cgbG9hZGluZyBzcGlubmVyIGluc2lkZSB0aGUgZHJvcGRvd24gKi9cbiAgbG9hZGluZz86IGJvb2xlYW47XG5cbiAgLy8gVmlzdWFsIHN0YXRlc1xuICAvKiogV2FybmluZyBzdGF0ZSBzdHlsaW5nICovXG4gIHdhcm5pbmc/OiBib29sZWFuO1xuICAvKiogRXJyb3Igc3RhdGUgc3R5bGluZyAqL1xuICBlcnJvcj86IGJvb2xlYW47XG4gIC8qKiBTdWNjZXNzIHN0YXRlIHN0eWxpbmcgKi9cbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBtZXNzYWdlIHNob3duIGJlbG93IHRoZSBpbnB1dCAqL1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKiBIZWxwIHRleHQgc2hvd24gYmVsb3cgdGhlIGlucHV0ICovXG4gIGhlbHBUZXh0Pzogc3RyaW5nO1xuICAvKiogTGFiZWwgdGV4dCBmb3IgdGhlIGNoaXAgaW5wdXQgKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBJbmRleGVzIG9mIGNoaXBzIHRvIGhpZ2hsaWdodCBhcyBlcnJvcnMgKi9cbiAgZXJyb3JJbmRleGVzPzogbnVtYmVyW107XG5cbiAgLyoqIEN1c3RvbSBmaWx0ZXIgZnVuY3Rpb24gZm9yIGF1dG9jb21wbGV0ZSAqL1xuICBmaWx0ZXJGdW5jdGlvbj86IChxdWVyeTogc3RyaW5nLCBvcHRpb246IHN0cmluZykgPT4gYm9vbGVhbjtcblxuICAvKiogQ3VzdG9tIHJlbmRlciBmdW5jdGlvbiBmb3IgZHJvcGRvd24gaXRlbXMgKi9cbiAgcmVuZGVySXRlbUZ1bmN0aW9uPzogKG9wdGlvbjogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbiAgLyoqIEF1dG8tZm9jdXMgdGhlIGlucHV0IHdoZW4gZWRpdG9yIG9wZW5zIChkZWZhdWx0OiB0cnVlKSAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuXG4gIC8qKiBNaW5pbXVtIHdpZHRoIG9mIHRoZSBwb3BvdmVyIGluIHB4IChkZWZhdWx0OiB3aWR0aCBvZiB0aGUgY2VsbCkgKi9cbiAgcG9wb3Zlck1pbldpZHRoPzogbnVtYmVyO1xuXG4gIC8qKiBNYXhpbXVtIGhlaWdodCBvZiB0aGUgcG9wb3ZlciBpbiBweCBiZWZvcmUgaXQgc2Nyb2xscyAoZGVmYXVsdDogMjAwKSAqL1xuICBwb3BvdmVyTWF4SGVpZ2h0PzogbnVtYmVyO1xufVxuXG5sZXQgY2hpcFN0eWxlc0luamVjdGVkID0gZmFsc2U7XG5mdW5jdGlvbiBpbmplY3RDaGlwU3R5bGVzKCk6IHZvaWQge1xuICBpZiAoY2hpcFN0eWxlc0luamVjdGVkKSByZXR1cm47XG4gIGNoaXBTdHlsZXNJbmplY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgc3R5bGVJZCA9ICduaWxlLWNoaXAtZWRpdG9yLXN0eWxlcyc7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzdHlsZUlkKSkgcmV0dXJuO1xuXG4gIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUuaWQgPSBzdHlsZUlkO1xuICBzdHlsZS50ZXh0Q29udGVudCA9IGBcbiAgICAuc3QtY2hpcC1wb3BvdmVyIHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHotaW5kZXg6IDEwMDAwO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tbmlsZS1jb2xvcnMtd2hpdGUtYmFzZSwgI2ZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1uaWxlLWNvbG9ycy1uZXV0cmFsLTIwMCwgI2UyZThmMCk7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gICAgICBwYWRkaW5nOiA4cHg7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgbWF4LWhlaWdodDogMjAwcHg7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIH1cbiAgICAuc3QtY2hpcC1wb3BvdmVyIG5pbGUtY2hpcCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgLnN0LWNoaXAtcG9wb3ZlciBuaWxlLWNoaXA6OnBhcnQoYmFzZSkge1xuICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICBtaW4taGVpZ2h0OiAzMnB4O1xuICAgIH1cbiAgICAuc3QtY2hpcC1wb3BvdmVyIG5pbGUtY2hpcDo6cGFydChpbnB1dCkge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1uaWxlLWZvbnQtc2l6ZS1zbWFsbCwgMTNweCk7XG4gICAgfVxuICBgO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cblxuLyoqXG4gKiBDdXN0b20gZWRpdG9yIHRoYXQgdXNlcyBOaWxlQ2hpcCAodGFnIGlucHV0KSBjb21wb25lbnQuXG4gKiBSZW5kZXJzIGluIGEgZmxvYXRpbmcgcG9wb3ZlciBiZWxvdyB0aGUgY2VsbCB0byBhdm9pZCBleHBhbmRpbmcgcm93IGhlaWdodC5cbiAqXG4gKiBDZWxsIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIGBzdHJpbmdbXWAgKGFycmF5IG9mIHRhZyBzdHJpbmdzKS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5pbGVDaGlwRWRpdG9yIGltcGxlbWVudHMgQ2VsbEVkaXRvcjxzdHJpbmdbXT4ge1xuICBhY2NlcHRzSW5pdGlhbEtleXByZXNzID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjaGlwPzogYW55O1xuICBwcml2YXRlIHBvcG92ZXI/OiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBjZWxsQ29udGFpbmVyPzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IEFycmF5PHsgZWxlbWVudDogRXZlbnRUYXJnZXQ7IGV2ZW50OiBzdHJpbmc7IGhhbmRsZXI6IEV2ZW50TGlzdGVuZXI7IGNhcHR1cmU/OiBib29sZWFuIH0+ID0gW107XG4gIHByaXZhdGUgdHJhY2tlZFZhbHVlczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBoYXNDaGFuZ2VPY2N1cnJlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9ucz86IE5pbGVDaGlwRWRpdG9yT3B0aW9ucykge31cblxuICBlZGl0KGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PHN0cmluZ1tdPik6IHZvaWQge1xuICAgIGlmICghY29udGV4dC5jb250YWluZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybignTmlsZUNoaXBFZGl0b3IgcmVxdWlyZXMgYSBjb250YWluZXIgZWxlbWVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGluamVjdENoaXBTdHlsZXMoKTtcblxuICAgIHRoaXMuY2VsbENvbnRhaW5lciA9IGNvbnRleHQuY29udGFpbmVyO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBmbG9hdGluZyBwb3BvdmVyXG4gICAgdGhpcy5wb3BvdmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5wb3BvdmVyLmNsYXNzTmFtZSA9ICdzdC1jaGlwLXBvcG92ZXInO1xuXG4gICAgLy8gQ3JlYXRlIG5pbGUtY2hpcCBpbnNpZGUgdGhlIHBvcG92ZXJcbiAgICB0aGlzLmNoaXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduaWxlLWNoaXAnKTtcbiAgICB0aGlzLmNoaXAuY2xhc3NOYW1lID0gJ3N0LWNlbGwtZWRpdG9yIHN0LW5pbGUtY2hpcC1lZGl0b3InO1xuXG4gICAgdGhpcy5zZXRJbml0aWFsVmFsdWUoY29udGV4dC52YWx1ZSk7XG4gICAgdGhpcy5hcHBseU9wdGlvbnMoKTtcbiAgICB0aGlzLnBvcG92ZXIuYXBwZW5kQ2hpbGQodGhpcy5jaGlwKTtcblxuICAgIC8vIEFwcGx5IGN1c3RvbSBtYXgtaGVpZ2h0IGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ucG9wb3Zlck1heEhlaWdodCkge1xuICAgICAgdGhpcy5wb3BvdmVyLnN0eWxlLm1heEhlaWdodCA9IGAke3RoaXMub3B0aW9ucy5wb3BvdmVyTWF4SGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICAvLyBBcHBlbmQgcG9wb3ZlciB0byBib2R5IGFuZCBwb3NpdGlvbiBpdFxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wb3BvdmVyKTtcbiAgICB0aGlzLnBvc2l0aW9uUG9wb3ZlcigpO1xuXG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYXV0b0ZvY3VzICE9PSBmYWxzZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRyeSB7IHRoaXMuY2hpcD8uZm9jdXMoKTsgfSBjYXRjaCB7IC8qIGlnbm9yZSAqLyB9XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uUG9wb3ZlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucG9wb3ZlciB8fCAhdGhpcy5jZWxsQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCByZWN0ID0gdGhpcy5jZWxsQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG1pbldpZHRoID0gdGhpcy5vcHRpb25zPy5wb3BvdmVyTWluV2lkdGggPz8gcmVjdC53aWR0aDtcbiAgICBjb25zdCBwb3BvdmVyV2lkdGggPSBNYXRoLm1heChtaW5XaWR0aCwgcmVjdC53aWR0aCk7XG5cbiAgICB0aGlzLnBvcG92ZXIuc3R5bGUudG9wID0gYCR7cmVjdC5ib3R0b20gKyAyfXB4YDtcbiAgICB0aGlzLnBvcG92ZXIuc3R5bGUubGVmdCA9IGAke3JlY3QubGVmdH1weGA7XG4gICAgdGhpcy5wb3BvdmVyLnN0eWxlLndpZHRoID0gYCR7cG9wb3ZlcldpZHRofXB4YDtcblxuICAgIC8vIEFmdGVyIHJlbmRlcmluZywgY2hlY2sgaWYgaXQgZ29lcyBvZmYtc2NyZWVuIGJvdHRvbSBhbmQgZmxpcCBhYm92ZSBpZiBuZWVkZWRcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnBvcG92ZXIpIHJldHVybjtcbiAgICAgIGNvbnN0IHBvcFJlY3QgPSB0aGlzLnBvcG92ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAocG9wUmVjdC5ib3R0b20gPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyLnN0eWxlLnRvcCA9IGAke3JlY3QudG9wIC0gcG9wUmVjdC5oZWlnaHQgLSAyfXB4YDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbFZhbHVlKHZhbHVlOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jaGlwKSByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbLi4udmFsdWVdO1xuICAgICAgdGhpcy5jaGlwLnZhbHVlID0gdGhpcy50cmFja2VkVmFsdWVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSkge1xuICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gW3ZhbHVlXTtcbiAgICAgIHRoaXMuY2hpcC52YWx1ZSA9IHRoaXMudHJhY2tlZFZhbHVlcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gW107XG4gICAgICB0aGlzLmNoaXAudmFsdWUgPSBbXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5T3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2hpcCB8fCAhdGhpcy5vcHRpb25zKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLmNoaXAucGxhY2Vob2xkZXIgPSB0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCkge1xuICAgICAgdGhpcy5jaGlwLmxhYmVsID0gdGhpcy5vcHRpb25zLmxhYmVsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGVscFRleHQpIHtcbiAgICAgIHRoaXMuY2hpcC5oZWxwVGV4dCA9IHRoaXMub3B0aW9ucy5oZWxwVGV4dDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hpcC5kaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlYWRvbmx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hpcC5yZWFkb25seSA9IHRoaXMub3B0aW9ucy5yZWFkb25seTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmFjY2VwdFVzZXJJbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaXAuYWNjZXB0VXNlcklucHV0ID0gdGhpcy5vcHRpb25zLmFjY2VwdFVzZXJJbnB1dDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm5vRHVwbGljYXRlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaXAubm9EdXBsaWNhdGVzID0gdGhpcy5vcHRpb25zLm5vRHVwbGljYXRlcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNsZWFyYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaXAuY2xlYXJhYmxlID0gdGhpcy5vcHRpb25zLmNsZWFyYWJsZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm5vV3JhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaXAubm9XcmFwID0gdGhpcy5vcHRpb25zLm5vV3JhcDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm5vQXV0b0NvbXBsZXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hpcC5ub0F1dG9Db21wbGV0ZSA9IHRoaXMub3B0aW9ucy5ub0F1dG9Db21wbGV0ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGlwLmVuYWJsZVZpcnR1YWxTY3JvbGwgPSB0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm9wZW5Ecm9wZG93bk9uRm9jdXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGlwLm9wZW5Ecm9wZG93bk9uRm9jdXMgPSB0aGlzLm9wdGlvbnMub3BlbkRyb3Bkb3duT25Gb2N1cztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmxvYWRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGlwLmxvYWRpbmcgPSB0aGlzLm9wdGlvbnMubG9hZGluZztcbiAgICB9XG5cbiAgICAvLyBWaXN1YWwgc3RhdGVzXG4gICAgaWYgKHRoaXMub3B0aW9ucy53YXJuaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hpcC53YXJuaW5nID0gdGhpcy5vcHRpb25zLndhcm5pbmc7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGlwLmVycm9yID0gdGhpcy5vcHRpb25zLmVycm9yO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnN1Y2Nlc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGlwLnN1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuc3VjY2VzcztcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lcnJvck1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuY2hpcC5lcnJvck1lc3NhZ2UgPSB0aGlzLm9wdGlvbnMuZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9ySW5kZXhlcykge1xuICAgICAgdGhpcy5jaGlwLmVycm9ySW5kZXhlcyA9IHRoaXMub3B0aW9ucy5lcnJvckluZGV4ZXM7XG4gICAgfVxuXG4gICAgLy8gQXV0b2NvbXBsZXRlIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Db21wbGV0ZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnMuYXV0b0NvbXBsZXRlT3B0aW9ucztcbiAgICAgIGNvbnN0IHN0cmluZ09wdHM6IHN0cmluZ1tdID0gb3B0cy5tYXAobyA9PiB0eXBlb2YgbyA9PT0gJ3N0cmluZycgPyBvIDogKG8ubGFiZWwgPz8gby52YWx1ZSkpO1xuICAgICAgdGhpcy5jaGlwLmF1dG9Db21wbGV0ZU9wdGlvbnMgPSBzdHJpbmdPcHRzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyRnVuY3Rpb24pIHtcbiAgICAgIHRoaXMuY2hpcC5maWx0ZXJGdW5jdGlvbiA9IHRoaXMub3B0aW9ucy5maWx0ZXJGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlbmRlckl0ZW1GdW5jdGlvbikge1xuICAgICAgdGhpcy5jaGlwLnJlbmRlckl0ZW1GdW5jdGlvbiA9IHRoaXMub3B0aW9ucy5yZW5kZXJJdGVtRnVuY3Rpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRMaXN0ZW5lcihlbGVtZW50OiBFdmVudFRhcmdldCwgZXZlbnQ6IHN0cmluZywgaGFuZGxlcjogRXZlbnRMaXN0ZW5lciwgY2FwdHVyZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIGNhcHR1cmUpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBjYXB0dXJlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PHN0cmluZ1tdPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jaGlwKSByZXR1cm47XG5cbiAgICAvLyBUcmFjayBjaGlwIGNoYW5nZXNcbiAgICB0aGlzLmFkZExpc3RlbmVyKHRoaXMuY2hpcCwgJ25pbGUtY2hpcC1jaGFuZ2UnLCAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRldGFpbCA9IChlIGFzIEN1c3RvbUV2ZW50KS5kZXRhaWw7XG4gICAgICBjb25zdCBuZXdWYWx1ZTogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KGRldGFpbD8udmFsdWUpID8gWy4uLmRldGFpbC52YWx1ZV0gOiAodGhpcy5jaGlwPy52YWx1ZSA/IFsuLi50aGlzLmNoaXAudmFsdWVdIDogW10pO1xuICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLmhhc0NoYW5nZU9jY3VycmVkID0gdHJ1ZTtcbiAgICAgIGNvbnRleHQub25DaGFuZ2UobmV3VmFsdWUpO1xuICAgIH0pO1xuXG4gICAgLy8gS2V5Ym9hcmQgaGFuZGxpbmcgb24gdGhlIGNoaXAgZWxlbWVudFxuICAgIHRoaXMuYWRkTGlzdGVuZXIodGhpcy5jaGlwLCAna2V5ZG93bicsIChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBlIGFzIEtleWJvYXJkRXZlbnQ7XG4gICAgICBpZiAoa2V5RXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSBlbHNlIGlmIChrZXlFdmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb250ZXh0Lm9uQ2FuY2VsKCk7XG4gICAgICB9IGVsc2UgaWYgKGtleUV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2xpY2stb3V0c2lkZTogc2F2ZSB3aGVuIGNsaWNraW5nIGFueXdoZXJlIG91dHNpZGUgdGhlIHBvcG92ZXJcbiAgICBsZXQgc2F2ZVRyaWdnZXJlZCA9IGZhbHNlO1xuICAgIGNvbnN0IG1vdXNlZG93bkhhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHNhdmVUcmlnZ2VyZWQpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5wb3BvdmVyKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHBhdGggPSBlLmNvbXBvc2VkUGF0aCgpO1xuICAgICAgZm9yIChjb25zdCBlbCBvZiBwYXRoKSB7XG4gICAgICAgIGlmIChlbCA9PT0gdGhpcy5wb3BvdmVyKSByZXR1cm47XG4gICAgICAgIGlmIChlbCA9PT0gdGhpcy5jaGlwKSByZXR1cm47XG4gICAgICAgIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgaWYgKGVsLnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICduaWxlLWNoaXAnKSByZXR1cm47XG4gICAgICAgICAgaWYgKGVsLmNsYXNzTmFtZSAmJiB0eXBlb2YgZWwuY2xhc3NOYW1lID09PSAnc3RyaW5nJyAmJiBlbC5jbGFzc05hbWUuaW5jbHVkZXMoJ25pbGUtY2hpcCcpKSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2F2ZVRyaWdnZXJlZCA9IHRydWU7XG4gICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKTtcbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgbW91c2Vkb3duSGFuZGxlciwgdHJ1ZSk7XG4gICAgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyID0gbW91c2Vkb3duSGFuZGxlcjtcblxuICAgIC8vIFJlcG9zaXRpb24gb24gc2Nyb2xsL3Jlc2l6ZSBzbyBwb3BvdmVyIHN0YXlzIGFsaWduZWQgd2l0aCB0aGUgY2VsbFxuICAgIGNvbnN0IHJlcG9zaXRpb24gPSAoKSA9PiB0aGlzLnBvc2l0aW9uUG9wb3ZlcigpO1xuICAgIHRoaXMuYWRkTGlzdGVuZXIod2luZG93LCAncmVzaXplJywgcmVwb3NpdGlvbik7XG4gICAgdGhpcy5hZGRMaXN0ZW5lcih3aW5kb3csICdzY3JvbGwnLCByZXBvc2l0aW9uLCB0cnVlKTtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gUmVtb3ZlIGRvY3VtZW50IG1vdXNlZG93biBoYW5kbGVyXG4gICAgaWYgKCh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlcikge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyLCB0cnVlKTtcbiAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpLl9kb2N1bWVudE1vdXNlZG93bkhhbmRsZXI7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFsbCB0cmFja2VkIGxpc3RlbmVyc1xuICAgIGZvciAoY29uc3QgeyBlbGVtZW50LCBldmVudCwgaGFuZGxlciwgY2FwdHVyZSB9IG9mIHRoaXMuZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgY2FwdHVyZSk7XG4gICAgfVxuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcblxuICAgIC8vIFJlbW92ZSB0aGUgcG9wb3ZlciBmcm9tIHRoZSBET01cbiAgICBpZiAodGhpcy5wb3BvdmVyKSB7XG4gICAgICB0aGlzLnBvcG92ZXIucmVtb3ZlKCk7XG4gICAgICB0aGlzLnBvcG92ZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2VsbENvbnRhaW5lciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbXTtcbiAgICB0aGlzLmhhc0NoYW5nZU9jY3VycmVkID0gZmFsc2U7XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0cnkgeyB0aGlzLmNoaXA/LmZvY3VzKCk7IH0gY2F0Y2ggeyAvKiBpZ25vcmUgKi8gfVxuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCkge1xuICAgICAgcmV0dXJuIFsuLi50aGlzLnRyYWNrZWRWYWx1ZXNdO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hpcCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuY2hpcC52YWx1ZTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpID8gWy4uLnZhbF0gOiBbXTtcbiAgfVxufVxuIl19
|
|
@@ -135,15 +135,128 @@ export class NileSelectEditor {
|
|
|
135
135
|
// Clear container and append select
|
|
136
136
|
context.container.innerHTML = '';
|
|
137
137
|
context.container.appendChild(this.select);
|
|
138
|
-
// Focus
|
|
138
|
+
// Focus after mount; open dropdown only once nile-popup exists (avoids null this.popup in nile-select)
|
|
139
|
+
const openOnEdit = this.options.openDropdownOnEdit !== false;
|
|
139
140
|
setTimeout(() => {
|
|
141
|
+
void this.activateSelectAfterMount(openOnEdit);
|
|
142
|
+
}, 50);
|
|
143
|
+
}
|
|
144
|
+
async activateSelectAfterMount(openOnEdit) {
|
|
145
|
+
try {
|
|
146
|
+
this.select?.focus();
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// ignore
|
|
150
|
+
}
|
|
151
|
+
if (!openOnEdit || !this.select || this.options.disabled) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
await this.openNileSelectDropdownSafely();
|
|
155
|
+
}
|
|
156
|
+
/** Lit @query('nile-popup') / .select — must exist before handleOpenChange touches this.popup.popup */
|
|
157
|
+
isNileSelectPopupMounted(select) {
|
|
158
|
+
return !!select.shadowRoot?.querySelector('nile-popup');
|
|
159
|
+
}
|
|
160
|
+
async invokeShowHandlingPromise(host) {
|
|
161
|
+
if (typeof host.show !== 'function') {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
const out = host.show();
|
|
166
|
+
if (out != null && typeof out.then === 'function') {
|
|
167
|
+
await out.catch(() => undefined);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// sync throw from show()
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async openNileSelectDropdownSafely() {
|
|
175
|
+
const select = this.select;
|
|
176
|
+
if (!select) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
await customElements.whenDefined('nile-select');
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// ignore
|
|
184
|
+
}
|
|
185
|
+
if (this.options.enableVirtualScroll) {
|
|
140
186
|
try {
|
|
141
|
-
|
|
187
|
+
await customElements.whenDefined('nile-virtual-select');
|
|
142
188
|
}
|
|
143
|
-
catch
|
|
144
|
-
//
|
|
189
|
+
catch {
|
|
190
|
+
// ignore — not registered in all environments
|
|
145
191
|
}
|
|
146
|
-
|
|
192
|
+
// Same idea as nile-popup: inner host may not exist until Lit finishes a pass (or several).
|
|
193
|
+
const maxVirtualWaitPasses = 50;
|
|
194
|
+
for (let i = 0; i < maxVirtualWaitPasses; i++) {
|
|
195
|
+
const vs = select.shadowRoot?.querySelector('nile-virtual-select');
|
|
196
|
+
if (vs) {
|
|
197
|
+
await this.invokeShowHandlingPromise(vs);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const lit = select;
|
|
201
|
+
if (lit.updateComplete?.then) {
|
|
202
|
+
try {
|
|
203
|
+
await lit.updateComplete;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// ignore
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
await new Promise(resolve => requestAnimationFrame(() => resolve()));
|
|
210
|
+
}
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const maxWaitPasses = 50;
|
|
214
|
+
for (let i = 0; i < maxWaitPasses; i++) {
|
|
215
|
+
if (this.isNileSelectPopupMounted(select)) {
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
const lit = select;
|
|
219
|
+
if (lit.updateComplete?.then) {
|
|
220
|
+
try {
|
|
221
|
+
await lit.updateComplete;
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// ignore
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
await new Promise(resolve => requestAnimationFrame(() => resolve()));
|
|
228
|
+
}
|
|
229
|
+
if (!this.isNileSelectPopupMounted(select)) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
const host = select;
|
|
233
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
234
|
+
if (!this.isNileSelectPopupMounted(select)) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
try {
|
|
238
|
+
if (typeof host.show === 'function') {
|
|
239
|
+
await this.invokeShowHandlingPromise(host);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
host.open = true;
|
|
243
|
+
}
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// ignore
|
|
248
|
+
}
|
|
249
|
+
await new Promise(resolve => setTimeout(resolve, 40));
|
|
250
|
+
const lit = select;
|
|
251
|
+
if (lit.updateComplete?.then) {
|
|
252
|
+
try {
|
|
253
|
+
await lit.updateComplete;
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
// ignore
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
147
260
|
}
|
|
148
261
|
/**
|
|
149
262
|
* Set the initial value for the select
|
|
@@ -508,4 +621,4 @@ export class NileSelectEditor {
|
|
|
508
621
|
return (Array.isArray(value) ? (value.length > 0 ? value[0] : '') : (value || ''));
|
|
509
622
|
}
|
|
510
623
|
}
|
|
511
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1zZWxlY3QtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtc2VsZWN0LWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFHSCxPQUFPLEVBQTRCLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RDs7R0FFRztBQUNILElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQ25DLFNBQVMsb0JBQW9CO0lBQzNCLElBQUksc0JBQXNCO1FBQUUsT0FBTztJQUNuQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7SUFFOUIsTUFBTSxPQUFPLEdBQUcsNkJBQTZCLENBQUM7SUFDOUMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkRuQixDQUFDO0lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQW1GRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBVTNCLFlBQTZCLE9BQWdDO1FBQWhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBVDdELDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUd2QixtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFFdEUsbUJBQWMsR0FBOEIsRUFBRSxDQUFDO1FBQy9DLGtCQUFhLEdBQWEsRUFBRSxDQUFDLENBQUUsMkNBQTJDO1FBQzFFLHNCQUFpQixHQUFHLEtB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QUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQWlCLENBQUM7SUFDckcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVTZWxlY3QgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFRoaXMgZGVtb25zdHJhdGVzIGhvdyB0byBjcmVhdGUgZHJvcGRvd24vc2VsZWN0IGVkaXRvcnMgZm9yIG5neC1zbWFydC10YWJsZVxuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbmplY3QgZ2xvYmFsIHN0eWxlcyBmb3IgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGxpbWl0XG4gKi9cbmxldCBkcm9wZG93blN0eWxlc0luamVjdGVkID0gZmFsc2U7XG5mdW5jdGlvbiBpbmplY3REcm9wZG93blN0eWxlcygpOiB2b2lkIHtcbiAgaWYgKGRyb3Bkb3duU3R5bGVzSW5qZWN0ZWQpIHJldHVybjtcbiAgZHJvcGRvd25TdHlsZXNJbmplY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgc3R5bGVJZCA9ICduaWxlLXNlbGVjdC1kcm9wZG93bi1zdHlsZXMnO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHJldHVybjtcblxuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLmlkID0gc3R5bGVJZDtcbiAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgLyogTGltaXQgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGFuZCBlbmFibGUgc2Nyb2xsaW5nICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQge1xuICAgICAgbWF4LWhlaWdodDogMzAwcHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fbGlzdGJveCB7XG4gICAgICBtaW4td2lkdGg6IDIyMHB4ICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtaGVpZ2h0OiAyNjBweCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fZm9vdGVyIHtcbiAgICAgIGhlaWdodDogMzVweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBQcmV2ZW50IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gLSB0YXJnZXQgdGhlIG9wdGlvbnMgY29udGFpbmVyICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fb3B0aW9ucyB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbiB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIG5pbGUtb3B0aW9uOjpwYXJ0KGJhc2UpIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXAgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLyogRml4IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gYnkgY2hhbmdpbmcgZmxleCBkaXJlY3Rpb24gKi9cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbjo6cGFydChvcHRpb25fbGFiZWxfY29udGFpbmVyKSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIENvbWJvYm94IHN0eWxpbmcgdXNpbmcgOjpwYXJ0KCkgc2VsZWN0b3IgKi9cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjhweDtcbiAgICB9XG4gICAgbmlsZS1zZWxlY3Quc3QtY2VsbC1lZGl0b3I6OnBhcnQoY29tYm9ib3gpOmhvdmVyIHtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjhweDtcbiAgICB9XG4gICAgLyogVGFnIHNwYWNpbmcgKi9cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydCh0YWcpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMHB4O1xuICAgICAgcGFkZGluZzogMXB4IDJweDtcbiAgICB9XG4gICAgLnN0LWNlbGwtZWRpdG9yOjpwYXJ0KHRhZykge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgICBwYWRkaW5nOiAxcHggMnB4O1xuICAgIH1cbiAgICAvKiBTZWFyY2ggaW5wdXQgZnVsbCB3aWR0aCAqL1xuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX3NlYXJjaCB7XG4gICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIH1cbiAgYDtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbi8qKlxuICogU2VsZWN0IG9wdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgLyoqIFRoZSBvcHRpb24ncyB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvbiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIE9wdGlvbmFsIHByZWZpeCBpY29uIG9yIGNvbnRlbnQgKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgaW50ZXJmYWNlIGZvciBOaWxlU2VsZWN0RWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMge1xuICAvLyBPcHRpb25zIGNvbmZpZ3VyYXRpb24gKFJFUVVJUkVEKVxuICAvKiogQXJyYXkgb2Ygb3B0aW9ucyAtIHN1cHBvcnRzIHN0YXRpYyBhcnJheXMsIE9ic2VydmFibGUsIG9yIEJlaGF2aW9yU3ViamVjdCBmb3IgcmVhY3RpdmUgdXBkYXRlcyAqL1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdIHwgT2JzZXJ2YWJsZTxTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdPjtcbiAgXG4gIC8vIEJhc2ljIHByb3BlcnRpZXNcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgd2hlbiBubyBzZWxlY3Rpb24gaXMgbWFkZSAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIFNpemUgb2YgdGhlIHNlbGVjdCBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICAvKiogRW5hYmxlIG11bHRpcGxlIHNlbGVjdGlvbiBtb2RlICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgLyoqIEFkZHMgY2xlYXIgYnV0dG9uIHdoZW4gdmFsdWUgaXMgbm90IGVtcHR5ICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIC8qKiBEaXNhYmxlIHRoZSBzZWxlY3QgY29udHJvbCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBNYWtlIHRoZSBzZWxlY3QgcmVxdWlyZWQgKi9cbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHNlYXJjaCBmdW5jdGlvbmFsaXR5ICovXG4gIHNlYXJjaEVuYWJsZWQ/OiBib29sZWFuO1xuICBcbiAgLy8gVmlzdWFsIHN0YXRlc1xuICAvKiogV2FybmluZyBzdGF0ZSBzdHlsaW5nICovXG4gIHdhcm5pbmc/OiBib29sZWFuO1xuICAvKiogRXJyb3Igc3RhdGUgc3R5bGluZyAqL1xuICBlcnJvcj86IGJvb2xlYW47XG4gIC8qKiBTdWNjZXNzIHN0YXRlIHN0eWxpbmcgKi9cbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAvKiogSGVscCB0ZXh0IHRvIGRpc3BsYXkgKi9cbiAgaGVscFRleHQ/OiBzdHJpbmc7XG4gIFxuICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgb3B0aW9ucyB0byBzaG93IGluIG11bHRpcGxlIG1vZGUgKDAgPSBubyBsaW1pdCkgKi9cbiAgbWF4T3B0aW9uc1Zpc2libGU/OiBudW1iZXI7XG4gIC8qKiBEcmF3cyBhIGZpbGxlZCBzZWxlY3Qgc3R5bGUgKi9cbiAgZmlsbGVkPzogYm9vbGVhbjtcbiAgLyoqIFBpbGwtc3R5bGUgd2l0aCByb3VuZGVkIGVkZ2VzICovXG4gIHBpbGw/OiBib29sZWFuO1xuICAvKiogVXNlIGZpeGVkIHBvc2l0aW9uaW5nIHRvIHByZXZlbnQgY2xpcHBpbmcgKi9cbiAgaG9pc3Q/OiBib29sZWFuO1xuICAvKiogUGxhY2VtZW50IG9mIHRoZSBkcm9wZG93biBtZW51ICovXG4gIHBsYWNlbWVudD86ICd0b3AnIHwgJ2JvdHRvbSc7XG4gIFxuICAvLyBWaXJ0dWFsIHNjcm9sbCBmb3IgbGFyZ2UgbGlzdHNcbiAgLyoqIEVuYWJsZSB2aXJ0dWFsIHNjcm9sbGluZyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggbWFueSBvcHRpb25zICovXG4gIGVuYWJsZVZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xuICBcbiAgLy8gU2VhcmNoIGNvbmZpZ3VyYXRpb25cbiAgLyoqIERpc2FibGUgbG9jYWwgc2VhcmNoICh1c2UgZm9yIHNlcnZlci1zaWRlIHNlYXJjaCkgKi9cbiAgZGlzYWJsZUxvY2FsU2VhcmNoPzogYm9vbGVhbjtcbiAgXG4gIC8vIFZhbGlkYXRpb25cbiAgLyoqIFZhbGlkYXRlIGJlZm9yZSBzYXZpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHZhbGlkYXRlT25TYXZlPzogYm9vbGVhbjtcbiAgXG4gIC8vIFBvcnRhbCBvcHRpb25zXG4gIC8qKiBBcHBlbmQgZHJvcGRvd24gdG8gZG9jdW1lbnQgYm9keSBpbnN0ZWFkIG9mIHBhcmVudCAqL1xuICBwb3J0YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlZGl0b3IgdGhhdCB1c2VzIE5pbGVTZWxlY3QgY29tcG9uZW50XG4gKiBAdGVtcGxhdGUgVCBUaGUgdmFsdWUgdHlwZSAoc3RyaW5nIGZvciBzaW5nbGUgc2VsZWN0aW9uLCBzdHJpbmdbXSBmb3IgbXVsdGlwbGUpXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWxlU2VsZWN0RWRpdG9yPFQgPSBzdHJpbmc+IGltcGxlbWVudHMgQ2VsbEVkaXRvcjxUPiB7XG4gIGFjY2VwdHNJbml0aWFsS2V5cHJlc3MgPSBmYWxzZTtcbiAgXG4gIHByaXZhdGUgc2VsZWN0PzogYW55O1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTx7IGV2ZW50OiBzdHJpbmc7IGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIgfT4gPSBbXTtcbiAgcHJpdmF0ZSBvcHRpb25zU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGN1cnJlbnRPcHRpb25zOiAoU2VsZWN0T3B0aW9uIHwgc3RyaW5nKVtdID0gW107XG4gIHByaXZhdGUgdHJhY2tlZFZhbHVlczogc3RyaW5nW10gPSBbXTsgIC8vIFRyYWNrIHNlbGVjdGVkIHZhbHVlcyBmb3IgdmlydHVhbCBzY3JvbGxcbiAgcHJpdmF0ZSBoYXNDaGFuZ2VPY2N1cnJlZCA9IGZhbHNlOyAgICAgLy8gV2hldGhlciBhIG5pbGUtY2hhbmdlIGV2ZW50IGhhcyBmaXJlZFxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMpIHtcbiAgICAvLyBIYW5kbGUgT2JzZXJ2YWJsZSBvcHRpb25zXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShvcHRpb25zLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24gPSBvcHRpb25zLm9wdGlvbnMuc3Vic2NyaWJlKG9wdHMgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0cztcbiAgICAgICAgLy8gSWYgZWRpdG9yIGlzIGFscmVhZHkgYWN0aXZlLCB1cGRhdGUgdGhlIERPTVxuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0YXRpYyBvcHRpb25zXG4gICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0aW9ucy5vcHRpb25zIHx8IFtdO1xuICAgICAgaWYgKHRoaXMuY3VycmVudE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTmlsZVNlbGVjdEVkaXRvcjogb3B0aW9ucyBhcnJheSBpcyBlbXB0eScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVkaXQoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRleHQuY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05pbGVTZWxlY3RFZGl0b3IgcmVxdWlyZXMgYSBjb250YWluZXIgZWxlbWVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluamVjdCBkcm9wZG93biBoZWlnaHQgc3R5bGVzIG9uY2VcbiAgICBpbmplY3REcm9wZG93blN0eWxlcygpO1xuXG4gICAgLy8gQ3JlYXRlIE5pbGVTZWxlY3QgY3VzdG9tIGVsZW1lbnQgdXNpbmcgZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgIHRoaXMuc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1zZWxlY3QnKTtcbiAgICB0aGlzLnNlbGVjdC5jbGFzc05hbWUgPSAnc3QtY2VsbC1lZGl0b3InO1xuICAgIFxuICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZm9yIHByb3BlciBjZWxsIGZpdHRpbmdcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS5oZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5zZWxlY3Quc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIFxuICAgIC8vIFNldCBpbml0aWFsIHZhbHVlXG4gICAgdGhpcy5zZXRJbml0aWFsVmFsdWUoY29udGV4dC52YWx1ZSk7XG5cbiAgICAvLyBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAgdGhpcy5hcHBseU9wdGlvbnMoKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgYXBwZW5kIG9wdGlvbnMgd2l0aCBjdXJyZW50IG9wdGlvbnNcbiAgICB0aGlzLmNyZWF0ZUFuZEFwcGVuZE9wdGlvbnModGhpcy5jdXJyZW50T3B0aW9ucyk7XG5cbiAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQpO1xuXG4gICAgLy8gQ2xlYXIgY29udGFpbmVyIGFuZCBhcHBlbmQgc2VsZWN0XG4gICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgY29udGV4dC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpO1xuXG4gICAgLy8gRm9jdXMgdGhlIHNlbGVjdCBhZnRlciByZW5kZXJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Py5mb2N1cygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZ25vcmUgZXJyb3JzXG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHNlbGVjdFxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG4gICAgdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIHNlbGVjdGlvbiAtIHZhbHVlIHNob3VsZCBiZSBhcnJheVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFsuLi52YWx1ZV07ICAvLyBJbml0aWFsaXplIHRyYWNrZWQgdmFsdWVzXG4gICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gW1N0cmluZyh2YWx1ZSldO1xuICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbU3RyaW5nKHZhbHVlKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHNpbmdsZSBzZWxlY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdmFsdWUgPyBTdHJpbmcodmFsdWUpIDogJyc7XG4gICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSB2YWx1ZSA/IFtTdHJpbmcodmFsdWUpXSA6IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBOaWxlU2VsZWN0IGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIEJhc2ljIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnNlbGVjdC5wbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNpemUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnNpemUgPSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Quc2l6ZSA9ICdzbWFsbCc7IC8vIERlZmF1bHQgZm9yIHRhYmxlIGNlbGxzXG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5zZWxlY3QubXVsdGlwbGUgPSB0aGlzLm9wdGlvbnMubXVsdGlwbGU7XG4gICAgfVxuXG4gICAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5jbGVhcmFibGUgPSB0aGlzLm9wdGlvbnMuY2xlYXJhYmxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnJlcXVpcmVkID0gdGhpcy5vcHRpb25zLnJlcXVpcmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VhcmNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZWxlY3Quc2VhcmNoRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5zZWFyY2hFbmFibGVkO1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXNcbiAgICBpZiAodGhpcy5vcHRpb25zLndhcm5pbmcpIHtcbiAgICAgIHRoaXMuc2VsZWN0Lndhcm5pbmcgPSB0aGlzLm9wdGlvbnMud2FybmluZztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lcnJvciA9IHRoaXMub3B0aW9ucy5lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnN1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuc3VjY2VzcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5zZWxlY3QuZXJyb3JNZXNzYWdlID0gdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhlbHBUZXh0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5oZWxwVGV4dCA9IHRoaXMub3B0aW9ucy5oZWxwVGV4dDtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QubWF4T3B0aW9uc1Zpc2libGUgPSB0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5maWxsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QuZmlsbGVkID0gdGhpcy5vcHRpb25zLmZpbGxlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBpbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBpbGwgPSB0aGlzLm9wdGlvbnMucGlsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhvaXN0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5ob2lzdCA9IHRoaXMub3B0aW9ucy5ob2lzdDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlbWVudCkge1xuICAgICAgdGhpcy5zZWxlY3QucGxhY2VtZW50ID0gdGhpcy5vcHRpb25zLnBsYWNlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmVuYWJsZVZpcnR1YWxTY3JvbGwgPSB0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaCkge1xuICAgICAgdGhpcy5zZWxlY3QuZGlzYWJsZUxvY2FsU2VhcmNoID0gdGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaDtcbiAgICB9XG5cbiAgICAvLyBFbmFibGUgcG9ydGFsIG1vZGUgYnkgZGVmYXVsdCB0byBwcmV2ZW50IGRyb3Bkb3duIGNsaXBwaW5nIGluIHRhYmxlIGNlbGxzXG4gICAgdGhpcy5zZWxlY3QucG9ydGFsID0gdGhpcy5vcHRpb25zLnBvcnRhbCAhPT0gZmFsc2U7XG5cbiAgICAvLyBQcmV2ZW50IHdpZHRoIHN5bmNpbmcgaXNzdWVzIGluIHRhYmxlIGNlbGxzXG4gICAgdGhpcy5zZWxlY3Qubm9XaWR0aFN5bmMgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBvcHRpb25zIGR5bmFtaWNhbGx5IHdoaWxlIGVkaXRvciBpcyBhY3RpdmVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICAvLyBGb3IgdmlydHVhbCBzY3JvbGwgbW9kZSwganVzdCB1cGRhdGUgdGhlIGRhdGEgcHJvcGVydHkgKG5vIERPTSBjaGlsZHJlbiB0byBjbGVhcilcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuY3JlYXRlQW5kQXBwZW5kT3B0aW9ucyh0aGlzLmN1cnJlbnRPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RhbmRhcmQgbW9kZTogY2xlYXIgZXhpc3RpbmcgbmlsZS1vcHRpb24gZWxlbWVudHMgZmlyc3RcbiAgICAgIHdoaWxlICh0aGlzLnNlbGVjdC5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnJlbW92ZUNoaWxkKHRoaXMuc2VsZWN0LmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRPcHRpb25zKHRoaXMuY3VycmVudE9wdGlvbnMpO1xuICAgIH1cbiAgICBcbiAgICAvLyBUcmlnZ2VyIHVwZGF0ZSBvbiB0aGUgd2ViIGNvbXBvbmVudFxuICAgIGlmICh0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBOaWxlT3B0aW9uIGVsZW1lbnRzIGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgc2VsZWN0XG4gICAqIFdoZW4gZW5hYmxlVmlydHVhbFNjcm9sbCBpcyB0cnVlLCB1c2VzIGRhdGEgcHJvcGVydHkgaW5zdGVhZCBvZiBET00gZWxlbWVudHNcbiAgICogQHNlZSBodHRwczovL25pbGUuYXF1ZXJhbGFicy5jb20vc2VsZWN0LXZpcnR1YWw/dGhlbWU9ZW50ZXJwcmlzZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHJlbmRlclxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVBbmRBcHBlbmRPcHRpb25zKG9wdGlvbnM6IChTZWxlY3RPcHRpb24gfCBzdHJpbmcpW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICAvLyBWaXJ0dWFsIHNjcm9sbCBtb2RlOiB1c2UgZGF0YSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIERPTSBlbGVtZW50c1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgY29uc3QgdmlydHVhbERhdGEgPSBvcHRpb25zLm1hcChvcHQgPT4gXG4gICAgICAgIHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnIFxuICAgICAgICAgID8geyB2YWx1ZTogb3B0LCBsYWJlbDogb3B0IH1cbiAgICAgICAgICA6IHsgdmFsdWU6IG9wdC52YWx1ZSwgbGFiZWw6IG9wdC5sYWJlbCwgZGlzYWJsZWQ6IG9wdC5kaXNhYmxlZCB9XG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3QuZGF0YSA9IHZpcnR1YWxEYXRhO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN0YW5kYXJkIG1vZGU6IGNyZWF0ZSBuaWxlLW9wdGlvbiBlbGVtZW50c1xuICAgIG9wdGlvbnMuZm9yRWFjaChvcHQgPT4ge1xuICAgICAgY29uc3QgbmlsZU9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtb3B0aW9uJykgYXMgYW55O1xuXG4gICAgICAvLyBBdXRvLWRldGVjdCBmb3JtYXQ6IHN0cmluZyBvciBTZWxlY3RPcHRpb24gb2JqZWN0XG4gICAgICBpZiAodHlwZW9mIG9wdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmlsZU9wdGlvbi52YWx1ZSA9IG9wdDtcbiAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb3B0KTtcbiAgICAgICAgbmlsZU9wdGlvbi50ZXh0Q29udGVudCA9IG9wdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5pbGVPcHRpb24udmFsdWUgPSBvcHQudmFsdWU7XG4gICAgICAgIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsIG9wdC52YWx1ZSk7XG4gICAgICAgIG5pbGVPcHRpb24udGV4dENvbnRlbnQgPSBvcHQubGFiZWw7XG4gICAgICAgIFxuICAgICAgICBpZiAob3B0LmRpc2FibGVkKSB7XG4gICAgICAgICAgbmlsZU9wdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBwcmVmaXggaWYgcHJvdmlkZWQgKGNvdWxkIGJlIGljb24gbmFtZSBvciBjb250ZW50KVxuICAgICAgICBpZiAob3B0LnByZWZpeCkge1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCdzbG90JywgJ3ByZWZpeCcpO1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uaW5uZXJIVE1MID0gYDxuaWxlLWljb24gbmFtZT1cIiR7b3B0LnByZWZpeH1cIj48L25pbGUtaWNvbj5gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0IS5hcHBlbmRDaGlsZChuaWxlT3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucy52YWxpZGF0ZU9uU2F2ZSAhPT0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUga2V5Ym9hcmQgZXZlbnRzIChrZXlkb3duIGlzIG5vdCByZXBsYWNlZCBieSBjdXN0b20gZXZlbnRzKVxuICAgIGNvbnN0IGtleWRvd25IYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBrZXlFdmVudCA9IGUgYXMgS2V5Ym9hcmRFdmVudDtcbiAgICAgIGlmIChrZXlFdmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb250ZXh0Lm9uQ2FuY2VsKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5ZG93bkhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAna2V5ZG93bicsIGhhbmRsZXI6IGtleWRvd25IYW5kbGVyIH0pO1xuXG4gICAgLy8gVXNlIG5pbGUtY2hhbmdlIGN1c3RvbSBldmVudCBhcyBzYXZlIHRyaWdnZXIgLSBPTkxZIGZvciBzaW5nbGUtc2VsZWN0XG4gICAgLy8gTXVsdGktc2VsZWN0IHNob3VsZCBzdGF5IG9wZW4gdW50aWwgdXNlciBjbGlja3Mgb3V0c2lkZVxuICAgIGlmICghdGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICBjb25zdCBjaGFuZ2VIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsaWRhdGVPblNhdmUgJiYgdGhpcy5zZWxlY3QgJiYgIXRoaXMuc2VsZWN0LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIElnbm9yZSB2YWxpZGF0aW9uIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKGN1c3RvbUV2ZW50LmRldGFpbC52YWx1ZSkpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2hhbmdlJywgY2hhbmdlSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogY2hhbmdlSGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBGb3IgbXVsdGktc2VsZWN0LCB0cmFjayB2YWx1ZSBjaGFuZ2VzIChuZWVkZWQgZm9yIHZpcnR1YWwgc2Nyb2xsIHdoZXJlIHZhbHVlIHByb3BlcnR5IGRvZXNuJ3QgdXBkYXRlKVxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHRyYWNrVmFsdWVIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjdXN0b21FdmVudC5kZXRhaWw/LnZhbHVlO1xuICAgICAgICBpZiAobmV3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlT2NjdXJyZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gWy4uLm5ld1ZhbHVlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gbmV3VmFsdWUgPyBbbmV3VmFsdWVdIDogW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jaGFuZ2UnLCB0cmFja1ZhbHVlSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogdHJhY2tWYWx1ZUhhbmRsZXIgfSk7XG4gICAgfVxuXG4gICAgLy8gVHJhY2sgaWYgc2F2ZSB3YXMgYWxyZWFkeSB0cmlnZ2VyZWQgKHRvIHByZXZlbnQgZG91YmxlIHNhdmUpXG4gICAgbGV0IHNhdmVUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICBcbiAgICAvLyBVc2UgbW91c2Vkb3duIG9uIGRvY3VtZW50IHRvIGRldGVjdCBjbGlja3Mgb3V0c2lkZSB0aGUgc2VsZWN0IGFuZCBwb3J0YWxcbiAgICBjb25zdCBkb2N1bWVudE1vdXNlZG93bkhhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHNhdmVUcmlnZ2VyZWQpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gVXNlIGNvbXBvc2VkUGF0aCB0byB0cmF2ZXJzZSBzaGFkb3cgRE9NIGJvdW5kYXJpZXNcbiAgICAgIGNvbnN0IHBhdGggPSBlLmNvbXBvc2VkUGF0aCgpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBjbGljayBpcyBpbnNpZGUgdGhlIHNlbGVjdCBlbGVtZW50IG9yIGFueSBuaWxlLXNlbGVjdCByZWxhdGVkIGVsZW1lbnRzXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGF0aCkge1xuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSBjb250aW51ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgb3VyIHNlbGVjdCBlbGVtZW50XG4gICAgICAgIGlmIChlbGVtZW50ID09PSB0aGlzLnNlbGVjdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIG5pbGUtc2VsZWN0IHBvcnRhbHMgKHZhcmlvdXMgY2xhc3MgbmFtZXMpXG4gICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ25pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdzZWxlY3RfX2xpc3Rib3gnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdzZWxlY3RfX29wdGlvbnMnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnbmlsZS1vcHRpb24nIHx8XG4gICAgICAgICAgICBlbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICduaWxlLXNlbGVjdCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGZvciBhbnkgZWxlbWVudCB3aXRoIG5pbGUtc2VsZWN0IGluIGl0cyBjbGFzc1xuICAgICAgICBpZiAoZWxlbWVudC5jbGFzc05hbWUgJiYgdHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJyAmJiBcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCduaWxlLXNlbGVjdCcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFsc28gY2hlY2sgcG9ydGFsIGNvbnRhaW5lcnMgZGlyZWN0bHlcbiAgICAgIGNvbnN0IHBvcnRhbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCwgW2NsYXNzKj1cInNlbGVjdF9fbGlzdGJveFwiXScpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3J0YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwb3J0YWxzW2ldLmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENsaWNrIGlzIG91dHNpZGUgLSBzYXZlIGFuZCBleGl0XG4gICAgICBzYXZlVHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHZhbGlkYXRlT25TYXZlICYmIHRoaXMuc2VsZWN0ICYmICF0aGlzLnNlbGVjdC5jaGVja1ZhbGlkaXR5KCkpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIElnbm9yZSB2YWxpZGF0aW9uIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgICB9XG4gICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKTtcbiAgICB9O1xuICAgIFxuICAgIC8vIEFkZCBsaXN0ZW5lciBhZnRlciBhIHNob3J0IGRlbGF5IHRvIGF2b2lkIGNhcHR1cmluZyB0aGUgaW5pdGlhbCBjbGljayB0aGF0IG9wZW5lZCB0aGUgZWRpdG9yXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBkb2N1bWVudE1vdXNlZG93bkhhbmRsZXIsIHRydWUpO1xuICAgIH0sIDUwKTtcbiAgICBcbiAgICAvLyBTdG9yZSBmb3IgY2xlYW51cFxuICAgICh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlciA9IGRvY3VtZW50TW91c2Vkb3duSGFuZGxlcjtcblxuICAgIC8vIEhhbmRsZSBjbGVhciBidXR0b24gaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICBjb25zdCBjbGVhckhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKHRoaXMub3B0aW9ucy5tdWx0aXBsZSA/IFtdIDogJycpKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNsZWFyJywgY2xlYXJIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jbGVhcicsIGhhbmRsZXI6IGNsZWFySGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc2VhcmNoIGZvciBzZXJ2ZXItc2lkZSBzZWFyY2ggc2NlbmFyaW9zXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlTG9jYWxTZWFyY2gpIHtcbiAgICAgIGNvbnN0IHNlYXJjaEhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICAvLyBFbWl0IHNlYXJjaCBxdWVyeSB0aHJvdWdoIG9uQ2hhbmdlIGZvciBleHRlcm5hbCBoYW5kbGluZ1xuICAgICAgICBjb250ZXh0Lm9uQ2hhbmdlKGN1c3RvbUV2ZW50LmRldGFpbCBhcyBUKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLXNlYXJjaCcsIHNlYXJjaEhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLXNlYXJjaCcsIGhhbmRsZXI6IHNlYXJjaEhhbmRsZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHZhbHVlIGJhc2VkIG9uIHNlbGVjdGlvbiBtb2RlXG4gICAqL1xuICBwcml2YXRlIHBhcnNlVmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogVCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgLy8gRW5zdXJlIGFycmF5IGZvciBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICAgICAgfVxuICAgICAgcmV0dXJuICh2YWx1ZSA/IFt2YWx1ZV0gOiBbXSkgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICAvLyBTaW5nbGUgc2VsZWN0aW9uIC0gcmV0dXJuIHN0cmluZ1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuICh2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiAnJykgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBVbnN1YnNjcmliZSBmcm9tIG9wdGlvbnMgT2JzZXJ2YWJsZVxuICAgIGlmICh0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBcbiAgICAvLyBSZW1vdmUgZG9jdW1lbnQgbW91c2Vkb3duIGhhbmRsZXIgaWYgZXhpc3RzXG4gICAgaWYgKCh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlcikge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyLCB0cnVlKTtcbiAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpLl9kb2N1bWVudE1vdXNlZG93bkhhbmRsZXI7XG4gICAgfVxuICAgIFxuICAgIC8vIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzXG4gICAgaWYgKHRoaXMuc2VsZWN0KSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGhhbmRsZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgICAgIFxuICAgICAgdGhpcy5zZWxlY3QucmVtb3ZlKCk7XG4gICAgICB0aGlzLnNlbGVjdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3Q/LmZvY3VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWdub3JlIGZvY3VzIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHtcbiAgICAgIHJldHVybiAodGhpcy5vcHRpb25zLm11bHRpcGxlID8gW10gOiAnJykgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBJZiBhIGNoYW5nZSBldmVudCBmaXJlZCwgYWx3YXlzIHVzZSB0cmFja2VkVmFsdWVzIChldmVuIGlmIGVtcHR5ID0gYWxsIHVuY2hlY2tlZCkuXG4gICAgICAvLyBPbmx5IGZhbGwgYmFjayB0byB0aGUgY29tcG9uZW50IHZhbHVlIHdoZW4gbm8gY2hhbmdlIGhhcyBvY2N1cnJlZCB5ZXQuXG4gICAgICBsZXQgdmFsdWVzID0gdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA/IHRoaXMudHJhY2tlZFZhbHVlcyA6IHRoaXMuc2VsZWN0LnZhbHVlO1xuICAgICAgXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsICYmIHYgIT09ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlcyA/IFt2YWx1ZXNdIDogW10pIGFzIHVua25vd24gYXMgVDtcbiAgICB9XG4gICAgXG4gICAgbGV0IHZhbHVlID0gdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA/ICh0aGlzLnRyYWNrZWRWYWx1ZXNbMF0gPz8gJycpIDogdGhpcy5zZWxlY3QudmFsdWU7XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHZhbHVlKSA/ICh2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiAnJykgOiAodmFsdWUgfHwgJycpKSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbn1cbiJdfQ==
|
|
624
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1zZWxlY3QtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtc2VsZWN0LWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFHSCxPQUFPLEVBQTRCLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RDs7R0FFRztBQUNILElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQ25DLFNBQVMsb0JBQW9CO0lBQzNCLElBQUksc0JBQXNCO1FBQUUsT0FBTztJQUNuQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7SUFFOUIsTUFBTSxPQUFPLEdBQUcsNkJBQTZCLENBQUM7SUFDOUMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkRuQixDQUFDO0lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQTBGRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBVTNCLFlBQTZCLE9BQWdDO1FBQWhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBVDdELDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUd2QixtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFFdEUsbUJBQWMsR0FBOEIsRUFBRSxDQUFDO1FBQy9DLGtCQUFhLEdBQWEsRUFBRSxDQUFDLENBQUUsMkNBQTJDO1FBQzFFLHNCQUFpQixHQUFHLEtB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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQWlCLENBQUM7SUFDckcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVTZWxlY3QgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFRoaXMgZGVtb25zdHJhdGVzIGhvdyB0byBjcmVhdGUgZHJvcGRvd24vc2VsZWN0IGVkaXRvcnMgZm9yIG5neC1zbWFydC10YWJsZVxuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbmplY3QgZ2xvYmFsIHN0eWxlcyBmb3IgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGxpbWl0XG4gKi9cbmxldCBkcm9wZG93blN0eWxlc0luamVjdGVkID0gZmFsc2U7XG5mdW5jdGlvbiBpbmplY3REcm9wZG93blN0eWxlcygpOiB2b2lkIHtcbiAgaWYgKGRyb3Bkb3duU3R5bGVzSW5qZWN0ZWQpIHJldHVybjtcbiAgZHJvcGRvd25TdHlsZXNJbmplY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgc3R5bGVJZCA9ICduaWxlLXNlbGVjdC1kcm9wZG93bi1zdHlsZXMnO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHJldHVybjtcblxuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLmlkID0gc3R5bGVJZDtcbiAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgLyogTGltaXQgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGFuZCBlbmFibGUgc2Nyb2xsaW5nICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQge1xuICAgICAgbWF4LWhlaWdodDogMzAwcHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fbGlzdGJveCB7XG4gICAgICBtaW4td2lkdGg6IDIyMHB4ICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtaGVpZ2h0OiAyNjBweCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fZm9vdGVyIHtcbiAgICAgIGhlaWdodDogMzVweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBQcmV2ZW50IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gLSB0YXJnZXQgdGhlIG9wdGlvbnMgY29udGFpbmVyICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fb3B0aW9ucyB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbiB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIG5pbGUtb3B0aW9uOjpwYXJ0KGJhc2UpIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXAgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLyogRml4IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gYnkgY2hhbmdpbmcgZmxleCBkaXJlY3Rpb24gKi9cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbjo6cGFydChvcHRpb25fbGFiZWxfY29udGFpbmVyKSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIENvbWJvYm94IHN0eWxpbmcgdXNpbmcgOjpwYXJ0KCkgc2VsZWN0b3IgKi9cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjhweDtcbiAgICB9XG4gICAgbmlsZS1zZWxlY3Quc3QtY2VsbC1lZGl0b3I6OnBhcnQoY29tYm9ib3gpOmhvdmVyIHtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjhweDtcbiAgICB9XG4gICAgLyogVGFnIHNwYWNpbmcgKi9cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydCh0YWcpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMHB4O1xuICAgICAgcGFkZGluZzogMXB4IDJweDtcbiAgICB9XG4gICAgLnN0LWNlbGwtZWRpdG9yOjpwYXJ0KHRhZykge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgICBwYWRkaW5nOiAxcHggMnB4O1xuICAgIH1cbiAgICAvKiBTZWFyY2ggaW5wdXQgZnVsbCB3aWR0aCAqL1xuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX3NlYXJjaCB7XG4gICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIH1cbiAgYDtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbi8qKlxuICogU2VsZWN0IG9wdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgLyoqIFRoZSBvcHRpb24ncyB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvbiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIE9wdGlvbmFsIHByZWZpeCBpY29uIG9yIGNvbnRlbnQgKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgaW50ZXJmYWNlIGZvciBOaWxlU2VsZWN0RWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMge1xuICAvLyBPcHRpb25zIGNvbmZpZ3VyYXRpb24gKFJFUVVJUkVEKVxuICAvKiogQXJyYXkgb2Ygb3B0aW9ucyAtIHN1cHBvcnRzIHN0YXRpYyBhcnJheXMsIE9ic2VydmFibGUsIG9yIEJlaGF2aW9yU3ViamVjdCBmb3IgcmVhY3RpdmUgdXBkYXRlcyAqL1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdIHwgT2JzZXJ2YWJsZTxTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdPjtcbiAgXG4gIC8vIEJhc2ljIHByb3BlcnRpZXNcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgd2hlbiBubyBzZWxlY3Rpb24gaXMgbWFkZSAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIFNpemUgb2YgdGhlIHNlbGVjdCBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICAvKiogRW5hYmxlIG11bHRpcGxlIHNlbGVjdGlvbiBtb2RlICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgLyoqIEFkZHMgY2xlYXIgYnV0dG9uIHdoZW4gdmFsdWUgaXMgbm90IGVtcHR5ICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIC8qKiBEaXNhYmxlIHRoZSBzZWxlY3QgY29udHJvbCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBNYWtlIHRoZSBzZWxlY3QgcmVxdWlyZWQgKi9cbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHNlYXJjaCBmdW5jdGlvbmFsaXR5ICovXG4gIHNlYXJjaEVuYWJsZWQ/OiBib29sZWFuO1xuICBcbiAgLy8gVmlzdWFsIHN0YXRlc1xuICAvKiogV2FybmluZyBzdGF0ZSBzdHlsaW5nICovXG4gIHdhcm5pbmc/OiBib29sZWFuO1xuICAvKiogRXJyb3Igc3RhdGUgc3R5bGluZyAqL1xuICBlcnJvcj86IGJvb2xlYW47XG4gIC8qKiBTdWNjZXNzIHN0YXRlIHN0eWxpbmcgKi9cbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAvKiogSGVscCB0ZXh0IHRvIGRpc3BsYXkgKi9cbiAgaGVscFRleHQ/OiBzdHJpbmc7XG4gIFxuICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgb3B0aW9ucyB0byBzaG93IGluIG11bHRpcGxlIG1vZGUgKDAgPSBubyBsaW1pdCkgKi9cbiAgbWF4T3B0aW9uc1Zpc2libGU/OiBudW1iZXI7XG4gIC8qKiBEcmF3cyBhIGZpbGxlZCBzZWxlY3Qgc3R5bGUgKi9cbiAgZmlsbGVkPzogYm9vbGVhbjtcbiAgLyoqIFBpbGwtc3R5bGUgd2l0aCByb3VuZGVkIGVkZ2VzICovXG4gIHBpbGw/OiBib29sZWFuO1xuICAvKiogVXNlIGZpeGVkIHBvc2l0aW9uaW5nIHRvIHByZXZlbnQgY2xpcHBpbmcgKi9cbiAgaG9pc3Q/OiBib29sZWFuO1xuICAvKiogUGxhY2VtZW50IG9mIHRoZSBkcm9wZG93biBtZW51ICovXG4gIHBsYWNlbWVudD86ICd0b3AnIHwgJ2JvdHRvbSc7XG4gIFxuICAvLyBWaXJ0dWFsIHNjcm9sbCBmb3IgbGFyZ2UgbGlzdHNcbiAgLyoqIEVuYWJsZSB2aXJ0dWFsIHNjcm9sbGluZyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggbWFueSBvcHRpb25zICovXG4gIGVuYWJsZVZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xuICBcbiAgLy8gU2VhcmNoIGNvbmZpZ3VyYXRpb25cbiAgLyoqIERpc2FibGUgbG9jYWwgc2VhcmNoICh1c2UgZm9yIHNlcnZlci1zaWRlIHNlYXJjaCkgKi9cbiAgZGlzYWJsZUxvY2FsU2VhcmNoPzogYm9vbGVhbjtcbiAgXG4gIC8vIFZhbGlkYXRpb25cbiAgLyoqIFZhbGlkYXRlIGJlZm9yZSBzYXZpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHZhbGlkYXRlT25TYXZlPzogYm9vbGVhbjtcbiAgXG4gIC8vIFBvcnRhbCBvcHRpb25zXG4gIC8qKiBBcHBlbmQgZHJvcGRvd24gdG8gZG9jdW1lbnQgYm9keSBpbnN0ZWFkIG9mIHBhcmVudCAqL1xuICBwb3J0YWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBvcGVucyB0aGUgb3B0aW9ucyBsaXN0IGFzIHNvb24gYXMgdGhlIGNlbGwgZW50ZXJzIGVkaXQgbW9kZVxuICAgKiAoZS5nLiBkb3VibGUtY2xpY2spLiBTZXQgdG8gZmFsc2UgdG8ga2VlcCB0aGUgbGlzdCBjbG9zZWQgdW50aWwgdGhlIHVzZXIgb3BlbnMgaXQuXG4gICAqIFdpdGggYGVuYWJsZVZpcnR1YWxTY3JvbGxgLCBvcGVuaW5nIHVzZXMgdGhlIGlubmVyIGBuaWxlLXZpcnR1YWwtc2VsZWN0YCBvbmx5LlxuICAgKi9cbiAgb3BlbkRyb3Bkb3duT25FZGl0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDdXN0b20gZWRpdG9yIHRoYXQgdXNlcyBOaWxlU2VsZWN0IGNvbXBvbmVudFxuICogQHRlbXBsYXRlIFQgVGhlIHZhbHVlIHR5cGUgKHN0cmluZyBmb3Igc2luZ2xlIHNlbGVjdGlvbiwgc3RyaW5nW10gZm9yIG11bHRpcGxlKVxuICovXG5leHBvcnQgY2xhc3MgTmlsZVNlbGVjdEVkaXRvcjxUID0gc3RyaW5nPiBpbXBsZW1lbnRzIENlbGxFZGl0b3I8VD4ge1xuICBhY2NlcHRzSW5pdGlhbEtleXByZXNzID0gZmFsc2U7XG4gIFxuICBwcml2YXRlIHNlbGVjdD86IGFueTtcbiAgcHJpdmF0ZSBldmVudExpc3RlbmVyczogQXJyYXk8eyBldmVudDogc3RyaW5nOyBoYW5kbGVyOiBFdmVudExpc3RlbmVyIH0+ID0gW107XG4gIHByaXZhdGUgb3B0aW9uc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBjdXJyZW50T3B0aW9uczogKFNlbGVjdE9wdGlvbiB8IHN0cmluZylbXSA9IFtdO1xuICBwcml2YXRlIHRyYWNrZWRWYWx1ZXM6IHN0cmluZ1tdID0gW107ICAvLyBUcmFjayBzZWxlY3RlZCB2YWx1ZXMgZm9yIHZpcnR1YWwgc2Nyb2xsXG4gIHByaXZhdGUgaGFzQ2hhbmdlT2NjdXJyZWQgPSBmYWxzZTsgICAgIC8vIFdoZXRoZXIgYSBuaWxlLWNoYW5nZSBldmVudCBoYXMgZmlyZWRcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE5pbGVTZWxlY3RFZGl0b3JPcHRpb25zKSB7XG4gICAgLy8gSGFuZGxlIE9ic2VydmFibGUgb3B0aW9uc1xuICAgIGlmIChpc09ic2VydmFibGUob3B0aW9ucy5vcHRpb25zKSkge1xuICAgICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uID0gb3B0aW9ucy5vcHRpb25zLnN1YnNjcmliZShvcHRzID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50T3B0aW9ucyA9IG9wdHM7XG4gICAgICAgIC8vIElmIGVkaXRvciBpcyBhbHJlYWR5IGFjdGl2ZSwgdXBkYXRlIHRoZSBET01cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGF0aWMgb3B0aW9uc1xuICAgICAgdGhpcy5jdXJyZW50T3B0aW9ucyA9IG9wdGlvbnMub3B0aW9ucyB8fCBbXTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ05pbGVTZWxlY3RFZGl0b3I6IG9wdGlvbnMgYXJyYXkgaXMgZW1wdHknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlZGl0KGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0LmNvbnRhaW5lcikge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlU2VsZWN0RWRpdG9yIHJlcXVpcmVzIGEgY29udGFpbmVyIGVsZW1lbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbmplY3QgZHJvcGRvd24gaGVpZ2h0IHN0eWxlcyBvbmNlXG4gICAgaW5qZWN0RHJvcGRvd25TdHlsZXMoKTtcblxuICAgIC8vIENyZWF0ZSBOaWxlU2VsZWN0IGN1c3RvbSBlbGVtZW50IHVzaW5nIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcbiAgICB0aGlzLnNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtc2VsZWN0Jyk7XG4gICAgdGhpcy5zZWxlY3QuY2xhc3NOYW1lID0gJ3N0LWNlbGwtZWRpdG9yJztcbiAgICBcbiAgICAvLyBBcHBseSBpbmxpbmUgc3R5bGVzIGZvciBwcm9wZXIgY2VsbCBmaXR0aW5nXG4gICAgdGhpcy5zZWxlY3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy5zZWxlY3Quc3R5bGUuaGVpZ2h0ID0gJ2luaGVyaXQnO1xuICAgIHRoaXMuc2VsZWN0LnN0eWxlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICBcbiAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZVxuICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlKGNvbnRleHQudmFsdWUpO1xuXG4gICAgLy8gQXBwbHkgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgIHRoaXMuYXBwbHlPcHRpb25zKCk7XG5cbiAgICAvLyBDcmVhdGUgYW5kIGFwcGVuZCBvcHRpb25zIHdpdGggY3VycmVudCBvcHRpb25zXG4gICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRPcHRpb25zKHRoaXMuY3VycmVudE9wdGlvbnMpO1xuXG4gICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyc1xuICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycyhjb250ZXh0KTtcblxuICAgIC8vIENsZWFyIGNvbnRhaW5lciBhbmQgYXBwZW5kIHNlbGVjdFxuICAgIGNvbnRleHQuY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xuICAgIGNvbnRleHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0KTtcblxuICAgIC8vIEZvY3VzIGFmdGVyIG1vdW50OyBvcGVuIGRyb3Bkb3duIG9ubHkgb25jZSBuaWxlLXBvcHVwIGV4aXN0cyAoYXZvaWRzIG51bGwgdGhpcy5wb3B1cCBpbiBuaWxlLXNlbGVjdClcbiAgICBjb25zdCBvcGVuT25FZGl0ID0gdGhpcy5vcHRpb25zLm9wZW5Ecm9wZG93bk9uRWRpdCAhPT0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2b2lkIHRoaXMuYWN0aXZhdGVTZWxlY3RBZnRlck1vdW50KG9wZW5PbkVkaXQpO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWN0aXZhdGVTZWxlY3RBZnRlck1vdW50KG9wZW5PbkVkaXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3Q/LmZvY3VzKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gICAgaWYgKCFvcGVuT25FZGl0IHx8ICF0aGlzLnNlbGVjdCB8fCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5vcGVuTmlsZVNlbGVjdERyb3Bkb3duU2FmZWx5KCk7XG4gIH1cblxuICAvKiogTGl0IEBxdWVyeSgnbmlsZS1wb3B1cCcpIC8gLnNlbGVjdCDigJQgbXVzdCBleGlzdCBiZWZvcmUgaGFuZGxlT3BlbkNoYW5nZSB0b3VjaGVzIHRoaXMucG9wdXAucG9wdXAgKi9cbiAgcHJpdmF0ZSBpc05pbGVTZWxlY3RQb3B1cE1vdW50ZWQoc2VsZWN0OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXNlbGVjdC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCduaWxlLXBvcHVwJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGludm9rZVNob3dIYW5kbGluZ1Byb21pc2UoaG9zdDogeyBzaG93PzogKCkgPT4gdW5rbm93biB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHR5cGVvZiBob3N0LnNob3cgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dCA9IGhvc3Quc2hvdygpO1xuICAgICAgaWYgKG91dCAhPSBudWxsICYmIHR5cGVvZiAob3V0IGFzIFByb21pc2U8dW5rbm93bj4pLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXdhaXQgKG91dCBhcyBQcm9taXNlPHVua25vd24+KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gc3luYyB0aHJvdyBmcm9tIHNob3coKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb3Blbk5pbGVTZWxlY3REcm9wZG93blNhZmVseSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLnNlbGVjdCBhcyBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXNlbGVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnbmlsZS1zZWxlY3QnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ25pbGUtdmlydHVhbC1zZWxlY3QnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmUg4oCUIG5vdCByZWdpc3RlcmVkIGluIGFsbCBlbnZpcm9ubWVudHNcbiAgICAgIH1cblxuICAgICAgLy8gU2FtZSBpZGVhIGFzIG5pbGUtcG9wdXA6IGlubmVyIGhvc3QgbWF5IG5vdCBleGlzdCB1bnRpbCBMaXQgZmluaXNoZXMgYSBwYXNzIChvciBzZXZlcmFsKS5cbiAgICAgIGNvbnN0IG1heFZpcnR1YWxXYWl0UGFzc2VzID0gNTA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFZpcnR1YWxXYWl0UGFzc2VzOyBpKyspIHtcbiAgICAgICAgY29uc3QgdnMgPSBzZWxlY3Quc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcignbmlsZS12aXJ0dWFsLXNlbGVjdCcpIGFzIHtcbiAgICAgICAgICBzaG93PzogKCkgPT4gdW5rbm93bjtcbiAgICAgICAgfSB8IG51bGw7XG4gICAgICAgIGlmICh2cykge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW52b2tlU2hvd0hhbmRsaW5nUHJvbWlzZSh2cyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpdCA9IHNlbGVjdCBhcyB7IHVwZGF0ZUNvbXBsZXRlPzogUHJvbWlzZTx1bmtub3duPiB9O1xuICAgICAgICBpZiAobGl0LnVwZGF0ZUNvbXBsZXRlPy50aGVuKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGxpdC51cGRhdGVDb21wbGV0ZTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNvbHZlKCkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhXYWl0UGFzc2VzID0gNTA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhXYWl0UGFzc2VzOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmlzTmlsZVNlbGVjdFBvcHVwTW91bnRlZChzZWxlY3QpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29uc3QgbGl0ID0gc2VsZWN0IGFzIHsgdXBkYXRlQ29tcGxldGU/OiBQcm9taXNlPHVua25vd24+IH07XG4gICAgICBpZiAobGl0LnVwZGF0ZUNvbXBsZXRlPy50aGVuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgbGl0LnVwZGF0ZUNvbXBsZXRlO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcmVzb2x2ZSgpKSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzTmlsZVNlbGVjdFBvcHVwTW91bnRlZChzZWxlY3QpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaG9zdCA9IHNlbGVjdCBhcyB7IHNob3c/OiAoKSA9PiB1bmtub3duOyBvcGVuPzogYm9vbGVhbiB9O1xuICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgNTsgYXR0ZW1wdCsrKSB7XG4gICAgICBpZiAoIXRoaXMuaXNOaWxlU2VsZWN0UG9wdXBNb3VudGVkKHNlbGVjdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBob3N0LnNob3cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZVNob3dIYW5kbGluZ1Byb21pc2UoaG9zdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaG9zdC5vcGVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNDApKTtcbiAgICAgIGNvbnN0IGxpdCA9IHNlbGVjdCBhcyB7IHVwZGF0ZUNvbXBsZXRlPzogUHJvbWlzZTx1bmtub3duPiB9O1xuICAgICAgaWYgKGxpdC51cGRhdGVDb21wbGV0ZT8udGhlbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGxpdC51cGRhdGVDb21wbGV0ZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgc2VsZWN0XG4gICAqL1xuICBwcml2YXRlIHNldEluaXRpYWxWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcbiAgICB0aGlzLmhhc0NoYW5nZU9jY3VycmVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgc2VsZWN0aW9uIC0gdmFsdWUgc2hvdWxkIGJlIGFycmF5XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gWy4uLnZhbHVlXTsgIC8vIEluaXRpYWxpemUgdHJhY2tlZCB2YWx1ZXNcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSBbU3RyaW5nKHZhbHVlKV07XG4gICAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFtTdHJpbmcodmFsdWUpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gW107XG4gICAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIYW5kbGUgc2luZ2xlIHNlbGVjdGlvblxuICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSB2YWx1ZSA/IFN0cmluZyh2YWx1ZSkgOiAnJztcbiAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IHZhbHVlID8gW1N0cmluZyh2YWx1ZSldIDogW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIE5pbGVTZWxlY3QgZWxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuXG4gICAgLy8gQmFzaWMgb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2l6ZSkge1xuICAgICAgdGhpcy5zZWxlY3Quc2l6ZSA9IHRoaXMub3B0aW9ucy5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdC5zaXplID0gJ3NtYWxsJzsgLy8gRGVmYXVsdCBmb3IgdGFibGUgY2VsbHNcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5tdWx0aXBsZSA9IHRoaXMub3B0aW9ucy5tdWx0aXBsZTtcbiAgICB9XG5cbiAgICAvLyBCZWhhdmlvciBvcHRpb25zXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbGVhcmFibGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmNsZWFyYWJsZSA9IHRoaXMub3B0aW9ucy5jbGVhcmFibGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zZWxlY3QuZGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZXF1aXJlZCkge1xuICAgICAgdGhpcy5zZWxlY3QucmVxdWlyZWQgPSB0aGlzLm9wdGlvbnMucmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZWFyY2hFbmFibGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdC5zZWFyY2hFbmFibGVkID0gdGhpcy5vcHRpb25zLnNlYXJjaEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgLy8gVmlzdWFsIHN0YXRlc1xuICAgIGlmICh0aGlzLm9wdGlvbnMud2FybmluZykge1xuICAgICAgdGhpcy5zZWxlY3Qud2FybmluZyA9IHRoaXMub3B0aW9ucy53YXJuaW5nO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXJyb3IpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmVycm9yID0gdGhpcy5vcHRpb25zLmVycm9yO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3VjY2Vzcykge1xuICAgICAgdGhpcy5zZWxlY3Quc3VjY2VzcyA9IHRoaXMub3B0aW9ucy5zdWNjZXNzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXJyb3JNZXNzYWdlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lcnJvck1lc3NhZ2UgPSB0aGlzLm9wdGlvbnMuZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGVscFRleHQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmhlbHBUZXh0ID0gdGhpcy5vcHRpb25zLmhlbHBUZXh0O1xuICAgIH1cblxuICAgIC8vIEFkdmFuY2VkIGZlYXR1cmVzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhPcHRpb25zVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdC5tYXhPcHRpb25zVmlzaWJsZSA9IHRoaXMub3B0aW9ucy5tYXhPcHRpb25zVmlzaWJsZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmZpbGxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdC5maWxsZWQgPSB0aGlzLm9wdGlvbnMuZmlsbGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucGlsbCkge1xuICAgICAgdGhpcy5zZWxlY3QucGlsbCA9IHRoaXMub3B0aW9ucy5waWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaG9pc3QpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmhvaXN0ID0gdGhpcy5vcHRpb25zLmhvaXN0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucGxhY2VtZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdC5wbGFjZW1lbnQgPSB0aGlzLm9wdGlvbnMucGxhY2VtZW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgdGhpcy5zZWxlY3QuZW5hYmxlVmlydHVhbFNjcm9sbCA9IHRoaXMub3B0aW9ucy5lbmFibGVWaXJ0dWFsU2Nyb2xsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZUxvY2FsU2VhcmNoKSB7XG4gICAgICB0aGlzLnNlbGVjdC5kaXNhYmxlTG9jYWxTZWFyY2ggPSB0aGlzLm9wdGlvbnMuZGlzYWJsZUxvY2FsU2VhcmNoO1xuICAgIH1cblxuICAgIC8vIEVuYWJsZSBwb3J0YWwgbW9kZSBieSBkZWZhdWx0IHRvIHByZXZlbnQgZHJvcGRvd24gY2xpcHBpbmcgaW4gdGFibGUgY2VsbHNcbiAgICB0aGlzLnNlbGVjdC5wb3J0YWwgPSB0aGlzLm9wdGlvbnMucG9ydGFsICE9PSBmYWxzZTtcblxuICAgIC8vIFByZXZlbnQgd2lkdGggc3luY2luZyBpc3N1ZXMgaW4gdGFibGUgY2VsbHNcbiAgICB0aGlzLnNlbGVjdC5ub1dpZHRoU3luYyA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG9wdGlvbnMgZHluYW1pY2FsbHkgd2hpbGUgZWRpdG9yIGlzIGFjdGl2ZVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIEZvciB2aXJ0dWFsIHNjcm9sbCBtb2RlLCBqdXN0IHVwZGF0ZSB0aGUgZGF0YSBwcm9wZXJ0eSAobm8gRE9NIGNoaWxkcmVuIHRvIGNsZWFyKVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRPcHRpb25zKHRoaXMuY3VycmVudE9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGFuZGFyZCBtb2RlOiBjbGVhciBleGlzdGluZyBuaWxlLW9wdGlvbiBlbGVtZW50cyBmaXJzdFxuICAgICAgd2hpbGUgKHRoaXMuc2VsZWN0LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QucmVtb3ZlQ2hpbGQodGhpcy5zZWxlY3QuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNyZWF0ZUFuZEFwcGVuZE9wdGlvbnModGhpcy5jdXJyZW50T3B0aW9ucyk7XG4gICAgfVxuICAgIFxuICAgIC8vIFRyaWdnZXIgdXBkYXRlIG9uIHRoZSB3ZWIgY29tcG9uZW50XG4gICAgaWYgKHRoaXMuc2VsZWN0LnJlcXVlc3RVcGRhdGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnJlcXVlc3RVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIE5pbGVPcHRpb24gZWxlbWVudHMgYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBzZWxlY3RcbiAgICogV2hlbiBlbmFibGVWaXJ0dWFsU2Nyb2xsIGlzIHRydWUsIHVzZXMgZGF0YSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIERPTSBlbGVtZW50c1xuICAgKiBAc2VlIGh0dHBzOi8vbmlsZS5hcXVlcmFsYWJzLmNvbS9zZWxlY3QtdmlydHVhbD90aGVtZT1lbnRlcnByaXNlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gcmVuZGVyXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFuZEFwcGVuZE9wdGlvbnMob3B0aW9uczogKFNlbGVjdE9wdGlvbiB8IHN0cmluZylbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIFZpcnR1YWwgc2Nyb2xsIG1vZGU6IHVzZSBkYXRhIHByb3BlcnR5IGluc3RlYWQgb2YgRE9NIGVsZW1lbnRzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICBjb25zdCB2aXJ0dWFsRGF0YSA9IG9wdGlvbnMubWFwKG9wdCA9PiBcbiAgICAgICAgdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgXG4gICAgICAgICAgPyB7IHZhbHVlOiBvcHQsIGxhYmVsOiBvcHQgfVxuICAgICAgICAgIDogeyB2YWx1ZTogb3B0LnZhbHVlLCBsYWJlbDogb3B0LmxhYmVsLCBkaXNhYmxlZDogb3B0LmRpc2FibGVkIH1cbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdC5kYXRhID0gdmlydHVhbERhdGE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU3RhbmRhcmQgbW9kZTogY3JlYXRlIG5pbGUtb3B0aW9uIGVsZW1lbnRzXG4gICAgb3B0aW9ucy5mb3JFYWNoKG9wdCA9PiB7XG4gICAgICBjb25zdCBuaWxlT3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1vcHRpb24nKSBhcyBhbnk7XG5cbiAgICAgIC8vIEF1dG8tZGV0ZWN0IGZvcm1hdDogc3RyaW5nIG9yIFNlbGVjdE9wdGlvbiBvYmplY3RcbiAgICAgIGlmICh0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBuaWxlT3B0aW9uLnZhbHVlID0gb3B0O1xuICAgICAgICBuaWxlT3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBvcHQpO1xuICAgICAgICBuaWxlT3B0aW9uLnRleHRDb250ZW50ID0gb3B0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmlsZU9wdGlvbi52YWx1ZSA9IG9wdC52YWx1ZTtcbiAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb3B0LnZhbHVlKTtcbiAgICAgICAgbmlsZU9wdGlvbi50ZXh0Q29udGVudCA9IG9wdC5sYWJlbDtcbiAgICAgICAgXG4gICAgICAgIGlmIChvcHQuZGlzYWJsZWQpIHtcbiAgICAgICAgICBuaWxlT3B0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBuaWxlT3B0aW9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIHByZWZpeCBpZiBwcm92aWRlZCAoY291bGQgYmUgaWNvbiBuYW1lIG9yIGNvbnRlbnQpXG4gICAgICAgIGlmIChvcHQucHJlZml4KSB7XG4gICAgICAgICAgLy8gbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncHJlZml4Jyk7XG4gICAgICAgICAgLy8gbmlsZU9wdGlvbi5pbm5lckhUTUwgPSBgPG5pbGUtaWNvbiBuYW1lPVwiJHtvcHQucHJlZml4fVwiPjwvbmlsZS1pY29uPmA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zZWxlY3QhLmFwcGVuZENoaWxkKG5pbGVPcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCBhbGwgZXZlbnQgbGlzdGVuZXJzIHdpdGggcHJvcGVyIGNsZWFudXAgdHJhY2tpbmdcbiAgICovXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycyhjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIGNvbnN0IHZhbGlkYXRlT25TYXZlID0gdGhpcy5vcHRpb25zLnZhbGlkYXRlT25TYXZlICE9PSBmYWxzZTtcblxuICAgIC8vIEhhbmRsZSBrZXlib2FyZCBldmVudHMgKGtleWRvd24gaXMgbm90IHJlcGxhY2VkIGJ5IGN1c3RvbSBldmVudHMpXG4gICAgY29uc3Qga2V5ZG93bkhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGtleUV2ZW50ID0gZSBhcyBLZXlib2FyZEV2ZW50O1xuICAgICAgaWYgKGtleUV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnRleHQub25DYW5jZWwoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlkb3duSGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICdrZXlkb3duJywgaGFuZGxlcjoga2V5ZG93bkhhbmRsZXIgfSk7XG5cbiAgICAvLyBVc2UgbmlsZS1jaGFuZ2UgY3VzdG9tIGV2ZW50IGFzIHNhdmUgdHJpZ2dlciAtIE9OTFkgZm9yIHNpbmdsZS1zZWxlY3RcbiAgICAvLyBNdWx0aS1zZWxlY3Qgc2hvdWxkIHN0YXkgb3BlbiB1bnRpbCB1c2VyIGNsaWNrcyBvdXRzaWRlXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IGNoYW5nZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWxpZGF0ZU9uU2F2ZSAmJiB0aGlzLnNlbGVjdCAmJiAhdGhpcy5zZWxlY3QuY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gSWdub3JlIHZhbGlkYXRpb24gZXJyb3JzIC0gbmlsZS1zZWxlY3QgaW50ZXJuYWxzIG1heSBub3QgYmUgcmVhZHlcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLnBhcnNlVmFsdWUoY3VzdG9tRXZlbnQuZGV0YWlsLnZhbHVlKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jaGFuZ2UnLCBjaGFuZ2VIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jaGFuZ2UnLCBoYW5kbGVyOiBjaGFuZ2VIYW5kbGVyIH0pO1xuICAgIH1cblxuICAgIC8vIEZvciBtdWx0aS1zZWxlY3QsIHRyYWNrIHZhbHVlIGNoYW5nZXMgKG5lZWRlZCBmb3IgdmlydHVhbCBzY3JvbGwgd2hlcmUgdmFsdWUgcHJvcGVydHkgZG9lc24ndCB1cGRhdGUpXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgY29uc3QgdHJhY2tWYWx1ZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGN1c3RvbUV2ZW50LmRldGFpbD8udmFsdWU7XG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbLi4ubmV3VmFsdWVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBuZXdWYWx1ZSA/IFtuZXdWYWx1ZV0gOiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNoYW5nZScsIHRyYWNrVmFsdWVIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jaGFuZ2UnLCBoYW5kbGVyOiB0cmFja1ZhbHVlSGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBUcmFjayBpZiBzYXZlIHdhcyBhbHJlYWR5IHRyaWdnZXJlZCAodG8gcHJldmVudCBkb3VibGUgc2F2ZSlcbiAgICBsZXQgc2F2ZVRyaWdnZXJlZCA9IGZhbHNlO1xuICAgIFxuICAgIC8vIFVzZSBtb3VzZWRvd24gb24gZG9jdW1lbnQgdG8gZGV0ZWN0IGNsaWNrcyBvdXRzaWRlIHRoZSBzZWxlY3QgYW5kIHBvcnRhbFxuICAgIGNvbnN0IGRvY3VtZW50TW91c2Vkb3duSGFuZGxlciA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoc2F2ZVRyaWdnZXJlZCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuICAgICAgXG4gICAgICAvLyBVc2UgY29tcG9zZWRQYXRoIHRvIHRyYXZlcnNlIHNoYWRvdyBET00gYm91bmRhcmllc1xuICAgICAgY29uc3QgcGF0aCA9IGUuY29tcG9zZWRQYXRoKCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGNsaWNrIGlzIGluc2lkZSB0aGUgc2VsZWN0IGVsZW1lbnQgb3IgYW55IG5pbGUtc2VsZWN0IHJlbGF0ZWQgZWxlbWVudHNcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXRoKSB7XG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIGNvbnRpbnVlO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBvdXIgc2VsZWN0IGVsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IHRoaXMuc2VsZWN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBmb3IgbmlsZS1zZWxlY3QgcG9ydGFscyAodmFyaW91cyBjbGFzcyBuYW1lcylcbiAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygnbmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCcpIHx8XG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ3NlbGVjdF9fbGlzdGJveCcpIHx8XG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ3NlbGVjdF9fb3B0aW9ucycpIHx8XG4gICAgICAgICAgICBlbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICduaWxlLW9wdGlvbicgfHxcbiAgICAgICAgICAgIGVsZW1lbnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ25pbGUtc2VsZWN0Jykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGFueSBlbGVtZW50IHdpdGggbmlsZS1zZWxlY3QgaW4gaXRzIGNsYXNzXG4gICAgICAgIGlmIChlbGVtZW50LmNsYXNzTmFtZSAmJiB0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ25pbGUtc2VsZWN0JykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQWxzbyBjaGVjayBwb3J0YWwgY29udGFpbmVycyBkaXJlY3RseVxuICAgICAgY29uc3QgcG9ydGFscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kLCBbY2xhc3MqPVwic2VsZWN0X19saXN0Ym94XCJdJyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvcnRhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBvcnRhbHNbaV0uY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2xpY2sgaXMgb3V0c2lkZSAtIHNhdmUgYW5kIGV4aXRcbiAgICAgIHNhdmVUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBpZiAodmFsaWRhdGVPblNhdmUgJiYgdGhpcy5zZWxlY3QgJiYgIXRoaXMuc2VsZWN0LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0LnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gSWdub3JlIHZhbGlkYXRpb24gZXJyb3JzIC0gbmlsZS1zZWxlY3QgaW50ZXJuYWxzIG1heSBub3QgYmUgcmVhZHlcbiAgICAgIH1cbiAgICAgIGNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICAgIH07XG4gICAgXG4gICAgLy8gQWRkIGxpc3RlbmVyIGFmdGVyIGEgc2hvcnQgZGVsYXkgdG8gYXZvaWQgY2FwdHVyaW5nIHRoZSBpbml0aWFsIGNsaWNrIHRoYXQgb3BlbmVkIHRoZSBlZGl0b3JcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGRvY3VtZW50TW91c2Vkb3duSGFuZGxlciwgdHJ1ZSk7XG4gICAgfSwgNTApO1xuICAgIFxuICAgIC8vIFN0b3JlIGZvciBjbGVhbnVwXG4gICAgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyID0gZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyO1xuXG4gICAgLy8gSGFuZGxlIGNsZWFyIGJ1dHRvbiBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbGVhcmFibGUpIHtcbiAgICAgIGNvbnN0IGNsZWFySGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLnBhcnNlVmFsdWUodGhpcy5vcHRpb25zLm11bHRpcGxlID8gW10gOiAnJykpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2xlYXInLCBjbGVhckhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWNsZWFyJywgaGFuZGxlcjogY2xlYXJIYW5kbGVyIH0pO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzZWFyY2ggZm9yIHNlcnZlci1zaWRlIHNlYXJjaCBzY2VuYXJpb3NcbiAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IGUgYXMgQ3VzdG9tRXZlbnQ7XG4gICAgICAgIC8vIEVtaXQgc2VhcmNoIHF1ZXJ5IHRocm91Z2ggb25DaGFuZ2UgZm9yIGV4dGVybmFsIGhhbmRsaW5nXG4gICAgICAgIGNvbnRleHQub25DaGFuZ2UoY3VzdG9tRXZlbnQuZGV0YWlsIGFzIFQpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtc2VhcmNoJywgc2VhcmNoSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtc2VhcmNoJywgaGFuZGxlcjogc2VhcmNoSGFuZGxlciB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdmFsdWUgYmFzZWQgb24gc2VsZWN0aW9uIG1vZGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBUIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBFbnN1cmUgYXJyYXkgZm9yIG11bHRpcGxlIHNlbGVjdGlvblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlID8gW3ZhbHVlXSA6IFtdKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIFxuICAgIC8vIFNpbmdsZSBzZWxlY3Rpb24gLSByZXR1cm4gc3RyaW5nXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZVswXSA6ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gb3B0aW9ucyBPYnNlcnZhYmxlXG4gICAgaWYgKHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIFxuICAgIC8vIFJlbW92ZSBkb2N1bWVudCBtb3VzZWRvd24gaGFuZGxlciBpZiBleGlzdHNcbiAgICBpZiAoKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAodGhpcyBhcyBhbnkpLl9kb2N1bWVudE1vdXNlZG93bkhhbmRsZXIsIHRydWUpO1xuICAgICAgZGVsZXRlICh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlcjtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgaGFuZGxlciB9KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0Py5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuICAgICAgXG4gICAgICB0aGlzLnNlbGVjdC5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc2VsZWN0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNlbGVjdD8uZm9jdXMoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZ25vcmUgZm9jdXMgZXJyb3JzIC0gbmlsZS1zZWxlY3QgaW50ZXJuYWxzIG1heSBub3QgYmUgcmVhZHlcbiAgICB9XG4gIH1cblxuICBnZXRDdXJyZW50VmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdCkge1xuICAgICAgcmV0dXJuICh0aGlzLm9wdGlvbnMubXVsdGlwbGUgPyBbXSA6ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIC8vIElmIGEgY2hhbmdlIGV2ZW50IGZpcmVkLCBhbHdheXMgdXNlIHRyYWNrZWRWYWx1ZXMgKGV2ZW4gaWYgZW1wdHkgPSBhbGwgdW5jaGVja2VkKS5cbiAgICAgIC8vIE9ubHkgZmFsbCBiYWNrIHRvIHRoZSBjb21wb25lbnQgdmFsdWUgd2hlbiBubyBjaGFuZ2UgaGFzIG9jY3VycmVkIHlldC5cbiAgICAgIGxldCB2YWx1ZXMgPSB0aGlzLmhhc0NoYW5nZU9jY3VycmVkID8gdGhpcy50cmFja2VkVmFsdWVzIDogdGhpcy5zZWxlY3QudmFsdWU7XG4gICAgICBcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIoKHY6IGFueSkgPT4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwgJiYgdiAhPT0gJycpIGFzIHVua25vd24gYXMgVDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAodmFsdWVzID8gW3ZhbHVlc10gOiBbXSkgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmhhc0NoYW5nZU9jY3VycmVkID8gKHRoaXMudHJhY2tlZFZhbHVlc1swXSA/PyAnJykgOiB0aGlzLnNlbGVjdC52YWx1ZTtcbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gKHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZVswXSA6ICcnKSA6ICh2YWx1ZSB8fCAnJykpIGFzIHVua25vd24gYXMgVDtcbiAgfVxufVxuIl19
|