ecabs-components 1.0.52 → 1.0.54

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.
@@ -16,7 +16,7 @@ export class EcabsMenuItemsComponent {
16
16
  sanitizer;
17
17
  router;
18
18
  menuItems;
19
- hideSidebar;
19
+ minimizeSidebar;
20
20
  truncateTo = 20;
21
21
  toggleSidebar = new EventEmitter;
22
22
  constructor(unsubscribeService, iconRegistry, sanitizer, router) {
@@ -54,7 +54,7 @@ export class EcabsMenuItemsComponent {
54
54
  }
55
55
  this.menuItems.filter((item) => item.expand)?.map((item) => this.closeMenuGroup(item));
56
56
  const toExpand = this.menuItems.find((item) => JSON.stringify(item) === JSON.stringify(matchedMenuItemFromRoute) && !item.expand);
57
- toExpand.expand = this.hideSidebar ? true : !toExpand.expand;
57
+ toExpand.expand = this.minimizeSidebar ? true : !toExpand.expand;
58
58
  }
59
59
  });
60
60
  }
@@ -73,7 +73,7 @@ export class EcabsMenuItemsComponent {
73
73
  });
74
74
  }
75
75
  toggleItem(item, index) {
76
- if (this.hideSidebar) {
76
+ if (this.minimizeSidebar) {
77
77
  this.toggleSidebar.emit();
78
78
  setTimeout(() => {
79
79
  const element = document.getElementById(`${index}`);
@@ -85,7 +85,7 @@ export class EcabsMenuItemsComponent {
85
85
  ?.map((menu) => {
86
86
  this.closeMenuGroup(menu);
87
87
  });
88
- item.expand = this.hideSidebar ? true : !item.expand;
88
+ item.expand = this.minimizeSidebar ? true : !item.expand;
89
89
  }
90
90
  toggleSubItem(item, siblings) {
91
91
  siblings.filter(({ url }) => url !== item.url).map((filtered) => (filtered.expand = false));
@@ -109,18 +109,18 @@ export class EcabsMenuItemsComponent {
109
109
  }
110
110
  }
111
111
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsMenuItemsComponent, deps: [{ token: i1.UnsubscribeService }, { token: i2.MatIconRegistry }, { token: i3.DomSanitizer }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component });
112
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsMenuItemsComponent, selector: "ecabs-menu-items", inputs: { menuItems: "menuItems", hideSidebar: "hideSidebar", truncateTo: "truncateTo" }, outputs: { toggleSidebar: "toggleSidebar" }, providers: [UnsubscribeService], usesOnChanges: true, ngImport: i0, template: "<ul>\r\n <li\r\n *ngFor=\"let item of menuItems; let i = index\"\r\n class=\"mb-2 hover:text-brand-dark cursor-pointer\"\r\n [ngClass]=\"item.expand ? 'font-bold text-brand-dark' : 'text-gray-500'\"\r\n >\r\n <a (click)=\"toggleItem(item, i)\" [id]=\"i\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n class=\"p-4 h-14 block\"\r\n [ngClass]=\"item.expand ? 'text-brand-dark' : 'text-gray-500'\">\r\n <mat-icon [svgIcon]=\"item.iconResource?.name || ''\"\r\n class=\"inline-block align-middle mr-4 text-inherit hover:text-inherit\">\r\n {{ item.icon }}\r\n </mat-icon>\r\n <span *ngIf=\"!hideSidebar\"\r\n class=\"inline-block align-middle\">\r\n {{ item.title }}\r\n </span>\r\n </a>\r\n <ng-container *ngIf=\"item.expand && item.subItems?.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"firstChildren; context: item\"></ng-container>\r\n </ng-container>\r\n </li>\r\n</ul>\r\n\r\n<ng-template #firstChildren let-subItems=\"subItems\">\r\n <ng-container *ngIf=\"!hideSidebar\">\r\n <ul class=\"ml-12\">\r\n <li *ngFor=\"let item of subItems\" [ngClass]=\"item.expand ? 'font-bold text-brand-dark' : 'text-gray-500'\">\r\n <a #rla=\"routerLinkActive\"\r\n (click)=\"toggleSubItem(item, subItems)\"\r\n class=\"text-sm font-light p-4 h-12 rounded-md hover:text-brand-dark flex items-center\"\r\n [ngClass]=\"item.expand && rla.isActive ? 'text-brand-dark' : 'text-gray-500'\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n [routerLinkActive]=\" item.url ? 'bg-brand-300 text-brand-dark' : ''\"\r\n >\r\n <span [title]=\"item.title\">\r\n {{ item.title | truncate: truncateTo }}\r\n </span>\r\n <div *ngIf=\"item.subItems?.length > 0\" class=\"flex-1 text-right\">\r\n <mat-icon class=\"align-middle hover:text-inherit\" [ngClass]=\"{ 'rotate-90': item.expand }\">\r\n keyboard_arrow_right\r\n </mat-icon>\r\n </div>\r\n </a>\r\n <ng-container *ngIf=\"item.expand && item.subItems?.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"secondChildren; context: item\"></ng-container>\r\n </ng-container>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #secondChildren let-subItems=\"subItems\">\r\n <ul class=\"ml-3\">\r\n <li *ngFor=\"let item of subItems\">\r\n <a #rla=\"routerLinkActive\"\r\n [ngClass]=\"item.expand && rla.isActive ? 'text-brand-dark' : 'text-gray-500'\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n [routerLinkActive]=\" item.url ? 'bg-brand-300 text-brand-dark' : ''\"\r\n class=\"text-xs font-light block p-4 h-12 rounded-md hover:text-brand-dark\">\r\n <span>{{ item.title }}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n</ng-template>\r\n", styles: [":host::ng-deep li.text-brand-dark svg path{fill:currentColor}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i6.EcabsTruncatePipe, name: "truncate" }] });
112
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsMenuItemsComponent, selector: "ecabs-menu-items", inputs: { menuItems: "menuItems", minimizeSidebar: "minimizeSidebar", truncateTo: "truncateTo" }, outputs: { toggleSidebar: "toggleSidebar" }, providers: [UnsubscribeService], usesOnChanges: true, ngImport: i0, template: "<ul>\r\n <li\r\n *ngFor=\"let item of menuItems; let i = index\"\r\n class=\"mb-2 hover:text-brand-dark cursor-pointer\"\r\n [ngClass]=\"item.expand ? 'font-bold text-brand-dark' : 'text-gray-500'\"\r\n >\r\n <a (click)=\"toggleItem(item, i)\" [id]=\"i\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n class=\"p-4 h-14 block\"\r\n [ngClass]=\"item.expand ? 'text-brand-dark' : 'text-gray-500'\">\r\n <mat-icon [svgIcon]=\"item.iconResource?.name || ''\"\r\n class=\"inline-block align-middle mr-4 text-inherit hover:text-inherit\">\r\n {{ item.icon }}\r\n </mat-icon>\r\n <span *ngIf=\"!minimizeSidebar\"\r\n class=\"inline-block align-middle\">\r\n {{ item.title }}\r\n </span>\r\n </a>\r\n <ng-container *ngIf=\"item.expand && item.subItems?.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"firstChildren; context: item\"></ng-container>\r\n </ng-container>\r\n </li>\r\n</ul>\r\n\r\n<ng-template #firstChildren let-subItems=\"subItems\">\r\n <ng-container *ngIf=\"!minimizeSidebar\">\r\n <ul class=\"ml-12\">\r\n <li *ngFor=\"let item of subItems\" [ngClass]=\"item.expand ? 'font-bold text-brand-dark' : 'text-gray-500'\">\r\n <a #rla=\"routerLinkActive\"\r\n (click)=\"toggleSubItem(item, subItems)\"\r\n class=\"text-sm font-light p-4 h-12 rounded-md hover:text-brand-dark flex items-center\"\r\n [ngClass]=\"item.expand && rla.isActive ? 'text-brand-dark' : 'text-gray-500'\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n [routerLinkActive]=\" item.url ? 'bg-brand-300 text-brand-dark' : ''\"\r\n >\r\n <span [title]=\"item.title\">\r\n {{ item.title | truncate: truncateTo }}\r\n </span>\r\n <div *ngIf=\"item.subItems?.length > 0\" class=\"flex-1 text-right\">\r\n <mat-icon class=\"align-middle hover:text-inherit\" [ngClass]=\"{ 'rotate-90': item.expand }\">\r\n keyboard_arrow_right\r\n </mat-icon>\r\n </div>\r\n </a>\r\n <ng-container *ngIf=\"item.expand && item.subItems?.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"secondChildren; context: item\"></ng-container>\r\n </ng-container>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #secondChildren let-subItems=\"subItems\">\r\n <ul class=\"ml-3\">\r\n <li *ngFor=\"let item of subItems\">\r\n <a #rla=\"routerLinkActive\"\r\n [ngClass]=\"item.expand && rla.isActive ? 'text-brand-dark' : 'text-gray-500'\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n [routerLinkActive]=\" item.url ? 'bg-brand-300 text-brand-dark' : ''\"\r\n class=\"text-xs font-light block p-4 h-12 rounded-md hover:text-brand-dark\">\r\n <span>{{ item.title }}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n</ng-template>\r\n", styles: [":host::ng-deep li.text-brand-dark svg path{fill:currentColor}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i6.EcabsTruncatePipe, name: "truncate" }] });
113
113
  }
114
114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsMenuItemsComponent, decorators: [{
115
115
  type: Component,
116
- args: [{ selector: 'ecabs-menu-items', providers: [UnsubscribeService], template: "<ul>\r\n <li\r\n *ngFor=\"let item of menuItems; let i = index\"\r\n class=\"mb-2 hover:text-brand-dark cursor-pointer\"\r\n [ngClass]=\"item.expand ? 'font-bold text-brand-dark' : 'text-gray-500'\"\r\n >\r\n <a (click)=\"toggleItem(item, i)\" [id]=\"i\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n class=\"p-4 h-14 block\"\r\n [ngClass]=\"item.expand ? 'text-brand-dark' : 'text-gray-500'\">\r\n <mat-icon [svgIcon]=\"item.iconResource?.name || ''\"\r\n class=\"inline-block align-middle mr-4 text-inherit hover:text-inherit\">\r\n {{ item.icon }}\r\n </mat-icon>\r\n <span *ngIf=\"!hideSidebar\"\r\n class=\"inline-block align-middle\">\r\n {{ item.title }}\r\n </span>\r\n </a>\r\n <ng-container *ngIf=\"item.expand && item.subItems?.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"firstChildren; context: item\"></ng-container>\r\n </ng-container>\r\n </li>\r\n</ul>\r\n\r\n<ng-template #firstChildren let-subItems=\"subItems\">\r\n <ng-container *ngIf=\"!hideSidebar\">\r\n <ul class=\"ml-12\">\r\n <li *ngFor=\"let item of subItems\" [ngClass]=\"item.expand ? 'font-bold text-brand-dark' : 'text-gray-500'\">\r\n <a #rla=\"routerLinkActive\"\r\n (click)=\"toggleSubItem(item, subItems)\"\r\n class=\"text-sm font-light p-4 h-12 rounded-md hover:text-brand-dark flex items-center\"\r\n [ngClass]=\"item.expand && rla.isActive ? 'text-brand-dark' : 'text-gray-500'\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n [routerLinkActive]=\" item.url ? 'bg-brand-300 text-brand-dark' : ''\"\r\n >\r\n <span [title]=\"item.title\">\r\n {{ item.title | truncate: truncateTo }}\r\n </span>\r\n <div *ngIf=\"item.subItems?.length > 0\" class=\"flex-1 text-right\">\r\n <mat-icon class=\"align-middle hover:text-inherit\" [ngClass]=\"{ 'rotate-90': item.expand }\">\r\n keyboard_arrow_right\r\n </mat-icon>\r\n </div>\r\n </a>\r\n <ng-container *ngIf=\"item.expand && item.subItems?.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"secondChildren; context: item\"></ng-container>\r\n </ng-container>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #secondChildren let-subItems=\"subItems\">\r\n <ul class=\"ml-3\">\r\n <li *ngFor=\"let item of subItems\">\r\n <a #rla=\"routerLinkActive\"\r\n [ngClass]=\"item.expand && rla.isActive ? 'text-brand-dark' : 'text-gray-500'\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n [routerLinkActive]=\" item.url ? 'bg-brand-300 text-brand-dark' : ''\"\r\n class=\"text-xs font-light block p-4 h-12 rounded-md hover:text-brand-dark\">\r\n <span>{{ item.title }}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n</ng-template>\r\n", styles: [":host::ng-deep li.text-brand-dark svg path{fill:currentColor}\n"] }]
116
+ args: [{ selector: 'ecabs-menu-items', providers: [UnsubscribeService], template: "<ul>\r\n <li\r\n *ngFor=\"let item of menuItems; let i = index\"\r\n class=\"mb-2 hover:text-brand-dark cursor-pointer\"\r\n [ngClass]=\"item.expand ? 'font-bold text-brand-dark' : 'text-gray-500'\"\r\n >\r\n <a (click)=\"toggleItem(item, i)\" [id]=\"i\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n class=\"p-4 h-14 block\"\r\n [ngClass]=\"item.expand ? 'text-brand-dark' : 'text-gray-500'\">\r\n <mat-icon [svgIcon]=\"item.iconResource?.name || ''\"\r\n class=\"inline-block align-middle mr-4 text-inherit hover:text-inherit\">\r\n {{ item.icon }}\r\n </mat-icon>\r\n <span *ngIf=\"!minimizeSidebar\"\r\n class=\"inline-block align-middle\">\r\n {{ item.title }}\r\n </span>\r\n </a>\r\n <ng-container *ngIf=\"item.expand && item.subItems?.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"firstChildren; context: item\"></ng-container>\r\n </ng-container>\r\n </li>\r\n</ul>\r\n\r\n<ng-template #firstChildren let-subItems=\"subItems\">\r\n <ng-container *ngIf=\"!minimizeSidebar\">\r\n <ul class=\"ml-12\">\r\n <li *ngFor=\"let item of subItems\" [ngClass]=\"item.expand ? 'font-bold text-brand-dark' : 'text-gray-500'\">\r\n <a #rla=\"routerLinkActive\"\r\n (click)=\"toggleSubItem(item, subItems)\"\r\n class=\"text-sm font-light p-4 h-12 rounded-md hover:text-brand-dark flex items-center\"\r\n [ngClass]=\"item.expand && rla.isActive ? 'text-brand-dark' : 'text-gray-500'\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n [routerLinkActive]=\" item.url ? 'bg-brand-300 text-brand-dark' : ''\"\r\n >\r\n <span [title]=\"item.title\">\r\n {{ item.title | truncate: truncateTo }}\r\n </span>\r\n <div *ngIf=\"item.subItems?.length > 0\" class=\"flex-1 text-right\">\r\n <mat-icon class=\"align-middle hover:text-inherit\" [ngClass]=\"{ 'rotate-90': item.expand }\">\r\n keyboard_arrow_right\r\n </mat-icon>\r\n </div>\r\n </a>\r\n <ng-container *ngIf=\"item.expand && item.subItems?.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"secondChildren; context: item\"></ng-container>\r\n </ng-container>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #secondChildren let-subItems=\"subItems\">\r\n <ul class=\"ml-3\">\r\n <li *ngFor=\"let item of subItems\">\r\n <a #rla=\"routerLinkActive\"\r\n [ngClass]=\"item.expand && rla.isActive ? 'text-brand-dark' : 'text-gray-500'\"\r\n [routerLink]=\"item.url ? [item.url] : []\"\r\n [routerLinkActive]=\" item.url ? 'bg-brand-300 text-brand-dark' : ''\"\r\n class=\"text-xs font-light block p-4 h-12 rounded-md hover:text-brand-dark\">\r\n <span>{{ item.title }}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n</ng-template>\r\n", styles: [":host::ng-deep li.text-brand-dark svg path{fill:currentColor}\n"] }]
117
117
  }], ctorParameters: function () { return [{ type: i1.UnsubscribeService }, { type: i2.MatIconRegistry }, { type: i3.DomSanitizer }, { type: i4.Router }]; }, propDecorators: { menuItems: [{
118
118
  type: Input
119
- }], hideSidebar: [{
119
+ }], minimizeSidebar: [{
120
120
  type: Input
121
121
  }], truncateTo: [{
122
122
  type: Input
123
123
  }], toggleSidebar: [{
124
124
  type: Output
125
125
  }] } });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtbWVudS1pdGVtcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvZWNhYnMtbWVudS1pdGVtcy9lY2Ficy1tZW51LWl0ZW1zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1tZW51LWl0ZW1zL2VjYWJzLW1lbnUtaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBRTFHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsZUFBZSxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQVE5QyxNQUFNLE9BQU8sdUJBQXVCO0lBY2Y7SUFDQTtJQUNBO0lBQ0E7SUFmbkIsU0FBUyxDQUFvQjtJQUc3QixXQUFXLENBQVU7SUFHckIsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUdoQixhQUFhLEdBQUcsSUFBSSxZQUFxQixDQUFDO0lBRTFDLFlBQ21CLGtCQUFzQyxFQUN0QyxZQUE2QixFQUM3QixTQUF1QixFQUN2QixNQUFjO1FBSGQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDN0IsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFRO0lBRWpDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FB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Q0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssd0JBQXdCLENBQUMsR0FBRyxDQUFDO2dCQUMzRCxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDM0IsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLGtCQUFrQixFQUFFLEdBQUcsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzt3R0FwSVUsdUJBQXVCOzRGQUF2Qix1QkFBdUIsa0xBRnZCLENBQUMsa0JBQWtCLENBQUMsK0NDYmpDLHE1RkFrRUE7OzRGRG5EYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0Usa0JBQWtCLGFBR2pCLENBQUMsa0JBQWtCLENBQUM7dUxBSS9CLFNBQVM7c0JBRFIsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTaWRlYmFyTWVudUl0ZW19IGZyb20gXCIuLi9iYXNlL21vZGVscy9zaWRlYmFyLm1vZGVsc1wiO1xyXG5pbXBvcnQge21hdGNoTWVudVRvVXJsfSBmcm9tIFwiLi4vYmFzZS91dGlscy9tZW51LXV0aWxzXCI7XHJcbmltcG9ydCB7RG9tU2FuaXRpemVyfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25TdGFydCwgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7TWF0SWNvblJlZ2lzdHJ5fSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xyXG5pbXBvcnQge1Vuc3Vic2NyaWJlU2VydmljZX0gZnJvbSBcIi4uL2Jhc2Uvc2VydmljZXMvdW5zdWJzY3JpYmUuc2VydmljZVwiO1xyXG5pbXBvcnQge2ZpbHRlciwgZmlyc3QsIHRha2VVbnRpbH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWNhYnMtbWVudS1pdGVtcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VjYWJzLW1lbnUtaXRlbXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VjYWJzLW1lbnUtaXRlbXMuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtVbnN1YnNjcmliZVNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY2Fic01lbnVJdGVtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKVxyXG4gIG1lbnVJdGVtczogU2lkZWJhck1lbnVJdGVtW107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgaGlkZVNpZGViYXI6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgdHJ1bmNhdGVUbyA9IDIwO1xyXG5cclxuICBAT3V0cHV0KClcclxuICB0b2dnbGVTaWRlYmFyID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVuc3Vic2NyaWJlU2VydmljZTogVW5zdWJzY3JpYmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3Qge21lbnVJdGVtc30gPSBjaGFuZ2VzO1xyXG5cclxuICAgIGlmICghIW1lbnVJdGVtcz8uY3VycmVudFZhbHVlPy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgaXRlbXNXaXRoUmVzb3VyY2VzID0gdGhpcy5tZW51SXRlbXMuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0uaWNvblJlc291cmNlKTtcclxuXHJcbiAgICAgIGl0ZW1zV2l0aFJlc291cmNlcz8ubWFwKCh7aWNvblJlc291cmNlfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHtuYW1lLCBwYXRofSA9IGljb25SZXNvdXJjZSA/PyB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5pY29uUmVnaXN0cnkuYWRkU3ZnSWNvbihuYW1lLCB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwocGF0aCkpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMubWF0Y2hNZW51SXRlbXNPbkxvYWQoKTtcclxuICAgICAgdGhpcy50cmFja01lbnUoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVTZXJ2aWNlLmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIG1hdGNoTWVudUl0ZW1zT25Mb2FkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpcnN0KCksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVTZXJ2aWNlLnN1YnNjcmlwdGlvbigpKSxcclxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1hdGNoZWRNZW51SXRlbUZyb21Sb3V0ZTogU2lkZWJhck1lbnVJdGVtID0gbWF0Y2hNZW51VG9VcmwoZXZlbnQudXJsLCB0aGlzLm1lbnVJdGVtcyk7XHJcblxyXG4gICAgICAgIGlmIChtYXRjaGVkTWVudUl0ZW1Gcm9tUm91dGUpIHtcclxuICAgICAgICAgIGlmIChtYXRjaGVkTWVudUl0ZW1Gcm9tUm91dGU/LnN1Ykl0ZW1zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRTdWJtZW51SXRlbSA9IG1hdGNoTWVudVRvVXJsKGV2ZW50LnVybCwgbWF0Y2hlZE1lbnVJdGVtRnJvbVJvdXRlLnN1Ykl0ZW1zKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtYXRjaGVkU3VibWVudUl0ZW0pIHtcclxuICAgICAgICAgICAgICBtYXRjaGVkU3VibWVudUl0ZW0uZXhwYW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMubWVudUl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5leHBhbmQpPy5tYXAoKGl0ZW0pID0+IHRoaXMuY2xvc2VNZW51R3JvdXAoaXRlbSkpO1xyXG4gICAgICAgICAgY29uc3QgdG9FeHBhbmQgPSB0aGlzLm1lbnVJdGVtcy5maW5kKChpdGVtKSA9PiBKU09OLnN0cmluZ2lmeShpdGVtKSA9PT0gSlNPTi5zdHJpbmdpZnkobWF0Y2hlZE1lbnVJdGVtRnJvbVJvdXRlKSAmJiAhaXRlbS5leHBhbmQpO1xyXG4gICAgICAgICAgdG9FeHBhbmQuZXhwYW5kID0gdGhpcy5oaWRlU2lkZWJhciA/IHRydWUgOiAhdG9FeHBhbmQuZXhwYW5kO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgdHJhY2tNZW51KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlU2VydmljZS5zdWJzY3JpcHRpb24oKSksXHJcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpID0+IHtcclxuXHJcbiAgICAgICAgaWYgKCFtYXRjaE1lbnVUb1VybChldmVudC51cmwsIHRoaXMubWVudUl0ZW1zKSkge1xyXG4gICAgICAgICAgdGhpcy5tZW51SXRlbXM/LmZpbHRlcigoaXRlbSkgPT4gISFpdGVtLmV4cGFuZCk/Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTWVudUdyb3VwKGl0ZW0pXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tYXRjaEFjdGl2ZUl0ZW0oZXZlbnQudXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlSXRlbShpdGVtOiBTaWRlYmFyTWVudUl0ZW0sIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmhpZGVTaWRlYmFyKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlU2lkZWJhci5lbWl0KCk7XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aW5kZXh9YCk7XHJcbiAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6ICdzbW9vdGgnfSk7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tZW51SXRlbXNcclxuICAgICAgLmZpbHRlcigobWVudUl0ZW0pID0+IEpTT04uc3RyaW5naWZ5KG1lbnVJdGVtKSAhPT0gSlNPTi5zdHJpbmdpZnkoaXRlbSkgJiYgISFtZW51SXRlbT8uZXhwYW5kKVxyXG4gICAgICA/Lm1hcCgobWVudSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2VNZW51R3JvdXAobWVudSlcclxuICAgICAgfSk7XHJcblxyXG4gICAgaXRlbS5leHBhbmQgPSB0aGlzLmhpZGVTaWRlYmFyID8gdHJ1ZSA6ICFpdGVtLmV4cGFuZDtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVN1Ykl0ZW0oaXRlbTogU2lkZWJhck1lbnVJdGVtLCBzaWJsaW5nczogU2lkZWJhck1lbnVJdGVtW10pOiB2b2lkIHtcclxuICAgIHNpYmxpbmdzLmZpbHRlcigoe3VybH0pID0+IHVybCAhPT0gaXRlbS51cmwpLm1hcCgoZmlsdGVyZWQpID0+IChmaWx0ZXJlZC5leHBhbmQgPSBmYWxzZSkpO1xyXG5cclxuICAgIGlmIChpdGVtLnVybCAhPT0gdGhpcy5yb3V0ZXIudXJsKSB7XHJcbiAgICAgIGl0ZW0uZXhwYW5kID0gIWl0ZW0uZXhwYW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VNZW51R3JvdXAoaXRlbTogU2lkZWJhck1lbnVJdGVtKTogdm9pZCB7XHJcbiAgICBpdGVtLmV4cGFuZCA9IGZhbHNlO1xyXG4gICAgaXRlbS5zdWJJdGVtcz8ubWFwKChzdWJJdGVtKSA9PiAoc3ViSXRlbS5leHBhbmQgPSBmYWxzZSkpO1xyXG4gIH1cclxuXHJcbiAgbWF0Y2hBY3RpdmVJdGVtKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXRjaGVkTWVudUl0ZW1Gcm9tUm91dGU6IFNpZGViYXJNZW51SXRlbSA9IG1hdGNoTWVudVRvVXJsKHVybCwgdGhpcy5tZW51SXRlbXMpO1xyXG5cclxuICAgIGlmIChtYXRjaGVkTWVudUl0ZW1Gcm9tUm91dGU/LnN1Ykl0ZW1zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoZWRTdWJtZW51SXRlbTogU2lkZWJhck1lbnVJdGVtID0gbWF0Y2hNZW51VG9VcmwodXJsLCBtYXRjaGVkTWVudUl0ZW1Gcm9tUm91dGUuc3ViSXRlbXMpO1xyXG5cclxuICAgICAgdGhpcy5tZW51SXRlbXNcclxuICAgICAgICA/LmZpbmQoKGl0ZW0pID0+IGl0ZW0udXJsID09PSBtYXRjaGVkTWVudUl0ZW1Gcm9tUm91dGUudXJsKVxyXG4gICAgICAgID8uc3ViSXRlbXMubWFwKChzdWJJdGVtKSA9PiB7XHJcbiAgICAgICAgc3ViSXRlbS5leHBhbmQgPSBzdWJJdGVtPy51cmwgPT09IG1hdGNoZWRTdWJtZW51SXRlbT8udXJsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPHVsPlxyXG4gIDxsaVxyXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWVudUl0ZW1zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgIGNsYXNzPVwibWItMiBob3Zlcjp0ZXh0LWJyYW5kLWRhcmsgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwiaXRlbS5leHBhbmQgPyAnZm9udC1ib2xkIHRleHQtYnJhbmQtZGFyaycgOiAndGV4dC1ncmF5LTUwMCdcIlxyXG4gID5cclxuICAgIDxhIChjbGljayk9XCJ0b2dnbGVJdGVtKGl0ZW0sIGkpXCIgW2lkXT1cImlcIlxyXG4gICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS51cmwgPyBbaXRlbS51cmxdIDogW11cIlxyXG4gICAgICAgY2xhc3M9XCJwLTQgaC0xNCBibG9ja1wiXHJcbiAgICAgICBbbmdDbGFzc109XCJpdGVtLmV4cGFuZCA/ICd0ZXh0LWJyYW5kLWRhcmsnIDogJ3RleHQtZ3JheS01MDAnXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCJpdGVtLmljb25SZXNvdXJjZT8ubmFtZSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1ibG9jayBhbGlnbi1taWRkbGUgbXItNCB0ZXh0LWluaGVyaXQgaG92ZXI6dGV4dC1pbmhlcml0XCI+XHJcbiAgICAgICAge3sgaXRlbS5pY29uIH19XHJcbiAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiIWhpZGVTaWRlYmFyXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpbmxpbmUtYmxvY2sgYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAge3sgaXRlbS50aXRsZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2E+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5leHBhbmQgJiYgaXRlbS5zdWJJdGVtcz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlyc3RDaGlsZHJlbjsgY29udGV4dDogaXRlbVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9saT5cclxuPC91bD5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZmlyc3RDaGlsZHJlbiBsZXQtc3ViSXRlbXM9XCJzdWJJdGVtc1wiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZVNpZGViYXJcIj5cclxuICAgIDx1bCBjbGFzcz1cIm1sLTEyXCI+XHJcbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdWJJdGVtc1wiIFtuZ0NsYXNzXT1cIml0ZW0uZXhwYW5kID8gJ2ZvbnQtYm9sZCB0ZXh0LWJyYW5kLWRhcmsnIDogJ3RleHQtZ3JheS01MDAnXCI+XHJcbiAgICAgICAgPGEgI3JsYT1cInJvdXRlckxpbmtBY3RpdmVcIlxyXG4gICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTdWJJdGVtKGl0ZW0sIHN1Ykl0ZW1zKVwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbGlnaHQgcC00IGgtMTIgcm91bmRlZC1tZCBob3Zlcjp0ZXh0LWJyYW5kLWRhcmsgZmxleCBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uZXhwYW5kICYmIHJsYS5pc0FjdGl2ZSA/ICd0ZXh0LWJyYW5kLWRhcmsnIDogJ3RleHQtZ3JheS01MDAnXCJcclxuICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnVybCA/IFtpdGVtLnVybF0gOiBbXVwiXHJcbiAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiIGl0ZW0udXJsID8gJ2JnLWJyYW5kLTMwMCB0ZXh0LWJyYW5kLWRhcmsnIDogJydcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJpdGVtLnRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7IGl0ZW0udGl0bGUgfCB0cnVuY2F0ZTogdHJ1bmNhdGVUbyB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uc3ViSXRlbXM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXgtMSB0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFsaWduLW1pZGRsZSBob3Zlcjp0ZXh0LWluaGVyaXRcIiBbbmdDbGFzc109XCJ7ICdyb3RhdGUtOTAnOiBpdGVtLmV4cGFuZCB9XCI+XHJcbiAgICAgICAgICAgICAga2V5Ym9hcmRfYXJyb3dfcmlnaHRcclxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5leHBhbmQgJiYgaXRlbS5zdWJJdGVtcz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlY29uZENoaWxkcmVuOyBjb250ZXh0OiBpdGVtXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNzZWNvbmRDaGlsZHJlbiBsZXQtc3ViSXRlbXM9XCJzdWJJdGVtc1wiPlxyXG4gIDx1bCBjbGFzcz1cIm1sLTNcIj5cclxuICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdWJJdGVtc1wiPlxyXG4gICAgICA8YSAjcmxhPVwicm91dGVyTGlua0FjdGl2ZVwiXHJcbiAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uZXhwYW5kICYmIHJsYS5pc0FjdGl2ZSA/ICd0ZXh0LWJyYW5kLWRhcmsnIDogJ3RleHQtZ3JheS01MDAnXCJcclxuICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS51cmwgPyBbaXRlbS51cmxdIDogW11cIlxyXG4gICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCIgaXRlbS51cmwgPyAnYmctYnJhbmQtMzAwIHRleHQtYnJhbmQtZGFyaycgOiAnJ1wiXHJcbiAgICAgICAgIGNsYXNzPVwidGV4dC14cyBmb250LWxpZ2h0IGJsb2NrIHAtNCBoLTEyIHJvdW5kZWQtbWQgaG92ZXI6dGV4dC1icmFuZC1kYXJrXCI+XHJcbiAgICAgICAgPHNwYW4+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgPC9hPlxyXG4gICAgPC9saT5cclxuICA8L3VsPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtbWVudS1pdGVtcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvZWNhYnMtbWVudS1pdGVtcy9lY2Ficy1tZW51LWl0ZW1zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1tZW51LWl0ZW1zL2VjYWJzLW1lbnUtaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBRTFHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsZUFBZSxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQVE5QyxNQUFNLE9BQU8sdUJBQXVCO0lBY2Y7SUFDQTtJQUNBO0lBQ0E7SUFmbkIsU0FBUyxDQUFvQjtJQUc3QixlQUFlLENBQVU7SUFHekIsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUdoQixhQUFhLEdBQUcsSUFBSSxZQUFxQixDQUFDO0lBRTFDLFlBQ21CLGtCQUFzQyxFQUN0QyxZQUE2QixFQUM3QixTQUF1QixFQUN2QixNQUFjO1FBSGQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDN0IsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFRO0lBRWpDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FB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Q0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssd0JBQXdCLENBQUMsR0FBRyxDQUFDO2dCQUMzRCxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDM0IsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLGtCQUFrQixFQUFFLEdBQUcsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzt3R0FwSVUsdUJBQXVCOzRGQUF2Qix1QkFBdUIsMExBRnZCLENBQUMsa0JBQWtCLENBQUMsK0NDYmpDLDY1RkFrRUE7OzRGRG5EYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0Usa0JBQWtCLGFBR2pCLENBQUMsa0JBQWtCLENBQUM7dUxBSS9CLFNBQVM7c0JBRFIsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTaWRlYmFyTWVudUl0ZW19IGZyb20gXCIuLi9iYXNlL21vZGVscy9zaWRlYmFyLm1vZGVsc1wiO1xyXG5pbXBvcnQge21hdGNoTWVudVRvVXJsfSBmcm9tIFwiLi4vYmFzZS91dGlscy9tZW51LXV0aWxzXCI7XHJcbmltcG9ydCB7RG9tU2FuaXRpemVyfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25TdGFydCwgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7TWF0SWNvblJlZ2lzdHJ5fSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xyXG5pbXBvcnQge1Vuc3Vic2NyaWJlU2VydmljZX0gZnJvbSBcIi4uL2Jhc2Uvc2VydmljZXMvdW5zdWJzY3JpYmUuc2VydmljZVwiO1xyXG5pbXBvcnQge2ZpbHRlciwgZmlyc3QsIHRha2VVbnRpbH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWNhYnMtbWVudS1pdGVtcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VjYWJzLW1lbnUtaXRlbXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VjYWJzLW1lbnUtaXRlbXMuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtVbnN1YnNjcmliZVNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY2Fic01lbnVJdGVtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKVxyXG4gIG1lbnVJdGVtczogU2lkZWJhck1lbnVJdGVtW107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgbWluaW1pemVTaWRlYmFyOiBib29sZWFuO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHRydW5jYXRlVG8gPSAyMDtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgdG9nZ2xlU2lkZWJhciA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZVNlcnZpY2U6IFVuc3Vic2NyaWJlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IHttZW51SXRlbXN9ID0gY2hhbmdlcztcclxuXHJcbiAgICBpZiAoISFtZW51SXRlbXM/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW1zV2l0aFJlc291cmNlcyA9IHRoaXMubWVudUl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gISFpdGVtLmljb25SZXNvdXJjZSk7XHJcblxyXG4gICAgICBpdGVtc1dpdGhSZXNvdXJjZXM/Lm1hcCgoe2ljb25SZXNvdXJjZX0pID0+IHtcclxuICAgICAgICBjb25zdCB7bmFtZSwgcGF0aH0gPSBpY29uUmVzb3VyY2UgPz8ge307XHJcblxyXG4gICAgICAgIHRoaXMuaWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb24obmFtZSwgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHBhdGgpKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm1hdGNoTWVudUl0ZW1zT25Mb2FkKCk7XHJcbiAgICAgIHRoaXMudHJhY2tNZW51KCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlU2VydmljZS5kZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBtYXRjaE1lbnVJdGVtc09uTG9hZCgpOiB2b2lkIHtcclxuICAgIHRoaXMucm91dGVyLmV2ZW50c1xyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaXJzdCgpLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlU2VydmljZS5zdWJzY3JpcHRpb24oKSksXHJcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpID0+IHtcclxuICAgICAgICBjb25zdCBtYXRjaGVkTWVudUl0ZW1Gcm9tUm91dGU6IFNpZGViYXJNZW51SXRlbSA9IG1hdGNoTWVudVRvVXJsKGV2ZW50LnVybCwgdGhpcy5tZW51SXRlbXMpO1xyXG5cclxuICAgICAgICBpZiAobWF0Y2hlZE1lbnVJdGVtRnJvbVJvdXRlKSB7XHJcbiAgICAgICAgICBpZiAobWF0Y2hlZE1lbnVJdGVtRnJvbVJvdXRlPy5zdWJJdGVtcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkU3VibWVudUl0ZW0gPSBtYXRjaE1lbnVUb1VybChldmVudC51cmwsIG1hdGNoZWRNZW51SXRlbUZyb21Sb3V0ZS5zdWJJdGVtcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFN1Ym1lbnVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgbWF0Y2hlZFN1Ym1lbnVJdGVtLmV4cGFuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uZXhwYW5kKT8ubWFwKChpdGVtKSA9PiB0aGlzLmNsb3NlTWVudUdyb3VwKGl0ZW0pKTtcclxuICAgICAgICAgIGNvbnN0IHRvRXhwYW5kID0gdGhpcy5tZW51SXRlbXMuZmluZCgoaXRlbSkgPT4gSlNPTi5zdHJpbmdpZnkoaXRlbSkgPT09IEpTT04uc3RyaW5naWZ5KG1hdGNoZWRNZW51SXRlbUZyb21Sb3V0ZSkgJiYgIWl0ZW0uZXhwYW5kKTtcclxuICAgICAgICAgIHRvRXhwYW5kLmV4cGFuZCA9IHRoaXMubWluaW1pemVTaWRlYmFyID8gdHJ1ZSA6ICF0b0V4cGFuZC5leHBhbmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICB0cmFja01lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVTZXJ2aWNlLnN1YnNjcmlwdGlvbigpKSxcclxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkgPT4ge1xyXG5cclxuICAgICAgICBpZiAoIW1hdGNoTWVudVRvVXJsKGV2ZW50LnVybCwgdGhpcy5tZW51SXRlbXMpKSB7XHJcbiAgICAgICAgICB0aGlzLm1lbnVJdGVtcz8uZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0uZXhwYW5kKT8ubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VNZW51R3JvdXAoaXRlbSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1hdGNoQWN0aXZlSXRlbShldmVudC51cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVJdGVtKGl0ZW06IFNpZGViYXJNZW51SXRlbSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubWluaW1pemVTaWRlYmFyKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlU2lkZWJhci5lbWl0KCk7XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aW5kZXh9YCk7XHJcbiAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6ICdzbW9vdGgnfSk7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tZW51SXRlbXNcclxuICAgICAgLmZpbHRlcigobWVudUl0ZW0pID0+IEpTT04uc3RyaW5naWZ5KG1lbnVJdGVtKSAhPT0gSlNPTi5zdHJpbmdpZnkoaXRlbSkgJiYgISFtZW51SXRlbT8uZXhwYW5kKVxyXG4gICAgICA/Lm1hcCgobWVudSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2VNZW51R3JvdXAobWVudSlcclxuICAgICAgfSk7XHJcblxyXG4gICAgaXRlbS5leHBhbmQgPSB0aGlzLm1pbmltaXplU2lkZWJhciA/IHRydWUgOiAhaXRlbS5leHBhbmQ7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTdWJJdGVtKGl0ZW06IFNpZGViYXJNZW51SXRlbSwgc2libGluZ3M6IFNpZGViYXJNZW51SXRlbVtdKTogdm9pZCB7XHJcbiAgICBzaWJsaW5ncy5maWx0ZXIoKHt1cmx9KSA9PiB1cmwgIT09IGl0ZW0udXJsKS5tYXAoKGZpbHRlcmVkKSA9PiAoZmlsdGVyZWQuZXhwYW5kID0gZmFsc2UpKTtcclxuXHJcbiAgICBpZiAoaXRlbS51cmwgIT09IHRoaXMucm91dGVyLnVybCkge1xyXG4gICAgICBpdGVtLmV4cGFuZCA9ICFpdGVtLmV4cGFuZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlTWVudUdyb3VwKGl0ZW06IFNpZGViYXJNZW51SXRlbSk6IHZvaWQge1xyXG4gICAgaXRlbS5leHBhbmQgPSBmYWxzZTtcclxuICAgIGl0ZW0uc3ViSXRlbXM/Lm1hcCgoc3ViSXRlbSkgPT4gKHN1Ykl0ZW0uZXhwYW5kID0gZmFsc2UpKTtcclxuICB9XHJcblxyXG4gIG1hdGNoQWN0aXZlSXRlbSh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgbWF0Y2hlZE1lbnVJdGVtRnJvbVJvdXRlOiBTaWRlYmFyTWVudUl0ZW0gPSBtYXRjaE1lbnVUb1VybCh1cmwsIHRoaXMubWVudUl0ZW1zKTtcclxuXHJcbiAgICBpZiAobWF0Y2hlZE1lbnVJdGVtRnJvbVJvdXRlPy5zdWJJdGVtcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBtYXRjaGVkU3VibWVudUl0ZW06IFNpZGViYXJNZW51SXRlbSA9IG1hdGNoTWVudVRvVXJsKHVybCwgbWF0Y2hlZE1lbnVJdGVtRnJvbVJvdXRlLnN1Ykl0ZW1zKTtcclxuXHJcbiAgICAgIHRoaXMubWVudUl0ZW1zXHJcbiAgICAgICAgPy5maW5kKChpdGVtKSA9PiBpdGVtLnVybCA9PT0gbWF0Y2hlZE1lbnVJdGVtRnJvbVJvdXRlLnVybClcclxuICAgICAgICA/LnN1Ykl0ZW1zLm1hcCgoc3ViSXRlbSkgPT4ge1xyXG4gICAgICAgIHN1Ykl0ZW0uZXhwYW5kID0gc3ViSXRlbT8udXJsID09PSBtYXRjaGVkU3VibWVudUl0ZW0/LnVybDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjx1bD5cclxuICA8bGlcclxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1lbnVJdGVtczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICBjbGFzcz1cIm1iLTIgaG92ZXI6dGV4dC1icmFuZC1kYXJrIGN1cnNvci1wb2ludGVyXCJcclxuICAgIFtuZ0NsYXNzXT1cIml0ZW0uZXhwYW5kID8gJ2ZvbnQtYm9sZCB0ZXh0LWJyYW5kLWRhcmsnIDogJ3RleHQtZ3JheS01MDAnXCJcclxuICA+XHJcbiAgICA8YSAoY2xpY2spPVwidG9nZ2xlSXRlbShpdGVtLCBpKVwiIFtpZF09XCJpXCJcclxuICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0udXJsID8gW2l0ZW0udXJsXSA6IFtdXCJcclxuICAgICAgIGNsYXNzPVwicC00IGgtMTQgYmxvY2tcIlxyXG4gICAgICAgW25nQ2xhc3NdPVwiaXRlbS5leHBhbmQgPyAndGV4dC1icmFuZC1kYXJrJyA6ICd0ZXh0LWdyYXktNTAwJ1wiPlxyXG4gICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwiaXRlbS5pY29uUmVzb3VyY2U/Lm5hbWUgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbmxpbmUtYmxvY2sgYWxpZ24tbWlkZGxlIG1yLTQgdGV4dC1pbmhlcml0IGhvdmVyOnRleHQtaW5oZXJpdFwiPlxyXG4gICAgICAgIHt7IGl0ZW0uaWNvbiB9fVxyXG4gICAgICA8L21hdC1pY29uPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIiFtaW5pbWl6ZVNpZGViYXJcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImlubGluZS1ibG9jayBhbGlnbi1taWRkbGVcIj5cclxuICAgICAgICB7eyBpdGVtLnRpdGxlIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmV4cGFuZCAmJiBpdGVtLnN1Ykl0ZW1zPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaXJzdENoaWxkcmVuOyBjb250ZXh0OiBpdGVtXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2xpPlxyXG48L3VsPlxyXG5cclxuPG5nLXRlbXBsYXRlICNmaXJzdENoaWxkcmVuIGxldC1zdWJJdGVtcz1cInN1Ykl0ZW1zXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtaW5pbWl6ZVNpZGViYXJcIj5cclxuICAgIDx1bCBjbGFzcz1cIm1sLTEyXCI+XHJcbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdWJJdGVtc1wiIFtuZ0NsYXNzXT1cIml0ZW0uZXhwYW5kID8gJ2ZvbnQtYm9sZCB0ZXh0LWJyYW5kLWRhcmsnIDogJ3RleHQtZ3JheS01MDAnXCI+XHJcbiAgICAgICAgPGEgI3JsYT1cInJvdXRlckxpbmtBY3RpdmVcIlxyXG4gICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTdWJJdGVtKGl0ZW0sIHN1Ykl0ZW1zKVwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbGlnaHQgcC00IGgtMTIgcm91bmRlZC1tZCBob3Zlcjp0ZXh0LWJyYW5kLWRhcmsgZmxleCBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uZXhwYW5kICYmIHJsYS5pc0FjdGl2ZSA/ICd0ZXh0LWJyYW5kLWRhcmsnIDogJ3RleHQtZ3JheS01MDAnXCJcclxuICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnVybCA/IFtpdGVtLnVybF0gOiBbXVwiXHJcbiAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiIGl0ZW0udXJsID8gJ2JnLWJyYW5kLTMwMCB0ZXh0LWJyYW5kLWRhcmsnIDogJydcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJpdGVtLnRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7IGl0ZW0udGl0bGUgfCB0cnVuY2F0ZTogdHJ1bmNhdGVUbyB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uc3ViSXRlbXM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXgtMSB0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFsaWduLW1pZGRsZSBob3Zlcjp0ZXh0LWluaGVyaXRcIiBbbmdDbGFzc109XCJ7ICdyb3RhdGUtOTAnOiBpdGVtLmV4cGFuZCB9XCI+XHJcbiAgICAgICAgICAgICAga2V5Ym9hcmRfYXJyb3dfcmlnaHRcclxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5leHBhbmQgJiYgaXRlbS5zdWJJdGVtcz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlY29uZENoaWxkcmVuOyBjb250ZXh0OiBpdGVtXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNzZWNvbmRDaGlsZHJlbiBsZXQtc3ViSXRlbXM9XCJzdWJJdGVtc1wiPlxyXG4gIDx1bCBjbGFzcz1cIm1sLTNcIj5cclxuICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdWJJdGVtc1wiPlxyXG4gICAgICA8YSAjcmxhPVwicm91dGVyTGlua0FjdGl2ZVwiXHJcbiAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uZXhwYW5kICYmIHJsYS5pc0FjdGl2ZSA/ICd0ZXh0LWJyYW5kLWRhcmsnIDogJ3RleHQtZ3JheS01MDAnXCJcclxuICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS51cmwgPyBbaXRlbS51cmxdIDogW11cIlxyXG4gICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCIgaXRlbS51cmwgPyAnYmctYnJhbmQtMzAwIHRleHQtYnJhbmQtZGFyaycgOiAnJ1wiXHJcbiAgICAgICAgIGNsYXNzPVwidGV4dC14cyBmb250LWxpZ2h0IGJsb2NrIHAtNCBoLTEyIHJvdW5kZWQtbWQgaG92ZXI6dGV4dC1icmFuZC1kYXJrXCI+XHJcbiAgICAgICAgPHNwYW4+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgPC9hPlxyXG4gICAgPC9saT5cclxuICA8L3VsPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=