tango-app-ui-shared 3.3.0-beta.12 → 3.3.0-beta.14
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/esm2022/lib/modules/layout/toolbar/toolbar.component.mjs +2 -2
- package/esm2022/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.mjs +40 -27
- package/fesm2022/tango-app-ui-shared.mjs +40 -27
- package/fesm2022/tango-app-ui-shared.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -198,6 +198,7 @@ export class TrafficHeaderComponent {
|
|
|
198
198
|
delete headerFilters.stores;
|
|
199
199
|
// Update localStorage with the new client selection and empty store data
|
|
200
200
|
localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
|
|
201
|
+
this.getLocations();
|
|
201
202
|
// Fetch new stores based on the new client
|
|
202
203
|
this.getStore();
|
|
203
204
|
// Emit data to the global service
|
|
@@ -287,7 +288,6 @@ export class TrafficHeaderComponent {
|
|
|
287
288
|
const selectedLocations = this.locationLabel = this.filteredLocations
|
|
288
289
|
.filter(location => location.checked)
|
|
289
290
|
.map(location => location.city);
|
|
290
|
-
console.log(this.locationLabel);
|
|
291
291
|
return selectedLocations.length === 0
|
|
292
292
|
? ''
|
|
293
293
|
: selectedLocations.length === 1
|
|
@@ -501,47 +501,60 @@ export class TrafficHeaderComponent {
|
|
|
501
501
|
.filter((group) => group.checked)
|
|
502
502
|
.map((group) => group.groupName);
|
|
503
503
|
if (selectedGroups.length > 0) {
|
|
504
|
-
|
|
504
|
+
// If there are selected groups, fetch the stores based on selected groups
|
|
505
|
+
this.getStore();
|
|
505
506
|
}
|
|
506
507
|
else {
|
|
507
|
-
|
|
508
|
+
// If no groups are selected, clear the stores list
|
|
509
|
+
this.filteredStores = [];
|
|
510
|
+
// Also, update localStorage to reflect the cleared store selection
|
|
511
|
+
this.selectedFilters.stores = [];
|
|
512
|
+
localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
|
|
513
|
+
// Emit data via service
|
|
514
|
+
this.gs.dataRangeValue.next(this.selectedFilters);
|
|
508
515
|
}
|
|
516
|
+
// Clear the search store text when groups are updated
|
|
509
517
|
this.searchStoreText = '';
|
|
510
518
|
}
|
|
511
519
|
Reset() {
|
|
512
|
-
// Clear groups and
|
|
520
|
+
// Clear selected groups, stores, and locations
|
|
513
521
|
this.filteredGroups = [];
|
|
514
522
|
this.filteredStores = [];
|
|
515
|
-
// Reset locations
|
|
516
|
-
|
|
523
|
+
this.filteredLocations = []; // Reset locations as well
|
|
524
|
+
// Clear search input fields
|
|
517
525
|
this.searchLocationText = "";
|
|
518
526
|
this.searchGroupText = "";
|
|
519
527
|
this.searchStoreText = "";
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
528
|
+
// Fetch locations, groups, and stores again
|
|
529
|
+
this.getLocations();
|
|
530
|
+
this.getStore();
|
|
531
|
+
// Reset the filters in selectedFilters
|
|
532
|
+
this.selectedFilters = {
|
|
533
|
+
...this.selectedFilters,
|
|
534
|
+
stores: [],
|
|
535
|
+
group: [],
|
|
536
|
+
location: [] // Clear locations selection
|
|
537
|
+
};
|
|
538
|
+
// Once stores are fetched, mark all as checked
|
|
539
|
+
setTimeout(() => {
|
|
524
540
|
this.filteredStores = this.stores.map(store => ({
|
|
525
541
|
...store,
|
|
526
|
-
checked: true
|
|
542
|
+
checked: true // Mark all stores as checked
|
|
527
543
|
}));
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
this.filteredStores = this.stores.map(store => ({
|
|
544
|
+
// Sync selectedFilters with the updated store state
|
|
545
|
+
this.selectedFilters.stores = this.filteredStores.map(store => ({
|
|
531
546
|
...store,
|
|
532
|
-
checked:
|
|
547
|
+
checked: true
|
|
533
548
|
}));
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
this.gs.dataRangeValue.next(resetFilters);
|
|
544
|
-
this.Opendropdown = false; // Close dropdown if needed
|
|
549
|
+
// Update localStorage with the latest selectedFilters
|
|
550
|
+
localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
|
|
551
|
+
// Emit the reset filters to update other components if needed
|
|
552
|
+
this.gs.dataRangeValue.next(this.selectedFilters);
|
|
553
|
+
// Trigger change detection
|
|
554
|
+
this.cd.detectChanges();
|
|
555
|
+
}, 500); // Adding a slight delay to ensure stores are fetched first
|
|
556
|
+
// Close dropdown after reset if necessary
|
|
557
|
+
this.Opendropdown = false;
|
|
545
558
|
}
|
|
546
559
|
Apply() {
|
|
547
560
|
// Close the dropdown
|
|
@@ -643,4 +656,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
643
656
|
type: HostListener,
|
|
644
657
|
args: ["document:click", ["$event"]]
|
|
645
658
|
}] } });
|
|
646
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhZmZpYy1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXBwLXNoYXJlZC9zcmMvbGliL21vZHVsZXMvbGF5b3V0L3Rvb2xiYXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXBwLXNoYXJlZC9zcmMvbGliL21vZHVsZXMvbGF5b3V0L3Rvb2xiYXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7Ozs7Ozs7O0FBUXpCLE1BQU0sT0FBTyxzQkFBc0I7SUFpQ3ZCO0lBQ0Q7SUFDQztJQWxDVixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsWUFBWSxHQUFHLENBQUMsQ0FBYyxFQUFFLEVBQUU7UUFDaEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0lBQ0YsaUJBQWlCLEdBQVEsRUFBRSxDQUFDO0lBQzVCLGVBQWUsR0FBUTtRQUNyQixNQUFNLEVBQUUsSUFBSTtRQUNaLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLE9BQU8sRUFBRSxFQUFFO1FBQ1gsS0FBSyxFQUFFLElBQUk7UUFDWCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxJQUFJ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YSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjtRQUNELElBQUcsQ0FBQyxjQUFjLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO0lBRUgsQ0FBQzt3R0F4dUJVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLDZIQ2ZuQywyd1RBNE1NOzs0RkQ3TE8sc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQjtpSkEyQzlCLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFvckIxQyxZQUFZO3NCQURYLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgT25Jbml0LFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuaW1wb3J0IFwiZGF5anMvbG9jYWxlL2VuXCI7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZVwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItdHJhZmZpYy1oZWFkZXJcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RyYWZmaWMtaGVhZGVyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi90cmFmZmljLWhlYWRlci5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJhZmZpY0hlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgZGF5anMgPSBkYXlqcztcclxuICBpc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgIGNvbnN0IGlzVmFsaWREYXRlID0gbSA+IHRoaXMuZGF5anMoKTtcclxuICAgIHJldHVybiBpc1ZhbGlkRGF0ZSA/IFwiaW52YWxpZC1kYXRlXCIgOiBmYWxzZTtcclxuICB9O1xyXG4gIHNlbGVjdGVkRGF0ZVJhbmdlOiBhbnkgPSB7fTtcclxuICBzZWxlY3RlZEZpbHRlcnM6IGFueSA9IHtcclxuICAgIGNsaWVudDogbnVsbCxcclxuICAgIGNsaWVudE5hbWU6IG51bGwsXHJcbiAgICBjbGllbnRzOiBbXSxcclxuICAgIHN0b3JlOiBudWxsLFxyXG4gICAgc3RvcmVzOiBbXSxcclxuICAgIGRhdGU6IG51bGwsXHJcbiAgICBncm91cDogW10sXHJcbiAgICBsb2NhdGlvbjogW10sXHJcbiAgfTtcclxuICBPcGVuZHJvcGRvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkcm9wZG93bk9wZW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyAnbG9jYXRpb24nIG9yICdncm91cCdcclxuICBzZWFyY2hMb2NhdGlvblRleHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgc2VhcmNoR3JvdXBUZXh0OiBzdHJpbmcgPSBcIlwiO1xyXG4gIGxvY2F0aW9uczogYW55W10gPSBbXTtcclxuICBmaWx0ZXJlZExvY2F0aW9uczogYW55W10gPSBbXTtcclxuICBncm91cHNEYXRhOiBhbnlbXSA9IFtdO1xyXG4gIGZpbHRlcmVkR3JvdXBzOiBhbnlbXSA9IFtdO1xyXG4gIGZpbHRlcmVkU3RvcmVzOiBhbnlbXSA9IFtdO1xyXG4gIHN0b3JlczphbnlbXSA9IFtdXHJcbiAgc2VhcmNoU3RvcmVUZXh0OnN0cmluZyA9ICcnO1xyXG4gIGNsaWVudExpc3Q6YW55ID0gW11cclxuICBzZWxlY3RlZENsaWVudDphbnlcclxuICBsb2NhdGlvbkxhYmVsOiBhbnlbXT1bXTtcclxuICBncm91cExhYmVsOiBhbnlbXT1bXTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXV0aDogQXV0aFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICkge31cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uQ2xpY2sgKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZighdGFyZ2V0LmNsb3Nlc3QoJy5kcm9wZG93bjEnKSkge1xyXG4gICAgICB0aGlzLk9wZW5kcm9wZG93biA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBjbG9zZURyb3Bkb3duMSgpe1xyXG4gICAgdGhpcy5PcGVuZHJvcGRvd24gPSBmYWxzZTtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VyID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlci1pbmZvJykgYXMgc3RyaW5nKTtcclxuICBcclxuICAgIC8vIEZldGNoIGNsaWVudCBkYXRhIGlmIHRoZSB1c2VyIGlzIG9mIHR5cGUgJ3RhbmdvJ1xyXG4gICAgaWYgKHVzZXIudXNlclR5cGUgPT09ICd0YW5nbycpIHtcclxuICAgICAgdGhpcy5nZXRDbGllbnQoKTtcclxuICAgIH1cclxuICBcclxuICAgIC8vIExvYWQgZmlsdGVycyBmcm9tIGxvY2FsU3RvcmFnZSBpZiB0aGV5IGV4aXN0XHJcbiAgICBjb25zdCBzdG9yZWRGaWx0ZXJzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKTtcclxuICAgIGlmIChzdG9yZWRGaWx0ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGhlYWRlckZpbHRlcnMgPSBKU09OLnBhcnNlKHN0b3JlZEZpbHRlcnMpO1xyXG4gIFxyXG4gICAgICAvLyBJbml0aWFsaXplIHNlbGVjdGVkRmlsdGVycyB3aXRoIGRlZmF1bHRzIG9yIGV4aXN0aW5nIHZhbHVlc1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycyA9IHtcclxuICAgICAgICBjbGllbnQ6IGhlYWRlckZpbHRlcnMuY2xpZW50IHx8IG51bGwsXHJcbiAgICAgICAgY2xpZW50TmFtZTogaGVhZGVyRmlsdGVycy5jbGllbnROYW1lIHx8ICcnLFxyXG4gICAgICAgIGNsaWVudHM6IGhlYWRlckZpbHRlcnMuY2xpZW50cyB8fCBbXSxcclxuICAgICAgICBzdG9yZTogaGVhZGVyRmlsdGVycy5zdG9yZSB8fCBudWxsLFxyXG4gICAgICAgIGRhdGU6IGhlYWRlckZpbHRlcnMuZGF0ZSB8fCB7fSxcclxuICAgICAgICBzdG9yZXM6IGhlYWRlckZpbHRlcnMuc3RvcmVzIHx8IFtdLFxyXG4gICAgICAgIGdyb3VwOiBoZWFkZXJGaWx0ZXJzLmdyb3VwIHx8IFtdLFxyXG4gICAgICAgIGxvY2F0aW9uOiBoZWFkZXJGaWx0ZXJzLmxvY2F0aW9uIHx8IFtdXHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIC8vIFN5bmMgZmlsdGVyZWQgZGF0YSB3aXRoIHN0b3JlZCBzZWxlY3Rpb25zXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSB0aGlzLnN5bmNXaXRoTG9jYWxTdG9yYWdlKGhlYWRlckZpbHRlcnMubG9jYXRpb24pO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gdGhpcy5zeW5jV2l0aExvY2FsU3RvcmFnZShoZWFkZXJGaWx0ZXJzLmdyb3VwKTtcclxuICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IHRoaXMuc3luY1dpdGhMb2NhbFN0b3JhZ2UoaGVhZGVyRmlsdGVycy5zdG9yZXMpO1xyXG4gIFxyXG4gICAgICAvLyBGb3JtYXQgZGF0ZSByYW5nZSBpZiBpdCBleGlzdHNcclxuICAgICAgaWYgKGhlYWRlckZpbHRlcnMuZGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UgPSB7XHJcbiAgICAgICAgICBzdGFydERhdGU6IHRoaXMuZGF5anMoaGVhZGVyRmlsdGVycy5kYXRlLnN0YXJ0RGF0ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdChcIkRELU1NLVlZWVlcIiksXHJcbiAgICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKGhlYWRlckZpbHRlcnMuZGF0ZS5lbmREYXRlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8vIEVtaXQgZGF0YSB2aWEgc2VydmljZSBhbmQgdXBkYXRlIGxvY2FsU3RvcmFnZVxyXG4gICAgICB0aGlzLmVtaXRBbmRTdG9yZUZpbHRlcnMoKTtcclxuICBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEluaXRpYWxpemUgZW1wdHkgc3RhdGVzIGlmIG5vIGhlYWRlciBmaWx0ZXJzIGFyZSBwcmVzZW50IGluIGxvY2FsU3RvcmFnZVxyXG4gICAgICB0aGlzLnJlc2V0RmlsdGVycygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHN5bmNXaXRoTG9jYWxTdG9yYWdlKGl0ZW1zOiBhbnlbXSk6IGFueVtdIHtcclxuICAgIHJldHVybiBpdGVtc1xyXG4gICAgICA/IGl0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgIGNoZWNrZWQ6IGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICA6IFtdO1xyXG4gIH1cclxuICBwcml2YXRlIGVtaXRBbmRTdG9yZUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQodGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykpO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBSZXNldCBzZWxlY3RlZEZpbHRlcnMgYW5kIGFsbCByZWxhdGVkIGFycmF5cyB0byBlbXB0eSBzdGF0ZXNcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2V0RmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzID0ge1xyXG4gICAgICBjbGllbnQ6IG51bGwsXHJcbiAgICAgIGNsaWVudE5hbWU6ICcnLFxyXG4gICAgICBjbGllbnRzOiBbXSxcclxuICAgICAgc3RvcmU6IG51bGwsXHJcbiAgICAgIGRhdGU6IHt9LFxyXG4gICAgICBzdG9yZXM6IFtdLFxyXG4gICAgICBncm91cDogW10sXHJcbiAgICAgIGxvY2F0aW9uOiBbXVxyXG4gICAgfTtcclxuICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVyZWRHcm91cHMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSBbXTtcclxuICB9XHJcbmdldENsaWVudCgpe1xyXG4gIHRoaXMuYXV0aC5nZXRDbGllbnRzKCkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRMaXN0ID0gZS5kYXRhLnJlc3VsdDtcclxuICAgICAgICBjb25zdCBoZWFkZXJGaWx0ZXJzOiBhbnkgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcInt9XCJcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoZWFkZXJGaWx0ZXJzLmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRMaXN0LmZpbmQoKG9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvYmouY2xpZW50SWQgPT09IGhlYWRlckZpbHRlcnMuY2xpZW50KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENsaWVudCA9IG9iajtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSBoZWFkZXJGaWx0ZXJzLmNsaWVudDtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudE5hbWUgPSBoZWFkZXJGaWx0ZXJzLmNsaWVudE5hbWU7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnRzID0gaGVhZGVyRmlsdGVycy5jbGllbnRzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmUgPSBoZWFkZXJGaWx0ZXJzLnN0b3JlO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZGF0ZSA9IGhlYWRlckZpbHRlcnMuZGF0ZTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IGhlYWRlckZpbHRlcnMuc3RvcmVzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZ3JvdXAgPSBoZWFkZXJGaWx0ZXJzLmdyb3VwO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gPSBoZWFkZXJGaWx0ZXJzLmxvY2F0aW9uO1xyXG4gICAgICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2xpZW50ID0gdGhpcy5jbGllbnRMaXN0WzBdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudCA9ICB0aGlzLnNlbGVjdGVkQ2xpZW50LmNsaWVudElkO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudE5hbWUgPSB0aGlzLnNlbGVjdGVkQ2xpZW50LmNsaWVudE5hbWVcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50cyA9IGhlYWRlckZpbHRlcnMuY2xpZW50cztcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmUgPSBoZWFkZXJGaWx0ZXJzLnN0b3JlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5kYXRlID0gaGVhZGVyRmlsdGVycy5kYXRlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPSBoZWFkZXJGaWx0ZXJzLnN0b3JlcztcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZ3JvdXAgPSBoZWFkZXJGaWx0ZXJzLmdyb3VwO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5sb2NhdGlvbiA9IGhlYWRlckZpbHRlcnMubG9jYXRpb247XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICBcImhlYWRlci1maWx0ZXJzXCIsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykgXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQodGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgICAvLyBFbnN1cmUgbG9jYXRpb25zIGFuZCBncm91cHMgYXJlIGxvYWRlZCBiZWZvcmUgZmV0Y2hpbmcgc3RvcmVzXHJcbiB0aGlzLmdldExvY2F0aW9ucygpO1xyXG5cclxuIC8vIEZldGNoIHN0b3JlcyBvbmx5IGFmdGVyIGxvY2F0aW9ucyBhbmQgZ3JvdXBzIGFyZSBzZXRcclxuIHRoaXMuZ2V0U3RvcmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDbGllbnQgPSB0aGlzLmNsaWVudExpc3RbMF07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudCA9ICB0aGlzLnNlbGVjdGVkQ2xpZW50LmNsaWVudElkO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnROYW1lID0gdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnROYW1lXHJcbiAgICAgICAvLyBFbnN1cmUgbG9jYXRpb25zIGFuZCBncm91cHMgYXJlIGxvYWRlZCBiZWZvcmUgZmV0Y2hpbmcgc3RvcmVzXHJcbiB0aGlzLmdldExvY2F0aW9ucygpO1xyXG5cclxuIC8vIEZldGNoIHN0b3JlcyBvbmx5IGFmdGVyIGxvY2F0aW9ucyBhbmQgZ3JvdXBzIGFyZSBzZXRcclxuIHRoaXMuZ2V0U3RvcmUoKTtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgXCJoZWFkZXItZmlsdGVyc1wiLFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKSBcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICB9LFxyXG4gIH0pO1xyXG59XHJcbm9uQ2xpZW50U2VsZWN0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAvLyBVcGRhdGUgdGhlIHNlbGVjdGVkIGNsaWVudFxyXG4gIHRoaXMuc2VsZWN0ZWRDbGllbnQgPSBldmVudDtcclxuXHJcbiAgLy8gQ2xlYXIgdGhlIHByZXZpb3VzIGZpbHRlcmVkIHN0b3JlcyBzaW5jZSB0aGUgY2xpZW50IGhhcyBjaGFuZ2VkXHJcbiAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IFtdO1xyXG4gIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IFtdO1xyXG5cclxuICAvLyBGZXRjaCBoZWFkZXIgZmlsdGVycyBmcm9tIGxvY2FsU3RvcmFnZVxyXG4gIGNvbnN0IGhlYWRlckZpbHRlcnM6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcInt9XCIpO1xyXG4gIFxyXG4gIC8vIFVwZGF0ZSB0aGUgc2VsZWN0ZWQgZmlsdGVycyB3aXRoIHRoZSBuZXcgY2xpZW50XHJcbiAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50ID0gdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnRJZDtcclxuICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnROYW1lID0gdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnROYW1lO1xyXG4gIFxyXG4gIC8vIFJlbW92ZSBvbGQgc3RvcmUgZGF0YSBmcm9tIHRoZSBzZWxlY3RlZEZpbHRlcnMgc2luY2Ugd2UgYXJlIGZldGNoaW5nIG5ldyBzdG9yZXMgZm9yIHRoZSBuZXcgY2xpZW50XHJcbiAgZGVsZXRlIGhlYWRlckZpbHRlcnMuc3RvcmVzO1xyXG4gIFxyXG4gIC8vIFVwZGF0ZSBsb2NhbFN0b3JhZ2Ugd2l0aCB0aGUgbmV3IGNsaWVudCBzZWxlY3Rpb24gYW5kIGVtcHR5IHN0b3JlIGRhdGFcclxuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykpO1xyXG5cclxuICAvLyBGZXRjaCBuZXcgc3RvcmVzIGJhc2VkIG9uIHRoZSBuZXcgY2xpZW50XHJcbiAgdGhpcy5nZXRTdG9yZSgpO1xyXG4gXHJcbiAgXHJcbiAgXHJcbiAgLy8gRW1pdCBkYXRhIHRvIHRoZSBnbG9iYWwgc2VydmljZVxyXG4gIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcblxyXG4gIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB0byByZWZsZWN0IFVJIGNoYW5nZXNcclxuICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxufVxyXG5cclxuXHJcblxyXG4gIHJhbmdlczogYW55ID0ge1xyXG4gICAgVG9kYXk6IFt0aGlzLmRheWpzKCksIHRoaXMuZGF5anMoKV0sXHJcbiAgICBZZXN0ZXJkYXk6IFtcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5c1wiKSxcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5c1wiKSxcclxuICAgIF0sXHJcbiAgICBcIlRoaXMgV2Vla1wiOiBbdGhpcy5kYXlqcygpLnN1YnRyYWN0KDYsIFwiZGF5c1wiKSwgdGhpcy5kYXlqcygpXSxcclxuICAgIFwiTGFzdCBXZWVrXCI6IFtcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDE0LCBcImRheXNcIikuc3RhcnRPZihcImRheXNcIiksXHJcbiAgICAgIHRoaXMuZGF5anMoKS5zdWJ0cmFjdCg4LCBcImRheXNcIikuZW5kT2YoXCJkYXlzXCIpLFxyXG4gICAgXSxcclxuICAgIFwiVGhpcyBNb250aFwiOiBbdGhpcy5kYXlqcygpLnN0YXJ0T2YoXCJtb250aFwiKSwgdGhpcy5kYXlqcygpLmVuZE9mKFwibW9udGhcIildLFxyXG4gICAgXCJMYXN0IE1vbnRoXCI6IFtcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwibW9udGhcIikuc3RhcnRPZihcIm1vbnRoXCIpLFxyXG4gICAgICB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgXCJtb250aFwiKS5lbmRPZihcIm1vbnRoXCIpLFxyXG4gICAgXSxcclxuICB9O1xyXG5cclxuICBvblN0YXJ0RGF0ZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLmlzQ3VzdG9tRGF0ZSA9IChtOiBkYXlqcy5EYXlqcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWREYXRlID1cclxuICAgICAgICAgIG0gPiB0aGlzLmRheWpzKCkgfHwgbSA+IHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlLmFkZCg5MCwgXCJkYXlzXCIpKTtcclxuICAgICAgICByZXR1cm4gaXNWYWxpZERhdGUgPyBcImludmFsaWQtZGF0ZVwiIDogZmFsc2U7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkYXRlY2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCAmJiBldmVudC5zdGFydERhdGUgJiYgZXZlbnQuZW5kRGF0ZSkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSAmJlxyXG4gICAgICAgIHRoaXMuZGF5anMoZXZlbnQuZW5kRGF0ZSkuaXNWYWxpZCgpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlID0gZXZlbnQuc3RhcnREYXRlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSA9IGV2ZW50LmVuZERhdGU7XHJcbiAgICAgICAgdmFyIGRhdGV0aW1lID0ge1xyXG4gICAgICAgICAgc3RhcnREYXRlOiB0aGlzLmRheWpzKGV2ZW50LnN0YXJ0RGF0ZSwgXCJERC1NTS1ZWVlZXCIpLmZvcm1hdChcclxuICAgICAgICAgICAgXCJZWVlZLU1NLUREXCJcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKGV2ZW50LmVuZERhdGUsIFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZGF0ZSA9IGRhdGV0aW1lO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgXCJoZWFkZXItZmlsdGVyc1wiLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpXHJcbiAgICAgICAgKTtcclxuICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgICAgfVxyXG4gICAgfSBcclxuICB9XHJcbiAgb3BlbmRyb3Bkb3duKGU6TW91c2VFdmVudCkge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuT3BlbmRyb3Bkb3duID0gIXRoaXMuT3BlbmRyb3Bkb3duO1xyXG4gIH1cclxuICBnZXRMb2NhdGlvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBoZWFkZXJGaWx0ZXJzOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJ7fVwiKTtcclxuICAgIGxldCBvYmogPXtcclxuICAgICBjbGllbnRJZDogaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgY2l0eTogW10sXHJcbiAgICAgZ3JvdXA6IFtdLFxyXG4gICAgfVxyXG4gICAgdGhpcy5hdXRoLmdldExvY2F0aW9uKG9iaikuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gTWFwIHRoZSBmZXRjaGVkIGxvY2F0aW9ucyB3aXRoIGRlZmF1bHQgdW5jaGVja2VkIHN0YXRlXHJcbiAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSByZXMuZGF0YS5sb2NhdGlvbkRhdGEubWFwKChjaXR5OiBhbnkpID0+ICh7XHJcbiAgICAgICAgICBjaXR5OiBjaXR5LmNpdHksXHJcbiAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICB9KSk7XHJcbiAgXHJcbiAgICAgICAgLy8gU3luYyB0aGUgZmV0Y2hlZCBsb2NhdGlvbnMgd2l0aCBhbnkgc3RvcmVkIGNoZWNrZWQgdmFsdWVzIGluIGxvY2FsU3RvcmFnZVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsdGVycy5sb2NhdGlvbiAmJiBBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxvY2F0aW9uKSkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZExvY2F0aW9ucyA9IHRoaXMubG9jYXRpb25zLm1hcChsb2NhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRMb2NhdGlvbiA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxvY2F0aW9uLmZpbmQoKGxvYzogYW55KSA9PiBsb2MuY2l0eSA9PT0gbG9jYXRpb24uY2l0eSk7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVkTG9jYXRpb24gPyB7IC4uLmxvY2F0aW9uLCBjaGVja2VkOiBtYXRjaGVkTG9jYXRpb24uY2hlY2tlZCB9IDogbG9jYXRpb247XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZExvY2F0aW9ucyA9IHRoaXMubG9jYXRpb25zO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGZldGNoIGxvY2F0aW9uc1wiLCBlcnIpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIGlzQWxsTG9jYXRpb25zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZExvY2F0aW9ucy5ldmVyeShsb2NhdGlvbiA9PiBsb2NhdGlvbi5jaGVja2VkKTtcclxuICB9XHJcbiAgXHJcbiAgc2VsZWN0ZWRMb2NhdGlvbnNMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRMb2NhdGlvbnMgPSB0aGlzLmxvY2F0aW9uTGFiZWwgPSB0aGlzLmZpbHRlcmVkTG9jYXRpb25zXHJcbiAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gbG9jYXRpb24uY2hlY2tlZClcclxuICAgICAgLm1hcChsb2NhdGlvbiA9PiBsb2NhdGlvbi5jaXR5KTtcclxuICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uTGFiZWwpXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRMb2NhdGlvbnMubGVuZ3RoID09PSAwXHJcbiAgICAgID8gJydcclxuICAgICAgOiBzZWxlY3RlZExvY2F0aW9ucy5sZW5ndGggPT09IDFcclxuICAgICAgPyBzZWxlY3RlZExvY2F0aW9uc1swXVxyXG4gICAgICA6IGAke3NlbGVjdGVkTG9jYXRpb25zLmxlbmd0aH0gbG9jYXRpb25zYDtcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZUxvY2F0aW9uKCk6IHZvaWQge1xyXG4gIC8vICAgLy8gVXBkYXRlIGNoZWNrZWQgc3RhdGUgZm9yIGxvY2F0aW9ucyB0byBmYWxzZVxyXG4gIC8vICAgdGhpcy5maWx0ZXJlZExvY2F0aW9ucyA9IHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMubWFwKGxvY2F0aW9uID0+ICh7XHJcbiAgLy8gICAgIC4uLmxvY2F0aW9uLFxyXG4gIC8vICAgICBjaGVja2VkOiBmYWxzZVxyXG4gIC8vICAgfSkpO1xyXG4gIFxyXG4gIC8vICAgLy8gT3B0aW9uYWxseSB1cGRhdGUgbG9jYXRpb25MYWJlbCBpZiBpdCBuZWVkcyB0byByZWZsZWN0IHRoZSBjdXJyZW50IGZpbHRlcmVkIHN0YXRlXHJcbiAgLy8gICB0aGlzLmxvY2F0aW9uTGFiZWwgPSB0aGlzLmZpbHRlcmVkTG9jYXRpb25zLmZpbHRlcihsb2NhdGlvbiA9PiBsb2NhdGlvbi5jaGVja2VkKTtcclxuICBcclxuICAvLyAgIC8vIE9wdGlvbmFsbHkgdXBkYXRlIHNlbGVjdGVkRmlsdGVycyBpZiBuZWVkZWRcclxuICAvLyAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxvY2F0aW9uID0gdGhpcy5maWx0ZXJlZExvY2F0aW9ucztcclxuICAvLyAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSBbXTtcclxuICAvLyAgIHRoaXMuZ2V0U3RvcmUoKVxyXG4gIC8vICAgLy8gVXBkYXRlIGxvY2FsU3RvcmFnZSB3aXRoIHRoZSBsYXRlc3Qgc2VsZWN0ZWRGaWx0ZXJzXHJcbiAgLy8gICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKSk7XHJcbiAgIFxyXG4gIC8vIH1cclxuICBcclxuICBnZXRHcm91cHMoY2l0aWVzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgY29uc3Qgb2JqID0geyBjaXR5OiBjaXRpZXMsY2xpZW50SWQ6dGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50LGdyb3VwOltdIH07XHJcbiAgICB0aGlzLmF1dGguZ2V0R3JvdXBzKG9iaikuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGNoZWNrZWRHcm91cCA9IHRoaXMuZmlsdGVyZWRHcm91cHMuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAuY2hlY2tlZCkubWFwKChncm91cCkgPT4gZ3JvdXAuZ3JvdXBOYW1lKTtcclxuICAgICAgICBjb25zdCBjb21iaW5lZEdyb3VwcyA9IHJlcy5kYXRhLmdyb3VwRGF0YS5tYXAoKGdyb3VwTmFtZTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgZ3JvdXBOYW1lOiBncm91cE5hbWUuZ3JvdXBOYW1lLFxyXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZEdyb3VwLmluY2x1ZGVzKGdyb3VwTmFtZS5ncm91cE5hbWUpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICB0aGlzLmdyb3Vwc0RhdGEgPSBjb21iaW5lZEdyb3VwcztcclxuICAgICAgICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gY29tYmluZWRHcm91cHM7XHJcbiAgXHJcbiAgICAgICAgLy8gQXV0by1mZXRjaCBzdG9yZXMgd2hlbiBncm91cHMgYXJlIHNlbGVjdGVkXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSB0aGlzLmZpbHRlcmVkR3JvdXBzLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwLmNoZWNrZWQpLm1hcCgoZ3JvdXApID0+IGdyb3VwLmdyb3VwTmFtZSk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkR3JvdXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuZ2V0U3RvcmUoKTsgLy8gRmV0Y2ggc3RvcmVzIGJhc2VkIG9uIHNlbGVjdGVkIGdyb3Vwc1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGZldGNoIGdyb3Vwc1wiLCBlcnIpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVEcm9wZG93bih0eXBlOiAnbG9jYXRpb24nIHwgJ2dyb3VwJyB8ICdzdG9yZScpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duT3BlbiA9PT0gdHlwZSkge1xyXG4gICAgICAvLyBJZiB0aGUgZHJvcGRvd24gaXMgb3BlbiwgY2xvc2UgaXQgYW5kIGF2b2lkIHJlc2V0dGluZyB0aGUgc2VsZWN0ZWQgdmFsdWVzIHVubmVjZXNzYXJpbHlcclxuICAgICAgdGhpcy5kcm9wZG93bk9wZW4gPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gT3BlbiB0aGUgc3BlY2lmaWMgZHJvcGRvd24gYW5kIGhhbmRsZSBkYXRhIGZldGNoaW5nIG9ubHkgaWYgbmVjZXNzYXJ5XHJcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuID0gdHlwZTtcclxuICBcclxuICAgICAgaWYgKHR5cGUgPT09ICdncm91cCcpIHtcclxuICAgICAgICAvLyBGZXRjaCBncm91cHMgb25seSBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgY2l0aWVzIGFuZCBubyBhY3RpdmUgc2VhcmNoIHRleHRcclxuICAgICAgICBjb25zdCBzZWxlY3RlZENpdGllcyA9IHRoaXMuZmlsdGVyZWRMb2NhdGlvbnNcclxuICAgICAgICAgIC5maWx0ZXIoKGxvY2F0aW9uKSA9PiBsb2NhdGlvbi5jaGVja2VkKVxyXG4gICAgICAgICAgLm1hcCgobG9jYXRpb24pID0+IGxvY2F0aW9uLmNpdHkpO1xyXG4gIFxyXG4gICAgICAgIGlmIChzZWxlY3RlZENpdGllcy5sZW5ndGggPiAwICYmICF0aGlzLnNlYXJjaEdyb3VwVGV4dC50cmltKCkpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0R3JvdXBzKHNlbGVjdGVkQ2l0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgaWYgKHR5cGUgPT09ICdzdG9yZScpIHtcclxuICAgICAgICAvLyBGZXRjaCBzdG9yZXMgb25seSBpZiBub3QgYWxyZWFkeSBmZXRjaGVkIGFuZCBubyBzZWFyY2ggdGV4dCBpcyBhY3RpdmVcclxuICAgICAgICBpZiAoKCF0aGlzLmZpbHRlcmVkU3RvcmVzIHx8IHRoaXMuZmlsdGVyZWRTdG9yZXMubGVuZ3RoID09PSAwKSAmJiAhdGhpcy5zZWFyY2hTdG9yZVRleHQudHJpbSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmdldFN0b3JlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gIGhhbmRsZUdyb3VwRHJvcGRvd25DbGljaygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duT3BlbiA9PT0gJ2dyb3VwJykge1xyXG4gICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRHcm91cHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMudG9nZ2xlRHJvcGRvd24oJ2dyb3VwJyk7XHJcbiAgfVxyXG5cclxuICByZXNldFNlbGVjdGVkR3JvdXBzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJlZEdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4gKGdyb3VwLmNoZWNrZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5zZWFyY2hHcm91cFRleHQgPSBcIlwiO1xyXG4gIH1cclxuICBzZWxlY3RlZEdyb3Vwc0xhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwcyA9IHRoaXMuZ3JvdXBMYWJlbCA9IHRoaXMuZmlsdGVyZWRHcm91cHMuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAuY2hlY2tlZCk7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRHcm91cHMubGVuZ3RoID09PSAwXHJcbiAgICAgID8gXCJcIlxyXG4gICAgICA6IHNlbGVjdGVkR3JvdXBzLmxlbmd0aCA9PT0gMVxyXG4gICAgICA/IHNlbGVjdGVkR3JvdXBzWzBdLmdyb3VwTmFtZVxyXG4gICAgICA6IGAke3NlbGVjdGVkR3JvdXBzLmxlbmd0aH0gZ3JvdXBzYDtcclxuICB9XHJcbiAgLy8gcmVtb3ZlR3JvdXAoKTogdm9pZCB7XHJcbiAgLy8gICAvLyBTZXQgYWxsIGdyb3VwcyB0byB1bmNoZWNrZWRcclxuICAvLyAgIHRoaXMuZmlsdGVyZWRHcm91cHMgPSB0aGlzLmZpbHRlcmVkR3JvdXBzLm1hcChncm91cCA9PiAoe1xyXG4gIC8vICAgICAuLi5ncm91cCxcclxuICAvLyAgICAgY2hlY2tlZDogZmFsc2VcclxuICAvLyAgIH0pKTtcclxuICBcclxuICAvLyAgIC8vIE9wdGlvbmFsbHksIHVwZGF0ZSB0aGUgZ3JvdXBMYWJlbCBpZiBuZWVkZWRcclxuICAvLyAgIHRoaXMuZ3JvdXBMYWJlbCA9IHRoaXMuZmlsdGVyZWRHcm91cHMuZmlsdGVyKGdyb3VwID0+IGdyb3VwLmNoZWNrZWQpO1xyXG4gIFxyXG4gIC8vICAgLy8gT3B0aW9uYWxseSwgaWYgeW91IG5lZWQgdG8gcmVmbGVjdCB0aGVzZSBjaGFuZ2VzIGluIHNlbGVjdGVkRmlsdGVyc1xyXG4gIC8vICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZ3JvdXAgPSB0aGlzLmZpbHRlcmVkR3JvdXBzO1xyXG4gIC8vICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IFtdO1xyXG4gIC8vICAgdGhpcy5nZXRTdG9yZSgpXHJcbiAgLy8gICAvLyBVcGRhdGUgbG9jYWxTdG9yYWdlIHdpdGggdGhlIGxhdGVzdCBzZWxlY3RlZEZpbHRlcnNcclxuICAvLyAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICAgXHJcbiAgLy8gfVxyXG4gIFxyXG5cclxuICBpc0FsbEdyb3Vwc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRHcm91cHMubGVuZ3RoID8gdGhpcy5maWx0ZXJlZEdyb3Vwcy5ldmVyeSgoZ3JvdXApID0+IGdyb3VwLmNoZWNrZWQpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNpdHkgPSB0aGlzLmZpbHRlcmVkTG9jYXRpb25zXHJcbiAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gbG9jYXRpb24uY2hlY2tlZClcclxuICAgICAgLm1hcChsb2NhdGlvbiA9PiBsb2NhdGlvbi5jaXR5KTtcclxuICBcclxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5maWx0ZXJlZEdyb3Vwc1xyXG4gICAgICAuZmlsdGVyKGdyb3VwID0+IGdyb3VwLmNoZWNrZWQpXHJcbiAgICAgIC5tYXAoZ3JvdXAgPT4gZ3JvdXAuZ3JvdXBOYW1lKTtcclxuICBcclxuICAgIGNvbnN0IGRhdGEgPSB7IGNpdHksIGdyb3VwLCBjbGllbnRJZDogdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50IH07XHJcbiAgXHJcbiAgICB0aGlzLmF1dGguZ2V0SGVhZGVyU3RvcmVzKGRhdGEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmVzID0gcmVzLmRhdGEuc3RvcmVzRGF0YTsgLy8gR2V0IHN0b3JlcyBmcm9tIHJlc3BvbnNlXHJcbiAgXHJcbiAgICAgICAgLy8gUmV0cmlldmUgY2hlY2tlZCBzdG9yZSBJRHMgZnJvbSBzZWxlY3RlZEZpbHRlcnNcclxuICAgICAgICBjb25zdCBjaGVja2VkU3RvcmVJZHMgPSB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXNcclxuICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzLmZpbHRlcigoc3RvcmU6IGFueSkgPT4gc3RvcmUuY2hlY2tlZCkubWFwKChzdG9yZTogYW55KSA9PiBzdG9yZS5zdG9yZUlkKVxyXG4gICAgICAgICAgOiBbXTtcclxuICBcclxuICAgICAgICAvLyBNYXAgdGhlIHN0b3JlcyBhbmQgcmV0YWluIHRoZSAnY2hlY2tlZCcgc3RhdHVzXHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IHRoaXMuc3RvcmVzLm1hcCgoc3RvcmU6IGFueSkgPT4gKHtcclxuICAgICAgICAgIC4uLnN0b3JlLFxyXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZFN0b3JlSWRzLmluY2x1ZGVzKHN0b3JlLnN0b3JlSWQpXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIC8vIEVuc3VyZSBzZWxlY3RlZEZpbHRlcnMgaXMgaW4gc3luYyB3aXRoIGZpbHRlcmVkU3RvcmVzXHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgfHwgIXRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3Jlcy5sZW5ndGgpIHtcclxuICAgICAgICAgIC8vIE5vIHByZXZpb3VzbHkgc2VsZWN0ZWQgc3RvcmVzLCBtYXJrIGFsbCBhcyBjaGVja2VkXHJcbiAgICAgICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzID0gdGhpcy5maWx0ZXJlZFN0b3Jlcy5tYXAoc3RvcmUgPT4gKHtcclxuICAgICAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRydWVcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gVXBkYXRlIHNlbGVjdGVkRmlsdGVycyB0byByZWZsZWN0IGN1cnJlbnQgc3RhdGUgb2Ygc3RvcmVzXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPSB0aGlzLmZpbHRlcmVkU3RvcmVzLm1hcChzdG9yZSA9PiAoe1xyXG4gICAgICAgICAgICAuLi5zdG9yZSxcclxuICAgICAgICAgICAgY2hlY2tlZDogc3RvcmUuY2hlY2tlZFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICAvLyBVcGRhdGUgbG9jYWxTdG9yYWdlIHdpdGggdGhlIGxhdGVzdCBzZWxlY3RlZEZpbHRlcnNcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykpO1xyXG4gIFxyXG4gICAgICAgIC8vIEVtaXQgZGF0YSB2aWEgc2VydmljZVxyXG4gICAgICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcbiAgXHJcbiAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHJlZmxlY3QgY2hhbmdlcyBpbiB0aGUgVUlcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGZldGNoIHN0b3Jlc1wiLCBlcnIpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gIFxyXG5cclxuICByZXNldFNlbGVjdGVkU3RvcmVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3Jlcy5mb3JFYWNoKChzdG9yZSkgPT4gKHN0b3JlLmNoZWNrZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5zZWFyY2hTdG9yZVRleHQgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRTdG9yZXNMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRTdG9yZXMgPSB0aGlzLmZpbHRlcmVkU3RvcmVzLmZpbHRlcigoc3RvcmUpID0+IHN0b3JlLmNoZWNrZWQpO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkU3RvcmVzLmxlbmd0aCA9PT0gMFxyXG4gICAgICA/IFwiTm8gU3RvcmVzXCJcclxuICAgICAgOiBzZWxlY3RlZFN0b3Jlcy5sZW5ndGggPT09IDFcclxuICAgICAgPyBzZWxlY3RlZFN0b3Jlc1swXS5zdG9yZU5hbWVcclxuICAgICAgOiBgJHtzZWxlY3RlZFN0b3Jlcy5sZW5ndGh9IFN0b3Jlc2A7XHJcbiAgfVxyXG5cclxuICBpc0FsbFN0b3Jlc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRTdG9yZXMubGVuZ3RoID4gMCAmJiB0aGlzLmZpbHRlcmVkU3RvcmVzLmV2ZXJ5KHN0b3JlID0+IHN0b3JlLmNoZWNrZWQpO1xyXG4gIH1cclxuLy8gTWV0aG9kIHRvIGhhbmRsZSBkcm9wZG93biBpdGVtIHNlbGVjdGlvblxyXG51cGRhdGVTZWxlY3RlZFN0b3JlcygpOiB2b2lkIHtcclxuICAvLyBVcGRhdGUgc2VsZWN0ZWRGaWx0ZXJzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0b3JlIHNlbGVjdGlvblxyXG4gIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IHRoaXMuZmlsdGVyZWRTdG9yZXMuZmlsdGVyKHN0b3JlID0+IHN0b3JlLmNoZWNrZWQpO1xyXG5cclxuICAvLyBVcGRhdGUgbG9jYWxTdG9yYWdlIHdpdGggdGhlIGxhdGVzdCBzZWxlY3Rpb25cclxuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykpO1xyXG5cclxuICAvLyBFbWl0IHVwZGF0ZWQgZmlsdGVycyB2aWEgc2VydmljZVxyXG4gIC8vIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcblxyXG4gIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpZiBuZWNlc3NhcnlcclxuICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxufVxyXG4gIHRvZ2dsZVNlbGVjdEFsbExvY2F0aW9ucyhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IChsb2NhdGlvbi5jaGVja2VkID0gaXNDaGVja2VkKSk7XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkTG9jYXRpb25zKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTZWxlY3RBbGxTdG9yZXMoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3Jlcy5mb3JFYWNoKHN0b3JlID0+IHN0b3JlLmNoZWNrZWQgPSBjaGVja2VkKTtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRTdG9yZXMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkTG9jYXRpb25zKCk6IHZvaWQge1xyXG4gICAgLy8gV2hlbiBsb2NhdGlvbnMgYXJlIHNlbGVjdGVkLCBmZXRjaCB0aGUgcmVsYXRlZCBncm91cHNcclxuICAgIGNvbnN0IHNlbGVjdGVkQ2l0aWVzID0gdGhpcy5maWx0ZXJlZExvY2F0aW9uc1xyXG4gICAgICAuZmlsdGVyKChsb2NhdGlvbikgPT4gbG9jYXRpb24uY2hlY2tlZClcclxuICAgICAgLm1hcCgobG9jYXRpb24pID0+IGxvY2F0aW9uLmNpdHkpO1xyXG4gICAgXHJcbiAgICBpZiAoc2VsZWN0ZWRDaXRpZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmdldEdyb3VwcyhzZWxlY3RlZENpdGllcyk7IC8vIEZldGNoIGdyb3VwcyBiYXNlZCBvbiBzZWxlY3RlZCBjaXRpZXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRHcm91cHMgPSBbXTsgLy8gQ2xlYXIgZ3JvdXBzIGlmIG5vIGxvY2F0aW9ucyBhcmUgc2VsZWN0ZWRcclxuICAgIH1cclxuICBcclxuICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSBbXTsgLy8gUmVzZXQgc3RvcmVzIGFzIHdlbGxcclxuICAgIHRoaXMuc2VhcmNoR3JvdXBUZXh0ID0gJyc7XHJcbiAgICB0aGlzLnNlYXJjaFN0b3JlVGV4dCA9ICcnO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU2VsZWN0QWxsR3JvdXBzKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xyXG4gICAgdGhpcy5maWx0ZXJlZEdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4gKGdyb3VwLmNoZWNrZWQgPSBpc0NoZWNrZWQpKTtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRHcm91cHMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkR3JvdXBzKCk6IHZvaWQge1xyXG4gICAgLy8gRmV0Y2ggdGhlIHJlbGV2YW50IHN0b3JlcyBhZnRlciBncm91cHMgYXJlIHNlbGVjdGVkXHJcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwcyA9IHRoaXMuZmlsdGVyZWRHcm91cHNcclxuICAgICAgLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwLmNoZWNrZWQpXHJcbiAgICAgIC5tYXAoKGdyb3VwKSA9PiBncm91cC5ncm91cE5hbWUpO1xyXG4gIFxyXG4gICAgaWYgKHNlbGVjdGVkR3JvdXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5nZXRTdG9yZSgpOyAvLyBGZXRjaCBzdG9yZXMgYmFzZWQgb24gc2VsZWN0ZWQgZ3JvdXBzXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gW107IC8vIENsZWFyIHN0b3JlcyBpZiBubyBncm91cHMgYXJlIHNlbGVjdGVkXHJcbiAgICB9XHJcbiAgXHJcbiAgICB0aGlzLnNlYXJjaFN0b3JlVGV4dCA9ICcnO1xyXG4gIH1cclxuXHJcbiAgUmVzZXQoKTogdm9pZCB7XHJcbiAgICAvLyBDbGVhciBncm91cHMgYW5kIHN0b3Jlc1xyXG4gICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IFtdO1xyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IFtdO1xyXG4gIFxyXG4gICAgLy8gUmVzZXQgbG9jYXRpb25zIGFuZCBjaGVja2JveGVzXHJcbiAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zLmZvckVhY2gobG9jYXRpb24gPT4gbG9jYXRpb24uY2hlY2tlZCA9IGZhbHNlKTtcclxuICAgIHRoaXMuc2VhcmNoTG9jYXRpb25UZXh0ID0gXCJcIjtcclxuICAgIHRoaXMuc2VhcmNoR3JvdXBUZXh0ID0gXCJcIjtcclxuICAgIHRoaXMuc2VhcmNoU3RvcmVUZXh0ID0gXCJcIjtcclxuICAgIHRoaXMuZ3JvdXBzRGF0YS5mb3JFYWNoKGdyb3VwID0+IGdyb3VwLmNoZWNrZWQgPSBmYWxzZSk7XHJcbiAgXHJcbiAgICAvLyBVcGRhdGUgc3RvcmVzIGJhc2VkIG9uIGNvbmRpdGlvbnNcclxuICAgIGlmICh0aGlzLmZpbHRlcmVkTG9jYXRpb25zLmV2ZXJ5KGxvY2F0aW9uID0+ICFsb2NhdGlvbi5jaGVja2VkKSAmJlxyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRHcm91cHMuZXZlcnkoZ3JvdXAgPT4gIWdyb3VwLmNoZWNrZWQpKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSB0aGlzLnN0b3Jlcy5tYXAoc3RvcmUgPT4gKHtcclxuICAgICAgICAuLi5zdG9yZSxcclxuICAgICAgICBjaGVja2VkOiB0cnVlXHJcbiAgICAgIH0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSB0aGlzLnN0b3Jlcy5tYXAoc3RvcmUgPT4gKHtcclxuICAgICAgICAuLi5zdG9yZSxcclxuICAgICAgICBjaGVja2VkOiBmYWxzZVxyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvLyBVcGRhdGUgbG9jYWxTdG9yYWdlIGFuZCBlbWl0IGRhdGFcclxuICAgIGNvbnN0IHJlc2V0RmlsdGVycyA9IHtcclxuICAgICAgLi4udGhpcy5zZWxlY3RlZEZpbHRlcnMsXHJcbiAgICAgIHN0b3JlczogdGhpcy5maWx0ZXJlZFN0b3JlcyxcclxuICAgICAgZ3JvdXA6IFtdLFxyXG4gICAgICBsb2NhdGlvbjogW11cclxuICAgIH07XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KHJlc2V0RmlsdGVycykpO1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHJlc2V0RmlsdGVycyk7XHJcbiAgICB0aGlzLk9wZW5kcm9wZG93biA9IGZhbHNlOyAvLyBDbG9zZSBkcm9wZG93biBpZiBuZWVkZWRcclxuICB9XHJcbiAgXHJcbiAgXHJcbiAgXHJcbiAgXHJcbiAgXHJcblxyXG4gIEFwcGx5KCk6IHZvaWQge1xyXG4gICAgLy8gQ2xvc2UgdGhlIGRyb3Bkb3duXHJcbiAgICB0aGlzLk9wZW5kcm9wZG93biA9IGZhbHNlO1xyXG4gIFxyXG4gICAgLy8gRmV0Y2ggZXhpc3RpbmcgZmlsdGVycyBmcm9tIGxvY2FsU3RvcmFnZVxyXG4gICAgY29uc3QgaGVhZGVyRmlsdGVyczogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwie31cIik7XHJcbiAgXHJcbiAgICAvLyBFbnN1cmUgY3VycmVudCBzZWxlY3Rpb25zIGFyZSByZWZsZWN0ZWRcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxvY2F0aW9uID0gdGhpcy5maWx0ZXJlZExvY2F0aW9ucztcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmdyb3VwID0gdGhpcy5maWx0ZXJlZEdyb3VwcztcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IHRoaXMuZmlsdGVyZWRTdG9yZXM7XHJcbiAgXHJcbiAgXHJcbiAgICAvLyBTdG9yZSB1cGRhdGVkIGZpbHRlcnMgYmFjayBpbiBsb2NhbFN0b3JhZ2VcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICBcclxuICAgIC8vIEVtaXQgdGhlIHVwZGF0ZWQgZmlsdGVycyB2aWEgdGhlIHNlcnZpY2VcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcbiAgICAvLyBUcmlnZ2VyIHJlZnJlc2ggaWYgbmVjZXNzYXJ5XHJcbiAgICB0aGlzLmdzLm1hbmFnZVJlZnJlc2hUcmlnZ2VyLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgXHJcbiAgXHJcblxyXG4gIGZpbHRlckxvY2F0aW9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLnNlYXJjaExvY2F0aW9uVGV4dC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgXHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICAvLyBQcmVzZXJ2ZSB0aGUgY2hlY2tlZCBzdGF0ZSBkdXJpbmcgZmlsdGVyaW5nXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSB0aGlzLmxvY2F0aW9uc1xyXG4gICAgICAgIC5tYXAobG9jYXRpb24gPT4gKHtcclxuICAgICAgICAgIC4uLmxvY2F0aW9uLFxyXG4gICAgICAgICAgY2hlY2tlZDogdGhpcy5maWx0ZXJlZExvY2F0aW9ucy5maW5kKGwgPT4gbC5jaXR5ID09PSBsb2NhdGlvbi5jaXR5KT8uY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5maWx0ZXIobG9jYXRpb24gPT5cclxuICAgICAgICAgIGxvY2F0aW9uLmNpdHkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBjaGVja2VkIHN0YXRlIHdoZW4gc2VhcmNoIHRleHQgaXMgY2xlYXJlZFxyXG4gICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5sb2NhdGlvbnMubWFwKGxvY2F0aW9uID0+ICh7XHJcbiAgICAgICAgLi4ubG9jYXRpb24sXHJcbiAgICAgICAgY2hlY2tlZDogdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24uZmluZCgobDphbnkpID0+IGwuY2l0eSA9PT0gbG9jYXRpb24uY2l0eSk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBcclxuXHJcbiAgZmlsdGVyR3JvdXBzKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9IHRoaXMuc2VhcmNoR3JvdXBUZXh0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIC8vIFByZXNlcnZlIHRoZSBjaGVja2VkIHN0YXRlIGR1cmluZyBmaWx0ZXJpbmdcclxuICAgICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IHRoaXMuZ3JvdXBzRGF0YVxyXG4gICAgICAgIC5tYXAoZ3JvdXAgPT4gKHtcclxuICAgICAgICAgIC4uLmdyb3VwLFxyXG4gICAgICAgICAgY2hlY2tlZDogdGhpcy5maWx0ZXJlZEdyb3Vwcy5maW5kKGcgPT4gZy5ncm91cE5hbWUgPT09IGdyb3VwLmdyb3VwTmFtZSk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgICB9KSlcclxuICAgICAgICAuZmlsdGVyKGdyb3VwID0+XHJcbiAgICAgICAgICBncm91cC5ncm91cE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBjaGVja2VkIHN0YXRlIHdoZW4gc2VhcmNoIHRleHQgaXMgY2xlYXJlZFxyXG4gICAgICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gdGhpcy5ncm91cHNEYXRhLm1hcChncm91cCA9PiAoe1xyXG4gICAgICAgIC4uLmdyb3VwLFxyXG4gICAgICAgIGNoZWNrZWQ6IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmdyb3VwLmZpbmQoKGc6YW55KSA9PiBnLmdyb3VwTmFtZSA9PT0gZ3JvdXAuZ3JvdXBOYW1lKT8uY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gIGZpbHRlclN0b3JlcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLnNlYXJjaFN0b3JlVGV4dC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgXHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICAvLyBQcmVzZXJ2ZSB0aGUgY2hlY2tlZCBzdGF0ZSBkdXJpbmcgZmlsdGVyaW5nXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSB0aGlzLnN0b3Jlc1xyXG4gICAgICAgIC5tYXAoc3RvcmUgPT4gKHtcclxuICAgICAgICAgIC4uLnN0b3JlLFxyXG4gICAgICAgICAgY2hlY2tlZDogdGhpcy5maWx0ZXJlZFN0b3Jlcy5maW5kKHMgPT4gcy5zdG9yZUlkID09PSBzdG9yZS5zdG9yZUlkKT8uY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5maWx0ZXIoc3RvcmUgPT5cclxuICAgICAgICAgIHN0b3JlLnN0b3JlTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHQpXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGNoZWNrZWQgc3RhdGUgd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSB0aGlzLnN0b3Jlcy5tYXAoc3RvcmUgPT4gKHtcclxuICAgICAgICAuLi5zdG9yZSxcclxuICAgICAgICBjaGVja2VkOiB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMuZmluZCgoczphbnkpID0+IHMuc3RvcmVJZCA9PT0gc3RvcmUuc3RvcmVJZCk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBcclxuICBcclxuICBjbG9zZURyb3Bkb3duKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kcm9wZG93bk9wZW4gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIsIFtcIiRldmVudFwiXSlcclxuICBjbGlja091dHNpZGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFxyXG4gICAgICBcIi5kcm9wZG93bi1jb250YWluZXJcIlxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNsaWNrZWRvdXRTaWRlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChcclxuICAgICAgXCIuZHJvcGRvd24xXCJcclxuICAgICk7XHJcbiAgICBpZiAoIWNsaWNrZWRJbnNpZGUpIHtcclxuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XHJcbiAgICB9XHJcbiAgICBpZighY2xpY2tlZG91dFNpZGUpIHtcclxuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duMSgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbn1cclxuaW50ZXJmYWNlIENpdHkge1xyXG4gIGNpdHk6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIExvY2F0aW9uIHtcclxuICBjaXR5OiBDaXR5O1xyXG4gIGNoZWNrZWQ6IGJvb2xlYW47XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIlwiPlxyXG4gICAgPGxhYmVsICpuZ0lmPVwibG9jYXRpb25MYWJlbD8ubGVuZ3RoICE9PSAwXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0IG14LTJcIj57e3NlbGVjdGVkTG9jYXRpb25zTGFiZWwoKX19IFxyXG4gICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmVMb2NhdGlvbigpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgPHBhdGggZD1cIk05IDNMMyA5TTMgM0w5IDlcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgIDwvc3ZnPjwvc3Bhbj4gLS0+XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgPGxhYmVsICpuZ0lmPVwiZ3JvdXBMYWJlbD8ubGVuZ3RoICE9PSAwXCIgIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdCBteC0yXCI+e3tzZWxlY3RlZEdyb3Vwc0xhYmVsKCl9fSBcclxuICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVtb3ZlR3JvdXAoKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNOSAzTDMgOU0zIDNMOSA5XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICA8L3N2Zz48L3NwYW4+IC0tPlxyXG4gICAgPC9sYWJlbD5cclxuICAgIDxsYWJlbCAgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0XCI+e3tzZWxlY3RlZFN0b3Jlc0xhYmVsKCl9fTwvbGFiZWw+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJ3cmFwcGVyIG14LTNcIiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJ1wiPlxyXG48bGliLXNlbGVjdCBbaXRlbXNdPVwiY2xpZW50TGlzdFwiIFttdWx0aV09XCJmYWxzZVwiIFtzZWFyY2hGaWVsZF09XCInY2xpZW50TmFtZSdcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbaWRGaWVsZF09XCInY2xpZW50SWQnXCJcclxuKHNlbGVjdGVkKT1cIm9uQ2xpZW50U2VsZWN0KCRldmVudClcIiBbc2VsZWN0ZWRWYWx1ZXNdPVwiW3NlbGVjdGVkQ2xpZW50XVwiPjwvbGliLXNlbGVjdD5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxpbnB1dCBjbGFzcz1cImZ4LWRhdGUtcmFuZ2UgZm9ybS1jb250cm9sIHBzLTE0XCIgc3R5bGU9XCJtaW4td2lkdGg6IDI2MHB4ICFpbXBvcnRhbnQ7XCIgdHlwZT1cInRleHRcIiBtYXRJbnB1dFxyXG4gICAgICAgIG5neERhdGVyYW5nZXBpY2tlck1kIFtkcm9wc109XCInZG93bidcIiBbb3BlbnNdPVwiJ3JpZ2h0J1wiIFtyYW5nZXNdPVwicmFuZ2VzXCIgW3Nob3dDdXN0b21SYW5nZUxhYmVsXT1cInRydWVcIiBbYXV0b0FwcGx5XT1cInRydWVcIlxyXG4gICAgICAgIFthbHdheXNTaG93Q2FsZW5kYXJzXT1cImZhbHNlXCIgW2tlZXBDYWxlbmRhck9wZW5pbmdXaXRoUmFuZ2VdPVwidHJ1ZVwiIFtzaG93Q2FuY2VsXT1cInRydWVcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWREYXRlUmFuZ2VcIiAoc3RhcnREYXRlQ2hhbmdlZCk9XCJvblN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCIgW2lzQ3VzdG9tRGF0ZV09XCJpc0N1c3RvbURhdGVcIlxyXG4gICAgICAgIFtsb2NhbGVdPVwieyBmb3JtYXQ6ICdERC1NTS1ZWVlZJywgZmlyc3REYXk6IDEsIG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddIH1cIlxyXG4gICAgICAgIChkYXRlc1VwZGF0ZWQpPVwiZGF0ZWNoYW5nZSgkZXZlbnQpXCIgbmFtZT1cImRhdGVyYW5nZVwiIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5kcm9wZG93bigkZXZlbnQpXCIgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTIgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj5cclxuICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibWUtMlwiPkZpbHRlcjwvc3Bhbj4gLS0+XHJcbiAgICAgICAgPHN2ZyBjbGFzcz1cInBsLTNcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSAxMEgxNU0yLjUgNUgxNy41TTcuNSAxNUgxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJPcGVuZHJvcGRvd25cIiBjbGFzcz1cImNhcmQgcC01IGRyb3Bkb3duMSBwb3NpdGlvbi1hYnNvbHV0ZSB6LTEgZW5kLTBcIiBzdHlsZT1cInotaW5kZXg6IDEgIWltcG9ydGFudDtcIiAoY2xpY2tPdXRzaWRlKT1cImNsb3NlRHJvcGRvd24xKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tdGl0bGUgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTJcIj5GaWx0ZXIgT3B0aW9uc1xyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctMjUgbXMtMyBidG4tcmVzaXplXCIgKGNsaWNrKT1cIlJlc2V0KClcIj4gUmVzZXQgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0yNSAgYnRuLXJlc2l6ZVwiIChjbGljayk9XCJBcHBseSgpXCI+QXBwbHk8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgPCEtLSBMb2NhdGlvbiBEcm9wZG93biAtLT5cclxuPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbnRhaW5lclwiIChjbGlja091dHNpZGUpPVwiY2xvc2VEcm9wZG93bigpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taGVhZGVyXCI+XHJcbiAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBkcm9wZG93bi1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRMb2NhdGlvbnNMYWJlbCgpXCJcclxuICAgICAgICAgICAgKGZvY3VzKT1cInRvZ2dsZURyb3Bkb3duKCdsb2NhdGlvbicpXCIgXHJcbiAgICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGxvY2F0aW9ucy4uLlwiXHJcbiAgICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgY3VzdG9tLWRyb3Bkb3duLW1lbnVcIiAqbmdJZj1cImRyb3Bkb3duT3BlbiA9PT0gJ2xvY2F0aW9uJ1wiPlxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWItMiBkcm9wZG93bi1zZWFyY2hcIiBcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggbG9jYXRpb25zLi4uXCIgXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoTG9jYXRpb25UZXh0XCIgXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckxvY2F0aW9ucygpXCIgXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yIGRyb3Bkb3duLWl0ZW0gY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsTG9jYXRpb25zXCIgXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbExvY2F0aW9uc1NlbGVjdGVkKClcIiBcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsTG9jYXRpb25zKCRldmVudClcIiBcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdEFsbExvY2F0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbCBMb2NhdGlvbnNcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZm9ybS1jaGVjayBjdXN0b20tZHJvcGRvd24taXRlbVwiIFxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgbG9jYXRpb24gb2YgZmlsdGVyZWRMb2NhdGlvbnNcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgIFtpZF09XCJsb2NhdGlvbi5jaXR5XCIgXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvY2F0aW9uLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZExvY2F0aW9ucygpXCIgXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbZm9yXT1cImxvY2F0aW9uLmNpdHlcIj5cclxuICAgICAgICAgICAgICAgIHt7IGxvY2F0aW9uLmNpdHkgfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gR3JvdXAgRHJvcGRvd24gLS0+XHJcbjxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250YWluZXIgbXQtM1wiIChjbGlja091dHNpZGUpPVwiY2xvc2VEcm9wZG93bigpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taGVhZGVyXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKCdncm91cCcpXCI+XHJcbiAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBkcm9wZG93bi1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRHcm91cHNMYWJlbCgpXCIgcmVhZG9ubHlcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZ3JvdXBzLi4uXCJcclxuICAgICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBjdXN0b20tZHJvcGRvd24tbWVudVwiICpuZ0lmPVwiZHJvcGRvd25PcGVuID09PSAnZ3JvdXAnXCI+XHJcbiAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBtYi0yIGRyb3Bkb3duLXNlYXJjaFwiIFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBncm91cHMuLi5cIiBcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hHcm91cFRleHRcIiBcclxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyR3JvdXBzKClcIiBcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTIgZHJvcGRvd24taXRlbSBjdXN0b20tZHJvcGRvd24taXRlbVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiBcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIFxyXG4gICAgICAgICAgICAgICAgaWQ9XCJzZWxlY3RBbGxHcm91cHNcIiBcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsR3JvdXBzU2VsZWN0ZWQoKVwiIFxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGxHcm91cHMoJGV2ZW50KVwiIFxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0QWxsR3JvdXBzXCI+XHJcbiAgICAgICAgICAgICAgICBTZWxlY3QgQWxsXHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGZvcm0tY2hlY2sgY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIiBcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZpbHRlcmVkR3JvdXBzXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZ3JvdXAuZ3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ3JvdXAuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVNlbGVjdGVkR3JvdXBzKClcIiBcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwiZ3JvdXAuZ3JvdXBOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBncm91cC5ncm91cE5hbWUgfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG48IS0tIFN0b3JlIERyb3Bkb3duIC0tPlxyXG48ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyIG10LTNcIiAoY2xpY2tPdXRzaWRlKT1cImNsb3NlRHJvcGRvd24oKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bignc3RvcmUnKVwiPlxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHJvcGRvd24taW5wdXQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRTdG9yZXNMYWJlbCgpXCJcclxuICAgICAgICAgICAgcmVhZG9ubHlcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3Qgc3RvcmVzLi4uXCJcclxuICAgICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBjdXN0b20tZHJvcGRvd24tbWVudVwiICpuZ0lmPVwiZHJvcGRvd25PcGVuID09PSAnc3RvcmUnXCI+XHJcbiAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBtYi0yIGRyb3Bkb3duLXNlYXJjaCBcIiBcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3RvcmVzLi4uXCIgXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoU3RvcmVUZXh0XCIgXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlclN0b3JlcygpXCIgXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yIGRyb3Bkb3duLWl0ZW0gY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsU3RvcmVzXCIgXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFN0b3Jlc1NlbGVjdGVkKClcIiBcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsU3RvcmVzKCRldmVudClcIiBcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdEFsbFN0b3Jlc1wiPlxyXG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBmb3JtLWNoZWNrIGN1c3RvbS1kcm9wZG93bi1pdGVtXCIgXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBmaWx0ZXJlZFN0b3Jlc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIFxyXG4gICAgICAgICAgICAgICAgW2lkXT1cInN0b3JlLnN0b3JlSWRcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdG9yZS5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRTdG9yZXMoKVwiIFxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgW2Zvcl09XCJzdG9yZS5zdG9yZUlkXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBzdG9yZS5zdG9yZU5hbWUgfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
659
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhZmZpYy1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXBwLXNoYXJlZC9zcmMvbGliL21vZHVsZXMvbGF5b3V0L3Rvb2xiYXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXBwLXNoYXJlZC9zcmMvbGliL21vZHVsZXMvbGF5b3V0L3Rvb2xiYXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7Ozs7Ozs7O0FBUXpCLE1BQU0sT0FBTyxzQkFBc0I7SUFpQ3ZCO0lBQ0Q7SUFDQztJQWxDVixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsWUFBWSxHQUFHLENBQUMsQ0FBYyxFQUFFLEVBQUU7UUFDaEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0lBQ0YsaUJBQWlCLEdBQVEsRUFBRSxDQUFDO0lBQzVCLGVBQWUsR0FBUTtRQUNyQixNQUFNLEVBQUUsSUFBSTtRQUNaLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLE9BQU8sRUFBRSxFQUFFO1FBQ1gsS0FBSyxFQUFFLElBQUk7UUFDWCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxJQUFJ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QztJQUMzQixDQUFDO0lBR0QsWUFBWSxDQUFDLEtBQWlCO1FBQzVCLE1BQU0sYUFBYSxHQUFJLEtBQUssQ0FBQyxNQUFzQixDQUFDLE9BQU8sQ0FDekQscUJBQXFCLENBQ3RCLENBQUM7UUFDRixNQUFNLGNBQWMsR0FBSSxLQUFLLENBQUMsTUFBc0IsQ0FBQyxPQUFPLENBQzFELFlBQVksQ0FDYixDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFHLENBQUMsY0FBYyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtJQUVILENBQUM7d0dBNXZCVSxzQkFBc0I7NEZBQXRCLHNCQUFzQiw2SENmbkMsMndUQTRNTTs7NEZEN0xPLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxvQkFBb0I7aUpBMkM5QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBd3NCMUMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIE9uSW5pdCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XHJcbmltcG9ydCBcImRheWpzL2xvY2FsZS9lblwiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXRyYWZmaWMtaGVhZGVyXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi90cmFmZmljLWhlYWRlci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vdHJhZmZpYy1oZWFkZXIuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyYWZmaWNIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGRheWpzID0gZGF5anM7XHJcbiAgaXNDdXN0b21EYXRlID0gKG06IGRheWpzLkRheWpzKSA9PiB7XHJcbiAgICBjb25zdCBpc1ZhbGlkRGF0ZSA9IG0gPiB0aGlzLmRheWpzKCk7XHJcbiAgICByZXR1cm4gaXNWYWxpZERhdGUgPyBcImludmFsaWQtZGF0ZVwiIDogZmFsc2U7XHJcbiAgfTtcclxuICBzZWxlY3RlZERhdGVSYW5nZTogYW55ID0ge307XHJcbiAgc2VsZWN0ZWRGaWx0ZXJzOiBhbnkgPSB7XHJcbiAgICBjbGllbnQ6IG51bGwsXHJcbiAgICBjbGllbnROYW1lOiBudWxsLFxyXG4gICAgY2xpZW50czogW10sXHJcbiAgICBzdG9yZTogbnVsbCxcclxuICAgIHN0b3JlczogW10sXHJcbiAgICBkYXRlOiBudWxsLFxyXG4gICAgZ3JvdXA6IFtdLFxyXG4gICAgbG9jYXRpb246IFtdLFxyXG4gIH07XHJcbiAgT3BlbmRyb3Bkb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZHJvcGRvd25PcGVuOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gJ2xvY2F0aW9uJyBvciAnZ3JvdXAnXHJcbiAgc2VhcmNoTG9jYXRpb25UZXh0OiBzdHJpbmcgPSBcIlwiO1xyXG4gIHNlYXJjaEdyb3VwVGV4dDogc3RyaW5nID0gXCJcIjtcclxuICBsb2NhdGlvbnM6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRMb2NhdGlvbnM6IGFueVtdID0gW107XHJcbiAgZ3JvdXBzRGF0YTogYW55W10gPSBbXTtcclxuICBmaWx0ZXJlZEdyb3VwczogYW55W10gPSBbXTtcclxuICBmaWx0ZXJlZFN0b3JlczogYW55W10gPSBbXTtcclxuICBzdG9yZXM6YW55W10gPSBbXVxyXG4gIHNlYXJjaFN0b3JlVGV4dDpzdHJpbmcgPSAnJztcclxuICBjbGllbnRMaXN0OmFueSA9IFtdXHJcbiAgc2VsZWN0ZWRDbGllbnQ6YW55XHJcbiAgbG9jYXRpb25MYWJlbDogYW55W109W107XHJcbiAgZ3JvdXBMYWJlbDogYW55W109W107XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGF1dGg6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHVibGljIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHt9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrIChldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYoIXRhcmdldC5jbG9zZXN0KCcuZHJvcGRvd24xJykpIHtcclxuICAgICAgdGhpcy5PcGVuZHJvcGRvd24gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgY2xvc2VEcm9wZG93bjEoKXtcclxuICAgIHRoaXMuT3BlbmRyb3Bkb3duID0gZmFsc2U7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgdXNlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpIGFzIHN0cmluZyk7XHJcbiAgXHJcbiAgICAvLyBGZXRjaCBjbGllbnQgZGF0YSBpZiB0aGUgdXNlciBpcyBvZiB0eXBlICd0YW5nbydcclxuICAgIGlmICh1c2VyLnVzZXJUeXBlID09PSAndGFuZ28nKSB7XHJcbiAgICAgIHRoaXMuZ2V0Q2xpZW50KCk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvLyBMb2FkIGZpbHRlcnMgZnJvbSBsb2NhbFN0b3JhZ2UgaWYgdGhleSBleGlzdFxyXG4gICAgY29uc3Qgc3RvcmVkRmlsdGVycyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIik7XHJcbiAgICBpZiAoc3RvcmVkRmlsdGVycykge1xyXG4gICAgICBjb25zdCBoZWFkZXJGaWx0ZXJzID0gSlNPTi5wYXJzZShzdG9yZWRGaWx0ZXJzKTtcclxuICBcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBzZWxlY3RlZEZpbHRlcnMgd2l0aCBkZWZhdWx0cyBvciBleGlzdGluZyB2YWx1ZXNcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMgPSB7XHJcbiAgICAgICAgY2xpZW50OiBoZWFkZXJGaWx0ZXJzLmNsaWVudCB8fCBudWxsLFxyXG4gICAgICAgIGNsaWVudE5hbWU6IGhlYWRlckZpbHRlcnMuY2xpZW50TmFtZSB8fCAnJyxcclxuICAgICAgICBjbGllbnRzOiBoZWFkZXJGaWx0ZXJzLmNsaWVudHMgfHwgW10sXHJcbiAgICAgICAgc3RvcmU6IGhlYWRlckZpbHRlcnMuc3RvcmUgfHwgbnVsbCxcclxuICAgICAgICBkYXRlOiBoZWFkZXJGaWx0ZXJzLmRhdGUgfHwge30sXHJcbiAgICAgICAgc3RvcmVzOiBoZWFkZXJGaWx0ZXJzLnN0b3JlcyB8fCBbXSxcclxuICAgICAgICBncm91cDogaGVhZGVyRmlsdGVycy5ncm91cCB8fCBbXSxcclxuICAgICAgICBsb2NhdGlvbjogaGVhZGVyRmlsdGVycy5sb2NhdGlvbiB8fCBbXVxyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICAvLyBTeW5jIGZpbHRlcmVkIGRhdGEgd2l0aCBzdG9yZWQgc2VsZWN0aW9uc1xyXG4gICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5zeW5jV2l0aExvY2FsU3RvcmFnZShoZWFkZXJGaWx0ZXJzLmxvY2F0aW9uKTtcclxuICAgICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IHRoaXMuc3luY1dpdGhMb2NhbFN0b3JhZ2UoaGVhZGVyRmlsdGVycy5ncm91cCk7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSB0aGlzLnN5bmNXaXRoTG9jYWxTdG9yYWdlKGhlYWRlckZpbHRlcnMuc3RvcmVzKTtcclxuICBcclxuICAgICAgLy8gRm9ybWF0IGRhdGUgcmFuZ2UgaWYgaXQgZXhpc3RzXHJcbiAgICAgIGlmIChoZWFkZXJGaWx0ZXJzLmRhdGUpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlID0ge1xyXG4gICAgICAgICAgc3RhcnREYXRlOiB0aGlzLmRheWpzKGhlYWRlckZpbHRlcnMuZGF0ZS5zdGFydERhdGUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpLFxyXG4gICAgICAgICAgZW5kRGF0ZTogdGhpcy5kYXlqcyhoZWFkZXJGaWx0ZXJzLmRhdGUuZW5kRGF0ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdChcIkRELU1NLVlZWVlcIiksXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvLyBFbWl0IGRhdGEgdmlhIHNlcnZpY2UgYW5kIHVwZGF0ZSBsb2NhbFN0b3JhZ2VcclxuICAgICAgdGhpcy5lbWl0QW5kU3RvcmVGaWx0ZXJzKCk7XHJcbiAgXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBJbml0aWFsaXplIGVtcHR5IHN0YXRlcyBpZiBubyBoZWFkZXIgZmlsdGVycyBhcmUgcHJlc2VudCBpbiBsb2NhbFN0b3JhZ2VcclxuICAgICAgdGhpcy5yZXNldEZpbHRlcnMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBzeW5jV2l0aExvY2FsU3RvcmFnZShpdGVtczogYW55W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gaXRlbXNcclxuICAgICAgPyBpdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcclxuICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICBjaGVja2VkOiBpdGVtLmNoZWNrZWQgPT09IHRydWVcclxuICAgICAgICB9KSlcclxuICAgICAgOiBbXTtcclxuICB9XHJcbiAgcHJpdmF0ZSBlbWl0QW5kU3RvcmVGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgc2VsZWN0ZWRGaWx0ZXJzIGFuZCBhbGwgcmVsYXRlZCBhcnJheXMgdG8gZW1wdHkgc3RhdGVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXNldEZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVycyA9IHtcclxuICAgICAgY2xpZW50OiBudWxsLFxyXG4gICAgICBjbGllbnROYW1lOiAnJyxcclxuICAgICAgY2xpZW50czogW10sXHJcbiAgICAgIHN0b3JlOiBudWxsLFxyXG4gICAgICBkYXRlOiB7fSxcclxuICAgICAgc3RvcmVzOiBbXSxcclxuICAgICAgZ3JvdXA6IFtdLFxyXG4gICAgICBsb2NhdGlvbjogW11cclxuICAgIH07XHJcbiAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gW107XHJcbiAgICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gW107XHJcbiAgICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gW107XHJcbiAgfVxyXG5nZXRDbGllbnQoKXtcclxuICB0aGlzLmF1dGguZ2V0Q2xpZW50cygpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OiAoZSkgPT4ge1xyXG4gICAgICBpZiAoZSkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50TGlzdCA9IGUuZGF0YS5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyRmlsdGVyczogYW55ID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJ7fVwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaGVhZGVyRmlsdGVycy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50TGlzdC5maW5kKChvYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAob2JqLmNsaWVudElkID09PSBoZWFkZXJGaWx0ZXJzLmNsaWVudCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGllbnQgPSBvYmo7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50ID0gaGVhZGVyRmlsdGVycy5jbGllbnQ7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnROYW1lID0gaGVhZGVyRmlsdGVycy5jbGllbnROYW1lO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50cyA9IGhlYWRlckZpbHRlcnMuY2xpZW50cztcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlID0gaGVhZGVyRmlsdGVycy5zdG9yZTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmRhdGUgPSBoZWFkZXJGaWx0ZXJzLmRhdGU7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPSBoZWFkZXJGaWx0ZXJzLnN0b3JlcztcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmdyb3VwID0gaGVhZGVyRmlsdGVycy5ncm91cDtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxvY2F0aW9uID0gaGVhZGVyRmlsdGVycy5sb2NhdGlvbjtcclxuICAgICAgICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENsaWVudCA9IHRoaXMuY2xpZW50TGlzdFswXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSAgdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnRJZDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnROYW1lID0gdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnROYW1lXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudHMgPSBoZWFkZXJGaWx0ZXJzLmNsaWVudHM7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlID0gaGVhZGVyRmlsdGVycy5zdG9yZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZGF0ZSA9IGhlYWRlckZpbHRlcnMuZGF0ZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzID0gaGVhZGVyRmlsdGVycy5zdG9yZXM7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmdyb3VwID0gaGVhZGVyRmlsdGVycy5ncm91cDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gPSBoZWFkZXJGaWx0ZXJzLmxvY2F0aW9uO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgXCJoZWFkZXItZmlsdGVyc1wiLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpIFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgICAgLy8gRW5zdXJlIGxvY2F0aW9ucyBhbmQgZ3JvdXBzIGFyZSBsb2FkZWQgYmVmb3JlIGZldGNoaW5nIHN0b3Jlc1xyXG4gdGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuXHJcbiAvLyBGZXRjaCBzdG9yZXMgb25seSBhZnRlciBsb2NhdGlvbnMgYW5kIGdyb3VwcyBhcmUgc2V0XHJcbiB0aGlzLmdldFN0b3JlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ2xpZW50ID0gdGhpcy5jbGllbnRMaXN0WzBdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSAgdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnRJZDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50TmFtZSA9IHRoaXMuc2VsZWN0ZWRDbGllbnQuY2xpZW50TmFtZVxyXG4gICAgICAgLy8gRW5zdXJlIGxvY2F0aW9ucyBhbmQgZ3JvdXBzIGFyZSBsb2FkZWQgYmVmb3JlIGZldGNoaW5nIHN0b3Jlc1xyXG4gdGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuXHJcbiAvLyBGZXRjaCBzdG9yZXMgb25seSBhZnRlciBsb2NhdGlvbnMgYW5kIGdyb3VwcyBhcmUgc2V0XHJcbiB0aGlzLmdldFN0b3JlKCk7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgIFwiaGVhZGVyLWZpbHRlcnNcIixcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykgXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgfSxcclxuICB9KTtcclxufVxyXG5vbkNsaWVudFNlbGVjdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgLy8gVXBkYXRlIHRoZSBzZWxlY3RlZCBjbGllbnRcclxuICB0aGlzLnNlbGVjdGVkQ2xpZW50ID0gZXZlbnQ7XHJcblxyXG4gIC8vIENsZWFyIHRoZSBwcmV2aW91cyBmaWx0ZXJlZCBzdG9yZXMgc2luY2UgdGhlIGNsaWVudCBoYXMgY2hhbmdlZFxyXG4gIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSBbXTtcclxuICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPSBbXTtcclxuXHJcbiAgLy8gRmV0Y2ggaGVhZGVyIGZpbHRlcnMgZnJvbSBsb2NhbFN0b3JhZ2VcclxuICBjb25zdCBoZWFkZXJGaWx0ZXJzOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJ7fVwiKTtcclxuICBcclxuICAvLyBVcGRhdGUgdGhlIHNlbGVjdGVkIGZpbHRlcnMgd2l0aCB0aGUgbmV3IGNsaWVudFxyXG4gIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudCA9IHRoaXMuc2VsZWN0ZWRDbGllbnQuY2xpZW50SWQ7XHJcbiAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50TmFtZSA9IHRoaXMuc2VsZWN0ZWRDbGllbnQuY2xpZW50TmFtZTtcclxuICBcclxuICAvLyBSZW1vdmUgb2xkIHN0b3JlIGRhdGEgZnJvbSB0aGUgc2VsZWN0ZWRGaWx0ZXJzIHNpbmNlIHdlIGFyZSBmZXRjaGluZyBuZXcgc3RvcmVzIGZvciB0aGUgbmV3IGNsaWVudFxyXG4gIGRlbGV0ZSBoZWFkZXJGaWx0ZXJzLnN0b3JlcztcclxuICBcclxuICAvLyBVcGRhdGUgbG9jYWxTdG9yYWdlIHdpdGggdGhlIG5ldyBjbGllbnQgc2VsZWN0aW9uIGFuZCBlbXB0eSBzdG9yZSBkYXRhXHJcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxudGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuICAvLyBGZXRjaCBuZXcgc3RvcmVzIGJhc2VkIG9uIHRoZSBuZXcgY2xpZW50XHJcbiAgdGhpcy5nZXRTdG9yZSgpO1xyXG4gXHJcbiAgXHJcbiAgXHJcbiAgLy8gRW1pdCBkYXRhIHRvIHRoZSBnbG9iYWwgc2VydmljZVxyXG4gIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcblxyXG4gIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB0byByZWZsZWN0IFVJIGNoYW5nZXNcclxuICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxufVxyXG5cclxuXHJcblxyXG4gIHJhbmdlczogYW55ID0ge1xyXG4gICAgVG9kYXk6IFt0aGlzLmRheWpzKCksIHRoaXMuZGF5anMoKV0sXHJcbiAgICBZZXN0ZXJkYXk6IFtcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5c1wiKSxcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5c1wiKSxcclxuICAgIF0sXHJcbiAgICBcIlRoaXMgV2Vla1wiOiBbdGhpcy5kYXlqcygpLnN1YnRyYWN0KDYsIFwiZGF5c1wiKSwgdGhpcy5kYXlqcygpXSxcclxuICAgIFwiTGFzdCBXZWVrXCI6IFtcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDE0LCBcImRheXNcIikuc3RhcnRPZihcImRheXNcIiksXHJcbiAgICAgIHRoaXMuZGF5anMoKS5zdWJ0cmFjdCg4LCBcImRheXNcIikuZW5kT2YoXCJkYXlzXCIpLFxyXG4gICAgXSxcclxuICAgIFwiVGhpcyBNb250aFwiOiBbdGhpcy5kYXlqcygpLnN0YXJ0T2YoXCJtb250aFwiKSwgdGhpcy5kYXlqcygpLmVuZE9mKFwibW9udGhcIildLFxyXG4gICAgXCJMYXN0IE1vbnRoXCI6IFtcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwibW9udGhcIikuc3RhcnRPZihcIm1vbnRoXCIpLFxyXG4gICAgICB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgXCJtb250aFwiKS5lbmRPZihcIm1vbnRoXCIpLFxyXG4gICAgXSxcclxuICB9O1xyXG5cclxuICBvblN0YXJ0RGF0ZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLmlzQ3VzdG9tRGF0ZSA9IChtOiBkYXlqcy5EYXlqcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWREYXRlID1cclxuICAgICAgICAgIG0gPiB0aGlzLmRheWpzKCkgfHwgbSA+IHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlLmFkZCg5MCwgXCJkYXlzXCIpKTtcclxuICAgICAgICByZXR1cm4gaXNWYWxpZERhdGUgPyBcImludmFsaWQtZGF0ZVwiIDogZmFsc2U7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkYXRlY2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCAmJiBldmVudC5zdGFydERhdGUgJiYgZXZlbnQuZW5kRGF0ZSkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSAmJlxyXG4gICAgICAgIHRoaXMuZGF5anMoZXZlbnQuZW5kRGF0ZSkuaXNWYWxpZCgpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlID0gZXZlbnQuc3RhcnREYXRlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSA9IGV2ZW50LmVuZERhdGU7XHJcbiAgICAgICAgdmFyIGRhdGV0aW1lID0ge1xyXG4gICAgICAgICAgc3RhcnREYXRlOiB0aGlzLmRheWpzKGV2ZW50LnN0YXJ0RGF0ZSwgXCJERC1NTS1ZWVlZXCIpLmZvcm1hdChcclxuICAgICAgICAgICAgXCJZWVlZLU1NLUREXCJcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKGV2ZW50LmVuZERhdGUsIFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZGF0ZSA9IGRhdGV0aW1lO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgXCJoZWFkZXItZmlsdGVyc1wiLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpXHJcbiAgICAgICAgKTtcclxuICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgICAgfVxyXG4gICAgfSBcclxuICB9XHJcbiAgb3BlbmRyb3Bkb3duKGU6TW91c2VFdmVudCkge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuT3BlbmRyb3Bkb3duID0gIXRoaXMuT3BlbmRyb3Bkb3duO1xyXG4gIH1cclxuICBnZXRMb2NhdGlvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBoZWFkZXJGaWx0ZXJzOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJ7fVwiKTtcclxuICAgIGxldCBvYmogPXtcclxuICAgICBjbGllbnRJZDogaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgY2l0eTogW10sXHJcbiAgICAgZ3JvdXA6IFtdLFxyXG4gICAgfVxyXG4gICAgdGhpcy5hdXRoLmdldExvY2F0aW9uKG9iaikuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gTWFwIHRoZSBmZXRjaGVkIGxvY2F0aW9ucyB3aXRoIGRlZmF1bHQgdW5jaGVja2VkIHN0YXRlXHJcbiAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSByZXMuZGF0YS5sb2NhdGlvbkRhdGEubWFwKChjaXR5OiBhbnkpID0+ICh7XHJcbiAgICAgICAgICBjaXR5OiBjaXR5LmNpdHksXHJcbiAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICB9KSk7XHJcbiAgXHJcbiAgICAgICAgLy8gU3luYyB0aGUgZmV0Y2hlZCBsb2NhdGlvbnMgd2l0aCBhbnkgc3RvcmVkIGNoZWNrZWQgdmFsdWVzIGluIGxvY2FsU3RvcmFnZVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsdGVycy5sb2NhdGlvbiAmJiBBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxvY2F0aW9uKSkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZExvY2F0aW9ucyA9IHRoaXMubG9jYXRpb25zLm1hcChsb2NhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRMb2NhdGlvbiA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxvY2F0aW9uLmZpbmQoKGxvYzogYW55KSA9PiBsb2MuY2l0eSA9PT0gbG9jYXRpb24uY2l0eSk7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVkTG9jYXRpb24gPyB7IC4uLmxvY2F0aW9uLCBjaGVja2VkOiBtYXRjaGVkTG9jYXRpb24uY2hlY2tlZCB9IDogbG9jYXRpb247XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZExvY2F0aW9ucyA9IHRoaXMubG9jYXRpb25zO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGZldGNoIGxvY2F0aW9uc1wiLCBlcnIpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIGlzQWxsTG9jYXRpb25zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZExvY2F0aW9ucy5ldmVyeShsb2NhdGlvbiA9PiBsb2NhdGlvbi5jaGVja2VkKTtcclxuICB9XHJcbiAgXHJcbiAgc2VsZWN0ZWRMb2NhdGlvbnNMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRMb2NhdGlvbnMgPSB0aGlzLmxvY2F0aW9uTGFiZWwgPSB0aGlzLmZpbHRlcmVkTG9jYXRpb25zXHJcbiAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gbG9jYXRpb24uY2hlY2tlZClcclxuICAgICAgLm1hcChsb2NhdGlvbiA9PiBsb2NhdGlvbi5jaXR5KTtcclxuICAgIHJldHVybiBzZWxlY3RlZExvY2F0aW9ucy5sZW5ndGggPT09IDBcclxuICAgICAgPyAnJ1xyXG4gICAgICA6IHNlbGVjdGVkTG9jYXRpb25zLmxlbmd0aCA9PT0gMVxyXG4gICAgICA/IHNlbGVjdGVkTG9jYXRpb25zWzBdXHJcbiAgICAgIDogYCR7c2VsZWN0ZWRMb2NhdGlvbnMubGVuZ3RofSBsb2NhdGlvbnNgO1xyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlTG9jYXRpb24oKTogdm9pZCB7XHJcbiAgLy8gICAvLyBVcGRhdGUgY2hlY2tlZCBzdGF0ZSBmb3IgbG9jYXRpb25zIHRvIGZhbHNlXHJcbiAgLy8gICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5maWx0ZXJlZExvY2F0aW9ucy5tYXAobG9jYXRpb24gPT4gKHtcclxuICAvLyAgICAgLi4ubG9jYXRpb24sXHJcbiAgLy8gICAgIGNoZWNrZWQ6IGZhbHNlXHJcbiAgLy8gICB9KSk7XHJcbiAgXHJcbiAgLy8gICAvLyBPcHRpb25hbGx5IHVwZGF0ZSBsb2NhdGlvbkxhYmVsIGlmIGl0IG5lZWRzIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgZmlsdGVyZWQgc3RhdGVcclxuICAvLyAgIHRoaXMubG9jYXRpb25MYWJlbCA9IHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMuZmlsdGVyKGxvY2F0aW9uID0+IGxvY2F0aW9uLmNoZWNrZWQpO1xyXG4gIFxyXG4gIC8vICAgLy8gT3B0aW9uYWxseSB1cGRhdGUgc2VsZWN0ZWRGaWx0ZXJzIGlmIG5lZWRlZFxyXG4gIC8vICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gPSB0aGlzLmZpbHRlcmVkTG9jYXRpb25zO1xyXG4gIC8vICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IFtdO1xyXG4gIC8vICAgdGhpcy5nZXRTdG9yZSgpXHJcbiAgLy8gICAvLyBVcGRhdGUgbG9jYWxTdG9yYWdlIHdpdGggdGhlIGxhdGVzdCBzZWxlY3RlZEZpbHRlcnNcclxuICAvLyAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICAgXHJcbiAgLy8gfVxyXG4gIFxyXG4gIGdldEdyb3VwcyhjaXRpZXM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBjb25zdCBvYmogPSB7IGNpdHk6IGNpdGllcyxjbGllbnRJZDp0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQsZ3JvdXA6W10gfTtcclxuICAgIHRoaXMuYXV0aC5nZXRHcm91cHMob2JqKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgY2hlY2tlZEdyb3VwID0gdGhpcy5maWx0ZXJlZEdyb3Vwcy5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5jaGVja2VkKS5tYXAoKGdyb3VwKSA9PiBncm91cC5ncm91cE5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGNvbWJpbmVkR3JvdXBzID0gcmVzLmRhdGEuZ3JvdXBEYXRhLm1hcCgoZ3JvdXBOYW1lOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICBncm91cE5hbWU6IGdyb3VwTmFtZS5ncm91cE5hbWUsXHJcbiAgICAgICAgICBjaGVja2VkOiBjaGVja2VkR3JvdXAuaW5jbHVkZXMoZ3JvdXBOYW1lLmdyb3VwTmFtZSkgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBzRGF0YSA9IGNvbWJpbmVkR3JvdXBzO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRHcm91cHMgPSBjb21iaW5lZEdyb3VwcztcclxuICBcclxuICAgICAgICAvLyBBdXRvLWZldGNoIHN0b3JlcyB3aGVuIGdyb3VwcyBhcmUgc2VsZWN0ZWRcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEdyb3VwcyA9IHRoaXMuZmlsdGVyZWRHcm91cHMuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAuY2hlY2tlZCkubWFwKChncm91cCkgPT4gZ3JvdXAuZ3JvdXBOYW1lKTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRHcm91cHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5nZXRTdG9yZSgpOyAvLyBGZXRjaCBzdG9yZXMgYmFzZWQgb24gc2VsZWN0ZWQgZ3JvdXBzXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggZ3JvdXBzXCIsIGVycik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZURyb3Bkb3duKHR5cGU6ICdsb2NhdGlvbicgfCAnZ3JvdXAnIHwgJ3N0b3JlJyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZHJvcGRvd25PcGVuID09PSB0eXBlKSB7XHJcbiAgICAgIC8vIElmIHRoZSBkcm9wZG93biBpcyBvcGVuLCBjbG9zZSBpdCBhbmQgYXZvaWQgcmVzZXR0aW5nIHRoZSBzZWxlY3RlZCB2YWx1ZXMgdW5uZWNlc3NhcmlseVxyXG4gICAgICB0aGlzLmRyb3Bkb3duT3BlbiA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBPcGVuIHRoZSBzcGVjaWZpYyBkcm9wZG93biBhbmQgaGFuZGxlIGRhdGEgZmV0Y2hpbmcgb25seSBpZiBuZWNlc3NhcnlcclxuICAgICAgdGhpcy5kcm9wZG93bk9wZW4gPSB0eXBlO1xyXG4gIFxyXG4gICAgICBpZiAodHlwZSA9PT0gJ2dyb3VwJykge1xyXG4gICAgICAgIC8vIEZldGNoIGdyb3VwcyBvbmx5IGlmIHRoZXJlIGFyZSBzZWxlY3RlZCBjaXRpZXMgYW5kIG5vIGFjdGl2ZSBzZWFyY2ggdGV4dFxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2l0aWVzID0gdGhpcy5maWx0ZXJlZExvY2F0aW9uc1xyXG4gICAgICAgICAgLmZpbHRlcigobG9jYXRpb24pID0+IGxvY2F0aW9uLmNoZWNrZWQpXHJcbiAgICAgICAgICAubWFwKChsb2NhdGlvbikgPT4gbG9jYXRpb24uY2l0eSk7XHJcbiAgXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkQ2l0aWVzLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VhcmNoR3JvdXBUZXh0LnRyaW0oKSkge1xyXG4gICAgICAgICAgdGhpcy5nZXRHcm91cHMoc2VsZWN0ZWRDaXRpZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBpZiAodHlwZSA9PT0gJ3N0b3JlJykge1xyXG4gICAgICAgIC8vIEZldGNoIHN0b3JlcyBvbmx5IGlmIG5vdCBhbHJlYWR5IGZldGNoZWQgYW5kIG5vIHNlYXJjaCB0ZXh0IGlzIGFjdGl2ZVxyXG4gICAgICAgIGlmICgoIXRoaXMuZmlsdGVyZWRTdG9yZXMgfHwgdGhpcy5maWx0ZXJlZFN0b3Jlcy5sZW5ndGggPT09IDApICYmICF0aGlzLnNlYXJjaFN0b3JlVGV4dC50cmltKCkpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0U3RvcmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgXHJcbiAgaGFuZGxlR3JvdXBEcm9wZG93bkNsaWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZHJvcGRvd25PcGVuID09PSAnZ3JvdXAnKSB7XHJcbiAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEdyb3VwcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b2dnbGVEcm9wZG93bignZ3JvdXAnKTtcclxuICB9XHJcblxyXG4gIHJlc2V0U2VsZWN0ZWRHcm91cHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcmVkR3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiAoZ3JvdXAuY2hlY2tlZCA9IGZhbHNlKSk7XHJcbiAgICB0aGlzLnNlYXJjaEdyb3VwVGV4dCA9IFwiXCI7XHJcbiAgfVxyXG4gIHNlbGVjdGVkR3JvdXBzTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gdGhpcy5ncm91cExhYmVsID0gdGhpcy5maWx0ZXJlZEdyb3Vwcy5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5jaGVja2VkKTtcclxuICAgIHJldHVybiBzZWxlY3RlZEdyb3Vwcy5sZW5ndGggPT09IDBcclxuICAgICAgPyBcIlwiXHJcbiAgICAgIDogc2VsZWN0ZWRHcm91cHMubGVuZ3RoID09PSAxXHJcbiAgICAgID8gc2VsZWN0ZWRHcm91cHNbMF0uZ3JvdXBOYW1lXHJcbiAgICAgIDogYCR7c2VsZWN0ZWRHcm91cHMubGVuZ3RofSBncm91cHNgO1xyXG4gIH1cclxuICAvLyByZW1vdmVHcm91cCgpOiB2b2lkIHtcclxuICAvLyAgIC8vIFNldCBhbGwgZ3JvdXBzIHRvIHVuY2hlY2tlZFxyXG4gIC8vICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IHRoaXMuZmlsdGVyZWRHcm91cHMubWFwKGdyb3VwID0+ICh7XHJcbiAgLy8gICAgIC4uLmdyb3VwLFxyXG4gIC8vICAgICBjaGVja2VkOiBmYWxzZVxyXG4gIC8vICAgfSkpO1xyXG4gIFxyXG4gIC8vICAgLy8gT3B0aW9uYWxseSwgdXBkYXRlIHRoZSBncm91cExhYmVsIGlmIG5lZWRlZFxyXG4gIC8vICAgdGhpcy5ncm91cExhYmVsID0gdGhpcy5maWx0ZXJlZEdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuY2hlY2tlZCk7XHJcbiAgXHJcbiAgLy8gICAvLyBPcHRpb25hbGx5LCBpZiB5b3UgbmVlZCB0byByZWZsZWN0IHRoZXNlIGNoYW5nZXMgaW4gc2VsZWN0ZWRGaWx0ZXJzXHJcbiAgLy8gICB0aGlzLnNlbGVjdGVkRmlsdGVycy5ncm91cCA9IHRoaXMuZmlsdGVyZWRHcm91cHM7XHJcbiAgLy8gICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gW107XHJcbiAgLy8gICB0aGlzLmdldFN0b3JlKClcclxuICAvLyAgIC8vIFVwZGF0ZSBsb2NhbFN0b3JhZ2Ugd2l0aCB0aGUgbGF0ZXN0IHNlbGVjdGVkRmlsdGVyc1xyXG4gIC8vICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykpO1xyXG4gICBcclxuICAvLyB9XHJcbiAgXHJcblxyXG4gIGlzQWxsR3JvdXBzU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZEdyb3Vwcy5sZW5ndGggPyB0aGlzLmZpbHRlcmVkR3JvdXBzLmV2ZXJ5KChncm91cCkgPT4gZ3JvdXAuY2hlY2tlZCkgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldFN0b3JlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2l0eSA9IHRoaXMuZmlsdGVyZWRMb2NhdGlvbnNcclxuICAgICAgLmZpbHRlcihsb2NhdGlvbiA9PiBsb2NhdGlvbi5jaGVja2VkKVxyXG4gICAgICAubWFwKGxvY2F0aW9uID0+IGxvY2F0aW9uLmNpdHkpO1xyXG4gIFxyXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmZpbHRlcmVkR3JvdXBzXHJcbiAgICAgIC5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuY2hlY2tlZClcclxuICAgICAgLm1hcChncm91cCA9PiBncm91cC5ncm91cE5hbWUpO1xyXG4gIFxyXG4gICAgY29uc3QgZGF0YSA9IHsgY2l0eSwgZ3JvdXAsIGNsaWVudElkOiB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgfTtcclxuICBcclxuICAgIHRoaXMuYXV0aC5nZXRIZWFkZXJTdG9yZXMoZGF0YSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhOyAvLyBHZXQgc3RvcmVzIGZyb20gcmVzcG9uc2VcclxuICBcclxuICAgICAgICAvLyBSZXRyaWV2ZSBjaGVja2VkIHN0b3JlIElEcyBmcm9tIHNlbGVjdGVkRmlsdGVyc1xyXG4gICAgICAgIGNvbnN0IGNoZWNrZWRTdG9yZUlkcyA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3Jlc1xyXG4gICAgICAgICAgPyB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMuZmlsdGVyKChzdG9yZTogYW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOiBhbnkpID0+IHN0b3JlLnN0b3JlSWQpXHJcbiAgICAgICAgICA6IFtdO1xyXG4gIFxyXG4gICAgICAgIC8vIE1hcCB0aGUgc3RvcmVzIGFuZCByZXRhaW4gdGhlICdjaGVja2VkJyBzdGF0dXNcclxuICAgICAgICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gdGhpcy5zdG9yZXMubWFwKChzdG9yZTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgICBjaGVja2VkOiBjaGVja2VkU3RvcmVJZHMuaW5jbHVkZXMoc3RvcmUuc3RvcmVJZClcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgLy8gRW5zdXJlIHNlbGVjdGVkRmlsdGVycyBpcyBpbiBzeW5jIHdpdGggZmlsdGVyZWRTdG9yZXNcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyB8fCAhdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgLy8gTm8gcHJldmlvdXNseSBzZWxlY3RlZCBzdG9yZXMsIG1hcmsgYWxsIGFzIGNoZWNrZWRcclxuICAgICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPSB0aGlzLmZpbHRlcmVkU3RvcmVzLm1hcChzdG9yZSA9PiAoe1xyXG4gICAgICAgICAgICAuLi5zdG9yZSxcclxuICAgICAgICAgICAgY2hlY2tlZDogdHJ1ZVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBVcGRhdGUgc2VsZWN0ZWRGaWx0ZXJzIHRvIHJlZmxlY3QgY3VycmVudCBzdGF0ZSBvZiBzdG9yZXNcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IHRoaXMuZmlsdGVyZWRTdG9yZXMubWFwKHN0b3JlID0+ICh7XHJcbiAgICAgICAgICAgIC4uLnN0b3JlLFxyXG4gICAgICAgICAgICBjaGVja2VkOiBzdG9yZS5jaGVja2VkXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIC8vIFVwZGF0ZSBsb2NhbFN0b3JhZ2Ugd2l0aCB0aGUgbGF0ZXN0IHNlbGVjdGVkRmlsdGVyc1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoZWFkZXItZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKSk7XHJcbiAgXHJcbiAgICAgICAgLy8gRW1pdCBkYXRhIHZpYSBzZXJ2aWNlXHJcbiAgICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICBcclxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gcmVmbGVjdCBjaGFuZ2VzIGluIHRoZSBVSVxyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggc3RvcmVzXCIsIGVycik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgXHJcbiAgXHJcbiAgXHJcbiAgXHJcbiAgXHJcbiAgXHJcbiAgXHJcbiAgXHJcblxyXG4gIHJlc2V0U2VsZWN0ZWRTdG9yZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcmVkU3RvcmVzLmZvckVhY2goKHN0b3JlKSA9PiAoc3RvcmUuY2hlY2tlZCA9IGZhbHNlKSk7XHJcbiAgICB0aGlzLnNlYXJjaFN0b3JlVGV4dCA9IFwiXCI7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFN0b3Jlc0xhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFN0b3JlcyA9IHRoaXMuZmlsdGVyZWRTdG9yZXMuZmlsdGVyKChzdG9yZSkgPT4gc3RvcmUuY2hlY2tlZCk7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSAwXHJcbiAgICAgID8gXCJObyBTdG9yZXNcIlxyXG4gICAgICA6IHNlbGVjdGVkU3RvcmVzLmxlbmd0aCA9PT0gMVxyXG4gICAgICA/IHNlbGVjdGVkU3RvcmVzWzBdLnN0b3JlTmFtZVxyXG4gICAgICA6IGAke3NlbGVjdGVkU3RvcmVzLmxlbmd0aH0gU3RvcmVzYDtcclxuICB9XHJcblxyXG4gIGlzQWxsU3RvcmVzU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZFN0b3Jlcy5sZW5ndGggPiAwICYmIHRoaXMuZmlsdGVyZWRTdG9yZXMuZXZlcnkoc3RvcmUgPT4gc3RvcmUuY2hlY2tlZCk7XHJcbiAgfVxyXG4vLyBNZXRob2QgdG8gaGFuZGxlIGRyb3Bkb3duIGl0ZW0gc2VsZWN0aW9uXHJcbnVwZGF0ZVNlbGVjdGVkU3RvcmVzKCk6IHZvaWQge1xyXG4gIC8vIFVwZGF0ZSBzZWxlY3RlZEZpbHRlcnMgYmFzZWQgb24gdGhlIGN1cnJlbnQgc3RvcmUgc2VsZWN0aW9uXHJcbiAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzID0gdGhpcy5maWx0ZXJlZFN0b3Jlcy5maWx0ZXIoc3RvcmUgPT4gc3RvcmUuY2hlY2tlZCk7XHJcblxyXG4gIC8vIFVwZGF0ZSBsb2NhbFN0b3JhZ2Ugd2l0aCB0aGUgbGF0ZXN0IHNlbGVjdGlvblxyXG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoZWFkZXItZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKSk7XHJcblxyXG4gIC8vIEVtaXQgdXBkYXRlZCBmaWx0ZXJzIHZpYSBzZXJ2aWNlXHJcbiAgLy8gdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuXHJcbiAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGlmIG5lY2Vzc2FyeVxyXG4gIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG59XHJcbiAgdG9nZ2xlU2VsZWN0QWxsTG9jYXRpb25zKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xyXG4gICAgdGhpcy5maWx0ZXJlZExvY2F0aW9ucy5mb3JFYWNoKChsb2NhdGlvbikgPT4gKGxvY2F0aW9uLmNoZWNrZWQgPSBpc0NoZWNrZWQpKTtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRMb2NhdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlbGVjdEFsbFN0b3JlcyhldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XHJcbiAgICB0aGlzLmZpbHRlcmVkU3RvcmVzLmZvckVhY2goc3RvcmUgPT4gc3RvcmUuY2hlY2tlZCA9IGNoZWNrZWQpO1xyXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlcygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWRMb2NhdGlvbnMoKTogdm9pZCB7XHJcbiAgICAvLyBXaGVuIGxvY2F0aW9ucyBhcmUgc2VsZWN0ZWQsIGZldGNoIHRoZSByZWxhdGVkIGdyb3Vwc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRDaXRpZXMgPSB0aGlzLmZpbHRlcmVkTG9jYXRpb25zXHJcbiAgICAgIC5maWx0ZXIoKGxvY2F0aW9uKSA9PiBsb2NhdGlvbi5jaGVja2VkKVxyXG4gICAgICAubWFwKChsb2NhdGlvbikgPT4gbG9jYXRpb24uY2l0eSk7XHJcbiAgICBcclxuICAgIGlmIChzZWxlY3RlZENpdGllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZ2V0R3JvdXBzKHNlbGVjdGVkQ2l0aWVzKTsgLy8gRmV0Y2ggZ3JvdXBzIGJhc2VkIG9uIHNlbGVjdGVkIGNpdGllc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IFtdOyAvLyBDbGVhciBncm91cHMgaWYgbm8gbG9jYXRpb25zIGFyZSBzZWxlY3RlZFxyXG4gICAgfVxyXG4gIFxyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IFtdOyAvLyBSZXNldCBzdG9yZXMgYXMgd2VsbFxyXG4gICAgdGhpcy5zZWFyY2hHcm91cFRleHQgPSAnJztcclxuICAgIHRoaXMuc2VhcmNoU3RvcmVUZXh0ID0gJyc7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTZWxlY3RBbGxHcm91cHMoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmZpbHRlcmVkR3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiAoZ3JvdXAuY2hlY2tlZCA9IGlzQ2hlY2tlZCkpO1xyXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZEdyb3VwcygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWRHcm91cHMoKTogdm9pZCB7XHJcbiAgICAvLyBGZXRjaCB0aGUgcmVsZXZhbnQgc3RvcmVzIGFmdGVyIGdyb3VwcyBhcmUgc2VsZWN0ZWRcclxuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gdGhpcy5maWx0ZXJlZEdyb3Vwc1xyXG4gICAgICAuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAuY2hlY2tlZClcclxuICAgICAgLm1hcCgoZ3JvdXApID0+IGdyb3VwLmdyb3VwTmFtZSk7XHJcbiAgXHJcbiAgICBpZiAoc2VsZWN0ZWRHcm91cHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgc2VsZWN0ZWQgZ3JvdXBzLCBmZXRjaCB0aGUgc3RvcmVzIGJhc2VkIG9uIHNlbGVjdGVkIGdyb3Vwc1xyXG4gICAgICB0aGlzLmdldFN0b3JlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBJZiBubyBncm91cHMgYXJlIHNlbGVjdGVkLCBjbGVhciB0aGUgc3RvcmVzIGxpc3RcclxuICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IFtdO1xyXG4gICAgICBcclxuICAgICAgLy8gQWxzbywgdXBkYXRlIGxvY2FsU3RvcmFnZSB0byByZWZsZWN0IHRoZSBjbGVhcmVkIHN0b3JlIHNlbGVjdGlvblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPSBbXTtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICBcclxuICAgICAgLy8gRW1pdCBkYXRhIHZpYSBzZXJ2aWNlXHJcbiAgICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvLyBDbGVhciB0aGUgc2VhcmNoIHN0b3JlIHRleHQgd2hlbiBncm91cHMgYXJlIHVwZGF0ZWRcclxuICAgIHRoaXMuc2VhcmNoU3RvcmVUZXh0ID0gJyc7XHJcbiAgfVxyXG4gIFxyXG5cclxuICBSZXNldCgpOiB2b2lkIHtcclxuICAgICAvLyBDbGVhciBzZWxlY3RlZCBncm91cHMsIHN0b3JlcywgYW5kIGxvY2F0aW9uc1xyXG4gIHRoaXMuZmlsdGVyZWRHcm91cHMgPSBbXTtcclxuICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gW107XHJcbiAgdGhpcy5maWx0ZXJlZExvY2F0aW9ucyA9IFtdOyAvLyBSZXNldCBsb2NhdGlvbnMgYXMgd2VsbFxyXG5cclxuICAvLyBDbGVhciBzZWFyY2ggaW5wdXQgZmllbGRzXHJcbiAgdGhpcy5zZWFyY2hMb2NhdGlvblRleHQgPSBcIlwiO1xyXG4gIHRoaXMuc2VhcmNoR3JvdXBUZXh0ID0gXCJcIjtcclxuICB0aGlzLnNlYXJjaFN0b3JlVGV4dCA9IFwiXCI7XHJcblxyXG4gIC8vIEZldGNoIGxvY2F0aW9ucywgZ3JvdXBzLCBhbmQgc3RvcmVzIGFnYWluXHJcbiAgdGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuICB0aGlzLmdldFN0b3JlKCk7XHJcblxyXG4gIC8vIFJlc2V0IHRoZSBmaWx0ZXJzIGluIHNlbGVjdGVkRmlsdGVyc1xyXG4gIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzID0ge1xyXG4gICAgLi4udGhpcy5zZWxlY3RlZEZpbHRlcnMsXHJcbiAgICBzdG9yZXM6IFtdLCAgLy8gQ2xlYXIgc3RvcmVzIHNlbGVjdGlvblxyXG4gICAgZ3JvdXA6IFtdLCAgIC8vIENsZWFyIGdyb3VwcyBzZWxlY3Rpb25cclxuICAgIGxvY2F0aW9uOiBbXSAvLyBDbGVhciBsb2NhdGlvbnMgc2VsZWN0aW9uXHJcbiAgfTtcclxuXHJcbiAgLy8gT25jZSBzdG9yZXMgYXJlIGZldGNoZWQsIG1hcmsgYWxsIGFzIGNoZWNrZWRcclxuICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSB0aGlzLnN0b3Jlcy5tYXAoc3RvcmUgPT4gKHtcclxuICAgICAgLi4uc3RvcmUsXHJcbiAgICAgIGNoZWNrZWQ6IHRydWUgIC8vIE1hcmsgYWxsIHN0b3JlcyBhcyBjaGVja2VkXHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gU3luYyBzZWxlY3RlZEZpbHRlcnMgd2l0aCB0aGUgdXBkYXRlZCBzdG9yZSBzdGF0ZVxyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzID0gdGhpcy5maWx0ZXJlZFN0b3Jlcy5tYXAoc3RvcmUgPT4gKHtcclxuICAgICAgLi4uc3RvcmUsXHJcbiAgICAgIGNoZWNrZWQ6IHRydWVcclxuICAgIH0pKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgbG9jYWxTdG9yYWdlIHdpdGggdGhlIGxhdGVzdCBzZWxlY3RlZEZpbHRlcnNcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoZWFkZXItZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKSk7XHJcblxyXG4gICAgLy8gRW1pdCB0aGUgcmVzZXQgZmlsdGVycyB0byB1cGRhdGUgb3RoZXIgY29tcG9uZW50cyBpZiBuZWVkZWRcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcblxyXG4gICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9LCA1MDApOyAvLyBBZGRpbmcgYSBzbGlnaHQgZGVsYXkgdG8gZW5zdXJlIHN0b3JlcyBhcmUgZmV0Y2hlZCBmaXJzdFxyXG4gXHJcbiAgXHJcbiAgICAvLyBDbG9zZSBkcm9wZG93biBhZnRlciByZXNldCBpZiBuZWNlc3NhcnlcclxuICAgIHRoaXMuT3BlbmRyb3Bkb3duID0gZmFsc2U7XHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gIEFwcGx5KCk6IHZvaWQge1xyXG4gICAgLy8gQ2xvc2UgdGhlIGRyb3Bkb3duXHJcbiAgICB0aGlzLk9wZW5kcm9wZG93biA9IGZhbHNlO1xyXG4gIFxyXG4gICAgLy8gRmV0Y2ggZXhpc3RpbmcgZmlsdGVycyBmcm9tIGxvY2FsU3RvcmFnZVxyXG4gICAgY29uc3QgaGVhZGVyRmlsdGVyczogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwie31cIik7XHJcbiAgXHJcbiAgICAvLyBFbnN1cmUgY3VycmVudCBzZWxlY3Rpb25zIGFyZSByZWZsZWN0ZWRcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxvY2F0aW9uID0gdGhpcy5maWx0ZXJlZExvY2F0aW9ucztcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmdyb3VwID0gdGhpcy5maWx0ZXJlZEdyb3VwcztcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IHRoaXMuZmlsdGVyZWRTdG9yZXM7XHJcbiAgXHJcbiAgXHJcbiAgICAvLyBTdG9yZSB1cGRhdGVkIGZpbHRlcnMgYmFjayBpbiBsb2NhbFN0b3JhZ2VcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICBcclxuICAgIC8vIEVtaXQgdGhlIHVwZGF0ZWQgZmlsdGVycyB2aWEgdGhlIHNlcnZpY2VcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcbiAgICAvLyBUcmlnZ2VyIHJlZnJlc2ggaWYgbmVjZXNzYXJ5XHJcbiAgICB0aGlzLmdzLm1hbmFnZVJlZnJlc2hUcmlnZ2VyLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgXHJcbiAgXHJcblxyXG4gIGZpbHRlckxvY2F0aW9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLnNlYXJjaExvY2F0aW9uVGV4dC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgXHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICAvLyBQcmVzZXJ2ZSB0aGUgY2hlY2tlZCBzdGF0ZSBkdXJpbmcgZmlsdGVyaW5nXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSB0aGlzLmxvY2F0aW9uc1xyXG4gICAgICAgIC5tYXAobG9jYXRpb24gPT4gKHtcclxuICAgICAgICAgIC4uLmxvY2F0aW9uLFxyXG4gICAgICAgICAgY2hlY2tlZDogdGhpcy5maWx0ZXJlZExvY2F0aW9ucy5maW5kKGwgPT4gbC5jaXR5ID09PSBsb2NhdGlvbi5jaXR5KT8uY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5maWx0ZXIobG9jYXRpb24gPT5cclxuICAgICAgICAgIGxvY2F0aW9uLmNpdHkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBjaGVja2VkIHN0YXRlIHdoZW4gc2VhcmNoIHRleHQgaXMgY2xlYXJlZFxyXG4gICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5sb2NhdGlvbnMubWFwKGxvY2F0aW9uID0+ICh7XHJcbiAgICAgICAgLi4ubG9jYXRpb24sXHJcbiAgICAgICAgY2hlY2tlZDogdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24uZmluZCgobDphbnkpID0+IGwuY2l0eSA9PT0gbG9jYXRpb24uY2l0eSk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBcclxuXHJcbiAgZmlsdGVyR3JvdXBzKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9IHRoaXMuc2VhcmNoR3JvdXBUZXh0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIC8vIFByZXNlcnZlIHRoZSBjaGVja2VkIHN0YXRlIGR1cmluZyBmaWx0ZXJpbmdcclxuICAgICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IHRoaXMuZ3JvdXBzRGF0YVxyXG4gICAgICAgIC5tYXAoZ3JvdXAgPT4gKHtcclxuICAgICAgICAgIC4uLmdyb3VwLFxyXG4gICAgICAgICAgY2hlY2tlZDogdGhpcy5maWx0ZXJlZEdyb3Vwcy5maW5kKGcgPT4gZy5ncm91cE5hbWUgPT09IGdyb3VwLmdyb3VwTmFtZSk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgICB9KSlcclxuICAgICAgICAuZmlsdGVyKGdyb3VwID0+XHJcbiAgICAgICAgICBncm91cC5ncm91cE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBjaGVja2VkIHN0YXRlIHdoZW4gc2VhcmNoIHRleHQgaXMgY2xlYXJlZFxyXG4gICAgICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gdGhpcy5ncm91cHNEYXRhLm1hcChncm91cCA9PiAoe1xyXG4gICAgICAgIC4uLmdyb3VwLFxyXG4gICAgICAgIGNoZWNrZWQ6IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmdyb3VwLmZpbmQoKGc6YW55KSA9PiBnLmdyb3VwTmFtZSA9PT0gZ3JvdXAuZ3JvdXBOYW1lKT8uY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gIGZpbHRlclN0b3JlcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLnNlYXJjaFN0b3JlVGV4dC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgXHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICAvLyBQcmVzZXJ2ZSB0aGUgY2hlY2tlZCBzdGF0ZSBkdXJpbmcgZmlsdGVyaW5nXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSB0aGlzLnN0b3Jlc1xyXG4gICAgICAgIC5tYXAoc3RvcmUgPT4gKHtcclxuICAgICAgICAgIC4uLnN0b3JlLFxyXG4gICAgICAgICAgY2hlY2tlZDogdGhpcy5maWx0ZXJlZFN0b3Jlcy5maW5kKHMgPT4gcy5zdG9yZUlkID09PSBzdG9yZS5zdG9yZUlkKT8uY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5maWx0ZXIoc3RvcmUgPT5cclxuICAgICAgICAgIHN0b3JlLnN0b3JlTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHQpXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGNoZWNrZWQgc3RhdGUgd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSB0aGlzLnN0b3Jlcy5tYXAoc3RvcmUgPT4gKHtcclxuICAgICAgICAuLi5zdG9yZSxcclxuICAgICAgICBjaGVja2VkOiB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMuZmluZCgoczphbnkpID0+IHMuc3RvcmVJZCA9PT0gc3RvcmUuc3RvcmVJZCk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBcclxuICBcclxuICBjbG9zZURyb3Bkb3duKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kcm9wZG93bk9wZW4gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIsIFtcIiRldmVudFwiXSlcclxuICBjbGlja091dHNpZGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFxyXG4gICAgICBcIi5kcm9wZG93bi1jb250YWluZXJcIlxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNsaWNrZWRvdXRTaWRlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChcclxuICAgICAgXCIuZHJvcGRvd24xXCJcclxuICAgICk7XHJcbiAgICBpZiAoIWNsaWNrZWRJbnNpZGUpIHtcclxuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XHJcbiAgICB9XHJcbiAgICBpZighY2xpY2tlZG91dFNpZGUpIHtcclxuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duMSgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbn1cclxuaW50ZXJmYWNlIENpdHkge1xyXG4gIGNpdHk6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIExvY2F0aW9uIHtcclxuICBjaXR5OiBDaXR5O1xyXG4gIGNoZWNrZWQ6IGJvb2xlYW47XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIlwiPlxyXG4gICAgPGxhYmVsICpuZ0lmPVwibG9jYXRpb25MYWJlbD8ubGVuZ3RoICE9PSAwXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0IG14LTJcIj57e3NlbGVjdGVkTG9jYXRpb25zTGFiZWwoKX19IFxyXG4gICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmVMb2NhdGlvbigpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgPHBhdGggZD1cIk05IDNMMyA5TTMgM0w5IDlcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgIDwvc3ZnPjwvc3Bhbj4gLS0+XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgPGxhYmVsICpuZ0lmPVwiZ3JvdXBMYWJlbD8ubGVuZ3RoICE9PSAwXCIgIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdCBteC0yXCI+e3tzZWxlY3RlZEdyb3Vwc0xhYmVsKCl9fSBcclxuICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVtb3ZlR3JvdXAoKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNOSAzTDMgOU0zIDNMOSA5XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICA8L3N2Zz48L3NwYW4+IC0tPlxyXG4gICAgPC9sYWJlbD5cclxuICAgIDxsYWJlbCAgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0XCI+e3tzZWxlY3RlZFN0b3Jlc0xhYmVsKCl9fTwvbGFiZWw+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJ3cmFwcGVyIG14LTNcIiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJ1wiPlxyXG48bGliLXNlbGVjdCBbaXRlbXNdPVwiY2xpZW50TGlzdFwiIFttdWx0aV09XCJmYWxzZVwiIFtzZWFyY2hGaWVsZF09XCInY2xpZW50TmFtZSdcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbaWRGaWVsZF09XCInY2xpZW50SWQnXCJcclxuKHNlbGVjdGVkKT1cIm9uQ2xpZW50U2VsZWN0KCRldmVudClcIiBbc2VsZWN0ZWRWYWx1ZXNdPVwiW3NlbGVjdGVkQ2xpZW50XVwiPjwvbGliLXNlbGVjdD5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxpbnB1dCBjbGFzcz1cImZ4LWRhdGUtcmFuZ2UgZm9ybS1jb250cm9sIHBzLTE0XCIgc3R5bGU9XCJtaW4td2lkdGg6IDI2MHB4ICFpbXBvcnRhbnQ7XCIgdHlwZT1cInRleHRcIiBtYXRJbnB1dFxyXG4gICAgICAgIG5neERhdGVyYW5nZXBpY2tlck1kIFtkcm9wc109XCInZG93bidcIiBbb3BlbnNdPVwiJ3JpZ2h0J1wiIFtyYW5nZXNdPVwicmFuZ2VzXCIgW3Nob3dDdXN0b21SYW5nZUxhYmVsXT1cInRydWVcIiBbYXV0b0FwcGx5XT1cInRydWVcIlxyXG4gICAgICAgIFthbHdheXNTaG93Q2FsZW5kYXJzXT1cImZhbHNlXCIgW2tlZXBDYWxlbmRhck9wZW5pbmdXaXRoUmFuZ2VdPVwidHJ1ZVwiIFtzaG93Q2FuY2VsXT1cInRydWVcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWREYXRlUmFuZ2VcIiAoc3RhcnREYXRlQ2hhbmdlZCk9XCJvblN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCIgW2lzQ3VzdG9tRGF0ZV09XCJpc0N1c3RvbURhdGVcIlxyXG4gICAgICAgIFtsb2NhbGVdPVwieyBmb3JtYXQ6ICdERC1NTS1ZWVlZJywgZmlyc3REYXk6IDEsIG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddIH1cIlxyXG4gICAgICAgIChkYXRlc1VwZGF0ZWQpPVwiZGF0ZWNoYW5nZSgkZXZlbnQpXCIgbmFtZT1cImRhdGVyYW5nZVwiIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5kcm9wZG93bigkZXZlbnQpXCIgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTIgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj5cclxuICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibWUtMlwiPkZpbHRlcjwvc3Bhbj4gLS0+XHJcbiAgICAgICAgPHN2ZyBjbGFzcz1cInBsLTNcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSAxMEgxNU0yLjUgNUgxNy41TTcuNSAxNUgxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJPcGVuZHJvcGRvd25cIiBjbGFzcz1cImNhcmQgcC01IGRyb3Bkb3duMSBwb3NpdGlvbi1hYnNvbHV0ZSB6LTEgZW5kLTBcIiBzdHlsZT1cInotaW5kZXg6IDEgIWltcG9ydGFudDtcIiAoY2xpY2tPdXRzaWRlKT1cImNsb3NlRHJvcGRvd24xKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tdGl0bGUgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTJcIj5GaWx0ZXIgT3B0aW9uc1xyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctMjUgbXMtMyBidG4tcmVzaXplXCIgKGNsaWNrKT1cIlJlc2V0KClcIj4gUmVzZXQgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0yNSAgYnRuLXJlc2l6ZVwiIChjbGljayk9XCJBcHBseSgpXCI+QXBwbHk8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgPCEtLSBMb2NhdGlvbiBEcm9wZG93biAtLT5cclxuPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbnRhaW5lclwiIChjbGlja091dHNpZGUpPVwiY2xvc2VEcm9wZG93bigpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taGVhZGVyXCI+XHJcbiAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBkcm9wZG93bi1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRMb2NhdGlvbnNMYWJlbCgpXCJcclxuICAgICAgICAgICAgKGZvY3VzKT1cInRvZ2dsZURyb3Bkb3duKCdsb2NhdGlvbicpXCIgXHJcbiAgICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGxvY2F0aW9ucy4uLlwiXHJcbiAgICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgY3VzdG9tLWRyb3Bkb3duLW1lbnVcIiAqbmdJZj1cImRyb3Bkb3duT3BlbiA9PT0gJ2xvY2F0aW9uJ1wiPlxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWItMiBkcm9wZG93bi1zZWFyY2hcIiBcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggbG9jYXRpb25zLi4uXCIgXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoTG9jYXRpb25UZXh0XCIgXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckxvY2F0aW9ucygpXCIgXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yIGRyb3Bkb3duLWl0ZW0gY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsTG9jYXRpb25zXCIgXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbExvY2F0aW9uc1NlbGVjdGVkKClcIiBcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsTG9jYXRpb25zKCRldmVudClcIiBcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdEFsbExvY2F0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbCBMb2NhdGlvbnNcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZm9ybS1jaGVjayBjdXN0b20tZHJvcGRvd24taXRlbVwiIFxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgbG9jYXRpb24gb2YgZmlsdGVyZWRMb2NhdGlvbnNcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgIFtpZF09XCJsb2NhdGlvbi5jaXR5XCIgXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvY2F0aW9uLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZExvY2F0aW9ucygpXCIgXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbZm9yXT1cImxvY2F0aW9uLmNpdHlcIj5cclxuICAgICAgICAgICAgICAgIHt7IGxvY2F0aW9uLmNpdHkgfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gR3JvdXAgRHJvcGRvd24gLS0+XHJcbjxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250YWluZXIgbXQtM1wiIChjbGlja091dHNpZGUpPVwiY2xvc2VEcm9wZG93bigpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taGVhZGVyXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKCdncm91cCcpXCI+XHJcbiAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBkcm9wZG93bi1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRHcm91cHNMYWJlbCgpXCIgcmVhZG9ubHlcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZ3JvdXBzLi4uXCJcclxuICAgICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBjdXN0b20tZHJvcGRvd24tbWVudVwiICpuZ0lmPVwiZHJvcGRvd25PcGVuID09PSAnZ3JvdXAnXCI+XHJcbiAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBtYi0yIGRyb3Bkb3duLXNlYXJjaFwiIFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBncm91cHMuLi5cIiBcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hHcm91cFRleHRcIiBcclxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyR3JvdXBzKClcIiBcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTIgZHJvcGRvd24taXRlbSBjdXN0b20tZHJvcGRvd24taXRlbVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiBcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIFxyXG4gICAgICAgICAgICAgICAgaWQ9XCJzZWxlY3RBbGxHcm91cHNcIiBcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsR3JvdXBzU2VsZWN0ZWQoKVwiIFxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGxHcm91cHMoJGV2ZW50KVwiIFxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0QWxsR3JvdXBzXCI+XHJcbiAgICAgICAgICAgICAgICBTZWxlY3QgQWxsXHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGZvcm0tY2hlY2sgY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIiBcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZpbHRlcmVkR3JvdXBzXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZ3JvdXAuZ3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ3JvdXAuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVNlbGVjdGVkR3JvdXBzKClcIiBcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwiZ3JvdXAuZ3JvdXBOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBncm91cC5ncm91cE5hbWUgfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG48IS0tIFN0b3JlIERyb3Bkb3duIC0tPlxyXG48ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyIG10LTNcIiAoY2xpY2tPdXRzaWRlKT1cImNsb3NlRHJvcGRvd24oKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bignc3RvcmUnKVwiPlxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHJvcGRvd24taW5wdXQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRTdG9yZXNMYWJlbCgpXCJcclxuICAgICAgICAgICAgcmVhZG9ubHlcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3Qgc3RvcmVzLi4uXCJcclxuICAgICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBjdXN0b20tZHJvcGRvd24tbWVudVwiICpuZ0lmPVwiZHJvcGRvd25PcGVuID09PSAnc3RvcmUnXCI+XHJcbiAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBtYi0yIGRyb3Bkb3duLXNlYXJjaCBcIiBcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3RvcmVzLi4uXCIgXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoU3RvcmVUZXh0XCIgXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlclN0b3JlcygpXCIgXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yIGRyb3Bkb3duLWl0ZW0gY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsU3RvcmVzXCIgXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFN0b3Jlc1NlbGVjdGVkKClcIiBcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsU3RvcmVzKCRldmVudClcIiBcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdEFsbFN0b3Jlc1wiPlxyXG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBmb3JtLWNoZWNrIGN1c3RvbS1kcm9wZG93bi1pdGVtXCIgXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBmaWx0ZXJlZFN0b3Jlc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIFxyXG4gICAgICAgICAgICAgICAgW2lkXT1cInN0b3JlLnN0b3JlSWRcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdG9yZS5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRTdG9yZXMoKVwiIFxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgW2Zvcl09XCJzdG9yZS5zdG9yZUlkXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBzdG9yZS5zdG9yZU5hbWUgfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
@@ -3323,6 +3323,7 @@ class TrafficHeaderComponent {
|
|
|
3323
3323
|
delete headerFilters.stores;
|
|
3324
3324
|
// Update localStorage with the new client selection and empty store data
|
|
3325
3325
|
localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
|
|
3326
|
+
this.getLocations();
|
|
3326
3327
|
// Fetch new stores based on the new client
|
|
3327
3328
|
this.getStore();
|
|
3328
3329
|
// Emit data to the global service
|
|
@@ -3412,7 +3413,6 @@ class TrafficHeaderComponent {
|
|
|
3412
3413
|
const selectedLocations = this.locationLabel = this.filteredLocations
|
|
3413
3414
|
.filter(location => location.checked)
|
|
3414
3415
|
.map(location => location.city);
|
|
3415
|
-
console.log(this.locationLabel);
|
|
3416
3416
|
return selectedLocations.length === 0
|
|
3417
3417
|
? ''
|
|
3418
3418
|
: selectedLocations.length === 1
|
|
@@ -3626,47 +3626,60 @@ class TrafficHeaderComponent {
|
|
|
3626
3626
|
.filter((group) => group.checked)
|
|
3627
3627
|
.map((group) => group.groupName);
|
|
3628
3628
|
if (selectedGroups.length > 0) {
|
|
3629
|
-
|
|
3629
|
+
// If there are selected groups, fetch the stores based on selected groups
|
|
3630
|
+
this.getStore();
|
|
3630
3631
|
}
|
|
3631
3632
|
else {
|
|
3632
|
-
|
|
3633
|
+
// If no groups are selected, clear the stores list
|
|
3634
|
+
this.filteredStores = [];
|
|
3635
|
+
// Also, update localStorage to reflect the cleared store selection
|
|
3636
|
+
this.selectedFilters.stores = [];
|
|
3637
|
+
localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
|
|
3638
|
+
// Emit data via service
|
|
3639
|
+
this.gs.dataRangeValue.next(this.selectedFilters);
|
|
3633
3640
|
}
|
|
3641
|
+
// Clear the search store text when groups are updated
|
|
3634
3642
|
this.searchStoreText = '';
|
|
3635
3643
|
}
|
|
3636
3644
|
Reset() {
|
|
3637
|
-
// Clear groups and
|
|
3645
|
+
// Clear selected groups, stores, and locations
|
|
3638
3646
|
this.filteredGroups = [];
|
|
3639
3647
|
this.filteredStores = [];
|
|
3640
|
-
// Reset locations
|
|
3641
|
-
|
|
3648
|
+
this.filteredLocations = []; // Reset locations as well
|
|
3649
|
+
// Clear search input fields
|
|
3642
3650
|
this.searchLocationText = "";
|
|
3643
3651
|
this.searchGroupText = "";
|
|
3644
3652
|
this.searchStoreText = "";
|
|
3645
|
-
|
|
3646
|
-
|
|
3647
|
-
|
|
3648
|
-
|
|
3653
|
+
// Fetch locations, groups, and stores again
|
|
3654
|
+
this.getLocations();
|
|
3655
|
+
this.getStore();
|
|
3656
|
+
// Reset the filters in selectedFilters
|
|
3657
|
+
this.selectedFilters = {
|
|
3658
|
+
...this.selectedFilters,
|
|
3659
|
+
stores: [],
|
|
3660
|
+
group: [],
|
|
3661
|
+
location: [] // Clear locations selection
|
|
3662
|
+
};
|
|
3663
|
+
// Once stores are fetched, mark all as checked
|
|
3664
|
+
setTimeout(() => {
|
|
3649
3665
|
this.filteredStores = this.stores.map(store => ({
|
|
3650
3666
|
...store,
|
|
3651
|
-
checked: true
|
|
3667
|
+
checked: true // Mark all stores as checked
|
|
3652
3668
|
}));
|
|
3653
|
-
|
|
3654
|
-
|
|
3655
|
-
this.filteredStores = this.stores.map(store => ({
|
|
3669
|
+
// Sync selectedFilters with the updated store state
|
|
3670
|
+
this.selectedFilters.stores = this.filteredStores.map(store => ({
|
|
3656
3671
|
...store,
|
|
3657
|
-
checked:
|
|
3672
|
+
checked: true
|
|
3658
3673
|
}));
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
3663
|
-
|
|
3664
|
-
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
|
|
3668
|
-
this.gs.dataRangeValue.next(resetFilters);
|
|
3669
|
-
this.Opendropdown = false; // Close dropdown if needed
|
|
3674
|
+
// Update localStorage with the latest selectedFilters
|
|
3675
|
+
localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
|
|
3676
|
+
// Emit the reset filters to update other components if needed
|
|
3677
|
+
this.gs.dataRangeValue.next(this.selectedFilters);
|
|
3678
|
+
// Trigger change detection
|
|
3679
|
+
this.cd.detectChanges();
|
|
3680
|
+
}, 500); // Adding a slight delay to ensure stores are fetched first
|
|
3681
|
+
// Close dropdown after reset if necessary
|
|
3682
|
+
this.Opendropdown = false;
|
|
3670
3683
|
}
|
|
3671
3684
|
Apply() {
|
|
3672
3685
|
// Close the dropdown
|
|
@@ -3895,7 +3908,7 @@ class ToolbarComponent {
|
|
|
3895
3908
|
this.setUIProperties(false, false, false, true, false, false);
|
|
3896
3909
|
}
|
|
3897
3910
|
else if (URL == "/profile" || url[2] === "data-mismatch" || url[2] === "employeetraining" || URL == "/notifications/alerts"
|
|
3898
|
-
|| URL == "/manage/brands" || URL == "/manage/users/tango" ||
|
|
3911
|
+
|| URL == "/manage/brands" || URL == "/manage/users/tango" || (url[1] === "tickets" && url[2] === "audit")) {
|
|
3899
3912
|
this.setUIProperties(false, false, false, false, false, false);
|
|
3900
3913
|
}
|
|
3901
3914
|
else if (URL == "/manage/traffic" || url[2] === "traffic" || URL == "/manage/zones" || URL == "/manage/analyse/reports") {
|